@gumlet/player.js 1.0.5 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/player.min.js +2 -1
- package/dist/player.min.js.map +7 -0
- package/package.json +4 -10
- package/dist/player.js +0 -1109
package/README.md
CHANGED
|
@@ -28,13 +28,13 @@ Install
|
|
|
28
28
|
Player.js is hosted on JSDelivr's CDN. :
|
|
29
29
|
|
|
30
30
|
```html
|
|
31
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@gumlet/player.js@
|
|
31
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@gumlet/player.js@2.0/dist/player.min.js"></script>
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
install via npm :
|
|
35
35
|
|
|
36
36
|
```sh
|
|
37
|
-
npm install player.js
|
|
37
|
+
npm install @gumlet/player.js
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
Ready
|
package/dist/player.min.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
!function(a,b){function c(a){return function(){var b={method:a},c=Array.prototype.slice.call(arguments);/^get/.test(a)?(d.assert(c.length>0,"Get methods require a callback."),c.unshift(b)):(/^set/.test(a)&&(d.assert(0!==c.length,"Set methods require a value."),b.value=c[0]),c=[b]),this.send.apply(this,c)}}var d={};d.DEBUG=!1,d.VERSION="0.0.11",d.CONTEXT="player.js",d.POST_MESSAGE=!!a.postMessage,d.origin=function(b){return"//"===b.substr(0,2)&&(b=a.location.protocol+b),b.split("/").slice(0,3).join("/")},d.addEvent=function(a,b,c){a&&(a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent?a.attachEvent("on"+b,c):a["on"+b]=c)},d.log=function(){d.log.history=d.log.history||[],d.log.history.push(arguments),a.console&&d.DEBUG&&a.console.log(Array.prototype.slice.call(arguments))},d.isString=function(a){return"[object String]"===Object.prototype.toString.call(a)},d.isObject=function(a){return"[object Object]"===Object.prototype.toString.call(a)},d.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)},d.isNone=function(a){return null===a||void 0===a},d.has=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},d.indexOf=function(a,b){if(null==a)return-1;var c=0,d=a.length;if(Array.prototype.IndexOf&&a.indexOf===Array.prototype.IndexOf)return a.indexOf(b);for(;d>c;c++)if(a[c]===b)return c;return-1},d.assert=function(a,b){if(!a)throw b||"Player.js Assert Failed"},d.Keeper=function(){this.init()},d.Keeper.prototype.init=function(){this.data={}},d.Keeper.prototype.getUUID=function(){return"listener-xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"===a?b:3&b|8;return c.toString(16)})},d.Keeper.prototype.has=function(a,b){if(!this.data.hasOwnProperty(a))return!1;if(d.isNone(b))return!0;for(var c=this.data[a],e=0;e<c.length;e++)if(c[e].id===b)return!0;return!1},d.Keeper.prototype.add=function(a,b,c,d,e){var f={id:a,event:b,cb:c,ctx:d,one:e};this.has(b)?this.data[b].push(f):this.data[b]=[f]},d.Keeper.prototype.execute=function(a,b,c,e){if(!this.has(a,b))return!1;for(var f=[],g=[],h=0;h<this.data[a].length;h++){var i=this.data[a][h];d.isNone(b)||!d.isNone(b)&&i.id===b?(g.push({cb:i.cb,ctx:i.ctx?i.ctx:e,data:c}),i.one===!1&&f.push(i)):f.push(i)}0===f.length?delete this.data[a]:this.data[a]=f;for(var j=0;j<g.length;j++){var k=g[j];k.cb.call(k.ctx,k.data)}},d.Keeper.prototype.on=function(a,b,c,d){this.add(a,b,c,d,!1)},d.Keeper.prototype.one=function(a,b,c,d){this.add(a,b,c,d,!0)},d.Keeper.prototype.off=function(a,b){var c=[];if(!this.data.hasOwnProperty(a))return c;for(var e=[],f=0;f<this.data[a].length;f++){var g=this.data[a][f];d.isNone(b)||g.cb===b?d.isNone(g.id)||c.push(g.id):e.push(g)}return 0===e.length?delete this.data[a]:this.data[a]=e,c},d.Player=function(a,b){return this instanceof d.Player?void this.init(a,b):new d.Player(a,b)},d.EVENTS={READY:"ready",PLAY:"play",PAUSE:"pause",ENDED:"ended",TIMEUPDATE:"timeupdate",PROGRESS:"progress",SEEKED:"seeked",ERROR:"error",FULLSCREEN_CHANGE:"fullscreenChange",PIP_CHANGE:"pipChange",PLAYBACK_RATE_CHANGE:"playbackRateChange",AUDIO_CHANGE:"audioChange",QUALITY_CHANGE:"qualityChange",VOLUME_CHANGE:"volumeChange"},d.EVENTS.all=function(){var a=[];for(var b in d.EVENTS)d.has(d.EVENTS,b)&&d.isString(d.EVENTS[b])&&a.push(d.EVENTS[b]);return a},d.METHODS={PLAY:"play",PAUSE:"pause",GETPAUSED:"getPaused",MUTE:"mute",UNMUTE:"unmute",GETMUTED:"getMuted",SETVOLUME:"setVolume",GETVOLUME:"getVolume",GETDURATION:"getDuration",SETCURRENTTIME:"setCurrentTime",GETCURRENTTIME:"getCurrentTime",SETLOOP:"setLoop",GETLOOP:"getLoop",SETPLAYBACKRATE:"setPlaybackRate",GETPLAYBACKRATE:"getPlaybackRate",REMOVEEVENTLISTENER:"removeEventListener",ADDEVENTLISTENER:"addEventListener"},d.METHODS.all=function(){var a=[];for(var b in d.METHODS)d.has(d.METHODS,b)&&d.isString(d.METHODS[b])&&a.push(d.METHODS[b]);return a},d.READIED=[],d.Player.prototype.init=function(c,e){var f=this;d.isString(c)&&(c=b.getElementById(c)),this.elem=c,d.assert("IFRAME"===c.nodeName,'playerjs.Player constructor requires an Iframe, got "'+c.nodeName+'"'),d.assert(c.src,"playerjs.Player constructor requires a Iframe with a 'src' attribute."),this.origin=d.origin(c.src),this.keeper=new d.Keeper,this.isReady=!1,this.queue=[],this.events=d.EVENTS.all(),this.methods=d.METHODS.all(),d.POST_MESSAGE?d.addEvent(a,"message",function(a){f.receive(a)}):d.log("Post Message is not Available."),d.indexOf(d.READIED,c.src)>-1?f.loaded=!0:this.elem.onload=function(){f.loaded=!0}},d.Player.prototype.send=function(a,b,c){if(a.context=d.CONTEXT,a.version=d.VERSION,b){var e=this.keeper.getUUID();a.listener=e,this.keeper.one(e,a.method,b,c)}return this.isReady||"ready"===a.value?(d.log("Player.send",a,this.origin),this.loaded===!0&&this.elem.contentWindow.postMessage(JSON.stringify(a),this.origin),!0):(d.log("Player.queue",a),this.queue.push(a),!1)},d.Player.prototype.receive=function(a){if(d.log("Player.receive",a),a.origin!==this.origin)return!1;var b;try{b=JSON.parse(a.data)}catch(c){return!1}return b.context!==d.CONTEXT?!1:("ready"===b.event&&b.value&&b.value.src===this.elem.src&&this.ready(b),void(this.keeper.has(b.event,b.listener)&&this.keeper.execute(b.event,b.listener,b.value,this)))},d.Player.prototype.ready=function(a){if(this.isReady===!0)return!1;a.value.events&&(this.events=a.value.events),a.value.methods&&(this.methods=a.value.methods),this.isReady=!0,this.loaded=!0;for(var b=0;b<this.queue.length;b++){var c=this.queue[b];d.log("Player.dequeue",c),"ready"===a.event&&this.keeper.execute(c.event,c.listener,!0,this),this.send(c)}this.queue=[]},d.Player.prototype.on=function(a,b,c){var d=this.keeper.getUUID();return"ready"===a?this.keeper.one(d,a,b,c):this.keeper.on(d,a,b,c),this.send({method:"addEventListener",value:a,listener:d}),!0},d.Player.prototype.off=function(a,b){var c=this.keeper.off(a,b);if(d.log("Player.off",c),c.length>0)for(var e in c)return this.send({method:"removeEventListener",value:a,listener:c[e]}),!0;return!1},d.Player.prototype.supports=function(a,b){d.assert(d.indexOf(["method","event"],a)>-1,'evtOrMethod needs to be either "event" or "method" got '+a),b=d.isArray(b)?b:[b];for(var c="event"===a?this.events:this.methods,e=0;e<b.length;e++)if(-1===d.indexOf(c,b[e]))return!1;return!0};for(var e=0,f=d.METHODS.all().length;f>e;e++){var g=d.METHODS.all()[e];d.Player.prototype.hasOwnProperty(g)||(d.Player.prototype[g]=c(g))}d.addEvent(a,"message",function(a){var b;try{b=JSON.parse(a.data)}catch(c){return!1}return b.context!==d.CONTEXT?!1:void("ready"===b.event&&b.value&&b.value.src&&d.READIED.push(b.value.src))}),d.Receiver=function(a,b){this.init(a,b)},d.Receiver.prototype.init=function(c,e){var f=this;this.isReady=!1,this.origin=d.origin(b.referrer),this.methods={},this.supported={events:c?c:d.EVENTS.all(),methods:e?e:d.METHODS.all()},this.eventListeners={},this.reject=!(a.self!==a.top&&d.POST_MESSAGE),this.reject||d.addEvent(a,"message",function(a){f.receive(a)})},d.Receiver.prototype.receive=function(b){if(b.origin!==this.origin)return!1;var c={};if(d.isObject(b.data))c=b.data;else try{c=a.JSON.parse(b.data)}catch(e){d.log("JSON Parse Error",e)}if(d.log("Receiver.receive",b,c),!c.method)return!1;if(c.context!==d.CONTEXT)return!1;if(-1===d.indexOf(d.METHODS.all(),c.method))return this.emit("error",{code:2,msg:'Invalid Method "'+c.method+'"'}),!1;var f=d.isNone(c.listener)?null:c.listener;if("addEventListener"===c.method)this.eventListeners.hasOwnProperty(c.value)?-1===d.indexOf(this.eventListeners[c.value],f)&&this.eventListeners[c.value].push(f):this.eventListeners[c.value]=[f],"ready"===c.value&&this.isReady&&this.ready();else if("removeEventListener"===c.method){if(this.eventListeners.hasOwnProperty(c.value)){var g=d.indexOf(this.eventListeners[c.value],f);g>-1&&this.eventListeners[c.value].splice(g,1),0===this.eventListeners[c.value].length&&delete this.eventListeners[c.value]}}else this.get(c.method,c.value,f)},d.Receiver.prototype.get=function(a,b,c){var d=this;if(!this.methods.hasOwnProperty(a))return this.emit("error",{code:3,msg:'Method Not Supported"'+a+'"'}),!1;var e=this.methods[a];if("get"===a.substr(0,3)){var f=function(b){d.send(a,b,c)};e.call(this,f)}else e.call(this,b)},d.Receiver.prototype.on=function(a,b){this.methods[a]=b},d.Receiver.prototype.send=function(b,c,e){if(d.log("Receiver.send",b,c,e),this.reject)return d.log("Receiver.send.reject",b,c,e),!1;var f={context:d.CONTEXT,version:d.VERSION,event:b};d.isNone(c)||(f.value=c),d.isNone(e)||(f.listener=e);var g=JSON.stringify(f);a.parent.postMessage(g,""===this.origin?"*":this.origin)},d.Receiver.prototype.emit=function(a,b){if(!this.eventListeners.hasOwnProperty(a))return!1;d.log("Instance.emit",a,b,this.eventListeners[a]);for(var c=0;c<this.eventListeners[a].length;c++){var e=this.eventListeners[a][c];this.send(a,b,e)}return!0},d.Receiver.prototype.ready=function(){d.log("Receiver.ready"),this.isReady=!0;var b={src:a.location.toString(),events:this.supported.events,methods:this.supported.methods};this.emit("ready",b)||this.send("ready",b)},d.HTML5Adapter=function(a){return this instanceof d.HTML5Adapter?void this.init(a):new d.HTML5Adapter(a)},d.HTML5Adapter.prototype.init=function(a){d.assert(a,"playerjs.HTML5Adapter requires a video element");var b=this.receiver=new d.Receiver;a.addEventListener("playing",function(){b.emit("play")}),a.addEventListener("pause",function(){b.emit("pause")}),a.addEventListener("ended",function(){b.emit("ended")}),a.addEventListener("timeupdate",function(){b.emit("timeupdate",{seconds:a.currentTime,duration:a.duration})}),a.addEventListener("progress",function(){b.emit("buffered",{percent:a.buffered.length})}),b.on("play",function(){a.play()}),b.on("pause",function(){a.pause()}),b.on("getPaused",function(b){b(a.paused)}),b.on("getCurrentTime",function(b){b(a.currentTime)}),b.on("setCurrentTime",function(b){a.currentTime=b}),b.on("getDuration",function(b){b(a.duration)}),b.on("getVolume",function(b){b(100*a.volume)}),b.on("setVolume",function(b){a.volume=b/100}),b.on("mute",function(){a.muted=!0}),b.on("unmute",function(){a.muted=!1}),b.on("getMuted",function(b){b(a.muted)}),b.on("getLoop",function(b){b(a.loop)}),b.on("setLoop",function(b){a.loop=b}),b.on("setPlaybackRate",function(b){a.playbackRate=b}),b.on("getPlaybackRate",function(b){b(a.playbackRate)})},d.HTML5Adapter.prototype.ready=function(){this.receiver.ready()},d.MockAdapter=function(){return this instanceof d.MockAdapter?void this.init():new d.MockAdapter},d.MockAdapter.prototype.init=function(){var a={duration:20,currentTime:0,interval:null,timeupdate:function(){},volume:100,mute:!1,playing:!1,loop:!1,play:function(){a.interval=setInterval(function(){a.currentTime+=.25,a.timeupdate({seconds:a.currentTime,duration:a.duration})},250),a.playing=!0},pause:function(){clearInterval(a.interval),a.playing=!1}},b=this.receiver=new d.Receiver;b.on("play",function(){var b=this;a.play(),this.emit("play"),a.timeupdate=function(a){b.emit("timeupdate",a)}}),b.on("pause",function(){a.pause(),this.emit("pause")}),b.on("getPaused",function(b){b(!a.playing)}),b.on("getCurrentTime",function(b){b(a.currentTime)}),b.on("setCurrentTime",function(b){a.currentTime=b}),b.on("getDuration",function(b){b(a.duration)}),b.on("getVolume",function(b){b(a.volume)}),b.on("setVolume",function(b){a.volume=b}),b.on("mute",function(){a.mute=!0}),b.on("unmute",function(){a.mute=!1}),b.on("getMuted",function(b){b(a.mute)}),b.on("getLoop",function(b){b(a.loop)}),b.on("setLoop",function(b){a.loop=b}),b.on("setPlaybackRate",function(b){a.playbackRate=b}),b.on("getPlaybackRate",function(b){b(a.playbackRate)})},d.MockAdapter.prototype.ready=function(){this.receiver.ready()},d.VideoJSAdapter=function(a){return this instanceof d.VideoJSAdapter?void this.init(a):new d.VideoJSAdapter(a)},d.VideoJSAdapter.prototype.init=function(a){d.assert(a,"playerjs.VideoJSReceiver requires a player object");var b=this.receiver=new d.Receiver;a.on("pause",function(){b.emit("pause")}),a.on("play",function(){b.emit("play")}),a.on("timeupdate",function(c){var d=a.currentTime(),e=a.duration();if(!d||!e)return!1;var f={seconds:d,duration:e};b.emit("timeupdate",f)}),a.on("ended",function(){b.emit("ended")}),a.on("error",function(){b.emit("error")}),b.on("play",function(){a.play()}),b.on("pause",function(){a.pause()}),b.on("getPaused",function(b){b(a.paused())}),b.on("getCurrentTime",function(b){b(a.currentTime())}),b.on("setCurrentTime",function(b){a.currentTime(b)}),b.on("getDuration",function(b){b(a.duration())}),b.on("getVolume",function(b){b(100*a.volume())}),b.on("setVolume",function(b){a.volume(b/100)}),b.on("mute",function(){a.volume(0)}),b.on("unmute",function(){a.volume(1)}),b.on("getMuted",function(b){b(0===a.volume())}),b.on("getLoop",function(b){b(a.loop())}),b.on("setLoop",function(b){a.loop(b)}),b.on("setPlaybackRate",function(b){a.playbackRate(b)}),b.on("getPlaybackRate",function(b){b(a.playbackRate())})},d.VideoJSAdapter.prototype.ready=function(){this.receiver.ready()},"function"==typeof define&&define.amd?define(function(){return d}):"object"==typeof module&&module.exports?module.exports=d:a.playerjs=d}(window,document);
|
|
1
|
+
(()=>{var o={EVENTS:{READY:"ready",PLAY:"play",PAUSE:"pause",ENDED:"ended",TIMEUPDATE:"timeupdate",PROGRESS:"progress",SEEKED:"seeked",ERROR:"error",FULLSCREEN_CHANGE:"fullscreenChange",PIP_CHANGE:"pipChange",PLAYBACK_RATE_CHANGE:"playbackRateChange",AUDIO_CHANGE:"audioChange",QUALITY_CHANGE:"qualityChange",VOLUME_CHANGE:"volumeChange"},POST_MESSAGE:!!window.postMessage,METHODS:{PLAY:"play",PAUSE:"pause",GETPAUSED:"getPaused",MUTE:"mute",UNMUTE:"unmute",GETMUTED:"getMuted",SETVOLUME:"setVolume",GETVOLUME:"getVolume",GETDURATION:"getDuration",SETCURRENTTIME:"setCurrentTime",GETCURRENTTIME:"getCurrentTime",SETLOOP:"setLoop",GETLOOP:"getLoop",SETPLAYBACKRATE:"setPlaybackRate",GETPLAYBACKRATE:"getPlaybackRate",REMOVEEVENTLISTENER:"removeEventListener",ADDEVENTLISTENER:"addEventListener"},DEBUG:!1,VERSION:"0.0.11",CONTEXT:"player.js",isString:function(s){return Object.prototype.toString.call(s)==="[object String]"},has:function(s,e){return Object.prototype.hasOwnProperty.call(s,e)}};o.METHODS.all=function(){var s=[];for(var e in o.METHODS)o.has(o.METHODS,e)&&o.isString(o.METHODS[e])&&s.push(o.METHODS[e]);return s};o.EVENTS.all=function(){var s=[];for(var e in o.EVENTS)o.has(o.EVENTS,e)&&o.isString(o.EVENTS[e])&&s.push(o.EVENTS[e]);return s};o.addEvent=function(s,e,t){s&&(s.addEventListener?s.addEventListener(e,t,!1):s.attachEvent?s.attachEvent("on"+e,t):s["on"+e]=t)};o.isNone=function(s){return s==null};o.assert=function(s,e){if(!s)throw e||"Player.js Assert Failed"};o.generateUUID=function(){if(crypto&&crypto.randomUUID)return crypto.randomUUID();{let s=URL.createObjectURL(new Blob);return s.substring(s.lastIndexOf("/")+1)}};o.isArray=function(s){return Object.prototype.toString.call(s)==="[object Array]"};var i=o;var m=class{constructor(){this.data={}}has(e,t){if(!this.data.hasOwnProperty(e))return!1;if(i.isNone(t))return!0;for(var n=this.data[e],r=0;r<n.length;r++)if(n[r].id===t)return!0;return!1}add(e,t,n,r,a){var u={id:e,event:t,cb:n,ctx:r,one:a};this.has(t)?this.data[t].push(u):this.data[t]=[u]}execute(e,t,n,r){if(!this.has(e,t))return!1;for(var a=[],u=[],f=0;f<this.data[e].length;f++){var c=this.data[e][f];i.isNone(t)||!i.isNone(t)&&c.id===t?(u.push({cb:c.cb,ctx:c.ctx?c.ctx:r,data:n}),c.one===!1&&a.push(c)):a.push(c)}a.length===0?delete this.data[e]:this.data[e]=a;for(var h=0;h<u.length;h++){var p=u[h];p.cb.call(p.ctx,p.data)}}on(e,t,n,r){this.add(e,t,n,r,!1)}one(e,t,n,r){this.add(e,t,n,r,!0)}off(e,t){var n=[];if(!this.data.hasOwnProperty(e))return n;for(var r=[],a=0;a<this.data[e].length;a++){var u=this.data[e][a];!i.isNone(t)&&u.cb!==t?r.push(u):i.isNone(u.id)||n.push(u.id)}return r.length===0?delete this.data[e]:this.data[e]=r,n}},S=m;var E=[],d=class{constructor(e){var t=this;this.READIED=E,i.isString(e)&&(e=document.getElementById(e)),this.elem=e,i.assert(e.nodeName==="IFRAME",'playerjs.Player constructor requires an Iframe, got "'+e.nodeName+'"'),i.assert(e.src,"playerjs.Player constructor requires a Iframe with a 'src' attribute."),this.origin=new URL(e.src).origin,this.keeper=new S,this.isReady=!1,this.queue=[],this.events=i.EVENTS.all(),this.methods=i.METHODS.all(),i.POST_MESSAGE?i.addEvent(window,"message",function(n){t.receive(n)}):console.error("Post Message is not Available."),E.includes(e.src)?t.loaded=!0:this.elem.onload=function(){t.loaded=!0}}send(e,t,n){if(e.context=i.CONTEXT,e.version=i.VERSION,t){let r=i.generateUUID();e.listener=r,this.keeper.one(r,e.method,t,n)}return!this.isReady&&e.value!=="ready"?(console.debug("Player.queue",e),this.queue.push(e),!1):(console.debug("Player.send",e,this.origin),this.loaded===!0&&this.elem.contentWindow.postMessage(JSON.stringify(e),this.origin),!0)}receive(e){if(console.debug("Player.receive",e),e.origin!==this.origin)return!1;let t;try{t=JSON.parse(e.data)}catch(n){return!1}if(t.context!==i.CONTEXT)return!1;t.event==="ready"&&t.value&&t.value.src===this.elem.src&&this.ready(t),this.keeper.has(t.event,t.listener)&&this.keeper.execute(t.event,t.listener,t.value,this)}ready(e){if(this.isReady===!0)return!1;e.value.events&&(this.events=e.value.events),e.value.methods&&(this.methods=e.value.methods),this.isReady=!0,this.loaded=!0;for(var t=0;t<this.queue.length;t++){var n=this.queue[t];console.debug("Player.dequeue",n),e.event==="ready"&&this.keeper.execute(n.event,n.listener,!0,this),this.send(n)}this.queue=[]}on(e,t,n){let r=i.generateUUID();return e==="ready"?this.keeper.one(r,e,t,n):this.keeper.on(r,e,t,n),this.send({method:"addEventListener",value:e,listener:r}),!0}off(e,t){let n=this.keeper.off(e,t);if(console.debug("Player.off",n),n.length>0)for(var r in n)return this.send({method:"removeEventListener",value:e,listener:n[r]}),!0;return!1}supports(e,t){i.assert(["method","event"].includes(e),'evtOrMethod needs to be either "event" or "method" got '+e),t=i.isArray(t)?t:[t];for(var n=e==="event"?this.events:this.methods,r=0;r<t.length;r++)if(!n.includes(t[r]))return!1;return!0}};function b(s){return function(){var e={method:s},t=Array.prototype.slice.call(arguments);/^get/.test(s)?(i.assert(t.length>0,"Get methods require a callback."),t.unshift(e)):(/^set/.test(s)&&(i.assert(t.length!==0,"Set methods require a value."),e.value=t[0]),t=[e]),this.send.apply(this,t)}}for(let s of i.METHODS.all())d.prototype.hasOwnProperty(s)||(d.prototype[s]=b(s));i.addEvent(window,"message",function(s){var e;try{e=JSON.parse(s.data)}catch(t){return!1}if(e.context!==i.CONTEXT)return!1;e.event==="ready"&&e.value&&e.value.src&&E.push(e.value.src)});var R=d;var v=class{constructor(e,t){let n=this;this.isReady=!1,this.origin=new URL(document.referrer).origin,this.methods={},this.supported={events:e||i.EVENTS.all(),methods:t||i.METHODS.all()},this.eventListeners={},this.reject=!(window.self!==window.top&&i.POST_MESSAGE),this.reject||i.addEvent(window,"message",function(r){n.receive(r)})}receive(e){if(e.origin!==this.origin)return!1;let t={};if(typeof e.data=="object")t=e.data;else try{t=window.JSON.parse(e.data)}catch(r){console.error("JSON Parse Error",r)}if(console.debug("Receiver.receive",e,t),!t.method||t.context!==i.CONTEXT)return!1;if(!i.METHODS.all().includes(t.method))return this.emit("error",{code:2,msg:'Invalid Method "'+t.method+'"'}),!1;let n=i.isNone(t.listener)?null:t.listener;if(t.method==="addEventListener")this.eventListeners.hasOwnProperty(t.value)?this.eventListeners[t.value].includes(n)||this.eventListeners[t.value].push(n):this.eventListeners[t.value]=[n],t.value==="ready"&&this.isReady&&this.ready();else if(t.method==="removeEventListener"){if(this.eventListeners.hasOwnProperty(t.value)){let r=this.eventListeners[t.value].indexOf(n);r>-1&&this.eventListeners[t.value].splice(r,1),this.eventListeners[t.value].length===0&&delete this.eventListeners[t.value]}}else this.get(t.method,t.value,n)}get(e,t,n){var r=this;if(!this.methods.hasOwnProperty(e))return this.emit("error",{code:3,msg:'Method Not Supported"'+e+'"'}),!1;var a=this.methods[e];if(e.substr(0,3)==="get"){var u=function(f){r.send(e,f,n)};a.call(this,u)}else a.call(this,t)}on(e,t){this.methods[e]=t}send(e,t,n){if(console.debug("Receiver.send",e,t,n),this.reject)return console.error("Receiver.send.reject",e,t,n),!1;var r={context:i.CONTEXT,version:i.VERSION,event:e};i.isNone(t)||(r.value=t),i.isNone(n)||(r.listener=n);var a=JSON.stringify(r);window.parent.postMessage(a,this.origin===""?"*":this.origin)}emit(e,t){if(!this.eventListeners.hasOwnProperty(e))return!1;console.debug("Instance.emit",e,t,this.eventListeners[e]);for(var n=0;n<this.eventListeners[e].length;n++){var r=this.eventListeners[e][n];this.send(e,t,r)}return!0}ready(){console.debug("Receiver.ready"),this.isReady=!0;var e={src:window.location.toString(),events:this.supported.events,methods:this.supported.methods};this.emit("ready",e)||this.send("ready",e)}},l=v;var g=class{constructor(){this.init()}init(){var e={duration:20,currentTime:0,interval:null,timeupdate:function(){},volume:100,mute:!1,playing:!1,loop:!1,play:function(){e.interval=setInterval(function(){e.currentTime+=.25,e.timeupdate({seconds:e.currentTime,duration:e.duration})},250),e.playing=!0},pause:function(){clearInterval(e.interval),e.playing=!1}},t=this.receiver=new l;t.on("play",function(){var n=this;e.play(),this.emit("play"),e.timeupdate=function(r){n.emit("timeupdate",r)}}),t.on("pause",function(){e.pause(),this.emit("pause")}),t.on("getPaused",function(n){n(!e.playing)}),t.on("getCurrentTime",function(n){n(e.currentTime)}),t.on("setCurrentTime",function(n){e.currentTime=n}),t.on("getDuration",function(n){n(e.duration)}),t.on("getVolume",function(n){n(e.volume)}),t.on("setVolume",function(n){e.volume=n}),t.on("mute",function(){e.mute=!0}),t.on("unmute",function(){e.mute=!1}),t.on("getMuted",function(n){n(e.mute)}),t.on("getLoop",function(n){n(e.loop)}),t.on("setLoop",function(n){e.loop=n}),t.on("setPlaybackRate",function(n){e.playbackRate=n}),t.on("getPlaybackRate",function(n){n(e.playbackRate)})}ready(){this.receiver.ready()}},O=g;var T=class{constructor(e){this.init(e)}init(e){i.assert(e,"VideoJSReceiver requires a player object");var t=this.receiver=new l;e.on("pause",function(){t.emit("pause")}),e.on("play",function(){t.emit("play")}),e.on("timeupdate",function(n){var r=e.currentTime(),a=e.duration();if(!r||!a)return!1;var u={seconds:r,duration:a};t.emit("timeupdate",u)}),e.on("ended",function(){t.emit("ended")}),e.on("error",function(){t.emit("error")}),t.on("play",function(){e.play()}),t.on("pause",function(){e.pause()}),t.on("getPaused",function(n){n(e.paused())}),t.on("getCurrentTime",function(n){n(e.currentTime())}),t.on("setCurrentTime",function(n){e.currentTime(n)}),t.on("getDuration",function(n){n(e.duration())}),t.on("getVolume",function(n){n(e.volume()*100)}),t.on("setVolume",function(n){e.volume(n/100)}),t.on("mute",function(){e.volume(0)}),t.on("unmute",function(){e.volume(1)}),t.on("getMuted",function(n){n(e.volume()===0)}),t.on("getLoop",function(n){n(e.loop())}),t.on("setLoop",function(n){e.loop(n)}),t.on("setPlaybackRate",function(n){e.playbackRate(n)}),t.on("getPlaybackRate",function(n){n(e.playbackRate())})}ready(){this.receiver.ready()}},N=T;var y=class{constructor(e){this.init(e)}init(e){i.assert(e,"HTML5Adapter requires a video element");var t=this.receiver=new l;e.addEventListener("playing",function(){t.emit("play")}),e.addEventListener("pause",function(){t.emit("pause")}),e.addEventListener("ended",function(){t.emit("ended")}),e.addEventListener("timeupdate",function(){t.emit("timeupdate",{seconds:e.currentTime,duration:e.duration})}),e.addEventListener("progress",function(){t.emit("buffered",{percent:e.buffered.length})}),t.on("play",function(){e.play()}),t.on("pause",function(){e.pause()}),t.on("getPaused",function(n){n(e.paused)}),t.on("getCurrentTime",function(n){n(e.currentTime)}),t.on("setCurrentTime",function(n){e.currentTime=n}),t.on("getDuration",function(n){n(e.duration)}),t.on("getVolume",function(n){n(e.volume*100)}),t.on("setVolume",function(n){e.volume=n/100}),t.on("mute",function(){e.muted=!0}),t.on("unmute",function(){e.muted=!1}),t.on("getMuted",function(n){n(e.muted)}),t.on("getLoop",function(n){n(e.loop)}),t.on("setLoop",function(n){e.loop=n}),t.on("setPlaybackRate",function(n){e.playbackRate=n}),t.on("getPlaybackRate",function(n){n(e.playbackRate)})}ready(){this.receiver.ready()}},L=y;var P={Player:R,Receiver:l,MockAdapter:O,VideoJSAdapter:N,HTML5Adapter:L,CONTEXT:i.CONTEXT,VERSION:i.VERSION,METHODS:i.METHODS,addEvent:i.addEvent};typeof define=="function"&&define.amd?define(function(){return P}):window.playerjs=P;})();
|
|
2
|
+
//# sourceMappingURL=player.min.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/core.js", "../src/keeper.js", "../src/player.js", "../src/receiver.js", "../src/adapters/mock.js", "../src/adapters/video.js", "../src/adapters/html.js", "../src/main.js"],
|
|
4
|
+
"sourcesContent": ["const core = {\n EVENTS: {\n READY: 'ready',\n PLAY: 'play',\n PAUSE: 'pause',\n ENDED: 'ended',\n TIMEUPDATE: 'timeupdate',\n PROGRESS: 'progress',\n SEEKED: 'seeked',\n ERROR: 'error',\n FULLSCREEN_CHANGE: 'fullscreenChange',\n PIP_CHANGE: 'pipChange',\n PLAYBACK_RATE_CHANGE: 'playbackRateChange',\n AUDIO_CHANGE: 'audioChange',\n QUALITY_CHANGE: 'qualityChange',\n VOLUME_CHANGE: 'volumeChange'\n },\n\n POST_MESSAGE : !!window.postMessage,\n\n METHODS: {\n PLAY: 'play',\n PAUSE: 'pause',\n GETPAUSED: 'getPaused',\n MUTE: 'mute',\n UNMUTE: 'unmute',\n GETMUTED: 'getMuted',\n SETVOLUME: 'setVolume',\n GETVOLUME: 'getVolume',\n GETDURATION: 'getDuration',\n SETCURRENTTIME: 'setCurrentTime',\n GETCURRENTTIME:'getCurrentTime',\n SETLOOP: 'setLoop',\n GETLOOP: 'getLoop',\n SETPLAYBACKRATE: 'setPlaybackRate',\n GETPLAYBACKRATE: 'getPlaybackRate',\n REMOVEEVENTLISTENER: 'removeEventListener',\n ADDEVENTLISTENER: 'addEventListener'\n },\n\n DEBUG : false,\n VERSION :'0.0.11',\n CONTEXT : 'player.js',\n\n isString : function (obj) {\n return Object.prototype.toString.call(obj) === '[object String]';\n },\n\n has: function(obj, key){\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n};\n\ncore.METHODS.all = function(){\n var all = [];\n for (var key in core.METHODS) {\n if (core.has(core.METHODS, key) && core.isString(core.METHODS[key])) {\n all.push(core.METHODS[key]);\n }\n }\n return all;\n};\n\ncore.EVENTS.all = function(){\n var all = [];\n for (var key in core.EVENTS) {\n if (core.has(core.EVENTS, key) && core.isString(core.EVENTS[key])) {\n all.push(core.EVENTS[key]);\n }\n }\n return all;\n};\n\ncore.addEvent = function(elem, type, eventHandle) {\n if (!elem) { return; }\n if ( elem.addEventListener ) {\n elem.addEventListener( type, eventHandle, false );\n } else if ( elem.attachEvent ) {\n elem.attachEvent( \"on\" + type, eventHandle );\n } else {\n elem[\"on\"+type]=eventHandle;\n }\n};\n\ncore.isNone = function(obj){\n return (obj === null || obj === undefined);\n};\n\ncore.assert = function(test, msg) {\n if (!test) {\n throw msg || \"Player.js Assert Failed\";\n }\n}\n\ncore.generateUUID = function() {\n if(crypto && crypto.randomUUID) {\n return crypto.randomUUID();\n } else {\n const url = URL.createObjectURL(new Blob())\n return url.substring(url.lastIndexOf('/') + 1)\n }\n}\n\ncore.isArray = function(obj){\n return Object.prototype.toString.call(obj) === \"[object Array]\";\n};\n\nexport default core;", "/*globals playerjs:true*/\n/*\n* Keeper is just a method for keeping track of all the callbacks.\n*/\nimport core from \"./core\";\n\nclass Keeper {\n constructor() {\n this.data = {};\n }\n\n has(event, id){\n if (!this.data.hasOwnProperty(event)){\n return false;\n }\n \n if (core.isNone(id)){\n return true;\n }\n \n // Figure out if we have the event.\n var events = this.data[event];\n \n for (var i = 0; i < events.length; i++){\n if (events[i].id === id){\n return true;\n }\n }\n \n return false;\n }\n\n add(id, event, cb, ctx, one){\n var d = {\n id: id,\n event: event,\n cb: cb,\n ctx: ctx,\n one: one\n };\n \n if (this.has(event)){\n this.data[event].push(d);\n } else {\n this.data[event] = [d];\n }\n }\n\n execute(event, id, data, ctx){\n if (!this.has(event, id)){\n return false;\n }\n \n var keep = [],\n execute = [];\n \n for (var i=0; i< this.data[event].length; i++){\n var d = this.data[event][i];\n \n // There are omni events, in that they do not have an id. i.e \"ready\".\n // Or there is an ID and we only want to execute the right id'd method.\n if (core.isNone(id) || (!core.isNone(id) && d.id === id )){\n \n execute.push({\n cb: d.cb,\n ctx: d.ctx? d.ctx: ctx,\n data: data\n });\n \n // If we only wanted to execute this once.\n if (d.one === false){\n keep.push(d);\n }\n } else {\n keep.push(d);\n }\n }\n \n if (keep.length === 0){\n delete this.data[event];\n } else {\n this.data[event] = keep;\n }\n \n // We need to execute everything after we deal with the one stuff. otherwise\n // we have issues to order of operations.\n for (var n=0; n < execute.length; n++){\n var e = execute[n];\n e.cb.call(e.ctx, e.data);\n }\n }\n\n on(id, event, cb, ctx){\n this.add(id, event, cb, ctx, false);\n }\n\n one(id, event, cb, ctx){\n this.add(id, event, cb, ctx, true);\n }\n\n off(event, cb){\n // We should probably restructure so this is a bit less of a pain.\n var listeners = [];\n \n if (!this.data.hasOwnProperty(event)){\n return listeners;\n }\n \n var keep = [];\n \n // Loop through everything.\n for (var i=0; i< this.data[event].length; i++){\n var data = this.data[event][i];\n // If we only keep if there was a CB and the CB is there.\n if (!core.isNone(cb) && data.cb !== cb) {\n keep.push(data);\n } else if (!core.isNone(data.id)) {\n listeners.push(data.id);\n }\n }\n \n if (keep.length === 0){\n delete this.data[event];\n } else {\n this.data[event] = keep;\n }\n \n return listeners;\n }\n}\n\nexport default Keeper;", "/*globals playerjs:true*/\n/*\n* Player.js is a javascript library for interacting with iframes via\n* postMessage that use an Open Player Spec\n*\n*/\nimport core from './core';\nimport Keeper from './keeper';\n\nlet READIED = [];\n\nclass Player {\n constructor(elem) { \n var self = this;\n this.READIED = READIED;\n\n if (core.isString(elem)){\n elem = document.getElementById(elem);\n }\n\n this.elem = elem;\n\n // make sure we have an iframe\n core.assert(elem.nodeName === 'IFRAME',\n 'playerjs.Player constructor requires an Iframe, got \"'+elem.nodeName+'\"');\n core.assert(elem.src,\n 'playerjs.Player constructor requires a Iframe with a \\'src\\' attribute.');\n\n // Figure out the origin of where we are sending messages.\n this.origin = (new URL(elem.src)).origin;\n\n // Event handling.\n this.keeper = new Keeper();\n\n // Queuing before ready.\n this.isReady = false;\n this.queue = [];\n\n // Assume that everything is supported, unless we know otherwise.\n this.events = core.EVENTS.all();\n this.methods = core.METHODS.all();\n\n if (core.POST_MESSAGE){\n // Set up the reciever.\n core.addEvent(window, 'message', function(e){\n self.receive(e);\n });\n } else {\n console.error('Post Message is not Available.');\n }\n\n // See if we caught the src event first, otherwise assume we haven't loaded\n if (READIED.includes(elem.src)){\n self.loaded = true;\n } else {\n // Try the onload event, just lets us give another test.\n this.elem.onload = function(){\n self.loaded = true;\n };\n }\n }\n\n send(data, callback, ctx){\n // Add the context and version to the data.\n data.context = core.CONTEXT;\n data.version = core.VERSION;\n \n // We are expecting a response.\n if (callback) {\n // Create a UUID\n let id = core.generateUUID();\n \n // Set the listener.\n data.listener = id;\n \n // Only hang on to this listener once.\n this.keeper.one(id, data.method, callback, ctx);\n }\n \n if (!this.isReady && data.value !== 'ready'){\n console.debug('Player.queue', data);\n this.queue.push(data);\n return false;\n }\n \n console.debug('Player.send', data, this.origin);\n \n if (this.loaded === true){\n this.elem.contentWindow.postMessage(JSON.stringify(data), this.origin);\n }\n \n return true;\n }\n\n receive (e){\n console.debug('Player.receive', e);\n \n if (e.origin !== this.origin){\n return false;\n }\n \n let data;\n try {\n data = JSON.parse(e.data);\n } catch (err){\n // Not a valid response.\n return false;\n }\n \n // abort if this message wasn't a player.js message\n if (data.context !== core.CONTEXT) {\n return false;\n }\n \n // We need to determine if we are ready.\n if (data.event === 'ready' && data.value && data.value.src === this.elem.src){\n this.ready(data);\n }\n \n if (this.keeper.has(data.event, data.listener)){\n this.keeper.execute(data.event, data.listener, data.value, this);\n }\n }\n\n ready(data){\n\n if (this.isReady === true){\n return false;\n }\n \n // If we got a list of supported methods, we should set them.\n if (data.value.events){\n this.events = data.value.events;\n }\n if (data.value.methods){\n this.methods = data.value.methods;\n }\n \n // set ready.\n this.isReady = true;\n this.loaded = true;\n \n // Clear the queue\n for (var i=0; i<this.queue.length; i++){\n var obj = this.queue[i];\n \n console.debug('Player.dequeue', obj);\n \n if (data.event === 'ready'){\n this.keeper.execute(obj.event, obj.listener, true, this);\n }\n this.send(obj);\n }\n this.queue = [];\n }\n\n on(event, callback, ctx){\n let id = core.generateUUID();\n \n if (event === 'ready'){\n // We only want to call ready once.\n this.keeper.one(id, event, callback, ctx);\n } else {\n this.keeper.on(id, event, callback, ctx);\n }\n \n this.send({\n method: 'addEventListener',\n value: event,\n listener: id\n });\n \n return true;\n }\n\n off(event, callback) {\n\n let listeners = this.keeper.off(event, callback);\n console.debug('Player.off', listeners);\n \n if (listeners.length > 0) {\n for (var i in listeners){\n this.send({\n method: 'removeEventListener',\n value: event,\n listener: listeners[i]\n });\n return true;\n }\n }\n \n return false;\n }\n\n // Based on what ready passed back, we can determine if the events/method are\n // supported by the player. \n supports(evtOrMethod, names){\n\n core.assert(['method', 'event'].includes(evtOrMethod),\n 'evtOrMethod needs to be either \"event\" or \"method\" got ' + evtOrMethod);\n \n // Make everything an array.\n names = core.isArray(names) ? names : [names];\n \n var all = evtOrMethod === 'event' ? this.events : this.methods;\n \n for (var i=0; i < names.length; i++){\n if (!all.includes(names[i])){\n return false;\n }\n }\n \n return true;\n }\n}\n\n//create function to add to the Player prototype\nfunction createPrototypeFunction(name) {\n\n return function() {\n\n var data = {\n method: name\n };\n\n var args = Array.prototype.slice.call(arguments);\n\n //for getters add the passed parameters to the arguments for the send call\n if (/^get/.test(name)) {\n core.assert(args.length > 0, 'Get methods require a callback.');\n args.unshift(data);\n } else {\n //for setter add the first arg to the value field\n if (/^set/.test(name)) {\n core.assert(args.length !== 0, 'Set methods require a value.');\n data.value = args[0];\n }\n args = [data];\n }\n\n this.send.apply(this, args);\n };\n}\n\n// Loop through the methods to add them to the prototype.\nfor (let methodName of core.METHODS.all()) {\n if (!Player.prototype.hasOwnProperty(methodName)){\n Player.prototype[methodName] = createPrototypeFunction(methodName);\n }\n}\n\ncore.addEvent(window, 'message', function(e){\n var data;\n try {\n data = JSON.parse(e.data);\n } catch (err){\n return false;\n }\n\n // abort if this message wasn't a player.js message\n if (data.context !== core.CONTEXT) {\n return false;\n }\n\n // We need to determine if we are ready.\n if (data.event === 'ready' && data.value && data.value.src){\n READIED.push(data.value.src);\n }\n})\n\nexport default Player;", "/*globals playerjs:true*/\n/*\n* Does all the wiring up for the backend.\n*\n* var receiver = new playerjs.Receiver();\n* receiver.on('play', function(){ video.play() });\n* receiver.on('getDuration', function(callback){ callback(video.duration) });\n* receiver.emit('timeupdate', {});\n*/\n\nimport core from './core';\n\nclass Receiver {\n constructor(events, methods) {\n let self = this;\n\n // Deal with the ready crap.\n this.isReady = false;\n\n // Bind the window message.\n this.origin =(new URL(document.referrer)).origin;\n\n //Create a holder for all the methods.\n this.methods = {};\n\n // holds all the information about what's supported\n this.supported = {\n events: events ? events : core.EVENTS.all(),\n methods: methods ? methods : core.METHODS.all()\n };\n\n // Deals with the adding and removing of event listeners.\n this.eventListeners = {};\n\n // We can't send any messages.\n this.reject = !(window.self !== window.top && core.POST_MESSAGE);\n\n // We aren't in an iframe, don't listen.\n if (!this.reject) {\n core.addEvent(window, 'message', function (e) {\n self.receive(e);\n });\n }\n }\n\n receive(e) {\n // Only want to listen to events that came from our origin.\n if (e.origin !== this.origin) {\n return false;\n }\n\n // Browsers that support postMessage also support JSON.\n let data = {};\n if (typeof e.data === \"object\") {\n data = e.data;\n } else {\n try {\n data = window.JSON.parse(e.data);\n } catch (err) {\n console.error('JSON Parse Error', err);\n }\n }\n\n console.debug('Receiver.receive', e, data);\n\n // Nothing for us to do.\n if (!data.method) {\n return false;\n }\n\n // make sure the context is correct.\n if (data.context !== core.CONTEXT) {\n return false;\n }\n\n // Make sure we have a valid method.\n if (!core.METHODS.all().includes(data.method)) {\n this.emit('error', {\n code: 2,\n msg: 'Invalid Method \"' + data.method + '\"'\n });\n return false;\n }\n\n // See if we added a listener\n let listener = !core.isNone(data.listener) ? data.listener : null;\n\n // Add Event Listener.\n if (data.method === 'addEventListener') {\n if (this.eventListeners.hasOwnProperty(data.value)) {\n //If the listener is the same, i.e. null only add it once.\n if(!this.eventListeners[data.value].includes(listener)) {\n this.eventListeners[data.value].push(listener);\n }\n } else {\n this.eventListeners[data.value] = [listener];\n }\n\n if (data.value === 'ready' && this.isReady) {\n this.ready();\n }\n }\n // Remove the event listener.\n else if (data.method === 'removeEventListener') {\n if (this.eventListeners.hasOwnProperty(data.value)) {\n let index = this.eventListeners[data.value].indexOf(listener);\n\n // if we find the element, remove it.\n if (index > -1) {\n this.eventListeners[data.value].splice(index, 1);\n }\n\n if (this.eventListeners[data.value].length === 0) {\n delete this.eventListeners[data.value];\n }\n }\n }\n // Go get it.\n else {\n this.get(data.method, data.value, listener);\n }\n }\n\n get(method, value, listener) {\n var self = this;\n\n // Now lets do it.\n if (!this.methods.hasOwnProperty(method)) {\n this.emit('error', {\n code: 3,\n msg: 'Method Not Supported\"' + method + '\"'\n });\n return false;\n }\n\n var func = this.methods[method];\n\n if (method.substr(0, 3) === 'get') {\n var callback = function (val) {\n self.send(method, val, listener);\n };\n func.call(this, callback);\n } else {\n func.call(this, value);\n }\n }\n\n on(event, callback) {\n this.methods[event] = callback;\n }\n\n send(event, value, listener) {\n\n console.debug('Receiver.send', event, value, listener);\n\n if (this.reject) {\n // We are not in a frame, or we don't support POST_MESSAGE\n console.error('Receiver.send.reject', event, value, listener);\n return false;\n }\n\n var data = {\n context: core.CONTEXT,\n version: core.VERSION,\n event: event\n };\n\n if (!core.isNone(value)) {\n data.value = value;\n }\n\n if (!core.isNone(listener)) {\n data.listener = listener;\n }\n\n var msg = JSON.stringify(data);\n window.parent.postMessage(msg, this.origin === \"\" ? '*' : this.origin);\n }\n\n emit(event, value) {\n\n if (!this.eventListeners.hasOwnProperty(event)) {\n return false;\n }\n\n console.debug('Instance.emit', event, value, this.eventListeners[event]);\n\n for (var i = 0; i < this.eventListeners[event].length; i++) {\n var listener = this.eventListeners[event][i];\n this.send(event, value, listener);\n }\n\n return true;\n }\n\n ready() {\n console.debug('Receiver.ready');\n this.isReady = true;\n\n var data = {\n src: window.location.toString(),\n events: this.supported.events,\n methods: this.supported.methods\n };\n\n if (!this.emit('ready', data)) {\n this.send('ready', data);\n }\n\n }\n}\n\nexport default Receiver;\n", "import Receiver from \"../receiver\";\n\nclass MockAdapter {\n constructor() {\n this.init();\n }\n\n init(){\n\n // Our mock video\n var video = {\n duration: 20,\n currentTime: 0,\n interval: null,\n timeupdate: function(){},\n volume: 100,\n mute: false,\n playing: false,\n loop : false,\n play: function(){\n video.interval = setInterval(function(){\n video.currentTime += 0.25;\n video.timeupdate({\n seconds: video.currentTime,\n duration: video.duration\n });\n }, 250);\n video.playing = true;\n },\n pause: function(){\n clearInterval(video.interval);\n video.playing = false;\n }\n };\n \n // Set up the actual receiver\n var receiver = this.receiver = new Receiver();\n \n receiver.on('play', function(){\n var self = this;\n video.play();\n this.emit('play');\n video.timeupdate = function(data){\n self.emit('timeupdate', data);\n };\n });\n \n receiver.on('pause', function(){\n video.pause();\n this.emit('pause');\n });\n \n receiver.on('getPaused', function(callback){\n callback(!video.playing);\n });\n \n receiver.on('getCurrentTime', function(callback){\n callback(video.currentTime);\n });\n \n receiver.on('setCurrentTime', function(value){\n video.currentTime = value;\n });\n \n receiver.on('getDuration', function(callback){\n callback(video.duration);\n });\n \n receiver.on('getVolume', function(callback){\n callback(video.volume);\n });\n \n receiver.on('setVolume', function(value){\n video.volume = value;\n });\n \n receiver.on('mute', function(){\n video.mute = true;\n });\n \n receiver.on('unmute', function(){\n video.mute = false;\n });\n \n receiver.on('getMuted', function(callback){\n callback(video.mute);\n });\n \n receiver.on('getLoop', function(callback){\n callback(video.loop);\n });\n \n receiver.on('setLoop', function(value){\n video.loop = value;\n });\n \n receiver.on('setPlaybackRate', function(value){\n video.playbackRate = value;\n });\n \n receiver.on('getPlaybackRate', function(callback){\n callback(video.playbackRate);\n });\n }\n\n ready(){\n this.receiver.ready();\n }\n}\n\nexport default MockAdapter;", "import core from \"../core\";\nimport Receiver from \"../receiver\"\n\nclass VideoJSAdapter {\n constructor(player) {\n this.init(player);\n }\n\n init(player){\n\n core.assert(player, 'VideoJSReceiver requires a player object');\n \n // Set up the actual receiver\n var receiver = this.receiver = new Receiver();\n \n /* EVENTS */\n player.on(\"pause\", function(){\n receiver.emit('pause');\n });\n \n player.on(\"play\", function(){\n receiver.emit('play');\n });\n \n player.on(\"timeupdate\", function(e){\n var seconds = player.currentTime(),\n duration = player.duration();\n \n if (!seconds || !duration){\n return false;\n }\n \n var value = {\n seconds: seconds,\n duration: duration\n };\n receiver.emit('timeupdate', value);\n });\n \n player.on(\"ended\", function(){\n receiver.emit('ended');\n });\n \n player.on(\"error\", function(){\n receiver.emit('error');\n });\n \n \n /* METHODS */\n receiver.on('play', function(){\n player.play();\n });\n \n receiver.on('pause', function(){\n player.pause();\n });\n \n receiver.on('getPaused', function(callback){\n callback(player.paused());\n });\n \n receiver.on('getCurrentTime', function(callback){\n callback(player.currentTime());\n });\n \n receiver.on('setCurrentTime', function(value){\n player.currentTime(value);\n });\n \n receiver.on('getDuration', function(callback){\n callback(player.duration());\n });\n \n receiver.on('getVolume', function(callback){\n callback(player.volume() * 100);\n });\n \n receiver.on('setVolume', function(value){\n player.volume(value/100);\n });\n \n receiver.on('mute', function(){\n player.volume(0);\n });\n \n receiver.on('unmute', function(){\n player.volume(1);\n });\n \n receiver.on('getMuted', function(callback){\n callback(player.volume() === 0);\n });\n \n receiver.on('getLoop', function(callback){\n callback(player.loop());\n });\n \n receiver.on('setLoop', function(value){\n player.loop(value);\n });\n \n receiver.on('setPlaybackRate', function(value){\n player.playbackRate(value);\n });\n \n receiver.on('getPlaybackRate', function(callback){\n callback(player.playbackRate());\n });\n }\n\n ready(){\n this.receiver.ready();\n }\n}\n\nexport default VideoJSAdapter;", "import core from \"../core\";\nimport Receiver from \"../receiver\";\n\nclass HTML5Adapter {\n constructor(video) {\n this.init(video);\n }\n\n init(video){\n\n core.assert(video, 'HTML5Adapter requires a video element');\n \n // Set up the actual receiver\n var receiver = this.receiver = new Receiver();\n \n /* EVENTS */\n video.addEventListener('playing', function(){\n receiver.emit('play');\n });\n \n video.addEventListener('pause', function(){\n receiver.emit('pause');\n });\n \n video.addEventListener('ended', function(){\n receiver.emit('ended');\n });\n \n video.addEventListener('timeupdate', function(){\n receiver.emit('timeupdate', {\n seconds: video.currentTime,\n duration: video.duration\n });\n });\n \n video.addEventListener('progress', function(){\n receiver.emit('buffered', {\n percent: video.buffered.length\n });\n });\n \n /* Methods */\n receiver.on('play', function(){\n video.play();\n });\n \n receiver.on('pause', function(){\n video.pause();\n });\n \n receiver.on('getPaused', function(callback){\n callback(video.paused);\n });\n \n receiver.on('getCurrentTime', function(callback){\n callback(video.currentTime);\n });\n \n receiver.on('setCurrentTime', function(value){\n video.currentTime = value;\n });\n \n receiver.on('getDuration', function(callback){\n callback(video.duration);\n });\n \n receiver.on('getVolume', function(callback){\n callback(video.volume * 100);\n });\n \n receiver.on('setVolume', function(value){\n video.volume = value/100;\n });\n \n receiver.on('mute', function(){\n video.muted = true;\n });\n \n receiver.on('unmute', function(){\n video.muted = false;\n });\n \n receiver.on('getMuted', function(callback){\n callback(video.muted);\n });\n \n receiver.on('getLoop', function(callback){\n callback(video.loop);\n });\n \n receiver.on('setLoop', function(value){\n video.loop = value;\n });\n \n receiver.on('setPlaybackRate', function(value){\n video.playbackRate = value;\n });\n \n receiver.on('getPlaybackRate', function(callback){\n callback(video.playbackRate);\n });\n }\n\n ready(){\n this.receiver.ready();\n }\n}\n\nexport default HTML5Adapter;\n", "import core from \"./core\"\nimport Player from \"./player\"\nimport Receiver from \"./receiver\"\nimport MockAdapter from \"./adapters/mock\"\nimport VideoJSAdapter from \"./adapters/video\"\nimport HTML5Adapter from \"./adapters/html\"\n\nconst playerjs = {\n Player,\n Receiver,\n MockAdapter,\n VideoJSAdapter,\n HTML5Adapter,\n CONTEXT: core.CONTEXT,\n VERSION: core.VERSION,\n METHODS: core.METHODS,\n addEvent: core.addEvent\n}\n\nif (typeof define === 'function' && define.amd) {\n define(function () {\n return playerjs\n })\n} else {\n window.playerjs = playerjs;\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["core", "obj", "key", "all", "elem", "type", "eventHandle", "test", "msg", "url", "core_default", "Keeper", "event", "id", "core_default", "events", "i", "cb", "ctx", "one", "d", "data", "keep", "execute", "n", "e", "listeners", "keeper_default", "READIED", "Player", "elem", "self", "core_default", "keeper_default", "e", "data", "callback", "ctx", "id", "err", "i", "obj", "event", "listeners", "evtOrMethod", "names", "all", "createPrototypeFunction", "name", "args", "methodName", "player_default", "Receiver", "events", "methods", "self", "core_default", "e", "data", "err", "listener", "index", "method", "value", "func", "callback", "val", "event", "msg", "i", "receiver_default", "MockAdapter", "video", "receiver", "receiver_default", "self", "data", "callback", "value", "mock_default", "VideoJSAdapter", "player", "core_default", "receiver", "receiver_default", "e", "seconds", "duration", "value", "callback", "video_default", "HTML5Adapter", "video", "core_default", "receiver", "receiver_default", "callback", "value", "html_default", "playerjs", "player_default", "receiver_default", "mock_default", "video_default", "html_default", "core_default"]
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"title": "Player.js",
|
|
3
3
|
"name": "@gumlet/player.js",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "2.0.0",
|
|
5
5
|
"homepage": "http://github.com/gumlet/player.js",
|
|
6
6
|
"main": "dist/player.min.js",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
9
|
"url": "git://github.com/gumlet/player.js.git"
|
|
10
10
|
},
|
|
11
|
+
"type": "module",
|
|
11
12
|
"author": {
|
|
12
13
|
"name": "Gumlet"
|
|
13
14
|
},
|
|
14
15
|
"scripts": {
|
|
15
|
-
"prepublishOnly": "
|
|
16
|
+
"prepublishOnly": "node esbuild.js"
|
|
16
17
|
},
|
|
17
18
|
"files": [
|
|
18
19
|
"dist/*"
|
|
@@ -23,13 +24,6 @@
|
|
|
23
24
|
"browserslist": "defaults",
|
|
24
25
|
"license": "MIT",
|
|
25
26
|
"devDependencies": {
|
|
26
|
-
"
|
|
27
|
-
"phantomjs-prebuilt" : "2.1.7",
|
|
28
|
-
"grunt-contrib-concat": "~0.3.0",
|
|
29
|
-
"grunt-contrib-connect": "~0.5.0",
|
|
30
|
-
"grunt-contrib-jshint": "~0.7.2",
|
|
31
|
-
"grunt-contrib-qunit": "~0.3.0",
|
|
32
|
-
"grunt-contrib-uglify": "~0.2.7",
|
|
33
|
-
"grunt-contrib-watch": "~0.5.3"
|
|
27
|
+
"esbuild": "^0.21.5"
|
|
34
28
|
}
|
|
35
29
|
}
|
package/dist/player.js
DELETED
|
@@ -1,1109 +0,0 @@
|
|
|
1
|
-
/*! Player.js - v1.0.5 - 2024-03-11
|
|
2
|
-
* http://github.com/gumlet/player.js
|
|
3
|
-
* Copyright (c) 2024 Gumlet; Licensed , , */
|
|
4
|
-
(function(window, document){
|
|
5
|
-
var playerjs = {};
|
|
6
|
-
|
|
7
|
-
playerjs.DEBUG = false;
|
|
8
|
-
playerjs.VERSION = '0.0.11';
|
|
9
|
-
playerjs.CONTEXT = 'player.js';
|
|
10
|
-
playerjs.POST_MESSAGE = !!window.postMessage;
|
|
11
|
-
|
|
12
|
-
/*
|
|
13
|
-
* Utils.
|
|
14
|
-
*/
|
|
15
|
-
playerjs.origin = function(url){
|
|
16
|
-
// Grab the origin of a URL
|
|
17
|
-
if (url.substr(0, 2) === '//'){
|
|
18
|
-
url = window.location.protocol + url;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return url.split('/').slice(0,3).join('/');
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
playerjs.addEvent = function(elem, type, eventHandle) {
|
|
25
|
-
if (!elem) { return; }
|
|
26
|
-
if ( elem.addEventListener ) {
|
|
27
|
-
elem.addEventListener( type, eventHandle, false );
|
|
28
|
-
} else if ( elem.attachEvent ) {
|
|
29
|
-
elem.attachEvent( "on" + type, eventHandle );
|
|
30
|
-
} else {
|
|
31
|
-
elem["on"+type]=eventHandle;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
// usage: log('inside coolFunc',this,arguments);
|
|
36
|
-
// http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
|
|
37
|
-
playerjs.log = function(){
|
|
38
|
-
playerjs.log.history = playerjs.log.history || []; // store logs to an array for reference
|
|
39
|
-
playerjs.log.history.push(arguments);
|
|
40
|
-
if(window.console && playerjs.DEBUG){
|
|
41
|
-
window.console.log( Array.prototype.slice.call(arguments) );
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
// isFunctions
|
|
46
|
-
playerjs.isString = function (obj) {
|
|
47
|
-
return Object.prototype.toString.call(obj) === '[object String]';
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
playerjs.isObject = function(obj){
|
|
51
|
-
return Object.prototype.toString.call(obj) === "[object Object]";
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
playerjs.isArray = function(obj){
|
|
55
|
-
return Object.prototype.toString.call(obj) === "[object Array]";
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
playerjs.isNone = function(obj){
|
|
59
|
-
return (obj === null || obj === undefined);
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
playerjs.has = function(obj, key){
|
|
63
|
-
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
// ie8 doesn't support indexOf in arrays, based on underscore.
|
|
67
|
-
playerjs.indexOf = function(array, item) {
|
|
68
|
-
if (array == null){ return -1; }
|
|
69
|
-
var i = 0, length = array.length;
|
|
70
|
-
if (Array.prototype.IndexOf && array.indexOf === Array.prototype.IndexOf) {
|
|
71
|
-
return array.indexOf(item);
|
|
72
|
-
}
|
|
73
|
-
for (; i < length; i++) {
|
|
74
|
-
if (array[i] === item) { return i; }
|
|
75
|
-
}
|
|
76
|
-
return -1;
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
// Assert
|
|
80
|
-
playerjs.assert = function(test, msg) {
|
|
81
|
-
if (!test) {
|
|
82
|
-
throw msg || "Player.js Assert Failed";
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
/*
|
|
86
|
-
* Keeper is just a method for keeping track of all the callbacks.
|
|
87
|
-
*/
|
|
88
|
-
|
|
89
|
-
playerjs.Keeper = function(){
|
|
90
|
-
this.init();
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
playerjs.Keeper.prototype.init = function(){
|
|
94
|
-
this.data = {};
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
playerjs.Keeper.prototype.getUUID = function(){
|
|
98
|
-
// Create a random id. #http://stackoverflow.com/a/2117523/564191
|
|
99
|
-
return 'listener-xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
|
100
|
-
var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
|
|
101
|
-
return v.toString(16);
|
|
102
|
-
});
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
playerjs.Keeper.prototype.has = function(event, id){
|
|
106
|
-
if (!this.data.hasOwnProperty(event)){
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
if (playerjs.isNone(id)){
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Figure out if we have the event.
|
|
115
|
-
var events = this.data[event];
|
|
116
|
-
|
|
117
|
-
for (var i = 0; i < events.length; i++){
|
|
118
|
-
if (events[i].id === id){
|
|
119
|
-
return true;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return false;
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
playerjs.Keeper.prototype.add = function(id, event, cb, ctx, one){
|
|
127
|
-
var d = {
|
|
128
|
-
id: id,
|
|
129
|
-
event: event,
|
|
130
|
-
cb: cb,
|
|
131
|
-
ctx: ctx,
|
|
132
|
-
one: one
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
if (this.has(event)){
|
|
136
|
-
this.data[event].push(d);
|
|
137
|
-
} else {
|
|
138
|
-
this.data[event] = [d];
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
playerjs.Keeper.prototype.execute = function(event, id, data, ctx){
|
|
143
|
-
if (!this.has(event, id)){
|
|
144
|
-
return false;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
var keep = [],
|
|
148
|
-
execute = [];
|
|
149
|
-
|
|
150
|
-
for (var i=0; i< this.data[event].length; i++){
|
|
151
|
-
var d = this.data[event][i];
|
|
152
|
-
|
|
153
|
-
// There are omni events, in that they do not have an id. i.e "ready".
|
|
154
|
-
// Or there is an ID and we only want to execute the right id'd method.
|
|
155
|
-
if (playerjs.isNone(id) || (!playerjs.isNone(id) && d.id === id )){
|
|
156
|
-
|
|
157
|
-
execute.push({
|
|
158
|
-
cb: d.cb,
|
|
159
|
-
ctx: d.ctx? d.ctx: ctx,
|
|
160
|
-
data: data
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
// If we only wanted to execute this once.
|
|
164
|
-
if (d.one === false){
|
|
165
|
-
keep.push(d);
|
|
166
|
-
}
|
|
167
|
-
} else {
|
|
168
|
-
keep.push(d);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
if (keep.length === 0){
|
|
173
|
-
delete this.data[event];
|
|
174
|
-
} else {
|
|
175
|
-
this.data[event] = keep;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// We need to execute everything after we deal with the one stuff. otherwise
|
|
179
|
-
// we have issues to order of operations.
|
|
180
|
-
for (var n=0; n < execute.length; n++){
|
|
181
|
-
var e = execute[n];
|
|
182
|
-
e.cb.call(e.ctx, e.data);
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
playerjs.Keeper.prototype.on = function(id, event, cb, ctx){
|
|
187
|
-
this.add(id, event, cb, ctx, false);
|
|
188
|
-
};
|
|
189
|
-
|
|
190
|
-
playerjs.Keeper.prototype.one = function(id, event, cb, ctx){
|
|
191
|
-
this.add(id, event, cb, ctx, true);
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
playerjs.Keeper.prototype.off = function(event, cb){
|
|
195
|
-
// We should probably restructure so this is a bit less of a pain.
|
|
196
|
-
var listeners = [];
|
|
197
|
-
|
|
198
|
-
if (!this.data.hasOwnProperty(event)){
|
|
199
|
-
return listeners;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
var keep = [];
|
|
203
|
-
|
|
204
|
-
// Loop through everything.
|
|
205
|
-
for (var i=0; i< this.data[event].length; i++){
|
|
206
|
-
var data = this.data[event][i];
|
|
207
|
-
// If we only keep if there was a CB and the CB is there.
|
|
208
|
-
if (!playerjs.isNone(cb) && data.cb !== cb) {
|
|
209
|
-
keep.push(data);
|
|
210
|
-
} else if (!playerjs.isNone(data.id)) {
|
|
211
|
-
listeners.push(data.id);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if (keep.length === 0){
|
|
216
|
-
delete this.data[event];
|
|
217
|
-
} else {
|
|
218
|
-
this.data[event] = keep;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
return listeners;
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
/*
|
|
225
|
-
* Player.js is a javascript library for interacting with iframes via
|
|
226
|
-
* postMessage that use an Open Player Spec
|
|
227
|
-
*
|
|
228
|
-
*/
|
|
229
|
-
|
|
230
|
-
playerjs.Player = function(elem, options){
|
|
231
|
-
if (!(this instanceof playerjs.Player)) {
|
|
232
|
-
return new playerjs.Player(elem, options);
|
|
233
|
-
}
|
|
234
|
-
this.init(elem, options);
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
playerjs.EVENTS = {
|
|
238
|
-
READY: 'ready',
|
|
239
|
-
PLAY: 'play',
|
|
240
|
-
PAUSE: 'pause',
|
|
241
|
-
ENDED: 'ended',
|
|
242
|
-
TIMEUPDATE: 'timeupdate',
|
|
243
|
-
PROGRESS: 'progress',
|
|
244
|
-
SEEKED: 'seeked',
|
|
245
|
-
ERROR: 'error',
|
|
246
|
-
FULLSCREEN_CHANGE: 'fullscreenChange',
|
|
247
|
-
PIP_CHANGE: 'pipChange',
|
|
248
|
-
PLAYBACK_RATE_CHANGE: 'playbackRateChange',
|
|
249
|
-
AUDIO_CHANGE: 'audioChange',
|
|
250
|
-
QUALITY_CHANGE: 'qualityChange',
|
|
251
|
-
VOLUME_CHANGE: 'volumeChange'
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
playerjs.EVENTS.all = function(){
|
|
255
|
-
var all = [];
|
|
256
|
-
for (var key in playerjs.EVENTS) {
|
|
257
|
-
if (playerjs.has(playerjs.EVENTS, key) && playerjs.isString(playerjs.EVENTS[key])) {
|
|
258
|
-
all.push(playerjs.EVENTS[key]);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return all;
|
|
262
|
-
};
|
|
263
|
-
|
|
264
|
-
playerjs.METHODS = {
|
|
265
|
-
PLAY: 'play',
|
|
266
|
-
PAUSE: 'pause',
|
|
267
|
-
GETPAUSED: 'getPaused',
|
|
268
|
-
MUTE: 'mute',
|
|
269
|
-
UNMUTE: 'unmute',
|
|
270
|
-
GETMUTED: 'getMuted',
|
|
271
|
-
SETVOLUME: 'setVolume',
|
|
272
|
-
GETVOLUME: 'getVolume',
|
|
273
|
-
GETDURATION: 'getDuration',
|
|
274
|
-
SETCURRENTTIME: 'setCurrentTime',
|
|
275
|
-
GETCURRENTTIME:'getCurrentTime',
|
|
276
|
-
SETLOOP: 'setLoop',
|
|
277
|
-
GETLOOP: 'getLoop',
|
|
278
|
-
SETPLAYBACKRATE: 'setPlaybackRate',
|
|
279
|
-
GETPLAYBACKRATE: 'getPlaybackRate',
|
|
280
|
-
REMOVEEVENTLISTENER: 'removeEventListener',
|
|
281
|
-
ADDEVENTLISTENER: 'addEventListener'
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
playerjs.METHODS.all = function(){
|
|
285
|
-
var all = [];
|
|
286
|
-
for (var key in playerjs.METHODS) {
|
|
287
|
-
if (playerjs.has(playerjs.METHODS, key) && playerjs.isString(playerjs.METHODS[key])) {
|
|
288
|
-
all.push(playerjs.METHODS[key]);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
return all;
|
|
292
|
-
};
|
|
293
|
-
|
|
294
|
-
playerjs.READIED = [];
|
|
295
|
-
|
|
296
|
-
playerjs.Player.prototype.init = function(elem, options){
|
|
297
|
-
|
|
298
|
-
var self = this;
|
|
299
|
-
|
|
300
|
-
if (playerjs.isString(elem)){
|
|
301
|
-
elem = document.getElementById(elem);
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
this.elem = elem;
|
|
305
|
-
|
|
306
|
-
// make sure we have an iframe
|
|
307
|
-
playerjs.assert(elem.nodeName === 'IFRAME',
|
|
308
|
-
'playerjs.Player constructor requires an Iframe, got "'+elem.nodeName+'"');
|
|
309
|
-
playerjs.assert(elem.src,
|
|
310
|
-
'playerjs.Player constructor requires a Iframe with a \'src\' attribute.');
|
|
311
|
-
|
|
312
|
-
// Figure out the origin of where we are sending messages.
|
|
313
|
-
this.origin = playerjs.origin(elem.src);
|
|
314
|
-
|
|
315
|
-
// Event handling.
|
|
316
|
-
this.keeper = new playerjs.Keeper();
|
|
317
|
-
|
|
318
|
-
// Queuing before ready.
|
|
319
|
-
this.isReady = false;
|
|
320
|
-
this.queue = [];
|
|
321
|
-
|
|
322
|
-
// Assume that everything is supported, unless we know otherwise.
|
|
323
|
-
this.events = playerjs.EVENTS.all();
|
|
324
|
-
this.methods = playerjs.METHODS.all();
|
|
325
|
-
|
|
326
|
-
if (playerjs.POST_MESSAGE){
|
|
327
|
-
// Set up the reciever.
|
|
328
|
-
playerjs.addEvent(window, 'message', function(e){
|
|
329
|
-
self.receive(e);
|
|
330
|
-
});
|
|
331
|
-
} else {
|
|
332
|
-
playerjs.log('Post Message is not Available.');
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
// See if we caught the src event first, otherwise assume we haven't loaded
|
|
336
|
-
if (playerjs.indexOf(playerjs.READIED, elem.src) > -1){
|
|
337
|
-
self.loaded = true;
|
|
338
|
-
} else {
|
|
339
|
-
// Try the onload event, just lets us give another test.
|
|
340
|
-
this.elem.onload = function(){
|
|
341
|
-
self.loaded = true;
|
|
342
|
-
};
|
|
343
|
-
}
|
|
344
|
-
};
|
|
345
|
-
|
|
346
|
-
playerjs.Player.prototype.send = function(data, callback, ctx){
|
|
347
|
-
// Add the context and version to the data.
|
|
348
|
-
data.context = playerjs.CONTEXT;
|
|
349
|
-
data.version = playerjs.VERSION;
|
|
350
|
-
|
|
351
|
-
// We are expecting a response.
|
|
352
|
-
if (callback) {
|
|
353
|
-
// Create a UUID
|
|
354
|
-
var id = this.keeper.getUUID();
|
|
355
|
-
|
|
356
|
-
// Set the listener.
|
|
357
|
-
data.listener = id;
|
|
358
|
-
|
|
359
|
-
// Only hang on to this listener once.
|
|
360
|
-
this.keeper.one(id, data.method, callback, ctx);
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
if (!this.isReady && data.value !== 'ready'){
|
|
364
|
-
playerjs.log('Player.queue', data);
|
|
365
|
-
this.queue.push(data);
|
|
366
|
-
return false;
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
playerjs.log('Player.send', data, this.origin);
|
|
370
|
-
|
|
371
|
-
if (this.loaded === true){
|
|
372
|
-
this.elem.contentWindow.postMessage(JSON.stringify(data), this.origin);
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
return true;
|
|
376
|
-
};
|
|
377
|
-
|
|
378
|
-
playerjs.Player.prototype.receive = function(e){
|
|
379
|
-
playerjs.log('Player.receive', e);
|
|
380
|
-
|
|
381
|
-
if (e.origin !== this.origin){
|
|
382
|
-
return false;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
var data;
|
|
386
|
-
try {
|
|
387
|
-
data = JSON.parse(e.data);
|
|
388
|
-
} catch (err){
|
|
389
|
-
// Not a valid response.
|
|
390
|
-
return false;
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
// abort if this message wasn't a player.js message
|
|
394
|
-
if (data.context !== playerjs.CONTEXT) {
|
|
395
|
-
return false;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
// We need to determine if we are ready.
|
|
399
|
-
if (data.event === 'ready' && data.value && data.value.src === this.elem.src){
|
|
400
|
-
this.ready(data);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
if (this.keeper.has(data.event, data.listener)){
|
|
404
|
-
this.keeper.execute(data.event, data.listener, data.value, this);
|
|
405
|
-
}
|
|
406
|
-
};
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
playerjs.Player.prototype.ready = function(data){
|
|
410
|
-
|
|
411
|
-
if (this.isReady === true){
|
|
412
|
-
return false;
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
// If we got a list of supported methods, we should set them.
|
|
416
|
-
if (data.value.events){
|
|
417
|
-
this.events = data.value.events;
|
|
418
|
-
}
|
|
419
|
-
if (data.value.methods){
|
|
420
|
-
this.methods = data.value.methods;
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
// set ready.
|
|
424
|
-
this.isReady = true;
|
|
425
|
-
this.loaded = true;
|
|
426
|
-
|
|
427
|
-
// Clear the queue
|
|
428
|
-
for (var i=0; i<this.queue.length; i++){
|
|
429
|
-
var obj = this.queue[i];
|
|
430
|
-
|
|
431
|
-
playerjs.log('Player.dequeue', obj);
|
|
432
|
-
|
|
433
|
-
if (data.event === 'ready'){
|
|
434
|
-
this.keeper.execute(obj.event, obj.listener, true, this);
|
|
435
|
-
}
|
|
436
|
-
this.send(obj);
|
|
437
|
-
}
|
|
438
|
-
this.queue = [];
|
|
439
|
-
};
|
|
440
|
-
|
|
441
|
-
playerjs.Player.prototype.on = function(event, callback, ctx){
|
|
442
|
-
var id = this.keeper.getUUID();
|
|
443
|
-
|
|
444
|
-
if (event === 'ready'){
|
|
445
|
-
// We only want to call ready once.
|
|
446
|
-
this.keeper.one(id, event, callback, ctx);
|
|
447
|
-
} else {
|
|
448
|
-
this.keeper.on(id, event, callback, ctx);
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
this.send({
|
|
452
|
-
method: 'addEventListener',
|
|
453
|
-
value: event,
|
|
454
|
-
listener: id
|
|
455
|
-
});
|
|
456
|
-
|
|
457
|
-
return true;
|
|
458
|
-
};
|
|
459
|
-
|
|
460
|
-
playerjs.Player.prototype.off = function(event, callback){
|
|
461
|
-
|
|
462
|
-
var listeners = this.keeper.off(event, callback);
|
|
463
|
-
playerjs.log('Player.off', listeners);
|
|
464
|
-
|
|
465
|
-
if (listeners.length > 0) {
|
|
466
|
-
for (var i in listeners){
|
|
467
|
-
this.send({
|
|
468
|
-
method: 'removeEventListener',
|
|
469
|
-
value: event,
|
|
470
|
-
listener: listeners[i]
|
|
471
|
-
});
|
|
472
|
-
return true;
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
return false;
|
|
477
|
-
};
|
|
478
|
-
|
|
479
|
-
// Based on what ready passed back, we can determine if the events/method are
|
|
480
|
-
// supported by the player.
|
|
481
|
-
playerjs.Player.prototype.supports = function(evtOrMethod, names){
|
|
482
|
-
|
|
483
|
-
playerjs.assert(playerjs.indexOf(['method', 'event'], evtOrMethod) > -1,
|
|
484
|
-
'evtOrMethod needs to be either "event" or "method" got ' + evtOrMethod);
|
|
485
|
-
|
|
486
|
-
// Make everything an array.
|
|
487
|
-
names = playerjs.isArray(names) ? names : [names];
|
|
488
|
-
|
|
489
|
-
var all = evtOrMethod === 'event' ? this.events : this.methods;
|
|
490
|
-
|
|
491
|
-
for (var i=0; i < names.length; i++){
|
|
492
|
-
if (playerjs.indexOf(all, names[i]) === -1){
|
|
493
|
-
return false;
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
return true;
|
|
498
|
-
};
|
|
499
|
-
|
|
500
|
-
//create function to add to the Player prototype
|
|
501
|
-
function createPrototypeFunction(name) {
|
|
502
|
-
|
|
503
|
-
return function() {
|
|
504
|
-
|
|
505
|
-
var data = {
|
|
506
|
-
method: name
|
|
507
|
-
};
|
|
508
|
-
|
|
509
|
-
var args = Array.prototype.slice.call(arguments);
|
|
510
|
-
|
|
511
|
-
//for getters add the passed parameters to the arguments for the send call
|
|
512
|
-
if (/^get/.test(name)) {
|
|
513
|
-
playerjs.assert(args.length > 0, 'Get methods require a callback.');
|
|
514
|
-
args.unshift(data);
|
|
515
|
-
} else {
|
|
516
|
-
//for setter add the first arg to the value field
|
|
517
|
-
if (/^set/.test(name)) {
|
|
518
|
-
playerjs.assert(args.length !== 0, 'Set methods require a value.');
|
|
519
|
-
data.value = args[0];
|
|
520
|
-
}
|
|
521
|
-
args = [data];
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
this.send.apply(this, args);
|
|
525
|
-
};
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
// Loop through the methods to add them to the prototype.
|
|
529
|
-
for (var i = 0, l = playerjs.METHODS.all().length; i < l; i++) {
|
|
530
|
-
var methodName = playerjs.METHODS.all()[i];
|
|
531
|
-
|
|
532
|
-
// We don't want to overwrite existing methods.
|
|
533
|
-
if (!playerjs.Player.prototype.hasOwnProperty(methodName)){
|
|
534
|
-
playerjs.Player.prototype[methodName] = createPrototypeFunction(methodName);
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
// We need to catch all ready events in case the iframe is ready before the
|
|
539
|
-
// player is invoked.
|
|
540
|
-
playerjs.addEvent(window, 'message', function(e){
|
|
541
|
-
var data;
|
|
542
|
-
try {
|
|
543
|
-
data = JSON.parse(e.data);
|
|
544
|
-
} catch (err){
|
|
545
|
-
return false;
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
// abort if this message wasn't a player.js message
|
|
549
|
-
if (data.context !== playerjs.CONTEXT) {
|
|
550
|
-
return false;
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
// We need to determine if we are ready.
|
|
554
|
-
if (data.event === 'ready' && data.value && data.value.src){
|
|
555
|
-
playerjs.READIED.push(data.value.src);
|
|
556
|
-
}
|
|
557
|
-
});
|
|
558
|
-
|
|
559
|
-
/*
|
|
560
|
-
* Does all the wiring up for the backend.
|
|
561
|
-
*
|
|
562
|
-
* var receiver = new playerjs.Receiver();
|
|
563
|
-
* receiver.on('play', function(){ video.play() });
|
|
564
|
-
* receiver.on('getDuration', function(callback){ callback(video.duration) });
|
|
565
|
-
* receiver.emit('timeupdate', {});
|
|
566
|
-
*/
|
|
567
|
-
|
|
568
|
-
playerjs.Receiver = function(events, methods){
|
|
569
|
-
this.init(events, methods);
|
|
570
|
-
};
|
|
571
|
-
|
|
572
|
-
playerjs.Receiver.prototype.init = function(events, methods){
|
|
573
|
-
var self = this;
|
|
574
|
-
|
|
575
|
-
// Deal with the ready crap.
|
|
576
|
-
this.isReady = false;
|
|
577
|
-
|
|
578
|
-
// Bind the window message.
|
|
579
|
-
this.origin = playerjs.origin(document.referrer);
|
|
580
|
-
|
|
581
|
-
//Create a holder for all the methods.
|
|
582
|
-
this.methods = {};
|
|
583
|
-
|
|
584
|
-
// holds all the information about what's supported
|
|
585
|
-
this.supported = {
|
|
586
|
-
events: events ? events : playerjs.EVENTS.all(),
|
|
587
|
-
methods: methods ? methods : playerjs.METHODS.all()
|
|
588
|
-
};
|
|
589
|
-
|
|
590
|
-
// Deals with the adding and removing of event listeners.
|
|
591
|
-
this.eventListeners = {};
|
|
592
|
-
|
|
593
|
-
// We can't send any messages.
|
|
594
|
-
this.reject = !(window.self !== window.top && playerjs.POST_MESSAGE);
|
|
595
|
-
|
|
596
|
-
// We aren't in an iframe, don't listen.
|
|
597
|
-
if (!this.reject){
|
|
598
|
-
playerjs.addEvent(window, 'message', function(e){
|
|
599
|
-
self.receive(e);
|
|
600
|
-
});
|
|
601
|
-
}
|
|
602
|
-
};
|
|
603
|
-
|
|
604
|
-
playerjs.Receiver.prototype.receive = function(e){
|
|
605
|
-
// Only want to listen to events that came from our origin.
|
|
606
|
-
if (e.origin !== this.origin){
|
|
607
|
-
return false;
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
// Browsers that support postMessage also support JSON.
|
|
611
|
-
var data = {};
|
|
612
|
-
if (playerjs.isObject(e.data)){
|
|
613
|
-
data = e.data;
|
|
614
|
-
} else {
|
|
615
|
-
try {
|
|
616
|
-
data = window.JSON.parse(e.data);
|
|
617
|
-
} catch (err){
|
|
618
|
-
playerjs.log('JSON Parse Error', err);
|
|
619
|
-
}
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
playerjs.log('Receiver.receive', e, data);
|
|
623
|
-
|
|
624
|
-
// Nothing for us to do.
|
|
625
|
-
if (!data.method){
|
|
626
|
-
return false;
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
// make sure the context is correct.
|
|
630
|
-
if (data.context !== playerjs.CONTEXT){
|
|
631
|
-
return false;
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
// Make sure we have a valid method.
|
|
635
|
-
if (playerjs.indexOf(playerjs.METHODS.all(), data.method) === -1){
|
|
636
|
-
this.emit('error', {
|
|
637
|
-
code: 2,
|
|
638
|
-
msg: 'Invalid Method "'+data.method+'"'
|
|
639
|
-
});
|
|
640
|
-
return false;
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
// See if we added a listener
|
|
644
|
-
var listener = !playerjs.isNone(data.listener) ? data.listener : null;
|
|
645
|
-
|
|
646
|
-
// Add Event Listener.
|
|
647
|
-
if (data.method === 'addEventListener') {
|
|
648
|
-
if (this.eventListeners.hasOwnProperty(data.value)) {
|
|
649
|
-
//If the listener is the same, i.e. null only add it once.
|
|
650
|
-
if (playerjs.indexOf(this.eventListeners[data.value], listener) === -1){
|
|
651
|
-
this.eventListeners[data.value].push(listener);
|
|
652
|
-
}
|
|
653
|
-
} else {
|
|
654
|
-
this.eventListeners[data.value] = [listener];
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
if (data.value === 'ready' && this.isReady){
|
|
658
|
-
this.ready();
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
// Remove the event listener.
|
|
662
|
-
else if (data.method === 'removeEventListener') {
|
|
663
|
-
if (this.eventListeners.hasOwnProperty(data.value)) {
|
|
664
|
-
var index = playerjs.indexOf(this.eventListeners[data.value], listener);
|
|
665
|
-
|
|
666
|
-
// if we find the element, remove it.
|
|
667
|
-
if (index > -1){
|
|
668
|
-
this.eventListeners[data.value].splice(index, 1);
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
if (this.eventListeners[data.value].length === 0){
|
|
672
|
-
delete this.eventListeners[data.value];
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
// Go get it.
|
|
677
|
-
else {
|
|
678
|
-
this.get(data.method, data.value, listener);
|
|
679
|
-
}
|
|
680
|
-
};
|
|
681
|
-
|
|
682
|
-
playerjs.Receiver.prototype.get = function(method, value, listener){
|
|
683
|
-
var self = this;
|
|
684
|
-
|
|
685
|
-
// Now lets do it.
|
|
686
|
-
if (!this.methods.hasOwnProperty(method)){
|
|
687
|
-
this.emit('error', {
|
|
688
|
-
code: 3,
|
|
689
|
-
msg: 'Method Not Supported"'+method+'"'
|
|
690
|
-
});
|
|
691
|
-
return false;
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
var func = this.methods[method];
|
|
695
|
-
|
|
696
|
-
if (method.substr(0,3) === 'get') {
|
|
697
|
-
var callback = function(val){
|
|
698
|
-
self.send(method, val, listener);
|
|
699
|
-
};
|
|
700
|
-
func.call(this, callback);
|
|
701
|
-
} else {
|
|
702
|
-
func.call(this, value);
|
|
703
|
-
}
|
|
704
|
-
};
|
|
705
|
-
|
|
706
|
-
playerjs.Receiver.prototype.on = function(event, callback){
|
|
707
|
-
this.methods[event] = callback;
|
|
708
|
-
};
|
|
709
|
-
|
|
710
|
-
playerjs.Receiver.prototype.send = function(event, value, listener){
|
|
711
|
-
|
|
712
|
-
playerjs.log('Receiver.send', event, value, listener);
|
|
713
|
-
|
|
714
|
-
if (this.reject){
|
|
715
|
-
// We are not in a frame, or we don't support POST_MESSAGE
|
|
716
|
-
playerjs.log('Receiver.send.reject', event, value, listener);
|
|
717
|
-
return false;
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
var data = {
|
|
721
|
-
context: playerjs.CONTEXT,
|
|
722
|
-
version: playerjs.VERSION,
|
|
723
|
-
event: event
|
|
724
|
-
};
|
|
725
|
-
|
|
726
|
-
if (!playerjs.isNone(value)){
|
|
727
|
-
data.value = value;
|
|
728
|
-
}
|
|
729
|
-
|
|
730
|
-
if (!playerjs.isNone(listener)){
|
|
731
|
-
data.listener = listener;
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
var msg = JSON.stringify(data);
|
|
735
|
-
window.parent.postMessage(msg, this.origin === "" ? '*' : this.origin);
|
|
736
|
-
};
|
|
737
|
-
|
|
738
|
-
playerjs.Receiver.prototype.emit = function(event, value){
|
|
739
|
-
|
|
740
|
-
if (!this.eventListeners.hasOwnProperty(event)){
|
|
741
|
-
return false;
|
|
742
|
-
}
|
|
743
|
-
|
|
744
|
-
playerjs.log('Instance.emit', event, value, this.eventListeners[event]);
|
|
745
|
-
|
|
746
|
-
for (var i=0; i < this.eventListeners[event].length; i++){
|
|
747
|
-
var listener = this.eventListeners[event][i];
|
|
748
|
-
this.send(event, value, listener);
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
return true;
|
|
752
|
-
};
|
|
753
|
-
|
|
754
|
-
playerjs.Receiver.prototype.ready = function(){
|
|
755
|
-
playerjs.log('Receiver.ready');
|
|
756
|
-
this.isReady = true;
|
|
757
|
-
|
|
758
|
-
var data = {
|
|
759
|
-
src: window.location.toString(),
|
|
760
|
-
events: this.supported.events,
|
|
761
|
-
methods: this.supported.methods
|
|
762
|
-
};
|
|
763
|
-
|
|
764
|
-
if (!this.emit('ready', data)){
|
|
765
|
-
this.send('ready', data);
|
|
766
|
-
}
|
|
767
|
-
|
|
768
|
-
};
|
|
769
|
-
|
|
770
|
-
playerjs.HTML5Adapter = function(video){
|
|
771
|
-
if (!(this instanceof playerjs.HTML5Adapter)) {
|
|
772
|
-
return new playerjs.HTML5Adapter(video);
|
|
773
|
-
}
|
|
774
|
-
this.init(video);
|
|
775
|
-
};
|
|
776
|
-
|
|
777
|
-
playerjs.HTML5Adapter.prototype.init = function(video){
|
|
778
|
-
|
|
779
|
-
playerjs.assert(video, 'playerjs.HTML5Adapter requires a video element');
|
|
780
|
-
|
|
781
|
-
// Set up the actual receiver
|
|
782
|
-
var receiver = this.receiver = new playerjs.Receiver();
|
|
783
|
-
|
|
784
|
-
/* EVENTS */
|
|
785
|
-
video.addEventListener('playing', function(){
|
|
786
|
-
receiver.emit('play');
|
|
787
|
-
});
|
|
788
|
-
|
|
789
|
-
video.addEventListener('pause', function(){
|
|
790
|
-
receiver.emit('pause');
|
|
791
|
-
});
|
|
792
|
-
|
|
793
|
-
video.addEventListener('ended', function(){
|
|
794
|
-
receiver.emit('ended');
|
|
795
|
-
});
|
|
796
|
-
|
|
797
|
-
video.addEventListener('timeupdate', function(){
|
|
798
|
-
receiver.emit('timeupdate', {
|
|
799
|
-
seconds: video.currentTime,
|
|
800
|
-
duration: video.duration
|
|
801
|
-
});
|
|
802
|
-
});
|
|
803
|
-
|
|
804
|
-
video.addEventListener('progress', function(){
|
|
805
|
-
receiver.emit('buffered', {
|
|
806
|
-
percent: video.buffered.length
|
|
807
|
-
});
|
|
808
|
-
});
|
|
809
|
-
|
|
810
|
-
/* Methods */
|
|
811
|
-
receiver.on('play', function(){
|
|
812
|
-
video.play();
|
|
813
|
-
});
|
|
814
|
-
|
|
815
|
-
receiver.on('pause', function(){
|
|
816
|
-
video.pause();
|
|
817
|
-
});
|
|
818
|
-
|
|
819
|
-
receiver.on('getPaused', function(callback){
|
|
820
|
-
callback(video.paused);
|
|
821
|
-
});
|
|
822
|
-
|
|
823
|
-
receiver.on('getCurrentTime', function(callback){
|
|
824
|
-
callback(video.currentTime);
|
|
825
|
-
});
|
|
826
|
-
|
|
827
|
-
receiver.on('setCurrentTime', function(value){
|
|
828
|
-
video.currentTime = value;
|
|
829
|
-
});
|
|
830
|
-
|
|
831
|
-
receiver.on('getDuration', function(callback){
|
|
832
|
-
callback(video.duration);
|
|
833
|
-
});
|
|
834
|
-
|
|
835
|
-
receiver.on('getVolume', function(callback){
|
|
836
|
-
callback(video.volume * 100);
|
|
837
|
-
});
|
|
838
|
-
|
|
839
|
-
receiver.on('setVolume', function(value){
|
|
840
|
-
video.volume = value/100;
|
|
841
|
-
});
|
|
842
|
-
|
|
843
|
-
receiver.on('mute', function(){
|
|
844
|
-
video.muted = true;
|
|
845
|
-
});
|
|
846
|
-
|
|
847
|
-
receiver.on('unmute', function(){
|
|
848
|
-
video.muted = false;
|
|
849
|
-
});
|
|
850
|
-
|
|
851
|
-
receiver.on('getMuted', function(callback){
|
|
852
|
-
callback(video.muted);
|
|
853
|
-
});
|
|
854
|
-
|
|
855
|
-
receiver.on('getLoop', function(callback){
|
|
856
|
-
callback(video.loop);
|
|
857
|
-
});
|
|
858
|
-
|
|
859
|
-
receiver.on('setLoop', function(value){
|
|
860
|
-
video.loop = value;
|
|
861
|
-
});
|
|
862
|
-
|
|
863
|
-
receiver.on('setPlaybackRate', function(value){
|
|
864
|
-
video.playbackRate = value;
|
|
865
|
-
});
|
|
866
|
-
|
|
867
|
-
receiver.on('getPlaybackRate', function(callback){
|
|
868
|
-
callback(video.playbackRate);
|
|
869
|
-
});
|
|
870
|
-
};
|
|
871
|
-
|
|
872
|
-
/* Call when the video has loaded */
|
|
873
|
-
playerjs.HTML5Adapter.prototype.ready = function(){
|
|
874
|
-
this.receiver.ready();
|
|
875
|
-
};
|
|
876
|
-
|
|
877
|
-
playerjs.MockAdapter = function(){
|
|
878
|
-
if (!(this instanceof playerjs.MockAdapter)) {
|
|
879
|
-
return new playerjs.MockAdapter();
|
|
880
|
-
}
|
|
881
|
-
this.init();
|
|
882
|
-
};
|
|
883
|
-
|
|
884
|
-
playerjs.MockAdapter.prototype.init = function(){
|
|
885
|
-
|
|
886
|
-
// Our mock video
|
|
887
|
-
var video = {
|
|
888
|
-
duration: 20,
|
|
889
|
-
currentTime: 0,
|
|
890
|
-
interval: null,
|
|
891
|
-
timeupdate: function(){},
|
|
892
|
-
volume: 100,
|
|
893
|
-
mute: false,
|
|
894
|
-
playing: false,
|
|
895
|
-
loop : false,
|
|
896
|
-
play: function(){
|
|
897
|
-
video.interval = setInterval(function(){
|
|
898
|
-
video.currentTime += 0.25;
|
|
899
|
-
video.timeupdate({
|
|
900
|
-
seconds: video.currentTime,
|
|
901
|
-
duration: video.duration
|
|
902
|
-
});
|
|
903
|
-
}, 250);
|
|
904
|
-
video.playing = true;
|
|
905
|
-
},
|
|
906
|
-
pause: function(){
|
|
907
|
-
clearInterval(video.interval);
|
|
908
|
-
video.playing = false;
|
|
909
|
-
}
|
|
910
|
-
};
|
|
911
|
-
|
|
912
|
-
// Set up the actual receiver
|
|
913
|
-
var receiver = this.receiver = new playerjs.Receiver();
|
|
914
|
-
|
|
915
|
-
receiver.on('play', function(){
|
|
916
|
-
var self = this;
|
|
917
|
-
video.play();
|
|
918
|
-
this.emit('play');
|
|
919
|
-
video.timeupdate = function(data){
|
|
920
|
-
self.emit('timeupdate', data);
|
|
921
|
-
};
|
|
922
|
-
});
|
|
923
|
-
|
|
924
|
-
receiver.on('pause', function(){
|
|
925
|
-
video.pause();
|
|
926
|
-
this.emit('pause');
|
|
927
|
-
});
|
|
928
|
-
|
|
929
|
-
receiver.on('getPaused', function(callback){
|
|
930
|
-
callback(!video.playing);
|
|
931
|
-
});
|
|
932
|
-
|
|
933
|
-
receiver.on('getCurrentTime', function(callback){
|
|
934
|
-
callback(video.currentTime);
|
|
935
|
-
});
|
|
936
|
-
|
|
937
|
-
receiver.on('setCurrentTime', function(value){
|
|
938
|
-
video.currentTime = value;
|
|
939
|
-
});
|
|
940
|
-
|
|
941
|
-
receiver.on('getDuration', function(callback){
|
|
942
|
-
callback(video.duration);
|
|
943
|
-
});
|
|
944
|
-
|
|
945
|
-
receiver.on('getVolume', function(callback){
|
|
946
|
-
callback(video.volume);
|
|
947
|
-
});
|
|
948
|
-
|
|
949
|
-
receiver.on('setVolume', function(value){
|
|
950
|
-
video.volume = value;
|
|
951
|
-
});
|
|
952
|
-
|
|
953
|
-
receiver.on('mute', function(){
|
|
954
|
-
video.mute = true;
|
|
955
|
-
});
|
|
956
|
-
|
|
957
|
-
receiver.on('unmute', function(){
|
|
958
|
-
video.mute = false;
|
|
959
|
-
});
|
|
960
|
-
|
|
961
|
-
receiver.on('getMuted', function(callback){
|
|
962
|
-
callback(video.mute);
|
|
963
|
-
});
|
|
964
|
-
|
|
965
|
-
receiver.on('getLoop', function(callback){
|
|
966
|
-
callback(video.loop);
|
|
967
|
-
});
|
|
968
|
-
|
|
969
|
-
receiver.on('setLoop', function(value){
|
|
970
|
-
video.loop = value;
|
|
971
|
-
});
|
|
972
|
-
|
|
973
|
-
receiver.on('setPlaybackRate', function(value){
|
|
974
|
-
video.playbackRate = value;
|
|
975
|
-
});
|
|
976
|
-
|
|
977
|
-
receiver.on('getPlaybackRate', function(callback){
|
|
978
|
-
callback(video.playbackRate);
|
|
979
|
-
});
|
|
980
|
-
};
|
|
981
|
-
|
|
982
|
-
/* Call when the video has loaded */
|
|
983
|
-
playerjs.MockAdapter.prototype.ready = function(){
|
|
984
|
-
this.receiver.ready();
|
|
985
|
-
};
|
|
986
|
-
playerjs.VideoJSAdapter = function(player){
|
|
987
|
-
if (!(this instanceof playerjs.VideoJSAdapter)) {
|
|
988
|
-
return new playerjs.VideoJSAdapter(player);
|
|
989
|
-
}
|
|
990
|
-
this.init(player);
|
|
991
|
-
};
|
|
992
|
-
|
|
993
|
-
playerjs.VideoJSAdapter.prototype.init = function(player){
|
|
994
|
-
|
|
995
|
-
playerjs.assert(player, 'playerjs.VideoJSReceiver requires a player object');
|
|
996
|
-
|
|
997
|
-
// Set up the actual receiver
|
|
998
|
-
var receiver = this.receiver = new playerjs.Receiver();
|
|
999
|
-
|
|
1000
|
-
/* EVENTS */
|
|
1001
|
-
player.on("pause", function(){
|
|
1002
|
-
receiver.emit('pause');
|
|
1003
|
-
});
|
|
1004
|
-
|
|
1005
|
-
player.on("play", function(){
|
|
1006
|
-
receiver.emit('play');
|
|
1007
|
-
});
|
|
1008
|
-
|
|
1009
|
-
player.on("timeupdate", function(e){
|
|
1010
|
-
var seconds = player.currentTime(),
|
|
1011
|
-
duration = player.duration();
|
|
1012
|
-
|
|
1013
|
-
if (!seconds || !duration){
|
|
1014
|
-
return false;
|
|
1015
|
-
}
|
|
1016
|
-
|
|
1017
|
-
var value = {
|
|
1018
|
-
seconds: seconds,
|
|
1019
|
-
duration: duration
|
|
1020
|
-
};
|
|
1021
|
-
receiver.emit('timeupdate', value);
|
|
1022
|
-
});
|
|
1023
|
-
|
|
1024
|
-
player.on("ended", function(){
|
|
1025
|
-
receiver.emit('ended');
|
|
1026
|
-
});
|
|
1027
|
-
|
|
1028
|
-
player.on("error", function(){
|
|
1029
|
-
receiver.emit('error');
|
|
1030
|
-
});
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
/* METHODS */
|
|
1034
|
-
receiver.on('play', function(){
|
|
1035
|
-
player.play();
|
|
1036
|
-
});
|
|
1037
|
-
|
|
1038
|
-
receiver.on('pause', function(){
|
|
1039
|
-
player.pause();
|
|
1040
|
-
});
|
|
1041
|
-
|
|
1042
|
-
receiver.on('getPaused', function(callback){
|
|
1043
|
-
callback(player.paused());
|
|
1044
|
-
});
|
|
1045
|
-
|
|
1046
|
-
receiver.on('getCurrentTime', function(callback){
|
|
1047
|
-
callback(player.currentTime());
|
|
1048
|
-
});
|
|
1049
|
-
|
|
1050
|
-
receiver.on('setCurrentTime', function(value){
|
|
1051
|
-
player.currentTime(value);
|
|
1052
|
-
});
|
|
1053
|
-
|
|
1054
|
-
receiver.on('getDuration', function(callback){
|
|
1055
|
-
callback(player.duration());
|
|
1056
|
-
});
|
|
1057
|
-
|
|
1058
|
-
receiver.on('getVolume', function(callback){
|
|
1059
|
-
callback(player.volume() * 100);
|
|
1060
|
-
});
|
|
1061
|
-
|
|
1062
|
-
receiver.on('setVolume', function(value){
|
|
1063
|
-
player.volume(value/100);
|
|
1064
|
-
});
|
|
1065
|
-
|
|
1066
|
-
receiver.on('mute', function(){
|
|
1067
|
-
player.volume(0);
|
|
1068
|
-
});
|
|
1069
|
-
|
|
1070
|
-
receiver.on('unmute', function(){
|
|
1071
|
-
player.volume(1);
|
|
1072
|
-
});
|
|
1073
|
-
|
|
1074
|
-
receiver.on('getMuted', function(callback){
|
|
1075
|
-
callback(player.volume() === 0);
|
|
1076
|
-
});
|
|
1077
|
-
|
|
1078
|
-
receiver.on('getLoop', function(callback){
|
|
1079
|
-
callback(player.loop());
|
|
1080
|
-
});
|
|
1081
|
-
|
|
1082
|
-
receiver.on('setLoop', function(value){
|
|
1083
|
-
player.loop(value);
|
|
1084
|
-
});
|
|
1085
|
-
|
|
1086
|
-
receiver.on('setPlaybackRate', function(value){
|
|
1087
|
-
player.playbackRate(value);
|
|
1088
|
-
});
|
|
1089
|
-
|
|
1090
|
-
receiver.on('getPlaybackRate', function(callback){
|
|
1091
|
-
callback(player.playbackRate());
|
|
1092
|
-
});
|
|
1093
|
-
};
|
|
1094
|
-
|
|
1095
|
-
/* Call when the video.js is ready */
|
|
1096
|
-
playerjs.VideoJSAdapter.prototype.ready = function(){
|
|
1097
|
-
this.receiver.ready();
|
|
1098
|
-
};
|
|
1099
|
-
|
|
1100
|
-
if (typeof define === 'function' && define.amd) {
|
|
1101
|
-
define(function () {
|
|
1102
|
-
return playerjs
|
|
1103
|
-
})
|
|
1104
|
-
} else if (typeof module === 'object' && module.exports) {
|
|
1105
|
-
module.exports = playerjs
|
|
1106
|
-
} else {
|
|
1107
|
-
window.playerjs = playerjs;
|
|
1108
|
-
}
|
|
1109
|
-
})(window, document);
|