@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 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@1.0/dist/player.min.js"></script>
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
@@ -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": "1.0.5",
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": "grunt package"
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
- "grunt": "^0.4.5",
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);