diff --git a/dist/plyr.js b/dist/plyr.js index 458b835e..673c0ed5 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(n,s){function f(e,t,n,a){d.event(e,t,n,d.extend({},a,{plyr:Re}))}function y(e){return De.elements.container.querySelectorAll(e)}function g(e){return y(e)[0]}function b(e){c.string(e)?(d.removeElement(De.elements[e]),De.elements[e]=null):d.removeElement(e)}function v(){function e(e){9===e.which&&De.fullscreen.active&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=y("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];d.on(De.elements.container,"keydown",e)}function h(e,t){c.string(t)?d.insertElement(e,De.elements.media,{src:t}):c.array(t)&&t.forEach(function(t){d.insertElement(e,De.elements.media,t)})}function k(){return{url:s.iconUrl,absolute:0===s.iconUrl.indexOf("http")||De.browser.isIE}}function C(e,n){var a="http://www.w3.org/2000/svg",l=k(),r=(l.absolute?"":l.url)+"#"+s.iconPrefix,i=t.createElementNS(a,"svg");d.setAttributes(i,d.extend(n,{role:"presentation"}));var o=t.createElementNS(a,"use");return o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",r+"-"+e),i.appendChild(o),i}function E(e){var t=s.i18n[e];switch(e){case"pip":t="PIP";break;case"airplay":t="AirPlay"}return d.createElement("span",{class:s.classes.hidden},t)}function w(e){var t=d.createElement("span",{class:s.classes.menu.value});return t.appendChild(d.createElement("span",{class:s.classes.menu.badge},e)),t}function A(e,t){var n,a,l,r=d.createElement("button");switch(c.object(t)||(t={}),"class"in t?t.class.indexOf(s.classes.control)===-1&&(t.class+=" "+s.classes.control):t.class=s.classes.control,e){case"mute":l="toggleMute",n="volume",a="muted";break;case"captions":l="toggleCaptions",n="captions-off",a="captions-on";break;case"fullscreen":l="toggleFullscreen",n="enter-fullscreen",a="exit-fullscreen";break;case"play-large":t.class="plyr__play-large",e="play",l="play",n="play";break;default:l=e,n=e}return d.extend(t,d.getAttributesFromSelector(s.selectors.buttons[e],t)),c.string(a)&&r.appendChild(C(a,{class:"icon--"+a})),r.appendChild(C(n)),r.appendChild(E(l)),d.setAttributes(r,t),De.elements.buttons[e]=r,r}function S(e,t){var n=d.createElement("label",{for:t.id,class:s.classes.hidden},s.i18n[e]),a=d.createElement("input",d.extend(d.getAttributesFromSelector(s.selectors.inputs[e]),{type:"range",min:0,max:100,step:.1,value:0,autocomplete:"off"},t));return De.elements.inputs[e]=a,{label:n,input:a}}function T(e,t){var n=d.createElement("progress",d.extend(d.getAttributesFromSelector(s.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(d.createElement("span",null,"0"));var a="";switch(e){case"played":a=s.i18n.played;break;case"buffer":a=s.i18n.buffered}n.textContent="% "+a.toLowerCase()}return De.elements.display[e]=n,n}function x(e){var t=d.createElement("span",{class:"plyr__time"});return t.appendChild(d.createElement("span",{class:s.classes.hidden},s.i18n[e])),t.appendChild(d.createElement("span",d.getAttributesFromSelector(s.selectors.display[e]),"00:00")),De.elements.display[e]=t,t}function F(e){var t=d.createElement("div",d.getAttributesFromSelector(s.selectors.controls.wrapper));if(d.inArray(s.controls,"restart")&&t.appendChild(A("restart")),d.inArray(s.controls,"rewind")&&t.appendChild(A("rewind")),d.inArray(s.controls,"play")&&(t.appendChild(A("play")),t.appendChild(A("pause"))),d.inArray(s.controls,"fast-forward")&&t.appendChild(A("fast-forward")),d.inArray(s.controls,"progress")){var n=d.createElement("span",d.getAttributesFromSelector(s.selectors.progress)),a=S("seek",{id:"plyr-seek-"+e.id});if(n.appendChild(a.label),n.appendChild(a.input),n.appendChild(T("played")),n.appendChild(T("buffer")),s.tooltips.seek){var l=d.createElement("span",{role:"tooltip",class:s.classes.tooltip},"00:00");n.appendChild(l),De.elements.display.seekTooltip=l}De.elements.progress=n,t.appendChild(De.elements.progress)}if(d.inArray(s.controls,"current-time")&&t.appendChild(x("currentTime")),d.inArray(s.controls,"duration")&&t.appendChild(x("duration")),d.inArray(s.controls,"mute")&&t.appendChild(A("mute")),d.inArray(s.controls,"volume")){var r=d.createElement("span",{class:"plyr__volume"}),i={max:10,value:s.volume},o=S("volume",d.extend(i,{id:"plyr-volume-"+e.id}));r.appendChild(o.label),r.appendChild(o.input);var u=T("volume",i);r.appendChild(u),t.appendChild(r)}if(d.inArray(s.controls,"captions")&&t.appendChild(A("captions")),d.inArray(s.controls,"settings")){var c=d.createElement("span",d.extend(d.getAttributesFromSelector(s.selectors.buttons.settings),{class:"plyr__menu"}));c.appendChild(A("settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var p=d.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=d.createElement("div"),y=d.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=d.createElement("ul",{role:"tablist"});["captions","quality","speed","loop"].forEach(function(t){var n=d.createElement("li",{role:"tab"}),a=d.createElement("button",d.extend(d.getAttributesFromSelector(s.selectors.buttons.settings),{type:"button",class:s.classes.control+" "+s.classes.control+"--forward",id:"plyr-settings-"+e.id+"-"+t+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+t,"aria-expanded":!1}),s.i18n[t]),l=d.createElement("span",{class:s.classes.menu.value});l.innerHTML=e[t],a.appendChild(l),n.appendChild(a),g.appendChild(n),De.elements.settings.tabs[t]=n}),y.appendChild(g),f.appendChild(y),["captions","quality","speed","loop"].forEach(function(t){var n=d.createElement("div",{id:"plyr-settings-"+e.id+"-"+t,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+t+"-tab",role:"tabpanel",tabindex:-1}),a=d.createElement("button",{type:"button",class:s.classes.control+" "+s.classes.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},s.i18n[t]);n.appendChild(a);var l=d.createElement("ul");n.appendChild(l),f.appendChild(n),De.elements.settings.panes[t]=n}),p.appendChild(f),c.appendChild(p),t.appendChild(c),De.elements.settings.menu=c}return d.inArray(s.controls,"pip")&&m.pip&&t.appendChild(A("pip")),d.inArray(s.controls,"airplay")&&m.airplay&&t.appendChild(A("airplay")),d.inArray(s.controls,"fullscreen")&&t.appendChild(A("fullscreen")),De.elements.controls=t,P(),N(),t}function _(e,n){function a(e){var t="";switch(e){case"hd2160":t="4K";break;case"hd1440":t="WQHD";break;case"hd1080":t="HD";break;case"hd720":t="HD"}return t.length?w(t):null}function l(e){switch(e){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";default:return"Auto"}}var r=De.elements.settings.panes.quality.querySelector("ul");if(d.emptyElement(r),c.array(e)&&!c.empty(e)){var i=e.filter(function(e){return["tiny","small"].indexOf(e)===-1});i.forEach(function(e){var n=d.createElement("li"),i=d.createElement("label",{class:s.classes.control,for:"plyr-quality-"+e}),o=d.createElement("input",d.extend(d.getAttributesFromSelector(s.selectors.inputs.quality),{type:"radio",id:"plyr-quality-"+e,name:"plyr-quality",value:e}));e===s.quality.selected&&o.setAttribute("checked",""),i.appendChild(o),i.appendChild(t.createTextNode(l(e)));var u=a(e);c.htmlElement(u)&&i.appendChild(u),n.appendChild(i),r.appendChild(n)})}}function P(){var e=["start","end","all","reset"],t=De.elements.settings.panes.loop.querySelector("ul");d.emptyElement(t),e.forEach(function(e){var n=d.createElement("li"),a=d.createElement("button",d.extend(d.getAttributesFromSelector(s.selectors.buttons.loop),{type:"button",class:s.classes.control,"data-plyr-loop-action":e}),s.i18n[e]);if(d.inArray(["start","end"],e)){var l=w("0:00");a.appendChild(l)}n.appendChild(a),t.appendChild(n)})}function I(){var e=De.elements.settings.panes.captions.querySelector("ul");if(d.emptyElement(e),!c.empty(De.captions.tracks)){var n=[].map.call(De.captions.tracks,function(e){return{language:e.language,badge:!0,label:c.empty(e.label)?e.language.toUpperCase():e.label}});n.unshift({language:"off",label:s.i18n.none}),n.forEach(function(n){var a=d.createElement("li"),l=d.createElement("label",{class:s.classes.control,for:"plyr-language-"+n.language}),r=d.createElement("input",d.extend(d.getAttributesFromSelector(s.selectors.inputs.language),{type:"radio",id:"plyr-language-"+n.language,name:"plyr-language",value:n.language}));n.language===s.captions.language.toLowerCase()&&r.setAttribute("checked",""),l.appendChild(r),l.appendChild(t.createTextNode(n.label||n.language)),n.badge&&l.appendChild(w(n.language.toUpperCase())),a.appendChild(l),e.appendChild(a)})}}function N(e){var t=De.elements.settings.panes.speed.querySelector("ul");d.emptyElement(t),c.array(e)||(e=s.speed.options),e.forEach(function(e){var n=d.createElement("li"),a=d.createElement("label",{class:s.classes.control,for:"plyr-speed-"+e.toString().replace(".","-")}),l=d.createElement("input",d.extend(d.getAttributesFromSelector(s.selectors.inputs.speed),{type:"radio",id:"plyr-speed-"+e.toString().replace(".","-"),name:"plyr-speed",value:e}));e===s.speed.selected&&l.setAttribute("checked",""),a.appendChild(l),a.insertAdjacentHTML("beforeend","×"+e),n.appendChild(a),t.appendChild(n)})}function q(){if(De.supported.full&&("audio"!==De.type||s.fullscreen.allowAudio)&&s.fullscreen.enabled){var e=m.fullscreen;e||s.fullscreen.fallback&&!d.inFrame()?(He((e?"Native":"Fallback")+" fullscreen enabled"),d.toggleClass(De.elements.container,s.classes.fullscreen.enabled,!0)):He("Fullscreen not supported and fallback disabled"),De.elements.buttons&&De.elements.buttons.fullscreen&&d.toggleState(De.elements.buttons.fullscreen,!1),v()}}function L(e){if(d.inArray(["video","vimeo"],De.type)&&("video"!==De.type||m.textTracks)&&(c.htmlElement(De.elements.captions)||(De.elements.captions=d.createElement("div",d.getAttributesFromSelector(s.selectors.captions)),console.warn(De.type),"video"===De.type?De.elements.wrapper.appendChild(De.elements.captions):(console.warn(De.elements.media),De.elements.media.appendChild(De.elements.captions))),De.captions.tracks=c.array(e)?e:De.elements.media.textTracks,d.toggleClass(De.elements.container,s.classes.captions.enabled,!c.empty(De.captions.tracks)),!c.empty(De.captions.tracks))){if(R(),"video"===De.type){var t=s.captions.language.toLowerCase();[].forEach.call(De.captions.tracks,function(e){d.off(e,"cuechange",O),e.mode="hidden",e.language===t&&(De.captions.currentTrack=e)}),c.track(De.captions.currentTrack)||(Ye("No language found to match "+t+" in tracks"),De.captions.currentTrack=De.captions.tracks[0]);var n=De.captions.currentTrack;c.track(n)&&d.inArray(["captions","subtitles"],n.kind)&&(d.on(n,"cuechange",O),n.activeCues&&n.activeCues.length>0&&O(n))}I()}}function j(){return!m.textTracks||c.empty(De.captions.tracks)?"No Subs":De.captions.enabled?De.captions.currentTrack.label:"Disabled"}function O(e){c.event(e)&&(e=e.target);var t=e.activeCues[0];c.cue(t)?V(t.getCueAsHTML()):V()}function M(e){c.string(e)?s.captions.language=e.toLowerCase():c.event(e)&&(s.captions.language=e.target.value.toLowerCase()),V(),L()}function V(e){if(c.htmlElement(De.elements.captions)){var t=d.createElement("span");d.emptyElement(De.elements.captions),c.undefined(e)&&(e=""),c.string(e)?t.textContent=e.trim():t.appendChild(e),De.elements.captions.appendChild(t)}else Ye("No captions element to render to")}function R(){if(De.elements.buttons.captions){var e=De.storage.captions;c.boolean(e)?s.captions.active=e:e=s.captions.active,e&&(d.toggleClass(De.elements.container,s.classes.captions.active,!0),d.toggleState(De.elements.buttons.captions,!0))}}function D(e){De.supported.full&&De.elements.buttons.captions&&(c.boolean(e)||(e=De.elements.container.className.indexOf(s.classes.captions.active)===-1),De.captions.enabled=e,d.toggleState(De.elements.buttons.captions,De.captions.enabled),d.toggleClass(De.elements.container,s.classes.captions.active,De.captions.enabled),f(De.elements.container,De.captions.enabled?"captionsenabled":"captionsdisabled",!0),Q({captions:De.captions.enabled}))}function W(){if(s.loadSprite){var e=k();e.absolute?(He("AJAX loading absolute SVG sprite"+(De.browser.isIE?" (due to IE)":"")),a(e.url,"sprite-plyr")):He("Sprite will be used as external resource directly")}d.inArray(s.controls,"play-large")&&(De.elements.buttons.playLarge=A("play-large"),De.elements.container.appendChild(De.elements.buttons.playLarge)),De.id=Math.floor(1e4*Math.random());var n=null;n=c.string(s.controls)?s.controls:c.function(s.controls)?s.controls({id:De.id,seektime:s.seekTime}):F({id:De.id,seektime:s.seekTime,speed:se(),quality:"HD",captions:j(),loop:"None"});var l;if(c.string(s.selectors.controls.container)&&(l=t.querySelector(s.selectors.controls.container)),c.htmlElement(l)||(l=De.elements.container),c.htmlElement(n)?l.appendChild(n):l.insertAdjacentHTML("beforeend",n),c.htmlElement(De.elements.controls)&&B(),s.tooltips.controls)for(var r=y([s.selectors.controls.wrapper," ",s.selectors.labels," .",s.classes.hidden].join("")),i=r.length-1;i>=0;i--){var o=r[i];d.toggleClass(o,s.classes.hidden,!1),d.toggleClass(o,s.classes.tooltip,!0)}}function B(){try{return De.elements.controls=g(s.selectors.controls.wrapper),De.elements.buttons={play:y(s.selectors.buttons.play),pause:g(s.selectors.buttons.pause),restart:g(s.selectors.buttons.restart),rewind:g(s.selectors.buttons.rewind),forward:g(s.selectors.buttons.forward),mute:g(s.selectors.buttons.mute),pip:g(s.selectors.buttons.pip),airplay:g(s.selectors.buttons.airplay),settings:g(s.selectors.buttons.settings),captions:g(s.selectors.buttons.captions),fullscreen:g(s.selectors.buttons.fullscreen)},De.elements.progress=g(s.selectors.progress),De.elements.inputs={seek:g(s.selectors.inputs.seek),volume:g(s.selectors.inputs.volume)},De.elements.display={buffer:g(s.selectors.display.buffer),played:g(s.selectors.display.played),volume:g(s.selectors.display.volume),duration:g(s.selectors.display.duration),currentTime:g(s.selectors.display.currentTime)},c.htmlElement(De.elements.progress)&&(De.elements.display.seekTooltip=De.elements.progress.querySelector("."+s.classes.tooltip)),!0}catch(e){return Ye("It looks like there is a problem with your custom controls HTML",e),Y(!0),!1}}function H(){d.toggleClass(De.elements.container,s.selectors.container.replace(".",""),De.supported.full)}function Y(e){e&&d.inArray(u.html5,De.type)?De.elements.media.setAttribute("controls",""):De.elements.media.removeAttribute("controls")}function U(e){var t=s.i18n.play;if(c.string(s.title)&&!c.empty(s.title)&&(t+=", "+s.title,De.elements.container.setAttribute("aria-label",s.title)),De.supported.full&&(c.htmlElement(De.elements.buttons.play)&&De.elements.buttons.play.setAttribute("aria-label",t),c.htmlElement(De.elements.buttons.playLarge)&&De.elements.buttons.playLarge.setAttribute("aria-label",t)),c.htmlElement(e)){var n=c.string(s.title)&&!c.empty(s.title)?s.title:"video";e.setAttribute("title",s.i18n.frameTitle.replace("{title}",n))}}function K(){var t=null;De.storage={},m.storage&&s.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(s.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Q({volume:parseFloat(t)}):De.storage=JSON.parse(t)))}function Q(t){m.storage&&s.storage.enabled&&(d.extend(De.storage,t),e.localStorage.setItem(s.storage.key,JSON.stringify(De.storage)))}function X(){return De.elements.media?(De.supported.full&&(d.toggleClass(De.elements.container,s.classes.type.replace("{0}",De.type),!0),d.inArray(u.embed,De.type)&&d.toggleClass(De.elements.container,s.classes.type.replace("{0}","video"),!0),d.toggleClass(De.elements.container,s.classes.pip.enabled,m.pip&&"video"===De.type),d.toggleClass(De.elements.container,s.classes.airplay.enabled,m.airplay&&d.inArray(u.html5,De.type)),d.toggleClass(De.elements.container,s.classes.stopped,s.autoplay),d.toggleClass(De.elements.container,s.classes.isIos,De.browser.isIos),d.toggleClass(De.elements.container,s.classes.isTouch,De.browser.isTouch),"video"===De.type&&(De.elements.wrapper=d.createElement("div",{class:s.classes.videoWrapper}),d.wrap(De.elements.media,De.elements.wrapper))),void(d.inArray(u.embed,De.type)&&z())):void Ye("No media element found!")}function z(){var t,n=d.createElement("div"),a=De.type+"-"+Math.floor(1e4*Math.random());switch(De.type){case"youtube":t=d.parseYouTubeId(De.embedId);break;default:t=De.embedId}for(var l=y('[id^="'+De.type+'-"]'),r=l.length-1;r>=0;r--)d.removeElement(l[r]);if(d.toggleClass(De.elements.media,s.classes.videoWrapper,!0),d.toggleClass(De.elements.media,s.classes.embedWrapper,!0),"youtube"===De.type)De.elements.media.appendChild(n),n.setAttribute("id",a),c.object(e.YT)?G(t,n):(d.injectScript(s.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){G(t,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===De.type)if(De.supported.full?De.elements.media.appendChild(n):n=De.elements.media,n.setAttribute("id",a),c.object(e.Vimeo))J(t,n);else{d.injectScript(s.urls.vimeo.api);var i=e.setInterval(function(){c.object(e.Vimeo)&&(e.clearInterval(i),J(t,n))},50)}else if("soundcloud"===De.type){var o=d.createElement("iframe");o.loaded=!1,d.on(o,"load",function(){o.loaded=!0}),d.setAttributes(o,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+t,id:a}),n.appendChild(o),De.elements.media.appendChild(n),e.SC||d.injectScript(s.urls.soundcloud.api);var u=e.setInterval(function(){e.SC&&o.loaded&&(e.clearInterval(u),Z.call(o))},50)}}function $(){De.supported.full&&(Me(),Ve()),U(g("iframe"))}function G(t,n){De.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:s.autoplay?1:0,controls:De.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:s.captions.active?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:e.location.href},events:{onError:function(e){f(De.elements.container,"error",!0,{code:e.data,embed:e.target})},onPlaybackQualityChange:function(e){var t=e.target,n=t.getPlaybackQuality();console.warn(n)},onReady:function(t){var n=t.target;De.elements.media.play=function(){n.playVideo(),De.elements.media.paused=!1},De.elements.media.pause=function(){n.pauseVideo(),De.elements.media.paused=!0},De.elements.media.stop=function(){n.stopVideo(),De.elements.media.paused=!0},De.elements.media.duration=n.getDuratiutils.on(),De.elements.media.paused=!0,De.elements.media.currentTime=0,De.elements.media.muted=n.isMuted();var a=n.getPlaybackRate(),l=n.getAvailablePlaybackRates();console.warn(a,l),s.title=n.getVideoData().title,De.supported.full&&De.elements.media.querySelector("iframe").setAttribute("tabindex",-1),$(),f(De.elements.media,"timeupdate"),f(De.elements.media,"durationchange"),e.clearInterval(We.buffering),We.buffering=e.setInterval(function(){De.elements.media.buffered=n.getVideoLoadedFraction(),(null===De.elements.media.lastBuffered||De.elements.media.lastBuffered=n)return;s.loop.end=n,s.loop.indicator.end=De.elements.display.played.value;break;case"all":s.loop.start=0,s.loop.end=De.elements.media.duration-2,s.loop.indicator.start=0,s.loop.indicator.end=100;break;case"toggle":s.loop.active?(s.loop.start=0,s.loop.end=null):(s.loop.start=0,s.loop.end=De.elements.media.duration-2);break;default:s.loop.start=0,s.loop.end=null}s.loop.active=c.number(s.loop.start)&&c.number(s.loop.end);var a=(we(s.loop.start,g('[data-plyr-loop="start"]')),null);c.number(s.loop.end)&&(a=we(s.loop.end,t.querySelector('[data-loop__value="loopout"]'))),s.loop.active}function le(e){return c.event(e)?e=parseFloat(e.target.value):c.number(e)||(e=parseFloat(De.storage.speed||s.speed.selected)),e<.1&&(e=.1),e>2&&(e=2),c.array(s.speed.options)?(s.speed.selected=e,De.elements.media.playbackRate=e,void Q({speed:e})):void Ye("Invalid speeds format")}function se(){return s.speed.selected.toFixed(1).toString().replace(".0","")+"×"}function re(e){c.number(e)||(e=s.seekTime),oe(De.elements.media.currentTime-e)}function ie(e){c.number(e)||(e=s.seekTime),oe(De.elements.media.currentTime+e)}function oe(e){var t=0,n=De.elements.media.paused,a=ue();c.number(e)?t=e:c.event(e)&&d.inArray(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Te(t);try{De.elements.media.currentTime=t.toFixed(4)}catch(e){}if(d.inArray(u.embed,De.type)){switch(De.type){case"youtube":De.embed.seekTo(t);break;case"vimeo":De.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":De.embed.seekTo(1e3*t)}n&&te(),f(De.elements.media,"timeupdate"),De.elements.media.seeking=!0,f(De.elements.media,"seeking")}He("Seeking to "+De.elements.media.currentTime+" seconds")}function ue(){var e=parseInt(s.duration),t=0;return null===De.elements.media.duration||isNaN(De.elements.media.duration)||(t=De.elements.media.duration),isNaN(e)?t:e}function ce(){d.toggleClass(De.elements.container,s.classes.playing,!De.elements.media.paused),d.toggleClass(De.elements.container,s.classes.stopped,De.elements.media.paused),Fe(De.elements.media.paused)}function de(){i={x:e.pageXOffset||0,y:e.pageYOffset||0}}function pe(){e.scrollTo(i.x,i.y)}function me(e){var n=m.fullscreen;if(n){if(!e||e.type!==p.eventType)return p.isFullScreen(De.elements.container)?p.cancelFullScreen():(de(),p.requestFullScreen(De.elements.container)),void(De.fullscreen.active=p.isFullScreen(De.elements.container));De.fullscreen.active=p.isFullScreen(De.elements.container)}else De.fullscreen.active=!De.fullscreen.active,t.body.style.overflow=De.fullscreen.active?"hidden":"";d.toggleClass(De.elements.container,s.classes.fullscreen.active,De.fullscreen.active),v(De.fullscreen.active),De.elements.buttons&&De.elements.buttons.fullscreen&&d.toggleState(De.elements.buttons.fullscreen,De.fullscreen.active),f(De.elements.container,De.fullscreen.active?"enterfullscreen":"exitfullscreen",!0),!De.fullscreen.active&&n&&pe()}function fe(n){var a=De.elements.settings.menu.parentNode,l=n.target,s=t.getElementById(l.getAttribute("aria-controls")),r="false"===l.getAttribute("aria-expanded");if(c.htmlElement(s)){var i,o,u,p="tabpanel"===s.getAttribute("role");if(p){var m=a.querySelector('[role="tabpanel"][aria-hidden="false"]');u=m.parentNode,[].forEach.call(a.querySelectorAll('[aria-controls="'+m.getAttribute("id")+'"]'),function(e){e.setAttribute("aria-expanded",!1)}),u.style.width=m.scrollWidth+"px",u.style.height=m.scrollHeight+"px",m.setAttribute("aria-hidden",!0),m.setAttribute("tabindex",-1);var f=s.cloneNode(!0);f.style.position="absolute",f.style.opacity=0,f.setAttribute("aria-hidden",!1),u.appendChild(f),i=f.scrollWidth,o=f.scrollHeight,d.removeElement(f)}s.setAttribute("aria-hidden",!r),l.setAttribute("aria-expanded",r),s.removeAttribute("tabindex"),p&&(u.style.width=i+"px",u.style.height=o+"px",e.setTimeout(function(){u.style.width="",u.style.height=""},300))}}function ye(e){if(c.boolean(e)||(e=!De.elements.media.muted),d.toggleState(De.elements.buttons.mute,e),De.elements.media.muted=e,0===De.elements.media.volume&&ge(s.volume),d.inArray(u.embed,De.type)){switch(De.type){case"youtube":De.embed[De.elements.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":De.embed.setVolume(De.elements.media.muted?0:parseFloat(s.volume/10))}f(De.elements.media,"volumechange")}}function ge(e){var t=10,n=0;if(c.event(e)&&(e=e.target.value),c.undefined(e)&&(e=De.storage.volume),(null===e||isNaN(e))&&(e=s.volume),e>t&&(e=t),e0&&ye()}function be(e){var t=De.elements.media.muted?0:10*De.elements.media.volume;c.number(e)||(e=1),ge(t+e)}function ve(e){var t=De.elements.media.muted?0:10*De.elements.media.volume;c.number(e)||(e=1),ge(t-e)}function he(){var e=De.elements.media.muted?0:10*De.elements.media.volume;De.supported.full&&(De.elements.inputs.volume&&(De.elements.inputs.volume.value=e),De.elements.display.volume&&(De.elements.display.volume.value=e)),Q({volume:e}),d.toggleClass(De.elements.container,s.classes.muted,0===e),De.supported.full&&De.elements.buttons.mute&&d.toggleState(De.elements.buttons.mute,0===e)}function ke(e){var t="waiting"===e.type;clearTimeout(We.loading),We.loading=setTimeout(function(){d.toggleClass(De.elements.container,s.classes.loading,t),Fe(t)},t?250:0)}function Ce(e){if(De.supported.full){var t=De.elements.display.played,n=0,a=ue();if(e)switch(e.type){case"timeupdate":case"seeking":if(De.elements.controls.pressed)return;n=d.getPercentage(De.elements.media.currentTime,a),"timeupdate"===e.type&&De.elements.inputs.seek&&(De.elements.inputs.seek.value=n);break;case"playing":case"progress":t=De.elements.display.buffer,n=function(){var e=De.elements.media.buffered;return e&&e.length?d.getPercentage(e.end(0),a):c.number(e)?100*e:0}()}c.number(s.loop.start)&&c.number(s.loop.end)&&De.elements.media.currentTime>=s.loop.end&&oe(s.loop.start),Ee(t,n)}}function Ee(e,t){if(De.supported.full){if(c.undefined(t)&&(t=0),c.undefined(e)){if(!c.htmlElement(De.elements.display.buffer))return;e=De.elements.display.buffer}if(c.htmlElement(e)){e.value=t;var n=e.getElementsByTagName("span")[0];c.htmlElement(n)&&(n.childNodes[0].nodeValue=t)}}}function we(e,t){if(t){isNaN(e)&&(e=0);var n=parseInt(e%60),a=parseInt(e/60%60),l=parseInt(e/60/60%60),s=parseInt(ue()/60/60%60)>0;n=("0"+n).slice(-2),a=("0"+a).slice(-2);var r=(s?l+":":"")+a+":"+n;return t.textContent=r,r}}function Ae(){if(De.supported.full){var e=ue()||0;!De.elements.display.duration&&s.displayDuration&&De.elements.media.paused&&we(e,De.elements.display.currentTime),De.elements.display.duration&&we(e,De.elements.display.duration),xe()}}function Se(e){we(De.elements.media.currentTime,De.elements.display.currentTime),e&&"timeupdate"===e.type&&De.elements.media.seeking||Ce(e)}function Te(e){c.number(e)||(e=0);var t=ue(),n=d.getPercentage(e,t);De.elements.progress&&De.elements.display.played&&(De.elements.display.played.value=n),De.elements.buttons&&De.elements.inputs.seek&&(De.elements.inputs.seek.value=n)}function xe(e){var t=ue();if(s.tooltips.seek&&c.htmlElement(De.elements.inputs.seek)&&c.htmlElement(De.elements.display.seekTooltip)&&0!==t){var n=De.elements.inputs.seek.getBoundingClientRect(),a=0,l=s.classes.tooltip+"--visible";if(c.event(e))a=100/n.width*(e.pageX-n.left);else{if(!d.hasClass(De.elements.display.seekTooltip,l))return;a=De.elements.display.seekTooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),we(t/100*a,De.elements.display.seekTooltip),De.elements.display.seekTooltip.style.left=a+"%",c.event(e)&&d.inArray(["mouseenter","mouseleave"],e.type)&&d.toggleClass(De.elements.display.seekTooltip,l,"mouseenter"===e.type); -}}function Fe(t){if(s.hideControls&&"audio"!==De.type){var n=0,a=!1,l=t,r=d.hasClass(De.elements.container,s.classes.loading);if(c.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,l=d.inArray(["mousemove","touchstart","mouseenter","focus"],t.type),d.inArray(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):l=d.hasClass(De.elements.container,s.classes.hideControls)),e.clearTimeout(We.hover),l||De.elements.media.paused||r){if(d.toggleClass(De.elements.container,s.classes.hideControls,!1),De.elements.media.paused||r)return;De.browser.isTouch&&(n=3e3)}l&&De.elements.media.paused||(We.hover=e.setTimeout(function(){(!De.elements.controls.pressed&&!De.elements.controls.hover||a)&&d.toggleClass(De.elements.container,s.classes.hideControls,!0)},n))}}function _e(e){if(!c.undefined(e))return void Pe(e);var t;switch(De.type){case"youtube":t=De.embed.getVideoUrl();break;case"vimeo":De.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":De.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=De.elements.media.currentSrc}return t||""}function Pe(e){function t(){if(De.embed=null,b("media"),b("captions"),"video"===De.type&&De.elements.wrapper&&b("wrapper"),De.elements.container&&De.elements.container.removeAttribute("class"),"type"in e&&(De.type=e.type,"video"===De.type)){var t=e.sources[0];"type"in t&&d.inArray(u.embed,t.type)&&(De.type=t.type)}switch(De.supported=l(De.type),De.type){case"video":De.elements.media=d.createElement("video");break;case"audio":De.elements.media=d.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":De.elements.media=d.createElement("div"),De.embedId=e.sources[0].src}d.prependChild(De.elements.container,De.elements.media),c.boolean(e.autoplay)&&(s.autoplay=e.autoplay),d.inArray(u.html5,De.type)&&(s.crossorigin&&De.elements.media.setAttribute("crossorigin",""),s.autoplay&&De.elements.media.setAttribute("autoplay",""),"poster"in e&&De.elements.media.setAttribute("poster",e.poster),s.loop.active&&De.elements.media.setAttribute("loop","")),d.toggleClass(De.elements.container,s.classes.fullscreen.active,De.fullscreen.active),d.toggleClass(De.elements.container,s.classes.captions.active,De.captions.enabled),H(),d.inArray(u.html5,De.type)&&h("source",e.sources),X(),d.inArray(u.html5,De.type)&&("tracks"in e&&h("track",e.tracks),De.elements.media.load()),(d.inArray(u.html5,De.type)||d.inArray(u.embed,De.type)&&!De.supported.full)&&(Me(),Ve()),s.title=e.title,U()}return c.object(e)&&"sources"in e&&e.sources.length?(d.toggleClass(De.elements.container,s.classes.ready,!1),te(),Te(),Ee(),Le(),void je(t,!1)):void Ye("Invalid source format")}function Ie(e){"video"===De.type&&De.elements.media.setAttribute("poster",e)}function Ne(){function n(){var e=ne(),t=De.elements.buttons[e?"play":"pause"],n=De.elements.buttons[e?"pause":"play"];if(n){var a=d.hasClass(t,s.classes.tabFocus);setTimeout(function(){n.focus(),a&&(d.toggleClass(t,s.classes.tabFocus,!1),d.toggleClass(n,s.classes.tabFocus,!0))},100)}}function a(e){return e.keyCode?e.keyCode:e.which}function l(e){d.toggleClass(y("."+s.classes.tabFocus),s.classes.tabFocus,!1),De.elements.container.contains(e)&&d.toggleClass(e,s.classes.tabFocus,!0)}function i(e){function t(){var e=De.elements.media.duration;c.number(e)&&oe(e/10*(l-48))}var l=a(e),s="keydown"===e.type,r=s&&l===u;if(c.number(l))if(s){var i=[48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79],o=[38,40];if(d.inArray(o,l)){var p=d.getFocusElement();if(c.htmlElement(p)&&"radio"===d.getFocusElement().type)return}switch(d.inArray(i,l)&&(e.preventDefault(),e.stopPropagation()),l){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||t();break;case 32:case 75:r||n();break;case 38:be();break;case 40:ve();break;case 77:r||ye();break;case 39:ie();break;case 37:re();break;case 70:me();break;case 67:r||D();break;case 73:ae("start");break;case 76:ae();break;case 79:ae("end")}!m.fullscreen&&De.fullscreen.active&&27===l&&me(),u=l}else u=null}var o=De.browser.isIE?"change":"input";if(s.keyboardShortcuts.focused){var u=null;s.keyboardShortcuts.global&&d.on(e,"keydown keyup",function(e){var t=a(e),n=d.getFocusElement(),l=[48,49,50,51,52,53,54,56,57,75,77,70,67,73,76,79],o=r().length;1!==o||!d.inArray(l,t)||c.htmlElement(n)&&d.matches(n,s.selectors.editable)||i(e)}),d.on(De.elements.container,"keydown keyup",i)}d.on(e,"keyup",function(e){var t=a(e),n=d.getFocusElement();9===t&&l(n)}),d.on(t.body,"click",function(){d.toggleClass(g("."+s.classes.tabFocus),s.classes.tabFocus,!1)});for(var f in De.elements.buttons){var b=De.elements.buttons[f];d.on(b,"blur",function(){d.toggleClass(b,"tab-focus",!1)})}var v=function(e,t,n){c.function(t)&&t.call(this,e),c.function(n)&&n.call(this,e)};d.proxy(De.elements.buttons.play,"click",s.listeners.play,n),d.proxy(De.elements.buttons.playLarge,"click",s.listeners.play,n),d.proxy(De.elements.buttons.pause,"click",s.listeners.pause,n),d.proxy(De.elements.buttons.restart,"click",s.listeners.restart,oe),d.proxy(De.elements.buttons.rewind,"click",s.listeners.rewind,re),d.proxy(De.elements.buttons.forward,"click",s.listeners.forward,ie),d.proxy(De.elements.buttons.mute,"click",s.listeners.mute,ye),d.proxy(De.elements.buttons.captions,"click",s.listeners.captions,D),d.proxy(De.elements.buttons.fullscreen,"click",s.listeners.fullscreen,me),d.proxy(De.elements.buttons.pip,"click",s.listeners.pip,function(e){m.pip&&De.elements.media.webkitSetPresentationMode("picture-in-picture"===De.elements.media.webkitPresentationMode?"inline":"picture-in-picture")}),d.proxy(De.elements.buttons.airplay,"click",s.listeners.airplay,function(e){m.airplay&&De.elements.media.webkitShowPlaybackTargetPicker()}),d.on(De.elements.settings.menu,"click",fe),d.on(t.body,"click",function(e){var t=De.elements.settings.menu,n=t.querySelector("form");"true"===n.getAttribute("aria-hidden")||t.contains(e.target)||n.setAttribute("aria-hidden",!0)}),d.on(De.elements.settings.menu,"click",function(e){d.matches(e.target,s.selectors.inputs.language)?v.call(this,e,s.listeners.language,M):d.matches(e.target,s.selectors.inputs.quality)?v.call(this,e,s.listeners.quality,function(){Ye("Set quality")}):d.matches(e.target,s.selectors.inputs.speed)?v.call(this,e,s.listeners.speed,le):d.matches(e.target,s.selectors.buttons.loop)&&v.call(this,e,s.listeners.loop,function(){var t=e.target.getAttribute("data-loop__value")||e.target.getAttribute("data-loop__type");d.inArray(["start","end","all","none"],t)&&ae(t)})}),d.proxy(De.elements.inputs.seek,o,s.listeners.seek,oe),d.proxy(De.elements.inputs.volume,o,s.listeners.volume,ge),d.on(De.elements.progress,"mouseenter mouseleave mousemove",xe),s.hideControls&&(d.on(De.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen",Fe),d.on(De.elements.controls,"mouseenter mouseleave",function(e){De.elements.controls.hover="mouseenter"===e.type}),d.on(De.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){De.elements.controls.pressed=d.inArray(["mousedown","touchstart"],e.type)}),d.on(De.elements.controls,"focus blur",Fe,!0)),d.proxy(De.elements.inputs.volume,"wheel",s.listeners.volume,function(e){var t=e.webkitDirectionInvertedFromDevice,n=.2,a=0;(e.deltaY<0||e.deltaX>0)&&(t?(ve(n),a=-1):(be(n),a=1)),(e.deltaY>0||e.deltaX<0)&&(t?(be(n),a=1):(ve(n),a=-1)),(1===a&&De.elements.media.volume<1||a===-1&&De.elements.media.volume>0)&&e.preventDefault()}),m.fullscreen&&d.on(t,p.eventType,me)}function qe(){if(d.on(De.elements.media,"timeupdate seeking",Se),d.on(De.elements.media,"durationchange loadedmetadata",Ae),d.on(De.elements.media,"ended",function(){"video"===De.type&&s.showPosterOnEnd&&("video"===De.type&&V(),oe(),De.elements.media.load())}),d.on(De.elements.media,"progress playing",Ce),d.on(De.elements.media,"volumechange",he),d.on(De.elements.media,"play pause ended",ce),d.on(De.elements.media,"waiting canplay seeked",ke),s.clickToPlay&&"audio"!==De.type){var e=g("."+s.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",d.on(e,"click",function(){s.hideControls&&De.browser.isTouch&&!De.elements.media.paused||(De.elements.media.paused?ee():De.elements.media.ended?(oe(),ee()):te())})}s.disableContextMenu&&d.on(De.elements.media,"contextmenu",function(e){e.preventDefault()}),d.on(De.elements.media,s.events.concat(["keyup","keydown"]).join(" "),function(e){f(De.elements.container,e.type,!0)})}function Le(){if(d.inArray(u.html5,De.type)){for(var e=De.elements.media.querySelectorAll("source"),t=0;t=0;n--){var a=n>0?t.cloneNode(!0):t,l=e[n],s=l.parentNode,r=l.nextSibling;return a.appendChild(l),r?s.insertBefore(a,r):s.appendChild(a),a}},removeElement:function(e){c.htmlElement(e)&&e.parentNode.removeChild(e)},prependChild:function(e,t){e.insertBefore(t,e.firstChild)},setAttributes:function(e,t){for(var n in t)e.setAttribute(n,t[n])},getAttributesFromSelector:function(e,t){if(!c.string(e)||c.empty(e))return{};var n={};return e.split(",").forEach(function(e){e=e.trim();var a=e.charAt(0);switch(a){case".":var l=e.replace(".","");c.object(t)&&c.string(t.class)&&(t.class+=" "+l),n.class=l;break;case"#":n.id=e.replace("#","");break;case"[":e=e.replace(/[\[\]]/g,"");var s=e.split("="),r=s[0],i=s.length>1?s[1].replace(/[\"\']/g,""):"";n[r]=i}}),n},createElement:function(e,n,a){var l=t.createElement(e);return c.object(n)&&d.setAttributes(l,n),c.string(a)&&(l.textContent=a),l},insertElement:function(e,t,n,a){var l=d.createElement(e,n,a);d.prependChild(t,l)},emptyElement:function(e){for(var t=e.childNodes.length;t--;)e.removeChild(e.lastChild)},toggleClass:function(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}},hasClass:function(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))},matches:function(e,n){var a=Element.prototype,l=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return l.call(e,n)},getFocusElement:function(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null},proxy:function(e,t,n,a,l){d.on(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},l)},toggleListener:function(e,t,n,a,l){var s=t.split(" ");if(c.boolean(l)||(l=!1),e instanceof NodeList)for(var r=0;r0&&M(n))}I()}}function j(){return!m.textTracks||c.empty(Re.captions.tracks)?"No Subs":Re.captions.enabled?Re.captions.currentTrack.label:"Disabled"}function M(e){c.event(e)&&(e=e.target);var t=e.activeCues[0];c.cue(t)?V(t.getCueAsHTML()):V()}function O(e){c.string(e)?s.captions.language=e.toLowerCase():c.event(e)&&(s.captions.language=e.target.value.toLowerCase()),V(),q()}function V(e){if(c.htmlElement(Re.elements.captions)){var t=d.createElement("span");d.emptyElement(Re.elements.captions),c.undefined(e)&&(e=""),c.string(e)?t.textContent=e.trim():t.appendChild(e),Re.elements.captions.appendChild(t)}else Ye("No captions element to render to")}function D(){if(Re.elements.buttons.captions){var e=Re.storage.captions;c.boolean(e)?s.captions.active=e:e=s.captions.active,e&&(d.toggleClass(Re.elements.container,s.classes.captions.active,!0),d.toggleState(Re.elements.buttons.captions,!0))}}function R(e){Re.supported.full&&Re.elements.buttons.captions&&(c.boolean(e)||(e=Re.elements.container.className.indexOf(s.classes.captions.active)===-1),Re.captions.enabled=e,d.toggleState(Re.elements.buttons.captions,Re.captions.enabled),d.toggleClass(Re.elements.container,s.classes.captions.active,Re.captions.enabled),f(Re.elements.container,Re.captions.enabled?"captionsenabled":"captionsdisabled",!0),Q({captions:Re.captions.enabled}))}function H(){if(s.loadSprite){var e=k();e.absolute?(We("AJAX loading absolute SVG sprite"+(Re.browser.isIE?" (due to IE)":"")),a(e.url,"sprite-plyr")):We("Sprite will be used as external resource directly")}d.inArray(s.controls,"play-large")&&(Re.elements.buttons.playLarge=A("play-large"),Re.elements.container.appendChild(Re.elements.buttons.playLarge)),Re.id=Math.floor(1e4*Math.random());var n=null;n=c.string(s.controls)?s.controls:c.function(s.controls)?s.controls({id:Re.id,seektime:s.seekTime}):F({id:Re.id,seektime:s.seekTime,speed:se(),quality:"HD",captions:j(),loop:"None"});var l;if(c.string(s.selectors.controls.container)&&(l=t.querySelector(s.selectors.controls.container)),c.htmlElement(l)||(l=Re.elements.container),c.htmlElement(n)?l.appendChild(n):l.insertAdjacentHTML("beforeend",n),c.htmlElement(Re.elements.controls)&&B(),s.tooltips.controls)for(var r=y([s.selectors.controls.wrapper," ",s.selectors.labels," .",s.classes.hidden].join("")),i=r.length-1;i>=0;i--){var o=r[i];d.toggleClass(o,s.classes.hidden,!1),d.toggleClass(o,s.classes.tooltip,!0)}}function B(){try{return Re.elements.controls=g(s.selectors.controls.wrapper),Re.elements.buttons={play:y(s.selectors.buttons.play),pause:g(s.selectors.buttons.pause),restart:g(s.selectors.buttons.restart),rewind:g(s.selectors.buttons.rewind),forward:g(s.selectors.buttons.forward),mute:g(s.selectors.buttons.mute),pip:g(s.selectors.buttons.pip),airplay:g(s.selectors.buttons.airplay),settings:g(s.selectors.buttons.settings),captions:g(s.selectors.buttons.captions),fullscreen:g(s.selectors.buttons.fullscreen)},Re.elements.progress=g(s.selectors.progress),Re.elements.inputs={seek:g(s.selectors.inputs.seek),volume:g(s.selectors.inputs.volume)},Re.elements.display={buffer:g(s.selectors.display.buffer),played:g(s.selectors.display.played),volume:g(s.selectors.display.volume),duration:g(s.selectors.display.duration),currentTime:g(s.selectors.display.currentTime)},c.htmlElement(Re.elements.progress)&&(Re.elements.display.seekTooltip=Re.elements.progress.querySelector("."+s.classes.tooltip)),!0}catch(e){return Ye("It looks like there is a problem with your custom controls HTML",e),Y(!0),!1}}function W(){d.toggleClass(Re.elements.container,s.selectors.container.replace(".",""),Re.supported.full)}function Y(e){e&&d.inArray(u.html5,Re.type)?Re.elements.media.setAttribute("controls",""):Re.elements.media.removeAttribute("controls")}function U(e){var t=s.i18n.play;if(c.string(s.title)&&!c.empty(s.title)&&(t+=", "+s.title,Re.elements.container.setAttribute("aria-label",s.title)),Re.supported.full&&(c.htmlElement(Re.elements.buttons.play)&&Re.elements.buttons.play.setAttribute("aria-label",t),c.htmlElement(Re.elements.buttons.playLarge)&&Re.elements.buttons.playLarge.setAttribute("aria-label",t)),c.htmlElement(e)){var n=c.string(s.title)&&!c.empty(s.title)?s.title:"video";e.setAttribute("title",s.i18n.frameTitle.replace("{title}",n))}}function K(){var t=null;Re.storage={},m.storage&&s.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(s.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Q({volume:parseFloat(t)}):Re.storage=JSON.parse(t)))}function Q(t){m.storage&&s.storage.enabled&&(d.extend(Re.storage,t),e.localStorage.setItem(s.storage.key,JSON.stringify(Re.storage)))}function X(){return Re.elements.media?(Re.supported.full&&(d.toggleClass(Re.elements.container,s.classes.type.replace("{0}",Re.type),!0),d.inArray(u.embed,Re.type)&&d.toggleClass(Re.elements.container,s.classes.type.replace("{0}","video"),!0),d.toggleClass(Re.elements.container,s.classes.pip.enabled,m.pip&&"video"===Re.type),d.toggleClass(Re.elements.container,s.classes.airplay.enabled,m.airplay&&d.inArray(u.html5,Re.type)),d.toggleClass(Re.elements.container,s.classes.stopped,s.autoplay),d.toggleClass(Re.elements.container,s.classes.isIos,Re.browser.isIos),d.toggleClass(Re.elements.container,s.classes.isTouch,Re.browser.isTouch),d.inArray(["video","youtube","vimeo"],Re.type)&&(Re.elements.wrapper=d.createElement("div",{class:s.classes.videoWrapper}),d.wrap(Re.elements.media,Re.elements.wrapper))),void(d.inArray(u.embed,Re.type)&&z())):void Ye("No media element found!")}function z(){var t,n=Re.type+"-"+Math.floor(1e4*Math.random());switch(Re.type){case"youtube":t=d.parseYouTubeId(Re.embedId);break;default:t=Re.embedId}for(var a=y('[id^="'+Re.type+'-"]'),l=a.length-1;l>=0;l--)d.removeElement(a[l]);if(d.toggleClass(Re.elements.wrapper,s.classes.embedWrapper,!0),"youtube"===Re.type)Re.elements.media.setAttribute("id",n),c.object(e.YT)?G(t):(d.injectScript(s.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){G(t)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Re.type)if(d.wrap(Re.elements.media,d.createElement("div")),Re.elements.media.setAttribute("id",n),c.object(e.Vimeo))J(t);else{d.injectScript(s.urls.vimeo.api);var r=e.setInterval(function(){c.object(e.Vimeo)&&(e.clearInterval(r),J(t))},50)}else if("soundcloud"===Re.type){var i=d.createElement("iframe");i.loaded=!1,d.on(i,"load",function(){i.loaded=!0}),d.setAttributes(i,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+t,id:n}),Re.elements.media.appendChild(i),e.SC||d.injectScript(s.urls.soundcloud.api);var o=e.setInterval(function(){e.SC&&i.loaded&&(e.clearInterval(o),Z.call(i))},50)}}function $(){Re.supported.full&&(Oe(),Ve()),U(g("iframe"))}function G(t){Re.embed=new e.YT.Player(Re.elements.media.id,{videoId:t,playerVars:{autoplay:s.autoplay?1:0,controls:Re.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:s.captions.active?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:e.location.href},events:{onError:function(e){f(Re.elements.container,"error",!0,{code:e.data,embed:e.target})},onPlaybackQualityChange:function(e){var t=e.target,n=t.getPlaybackQuality();console.warn(n)},onReady:function(t){var n=t.target;Re.elements.media.play=function(){n.playVideo(),Re.elements.media.paused=!1},Re.elements.media.pause=function(){n.pauseVideo(),Re.elements.media.paused=!0},Re.elements.media.stop=function(){n.stopVideo(),Re.elements.media.paused=!0},Re.elements.media.duration=n.getDuration(),Re.elements.media.paused=!0,Re.elements.media.currentTime=0,Re.elements.media.muted=n.isMuted();var a=n.getPlaybackRate(),l=n.getAvailablePlaybackRates();console.warn(a,l),s.title=n.getVideoData().title,Re.supported.full&&Re.elements.media.setAttribute("tabindex",-1),$(),f(Re.elements.media,"timeupdate"),f(Re.elements.media,"durationchange"),e.clearInterval(He.buffering),He.buffering=e.setInterval(function(){Re.elements.media.buffered=n.getVideoLoadedFraction(),(null===Re.elements.media.lastBuffered||Re.elements.media.lastBuffered=n)return;s.loop.end=n,s.loop.indicator.end=Re.elements.display.played.value;break;case"all":s.loop.start=0,s.loop.end=Re.elements.media.duration-2,s.loop.indicator.start=0,s.loop.indicator.end=100;break;case"toggle":s.loop.active?(s.loop.start=0,s.loop.end=null):(s.loop.start=0,s.loop.end=Re.elements.media.duration-2);break;default:s.loop.start=0,s.loop.end=null}s.loop.active=c.number(s.loop.start)&&c.number(s.loop.end);var a=(we(s.loop.start,g('[data-plyr-loop="start"]')),null);c.number(s.loop.end)&&(a=we(s.loop.end,t.querySelector('[data-loop__value="loopout"]'))),s.loop.active}function le(e){return c.event(e)?e=parseFloat(e.target.value):c.number(e)||(e=parseFloat(Re.storage.speed||s.speed.selected)),e<.1&&(e=.1),e>2&&(e=2),c.array(s.speed.options)?(s.speed.selected=e,Re.elements.media.playbackRate=e,void Q({speed:e})):void Ye("Invalid speeds format")}function se(){return s.speed.selected.toFixed(1).toString().replace(".0","")+"×"}function re(e){c.number(e)||(e=s.seekTime),oe(Re.elements.media.currentTime-e)}function ie(e){c.number(e)||(e=s.seekTime),oe(Re.elements.media.currentTime+e)}function oe(e){var t=0,n=Re.elements.media.paused,a=ue();c.number(e)?t=e:c.event(e)&&d.inArray(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Se(t);try{Re.elements.media.currentTime=t.toFixed(4)}catch(e){}if(d.inArray(u.embed,Re.type)){switch(Re.type){case"youtube":Re.embed.seekTo(t);break;case"vimeo":Re.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Re.embed.seekTo(1e3*t)}n&&te(),f(Re.elements.media,"timeupdate"),Re.elements.media.seeking=!0,f(Re.elements.media,"seeking")}We("Seeking to "+Re.elements.media.currentTime+" seconds")}function ue(){var e=parseInt(s.duration),t=0;return null===Re.elements.media.duration||isNaN(Re.elements.media.duration)||(t=Re.elements.media.duration),isNaN(e)?t:e}function ce(){d.toggleClass(Re.elements.container,s.classes.playing,!Re.elements.media.paused),d.toggleClass(Re.elements.container,s.classes.stopped,Re.elements.media.paused),Fe(Re.elements.media.paused)}function de(){i={x:e.pageXOffset||0,y:e.pageYOffset||0}}function pe(){e.scrollTo(i.x,i.y)}function me(e){var n=m.fullscreen;if(n){if(!e||e.type!==p.eventType)return p.isFullScreen(Re.elements.container)?p.cancelFullScreen():(de(),p.requestFullScreen(Re.elements.container)),void(Re.fullscreen.active=p.isFullScreen(Re.elements.container));Re.fullscreen.active=p.isFullScreen(Re.elements.container)}else Re.fullscreen.active=!Re.fullscreen.active,t.body.style.overflow=Re.fullscreen.active?"hidden":"";d.toggleClass(Re.elements.container,s.classes.fullscreen.active,Re.fullscreen.active),v(Re.fullscreen.active),Re.elements.buttons&&Re.elements.buttons.fullscreen&&d.toggleState(Re.elements.buttons.fullscreen,Re.fullscreen.active),f(Re.elements.container,Re.fullscreen.active?"enterfullscreen":"exitfullscreen",!0),!Re.fullscreen.active&&n&&pe()}function fe(n){var a=Re.elements.settings.menu.parentNode,l=n.target,s=t.getElementById(l.getAttribute("aria-controls")),r="false"===l.getAttribute("aria-expanded");if(c.htmlElement(s)){var i,o,u,p="tabpanel"===s.getAttribute("role");if(p){var m=a.querySelector('[role="tabpanel"][aria-hidden="false"]');u=m.parentNode,[].forEach.call(a.querySelectorAll('[aria-controls="'+m.getAttribute("id")+'"]'),function(e){e.setAttribute("aria-expanded",!1)}),u.style.width=m.scrollWidth+"px",u.style.height=m.scrollHeight+"px",m.setAttribute("aria-hidden",!0),m.setAttribute("tabindex",-1);var f=s.cloneNode(!0);f.style.position="absolute",f.style.opacity=0,f.setAttribute("aria-hidden",!1),u.appendChild(f),i=f.scrollWidth,o=f.scrollHeight,d.removeElement(f)}s.setAttribute("aria-hidden",!r),l.setAttribute("aria-expanded",r),s.removeAttribute("tabindex"),p&&(u.style.width=i+"px",u.style.height=o+"px",e.setTimeout(function(){u.style.width="",u.style.height=""},300))}}function ye(e){if(c.boolean(e)||(e=!Re.elements.media.muted),d.toggleState(Re.elements.buttons.mute,e),Re.elements.media.muted=e,0===Re.elements.media.volume&&ge(s.volume),d.inArray(u.embed,Re.type)){switch(Re.type){case"youtube":Re.embed[Re.elements.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Re.embed.setVolume(Re.elements.media.muted?0:parseFloat(s.volume/10))}f(Re.elements.media,"volumechange")}}function ge(e){var t=10,n=0;if(c.event(e)&&(e=e.target.value),c.undefined(e)&&(e=Re.storage.volume),(null===e||isNaN(e))&&(e=s.volume),e>t&&(e=t),e0&&ye()}function be(e){var t=Re.elements.media.muted?0:10*Re.elements.media.volume;c.number(e)||(e=1),ge(t+e)}function ve(e){var t=Re.elements.media.muted?0:10*Re.elements.media.volume;c.number(e)||(e=1),ge(t-e)}function he(){var e=Re.elements.media.muted?0:10*Re.elements.media.volume;Re.supported.full&&(Re.elements.inputs.volume&&(Re.elements.inputs.volume.value=e),Re.elements.display.volume&&(Re.elements.display.volume.value=e)),Q({volume:e}),d.toggleClass(Re.elements.container,s.classes.muted,0===e),Re.supported.full&&Re.elements.buttons.mute&&d.toggleState(Re.elements.buttons.mute,0===e)}function ke(e){var t="waiting"===e.type;clearTimeout(He.loading),He.loading=setTimeout(function(){d.toggleClass(Re.elements.container,s.classes.loading,t),Fe(t)},t?250:0)}function Ce(e){if(Re.supported.full){var t=Re.elements.display.played,n=0,a=ue();if(e)switch(e.type){case"timeupdate":case"seeking":if(Re.elements.controls.pressed)return;n=d.getPercentage(Re.elements.media.currentTime,a),"timeupdate"===e.type&&Re.elements.inputs.seek&&(Re.elements.inputs.seek.value=n);break;case"playing":case"progress":t=Re.elements.display.buffer,n=function(){var e=Re.elements.media.buffered;return e&&e.length?d.getPercentage(e.end(0),a):c.number(e)?100*e:0}()}c.number(s.loop.start)&&c.number(s.loop.end)&&Re.elements.media.currentTime>=s.loop.end&&oe(s.loop.start),Ee(t,n)}}function Ee(e,t){if(Re.supported.full){if(c.undefined(t)&&(t=0),c.undefined(e)){if(!c.htmlElement(Re.elements.display.buffer))return;e=Re.elements.display.buffer}if(c.htmlElement(e)){e.value=t;var n=e.getElementsByTagName("span")[0];c.htmlElement(n)&&(n.childNodes[0].nodeValue=t)}}}function we(e,t){if(t){isNaN(e)&&(e=0);var n=parseInt(e%60),a=parseInt(e/60%60),l=parseInt(e/60/60%60),s=parseInt(ue()/60/60%60)>0;n=("0"+n).slice(-2),a=("0"+a).slice(-2);var r=(s?l+":":"")+a+":"+n;return t.textContent=r,r}}function Ae(){if(Re.supported.full){var e=ue()||0;!Re.elements.display.duration&&s.displayDuration&&Re.elements.media.paused&&we(e,Re.elements.display.currentTime),Re.elements.display.duration&&we(e,Re.elements.display.duration),xe()}}function Te(e){we(Re.elements.media.currentTime,Re.elements.display.currentTime),e&&"timeupdate"===e.type&&Re.elements.media.seeking||Ce(e)}function Se(e){c.number(e)||(e=0);var t=ue(),n=d.getPercentage(e,t);Re.elements.progress&&Re.elements.display.played&&(Re.elements.display.played.value=n),Re.elements.buttons&&Re.elements.inputs.seek&&(Re.elements.inputs.seek.value=n)}function xe(e){var t=ue();if(s.tooltips.seek&&c.htmlElement(Re.elements.inputs.seek)&&c.htmlElement(Re.elements.display.seekTooltip)&&0!==t){var n=Re.elements.inputs.seek.getBoundingClientRect(),a=0,l=s.classes.tooltip+"--visible";if(c.event(e))a=100/n.width*(e.pageX-n.left);else{if(!d.hasClass(Re.elements.display.seekTooltip,l))return;a=Re.elements.display.seekTooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),we(t/100*a,Re.elements.display.seekTooltip),Re.elements.display.seekTooltip.style.left=a+"%",c.event(e)&&d.inArray(["mouseenter","mouseleave"],e.type)&&d.toggleClass(Re.elements.display.seekTooltip,l,"mouseenter"===e.type)}}function Fe(t){if(s.hideControls&&"audio"!==Re.type){var n=0,a=!1,l=t,r=d.hasClass(Re.elements.container,s.classes.loading); +if(c.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,l=d.inArray(["mousemove","touchstart","mouseenter","focus"],t.type),d.inArray(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):l=d.hasClass(Re.elements.container,s.classes.hideControls)),e.clearTimeout(He.hover),l||Re.elements.media.paused||r){if(d.toggleClass(Re.elements.container,s.classes.hideControls,!1),Re.elements.media.paused||r)return;Re.browser.isTouch&&(n=3e3)}l&&Re.elements.media.paused||(He.hover=e.setTimeout(function(){(!Re.elements.controls.pressed&&!Re.elements.controls.hover||a)&&d.toggleClass(Re.elements.container,s.classes.hideControls,!0)},n))}}function _e(e){if(!c.undefined(e))return void Pe(e);var t;switch(Re.type){case"youtube":t=Re.embed.getVideoUrl();break;case"vimeo":Re.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Re.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Re.elements.media.currentSrc}return t||""}function Pe(e){function t(){if(Re.embed=null,b("media"),b("captions"),b("wrapper"),Re.elements.container&&Re.elements.container.removeAttribute("class"),"type"in e&&(Re.type=e.type,"video"===Re.type)){var t=e.sources[0];"type"in t&&d.inArray(u.embed,t.type)&&(Re.type=t.type)}switch(Re.supported=l(Re.type),Re.type){case"video":Re.elements.media=d.createElement("video");break;case"audio":Re.elements.media=d.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Re.elements.media=d.createElement("div"),Re.embedId=e.sources[0].src}d.prependChild(Re.elements.container,Re.elements.media),c.boolean(e.autoplay)&&(s.autoplay=e.autoplay),d.inArray(u.html5,Re.type)&&(s.crossorigin&&Re.elements.media.setAttribute("crossorigin",""),s.autoplay&&Re.elements.media.setAttribute("autoplay",""),"poster"in e&&Re.elements.media.setAttribute("poster",e.poster),s.loop.active&&Re.elements.media.setAttribute("loop","")),d.toggleClass(Re.elements.container,s.classes.fullscreen.active,Re.fullscreen.active),d.toggleClass(Re.elements.container,s.classes.captions.active,Re.captions.enabled),W(),d.inArray(u.html5,Re.type)&&h("source",e.sources),X(),d.inArray(u.html5,Re.type)&&("tracks"in e&&h("track",e.tracks),Re.elements.media.load()),(d.inArray(u.html5,Re.type)||d.inArray(u.embed,Re.type)&&!Re.supported.full)&&(Oe(),Ve()),s.title=e.title,U()}return c.object(e)&&"sources"in e&&e.sources.length?(d.toggleClass(Re.elements.container,s.classes.ready,!1),te(),Se(),Ee(),qe(),void je(t,!1)):void Ye("Invalid source format")}function Ie(e){"video"===Re.type&&Re.elements.media.setAttribute("poster",e)}function Ne(){function n(){var e=ne(),t=Re.elements.buttons[e?"play":"pause"],n=Re.elements.buttons[e?"pause":"play"];if(n){var a=d.hasClass(t,s.classes.tabFocus);setTimeout(function(){c.htmlElement(n)&&n.focus(),a&&(d.toggleClass(t,s.classes.tabFocus,!1),d.toggleClass(n,s.classes.tabFocus,!0))},100)}}function a(e){return e.keyCode?e.keyCode:e.which}function l(e){d.toggleClass(y("."+s.classes.tabFocus),s.classes.tabFocus,!1),Re.elements.container.contains(e)&&d.toggleClass(e,s.classes.tabFocus,!0)}function i(e){function t(){var e=Re.elements.media.duration;c.number(e)&&oe(e/10*(l-48))}var l=a(e),s="keydown"===e.type,r=s&&l===u;if(c.number(l))if(s){var i=[48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79],o=[38,40];if(d.inArray(o,l)){var p=d.getFocusElement();if(c.htmlElement(p)&&"radio"===d.getFocusElement().type)return}switch(d.inArray(i,l)&&(e.preventDefault(),e.stopPropagation()),l){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||t();break;case 32:case 75:r||n();break;case 38:be();break;case 40:ve();break;case 77:r||ye();break;case 39:ie();break;case 37:re();break;case 70:me();break;case 67:r||R();break;case 73:ae("start");break;case 76:ae();break;case 79:ae("end")}!m.fullscreen&&Re.fullscreen.active&&27===l&&me(),u=l}else u=null}var o=Re.browser.isIE?"change":"input";if(s.keyboardShortcuts.focused){var u=null;s.keyboardShortcuts.global&&d.on(e,"keydown keyup",function(e){var t=a(e),n=d.getFocusElement(),l=[48,49,50,51,52,53,54,56,57,75,77,70,67,73,76,79],o=r().length;1!==o||!d.inArray(l,t)||c.htmlElement(n)&&d.matches(n,s.selectors.editable)||i(e)}),d.on(Re.elements.container,"keydown keyup",i)}d.on(e,"keyup",function(e){var t=a(e),n=d.getFocusElement();9===t&&l(n)}),d.on(t.body,"click",function(){d.toggleClass(g("."+s.classes.tabFocus),s.classes.tabFocus,!1)});for(var f in Re.elements.buttons){var b=Re.elements.buttons[f];d.on(b,"blur",function(){d.toggleClass(b,"tab-focus",!1)})}var v=function(e,t,n){c.function(t)&&t.call(this,e),c.function(n)&&n.call(this,e)};d.proxy(Re.elements.buttons.play,"click",s.listeners.play,n),d.proxy(Re.elements.buttons.playLarge,"click",s.listeners.play,n),d.proxy(Re.elements.buttons.pause,"click",s.listeners.pause,n),d.proxy(Re.elements.buttons.restart,"click",s.listeners.restart,oe),d.proxy(Re.elements.buttons.rewind,"click",s.listeners.rewind,re),d.proxy(Re.elements.buttons.forward,"click",s.listeners.forward,ie),d.proxy(Re.elements.buttons.mute,"click",s.listeners.mute,ye),d.proxy(Re.elements.buttons.captions,"click",s.listeners.captions,R),d.proxy(Re.elements.buttons.fullscreen,"click",s.listeners.fullscreen,me),d.proxy(Re.elements.buttons.pip,"click",s.listeners.pip,function(e){m.pip&&Re.elements.media.webkitSetPresentationMode("picture-in-picture"===Re.elements.media.webkitPresentationMode?"inline":"picture-in-picture")}),d.proxy(Re.elements.buttons.airplay,"click",s.listeners.airplay,function(e){m.airplay&&Re.elements.media.webkitShowPlaybackTargetPicker()}),d.on(Re.elements.settings.menu,"click",fe),d.on(t.body,"click",function(e){var t=Re.elements.settings.menu,n=t.querySelector("form");"true"===n.getAttribute("aria-hidden")||t.contains(e.target)||n.setAttribute("aria-hidden",!0)}),d.on(Re.elements.settings.menu,"click",function(e){d.matches(e.target,s.selectors.inputs.language)?v.call(this,e,s.listeners.language,O):d.matches(e.target,s.selectors.inputs.quality)?v.call(this,e,s.listeners.quality,function(){Ye("Set quality")}):d.matches(e.target,s.selectors.inputs.speed)?v.call(this,e,s.listeners.speed,le):d.matches(e.target,s.selectors.buttons.loop)&&v.call(this,e,s.listeners.loop,function(){var t=e.target.getAttribute("data-loop__value")||e.target.getAttribute("data-loop__type");d.inArray(["start","end","all","none"],t)&&ae(t)})}),d.proxy(Re.elements.inputs.seek,o,s.listeners.seek,oe),d.proxy(Re.elements.inputs.volume,o,s.listeners.volume,ge),d.on(Re.elements.progress,"mouseenter mouseleave mousemove",xe),s.hideControls&&(d.on(Re.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen",Fe),d.on(Re.elements.controls,"mouseenter mouseleave",function(e){Re.elements.controls.hover="mouseenter"===e.type}),d.on(Re.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){Re.elements.controls.pressed=d.inArray(["mousedown","touchstart"],e.type)}),d.on(Re.elements.controls,"focus blur",Fe,!0)),d.proxy(Re.elements.inputs.volume,"wheel",s.listeners.volume,function(e){var t=e.webkitDirectionInvertedFromDevice,n=.2,a=0;(e.deltaY<0||e.deltaX>0)&&(t?(ve(n),a=-1):(be(n),a=1)),(e.deltaY>0||e.deltaX<0)&&(t?(be(n),a=1):(ve(n),a=-1)),(1===a&&Re.elements.media.volume<1||a===-1&&Re.elements.media.volume>0)&&e.preventDefault()}),m.fullscreen&&d.on(t,p.eventType,me)}function Le(){if(d.on(Re.elements.media,"timeupdate seeking",Te),d.on(Re.elements.media,"durationchange loadedmetadata",Ae),d.on(Re.elements.media,"ended",function(){"video"===Re.type&&s.showPosterOnEnd&&("video"===Re.type&&V(),oe(),Re.elements.media.load())}),d.on(Re.elements.media,"progress playing",Ce),d.on(Re.elements.media,"volumechange",he),d.on(Re.elements.media,"play pause ended",ce),d.on(Re.elements.media,"waiting canplay seeked",ke),s.clickToPlay&&"audio"!==Re.type){var e=g("."+s.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",d.on(e,"click",function(){s.hideControls&&Re.browser.isTouch&&!Re.elements.media.paused||(Re.elements.media.paused?ee():Re.elements.media.ended?(oe(),ee()):te())})}s.disableContextMenu&&d.on(Re.elements.media,"contextmenu",function(e){e.preventDefault()}),d.on(Re.elements.media,s.events.concat(["keyup","keydown"]).join(" "),function(e){f(Re.elements.container,e.type,!0)})}function qe(){if(d.inArray(u.html5,Re.type)){for(var e=Re.elements.media.querySelectorAll("source"),t=0;t=0;n--){var a=n>0?t.cloneNode(!0):t,l=e[n],s=l.parentNode,r=l.nextSibling;return a.appendChild(l),r?s.insertBefore(a,r):s.appendChild(a),a}},removeElement:function(e){c.htmlElement(e)&&e.parentNode.removeChild(e)},prependChild:function(e,t){e.insertBefore(t,e.firstChild)},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},createElement:function(e,n,a){var l=t.createElement(e);return c.object(n)&&d.setAttributes(l,n),c.string(a)&&(l.textContent=a),l},insertElement:function(e,t,n,a){var l=d.createElement(e,n,a);d.prependChild(t,l)},emptyElement:function(e){for(var t=e.childNodes.length;t--;)e.removeChild(e.lastChild)},setAttributes:function(e,t){for(var n in t)e.setAttribute(n,t[n])},getAttributesFromSelector:function(e,t){if(!c.string(e)||c.empty(e))return{};var n={};return e.split(",").forEach(function(e){e=e.trim();var a=e.charAt(0);switch(a){case".":var l=e.replace(".","");c.object(t)&&c.string(t.class)&&(t.class+=" "+l),n.class=l;break;case"#":n.id=e.replace("#","");break;case"[":e=e.replace(/[\[\]]/g,"");var s=e.split("="),r=s[0],i=s.length>1?s[1].replace(/[\"\']/g,""):"";n[r]=i}}),n},toggleClass:function(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}},hasClass:function(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))},matches:function(e,n){var a=Element.prototype,l=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return l.call(e,n)},getFocusElement:function(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null},proxy:function(e,t,n,a,l){d.on(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},l)},toggleListener:function(e,t,n,a,l){var s=t.split(" ");if(c.boolean(l)||(l=!1),e instanceof NodeList)for(var r=0;r + var element = document.createElement(type); + + // Set all passed attributes + if (is.object(attributes)) { + utils.setAttributes(element, attributes); + } + + // Add text node + if (is.string(text)) { + element.textContent = text; + } + + // Return built element + return element; + }, + + // Insert a DocumentFragment + insertElement: function(type, parent, attributes, text) { + // Create a new + var element = utils.createElement(type, attributes, text); + + // Inject the new element + utils.prependChild(parent, element); + }, + + // Remove all child elements + emptyElement: function(element) { + var length = element.childNodes.length; + while (length--) { + element.removeChild(element.lastChild); + } + }, + // Set attributes setAttributes: function(element, attributes) { for (var key in attributes) { @@ -576,42 +617,6 @@ return attributes; }, - // Create a DocumentFragment - createElement: function(type, attributes, text) { - // Create a new - var element = document.createElement(type); - - // Set all passed attributes - if (is.object(attributes)) { - utils.setAttributes(element, attributes); - } - - // Add text node - if (is.string(text)) { - element.textContent = text; - } - - // Return built element - return element; - }, - - // Insert a DocumentFragment - insertElement: function(type, parent, attributes, text) { - // Create a new - var element = utils.createElement(type, attributes, text); - - // Inject the new element - utils.prependChild(parent, element); - }, - - // Remove all child elements - emptyElement: function(element) { - var length = element.childNodes.length; - while (length--) { - element.removeChild(element.lastChild); - } - }, - // Toggle class on an element toggleClass: function(element, className, state) { if (element) { @@ -811,6 +816,15 @@ parseYouTubeId: function(url) { var regex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; return url.match(regex) ? RegExp.$2 : url; + }, + + // Remove HTML from a string + stripHTML: function(source) { + var fragment = document.createDocumentFragment(); + var element = document.createElement('div'); + fragment.appendChild(element); + element.innerHTML = source; + return fragment.firstChild.innerText; } }; @@ -1596,12 +1610,10 @@ } if (is.array(options) && !is.empty(options)) { - // Remove any unwanted quality levels - var filtered = options.filter(function(quality) { - return ['tiny', 'small'].indexOf(quality) === -1; - }); - - filtered.forEach(function(quality) { + options.filter(function(quality) { + // Remove any unwanted quality levels + return !utils.inArray(['tiny', 'small'], quality); + }).forEach(function(quality) { var item = utils.createElement('li'); var label = utils.createElement('label', { @@ -1802,15 +1814,7 @@ // Inject the container if (!is.htmlElement(player.elements.captions)) { player.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(config.selectors.captions)); - - console.warn(player.type); - - if (player.type === 'video') { - player.elements.wrapper.appendChild(player.elements.captions); - } else { - console.warn(player.elements.media); - player.elements.media.appendChild(player.elements.captions); - } + utils.insertAfter(player.elements.captions, player.elements.wrapper); } // Get tracks @@ -2268,7 +2272,7 @@ utils.toggleClass(player.elements.container, config.classes.isTouch, player.browser.isTouch); // Inject the player wrapper - if (player.type === 'video') { + if (utils.inArray(['video', 'youtube', 'vimeo'], player.type)) { // Create the wrapper div player.elements.wrapper = utils.createElement('div', { class: config.classes.videoWrapper @@ -2287,7 +2291,7 @@ // Setup YouTube/Vimeo function setupEmbed() { - var container = utils.createElement('div'); + //var container = utils.createElement('div'); var mediaId; var id = player.type + '-' + Math.floor(Math.random() * (10000)); @@ -2308,19 +2312,15 @@ } // Add embed class for responsive - utils.toggleClass(player.elements.media, config.classes.videoWrapper, true); - utils.toggleClass(player.elements.media, config.classes.embedWrapper, true); + utils.toggleClass(player.elements.wrapper, config.classes.embedWrapper, true); if (player.type === 'youtube') { - // Create the YouTube container - player.elements.media.appendChild(container); - // Set ID - container.setAttribute('id', id); + player.elements.media.setAttribute('id', id); // Setup API if (is.object(window.YT)) { - youTubeReady(mediaId, container); + youTubeReady(mediaId); } else { // Load the API utils.injectScript(config.urls.youtube.api); @@ -2330,7 +2330,7 @@ // Add to queue window.onYouTubeReadyCallbacks.push(function() { - youTubeReady(mediaId, container); + youTubeReady(mediaId); }); // Set callback to process queue @@ -2342,14 +2342,10 @@ } } else if (player.type === 'vimeo') { // Vimeo needs an extra div to hide controls on desktop (which has full support) - if (player.supported.full) { - player.elements.media.appendChild(container); - } else { - container = player.elements.media; - } + utils.wrap(player.elements.media, utils.createElement('div')); // Set ID - container.setAttribute('id', id); + player.elements.media.setAttribute('id', id); // Load the API if not already if (!is.object(window.Vimeo)) { @@ -2359,11 +2355,11 @@ var vimeoTimer = window.setInterval(function() { if (is.object(window.Vimeo)) { window.clearInterval(vimeoTimer); - vimeoReady(mediaId, container); + vimeoReady(mediaId); } }, 50); } else { - vimeoReady(mediaId, container); + vimeoReady(mediaId); } } else if (player.type === 'soundcloud') { // TODO: Currently unsupported and undocumented @@ -2381,8 +2377,7 @@ 'id': id }); - container.appendChild(soundCloud); - player.elements.media.appendChild(container); + player.elements.media.appendChild(soundCloud); // Load the API if not already if (!window.SC) { @@ -2412,10 +2407,10 @@ } // Handle YouTube API ready - function youTubeReady(videoId, container) { + function youTubeReady(videoId) { // Setup instance // https://developers.google.com/youtube/iframe_api_reference - player.embed = new window.YT.Player(container.id, { + player.embed = new window.YT.Player(player.elements.media.id, { videoId: videoId, playerVars: { autoplay: (config.autoplay ? 1 : 0), @@ -2464,7 +2459,7 @@ instance.stopVideo(); player.elements.media.paused = true; }; - player.elements.media.duration = instance.getDuratiutils.on(); + player.elements.media.duration = instance.getDuration(); player.elements.media.paused = true; player.elements.media.currentTime = 0; player.elements.media.muted = instance.isMuted(); @@ -2480,7 +2475,7 @@ // Set the tabindex if (player.supported.full) { - player.elements.media.querySelector('iframe').setAttribute('tabindex', -1); + player.elements.media.setAttribute('tabindex', -1); } // Update UI @@ -2595,10 +2590,10 @@ } // Vimeo ready - function vimeoReady(mediaId, container) { + function vimeoReady(mediaId) { // Setup instance // https://github.com/vimeo/player.js - player.embed = new window.Vimeo.Player(container, { + player.embed = new window.Vimeo.Player(player.elements.media, { id: mediaId, loop: config.loop.active, autoplay: config.autoplay, @@ -2653,11 +2648,13 @@ }); player.embed.on('cuechange', function(data) { - log(data); + var cue = null; - var track = data.cues[0].html; + if (data.cues.length) { + cue = utils.stripHTML(data.cues[0].text); + } - setCaption(track); + setCaption(cue); }); player.embed.on('loaded', function() { @@ -3685,19 +3682,17 @@ // Setup new source function setup() { - // Remove embed object + // Reset embed object player.embed = null; - // Remove the old media + // Remove media removeElement('media'); // Remove the old captions removeElement('captions'); // Remove video container - if (player.type === 'video' && player.elements.wrapper) { - removeElement('wrapper'); - } + removeElement('wrapper'); // Reset class name if (player.elements.container) { @@ -3831,7 +3826,9 @@ var hadTabFocus = utils.hasClass(trigger, config.classes.tabFocus); setTimeout(function() { - target.focus(); + if (is.htmlElement(target)) { + target.focus(); + } if (hadTabFocus) { utils.toggleClass(trigger, config.classes.tabFocus, false);