You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
leaflet-playback/dist/leaflet-playback.min.js

4 lines
7.9 KiB
JavaScript

/*! leaflet-playback v0.1.2 - https://github.com/noerw/leaflet-playback#readme - 2016-04-22 */
!function(a,b){!function(){function a(){this.start=null,this.end=null,this.action=null,this.from=0,this.to=0,this.duration=0}function b(){this.points={},this.get=function(a,b){return e(this.points,b,a)}}function c(c){var d=new b;for(var e in c)if(c.hasOwnProperty(e)){var g=[];c[e].forEach(function(b){var c=b.match(/([^\s]+)/),d=new a;if(-1!=b.indexOf("cut to")){d.start=parseFloat(c[1]),d.action=f.CUT;var e=b.match(/[^\s]+ cut to ([^\s]+)/);d.from=parseFloat(e[1]),d.to=d.from,d.end=d.start}if(-1!=b.indexOf("ease to")){d.end=parseFloat(c[1]),d.action=f.EASE,d.from=0;var e=b.match(/[^\s]+ ease to ([^\s]+)/);d.to=parseFloat(e[1])}if(-1!=b.indexOf("linear to")){d.end=parseFloat(c[1]),d.action=f.LINEAR,d.from=0;var e=b.match(/[^\s]+ linear to ([^\s]+)/);d.to=parseFloat(e[1])}g.push(d)}),g.forEach(function(a,b){a.action!==f.EASE&&a.action!=f.LINEAR||(a.start=g[b-1].end,a.from=g[b-1].to),a.duration=a.end-a.start}),g.forEach(function(a,b){a.action===f.CUT&&g[b+1]&&(a.end=g[b+1].start)}),d.points[e]=g}return d}function d(a,b,c){if(!a[c])return null;for(var d=0;d<a[c].length;d++){var e=a[c][d];if(e.start<=b&&e.end>b)return e}return null}function e(a,b,c){if(!a[c])return void console.warn(c+" not found on storyboard");var e;if(e=b>a[c][a[c].length-1].end?a[c][a[c].length-1]:d(a,b,c),!e)return null;if(e.action===f.CUT)return e.from;if(e.action===f.EASE){var g=(b-e.start)/e.duration;g=Math.max(Math.min(g,1),0);var h;h=(g*=2)<1?.5*g*g:-.5*(--g*(g-2)-1);var i=e.from+h*(e.to-e.from);return i}if(e.action===f.LINEAR){var g=(b-e.start)/e.duration;g=Math.max(Math.min(g,1),0);var i=e.from+g*(e.to-e.from);return i}}var f={CUT:0,EASE:1,LINEAR:2};window.STORYLINE={parseStoryline:c}}();var c=function(a){this.sequence=null,this.updateloop=null,this.updateCallback=a,this.timeNow=performance.now()};c.prototype.update=function(a,b){var c=this,d=.04,e=b,f={};for(var g in this.sequence.points)f[g]=this.sequence.get(g,b);"number"==typeof a&&(d=a-this.timeNow,this.timeNow=a),e=this.updateCallback(f,d,a),this.updateloop=requestAnimationFrame(function(a){"stop"!==e&&c.update(a,e)})},c.prototype.start=function(a){return this.timeNow=performance.now(),this.sequence?(this.update("start",a),!0):(console.error("no sequence loaded!"),!1)},c.prototype.stop=function(){cancelAnimationFrame(this.updateloop),this.updateloop=null},c.prototype.loadSequence=function(a){this.sequence=STORYLINE.parseStoryline(a)},window.sequencer=function(a,b){return new c(a,b)},L.Playhead=L.Layer.extend({options:{cursorStyle:{color:"#44aacc",interactive:!1,weight:2},shadowStyle:{stroke:!1,fillOpacity:.7,fillColor:"#000000",interactive:!1},min:-180,max:180},initialize:function(a){L.Util.setOptions(this,a),this.currentPos=this.options.min,this.cursor=L.polyline([]),this.shadowL=L.rectangle([[-180,-180],[180,0]]),this.shadowR=L.rectangle([[-180,0],[180,180]]),this.cursor.setStyle(this.options.cursorStyle),this.shadowL.setStyle(this.options.shadowStyle),this.shadowR.setStyle(this.options.shadowStyle),this.setPosition(this.options.min)},onAdd:function(a){this.cursor.addTo(a),this.shadowL.addTo(a),this.shadowR.addTo(a),this.setMinMax({min:this.options.min,max:this.options.max})},onRemove:function(a){this.cursor.removeFrom(a),this.shadowL.removeFrom(a),this.shadowR.removeFrom(a)},setPosition:function(a){var b=this.options.max,c=a-b,d=this.options.min,e=a-d;return c>0?this.currentPos=d+c:0>e?this.currentPos=b+e:this.currentPos=a,this.cursor.setLatLngs([[-180,this.currentPos],[180,this.currentPos]]),this},getPosition:function(){return this.currentPos},setMinMax:function(a){if(a.min>=a.max)return!1;if(this.options.max=a.max,this.options.min=a.min,this._map){var b=this._map.getBounds();return this.shadowL.setBounds([[-180,b._southWest.lng],[180,a.min]]),this.shadowR.setBounds([[-180,a.max],[180,b._northEast.lng]]),this}},getMinMax:function(){return{min:this.options.min,max:this.options.max}}}),L.playhead=function(a){return new L.Playhead(a)},L.Control.Playback=L.Control.extend({includes:L.Mixin.Events,options:{position:"topleft",speed:1,start:1,stop:14,loop:!0,clickHandlers:!0,btnPlay:'<span style="font-size: 130%" title="PLAY">&blacktriangleright;</span>',btnPause:'<span style="font-size: 80%" title="PAUSE">&marker;&marker;</span>',btnStop:'<span title="STOP">&FilledSmallSquare;</span>',btnLoop:'<span style="font-size: 130%" title="LOOP">&lrhar;</span>'},initialize:function(a){function b(a,b,d){var e=c.playhead.getPosition(),f=e+b*c.options.speed/1e3,g=c.playhead.getMinMax();return!c.options.loop&&f>=g.max?(c.togglePlay(),c.playhead.setPosition(g.min),"stop"):(c.playhead.setPosition(f),c.fire("sequenceData",{playbackPosition:f,sequenceData:a,deltaTime:b,timestamp:d},!1),f)}var c=this;L.Util.setOptions(this,a),this.playing=!1,this.playhead=L.playhead({min:this.options.start,max:this.options.stop}),this.sequencer=window.sequencer(b)},onAdd:function(a){this.playhead.addTo(a),this.options.clickHandlers&&a.on("click",this._onClick,this),a.on("moveend",function(){this.playhead.setMinMax(this.playhead.getMinMax())},this);var b=L.DomUtil.create("div","leaflet-bar horizontal");return L.DomEvent.disableClickPropagation(b),this.options.btnPlay&&(this.btnPlay=L.DomUtil.create("a","",b),this.btnPlay.innerHTML=this.options.btnPlay,this.btnPlay.href="#",L.DomEvent.addListener(this.btnPlay,"click",this.togglePlay,this)),this.options.btnStop&&(this.btnStop=L.DomUtil.create("a","",b),this.btnStop.innerHTML=this.options.btnStop,this.btnStop.href="#",L.DomEvent.addListener(this.btnStop,"click",this.stop,this)),this.options.btnLoop&&(this.btnLoop=L.DomUtil.create("a",this.options.loop?"enabled":"",b),this.btnLoop.innerHTML=this.options.btnLoop,this.btnLoop.href="#",L.DomEvent.addListener(this.btnLoop,"click",this.toggleLoop,this)),b},onRemove:function(a){this.playhead.removeFrom(a),a.off("click",this._onClick,this),a.off("moveend",this),this.btnPlay&&L.DomEvent.removeListener(this.btnPlay,"click",this.togglePlay,this),this.btnStop&&L.DomEvent.removeListener(this.btnStop,"click",this.stop,this),this.btnLoop&&L.DomEvent.removeListener(this.btnLoop,"click",this.toggleLoop,this)},_onClick:function(a){var b=this.playhead.getMinMax(),c=this.playhead.getPosition(),d=a.latlng.lng,e=a.originalEvent.shiftKey,f=a.originalEvent.ctrlKey;f&&this.playhead.setMinMax({min:b.min,max:d}),e&&this.playhead.setMinMax({min:d,max:b.max}),b=this.playhead.getMinMax(),(b.min>c||b.max<c)&&this.playhead.setPosition(d),e||f||d>=b.min&&d<b.max&&this.playhead.setPosition(d)},toggleLoop:function(a){return"undefined"!=typeof a&&L.DomEvent.preventDefault(a),this.options.loop=!this.options.loop,this._map&&this.btnLoop&&this.btnLoop.classList.toggle("enabled"),this},togglePlay:function(a){return"undefined"!=typeof a&&L.DomEvent.preventDefault(a),this.playing?(this.sequencer.stop(),this._map&&this.btnStop&&(this.btnPlay.innerHTML=this.options.btnPlay),this.fire("pause",{playbackPosition:this.playhead.getPosition()}),this.playing=!1):this.sequencer.start(this.playhead.getPosition())&&(this._map&&this.btnPlay&&(this.btnPlay.innerHTML=this.options.btnPause),this.fire("play",{playbackPosition:this.playhead.getPosition()}),this.playing=!0),this},play:function(a){return this.playing||("number"==typeof a&&this.playhead.setPosition(a),this.togglePlay()),this},pause:function(a){return a&&this.playhead.setPosition(this.playhead.getMinMax().min),this.playing&&this.togglePlay(),this},stop:function(a){return"undefined"!=typeof a&&L.DomEvent.preventDefault(a),this.pause(!0)},loadSequence:function(a,b,c,d){return"number"==typeof b&&"number"==typeof c&&this.playhead.setMinMax({min:b,max:c}),d&&(this.options.speed=d),this.playhead.setPosition(this.playhead.getMinMax().min),this.sequencer.loadSequence(a),this},getPlaybackPosition:function(){return this.playhead.getPosition()},setPlaybackPosition:function(a){return this.playhead.setPosition(a),this}}),L.control.playback=function(a){return new L.Control.Playback(a)},b.playback=a}({},function(){return this}());
//# sourceMappingURL=leaflet-playback.min.js.map