diff --git a/changelog.md b/changelog.md index 603bb594a..9d75aa8c2 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # Changelog +# v2.0.2 +- Added 'global' keyboard shortcut option + # v2.0.1 - Version bump for NPM diff --git a/dist/plyr.js b/dist/plyr.js index 905c5fb14..abf3ba5fc 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(null,function(){t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,r,s=navigator.userAgent,a=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,p=!1;return-1!==navigator.appVersion.indexOf("Windows NT")&&-1!==navigator.appVersion.indexOf("rv:11")?(l=!0,a="IE",o="11"):-1!==(n=s.indexOf("MSIE"))?(l=!0,a="IE",o=s.substring(n+5)):-1!==(n=s.indexOf("Chrome"))?(c=!0,a="Chrome",o=s.substring(n+7)):-1!==(n=s.indexOf("Safari"))?(p=!0,a="Safari",o=s.substring(n+7),-1!==(n=s.indexOf("Version"))&&(o=s.substring(n+8))):-1!==(n=s.indexOf("Firefox"))?(u=!0,a="Firefox",o=s.substring(n+8)):(e=s.lastIndexOf(" ")+1)<(n=s.lastIndexOf("/"))&&(a=s.substring(e,n),o=s.substring(n+1),a.toLowerCase()===a.toUpperCase()&&(a=navigator.appName)),-1!==(r=o.indexOf(";"))&&(o=o.substring(0,r)),-1!==(r=o.indexOf(" "))&&(o=o.substring(0,r)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:a,version:i,isIE:l,isFirefox:u,isChrome:c,isSafari:p,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function r(e,t){var n=e.media;if("video"===e.type)switch(t){case"video/webm":return!(!n.canPlayType||!n.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,""));case"video/mp4":return!(!n.canPlayType||!n.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,""));case"video/ogg":return!(!n.canPlayType||!n.canPlayType('video/ogg; codecs="theora"').replace(/no/,""))}else if("audio"===e.type)switch(t){case"audio/mpeg":return!(!n.canPlayType||!n.canPlayType("audio/mpeg;").replace(/no/,""));case"audio/ogg":return!(!n.canPlayType||!n.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,""));case"audio/wav":return!(!n.canPlayType||!n.canPlayType('audio/wav; codecs="1"').replace(/no/,""))}return!1}function s(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var r=t.getElementsByTagName("script")[0];r.parentNode.insertBefore(n,r)}}function a(e,t){return Array.prototype.indexOf&&-1!==e.indexOf(t)}function o(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function i(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],a=s.parentNode,o=s.nextSibling;return r.appendChild(s),o?a.insertBefore(r,o):a.appendChild(r),r}}function l(e){e&&e.parentNode.removeChild(e)}function u(e,t){e.insertBefore(t,e.firstChild)}function c(e,t){for(var n in t)e.setAttribute(n,P["boolean"](t[n])&&t[n]?"":t[n])}function p(e,n,r){var s=t.createElement(e);c(s,r),u(n,s)}function d(e){return e.replace(".","")}function m(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function f(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function y(e,n){var r=Element.prototype,s=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return s.call(e,n)}function b(e,t,n,r,s){g(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},s)}function v(e,t,n,r,s){var a=t.split(" ");if(P["boolean"](s)||(s=!1),e instanceof NodeList)for(var o=0;or;r++){var s=e[r];for(var a in s)s[a]&&s[a].constructor&&s[a].constructor===Object?(t[a]=t[a]||{},x(t[a],s[a])):t[a]=s[a]}return t}}function T(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},n="webkit o ms khtml".split(" ");if(P.undefined(t.cancelFullScreen))for(var r=0,s=n.length;s>r;r++){if(e.prefix=n[r],!P.undefined(t[e.prefix+"CancelFullScreen"])){e.supportsFullScreen=!0;break}if(!P.undefined(t.msExitFullscreen)&&t.msFullscreenEnabled){e.prefix="ms",e.supportsFullScreen=!0;break}}else e.supportsFullScreen=!0;return e.supportsFullScreen&&(e.fullScreenEventName="ms"===e.prefix?"MSFullscreenChange":e.prefix+"fullscreenchange",e.isFullScreen=function(e){switch(P.undefined(e)&&(e=t.body),this.prefix){case"":return t.fullscreenElement===e;default:return t[this.prefix+"FullscreenElement"]===e}},e.requestFullScreen=function(e){return P.undefined(e)&&(e=t.body),""===this.prefix?e.requestFullScreen():e[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]()},e.cancelFullScreen=function(){return""===this.prefix?t.cancelFullScreen():t[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]()},e.element=function(){return""===this.prefix?t.fullscreenElement:t[this.prefix+"FullscreenElement"]}),e}function S(y,v){function S(e,t,n,r){h(e,t,n,x({},r,{plyr:De}))}function C(t,n){v.debug&&e.console&&(n=Array.prototype.slice.call(n),P.string(v.logPrefix)&&v.logPrefix.length&&n.unshift(v.logPrefix),console[t].apply(console,n))}function F(){return{url:v.iconUrl,absolute:0===v.iconUrl.indexOf("http")||He.browser.isIE}}function L(){var e=[],t=F(),n=(t.absolute?"":t.url)+"#"+v.iconPrefix;return a(v.controls,"play-large")&&e.push('"),e.push('
'),a(v.controls,"restart")&&e.push('"),a(v.controls,"rewind")&&e.push('"),a(v.controls,"play")&&e.push('",'"),a(v.controls,"fast-forward")&&e.push('"),a(v.controls,"progress")&&(e.push('','','','','',"0% "+v.i18n.buffered,""),v.tooltips.seek&&e.push('00:00'),e.push("")),a(v.controls,"current-time")&&e.push('',''+v.i18n.currentTime+"",'00:00',""),a(v.controls,"duration")&&e.push('',''+v.i18n.duration+"",'00:00',""),a(v.controls,"mute")&&e.push('"),a(v.controls,"volume")&&e.push('','",'','',""),a(v.controls,"captions")&&e.push('"),a(v.controls,"fullscreen")&&e.push('"),e.push("
"),e.join("")}function O(){if(He.supported.full&&("audio"!==He.type||v.fullscreen.allowAudio)&&v.fullscreen.enabled){var e=A.supportsFullScreen;e||v.fullscreen.fallback&&!W()?(Be((e?"Native":"Fallback")+" fullscreen enabled"),m(He.container,v.classes.fullscreen.enabled,!0)):Be("Fullscreen not supported and fallback disabled"),He.buttons&&He.buttons.fullscreen&&k(He.buttons.fullscreen,!1),Y()}}function j(){if("video"===He.type){H(v.selectors.captions)||He.videoContainer.insertAdjacentHTML("afterbegin",'
'),He.usingTextTracks=!1,He.media.textTracks&&(He.usingTextTracks=!0);for(var e,t="",n=He.media.childNodes,r=0;r=10||He.browser.isFirefox&&He.browser.version>=31)&&(Be("Detected browser with known TextTrack issues - using manual fallback"),He.usingTextTracks=!1),He.usingTextTracks){Be("TextTracks supported");for(var o=0;o ");for(var r=0;rHe.captions.length-1){He.subcount=He.captions.length-1;break}He.media.currentTime.toFixed(1)>=n(He.captions[He.subcount][0])&&He.media.currentTime.toFixed(1)<=r(He.captions[He.subcount][0])?(He.currentCaption=He.captions[He.subcount][1],V(He.currentCaption)):V()}}function R(){if(He.buttons.captions){m(He.container,v.classes.captions.enabled,!0);var e=He.storage.captionsEnabled;P["boolean"](e)||(e=v.captions.defaultActive),e&&(m(He.container,v.classes.captions.active,!0),k(He.buttons.captions,!0))}}function D(e){return He.container.querySelectorAll(e)}function H(e){return D(e)[0]}function W(){try{return e.self!==e.top}catch(t){return!0}}function Y(){function e(e){9===e.which&&He.isFullscreen&&(e.target!==r||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),r.focus()):(e.preventDefault(),n.focus()))}var t=D("input:not([disabled]), button:not([disabled])"),n=t[0],r=t[t.length-1];g(He.container,"keydown",e)}function B(e,t){if(P.string(t))p(e,He.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)p(e,He.media,t[n])}function X(){if(v.loadSprite){var e=F();e.absolute?(Be("AJAX loading absolute SVG sprite"+(He.browser.isIE?" (due to IE)":"")),_(e.url,"sprite-plyr")):Be("Sprite will be used as external resource directly")}var n=v.html;Be("Injecting custom controls"),n||(n=L()),n=o(n,"{seektime}",v.seekTime),n=o(n,"{id}",Math.floor(1e4*Math.random()));var r;if(P.string(v.selectors.controls.container)&&(r=t.querySelector(v.selectors.controls.container)),P.htmlElement(r)||(r=He.container),r.insertAdjacentHTML("beforeend",n),v.tooltips.controls)for(var s=D([v.selectors.controls.wrapper," ",v.selectors.labels," .",v.classes.hidden].join("")),a=s.length-1;a>=0;a--){var i=s[a];m(i,v.classes.hidden,!1),m(i,v.classes.tooltip,!0)}}function U(){try{return He.controls=H(v.selectors.controls.wrapper),He.buttons={},He.buttons.seek=H(v.selectors.buttons.seek),He.buttons.play=D(v.selectors.buttons.play),He.buttons.pause=H(v.selectors.buttons.pause),He.buttons.restart=H(v.selectors.buttons.restart),He.buttons.rewind=H(v.selectors.buttons.rewind),He.buttons.forward=H(v.selectors.buttons.forward),He.buttons.fullscreen=H(v.selectors.buttons.fullscreen),He.buttons.mute=H(v.selectors.buttons.mute),He.buttons.captions=H(v.selectors.buttons.captions),He.progress={},He.progress.container=H(v.selectors.progress.container),He.progress.buffer={},He.progress.buffer.bar=H(v.selectors.progress.buffer),He.progress.buffer.text=He.progress.buffer.bar&&He.progress.buffer.bar.getElementsByTagName("span")[0],He.progress.played=H(v.selectors.progress.played),He.progress.tooltip=He.progress.container&&He.progress.container.querySelector("."+v.classes.tooltip),He.volume={},He.volume.input=H(v.selectors.volume.input),He.volume.display=H(v.selectors.volume.display),He.duration=H(v.selectors.duration),He.currentTime=H(v.selectors.currentTime),He.seekTime=D(v.selectors.seekTime),!0}catch(e){return Xe("It looks like there is a problem with your controls HTML"),$(!0),!1}}function J(){m(He.container,v.selectors.container.replace(".",""),He.supported.full)}function $(e){e&&a(v.types.html5,He.type)?He.media.setAttribute("controls",""):He.media.removeAttribute("controls")}function G(e){var t=v.i18n.play;if(P.string(v.title)&&v.title.length&&(t+=", "+v.title,He.container.setAttribute("aria-label",v.title)),He.supported.full&&He.buttons.play)for(var n=He.buttons.play.length-1;n>=0;n--)He.buttons.play[n].setAttribute("aria-label",t);P.htmlElement(e)&&e.setAttribute("title",v.i18n.frameTitle.replace("{title}",v.title))}function K(){var t=null;He.storage={},M.supported&&v.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(v.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?z({volume:parseFloat(t)}):He.storage=JSON.parse(t)))}function z(t){M.supported&&v.storage.enabled&&(x(He.storage,t),e.localStorage.setItem(v.storage.key,JSON.stringify(He.storage)))}function Q(){if(!He.media)return void Xe("No media element found!");if(He.supported.full&&(m(He.container,v.classes.type.replace("{0}",He.type),!0),a(v.types.embed,He.type)&&m(He.container,v.classes.type.replace("{0}","video"),!0),m(He.container,v.classes.stopped,v.autoplay),m(He.ontainer,v.classes.isIos,He.browser.isIos),m(He.container,v.classes.isTouch,He.browser.isTouch),"video"===He.type)){var e=t.createElement("div");e.setAttribute("class",v.classes.videoWrapper),i(He.media,e),He.videoContainer=e}a(v.types.embed,He.type)&&Z()}function Z(){for(var n=t.createElement("div"),r=He.embedId,a=He.type+"-"+Math.floor(1e4*Math.random()),o=D('[id^="'+He.type+'-"]'),i=o.length-1;i>=0;i--)l(o[i]);if(m(He.media,v.classes.videoWrapper,!0),m(He.media,v.classes.embedWrapper,!0),"youtube"===He.type)He.media.appendChild(n),n.setAttribute("id",a),P.object(e.YT)?te(r,n):(s(v.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){te(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===He.type)if(He.supported.full?He.media.appendChild(n):n=He.media,n.setAttribute("id",a),P.object(e.Vimeo))ne(r,n);else{s(v.urls.vimeo.api);var u=e.setInterval(function(){P.object(e.Vimeo)&&(e.clearInterval(u),ne(r,n))},50)}else if("soundcloud"===He.type){var p=t.createElement("iframe");p.loaded=!1,g(p,"load",function(){p.loaded=!0}),c(p,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:a}),n.appendChild(p),He.media.appendChild(n),e.SC||s(v.urls.soundcloud.api);var d=e.setInterval(function(){e.SC&&p.loaded&&(e.clearInterval(d),re.call(p))},50)}}function ee(){He.supported.full&&(qe(),Re()),G(H("iframe"))}function te(t,n){He.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:v.autoplay?1:0,controls:He.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:v.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){S(He.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;He.media.play=function(){n.playVideo(),He.media.paused=!1},He.media.pause=function(){n.pauseVideo(),He.media.paused=!0},He.media.stop=function(){n.stopVideo(),He.media.paused=!0},He.media.duration=n.getDuration(),He.media.paused=!0,He.media.currentTime=0,He.media.muted=n.isMuted(),v.title=n.getVideoData().title,He.supported.full&&He.media.querySelector("iframe").setAttribute("tabindex","-1"),ee(),S(He.media,"timeupdate"),S(He.media,"durationchange"),e.clearInterval(We.buffering),We.buffering=e.setInterval(function(){He.media.buffered=n.getVideoLoadedFraction(),(null===He.media.lastBuffered||He.media.lastBufferedt?t=0:t>r&&(t=r),Ce(t);try{He.media.currentTime=t.toFixed(4)}catch(s){}if(a(v.types.embed,He.type)){switch(He.type){case"youtube":He.embed.seekTo(t);break;case"vimeo":He.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":He.embed.seekTo(1e3*t)}n&&ae(),S(He.media,"timeupdate"),He.media.seeking=!0}Be("Seeking to "+He.media.currentTime+" seconds"),q(t)}function ce(){var e=parseInt(v.duration),t=0;return null===He.media.duration||isNaN(He.media.duration)||(t=He.media.duration),isNaN(e)?t:e}function pe(){m(He.container,v.classes.playing,!He.media.paused),m(He.container,v.classes.stopped,He.media.paused),Ae(He.media.paused)}function de(){I={x:e.pageXOffset||0,y:e.pageYOffset||0}}function me(){e.scrollTo(I.x,I.y)}function fe(e){var n=A.supportsFullScreen;if(n){if(!e||e.type!==A.fullScreenEventName)return A.isFullScreen(He.container)?A.cancelFullScreen():(de(),A.requestFullScreen(He.container)),void(He.isFullscreen=A.isFullScreen(He.container));He.isFullscreen=A.isFullScreen(He.container)}else He.isFullscreen=!He.isFullscreen,t.body.style.overflow=He.isFullscreen?"hidden":"";m(He.container,v.classes.fullscreen.active,He.isFullscreen),Y(He.isFullscreen),He.buttons&&He.buttons.fullscreen&&k(He.buttons.fullscreen,He.isFullscreen),S(He.container,He.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!He.isFullscreen&&n&&me()}function ye(e){if(P["boolean"](e)||(e=!He.media.muted),k(He.buttons.mute,e),He.media.muted=e,0===He.media.volume&&be(v.volume),a(v.types.embed,He.type)){switch(He.type){case"youtube":He.embed[He.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":He.embed.setVolume(He.media.muted?0:parseFloat(v.volume/v.volumeMax))}S(He.media,"volumechange")}}function be(e){var t=v.volumeMax,n=v.volumeMin;if(P.undefined(e)&&(e=He.storage.volume),(null===e||isNaN(e))&&(e=v.volume),e>t&&(e=t),n>e&&(e=n),He.media.volume=parseFloat(e/t),He.volume.display&&(He.volume.display.value=e),a(v.types.embed,He.type)){switch(He.type){case"youtube":He.embed.setVolume(100*He.media.volume);break;case"vimeo":case"soundcloud":He.embed.setVolume(He.media.volume)}S(He.media,"volumechange")}He.media.muted&&e>0&&ye()}function ve(e){var t=He.media.muted?0:He.media.volume*v.volumeMax;P.number(e)||(e=v.volumeStep),be(t+e)}function ge(e){var t=He.media.muted?0:He.media.volume*v.volumeMax;P.number(e)||(e=v.volumeStep),be(t-e)}function he(){var e=He.media.muted?0:He.media.volume*v.volumeMax;He.supported.full&&(He.volume.input&&(He.volume.input.value=e),He.volume.display&&(He.volume.display.value=e)),z({volume:e}),m(He.container,v.classes.muted,0===e),He.supported.full&&He.buttons.mute&&k(He.buttons.mute,0===e)}function ke(e){He.supported.full&&He.buttons.captions&&(P["boolean"](e)||(e=-1===He.container.className.indexOf(v.classes.captions.active)),He.captionsEnabled=e,k(He.buttons.captions,He.captionsEnabled),m(He.container,v.classes.captions.active,He.captionsEnabled),S(He.container,He.captionsEnabled?"captionsenabled":"captionsdisabled",!0),z({captionsEnabled:He.captionsEnabled}))}function we(e){var t="waiting"===e.type;clearTimeout(We.loading),We.loading=setTimeout(function(){m(He.container,v.classes.loading,t),Ae(t)},t?250:0)}function xe(e){if(He.supported.full){var t=He.progress.played,n=0,r=ce();if(e)switch(e.type){case"timeupdate":case"seeking":if(He.controls.pressed)return;n=w(He.media.currentTime,r),"timeupdate"===e.type&&He.buttons.seek&&(He.buttons.seek.value=n);break;case"playing":case"progress":t=He.progress.buffer,n=function(){var e=He.media.buffered;return e&&e.length?w(e.end(0),r):P.number(e)?100*e:0}()}Te(t,n)}}function Te(e,t){if(He.supported.full){if(P.undefined(t)&&(t=0),P.undefined(e)){if(!He.progress||!He.progress.buffer)return;e=He.progress.buffer}P.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Se(e,t){if(t){isNaN(e)&&(e=0),He.secs=parseInt(e%60),He.mins=parseInt(e/60%60),He.hours=parseInt(e/60/60%60);var n=parseInt(ce()/60/60%60)>0;He.secs=("0"+He.secs).slice(-2),He.mins=("0"+He.mins).slice(-2),t.innerHTML=(n?He.hours+":":"")+He.mins+":"+He.secs}}function _e(){if(He.supported.full){var e=ce()||0;!He.duration&&v.displayDuration&&He.media.paused&&Se(e,He.currentTime),He.duration&&Se(e,He.duration),Fe()}}function Ee(e){Se(He.media.currentTime,He.currentTime),e&&"timeupdate"===e.type&&He.media.seeking||xe(e)}function Ce(e){P.number(e)||(e=0);var t=ce(),n=w(e,t);He.progress&&He.progress.played&&(He.progress.played.value=n),He.buttons&&He.buttons.seek&&(He.buttons.seek.value=n)}function Fe(e){var t=ce();if(v.tooltips.seek&&He.progress.container&&0!==t){var n=He.progress.container.getBoundingClientRect(),r=0,s=v.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!f(He.progress.tooltip,s))return;r=He.progress.tooltip.style.left.replace("%","")}0>r?r=0:r>100&&(r=100),Se(t/100*r,He.progress.tooltip),He.progress.tooltip.style.left=r+"%",e&&a(["mouseenter","mouseleave"],e.type)&&m(He.progress.tooltip,s,"mouseenter"===e.type)}}function Ae(t){if(v.hideControls&&"audio"!==He.type){var n=0,r=!1,s=t,o=f(He.container,v.classes.loading);if(P["boolean"](t)||(t&&t.type?(r="enterfullscreen"===t.type,s=a(["mousemove","touchstart","mouseenter","focus"],t.type),a(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=f(He.container,v.classes.hideControls)),e.clearTimeout(We.hover),s||He.media.paused||o){if(m(He.container,v.classes.hideControls,!1),He.media.paused||o)return;He.browser.isTouch&&(n=3e3)}s&&He.media.paused||(We.hover=e.setTimeout(function(){(!He.controls.pressed&&!He.controls.hover||r)&&m(He.container,v.classes.hideControls,!0)},n))}}function Ie(e){if(!P.undefined(e))return void Ne(e);var t;switch(He.type){case"youtube":t=He.embed.getVideoUrl();break;case"vimeo":He.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":He.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=He.media.currentSrc}return t||""}function Ne(e){function n(){if(He.embed=null,l(He.media),"video"===He.type&&He.videoContainer&&l(He.videoContainer),He.container&&He.container.removeAttribute("class"),"type"in e&&(He.type=e.type,"video"===He.type)){var n=e.sources[0];"type"in n&&a(v.types.embed,n.type)&&(He.type=n.type)}switch(He.supported=E(He.type),He.type){case"video":He.media=t.createElement("video");break;case"audio":He.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":He.media=t.createElement("div"),He.embedId=e.sources[0].src}u(He.container,He.media),P["boolean"](e.autoplay)&&(v.autoplay=e.autoplay),a(v.types.html5,He.type)&&(v.crossorigin&&He.media.setAttribute("crossorigin",""),v.autoplay&&He.media.setAttribute("autoplay",""),"poster"in e&&He.media.setAttribute("poster",e.poster),v.loop&&He.media.setAttribute("loop","")),m(He.container,v.classes.fullscreen.active,He.isFullscreen),m(He.container,v.classes.captions.active,He.captionsEnabled),J(),a(v.types.html5,He.type)&&B("source",e.sources),Q(),a(v.types.html5,He.type)&&("tracks"in e&&B("track",e.tracks),He.media.load()),(a(v.types.html5,He.type)||a(v.types.embed,He.type)&&!He.supported.full)&&(qe(),Re()),v.title=e.title,G()}return P.object(e)&&"sources"in e&&e.sources.length?(m(He.container,v.classes.ready,!1),ae(),Ce(),Te(),Oe(),void je(n,!1)):void Xe("Invalid source format")}function Pe(e){"video"===He.type&&He.media.setAttribute("poster",e)}function Me(){function n(){var e=oe(),t=He.buttons[e?"play":"pause"],n=He.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=f(t,v.classes.tabFocus);setTimeout(function(){n.focus(),r&&(m(t,v.classes.tabFocus,!1),m(n,v.classes.tabFocus,!0))},100)}}function r(){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 He.buttons){var n=He.buttons[t];if(P.nodeList(n))for(var r=0;r0)&&(t?ge(n):ve(n)),(e.deltaY>0||e.deltaX<0)&&(t?ve(n):ge(n))})}function Le(){if(g(He.media,"timeupdate seeking",Ee),g(He.media,"timeupdate",q),g(He.media,"durationchange loadedmetadata",_e),g(He.media,"ended",function(){"video"===He.type&&v.showPosterOnEnd&&("video"===He.type&&V(),ue(),He.media.load())}),g(He.media,"progress playing",xe),g(He.media,"volumechange",he),g(He.media,"play pause ended",pe),g(He.media,"waiting canplay seeked",we),v.clickToPlay&&"audio"!==He.type){var e=H("."+v.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){v.hideControls&&He.browser.isTouch&&!He.media.paused||(He.media.paused?se():He.media.ended?(ue(),se()):ae())})}v.disableContextMenu&&g(He.media,"contextmenu",function(e){e.preventDefault()}),g(He.media,v.events.concat(["keyup","keydown"]).join(" "),function(e){S(He.container,e.type,!0)})}function Oe(){if(a(v.types.html5,He.type)){for(var e=He.media.querySelectorAll("source"),t=0;t=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],a=s.parentNode,o=s.nextSibling;return r.appendChild(s),o?a.insertBefore(r,o):a.appendChild(r),r}}function l(e){e&&e.parentNode.removeChild(e)}function u(e,t){e.insertBefore(t,e.firstChild)}function c(e,t){for(var n in t)e.setAttribute(n,P["boolean"](t[n])&&t[n]?"":t[n])}function p(e,n,r){var s=t.createElement(e);c(s,r),u(n,s)}function d(e){return e.replace(".","")}function m(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function f(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function y(e,n){var r=Element.prototype,s=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return s.call(e,n)}function b(e,t,n,r,s){g(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},s)}function v(e,t,n,r,s){var a=t.split(" ");if(P["boolean"](s)||(s=!1),e instanceof NodeList)for(var o=0;or;r++){var s=e[r];for(var a in s)s[a]&&s[a].constructor&&s[a].constructor===Object?(t[a]=t[a]||{},x(t[a],s[a])):t[a]=s[a]}return t}}function T(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},n="webkit o ms khtml".split(" ");if(P.undefined(t.cancelFullScreen))for(var r=0,s=n.length;s>r;r++){if(e.prefix=n[r],!P.undefined(t[e.prefix+"CancelFullScreen"])){e.supportsFullScreen=!0;break}if(!P.undefined(t.msExitFullscreen)&&t.msFullscreenEnabled){e.prefix="ms",e.supportsFullScreen=!0;break}}else e.supportsFullScreen=!0;return e.supportsFullScreen&&(e.fullScreenEventName="ms"===e.prefix?"MSFullscreenChange":e.prefix+"fullscreenchange",e.isFullScreen=function(e){switch(P.undefined(e)&&(e=t.body),this.prefix){case"":return t.fullscreenElement===e;default:return t[this.prefix+"FullscreenElement"]===e}},e.requestFullScreen=function(e){return P.undefined(e)&&(e=t.body),""===this.prefix?e.requestFullScreen():e[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]()},e.cancelFullScreen=function(){return""===this.prefix?t.cancelFullScreen():t[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]()},e.element=function(){return""===this.prefix?t.fullscreenElement:t[this.prefix+"FullscreenElement"]}),e}function S(v,S){function C(e,t,n,r){h(e,t,n,x({},r,{plyr:We}))}function L(t,n){S.debug&&e.console&&(n=Array.prototype.slice.call(n),P.string(S.logPrefix)&&S.logPrefix.length&&n.unshift(S.logPrefix),console[t].apply(console,n))}function O(){return{url:S.iconUrl,absolute:0===S.iconUrl.indexOf("http")||Ye.browser.isIE}}function j(){var e=[],t=O(),n=(t.absolute?"":t.url)+"#"+S.iconPrefix;return a(S.controls,"play-large")&&e.push('"),e.push('
'),a(S.controls,"restart")&&e.push('"),a(S.controls,"rewind")&&e.push('"),a(S.controls,"play")&&e.push('",'"),a(S.controls,"fast-forward")&&e.push('"),a(S.controls,"progress")&&(e.push('','','','','',"0% "+S.i18n.buffered,""),S.tooltips.seek&&e.push('00:00'),e.push("")),a(S.controls,"current-time")&&e.push('',''+S.i18n.currentTime+"",'00:00',""),a(S.controls,"duration")&&e.push('',''+S.i18n.duration+"",'00:00',""),a(S.controls,"mute")&&e.push('"),a(S.controls,"volume")&&e.push('','",'','',""),a(S.controls,"captions")&&e.push('"),a(S.controls,"fullscreen")&&e.push('"),e.push("
"),e.join("")}function V(){if(Ye.supported.full&&("audio"!==Ye.type||S.fullscreen.allowAudio)&&S.fullscreen.enabled){var e=A.supportsFullScreen;e||S.fullscreen.fallback&&!B()?(Ue((e?"Native":"Fallback")+" fullscreen enabled"),m(Ye.container,S.classes.fullscreen.enabled,!0)):Ue("Fullscreen not supported and fallback disabled"),Ye.buttons&&Ye.buttons.fullscreen&&k(Ye.buttons.fullscreen,!1),X()}}function q(){if("video"===Ye.type){Y(S.selectors.captions)||Ye.videoContainer.insertAdjacentHTML("afterbegin",'
'),Ye.usingTextTracks=!1,Ye.media.textTracks&&(Ye.usingTextTracks=!0);for(var e,t="",n=Ye.media.childNodes,r=0;r=10||Ye.browser.isFirefox&&Ye.browser.version>=31)&&(Ue("Detected browser with known TextTrack issues - using manual fallback"),Ye.usingTextTracks=!1),Ye.usingTextTracks){Ue("TextTracks supported");for(var o=0;o ");for(var r=0;rYe.captions.length-1){Ye.subcount=Ye.captions.length-1;break}Ye.media.currentTime.toFixed(1)>=n(Ye.captions[Ye.subcount][0])&&Ye.media.currentTime.toFixed(1)<=r(Ye.captions[Ye.subcount][0])?(Ye.currentCaption=Ye.captions[Ye.subcount][1],R(Ye.currentCaption)):R()}}function H(){if(Ye.buttons.captions){m(Ye.container,S.classes.captions.enabled,!0);var e=Ye.storage.captionsEnabled;P["boolean"](e)||(e=S.captions.defaultActive),e&&(m(Ye.container,S.classes.captions.active,!0),k(Ye.buttons.captions,!0))}}function W(e){return Ye.container.querySelectorAll(e)}function Y(e){return W(e)[0]}function B(){try{return e.self!==e.top}catch(t){return!0}}function X(){function e(e){9===e.which&&Ye.isFullscreen&&(e.target!==r||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),r.focus()):(e.preventDefault(),n.focus()))}var t=W("input:not([disabled]), button:not([disabled])"),n=t[0],r=t[t.length-1];g(Ye.container,"keydown",e)}function U(e,t){if(P.string(t))p(e,Ye.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)p(e,Ye.media,t[n])}function J(){if(S.loadSprite){var e=O();e.absolute?(Ue("AJAX loading absolute SVG sprite"+(Ye.browser.isIE?" (due to IE)":"")),_(e.url,"sprite-plyr")):Ue("Sprite will be used as external resource directly")}var n=S.html;Ue("Injecting custom controls"),n||(n=j()),n=o(n,"{seektime}",S.seekTime),n=o(n,"{id}",Math.floor(1e4*Math.random()));var r;if(P.string(S.selectors.controls.container)&&(r=t.querySelector(S.selectors.controls.container)),P.htmlElement(r)||(r=Ye.container),r.insertAdjacentHTML("beforeend",n),S.tooltips.controls)for(var s=W([S.selectors.controls.wrapper," ",S.selectors.labels," .",S.classes.hidden].join("")),a=s.length-1;a>=0;a--){var i=s[a];m(i,S.classes.hidden,!1),m(i,S.classes.tooltip,!0)}}function $(){try{return Ye.controls=Y(S.selectors.controls.wrapper),Ye.buttons={},Ye.buttons.seek=Y(S.selectors.buttons.seek),Ye.buttons.play=W(S.selectors.buttons.play),Ye.buttons.pause=Y(S.selectors.buttons.pause),Ye.buttons.restart=Y(S.selectors.buttons.restart),Ye.buttons.rewind=Y(S.selectors.buttons.rewind),Ye.buttons.forward=Y(S.selectors.buttons.forward),Ye.buttons.fullscreen=Y(S.selectors.buttons.fullscreen),Ye.buttons.mute=Y(S.selectors.buttons.mute),Ye.buttons.captions=Y(S.selectors.buttons.captions),Ye.progress={},Ye.progress.container=Y(S.selectors.progress.container),Ye.progress.buffer={},Ye.progress.buffer.bar=Y(S.selectors.progress.buffer),Ye.progress.buffer.text=Ye.progress.buffer.bar&&Ye.progress.buffer.bar.getElementsByTagName("span")[0],Ye.progress.played=Y(S.selectors.progress.played),Ye.progress.tooltip=Ye.progress.container&&Ye.progress.container.querySelector("."+S.classes.tooltip),Ye.volume={},Ye.volume.input=Y(S.selectors.volume.input),Ye.volume.display=Y(S.selectors.volume.display),Ye.duration=Y(S.selectors.duration),Ye.currentTime=Y(S.selectors.currentTime),Ye.seekTime=W(S.selectors.seekTime),!0}catch(e){return Je("It looks like there is a problem with your controls HTML"),K(!0),!1}}function G(){m(Ye.container,S.selectors.container.replace(".",""),Ye.supported.full)}function K(e){e&&a(S.types.html5,Ye.type)?Ye.media.setAttribute("controls",""):Ye.media.removeAttribute("controls")}function z(e){var t=S.i18n.play;if(P.string(S.title)&&S.title.length&&(t+=", "+S.title,Ye.container.setAttribute("aria-label",S.title)),Ye.supported.full&&Ye.buttons.play)for(var n=Ye.buttons.play.length-1;n>=0;n--)Ye.buttons.play[n].setAttribute("aria-label",t);P.htmlElement(e)&&e.setAttribute("title",S.i18n.frameTitle.replace("{title}",S.title))}function Q(){var t=null;Ye.storage={},M.supported&&S.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(S.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Z({volume:parseFloat(t)}):Ye.storage=JSON.parse(t)))}function Z(t){M.supported&&S.storage.enabled&&(x(Ye.storage,t),e.localStorage.setItem(S.storage.key,JSON.stringify(Ye.storage)))}function ee(){if(!Ye.media)return void Je("No media element found!");if(Ye.supported.full&&(m(Ye.container,S.classes.type.replace("{0}",Ye.type),!0),a(S.types.embed,Ye.type)&&m(Ye.container,S.classes.type.replace("{0}","video"),!0),m(Ye.container,S.classes.stopped,S.autoplay),m(Ye.ontainer,S.classes.isIos,Ye.browser.isIos),m(Ye.container,S.classes.isTouch,Ye.browser.isTouch),"video"===Ye.type)){var e=t.createElement("div");e.setAttribute("class",S.classes.videoWrapper),i(Ye.media,e),Ye.videoContainer=e}a(S.types.embed,Ye.type)&&te()}function te(){for(var n=t.createElement("div"),r=Ye.embedId,a=Ye.type+"-"+Math.floor(1e4*Math.random()),o=W('[id^="'+Ye.type+'-"]'),i=o.length-1;i>=0;i--)l(o[i]);if(m(Ye.media,S.classes.videoWrapper,!0),m(Ye.media,S.classes.embedWrapper,!0),"youtube"===Ye.type)Ye.media.appendChild(n),n.setAttribute("id",a),P.object(e.YT)?re(r,n):(s(S.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){re(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Ye.type)if(Ye.supported.full?Ye.media.appendChild(n):n=Ye.media,n.setAttribute("id",a),P.object(e.Vimeo))se(r,n);else{s(S.urls.vimeo.api);var u=e.setInterval(function(){P.object(e.Vimeo)&&(e.clearInterval(u),se(r,n))},50)}else if("soundcloud"===Ye.type){var p=t.createElement("iframe");p.loaded=!1,g(p,"load",function(){p.loaded=!0}),c(p,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:a}),n.appendChild(p),Ye.media.appendChild(n),e.SC||s(S.urls.soundcloud.api);var d=e.setInterval(function(){e.SC&&p.loaded&&(e.clearInterval(d),ae.call(p))},50)}}function ne(){Ye.supported.full&&(De(),He()),z(Y("iframe"))}function re(t,n){Ye.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:S.autoplay?1:0,controls:Ye.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:S.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){C(Ye.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Ye.media.play=function(){n.playVideo(),Ye.media.paused=!1},Ye.media.pause=function(){n.pauseVideo(),Ye.media.paused=!0},Ye.media.stop=function(){n.stopVideo(),Ye.media.paused=!0},Ye.media.duration=n.getDuration(),Ye.media.paused=!0,Ye.media.currentTime=0,Ye.media.muted=n.isMuted(),S.title=n.getVideoData().title,Ye.supported.full&&Ye.media.querySelector("iframe").setAttribute("tabindex","-1"),ne(),C(Ye.media,"timeupdate"),C(Ye.media,"durationchange"),e.clearInterval(Be.buffering),Be.buffering=e.setInterval(function(){Ye.media.buffered=n.getVideoLoadedFraction(),(null===Ye.media.lastBuffered||Ye.media.lastBufferedt?t=0:t>r&&(t=r),Ae(t);try{Ye.media.currentTime=t.toFixed(4)}catch(s){}if(a(S.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.seekTo(t);break;case"vimeo":Ye.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Ye.embed.seekTo(1e3*t)}n&&ie(),C(Ye.media,"timeupdate"),Ye.media.seeking=!0}Ue("Seeking to "+Ye.media.currentTime+" seconds"),D(t)}function de(){var e=parseInt(S.duration),t=0;return null===Ye.media.duration||isNaN(Ye.media.duration)||(t=Ye.media.duration),isNaN(e)?t:e}function me(){m(Ye.container,S.classes.playing,!Ye.media.paused),m(Ye.container,S.classes.stopped,Ye.media.paused),Ne(Ye.media.paused)}function fe(){I={x:e.pageXOffset||0,y:e.pageYOffset||0}}function ye(){e.scrollTo(I.x,I.y)}function be(e){var n=A.supportsFullScreen;if(n){if(!e||e.type!==A.fullScreenEventName)return A.isFullScreen(Ye.container)?A.cancelFullScreen():(fe(),A.requestFullScreen(Ye.container)),void(Ye.isFullscreen=A.isFullScreen(Ye.container));Ye.isFullscreen=A.isFullScreen(Ye.container)}else Ye.isFullscreen=!Ye.isFullscreen,t.body.style.overflow=Ye.isFullscreen?"hidden":"";m(Ye.container,S.classes.fullscreen.active,Ye.isFullscreen),X(Ye.isFullscreen),Ye.buttons&&Ye.buttons.fullscreen&&k(Ye.buttons.fullscreen,Ye.isFullscreen),C(Ye.container,Ye.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Ye.isFullscreen&&n&&ye()}function ve(e){if(P["boolean"](e)||(e=!Ye.media.muted),k(Ye.buttons.mute,e),Ye.media.muted=e,0===Ye.media.volume&&ge(S.volume),a(S.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed[Ye.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.muted?0:parseFloat(S.volume/S.volumeMax))}C(Ye.media,"volumechange")}}function ge(e){var t=S.volumeMax,n=S.volumeMin;if(P.undefined(e)&&(e=Ye.storage.volume),(null===e||isNaN(e))&&(e=S.volume),e>t&&(e=t),n>e&&(e=n),Ye.media.volume=parseFloat(e/t),Ye.volume.display&&(Ye.volume.display.value=e),a(S.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.setVolume(100*Ye.media.volume);break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.volume)}C(Ye.media,"volumechange")}Ye.media.muted&&e>0&&ve()}function he(e){var t=Ye.media.muted?0:Ye.media.volume*S.volumeMax;P.number(e)||(e=S.volumeStep),ge(t+e)}function ke(e){var t=Ye.media.muted?0:Ye.media.volume*S.volumeMax;P.number(e)||(e=S.volumeStep),ge(t-e)}function we(){var e=Ye.media.muted?0:Ye.media.volume*S.volumeMax;Ye.supported.full&&(Ye.volume.input&&(Ye.volume.input.value=e),Ye.volume.display&&(Ye.volume.display.value=e)),Z({volume:e}),m(Ye.container,S.classes.muted,0===e),Ye.supported.full&&Ye.buttons.mute&&k(Ye.buttons.mute,0===e)}function xe(e){Ye.supported.full&&Ye.buttons.captions&&(P["boolean"](e)||(e=-1===Ye.container.className.indexOf(S.classes.captions.active)),Ye.captionsEnabled=e,k(Ye.buttons.captions,Ye.captionsEnabled),m(Ye.container,S.classes.captions.active,Ye.captionsEnabled),C(Ye.container,Ye.captionsEnabled?"captionsenabled":"captionsdisabled",!0),Z({captionsEnabled:Ye.captionsEnabled}))}function Te(e){var t="waiting"===e.type;clearTimeout(Be.loading),Be.loading=setTimeout(function(){m(Ye.container,S.classes.loading,t),Ne(t)},t?250:0)}function Se(e){if(Ye.supported.full){var t=Ye.progress.played,n=0,r=de();if(e)switch(e.type){case"timeupdate":case"seeking":if(Ye.controls.pressed)return;n=w(Ye.media.currentTime,r),"timeupdate"===e.type&&Ye.buttons.seek&&(Ye.buttons.seek.value=n);break;case"playing":case"progress":t=Ye.progress.buffer,n=function(){var e=Ye.media.buffered;return e&&e.length?w(e.end(0),r):P.number(e)?100*e:0}()}_e(t,n)}}function _e(e,t){if(Ye.supported.full){if(P.undefined(t)&&(t=0),P.undefined(e)){if(!Ye.progress||!Ye.progress.buffer)return;e=Ye.progress.buffer}P.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ee(e,t){if(t){isNaN(e)&&(e=0),Ye.secs=parseInt(e%60),Ye.mins=parseInt(e/60%60),Ye.hours=parseInt(e/60/60%60);var n=parseInt(de()/60/60%60)>0;Ye.secs=("0"+Ye.secs).slice(-2),Ye.mins=("0"+Ye.mins).slice(-2),t.innerHTML=(n?Ye.hours+":":"")+Ye.mins+":"+Ye.secs}}function Ce(){if(Ye.supported.full){var e=de()||0;!Ye.duration&&S.displayDuration&&Ye.media.paused&&Ee(e,Ye.currentTime),Ye.duration&&Ee(e,Ye.duration),Ie()}}function Fe(e){Ee(Ye.media.currentTime,Ye.currentTime),e&&"timeupdate"===e.type&&Ye.media.seeking||Se(e)}function Ae(e){P.number(e)||(e=0);var t=de(),n=w(e,t);Ye.progress&&Ye.progress.played&&(Ye.progress.played.value=n),Ye.buttons&&Ye.buttons.seek&&(Ye.buttons.seek.value=n)}function Ie(e){var t=de();if(S.tooltips.seek&&Ye.progress.container&&0!==t){var n=Ye.progress.container.getBoundingClientRect(),r=0,s=S.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!f(Ye.progress.tooltip,s))return;r=Ye.progress.tooltip.style.left.replace("%","")}0>r?r=0:r>100&&(r=100),Ee(t/100*r,Ye.progress.tooltip),Ye.progress.tooltip.style.left=r+"%",e&&a(["mouseenter","mouseleave"],e.type)&&m(Ye.progress.tooltip,s,"mouseenter"===e.type)}}function Ne(t){if(S.hideControls&&"audio"!==Ye.type){var n=0,r=!1,s=t,o=f(Ye.container,S.classes.loading);if(P["boolean"](t)||(t&&t.type?(r="enterfullscreen"===t.type,s=a(["mousemove","touchstart","mouseenter","focus"],t.type),a(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=f(Ye.container,S.classes.hideControls)),e.clearTimeout(Be.hover),s||Ye.media.paused||o){if(m(Ye.container,S.classes.hideControls,!1),Ye.media.paused||o)return;Ye.browser.isTouch&&(n=3e3)}s&&Ye.media.paused||(Be.hover=e.setTimeout(function(){(!Ye.controls.pressed&&!Ye.controls.hover||r)&&m(Ye.container,S.classes.hideControls,!0)},n))}}function Pe(e){if(!P.undefined(e))return void Me(e);var t;switch(Ye.type){case"youtube":t=Ye.embed.getVideoUrl();break;case"vimeo":Ye.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Ye.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Ye.media.currentSrc}return t||""}function Me(e){function n(){if(Ye.embed=null,l(Ye.media),"video"===Ye.type&&Ye.videoContainer&&l(Ye.videoContainer),Ye.container&&Ye.container.removeAttribute("class"),"type"in e&&(Ye.type=e.type,"video"===Ye.type)){var n=e.sources[0];"type"in n&&a(S.types.embed,n.type)&&(Ye.type=n.type)}switch(Ye.supported=E(Ye.type),Ye.type){case"video":Ye.media=t.createElement("video");break;case"audio":Ye.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Ye.media=t.createElement("div"),Ye.embedId=e.sources[0].src}u(Ye.container,Ye.media),P["boolean"](e.autoplay)&&(S.autoplay=e.autoplay),a(S.types.html5,Ye.type)&&(S.crossorigin&&Ye.media.setAttribute("crossorigin",""),S.autoplay&&Ye.media.setAttribute("autoplay",""),"poster"in e&&Ye.media.setAttribute("poster",e.poster),S.loop&&Ye.media.setAttribute("loop","")),m(Ye.container,S.classes.fullscreen.active,Ye.isFullscreen),m(Ye.container,S.classes.captions.active,Ye.captionsEnabled),G(),a(S.types.html5,Ye.type)&&U("source",e.sources),ee(),a(S.types.html5,Ye.type)&&("tracks"in e&&U("track",e.tracks),Ye.media.load()),(a(S.types.html5,Ye.type)||a(S.types.embed,Ye.type)&&!Ye.supported.full)&&(De(),He()),S.title=e.title,z()}return P.object(e)&&"sources"in e&&e.sources.length?(m(Ye.container,S.classes.ready,!1),ie(),Ae(),_e(),Ve(),void qe(n,!1)):void Je("Invalid source format")}function Le(e){"video"===Ye.type&&Ye.media.setAttribute("poster",e)}function Oe(){function n(){var e=le(),t=Ye.buttons[e?"play":"pause"],n=Ye.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=f(t,S.classes.tabFocus);setTimeout(function(){n.focus(),r&&(m(t,S.classes.tabFocus,!1),m(n,S.classes.tabFocus,!0))},100)}}function r(){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 Ye.buttons){var n=Ye.buttons[t];if(P.nodeList(n))for(var r=0;r0)&&(t?ke(n):he(n)),(e.deltaY>0||e.deltaX<0)&&(t?he(n):ke(n))})}function je(){if(g(Ye.media,"timeupdate seeking",Fe),g(Ye.media,"timeupdate",D),g(Ye.media,"durationchange loadedmetadata",Ce),g(Ye.media,"ended",function(){"video"===Ye.type&&S.showPosterOnEnd&&("video"===Ye.type&&R(),pe(),Ye.media.load())}),g(Ye.media,"progress playing",Se),g(Ye.media,"volumechange",we),g(Ye.media,"play pause ended",me),g(Ye.media,"waiting canplay seeked",Te),S.clickToPlay&&"audio"!==Ye.type){var e=Y("."+S.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){S.hideControls&&Ye.browser.isTouch&&!Ye.media.paused||(Ye.media.paused?oe():Ye.media.ended?(pe(),oe()):ie())})}S.disableContextMenu&&g(Ye.media,"contextmenu",function(e){e.preventDefault()}),g(Ye.media,S.events.concat(["keyup","keydown"]).join(" "),function(e){C(Ye.container,e.type,!0)})}function Ve(){if(a(S.types.html5,Ye.type)){for(var e=Ye.media.querySelectorAll("source"),t=0;t` tag and then call `ply If you want to use our CDN for the JavaScript, you can use the following: ```html - + ``` ### CSS @@ -135,11 +135,11 @@ Include the `plyr.css` stylsheet into your `` If you want to use our CDN for the default CSS, you can use the following: ```html - + ``` ### SVG Sprite -The SVG sprite is loaded automatically from our CDN. To change this, see the [options](#Options) below. For reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/2.0.1/plyr.svg`. +The SVG sprite is loaded automatically from our CDN. To change this, see the [options](#Options) below. For reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/2.0.2/plyr.svg`. ## Advanced @@ -321,9 +321,9 @@ Note the single quotes encapsulating the JSON and double quotes on the object ke keyboardShortcuts - Boolean - true - Enable keyboard shortcuts + Object + { focused: true, global: true } + Enable keyboard shortcuts for focused players only or global as well (if there's only one player in the document) tooltips @@ -873,50 +873,65 @@ More info on the respective API's here: *Please note*: not all API methods may work 100%. Your mileage may vary. It's better to use the universal plyr API where possible. ## Shortcuts -By default, a focused player will bind the following keyboard shortcuts: +By default, a player will bind the following keyboard shortcuts when it has focus. If you have the `global` option to `true` and there's only one player in the document then the shortcuts will work when any element has focus, apart from an element that requires input (such as an ``, `