From 0505e49038f76b353e78489ebb28b6cdf40f9a3e Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Sat, 23 Jul 2016 10:42:06 +1000 Subject: [PATCH] Vimeo API upgrade, YouTube Bugfix, Array support - Vimeo API upgrade - Fix for YouTube bug introduced in v1.8.9 (Fixes #320) - Added support for passing array to .setup() (Fixes #319) --- changelog.md | 7 ++ dist/plyr.js | 4 +- package.json | 2 +- readme.md | 6 +- src/js/plyr.js | 229 +++++++++++++++++++++++-------------------------- 5 files changed, 120 insertions(+), 128 deletions(-) diff --git a/changelog.md b/changelog.md index b2db38550..862806270 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## v1.8.11 +- Fix for keyboard navigation on Vimeo (Fixes #317) +- Fix for bug introduced in v1.8.9 related to additional controls +- Vimeo API upgrade +- Fix for YouTube bug introduced in v1.8.9 +- Added support for passing array to .setup() (Fixes #319) + ## v1.8.10 - Fix for seek issues introduced in v1.8.9 diff --git a/dist/plyr.js b/dist/plyr.js index 8a6d80faa..17e6c7779 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,a=navigator.userAgent,s=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,d=!1;return-1!==navigator.appVersion.indexOf("Windows NT")&&-1!==navigator.appVersion.indexOf("rv:11")?(l=!0,s="IE",o="11"):-1!==(n=a.indexOf("MSIE"))?(l=!0,s="IE",o=a.substring(n+5)):-1!==(n=a.indexOf("Chrome"))?(c=!0,s="Chrome",o=a.substring(n+7)):-1!==(n=a.indexOf("Safari"))?(d=!0,s="Safari",o=a.substring(n+7),-1!==(n=a.indexOf("Version"))&&(o=a.substring(n+8))):-1!==(n=a.indexOf("Firefox"))?(u=!0,s="Firefox",o=a.substring(n+8)):(e=a.lastIndexOf(" ")+1)<(n=a.lastIndexOf("/"))&&(s=a.substring(e,n),o=a.substring(n+1),s.toLowerCase()==s.toUpperCase()&&(s=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: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 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 a(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 s(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,a=e[n],s=a.parentNode,o=a.nextSibling;return r.appendChild(a),o?s.insertBefore(r,o):s.appendChild(r),r}}function l(e){for(var t=e.parentNode;e.firstChild;)t.insertBefore(e.firstChild,e);t.removeChild(e)}function u(e){e&&e.parentNode.removeChild(e)}function c(e,t){e.insertBefore(t,e.firstChild)}function d(e,t){for(var n in t)e.setAttribute(n,L["boolean"](t[n])&&t[n]?"":t[n])}function p(e,n,r){var a=t.createElement(e);d(a,r),c(n,a)}function m(e){return e.replace(".","")}function f(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 y(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function b(e,n){var r=Element.prototype,a=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return a.call(e,n)}function v(e,t,n,r){e&&k(e,t,n,!0,r)}function g(e,t,n,r){e&&k(e,t,n,!1,r)}function h(e,t,n,r,a){v(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},a)}function k(e,t,n,r,a){var s=t.split(" ");if(L["boolean"](a)||(a=!1),e instanceof NodeList)for(var o=0;or;r++){var a=e[r];for(var s in a)a[s]&&a[s].constructor&&a[s].constructor===Object?(t[s]=t[s]||{},_(t[s],a[s])):t[s]=a[s]}return t}}function S(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},n="webkit moz o ms khtml".split(" ");if(L.undefined(t.cancelFullScreen))for(var r=0,a=n.length;a>r;r++){if(e.prefix=n[r],!L.undefined(t[e.prefix+"CancelFullScreen"])){e.supportsFullScreen=!0;break}if(!L.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(L.undefined(e)&&(e=t.body),this.prefix){case"":return t.fullscreenElement==e;case"moz":return t.mozFullScreenElement==e;default:return t[this.prefix+"FullscreenElement"]==e}},e.requestFullScreen=function(e){return L.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 E(){var t={supported:function(){if(!("localStorage"in e))return!1;try{e.localStorage.setItem("___test","OK");var t=e.localStorage.getItem("___test");return e.localStorage.removeItem("___test"),"OK"===t}catch(n){return!1}return!1}()};return t}function C(b,k){function _(){k.debug&&e.console&&console.log.apply(console,arguments)}function C(){k.debug&&e.console&&console.warn.apply(console,arguments)}function I(){return{url:k.iconUrl,absolute:0===k.iconUrl.indexOf("http")||je.browser.isIE}}function P(){var e=[],t=I(),n=(t.absolute?"":t.url)+"#"+k.iconPrefix;return s(k.controls,"play-large")&&e.push('"),e.push('
'),s(k.controls,"restart")&&e.push('"),s(k.controls,"rewind")&&e.push('"),s(k.controls,"play")&&e.push('",'"),s(k.controls,"fast-forward")&&e.push('"),s(k.controls,"progress")&&(e.push('','','','','',"0% "+k.i18n.buffered,""),k.tooltips.seek&&e.push('00:00'),e.push("")),s(k.controls,"current-time")&&e.push('',''+k.i18n.currentTime+"",'00:00',""),s(k.controls,"duration")&&e.push('',''+k.i18n.duration+"",'00:00',""),s(k.controls,"mute")&&e.push('"),s(k.controls,"volume")&&e.push('','",'','',""),s(k.controls,"captions")&&e.push('"),s(k.controls,"fullscreen")&&e.push('"),e.push("
"),e.join("")}function O(){if(je.supported.full&&("audio"!=je.type||k.fullscreen.allowAudio)&&k.fullscreen.enabled){var e=N.supportsFullScreen;e||k.fullscreen.fallback&&!W()?(_((e?"Native":"Fallback")+" fullscreen enabled"),f(je.container,k.classes.fullscreen.enabled,!0)):_("Fullscreen not supported and fallback disabled"),je.buttons&&je.buttons.fullscreen&&T(je.buttons.fullscreen,!1),Y()}}function q(){if("video"===je.type){D(k.selectors.captions)||je.videoContainer.insertAdjacentHTML("afterbegin",'
'),je.usingTextTracks=!1,je.media.textTracks&&(je.usingTextTracks=!0);for(var e,t="",n=je.media.childNodes,r=0;r=10||je.browser.isFirefox&&je.browser.version>=31)&&(_("Detected browser with known TextTrack issues - using manual fallback"),je.usingTextTracks=!1),je.usingTextTracks){_("TextTracks supported");for(var o=0;o ");for(var r=0;rje.captions.length-1){je.subcount=je.captions.length-1;break}je.media.currentTime.toFixed(1)>=n(je.captions[je.subcount][0])&&je.media.currentTime.toFixed(1)<=r(je.captions[je.subcount][0])?(je.currentCaption=je.captions[je.subcount][1],V(je.currentCaption)):V()}}function R(){je.buttons.captions&&(f(je.container,k.classes.captions.enabled,!0),k.captions.defaultActive&&(f(je.container,k.classes.captions.active,!0),T(je.buttons.captions,!0)))}function H(e){return je.container.querySelectorAll(e)}function D(e){return H(e)[0]}function W(){try{return e.self!==e.top}catch(t){return!0}}function Y(){function e(e){9===e.which&&je.isFullscreen&&(e.target!==r||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),r.focus()):(e.preventDefault(),n.focus()))}var t=H("input:not([disabled]), button:not([disabled])"),n=t[0],r=t[t.length-1];v(je.container,"keydown",e)}function X(e,t){if(L.string(t))p(e,je.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)p(e,je.media,t[n])}function B(){if(k.loadSprite){var e=I();e.absolute?(_("AJAX loading absolute SVG sprite"+(je.browser.isIE?" (due to IE)":"")),F(e.url,"sprite-plyr")):_("Sprite will be used as external resource directly")}var n=k.html;_("Injecting custom controls"),n||(n=P()),n=o(n,"{seektime}",k.seekTime),n=o(n,"{id}",Math.floor(1e4*Math.random()));var r;if(null!==k.selectors.controls.container&&(r=k.selectors.controls.container,L.string(selector)&&(r=t.querySelector(r))),r instanceof HTMLElement||(r=je.container),r.insertAdjacentHTML("beforeend",n),k.tooltips.controls)for(var a=H([k.selectors.controls.wrapper," ",k.selectors.labels," .",k.classes.hidden].join("")),s=a.length-1;s>=0;s--){var i=a[s];f(i,k.classes.hidden,!1),f(i,k.classes.tooltip,!0)}}function U(){try{return je.controls=D(k.selectors.controls.wrapper),je.buttons={},je.buttons.seek=D(k.selectors.buttons.seek),je.buttons.play=H(k.selectors.buttons.play),je.buttons.pause=D(k.selectors.buttons.pause),je.buttons.restart=D(k.selectors.buttons.restart),je.buttons.rewind=D(k.selectors.buttons.rewind),je.buttons.forward=D(k.selectors.buttons.forward),je.buttons.fullscreen=D(k.selectors.buttons.fullscreen),je.buttons.mute=D(k.selectors.buttons.mute),je.buttons.captions=D(k.selectors.buttons.captions),je.progress={},je.progress.container=D(k.selectors.progress.container),je.progress.buffer={},je.progress.buffer.bar=D(k.selectors.progress.buffer),je.progress.buffer.text=je.progress.buffer.bar&&je.progress.buffer.bar.getElementsByTagName("span")[0],je.progress.played=D(k.selectors.progress.played),je.progress.tooltip=je.progress.container&&je.progress.container.querySelector("."+k.classes.tooltip),je.volume={},je.volume.input=D(k.selectors.volume.input),je.volume.display=D(k.selectors.volume.display),je.duration=D(k.selectors.duration),je.currentTime=D(k.selectors.currentTime),je.seekTime=H(k.selectors.seekTime),!0}catch(e){return C("It looks like there is a problem with your controls HTML"),z(!0),!1}}function $(){f(je.container,k.selectors.container.replace(".",""),je.supported.full)}function z(e){e&&s(k.types.html5,je.type)?je.media.setAttribute("controls",""):je.media.removeAttribute("controls")}function G(e){var t=k.i18n.play;if(!L.undefined(k.title)&&k.title.length&&(t+=", "+k.title),je.supported.full&&je.buttons.play)for(var n=je.buttons.play.length-1;n>=0;n--)je.buttons.play[n].setAttribute("aria-label",t);e instanceof HTMLElement&&e.setAttribute("title",k.i18n.frameTitle.replace("{title}",k.title))}function J(){if(!je.media)return void C("No media element found!");if(je.supported.full&&(f(je.container,k.classes.type.replace("{0}",je.type),!0),s(k.types.embed,je.type)&&f(je.container,k.classes.type.replace("{0}","video"),!0),f(je.container,k.classes.stopped,k.autoplay),f(je.container,k.classes.isIos,je.browser.isIos),f(je.container,k.classes.isTouch,je.browser.isTouch),"video"===je.type)){var e=t.createElement("div");e.setAttribute("class",k.classes.videoWrapper),i(je.media,e),je.videoContainer=e}s(k.types.embed,je.type)&&(K(),je.embedId=null)}function K(){for(var n=t.createElement("div"),r=je.embedId,s=je.type+"-"+Math.floor(1e4*Math.random()),o=H('[id^="'+je.type+'-"]'),i=o.length-1;i>=0;i--)u(o[i]);if(f(je.media,k.classes.videoWrapper,!0),f(je.media,k.classes.embedWrapper,!0),"youtube"===je.type)je.media.appendChild(n),n.setAttribute("id",s),L.object(YT)?Z(r,n):(a(k.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){Z(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===je.type){var l=t.createElement("iframe");l.loaded=!1,v(l,"load",function(){l.loaded=!0}),d(l,{src:"https://player.vimeo.com/video/"+r+"?player_id="+s+"&api=1&badge=0&byline=0&portrait=0&title=0",id:s,allowfullscreen:"",frameborder:0}),je.supported.full?(n.appendChild(l),je.media.appendChild(n)):je.media.appendChild(l),"$f"in e||a(k.urls.vimeo.api);var c=e.setInterval(function(){"$f"in e&&l.loaded&&(e.clearInterval(c),ee.call(l))},50)}else if("soundcloud"===je.type){var p=t.createElement("iframe");p.loaded=!1,v(p,"load",function(){p.loaded=!0}),d(p,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:s}),n.appendChild(p),je.media.appendChild(n),e.SC||a(k.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&p.loaded&&(e.clearInterval(m),te.call(p))},50)}}function Q(){je.container.plyr.embed=je.embed,je.supported.full&&Ve(),G(D("iframe"))}function Z(t,n){"timer"in je||(je.timer={}),je.embed=new YT.Player(n.id,{videoId:t,playerVars:{autoplay:k.autoplay?1:0,controls:je.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:k.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){w(je.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;je.media.play=function(){n.playVideo(),je.media.paused=!1},je.media.pause=function(){n.pauseVideo(),je.media.paused=!0},je.media.stop=function(){n.stopVideo(),je.media.paused=!0},je.media.duration=n.getDuration(),je.media.paused=!0,je.media.currentTime=n.getCurrentTime(),je.media.muted=n.isMuted(),k.title=n.getVideoData().title,w(je.media,"timeupdate"),e.clearInterval(je.timer.buffering),je.timer.buffering=e.setInterval(function(){je.media.buffered=n.getVideoLoadedFraction(),w(je.media,"progress"),1===je.media.buffered&&(e.clearInterval(je.timer.buffering),w(je.media,"canplaythrough"))},200),Q(),_e()},onStateChange:function(t){var n=t.target;switch(e.clearInterval(je.timer.playing),t.data){case 0:je.media.paused=!0,w(je.media,"ended");break;case 1:je.media.paused=!1,je.media.seeking=!1,w(je.media,"play"),w(je.media,"playing"),je.timer.playing=e.setInterval(function(){je.media.currentTime=n.getCurrentTime(),w(je.media,"timeupdate")},100);break;case 2:je.media.paused=!0,w(je.media,"pause")}w(je.container,"statechange",!1,{code:t.data})}}})}function ee(){je.embed=$f(this),je.embed.addEvent("ready",function(){je.media.play=function(){je.embed.api("play"),je.media.paused=!1},je.media.pause=function(){je.embed.api("pause"),je.media.paused=!0},je.media.stop=function(){je.embed.api("stop"),je.media.paused=!0},je.media.paused=!0,je.media.currentTime=0,Q(),je.embed.api("getCurrentTime",function(e){je.media.currentTime=e,w(je.media,"timeupdate")}),je.embed.api("getDuration",function(e){je.media.duration=e,_e()}),je.embed.addEvent("play",function(){je.media.paused=!1,w(je.media,"play"),w(je.media,"playing")}),je.embed.addEvent("pause",function(){je.media.paused=!0,w(je.media,"pause")}),je.embed.addEvent("playProgress",function(e){je.media.seeking=!1,je.media.currentTime=e.seconds,w(je.media,"timeupdate")}),je.embed.addEvent("loadProgress",function(e){je.media.buffered=e.percent,w(je.media,"progress"),1===parseInt(e.percent)&&w(je.media,"canplaythrough")}),je.embed.addEvent("finish",function(){je.media.paused=!0,w(je.media,"ended")}),k.autoplay&&je.embed.api("play")})}function te(){je.embed=e.SC.Widget(this),je.embed.bind(e.SC.Widget.Events.READY,function(){je.media.play=function(){je.embed.play(),je.media.paused=!1},je.media.pause=function(){je.embed.pause(),je.media.paused=!0},je.media.stop=function(){je.embed.seekTo(0),je.embed.pause(),je.media.paused=!0},je.media.paused=!0,je.media.currentTime=0,Q(),je.embed.getPosition(function(e){je.media.currentTime=e,w(je.media,"timeupdate")}),je.embed.getDuration(function(e){je.media.duration=e/1e3,_e()}),je.embed.bind(e.SC.Widget.Events.PLAY,function(){je.media.paused=!1,w(je.media,"play"),w(je.media,"playing")}),je.embed.bind(e.SC.Widget.Events.PAUSE,function(){je.media.paused=!0,w(je.media,"pause")}),je.embed.bind(e.SC.Widget.Events.PLAY_PROGRESS,function(e){je.media.seeking=!1,je.media.currentTime=e.currentPosition/1e3,w(je.media,"timeupdate")}),je.embed.bind(e.SC.Widget.Events.LOAD_PROGRESS,function(e){je.media.buffered=e.loadProgress,w(je.media,"progress"),1===parseInt(e.loadProgress)&&w(je.media,"canplaythrough")}),je.embed.bind(e.SC.Widget.Events.FINISH,function(){je.media.paused=!0,w(je.media,"ended")}),k.autoplay&&je.embed.play()})}function ne(){"play"in je.media&&je.media.play()}function re(){"pause"in je.media&&je.media.pause()}function ae(e){e===!0?ne():e===!1?re():je.media[je.media.paused?"play":"pause"]()}function se(e){L.number(e)||(e=k.seekTime),ie(je.media.currentTime-e)}function oe(e){L.number(e)||(e=k.seekTime),ie(je.media.currentTime+e)}function ie(e){var t=0,n=je.media.paused,r=le();L.number(e)?t=e:L.object(e)&&s(["input","change"],e.type)&&(t=e.target.value/e.target.max*r),0>t?t=0:t>r&&(t=r),Ee(t);try{je.media.currentTime=t.toFixed(4)}catch(a){}if(s(k.types.embed,je.type)){switch(je.type){case"youtube":je.embed.seekTo(t);break;case"vimeo":je.embed.api("seekTo",t.toFixed(0));break;case"soundcloud":je.embed.seekTo(1e3*t)}n&&re(),w(je.media,"timeupdate"),je.media.seeking=!0}_("Seeking to "+je.media.currentTime+" seconds"),j(t)}function le(){var e=parseInt(k.duration),t=0;return null===je.media.duration||isNaN(je.media.duration)||(t=je.media.duration),isNaN(e)?t:e}function ue(){f(je.container,k.classes.playing,!je.media.paused),f(je.container,k.classes.stopped,je.media.paused),Fe(je.media.paused)}function ce(){M={x:e.pageXOffset||0,y:e.pageYOffset||0}}function de(){e.scrollTo(M.x,M.y)}function pe(e){var n=N.supportsFullScreen;e&&e.type===N.fullScreenEventName?je.isFullscreen=N.isFullScreen(je.container):n?(N.isFullScreen(je.container)?N.cancelFullScreen():(ce(),N.requestFullScreen(je.container)),je.isFullscreen=N.isFullScreen(je.container)):(je.isFullscreen=!je.isFullscreen,je.isFullscreen?(v(t,"keyup",me),t.body.style.overflow="hidden"):(g(t,"keyup",me),t.body.style.overflow="")),f(je.container,k.classes.fullscreen.active,je.isFullscreen),je.isFullscreen?je.container.setAttribute("tabindex","-1"):je.container.removeAttribute("tabindex"),Y(je.isFullscreen),je.buttons&&je.buttons.fullscreen&&T(je.buttons.fullscreen,je.isFullscreen),w(je.container,je.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!je.isFullscreen&&n&&de()}function me(e){27===(e.which||e.charCode||e.keyCode)&&je.isFullscreen&&pe()}function fe(e){if(L["boolean"](e)||(e=!je.media.muted),T(je.buttons.mute,e),je.media.muted=e,0===je.media.volume&&ye(k.volume),s(k.types.embed,je.type)){switch(je.type){case"youtube":je.embed[je.media.muted?"mute":"unMute"]();break;case"vimeo":je.embed.api("setVolume",je.media.muted?0:parseFloat(k.volume/k.volumeMax));break;case"soundcloud":je.embed.setVolume(je.media.muted?0:parseFloat(k.volume/k.volumeMax))}w(je.media,"volumechange")}}function ye(t){var n=k.volumeMax,r=k.volumeMin;if(L.undefined(t)&&(t=k.volume,k.storage.enabled&&E().supported&&(t=e.localStorage.getItem(k.storage.key),e.localStorage.removeItem("plyr-volume"))),(null===t||isNaN(t))&&(t=k.volume),t>n&&(t=n),r>t&&(t=r),je.media.volume=parseFloat(t/n),je.volume.display&&(je.volume.display.value=t),s(k.types.embed,je.type)){switch(je.type){case"youtube":je.embed.setVolume(100*je.media.volume);break;case"vimeo":je.embed.api("setVolume",je.media.volume);break;case"soundcloud":je.embed.setVolume(je.media.volume)}w(je.media,"volumechange")}je.media.muted&&t>0&&fe()}function be(){var e=je.media.muted?0:je.media.volume*k.volumeMax;ye(e+k.volumeStep/5)}function ve(){var e=je.media.muted?0:je.media.volume*k.volumeMax;ye(e-k.volumeStep/5)}function ge(){var t=je.media.muted?0:je.media.volume*k.volumeMax;je.supported.full&&(je.volume.input&&(je.volume.input.value=t),je.volume.display&&(je.volume.display.value=t)),k.storage.enabled&&E().supported&&!isNaN(t)&&e.localStorage.setItem(k.storage.key,t),f(je.container,k.classes.muted,0===t),je.supported.full&&je.buttons.mute&&T(je.buttons.mute,0===t)}function he(e){je.supported.full&&je.buttons.captions&&(L["boolean"](e)||(e=-1===je.container.className.indexOf(k.classes.captions.active)),je.captionsEnabled=e,T(je.buttons.captions,je.captionsEnabled),f(je.container,k.classes.captions.active,je.captionsEnabled),w(je.container,je.captionsEnabled?"captionsenabled":"captionsdisabled",!0))}function ke(e){var t="waiting"===e.type;clearTimeout(je.timers.loading),je.timers.loading=setTimeout(function(){f(je.container,k.classes.loading,t)},t?250:0)}function we(e){if(je.supported.full){var t=je.progress.played,n=0,r=le();if(e)switch(e.type){case"timeupdate":case"seeking":if(je.controls.pressed)return;n=x(je.media.currentTime,r),"timeupdate"==e.type&&je.buttons.seek&&(je.buttons.seek.value=n);break;case"playing":case"progress":t=je.progress.buffer,n=function(){var e=je.media.buffered;return e&&e.length?x(e.end(0),r):L.number(e)?100*e:0}()}Te(t,n)}}function Te(e,t){if(je.supported.full){if(L.undefined(t)&&(t=0),L.undefined(e)){if(!je.progress||!je.progress.buffer)return;e=je.progress.buffer}e instanceof HTMLElement?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function xe(e,t){if(t){isNaN(e)&&(e=0),je.secs=parseInt(e%60),je.mins=parseInt(e/60%60),je.hours=parseInt(e/60/60%60);var n=parseInt(le()/60/60%60)>0;je.secs=("0"+je.secs).slice(-2),je.mins=("0"+je.mins).slice(-2),t.innerHTML=(n?je.hours+":":"")+je.mins+":"+je.secs}}function _e(){if(je.supported.full){var e=le()||0;!je.duration&&k.displayDuration&&je.media.paused&&xe(e,je.currentTime),je.duration&&xe(e,je.duration),Ce()}}function Se(e){xe(je.media.currentTime,je.currentTime),e&&"timeupdate"==e.type&&je.media.seeking||we(e)}function Ee(e){L.number(e)||(e=0);var t=le(),n=x(e,t);je.progress&&je.progress.played&&(je.progress.played.value=n),je.buttons&&je.buttons.seek&&(je.buttons.seek.value=n)}function Ce(e){var t=le();if(k.tooltips.seek&&je.progress.container&&0!==t){var n=je.progress.container.getBoundingClientRect(),r=0,a=k.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!y(je.progress.tooltip,a))return;r=je.progress.tooltip.style.left.replace("%","")}0>r?r=0:r>100&&(r=100),xe(t/100*r,je.progress.tooltip),je.progress.tooltip.style.left=r+"%",e&&s(["mouseenter","mouseleave"],e.type)&&f(je.progress.tooltip,a,"mouseenter"===e.type)}}function Fe(t){if(k.hideControls&&"audio"!==je.type){var n=0,r=!1,a=t;if(L["boolean"](t)||(t&&t.type?(r="enterfullscreen"===t.type,a=s(["mousemove","touchstart","mouseenter","focus"],t.type),s(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):a=y(je.container,k.classes.hideControls)),e.clearTimeout(je.timers.hover),a||je.media.paused){if(f(je.container,k.classes.hideControls,!1),je.media.paused)return;je.browser.isTouch&&(n=3e3)}a&&je.media.paused||(je.timers.hover=e.setTimeout(function(){(!je.controls.pressed&&!je.controls.hover||r)&&f(je.container,k.classes.hideControls,!0)},n))}}function Ae(e){if(!L.undefined(e))return void Ie(e);var t;switch(je.type){case"youtube":t=je.embed.getVideoUrl();break;case"vimeo":je.embed.api("getVideoUrl",function(e){t=e});break;case"soundcloud":je.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=je.media.currentSrc}return t||""}function Ie(n){if(!(L.object(n)&&"sources"in n&&n.sources.length))return void C("Invalid source format");if(re(),Ee(),Te(),Le(),"youtube"===je.type?(je.embed.destroy(),e.clearInterval(je.timer.buffering),e.clearInterval(je.timer.playing)):"video"===je.type&&je.videoContainer&&u(je.videoContainer),je.embed=null,u(je.media),"type"in n&&(je.type=n.type,"video"===je.type)){var r=n.sources[0];"type"in r&&s(k.types.embed,r.type)&&(je.type=r.type)}switch(je.supported=A(je.type),je.type){case"video":je.media=t.createElement("video");break;case"audio":je.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":je.media=t.createElement("div"),je.embedId=n.sources[0].src}c(je.container,je.media),L["boolean"](n.autoplay)&&(k.autoplay=n.autoplay),s(k.types.html5,je.type)&&(k.crossorigin&&je.media.setAttribute("crossorigin",""),k.autoplay&&je.media.setAttribute("autoplay",""),"poster"in n&&je.media.setAttribute("poster",n.poster),k.loop&&je.media.setAttribute("loop","")),je.container.className=je.originalClassName,f(je.container,k.classes.fullscreen.active,je.isFullscreen),f(je.container,k.classes.captions.active,je.captionsEnabled),$(),s(k.types.html5,je.type)&&X("source",n.sources),J(),s(k.types.html5,je.type)?("tracks"in n&&X("track",n.tracks),je.media.load(),Ve(),_e()):s(k.types.embed,je.type)&&!je.supported.full&&Ve(),k.title=n.title,G(),je.container.plyr.media=je.media}function Ne(e){"video"===je.type&&je.media.setAttribute("poster",e)}function Me(){function n(){var e=je.media.paused;e?ne():re();var t=je.buttons[e?"play":"pause"],n=je.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=y(t,k.classes.tabFocus);setTimeout(function(){n.focus(),r&&(f(t,k.classes.tabFocus,!1),f(n,k.classes.tabFocus,!0))},100)}}function r(){var e=t.activeElement;e&&e!=t.body?t.querySelector&&(e=t.querySelector(":focus")):e=null;for(var n in je.buttons){var r=je.buttons[n];if(r instanceof NodeList)for(var a=0;a0)&&(t?ve():be()),(e.deltaY>0||e.deltaX<0)&&(t?be():ve()); -})}function Pe(){if(v(je.media,"timeupdate seeking",Se),v(je.media,"timeupdate",j),v(je.media,"durationchange loadedmetadata",_e),v(je.media,"ended",function(){"video"===je.type&&V(),ue(),ie(0),_e(),"video"===je.type&&k.showPosterOnEnd&&je.media.load()}),v(je.media,"progress playing",we),v(je.media,"volumechange",ge),v(je.media,"play pause",ue),v(je.media,"waiting canplay seeked",ke),k.clickToPlay&&"audio"!==je.type){var e=D("."+k.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",v(e,"click",function(){k.hideControls&&je.browser.isTouch&&!je.media.paused||(je.media.paused?ne():je.media.ended?(ie(),ne()):re())})}k.disableContextMenu&&v(je.media,"contextmenu",function(e){e.preventDefault()}),v(je.media,k.events.join(" "),function(e){w(je.container,e.type,!0)})}function Le(){if(s(k.types.html5,je.type)){for(var e=je.media.querySelectorAll("source"),t=0;t1)for(var c=0;c=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],o=s.parentNode,a=s.nextSibling;return r.appendChild(s),a?o.insertBefore(r,a):o.appendChild(r),r}}function l(e){for(var t=e.parentNode;e.firstChild;)t.insertBefore(e.firstChild,e);t.removeChild(e)}function u(e){e&&e.parentNode.removeChild(e)}function c(e,t){e.insertBefore(t,e.firstChild)}function p(e,t){for(var n in t)e.setAttribute(n,L["boolean"](t[n])&&t[n]?"":t[n])}function d(e,n,r){var s=t.createElement(e);p(s,r),c(n,s)}function m(e){return e.replace(".","")}function f(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 y(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function b(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 v(e,t,n,r){e&&k(e,t,n,!0,r)}function g(e,t,n,r){e&&k(e,t,n,!1,r)}function h(e,t,n,r,s){v(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},s)}function k(e,t,n,r,s){var o=t.split(" ");if(L["boolean"](s)||(s=!1),e instanceof NodeList)for(var a=0;ar;r++){var s=e[r];for(var o in s)s[o]&&s[o].constructor&&s[o].constructor===Object?(t[o]=t[o]||{},_(t[o],s[o])):t[o]=s[o]}return t}}function S(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},n="webkit moz o ms khtml".split(" ");if(L.undefined(t.cancelFullScreen))for(var r=0,s=n.length;s>r;r++){if(e.prefix=n[r],!L.undefined(t[e.prefix+"CancelFullScreen"])){e.supportsFullScreen=!0;break}if(!L.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(L.undefined(e)&&(e=t.body),this.prefix){case"":return t.fullscreenElement==e;case"moz":return t.mozFullScreenElement==e;default:return t[this.prefix+"FullscreenElement"]==e}},e.requestFullScreen=function(e){return L.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 C(){var t={supported:function(){if(!("localStorage"in e))return!1;try{e.localStorage.setItem("___test","OK");var t=e.localStorage.getItem("___test");return e.localStorage.removeItem("___test"),"OK"===t}catch(n){return!1}return!1}()};return t}function E(b,k){function _(){k.debug&&e.console&&console.log.apply(console,arguments)}function E(){k.debug&&e.console&&console.warn.apply(console,arguments)}function I(){return{url:k.iconUrl,absolute:0===k.iconUrl.indexOf("http")||qe.browser.isIE}}function P(){var e=[],t=I(),n=(t.absolute?"":t.url)+"#"+k.iconPrefix;return o(k.controls,"play-large")&&e.push('"),e.push('
'),o(k.controls,"restart")&&e.push('"),o(k.controls,"rewind")&&e.push('"),o(k.controls,"play")&&e.push('",'"),o(k.controls,"fast-forward")&&e.push('"),o(k.controls,"progress")&&(e.push('','','','','',"0% "+k.i18n.buffered,""),k.tooltips.seek&&e.push('00:00'),e.push("")),o(k.controls,"current-time")&&e.push('',''+k.i18n.currentTime+"",'00:00',""),o(k.controls,"duration")&&e.push('',''+k.i18n.duration+"",'00:00',""),o(k.controls,"mute")&&e.push('"),o(k.controls,"volume")&&e.push('','",'','',""),o(k.controls,"captions")&&e.push('"),o(k.controls,"fullscreen")&&e.push('"),e.push("
"),e.join("")}function O(){if(qe.supported.full&&("audio"!=qe.type||k.fullscreen.allowAudio)&&k.fullscreen.enabled){var e=N.supportsFullScreen;e||k.fullscreen.fallback&&!W()?(_((e?"Native":"Fallback")+" fullscreen enabled"),f(qe.container,k.classes.fullscreen.enabled,!0)):_("Fullscreen not supported and fallback disabled"),qe.buttons&&qe.buttons.fullscreen&&T(qe.buttons.fullscreen,!1),Y()}}function j(){if("video"===qe.type){H(k.selectors.captions)||qe.videoContainer.insertAdjacentHTML("afterbegin",'
'),qe.usingTextTracks=!1,qe.media.textTracks&&(qe.usingTextTracks=!0);for(var e,t="",n=qe.media.childNodes,r=0;r=10||qe.browser.isFirefox&&qe.browser.version>=31)&&(_("Detected browser with known TextTrack issues - using manual fallback"),qe.usingTextTracks=!1),qe.usingTextTracks){_("TextTracks supported");for(var a=0;a ");for(var r=0;rqe.captions.length-1){qe.subcount=qe.captions.length-1;break}qe.media.currentTime.toFixed(1)>=n(qe.captions[qe.subcount][0])&&qe.media.currentTime.toFixed(1)<=r(qe.captions[qe.subcount][0])?(qe.currentCaption=qe.captions[qe.subcount][1],V(qe.currentCaption)):V()}}function R(){qe.buttons.captions&&(f(qe.container,k.classes.captions.enabled,!0),k.captions.defaultActive&&(f(qe.container,k.classes.captions.active,!0),T(qe.buttons.captions,!0)))}function D(e){return qe.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&&qe.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];v(qe.container,"keydown",e)}function X(e,t){if(L.string(t))d(e,qe.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)d(e,qe.media,t[n])}function B(){if(k.loadSprite){var e=I();e.absolute?(_("AJAX loading absolute SVG sprite"+(qe.browser.isIE?" (due to IE)":"")),F(e.url,"sprite-plyr")):_("Sprite will be used as external resource directly")}var n=k.html;_("Injecting custom controls"),n||(n=P()),n=a(n,"{seektime}",k.seekTime),n=a(n,"{id}",Math.floor(1e4*Math.random()));var r;if(null!==k.selectors.controls.container&&(r=k.selectors.controls.container,L.string(r)&&(r=t.querySelector(r))),L.htmlElement(r)||(r=qe.container),r.insertAdjacentHTML("beforeend",n),k.tooltips.controls)for(var s=D([k.selectors.controls.wrapper," ",k.selectors.labels," .",k.classes.hidden].join("")),o=s.length-1;o>=0;o--){var i=s[o];f(i,k.classes.hidden,!1),f(i,k.classes.tooltip,!0)}}function U(){try{return qe.controls=H(k.selectors.controls.wrapper),qe.buttons={},qe.buttons.seek=H(k.selectors.buttons.seek),qe.buttons.play=D(k.selectors.buttons.play),qe.buttons.pause=H(k.selectors.buttons.pause),qe.buttons.restart=H(k.selectors.buttons.restart),qe.buttons.rewind=H(k.selectors.buttons.rewind),qe.buttons.forward=H(k.selectors.buttons.forward),qe.buttons.fullscreen=H(k.selectors.buttons.fullscreen),qe.buttons.mute=H(k.selectors.buttons.mute),qe.buttons.captions=H(k.selectors.buttons.captions),qe.progress={},qe.progress.container=H(k.selectors.progress.container),qe.progress.buffer={},qe.progress.buffer.bar=H(k.selectors.progress.buffer),qe.progress.buffer.text=qe.progress.buffer.bar&&qe.progress.buffer.bar.getElementsByTagName("span")[0],qe.progress.played=H(k.selectors.progress.played),qe.progress.tooltip=qe.progress.container&&qe.progress.container.querySelector("."+k.classes.tooltip),qe.volume={},qe.volume.input=H(k.selectors.volume.input),qe.volume.display=H(k.selectors.volume.display),qe.duration=H(k.selectors.duration),qe.currentTime=H(k.selectors.currentTime),qe.seekTime=D(k.selectors.seekTime),!0}catch(e){return E("It looks like there is a problem with your controls HTML"),G(!0),!1}}function z(){f(qe.container,k.selectors.container.replace(".",""),qe.supported.full)}function G(e){e&&o(k.types.html5,qe.type)?qe.media.setAttribute("controls",""):qe.media.removeAttribute("controls")}function J(e){var t=k.i18n.play;if(!L.undefined(k.title)&&k.title.length&&(t+=", "+k.title),qe.supported.full&&qe.buttons.play)for(var n=qe.buttons.play.length-1;n>=0;n--)qe.buttons.play[n].setAttribute("aria-label",t);L.htmlElement(e)&&e.setAttribute("title",k.i18n.frameTitle.replace("{title}",k.title))}function K(){if(!qe.media)return void E("No media element found!");if(qe.supported.full&&(f(qe.container,k.classes.type.replace("{0}",qe.type),!0),o(k.types.embed,qe.type)&&f(qe.container,k.classes.type.replace("{0}","video"),!0),f(qe.container,k.classes.stopped,k.autoplay),f(qe.container,k.classes.isIos,qe.browser.isIos),f(qe.container,k.classes.isTouch,qe.browser.isTouch),"video"===qe.type)){var e=t.createElement("div");e.setAttribute("class",k.classes.videoWrapper),i(qe.media,e),qe.videoContainer=e}o(k.types.embed,qe.type)&&($(),qe.embedId=null)}function $(){for(var n=t.createElement("div"),r=qe.embedId,o=qe.type+"-"+Math.floor(1e4*Math.random()),a=D('[id^="'+qe.type+'-"]'),i=a.length-1;i>=0;i--)u(a[i]);if(f(qe.media,k.classes.videoWrapper,!0),f(qe.media,k.classes.embedWrapper,!0),"youtube"===qe.type)qe.media.appendChild(n),n.setAttribute("id",o),L.object(e.YT)?Z(r,n):(s(k.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){Z(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===qe.type)if(qe.media.appendChild(n),n.setAttribute("id",o),L.object(e.Vimeo))ee(r,n);else{s(k.urls.vimeo.api);var l=e.setInterval(function(){L.object(e.Vimeo)&&(e.clearInterval(l),ee(r,n))},50)}else if("soundcloud"===qe.type){var c=t.createElement("iframe");c.loaded=!1,v(c,"load",function(){c.loaded=!0}),p(c,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:o}),n.appendChild(c),qe.media.appendChild(n),e.SC||s(k.urls.soundcloud.api);var d=e.setInterval(function(){e.SC&&c.loaded&&(e.clearInterval(d),te.call(c))},50)}}function Q(){qe.container.plyr.embed=qe.embed,qe.supported.full&&Ve(),J(H("iframe"))}function Z(t,n){"timer"in qe||(qe.timer={}),qe.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:k.autoplay?1:0,controls:qe.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:k.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){w(qe.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;qe.media.play=function(){n.playVideo(),qe.media.paused=!1},qe.media.pause=function(){n.pauseVideo(),qe.media.paused=!0},qe.media.stop=function(){n.stopVideo(),qe.media.paused=!0},qe.media.duration=n.getDuration(),qe.media.paused=!0,qe.media.currentTime=n.getCurrentTime(),qe.media.muted=n.isMuted(),k.title=n.getVideoData().title,w(qe.media,"timeupdate"),e.clearInterval(qe.timer.buffering),qe.timer.buffering=e.setInterval(function(){qe.media.buffered=n.getVideoLoadedFraction(),w(qe.media,"progress"),1===qe.media.buffered&&(e.clearInterval(qe.timer.buffering),w(qe.media,"canplaythrough"))},200),Q(),_e()},onStateChange:function(t){var n=t.target;switch(e.clearInterval(qe.timer.playing),t.data){case 0:qe.media.paused=!0,w(qe.media,"ended");break;case 1:qe.media.paused=!1,qe.media.seeking=!1,w(qe.media,"play"),w(qe.media,"playing"),qe.timer.playing=e.setInterval(function(){qe.media.currentTime=n.getCurrentTime(),w(qe.media,"timeupdate")},100);break;case 2:qe.media.paused=!0,w(qe.media,"pause")}w(qe.container,"statechange",!1,{code:t.data})}}})}function ee(t,n){qe.embed=new e.Vimeo.Player(n.id,{id:t,loop:k.loop,autoplay:k.autoplay,byline:!1,portrait:!1,title:!1}),qe.media.play=function(){qe.embed.play(),qe.media.paused=!1},qe.media.pause=function(){qe.embed.pause(),qe.media.paused=!0},qe.media.stop=function(){qe.embed.stop(),qe.media.paused=!0},qe.media.paused=!0,qe.media.currentTime=0,Q(),qe.embed.getCurrentTime().then(function(e){qe.media.currentTime=e,w(qe.media,"timeupdate")}),qe.embed.getDuration().then(function(e){qe.media.duration=e,_e()}),k.captions.defaultActive&&qe.embed.enableTextTrack("en"),qe.embed.on("play",function(){qe.media.paused=!1,w(qe.media,"play"),w(qe.media,"playing")}),qe.embed.on("pause",function(){qe.media.paused=!0,w(qe.media,"pause")}),qe.embed.on("timeupdate",function(e){qe.media.seeking=!1,qe.media.currentTime=e.seconds,w(qe.media,"timeupdate")}),qe.embed.on("progress",function(e){qe.media.buffered=e.percent,w(qe.media,"progress"),1===parseInt(e.percent)&&w(qe.media,"canplaythrough")}),qe.embed.on("ended",function(){qe.media.paused=!0,w(qe.media,"ended")})}function te(){qe.embed=e.SC.Widget(this),qe.embed.bind(e.SC.Widget.Events.READY,function(){qe.media.play=function(){qe.embed.play(),qe.media.paused=!1},qe.media.pause=function(){qe.embed.pause(),qe.media.paused=!0},qe.media.stop=function(){qe.embed.seekTo(0),qe.embed.pause(),qe.media.paused=!0},qe.media.paused=!0,qe.media.currentTime=0,Q(),qe.embed.getPosition(function(e){qe.media.currentTime=e,w(qe.media,"timeupdate")}),qe.embed.getDuration(function(e){qe.media.duration=e/1e3,_e()}),qe.embed.bind(e.SC.Widget.Events.PLAY,function(){qe.media.paused=!1,w(qe.media,"play"),w(qe.media,"playing")}),qe.embed.bind(e.SC.Widget.Events.PAUSE,function(){qe.media.paused=!0,w(qe.media,"pause")}),qe.embed.bind(e.SC.Widget.Events.PLAY_PROGRESS,function(e){qe.media.seeking=!1,qe.media.currentTime=e.currentPosition/1e3,w(qe.media,"timeupdate")}),qe.embed.bind(e.SC.Widget.Events.LOAD_PROGRESS,function(e){qe.media.buffered=e.loadProgress,w(qe.media,"progress"),1===parseInt(e.loadProgress)&&w(qe.media,"canplaythrough")}),qe.embed.bind(e.SC.Widget.Events.FINISH,function(){qe.media.paused=!0,w(qe.media,"ended")}),k.autoplay&&qe.embed.play()})}function ne(){"play"in qe.media&&qe.media.play()}function re(){"pause"in qe.media&&qe.media.pause()}function se(e){e===!0?ne():e===!1?re():qe.media[qe.media.paused?"play":"pause"]()}function oe(e){L.number(e)||(e=k.seekTime),ie(qe.media.currentTime-e)}function ae(e){L.number(e)||(e=k.seekTime),ie(qe.media.currentTime+e)}function ie(e){var t=0,n=qe.media.paused,r=le();L.number(e)?t=e:L.object(e)&&o(["input","change"],e.type)&&(t=e.target.value/e.target.max*r),0>t?t=0:t>r&&(t=r),Ce(t);try{qe.media.currentTime=t.toFixed(4)}catch(s){}if(o(k.types.embed,qe.type)){switch(qe.type){case"youtube":qe.embed.seekTo(t);break;case"vimeo":qe.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":qe.embed.seekTo(1e3*t)}n&&re(),w(qe.media,"timeupdate"),qe.media.seeking=!0}_("Seeking to "+qe.media.currentTime+" seconds"),q(t)}function le(){var e=parseInt(k.duration),t=0;return null===qe.media.duration||isNaN(qe.media.duration)||(t=qe.media.duration),isNaN(e)?t:e}function ue(){f(qe.container,k.classes.playing,!qe.media.paused),f(qe.container,k.classes.stopped,qe.media.paused),Fe(qe.media.paused)}function ce(){M={x:e.pageXOffset||0,y:e.pageYOffset||0}}function pe(){e.scrollTo(M.x,M.y)}function de(e){var n=N.supportsFullScreen;e&&e.type===N.fullScreenEventName?qe.isFullscreen=N.isFullScreen(qe.container):n?(N.isFullScreen(qe.container)?N.cancelFullScreen():(ce(),N.requestFullScreen(qe.container)),qe.isFullscreen=N.isFullScreen(qe.container)):(qe.isFullscreen=!qe.isFullscreen,qe.isFullscreen?(v(t,"keyup",me),t.body.style.overflow="hidden"):(g(t,"keyup",me),t.body.style.overflow="")),f(qe.container,k.classes.fullscreen.active,qe.isFullscreen),qe.isFullscreen?qe.container.setAttribute("tabindex","-1"):qe.container.removeAttribute("tabindex"),Y(qe.isFullscreen),qe.buttons&&qe.buttons.fullscreen&&T(qe.buttons.fullscreen,qe.isFullscreen),w(qe.container,qe.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!qe.isFullscreen&&n&&pe()}function me(e){27===(e.which||e.charCode||e.keyCode)&&qe.isFullscreen&&de()}function fe(e){if(L["boolean"](e)||(e=!qe.media.muted),T(qe.buttons.mute,e),qe.media.muted=e,0===qe.media.volume&&ye(k.volume),o(k.types.embed,qe.type)){switch(qe.type){case"youtube":qe.embed[qe.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":qe.embed.setVolume(qe.media.muted?0:parseFloat(k.volume/k.volumeMax))}w(qe.media,"volumechange")}}function ye(t){var n=k.volumeMax,r=k.volumeMin;if(L.undefined(t)&&(t=k.volume,k.storage.enabled&&C().supported&&(t=e.localStorage.getItem(k.storage.key),e.localStorage.removeItem("plyr-volume"))),(null===t||isNaN(t))&&(t=k.volume),t>n&&(t=n),r>t&&(t=r),qe.media.volume=parseFloat(t/n),qe.volume.display&&(qe.volume.display.value=t),o(k.types.embed,qe.type)){switch(qe.type){case"youtube":qe.embed.setVolume(100*qe.media.volume);break;case"vimeo":case"soundcloud":qe.embed.setVolume(qe.media.volume)}w(qe.media,"volumechange")}qe.media.muted&&t>0&&fe()}function be(){var e=qe.media.muted?0:qe.media.volume*k.volumeMax;ye(e+k.volumeStep/5)}function ve(){var e=qe.media.muted?0:qe.media.volume*k.volumeMax;ye(e-k.volumeStep/5)}function ge(){var t=qe.media.muted?0:qe.media.volume*k.volumeMax;qe.supported.full&&(qe.volume.input&&(qe.volume.input.value=t),qe.volume.display&&(qe.volume.display.value=t)),k.storage.enabled&&C().supported&&!isNaN(t)&&e.localStorage.setItem(k.storage.key,t),f(qe.container,k.classes.muted,0===t),qe.supported.full&&qe.buttons.mute&&T(qe.buttons.mute,0===t)}function he(e){qe.supported.full&&qe.buttons.captions&&(L["boolean"](e)||(e=-1===qe.container.className.indexOf(k.classes.captions.active)),qe.captionsEnabled=e,T(qe.buttons.captions,qe.captionsEnabled),f(qe.container,k.classes.captions.active,qe.captionsEnabled),w(qe.container,qe.captionsEnabled?"captionsenabled":"captionsdisabled",!0))}function ke(e){var t="waiting"===e.type;clearTimeout(qe.timers.loading),qe.timers.loading=setTimeout(function(){f(qe.container,k.classes.loading,t)},t?250:0)}function we(e){if(qe.supported.full){var t=qe.progress.played,n=0,r=le();if(e)switch(e.type){case"timeupdate":case"seeking":if(qe.controls.pressed)return;n=x(qe.media.currentTime,r),"timeupdate"==e.type&&qe.buttons.seek&&(qe.buttons.seek.value=n);break;case"playing":case"progress":t=qe.progress.buffer,n=function(){var e=qe.media.buffered;return e&&e.length?x(e.end(0),r):L.number(e)?100*e:0}()}Te(t,n)}}function Te(e,t){if(qe.supported.full){if(L.undefined(t)&&(t=0),L.undefined(e)){if(!qe.progress||!qe.progress.buffer)return;e=qe.progress.buffer}L.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function xe(e,t){if(t){isNaN(e)&&(e=0),qe.secs=parseInt(e%60),qe.mins=parseInt(e/60%60),qe.hours=parseInt(e/60/60%60);var n=parseInt(le()/60/60%60)>0;qe.secs=("0"+qe.secs).slice(-2),qe.mins=("0"+qe.mins).slice(-2),t.innerHTML=(n?qe.hours+":":"")+qe.mins+":"+qe.secs}}function _e(){if(qe.supported.full){var e=le()||0;!qe.duration&&k.displayDuration&&qe.media.paused&&xe(e,qe.currentTime),qe.duration&&xe(e,qe.duration),Ee()}}function Se(e){xe(qe.media.currentTime,qe.currentTime),e&&"timeupdate"==e.type&&qe.media.seeking||we(e)}function Ce(e){L.number(e)||(e=0);var t=le(),n=x(e,t);qe.progress&&qe.progress.played&&(qe.progress.played.value=n),qe.buttons&&qe.buttons.seek&&(qe.buttons.seek.value=n)}function Ee(e){var t=le();if(k.tooltips.seek&&qe.progress.container&&0!==t){var n=qe.progress.container.getBoundingClientRect(),r=0,s=k.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!y(qe.progress.tooltip,s))return;r=qe.progress.tooltip.style.left.replace("%","")}0>r?r=0:r>100&&(r=100),xe(t/100*r,qe.progress.tooltip),qe.progress.tooltip.style.left=r+"%",e&&o(["mouseenter","mouseleave"],e.type)&&f(qe.progress.tooltip,s,"mouseenter"===e.type)}}function Fe(t){if(k.hideControls&&"audio"!==qe.type){var n=0,r=!1,s=t;if(L["boolean"](t)||(t&&t.type?(r="enterfullscreen"===t.type,s=o(["mousemove","touchstart","mouseenter","focus"],t.type),o(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=y(qe.container,k.classes.hideControls)),e.clearTimeout(qe.timers.hover),s||qe.media.paused){if(f(qe.container,k.classes.hideControls,!1),qe.media.paused)return;qe.browser.isTouch&&(n=3e3)}s&&qe.media.paused||(qe.timers.hover=e.setTimeout(function(){(!qe.controls.pressed&&!qe.controls.hover||r)&&f(qe.container,k.classes.hideControls,!0)},n))}}function Ae(e){if(!L.undefined(e))return void Ie(e);var t;switch(qe.type){case"youtube":t=qe.embed.getVideoUrl();break;case"vimeo":qe.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":qe.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=qe.media.currentSrc}return t||""}function Ie(n){if(!(L.object(n)&&"sources"in n&&n.sources.length))return void E("Invalid source format");if(re(),Ce(),Te(),Le(),"youtube"===qe.type?(qe.embed.destroy(),e.clearInterval(qe.timer.buffering),e.clearInterval(qe.timer.playing)):"video"===qe.type&&qe.videoContainer&&u(qe.videoContainer),qe.embed=null,u(qe.media),"type"in n&&(qe.type=n.type,"video"===qe.type)){var r=n.sources[0];"type"in r&&o(k.types.embed,r.type)&&(qe.type=r.type)}switch(qe.supported=A(qe.type),qe.type){case"video":qe.media=t.createElement("video");break;case"audio":qe.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":qe.media=t.createElement("div"),qe.embedId=n.sources[0].src}c(qe.container,qe.media),L["boolean"](n.autoplay)&&(k.autoplay=n.autoplay),o(k.types.html5,qe.type)&&(k.crossorigin&&qe.media.setAttribute("crossorigin",""),k.autoplay&&qe.media.setAttribute("autoplay",""),"poster"in n&&qe.media.setAttribute("poster",n.poster),k.loop&&qe.media.setAttribute("loop","")),qe.container.className=qe.originalClassName,f(qe.container,k.classes.fullscreen.active,qe.isFullscreen),f(qe.container,k.classes.captions.active,qe.captionsEnabled),z(),o(k.types.html5,qe.type)&&X("source",n.sources),K(),o(k.types.html5,qe.type)?("tracks"in n&&X("track",n.tracks),qe.media.load(),Ve(),_e()):o(k.types.embed,qe.type)&&!qe.supported.full&&Ve(),k.title=n.title,J(),qe.container.plyr.media=qe.media}function Ne(e){"video"===qe.type&&qe.media.setAttribute("poster",e)}function Me(){function n(){var e=qe.media.paused;e?ne():re();var t=qe.buttons[e?"play":"pause"],n=qe.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=y(t,k.classes.tabFocus);setTimeout(function(){n.focus(),r&&(f(t,k.classes.tabFocus,!1),f(n,k.classes.tabFocus,!0))},100)}}function r(){var e=t.activeElement;e&&e!=t.body?t.querySelector&&(e=t.querySelector(":focus")):e=null;for(var n in qe.buttons){var r=qe.buttons[n];if(L.nodeList(r))for(var s=0;s0)&&(t?ve():be()),(e.deltaY>0||e.deltaX<0)&&(t?be():ve())})}function Pe(){if(v(qe.media,"timeupdate seeking",Se),v(qe.media,"timeupdate",q),v(qe.media,"durationchange loadedmetadata",_e),v(qe.media,"ended",function(){"video"===qe.type&&V(),ue(),ie(0),_e(),"video"===qe.type&&k.showPosterOnEnd&&qe.media.load()}),v(qe.media,"progress playing",we),v(qe.media,"volumechange",ge),v(qe.media,"play pause",ue),v(qe.media,"waiting canplay seeked",ke), +k.clickToPlay&&"audio"!==qe.type){var e=H("."+k.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",v(e,"click",function(){k.hideControls&&qe.browser.isTouch&&!qe.media.paused||(qe.media.paused?ne():qe.media.ended?(ie(),ne()):re())})}k.disableContextMenu&&v(qe.media,"contextmenu",function(e){e.preventDefault()}),v(qe.media,k.events.join(" "),function(e){w(qe.container,e.type,!0)})}function Le(){if(o(k.types.html5,qe.type)){for(var e=qe.media.querySelectorAll("source"),t=0;t1)for(var c=0;c` tag and then call `ply If you want to use our CDN for the JavaScript, you can use the following: ```html - + ``` ### CSS @@ -134,11 +134,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/1.8.10/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/1.8.11/plyr.svg`. ## Advanced diff --git a/src/js/plyr.js b/src/js/plyr.js index a9c923f73..9cab9e095 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -1,6 +1,6 @@ // ========================================================================== // Plyr -// plyr.js v1.8.10 +// plyr.js v1.8.11 // https://github.com/selz/plyr // License: The MIT License (MIT) // ========================================================================== @@ -23,7 +23,6 @@ } }(typeof window !== 'undefined' ? window : this, function(window, document) { 'use strict'; - /*global YT,$f*/ // Globals var fullscreen, @@ -44,7 +43,7 @@ displayDuration: true, loadSprite: true, iconPrefix: 'plyr', - iconUrl: 'https://cdn.plyr.io/1.8.10/plyr.svg', + iconUrl: 'https://cdn.plyr.io/1.8.11/plyr.svg', clickToPlay: true, hideControls: true, showPosterOnEnd: false, @@ -146,7 +145,7 @@ // URLs urls: { vimeo: { - api: 'https://cdn.plyr.io/froogaloop/1.0.1/plyr.froogaloop.js', + api: 'https://player.vimeo.com/api/player.js', }, youtube: { api: 'https://www.youtube.com/iframe_api' @@ -587,6 +586,12 @@ boolean: function(input) { return typeof input === 'boolean'; }, + nodeList: function(input) { + return input instanceof NodeList; + }, + htmlElement: function(input) { + return input instanceof HTMLElement; + }, undefined: function(input) { return typeof input === 'undefined'; } @@ -911,6 +916,7 @@ // Setup captions function _setupCaptions() { + // Bail if not HTML5 video if (plyr.type !== 'video') { return; } @@ -1271,13 +1277,13 @@ if (config.selectors.controls.container !== null) { container = config.selectors.controls.container; - if (_is.string(selector)) { + if (_is.string(container)) { container = document.querySelector(container); } } // Inject into the container by default - if (!(container instanceof HTMLElement)) { + if (!_is.htmlElement(container)) { container = plyr.container } @@ -1387,7 +1393,7 @@ // Set iframe title // https://github.com/Selz/plyr/issues/124 - if (iframe instanceof HTMLElement) { + if (_is.htmlElement(iframe)) { iframe.setAttribute('title', config.i18n.frameTitle.replace('{title}', config.title)); } } @@ -1467,7 +1473,7 @@ container.setAttribute('id', id); // Setup API - if (_is.object(YT)) { + if (_is.object(window.YT)) { _youTubeReady(mediaId, container); } else { @@ -1488,41 +1494,27 @@ } // Vimeo else if (plyr.type === 'vimeo') { - // Inject the iframe - var vimeo = document.createElement('iframe'); - - // Watch for iframe load - vimeo.loaded = false; - _on(vimeo, 'load', function() { vimeo.loaded = true; }); - - _setAttributes(vimeo, { - 'src': 'https://player.vimeo.com/video/' + mediaId + '?player_id=' + id + '&api=1&badge=0&byline=0&portrait=0&title=0', - 'id': id, - 'allowfullscreen': '', - 'frameborder': 0 - }); + // Create the YouTube container + plyr.media.appendChild(container); - // If full support, we can use custom controls (hiding Vimeos), if not, use Vimeo - if (plyr.supported.full) { - container.appendChild(vimeo); - plyr.media.appendChild(container); - } - else { - plyr.media.appendChild(vimeo); - } + // Set ID + container.setAttribute('id', id); // Load the API if not already - if (!('$f' in window)) { + if (!_is.object(window.Vimeo)) { _injectScript(config.urls.vimeo.api); - } - // Wait for fragaloop load - var vimeoTimer = window.setInterval(function() { - if ('$f' in window && vimeo.loaded) { - window.clearInterval(vimeoTimer); - _vimeoReady.call(vimeo); - } - }, 50); + // Wait for fragaloop load + var vimeoTimer = window.setInterval(function() { + if (_is.object(window.Vimeo)) { + window.clearInterval(vimeoTimer); + _vimeoReady(mediaId, container); + } + }, 50); + } + else { + _vimeoReady(mediaId, container); + } } // Soundcloud else if (plyr.type === 'soundcloud') { @@ -1580,7 +1572,7 @@ // Setup instance // https://developers.google.com/youtube/iframe_api_reference - plyr.embed = new YT.Player(container.id, { + plyr.embed = new window.YT.Player(container.id, { videoId: videoId, playerVars: { autoplay: (config.autoplay ? 1 : 0), @@ -1708,86 +1700,86 @@ } // Vimeo ready - function _vimeoReady() { - /* jshint validthis: true */ - plyr.embed = $f(this); - - // Setup on ready - plyr.embed.addEvent('ready', function() { + function _vimeoReady(mediaId, container) { + // Setup player + plyr.embed = new window.Vimeo.Player(container.id, { + id: mediaId, + loop: config.loop, + autoplay: config.autoplay, + byline: false, + portrait: false, + title: false + }); - // Create a faux HTML5 API using the Vimeo API - plyr.media.play = function() { - plyr.embed.api('play'); - plyr.media.paused = false; - }; - plyr.media.pause = function() { - plyr.embed.api('pause'); - plyr.media.paused = true; - }; - plyr.media.stop = function() { - plyr.embed.api('stop'); - plyr.media.paused = true; - }; + // Create a faux HTML5 API using the Vimeo API + plyr.media.play = function() { + plyr.embed.play(); + plyr.media.paused = false; + }; + plyr.media.pause = function() { + plyr.embed.pause(); plyr.media.paused = true; - plyr.media.currentTime = 0; - - // Update UI - _embedReady(); - - plyr.embed.api('getCurrentTime', function (value) { - plyr.media.currentTime = value; + }; + plyr.media.stop = function() { + plyr.embed.stop(); + plyr.media.paused = true; + }; + plyr.media.paused = true; + plyr.media.currentTime = 0; - // Trigger timeupdate - _triggerEvent(plyr.media, 'timeupdate'); - }); + // Update UI + _embedReady(); - plyr.embed.api('getDuration', function(value) { - plyr.media.duration = value; + plyr.embed.getCurrentTime().then(function (value) { + plyr.media.currentTime = value; - // Display duration if available - _displayDuration(); - }); + // Trigger timeupdate + _triggerEvent(plyr.media, 'timeupdate'); + }); - plyr.embed.addEvent('play', function() { - plyr.media.paused = false; - _triggerEvent(plyr.media, 'play'); - _triggerEvent(plyr.media, 'playing'); - }); + plyr.embed.getDuration().then(function(value) { + plyr.media.duration = value; - plyr.embed.addEvent('pause', function() { - plyr.media.paused = true; - _triggerEvent(plyr.media, 'pause'); - }); + // Display duration if available + _displayDuration(); + }); - plyr.embed.addEvent('playProgress', function(data) { - plyr.media.seeking = false; - plyr.media.currentTime = data.seconds; - _triggerEvent(plyr.media, 'timeupdate'); - }); + // Captions + if (config.captions.defaultActive) { + plyr.embed.enableTextTrack('en'); + } - plyr.embed.addEvent('loadProgress', function(data) { - plyr.media.buffered = data.percent; - _triggerEvent(plyr.media, 'progress'); + plyr.embed.on('play', function() { + plyr.media.paused = false; + _triggerEvent(plyr.media, 'play'); + _triggerEvent(plyr.media, 'playing'); + }); - if (parseInt(data.percent) === 1) { - // Trigger event - _triggerEvent(plyr.media, 'canplaythrough'); - } - }); + plyr.embed.on('pause', function() { + plyr.media.paused = true; + _triggerEvent(plyr.media, 'pause'); + }); - plyr.embed.addEvent('finish', function() { - plyr.media.paused = true; - _triggerEvent(plyr.media, 'ended'); - }); + plyr.embed.on('timeupdate', function(data) { + plyr.media.seeking = false; + plyr.media.currentTime = data.seconds; + _triggerEvent(plyr.media, 'timeupdate'); + }); - // Always seek to 0 - // plyr.embed.api('seekTo', 0); + plyr.embed.on('progress', function(data) { + plyr.media.buffered = data.percent; + _triggerEvent(plyr.media, 'progress'); - // Autoplay - if (config.autoplay) { - plyr.embed.api('play'); + if (parseInt(data.percent) === 1) { + // Trigger event + _triggerEvent(plyr.media, 'canplaythrough'); } }); + + plyr.embed.on('ended', function() { + plyr.media.paused = true; + _triggerEvent(plyr.media, 'ended'); + }); } // Soundcloud ready @@ -1963,7 +1955,7 @@ case 'vimeo': // Round to nearest second for vimeo - plyr.embed.api('seekTo', targetTime.toFixed(0)); + plyr.embed.setCurrentTime(targetTime.toFixed(0)); break; case 'soundcloud': @@ -2132,9 +2124,6 @@ break; case 'vimeo': - plyr.embed.api('setVolume', plyr.media.muted ? 0 : parseFloat(config.volume / config.volumeMax)); - break; - case 'soundcloud': plyr.embed.setVolume(plyr.media.muted ? 0 : parseFloat(config.volume / config.volumeMax)); break; @@ -2187,16 +2176,12 @@ // Embeds if (_inArray(config.types.embed, plyr.type)) { - // YouTube switch(plyr.type) { case 'youtube': plyr.embed.setVolume(plyr.media.volume * 100); break; case 'vimeo': - plyr.embed.api('setVolume', plyr.media.volume); - break; - case 'soundcloud': plyr.embed.setVolume(plyr.media.volume); break; @@ -2369,7 +2354,7 @@ } // One progress element passed - if (progress instanceof HTMLElement) { + if (_is.htmlElement(progress)) { progress.value = value; } // Object of progress + text element @@ -2598,7 +2583,7 @@ break; case 'vimeo': - plyr.embed.api('getVideoUrl', function (value) { + plyr.embed.getVideoUrl.then(function (value) { url = value; }); break; @@ -2826,7 +2811,7 @@ for (var button in plyr.buttons) { var element = plyr.buttons[button]; - if (element instanceof NodeList) { + if (_is.nodeList(element)) { for (var i = 0; i < element.length; i++) { _toggleClass(element[i], config.classes.tabFocus, (element[i] === focused)); } @@ -3377,11 +3362,11 @@ targets = document.querySelectorAll(targets); } // Single HTMLElement passed - else if (targets instanceof HTMLElement) { + else if (_is.htmlElement(targets)) { targets = [targets]; } // No selector passed, possibly options as first argument - else if (!(targets instanceof NodeList) && !_is.string(targets)) { + else if (!_is.nodeList(targets) && !_is.array(targets) && !_is.string(targets)) { // If options are the first argument if (_is.undefined(options) && _is.object(targets)) { options = targets; @@ -3391,17 +3376,17 @@ targets = document.querySelectorAll(selector); } + // Convert NodeList to array + if (_is.nodeList(targets)) { + targets = Array.prototype.slice.call(targets); + } + // Bail if disabled or no basic support // You may want to disable certain UAs etc if (!supported().basic || !targets.length) { return false; } - // Convert NodeList to array - if (targets instanceof NodeList) { - targets = Array.prototype.slice.call(targets); - } - // Check if the targets have multiple media elements for (var i = 0; i < targets.length; i++) { var target = targets[i];