diff --git a/demo/dist/demo.js b/demo/dist/demo.js index d79c71e7..3ecf85aa 100644 --- a/demo/dist/demo.js +++ b/demo/dist/demo.js @@ -1 +1 @@ -"document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var e=document.createElement("_");if(e.classList.add("c1","c2"),!e.classList.contains("c2")){var t=function(e){var t=DOMTokenList.prototype[e];DOMTokenList.prototype[e]=function(e){var i,s=arguments.length;for(i=0;i=0;a--)e(o[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0)}}var i=plyr.setup({debug:!0,title:"Video demo",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0},controls:["play-large","play","speed-up","progress","current-time","mute","volume","captions","settings","fullscreen"]});plyr.loadSprite("dist/demo.svg");for(var s=i[0],o=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),a=window.history&&window.history.pushState,c=o.length-1;c>=0;c--)o[c].addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),a&&history.pushState({type:e},"","#"+e)});if(window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),a){var l=!r.length;l&&(r=n.video),r in n&&history.replaceState({type:r},"",l?"":"#"+r),r!==n.video&&t(r,!0)}}(),document.domain.indexOf("plyr.io")>-1&&(!function(e,t,i,s,o,n,r){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,n=t.createElement(i),r=t.getElementsByTagName(i)[0],n.async=1,n.src=s,r.parentNode.insertBefore(n,r)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40881672-11","auto"),ga("send","pageview")); \ No newline at end of file +"document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var e=document.createElement("_");if(e.classList.add("c1","c2"),!e.classList.contains("c2")){var t=function(e){var t=DOMTokenList.prototype[e];DOMTokenList.prototype[e]=function(e){var i,s=arguments.length;for(i=0;i=0;a--)e(o[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0)}}var i=plyr.setup({debug:!0,title:"Video demo",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0}});plyr.loadSprite("dist/demo.svg");for(var s=i[0],o=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),a=window.history&&window.history.pushState,c=o.length-1;c>=0;c--)o[c].addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),a&&history.pushState({type:e},"","#"+e)});if(window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),a){var l=!r.length;l&&(r=n.video),r in n&&history.replaceState({type:r},"",l?"":"#"+r),r!==n.video&&t(r,!0)}}(),document.domain.indexOf("plyr.io")>-1&&(!function(e,t,i,s,o,n,r){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,n=t.createElement(i),r=t.getElementsByTagName(i)[0],n.async=1,n.src=s,r.parentNode.insertBefore(n,r)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40881672-11","auto"),ga("send","pageview")); \ No newline at end of file diff --git a/demo/src/js/main.js b/demo/src/js/main.js index 158736ae..5302604b 100644 --- a/demo/src/js/main.js +++ b/demo/src/js/main.js @@ -21,7 +21,7 @@ captions: { defaultActive: true }, - controls: ['play-large', 'play', 'speed-up', 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'fullscreen'] + //controls: ['play-large', 'play', 'speed-up', 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'fullscreen'] }); plyr.loadSprite('dist/demo.svg'); diff --git a/dist/plyr.js b/dist/plyr.js index a22c25a6..702bb488 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,a,r=navigator.userAgent,s=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,d=!1;return navigator.appVersion.indexOf("Windows NT")!==-1&&navigator.appVersion.indexOf("rv:11")!==-1?(l=!0,s="IE",o="11"):(n=r.indexOf("MSIE"))!==-1?(l=!0,s="IE",o=r.substring(n+5)):(n=r.indexOf("Chrome"))!==-1?(c=!0,s="Chrome",o=r.substring(n+7)):(n=r.indexOf("Safari"))!==-1?(d=!0,s="Safari",o=r.substring(n+7),(n=r.indexOf("Version"))!==-1&&(o=r.substring(n+8))):(n=r.indexOf("Firefox"))!==-1?(u=!0,s="Firefox",o=r.substring(n+8)):(e=r.lastIndexOf(" ")+1)<(n=r.lastIndexOf("/"))&&(s=r.substring(e,n),o=r.substring(n+1),s.toLowerCase()===s.toUpperCase()&&(s=navigator.appName)),(a=o.indexOf(";"))!==-1&&(o=o.substring(0,a)),(a=o.indexOf(" "))!==-1&&(o=o.substring(0,a)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:s,version:i,isIE:l,isFirefox:u,isChrome:c,isSafari:d,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function a(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var a=t.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a)}}function r(e,t){return Array.prototype.indexOf&&e.indexOf(t)!==-1}function s(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function o(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var a=n>0?t.cloneNode(!0):t,r=e[n],s=r.parentNode,o=r.nextSibling;return a.appendChild(r),o?s.insertBefore(a,o):s.appendChild(a),a}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,P.boolean(t[n])&&t[n]?"":t[n])}function c(e,n,a){var r=t.createElement(e);u(r,a),l(n,r)}function d(e){return e.replace(".","")}function p(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function f(e,n){var a=Element.prototype,r=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return r.call(e,n)}function b(e,t,n,a,r){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},r)}function y(e,t,n,a,r){var s=t.split(" ");if(P.boolean(r)||(r=!1),e instanceof NodeList)for(var o=0;o','',''+w.i18n.play+"",""),e.push('
'),r(w.controls,"restart")&&e.push('"),r(w.controls,"rewind")&&e.push('"),r(w.controls,"play")&&e.push('",'"),r(w.controls,"fast-forward")&&e.push('"),r(w.controls,"progress")&&(e.push('','','','','',"0% "+w.i18n.buffered,""),w.tooltips.seek&&e.push('00:00'),e.push("")),r(w.controls,"current-time")&&e.push('',''+w.i18n.currentTime+"",'00:00',""),r(w.controls,"duration")&&e.push('',''+w.i18n.duration+"",'00:00',""),r(w.controls,"mute")&&e.push('"),r(w.controls,"volume")&&e.push('','",'','',""),r(w.controls,"captions")&&e.push('"),r(w.controls,"settings")&&e.push('
','",'","
"),r(w.controls,"fullscreen")&&e.push('"),e.push("
"),e.join("")}function q(){if(Ue.supported.full&&("audio"!==Ue.type||w.fullscreen.allowAudio)&&w.fullscreen.enabled){var e=N.fullscreen;e||w.fullscreen.fallback&&!B()?($e((e?"Native":"Fallback")+" fullscreen enabled"),p(Ue.container,w.classes.fullscreen.enabled,!0)):$e("Fullscreen not supported and fallback disabled"),Ue.buttons&&Ue.buttons.fullscreen&&_(Ue.buttons.fullscreen,!1),X()}}function j(e){P.event(e)&&(e=e.target),e.activeCues[0]&&"text"in e.activeCues[0]?R(e.activeCues[0].getCueAsHTML()):R()}function V(){if("video"===Ue.type){Y(w.selectors.captions)||Ue.videoContainer.insertAdjacentHTML("afterbegin",'
'),Ue.usingTextTracks=!1,Ue.media.textTracks&&(Ue.usingTextTracks=!0);for(var e,t=[],n="",a=Ue.media.childNodes,r=0;rt.length?(Ue.captionExists=!1,$e("Caption index out of bound")):(n=t[w.captions.selectedIndex],$e("Caption track found; URI: "+n)),Ue.captionExists){var s=Ue.media.textTracks;if([].forEach.call(s,function(e){v(e,"cuechange",j),e.mode="hidden"}),H(Ue),(Ue.browser.isIE&&Ue.browser.version>=10||Ue.browser.isFirefox&&Ue.browser.version>=31)&&($e("Detected browser with known TextTrack issues - using manual fallback"),Ue.usingTextTracks=!1),Ue.usingTextTracks){$e("TextTracks supported");var o=s[w.captions.selectedIndex];"captions"!==o.kind&&"subtitles"!==o.kind||(g(o,"cuechange",j),o.activeCues&&o.activeCues.length>0&&j(o))}else if($e("TextTracks not supported so rendering captions manually"),Ue.currentCaption="",Ue.captions=[],""!==n){var i=new XMLHttpRequest;i.onreadystatechange=function(){if(4===i.readyState)if(200===i.status){var e,t=[],n=i.responseText,a="\r\n";n.indexOf(a+a)===-1&&(a=n.indexOf("\r\r")!==-1?"\r":"\n"),t=n.split(a+a);for(var r=0;r ");for(var a=0;aUe.captions.length-1){Ue.subcount=Ue.captions.length-1;break}Ue.media.currentTime.toFixed(1)>=n(Ue.captions[Ue.subcount][0])&&Ue.media.currentTime.toFixed(1)<=a(Ue.captions[Ue.subcount][0])?(Ue.currentCaption=Ue.captions[Ue.subcount][1],R(Ue.currentCaption)):R()}}function H(){if(Ue.buttons.captions){p(Ue.container,w.classes.captions.enabled,!0);var e=Ue.storage.captionsEnabled;P.boolean(e)||(e=w.captions.defaultActive),e&&(p(Ue.container,w.classes.captions.active,!0),_(Ue.buttons.captions,!0))}}function W(e){return Ue.container.querySelectorAll(e)}function Y(e){return W(e)[0]}function B(){try{return e.self!==e.top}catch(e){return!0}}function X(){function e(e){9===e.which&&Ue.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=W("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Ue.container,"keydown",e)}function U(e,t){if(P.string(t))c(e,Ue.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Ue.media,t[n])}function J(){if(w.loadSprite){var e=O();e.absolute?($e("AJAX loading absolute SVG sprite"+(Ue.browser.isIE?" (due to IE)":"")),T(e.url,"sprite-plyr")):$e("Sprite will be used as external resource directly")}var n=w.html;$e("Injecting custom controls"),n||(n=L()),n=s(n,"{seektime}",w.seekTime),n=s(n,"{speed}",w.currentSpeed.toFixed(1).toString().replace(".0","")+"×"),n=s(n,"{lang}","English"),n=s(n,"{id}",Math.floor(1e4*Math.random()));var a;if(P.string(w.selectors.controls.container)&&(a=t.querySelector(w.selectors.controls.container)),P.htmlElement(a)||(a=Ue.container),a.insertAdjacentHTML("beforeend",n),w.tooltips.controls)for(var r=W([w.selectors.controls.wrapper," ",w.selectors.labels," .",w.classes.hidden].join("")),o=r.length-1;o>=0;o--){var i=r[o];p(i,w.classes.hidden,!1),p(i,w.classes.tooltip,!0)}}function z(){try{return Ue.controls=Y(w.selectors.controls.wrapper),Ue.buttons={},Ue.buttons.seek=Y(w.selectors.buttons.seek),Ue.buttons.play=W(w.selectors.buttons.play),Ue.buttons.pause=Y(w.selectors.buttons.pause),Ue.buttons.restart=Y(w.selectors.buttons.restart),Ue.buttons.rewind=Y(w.selectors.buttons.rewind),Ue.buttons.forward=Y(w.selectors.buttons.forward),Ue.buttons.fullscreen=Y(w.selectors.buttons.fullscreen),Ue.buttons.settings=Y(w.selectors.buttons.settings),Ue.buttons.mute=Y(w.selectors.buttons.mute),Ue.buttons.captions=Y(w.selectors.buttons.captions),Ue.progress={},Ue.progress.container=Y(w.selectors.progress.container),Ue.progress.buffer={},Ue.progress.buffer.bar=Y(w.selectors.progress.buffer),Ue.progress.buffer.text=Ue.progress.buffer.bar&&Ue.progress.buffer.bar.getElementsByTagName("span")[0],Ue.progress.played=Y(w.selectors.progress.played),Ue.progress.tooltip=Ue.progress.container&&Ue.progress.container.querySelector("."+w.classes.tooltip),Ue.volume={},Ue.volume.input=Y(w.selectors.volume.input),Ue.volume.display=Y(w.selectors.volume.display),Ue.duration=Y(w.selectors.duration),Ue.currentTime=Y(w.selectors.currentTime),Ue.seekTime=W(w.selectors.seekTime),!0}catch(e){return Ge("It looks like there is a problem with your controls HTML"),G(!0),!1}}function $(){p(Ue.container,w.selectors.container.replace(".",""),Ue.supported.full)}function G(e){e&&r(w.types.html5,Ue.type)?Ue.media.setAttribute("controls",""):Ue.media.removeAttribute("controls")}function K(e){var t=w.i18n.play;if(P.string(w.title)&&w.title.length&&(t+=", "+w.title,Ue.container.setAttribute("aria-label",w.title)),Ue.supported.full&&Ue.buttons.play)for(var n=Ue.buttons.play.length-1;n>=0;n--)Ue.buttons.play[n].setAttribute("aria-label",t);P.htmlElement(e)&&e.setAttribute("title",w.i18n.frameTitle.replace("{title}",w.title))}function Q(){var t=null;Ue.storage={},N.storage&&w.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(w.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Z({volume:parseFloat(t)}):Ue.storage=JSON.parse(t)))}function Z(t){N.storage&&w.storage.enabled&&(x(Ue.storage,t),e.localStorage.setItem(w.storage.key,JSON.stringify(Ue.storage)))}function ee(){if(!Ue.media)return void Ge("No media element found!");if(Ue.supported.full&&(p(Ue.container,w.classes.type.replace("{0}",Ue.type),!0),r(w.types.embed,Ue.type)&&p(Ue.container,w.classes.type.replace("{0}","video"),!0),p(Ue.container,w.classes.pip.enabled,N.pip(Ue)),p(Ue.container,w.classes.stopped,w.autoplay),p(Ue.ontainer,w.classes.isIos,Ue.browser.isIos),p(Ue.container,w.classes.isTouch,Ue.browser.isTouch),"video"===Ue.type)){var e=t.createElement("div");e.setAttribute("class",w.classes.videoWrapper),o(Ue.media,e),Ue.videoContainer=e}r(w.types.embed,Ue.type)&&te()}function te(){for(var n=t.createElement("div"),r=Ue.embedId,s=Ue.type+"-"+Math.floor(1e4*Math.random()),o=W('[id^="'+Ue.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(p(Ue.media,w.classes.videoWrapper,!0),p(Ue.media,w.classes.embedWrapper,!0),"youtube"===Ue.type)Ue.media.appendChild(n),n.setAttribute("id",s),P.object(e.YT)?ae(r,n):(a(w.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){ae(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Ue.type)if(Ue.supported.full?Ue.media.appendChild(n):n=Ue.media,n.setAttribute("id",s),P.object(e.Vimeo))re(r,n);else{a(w.urls.vimeo.api);var c=e.setInterval(function(){P.object(e.Vimeo)&&(e.clearInterval(c),re(r,n))},50)}else if("soundcloud"===Ue.type){var d=t.createElement("iframe");d.loaded=!1,g(d,"load",function(){d.loaded=!0}),u(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:s}),n.appendChild(d),Ue.media.appendChild(n),e.SC||a(w.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(m),se.call(d))},50)}}function ne(){Ue.supported.full&&(Ye(),Be()),K(Y("iframe"))}function ae(t,n){Ue.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:w.autoplay?1:0,controls:Ue.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:w.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){S(Ue.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Ue.media.play=function(){n.playVideo(),Ue.media.paused=!1},Ue.media.pause=function(){n.pauseVideo(),Ue.media.paused=!0},Ue.media.stop=function(){n.stopVideo(),Ue.media.paused=!0},Ue.media.duration=n.getDuration(),Ue.media.paused=!0,Ue.media.currentTime=0,Ue.media.muted=n.isMuted(),w.title=n.getVideoData().title,Ue.supported.full&&Ue.media.querySelector("iframe").setAttribute("tabindex","-1"),ne(),S(Ue.media,"timeupdate"),S(Ue.media,"durationchange"),e.clearInterval(Je.buffering),Je.buffering=e.setInterval(function(){Ue.media.buffered=n.getVideoLoadedFraction(),(null===Ue.media.lastBuffered||Ue.media.lastBuffered=w.speeds.length&&(n=0),e=w.speeds[n]}else e=w.defaultSpeed}w.currentSpeed=e,Ue.media.playbackRate=e,Z({speed:e})}function pe(e){var t=0,n=Ue.media.paused,a=me();P.number(e)?t=e:P.event(e)&&r(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Pe(t);try{Ue.media.currentTime=t.toFixed(4)}catch(e){}if(r(w.types.embed,Ue.type)){switch(Ue.type){case"youtube":Ue.embed.seekTo(t);break;case"vimeo":Ue.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Ue.embed.seekTo(1e3*t)}n&&ie(),S(Ue.media,"timeupdate"),Ue.media.seeking=!0}$e("Seeking to "+Ue.media.currentTime+" seconds"),D(t)}function me(){var e=parseInt(w.duration),t=0;return null===Ue.media.duration||isNaN(Ue.media.duration)||(t=Ue.media.duration),isNaN(e)?t:e}function fe(){p(Ue.container,w.classes.playing,!Ue.media.paused),p(Ue.container,w.classes.stopped,Ue.media.paused),Oe(Ue.media.paused)}function be(){F={x:e.pageXOffset||0,y:e.pageYOffset||0}}function ye(){e.scrollTo(F.x,F.y)}function ge(e){var n=N.fullscreen;if(n){if(!e||e.type!==A.eventType)return A.isFullScreen(Ue.container)?A.cancelFullScreen():(be(),A.requestFullScreen(Ue.container)),void(Ue.isFullscreen=A.isFullScreen(Ue.container));Ue.isFullscreen=A.isFullScreen(Ue.container)}else Ue.isFullscreen=!Ue.isFullscreen,t.body.style.overflow=Ue.isFullscreen?"hidden":"";p(Ue.container,w.classes.fullscreen.active,Ue.isFullscreen),X(Ue.isFullscreen),Ue.buttons&&Ue.buttons.fullscreen&&_(Ue.buttons.fullscreen,Ue.isFullscreen),S(Ue.container,Ue.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Ue.isFullscreen&&n&&ye()}function ve(e){if(P.boolean(e)||(e=!Ue.media.muted),_(Ue.buttons.mute,e),Ue.media.muted=e,0===Ue.media.volume&&he(w.volume),r(w.types.embed,Ue.type)){switch(Ue.type){case"youtube":Ue.embed[Ue.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Ue.embed.setVolume(Ue.media.muted?0:parseFloat(w.volume/w.volumeMax))}S(Ue.media,"volumechange")}}function he(e){var t=w.volumeMax,n=w.volumeMin;if(P.undefined(e)&&(e=Ue.storage.volume),(null===e||isNaN(e))&&(e=w.volume),e>t&&(e=t),e0&&ve()}function _e(e){var t=Ue.media.muted?0:Ue.media.volume*w.volumeMax;P.number(e)||(e=w.volumeStep),he(t+e)}function ke(e){var t=Ue.media.muted?0:Ue.media.volume*w.volumeMax;P.number(e)||(e=w.volumeStep),he(t-e)}function xe(){var e=Ue.media.muted?0:Ue.media.volume*w.volumeMax;Ue.supported.full&&(Ue.volume.input&&(Ue.volume.input.value=e),Ue.volume.display&&(Ue.volume.display.value=e)),Z({volume:e}),p(Ue.container,w.classes.muted,0===e),Ue.supported.full&&Ue.buttons.mute&&_(Ue.buttons.mute,0===e)}function we(e){Ue.supported.full&&Ue.buttons.captions&&(P.boolean(e)||(e=Ue.container.className.indexOf(w.classes.captions.active)===-1),Ue.captionsEnabled=e,_(Ue.buttons.captions,Ue.captionsEnabled),p(Ue.container,w.classes.captions.active,Ue.captionsEnabled),S(Ue.container,Ue.captionsEnabled?"captionsenabled":"captionsdisabled",!0),Z({captionsEnabled:Ue.captionsEnabled}))}function Te(e){w.captions.selectedIndex=e,R(),V()}function Ee(e){var t="waiting"===e.type;clearTimeout(Je.loading),Je.loading=setTimeout(function(){p(Ue.container,w.classes.loading,t),Oe(t)},t?250:0)}function Se(e){if(Ue.supported.full){var t=Ue.progress.played,n=0,a=me();if(e)switch(e.type){case"timeupdate":case"seeking":if(Ue.controls.pressed)return;n=k(Ue.media.currentTime,a),"timeupdate"===e.type&&Ue.buttons.seek&&(Ue.buttons.seek.value=n);break;case"playing":case"progress":t=Ue.progress.buffer,n=function(){var e=Ue.media.buffered;return e&&e.length?k(e.end(0),a):P.number(e)?100*e:0}()}Ce(t,n)}}function Ce(e,t){if(Ue.supported.full){if(P.undefined(t)&&(t=0),P.undefined(e)){if(!Ue.progress||!Ue.progress.buffer)return;e=Ue.progress.buffer}P.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ae(e,t){if(t){isNaN(e)&&(e=0),Ue.secs=parseInt(e%60),Ue.mins=parseInt(e/60%60),Ue.hours=parseInt(e/60/60%60);var n=parseInt(me()/60/60%60)>0;Ue.secs=("0"+Ue.secs).slice(-2),Ue.mins=("0"+Ue.mins).slice(-2),t.innerHTML=(n?Ue.hours+":":"")+Ue.mins+":"+Ue.secs}}function Fe(){if(Ue.supported.full){var e=me()||0;!Ue.duration&&w.displayDuration&&Ue.media.paused&&Ae(e,Ue.currentTime),Ue.duration&&Ae(e,Ue.duration),Ne()}}function Ie(e){Ae(Ue.media.currentTime,Ue.currentTime),e&&"timeupdate"===e.type&&Ue.media.seeking||Se(e)}function Pe(e){P.number(e)||(e=0);var t=me(),n=k(e,t);Ue.progress&&Ue.progress.played&&(Ue.progress.played.value=n),Ue.buttons&&Ue.buttons.seek&&(Ue.buttons.seek.value=n)}function Ne(e){var t=me();if(w.tooltips.seek&&Ue.progress.container&&0!==t){var n=Ue.progress.container.getBoundingClientRect(),a=0,s=w.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Ue.progress.tooltip,s))return;a=Ue.progress.tooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Ae(t/100*a,Ue.progress.tooltip),Ue.progress.tooltip.style.left=a+"%",e&&r(["mouseenter","mouseleave"],e.type)&&p(Ue.progress.tooltip,s,"mouseenter"===e.type)}}function Me(e){P.undefined(e)&&(e=Ue.storage.speed||w.defaultSpeed),de(e)}function Oe(t){if(w.hideControls&&"audio"!==Ue.type){var n=0,a=!1,s=t,o=m(Ue.container,w.classes.loading);if(P.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,s=r(["mousemove","touchstart","mouseenter","focus"],t.type),r(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=m(Ue.container,w.classes.hideControls)),e.clearTimeout(Je.hover),s||Ue.media.paused||o){if(p(Ue.container,w.classes.hideControls,!1),Ue.media.paused||o)return;Ue.browser.isTouch&&(n=3e3)}s&&Ue.media.paused||(Je.hover=e.setTimeout(function(){(!Ue.controls.pressed&&!Ue.controls.hover||a)&&p(Ue.container,w.classes.hideControls,!0)},n))}}function Le(e){if(!P.undefined(e))return void qe(e);var t;switch(Ue.type){case"youtube":t=Ue.embed.getVideoUrl();break;case"vimeo":Ue.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Ue.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Ue.media.currentSrc}return t||""}function qe(e){function n(){if(Ue.embed=null,i(Ue.media),"video"===Ue.type&&Ue.videoContainer&&i(Ue.videoContainer),Ue.container&&Ue.container.removeAttribute("class"),"type"in e&&(Ue.type=e.type,"video"===Ue.type)){var n=e.sources[0];"type"in n&&r(w.types.embed,n.type)&&(Ue.type=n.type)}switch(Ue.supported=E(Ue.type),Ue.type){case"video":Ue.media=t.createElement("video");break;case"audio":Ue.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Ue.media=t.createElement("div"),Ue.embedId=e.sources[0].src}l(Ue.container,Ue.media),P.boolean(e.autoplay)&&(w.autoplay=e.autoplay),r(w.types.html5,Ue.type)&&(w.crossorigin&&Ue.media.setAttribute("crossorigin",""),w.autoplay&&Ue.media.setAttribute("autoplay",""),"poster"in e&&Ue.media.setAttribute("poster",e.poster),w.loop&&Ue.media.setAttribute("loop","")),p(Ue.container,w.classes.fullscreen.active,Ue.isFullscreen),p(Ue.container,w.classes.captions.active,Ue.captionsEnabled),$(),r(w.types.html5,Ue.type)&&U("source",e.sources),ee(),r(w.types.html5,Ue.type)&&("tracks"in e&&U("track",e.tracks),Ue.media.load()),(r(w.types.html5,Ue.type)||r(w.types.embed,Ue.type)&&!Ue.supported.full)&&(Ye(),Be()),w.title=e.title,K()}return P.object(e)&&"sources"in e&&e.sources.length?(p(Ue.container,w.classes.ready,!1), -ie(),Pe(),Ce(),De(),void He(n,!1)):void Ge("Invalid source format")}function je(e){"video"===Ue.type&&Ue.media.setAttribute("poster",e)}function Ve(){function n(){var e=le(),t=Ue.buttons[e?"play":"pause"],n=Ue.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,w.classes.tabFocus);setTimeout(function(){n.focus(),a&&(p(t,w.classes.tabFocus,!1),p(n,w.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Ue.buttons){var n=Ue.buttons[t];if(P.nodeList(n))for(var a=0;a0)&&(t?ke(n):_e(n)),(e.deltaY>0||e.deltaX<0)&&(t?_e(n):ke(n))})}function Re(){if(g(Ue.media,"timeupdate seeking",Ie),g(Ue.media,"timeupdate",D),g(Ue.media,"durationchange loadedmetadata",Fe),g(Ue.media,"ended",function(){"video"===Ue.type&&w.showPosterOnEnd&&("video"===Ue.type&&R(),pe(),Ue.media.load())}),g(Ue.media,"progress playing",Se),g(Ue.media,"volumechange",xe),g(Ue.media,"play pause ended",fe),g(Ue.media,"waiting canplay seeked",Ee),w.clickToPlay&&"audio"!==Ue.type){var e=Y("."+w.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){w.hideControls&&Ue.browser.isTouch&&!Ue.media.paused||(Ue.media.paused?oe():Ue.media.ended?(pe(),oe()):ie())})}w.disableContextMenu&&g(Ue.media,"contextmenu",function(e){e.preventDefault()}),g(Ue.media,w.events.concat(["keyup","keydown"]).join(" "),function(e){S(Ue.container,e.type,!0)})}function De(){if(r(w.types.html5,Ue.type)){for(var e=Ue.media.querySelectorAll("source"),t=0;t=0;n--){var a=n>0?t.cloneNode(!0):t,r=e[n],s=r.parentNode,i=r.nextSibling;return a.appendChild(r),i?s.insertBefore(a,i):s.appendChild(a),a}}function o(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,P.boolean(t[n])&&t[n]?"":t[n])}function c(e,n,a){var r=t.createElement(e);u(r,a),l(n,r)}function d(e){return e.replace(".","")}function p(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function f(e,n){var a=Element.prototype,r=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return r.call(e,n)}function y(e,t,n,a,r){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},r)}function b(e,t,n,a,r){var s=t.split(" ");if(P.boolean(r)||(r=!1),e instanceof NodeList)for(var i=0;i','',''+w.i18n.play+"",""),e.push('
'),r(w.controls,"restart")&&e.push('"),r(w.controls,"rewind")&&e.push('"),r(w.controls,"play")&&e.push('",'"),r(w.controls,"fast-forward")&&e.push('"),r(w.controls,"progress")&&(e.push('','','','','',"0% "+w.i18n.buffered,""),w.tooltips.seek&&e.push('00:00'),e.push("")),r(w.controls,"current-time")&&e.push('',''+w.i18n.currentTime+"",'00:00',""),r(w.controls,"duration")&&e.push('',''+w.i18n.duration+"",'00:00',""),r(w.controls,"mute")&&e.push('"),r(w.controls,"volume")&&e.push('','",'','',""),r(w.controls,"captions")&&e.push('"),r(w.controls,"settings")&&e.push('
','",'","
"),console.log(M.pip),r(w.controls,"pip")&&M.pip&&e.push('"),r(w.controls,"airplay")&&M.airplay&&e.push('"),r(w.controls,"fullscreen")&&e.push('"),e.push("
"),e.join("")}function q(){if(Ue.supported.full&&("audio"!==Ue.type||w.fullscreen.allowAudio)&&w.fullscreen.enabled){var e=M.fullscreen;e||w.fullscreen.fallback&&!B()?(Ke((e?"Native":"Fallback")+" fullscreen enabled"),p(Ue.container,w.classes.fullscreen.enabled,!0)):Ke("Fullscreen not supported and fallback disabled"),Ue.buttons&&Ue.buttons.fullscreen&&_(Ue.buttons.fullscreen,!1),X()}}function j(e){P.event(e)&&(e=e.target),e.activeCues[0]&&"text"in e.activeCues[0]?R(e.activeCues[0].getCueAsHTML()):R()}function V(){if("video"===Ue.type){Y(w.selectors.captions)||Ue.videoContainer.insertAdjacentHTML("afterbegin",'
'),Ue.usingTextTracks=!1,Ue.media.textTracks&&(Ue.usingTextTracks=!0);for(var e,t=[],n="",a=Ue.media.childNodes,r=0;rt.length?(Ue.captionExists=!1,Ke("Caption index out of bound")):(n=t[w.captions.selectedIndex],Ke("Caption track found; URI: "+n)),Ue.captionExists){var s=Ue.media.textTracks;if([].forEach.call(s,function(e){v(e,"cuechange",j),e.mode="hidden"}),H(Ue),(Ue.browser.isIE&&Ue.browser.version>=10||Ue.browser.isFirefox&&Ue.browser.version>=31)&&(Ke("Detected browser with known TextTrack issues - using manual fallback"),Ue.usingTextTracks=!1),Ue.usingTextTracks){Ke("TextTracks supported");var i=s[w.captions.selectedIndex];"captions"!==i.kind&&"subtitles"!==i.kind||(g(i,"cuechange",j),i.activeCues&&i.activeCues.length>0&&j(i))}else if(Ke("TextTracks not supported so rendering captions manually"),Ue.currentCaption="",Ue.captions=[],""!==n){var o=new XMLHttpRequest;o.onreadystatechange=function(){if(4===o.readyState)if(200===o.status){var e,t=[],n=o.responseText,a="\r\n";n.indexOf(a+a)===-1&&(a=n.indexOf("\r\r")!==-1?"\r":"\n"),t=n.split(a+a);for(var r=0;r ");for(var a=0;aUe.captions.length-1){Ue.subcount=Ue.captions.length-1;break}Ue.media.currentTime.toFixed(1)>=n(Ue.captions[Ue.subcount][0])&&Ue.media.currentTime.toFixed(1)<=a(Ue.captions[Ue.subcount][0])?(Ue.currentCaption=Ue.captions[Ue.subcount][1],R(Ue.currentCaption)):R()}}function H(){if(Ue.buttons.captions){p(Ue.container,w.classes.captions.enabled,!0);var e=Ue.storage.captionsEnabled;P.boolean(e)||(e=w.captions.defaultActive),e&&(p(Ue.container,w.classes.captions.active,!0),_(Ue.buttons.captions,!0))}}function W(e){return Ue.container.querySelectorAll(e)}function Y(e){return W(e)[0]}function B(){try{return e.self!==e.top}catch(e){return!0}}function X(){function e(e){9===e.which&&Ue.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=W("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Ue.container,"keydown",e)}function U(e,t){if(P.string(t))c(e,Ue.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Ue.media,t[n])}function z(){if(w.loadSprite){var e=O();e.absolute?(Ke("AJAX loading absolute SVG sprite"+(Ue.browser.isIE?" (due to IE)":"")),T(e.url,"sprite-plyr")):Ke("Sprite will be used as external resource directly")}var n=w.html;Ke("Injecting custom controls"),n||(n=L()),n=s(n,"{seektime}",w.seekTime),n=s(n,"{speed}",w.currentSpeed.toFixed(1).toString().replace(".0","")+"×"),n=s(n,"{lang}","English"),n=s(n,"{id}",Math.floor(1e4*Math.random()));var a;if(P.string(w.selectors.controls.container)&&(a=t.querySelector(w.selectors.controls.container)),P.htmlElement(a)||(a=Ue.container),a.insertAdjacentHTML("beforeend",n),w.tooltips.controls)for(var r=W([w.selectors.controls.wrapper," ",w.selectors.labels," .",w.classes.hidden].join("")),i=r.length-1;i>=0;i--){var o=r[i];p(o,w.classes.hidden,!1),p(o,w.classes.tooltip,!0)}}function J(){try{return Ue.controls=Y(w.selectors.controls.wrapper),Ue.buttons={seek:Y(w.selectors.buttons.seek),play:W(w.selectors.buttons.play),pause:Y(w.selectors.buttons.pause),restart:Y(w.selectors.buttons.restart),rewind:Y(w.selectors.buttons.rewind),forward:Y(w.selectors.buttons.forward),fullscreen:Y(w.selectors.buttons.fullscreen),settings:Y(w.selectors.buttons.settings),pip:Y(w.selectors.buttons.pip)},Ue.buttons.mute=Y(w.selectors.buttons.mute),Ue.buttons.captions=Y(w.selectors.buttons.captions),Ue.progress={container:Y(w.selectors.progress.container)},Ue.progress.buffer=function(){var e=Y(w.selectors.progress.buffer);return{bar:e,text:P.htmlElement(e)&&e.getElementsByTagName("span")[0]}}(),Ue.progress.played=Y(w.selectors.progress.played),Ue.progress.tooltip=Ue.progress.container&&Ue.progress.container.querySelector("."+w.classes.tooltip),Ue.volume={input:Y(w.selectors.volume.input),display:Y(w.selectors.volume.display)},Ue.duration=Y(w.selectors.duration),Ue.currentTime=Y(w.selectors.currentTime),Ue.seekTime=W(w.selectors.seekTime),!0}catch(e){return $e("It looks like there is a problem with your controls HTML",e),$(!0),!1}}function K(){p(Ue.container,w.selectors.container.replace(".",""),Ue.supported.full)}function $(e){e&&r(w.types.html5,Ue.type)?Ue.media.setAttribute("controls",""):Ue.media.removeAttribute("controls")}function G(e){var t=w.i18n.play;if(P.string(w.title)&&w.title.length&&(t+=", "+w.title,Ue.container.setAttribute("aria-label",w.title)),Ue.supported.full&&Ue.buttons.play)for(var n=Ue.buttons.play.length-1;n>=0;n--)Ue.buttons.play[n].setAttribute("aria-label",t);P.htmlElement(e)&&e.setAttribute("title",w.i18n.frameTitle.replace("{title}",w.title))}function Q(){var t=null;Ue.storage={},M.storage&&w.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(w.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Z({volume:parseFloat(t)}):Ue.storage=JSON.parse(t)))}function Z(t){M.storage&&w.storage.enabled&&(x(Ue.storage,t),e.localStorage.setItem(w.storage.key,JSON.stringify(Ue.storage)))}function ee(){if(!Ue.media)return void $e("No media element found!");if(Ue.supported.full&&(p(Ue.container,w.classes.type.replace("{0}",Ue.type),!0),r(w.types.embed,Ue.type)&&p(Ue.container,w.classes.type.replace("{0}","video"),!0),p(Ue.container,w.classes.pip.enabled,M.pip),p(Ue.container,w.classes.stopped,w.autoplay),p(Ue.ontainer,w.classes.isIos,Ue.browser.isIos),p(Ue.container,w.classes.isTouch,Ue.browser.isTouch),"video"===Ue.type)){var e=t.createElement("div");e.setAttribute("class",w.classes.videoWrapper),i(Ue.media,e),Ue.videoContainer=e}r(w.types.embed,Ue.type)&&te()}function te(){for(var n=t.createElement("div"),r=Ue.embedId,s=Ue.type+"-"+Math.floor(1e4*Math.random()),i=W('[id^="'+Ue.type+'-"]'),l=i.length-1;l>=0;l--)o(i[l]);if(p(Ue.media,w.classes.videoWrapper,!0),p(Ue.media,w.classes.embedWrapper,!0),"youtube"===Ue.type)Ue.media.appendChild(n),n.setAttribute("id",s),P.object(e.YT)?ae(r,n):(a(w.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){ae(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Ue.type)if(Ue.supported.full?Ue.media.appendChild(n):n=Ue.media,n.setAttribute("id",s),P.object(e.Vimeo))re(r,n);else{a(w.urls.vimeo.api);var c=e.setInterval(function(){P.object(e.Vimeo)&&(e.clearInterval(c),re(r,n))},50)}else if("soundcloud"===Ue.type){var d=t.createElement("iframe");d.loaded=!1,g(d,"load",function(){d.loaded=!0}),u(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:s}),n.appendChild(d),Ue.media.appendChild(n),e.SC||a(w.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(m),se.call(d))},50)}}function ne(){Ue.supported.full&&(Ye(),Be()),G(Y("iframe"))}function ae(t,n){Ue.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:w.autoplay?1:0,controls:Ue.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:w.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){S(Ue.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Ue.media.play=function(){n.playVideo(),Ue.media.paused=!1},Ue.media.pause=function(){n.pauseVideo(),Ue.media.paused=!0},Ue.media.stop=function(){n.stopVideo(),Ue.media.paused=!0},Ue.media.duration=n.getDuration(),Ue.media.paused=!0,Ue.media.currentTime=0,Ue.media.muted=n.isMuted(),w.title=n.getVideoData().title,Ue.supported.full&&Ue.media.querySelector("iframe").setAttribute("tabindex","-1"),ne(),S(Ue.media,"timeupdate"),S(Ue.media,"durationchange"),e.clearInterval(ze.buffering),ze.buffering=e.setInterval(function(){Ue.media.buffered=n.getVideoLoadedFraction(),(null===Ue.media.lastBuffered||Ue.media.lastBuffered=w.speeds.length&&(n=0),e=w.speeds[n]}else e=w.defaultSpeed}w.currentSpeed=e,Ue.media.playbackRate=e,Z({speed:e})}function pe(e){var t=0,n=Ue.media.paused,a=me();P.number(e)?t=e:P.event(e)&&r(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Pe(t);try{Ue.media.currentTime=t.toFixed(4)}catch(e){}if(r(w.types.embed,Ue.type)){switch(Ue.type){case"youtube":Ue.embed.seekTo(t);break;case"vimeo":Ue.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Ue.embed.seekTo(1e3*t)}n&&oe(),S(Ue.media,"timeupdate"),Ue.media.seeking=!0}Ke("Seeking to "+Ue.media.currentTime+" seconds"),D(t)}function me(){var e=parseInt(w.duration),t=0;return null===Ue.media.duration||isNaN(Ue.media.duration)||(t=Ue.media.duration),isNaN(e)?t:e}function fe(){p(Ue.container,w.classes.playing,!Ue.media.paused),p(Ue.container,w.classes.stopped,Ue.media.paused),Oe(Ue.media.paused)}function ye(){F={x:e.pageXOffset||0,y:e.pageYOffset||0}}function be(){e.scrollTo(F.x,F.y)}function ge(e){var n=M.fullscreen;if(n){if(!e||e.type!==A.eventType)return A.isFullScreen(Ue.container)?A.cancelFullScreen():(ye(),A.requestFullScreen(Ue.container)),void(Ue.isFullscreen=A.isFullScreen(Ue.container));Ue.isFullscreen=A.isFullScreen(Ue.container)}else Ue.isFullscreen=!Ue.isFullscreen,t.body.style.overflow=Ue.isFullscreen?"hidden":"";p(Ue.container,w.classes.fullscreen.active,Ue.isFullscreen),X(Ue.isFullscreen),Ue.buttons&&Ue.buttons.fullscreen&&_(Ue.buttons.fullscreen,Ue.isFullscreen),S(Ue.container,Ue.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Ue.isFullscreen&&n&&be()}function ve(e){if(P.boolean(e)||(e=!Ue.media.muted),_(Ue.buttons.mute,e),Ue.media.muted=e,0===Ue.media.volume&&he(w.volume),r(w.types.embed,Ue.type)){switch(Ue.type){case"youtube":Ue.embed[Ue.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Ue.embed.setVolume(Ue.media.muted?0:parseFloat(w.volume/w.volumeMax))}S(Ue.media,"volumechange")}}function he(e){var t=w.volumeMax,n=w.volumeMin;if(P.undefined(e)&&(e=Ue.storage.volume),(null===e||isNaN(e))&&(e=w.volume),e>t&&(e=t),e0&&ve()}function _e(e){var t=Ue.media.muted?0:Ue.media.volume*w.volumeMax;P.number(e)||(e=w.volumeStep),he(t+e)}function ke(e){var t=Ue.media.muted?0:Ue.media.volume*w.volumeMax;P.number(e)||(e=w.volumeStep),he(t-e)}function xe(){var e=Ue.media.muted?0:Ue.media.volume*w.volumeMax;Ue.supported.full&&(Ue.volume.input&&(Ue.volume.input.value=e),Ue.volume.display&&(Ue.volume.display.value=e)),Z({volume:e}),p(Ue.container,w.classes.muted,0===e),Ue.supported.full&&Ue.buttons.mute&&_(Ue.buttons.mute,0===e)}function we(e){Ue.supported.full&&Ue.buttons.captions&&(P.boolean(e)||(e=Ue.container.className.indexOf(w.classes.captions.active)===-1),Ue.captionsEnabled=e,_(Ue.buttons.captions,Ue.captionsEnabled),p(Ue.container,w.classes.captions.active,Ue.captionsEnabled),S(Ue.container,Ue.captionsEnabled?"captionsenabled":"captionsdisabled",!0),Z({captionsEnabled:Ue.captionsEnabled}))}function Te(e){w.captions.selectedIndex=e,R(),V()}function Ee(e){var t="waiting"===e.type;clearTimeout(ze.loading),ze.loading=setTimeout(function(){p(Ue.container,w.classes.loading,t),Oe(t)},t?250:0)}function Se(e){if(Ue.supported.full){var t=Ue.progress.played,n=0,a=me();if(e)switch(e.type){case"timeupdate":case"seeking":if(Ue.controls.pressed)return;n=k(Ue.media.currentTime,a),"timeupdate"===e.type&&Ue.buttons.seek&&(Ue.buttons.seek.value=n);break;case"playing":case"progress":t=Ue.progress.buffer,n=function(){var e=Ue.media.buffered;return e&&e.length?k(e.end(0),a):P.number(e)?100*e:0}()}Ce(t,n)}}function Ce(e,t){if(Ue.supported.full){if(P.undefined(t)&&(t=0),P.undefined(e)){if(!Ue.progress||!Ue.progress.buffer)return;e=Ue.progress.buffer}P.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ae(e,t){if(t){isNaN(e)&&(e=0),Ue.secs=parseInt(e%60),Ue.mins=parseInt(e/60%60),Ue.hours=parseInt(e/60/60%60);var n=parseInt(me()/60/60%60)>0;Ue.secs=("0"+Ue.secs).slice(-2),Ue.mins=("0"+Ue.mins).slice(-2),t.innerHTML=(n?Ue.hours+":":"")+Ue.mins+":"+Ue.secs}}function Fe(){if(Ue.supported.full){var e=me()||0;!Ue.duration&&w.displayDuration&&Ue.media.paused&&Ae(e,Ue.currentTime),Ue.duration&&Ae(e,Ue.duration),Me()}}function Ie(e){Ae(Ue.media.currentTime,Ue.currentTime),e&&"timeupdate"===e.type&&Ue.media.seeking||Se(e)}function Pe(e){P.number(e)||(e=0);var t=me(),n=k(e,t);Ue.progress&&Ue.progress.played&&(Ue.progress.played.value=n),Ue.buttons&&Ue.buttons.seek&&(Ue.buttons.seek.value=n)}function Me(e){var t=me();if(w.tooltips.seek&&Ue.progress.container&&0!==t){var n=Ue.progress.container.getBoundingClientRect(),a=0,s=w.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Ue.progress.tooltip,s))return;a=Ue.progress.tooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Ae(t/100*a,Ue.progress.tooltip),Ue.progress.tooltip.style.left=a+"%",e&&r(["mouseenter","mouseleave"],e.type)&&p(Ue.progress.tooltip,s,"mouseenter"===e.type)}}function Ne(e){P.undefined(e)&&(e=Ue.storage.speed||w.defaultSpeed),de(e)}function Oe(t){if(w.hideControls&&"audio"!==Ue.type){var n=0,a=!1,s=t,i=m(Ue.container,w.classes.loading);if(P.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,s=r(["mousemove","touchstart","mouseenter","focus"],t.type),r(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=m(Ue.container,w.classes.hideControls)),e.clearTimeout(ze.hover),s||Ue.media.paused||i){if(p(Ue.container,w.classes.hideControls,!1),Ue.media.paused||i)return;Ue.browser.isTouch&&(n=3e3)}s&&Ue.media.paused||(ze.hover=e.setTimeout(function(){(!Ue.controls.pressed&&!Ue.controls.hover||a)&&p(Ue.container,w.classes.hideControls,!0)},n))}}function Le(e){if(!P.undefined(e))return void qe(e);var t;switch(Ue.type){case"youtube":t=Ue.embed.getVideoUrl();break;case"vimeo":Ue.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Ue.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Ue.media.currentSrc}return t||""}function qe(e){function n(){if(Ue.embed=null,o(Ue.media),"video"===Ue.type&&Ue.videoContainer&&o(Ue.videoContainer),Ue.container&&Ue.container.removeAttribute("class"),"type"in e&&(Ue.type=e.type,"video"===Ue.type)){var n=e.sources[0];"type"in n&&r(w.types.embed,n.type)&&(Ue.type=n.type)}switch(Ue.supported=E(Ue.type),Ue.type){case"video":Ue.media=t.createElement("video");break;case"audio":Ue.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Ue.media=t.createElement("div"),Ue.embedId=e.sources[0].src}l(Ue.container,Ue.media),P.boolean(e.autoplay)&&(w.autoplay=e.autoplay),r(w.types.html5,Ue.type)&&(w.crossorigin&&Ue.media.setAttribute("crossorigin",""),w.autoplay&&Ue.media.setAttribute("autoplay",""),"poster"in e&&Ue.media.setAttribute("poster",e.poster),w.loop&&Ue.media.setAttribute("loop","")),p(Ue.container,w.classes.fullscreen.active,Ue.isFullscreen),p(Ue.container,w.classes.captions.active,Ue.captionsEnabled),K(),r(w.types.html5,Ue.type)&&U("source",e.sources),ee(), +r(w.types.html5,Ue.type)&&("tracks"in e&&U("track",e.tracks),Ue.media.load()),(r(w.types.html5,Ue.type)||r(w.types.embed,Ue.type)&&!Ue.supported.full)&&(Ye(),Be()),w.title=e.title,G()}return P.object(e)&&"sources"in e&&e.sources.length?(p(Ue.container,w.classes.ready,!1),oe(),Pe(),Ce(),De(),void He(n,!1)):void $e("Invalid source format")}function je(e){"video"===Ue.type&&Ue.media.setAttribute("poster",e)}function Ve(){function n(){var e=le(),t=Ue.buttons[e?"play":"pause"],n=Ue.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,w.classes.tabFocus);setTimeout(function(){n.focus(),a&&(p(t,w.classes.tabFocus,!1),p(n,w.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function s(e){return e.keyCode?e.keyCode:e.which}function i(e){for(var t in Ue.buttons){var n=Ue.buttons[t];if(P.nodeList(n))for(var a=0;a0)&&(t?ke(n):_e(n)),(e.deltaY>0||e.deltaX<0)&&(t?_e(n):ke(n))})}function Re(){if(g(Ue.media,"timeupdate seeking",Ie),g(Ue.media,"timeupdate",D),g(Ue.media,"durationchange loadedmetadata",Fe),g(Ue.media,"ended",function(){"video"===Ue.type&&w.showPosterOnEnd&&("video"===Ue.type&&R(),pe(),Ue.media.load())}),g(Ue.media,"progress playing",Se),g(Ue.media,"volumechange",xe),g(Ue.media,"play pause ended",fe),g(Ue.media,"waiting canplay seeked",Ee),w.clickToPlay&&"audio"!==Ue.type){var e=Y("."+w.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){w.hideControls&&Ue.browser.isTouch&&!Ue.media.paused||(Ue.media.paused?ie():Ue.media.ended?(pe(),ie()):oe())})}w.disableContextMenu&&g(Ue.media,"contextmenu",function(e){e.preventDefault()}),g(Ue.media,w.events.concat(["keyup","keydown"]).join(" "),function(e){S(Ue.container,e.type,!0)})}function De(){if(r(w.types.html5,Ue.type)){for(var e=Ue.media.querySelectorAll("source"),t=0;t \ No newline at end of file + \ No newline at end of file diff --git a/src/js/plyr.js b/src/js/plyr.js index 7eb72067..48ee8e63 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -78,7 +78,9 @@ mute: '[data-plyr="mute"]', captions: '[data-plyr="captions"]', fullscreen: '[data-plyr="fullscreen"]', - settings: '[data-plyr="settings"]' + settings: '[data-plyr="settings"]', + pip: '[data-plyr="pip"]', + airplay: '[data-plyr="airplay"]' }, volume: { input: '[data-plyr="volume"]', @@ -136,7 +138,7 @@ enabled: true, key: 'plyr' }, - controls: ['play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'settings', 'fullscreen'], + controls: ['play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'settings', 'pip', 'airplay', 'fullscreen'], i18n: { restart: 'Restart', rewind: 'Rewind {seektime} secs', @@ -677,9 +679,15 @@ })(), // Picture-in-picture support // Safari only currently - pip: function(plyr) { - return _is.function(plyr.media.webkitSetPresentationMode); - }, + pip: (function() { + var video = document.createElement('video'); + return _is.function(video.webkitSetPresentationMode); + })(), + // Airplay support + // Safari only currently + airplay: (function() { + return _is.function(window.WebKitPlaybackTargetAvailabilityEvent); + })(), // Check for mime type support against a player instance // Credits: http://diveintohtml5.info/everything.html // Related: http://www.leanbackplyr.com/test/h5mt.html @@ -979,6 +987,27 @@ ); } + // Picture in picture button + console.log(_support.pip); + if (_inArray(config.controls, 'pip') && _support.pip) { + html.push( + '' + ); + } + + // Airplay button + if (_inArray(config.controls, 'airplay') && _support.airplay) { + html.push( + '' + ); + } + // Toggle fullscreen button if (_inArray(config.controls, 'fullscreen')) { html.push( @@ -1447,52 +1476,61 @@ // Find the UI controls and store references function _findElements() { try { - plyr.controls = _getElement(config.selectors.controls.wrapper); + plyr.controls = _getElement(config.selectors.controls.wrapper); // Buttons - plyr.buttons = {}; - plyr.buttons.seek = _getElement(config.selectors.buttons.seek); - plyr.buttons.play = _getElements(config.selectors.buttons.play); - plyr.buttons.pause = _getElement(config.selectors.buttons.pause); - plyr.buttons.restart = _getElement(config.selectors.buttons.restart); - plyr.buttons.rewind = _getElement(config.selectors.buttons.rewind); - plyr.buttons.forward = _getElement(config.selectors.buttons.forward); - plyr.buttons.fullscreen = _getElement(config.selectors.buttons.fullscreen); - plyr.buttons.settings = _getElement(config.selectors.buttons.settings); + plyr.buttons = { + seek: _getElement(config.selectors.buttons.seek), + play: _getElements(config.selectors.buttons.play), + pause: _getElement(config.selectors.buttons.pause), + restart: _getElement(config.selectors.buttons.restart), + rewind: _getElement(config.selectors.buttons.rewind), + forward: _getElement(config.selectors.buttons.forward), + fullscreen: _getElement(config.selectors.buttons.fullscreen), + settings: _getElement(config.selectors.buttons.settings), + pip: _getElement(config.selectors.buttons.pip) + }; // Inputs - plyr.buttons.mute = _getElement(config.selectors.buttons.mute); - plyr.buttons.captions = _getElement(config.selectors.buttons.captions); + plyr.buttons.mute = _getElement(config.selectors.buttons.mute); + plyr.buttons.captions = _getElement(config.selectors.buttons.captions); // Progress - plyr.progress = {}; - plyr.progress.container = _getElement(config.selectors.progress.container); + plyr.progress = { + container: _getElement(config.selectors.progress.container) + }; // Progress - Buffering - plyr.progress.buffer = {}; - plyr.progress.buffer.bar = _getElement(config.selectors.progress.buffer); - plyr.progress.buffer.text = plyr.progress.buffer.bar && plyr.progress.buffer.bar.getElementsByTagName('span')[0]; + plyr.progress.buffer = (function() { + var bar = _getElement(config.selectors.progress.buffer); + + return { + bar: bar, + text: _is.htmlElement(bar) && bar.getElementsByTagName('span')[0] + }; + })(); // Progress - Played - plyr.progress.played = _getElement(config.selectors.progress.played); + plyr.progress.played = _getElement(config.selectors.progress.played); // Seek tooltip - plyr.progress.tooltip = plyr.progress.container && plyr.progress.container.querySelector('.' + config.classes.tooltip); + plyr.progress.tooltip = plyr.progress.container && plyr.progress.container.querySelector('.' + config.classes.tooltip); // Volume - plyr.volume = {}; - plyr.volume.input = _getElement(config.selectors.volume.input); - plyr.volume.display = _getElement(config.selectors.volume.display); + plyr.volume = { + input: _getElement(config.selectors.volume.input), + display: _getElement(config.selectors.volume.display) + }; // Timing - plyr.duration = _getElement(config.selectors.duration); - plyr.currentTime = _getElement(config.selectors.currentTime); - plyr.seekTime = _getElements(config.selectors.seekTime); + plyr.duration = _getElement(config.selectors.duration); + plyr.currentTime = _getElement(config.selectors.currentTime); + plyr.seekTime = _getElements(config.selectors.seekTime); return true; } catch(e) { - _warn('It looks like there is a problem with your controls HTML'); + _warn('It looks like there is a problem with your controls HTML', e); // Restore native video controls _toggleNativeControls(true); @@ -1606,7 +1644,7 @@ } // Check for picture-in-picture support - _toggleClass(plyr.container, config.classes.pip.enabled, _support.pip(plyr)); + _toggleClass(plyr.container, config.classes.pip.enabled, _support.pip); // If there's no autoplay attribute, assume the video is stopped and add state class _toggleClass(plyr.container, config.classes.stopped, config.autoplay); @@ -3276,6 +3314,13 @@ } }); + // Picture in picture + _on(plyr.buttons.pip, 'click', function() { + //if () + + plyr.media.webkitSetPresentationMode(plyr.media.webkitPresentationMode === 'optimized' ? 'inline' : 'optimized'); + }); + // Seek tooltip _on(plyr.progress.container, 'mouseenter mouseleave mousemove', _updateSeekTooltip); diff --git a/src/sprite/plyr-airplay.svg b/src/sprite/plyr-airplay.svg new file mode 100644 index 00000000..45c55414 --- /dev/null +++ b/src/sprite/plyr-airplay.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/sprite/plyr-pip.svg b/src/sprite/plyr-pip.svg new file mode 100644 index 00000000..d841fce5 --- /dev/null +++ b/src/sprite/plyr-pip.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file