popcornjs-rails 1.3.0 → 1.5.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -0
- data/Gemfile +0 -0
- data/README.md +0 -0
- data/Rakefile +0 -0
- data/lib/popcornjs-rails.rb +0 -0
- data/lib/popcornjs-rails/version.rb +1 -1
- data/popcornjs-rails.gemspec +0 -0
- data/vendor/assets/javascripts/popcorn-complete.js +7353 -4557
- data/vendor/assets/javascripts/popcorn-complete.min.js +201 -152
- data/vendor/assets/javascripts/popcorn-ie8.js +1050 -684
- data/vendor/assets/javascripts/popcorn-ie8.min.js +67 -59
- data/vendor/assets/javascripts/popcorn.js +692 -214
- data/vendor/assets/javascripts/popcorn.min.js +49 -40
- metadata +6 -6
@@ -1,160 +1,209 @@
|
|
1
1
|
/*
|
2
|
-
* popcorn.js version 1.
|
2
|
+
* popcorn.js version 1.5.6
|
3
3
|
* http://popcornjs.org
|
4
4
|
*
|
5
5
|
* Copyright 2011, Mozilla Foundation
|
6
6
|
* Licensed under the MIT license
|
7
7
|
*/
|
8
8
|
|
9
|
-
(function(
|
10
|
-
r.oRequestAnimationFrame||
|
11
|
-
"string")try{
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
{
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
d.
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
f.
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
true
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
if(
|
71
|
-
|
72
|
-
"
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
return
|
80
|
-
|
81
|
-
(function(
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
(
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
"
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
(function(
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
A);
|
116
|
-
|
9
|
+
(function(p,e){function l(a){C.put.call(this,a)}function d(a){this.parent=a;this.byStart=[{start:-1,end:-1}];this.byEnd=[{start:-1,end:-1}];this.animating=[];this.endIndex=this.startIndex=0;this.previousUpdateTime=-1;this.count=1}function b(a,c){return function(){if(f.plugin.debug)return a.apply(this,arguments);try{return a.apply(this,arguments)}catch(n){f.plugin.errors.push({plugin:c,thrown:n,source:a.toString()});this.emit("pluginerror",f.plugin.errors)}}}if(e.addEventListener){var h=Array.prototype,
|
10
|
+
i=Object.prototype,g=h.forEach,k=h.slice,r=i.hasOwnProperty,m=i.toString,t=p.Popcorn,q=[],o=false,u={events:{hash:{},apis:{}}},E=function(){return p.requestAnimationFrame||p.webkitRequestAnimationFrame||p.mozRequestAnimationFrame||p.oRequestAnimationFrame||p.msRequestAnimationFrame||function(a){p.setTimeout(a,16)}}(),C={put:function(a){for(var c in a)if(a.hasOwnProperty(c))this[c]=a[c]}},f=function(a,c){return new f.p.init(a,c||null)};f.version="1.5.6";f.isSupported=true;f.instances=[];f.p=f.prototype=
|
11
|
+
{init:function(a,c){var n,j=this;if(typeof a==="function")if(e.readyState==="complete")a(e,f);else{q.push(a);if(!o){o=true;var w=function(){e.removeEventListener("DOMContentLoaded",w,false);for(var F=0,v=q.length;F<v;F++)q[F].call(e,f);q=null};e.addEventListener("DOMContentLoaded",w,false)}}else{if(typeof a==="string")try{n=e.querySelector(a)}catch(x){throw Error("Popcorn.js Error: Invalid media element selector: "+a);}this.media=n||a;n=this.media.nodeName&&this.media.nodeName.toLowerCase()||"video";
|
12
|
+
this[n]=this.media;this.options=f.extend({},c)||{};this.id=this.options.id||f.guid(n);if(f.byId(this.id))throw Error("Popcorn.js Error: Cannot use duplicate ID ("+this.id+")");this.isDestroyed=false;this.data={running:{cue:[]},timeUpdate:f.nop,disabled:{},events:{},hooks:{},history:[],state:{volume:this.media.volume},trackRefs:{},trackEvents:new d(this)};f.instances.push(this);var z=function(){if(j.media.currentTime<0)j.media.currentTime=0;j.media.removeEventListener("loadedmetadata",z,false);var F,
|
13
|
+
v,L,y,s;F=j.media.duration;F=F!=F?Number.MAX_VALUE:F+1;f.addTrackEvent(j,{start:F,end:F});if(!j.isDestroyed){j.data.durationChange=function(){var B=j.media.duration,Q=B+1,K=j.data.trackEvents.byStart,M=j.data.trackEvents.byEnd;K.pop();M.pop();for(var D=M.length-1;D>0;D--)M[D].end>B&&j.removeTrackEvent(M[D]._id);for(M=0;M<K.length;M++)K[M].end>B&&j.removeTrackEvent(K[M]._id);j.data.trackEvents.byEnd.push({start:Q,end:Q});j.data.trackEvents.byStart.push({start:Q,end:Q})};j.media.addEventListener("durationchange",
|
14
|
+
j.data.durationChange,false)}if(j.options.frameAnimation){j.data.timeUpdate=function(){f.timeUpdate(j,{});f.forEach(f.manifest,function(B,Q){if(v=j.data.running[Q]){y=v.length;for(var K=0;K<y;K++){L=v[K];(s=L._natives)&&s.frame&&s.frame.call(j,{},L,j.currentTime())}}});j.emit("timeupdate");!j.isDestroyed&&E(j.data.timeUpdate)};!j.isDestroyed&&E(j.data.timeUpdate)}else{j.data.timeUpdate=function(B){f.timeUpdate(j,B)};j.isDestroyed||j.media.addEventListener("timeupdate",j.data.timeUpdate,false)}};j.media.addEventListener("error",
|
15
|
+
function(){j.error=j.media.error},false);j.media.readyState>=1?z():j.media.addEventListener("loadedmetadata",z,false);return this}}};f.p.init.prototype=f.p;f.byId=function(a){for(var c=f.instances,n=c.length,j=0;j<n;j++)if(c[j].id===a)return c[j];return null};f.forEach=function(a,c,n){if(!a||!c)return{};n=n||this;var j,w;if(g&&a.forEach===g)return a.forEach(c,n);if(m.call(a)==="[object NodeList]"){j=0;for(w=a.length;j<w;j++)c.call(n,a[j],j,a);return a}for(j in a)r.call(a,j)&&c.call(n,a[j],j,a);return a};
|
16
|
+
f.extend=function(a){var c=k.call(arguments,1);f.forEach(c,function(n){for(var j in n)a[j]=n[j]});return a};f.extend(f,{noConflict:function(a){if(a)p.Popcorn=t;return f},error:function(a){throw Error(a);},guid:function(a){f.guid.counter++;return(a?a:"")+(+new Date+f.guid.counter)},sizeOf:function(a){var c=0,n;for(n in a)c++;return c},isArray:Array.isArray||function(a){return m.call(a)==="[object Array]"},nop:function(){},position:function(a){if(!a.parentNode)return null;a=a.getBoundingClientRect();
|
17
|
+
var c={},n=e.documentElement,j=e.body,w,x,z;w=n.clientTop||j.clientTop||0;x=n.clientLeft||j.clientLeft||0;z=p.pageYOffset&&n.scrollTop||j.scrollTop;n=p.pageXOffset&&n.scrollLeft||j.scrollLeft;w=Math.ceil(a.top+z-w);x=Math.ceil(a.left+n-x);for(var F in a)c[F]=Math.round(a[F]);return f.extend({},c,{top:w,left:x})},disable:function(a,c){if(!a.data.disabled[c]){a.data.disabled[c]=true;if(c in f.registryByName&&a.data.running[c])for(var n=a.data.running[c].length-1,j;n>=0;n--){j=a.data.running[c][n];j._natives.end.call(a,
|
18
|
+
null,j);a.emit("trackend",f.extend({},j,{plugin:j.type,type:"trackend"}))}return a}},enable:function(a,c){if(a.data.disabled[c]){a.data.disabled[c]=false;if(c in f.registryByName&&a.data.running[c])for(var n=a.data.running[c].length-1,j;n>=0;n--){j=a.data.running[c][n];j._natives.start.call(a,null,j);a.emit("trackstart",f.extend({},j,{plugin:j.type,type:"trackstart",track:j}))}return a}},destroy:function(a){var c=a.data.events,n=a.data.trackEvents,j,w,x,z;for(w in c){j=c[w];for(x in j)delete j[x];
|
19
|
+
c[w]=null}for(z in f.registryByName)f.removePlugin(a,z);n.byStart.length=0;n.byEnd.length=0;if(!a.isDestroyed){a.data.timeUpdate&&a.media.removeEventListener("timeupdate",a.data.timeUpdate,false);a.isDestroyed=true}f.instances.splice(f.instances.indexOf(a),1)}});f.guid.counter=1;f.extend(f.p,function(){var a={};f.forEach("load play pause currentTime playbackRate volume duration preload playbackRate autoplay loop controls muted buffered readyState seeking paused played seekable ended".split(/\s+/g),
|
20
|
+
function(c){a[c]=function(n){var j;if(typeof this.media[c]==="function"){if(n!=null&&/play|pause/.test(c))this.media.currentTime=f.util.toSeconds(n);this.media[c]();return this}if(n!=null){j=this.media[c];this.media[c]=n;j!==n&&this.emit("attrchange",{attribute:c,previousValue:j,currentValue:n});return this}return this.media[c]}});return a}());f.forEach("enable disable".split(" "),function(a){f.p[a]=function(c){return f[a](this,c)}});f.extend(f.p,{roundTime:function(){return Math.round(this.media.currentTime)},
|
21
|
+
exec:function(a,c,n){var j=arguments.length,w="trackadded",x,z;try{z=f.util.toSeconds(a)}catch(F){}if(typeof z==="number")a=z;if(typeof a==="number"&&j===2){n=c;c=a;a=f.guid("cue")}else if(j===1)c=-1;else if(x=this.getTrackEvent(a)){this.data.trackEvents.remove(a);l.end(this,x);f.removeTrackEvent.ref(this,a);w="cuechange";if(typeof a==="string"&&j===2){if(typeof c==="number")n=x._natives.start;if(typeof c==="function"){n=c;c=x.start}}}else if(j>=2){if(typeof c==="string"){try{z=f.util.toSeconds(c)}catch(v){}c=
|
22
|
+
z}if(typeof c==="number")n=n||f.nop();if(typeof c==="function"){n=c;c=-1}}j={id:a,start:c,end:c+1,_running:false,_natives:{start:n||f.nop,end:f.nop,type:"cue"}};if(x)j=f.extend(x,j);if(w==="cuechange"){j._id=j.id||j._id||f.guid(j._natives.type);this.data.trackEvents.add(j);l.start(this,j);this.timeUpdate(this,null,true);f.addTrackEvent.ref(this,j);this.emit(w,f.extend({},j,{id:a,type:w,previousValue:{time:x.start,fn:x._natives.start},currentValue:{time:c,fn:n||f.nop},track:x}))}else f.addTrackEvent(this,
|
23
|
+
j);return this},mute:function(a){a=a==null||a===true?"muted":"unmuted";if(a==="unmuted"){this.media.muted=false;this.media.volume=this.data.state.volume}if(a==="muted"){this.data.state.volume=this.media.volume;this.media.muted=true}this.emit(a);return this},unmute:function(a){return this.mute(a==null?false:!a)},position:function(){return f.position(this.media)},toggle:function(a){return f[this.data.disabled[a]?"enable":"disable"](this,a)},defaults:function(a,c){if(f.isArray(a)){f.forEach(a,function(n){for(var j in n)this.defaults(j,
|
24
|
+
n[j])},this);return this}if(!this.options.defaults)this.options.defaults={};this.options.defaults[a]||(this.options.defaults[a]={});f.extend(this.options.defaults[a],c);return this}});f.Events={UIEvents:"blur focus focusin focusout load resize scroll unload",MouseEvents:"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave click dblclick",Events:"loadstart progress suspend emptied stalled play pause error loadedmetadata loadeddata waiting playing canplay canplaythrough seeking seeked timeupdate ended ratechange durationchange volumechange"};
|
25
|
+
f.Events.Natives=f.Events.UIEvents+" "+f.Events.MouseEvents+" "+f.Events.Events;u.events.apiTypes=["UIEvents","MouseEvents","Events"];(function(a,c){for(var n=u.events.apiTypes,j=a.Natives.split(/\s+/g),w=0,x=j.length;w<x;w++)c.hash[j[w]]=true;n.forEach(function(z){c.apis[z]={};for(var F=a[z].split(/\s+/g),v=F.length,L=0;L<v;L++)c.apis[z][F[L]]=true})})(f.Events,u.events);f.events={isNative:function(a){return!!u.events.hash[a]},getInterface:function(a){if(!f.events.isNative(a))return false;var c=
|
26
|
+
u.events,n=c.apiTypes;c=c.apis;for(var j=0,w=n.length,x,z;j<w;j++){z=n[j];if(c[z][a]){x=z;break}}return x},all:f.Events.Natives.split(/\s+/g),fn:{trigger:function(a,c){var n,j=this.data.events[a];if(j){if(n=f.events.getInterface(a)){n=e.createEvent(n);n.initEvent(a,true,true,p,1);this.media.dispatchEvent(n);return this}for(n=j.slice();n.length;)n.shift().call(this,c)}return this},listen:function(a,c){var n=this,j=true,w=f.events.hooks[a],x,z;if(typeof c!=="function")throw Error("Popcorn.js Error: Listener is not a function");
|
27
|
+
if(!this.data.events[a]){this.data.events[a]=[];j=false}if(w){w.add&&w.add.call(this,{},c);if(w.bind)a=w.bind;if(w.handler){z=c;c=function(F){w.handler.call(n,F,z)}}j=true;if(!this.data.events[a]){this.data.events[a]=[];j=false}}this.data.events[a].push(c);!j&&f.events.all.indexOf(a)>-1&&this.media.addEventListener(a,function(F){if(n.data.events[a])for(x=n.data.events[a].slice();x.length;)x.shift().call(n,F)},false);return this},unlisten:function(a,c){var n,j=this.data.events[a];if(j){if(typeof c===
|
28
|
+
"string"){for(n=0;n<j.length;n++)j[n].name===c&&j.splice(n--,1);return this}else if(typeof c==="function"){for(;n!==-1;){n=j.indexOf(c);n!==-1&&j.splice(n,1)}return this}this.data.events[a]=null;return this}}},hooks:{canplayall:{bind:"canplaythrough",add:function(a,c){var n=false;if(this.media.readyState){setTimeout(function(){c.call(this,a)}.bind(this),0);n=true}this.data.hooks.canplayall={fired:n}},handler:function(a,c){if(!this.data.hooks.canplayall.fired){c.call(this,a);this.data.hooks.canplayall.fired=
|
29
|
+
true}}}}};f.forEach([["trigger","emit"],["listen","on"],["unlisten","off"]],function(a){f.p[a[0]]=f.p[a[1]]=f.events.fn[a[0]]});l.start=function(a,c){if(c.end>a.media.currentTime&&c.start<=a.media.currentTime&&!c._running){c._running=true;a.data.running[c._natives.type].push(c);if(!a.data.disabled[c._natives.type]){c._natives.start.call(a,null,c);a.emit("trackstart",f.extend({},c,{plugin:c._natives.type,type:"trackstart",track:c}))}}};l.end=function(a,c){var n;if((c.end<=a.media.currentTime||c.start>
|
30
|
+
a.media.currentTime)&&c._running){n=a.data.running[c._natives.type];c._running=false;n.splice(n.indexOf(c),1);if(!a.data.disabled[c._natives.type]){c._natives.end.call(a,null,c);a.emit("trackend",f.extend({},c,{plugin:c._natives.type,type:"trackend",track:c}))}}};d.prototype.where=function(a){return(this.parent.getTrackEvents()||[]).filter(function(c){var n,j;if(!a)return true;for(n in a){j=a[n];if(c[n]&&c[n]===j||c._natives[n]&&c._natives[n]===j)return true}return false})};d.prototype.add=function(a){var c=
|
31
|
+
this.byStart,n=this.byEnd,j;a&&a._id&&this.parent.data.history.push(a._id);a.start=f.util.toSeconds(a.start,this.parent.options.framerate);a.end=f.util.toSeconds(a.end,this.parent.options.framerate);for(j=c.length-1;j>=0;j--)if(a.start>=c[j].start){c.splice(j+1,0,a);break}for(c=n.length-1;c>=0;c--)if(a.end>n[c].end){n.splice(c+1,0,a);break}j<=this.parent.data.trackEvents.startIndex&&a.start<=this.parent.data.trackEvents.previousUpdateTime&&this.parent.data.trackEvents.startIndex++;c<=this.parent.data.trackEvents.endIndex&&
|
32
|
+
a.end<this.parent.data.trackEvents.previousUpdateTime&&this.parent.data.trackEvents.endIndex++;this.count++};d.prototype.remove=function(a){if(a instanceof l)a=a.id;if(typeof a==="object"){this.where(a).forEach(function(y){this.removeTrackEvent(y._id)},this.parent);return this}var c,n,j;j=this.byStart.length;for(var w=0,x=0,z=[],F=[],v=[],L=[];--j>-1;){c=this.byStart[w];n=this.byEnd[w];if(!c._id){z.push(c);F.push(n)}if(c._id){c._id!==a&&z.push(c);n._id!==a&&F.push(n);if(c._id===a)x=w}w++}j=this.animating.length;
|
33
|
+
w=0;if(j)for(;--j>-1;){c=this.animating[w];c._id||v.push(c);c._id&&c._id!==a&&v.push(c);w++}x<=this.startIndex&&this.startIndex--;x<=this.endIndex&&this.endIndex--;this.byStart=z;this.byEnd=F;this.animating=v;this.count--;j=this.parent.data.history.length;for(w=0;w<j;w++)this.parent.data.history[w]!==a&&L.push(this.parent.data.history[w]);this.parent.data.history=L};f.addTrackEvent=function(a,c){var n;if(!(c instanceof l)){if((c=new l(c))&&c._natives&&c._natives.type&&a.options.defaults&&a.options.defaults[c._natives.type]){n=
|
34
|
+
f.extend({},c);f.extend(c,a.options.defaults[c._natives.type],n)}if(c._natives){c._id=c.id||c._id||f.guid(c._natives.type);if(c._natives._setup){c._natives._setup.call(a,c);a.emit("tracksetup",f.extend({},c,{plugin:c._natives.type,type:"tracksetup",track:c}))}}a.data.trackEvents.add(c);l.start(a,c);this.timeUpdate(a,null,true);c._id&&f.addTrackEvent.ref(a,c);a.emit("trackadded",f.extend({},c,c._natives?{plugin:c._natives.type}:{},{type:"trackadded",track:c}))}};f.addTrackEvent.ref=function(a,c){a.data.trackRefs[c._id]=
|
35
|
+
c;return a};f.removeTrackEvent=function(a,c){var n=a.getTrackEvent(c);if(n){n._natives._teardown&&n._natives._teardown.call(a,n);a.data.trackEvents.remove(c);f.removeTrackEvent.ref(a,c);n._natives&&a.emit("trackremoved",f.extend({},n,{plugin:n._natives.type,type:"trackremoved",track:n}))}};f.removeTrackEvent.ref=function(a,c){delete a.data.trackRefs[c];return a};f.getTrackEvents=function(a){var c=[];a=a.data.trackEvents.byStart;for(var n=a.length,j=0,w;j<n;j++){w=a[j];w._id&&c.push(w)}return c};f.getTrackEvents.ref=
|
36
|
+
function(a){return a.data.trackRefs};f.getTrackEvent=function(a,c){return a.data.trackRefs[c]};f.getTrackEvent.ref=function(a,c){return a.data.trackRefs[c]};f.getLastTrackEventId=function(a){return a.data.history[a.data.history.length-1]};f.timeUpdate=function(a,c){var n=a.media.currentTime,j=a.data.trackEvents.previousUpdateTime,w=a.data.trackEvents,x=w.endIndex,z=w.startIndex,F=w.byStart.length,v=w.byEnd.length,L=f.registryByName,y,s,B;if(j<=n){for(;w.byEnd[x]&&w.byEnd[x].end<=n;){y=w.byEnd[x];
|
37
|
+
s=(j=y._natives)&&j.type;if(!j||L[s]||a[s]){if(y._running===true){y._running=false;B=a.data.running[s];B.splice(B.indexOf(y),1);if(!a.data.disabled[s]){j.end.call(a,c,y);a.emit("trackend",f.extend({},y,{plugin:s,type:"trackend",track:y}))}}x++}else{f.removeTrackEvent(a,y._id);return}}for(;w.byStart[z]&&w.byStart[z].start<=n;){y=w.byStart[z];s=(j=y._natives)&&j.type;if(!j||L[s]||a[s]){if(y.end>n&&y._running===false){y._running=true;a.data.running[s].push(y);if(!a.data.disabled[s]){j.start.call(a,c,
|
38
|
+
y);a.emit("trackstart",f.extend({},y,{plugin:s,type:"trackstart",track:y}))}}z++}else{f.removeTrackEvent(a,y._id);return}}}else if(j>n){for(;w.byStart[z]&&w.byStart[z].start>n;){y=w.byStart[z];s=(j=y._natives)&&j.type;if(!j||L[s]||a[s]){if(y._running===true){y._running=false;B=a.data.running[s];B.splice(B.indexOf(y),1);if(!a.data.disabled[s]){j.end.call(a,c,y);a.emit("trackend",f.extend({},y,{plugin:s,type:"trackend",track:y}))}}z--}else{f.removeTrackEvent(a,y._id);return}}for(;w.byEnd[x]&&w.byEnd[x].end>
|
39
|
+
n;){y=w.byEnd[x];s=(j=y._natives)&&j.type;if(!j||L[s]||a[s]){if(y.start<=n&&y._running===false){y._running=true;a.data.running[s].push(y);if(!a.data.disabled[s]){j.start.call(a,c,y);a.emit("trackstart",f.extend({},y,{plugin:s,type:"trackstart",track:y}))}}x--}else{f.removeTrackEvent(a,y._id);return}}}w.endIndex=x;w.startIndex=z;w.previousUpdateTime=n;w.byStart.length<F&&w.startIndex--;w.byEnd.length<v&&w.endIndex--};f.extend(f.p,{getTrackEvents:function(){return f.getTrackEvents.call(null,this)},
|
40
|
+
getTrackEvent:function(a){return f.getTrackEvent.call(null,this,a)},getLastTrackEventId:function(){return f.getLastTrackEventId.call(null,this)},removeTrackEvent:function(a){f.removeTrackEvent.call(null,this,a);return this},removePlugin:function(a){f.removePlugin.call(null,this,a);return this},timeUpdate:function(a){f.timeUpdate.call(null,this,a);return this},destroy:function(){f.destroy.call(null,this);return this}});f.manifest={};f.registry=[];f.registryByName={};f.plugin=function(a,c,n){if(f.protect.natives.indexOf(a.toLowerCase())>=
|
41
|
+
0)f.error("'"+a+"' is a protected function name");else{var j=typeof c==="function",w=["start","end","type","manifest"],x=["_setup","_teardown","start","end","frame"],z={},F=function(y,s){y=y||f.nop;s=s||f.nop;return function(){y.apply(this,arguments);s.apply(this,arguments)}};f.manifest[a]=n=n||c.manifest||{};x.forEach(function(y){c[y]=b(c[y]||f.nop,a)});var v=function(y,s){if(!s)return this;if(s.ranges&&f.isArray(s.ranges)){f.forEach(s.ranges,function(M){M=f.extend({},s,M);delete M.ranges;this[a](M)},
|
42
|
+
this);return this}var B=s._natives={},Q="",K;f.extend(B,y);s._natives.type=s._natives.plugin=a;s._running=false;B.start=B.start||B["in"];B.end=B.end||B.out;if(s.once)B.end=F(B.end,function(){this.removeTrackEvent(s._id)});B._teardown=F(function(){var M=k.call(arguments),D=this.data.running[B.type];M.unshift(null);M[1]._running&&D.splice(D.indexOf(s),1)&&B.end.apply(this,M);M[1]._running=false;this.emit("trackend",f.extend({},s,{plugin:B.type,type:"trackend",track:f.getTrackEvent(this,s.id||s._id)}))},
|
43
|
+
B._teardown);B._teardown=F(B._teardown,function(){this.emit("trackteardown",f.extend({},s,{plugin:a,type:"trackteardown",track:f.getTrackEvent(this,s.id||s._id)}))});s.compose=s.compose||[];if(typeof s.compose==="string")s.compose=s.compose.split(" ");s.effect=s.effect||[];if(typeof s.effect==="string")s.effect=s.effect.split(" ");s.compose=s.compose.concat(s.effect);s.compose.forEach(function(M){Q=f.compositions[M]||{};x.forEach(function(D){B[D]=F(B[D],Q[D])})});s._natives.manifest=n;if(!("start"in
|
44
|
+
s))s.start=s["in"]||0;if(!s.end&&s.end!==0)s.end=s.out||Number.MAX_VALUE;if(!r.call(s,"toString"))s.toString=function(){var M=["start: "+s.start,"end: "+s.end,"id: "+(s.id||s._id)];s.target!=null&&M.push("target: "+s.target);return a+" ( "+M.join(", ")+" )"};if(!s.target){K="options"in n&&n.options;s.target=K&&"target"in K&&K.target}if(!s._id&&s._natives)s._id=f.guid(s._natives.type);if(s instanceof l){if(s._natives){s._id=s.id||s._id||f.guid(s._natives.type);if(s._natives._setup){s._natives._setup.call(this,
|
45
|
+
s);this.emit("tracksetup",f.extend({},s,{plugin:s._natives.type,type:"tracksetup",track:s}))}}this.data.trackEvents.add(s);l.start(this,s);this.timeUpdate(this,null,true);s._id&&f.addTrackEvent.ref(this,s)}else f.addTrackEvent(this,s);f.forEach(y,function(M,D){w.indexOf(D)===-1&&this.on(D,M)},this);return this};f.p[a]=z[a]=function(y,s){var B,Q;if(y&&!s)s=y;else if(B=this.getTrackEvent(y)){Q=s;var K={},M;for(M in B)if(r.call(Q,M)&&r.call(B,M))K[M]=B[M];if(B._natives._update){this.data.trackEvents.remove(B);
|
46
|
+
if(r.call(s,"start"))B.start=s.start;if(r.call(s,"end"))B.end=s.end;l.end(this,B);j&&c.call(this,B);B._natives._update.call(this,B,s);this.data.trackEvents.add(B);l.start(this,B)}else{f.extend(B,s);this.data.trackEvents.remove(y);B._natives._teardown&&B._natives._teardown.call(this,B);f.removeTrackEvent.ref(this,y);if(j)v.call(this,c.call(this,B),B);else{B._id=B.id||B._id||f.guid(B._natives.type);if(B._natives&&B._natives._setup){B._natives._setup.call(this,B);this.emit("tracksetup",f.extend({},B,
|
47
|
+
{plugin:B._natives.type,type:"tracksetup",track:B}))}this.data.trackEvents.add(B);l.start(this,B);this.timeUpdate(this,null,true);f.addTrackEvent.ref(this,B)}this.emit("trackchange",{id:B.id,type:"trackchange",previousValue:K,currentValue:B,track:B});return this}B._natives.type!=="cue"&&this.emit("trackchange",{id:B.id,type:"trackchange",previousValue:K,currentValue:Q,track:B});return this}else s.id=y;this.data.running[a]=this.data.running[a]||[];B=f.extend({},this.options.defaults&&this.options.defaults[a]||
|
48
|
+
{},s);v.call(this,j?c.call(this,B):c,B);return this};n&&f.extend(c,{manifest:n});var L={fn:z[a],definition:c,base:c,parents:[],name:a};f.registry.push(f.extend(z,L,{type:a}));f.registryByName[a]=L;return z}};f.plugin.errors=[];f.plugin.debug=f.version==="1.5.6";f.removePlugin=function(a,c){if(!c){c=a;a=f.p;if(f.protect.natives.indexOf(c.toLowerCase())>=0){f.error("'"+c+"' is a protected function name");return}var n=f.registry.length,j;for(j=0;j<n;j++)if(f.registry[j].name===c){f.registry.splice(j,
|
49
|
+
1);delete f.registryByName[c];delete f.manifest[c];delete a[c];return}}n=a.data.trackEvents.byStart;j=a.data.trackEvents.byEnd;var w=a.data.trackEvents.animating,x,z;x=0;for(z=n.length;x<z;x++){if(n[x]&&n[x]._natives&&n[x]._natives.type===c){n[x]._natives._teardown&&n[x]._natives._teardown.call(a,n[x]);n.splice(x,1);x--;z--;if(a.data.trackEvents.startIndex<=x){a.data.trackEvents.startIndex--;a.data.trackEvents.endIndex--}}j[x]&&j[x]._natives&&j[x]._natives.type===c&&j.splice(x,1)}x=0;for(z=w.length;x<
|
50
|
+
z;x++)if(w[x]&&w[x]._natives&&w[x]._natives.type===c){w.splice(x,1);x--;z--}};f.compositions={};f.compose=function(a,c,n){f.manifest[a]=n||c.manifest||{};f.compositions[a]=c};f.plugin.effect=f.effect=f.compose;var G=/^(?:\.|#|\[)/;f.dom={debug:false,find:function(a,c){var n=null;c=c||e;if(a){if(!G.test(a)){n=e.getElementById(a);if(n!==null)return n}try{n=c.querySelector(a)}catch(j){if(f.dom.debug)throw Error(j);}}return n}};var A=/\?/,O={ajax:null,url:"",data:"",dataType:"",success:f.nop,type:"GET",
|
51
|
+
async:true,contentType:"application/x-www-form-urlencoded; charset=UTF-8"};f.xhr=function(a){a.dataType=a.dataType&&a.dataType.toLowerCase()||null;if(a.dataType&&(a.dataType==="jsonp"||a.dataType==="script"))f.xhr.getJSONP(a.url,a.success,a.dataType==="script");else{a=f.extend({},O,a);a.ajax=new XMLHttpRequest;if(a.ajax){if(a.type==="GET"&&a.data){a.url+=(A.test(a.url)?"&":"?")+a.data;a.data=null}a.ajax.open(a.type,a.url,a.async);a.type==="POST"&&a.ajax.setRequestHeader("Content-Type",a.contentType);
|
52
|
+
a.ajax.send(a.data||null);return f.xhr.httpData(a)}}};f.xhr.httpData=function(a){var c,n=null,j,w=null;a.ajax.onreadystatechange=function(){if(a.ajax.readyState===4){try{n=JSON.parse(a.ajax.responseText)}catch(x){}c={xml:a.ajax.responseXML,text:a.ajax.responseText,json:n};if(!c.xml||!c.xml.documentElement){c.xml=null;try{j=new DOMParser;w=j.parseFromString(a.ajax.responseText,"text/xml");if(!w.getElementsByTagName("parsererror").length)c.xml=w}catch(z){}}if(a.dataType)c=c[a.dataType];a.success.call(a.ajax,
|
53
|
+
c)}};return c};f.xhr.getJSONP=function(a,c,n){var j=e.head||e.getElementsByTagName("head")[0]||e.documentElement,w=e.createElement("script"),x=false,z=[];z=/(=)\?(?=&|$)|\?\?/;var F,v;if(!n){v=a.match(/(callback=[^&]*)/);if(v!==null&&v.length){z=v[1].split("=")[1];if(z==="?")z="jsonp";F=f.guid(z);a=a.replace(/(callback=[^&]*)/,"callback="+F)}else{F=f.guid("jsonp");if(z.test(a))a=a.replace(z,"$1"+F);z=a.split(/\?(.+)?/);a=z[0]+"?";if(z[1])a+=z[1]+"&";a+="callback="+F}window[F]=function(L){c&&c(L);
|
54
|
+
x=true}}w.addEventListener("load",function(){n&&c&&c();x&&delete window[F];j.removeChild(w)},false);w.addEventListener("error",function(L){c&&c({error:L});n||delete window[F];j.removeChild(w)},false);w.src=a;j.insertBefore(w,j.firstChild)};f.getJSONP=f.xhr.getJSONP;f.getScript=f.xhr.getScript=function(a,c){return f.xhr.getJSONP(a,c,true)};f.util={toSeconds:function(a,c){var n=/^([0-9]+:){0,2}[0-9]+([.;][0-9]+)?$/,j,w,x;if(typeof a==="number")return a;typeof a==="string"&&!n.test(a)&&f.error("Invalid time format");
|
55
|
+
n=a.split(":");j=n.length-1;w=n[j];if(w.indexOf(";")>-1){w=w.split(";");x=0;if(c&&typeof c==="number")x=parseFloat(w[1],10)/c;n[j]=parseInt(w[0],10)+x}j=n[0];return{1:parseFloat(j,10),2:parseInt(j,10)*60+parseFloat(n[1],10),3:parseInt(j,10)*3600+parseInt(n[1],10)*60+parseFloat(n[2],10)}[n.length||1]}};f.p.cue=f.p.exec;f.protect={natives:function(a){return Object.keys?Object.keys(a):function(c){var n,j=[];for(n in c)r.call(c,n)&&j.push(n);return j}(a)}(f.p).map(function(a){return a.toLowerCase()})};
|
56
|
+
f.forEach({listen:"on",unlisten:"off",trigger:"emit",exec:"cue"},function(a,c){var n=f.p[c];f.p[c]=function(){if(typeof console!=="undefined"&&console.warn){console.warn("Deprecated method '"+c+"', "+(a==null?"do not use.":"use '"+a+"' instead."));f.p[c]=n}return f.p[a].apply(this,[].slice.call(arguments))}});p.Popcorn=f}else{p.Popcorn={isSupported:false};for(h="byId forEach extend effects error guid sizeOf isArray nop position disable enable destroyaddTrackEvent removeTrackEvent getTrackEvents getTrackEvent getLastTrackEventId timeUpdate plugin removePlugin compose effect xhr getJSONP getScript".split(/\s+/);h.length;)p.Popcorn[h.shift()]=
|
57
|
+
function(){}}})(window,window.document);(function(p,e){var l=p.document,d=p.location,b=/:\/\//,h=d.href.replace(d.href.split("/").slice(-1)[0],""),i=function(k,r,m){k=k||0;r=(r||k||0)+1;m=m||1;r=Math.ceil((r-k)/m)||0;var t=0,q=[];for(q.length=r;t<r;){q[t++]=k;k+=m}return q};e.sequence=function(k,r){return new e.sequence.init(k,r)};e.sequence.init=function(k,r){this.parent=l.getElementById(k);this.seqId=e.guid("__sequenced");this.queue=[];this.playlist=[];this.inOuts={ofVideos:[],ofClips:[]};this.dims={width:0,height:0};this.active=0;this.playing=
|
58
|
+
this.cycling=false;this.times={last:0};this.events={};var m=this,t=0;e.forEach(r,function(q,o){var u=l.createElement("video");u.preload="auto";u.controls=true;u.style.display=o&&"none"||"";u.id=m.seqId+"-"+o;m.queue.push(u);var E=q["in"],C=q.out;m.inOuts.ofVideos.push({"in":E!==undefined&&E||1,out:C!==undefined&&C||0});m.inOuts.ofVideos[o].out=m.inOuts.ofVideos[o].out||m.inOuts.ofVideos[o]["in"]+2;u.src=!b.test(q.src)?h+q.src:q.src;u.setAttribute("data-sequence-owner",k);u.setAttribute("data-sequence-guid",
|
59
|
+
m.seqId);u.setAttribute("data-sequence-id",o);u.setAttribute("data-sequence-clip",[m.inOuts.ofVideos[o]["in"],m.inOuts.ofVideos[o].out].join(":"));m.parent.appendChild(u);m.playlist.push(e("#"+u.id))});m.inOuts.ofVideos.forEach(function(q){q={"in":t,out:t+(q.out-q["in"])};m.inOuts.ofClips.push(q);t=q.out+1});e.forEach(this.queue,function(q,o){function u(){if(!o){m.dims.width=q.videoWidth;m.dims.height=q.videoHeight}q.currentTime=m.inOuts.ofVideos[o]["in"]-0.5;q.removeEventListener("canplaythrough",
|
60
|
+
u,false);return true}q.addEventListener("canplaythrough",u,false);q.addEventListener("play",function(){m.playing=true},false);q.addEventListener("pause",function(){m.playing=false},false);q.addEventListener("timeupdate",function(E){E=E.srcElement||E.target;E=+(E.dataset&&E.dataset.sequenceId||E.getAttribute("data-sequence-id"));var C=Math.floor(q.currentTime);if(m.times.last!==C&&E===m.active){m.times.last=C;C===m.inOuts.ofVideos[E].out&&e.sequence.cycle.call(m,E)}},false)});return this};e.sequence.init.prototype=
|
61
|
+
e.sequence.prototype;e.sequence.cycle=function(k){this.queue||e.error("Popcorn.sequence.cycle is not a public method");var r=this.queue,m=this.inOuts.ofVideos,t=r[k],q=0,o;if(r[k+1])q=k+1;if(r[k+1]){r=r[q];m=m[q];e.extend(r,{width:this.dims.width,height:this.dims.height});o=this.playlist[q];t.pause();this.active=q;this.times.last=m["in"]-1;o.currentTime(m["in"]);o[q?"play":"pause"]();this.trigger("cycle",{position:{previous:k,current:q}});if(q){t.style.display="none";r.style.display=""}this.cycling=
|
62
|
+
false}else this.playlist[k].pause();return this};var g=["timeupdate","play","pause"];e.extend(e.sequence.prototype,{eq:function(k){return this.playlist[k]},remove:function(){this.parent.innerHTML=null},clip:function(k){return this.inOuts.ofVideos[k]},duration:function(){for(var k=0,r=this.inOuts.ofClips,m=0;m<r.length;m++)k+=r[m].out-r[m]["in"]+1;return k-1},play:function(){this.playlist[this.active].play();return this},exec:function(k,r){var m=this.active;this.inOuts.ofClips.forEach(function(t,q){if(k>=
|
63
|
+
t["in"]&&k<=t.out)m=q});k+=this.inOuts.ofVideos[m]["in"]-this.inOuts.ofClips[m]["in"];e.addTrackEvent(this.playlist[m],{start:k-1,end:k,_running:false,_natives:{start:r||e.nop,end:e.nop,type:"exec"}});return this},listen:function(k,r){var m=this,t=this.playlist,q=t.length,o=0;if(!r)r=e.nop;if(e.Events.Natives.indexOf(k)>-1)e.forEach(t,function(u){u.listen(k,function(E){E.active=m;if(g.indexOf(k)>-1)r.call(u,E);else++o===q&&r.call(u,E)})});else{this.events[k]||(this.events[k]={});t=r.name||e.guid("__"+
|
64
|
+
k);this.events[k][t]=r}return this},unlisten:function(){},trigger:function(k,r){var m=this;if(!(e.Events.Natives.indexOf(k)>-1)){this.events[k]&&e.forEach(this.events[k],function(t){t.call(m,{type:k},r)});return this}}});e.forEach(e.manifest,function(k,r){e.sequence.prototype[r]=function(m){var t={},q=[],o,u,E,C,f;for(o=0;o<this.inOuts.ofClips.length;o++){q=this.inOuts.ofClips[o];u=i(q["in"],q.out);E=u.indexOf(m.start);C=u.indexOf(m.end);if(E>-1)t[o]=e.extend({},q,{start:u[E],clipIdx:E});if(C>-1)t[o]=
|
65
|
+
e.extend({},q,{end:u[C],clipIdx:C})}o=Object.keys(t).map(function(A){return+A});q=i(o[0],o[1]);for(o=0;o<q.length;o++){E={};C=q[o];var G=t[C];if(G){f=this.inOuts.ofVideos[C];u=G.clipIdx;f=i(f["in"],f.out);if(G.start){E.start=f[u];E.end=f[f.length-1]}if(G.end){E.start=f[0];E.end=f[u]}}else{E.start=this.inOuts.ofVideos[C]["in"];E.end=this.inOuts.ofVideos[C].out}this.playlist[C][r](e.extend({},m,E))}return this}})})(this,Popcorn);(function(p,e){function l(h){h=typeof h==="string"?h:[h.language,h.region].join("-");var i=h.split("-");return{iso6391:h,language:i[0]||"",region:i[1]||""}}var d=p.navigator,b=l(d.userLanguage||d.language);e.locale={get:function(){return b},set:function(h){b=l(h);e.locale.broadcast();return b},broadcast:function(h){var i=e.instances,g=i.length,k=0,r;for(h=h||"locale:changed";k<g;k++){r=i[k];h in r.data.events&&r.trigger(h)}}}})(this,this.Popcorn);(function(p){document.addEventListener("DOMContentLoaded",function(){var e=document.querySelectorAll("[data-timeline-sources]");p.forEach(e,function(l,d){var b=e[d],h,i,g;if(!b.id)b.id=p.guid("__popcorn");if(b.nodeType&&b.nodeType===1){g=p("#"+b.id);h=(b.getAttribute("data-timeline-sources")||"").split(",");h[0]&&p.forEach(h,function(k){i=k.split("!");if(i.length===1){i=k.match(/(.*)[\/\\]([^\/\\]+\.\w+)$/)[2].split(".");i[0]="parse"+i[1].toUpperCase();i[1]=k}h[0]&&g[i[0]]&&g[i[0]](i[1])});g.autoplay()&&
|
66
|
+
g.play()}})},false)})(Popcorn);(function(p){var e=function(l,d){l=l||p.nop;d=d||p.nop;return function(){l.apply(this,arguments);d.apply(this,arguments)}};p.player=function(l,d){if(!p[l]){d=d||{};var b=function(h,i,g){g=g||{};var k=new Date/1E3,r=k,m=0,t=0,q=1,o=false,u={},E=typeof h==="string"?p.dom.find(h):h,C={};Object.prototype.__defineGetter__||(C=E||document.createElement("div"));for(var f in E)if(!(f in C))if(typeof E[f]==="object")C[f]=E[f];else if(typeof E[f]==="function")C[f]=function(A){return"length"in E[A]&&!E[A].call?
|
67
|
+
E[A]:function(){return E[A].apply(E,arguments)}}(f);else p.player.defineProperty(C,f,{get:function(A){return function(){return E[A]}}(f),set:p.nop,configurable:true});var G=function(){k=new Date/1E3;if(!C.paused){C.currentTime+=k-r;C.dispatchEvent("timeupdate");setTimeout(G,10)}r=k};C.play=function(){this.paused=false;if(C.readyState>=4){r=new Date/1E3;C.dispatchEvent("play");G()}};C.pause=function(){this.paused=true;C.dispatchEvent("pause")};p.player.defineProperty(C,"currentTime",{get:function(){return m},
|
68
|
+
set:function(A){m=+A;C.dispatchEvent("timeupdate");return m},configurable:true});p.player.defineProperty(C,"volume",{get:function(){return q},set:function(A){q=+A;C.dispatchEvent("volumechange");return q},configurable:true});p.player.defineProperty(C,"muted",{get:function(){return o},set:function(A){o=+A;C.dispatchEvent("volumechange");return o},configurable:true});p.player.defineProperty(C,"readyState",{get:function(){return t},set:function(A){return t=A},configurable:true});C.addEventListener=function(A,
|
69
|
+
O){u[A]||(u[A]=[]);u[A].push(O);return O};C.removeEventListener=function(A,O){var a,c=u[A];if(c){for(a=u[A].length-1;a>=0;a--)O===c[a]&&c.splice(a,1);return O}};C.dispatchEvent=function(A){var O,a=A.type;if(!a){a=A;if(A=p.events.getInterface(a)){O=document.createEvent(A);O.initEvent(a,true,true,window,1)}}if(u[a])for(A=u[a].length-1;A>=0;A--)u[a][A].call(this,O,this)};C.src=i||"";C.duration=0;C.paused=true;C.ended=0;g&&g.events&&p.forEach(g.events,function(A,O){C.addEventListener(O,A,false)});if(d._canPlayType(E.nodeName,
|
70
|
+
i)!==false)if(d._setup)d._setup.call(C,g);else{C.readyState=4;C.dispatchEvent("loadedmetadata");C.dispatchEvent("loadeddata");C.dispatchEvent("canplaythrough")}else setTimeout(function(){C.dispatchEvent("error")},0);h=new p.p.init(C,g);if(d._teardown)h.destroy=e(h.destroy,function(){d._teardown.call(C,g)});return h};b.canPlayType=d._canPlayType=d._canPlayType||p.nop;p[l]=p.player.registry[l]=b}};p.player.registry={};p.player.defineProperty=Object.defineProperty||function(l,d,b){l.__defineGetter__(d,
|
71
|
+
b.get||p.nop);l.__defineSetter__(d,b.set||p.nop)};p.player.playerQueue=function(){var l=[],d=false;return{next:function(){d=false;l.shift();l[0]&&l[0]()},add:function(b){l.push(function(){d=true;b&&b()});!d&&l[0]()}}};p.smart=function(l,d,b){var h=typeof l==="string"?p.dom.find(l):l,i,g,k,r,m,t="HTMLYouTubeVideoElement HTMLVimeoVideoElement HTMLSoundCloudAudioElement HTMLNullVideoElement".split(" ");if(h){d=typeof d==="string"?[d]:d;l=0;for(m=d.length;l<m;l++){i=d[l];for(g=0;g<t.length;g++)if((r=
|
72
|
+
p[t[g]])&&r._canPlaySrc(i)==="probably"){k=r(h);b=p(k,b);setTimeout(function(){k.src=i},0);return b}for(var q in p.player.registry)if(p.player.registry.hasOwnProperty(q))if(p.player.registry[q].canPlayType(h.nodeName,i))return p[q](h,i,b)}var o;q=p.guid("popcorn-video-");g=document.createElement("div");g.style.width="100%";g.style.height="100%";if(d.length===1){o=document.createElement("video");o.id=q;h.appendChild(o);setTimeout(function(){var u=document.createElement("div");u.innerHTML=d[0];o.src=
|
73
|
+
u.firstChild.nodeValue},0);return p("#"+q,b)}h.appendChild(g);t='<video id="'+q+'" preload=auto autobuffer>';l=0;for(m=d.length;l<m;l++)t+='<source src="'+d[l]+'">';t+="</video>";g.innerHTML=t;b&&b.events&&b.events.error&&h.addEventListener("error",b.events.error,false);return p("#"+q,b)}else p.error("Specified target `"+l+"` was not found.")}})(Popcorn);(function(p){var e=Object.prototype.hasOwnProperty;p.parsers={};p.parser=function(l,d,b){if(p.protect.natives.indexOf(l.toLowerCase())>=0)p.error("'"+l+"' is a protected function name");else{if(typeof d==="function"&&!b){b=d;d=""}if(!(typeof b!=="function"||typeof d!=="string")){var h={};h[l]=function(i,g,k){if(!i)return this;if(typeof g!=="function"&&!k){k=g;g=null}var r=this;p.xhr({url:i,dataType:d,success:function(m){var t,q,o=0;m=b(m,k).data||[];if(t=m.length){for(;o<t;o++){q=m[o];for(var u in q)e.call(q,
|
74
|
+
u)&&r[u]&&r[u](q[u])}g&&g()}}});return this};p.extend(p.p,h);return h}}}})(Popcorn);(function(p,e){function l(b){var h=l.options;b=h.parser[h.strictMode?"strict":"loose"].exec(b);for(var i={},g=14;g--;)i[h.key[g]]=b[g]||"";i[h.q.name]={};i[h.key[12]].replace(h.q.parser,function(k,r,m){if(r)i[h.q.name][r]=m});return i}l.options={strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
|
75
|
+
loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};var d={length:0,start:p.nop,end:p.nop};window.MediaError=window.MediaError||function(){function b(h,i){this.code=h||null;this.message=i||""}b.MEDIA_ERR_NONE_ACTIVE=0;b.MEDIA_ERR_ABORTED=1;b.MEDIA_ERR_NETWORK=2;b.MEDIA_ERR_DECODE=3;b.MEDIA_ERR_NONE_SUPPORTED=4;return b}();p._MediaElementProto=function(){var b=
|
76
|
+
{},h;Object.prototype.__defineGetter__||(b=e.createElement("div"));b._util={type:"HTML5",TIMEUPDATE_MS:250,MIN_WIDTH:300,MIN_HEIGHT:150,isAttributeSet:function(i){return typeof i==="string"||i===true},parseUri:l};b.addEventListener=function(i,g,k){e.addEventListener(this._eventNamespace+i,g,k)};b.removeEventListener=function(i,g,k){e.removeEventListener(this._eventNamespace+i,g,k)};b.dispatchEvent=function(i){var g=e.createEvent("CustomEvent");g.initCustomEvent(this._eventNamespace+i,false,false,
|
77
|
+
{type:i,target:this.parentNode,data:null});e.dispatchEvent(g)};b.load=p.nop;b.canPlayType=function(){return""};b.getBoundingClientRect=function(){return h.getBoundingClientRect()};b.NETWORK_EMPTY=0;b.NETWORK_IDLE=1;b.NETWORK_LOADING=2;b.NETWORK_NO_SOURCE=3;b.HAVE_NOTHING=0;b.HAVE_METADATA=1;b.HAVE_CURRENT_DATA=2;b.HAVE_FUTURE_DATA=3;b.HAVE_ENOUGH_DATA=4;Object.defineProperties(b,{currentSrc:{get:function(){return this.src!==undefined?this.src:""},configurable:true},parentNode:{get:function(){return h},
|
78
|
+
set:function(i){h=i},configurable:true},preload:{get:function(){return"auto"},set:p.nop,configurable:true},controls:{get:function(){return true},set:p.nop,configurable:true},poster:{get:function(){return""},set:p.nop,configurable:true},crossorigin:{get:function(){return""},configurable:true},played:{get:function(){return d},configurable:true},seekable:{get:function(){return d},configurable:true},buffered:{get:function(){return d},configurable:true},defaultMuted:{get:function(){return false},configurable:true},
|
79
|
+
defaultPlaybackRate:{get:function(){return 1},configurable:true},style:{get:function(){return this.parentNode.style},configurable:true},id:{get:function(){return this.parentNode.id},configurable:true}});return b}})(Popcorn,window.document);(function(p,e,l){function d(){if(e.jwplayer){k=true;for(var t=m.length;t--;){m[t]();delete m[t]}}else setTimeout(d,100)}function b(){if(!r){if(!e.jwplayer){var t=l.createElement("script");t.src="https://jwpsrv.com/library/zaIF4JI9EeK2FSIACpYGxA.js";var q=l.getElementsByTagName("script")[0];q.parentNode.insertBefore(t,q)}r=true;d()}return k}function h(t){m.unshift(t)}function i(t){function q(P){D.unshift(P)}function o(){setTimeout(function(){v.duration=K.getDuration();z.dispatchEvent("durationchange");
|
80
|
+
v.readyState=z.HAVE_METADATA;z.dispatchEvent("loadedmetadata");z.dispatchEvent("loadeddata");v.readyState=z.HAVE_FUTURE_DATA;z.dispatchEvent("canplay");for(B=true;D.length;){D[0]();D.shift()}v.readyState=z.HAVE_ENOUGH_DATA;z.dispatchEvent("canplaythrough")},0)}function u(){if(y)y=false;else if(I){I=false;o()}else n()}function E(){if(v.seeking){v.ended=false;v.seeking=false;z.dispatchEvent("timeupdate");z.dispatchEvent("seeked");z.dispatchEvent("canplay");z.dispatchEvent("canplaythrough")}}function C(){K.onPause(u);
|
81
|
+
K.onTime(function(){if(!v.ended&&!v.seeking){v.currentTime=K.getPosition();z.dispatchEvent("timeupdate")}});K.onSeek(E);K.onPlay(function(){if(!v.ended)if(T){T=false;if(v.autoplay||!v.paused){v.paused=false;q(a);o()}else{s=I=true;K.pause(true)}}else if(s){s=false;y=true;K.pause(true)}else a()});K.onBufferChange(c);K.onComplete(j);K.play(true)}function f(P){var S={name:"MediaError"};S.message=P.message;S.code=P.code||5;v.error=S;z.dispatchEvent("error")}function G(P){if(z._canPlaySrc(P)){var S=z._util.parseUri(P).queryKey;
|
82
|
+
v.controls=S.controls=S.controls||v.controls;v.src=P;if(b()){if(L)L&&K&&K.destroy();jwplayer(F.id).setup({file:P,width:"100%",height:"100%",controls:v.controls});K=jwplayer(F.id);K.onReady(C);K.onError(f);jwplayer.utils.log=function(H,V){if(typeof console!=="undefined"&&typeof console.log!=="undefined")V?console.log(H,V):console.log(H);H==="No suitable players found and fallback enabled"&&f({message:H,code:4})};v.networkState=z.NETWORK_LOADING;z.dispatchEvent("loadstart");z.dispatchEvent("progress")}else h(function(){G(P)})}else{v.error=
|
83
|
+
{name:"MediaError",message:"Media Source Not Supported",code:MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED};z.dispatchEvent("error")}}function A(P){v.currentTime=P;if(B){O();K.seek(P)}else q(function(){O();K.seek(P)})}function O(){v.seeking=true;if(v.paused)s=true;z.dispatchEvent("seeking")}function a(){v.paused=false;if(M){M=false;if(v.loop&&!Q||!v.loop){Q=true;z.dispatchEvent("play")}z.dispatchEvent("playing")}}function c(){z.dispatchEvent("progress")}function n(){v.paused=true;if(!M){M=true;z.dispatchEvent("pause")}}
|
84
|
+
function j(){if(v.loop)A(0);else{v.ended=true;n();z.dispatchEvent("timeupdate");z.dispatchEvent("ended")}}function w(P){v.volume=P;if(B){K.setVolume(v.volume*100);z.dispatchEvent("volumechange")}else q(function(){w(v.volume)})}function x(P){v.muted=P;if(B){K.setMute(P);z.dispatchEvent("volumechange")}else q(function(){x(v.muted)})}if(!e.postMessage)throw"ERROR: HTMLJWPlayerVideoElement requires window.postMessage";var z=new p._MediaElementProto,F=typeof t==="string"?l.querySelector(t):t,v={src:g,
|
85
|
+
networkState:z.NETWORK_EMPTY,readyState:z.HAVE_NOTHING,seeking:false,autoplay:g,preload:g,controls:false,loop:false,poster:g,volume:1,muted:false,currentTime:0,duration:NaN,ended:false,paused:true,error:null},L=false,y=false,s=false,B=false,Q=false,K,M=true,D=[],T=true,I=false;z._eventNamespace=p.guid("HTMLJWPlayerVideoElement::");z.parentNode=F;z._util.type="JWPlayer";z.play=function(){z.dispatchEvent("play");v.paused=false;if(B){if(v.ended){A(0);v.ended=false}K.play(true)}else q(function(){z.play()})};
|
86
|
+
z.pause=function(){v.paused=true;B?K.pause(true):q(function(){z.pause()})};Object.defineProperties(z,{src:{get:function(){return v.src},set:function(P){P&&P!==v.src&&G(P)}},autoplay:{get:function(){return v.autoplay},set:function(P){v.autoplay=z._util.isAttributeSet(P)}},loop:{get:function(){return v.loop},set:function(P){v.loop=z._util.isAttributeSet(P)}},width:{get:function(){return z.parentNode.offsetWidth}},height:{get:function(){return z.parentNode.offsetHeight}},currentTime:{get:function(){return v.currentTime},
|
87
|
+
set:function(P){A(P)}},duration:{get:function(){return K.getDuration()}},ended:{get:function(){return v.ended}},paused:{get:function(){return v.paused}},seeking:{get:function(){return v.seeking}},readyState:{get:function(){return v.readyState}},networkState:{get:function(){return v.networkState}},volume:{get:function(){return v.volume},set:function(P){if(P<0||P>1)throw"Volume value must be between 0.0 and 1.0";w(P)}},muted:{get:function(){return v.muted},set:function(P){x(z._util.isAttributeSet(P))}},
|
88
|
+
error:{get:function(){return v.error}},buffered:{get:function(){var P={start:function(S){if(S===0)return 0;throw"INDEX_SIZE_ERR: DOM Exception 1";},end:function(S){if(S===0){S=K.getDuration();if(!S)return 0;return S*(K.getBuffer()/100)}throw"INDEX_SIZE_ERR: DOM Exception 1";}};Object.defineProperties(P,{length:{get:function(){return 1}}});return P}}});z._canPlaySrc=p.HTMLJWPlayerVideoElement._canPlaySrc;z.canPlayType=p.HTMLJWPlayerVideoElement.canPlayType;return z}var g="",k=false,r=false,m=[];p.HTMLJWPlayerVideoElement=
|
89
|
+
function(t){return new i(t)};p.HTMLJWPlayerVideoElement._canPlaySrc=function(){return"probably"};p.HTMLJWPlayerVideoElement.canPlayType=function(){return"probably"}})(Popcorn,window,document);(function(p,e){function l(i){this.startTime=0;this.currentTime=i.currentTime||0;this.duration=i.duration||NaN;this.playInterval=null;this.paused=true;this.playbackRate=this.defaultPlaybackRate=1;this.ended=i.endedCallback||p.nop}function d(i){function g(a){A.push(a)}function k(){if(!C)return 0;return f.currentTime}function r(a){if(a!==k())if(C){G.seeking=true;o.dispatchEvent("seeking");f.seekTo(a);G.ended=false;G.seeking=false;o.dispatchEvent("timeupdate");o.dispatchEvent("seeked");o.dispatchEvent("canplay");
|
90
|
+
o.dispatchEvent("canplaythrough")}else g(function(){r(a)})}function m(){o.dispatchEvent("timeupdate")}function t(){G.paused=true;clearInterval(O);o.dispatchEvent("pause")}function q(){if(G.loop){r(0);o.play()}else{G.ended=true;t();o.dispatchEvent("timeupdate");o.dispatchEvent("ended")}}var o=new p._MediaElementProto,u=typeof i==="string"?e.querySelector(i):i,E=e.createElement("div"),C=false,f,G={src:b,networkState:o.NETWORK_EMPTY,readyState:o.HAVE_NOTHING,autoplay:b,preload:b,controls:b,loop:false,
|
91
|
+
poster:b,volume:1,muted:false,width:u.width|0?u.width:o._util.MIN_WIDTH,height:u.height|0?u.height:o._util.MIN_HEIGHT,seeking:false,ended:false,paused:1,error:null},A=[],O;o._eventNamespace=p.guid("HTMLNullVideoElement::");o.parentNode=u;o._util.type="NullVideo";o.play=function(){if(C){f.play();if(G.paused){if(G.paused===1){G.paused=false;o.dispatchEvent("play");o.dispatchEvent("playing")}else{if(G.ended){r(0);G.ended=false}if(G.paused){G.paused=false;G.loop||o.dispatchEvent("play");o.dispatchEvent("playing")}}O=
|
92
|
+
setInterval(m,o._util.TIMEUPDATE_MS)}}else g(function(){o.play()})};o.pause=function(){if(C){f.pause();G.paused||t()}else g(function(){o.pause()})};Object.defineProperties(o,{src:{get:function(){return G.src},set:function(a){if(a&&a!==G.src)if(o._canPlaySrc(a)){G.src=a;if(C)if(C&&f){f.pause();f=null;u.removeChild(E);E=e.createElement("div")}E.width=G.width;E.height=G.height;u.appendChild(E);a=h.exec(a);f=new l({currentTime:+a[1],duration:+a[2],endedCallback:q});o.dispatchEvent("loadstart");o.dispatchEvent("progress");
|
93
|
+
o.dispatchEvent("durationchange");C=true;G.networkState=o.NETWORK_IDLE;G.readyState=o.HAVE_METADATA;o.dispatchEvent("loadedmetadata");o.dispatchEvent("loadeddata");G.readyState=o.HAVE_FUTURE_DATA;o.dispatchEvent("canplay");G.readyState=o.HAVE_ENOUGH_DATA;for(o.dispatchEvent("canplaythrough");A.length;){a=A.shift();a()}G.autoplay&&o.play()}else{G.error={name:"MediaError",message:"Media Source Not Supported",code:MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED};o.dispatchEvent("error")}}},autoplay:{get:function(){return G.autoplay},
|
94
|
+
set:function(a){G.autoplay=o._util.isAttributeSet(a)}},loop:{get:function(){return G.loop},set:function(a){G.loop=o._util.isAttributeSet(a)}},width:{get:function(){return E.width},set:function(a){E.width=a;G.width=E.width}},height:{get:function(){return E.height},set:function(a){E.height=a;G.height=E.height}},currentTime:{get:function(){return k()},set:function(a){r(a)}},duration:{get:function(){return f?f.duration:NaN}},ended:{get:function(){return G.ended}},paused:{get:function(){return G.paused}},
|
95
|
+
seeking:{get:function(){return G.seeking}},readyState:{get:function(){return G.readyState}},networkState:{get:function(){return G.networkState}},volume:{get:function(){return G.volume},set:function(a){if(a<0||a>1)throw"Volume value must be between 0.0 and 1.0";G.volume=a;o.dispatchEvent("volumechange")}},muted:{get:function(){return G.muted},set:function(a){a=o._util.isAttributeSet(a);G.muted=a;o.dispatchEvent("volumechange")}},playbackRate:{get:function(){return f.playbackRate},set:function(a){f.playbackRate=
|
96
|
+
a;o.dispatchEvent("ratechange")}},error:{get:function(){return G.error}}});o._canPlaySrc=p.HTMLNullVideoElement._canPlaySrc;o.canPlayType=p.HTMLNullVideoElement.canPlayType;return o}var b="",h=/#t=(\d+\.?\d*)?,?(\d+\.?\d*)/;l.prototype={play:function(){var i=this;if(this.paused){this.paused=false;this.startTime=Date.now();this.playInterval=setInterval(function(){i.currentTime+=(Date.now()-i.startTime)/(1E3/i.playbackRate);i.startTime=Date.now();if(i.currentTime>=i.duration){i.pause(i.duration);i.ended()}i.currentTime<
|
97
|
+
0&&i.pause(0)},16)}},pause:function(){if(!this.paused){this.paused=true;clearInterval(this.playInterval)}},seekTo:function(i){i=i<0?0:i;this.currentTime=i=i>this.duration?this.duration:i}};p.HTMLNullVideoElement=function(i){return new d(i)};p.HTMLNullVideoElement._canPlaySrc=function(i){return h.test(i)?"probably":b};p.HTMLNullVideoElement.canPlayType=function(i){return i==="video/x-nullvideo"?"probably":b}})(Popcorn,document);(function(p,e,l){function d(k){var r=this,m=k.src.split("?")[0];if(m.substr(0,2)==="//")m=e.location.protocol+m;"play pause paused seekTo unload getCurrentTime getDuration getVideoEmbedCode getVideoHeight getVideoWidth getVideoUrl getColor setColor setLoop getVolume setVolume addEventListener".split(" ").forEach(function(t){r[t]=function(q){q=JSON.stringify({method:t,value:q});k.contentWindow&&k.contentWindow.postMessage(q,m)}})}function b(k){function r(y){z.unshift(y)}function m(y){var s=c.duration;
|
98
|
+
if(s!==y){c.duration=y;A.dispatchEvent("durationchange");if(isNaN(s)){c.networkState=A.NETWORK_IDLE;c.readyState=A.HAVE_METADATA;A.dispatchEvent("loadedmetadata");A.dispatchEvent("loadeddata");c.readyState=A.HAVE_FUTURE_DATA;A.dispatchEvent("canplay");c.readyState=A.HAVE_ENOUGH_DATA;A.dispatchEvent("canplaythrough");c.autoplay&&A.play();for(y=z.length;y--;){z[y]();delete z[y]}}}}function t(y){if(n){c.seeking=true;A.dispatchEvent("seeking");w.seekTo(y)}else r(function(){t(y)})}function q(){A.dispatchEvent("timeupdate")}
|
99
|
+
function o(y){(c.currentTime=y)!==L&&A.dispatchEvent("timeupdate");L=c.currentTime}function u(y){if(y.origin===g){var s;try{s=JSON.parse(y.data)}catch(B){console.warn(B)}if(s.player_id==j)switch(s.event){case "ready":w=new d(a);w.addEventListener("loadProgress");w.addEventListener("pause");w.setVolume(0);w.play();break;case "loadProgress":if(parseFloat(s.data.duration)>0&&!n){n=true;w.pause()}break;case "pause":w.setVolume(1);e.removeEventListener("message",u,false);e.addEventListener("message",E,
|
100
|
+
false);w.addEventListener("loadProgress");w.addEventListener("playProgress");w.addEventListener("play");w.addEventListener("pause");w.addEventListener("finish");w.addEventListener("seek");w.getDuration();c.networkState=A.NETWORK_LOADING;A.dispatchEvent("loadstart");A.dispatchEvent("progress")}}}function E(y){if(y.origin===g){var s;try{s=JSON.parse(y.data)}catch(B){console.warn(B)}if(s.player_id==j){switch(s.method){case "getCurrentTime":o(parseFloat(s.value));break;case "getDuration":m(parseFloat(s.value));
|
101
|
+
break;case "getVolume":y=parseFloat(s.value);if(c.volume!==y){c.volume=y;A.dispatchEvent("volumechange")}}switch(s.event){case "loadProgress":A.dispatchEvent("progress");m(parseFloat(s.data.duration));break;case "playProgress":o(parseFloat(s.data.seconds));break;case "play":c.ended&&t(0);if(!v){v=setInterval(C,h);c.loop&&A.dispatchEvent("play")}F=setInterval(q,A._util.TIMEUPDATE_MS);c.paused=false;if(x){x=false;c.loop||A.dispatchEvent("play");A.dispatchEvent("playing")}break;case "pause":c.paused=
|
102
|
+
true;if(!x){x=true;clearInterval(F);A.dispatchEvent("pause")}break;case "finish":if(c.loop){t(0);A.play()}else{c.ended=true;A.dispatchEvent("ended")}break;case "seek":o(parseFloat(s.data.seconds));c.seeking=false;A.dispatchEvent("timeupdate");A.dispatchEvent("seeked");A.dispatchEvent("canplay");A.dispatchEvent("canplaythrough")}}}}function C(){w.getCurrentTime()}function f(y){c.volume=y;if(n){w.setVolume(y);A.dispatchEvent("volumechange")}else r(function(){f(y)})}function G(y){if(n)if(y){c.muted=
|
103
|
+
c.volume;f(0)}else{c.muted=0;f(c.muted)}else{c.muted=y?1:0;r(function(){G(y)})}}if(!e.postMessage)throw"ERROR: HTMLVimeoVideoElement requires window.postMessage";var A=new p._MediaElementProto,O=typeof k==="string"?p.dom.find(k):k,a=l.createElement("iframe"),c={src:i,networkState:A.NETWORK_EMPTY,readyState:A.HAVE_NOTHING,seeking:false,autoplay:i,preload:i,controls:false,loop:false,poster:i,volume:1,muted:0,currentTime:0,duration:NaN,ended:false,paused:true,error:null},n=false,j=p.guid(),w,x=true,
|
104
|
+
z=[],F,v,L=0;A._eventNamespace=p.guid("HTMLVimeoVideoElement::");A.parentNode=O;A._util.type="Vimeo";A.play=function(){c.paused=false;n?w.play():r(function(){A.play()})};A.pause=function(){c.paused=true;n?w.pause():r(function(){A.pause()})};Object.defineProperties(A,{src:{get:function(){return c.src},set:function(y){if(y&&y!==c.src)if(A._canPlaySrc(y)){c.src=y;if(n)if(n&&w){clearInterval(v);w.pause();e.removeEventListener("message",E,false);O.removeChild(a);a=l.createElement("iframe")}n=false;y=A._util.parseUri(y);
|
105
|
+
var s=y.queryKey,B,Q=["api=1","player_id="+j,"title=0","byline=0","portrait=0"];c.loop=s.loop==="1"||c.loop;delete s.loop;c.autoplay=s.autoplay==="1"||c.autoplay;delete s.autoplay;y=g+"/video/"+/\d+$/.exec(y.path)+"?";for(B in s)s.hasOwnProperty(B)&&Q.push(encodeURIComponent(B)+"="+encodeURIComponent(s[B]));y+=Q.join("&");a.id=j;a.style.width="100%";a.style.height="100%";a.frameBorder=0;a.webkitAllowFullScreen=true;a.mozAllowFullScreen=true;a.allowFullScreen=true;O.appendChild(a);a.src=y;e.addEventListener("message",
|
106
|
+
u,false)}else{c.error={name:"MediaError",message:"Media Source Not Supported",code:MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED};A.dispatchEvent("error")}}},autoplay:{get:function(){return c.autoplay},set:function(y){c.autoplay=A._util.isAttributeSet(y)}},loop:{get:function(){return c.loop},set:function(y){c.loop=A._util.isAttributeSet(y)}},width:{get:function(){return A.parentNode.offsetWidth}},height:{get:function(){return A.parentNode.offsetHeight}},currentTime:{get:function(){return c.currentTime},
|
107
|
+
set:function(y){t(y)}},duration:{get:function(){return c.duration}},ended:{get:function(){return c.ended}},paused:{get:function(){return c.paused}},seeking:{get:function(){return c.seeking}},readyState:{get:function(){return c.readyState}},networkState:{get:function(){return c.networkState}},volume:{get:function(){return c.muted>0?c.muted:c.volume},set:function(y){if(y<0||y>1)throw"Volume value must be between 0.0 and 1.0";f(y)}},muted:{get:function(){return c.muted>0},set:function(y){G(A._util.isAttributeSet(y))}},
|
108
|
+
error:{get:function(){return c.error}}});A._canPlaySrc=p.HTMLVimeoVideoElement._canPlaySrc;A.canPlayType=p.HTMLVimeoVideoElement.canPlayType;return A}var h=16,i="",g="https://player.vimeo.com";p.HTMLVimeoVideoElement=function(k){return new b(k)};p.HTMLVimeoVideoElement._canPlaySrc=function(k){return/player.vimeo.com\/video\/\d+/.test(k)||/vimeo.com\/\d+/.test(k)?"probably":i};p.HTMLVimeoVideoElement.canPlayType=function(k){return k==="video/x-vimeo"?"probably":i}})(Popcorn,window,document);(function(p,e){function l(){return"maybe"}function d(b,h){var i=typeof b==="string"?e.querySelector(b):b,g=e.createElement(h);i.appendChild(g);g._canPlaySrc=l;return g}p.HTMLVideoElement=function(b){return d(b,"video")};p.HTMLVideoElement._canPlaySrc=l;p.HTMLAudioElement=function(b){return d(b,"audio")};p.HTMLAudioElement._canPlaySrc=l})(Popcorn,window.document);(function(p,e,l){function d(){var u;if(YT.loaded)for(t=true;o.length;){u=o.shift();u()}else setTimeout(d,250)}function b(){var u;if(!q){if(e.YT)d();else{u=l.createElement("script");u.addEventListener("load",d,false);u.src="https://www.youtube.com/iframe_api";l.head.appendChild(u)}q=true}return t}function h(u){o.push(u)}function i(u){function E(J){W.push(J)}function C(){R.pauseVideo();j("play",C);n("play",K)}function f(){n("pause",M);j("pause",f)}function G(){var J=function(){if(R.isMuted()){n("play",
|
109
|
+
c);R.playVideo()}else setTimeout(J,0)};V=true;R.mute();J()}function A(J){var N={name:"MediaError"};switch(J.data){case 2:N.message="Invalid video parameter.";N.code=MediaError.MEDIA_ERR_ABORTED;break;case 5:N.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";N.code=MediaError.MEDIA_ERR_DECODE;case 100:N.message="Video not found.";N.code=MediaError.MEDIA_ERR_NETWORK;break;case 101:case 150:N.message="Video not usable.";N.code=
|
110
|
+
MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED;break;default:N.message="Unknown error.";N.code=5}H.error=N;I.dispatchEvent("error")}function O(){n("play",K);n("pause",M);if(H.autoplay||!H.paused){j("play",O);H.paused=false;E(function(){H.paused||K()})}H.muted||R.unMute();H.readyState=I.HAVE_METADATA;I.dispatchEvent("loadedmetadata");aa=setInterval(v,g);I.dispatchEvent("loadeddata");H.readyState=I.HAVE_FUTURE_DATA;I.dispatchEvent("canplay");U=true;for(ba=setInterval(L,50);W.length;){W[0]();W.shift()}H.readyState=
|
111
|
+
I.HAVE_ENOUGH_DATA;I.dispatchEvent("canplaythrough")}function a(){j("pause",a);if(R.getCurrentTime()>0)setTimeout(a,0);else if(H.autoplay||!H.paused){n("play",O);R.playVideo()}else O()}function c(){j("play",c);if(R.getCurrentTime()===0)setTimeout(c,0);else{n("pause",a);R.seekTo(0);R.pauseVideo()}}function n(J,N){I.addEventListener("youtube-"+J,N,false)}function j(J,N){I.removeEventListener("youtube-"+J,N,false)}function w(J){I.dispatchEvent("youtube-"+J)}function x(){H.networkState=I.NETWORK_LOADING;
|
112
|
+
I.dispatchEvent("waiting")}function z(J){switch(J.data){case YT.PlayerState.ENDED:w("ended");break;case YT.PlayerState.PLAYING:w("play");break;case YT.PlayerState.PAUSED:R.getDuration()!==R.getCurrentTime()&&w("pause");break;case YT.PlayerState.BUFFERING:w("buffering")}J.data!==YT.PlayerState.BUFFERING&&ca===YT.PlayerState.BUFFERING&&I.dispatchEvent("progress");ca=J.data}function F(J){if(I._canPlaySrc(J)){H.src=J;if(b()){if(V)if(U){if(V&&R){j("buffering",x);j("ended",D);j("play",K);j("pause",M);M();
|
113
|
+
Z=U=false;H.currentTime=0;W=[];clearInterval(aa);clearInterval(ba);R.stopVideo();R.clearVideo();R.destroy();S=l.createElement("div")}}else{E(function(){F(J)});return}P.appendChild(S);var N=I._util.parseUri(J).queryKey;delete N.v;H.autoplay=N.autoplay==="1"||H.autoplay;delete N.autoplay;H.loop=N.loop==="1"||H.loop;delete N.loop;N.rel=N.rel||0;N.modestbranding=N.modestbranding||1;N.iv_load_policy=N.iv_load_policy||3;N.disablekb=N.disablekb||1;N.showinfo=N.showinfo||0;var ea=e.location.protocol==="file:"?
|
114
|
+
"*":e.location.protocol+"//"+e.location.host;N.origin=N.origin||ea;N.controls=N.controls||H.controls?2:0;H.controls=N.controls;N.wmode=N.wmode||"opaque";J=r.exec(J)[1];p.getJSONP("https://gdata.youtube.com/feeds/api/videos/"+J+"?v=2&alt=jsonc&callback=?",function(X){if(X.error)console.warn("failed to retreive duration data, reason: "+X.error.message);else if(X.data){H.duration=X.data.duration;I.dispatchEvent("durationchange");R=new YT.Player(S,{width:"100%",height:"100%",wmode:N.wmode,videoId:J,playerVars:N,
|
115
|
+
events:{onReady:G,onError:A,onStateChange:z}});H.networkState=I.NETWORK_LOADING;I.dispatchEvent("loadstart");I.dispatchEvent("progress")}else console.warn("failed to retreive duration data, reason: no response data")})}else h(function(){F(J)})}else{H.error={name:"MediaError",message:"Media Source Not Supported",code:MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED};I.dispatchEvent("error")}}function v(){var J=R.getCurrentTime();if(H.seeking)m(J-H.currentTime)<1&&Q();else{if(m(H.currentTime-J)>g){B();Q()}H.currentTime=
|
116
|
+
J}}function L(){var J=R.getVideoLoadedFraction();if(J&&$!==J){$=J;I.dispatchEvent("progress")}}function y(J){if(J!==H.currentTime){H.currentTime=J;if(U){B();R.seekTo(J)}else E(function(){B();R.seekTo(J)})}}function s(){I.dispatchEvent("timeupdate")}function B(){n("pause",f);j("pause",M);H.seeking=true;I.dispatchEvent("seeking")}function Q(){H.ended=false;H.seeking=false;I.dispatchEvent("timeupdate");I.dispatchEvent("seeked");I.dispatchEvent("canplay");I.dispatchEvent("canplaythrough")}function K(){if(H.ended){y(0);
|
117
|
+
H.ended=false}da=setInterval(s,I._util.TIMEUPDATE_MS);H.paused=false;if(Y){Y=false;if(H.loop&&!Z||!H.loop){Z=true;I.dispatchEvent("play")}I.dispatchEvent("playing")}}function M(){H.paused=true;if(!Y){Y=true;clearInterval(da);I.dispatchEvent("pause")}}function D(){if(H.loop){y(0);I.play()}else{H.ended=true;M();n("play",C);j("play",K);I.dispatchEvent("timeupdate");I.dispatchEvent("ended")}}function T(J){H.muted=J;if(U){R[J?"mute":"unMute"]();I.dispatchEvent("volumechange")}else E(function(){T(H.muted)})}
|
118
|
+
if(!e.postMessage)throw"ERROR: HTMLYouTubeVideoElement requires window.postMessage";var I=new p._MediaElementProto,P=typeof u==="string"?l.querySelector(u):u,S=l.createElement("div"),H={src:k,networkState:I.NETWORK_EMPTY,readyState:I.HAVE_NOTHING,seeking:false,autoplay:k,preload:k,controls:false,loop:false,poster:k,volume:1,muted:false,currentTime:0,duration:NaN,ended:false,paused:true,error:null},V=false,U=false,Z=false,R,Y=true,W=[],ca=-1,ba,$=0,aa,da;I._eventNamespace=p.guid("HTMLYouTubeVideoElement::");
|
119
|
+
I.parentNode=P;I._util.type="YouTube";n("buffering",x);n("ended",D);I.play=function(){H.paused=false;U?R.playVideo():E(function(){I.play()})};I.pause=function(){H.paused=true;if(U){f();R.pauseVideo()}else E(function(){I.pause()})};Object.defineProperties(I,{src:{get:function(){return H.src},set:function(J){J&&J!==H.src&&F(J)}},autoplay:{get:function(){return H.autoplay},set:function(J){H.autoplay=I._util.isAttributeSet(J)}},loop:{get:function(){return H.loop},set:function(J){H.loop=I._util.isAttributeSet(J)}},
|
120
|
+
width:{get:function(){return I.parentNode.offsetWidth}},height:{get:function(){return I.parentNode.offsetHeight}},currentTime:{get:function(){return H.currentTime},set:function(J){y(J)}},duration:{get:function(){return H.duration}},ended:{get:function(){return H.ended}},paused:{get:function(){return H.paused}},seeking:{get:function(){return H.seeking}},readyState:{get:function(){return H.readyState}},networkState:{get:function(){return H.networkState}},volume:{get:function(){return H.volume},set:function(J){if(J<
|
121
|
+
0||J>1)throw"Volume value must be between 0.0 and 1.0";H.volume=J;if(U){R.setVolume(H.volume*100);I.dispatchEvent("volumechange")}else E(function(){I.volume=J})}},muted:{get:function(){return H.muted},set:function(J){T(I._util.isAttributeSet(J))}},error:{get:function(){return H.error}},buffered:{get:function(){var J={start:function(N){if(N===0)return 0;throw"INDEX_SIZE_ERR: DOM Exception 1";},end:function(N){if(N===0){if(!H.duration)return 0;return H.duration*$}throw"INDEX_SIZE_ERR: DOM Exception 1";
|
122
|
+
}};Object.defineProperties(J,{length:{get:function(){return 1}}});return J},configurable:true}});I._canPlaySrc=p.HTMLYouTubeVideoElement._canPlaySrc;I.canPlayType=p.HTMLYouTubeVideoElement.canPlayType;return I}var g=10,k="",r=/^.*(?:\/|v=)(.{11})/,m=Math.abs,t=false,q=false,o=[];p.HTMLYouTubeVideoElement=function(u){return new i(u)};p.HTMLYouTubeVideoElement._canPlaySrc=function(u){return/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(youtu).*(?:\/|v=)(.{11})/.test(u)?"probably":k};p.HTMLYouTubeVideoElement.canPlayType=
|
123
|
+
function(u){return u==="video/x-youtube"?"probably":k}})(Popcorn,window,document);(function(p,e,l){function d(){if(!r){p.getScript("https://w.soundcloud.com/player/api.js",function(){p.getScript("https://connect.soundcloud.com/sdk.js",function(){k=true;SC.initialize({client_id:"PRaNFlda6Bhf5utPjUsptg"});for(var t=m.length;t--;){m[t]();delete m[t]}})});r=true}return k}function b(t){m.unshift(t)}function h(t){function q(D){B.unshift(D)}function o(){s.bind(SC.Widget.Events.LOAD_PROGRESS,function(D){O({type:"loadProgress",data:D.currentPosition/1E3})});s.bind(SC.Widget.Events.PLAY_PROGRESS,
|
124
|
+
function(D){O({type:"playProgress",data:D.currentPosition/1E3})});s.bind(SC.Widget.Events.PLAY,function(){O({type:"play"})});s.bind(SC.Widget.Events.PAUSE,function(){O({type:"pause"})});s.bind(SC.Widget.Events.SEEK,function(){s.getPosition(function(D){D=D/1E3;if(v.seeking)if(Math.floor(D)!==Math.floor(v.currentTime))s.seekTo(v.currentTime*1E3);else{v.ended=false;v.seeking=false;x.dispatchEvent("timeupdate");x.dispatchEvent("seeked");x.dispatchEvent("canplay");x.dispatchEvent("canplaythrough")}else O({type:"seek",
|
125
|
+
data:D})})});s.bind(SC.Widget.Events.FINISH,function(){O({type:"finish"})});L=true;s.getDuration(E)}function u(){s.bind(SC.Widget.Events.PLAY_PROGRESS,function(D){s.setVolume(0);if(D.currentPosition>0){s.unbind(SC.Widget.Events.PLAY_PROGRESS);s.bind(SC.Widget.Events.PAUSE,function(){s.unbind(SC.Widget.Events.PAUSE);s.setVolume(100);s.bind(SC.Widget.Events.SEEK,function(){s.unbind(SC.Widget.Events.SEEK);o()});s.seekTo(0)});s.pause()}});s.play()}function E(D){D/=1E3;var T=v.duration;if(T!==D){v.duration=
|
126
|
+
D;x.dispatchEvent("durationchange");if(isNaN(T)){v.networkState=x.NETWORK_IDLE;v.readyState=x.HAVE_METADATA;x.dispatchEvent("loadedmetadata");x.dispatchEvent("loadeddata");v.readyState=x.HAVE_FUTURE_DATA;x.dispatchEvent("canplay");v.readyState=x.HAVE_ENOUGH_DATA;x.dispatchEvent("canplaythrough");for(D=B.length;D--;){B[D]();delete B[D]}v.paused&&v.autoplay&&x.play()}}}function C(D){function T(){v.seeking=true;x.dispatchEvent("seeking");s.seekTo(D)}v.currentTime=D;D*=1E3;L?T():addMediaReadyCallback(T)}
|
127
|
+
function f(){v.paused=true;if(!y){y=true;clearInterval(Q);x.dispatchEvent("pause")}}function G(){x.dispatchEvent("timeupdate")}function A(D){v.currentTime=D;D!==M&&x.dispatchEvent("timeupdate");M=D}function O(D){switch(D.type){case "loadProgress":x.dispatchEvent("progress");break;case "playProgress":A(D.data);break;case "play":if(!K){K=setInterval(a,i);v.loop&&x.dispatchEvent("play")}Q=setInterval(G,x._util.TIMEUPDATE_MS);v.paused=false;if(y){y=false;v.loop||x.dispatchEvent("play");x.dispatchEvent("playing")}break;
|
128
|
+
case "pause":f();break;case "finish":if(v.loop){C(0);x.play()}else{v.ended=true;x.pause();f();x.dispatchEvent("timeupdate");x.dispatchEvent("ended")}break;case "seek":A(D.data)}}function a(){v.ended||s.getPosition(function(D){A(D/1E3)})}function c(D){if(x._canPlaySrc(D)){v.src=D;if(L)if(L&&s){clearInterval(K);s.pause();s.unbind(SC.Widget.Events.READY);s.unbind(SC.Widget.Events.LOAD_PROGRESS);s.unbind(SC.Widget.Events.PLAY_PROGRESS);s.unbind(SC.Widget.Events.PLAY);s.unbind(SC.Widget.Events.PAUSE);
|
129
|
+
s.unbind(SC.Widget.Events.SEEK);s.unbind(SC.Widget.Events.FINISH);z.removeChild(F);F=l.createElement("iframe")}if(d()){L=false;SC.get("/resolve",{url:D},function(T){var I;if(T.errors){I={name:"MediaError"};if(T.errors[0])if(T.errors[0].error_message==="404 - Not Found"){I.message="Video not found.";I.code=MediaError.MEDIA_ERR_NETWORK}v.error=I;x.dispatchEvent("error")}F.id=p.guid("soundcloud-");F.width=v.width;F.height=v.height;F.frameBorder=0;F.webkitAllowFullScreen=true;F.mozAllowFullScreen=true;
|
130
|
+
F.allowFullScreen=true;w(v.controls);z.appendChild(F);F.onload=function(){F.onload=null;s=SC.Widget(F);s.bind(SC.Widget.Events.READY,u);v.networkState=x.NETWORK_LOADING;x.dispatchEvent("loadstart");x.dispatchEvent("progress")};F.src="https://w.soundcloud.com/player/?url="+T.uri+"&show_artwork=false&buying=false&liking=false&sharing=false&download=false&show_comments=false&show_user=false&single_active=false"})}else b(function(){c(D)})}else{v.error={name:"MediaError",message:"Media Source Not Supported",
|
131
|
+
code:MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED};x.dispatchEvent("error")}}function n(D){v.volume=D;if(L){s.setVolume(D);x.dispatchEvent("volumechange")}else q(function(){n(D)})}function j(D){if(L)if(D){v.muted=v.volume;n(0)}else{v.muted=0;n(v.muted)}else{v.muted=D?1:0;q(function(){j(D)})}}function w(D){if(L){F.style.position="absolute";F.style.visibility=D?"visible":"hidden"}else{F.style.opacity=D?"1":"0";F.style.pointerEvents=D?"auto":"none"}v.controls=D}if(!e.postMessage)throw"ERROR: HTMLSoundCloudAudioElement requires window.postMessage";
|
132
|
+
var x=new p._MediaElementProto,z=typeof t==="string"?p.dom.find(t):t,F=l.createElement("iframe"),v={src:g,networkState:x.NETWORK_EMPTY,readyState:x.HAVE_NOTHING,seeking:false,autoplay:g,preload:g,controls:false,loop:false,poster:g,volume:100,muted:0,currentTime:0,duration:NaN,ended:false,paused:true,width:z.width|0?z.width:x._util.MIN_WIDTH,height:z.height|0?z.height:x._util.MIN_HEIGHT,error:null},L=false,y=true,s,B=[],Q,K,M=0;x._eventNamespace=p.guid("HTMLSoundCloudAudioElement::");x.parentNode=
|
133
|
+
z;x._util.type="SoundCloud";x.play=function(){v.paused=false;if(L){v.ended&&C(0);s.play()}else q(function(){x.play()})};x.pause=function(){v.paused=true;L?s.pause():q(function(){x.pause()})};Object.defineProperties(x,{src:{get:function(){return v.src},set:function(D){D&&D!==v.src&&c(D)}},autoplay:{get:function(){return v.autoplay},set:function(D){v.autoplay=x._util.isAttributeSet(D)}},loop:{get:function(){return v.loop},set:function(D){v.loop=x._util.isAttributeSet(D)}},width:{get:function(){return F.width},
|
134
|
+
set:function(D){F.width=D;v.width=F.width}},height:{get:function(){return F.height},set:function(D){F.height=D;v.height=F.height}},currentTime:{get:function(){return v.currentTime},set:function(D){C(D)}},duration:{get:function(){return v.duration}},ended:{get:function(){return v.ended}},paused:{get:function(){return v.paused}},seeking:{get:function(){return v.seeking}},readyState:{get:function(){return v.readyState}},networkState:{get:function(){return v.networkState}},volume:{get:function(){return(v.muted>
|
135
|
+
0?v.muted:v.volume)/100},set:function(D){if(D<0||D>1)throw"Volume value must be between 0.0 and 1.0";D*=100;n(D)}},muted:{get:function(){return v.muted>0},set:function(D){j(x._util.isAttributeSet(D))}},error:{get:function(){return v.error}},controls:{get:function(){return v.controls},set:function(D){w(!!D)}}});x._canPlaySrc=p.HTMLSoundCloudAudioElement._canPlaySrc;x.canPlayType=p.HTMLSoundCloudAudioElement.canPlayType;return x}var i=16,g="",k=false,r=false,m=[];p.HTMLSoundCloudAudioElement=function(t){return new h(t)};
|
136
|
+
p.HTMLSoundCloudAudioElement._canPlaySrc=function(t){return/(?:https?:\/\/www\.|https?:\/\/|www\.|\.|^)(soundcloud)/.test(t)?"probably":g};p.HTMLSoundCloudAudioElement.canPlayType=function(t){return t==="audio/x-soundcloud"?"probably":g}})(Popcorn,window,document);(function(p){var e=function(l,d){var b=0,h=0,i;p.forEach(d.classes,function(g,k){i=[];if(g==="parent")i[0]=document.querySelectorAll("#"+d.target)[0].parentNode;else i=document.querySelectorAll("#"+d.target+" "+g);b=0;for(h=i.length;b<h;b++)i[b].classList.toggle(k)})};p.compose("applyclass",{manifest:{about:{name:"Popcorn applyclass Effect",version:"0.1",author:"@scottdowne",website:"scottdowne.wordpress.com"},options:{}},_setup:function(l){l.classes={};l.applyclass=l.applyclass||"";for(var d=l.applyclass.replace(/\s/g,
|
137
|
+
"").split(","),b=[],h=0,i=d.length;h<i;h++){b=d[h].split(":");if(b[0])l.classes[b[0]]=b[1]||""}},start:e,end:e})})(Popcorn);(function(p){function e(d,b){if(d.map)d.map.div.style.display=b;else setTimeout(function(){e(d,b)},10)}var l=1;p.plugin("openmap",function(d){var b,h,i,g,k,r,m,t,q=document.getElementById(d.target);b=document.createElement("div");b.id="openmapdiv"+l;b.style.width="100%";b.style.height="100%";l++;q&&q.appendChild(b);t=function(){if(window.OpenLayers&&window.OpenLayers.Layer.Stamen){if(d.location){location=new OpenLayers.LonLat(0,0);p.getJSONP("//tinygeocoder.com/create-api.php?q="+d.location+"&callback=jsonp",
|
138
|
+
function(u){h=new OpenLayers.LonLat(u[1],u[0])})}else h=new OpenLayers.LonLat(d.lng,d.lat);d.type=d.type||"ROADMAP";switch(d.type){case "SATELLITE":d.map=new OpenLayers.Map({div:b,maxResolution:0.28125,tileSize:new OpenLayers.Size(512,512)});var o=new OpenLayers.Layer.WorldWind("LANDSAT","//worldwind25.arc.nasa.gov/tile/tile.aspx",2.25,4,{T:"105"});d.map.addLayer(o);g=new OpenLayers.Projection("EPSG:4326");i=new OpenLayers.Projection("EPSG:4326");break;case "TERRAIN":g=new OpenLayers.Projection("EPSG:4326");
|
139
|
+
i=new OpenLayers.Projection("EPSG:4326");d.map=new OpenLayers.Map({div:b,projection:i});o=new OpenLayers.Layer.WMS("USGS Terraserver","//terraserver-usa.org/ogcmap.ashx?",{layers:"DRG"});d.map.addLayer(o);break;case "STAMEN-TONER":case "STAMEN-WATERCOLOR":case "STAMEN-TERRAIN":o=d.type.replace("STAMEN-","").toLowerCase();o=new OpenLayers.Layer.Stamen(o);g=new OpenLayers.Projection("EPSG:4326");i=new OpenLayers.Projection("EPSG:900913");h=h.transform(g,i);d.map=new OpenLayers.Map({div:b,projection:i,
|
140
|
+
displayProjection:g,controls:[new OpenLayers.Control.Navigation,new OpenLayers.Control.PanPanel,new OpenLayers.Control.ZoomPanel]});d.map.addLayer(o);break;default:i=new OpenLayers.Projection("EPSG:900913");g=new OpenLayers.Projection("EPSG:4326");h=h.transform(g,i);d.map=new OpenLayers.Map({div:b,projection:i,displayProjection:g});o=new OpenLayers.Layer.OSM;d.map.addLayer(o)}if(d.map){d.map.setCenter(h,d.zoom||10);d.map.div.style.display="none"}}else setTimeout(function(){t()},50)};t();return{_setup:function(o){window.OpenLayers||
|
141
|
+
p.getScript("//openlayers.org/api/OpenLayers.js",function(){p.getScript("//maps.stamen.com/js/tile.stamen.js")});var u=function(){if(o.map){o.zoom=o.zoom||2;if(o.zoom&&typeof o.zoom!=="number")o.zoom=+o.zoom;o.map.setCenter(h,o.zoom);if(o.markers){var E=OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style["default"]),C=function(j){clickedFeature=j.feature;if(clickedFeature.attributes.text){m=new OpenLayers.Popup.FramedCloud("featurePopup",clickedFeature.geometry.getBounds().getCenterLonLat(),
|
142
|
+
new OpenLayers.Size(120,250),clickedFeature.attributes.text,null,true,function(){r.unselect(this.feature)});clickedFeature.popup=m;m.feature=clickedFeature;o.map.addPopup(m)}},f=function(j){feature=j.feature;if(feature.popup){m.feature=null;o.map.removePopup(feature.popup);feature.popup.destroy();feature.popup=null}},G=function(j){p.getJSONP("//tinygeocoder.com/create-api.php?q="+j.location+"&callback=jsonp",function(w){w=(new OpenLayers.Geometry.Point(w[1],w[0])).transform(g,i);var x=OpenLayers.Util.extend({},
|
143
|
+
E);if(!j.size||isNaN(j.size))j.size=14;x.pointRadius=j.size;x.graphicOpacity=1;x.externalGraphic=j.icon;w=new OpenLayers.Feature.Vector(w,null,x);if(j.text)w.attributes={text:j.text};k.addFeatures([w])})};k=new OpenLayers.Layer.Vector("Point Layer",{style:E});o.map.addLayer(k);for(var A=0,O=o.markers.length;A<O;A++){var a=o.markers[A];if(a.text)if(!r){r=new OpenLayers.Control.SelectFeature(k);o.map.addControl(r);r.activate();k.events.on({featureselected:C,featureunselected:f})}if(a.location)G(a);
|
144
|
+
else{var c=(new OpenLayers.Geometry.Point(a.lng,a.lat)).transform(g,i),n=OpenLayers.Util.extend({},E);if(!a.size||isNaN(a.size))a.size=14;n.pointRadius=a.size;n.graphicOpacity=1;n.externalGraphic=a.icon;c=new OpenLayers.Feature.Vector(c,null,n);if(a.text)c.attributes={text:a.text};k.addFeatures([c])}}}}else setTimeout(function(){u()},13)};u()},start:function(o,u){e(u,"block")},end:function(o,u){e(u,"none")},_teardown:function(){q&&q.removeChild(b);b=map=h=i=g=k=r=m=null}}},{about:{name:"Popcorn OpenMap Plugin",
|
117
145
|
version:"0.3",author:"@mapmeld",website:"mapadelsur.blogspot.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"map-container",type:{elem:"select",options:["ROADMAP","SATELLITE","TERRAIN"],label:"Map Type",optional:true},zoom:{elem:"input",type:"number",label:"Zoom","default":2},lat:{elem:"input",type:"text",label:"Lat",optional:true},lng:{elem:"input",type:"text",label:"Lng",optional:true},location:{elem:"input",type:"text",label:"Location",
|
118
|
-
"default":"Toronto, Ontario, Canada"},markers:{elem:"input",type:"text",label:"List Markers",optional:true}}})})(Popcorn);
|
119
|
-
label:"Start"},end:{elem:"input",type:"number",label:"End"},
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
j.
|
129
|
-
"
|
130
|
-
e&&
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
146
|
+
"default":"Toronto, Ontario, Canada"},markers:{elem:"input",type:"text",label:"List Markers",optional:true}}})})(Popcorn);var wikiCallback;
|
147
|
+
(function(p){p.plugin("wikipedia",{manifest:{about:{name:"Popcorn Wikipedia Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},lang:{elem:"input",type:"text",label:"Language","default":"english",optional:true},src:{elem:"input",type:"url",label:"Wikipedia URL","default":"http://en.wikipedia.org/wiki/Cat"},title:{elem:"input",type:"text",label:"Title","default":"Cats",optional:true},
|
148
|
+
numberofwords:{elem:"input",type:"number",label:"Number of Words","default":"200",optional:true},target:"wikipedia-container"}},_setup:function(e){var l,d=p.guid();if(!e.lang)e.lang="en";e.numberofwords=e.numberofwords||200;window["wikiCallback"+d]=function(b){e._link=document.createElement("a");e._link.setAttribute("href",e.src);e._link.setAttribute("target","_blank");e._link.innerHTML=e.title||b.parse.displaytitle;e._desc=document.createElement("p");l=b.parse.text["*"].substr(b.parse.text["*"].indexOf("<p>"));
|
149
|
+
l=l.replace(/((<(.|\n)+?>)|(\((.*?)\) )|(\[(.*?)\]))/g,"");l=l.split(" ");e._desc.innerHTML=l.slice(0,l.length>=e.numberofwords?e.numberofwords:l.length).join(" ")+" ...";e._fired=true};e.src&&p.getScript("//"+e.lang+".wikipedia.org/w/api.php?action=parse&props=text&redirects&page="+e.src.slice(e.src.lastIndexOf("/")+1)+"&format=json&callback=wikiCallback"+d);e.toString=function(){return e.src||e._natives.manifest.options.src["default"]}},start:function(e,l){var d=function(){if(l._fired){if(l._link&&
|
150
|
+
l._desc)if(document.getElementById(l.target)){document.getElementById(l.target).appendChild(l._link);document.getElementById(l.target).appendChild(l._desc);l._added=true}}else setTimeout(function(){d()},13)};d()},end:function(e,l){if(l._added){document.getElementById(l.target).removeChild(l._link);document.getElementById(l.target).removeChild(l._desc)}},_teardown:function(e){if(e._added){e._link.parentNode&&document.getElementById(e.target).removeChild(e._link);e._desc.parentNode&&document.getElementById(e.target).removeChild(e._desc);
|
151
|
+
delete e.target}}})})(Popcorn);(function(p){var e=0,l=function(d,b){var h=d.container=document.createElement("div"),i=h.style,g=d.media,k=function(){var r=d.position();i.fontSize="18px";i.width=g.offsetWidth+"px";i.top=r.top+g.offsetHeight-h.offsetHeight-40+"px";i.left=r.left+"px";setTimeout(k,10)};h.id=b||p.guid();i.position="absolute";i.color="white";i.textShadow="black 2px 2px 6px";i.fontWeight="bold";i.textAlign="center";k();d.media.parentNode.appendChild(h);return h};p.plugin("subtitle",{manifest:{about:{name:"Popcorn Subtitle Plugin",
|
152
|
+
version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"text",label:"Start"},end:{elem:"input",type:"text",label:"End"},target:"subtitle-container",text:{elem:"input",type:"text",label:"Text"}}},_setup:function(d){var b=document.createElement("div");b.id="subtitle-"+e++;b.style.display="none";!this.container&&(!d.target||d.target==="subtitle-container")&&l(this);d.container=d.target&&d.target!=="subtitle-container"?document.getElementById(d.target)||
|
153
|
+
l(this,d.target):this.container;document.getElementById(d.container.id)&&document.getElementById(d.container.id).appendChild(b);d.innerContainer=b;d.showSubtitle=function(){d.innerContainer.innerHTML=d.text||""}},start:function(d,b){b.innerContainer.style.display="inline";b.showSubtitle(b,b.text)},end:function(d,b){b.innerContainer.style.display="none";b.innerContainer.innerHTML=""},_teardown:function(d){d.container.removeChild(d.innerContainer)}})})(Popcorn);(function(p,e){var l={};p.plugin("documentcloud",{manifest:{about:{name:"Popcorn Document Cloud Plugin",version:"0.1",author:"@humphd, @ChrisDeCairos",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"documentcloud-container",width:{elem:"input",type:"text",label:"Width",optional:true},height:{elem:"input",type:"text",label:"Height",optional:true},src:{elem:"input",type:"url",label:"PDF URL","default":"http://www.documentcloud.org/documents/70050-urbina-day-1-in-progress.html"},
|
154
|
+
preload:{elem:"input",type:"checkbox",label:"Preload","default":true},page:{elem:"input",type:"number",label:"Page Number",optional:true},aid:{elem:"input",type:"number",label:"Annotation Id",optional:true}}},_setup:function(d){function b(){function m(j){d._key=j.api.getId();d._changeView=function(w){d.aid?w.pageSet.showAnnotation(w.api.getAnnotation(d.aid)):w.api.setCurrentPage(d.page)}}function t(){l[d._key]={num:1,id:d._containerId};i.loaded=true}i.loaded=false;var q=d.url.replace(/\.html$/,".js"),
|
155
|
+
o=d.target,u=e.getElementById(o),E=e.createElement("div"),C=p.position(u),f=d.width||C.width;C=d.height||C.height;var G=d.sidebar||true,A=d.text||true,O=d.pdf||true,a=d.showAnnotations||true,c=d.zoom||700,n=d.search||true;if(!function(j){var w=false;p.forEach(i.viewers,function(x){if(x.api.getSchema().canonicalURL===j){m(x);x=l[d._key];d._containerId=x.id;x.num+=1;w=true;i.loaded=true}});return w}(d.url)){E.id=d._containerId=p.guid(o);o="#"+E.id;u.appendChild(E);g.trigger("documentready");i.load(q,
|
156
|
+
{width:f,height:C,sidebar:G,text:A,pdf:O,showAnnotations:a,zoom:c,search:n,container:o,afterLoad:d.page||d.aid?function(j){m(j);d._changeView(j);E.style.visibility="hidden";j.elements.pages.hide();t()}:function(j){m(j);t();E.style.visibility="hidden";j.elements.pages.hide()}})}}function h(){window.DV.loaded?b():setTimeout(h,25)}var i=window.DV=window.DV||{},g=this;if(i.loading)h();else{i.loading=true;i.recordHit="//www.documentcloud.org/pixel.gif";var k=e.createElement("link"),r=e.getElementsByTagName("head")[0];
|
157
|
+
k.rel="stylesheet";k.type="text/css";k.media="screen";k.href="//s3.documentcloud.org/viewer/viewer-datauri.css";r.appendChild(k);i.loaded=false;p.getScript("http://s3.documentcloud.org/viewer/viewer.js",function(){i.loading=false;b()})}d.toString=function(){return d.src||d._natives.manifest.options.src["default"]}},start:function(d,b){var h=e.getElementById(b._containerId),i=DV.viewers[b._key];(b.page||b.aid)&&i&&b._changeView(i);if(h&&i){h.style.visibility="visible";i.elements.pages.show()}},end:function(d,
|
158
|
+
b){var h=e.getElementById(b._containerId);if(h&&DV.viewers[b._key]){h.style.visibility="hidden";DV.viewers[b._key].elements.pages.hide()}},_teardown:function(d){var b=e.getElementById(d._containerId);if((d=d._key)&&DV.viewers[d]&&--l[d].num===0){for(DV.viewers[d].api.unload();b.hasChildNodes();)b.removeChild(b.lastChild);b.parentNode.removeChild(b)}}})})(Popcorn,window.document);(function(p){var e=/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(youtu|vimeo|soundcloud|baseplayer)/,l={},d={vimeo:false,youtube:false,soundcloud:false,module:false};Object.defineProperty(l,void 0,{get:function(){return d[void 0]},set:function(b){d[void 0]=b}});p.plugin("mediaspawner",{manifest:{about:{name:"Popcorn Media Spawner Plugin",version:"0.1",author:"Matthew Schranz, @mjschranz",website:"mschranz.wordpress.com"},options:{source:{elem:"input",type:"text",label:"Media Source","default":"http://www.youtube.com/watch?v=CXDstfD9eJ0"},
|
159
|
+
caption:{elem:"input",type:"text",label:"Media Caption","default":"Popcorn Popping",optional:true},target:"mediaspawner-container",start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},autoplay:{elem:"input",type:"checkbox",label:"Autoplay Video",optional:true},width:{elem:"input",type:"number",label:"Media Width","default":400,units:"px",optional:true},height:{elem:"input",type:"number",label:"Media Height","default":200,units:"px",optional:true}}},_setup:function(b){function h(){function t(){if(k!==
|
160
|
+
"HTML5"&&!window.Popcorn[k])setTimeout(function(){t()},300);else{b.id=b._container.id;b._container.style.width=b.width+"px";b._container.style.height=b.height+"px";b.popcorn=p.smart("#"+b.id,b.source);k==="HTML5"&&b.popcorn.controls(true);b._container.style.width="0px";b._container.style.height="0px";b._container.style.visibility="hidden";b._container.style.overflow="hidden"}}if(k!=="HTML5"&&!window.Popcorn[k]&&!l[k]){l[k]=true;p.getScript("http://popcornjs.org/code/players/"+k+"/popcorn."+k+".js",
|
161
|
+
function(){t()})}else t()}function i(){window.Popcorn.player?h():setTimeout(function(){i()},300)}var g=document.getElementById(b.target)||{},k,r,m;if(r=e.exec(b.source)){k=r[1];if(k==="youtu")k="youtube"}else k="HTML5";b._type=k;b._container=document.createElement("div");r=b._container;r.id="mediaSpawnerdiv-"+p.guid();b.width=b.width||400;b.height=b.height||200;if(b.caption){m=document.createElement("div");m.innerHTML=b.caption;m.style.display="none";b._capCont=m;r.appendChild(m)}g&&g.appendChild(r);
|
162
|
+
if(!window.Popcorn.player&&!l.module){l.module=true;p.getScript("http://popcornjs.org/code/modules/player/popcorn.player.js",i)}else i();b.toString=function(){return b.source||b._natives.manifest.options.source["default"]}},start:function(b,h){if(h._capCont)h._capCont.style.display="";h._container.style.width=h.width+"px";h._container.style.height=h.height+"px";h._container.style.visibility="visible";h._container.style.overflow="visible";h.autoplay&&h.popcorn.play()},end:function(b,h){if(h._capCont)h._capCont.style.display=
|
163
|
+
"none";h._container.style.width="0px";h._container.style.height="0px";h._container.style.visibility="hidden";h._container.style.overflow="hidden";h.popcorn.pause()},_teardown:function(b){b.popcorn&&b.popcorn.destory&&b.popcorn.destroy();document.getElementById(b.target)&&document.getElementById(b.target).removeChild(b._container)}})})(Popcorn,this);(function(p){var e=1;p.plugin("timeline",function(l){var d=document.getElementById(l.target),b=document.createElement("div"),h,i=true;if(d&&!d.firstChild){d.appendChild(h=document.createElement("div"));h.style.width="inherit";h.style.height="inherit";h.style.overflow="auto"}else h=d.firstChild;b.style.display="none";b.id="timelineDiv"+e;l.direction=l.direction||"up";if(l.direction.toLowerCase()==="down")i=false;if(d&&h)i?h.insertBefore(b,h.firstChild):h.appendChild(b);e++;b.innerHTML="<p><span id='big' style='font-size:24px; line-height: 130%;' >"+
|
164
|
+
l.title+"</span><br /><span id='mid' style='font-size: 16px;'>"+l.text+"</span><br />"+l.innerHTML;return{start:function(g,k){b.style.display="block";if(k.direction==="down")h.scrollTop=h.scrollHeight},end:function(){b.style.display="none"},_teardown:function(){h&&b&&h.removeChild(b)&&!h.firstChild&&d.removeChild(h)}}},{about:{name:"Popcorn Timeline Plugin",version:"0.1",author:"David Seifried @dcseifried",website:"dseifried.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},
|
165
|
+
end:{elem:"input",type:"number",label:"End"},target:"feed-container",title:{elem:"input",type:"text",label:"Title"},text:{elem:"input",type:"text",label:"Text"},innerHTML:{elem:"input",type:"text",label:"HTML Code",optional:true},direction:{elem:"select",options:["DOWN","UP"],label:"Direction",optional:true}}})})(Popcorn);(function(p){var e=0;p.plugin("flickr",function(l){var d,b=document.getElementById(l.target),h,i,g,k,r=l.numberofimages||4,m=l.height||"50px",t=l.width||"50px",q=l.padding||"5px",o=l.border||"0px";d=document.createElement("div");d.id="flickr"+e;d.style.width="100%";d.style.height="100%";d.style.display="none";e++;b&&b.appendChild(d);var u=function(){if(h)setTimeout(function(){u()},5);else{i="http://api.flickr.com/services/rest/?method=flickr.people.findByUsername&";i+="username="+l.username+"&api_key="+
|
166
|
+
l.apikey+"&format=json&jsoncallback=flickr";p.getJSONP(i,function(C){h=C.user.nsid;E()})}},E=function(){i="http://api.flickr.com/services/feeds/photos_public.gne?";if(h)i+="id="+h+"&";if(l.tags)i+="tags="+l.tags+"&";i+="lang=en-us&format=json&jsoncallback=flickr";p.xhr.getJSONP(i,function(C){var f=document.createElement("div");f.innerHTML="<p style='padding:"+q+";'>"+C.title+"<p/>";p.forEach(C.items,function(G,A){if(A<r){g=document.createElement("a");g.setAttribute("href",G.link);g.setAttribute("target",
|
167
|
+
"_blank");k=document.createElement("img");k.setAttribute("src",G.media.m);k.setAttribute("height",m);k.setAttribute("width",t);k.setAttribute("style","border:"+o+";padding:"+q);g.appendChild(k);f.appendChild(g)}else return false});d.appendChild(f)})};if(l.username&&l.apikey)u();else{h=l.userid;E()}l.toString=function(){return l.tags||l.username||"Flickr"};return{start:function(){d.style.display="inline"},end:function(){d.style.display="none"},_teardown:function(C){document.getElementById(C.target)&&
|
168
|
+
document.getElementById(C.target).removeChild(d)}}},{about:{name:"Popcorn Flickr Plugin",version:"0.2",author:"Scott Downe, Steven Weerdenburg, Annasob",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},userid:{elem:"input",type:"text",label:"User ID",optional:true},tags:{elem:"input",type:"text",label:"Tags"},username:{elem:"input",type:"text",label:"Username",optional:true},apikey:{elem:"input",type:"text",
|
169
|
+
label:"API Key",optional:true},target:"flickr-container",height:{elem:"input",type:"text",label:"Height","default":"50px",optional:true},width:{elem:"input",type:"text",label:"Width","default":"50px",optional:true},padding:{elem:"input",type:"text",label:"Padding",optional:true},border:{elem:"input",type:"text",label:"Border","default":"5px",optional:true},numberofimages:{elem:"input",type:"number","default":4,label:"Number of Images"}}})})(Popcorn);(function(p){p.plugin("webpage",{manifest:{about:{name:"Popcorn Webpage Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{id:{elem:"input",type:"text",label:"Id",optional:true},start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},src:{elem:"input",type:"url",label:"Webpage URL","default":"http://mozillapopcorn.org"},target:"iframe-container"}},_setup:function(e){var l=document.getElementById(e.target);e.src=e.src.replace(/^(https?:)?(\/\/)?/,
|
170
|
+
"//");e._iframe=document.createElement("iframe");e._iframe.setAttribute("width","100%");e._iframe.setAttribute("height","100%");e._iframe.id=e.id;e._iframe.src=e.src;e._iframe.style.display="none";l&&l.appendChild(e._iframe)},start:function(e,l){l._iframe.src=l.src;l._iframe.style.display="inline"},end:function(e,l){l._iframe.style.display="none"},_teardown:function(e){document.getElementById(e.target)&&document.getElementById(e.target).removeChild(e._iframe)}})})(Popcorn);(function(p){var e={},l=0,d=document.createElement("span"),b=["webkit","Moz","ms","O",""],h=["Transform","TransitionDuration","TransitionTimingFunction"],i={},g;document.getElementsByTagName("head")[0].appendChild(d);for(var k=0,r=h.length;k<r;k++)for(var m=0,t=b.length;m<t;m++){g=b[m]+h[k];if(g in d.style){i[h[k].toLowerCase()]=g;break}}document.getElementsByTagName("head")[0].appendChild(d);p.plugin("wordriver",{manifest:{about:{name:"Popcorn WordRiver Plugin"},options:{start:{elem:"input",type:"number",
|
171
|
+
label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"wordriver-container",text:{elem:"input",type:"text",label:"Text","default":"Popcorn.js"},color:{elem:"input",type:"text",label:"Color","default":"Green",optional:true}}},_setup:function(q){q._duration=q.end-q.start;var o;if(!(o=e[q.target])){o=q.target;e[o]=document.createElement("div");var u=document.getElementById(o);u&&u.appendChild(e[o]);e[o].style.height="100%";e[o].style.position="relative";o=e[o]}q._container=o;q.word=document.createElement("span");
|
172
|
+
q.word.style.position="absolute";q.word.style.whiteSpace="nowrap";q.word.style.opacity=0;q.word.style.MozTransitionProperty="opacity, -moz-transform";q.word.style.webkitTransitionProperty="opacity, -webkit-transform";q.word.style.OTransitionProperty="opacity, -o-transform";q.word.style.transitionProperty="opacity, transform";q.word.style[i.transitionduration]="1s, "+q._duration+"s";q.word.style[i.transitiontimingfunction]="linear";q.word.innerHTML=q.text;q.word.style.color=q.color||"black"},start:function(q,
|
173
|
+
o){o._container.appendChild(o.word);o.word.style[i.transform]="";o.word.style.fontSize=~~(30+20*Math.random())+"px";l%=o._container.offsetWidth-o.word.offsetWidth;o.word.style.left=l+"px";l+=o.word.offsetWidth+10;o.word.style[i.transform]="translateY("+(o._container.offsetHeight-o.word.offsetHeight)+"px)";o.word.style.opacity=1;setTimeout(function(){o.word.style.opacity=0},(o.end-o.start-1||1)*1E3)},end:function(q,o){o.word.style.opacity=0},_teardown:function(q){var o=document.getElementById(q.target);
|
174
|
+
q.word.parentNode&&q._container.removeChild(q.word);e[q.target]&&!e[q.target].childElementCount&&o&&o.removeChild(e[q.target])&&delete e[q.target]}})})(Popcorn);var googleCallback;
|
175
|
+
(function(p){function e(g,k,r){g=g.type?g.type.toUpperCase():"HYBRID";var m;if(g==="STAMEN-WATERCOLOR"||g==="STAMEN-TERRAIN"||g==="STAMEN-TONER")m=g.replace("STAMEN-","").toLowerCase();r=new google.maps.Map(r,{mapTypeId:m?m:google.maps.MapTypeId[g],mapTypeControlOptions:{mapTypeIds:[]}});m&&r.mapTypes.set(m,new google.maps.StamenMapType(m));r.getDiv().style.display="none";return r}var l=1,d=false,b=false,h,i;googleCallback=function(g){if(typeof google!=="undefined"&&google.maps&&google.maps.Geocoder&&
|
176
|
+
google.maps.LatLng){h=new google.maps.Geocoder;p.getScript("//maps.stamen.com/js/tile.stamen.js",function(){b=true})}else setTimeout(function(){googleCallback(g)},1)};i=function(){if(document.body){d=true;p.getScript("//maps.google.com/maps/api/js?sensor=false&callback=googleCallback")}else setTimeout(function(){i()},1)};p.plugin("googlemap",function(g){var k,r,m,t=document.getElementById(g.target);g.type=g.type||"ROADMAP";g.zoom=g.zoom||1;g.lat=g.lat||0;g.lng=g.lng||0;d||i();k=document.createElement("div");
|
177
|
+
k.id="actualmap"+l;k.style.width=g.width||"100%";k.style.height=g.height?g.height:t&&t.clientHeight?t.clientHeight+"px":"100%";l++;t&&t.appendChild(k);var q=function(){if(b){if(k)if(g.location)h.geocode({address:g.location},function(o,u){if(k&&u===google.maps.GeocoderStatus.OK){g.lat=o[0].geometry.location.lat();g.lng=o[0].geometry.location.lng();m=new google.maps.LatLng(g.lat,g.lng);r=e(g,m,k)}});else{m=new google.maps.LatLng(g.lat,g.lng);r=e(g,m,k)}}else setTimeout(function(){q()},5)};q();g.toString=
|
178
|
+
function(){return g.location||(g.lat&&g.lng?g.lat+", "+g.lng:g._natives.manifest.options.location["default"])};return{start:function(o,u){var E=this,C,f=function(){if(r){u._map=r;r.getDiv().style.display="block";google.maps.event.trigger(r,"resize");r.setCenter(m);if(u.zoom&&typeof u.zoom!=="number")u.zoom=+u.zoom;r.setZoom(u.zoom);if(u.heading&&typeof u.heading!=="number")u.heading=+u.heading;if(u.pitch&&typeof u.pitch!=="number")u.pitch=+u.pitch;if(u.type==="STREETVIEW"){r.setStreetView(C=new google.maps.StreetViewPanorama(k,
|
179
|
+
{position:m,pov:{heading:u.heading=u.heading||0,pitch:u.pitch=u.pitch||0,zoom:u.zoom}}));var G=function(w,x){var z=google.maps.geometry.spherical.computeHeading;setTimeout(function(){var F=E.media.currentTime;if(typeof u.tween==="object"){for(var v=0,L=w.length;v<L;v++){var y=w[v];if(F>=y.interval*(v+1)/1E3&&(F<=y.interval*(v+2)/1E3||F>=y.interval*L/1E3)){n.setPosition(new google.maps.LatLng(y.position.lat,y.position.lng));n.setPov({heading:y.pov.heading||z(y,w[v+1])||0,zoom:y.pov.zoom||0,pitch:y.pov.pitch||
|
180
|
+
0})}}G(w,w[0].interval)}else{v=0;for(L=w.length;v<L;v++){y=u.interval;if(F>=y*(v+1)/1E3&&(F<=y*(v+2)/1E3||F>=y*L/1E3)){A.setPov({heading:z(w[v],w[v+1])||0,zoom:u.zoom,pitch:u.pitch||0});A.setPosition(O[v])}}G(O,u.interval)}},x)};if(u.location&&typeof u.tween==="string"){var A=C,O=[],a=new google.maps.DirectionsService,c=new google.maps.DirectionsRenderer(A);a.route({origin:u.location,destination:u.tween,travelMode:google.maps.TravelMode.DRIVING},function(w,x){if(x==google.maps.DirectionsStatus.OK){c.setDirections(w);
|
181
|
+
for(var z=w.routes[0].overview_path,F=0,v=z.length;F<v;F++)O.push(new google.maps.LatLng(z[F].lat(),z[F].lng()));u.interval=u.interval||1E3;G(O,10)}})}else if(typeof u.tween==="object"){var n=C;a=0;for(var j=u.tween.length;a<j;a++){u.tween[a].interval=u.tween[a].interval||1E3;G(u.tween,10)}}}u.onmaploaded&&u.onmaploaded(u,r)}else setTimeout(function(){f()},13)};f()},end:function(){if(r)r.getDiv().style.display="none"},_teardown:function(o){var u=document.getElementById(o.target);u&&u.removeChild(k);
|
182
|
+
k=r=m=null;o._map=null}}},{about:{name:"Popcorn Google Map Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"start",label:"Start"},end:{elem:"input",type:"start",label:"End"},target:"map-container",type:{elem:"select",options:["ROADMAP","SATELLITE","STREETVIEW","HYBRID","TERRAIN","STAMEN-WATERCOLOR","STAMEN-TERRAIN","STAMEN-TONER"],label:"Map Type",optional:true},zoom:{elem:"input",type:"text",label:"Zoom","default":0,optional:true},lat:{elem:"input",
|
183
|
+
type:"text",label:"Lat",optional:true},lng:{elem:"input",type:"text",label:"Lng",optional:true},location:{elem:"input",type:"text",label:"Location","default":"Toronto, Ontario, Canada"},heading:{elem:"input",type:"text",label:"Heading","default":0,optional:true},pitch:{elem:"input",type:"text",label:"Pitch","default":1,optional:true}}})})(Popcorn);(function(p){p.plugin("mustache",function(e){var l,d,b,h;p.getScript("http://mustache.github.com/extras/mustache.js");var i=!!e.dynamic,g=typeof e.template,k=typeof e.data,r=document.getElementById(e.target);e.container=r||document.createElement("div");if(g==="function")if(i)b=e.template;else h=e.template(e);else h=g==="string"?e.template:"";if(k==="function")if(i)l=e.data;else d=e.data(e);else d=k==="string"?JSON.parse(e.data):k==="object"?e.data:"";return{start:function(m,t){var q=function(){if(window.Mustache){if(l)d=
|
184
|
+
l(t);if(b)h=b(t);var o=Mustache.to_html(h,d).replace(/^\s*/mg,"");t.container.innerHTML=o}else setTimeout(function(){q()},10)};q()},end:function(m,t){t.container.innerHTML=""},_teardown:function(){l=d=b=h=null}}},{about:{name:"Popcorn Mustache Plugin",version:"0.1",author:"David Humphrey (@humphd)",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"mustache-container",template:{elem:"input",type:"text",
|
185
|
+
label:"Template"},data:{elem:"input",type:"text",label:"Data"},dynamic:{elem:"input",type:"checkbox",label:"Dynamic","default":true}}})})(Popcorn);document.addEventListener("click",function(p){p=p.target;if(p.nodeName==="A"||p.parentNode&&p.parentNode.nodeName==="A")Popcorn.instances.forEach(function(e){e.options.pauseOnLinkClicked&&e.pause()})},false);(function(p){p.plugin("footnote",{manifest:{about:{name:"Popcorn Footnote Plugin",version:"0.2",author:"@annasob, @rwaldron",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},text:{elem:"input",type:"text",label:"Text"},target:"footnote-container"}},_setup:function(e){var l=p.dom.find(e.target);e._container=document.createElement("div");e._container.style.display="none";e._container.innerHTML=e.text;l.appendChild(e._container)},
|
186
|
+
start:function(e,l){l._container.style.display="inline"},end:function(e,l){l._container.style.display="none"},_teardown:function(e){var l=p.dom.find(e.target);l&&l.removeChild(e._container)}})})(Popcorn);(function(p){var e=1,l=false;p.plugin("googlefeed",function(d){var b=function(){var k=false,r=0,m=document.getElementsByTagName("link"),t=m.length,q=document.head||document.getElementsByTagName("head")[0],o=document.createElement("link");if(window.GFdynamicFeedControl)l=true;else p.getScript("//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.js",function(){l=true});for(;r<t;r++)if(m[r].href==="//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.css")k=true;if(!k){o.type=
|
187
|
+
"text/css";o.rel="stylesheet";o.href="//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.css";q.insertBefore(o,q.firstChild)}};window.google?b():p.getScript("//www.google.com/jsapi",function(){google.load("feeds","1",{callback:function(){b()}})});var h=document.createElement("div"),i=document.getElementById(d.target),g=function(){if(l)d.feed=new GFdynamicFeedControl(d.url,h,{vertical:d.orientation.toLowerCase()==="vertical"?true:false,horizontal:d.orientation.toLowerCase()==="horizontal"?
|
188
|
+
true:false,title:d.title=d.title||"Blog"});else setTimeout(function(){g()},5)};if(!d.orientation||d.orientation.toLowerCase()!=="vertical"&&d.orientation.toLowerCase()!=="horizontal")d.orientation="vertical";h.style.display="none";h.id="_feed"+e;h.style.width="100%";h.style.height="100%";e++;i&&i.appendChild(h);g();d.toString=function(){return d.url||d._natives.manifest.options.url["default"]};return{start:function(){h.setAttribute("style","display:inline")},end:function(){h.setAttribute("style",
|
189
|
+
"display:none")},_teardown:function(k){document.getElementById(k.target)&&document.getElementById(k.target).removeChild(h);delete k.feed}}},{about:{name:"Popcorn Google Feed Plugin",version:"0.1",author:"David Seifried",website:"dseifried.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"feed-container",url:{elem:"input",type:"url",label:"Feed URL","default":"http://planet.mozilla.org/rss20.xml"},title:{elem:"input",type:"text",
|
190
|
+
label:"Title","default":"Planet Mozilla",optional:true},orientation:{elem:"select",options:["Vertical","Horizontal"],label:"Orientation","default":"Vertical",optional:true}}})})(Popcorn);(function(p){function e(b){return String(b).replace(/&(?!\w+;)|[<>"']/g,function(h){return d[h]||h})}function l(b,h){var i=b.container=document.createElement("div"),g=i.style,k=b.media,r=function(){var m=b.position();g.fontSize="18px";g.width=k.offsetWidth+"px";g.top=m.top+k.offsetHeight-i.offsetHeight-40+"px";g.left=m.left+"px";setTimeout(r,10)};i.id=h||"";g.position="absolute";g.color="white";g.textShadow="black 2px 2px 6px";g.fontWeight="bold";g.textAlign="center";r();b.media.parentNode.appendChild(i);
|
191
|
+
return i}var d={"&":"&","<":"<",">":">",'"':""","'":"'"};p.plugin("text",{manifest:{about:{name:"Popcorn Text Plugin",version:"0.1",author:"@humphd"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},text:{elem:"input",type:"text",label:"Text","default":"Popcorn.js"},escape:{elem:"input",type:"checkbox",label:"Escape"},multiline:{elem:"input",type:"checkbox",label:"Multiline"}}},_setup:function(b){var h,i,g=b._container=document.createElement("div");
|
192
|
+
g.style.display="none";if(b.target)if(h=p.dom.find(b.target)){if(["VIDEO","AUDIO"].indexOf(h.nodeName)>-1)h=l(this,b.target+"-overlay")}else h=l(this,b.target);else h=this.container?this.container:l(this);b._target=h;i=b.escape?e(b.text):b.text;i=b.multiline?i.replace(/\r?\n/gm,"<br>"):i;g.innerHTML=i||"";h.appendChild(g);b.toString=function(){return b.text||b._natives.manifest.options.text["default"]}},start:function(b,h){h._container.style.display="inline"},end:function(b,h){h._container.style.display=
|
193
|
+
"none"},_teardown:function(b){var h=b._target;h&&h.removeChild(b._container)}})})(Popcorn);(function(p){p.plugin("code",function(e){var l=false,d=this,b=function(){var h=function(i){return function(g,k){var r=function(){l&&g.call(d,k);l&&i(r)};r()}};return window.webkitRequestAnimationFrame?h(window.webkitRequestAnimationFrame):window.mozRequestAnimationFrame?h(window.mozRequestAnimationFrame):h(function(i){window.setTimeout(i,16)})}();if(!e.onStart||typeof e.onStart!=="function")e.onStart=p.nop;if(e.onEnd&&typeof e.onEnd!=="function")e.onEnd=undefined;if(e.onFrame&&typeof e.onFrame!==
|
194
|
+
"function")e.onFrame=undefined;return{start:function(h,i){i.onStart.call(d,i);if(i.onFrame){l=true;b(i.onFrame,i)}},end:function(h,i){if(i.onFrame)l=false;i.onEnd&&i.onEnd.call(d,i)}}},{about:{name:"Popcorn Code Plugin",version:"0.1",author:"David Humphrey (@humphd)",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},onStart:{elem:"input",type:"function",label:"onStart"},onFrame:{elem:"input",type:"function",label:"onFrame",
|
195
|
+
optional:true},onEnd:{elem:"input",type:"function",label:"onEnd"}}})})(Popcorn);(function(p){function e(b){function h(){var r=b.getBoundingClientRect(),m=g.getBoundingClientRect();if(m.left!==r.left)g.style.left=r.left+"px";if(m.top!==r.top)g.style.top=r.top+"px"}var i=-1,g=document.createElement("div"),k=getComputedStyle(b).zIndex;g.setAttribute("data-popcorn-helper-container",true);g.style.position="absolute";g.style.zIndex=isNaN(k)?l:k+1;document.body.appendChild(g);return{element:g,start:function(){i=setInterval(h,d)},stop:function(){clearInterval(i);i=-1},destroy:function(){document.body.removeChild(g);
|
196
|
+
i!==-1&&clearInterval(i)}}}var l=2E3,d=10;p.plugin("image",{manifest:{about:{name:"Popcorn image Plugin",version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},src:{elem:"input",type:"url",label:"Image URL","default":"http://mozillapopcorn.org/wp-content/themes/popcorn/images/for_developers.png"},href:{elem:"input",type:"url",label:"Link","default":"http://mozillapopcorn.org/wp-content/themes/popcorn/images/for_developers.png",
|
197
|
+
optional:true},target:"image-container",text:{elem:"input",type:"text",label:"Caption","default":"Popcorn.js",optional:true}}},_setup:function(b){var h=document.createElement("img"),i=document.getElementById(b.target);b.anchor=document.createElement("a");b.anchor.style.position="relative";b.anchor.style.textDecoration="none";b.anchor.style.display="none";if(i)if(["VIDEO","AUDIO"].indexOf(i.nodeName)>-1){b.trackedContainer=e(i);b.trackedContainer.element.appendChild(b.anchor)}else i&&i.appendChild(b.anchor);
|
198
|
+
h.addEventListener("load",function(){h.style.borderStyle="none";b.anchor.href=b.href||b.src||"#";b.anchor.target="_blank";var g,k;h.style.height=i.style.height;h.style.width=i.style.width;b.anchor.appendChild(h);if(b.text){g=h.height/12+"px";k=document.createElement("div");p.extend(k.style,{color:"black",fontSize:g,fontWeight:"bold",position:"relative",textAlign:"center",width:h.style.width||h.width+"px",zIndex:"10"});k.innerHTML=b.text||"";k.style.top=(h.style.height.replace("px","")||h.height)/
|
199
|
+
2-k.offsetHeight/2+"px";b.anchor.insertBefore(k,h)}},false);h.src=b.src;b.toString=function(){var g=b.src||b._natives.manifest.options.src["default"],k=g.replace(/.*\//g,"");return k.length?k:g}},start:function(b,h){h.anchor.style.display="inline";h.trackedContainer&&h.trackedContainer.start()},end:function(b,h){h.anchor.style.display="none";h.trackedContainer&&h.trackedContainer.stop()},_teardown:function(b){if(b.trackedContainer)b.trackedContainer.destroy();else b.anchor.parentNode&&b.anchor.parentNode.removeChild(b.anchor)}})})(Popcorn);(function(p){p.parser("parseXML","XML",function(e){var l={title:"",remote:"",data:[]},d={},b=function(m){m=m.split(":");if(m.length===1)return parseFloat(m[0],10);else if(m.length===2)return parseFloat(m[0],10)+parseFloat(m[1]/12,10);else if(m.length===3)return parseInt(m[0]*60,10)+parseFloat(m[1],10)+parseFloat(m[2]/12,10);else if(m.length===4)return parseInt(m[0]*3600,10)+parseInt(m[1]*60,10)+parseFloat(m[2],10)+parseFloat(m[3]/12,10)},h=function(m){for(var t={},q=0,o=m.length;q<o;q++){var u=m.item(q).nodeName,
|
200
|
+
E=m.item(q).nodeValue,C=d[E];if(u==="in")t.start=b(E);else if(u==="out")t.end=b(E);else if(u==="resourceid")for(var f in C){if(C.hasOwnProperty(f))if(!t[f]&&f!=="id")t[f]=C[f]}else t[u]=E}return t},i=function(m,t){var q={};q[m]=t;return q},g=function(m,t,q){var o={};p.extend(o,t,h(m.attributes),{text:m.textContent||m.text});t=m.childNodes;if(t.length<1||t.length===1&&t[0].nodeType===3)if(q)d[o.id]=o;else l.data.push(i(m.nodeName,o));else for(m=0;m<t.length;m++)t[m].nodeType===1&&g(t[m],o,q)};e=e.documentElement.childNodes;
|
201
|
+
for(var k=0,r=e.length;k<r;k++)if(e[k].nodeType===1)e[k].nodeName==="manifest"?g(e[k],{},true):g(e[k],{},false);return l})})(Popcorn);(function(p){p.parser("parseSBV",function(e){var l={title:"",remote:"",data:[]},d=[],b=0,h=0,i=function(q){q=q.split(":");var o=q.length-1,u;try{u=parseInt(q[o-1],10)*60+parseFloat(q[o],10);if(o===2)u+=parseInt(q[0],10)*3600}catch(E){throw"Bad cue";}return u},g=function(q,o){var u={};u[q]=o;return u};e=e.text.split(/(?:\r\n|\r|\n)/gm);for(h=e.length;b<h;){var k={},r=[],m=e[b++].split(",");try{k.start=i(m[0]);for(k.end=i(m[1]);b<h&&e[b];)r.push(e[b++]);k.text=r.join("<br />");d.push(g("subtitle",k))}catch(t){for(;b<
|
202
|
+
h&&e[b];)b++}for(;b<h&&!e[b];)b++}l.data=d;return l})})(Popcorn);(function(p){p.parser("parseJSON","JSON",function(e){var l={title:"",remote:"",data:[]};p.forEach(e.data,function(d){l.data.push(d)});return l})})(Popcorn);(function(p){p.parser("parseTTXT",function(e){var l={title:"",remote:"",data:[]},d=function(k){k=k.split(":");var r=0;try{return parseFloat(k[0],10)*60*60+parseFloat(k[1],10)*60+parseFloat(k[2],10)}catch(m){r=0}return r},b=function(k,r){var m={};m[k]=r;return m};e=e.xml.lastChild.lastChild;for(var h=Number.MAX_VALUE,i=[];e;){if(e.nodeType===1&&e.nodeName==="TextSample"){var g={};g.start=d(e.getAttribute("sampleTime"));g.text=e.getAttribute("text");if(g.text){g.end=h-0.0010;i.push(b("subtitle",g))}h=
|
203
|
+
g.start}e=e.previousSibling}l.data=i.reverse();return l})})(Popcorn);(function(p){function e(g,k,r){var m=g.firstChild;g=l(g,r);r=[];for(var t;m;){if(m.nodeType===1)if(m.nodeName==="p")r.push(d(m,k,g));else if(m.nodeName==="div"){t=b(m.getAttribute("begin"));if(t<0)t=k;r.push.apply(r,e(m,t,g))}m=m.nextSibling}return r}function l(g,k){var r=g.getAttribute("region");return r!==null?r:k||""}function d(g,k,r){var m={};m.text=(g.textContent||g.text).replace(h,"").replace(i,"<br />");m.id=g.getAttribute("xml:id")||g.getAttribute("id");m.start=b(g.getAttribute("begin"),k);
|
204
|
+
m.end=b(g.getAttribute("end"),k);m.target=l(g,r);if(m.end<0){m.end=b(g.getAttribute("duration"),0);if(m.end>=0)m.end+=m.start;else m.end=Number.MAX_VALUE}return{subtitle:m}}function b(g,k){var r;if(!g)return-1;try{return p.util.toSeconds(g)}catch(m){for(var t=g.length-1;t>=0&&g[t]<="9"&&g[t]>="0";)t--;r=t;t=parseFloat(g.substring(0,r));r=g.substring(r);return t*({h:3600,m:60,s:1,ms:0.0010}[r]||-1)+(k||0)}}var h=/^[\s]+|[\s]+$/gm,i=/(?:\r\n|\r|\n)/gm;p.parser("parseTTML",function(g){var k={title:"",
|
205
|
+
remote:"",data:[]};if(!g.xml||!g.xml.documentElement)return k;g=g.xml.documentElement.firstChild;if(!g)return k;for(;g.nodeName!=="body";)g=g.nextSibling;if(g)k.data=e(g,0);return k})})(Popcorn);(function(p){function e(d){var b=d.split(":");d=d.length;var h;if(d!==12&&d!==9)throw"Bad cue";d=b.length-1;try{h=parseInt(b[d-1],10)*60+parseFloat(b[d],10);if(d===2)h+=parseInt(b[0],10)*3600}catch(i){throw"Bad cue";}return h}function l(d,b){var h={};h[d]=b;return h}p.parser("parseVTT",function(d){var b={title:"",remote:"",data:[]},h=[],i=0,g=0,k,r;d=d.text.split(/(?:\r\n|\r|\n)/gm);g=d.length;if(g===0||d[0]!=="WEBVTT")return b;for(i++;i<g;){k=[];try{for(var m=i;m<g&&!d[m];)m++;i=m;var t=d[i++];m=
|
206
|
+
void 0;var q={};if(!t||t.indexOf("--\>")===-1)throw"Bad cue";m=t.replace(/--\>/," --\> ").split(/[\t ]+/);if(m.length<2)throw"Bad cue";q.id=t;q.start=e(m[0]);q.end=e(m[2]);for(r=q;i<g&&d[i];)k.push(d[i++]);r.text=k.join("<br />");h.push(l("subtitle",r))}catch(o){for(i=i;i<g&&d[i];)i++;i=i}}b.data=h;return b})})(Popcorn);(function(p){function e(b,h){var i=b.substr(10).split(","),g;g={start:l(i[h.start]),end:l(i[h.end])};if(g.start===-1||g.end===-1)throw"Invalid time";var k=q.call(m,/\{(\\[\w]+\(?([\w\d]+,?)+\)?)+\}/gi,""),r=k.replace,m;m=i.length;q=[];for(var t=h.text;t<m;t++)q.push(i[t]);m=q.join(",");var q=m.replace;g.text=r.call(k,/\\N/gi,"<br />");return g}function l(b){var h=b.split(":");if(b.length!==10||h.length<3)return-1;return parseInt(h[0],10)*3600+parseInt(h[1],10)*60+parseFloat(h[2],10)}function d(b,
|
207
|
+
h){var i={};i[b]=h;return i}p.parser("parseSSA",function(b){var h={title:"",remote:"",data:[]},i=[],g=0,k;b=b.text.split(/(?:\r\n|\r|\n)/gm);for(k=b.length;g<k&&b[g]!=="[Events]";)g++;var r=b[++g].substr(8).split(", "),m={},t,q;q=0;for(t=r.length;q<t;q++)if(r[q]==="Start")m.start=q;else if(r[q]==="End")m.end=q;else if(r[q]==="Text")m.text=q;for(;++g<k&&b[g]&&b[g][0]!=="[";)try{i.push(d("subtitle",e(b[g],m)))}catch(o){}h.data=i;return h})})(Popcorn);(function(p){function e(d,b){var h={};h[d]=b;return h}function l(d){d=d.split(":");try{var b=d[2].split(",");if(b.length===1)b=d[2].split(".");return parseFloat(d[0],10)*3600+parseFloat(d[1],10)*60+parseFloat(b[0],10)+parseFloat(b[1],10)/1E3}catch(h){return 0}}p.parser("parseSRT",function(d,b){var h={title:"",remote:"",data:[]},i=[],g=0,k=0,r,m,t,q,o;r=d.text.split(/(?:\r\n|\r|\n)/gm);for(t=r.length-1;t>=0&&!r[t];)t--;q=t+1;for(g=0;g<q;g++){o={};t=[];for(g=g;!r[g];)g++;g=g;o.id=parseInt(r[g++],10);
|
208
|
+
m=r[g++].split(/[\t ]*--\>[\t ]*/);o.start=l(m[0]);k=m[1].indexOf(" ");if(k!==-1)m[1]=m[1].substr(0,k);for(o.end=l(m[1]);g<q&&r[g];)t.push(r[g++]);o.text=t.join("\\N").replace(/\{(\\[\w]+\(?([\w\d]+,?)+\)?)+\}/gi,"");o.text=o.text.replace(/</g,"<").replace(/>/g,">");o.text=o.text.replace(/<(\/?(font|b|u|i|s))((\s+(\w|\w[\w\-]*\w)(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)(\/?)>/gi,"<$1$3$7>");o.text=o.text.replace(/\\N/gi,"<br />");if(b&&b.target)o.target=b.target;i.push(e("subtitle",
|
209
|
+
o))}h.data=i;return h})})(Popcorn);(function(p,e){e.player("vimeo",{_canPlayType:function(l,d){return typeof d==="string"&&e.HTMLVimeoVideoElement._canPlaySrc(d)}});e.vimeo=function(l,d,b){typeof console!=="undefined"&&console.warn&&console.warn("Deprecated player 'vimeo'. Please use Popcorn.HTMLVimeoVideoElement directly.");var h=e.HTMLVimeoVideoElement(l);l=e(h,b);setTimeout(function(){h.src=d},0);return l}})(window,Popcorn);(function(p,e){var l=function(d,b){return typeof b==="string"&&e.HTMLYouTubeVideoElement._canPlaySrc(b)};e.player("youtube",{_canPlayType:l});e.youtube=function(d,b,h){typeof console!=="undefined"&&console.warn&&console.warn("Deprecated player 'youtube'. Please use Popcorn.HTMLYouTubeVideoElement directly.");var i=e.HTMLYouTubeVideoElement(d);d=e(i,h);setTimeout(function(){i.src=b},0);return d};e.youtube.canPlayType=l})(window,Popcorn);(function(p,e){e.player("soundcloud",{_canPlayType:function(l,d){return typeof d==="string"&&e.HTMLSoundCloudAudioElement._canPlaySrc(d)&&l.toLowerCase()!=="audio"}});e.soundcloud=function(l,d,b){typeof console!=="undefined"&&console.warn&&console.warn("Deprecated player 'soundcloud'. Please use Popcorn.HTMLSoundCloudAudioElement directly.");var h=e.HTMLSoundCloudAudioElement(l);l=e(h,b);setTimeout(function(){h.src=d},0);return l}})(window,Popcorn);
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* popcorn.js version 1.
|
2
|
+
* popcorn.js version 1.5.6
|
3
3
|
* http://popcornjs.org
|
4
4
|
*
|
5
5
|
* Copyright 2011, Mozilla Foundation
|
@@ -8,32 +8,172 @@
|
|
8
8
|
|
9
9
|
(function() {
|
10
10
|
|
11
|
-
document.addEventListener
|
11
|
+
if ( !document.addEventListener && !document.removeEventListener && !document.dispatchEvent ) {
|
12
|
+
var events = {};
|
12
13
|
|
13
|
-
|
14
|
+
var addEventListener = function( eventName, callBack ) {
|
14
15
|
|
15
|
-
|
16
|
+
eventName = ( eventName === "DOMContentLoaded" ) ? "readystatechange" : eventName;
|
17
|
+
|
18
|
+
if ( Event[ eventName.toUpperCase() ] || eventName === "readystatechange" ) {
|
19
|
+
document.attachEvent( "on" + eventName, callBack );
|
20
|
+
return;
|
21
|
+
}
|
22
|
+
|
23
|
+
if ( !events[ eventName ] ) {
|
24
|
+
events[ eventName ] = {
|
25
|
+
events: [],
|
26
|
+
queue: [],
|
27
|
+
active: false
|
28
|
+
};
|
29
|
+
}
|
30
|
+
|
31
|
+
if ( events[ eventName ].active ) {
|
32
|
+
events[ eventName ].queue.push( callBack );
|
33
|
+
} else {
|
34
|
+
events[ eventName ].events.push( callBack );
|
35
|
+
}
|
36
|
+
};
|
37
|
+
|
38
|
+
var removeEventListener = function( eventName, callBack ) {
|
39
|
+
|
40
|
+
eventName = ( eventName === "DOMContentLoaded" ) ? "readystatechange" : eventName;
|
41
|
+
|
42
|
+
var i = 0,
|
43
|
+
listeners = events[ eventName ];
|
44
|
+
|
45
|
+
if ( Event[ eventName.toUpperCase() ] || eventName === "readystatechange" ) {
|
46
|
+
document.detachEvent( "on" + eventName, callBack );
|
47
|
+
return;
|
48
|
+
}
|
49
|
+
|
50
|
+
if ( !listeners ) {
|
51
|
+
return;
|
52
|
+
}
|
53
|
+
|
54
|
+
for ( i = listeners.events.length - 1; i >= 0; i-- ) {
|
55
|
+
if ( callBack === listeners.events[ i ] ) {
|
56
|
+
delete listeners.events[ i ];
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
for ( i = listeners.queue.length - 1; i >= 0; i-- ) {
|
61
|
+
if ( callBack === listeners.queue[ i ] ) {
|
62
|
+
delete listeners.queue[ i ];
|
63
|
+
}
|
64
|
+
}
|
65
|
+
};
|
66
|
+
|
67
|
+
var dispatchEvent = function( eventObject ) {
|
68
|
+
var evt,
|
69
|
+
self = this,
|
70
|
+
eventInterface,
|
71
|
+
listeners,
|
72
|
+
eventName = eventObject.type,
|
73
|
+
queuedListener;
|
74
|
+
|
75
|
+
// A string was passed, create event object
|
76
|
+
if ( !eventName ) {
|
77
|
+
|
78
|
+
eventName = eventObject;
|
79
|
+
eventInterface = Popcorn.events.getInterface( eventName );
|
80
|
+
|
81
|
+
if ( eventInterface ) {
|
82
|
+
|
83
|
+
evt = document.createEvent( eventInterface );
|
84
|
+
evt.initCustomEvent( eventName, true, true, window, 1 );
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
listeners = events[ eventName ];
|
89
|
+
|
90
|
+
if ( listeners ) {
|
91
|
+
listeners.active = true;
|
92
|
+
|
93
|
+
for ( var i = 0; i < listeners.events.length; i++ ) {
|
94
|
+
if ( listeners.events[ i ] ) {
|
95
|
+
listeners.events[ i ].call( self, evt, self );
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
if ( listeners.queue.length ) {
|
100
|
+
while ( listeners.queue.length ) {
|
101
|
+
queuedListener = listeners.queue.shift();
|
102
|
+
|
103
|
+
if ( queuedListener ) {
|
104
|
+
listeners.events.push( queuedListener );
|
105
|
+
}
|
106
|
+
}
|
107
|
+
}
|
108
|
+
|
109
|
+
listeners.active = false;
|
110
|
+
|
111
|
+
listeners.events.forEach(function( listener ) {
|
112
|
+
if ( !listener ) {
|
113
|
+
listeners.events.splice( listeners.events.indexOf( listener ), 1 );
|
114
|
+
}
|
115
|
+
});
|
116
|
+
|
117
|
+
listeners.queue.forEach(function( listener ) {
|
118
|
+
if ( !listener ) {
|
119
|
+
listeners.queue.splice( listeners.queue.indexOf( listener ), 1 );
|
120
|
+
}
|
121
|
+
});
|
122
|
+
}
|
123
|
+
};
|
124
|
+
|
125
|
+
document.addEventListener = addEventListener;
|
126
|
+
document.removeEventListener = removeEventListener;
|
127
|
+
document.dispatchEvent = dispatchEvent;
|
128
|
+
|
129
|
+
}
|
130
|
+
|
131
|
+
if ( !Event.prototype.preventDefault ) {
|
132
|
+
Event.prototype.preventDefault = function() {
|
133
|
+
this.returnValue = false;
|
134
|
+
};
|
135
|
+
}
|
136
|
+
if ( !Event.prototype.stopPropagation ) {
|
137
|
+
Event.prototype.stopPropagation = function() {
|
138
|
+
this.cancelBubble = true;
|
139
|
+
};
|
140
|
+
}
|
141
|
+
|
142
|
+
window.addEventListener = window.addEventListener || function( event, callBack ) {
|
143
|
+
|
144
|
+
event = "on" + event;
|
145
|
+
|
146
|
+
window.attachEvent( event, callBack );
|
16
147
|
};
|
17
148
|
|
18
|
-
|
149
|
+
window.removeEventListener = window.removeEventListener || function( event, callBack ) {
|
19
150
|
|
20
|
-
event =
|
151
|
+
event = "on" + event;
|
21
152
|
|
22
|
-
|
153
|
+
window.detachEvent( event, callBack );
|
23
154
|
};
|
24
155
|
|
25
156
|
HTMLScriptElement.prototype.addEventListener = HTMLScriptElement.prototype.addEventListener || function( event, callBack ) {
|
26
157
|
|
27
158
|
event = ( event === "load" ) ? "onreadystatechange" : "on" + event;
|
28
159
|
|
29
|
-
|
160
|
+
if( event === "onreadystatechange" ){
|
161
|
+
callBack.readyStateCheck = callBack.readyStateCheck || function( e ){
|
162
|
+
|
163
|
+
if( self.readyState === "loaded" ){
|
164
|
+
callBack( e );
|
165
|
+
}
|
166
|
+
};
|
167
|
+
}
|
168
|
+
|
169
|
+
this.attachEvent( event, ( callBack.readyStateCheck || callBack ) );
|
30
170
|
};
|
31
171
|
|
32
172
|
HTMLScriptElement.prototype.removeEventListener = HTMLScriptElement.prototype.removeEventListener || function( event, callBack ) {
|
33
173
|
|
34
174
|
event = ( event === "load" ) ? "onreadystatechange" : "on" + event;
|
35
175
|
|
36
|
-
this.detachEvent( event, callBack );
|
176
|
+
this.detachEvent( event, ( callBack.readyStateCheck || callBack ) );
|
37
177
|
};
|
38
178
|
|
39
179
|
document.createEvent = document.createEvent || function ( type ) {
|
@@ -43,9 +183,14 @@
|
|
43
183
|
target : null,
|
44
184
|
currentTarget : null,
|
45
185
|
cancelable : false,
|
186
|
+
detail: false,
|
46
187
|
bubbles : false,
|
47
188
|
initEvent : function (type, bubbles, cancelable) {
|
48
|
-
|
189
|
+
this.type = type;
|
190
|
+
},
|
191
|
+
initCustomEvent: function(type, bubbles, cancelable, detail) {
|
192
|
+
this.type = type;
|
193
|
+
this.detail = detail;
|
49
194
|
},
|
50
195
|
stopPropagation : function () {},
|
51
196
|
stopImmediatePropagation : function () {}
|
@@ -197,6 +342,119 @@
|
|
197
342
|
return -1;
|
198
343
|
}
|
199
344
|
}
|
345
|
+
|
346
|
+
if ( typeof String.prototype.trim !== "function" ) {
|
347
|
+
|
348
|
+
String.prototype.trim = function() {
|
349
|
+
return this.replace(/^\s+|\s+$/g, "");
|
350
|
+
};
|
351
|
+
}
|
352
|
+
|
353
|
+
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
|
354
|
+
if (!Object.keys) {
|
355
|
+
Object.keys = (function () {
|
356
|
+
'use strict';
|
357
|
+
var hasOwnProperty = Object.prototype.hasOwnProperty,
|
358
|
+
hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
|
359
|
+
dontEnums = [
|
360
|
+
'toString',
|
361
|
+
'toLocaleString',
|
362
|
+
'valueOf',
|
363
|
+
'hasOwnProperty',
|
364
|
+
'isPrototypeOf',
|
365
|
+
'propertyIsEnumerable',
|
366
|
+
'constructor'
|
367
|
+
],
|
368
|
+
dontEnumsLength = dontEnums.length;
|
369
|
+
|
370
|
+
return function (obj) {
|
371
|
+
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
|
372
|
+
throw new TypeError('Object.keys called on non-object');
|
373
|
+
}
|
374
|
+
|
375
|
+
var result = [], prop, i;
|
376
|
+
|
377
|
+
for (prop in obj) {
|
378
|
+
if (hasOwnProperty.call(obj, prop)) {
|
379
|
+
result.push(prop);
|
380
|
+
}
|
381
|
+
}
|
382
|
+
|
383
|
+
if (hasDontEnumBug) {
|
384
|
+
for (i = 0; i < dontEnumsLength; i++) {
|
385
|
+
if (hasOwnProperty.call(obj, dontEnums[i])) {
|
386
|
+
result.push(dontEnums[i]);
|
387
|
+
}
|
388
|
+
}
|
389
|
+
}
|
390
|
+
return result;
|
391
|
+
};
|
392
|
+
}());
|
393
|
+
}
|
394
|
+
|
395
|
+
if ( !Object.defineProperties ) {
|
396
|
+
Object.defineProperties = function(obj, properties) {
|
397
|
+
function convertToDescriptor(desc) {
|
398
|
+
function hasProperty(obj, prop) {
|
399
|
+
return Object.prototype.hasOwnProperty.call(obj, prop);
|
400
|
+
}
|
401
|
+
|
402
|
+
function isCallable(v) {
|
403
|
+
// NB: modify as necessary if other values than functions are callable.
|
404
|
+
return typeof v === "function";
|
405
|
+
}
|
406
|
+
|
407
|
+
if (typeof desc !== "object" || desc === null)
|
408
|
+
throw new TypeError("bad desc");
|
409
|
+
|
410
|
+
var d = {};
|
411
|
+
|
412
|
+
if (hasProperty(desc, "enumerable"))
|
413
|
+
d.enumerable = !!obj.enumerable;
|
414
|
+
if (hasProperty(desc, "configurable"))
|
415
|
+
d.configurable = !!desc.configurable;
|
416
|
+
if (hasProperty(desc, "value"))
|
417
|
+
d.value = obj.value;
|
418
|
+
if (hasProperty(desc, "writable"))
|
419
|
+
d.writable = !!desc.writable;
|
420
|
+
if ( hasProperty(desc, "get") ) {
|
421
|
+
var g = desc.get;
|
422
|
+
|
423
|
+
if (!isCallable(g) && g !== "undefined")
|
424
|
+
throw new TypeError("bad get");
|
425
|
+
d.get = g;
|
426
|
+
}
|
427
|
+
if ( hasProperty(desc, "set") ) {
|
428
|
+
var s = desc.set;
|
429
|
+
if (!isCallable(s) && s !== "undefined")
|
430
|
+
throw new TypeError("bad set");
|
431
|
+
d.set = s;
|
432
|
+
}
|
433
|
+
|
434
|
+
if (("get" in d || "set" in d) && ("value" in d || "writable" in d))
|
435
|
+
throw new TypeError("identity-confused descriptor");
|
436
|
+
|
437
|
+
return d;
|
438
|
+
}
|
439
|
+
|
440
|
+
if (typeof obj !== "object" || obj === null)
|
441
|
+
throw new TypeError("bad obj");
|
442
|
+
|
443
|
+
properties = Object(properties);
|
444
|
+
|
445
|
+
var keys = Object.keys(properties);
|
446
|
+
var descs = [];
|
447
|
+
|
448
|
+
for (var i = 0; i < keys.length; i++)
|
449
|
+
descs.push([keys[i], convertToDescriptor(properties[keys[i]])]);
|
450
|
+
|
451
|
+
for (var i = 0; i < descs.length; i++)
|
452
|
+
Object.defineProperty(obj, descs[i][0], descs[i][1]);
|
453
|
+
|
454
|
+
return obj;
|
455
|
+
};
|
456
|
+
}
|
457
|
+
|
200
458
|
})();
|
201
459
|
(function(global, document) {
|
202
460
|
|
@@ -270,6 +528,22 @@
|
|
270
528
|
})( obj );
|
271
529
|
},
|
272
530
|
|
531
|
+
Abstract = {
|
532
|
+
// [[Put]] props from dictionary onto |this|
|
533
|
+
// MUST BE CALLED FROM WITHIN A CONSTRUCTOR:
|
534
|
+
// Abstract.put.call( this, dictionary );
|
535
|
+
put: function( dictionary ) {
|
536
|
+
// For each own property of src, let key be the property key
|
537
|
+
// and desc be the property descriptor of the property.
|
538
|
+
for ( var key in dictionary ) {
|
539
|
+
if ( dictionary.hasOwnProperty( key ) ) {
|
540
|
+
this[ key ] = dictionary[ key ];
|
541
|
+
}
|
542
|
+
}
|
543
|
+
}
|
544
|
+
},
|
545
|
+
|
546
|
+
|
273
547
|
// Declare constructor
|
274
548
|
// Returns an instance object.
|
275
549
|
Popcorn = function( entity, options ) {
|
@@ -278,7 +552,7 @@
|
|
278
552
|
};
|
279
553
|
|
280
554
|
// Popcorn API version, automatically inserted via build system.
|
281
|
-
Popcorn.version = "1.
|
555
|
+
Popcorn.version = "1.5.6";
|
282
556
|
|
283
557
|
// Boolean flag allowing a client to determine if Popcorn can be supported
|
284
558
|
Popcorn.isSupported = true;
|
@@ -357,7 +631,7 @@
|
|
357
631
|
// Create an audio or video element property reference
|
358
632
|
this[ nodeName ] = this.media;
|
359
633
|
|
360
|
-
this.options = options || {};
|
634
|
+
this.options = Popcorn.extend( {}, options ) || {};
|
361
635
|
|
362
636
|
// Resolve custom ID or default prefixed ID
|
363
637
|
this.id = this.options.id || Popcorn.guid( nodeName );
|
@@ -400,21 +674,7 @@
|
|
400
674
|
trackRefs: {},
|
401
675
|
|
402
676
|
// Playback track event queues
|
403
|
-
trackEvents:
|
404
|
-
byStart: [{
|
405
|
-
|
406
|
-
start: -1,
|
407
|
-
end: -1
|
408
|
-
}],
|
409
|
-
byEnd: [{
|
410
|
-
start: -1,
|
411
|
-
end: -1
|
412
|
-
}],
|
413
|
-
animating: [],
|
414
|
-
startIndex: 0,
|
415
|
-
endIndex: 0,
|
416
|
-
previousUpdateTime: -1
|
417
|
-
}
|
677
|
+
trackEvents: new TrackEvents( this )
|
418
678
|
};
|
419
679
|
|
420
680
|
// Register new instance
|
@@ -433,7 +693,7 @@
|
|
433
693
|
self.media.currentTime = 0;
|
434
694
|
}
|
435
695
|
|
436
|
-
self.media.removeEventListener( "
|
696
|
+
self.media.removeEventListener( "loadedmetadata", isReady, false );
|
437
697
|
|
438
698
|
var duration, videoDurationPlus,
|
439
699
|
runningPlugins, runningPlugin, rpLength, rpNatives;
|
@@ -450,6 +710,50 @@
|
|
450
710
|
end: videoDurationPlus
|
451
711
|
});
|
452
712
|
|
713
|
+
if ( !self.isDestroyed ) {
|
714
|
+
self.data.durationChange = function() {
|
715
|
+
var newDuration = self.media.duration,
|
716
|
+
newDurationPlus = newDuration + 1,
|
717
|
+
byStart = self.data.trackEvents.byStart,
|
718
|
+
byEnd = self.data.trackEvents.byEnd;
|
719
|
+
|
720
|
+
// Remove old padding events
|
721
|
+
byStart.pop();
|
722
|
+
byEnd.pop();
|
723
|
+
|
724
|
+
// Remove any internal tracking of events that have end times greater than duration
|
725
|
+
// otherwise their end events will never be hit.
|
726
|
+
for ( var k = byEnd.length - 1; k > 0; k-- ) {
|
727
|
+
if ( byEnd[ k ].end > newDuration ) {
|
728
|
+
self.removeTrackEvent( byEnd[ k ]._id );
|
729
|
+
}
|
730
|
+
}
|
731
|
+
|
732
|
+
// Remove any internal tracking of events that have end times greater than duration
|
733
|
+
// otherwise their end events will never be hit.
|
734
|
+
for ( var i = 0; i < byStart.length; i++ ) {
|
735
|
+
if ( byStart[ i ].end > newDuration ) {
|
736
|
+
self.removeTrackEvent( byStart[ i ]._id );
|
737
|
+
}
|
738
|
+
}
|
739
|
+
|
740
|
+
// References to byEnd/byStart are reset, so accessing it this way is
|
741
|
+
// forced upon us.
|
742
|
+
self.data.trackEvents.byEnd.push({
|
743
|
+
start: newDurationPlus,
|
744
|
+
end: newDurationPlus
|
745
|
+
});
|
746
|
+
|
747
|
+
self.data.trackEvents.byStart.push({
|
748
|
+
start: newDurationPlus,
|
749
|
+
end: newDurationPlus
|
750
|
+
});
|
751
|
+
};
|
752
|
+
|
753
|
+
// Listen for duration changes and adjust internal tracking of event timings
|
754
|
+
self.media.addEventListener( "durationchange", self.data.durationChange, false );
|
755
|
+
}
|
756
|
+
|
453
757
|
if ( self.options.frameAnimation ) {
|
454
758
|
|
455
759
|
// if Popcorn is created with frameAnimation option set to true,
|
@@ -498,19 +802,29 @@
|
|
498
802
|
}
|
499
803
|
};
|
500
804
|
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
return self.media.error;
|
505
|
-
}
|
506
|
-
});
|
805
|
+
self.media.addEventListener( "error", function() {
|
806
|
+
self.error = self.media.error;
|
807
|
+
}, false );
|
507
808
|
|
508
|
-
|
809
|
+
// http://www.whatwg.org/specs/web-apps/current-work/#dom-media-readystate
|
810
|
+
//
|
811
|
+
// If media is in readyState (rS) >= 1, we know the media's duration,
|
812
|
+
// which is required before running the isReady function.
|
813
|
+
// If rS is 0, attach a listener for "loadedmetadata",
|
814
|
+
// ( Which indicates that the media has moved from rS 0 to 1 )
|
815
|
+
//
|
816
|
+
// This has been changed from a check for rS 2 because
|
817
|
+
// in certain conditions, Firefox can enter this code after dropping
|
818
|
+
// to rS 1 from a higher state such as 2 or 3. This caused a "loadeddata"
|
819
|
+
// listener to be attached to the media object, an event that had
|
820
|
+
// already triggered and would not trigger again. This left Popcorn with an
|
821
|
+
// instance that could never start a timeUpdate loop.
|
822
|
+
if ( self.media.readyState >= 1 ) {
|
509
823
|
|
510
824
|
isReady();
|
511
825
|
} else {
|
512
826
|
|
513
|
-
self.media.addEventListener( "
|
827
|
+
self.media.addEventListener( "loadedmetadata", isReady, false );
|
514
828
|
}
|
515
829
|
|
516
830
|
return this;
|
@@ -612,6 +926,10 @@
|
|
612
926
|
|
613
927
|
position: function( elem ) {
|
614
928
|
|
929
|
+
if ( !elem.parentNode ) {
|
930
|
+
return null;
|
931
|
+
}
|
932
|
+
|
615
933
|
var clientRect = elem.getBoundingClientRect(),
|
616
934
|
bounds = {},
|
617
935
|
doc = elem.ownerDocument,
|
@@ -640,14 +958,26 @@
|
|
640
958
|
|
641
959
|
disable: function( instance, plugin ) {
|
642
960
|
|
643
|
-
if (
|
961
|
+
if ( instance.data.disabled[ plugin ] ) {
|
962
|
+
return;
|
963
|
+
}
|
964
|
+
|
965
|
+
instance.data.disabled[ plugin ] = true;
|
644
966
|
|
645
|
-
|
967
|
+
if ( plugin in Popcorn.registryByName &&
|
968
|
+
instance.data.running[ plugin ] ) {
|
646
969
|
|
647
970
|
for ( var i = instance.data.running[ plugin ].length - 1, event; i >= 0; i-- ) {
|
648
971
|
|
649
972
|
event = instance.data.running[ plugin ][ i ];
|
650
973
|
event._natives.end.call( instance, null, event );
|
974
|
+
|
975
|
+
instance.emit( "trackend",
|
976
|
+
Popcorn.extend({}, event, {
|
977
|
+
plugin: event.type,
|
978
|
+
type: "trackend"
|
979
|
+
})
|
980
|
+
);
|
651
981
|
}
|
652
982
|
}
|
653
983
|
|
@@ -655,14 +985,27 @@
|
|
655
985
|
},
|
656
986
|
enable: function( instance, plugin ) {
|
657
987
|
|
658
|
-
if ( instance.data.disabled[ plugin ] ) {
|
988
|
+
if ( !instance.data.disabled[ plugin ] ) {
|
989
|
+
return;
|
990
|
+
}
|
991
|
+
|
992
|
+
instance.data.disabled[ plugin ] = false;
|
659
993
|
|
660
|
-
|
994
|
+
if ( plugin in Popcorn.registryByName &&
|
995
|
+
instance.data.running[ plugin ] ) {
|
661
996
|
|
662
997
|
for ( var i = instance.data.running[ plugin ].length - 1, event; i >= 0; i-- ) {
|
663
998
|
|
664
999
|
event = instance.data.running[ plugin ][ i ];
|
665
1000
|
event._natives.start.call( instance, null, event );
|
1001
|
+
|
1002
|
+
instance.emit( "trackstart",
|
1003
|
+
Popcorn.extend({}, event, {
|
1004
|
+
plugin: event.type,
|
1005
|
+
type: "trackstart",
|
1006
|
+
track: event
|
1007
|
+
})
|
1008
|
+
);
|
666
1009
|
}
|
667
1010
|
}
|
668
1011
|
|
@@ -695,6 +1038,8 @@
|
|
695
1038
|
instance.data.timeUpdate && instance.media.removeEventListener( "timeupdate", instance.data.timeUpdate, false );
|
696
1039
|
instance.isDestroyed = true;
|
697
1040
|
}
|
1041
|
+
|
1042
|
+
Popcorn.instances.splice( Popcorn.instances.indexOf( instance ), 1 );
|
698
1043
|
}
|
699
1044
|
});
|
700
1045
|
|
@@ -776,7 +1121,8 @@
|
|
776
1121
|
// Attach an event to a single point in time
|
777
1122
|
exec: function( id, time, fn ) {
|
778
1123
|
var length = arguments.length,
|
779
|
-
|
1124
|
+
eventType = "trackadded",
|
1125
|
+
trackEvent, sec, options;
|
780
1126
|
|
781
1127
|
// Check if first could possibly be a SMPTE string
|
782
1128
|
// p.cue( "smpte string", fn );
|
@@ -811,11 +1157,19 @@
|
|
811
1157
|
|
812
1158
|
} else {
|
813
1159
|
|
814
|
-
// Get the
|
1160
|
+
// Get the TrackEvent that matches the given id.
|
815
1161
|
trackEvent = this.getTrackEvent( id );
|
816
1162
|
|
817
1163
|
if ( trackEvent ) {
|
818
1164
|
|
1165
|
+
// remove existing cue so a new one can be added via trackEvents.add
|
1166
|
+
this.data.trackEvents.remove( id );
|
1167
|
+
TrackEvent.end( this, trackEvent );
|
1168
|
+
// Update track event references
|
1169
|
+
Popcorn.removeTrackEvent.ref( this, id );
|
1170
|
+
|
1171
|
+
eventType = "cuechange";
|
1172
|
+
|
819
1173
|
// p.cue( "my-id", 12 );
|
820
1174
|
// p.cue( "my-id", function() { ... });
|
821
1175
|
if ( typeof id === "string" && length === 2 ) {
|
@@ -823,7 +1177,7 @@
|
|
823
1177
|
// p.cue( "my-id", 12 );
|
824
1178
|
// The path will update the cue time.
|
825
1179
|
if ( typeof time === "number" ) {
|
826
|
-
// Re-use existing
|
1180
|
+
// Re-use existing TrackEvent start callback
|
827
1181
|
fn = trackEvent._natives.start;
|
828
1182
|
}
|
829
1183
|
|
@@ -831,7 +1185,7 @@
|
|
831
1185
|
// The path will update the cue function
|
832
1186
|
if ( typeof time === "function" ) {
|
833
1187
|
fn = time;
|
834
|
-
// Re-use existing
|
1188
|
+
// Re-use existing TrackEvent start time
|
835
1189
|
time = trackEvent.start;
|
836
1190
|
}
|
837
1191
|
}
|
@@ -849,8 +1203,9 @@
|
|
849
1203
|
}
|
850
1204
|
|
851
1205
|
// p.cue( "b", 11 );
|
1206
|
+
// p.cue( "b", 11, function() {} );
|
852
1207
|
if ( typeof time === "number" ) {
|
853
|
-
fn = Popcorn.nop();
|
1208
|
+
fn = fn || Popcorn.nop();
|
854
1209
|
}
|
855
1210
|
|
856
1211
|
// p.cue( "c", function() {});
|
@@ -863,9 +1218,7 @@
|
|
863
1218
|
}
|
864
1219
|
}
|
865
1220
|
|
866
|
-
|
867
|
-
// Or update an existing track event with new values
|
868
|
-
Popcorn.addTrackEvent( this, {
|
1221
|
+
options = {
|
869
1222
|
id: id,
|
870
1223
|
start: time,
|
871
1224
|
end: time + 1,
|
@@ -875,7 +1228,42 @@
|
|
875
1228
|
end: Popcorn.nop,
|
876
1229
|
type: "cue"
|
877
1230
|
}
|
878
|
-
}
|
1231
|
+
};
|
1232
|
+
|
1233
|
+
if ( trackEvent ) {
|
1234
|
+
options = Popcorn.extend( trackEvent, options );
|
1235
|
+
}
|
1236
|
+
|
1237
|
+
if ( eventType === "cuechange" ) {
|
1238
|
+
|
1239
|
+
// Supports user defined track event id
|
1240
|
+
options._id = options.id || options._id || Popcorn.guid( options._natives.type );
|
1241
|
+
|
1242
|
+
this.data.trackEvents.add( options );
|
1243
|
+
TrackEvent.start( this, options );
|
1244
|
+
|
1245
|
+
this.timeUpdate( this, null, true );
|
1246
|
+
|
1247
|
+
// Store references to user added trackevents in ref table
|
1248
|
+
Popcorn.addTrackEvent.ref( this, options );
|
1249
|
+
|
1250
|
+
this.emit( eventType, Popcorn.extend({}, options, {
|
1251
|
+
id: id,
|
1252
|
+
type: eventType,
|
1253
|
+
previousValue: {
|
1254
|
+
time: trackEvent.start,
|
1255
|
+
fn: trackEvent._natives.start
|
1256
|
+
},
|
1257
|
+
currentValue: {
|
1258
|
+
time: time,
|
1259
|
+
fn: fn || Popcorn.nop
|
1260
|
+
},
|
1261
|
+
track: trackEvent
|
1262
|
+
}));
|
1263
|
+
} else {
|
1264
|
+
// Creating a one second track event with an empty end
|
1265
|
+
Popcorn.addTrackEvent( this, options );
|
1266
|
+
}
|
879
1267
|
|
880
1268
|
return this;
|
881
1269
|
},
|
@@ -1021,15 +1409,14 @@
|
|
1021
1409
|
// Defines all Event handling static functions
|
1022
1410
|
fn: {
|
1023
1411
|
trigger: function( type, data ) {
|
1412
|
+
var eventInterface, evt, clonedEvents,
|
1413
|
+
events = this.data.events[ type ];
|
1024
1414
|
|
1025
|
-
var eventInterface, evt;
|
1026
1415
|
// setup checks for custom event system
|
1027
|
-
if (
|
1028
|
-
|
1416
|
+
if ( events ) {
|
1029
1417
|
eventInterface = Popcorn.events.getInterface( type );
|
1030
1418
|
|
1031
1419
|
if ( eventInterface ) {
|
1032
|
-
|
1033
1420
|
evt = document.createEvent( eventInterface );
|
1034
1421
|
evt.initEvent( type, true, true, global, 1 );
|
1035
1422
|
|
@@ -1038,33 +1425,38 @@
|
|
1038
1425
|
return this;
|
1039
1426
|
}
|
1040
1427
|
|
1041
|
-
//
|
1042
|
-
|
1043
|
-
|
1044
|
-
obj.call( this, data );
|
1045
|
-
|
1046
|
-
}, this );
|
1428
|
+
// clone events in case callbacks remove callbacks themselves
|
1429
|
+
clonedEvents = events.slice();
|
1047
1430
|
|
1431
|
+
// iterate through all callbacks
|
1432
|
+
while ( clonedEvents.length ) {
|
1433
|
+
clonedEvents.shift().call( this, data );
|
1434
|
+
}
|
1048
1435
|
}
|
1049
1436
|
|
1050
1437
|
return this;
|
1051
1438
|
},
|
1052
1439
|
listen: function( type, fn ) {
|
1053
|
-
|
1054
1440
|
var self = this,
|
1055
1441
|
hasEvents = true,
|
1056
1442
|
eventHook = Popcorn.events.hooks[ type ],
|
1057
1443
|
origType = type,
|
1444
|
+
clonedEvents,
|
1058
1445
|
tmp;
|
1059
1446
|
|
1447
|
+
if ( typeof fn !== "function" ) {
|
1448
|
+
throw new Error( "Popcorn.js Error: Listener is not a function" );
|
1449
|
+
}
|
1450
|
+
|
1451
|
+
// Setup event registry entry
|
1060
1452
|
if ( !this.data.events[ type ] ) {
|
1061
|
-
this.data.events[ type ] =
|
1453
|
+
this.data.events[ type ] = [];
|
1454
|
+
// Toggle if the previous assumption was untrue
|
1062
1455
|
hasEvents = false;
|
1063
1456
|
}
|
1064
1457
|
|
1065
1458
|
// Check and setup event hooks
|
1066
1459
|
if ( eventHook ) {
|
1067
|
-
|
1068
1460
|
// Execute hook add method if defined
|
1069
1461
|
if ( eventHook.add ) {
|
1070
1462
|
eventHook.add.call( this, {}, fn );
|
@@ -1089,39 +1481,61 @@
|
|
1089
1481
|
|
1090
1482
|
// Setup event registry entry
|
1091
1483
|
if ( !this.data.events[ type ] ) {
|
1092
|
-
this.data.events[ type ] =
|
1484
|
+
this.data.events[ type ] = [];
|
1093
1485
|
// Toggle if the previous assumption was untrue
|
1094
1486
|
hasEvents = false;
|
1095
1487
|
}
|
1096
1488
|
}
|
1097
1489
|
|
1098
1490
|
// Register event and handler
|
1099
|
-
this.data.events[ type ]
|
1491
|
+
this.data.events[ type ].push( fn );
|
1100
1492
|
|
1101
1493
|
// only attach one event of any type
|
1102
1494
|
if ( !hasEvents && Popcorn.events.all.indexOf( type ) > -1 ) {
|
1103
|
-
|
1104
1495
|
this.media.addEventListener( type, function( event ) {
|
1496
|
+
if ( self.data.events[ type ] ) {
|
1497
|
+
// clone events in case callbacks remove callbacks themselves
|
1498
|
+
clonedEvents = self.data.events[ type ].slice();
|
1105
1499
|
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1500
|
+
// iterate through all callbacks
|
1501
|
+
while ( clonedEvents.length ) {
|
1502
|
+
clonedEvents.shift().call( self, event );
|
1109
1503
|
}
|
1110
|
-
}
|
1111
|
-
|
1112
|
-
}, false);
|
1504
|
+
}
|
1505
|
+
}, false );
|
1113
1506
|
}
|
1114
1507
|
return this;
|
1115
1508
|
},
|
1116
1509
|
unlisten: function( type, fn ) {
|
1510
|
+
var ind,
|
1511
|
+
events = this.data.events[ type ];
|
1512
|
+
|
1513
|
+
if ( !events ) {
|
1514
|
+
return; // no listeners = nothing to do
|
1515
|
+
}
|
1117
1516
|
|
1118
|
-
if (
|
1517
|
+
if ( typeof fn === "string" ) {
|
1518
|
+
// legacy support for string-based removal -- not recommended
|
1519
|
+
for ( var i = 0; i < events.length; i++ ) {
|
1520
|
+
if ( events[ i ].name === fn ) {
|
1521
|
+
// decrement i because array length just got smaller
|
1522
|
+
events.splice( i--, 1 );
|
1523
|
+
}
|
1524
|
+
}
|
1119
1525
|
|
1120
|
-
|
1526
|
+
return this;
|
1527
|
+
} else if ( typeof fn === "function" ) {
|
1528
|
+
while( ind !== -1 ) {
|
1529
|
+
ind = events.indexOf( fn );
|
1530
|
+
if ( ind !== -1 ) {
|
1531
|
+
events.splice( ind, 1 );
|
1532
|
+
}
|
1533
|
+
}
|
1121
1534
|
|
1122
1535
|
return this;
|
1123
1536
|
}
|
1124
1537
|
|
1538
|
+
// if we got to this point, we are deleting all functions of this type
|
1125
1539
|
this.data.events[ type ] = null;
|
1126
1540
|
|
1127
1541
|
return this;
|
@@ -1136,7 +1550,10 @@
|
|
1136
1550
|
|
1137
1551
|
if ( this.media.readyState ) {
|
1138
1552
|
|
1139
|
-
|
1553
|
+
// always call canplayall asynchronously
|
1554
|
+
setTimeout(function() {
|
1555
|
+
callback.call( this, event );
|
1556
|
+
}.bind(this), 0 );
|
1140
1557
|
|
1141
1558
|
state = true;
|
1142
1559
|
}
|
@@ -1165,50 +1582,127 @@
|
|
1165
1582
|
Popcorn.p[ key[ 0 ] ] = Popcorn.p[ key[ 1 ] ] = Popcorn.events.fn[ key[ 0 ] ];
|
1166
1583
|
});
|
1167
1584
|
|
1168
|
-
// Internal Only -
|
1169
|
-
|
1170
|
-
|
1585
|
+
// Internal Only - construct simple "TrackEvent"
|
1586
|
+
// data type objects
|
1587
|
+
function TrackEvent( track ) {
|
1588
|
+
Abstract.put.call( this, track );
|
1589
|
+
}
|
1171
1590
|
|
1172
|
-
|
1173
|
-
|
1174
|
-
trackEvent = obj.getTrackEvent( track.id );
|
1175
|
-
}
|
1591
|
+
// Determine if a TrackEvent's "start" and "trackstart" must be called.
|
1592
|
+
TrackEvent.start = function( instance, track ) {
|
1176
1593
|
|
1177
|
-
|
1178
|
-
|
1179
|
-
isUpdate = true;
|
1180
|
-
// Create a new object with the existing trackEvent
|
1181
|
-
// Extend with new track properties
|
1182
|
-
track = Popcorn.extend( {}, trackEvent, track );
|
1594
|
+
if ( track.end > instance.media.currentTime &&
|
1595
|
+
track.start <= instance.media.currentTime && !track._running ) {
|
1183
1596
|
|
1184
|
-
|
1185
|
-
|
1186
|
-
}
|
1597
|
+
track._running = true;
|
1598
|
+
instance.data.running[ track._natives.type ].push( track );
|
1187
1599
|
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
( obj.options.defaults && obj.options.defaults[ track._natives.type ] ) ) {
|
1600
|
+
if ( !instance.data.disabled[ track._natives.type ] ) {
|
1601
|
+
|
1602
|
+
track._natives.start.call( instance, null, track );
|
1192
1603
|
|
1193
|
-
|
1604
|
+
instance.emit( "trackstart",
|
1605
|
+
Popcorn.extend( {}, track, {
|
1606
|
+
plugin: track._natives.type,
|
1607
|
+
type: "trackstart",
|
1608
|
+
track: track
|
1609
|
+
})
|
1610
|
+
);
|
1611
|
+
}
|
1194
1612
|
}
|
1613
|
+
};
|
1195
1614
|
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1615
|
+
// Determine if a TrackEvent's "end" and "trackend" must be called.
|
1616
|
+
TrackEvent.end = function( instance, track ) {
|
1617
|
+
|
1618
|
+
var runningPlugins;
|
1619
|
+
|
1620
|
+
if ( ( track.end <= instance.media.currentTime ||
|
1621
|
+
track.start > instance.media.currentTime ) && track._running ) {
|
1199
1622
|
|
1200
|
-
|
1201
|
-
|
1623
|
+
runningPlugins = instance.data.running[ track._natives.type ];
|
1624
|
+
|
1625
|
+
track._running = false;
|
1626
|
+
runningPlugins.splice( runningPlugins.indexOf( track ), 1 );
|
1627
|
+
|
1628
|
+
if ( !instance.data.disabled[ track._natives.type ] ) {
|
1629
|
+
|
1630
|
+
track._natives.end.call( instance, null, track );
|
1631
|
+
|
1632
|
+
instance.emit( "trackend",
|
1633
|
+
Popcorn.extend( {}, track, {
|
1634
|
+
plugin: track._natives.type,
|
1635
|
+
type: "trackend",
|
1636
|
+
track: track
|
1637
|
+
})
|
1638
|
+
);
|
1639
|
+
}
|
1202
1640
|
}
|
1641
|
+
};
|
1642
|
+
|
1643
|
+
// Internal Only - construct "TrackEvents"
|
1644
|
+
// data type objects that are used by the Popcorn
|
1645
|
+
// instance, stored at p.data.trackEvents
|
1646
|
+
function TrackEvents( parent ) {
|
1647
|
+
this.parent = parent;
|
1648
|
+
|
1649
|
+
this.byStart = [{
|
1650
|
+
start: -1,
|
1651
|
+
end: -1
|
1652
|
+
}];
|
1653
|
+
|
1654
|
+
this.byEnd = [{
|
1655
|
+
start: -1,
|
1656
|
+
end: -1
|
1657
|
+
}];
|
1658
|
+
this.animating = [];
|
1659
|
+
this.startIndex = 0;
|
1660
|
+
this.endIndex = 0;
|
1661
|
+
this.previousUpdateTime = -1;
|
1662
|
+
|
1663
|
+
this.count = 1;
|
1664
|
+
}
|
1665
|
+
|
1666
|
+
function isMatch( obj, key, value ) {
|
1667
|
+
return obj[ key ] && obj[ key ] === value;
|
1668
|
+
}
|
1669
|
+
|
1670
|
+
TrackEvents.prototype.where = function( params ) {
|
1671
|
+
return ( this.parent.getTrackEvents() || [] ).filter(function( event ) {
|
1672
|
+
var key, value;
|
1673
|
+
|
1674
|
+
// If no explicit params, match all TrackEvents
|
1675
|
+
if ( !params ) {
|
1676
|
+
return true;
|
1677
|
+
}
|
1678
|
+
|
1679
|
+
// Filter keys in params against both the top level properties
|
1680
|
+
// and the _natives properties
|
1681
|
+
for ( key in params ) {
|
1682
|
+
value = params[ key ];
|
1683
|
+
if ( isMatch( event, key, value ) || isMatch( event._natives, key, value ) ) {
|
1684
|
+
return true;
|
1685
|
+
}
|
1686
|
+
}
|
1687
|
+
return false;
|
1688
|
+
});
|
1689
|
+
};
|
1203
1690
|
|
1204
|
-
|
1205
|
-
track.end = Popcorn.util.toSeconds( track.end, obj.options.framerate );
|
1691
|
+
TrackEvents.prototype.add = function( track ) {
|
1206
1692
|
|
1207
1693
|
// Store this definition in an array sorted by times
|
1208
|
-
var byStart =
|
1209
|
-
byEnd =
|
1694
|
+
var byStart = this.byStart,
|
1695
|
+
byEnd = this.byEnd,
|
1210
1696
|
startIndex, endIndex;
|
1211
1697
|
|
1698
|
+
// Push track event ids into the history
|
1699
|
+
if ( track && track._id ) {
|
1700
|
+
this.parent.data.history.push( track._id );
|
1701
|
+
}
|
1702
|
+
|
1703
|
+
track.start = Popcorn.util.toSeconds( track.start, this.parent.options.framerate );
|
1704
|
+
track.end = Popcorn.util.toSeconds( track.end, this.parent.options.framerate );
|
1705
|
+
|
1212
1706
|
for ( startIndex = byStart.length - 1; startIndex >= 0; startIndex-- ) {
|
1213
1707
|
|
1214
1708
|
if ( track.start >= byStart[ startIndex ].start ) {
|
@@ -1225,89 +1719,54 @@
|
|
1225
1719
|
}
|
1226
1720
|
}
|
1227
1721
|
|
1228
|
-
// Display track event immediately if it's enabled and current
|
1229
|
-
if ( track.end > obj.media.currentTime &&
|
1230
|
-
track.start <= obj.media.currentTime ) {
|
1231
|
-
|
1232
|
-
track._running = true;
|
1233
|
-
obj.data.running[ track._natives.type ].push( track );
|
1234
|
-
|
1235
|
-
if ( !obj.data.disabled[ track._natives.type ] ) {
|
1236
|
-
|
1237
|
-
track._natives.start.call( obj, null, track );
|
1238
|
-
}
|
1239
|
-
}
|
1240
|
-
|
1241
1722
|
// update startIndex and endIndex
|
1242
|
-
if ( startIndex <=
|
1243
|
-
track.start <=
|
1723
|
+
if ( startIndex <= this.parent.data.trackEvents.startIndex &&
|
1724
|
+
track.start <= this.parent.data.trackEvents.previousUpdateTime ) {
|
1244
1725
|
|
1245
|
-
|
1726
|
+
this.parent.data.trackEvents.startIndex++;
|
1246
1727
|
}
|
1247
1728
|
|
1248
|
-
if ( endIndex <=
|
1249
|
-
track.end <
|
1729
|
+
if ( endIndex <= this.parent.data.trackEvents.endIndex &&
|
1730
|
+
track.end < this.parent.data.trackEvents.previousUpdateTime ) {
|
1250
1731
|
|
1251
|
-
|
1732
|
+
this.parent.data.trackEvents.endIndex++;
|
1252
1733
|
}
|
1253
1734
|
|
1254
|
-
this.
|
1255
|
-
|
1256
|
-
// Store references to user added trackevents in ref table
|
1257
|
-
if ( track._id ) {
|
1258
|
-
Popcorn.addTrackEvent.ref( obj, track );
|
1259
|
-
}
|
1735
|
+
this.count++;
|
1260
1736
|
|
1261
|
-
|
1262
|
-
if ( isUpdate ) {
|
1737
|
+
};
|
1263
1738
|
|
1264
|
-
|
1265
|
-
// they are identical in function, but the naming
|
1266
|
-
// adds some level of intuition for the end developer
|
1267
|
-
// to rely on
|
1268
|
-
if ( track._natives.type === "cue" ) {
|
1269
|
-
eventType = "cuechange";
|
1270
|
-
} else {
|
1271
|
-
eventType = "trackchange";
|
1272
|
-
}
|
1739
|
+
TrackEvents.prototype.remove = function( removeId, state ) {
|
1273
1740
|
|
1274
|
-
|
1275
|
-
|
1276
|
-
id: track.id,
|
1277
|
-
previousValue: {
|
1278
|
-
time: trackEvent.start,
|
1279
|
-
fn: trackEvent._natives.start
|
1280
|
-
},
|
1281
|
-
currentValue: {
|
1282
|
-
time: track.start,
|
1283
|
-
fn: track._natives.start
|
1284
|
-
}
|
1285
|
-
});
|
1741
|
+
if ( removeId instanceof TrackEvent ) {
|
1742
|
+
removeId = removeId.id;
|
1286
1743
|
}
|
1287
|
-
};
|
1288
|
-
|
1289
|
-
// Internal Only - Adds track event references to the instance object's trackRefs hash table
|
1290
|
-
Popcorn.addTrackEvent.ref = function( obj, track ) {
|
1291
|
-
obj.data.trackRefs[ track._id ] = track;
|
1292
1744
|
|
1293
|
-
|
1294
|
-
|
1745
|
+
if ( typeof removeId === "object" ) {
|
1746
|
+
// Filter by key=val and remove all matching TrackEvents
|
1747
|
+
this.where( removeId ).forEach(function( event ) {
|
1748
|
+
// |this| refers to the calling Popcorn "parent" instance
|
1749
|
+
this.removeTrackEvent( event._id );
|
1750
|
+
}, this.parent );
|
1295
1751
|
|
1296
|
-
|
1752
|
+
return this;
|
1753
|
+
}
|
1297
1754
|
|
1298
|
-
var start, end, animate,
|
1299
|
-
|
1300
|
-
length = obj.data.trackEvents.byStart.length,
|
1755
|
+
var start, end, animate, historyLen, track,
|
1756
|
+
length = this.byStart.length,
|
1301
1757
|
index = 0,
|
1302
1758
|
indexWasAt = 0,
|
1303
1759
|
byStart = [],
|
1304
1760
|
byEnd = [],
|
1305
1761
|
animating = [],
|
1306
|
-
history = []
|
1762
|
+
history = [],
|
1763
|
+
comparable = {};
|
1764
|
+
|
1765
|
+
state = state || {};
|
1307
1766
|
|
1308
1767
|
while ( --length > -1 ) {
|
1309
|
-
start =
|
1310
|
-
end =
|
1768
|
+
start = this.byStart[ index ];
|
1769
|
+
end = this.byEnd[ index ];
|
1311
1770
|
|
1312
1771
|
// Padding events will not have _id properties.
|
1313
1772
|
// These should be safely pushed onto the front and back of the
|
@@ -1334,11 +1793,8 @@
|
|
1334
1793
|
if ( start._id === removeId ) {
|
1335
1794
|
indexWasAt = index;
|
1336
1795
|
|
1337
|
-
//
|
1338
|
-
|
1339
|
-
if ( start._natives._teardown ) {
|
1340
|
-
start._natives._teardown.call( obj, start );
|
1341
|
-
}
|
1796
|
+
// cache the track event being removed
|
1797
|
+
track = start;
|
1342
1798
|
}
|
1343
1799
|
}
|
1344
1800
|
// Increment the track index
|
@@ -1349,12 +1805,12 @@
|
|
1349
1805
|
// if animating track events should also be filtered for removal.
|
1350
1806
|
// Reset index below to be used by the reverse while as an
|
1351
1807
|
// incrementing counter
|
1352
|
-
length =
|
1808
|
+
length = this.animating.length;
|
1353
1809
|
index = 0;
|
1354
1810
|
|
1355
1811
|
if ( length ) {
|
1356
1812
|
while ( --length > -1 ) {
|
1357
|
-
animate =
|
1813
|
+
animate = this.animating[ index ];
|
1358
1814
|
|
1359
1815
|
// Padding events will not have _id properties.
|
1360
1816
|
// These should be safely pushed onto the front and back of the
|
@@ -1373,29 +1829,139 @@
|
|
1373
1829
|
}
|
1374
1830
|
|
1375
1831
|
// Update
|
1376
|
-
if ( indexWasAt <=
|
1377
|
-
|
1832
|
+
if ( indexWasAt <= this.startIndex ) {
|
1833
|
+
this.startIndex--;
|
1378
1834
|
}
|
1379
1835
|
|
1380
|
-
if ( indexWasAt <=
|
1381
|
-
|
1836
|
+
if ( indexWasAt <= this.endIndex ) {
|
1837
|
+
this.endIndex--;
|
1382
1838
|
}
|
1383
1839
|
|
1384
|
-
|
1385
|
-
|
1386
|
-
|
1840
|
+
this.byStart = byStart;
|
1841
|
+
this.byEnd = byEnd;
|
1842
|
+
this.animating = animating;
|
1843
|
+
this.count--;
|
1844
|
+
|
1845
|
+
historyLen = this.parent.data.history.length;
|
1387
1846
|
|
1388
1847
|
for ( var i = 0; i < historyLen; i++ ) {
|
1389
|
-
if (
|
1390
|
-
history.push(
|
1848
|
+
if ( this.parent.data.history[ i ] !== removeId ) {
|
1849
|
+
history.push( this.parent.data.history[ i ] );
|
1391
1850
|
}
|
1392
1851
|
}
|
1393
1852
|
|
1394
1853
|
// Update ordered history array
|
1395
|
-
|
1854
|
+
this.parent.data.history = history;
|
1396
1855
|
|
1397
|
-
|
1856
|
+
};
|
1857
|
+
|
1858
|
+
// Helper function used to retrieve old values of properties that
|
1859
|
+
// are provided for update.
|
1860
|
+
function getPreviousProperties( oldOptions, newOptions ) {
|
1861
|
+
var matchProps = {};
|
1862
|
+
|
1863
|
+
for ( var prop in oldOptions ) {
|
1864
|
+
if ( hasOwn.call( newOptions, prop ) && hasOwn.call( oldOptions, prop ) ) {
|
1865
|
+
matchProps[ prop ] = oldOptions[ prop ];
|
1866
|
+
}
|
1867
|
+
}
|
1868
|
+
|
1869
|
+
return matchProps;
|
1870
|
+
}
|
1871
|
+
|
1872
|
+
// Internal Only - Adds track events to the instance object
|
1873
|
+
Popcorn.addTrackEvent = function( obj, track ) {
|
1874
|
+
var temp;
|
1875
|
+
|
1876
|
+
if ( track instanceof TrackEvent ) {
|
1877
|
+
return;
|
1878
|
+
}
|
1879
|
+
|
1880
|
+
track = new TrackEvent( track );
|
1881
|
+
|
1882
|
+
// Determine if this track has default options set for it
|
1883
|
+
// If so, apply them to the track object
|
1884
|
+
if ( track && track._natives && track._natives.type &&
|
1885
|
+
( obj.options.defaults && obj.options.defaults[ track._natives.type ] ) ) {
|
1886
|
+
|
1887
|
+
// To ensure that the TrackEvent Invariant Policy is enforced,
|
1888
|
+
// First, copy the properties of the newly created track event event
|
1889
|
+
// to a temporary holder
|
1890
|
+
temp = Popcorn.extend( {}, track );
|
1891
|
+
|
1892
|
+
// Next, copy the default onto the newly created trackevent, followed by the
|
1893
|
+
// temporary holder.
|
1894
|
+
Popcorn.extend( track, obj.options.defaults[ track._natives.type ], temp );
|
1895
|
+
}
|
1896
|
+
|
1897
|
+
if ( track._natives ) {
|
1898
|
+
// Supports user defined track event id
|
1899
|
+
track._id = track.id || track._id || Popcorn.guid( track._natives.type );
|
1900
|
+
|
1901
|
+
// Trigger _setup method if exists
|
1902
|
+
if ( track._natives._setup ) {
|
1903
|
+
|
1904
|
+
track._natives._setup.call( obj, track );
|
1905
|
+
|
1906
|
+
obj.emit( "tracksetup", Popcorn.extend( {}, track, {
|
1907
|
+
plugin: track._natives.type,
|
1908
|
+
type: "tracksetup",
|
1909
|
+
track: track
|
1910
|
+
}));
|
1911
|
+
}
|
1912
|
+
}
|
1913
|
+
|
1914
|
+
obj.data.trackEvents.add( track );
|
1915
|
+
TrackEvent.start( obj, track );
|
1916
|
+
|
1917
|
+
this.timeUpdate( obj, null, true );
|
1918
|
+
|
1919
|
+
// Store references to user added trackevents in ref table
|
1920
|
+
if ( track._id ) {
|
1921
|
+
Popcorn.addTrackEvent.ref( obj, track );
|
1922
|
+
}
|
1923
|
+
|
1924
|
+
obj.emit( "trackadded", Popcorn.extend({}, track,
|
1925
|
+
track._natives ? { plugin: track._natives.type } : {}, {
|
1926
|
+
type: "trackadded",
|
1927
|
+
track: track
|
1928
|
+
}));
|
1929
|
+
};
|
1930
|
+
|
1931
|
+
// Internal Only - Adds track event references to the instance object's trackRefs hash table
|
1932
|
+
Popcorn.addTrackEvent.ref = function( obj, track ) {
|
1933
|
+
obj.data.trackRefs[ track._id ] = track;
|
1934
|
+
|
1935
|
+
return obj;
|
1936
|
+
};
|
1937
|
+
|
1938
|
+
Popcorn.removeTrackEvent = function( obj, removeId ) {
|
1939
|
+
var track = obj.getTrackEvent( removeId );
|
1940
|
+
|
1941
|
+
if ( !track ) {
|
1942
|
+
return;
|
1943
|
+
}
|
1944
|
+
|
1945
|
+
// If a _teardown function was defined,
|
1946
|
+
// enforce for track event removals
|
1947
|
+
if ( track._natives._teardown ) {
|
1948
|
+
track._natives._teardown.call( obj, track );
|
1949
|
+
}
|
1950
|
+
|
1951
|
+
obj.data.trackEvents.remove( removeId );
|
1952
|
+
|
1953
|
+
// Update track event references
|
1398
1954
|
Popcorn.removeTrackEvent.ref( obj, removeId );
|
1955
|
+
|
1956
|
+
if ( track._natives ) {
|
1957
|
+
|
1958
|
+
// Fire a trackremoved event
|
1959
|
+
obj.emit( "trackremoved", Popcorn.extend({}, track, {
|
1960
|
+
plugin: track._natives.type,
|
1961
|
+
type: "trackremoved",
|
1962
|
+
track: track
|
1963
|
+
}));
|
1964
|
+
}
|
1399
1965
|
};
|
1400
1966
|
|
1401
1967
|
// Internal Only - Removes track event references from instance object's trackRefs hash table
|
@@ -1445,7 +2011,6 @@
|
|
1445
2011
|
};
|
1446
2012
|
|
1447
2013
|
Popcorn.timeUpdate = function( obj, event ) {
|
1448
|
-
|
1449
2014
|
var currentTime = obj.media.currentTime,
|
1450
2015
|
previousTime = obj.data.trackEvents.previousUpdateTime,
|
1451
2016
|
tracks = obj.data.trackEvents,
|
@@ -1486,7 +2051,8 @@
|
|
1486
2051
|
obj.emit( trackend,
|
1487
2052
|
Popcorn.extend({}, byEnd, {
|
1488
2053
|
plugin: type,
|
1489
|
-
type: trackend
|
2054
|
+
type: trackend,
|
2055
|
+
track: byEnd
|
1490
2056
|
})
|
1491
2057
|
);
|
1492
2058
|
}
|
@@ -1505,12 +2071,10 @@
|
|
1505
2071
|
byStart = tracks.byStart[ start ];
|
1506
2072
|
natives = byStart._natives;
|
1507
2073
|
type = natives && natives.type;
|
1508
|
-
|
1509
2074
|
// If plugin does not exist on this instance, remove it
|
1510
2075
|
if ( !natives ||
|
1511
2076
|
( !!registryByName[ type ] ||
|
1512
2077
|
!!obj[ type ] ) ) {
|
1513
|
-
|
1514
2078
|
if ( byStart.end > currentTime &&
|
1515
2079
|
byStart._running === false ) {
|
1516
2080
|
|
@@ -1524,7 +2088,8 @@
|
|
1524
2088
|
obj.emit( trackstart,
|
1525
2089
|
Popcorn.extend({}, byStart, {
|
1526
2090
|
plugin: type,
|
1527
|
-
type: trackstart
|
2091
|
+
type: trackstart,
|
2092
|
+
track: byStart
|
1528
2093
|
})
|
1529
2094
|
);
|
1530
2095
|
}
|
@@ -1564,7 +2129,8 @@
|
|
1564
2129
|
obj.emit( trackend,
|
1565
2130
|
Popcorn.extend({}, byStart, {
|
1566
2131
|
plugin: type,
|
1567
|
-
type: trackend
|
2132
|
+
type: trackend,
|
2133
|
+
track: byStart
|
1568
2134
|
})
|
1569
2135
|
);
|
1570
2136
|
}
|
@@ -1601,7 +2167,8 @@
|
|
1601
2167
|
obj.emit( trackstart,
|
1602
2168
|
Popcorn.extend({}, byEnd, {
|
1603
2169
|
plugin: type,
|
1604
|
-
type: trackstart
|
2170
|
+
type: trackstart,
|
2171
|
+
track: byEnd
|
1605
2172
|
})
|
1606
2173
|
);
|
1607
2174
|
}
|
@@ -1678,11 +2245,11 @@
|
|
1678
2245
|
|
1679
2246
|
// Provides some sugar, but ultimately extends
|
1680
2247
|
// the definition into Popcorn.p
|
1681
|
-
var
|
2248
|
+
var isfn = typeof definition === "function",
|
2249
|
+
blacklist = [ "start", "end", "type", "manifest" ],
|
2250
|
+
methods = [ "_setup", "_teardown", "start", "end", "frame" ],
|
1682
2251
|
plugin = {},
|
1683
|
-
setup
|
1684
|
-
isfn = typeof definition === "function",
|
1685
|
-
methods = [ "_setup", "_teardown", "start", "end", "frame" ];
|
2252
|
+
setup;
|
1686
2253
|
|
1687
2254
|
// combines calls of two function calls into one
|
1688
2255
|
var combineFn = function( first, second ) {
|
@@ -1740,7 +2307,7 @@
|
|
1740
2307
|
|
1741
2308
|
Popcorn.extend( natives, setup );
|
1742
2309
|
|
1743
|
-
options._natives.type = name;
|
2310
|
+
options._natives.type = options._natives.plugin = name;
|
1744
2311
|
options._running = false;
|
1745
2312
|
|
1746
2313
|
natives.start = natives.start || natives[ "in" ];
|
@@ -1766,12 +2333,37 @@
|
|
1766
2333
|
args[ 1 ]._running &&
|
1767
2334
|
runningPlugins.splice( runningPlugins.indexOf( options ), 1 ) &&
|
1768
2335
|
natives.end.apply( this, args );
|
2336
|
+
|
2337
|
+
args[ 1 ]._running = false;
|
2338
|
+
this.emit( "trackend",
|
2339
|
+
Popcorn.extend( {}, options, {
|
2340
|
+
plugin: natives.type,
|
2341
|
+
type: "trackend",
|
2342
|
+
track: Popcorn.getTrackEvent( this, options.id || options._id )
|
2343
|
+
})
|
2344
|
+
);
|
1769
2345
|
}, natives._teardown );
|
1770
2346
|
|
2347
|
+
// extend teardown to always trigger trackteardown after teardown
|
2348
|
+
natives._teardown = combineFn( natives._teardown, function() {
|
2349
|
+
|
2350
|
+
this.emit( "trackteardown", Popcorn.extend( {}, options, {
|
2351
|
+
plugin: name,
|
2352
|
+
type: "trackteardown",
|
2353
|
+
track: Popcorn.getTrackEvent( this, options.id || options._id )
|
2354
|
+
}));
|
2355
|
+
});
|
2356
|
+
|
1771
2357
|
// default to an empty string if no effect exists
|
1772
2358
|
// split string into an array of effects
|
1773
|
-
options.compose = options.compose
|
1774
|
-
|
2359
|
+
options.compose = options.compose || [];
|
2360
|
+
if ( typeof options.compose === "string" ) {
|
2361
|
+
options.compose = options.compose.split( " " );
|
2362
|
+
}
|
2363
|
+
options.effect = options.effect || [];
|
2364
|
+
if ( typeof options.effect === "string" ) {
|
2365
|
+
options.effect = options.effect.split( " " );
|
2366
|
+
}
|
1775
2367
|
|
1776
2368
|
// join the two arrays together
|
1777
2369
|
options.compose = options.compose.concat( options.effect );
|
@@ -1828,29 +2420,52 @@
|
|
1828
2420
|
options.target = manifestOpts && "target" in manifestOpts && manifestOpts.target;
|
1829
2421
|
}
|
1830
2422
|
|
1831
|
-
if ( options._natives ) {
|
2423
|
+
if ( !options._id && options._natives ) {
|
1832
2424
|
// ensure an initial id is there before setup is called
|
1833
2425
|
options._id = Popcorn.guid( options._natives.type );
|
1834
2426
|
}
|
1835
2427
|
|
1836
|
-
|
1837
|
-
options._natives._setup && options._natives._setup.call( this, options );
|
1838
|
-
|
1839
|
-
// Create new track event for this instance
|
1840
|
-
Popcorn.addTrackEvent( this, options );
|
2428
|
+
if ( options instanceof TrackEvent ) {
|
1841
2429
|
|
1842
|
-
|
1843
|
-
|
1844
|
-
|
2430
|
+
if ( options._natives ) {
|
2431
|
+
// Supports user defined track event id
|
2432
|
+
options._id = options.id || options._id || Popcorn.guid( options._natives.type );
|
1845
2433
|
|
1846
|
-
|
2434
|
+
// Trigger _setup method if exists
|
2435
|
+
if ( options._natives._setup ) {
|
1847
2436
|
|
1848
|
-
|
2437
|
+
options._natives._setup.call( this, options );
|
1849
2438
|
|
1850
|
-
this.
|
2439
|
+
this.emit( "tracksetup", Popcorn.extend( {}, options, {
|
2440
|
+
plugin: options._natives.type,
|
2441
|
+
type: "tracksetup",
|
2442
|
+
track: options
|
2443
|
+
}));
|
1851
2444
|
}
|
1852
2445
|
}
|
1853
2446
|
|
2447
|
+
this.data.trackEvents.add( options );
|
2448
|
+
TrackEvent.start( this, options );
|
2449
|
+
|
2450
|
+
this.timeUpdate( this, null, true );
|
2451
|
+
|
2452
|
+
// Store references to user added trackevents in ref table
|
2453
|
+
if ( options._id ) {
|
2454
|
+
Popcorn.addTrackEvent.ref( this, options );
|
2455
|
+
}
|
2456
|
+
} else {
|
2457
|
+
// Create new track event for this instance
|
2458
|
+
Popcorn.addTrackEvent( this, options );
|
2459
|
+
}
|
2460
|
+
|
2461
|
+
// Future support for plugin event definitions
|
2462
|
+
// for all of the native events
|
2463
|
+
Popcorn.forEach( setup, function( callback, type ) {
|
2464
|
+
// Don't attempt to create events for certain properties:
|
2465
|
+
// "start", "end", "type", "manifest". Fixes #1365
|
2466
|
+
if ( blacklist.indexOf( type ) === -1 ) {
|
2467
|
+
this.on( type, callback );
|
2468
|
+
}
|
1854
2469
|
}, this );
|
1855
2470
|
|
1856
2471
|
return this;
|
@@ -1860,7 +2475,7 @@
|
|
1860
2475
|
// Assign new named definition
|
1861
2476
|
Popcorn.p[ name ] = plugin[ name ] = function( id, options ) {
|
1862
2477
|
var length = arguments.length,
|
1863
|
-
trackEvent, defaults, mergedSetupOpts;
|
2478
|
+
trackEvent, defaults, mergedSetupOpts, previousOpts, newOpts;
|
1864
2479
|
|
1865
2480
|
// Shift arguments based on use case
|
1866
2481
|
//
|
@@ -1882,9 +2497,108 @@
|
|
1882
2497
|
// If the track event does exist, merge the updated properties
|
1883
2498
|
} else {
|
1884
2499
|
|
1885
|
-
|
2500
|
+
newOpts = options;
|
2501
|
+
previousOpts = getPreviousProperties( trackEvent, newOpts );
|
2502
|
+
|
2503
|
+
// Call the plugins defined update method if provided. Allows for
|
2504
|
+
// custom defined updating for a track event to be defined by the plugin author
|
2505
|
+
if ( trackEvent._natives._update ) {
|
2506
|
+
|
2507
|
+
this.data.trackEvents.remove( trackEvent );
|
2508
|
+
|
2509
|
+
// It's safe to say that the intent of Start/End will never change
|
2510
|
+
// Update them first before calling update
|
2511
|
+
if ( hasOwn.call( options, "start" ) ) {
|
2512
|
+
trackEvent.start = options.start;
|
2513
|
+
}
|
2514
|
+
|
2515
|
+
if ( hasOwn.call( options, "end" ) ) {
|
2516
|
+
trackEvent.end = options.end;
|
2517
|
+
}
|
2518
|
+
|
2519
|
+
TrackEvent.end( this, trackEvent );
|
2520
|
+
|
2521
|
+
if ( isfn ) {
|
2522
|
+
definition.call( this, trackEvent );
|
2523
|
+
}
|
2524
|
+
|
2525
|
+
trackEvent._natives._update.call( this, trackEvent, options );
|
2526
|
+
|
2527
|
+
this.data.trackEvents.add( trackEvent );
|
2528
|
+
TrackEvent.start( this, trackEvent );
|
2529
|
+
} else {
|
2530
|
+
// This branch is taken when there is no explicitly defined
|
2531
|
+
// _update method for a plugin. Which will occur either explicitly or
|
2532
|
+
// as a result of the plugin definition being a function that _returns_
|
2533
|
+
// a definition object.
|
2534
|
+
//
|
2535
|
+
// In either case, this path can ONLY be reached for TrackEvents that
|
2536
|
+
// already exist.
|
2537
|
+
|
2538
|
+
// Directly update the TrackEvent instance.
|
2539
|
+
// This supports TrackEvent invariant enforcement.
|
2540
|
+
Popcorn.extend( trackEvent, options );
|
2541
|
+
|
2542
|
+
this.data.trackEvents.remove( id );
|
2543
|
+
|
2544
|
+
// If a _teardown function was defined,
|
2545
|
+
// enforce for track event removals
|
2546
|
+
if ( trackEvent._natives._teardown ) {
|
2547
|
+
trackEvent._natives._teardown.call( this, trackEvent );
|
2548
|
+
}
|
2549
|
+
|
2550
|
+
// Update track event references
|
2551
|
+
Popcorn.removeTrackEvent.ref( this, id );
|
2552
|
+
|
2553
|
+
if ( isfn ) {
|
2554
|
+
pluginFn.call( this, definition.call( this, trackEvent ), trackEvent );
|
2555
|
+
} else {
|
1886
2556
|
|
1887
|
-
|
2557
|
+
// Supports user defined track event id
|
2558
|
+
trackEvent._id = trackEvent.id || trackEvent._id || Popcorn.guid( trackEvent._natives.type );
|
2559
|
+
|
2560
|
+
if ( trackEvent._natives && trackEvent._natives._setup ) {
|
2561
|
+
|
2562
|
+
trackEvent._natives._setup.call( this, trackEvent );
|
2563
|
+
|
2564
|
+
this.emit( "tracksetup", Popcorn.extend( {}, trackEvent, {
|
2565
|
+
plugin: trackEvent._natives.type,
|
2566
|
+
type: "tracksetup",
|
2567
|
+
track: trackEvent
|
2568
|
+
}));
|
2569
|
+
}
|
2570
|
+
|
2571
|
+
this.data.trackEvents.add( trackEvent );
|
2572
|
+
TrackEvent.start( this, trackEvent );
|
2573
|
+
|
2574
|
+
this.timeUpdate( this, null, true );
|
2575
|
+
|
2576
|
+
// Store references to user added trackevents in ref table
|
2577
|
+
Popcorn.addTrackEvent.ref( this, trackEvent );
|
2578
|
+
}
|
2579
|
+
|
2580
|
+
// Fire an event with change information
|
2581
|
+
this.emit( "trackchange", {
|
2582
|
+
id: trackEvent.id,
|
2583
|
+
type: "trackchange",
|
2584
|
+
previousValue: previousOpts,
|
2585
|
+
currentValue: trackEvent,
|
2586
|
+
track: trackEvent
|
2587
|
+
});
|
2588
|
+
|
2589
|
+
return this;
|
2590
|
+
}
|
2591
|
+
|
2592
|
+
if ( trackEvent._natives.type !== "cue" ) {
|
2593
|
+
// Fire an event with change information
|
2594
|
+
this.emit( "trackchange", {
|
2595
|
+
id: trackEvent.id,
|
2596
|
+
type: "trackchange",
|
2597
|
+
previousValue: previousOpts,
|
2598
|
+
currentValue: newOpts,
|
2599
|
+
track: trackEvent
|
2600
|
+
});
|
2601
|
+
}
|
1888
2602
|
|
1889
2603
|
return this;
|
1890
2604
|
}
|
@@ -1896,8 +2610,10 @@
|
|
1896
2610
|
defaults = ( this.options.defaults && this.options.defaults[ name ] ) || {};
|
1897
2611
|
mergedSetupOpts = Popcorn.extend( {}, defaults, options );
|
1898
2612
|
|
1899
|
-
|
2613
|
+
pluginFn.call( this, isfn ? definition.call( this, mergedSetupOpts ) : definition,
|
1900
2614
|
mergedSetupOpts );
|
2615
|
+
|
2616
|
+
return this;
|
1901
2617
|
};
|
1902
2618
|
|
1903
2619
|
// if the manifest parameter exists we should extend it onto the definition object
|
@@ -2081,13 +2797,11 @@
|
|
2081
2797
|
find: function( selector, context ) {
|
2082
2798
|
var node = null;
|
2083
2799
|
|
2084
|
-
// Trim leading/trailing whitespace to avoid false negatives
|
2085
|
-
selector = selector.trim();
|
2086
|
-
|
2087
2800
|
// Default context is the `document`
|
2088
2801
|
context = context || document;
|
2089
2802
|
|
2090
2803
|
if ( selector ) {
|
2804
|
+
|
2091
2805
|
// If the selector does not begin with "#", "." or "[",
|
2092
2806
|
// it could be either a nodeName or ID w/o "#"
|
2093
2807
|
if ( !rnaiveExpr.test( selector ) ) {
|
@@ -2118,18 +2832,18 @@
|
|
2118
2832
|
var rparams = /\?/,
|
2119
2833
|
// XHR Setup object
|
2120
2834
|
setup = {
|
2835
|
+
ajax: null,
|
2121
2836
|
url: "",
|
2122
2837
|
data: "",
|
2123
2838
|
dataType: "",
|
2124
2839
|
success: Popcorn.nop,
|
2125
2840
|
type: "GET",
|
2126
2841
|
async: true,
|
2127
|
-
|
2128
|
-
return new global.XMLHttpRequest();
|
2129
|
-
}
|
2842
|
+
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
|
2130
2843
|
};
|
2131
2844
|
|
2132
2845
|
Popcorn.xhr = function( options ) {
|
2846
|
+
var settings;
|
2133
2847
|
|
2134
2848
|
options.dataType = options.dataType && options.dataType.toLowerCase() || null;
|
2135
2849
|
|
@@ -2144,10 +2858,12 @@
|
|
2144
2858
|
return;
|
2145
2859
|
}
|
2146
2860
|
|
2147
|
-
|
2861
|
+
// Merge the "setup" defaults and custom "options"
|
2862
|
+
// into a new plain object.
|
2863
|
+
settings = Popcorn.extend( {}, setup, options );
|
2148
2864
|
|
2149
2865
|
// Create new XMLHttpRequest object
|
2150
|
-
settings.ajax
|
2866
|
+
settings.ajax = new XMLHttpRequest();
|
2151
2867
|
|
2152
2868
|
if ( settings.ajax ) {
|
2153
2869
|
|
@@ -2160,8 +2876,16 @@
|
|
2160
2876
|
settings.data = null;
|
2161
2877
|
}
|
2162
2878
|
|
2163
|
-
|
2879
|
+
// Open the request
|
2164
2880
|
settings.ajax.open( settings.type, settings.url, settings.async );
|
2881
|
+
|
2882
|
+
// For POST, set the content-type request header
|
2883
|
+
if ( settings.type === "POST" ) {
|
2884
|
+
settings.ajax.setRequestHeader(
|
2885
|
+
"Content-Type", settings.contentType
|
2886
|
+
);
|
2887
|
+
}
|
2888
|
+
|
2165
2889
|
settings.ajax.send( settings.data || null );
|
2166
2890
|
|
2167
2891
|
return Popcorn.xhr.httpData( settings );
|
@@ -2297,8 +3021,20 @@
|
|
2297
3021
|
head.removeChild( script );
|
2298
3022
|
}, false );
|
2299
3023
|
|
2300
|
-
script.
|
3024
|
+
script.addEventListener( "error", function( e ) {
|
3025
|
+
// Handling remote script loading callbacks
|
3026
|
+
success && success( { error: e } );
|
2301
3027
|
|
3028
|
+
// Executing for JSONP requests
|
3029
|
+
if ( !isScript ) {
|
3030
|
+
// Garbage collect the callback
|
3031
|
+
delete window[ callback ];
|
3032
|
+
}
|
3033
|
+
// Garbage collect the script resource
|
3034
|
+
head.removeChild( script );
|
3035
|
+
}, false );
|
3036
|
+
|
3037
|
+
script.src = url;
|
2302
3038
|
head.insertBefore( script, head.firstChild );
|
2303
3039
|
|
2304
3040
|
return;
|
@@ -2428,13 +3164,6 @@
|
|
2428
3164
|
// ID string matching
|
2429
3165
|
var rIdExp = /^(#([\w\-\_\.]+))$/;
|
2430
3166
|
|
2431
|
-
var audioExtensions = "ogg|oga|aac|mp3|wav",
|
2432
|
-
videoExtensions = "ogg|ogv|mp4|webm",
|
2433
|
-
mediaExtensions = audioExtensions + "|" + videoExtensions;
|
2434
|
-
|
2435
|
-
var audioExtensionRegexp = new RegExp( "^.*\\.(" + audioExtensions + ")($|\\?)" ),
|
2436
|
-
mediaExtensionRegexp = new RegExp( "^.*\\.(" + mediaExtensions + ")($|\\?)" );
|
2437
|
-
|
2438
3167
|
Popcorn.player = function( name, player ) {
|
2439
3168
|
|
2440
3169
|
// return early if a player already exists under this name
|
@@ -2760,491 +3489,128 @@
|
|
2760
3489
|
};
|
2761
3490
|
};
|
2762
3491
|
|
2763
|
-
// smart will attempt to find you a
|
2764
|
-
// it will
|
2765
|
-
// if that failed, it will throw.
|
3492
|
+
// Popcorn.smart will attempt to find you a wrapper or player. If it can't do that,
|
3493
|
+
// it will default to using an HTML5 video in the target.
|
2766
3494
|
Popcorn.smart = function( target, src, options ) {
|
2767
|
-
var
|
2768
|
-
|
2769
|
-
|
2770
|
-
|
2771
|
-
|
2772
|
-
|
2773
|
-
canPlayTypeTester = document.createElement( "video" ),
|
2774
|
-
canPlayTypes = {
|
2775
|
-
"ogg": "video/ogg",
|
2776
|
-
"ogv": "video/ogg",
|
2777
|
-
"oga": "audio/ogg",
|
2778
|
-
"webm": "video/webm",
|
2779
|
-
"mp4": "video/mp4",
|
2780
|
-
"mp3": "audio/mp3"
|
2781
|
-
};
|
2782
|
-
|
2783
|
-
var canPlayType = function( type ) {
|
2784
|
-
|
2785
|
-
return canPlayTypeTester.canPlayType( canPlayTypes[ type ] );
|
2786
|
-
};
|
2787
|
-
|
2788
|
-
var canPlaySrc = function( src ) {
|
2789
|
-
|
2790
|
-
srcResult = mediaExtensionRegexp.exec( src );
|
2791
|
-
|
2792
|
-
if ( !srcResult || !srcResult[ 1 ] ) {
|
2793
|
-
return false;
|
2794
|
-
}
|
2795
|
-
|
2796
|
-
return canPlayType( srcResult[ 1 ] );
|
2797
|
-
};
|
3495
|
+
var node = typeof target === "string" ? Popcorn.dom.find( target ) : target,
|
3496
|
+
i, srci, j, media, mediaWrapper, popcorn, srcLength,
|
3497
|
+
// We leave HTMLVideoElement and HTMLAudioElement wrappers out
|
3498
|
+
// of the mix, since we'll default to HTML5 video if nothing
|
3499
|
+
// else works. Waiting on #1254 before we add YouTube to this.
|
3500
|
+
wrappers = "HTMLYouTubeVideoElement HTMLVimeoVideoElement HTMLSoundCloudAudioElement HTMLNullVideoElement".split(" ");
|
2798
3501
|
|
2799
3502
|
if ( !node ) {
|
2800
|
-
|
2801
|
-
Popcorn.error( "Specified target " + target + " was not found." );
|
3503
|
+
Popcorn.error( "Specified target `" + target + "` was not found." );
|
2802
3504
|
return;
|
2803
3505
|
}
|
2804
3506
|
|
2805
|
-
//
|
2806
|
-
|
2807
|
-
if ( elementTypes.indexOf( node.nodeName ) > -1 && !src ) {
|
3507
|
+
// If our src is not an array, create an array of one.
|
3508
|
+
src = typeof src === "string" ? [ src ] : src;
|
2808
3509
|
|
2809
|
-
|
2810
|
-
|
2811
|
-
options = src;
|
2812
|
-
src = undefined;
|
2813
|
-
}
|
2814
|
-
|
2815
|
-
return Popcorn( node, options );
|
2816
|
-
}
|
2817
|
-
|
2818
|
-
// if our src is not an array, create an array of one.
|
2819
|
-
if ( typeof( src ) === "string" ) {
|
2820
|
-
|
2821
|
-
src = [ src ];
|
2822
|
-
}
|
2823
|
-
|
2824
|
-
// go through each src, and find the first playable.
|
2825
|
-
// this only covers player sources popcorn knows of,
|
2826
|
-
// and not things like a youtube src that is private.
|
2827
|
-
// it will still consider a private youtube video to be playable.
|
3510
|
+
// Loop through each src, and find the first playable.
|
2828
3511
|
for ( i = 0, srcLength = src.length; i < srcLength; i++ ) {
|
2829
|
-
|
2830
|
-
|
2831
|
-
if
|
2832
|
-
|
2833
|
-
|
2834
|
-
|
3512
|
+
srci = src[ i ];
|
3513
|
+
|
3514
|
+
// See if we can use a wrapper directly, if not, try players.
|
3515
|
+
for ( j = 0; j < wrappers.length; j++ ) {
|
3516
|
+
mediaWrapper = Popcorn[ wrappers[ j ] ];
|
3517
|
+
if ( mediaWrapper && mediaWrapper._canPlaySrc( srci ) === "probably" ) {
|
3518
|
+
media = mediaWrapper( node );
|
3519
|
+
popcorn = Popcorn( media, options );
|
3520
|
+
// Set src, but not until after we return the media so the caller
|
3521
|
+
// can get error events, if any.
|
3522
|
+
setTimeout( function() {
|
3523
|
+
media.src = srci;
|
3524
|
+
}, 0 );
|
3525
|
+
return popcorn;
|
3526
|
+
}
|
2835
3527
|
}
|
2836
3528
|
|
2837
|
-
//
|
3529
|
+
// No wrapper can play this, check players.
|
2838
3530
|
for ( var key in Popcorn.player.registry ) {
|
2839
|
-
|
2840
3531
|
if ( Popcorn.player.registry.hasOwnProperty( key ) ) {
|
2841
|
-
|
2842
|
-
if ( Popcorn.player.registry[ key ].canPlayType( node.nodeName, src[ i ] ) ) {
|
2843
|
-
|
3532
|
+
if ( Popcorn.player.registry[ key ].canPlayType( node.nodeName, srci ) ) {
|
2844
3533
|
// Popcorn.smart( player, src, /* options */ )
|
2845
|
-
return Popcorn[ key ]( node,
|
3534
|
+
return Popcorn[ key ]( node, srci, options );
|
2846
3535
|
}
|
2847
3536
|
}
|
2848
3537
|
}
|
2849
3538
|
}
|
2850
3539
|
|
2851
|
-
//
|
2852
|
-
//
|
2853
|
-
|
2854
|
-
|
2855
|
-
|
2856
|
-
|
2857
|
-
|
2858
|
-
|
2859
|
-
|
2860
|
-
|
2861
|
-
|
2862
|
-
|
2863
|
-
|
3540
|
+
// If we don't have any players or wrappers that can handle this,
|
3541
|
+
// Default to using HTML5 video. Similar to the HTMLVideoElement
|
3542
|
+
// wrapper, we put a video in the div passed to us via:
|
3543
|
+
// Popcorn.smart( div, src, options )
|
3544
|
+
var videoHTML,
|
3545
|
+
videoElement,
|
3546
|
+
videoID = Popcorn.guid( "popcorn-video-" ),
|
3547
|
+
videoHTMLContainer = document.createElement( "div" );
|
3548
|
+
|
3549
|
+
videoHTMLContainer.style.width = "100%";
|
3550
|
+
videoHTMLContainer.style.height = "100%";
|
3551
|
+
|
3552
|
+
// If we only have one source, do not bother with source elements.
|
3553
|
+
// This means we don't have the IE9 hack,
|
3554
|
+
// and we can properly listen to error events.
|
3555
|
+
// That way an error event can be told to backup to Flash if it fails.
|
3556
|
+
if ( src.length === 1 ) {
|
3557
|
+
videoElement = document.createElement( "video" );
|
3558
|
+
videoElement.id = videoID;
|
3559
|
+
node.appendChild( videoElement );
|
3560
|
+
setTimeout( function() {
|
3561
|
+
// Hack to decode html characters like & to &
|
3562
|
+
var decodeDiv = document.createElement( "div" );
|
3563
|
+
decodeDiv.innerHTML = src[ 0 ];
|
3564
|
+
|
3565
|
+
videoElement.src = decodeDiv.firstChild.nodeValue;
|
3566
|
+
}, 0 );
|
3567
|
+
return Popcorn( '#' + videoID, options );
|
2864
3568
|
}
|
2865
3569
|
|
2866
|
-
|
2867
|
-
|
2868
|
-
|
2869
|
-
|
3570
|
+
node.appendChild( videoHTMLContainer );
|
3571
|
+
// IE9 doesn't like dynamic creation of source elements on <video>
|
3572
|
+
// so we do it in one shot via innerHTML.
|
3573
|
+
videoHTML = '<video id="' + videoID + '" preload=auto autobuffer>';
|
3574
|
+
for ( i = 0, srcLength = src.length; i < srcLength; i++ ) {
|
3575
|
+
videoHTML += '<source src="' + src[ i ] + '">';
|
3576
|
+
}
|
3577
|
+
videoHTML += "</video>";
|
3578
|
+
videoHTMLContainer.innerHTML = videoHTML;
|
2870
3579
|
|
3580
|
+
if ( options && options.events && options.events.error ) {
|
3581
|
+
node.addEventListener( "error", options.events.error, false );
|
3582
|
+
}
|
3583
|
+
return Popcorn( '#' + videoID, options );
|
2871
3584
|
};
|
2872
3585
|
})( Popcorn );
|
2873
3586
|
(function( window, Popcorn ) {
|
2874
|
-
// A global callback for youtube... that makes me angry
|
2875
|
-
window.onYouTubePlayerAPIReady = function() {
|
2876
3587
|
|
2877
|
-
|
2878
|
-
|
2879
|
-
|
2880
|
-
}
|
3588
|
+
var canPlayType = function( nodeName, url ) {
|
3589
|
+
return ( typeof url === "string" &&
|
3590
|
+
Popcorn.HTMLYouTubeVideoElement._canPlaySrc( url ) );
|
2881
3591
|
};
|
2882
3592
|
|
2883
|
-
// existing youtube references can break us.
|
2884
|
-
// remove it and use the one we can trust.
|
2885
|
-
if ( window.YT ) {
|
2886
|
-
window.quarantineYT = window.YT;
|
2887
|
-
window.YT = null;
|
2888
|
-
}
|
2889
|
-
|
2890
|
-
onYouTubePlayerAPIReady.waiting = [];
|
2891
|
-
|
2892
|
-
var _loading = false;
|
2893
|
-
|
2894
3593
|
Popcorn.player( "youtube", {
|
2895
|
-
_canPlayType:
|
2896
|
-
|
2897
|
-
return typeof url === "string" && (/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(youtu)/).test( url ) && nodeName.toLowerCase() !== "video";
|
2898
|
-
},
|
2899
|
-
_setup: function( options ) {
|
2900
|
-
if ( !window.YT && !_loading ) {
|
2901
|
-
_loading = true;
|
2902
|
-
Popcorn.getScript( "//youtube.com/player_api" );
|
2903
|
-
}
|
2904
|
-
|
2905
|
-
var media = this,
|
2906
|
-
autoPlay = false,
|
2907
|
-
container = document.createElement( "div" ),
|
2908
|
-
currentTime = 0,
|
2909
|
-
paused = true,
|
2910
|
-
seekTime = 0,
|
2911
|
-
firstGo = true,
|
2912
|
-
seeking = false,
|
2913
|
-
fragmentStart = 0,
|
2914
|
-
|
2915
|
-
// state code for volume changed polling
|
2916
|
-
lastMuted = false,
|
2917
|
-
lastVolume = 100,
|
2918
|
-
playerQueue = Popcorn.player.playerQueue();
|
2919
|
-
|
2920
|
-
var createProperties = function() {
|
2921
|
-
|
2922
|
-
Popcorn.player.defineProperty( media, "currentTime", {
|
2923
|
-
set: function( val ) {
|
2924
|
-
|
2925
|
-
if ( options.destroyed ) {
|
2926
|
-
return;
|
2927
|
-
}
|
2928
|
-
|
2929
|
-
seeking = true;
|
2930
|
-
// make sure val is a number
|
2931
|
-
currentTime = Math.round( +val * 100 ) / 100;
|
2932
|
-
},
|
2933
|
-
get: function() {
|
2934
|
-
|
2935
|
-
return currentTime;
|
2936
|
-
}
|
2937
|
-
});
|
2938
|
-
|
2939
|
-
Popcorn.player.defineProperty( media, "paused", {
|
2940
|
-
get: function() {
|
2941
|
-
|
2942
|
-
return paused;
|
2943
|
-
}
|
2944
|
-
});
|
2945
|
-
|
2946
|
-
Popcorn.player.defineProperty( media, "muted", {
|
2947
|
-
set: function( val ) {
|
2948
|
-
|
2949
|
-
if ( options.destroyed ) {
|
2950
|
-
|
2951
|
-
return val;
|
2952
|
-
}
|
2953
|
-
|
2954
|
-
if ( options.youtubeObject.isMuted() !== val ) {
|
2955
|
-
|
2956
|
-
if ( val ) {
|
2957
|
-
|
2958
|
-
options.youtubeObject.mute();
|
2959
|
-
} else {
|
2960
|
-
|
2961
|
-
options.youtubeObject.unMute();
|
2962
|
-
}
|
2963
|
-
|
2964
|
-
lastMuted = options.youtubeObject.isMuted();
|
2965
|
-
media.dispatchEvent( "volumechange" );
|
2966
|
-
}
|
2967
|
-
|
2968
|
-
return options.youtubeObject.isMuted();
|
2969
|
-
},
|
2970
|
-
get: function() {
|
2971
|
-
|
2972
|
-
if ( options.destroyed ) {
|
2973
|
-
|
2974
|
-
return 0;
|
2975
|
-
}
|
2976
|
-
|
2977
|
-
return options.youtubeObject.isMuted();
|
2978
|
-
}
|
2979
|
-
});
|
2980
|
-
|
2981
|
-
Popcorn.player.defineProperty( media, "volume", {
|
2982
|
-
set: function( val ) {
|
2983
|
-
|
2984
|
-
if ( options.destroyed ) {
|
2985
|
-
|
2986
|
-
return val;
|
2987
|
-
}
|
2988
|
-
|
2989
|
-
if ( options.youtubeObject.getVolume() / 100 !== val ) {
|
2990
|
-
|
2991
|
-
options.youtubeObject.setVolume( val * 100 );
|
2992
|
-
lastVolume = options.youtubeObject.getVolume();
|
2993
|
-
media.dispatchEvent( "volumechange" );
|
2994
|
-
}
|
2995
|
-
|
2996
|
-
return options.youtubeObject.getVolume() / 100;
|
2997
|
-
},
|
2998
|
-
get: function() {
|
2999
|
-
|
3000
|
-
if ( options.destroyed ) {
|
3001
|
-
|
3002
|
-
return 0;
|
3003
|
-
}
|
3004
|
-
|
3005
|
-
return options.youtubeObject.getVolume() / 100;
|
3006
|
-
}
|
3007
|
-
});
|
3008
|
-
|
3009
|
-
media.play = function() {
|
3010
|
-
|
3011
|
-
if ( options.destroyed ) {
|
3012
|
-
|
3013
|
-
return;
|
3014
|
-
}
|
3015
|
-
|
3016
|
-
paused = false;
|
3017
|
-
playerQueue.add(function() {
|
3018
|
-
|
3019
|
-
if ( options.youtubeObject.getPlayerState() !== 1 ) {
|
3020
|
-
|
3021
|
-
seeking = false;
|
3022
|
-
options.youtubeObject.playVideo();
|
3023
|
-
} else {
|
3024
|
-
playerQueue.next();
|
3025
|
-
}
|
3026
|
-
});
|
3027
|
-
};
|
3028
|
-
|
3029
|
-
media.pause = function() {
|
3030
|
-
|
3031
|
-
if ( options.destroyed ) {
|
3032
|
-
|
3033
|
-
return;
|
3034
|
-
}
|
3035
|
-
|
3036
|
-
paused = true;
|
3037
|
-
playerQueue.add(function() {
|
3038
|
-
|
3039
|
-
if ( options.youtubeObject.getPlayerState() !== 2 ) {
|
3040
|
-
|
3041
|
-
options.youtubeObject.pauseVideo();
|
3042
|
-
} else {
|
3043
|
-
playerQueue.next();
|
3044
|
-
}
|
3045
|
-
});
|
3046
|
-
};
|
3047
|
-
};
|
3048
|
-
|
3049
|
-
container.id = media.id + Popcorn.guid();
|
3050
|
-
options._container = container;
|
3051
|
-
media.appendChild( container );
|
3052
|
-
|
3053
|
-
var youtubeInit = function() {
|
3054
|
-
|
3055
|
-
var src, query, params, playerVars, queryStringItem, firstPlay = true;
|
3056
|
-
|
3057
|
-
var timeUpdate = function() {
|
3058
|
-
|
3059
|
-
if ( options.destroyed ) {
|
3060
|
-
return;
|
3061
|
-
}
|
3062
|
-
|
3063
|
-
if ( !seeking ) {
|
3064
|
-
currentTime = options.youtubeObject.getCurrentTime();
|
3065
|
-
media.dispatchEvent( "timeupdate" );
|
3066
|
-
} else if ( currentTime === options.youtubeObject.getCurrentTime() ) {
|
3067
|
-
|
3068
|
-
seeking = false;
|
3069
|
-
media.dispatchEvent( "seeked" );
|
3070
|
-
media.dispatchEvent( "timeupdate" );
|
3071
|
-
} else {
|
3072
|
-
|
3073
|
-
// keep trying the seek until it is right.
|
3074
|
-
options.youtubeObject.seekTo( currentTime );
|
3075
|
-
}
|
3076
|
-
setTimeout( timeUpdate, 250 );
|
3077
|
-
};
|
3078
|
-
|
3079
|
-
// delay is in seconds
|
3080
|
-
var fetchDuration = function( delay ) {
|
3081
|
-
var ytDuration = options.youtubeObject.getDuration();
|
3082
|
-
|
3083
|
-
if ( isNaN( ytDuration ) || ytDuration === 0 ) {
|
3084
|
-
setTimeout( function() {
|
3085
|
-
fetchDuration( delay * 2 );
|
3086
|
-
}, delay*1000 );
|
3087
|
-
} else {
|
3088
|
-
// set duration and dispatch ready events
|
3089
|
-
media.duration = ytDuration;
|
3090
|
-
media.dispatchEvent( "durationchange" );
|
3091
|
-
|
3092
|
-
media.dispatchEvent( "loadedmetadata" );
|
3093
|
-
media.dispatchEvent( "loadeddata" );
|
3094
|
-
|
3095
|
-
media.readyState = 4;
|
3096
|
-
|
3097
|
-
timeUpdate();
|
3098
|
-
media.dispatchEvent( "canplaythrough" );
|
3099
|
-
}
|
3100
|
-
};
|
3101
|
-
|
3102
|
-
options.controls = +options.controls === 0 || +options.controls === 1 ? options.controls : 1;
|
3103
|
-
options.annotations = +options.annotations === 1 || +options.annotations === 3 ? options.annotations : 1;
|
3104
|
-
|
3105
|
-
src = /^.*(?:\/|v=)(.{11})/.exec( media.src )[ 1 ];
|
3106
|
-
|
3107
|
-
query = ( media.src.split( "?" )[ 1 ] || "" )
|
3108
|
-
.replace( /v=.{11}/, "" );
|
3109
|
-
query = query.replace( /&t=(?:(\d+)m)?(?:(\d+)s)?/, function( all, minutes, seconds ) {
|
3110
|
-
|
3111
|
-
// Make sure we have real zeros
|
3112
|
-
minutes = minutes | 0; // bit-wise OR
|
3113
|
-
seconds = seconds | 0; // bit-wise OR
|
3114
|
-
|
3115
|
-
fragmentStart = ( +seconds + ( minutes * 60 ) );
|
3116
|
-
return "";
|
3117
|
-
});
|
3118
|
-
query = query.replace( /&start=(\d+)?/, function( all, seconds ) {
|
3119
|
-
|
3120
|
-
// Make sure we have real zeros
|
3121
|
-
seconds = seconds | 0; // bit-wise OR
|
3122
|
-
|
3123
|
-
fragmentStart = seconds;
|
3124
|
-
return "";
|
3125
|
-
});
|
3126
|
-
|
3127
|
-
autoPlay = ( /autoplay=1/.test( query ) );
|
3128
|
-
|
3129
|
-
params = query.split( /[\&\?]/g );
|
3130
|
-
playerVars = { wmode: "transparent" };
|
3131
|
-
|
3132
|
-
for( var i = 0; i < params.length; i++ ) {
|
3133
|
-
queryStringItem = params[ i ].split( "=" );
|
3134
|
-
playerVars[ queryStringItem[ 0 ] ] = queryStringItem[ 1 ];
|
3135
|
-
}
|
3136
|
-
|
3137
|
-
options.youtubeObject = new YT.Player( container.id, {
|
3138
|
-
height: "100%",
|
3139
|
-
width: "100%",
|
3140
|
-
wmode: "transparent",
|
3141
|
-
playerVars: playerVars,
|
3142
|
-
videoId: src,
|
3143
|
-
events: {
|
3144
|
-
"onReady": function(){
|
3145
|
-
|
3146
|
-
// pulling initial volume states form baseplayer
|
3147
|
-
lastVolume = media.volume;
|
3148
|
-
lastMuted = media.muted;
|
3149
|
-
|
3150
|
-
volumeupdate();
|
3151
|
-
|
3152
|
-
paused = media.paused;
|
3153
|
-
createProperties();
|
3154
|
-
options.youtubeObject.playVideo();
|
3155
|
-
|
3156
|
-
media.currentTime = fragmentStart;
|
3157
|
-
// wait to dispatch ready events until we get a duration
|
3158
|
-
},
|
3159
|
-
"onStateChange": function( state ){
|
3160
|
-
|
3161
|
-
if ( options.destroyed || state.data === -1 ) {
|
3162
|
-
return;
|
3163
|
-
}
|
3164
|
-
|
3165
|
-
// state.data === 2 is for pause events
|
3166
|
-
// state.data === 1 is for play events
|
3167
|
-
if ( state.data === 2 ) {
|
3168
|
-
paused = true;
|
3169
|
-
media.dispatchEvent( "pause" );
|
3170
|
-
playerQueue.next();
|
3171
|
-
} else if ( state.data === 1 && !firstPlay ) {
|
3172
|
-
paused = false;
|
3173
|
-
media.dispatchEvent( "play" );
|
3174
|
-
media.dispatchEvent( "playing" );
|
3175
|
-
playerQueue.next();
|
3176
|
-
} else if ( state.data === 0 ) {
|
3177
|
-
media.dispatchEvent( "ended" );
|
3178
|
-
} else if ( state.data === 1 && firstPlay ) {
|
3179
|
-
firstPlay = false;
|
3180
|
-
|
3181
|
-
// pulling initial paused state from autoplay or the baseplayer
|
3182
|
-
// also need to explicitly set to paused otherwise.
|
3183
|
-
if ( autoPlay || !media.paused ) {
|
3184
|
-
paused = false;
|
3185
|
-
}
|
3186
|
-
|
3187
|
-
if ( paused ) {
|
3188
|
-
options.youtubeObject.pauseVideo();
|
3189
|
-
}
|
3190
|
-
|
3191
|
-
fetchDuration( 0.025 );
|
3192
|
-
}
|
3193
|
-
},
|
3194
|
-
"onError": function( error ) {
|
3195
|
-
|
3196
|
-
if ( [ 2, 100, 101, 150 ].indexOf( error.data ) !== -1 ) {
|
3197
|
-
media.error = {
|
3198
|
-
customCode: error.data
|
3199
|
-
};
|
3200
|
-
media.dispatchEvent( "error" );
|
3201
|
-
}
|
3202
|
-
}
|
3203
|
-
}
|
3204
|
-
});
|
3205
|
-
|
3206
|
-
var volumeupdate = function() {
|
3207
|
-
|
3208
|
-
if ( options.destroyed ) {
|
3209
|
-
|
3210
|
-
return;
|
3211
|
-
}
|
3212
|
-
|
3213
|
-
if ( lastMuted !== options.youtubeObject.isMuted() ) {
|
3214
|
-
|
3215
|
-
lastMuted = options.youtubeObject.isMuted();
|
3216
|
-
media.dispatchEvent( "volumechange" );
|
3217
|
-
}
|
3218
|
-
|
3219
|
-
if ( lastVolume !== options.youtubeObject.getVolume() ) {
|
3220
|
-
|
3221
|
-
lastVolume = options.youtubeObject.getVolume();
|
3222
|
-
media.dispatchEvent( "volumechange" );
|
3223
|
-
}
|
3224
|
-
|
3225
|
-
setTimeout( volumeupdate, 250 );
|
3226
|
-
};
|
3227
|
-
};
|
3594
|
+
_canPlayType: canPlayType
|
3595
|
+
});
|
3228
3596
|
|
3229
|
-
|
3597
|
+
Popcorn.youtube = function( container, url, options ) {
|
3598
|
+
if ( typeof console !== "undefined" && console.warn ) {
|
3599
|
+
console.warn( "Deprecated player 'youtube'. Please use Popcorn.HTMLYouTubeVideoElement directly." );
|
3600
|
+
}
|
3230
3601
|
|
3231
|
-
|
3232
|
-
|
3602
|
+
var media = Popcorn.HTMLYouTubeVideoElement( container ),
|
3603
|
+
popcorn = Popcorn( media, options );
|
3233
3604
|
|
3234
|
-
|
3235
|
-
|
3236
|
-
|
3237
|
-
|
3605
|
+
// Set the src "soon" but return popcorn instance first, so
|
3606
|
+
// the caller can listen for error events.
|
3607
|
+
setTimeout( function() {
|
3608
|
+
media.src = url;
|
3609
|
+
}, 0 );
|
3238
3610
|
|
3239
|
-
|
3611
|
+
return popcorn;
|
3612
|
+
};
|
3240
3613
|
|
3241
|
-
|
3242
|
-
if( youtubeObject ){
|
3243
|
-
youtubeObject.stopVideo();
|
3244
|
-
youtubeObject.clearVideo && youtubeObject.clearVideo();
|
3245
|
-
}
|
3614
|
+
Popcorn.youtube.canPlayType = canPlayType;
|
3246
3615
|
|
3247
|
-
this.removeChild( document.getElementById( options._container.id ) );
|
3248
|
-
}
|
3249
|
-
});
|
3250
3616
|
}( window, Popcorn ));
|