From a9957211f40c93eb52e67872b8cc38ce3a9fe26d Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Mon, 31 Jul 2017 09:58:30 +1000 Subject: [PATCH] Work on playback rate changes --- dist/plyr.js | 4 +- notes.md | 84 ----------------------- src/js/plyr.js | 180 ++++++++++++++++++++++++++++++++----------------- 3 files changed, 120 insertions(+), 148 deletions(-) delete mode 100644 notes.md diff --git a/dist/plyr.js b/dist/plyr.js index 256533b2..3fb94d11 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -(function(e,t,n){"use strict";"object"==typeof exports?module.exports=n(require):"function"==typeof define&&define.amd?define(n):t[e]=n()}).call(this,"Plyr",this,function(e){"use strict";function t(e,t){function n(e,t,n,i){a.event(e,t,n,a.extend({},i,{plyr:pe}))}function l(e){return pe.elements.container.querySelectorAll(e)}function c(e){return l(e)[0]}function u(e){a.is.string(e)?(a.removeElement(pe.elements[e]),pe.elements[e]=null):a.removeElement(e)}function d(e,t){a.is.string(t)?a.insertElement(e,pe.media,{src:t}):a.is.array(t)&&t.forEach(function(t){a.insertElement(e,pe.media,t)})}function p(){function e(e){9===e.which&&pe.fullscreen.active&&(e.target!==i||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),i.focus()):(e.preventDefault(),n.focus()))}var t=l("input:not([disabled]), button:not([disabled])"),n=t[0],i=t[t.length-1];a.on(pe.elements.container,"keydown",e,!1)}function m(){return{url:pe.config.iconUrl,absolute:0===pe.config.iconUrl.indexOf("http")||pe.browser.isIE}}function f(e,t){var n="http://www.w3.org/2000/svg",i=m(),o=(i.absolute?"":i.url)+"#"+pe.config.iconPrefix,s=document.createElementNS(n,"svg");a.setAttributes(s,a.extend(t,{role:"presentation"}));var r=document.createElementNS(n,"use");return r.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o+"-"+e),s.appendChild(r),s}function g(e){var t=pe.config.i18n[e];switch(e){case"pip":t="PIP";break;case"airplay":t="AirPlay"}return a.createElement("span",{class:pe.config.classes.hidden},t)}function y(e){var t=a.createElement("span",{class:pe.config.classes.menu.value});return t.appendChild(a.createElement("span",{class:pe.config.classes.menu.badge},e)),t}function b(e,t){var n,i,o,s=a.createElement("button");switch(a.is.object(t)||(t={}),"class"in t?t.class.indexOf(pe.config.classes.control)===-1&&(t.class+=" "+pe.config.classes.control):t.class=pe.config.classes.control,e){case"mute":o="toggleMute",n="volume",i="muted";break;case"captions":o="toggleCaptions",n="captions-off",i="captions-on";break;case"fullscreen":o="toggleFullscreen",n="enter-fullscreen",i="exit-fullscreen";break;case"play-large":t.class="plyr__play-large",e="play",o="play",n="play";break;default:o=e,n=e}return a.extend(t,a.getAttributesFromSelector(pe.config.selectors.buttons[e],t)),a.is.string(i)&&s.appendChild(f(i,{class:"icon--"+i})),s.appendChild(f(n)),s.appendChild(g(o)),a.setAttributes(s,t),pe.elements.buttons[e]=s,s}function v(e,t){var n=a.createElement("label",{for:t.id,class:pe.config.classes.hidden},pe.config.i18n[e]),i=a.createElement("input",a.extend(a.getAttributesFromSelector(pe.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.1,value:0,autocomplete:"off"},t));return pe.elements.inputs[e]=i,{label:n,input:i}}function h(e,t){var n=a.createElement("progress",a.extend(a.getAttributesFromSelector(pe.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(a.createElement("span",null,"0"));var i="";switch(e){case"played":i=pe.config.i18n.played;break;case"buffer":i=pe.config.i18n.buffered}n.textContent="% "+i.toLowerCase()}return pe.elements.display[e]=n,n}function w(e){var t=a.createElement("span",{class:"plyr__time"});return t.appendChild(a.createElement("span",{class:pe.config.classes.hidden},pe.config.i18n[e])),t.appendChild(a.createElement("span",a.getAttributesFromSelector(pe.config.selectors.display[e]),"00:00")),pe.elements.display[e]=t,t}function k(e){if(!a.is.empty(pe.config.controls)){var t=a.createElement("div",a.getAttributesFromSelector(pe.config.selectors.controls.wrapper));if(a.inArray(pe.config.controls,"restart")&&t.appendChild(b("restart")),a.inArray(pe.config.controls,"rewind")&&t.appendChild(b("rewind")),a.inArray(pe.config.controls,"play")&&(t.appendChild(b("play")),t.appendChild(b("pause"))),a.inArray(pe.config.controls,"fast-forward")&&t.appendChild(b("fast-forward")),a.inArray(pe.config.controls,"progress")){var n=a.createElement("span",a.getAttributesFromSelector(pe.config.selectors.progress)),i=v("seek",{id:"plyr-seek-"+e.id});if(n.appendChild(i.label),n.appendChild(i.input),n.appendChild(h("played")),n.appendChild(h("buffer")),pe.config.tooltips.seek){var o=a.createElement("span",{role:"tooltip",class:pe.config.classes.tooltip},"00:00");n.appendChild(o),pe.elements.display.seekTooltip=o}pe.elements.progress=n,t.appendChild(pe.elements.progress)}if(a.inArray(pe.config.controls,"current-time")&&t.appendChild(w("currentTime")),a.inArray(pe.config.controls,"duration")&&t.appendChild(w("duration")),a.inArray(pe.config.controls,"mute")&&t.appendChild(b("mute")),a.inArray(pe.config.controls,"volume")){var s=a.createElement("span",{class:"plyr__volume"}),l={max:10,value:pe.config.volume},c=v("volume",a.extend(l,{id:"plyr-volume-"+e.id}));s.appendChild(c.label),s.appendChild(c.input);var u=h("volume",l);s.appendChild(u),t.appendChild(s)}if(a.inArray(pe.config.controls,"captions")&&t.appendChild(b("captions")),a.inArray(pe.config.controls,"settings")&&!a.is.empty(pe.config.settings)){var d=a.createElement("div",{class:"plyr__menu"});d.appendChild(b("settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var p=a.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}),m=a.createElement("div"),f=a.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=a.createElement("ul",{role:"tablist"});pe.config.settings.forEach(function(t){var n=a.createElement("li",{role:"tab",hidden:""}),i=a.createElement("button",a.extend(a.getAttributesFromSelector(pe.config.selectors.buttons.settings),{type:"button",class:pe.config.classes.control+" "+pe.config.classes.control+"--forward",id:"plyr-settings-"+e.id+"-"+t+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+t,"aria-expanded":!1}),pe.config.i18n[t]),o=a.createElement("span",{class:pe.config.classes.menu.value});o.innerHTML=e[t],i.appendChild(o),n.appendChild(i),g.appendChild(n),pe.elements.settings.tabs[t]=n}),f.appendChild(g),m.appendChild(f),pe.config.settings.forEach(function(t){var n=a.createElement("div",{id:"plyr-settings-"+e.id+"-"+t,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+t+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),i=a.createElement("button",{type:"button",class:pe.config.classes.control+" "+pe.config.classes.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},pe.config.i18n[t]);n.appendChild(i);var o=a.createElement("ul");n.appendChild(o),m.appendChild(n),pe.elements.settings.panes[t]=n}),p.appendChild(m),d.appendChild(p),t.appendChild(d),pe.elements.settings.form=p,pe.elements.settings.menu=d}return a.inArray(pe.config.controls,"pip")&&r.pip&&t.appendChild(b("pip")),a.inArray(pe.config.controls,"airplay")&&r.airplay&&t.appendChild(b("airplay")),a.inArray(pe.config.controls,"fullscreen")&&t.appendChild(b("fullscreen")),a.inArray(pe.config.controls,"play-large")&&(pe.elements.buttons.playLarge=b("play-large"),pe.elements.container.appendChild(pe.elements.buttons.playLarge)),pe.elements.controls=t,E(),S(),t}}function C(e,t){function n(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?y(t):null}function i(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 o=pe.elements.settings.panes.quality.querySelector("ul");pe.elements.settings.tabs.quality.removeAttribute("hidden"),pe.elements.settings.panes.quality.removeAttribute("hidden"),a.emptyElement(o),a.is.array(e)&&!a.is.empty(e)&&e.filter(function(e){return!a.inArray(["tiny","small"],e)}).forEach(function(e){var t=a.createElement("li"),s=a.createElement("label",{class:pe.config.classes.control}),r=a.createElement("input",a.extend(a.getAttributesFromSelector(pe.config.selectors.inputs.quality),{type:"radio",name:"plyr-quality",value:e}));e===pe.config.quality.selected&&(r.checked=!0),s.appendChild(r),s.appendChild(document.createTextNode(i(e)));var l=n(e);a.is.htmlElement(l)&&s.appendChild(l),t.appendChild(s),o.appendChild(t)})}function E(){var e=["start","end","all","reset"],t=pe.elements.settings.panes.loop.querySelector("ul");pe.elements.settings.tabs.loop.removeAttribute("hidden"),pe.elements.settings.panes.loop.removeAttribute("hidden"),a.emptyElement(t),e.forEach(function(e){var n=a.createElement("li"),i=a.createElement("button",a.extend(a.getAttributesFromSelector(pe.config.selectors.buttons.loop),{type:"button",class:pe.config.classes.control,"data-plyr-loop-action":e}),pe.config.i18n[e]);if(a.inArray(["start","end"],e)){var o=y("00:00");i.appendChild(o)}n.appendChild(i),t.appendChild(n)})}function A(){var e=pe.elements.settings.panes.captions.querySelector("ul");if(pe.elements.settings.tabs.captions.removeAttribute("hidden"),pe.elements.settings.panes.captions.removeAttribute("hidden"),a.emptyElement(e),!a.is.empty(pe.captions.tracks)){var t=[].map.call(pe.captions.tracks,function(e){return{language:e.language,badge:!0,label:a.is.empty(e.label)?e.language.toUpperCase():e.label}});t.unshift({language:"off",label:pe.config.i18n.none}),t.forEach(function(t){var n=a.createElement("li"),i=a.createElement("label",{class:pe.config.classes.control}),o=a.createElement("input",a.extend(a.getAttributesFromSelector(pe.config.selectors.inputs.language),{type:"radio",name:"plyr-language",value:t.language}));t.language.toLowerCase()===pe.config.captions.language.toLowerCase()&&(o.checked=!0),i.appendChild(o),i.appendChild(document.createTextNode(t.label||t.language)),t.badge&&i.appendChild(y(t.language.toUpperCase())),n.appendChild(i),e.appendChild(n)})}}function S(e){var t=pe.elements.settings.panes.speed.querySelector("ul");pe.elements.settings.tabs.speed.removeAttribute("hidden"),pe.elements.settings.panes.speed.removeAttribute("hidden"),a.emptyElement(t),a.is.array(e)||(e=pe.config.speed.options),e.forEach(function(e){var n=a.createElement("li"),i=a.createElement("label",{class:pe.config.classes.control}),o=a.createElement("input",a.extend(a.getAttributesFromSelector(pe.config.selectors.inputs.speed),{type:"radio",name:"plyr-speed",value:e}));e===pe.config.speed.selected&&(o.checked=!0),i.appendChild(o),i.insertAdjacentHTML("beforeend",U(e)),n.appendChild(i),t.appendChild(n)})}function T(){if(pe.supported.full&&("audio"!==pe.type||pe.config.fullscreen.allowAudio)&&pe.config.fullscreen.enabled){var e=r.fullscreen;e||pe.config.fullscreen.fallback&&!a.inFrame()?(fe((e?"Native":"Fallback")+" fullscreen enabled"),a.toggleClass(pe.elements.container,pe.config.classes.fullscreen.enabled,!0)):fe("Fullscreen not supported and fallback disabled"),pe.elements.buttons&&pe.elements.buttons.fullscreen&&a.toggleState(pe.elements.buttons.fullscreen,!1),p()}}function x(e){if(a.inArray(["video","vimeo"],pe.type)&&("video"!==pe.type||r.textTracks)&&(a.is.htmlElement(pe.elements.captions)||(pe.elements.captions=a.createElement("div",a.getAttributesFromSelector(pe.config.selectors.captions)),a.insertAfter(pe.elements.captions,pe.elements.wrapper)),pe.captions.tracks=a.is.array(e)?e:pe.media.textTracks,a.toggleClass(pe.elements.container,pe.config.classes.captions.enabled,!a.is.empty(pe.captions.tracks)),!a.is.empty(pe.captions.tracks))){if(_(),"video"===pe.type){var t=pe.config.captions.language.toLowerCase();[].forEach.call(pe.captions.tracks,function(e){a.off(e,"cuechange",F),e.mode="hidden",e.language===t&&(pe.captions.currentTrack=e)}),a.is.track(pe.captions.currentTrack)||(ge("No language found to match "+t+" in tracks"),pe.captions.currentTrack=pe.captions.tracks[0]);var n=pe.captions.currentTrack;a.is.track(n)&&a.inArray(["captions","subtitles"],n.kind)&&(a.on(n,"cuechange",F),n.activeCues&&n.activeCues.length>0&&F(n))}A()}}function P(){return!r.textTracks||a.is.empty(pe.captions.tracks)?"No Subs":pe.captions.enabled?pe.captions.currentTrack.label:"Disabled"}function F(e){a.is.event(e)&&(e=e.target);var t=e.activeCues[0];a.is.cue(t)?I(t.getCueAsHTML()):I()}function I(e){if(a.is.htmlElement(pe.elements.captions)){var t=a.createElement("span");a.emptyElement(pe.elements.captions),a.is.undefined(e)&&(e=""),a.is.string(e)?t.textContent=e.trim():t.appendChild(e),pe.elements.captions.appendChild(t)}else ge("No captions element to render to")}function _(){if(pe.elements.buttons.captions){var e=pe.storage.captions;a.is.boolean(e)?pe.config.captions.active=e:e=pe.config.captions.active,e&&(a.toggleClass(pe.elements.container,pe.config.classes.captions.active,!0),a.toggleState(pe.elements.buttons.captions,!0))}}function N(){if(pe.config.loadSprite){var e=m();e.absolute?(fe("AJAX loading absolute SVG sprite"+(pe.browser.isIE?" (due to IE)":"")),a.loadSprite(e.url,"sprite-plyr")):fe("Sprite will be used as external resource directly")}pe.id=Math.floor(1e4*Math.random());var t=null;t=a.is.string(pe.config.controls)?pe.config.controls:a.is.function(pe.config.controls)?pe.config.controls({id:pe.id,seektime:pe.config.seekTime}):k({id:pe.id,seektime:pe.config.seekTime,speed:U(),quality:"HD",captions:P(),loop:"None"});var n;if(a.is.string(pe.config.selectors.controls.container)&&(n=document.querySelector(pe.config.selectors.controls.container)),a.is.htmlElement(n)||(n=pe.elements.container),a.is.htmlElement(t)?n.appendChild(t):n.insertAdjacentHTML("beforeend",t),a.is.htmlElement(pe.elements.controls)&&L(),pe.config.tooltips.controls)for(var i=l([pe.config.selectors.controls.wrapper," ",pe.config.selectors.labels," .",pe.config.classes.hidden].join("")),o=i.length-1;o>=0;o--){var s=i[o];a.toggleClass(s,pe.config.classes.hidden,!1),a.toggleClass(s,pe.config.classes.tooltip,!0)}}function L(){try{return pe.elements.controls=c(pe.config.selectors.controls.wrapper),pe.elements.buttons={play:l(pe.config.selectors.buttons.play),pause:c(pe.config.selectors.buttons.pause),restart:c(pe.config.selectors.buttons.restart),rewind:c(pe.config.selectors.buttons.rewind),forward:c(pe.config.selectors.buttons.forward),mute:c(pe.config.selectors.buttons.mute),pip:c(pe.config.selectors.buttons.pip),airplay:c(pe.config.selectors.buttons.airplay),settings:c(pe.config.selectors.buttons.settings),captions:c(pe.config.selectors.buttons.captions),fullscreen:c(pe.config.selectors.buttons.fullscreen)},pe.elements.progress=c(pe.config.selectors.progress),pe.elements.inputs={seek:c(pe.config.selectors.inputs.seek),volume:c(pe.config.selectors.inputs.volume)},pe.elements.display={buffer:c(pe.config.selectors.display.buffer),played:c(pe.config.selectors.display.played),volume:c(pe.config.selectors.display.volume),duration:c(pe.config.selectors.display.duration),currentTime:c(pe.config.selectors.display.currentTime)},a.is.htmlElement(pe.elements.progress)&&(pe.elements.display.seekTooltip=pe.elements.progress.querySelector("."+pe.config.classes.tooltip)),!0}catch(e){return ge("It looks like there is a problem with your custom controls HTML",e),M(!0),!1}}function q(){a.toggleClass(pe.elements.container,pe.config.selectors.container.replace(".",""),pe.supported.full)}function M(e){e&&a.inArray(o.html5,pe.type)?pe.media.setAttribute("controls",""):pe.media.removeAttribute("controls")}function V(e){var t=pe.config.i18n.play;if(a.is.string(pe.config.title)&&!a.is.empty(pe.config.title)&&(t+=", "+pe.config.title,pe.elements.container.setAttribute("aria-label",pe.config.title)),pe.supported.full&&(a.is.htmlElement(pe.elements.buttons.play)&&pe.elements.buttons.play.setAttribute("aria-label",t),a.is.htmlElement(pe.elements.buttons.playLarge)&&pe.elements.buttons.playLarge.setAttribute("aria-label",t)),a.is.htmlElement(e)){var n=a.is.string(pe.config.title)&&!a.is.empty(pe.config.title)?pe.config.title:"video";e.setAttribute("title",pe.config.i18n.frameTitle.replace("{title}",n))}}function O(){var e=null;pe.storage={},r.storage&&pe.config.storage.enabled&&(window.localStorage.removeItem("plyr-volume"),e=window.localStorage.getItem(pe.config.storage.key),e&&(/^\d+(\.\d+)?$/.test(e)?D({volume:parseFloat(e)}):pe.storage=JSON.parse(e)))}function D(e){r.storage&&pe.config.storage.enabled&&(a.extend(pe.storage,e),window.localStorage.setItem(pe.config.storage.key,JSON.stringify(pe.storage)))}function j(){return pe.media?(pe.supported.full&&(a.toggleClass(pe.elements.container,pe.config.classes.type.replace("{0}",pe.type),!0),a.inArray(o.embed,pe.type)&&a.toggleClass(pe.elements.container,pe.config.classes.type.replace("{0}","video"),!0),a.toggleClass(pe.elements.container,pe.config.classes.pip.enabled,r.pip&&"video"===pe.type),a.toggleClass(pe.elements.container,pe.config.classes.airplay.enabled,r.airplay&&a.inArray(o.html5,pe.type)),a.toggleClass(pe.elements.container,pe.config.classes.stopped,pe.config.autoplay),a.toggleClass(pe.elements.container,pe.config.classes.isIos,pe.browser.isIos),a.toggleClass(pe.elements.container,pe.config.classes.isTouch,r.touch)),a.inArray(["video","youtube","vimeo"],pe.type)&&(pe.elements.wrapper=a.createElement("div",{class:pe.config.classes.video}),a.wrap(pe.media,pe.elements.wrapper)),void(a.inArray(o.embed,pe.type)&&R())):void ge("No media element found!")}function R(){var e,t=pe.type+"-"+Math.floor(1e4*Math.random());switch(pe.type){case"youtube":e=a.parseYouTubeId(pe.embedId);break;default:e=pe.embedId}for(var n=l('[id^="'+pe.type+'-"]'),i=n.length-1;i>=0;i--)a.removeElement(n[i]);if(a.toggleClass(pe.elements.wrapper,pe.config.classes.embed,!0),"youtube"===pe.type)pe.media.setAttribute("id",t),a.is.object(window.YT)?B(e):(a.injectScript(pe.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){B(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===pe.type)if(pe.media.setAttribute("id",t),a.is.object(window.Vimeo))Y(e);else{a.injectScript(pe.config.urls.vimeo.api);var o=window.setInterval(function(){a.is.object(window.Vimeo)&&(window.clearInterval(o),Y(e))},50)}else if("soundcloud"===pe.type){var s=a.createElement("iframe");s.loaded=!1,a.on(s,"load",function(){s.loaded=!0}),a.setAttributes(s,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+e,id:t}),pe.media.appendChild(s),window.SC||a.injectScript(pe.config.urls.soundcloud.api);var r=window.setInterval(function(){window.SC&&s.loaded&&(window.clearInterval(r),W.call(s))},50)}}function H(){pe.supported.full&&(ce(),ue()),V(c("iframe"))}function B(e){pe.embed=new window.YT.Player(pe.media.id,{videoId:e,playerVars:{autoplay:pe.config.autoplay?1:0,controls:pe.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:pe.config.captions.active?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,playsinline:1,origin:window.location.href},events:{onError:function(e){n(pe.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(e){var t=e.target;pe.media.play=function(){t.playVideo(),pe.media.paused=!1},pe.media.pause=function(){t.pauseVideo(),pe.media.paused=!0},pe.media.stop=function(){t.stopVideo(),pe.media.paused=!0},pe.media.duration=t.getDuration(),pe.media.paused=!0,pe.media.currentTime=0,pe.media.muted=t.isMuted();var i=t.getPlaybackRate(),o=t.getAvailablePlaybackRates();console.warn(i,o),pe.config.title=t.getVideoData().title,pe.supported.full&&pe.media.setAttribute("tabindex",-1),H(),n(pe.media,"timeupdate"),n(pe.media,"durationchange"),window.clearInterval(me.buffering),me.buffering=window.setInterval(function(){pe.media.buffered=t.getVideoLoadedFraction(),(null===pe.media.lastBuffered||pe.media.lastBuffered0;n=("0"+n).slice(-2),i=("0"+i).slice(-2);var r=(s?o+":":"")+i+":"+n;return t.textContent=r,r}}function te(){if(pe.supported.full){var e=pe.getDuration()||0;!pe.elements.display.duration&&pe.config.displayDuration&&pe.media.paused&&ee(e,pe.elements.display.currentTime),pe.elements.display.duration&&ee(e,pe.elements.display.duration),oe()}}function ne(e){ee(pe.media.currentTime,pe.elements.display.currentTime),e&&"timeupdate"===e.type&&pe.media.seeking||K(e)}function ie(e){a.is.number(e)||(e=0);var t=pe.getDuration(),n=a.getPercentage(e,t);pe.elements.progress&&pe.elements.display.played&&(pe.elements.display.played.value=n),pe.elements.buttons&&pe.elements.inputs.seek&&(pe.elements.inputs.seek.value=n)}function oe(e){var t=pe.getDuration();if(pe.config.tooltips.seek&&a.is.htmlElement(pe.elements.inputs.seek)&&a.is.htmlElement(pe.elements.display.seekTooltip)&&0!==t){var n=pe.elements.inputs.seek.getBoundingClientRect(),i=0,o=pe.config.classes.tooltip+"--visible";if(a.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!a.hasClass(pe.elements.display.seekTooltip,o))return;i=pe.elements.display.seekTooltip.style.left.replace("%","")}i<0?i=0:i>100&&(i=100),ee(t/100*i,pe.elements.display.seekTooltip),pe.elements.display.seekTooltip.style.left=i+"%",a.is.event(e)&&a.inArray(["mouseenter","mouseleave"],e.type)&&a.toggleClass(pe.elements.display.seekTooltip,o,"mouseenter"===e.type)}}function ae(e){function t(){if(u(pe.media),u("captions"),u("wrapper"),pe.elements.container&&pe.elements.container.removeAttribute("class"),"type"in e&&(pe.type=e.type,"video"===pe.type)){var t=e.sources[0];"type"in t&&a.inArray(o.embed,t.type)&&(pe.type=t.type)}switch(pe.supported=a.checkSupport(pe.type,pe.config.inline),pe.type){case"video":pe.media=a.createElement("video");break;case"audio":pe.media=a.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":pe.media=a.createElement("div"),pe.embedId=e.sources[0].src}a.prependChild(pe.elements.container,pe.media),a.is.boolean(e.autoplay)&&(pe.config.autoplay=e.autoplay),a.inArray(o.html5,pe.type)&&(pe.config.crossorigin&&pe.media.setAttribute("crossorigin",""),pe.config.autoplay&&pe.media.setAttribute("autoplay",""),"poster"in e&&pe.media.setAttribute("poster",e.poster),pe.config.loop.active&&pe.media.setAttribute("loop",""),pe.config.inline&&pe.media.setAttribute("playsinline","")),a.toggleClass(pe.elements.container,pe.config.classes.fullscreen.active,pe.fullscreen.active),a.toggleClass(pe.elements.container,pe.config.classes.captions.active,pe.captions.enabled),q(),a.inArray(o.html5,pe.type)&&d("source",e.sources),j(),a.inArray(o.html5,pe.type)&&("tracks"in e&&d("track",e.tracks),pe.media.load()),(a.inArray(o.html5,pe.type)||a.inArray(o.embed,pe.type)&&!pe.supported.full)&&(ce(),ue()),pe.config.title=e.title,V()}return a.is.object(e)&&"sources"in e&&e.sources.length?(pe.stop(),ie(),Z(),le(),void pe.destroy(t,!1)):void ge("Invalid source format")}function se(){function e(){var e=pe.togglePlay(),t=pe.elements.buttons[e?"play":"pause"],n=pe.elements.buttons[e?"pause":"play"];if(n){var i=a.hasClass(t,pe.config.classes.tabFocus);setTimeout(function(){a.is.htmlElement(n)&&n.focus(),i&&(a.toggleClass(t,pe.config.classes.tabFocus,!1),a.toggleClass(n,pe.config.classes.tabFocus,!0))},100)}}function t(e){return e.keyCode?e.keyCode:e.which}function n(e){a.toggleClass(l("."+pe.config.classes.tabFocus),pe.config.classes.tabFocus,!1),pe.elements.container.contains(e)&&a.toggleClass(e,pe.config.classes.tabFocus,!0)}function i(n){function i(){var e=pe.media.duration;a.is.number(e)&&pe.seek(e/10*(o-48))}var o=t(n),s="keydown"===n.type,l=s&&o===u;if(a.is.number(o))if(s){var c=[48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79],d=[38,40];if(a.inArray(d,o)){var p=a.getFocusElement();if(a.is.htmlElement(p)&&"radio"===a.getFocusElement().type)return}switch(a.inArray(c,o)&&(n.preventDefault(),n.stopPropagation()),o){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:l||i();break;case 32:case 75:l||e();break;case 38:pe.increaseVolume();break;case 40:pe.decreaseVolume();break;case 77:l||pe.toggleMute();break;case 39:pe.forward();break;case 37:pe.rewind();break;case 70:pe.toggleFullscreen();break;case 67:l||pe.toggleCaptions();break;case 73:pe.loop("start");break;case 76:pe.loop();break;case 79:pe.loop("end")}!r.fullscreen&&pe.fullscreen.active&&27===o&&pe.toggleFullscreen(),u=o}else u=null}var o=pe.browser.isIE?"change":"input";if(pe.config.keyboardShortcuts.focused){var u=null;pe.config.keyboardShortcuts.global&&a.on(window,"keydown keyup",function(e){var n=t(e),o=a.getFocusElement(),s=[48,49,50,51,52,53,54,56,57,75,77,70,67,73,76,79];!a.inArray(s,n)||a.is.htmlElement(o)&&a.matches(o,pe.config.selectors.editable)||i(e)},!1),a.on(pe.elements.container,"keydown keyup",i,!1)}a.on(window,"keyup",function(e){var i=t(e),o=a.getFocusElement();9===i&&n(o)}),a.on(document.body,"click",function(){a.toggleClass(c("."+pe.config.classes.tabFocus),pe.config.classes.tabFocus,!1); -});for(var d in pe.elements.buttons){var p=pe.elements.buttons[d];a.on(p,"blur",function(){a.toggleClass(p,"tab-focus",!1)})}var m=function(e,t,n){a.is.function(t)&&t.call(this,e),a.is.function(n)&&n.call(this,e)};a.proxy(pe.elements.buttons.play,"click",pe.config.listeners.play,e),a.proxy(pe.elements.buttons.playLarge,"click",pe.config.listeners.play,e),a.proxy(pe.elements.buttons.pause,"click",pe.config.listeners.pause,e),a.proxy(pe.elements.buttons.restart,"click",pe.config.listeners.restart,function(){pe.restart()}),a.proxy(pe.elements.buttons.rewind,"click",pe.config.listeners.rewind,function(){pe.rewind()}),a.proxy(pe.elements.buttons.forward,"click",pe.config.listeners.forward,function(){pe.forward()}),a.proxy(pe.elements.buttons.mute,"click",pe.config.listeners.mute,function(){pe.toggleMute()}),a.proxy(pe.elements.buttons.captions,"click",pe.config.listeners.captions,function(){pe.toggleCaptions()}),a.proxy(pe.elements.buttons.fullscreen,"click",pe.config.listeners.fullscreen,function(e){pe.toggleFullscreen(e)}),a.proxy(pe.elements.buttons.pip,"click",pe.config.listeners.pip,function(){pe.togglePictureInPicture()}),a.proxy(pe.elements.buttons.airplay,"click",pe.config.listeners.airplay,function(){pe.airPlay()}),a.on(pe.elements.buttons.settings,"click",z),a.on(document.documentElement,"click",z),a.on(pe.elements.settings.form,"click",X),a.on(pe.elements.settings.form,"click",function(e){a.matches(e.target,pe.config.selectors.inputs.language)?m.call(this,e,pe.config.listeners.language,function(){pe.language(e.target.value.toLowerCase())}):a.matches(e.target,pe.config.selectors.inputs.quality)?m.call(this,e,pe.config.listeners.quality,function(){ge("Set quality")}):a.matches(e.target,pe.config.selectors.inputs.speed)?m.call(this,e,pe.config.listeners.speed,function(){pe.setSpeed(parseFloat(e.target.value))}):a.matches(e.target,pe.config.selectors.buttons.loop)&&m.call(this,e,pe.config.listeners.loop,function(){var t=e.target.getAttribute("data-loop__value")||e.target.getAttribute("data-loop__type");a.inArray(["start","end","all","none"],t)&&pe.loop(t)})}),a.proxy(pe.elements.inputs.seek,o,pe.config.listeners.seek,function(e){var t=pe.getDuration();pe.seek(e.target.value/e.target.max*t)}),a.proxy(pe.elements.inputs.volume,o,pe.config.listeners.volume,function(){pe.setVolume(event.target.value)}),a.on(pe.elements.progress,"mouseenter mouseleave mousemove",oe),pe.config.hideControls&&(a.on(pe.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen",function(e){pe.toggleControls(e)}),a.on(pe.elements.controls,"mouseenter mouseleave",function(e){pe.elements.controls.hover="mouseenter"===e.type}),a.on(pe.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){pe.elements.controls.pressed=a.inArray(["mousedown","touchstart"],e.type)}),a.on(pe.elements.controls,"focus blur",function(e){pe.toggleControls(e)},!0,!0)),a.proxy(pe.elements.inputs.volume,"wheel",pe.config.listeners.volume,function(e){var t=e.webkitDirectionInvertedFromDevice,n=.2,i=0;(e.deltaY<0||e.deltaX>0)&&(t?(pe.decreaseVolume(n),i=-1):(pe.increaseVolume(n),i=1)),(e.deltaY>0||e.deltaX<0)&&(t?(pe.increaseVolume(n),i=1):(pe.decreaseVolume(n),i=-1)),(1===i&&pe.media.volume<1||i===-1&&pe.media.volume>0)&&e.preventDefault()},!1),r.fullscreen&&a.on(document,s.eventType,function(e){pe.toggleFullscreen(e)})}function re(){if(a.on(pe.media,"timeupdate seeking",ne),a.on(pe.media,"durationchange loadedmetadata",te),a.on(pe.media,"ended",function(){"video"===pe.type&&pe.config.showPosterOnEnd&&("video"===pe.type&&I(),pe.restart(),pe.media.load())}),a.on(pe.media,"progress playing",K),a.on(pe.media,"volumechange",$),a.on(pe.media,"play pause ended",Q),a.on(pe.media,"waiting canplay seeked",G),pe.config.clickToPlay&&"audio"!==pe.type){var e=c("."+pe.config.classes.video);if(!e)return;e.style.cursor="pointer",a.on(e,"click",function(){pe.config.hideControls&&r.touch&&!pe.media.paused||(pe.media.paused?pe.play():pe.media.ended?(pe.restart(),pe.play()):pe.pause())})}pe.config.disableContextMenu&&a.on(pe.media,"contextmenu",function(e){e.preventDefault()},!1),a.on(pe.media,pe.config.events.concat(["keyup","keydown"]).join(" "),function(e){n(pe.elements.container,e.type,!0)})}function le(){if(a.inArray(o.html5,pe.type)){for(var e=pe.media.querySelectorAll("source"),t=0;t=0;n--){var i=n>0?t.cloneNode(!0):t,o=e[n],a=o.parentNode,s=o.nextSibling;return i.appendChild(o),s?a.insertBefore(i,s):a.appendChild(i),i}},removeElement:function(e){a.is.htmlElement(e)&&a.is.htmlElement(e.parentNode)&&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,t,n){var i=document.createElement(e);return a.is.object(t)&&a.setAttributes(i,t),a.is.string(n)&&(i.textContent=n),i},insertElement:function(e,t,n,i){var o=a.createElement(e,n,i);a.prependChild(t,o)},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(!a.is.string(e)||a.is.empty(e))return{};var n={};return e.split(",").forEach(function(e){e=e.trim();var i=e.charAt(0);switch(i){case".":var o=e.replace(".","");a.is.object(t)&&a.is.string(t.class)&&(t.class+=" "+o),n.class=o;break;case"#":n.id=e.replace("#","");break;case"[":e=e.replace(/[\[\]]/g,"");var s=e.split("="),r=s[0],l=s.length>1?s[1].replace(/[\"\']/g,""):"";n[r]=l}}),n},toggleClass:function(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var i=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=i+(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,t){var n=Element.prototype,i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(e){return[].indexOf.call(document.querySelectorAll(e),this)!==-1};return i.call(e,t)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},proxy:function(e,t,n,i,o,s){a.on(e,t,function(t){n&&n.apply(e,[t]),i.apply(e,[t])},o,s)},toggleListener:function(e,t,n,i,o,s){if(null!==e&&!a.is.undefined(e)){if(t=t.split(" "),a.is.boolean(s)||(s=!1),a.is.boolean(o)||(o=!0),e instanceof NodeList){var l=1===arguments.length?[arguments[0]]:Array.apply(null,arguments);return l.shift(),void[].forEach.call(e,function(e){e instanceof Node&&a.toggleListener.apply(null,[e].concat(l))})}var c=s;r.passiveListeners&&(c={passive:o,capture:s}),t.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,c)})}},on:function(e,t,n,i,o){a.toggleListener(e,t,n,!0,i,o)},off:function(e,t,n,i,o){a.toggleListener(e,t,n,!1,i,o)},event:function(e,t,n,i){if(e&&t){a.is.boolean(n)||(n=!1);var o;a.is.function(window.CustomEvent)?o=window.CustomEvent:(o=function(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n},o.prototype=window.Event.prototype);var s=new o(t,{bubbles:n,detail:i});e.dispatchEvent(s)}},toggleState:function(e,t){if(e)return t=a.is.boolean(t)?t:!e.getAttribute("aria-pressed"),e.setAttribute("aria-pressed",t),t},getPercentage:function(e,t){return 0===e||0===t||isNaN(e)||isNaN(t)?0:(e/t*100).toFixed(2)},extend:function(){var e=arguments;if(e.length){if(1===e.length)return e[0];var t=Array.prototype.shift.call(e);a.is.object(t)||(t={});for(var n=e.length,i=0;is&&(n=s),t.core.updateSeekDisplay(n),a.inArray(o.embed,t.type)){switch(t.type){case"youtube":t.embed.seekTo(n);break;case"vimeo":t.embed.setCurrentTime(n.toFixed(0));break;case"soundcloud":t.embed.seekTo(1e3*n)}i&&t.pause(),t.core.trigger(t.media,"timeupdate"),t.media.seeking=!0,t.core.trigger(t.media,"seeking")}else t.media.currentTime=n.toFixed(4);return t.core.log("Seeking to "+t.media.currentTime+" seconds"),t},t.prototype.setVolume=function(e){var t=this,n=10,i=0;if(a.is.undefined(e)&&(e=t.storage.volume),(null===e||isNaN(e))&&(e=t.config.volume),e>n&&(e=n),e0&&t.toggleMute(),t},t.prototype.increaseVolume=function(e){var t=this,n=t.media.muted?0:10*t.media.volume;return a.is.number(e)||(e=1),t.setVolume(n+e),t},t.prototype.decreaseVolume=function(e){var t=this,n=t.media.muted?0:10*t.media.volume;return a.is.number(e)||(e=1),t.setVolume(n-e),t},t.prototype.toggleMute=function(e){var t=this;if(a.is.boolean(e)||(e=!t.media.muted),a.toggleState(t.elements.buttons.mute,e),t.media.muted=e,0===t.media.volume&&t.volume(t.config.volume),a.inArray(o.embed,t.type)){switch(t.type){case"youtube":t.embed[t.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":t.embed.setVolume(t.media.muted?0:parseFloat(t.config.volume/10))}t.core.trigger(t.media,"volumechange")}return t},t.prototype.setSpeed=function(e){var t=this;return a.is.number(e)||(e=parseFloat(t.storage.speed||t.config.speed.selected)),e<.1&&(e=.1),e>2&&(e=2),a.is.array(t.config.speed.options)?(t.config.speed.selected=e,t.media.playbackRate=e,t.core.updateStorage({speed:e}),t):void t.core.warn("Invalid speeds format")},t.prototype.loop=function(e){var t=this;a.inArray(["start","end","all","none","toggle"],e)||(e="toggle");var n=Number(t.media.currentTime);switch(e){case"start":t.config.loop.end&&t.config.loop.end<=n&&(t.config.loop.end=null),t.config.loop.start=n,t.config.loop.indicator.start=t.elements.display.played.value;break;case"end":if(t.config.loop.start>=n)return;t.config.loop.end=n,t.config.loop.indicator.end=t.elements.display.played.value;break;case"all":t.config.loop.start=0,t.config.loop.end=t.media.duration-2,t.config.loop.indicator.start=0,t.config.loop.indicator.end=100;break;case"toggle":t.config.loop.active?(t.config.loop.start=0,t.config.loop.end=null):(t.config.loop.start=0,t.config.loop.end=t.media.duration-2);break;default:t.config.loop.start=0,t.config.loop.end=null}t.config.loop.active=a.is.number(t.config.loop.start)&&a.is.number(t.config.loop.end);var i=(t.core.updateTimeDisplay(t.config.loop.start,t.core.getElement('[data-plyr-loop="start"]')),null);return a.is.number(t.config.loop.end)&&(i=t.core.updateTimeDisplay(t.config.loop.end,t.core.getElement('[data-loop__value="loopout"]'))),t.config.loop.active,t},t.prototype.source=function(e){var t=this;if(a.is.object(e))return t.core.updateSource(e),t;var n;switch(t.type){case"youtube":n=t.embed.getVideoUrl();break;case"vimeo":t.embed.getVideoUrl.then(function(e){n=e});break;case"soundcloud":t.embed.getCurrentSound(function(e){n=e.permalink_url});break;default:n=t.media.currentSrc}return n},t.prototype.poster=function(e){var t=this;return a.is.string(e)?("video"===t.type?t.media.setAttribute("poster",e):t.core.warn("Poster can only be set on HTML5 video"),t):t.media.getAttribute("poster")},t.prototype.toggleCaptions=function(e){var t=this;if(t.supported.full&&t.elements.buttons.captions)return a.is.boolean(e)||(e=t.elements.container.className.indexOf(t.config.classes.captions.active)===-1),t.captions.enabled=e,a.toggleState(t.elements.buttons.captions,t.captions.enabled),a.toggleClass(t.elements.container,t.config.classes.captions.active,t.captions.enabled),t.core.trigger(t.elements.container,t.captions.enabled?"captionsenabled":"captionsdisabled",!0),t.core.updateStorage({captions:t.captions.enabled}),t},t.prototype.language=function(e){var t=this;return a.is.string(e)?(t.config.captions.language=e.toLowerCase(),t.core.setCaption(),t.core.setupCaptions(),t):t.config.captions.language},t.prototype.toggleFullscreen=function(e){function t(){n={x:window.pageXOffset||0,y:window.pageYOffset||0}}function i(){window.scrollTo(n.x,n.y)}var o=this,l=r.fullscreen;if(l){if(!a.is.event(e)||e.type!==s.eventType)return s.isFullScreen(o.elements.container)?s.cancelFullScreen():(t(),s.requestFullScreen(o.elements.container)),void(o.fullscreen.active=s.isFullScreen(o.elements.container));o.fullscreen.active=s.isFullScreen(o.elements.container)}else o.fullscreen.active=!o.fullscreen.active,document.body.style.overflow=o.fullscreen.active?"hidden":"";return a.toggleClass(o.elements.container,o.config.classes.fullscreen.active,o.fullscreen.active),o.elements.buttons&&o.elements.buttons.fullscreen&&a.toggleState(o.elements.buttons.fullscreen,o.fullscreen.active),o.core.trigger(o.elements.container,o.fullscreen.active?"enterfullscreen":"exitfullscreen",!0),!o.fullscreen.active&&l&&i(),o},t.prototype.togglePictureInPicture=function(e){var t=this,n={pip:"picture-in-picture",inline:"inline"};if(t.core.support.pip)return a.is.boolean(e)||(e=t.media.webkitPresentationMode===n.inline),t.media.webkitSetPresentationMode(e?n.pip:n.inline),t},t.prototype.airPlay=function(){var e=this;if(e.core.support.airplay)return e.media.webkitShowPlaybackTargetPicker(),e},t.prototype.toggleControls=function(e){var t=this;if(t.config.hideControls&&"audio"!==t.type){var n=0,i=e,o=!1,s=a.hasClass(t.elements.container,t.config.classes.loading);if(a.is.boolean(e)||(a.is.event(e)?(o="enterfullscreen"===e.type,i=a.inArray(["mousemove","touchstart","mouseenter","focus"],e.type),a.inArray(["mousemove","touchmove"],e.type)&&(n=2e3),"focus"===e.type&&(n=3e3)):i=a.hasClass(t.elements.container,t.config.classes.hideControls)),window.clearTimeout(t.core.timers.hover),i||t.media.paused||s){if(a.toggleClass(t.elements.container,t.config.classes.hideControls,!1),t.media.paused||s)return;r.touch&&(n=3e3)}return i&&t.media.paused||(t.core.timers.hover=window.setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||o)&&a.toggleClass(t.elements.container,t.config.classes.hideControls,!0)},n)),t}},t.prototype.on=function(e,t){var n=this;return a.on(n.elements.container,e,t),n},t.prototype.off=function(e,t){var n=this;return a.off(n.elements.container,e,t),n},t.prototype.supports=function(e){return r.mime(this,e)},t.prototype.destroy=function(e,t){function n(){if(null!==i){if(a.is.boolean(t)||(t=!0),document.body.style.overflow="",t){var n=i.elements.container.parentNode;a.is.htmlElement(n)&&n.replaceChild(i.elements.original,i.elements.container)}i.core.trigger(i.elements.original,"destroyed",!0),a.is.function(e)&&e.call(i.elements.original),i=null}}var i=this;switch(i.type){case"youtube":window.clearInterval(i.core.timers.buffering),window.clearInterval(i.core.timers.playing),i.embed.destroy(),n();break;case"vimeo":i.embed.unload().then(n),window.setTimeout(n,200);break;case"video":case"audio":i.core.toggleNativeControls(!0),n()}},t.prototype.getDuration=function(){var e=this,t=parseInt(e.config.duration),n=0;return null===e.media.duration||isNaN(e.media.duration)||(n=e.media.duration),isNaN(t)?n:t},t}); \ No newline at end of file +(function(e,t,n){"use strict";"object"==typeof exports?module.exports=n(require):"function"==typeof define&&define.amd?define(n):t[e]=n()}).call(this,"Plyr",this,function(e){"use strict";function t(e,t){function n(e,t,n,i){a.event(e,t,n,a.extend({},i,{plyr:me}))}function l(){function e(e){9===e.which&&me.fullscreen.active&&(e.target!==i||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),i.focus()):(e.preventDefault(),n.focus()))}var t=c("input:not([disabled]), button:not([disabled])"),n=t[0],i=t[t.length-1];a.on(me.elements.container,"keydown",e,!1)}function c(e){return me.elements.container.querySelectorAll(e)}function u(e){return c(e)[0]}function d(e){a.is.string(e)?(a.removeElement(me.elements[e]),me.elements[e]=null):a.removeElement(e)}function p(e,t){a.is.string(t)?a.insertElement(e,me.media,{src:t}):a.is.array(t)&&t.forEach(function(t){a.insertElement(e,me.media,t)})}function m(){return{url:me.config.iconUrl,absolute:0===me.config.iconUrl.indexOf("http")||me.browser.isIE}}function f(e,t){var n="http://www.w3.org/2000/svg",i=m(),o=(i.absolute?"":i.url)+"#"+me.config.iconPrefix,s=document.createElementNS(n,"svg");a.setAttributes(s,a.extend(t,{role:"presentation"}));var r=document.createElementNS(n,"use");return r.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o+"-"+e),s.appendChild(r),s}function g(e){var t=me.config.i18n[e];switch(e){case"pip":t="PIP";break;case"airplay":t="AirPlay"}return a.createElement("span",{class:me.config.classes.hidden},t)}function y(e){var t=a.createElement("span",{class:me.config.classes.menu.value});return t.appendChild(a.createElement("span",{class:me.config.classes.menu.badge},e)),t}function b(e,t){var n,i,o,s=a.createElement("button");switch(a.is.object(t)||(t={}),"class"in t?t.class.indexOf(me.config.classes.control)===-1&&(t.class+=" "+me.config.classes.control):t.class=me.config.classes.control,e){case"mute":o="toggleMute",n="volume",i="muted";break;case"captions":o="toggleCaptions",n="captions-off",i="captions-on";break;case"fullscreen":o="toggleFullscreen",n="enter-fullscreen",i="exit-fullscreen";break;case"play-large":t.class="plyr__play-large",e="play",o="play",n="play";break;default:o=e,n=e}return a.extend(t,a.getAttributesFromSelector(me.config.selectors.buttons[e],t)),a.is.string(i)&&s.appendChild(f(i,{class:"icon--"+i})),s.appendChild(f(n)),s.appendChild(g(o)),a.setAttributes(s,t),me.elements.buttons[e]=s,s}function v(e,t){var n=a.createElement("label",{for:t.id,class:me.config.classes.hidden},me.config.i18n[e]),i=a.createElement("input",a.extend(a.getAttributesFromSelector(me.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.1,value:0,autocomplete:"off"},t));return me.elements.inputs[e]=i,{label:n,input:i}}function h(e,t){var n=a.createElement("progress",a.extend(a.getAttributesFromSelector(me.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(a.createElement("span",null,"0"));var i="";switch(e){case"played":i=me.config.i18n.played;break;case"buffer":i=me.config.i18n.buffered}n.textContent="% "+i.toLowerCase()}return me.elements.display[e]=n,n}function w(e){var t=a.createElement("span",{class:"plyr__time"});return t.appendChild(a.createElement("span",{class:me.config.classes.hidden},me.config.i18n[e])),t.appendChild(a.createElement("span",a.getAttributesFromSelector(me.config.selectors.display[e]),"00:00")),me.elements.display[e]=t,t}function k(e){if(!a.is.empty(me.config.controls)){var t=a.createElement("div",a.getAttributesFromSelector(me.config.selectors.controls.wrapper));if(a.inArray(me.config.controls,"restart")&&t.appendChild(b("restart")),a.inArray(me.config.controls,"rewind")&&t.appendChild(b("rewind")),a.inArray(me.config.controls,"play")&&(t.appendChild(b("play")),t.appendChild(b("pause"))),a.inArray(me.config.controls,"fast-forward")&&t.appendChild(b("fast-forward")),a.inArray(me.config.controls,"progress")){var n=a.createElement("span",a.getAttributesFromSelector(me.config.selectors.progress)),i=v("seek",{id:"plyr-seek-"+e.id});if(n.appendChild(i.label),n.appendChild(i.input),n.appendChild(h("played")),n.appendChild(h("buffer")),me.config.tooltips.seek){var o=a.createElement("span",{role:"tooltip",class:me.config.classes.tooltip},"00:00");n.appendChild(o),me.elements.display.seekTooltip=o}me.elements.progress=n,t.appendChild(me.elements.progress)}if(a.inArray(me.config.controls,"current-time")&&t.appendChild(w("currentTime")),a.inArray(me.config.controls,"duration")&&t.appendChild(w("duration")),a.inArray(me.config.controls,"mute")&&t.appendChild(b("mute")),a.inArray(me.config.controls,"volume")){var s=a.createElement("span",{class:"plyr__volume"}),l={max:10,value:me.config.volume},c=v("volume",a.extend(l,{id:"plyr-volume-"+e.id}));s.appendChild(c.label),s.appendChild(c.input);var u=h("volume",l);s.appendChild(u),t.appendChild(s)}if(a.inArray(me.config.controls,"captions")&&t.appendChild(b("captions")),a.inArray(me.config.controls,"settings")&&!a.is.empty(me.config.settings)){var d=a.createElement("div",{class:"plyr__menu"});d.appendChild(b("settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var p=a.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}),m=a.createElement("div"),f=a.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=a.createElement("ul",{role:"tablist"});me.config.settings.forEach(function(t){var n=a.createElement("li",{role:"tab",hidden:""}),i=a.createElement("button",a.extend(a.getAttributesFromSelector(me.config.selectors.buttons.settings),{type:"button",class:me.config.classes.control+" "+me.config.classes.control+"--forward",id:"plyr-settings-"+e.id+"-"+t+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+t,"aria-expanded":!1}),me.config.i18n[t]),o=a.createElement("span",{class:me.config.classes.menu.value});o.innerHTML=e[t],i.appendChild(o),n.appendChild(i),g.appendChild(n),me.elements.settings.tabs[t]=n}),f.appendChild(g),m.appendChild(f),me.config.settings.forEach(function(t){var n=a.createElement("div",{id:"plyr-settings-"+e.id+"-"+t,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+t+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),i=a.createElement("button",{type:"button",class:me.config.classes.control+" "+me.config.classes.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},me.config.i18n[t]);n.appendChild(i);var o=a.createElement("ul");n.appendChild(o),m.appendChild(n),me.elements.settings.panes[t]=n}),p.appendChild(m),d.appendChild(p),t.appendChild(d),me.elements.settings.form=p,me.elements.settings.menu=d}return a.inArray(me.config.controls,"pip")&&r.pip&&t.appendChild(b("pip")),a.inArray(me.config.controls,"airplay")&&r.airplay&&t.appendChild(b("airplay")),a.inArray(me.config.controls,"fullscreen")&&t.appendChild(b("fullscreen")),a.inArray(me.config.controls,"play-large")&&(me.elements.buttons.playLarge=b("play-large"),me.elements.container.appendChild(me.elements.buttons.playLarge)),me.elements.controls=t,E(),S(),t}}function C(e,t){function n(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?y(t):null}function i(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 o=me.elements.settings.panes.quality.querySelector("ul");me.elements.settings.tabs.quality.removeAttribute("hidden"),me.elements.settings.panes.quality.removeAttribute("hidden"),a.emptyElement(o),a.is.array(e)&&!a.is.empty(e)&&e.filter(function(e){return!a.inArray(["tiny","small"],e)}).forEach(function(e){var t=a.createElement("li"),s=a.createElement("label",{class:me.config.classes.control}),r=a.createElement("input",a.extend(a.getAttributesFromSelector(me.config.selectors.inputs.quality),{type:"radio",name:"plyr-quality",value:e}));e===me.config.quality.selected&&(r.checked=!0),s.appendChild(r),s.appendChild(document.createTextNode(i(e)));var l=n(e);a.is.htmlElement(l)&&s.appendChild(l),t.appendChild(s),o.appendChild(t)})}function E(){var e=["start","end","all","reset"],t=me.elements.settings.panes.loop.querySelector("ul");me.elements.settings.tabs.loop.removeAttribute("hidden"),me.elements.settings.panes.loop.removeAttribute("hidden"),a.emptyElement(t),e.forEach(function(e){var n=a.createElement("li"),i=a.createElement("button",a.extend(a.getAttributesFromSelector(me.config.selectors.buttons.loop),{type:"button",class:me.config.classes.control,"data-plyr-loop-action":e}),me.config.i18n[e]);if(a.inArray(["start","end"],e)){var o=y("00:00");i.appendChild(o)}n.appendChild(i),t.appendChild(n)})}function A(){var e=me.elements.settings.panes.captions.querySelector("ul");if(me.elements.settings.tabs.captions.removeAttribute("hidden"),me.elements.settings.panes.captions.removeAttribute("hidden"),a.emptyElement(e),!a.is.empty(me.captions.tracks)){var t=[].map.call(me.captions.tracks,function(e){return{language:e.language,badge:!0,label:a.is.empty(e.label)?e.language.toUpperCase():e.label}});t.unshift({language:"off",label:me.config.i18n.none}),t.forEach(function(t){var n=a.createElement("li"),i=a.createElement("label",{class:me.config.classes.control}),o=a.createElement("input",a.extend(a.getAttributesFromSelector(me.config.selectors.inputs.language),{type:"radio",name:"plyr-language",value:t.language}));t.language.toLowerCase()===me.config.captions.language.toLowerCase()&&(o.checked=!0),i.appendChild(o),i.appendChild(document.createTextNode(t.label||t.language)),t.badge&&i.appendChild(y(t.language.toUpperCase())),n.appendChild(i),e.appendChild(n)})}}function S(){var e=me.elements.settings.panes.speed.querySelector("ul");me.elements.settings.tabs.speed.removeAttribute("hidden"),me.elements.settings.panes.speed.removeAttribute("hidden"),a.emptyElement(e),me.config.speed.options.forEach(function(t){var n=a.createElement("li"),i=a.createElement("label",{class:me.config.classes.control}),o=a.createElement("input",a.extend(a.getAttributesFromSelector(me.config.selectors.inputs.speed),{type:"radio",name:"plyr-speed",value:t}));i.appendChild(o),i.insertAdjacentHTML("beforeend",Q(t)),n.appendChild(i),e.appendChild(n)}),T(e)}function T(e){var t=me.config.speed.selected;if(a.inArray(me.config.speed.options,t)){a.is.htmlElement(e)||(e=me.elements.settings.panes.speed.querySelector("ul"));var n=e.querySelector('[value="'+t+'"]');if(a.is.htmlElement(n)){n.checked=!0;var i=me.elements.settings.tabs.speed.querySelector("."+me.config.classes.menu.value);i.innerHTML=Q(t)}}}function x(){if(me.supported.full&&("audio"!==me.type||me.config.fullscreen.allowAudio)&&me.config.fullscreen.enabled){var e=r.fullscreen;e||me.config.fullscreen.fallback&&!a.inFrame()?(ge((e?"Native":"Fallback")+" fullscreen enabled"),a.toggleClass(me.elements.container,me.config.classes.fullscreen.enabled,!0)):ge("Fullscreen not supported and fallback disabled"),me.elements.buttons&&me.elements.buttons.fullscreen&&a.toggleState(me.elements.buttons.fullscreen,!1),l()}}function P(e){if(a.inArray(["video","vimeo"],me.type)&&("video"!==me.type||r.textTracks)&&(a.is.htmlElement(me.elements.captions)||(me.elements.captions=a.createElement("div",a.getAttributesFromSelector(me.config.selectors.captions)),a.insertAfter(me.elements.captions,me.elements.wrapper)),me.captions.tracks=a.is.array(e)?e:me.media.textTracks,a.toggleClass(me.elements.container,me.config.classes.captions.enabled,!a.is.empty(me.captions.tracks)),!a.is.empty(me.captions.tracks))){if(N(),"video"===me.type){var t=me.config.captions.language.toLowerCase();[].forEach.call(me.captions.tracks,function(e){a.off(e,"cuechange",I),e.mode="hidden",e.language===t&&(me.captions.currentTrack=e)}),a.is.track(me.captions.currentTrack)||(ye("No language found to match "+t+" in tracks"),me.captions.currentTrack=me.captions.tracks[0]);var n=me.captions.currentTrack;a.is.track(n)&&a.inArray(["captions","subtitles"],n.kind)&&(a.on(n,"cuechange",I),n.activeCues&&n.activeCues.length>0&&I(n))}A()}}function F(){return!r.textTracks||a.is.empty(me.captions.tracks)?"No Subs":me.captions.enabled?me.captions.currentTrack.label:"Disabled"}function I(e){a.is.event(e)&&(e=e.target);var t=e.activeCues[0];a.is.cue(t)?_(t.getCueAsHTML()):_()}function _(e){if(a.is.htmlElement(me.elements.captions)){var t=a.createElement("span");a.emptyElement(me.elements.captions),a.is.undefined(e)&&(e=""),a.is.string(e)?t.textContent=e.trim():t.appendChild(e),me.elements.captions.appendChild(t)}else ye("No captions element to render to")}function N(){if(me.elements.buttons.captions){var e=me.storage.captions;a.is.boolean(e)?me.config.captions.active=e:e=me.config.captions.active,e&&(a.toggleClass(me.elements.container,me.config.classes.captions.active,!0),a.toggleState(me.elements.buttons.captions,!0))}}function L(){if(me.config.loadSprite){var e=m();e.absolute?(ge("AJAX loading absolute SVG sprite"+(me.browser.isIE?" (due to IE)":"")),a.loadSprite(e.url,"sprite-plyr")):ge("Sprite will be used as external resource directly")}me.id=Math.floor(1e4*Math.random());var t=null;t=a.is.string(me.config.controls)?me.config.controls:a.is.function(me.config.controls)?me.config.controls({id:me.id,seektime:me.config.seekTime}):k({id:me.id,seektime:me.config.seekTime,speed:Q(),quality:"HD",captions:F(),loop:"None"});var n;if(a.is.string(me.config.selectors.controls.container)&&(n=document.querySelector(me.config.selectors.controls.container)),a.is.htmlElement(n)||(n=me.elements.container),a.is.htmlElement(t)?n.appendChild(t):n.insertAdjacentHTML("beforeend",t),a.is.htmlElement(me.elements.controls)&&q(),me.config.tooltips.controls)for(var i=c([me.config.selectors.controls.wrapper," ",me.config.selectors.labels," .",me.config.classes.hidden].join("")),o=i.length-1;o>=0;o--){var s=i[o];a.toggleClass(s,me.config.classes.hidden,!1),a.toggleClass(s,me.config.classes.tooltip,!0)}}function q(){try{return me.elements.controls=u(me.config.selectors.controls.wrapper),me.elements.buttons={play:c(me.config.selectors.buttons.play),pause:u(me.config.selectors.buttons.pause),restart:u(me.config.selectors.buttons.restart),rewind:u(me.config.selectors.buttons.rewind),forward:u(me.config.selectors.buttons.forward),mute:u(me.config.selectors.buttons.mute),pip:u(me.config.selectors.buttons.pip),airplay:u(me.config.selectors.buttons.airplay),settings:u(me.config.selectors.buttons.settings),captions:u(me.config.selectors.buttons.captions),fullscreen:u(me.config.selectors.buttons.fullscreen)},me.elements.progress=u(me.config.selectors.progress),me.elements.inputs={seek:u(me.config.selectors.inputs.seek),volume:u(me.config.selectors.inputs.volume)},me.elements.display={buffer:u(me.config.selectors.display.buffer),played:u(me.config.selectors.display.played),volume:u(me.config.selectors.display.volume),duration:u(me.config.selectors.display.duration),currentTime:u(me.config.selectors.display.currentTime)},a.is.htmlElement(me.elements.progress)&&(me.elements.display.seekTooltip=me.elements.progress.querySelector("."+me.config.classes.tooltip)),!0}catch(e){return ye("It looks like there is a problem with your custom controls HTML",e),V(!0),!1}}function M(){a.toggleClass(me.elements.container,me.config.selectors.container.replace(".",""),me.supported.full)}function V(e){e&&a.inArray(o.html5,me.type)?me.media.setAttribute("controls",""):me.media.removeAttribute("controls")}function O(e){var t=me.config.i18n.play;if(a.is.string(me.config.title)&&!a.is.empty(me.config.title)&&(t+=", "+me.config.title,me.elements.container.setAttribute("aria-label",me.config.title)),me.supported.full&&(a.is.htmlElement(me.elements.buttons.play)&&me.elements.buttons.play.setAttribute("aria-label",t),a.is.htmlElement(me.elements.buttons.playLarge)&&me.elements.buttons.playLarge.setAttribute("aria-label",t)),a.is.htmlElement(e)){var n=a.is.string(me.config.title)&&!a.is.empty(me.config.title)?me.config.title:"video";e.setAttribute("title",me.config.i18n.frameTitle.replace("{title}",n))}}function D(){var e=null;me.storage={},r.storage&&me.config.storage.enabled&&(window.localStorage.removeItem("plyr-volume"),e=window.localStorage.getItem(me.config.storage.key),e&&(/^\d+(\.\d+)?$/.test(e)?j({volume:parseFloat(e)}):me.storage=JSON.parse(e)))}function j(e){r.storage&&me.config.storage.enabled&&(a.extend(me.storage,e),window.localStorage.setItem(me.config.storage.key,JSON.stringify(me.storage)))}function R(){return me.media?(me.supported.full&&(a.toggleClass(me.elements.container,me.config.classes.type.replace("{0}",me.type),!0),a.inArray(o.embed,me.type)&&a.toggleClass(me.elements.container,me.config.classes.type.replace("{0}","video"),!0),a.toggleClass(me.elements.container,me.config.classes.pip.enabled,r.pip&&"video"===me.type),a.toggleClass(me.elements.container,me.config.classes.airplay.enabled,r.airplay&&a.inArray(o.html5,me.type)),a.toggleClass(me.elements.container,me.config.classes.stopped,me.config.autoplay),a.toggleClass(me.elements.container,me.config.classes.isIos,me.browser.isIos),a.toggleClass(me.elements.container,me.config.classes.isTouch,r.touch)),a.inArray(["video","youtube","vimeo"],me.type)&&(me.elements.wrapper=a.createElement("div",{class:me.config.classes.video}),a.wrap(me.media,me.elements.wrapper)),void(a.inArray(o.embed,me.type)&&H())):void ye("No media element found!")}function H(){var e,t=me.type+"-"+Math.floor(1e4*Math.random());switch(me.type){case"youtube":e=a.parseYouTubeId(me.embedId);break;default:e=me.embedId}for(var n=c('[id^="'+me.type+'-"]'),i=n.length-1;i>=0;i--)a.removeElement(n[i]);if(a.toggleClass(me.elements.wrapper,me.config.classes.embed,!0),"youtube"===me.type)me.media.setAttribute("id",t),a.is.object(window.YT)?Y(e):(a.injectScript(me.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Y(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===me.type)if(me.media.setAttribute("id",t),a.is.object(window.Vimeo))W(e);else{a.injectScript(me.config.urls.vimeo.api);var o=window.setInterval(function(){a.is.object(window.Vimeo)&&(window.clearInterval(o),W(e))},50)}else if("soundcloud"===me.type){var s=a.createElement("iframe");s.loaded=!1,a.on(s,"load",function(){s.loaded=!0}),a.setAttributes(s,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+e,id:t}),me.media.appendChild(s),window.SC||a.injectScript(me.config.urls.soundcloud.api);var r=window.setInterval(function(){window.SC&&s.loaded&&(window.clearInterval(r),U.call(s))},50)}}function B(){me.supported.full&&(ue(),de()),O(u("iframe"))}function Y(e){me.embed=new window.YT.Player(me.media.id,{videoId:e,playerVars:{autoplay:me.config.autoplay?1:0,controls:me.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:me.config.captions.active?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,playsinline:1,origin:window.location.href},events:{onError:function(e){n(me.elements.container,"error",!0,{code:e.data,embed:e.target})},onPlaybackQualityChange:function(e){var t=e.target,n=t.getPlaybackQuality();console.warn("quality change",n)},onPlaybackRateChange:function(e){var t=e.target;me.media.playbackRate=t.getPlaybackRate(),n(me.media,"ratechange")},onReady:function(e){var t=e.target;me.media.play=function(){t.playVideo(),me.media.paused=!1},me.media.pause=function(){t.pauseVideo(),me.media.paused=!0},me.media.stop=function(){t.stopVideo(),me.media.paused=!0},me.media.duration=t.getDuration(),me.media.paused=!0,me.media.currentTime=0,me.media.muted=t.isMuted(),me.config.speed.selected=t.getPlaybackRate(),me.config.speed.options=t.getAvailablePlaybackRates(),S(),me.config.title=t.getVideoData().title,me.supported.full&&me.media.setAttribute("tabindex",-1),B(),n(me.media,"timeupdate"),n(me.media,"durationchange"),window.clearInterval(fe.buffering),fe.buffering=window.setInterval(function(){me.media.buffered=t.getVideoLoadedFraction(),(null===me.media.lastBuffered||me.media.lastBuffered0;n=("0"+n).slice(-2),i=("0"+i).slice(-2);var r=(s?o+":":"")+i+":"+n;return t.textContent=r,r}}function ne(){if(me.supported.full){var e=me.getDuration()||0;!me.elements.display.duration&&me.config.displayDuration&&me.media.paused&&te(e,me.elements.display.currentTime),me.elements.display.duration&&te(e,me.elements.display.duration),ae()}}function ie(e){te(me.media.currentTime,me.elements.display.currentTime),e&&"timeupdate"===e.type&&me.media.seeking||Z(e)}function oe(e){a.is.number(e)||(e=0);var t=me.getDuration(),n=a.getPercentage(e,t);me.elements.progress&&me.elements.display.played&&(me.elements.display.played.value=n),me.elements.buttons&&me.elements.inputs.seek&&(me.elements.inputs.seek.value=n)}function ae(e){var t=me.getDuration();if(me.config.tooltips.seek&&a.is.htmlElement(me.elements.inputs.seek)&&a.is.htmlElement(me.elements.display.seekTooltip)&&0!==t){var n=me.elements.inputs.seek.getBoundingClientRect(),i=0,o=me.config.classes.tooltip+"--visible";if(a.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!a.hasClass(me.elements.display.seekTooltip,o))return;i=me.elements.display.seekTooltip.style.left.replace("%","")}i<0?i=0:i>100&&(i=100),te(t/100*i,me.elements.display.seekTooltip),me.elements.display.seekTooltip.style.left=i+"%",a.is.event(e)&&a.inArray(["mouseenter","mouseleave"],e.type)&&a.toggleClass(me.elements.display.seekTooltip,o,"mouseenter"===e.type)}}function se(e){function t(){if(d(me.media),d("captions"),d("wrapper"),me.elements.container&&me.elements.container.removeAttribute("class"),"type"in e&&(me.type=e.type,"video"===me.type)){var t=e.sources[0];"type"in t&&a.inArray(o.embed,t.type)&&(me.type=t.type)}switch(me.supported=a.checkSupport(me.type,me.config.inline),me.type){case"video":me.media=a.createElement("video");break;case"audio":me.media=a.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":me.media=a.createElement("div"),me.embedId=e.sources[0].src}a.prependChild(me.elements.container,me.media),a.is.boolean(e.autoplay)&&(me.config.autoplay=e.autoplay),a.inArray(o.html5,me.type)&&(me.config.crossorigin&&me.media.setAttribute("crossorigin",""),me.config.autoplay&&me.media.setAttribute("autoplay",""),"poster"in e&&me.media.setAttribute("poster",e.poster),me.config.loop.active&&me.media.setAttribute("loop",""),me.config.inline&&me.media.setAttribute("playsinline","")),a.toggleClass(me.elements.container,me.config.classes.fullscreen.active,me.fullscreen.active),a.toggleClass(me.elements.container,me.config.classes.captions.active,me.captions.enabled),M(),a.inArray(o.html5,me.type)&&p("source",e.sources),R(),a.inArray(o.html5,me.type)&&("tracks"in e&&p("track",e.tracks),me.media.load()),(a.inArray(o.html5,me.type)||a.inArray(o.embed,me.type)&&!me.supported.full)&&(ue(),de()),me.config.title=e.title,O()}return a.is.object(e)&&"sources"in e&&e.sources.length?(me.stop(),oe(),ee(),ce(),void me.destroy(t,!1)):void ye("Invalid source format")}function re(){function e(){var e=me.togglePlay(),t=me.elements.buttons[e?"play":"pause"],n=me.elements.buttons[e?"pause":"play"];if(n){var i=a.hasClass(t,me.config.classes.tabFocus);setTimeout(function(){a.is.htmlElement(n)&&n.focus(),i&&(a.toggleClass(t,me.config.classes.tabFocus,!1),a.toggleClass(n,me.config.classes.tabFocus,!0))},100)}}function t(e){return e.keyCode?e.keyCode:e.which}function n(e){a.toggleClass(c("."+me.config.classes.tabFocus),me.config.classes.tabFocus,!1),me.elements.container.contains(e)&&a.toggleClass(e,me.config.classes.tabFocus,!0)}function i(n){function i(){var e=me.media.duration;a.is.number(e)&&me.seek(e/10*(o-48))}var o=t(n),s="keydown"===n.type,c=s&&o===l;if(a.is.number(o))if(s){var u=[48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79],d=[38,40];if(a.inArray(d,o)){var p=a.getFocusElement();if(a.is.htmlElement(p)&&"radio"===a.getFocusElement().type)return}switch(a.inArray(u,o)&&(n.preventDefault(),n.stopPropagation()),o){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:c||i();break;case 32:case 75:c||e();break;case 38:me.increaseVolume();break;case 40:me.decreaseVolume();break;case 77:c||me.toggleMute();break;case 39:me.forward();break;case 37:me.rewind();break;case 70:me.toggleFullscreen();break;case 67:c||me.toggleCaptions();break;case 73:me.loop("start");break;case 76:me.loop();break;case 79:me.loop("end")}!r.fullscreen&&me.fullscreen.active&&27===o&&me.toggleFullscreen(),l=o}else l=null}var o=me.browser.isIE?"change":"input";if(me.config.keyboardShortcuts.focused){var l=null;me.config.keyboardShortcuts.global&&a.on(window,"keydown keyup",function(e){ +var n=t(e),o=a.getFocusElement(),s=[48,49,50,51,52,53,54,56,57,75,77,70,67,73,76,79];!a.inArray(s,n)||a.is.htmlElement(o)&&a.matches(o,me.config.selectors.editable)||i(e)},!1),a.on(me.elements.container,"keydown keyup",i,!1)}a.on(window,"keyup",function(e){var i=t(e),o=a.getFocusElement();9===i&&n(o)}),a.on(document.body,"click",function(){a.toggleClass(u("."+me.config.classes.tabFocus),me.config.classes.tabFocus,!1)});for(var d in me.elements.buttons){var p=me.elements.buttons[d];a.on(p,"blur",function(){a.toggleClass(p,"tab-focus",!1)})}var m=function(e,t,n){a.is.function(t)&&t.call(this,e),a.is.function(n)&&n.call(this,e)};a.proxy(me.elements.buttons.play,"click",me.config.listeners.play,e),a.proxy(me.elements.buttons.playLarge,"click",me.config.listeners.play,e),a.proxy(me.elements.buttons.pause,"click",me.config.listeners.pause,e),a.proxy(me.elements.buttons.restart,"click",me.config.listeners.restart,function(){me.restart()}),a.proxy(me.elements.buttons.rewind,"click",me.config.listeners.rewind,function(){me.rewind()}),a.proxy(me.elements.buttons.forward,"click",me.config.listeners.forward,function(){me.forward()}),a.proxy(me.elements.buttons.mute,"click",me.config.listeners.mute,function(){me.toggleMute()}),a.proxy(me.elements.buttons.captions,"click",me.config.listeners.captions,function(){me.toggleCaptions()}),a.proxy(me.elements.buttons.fullscreen,"click",me.config.listeners.fullscreen,function(e){me.toggleFullscreen(e)}),a.proxy(me.elements.buttons.pip,"click",me.config.listeners.pip,function(){me.togglePictureInPicture()}),a.proxy(me.elements.buttons.airplay,"click",me.config.listeners.airplay,function(){me.airPlay()}),a.on(me.elements.buttons.settings,"click",J),a.on(document.documentElement,"click",J),a.on(me.elements.settings.form,"click",$),a.on(me.elements.settings.form,"click",function(e){a.matches(e.target,me.config.selectors.inputs.language)?m.call(this,e,me.config.listeners.language,function(){me.setLanguage(e.target.value.toLowerCase())}):a.matches(e.target,me.config.selectors.inputs.quality)?m.call(this,e,me.config.listeners.quality,function(){ye("Set quality")}):a.matches(e.target,me.config.selectors.inputs.speed)?m.call(this,e,me.config.listeners.speed,function(){me.setSpeed(parseFloat(e.target.value))}):a.matches(e.target,me.config.selectors.buttons.loop)&&m.call(this,e,me.config.listeners.loop,function(){var t=e.target.getAttribute("data-loop__value")||e.target.getAttribute("data-loop__type");a.inArray(["start","end","all","none"],t)&&me.loop(t)})}),a.proxy(me.elements.inputs.seek,o,me.config.listeners.seek,function(e){var t=me.getDuration();me.seek(e.target.value/e.target.max*t)}),a.proxy(me.elements.inputs.volume,o,me.config.listeners.volume,function(){me.setVolume(event.target.value)}),a.on(me.elements.progress,"mouseenter mouseleave mousemove",ae),me.config.hideControls&&(a.on(me.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen",function(e){me.toggleControls(e)}),a.on(me.elements.controls,"mouseenter mouseleave",function(e){me.elements.controls.hover="mouseenter"===e.type}),a.on(me.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){me.elements.controls.pressed=a.inArray(["mousedown","touchstart"],e.type)}),a.on(me.elements.controls,"focus blur",function(e){me.toggleControls(e)},!0,!0)),a.proxy(me.elements.inputs.volume,"wheel",me.config.listeners.volume,function(e){var t=e.webkitDirectionInvertedFromDevice,n=.2,i=0;(e.deltaY<0||e.deltaX>0)&&(t?(me.decreaseVolume(n),i=-1):(me.increaseVolume(n),i=1)),(e.deltaY>0||e.deltaX<0)&&(t?(me.increaseVolume(n),i=1):(me.decreaseVolume(n),i=-1)),(1===i&&me.media.volume<1||i===-1&&me.media.volume>0)&&e.preventDefault()},!1),r.fullscreen&&a.on(document,s.eventType,function(e){me.toggleFullscreen(e)})}function le(){if(a.on(me.media,"timeupdate seeking",ie),a.on(me.media,"durationchange loadedmetadata",ne),a.on(me.media,"ended",function(){"video"===me.type&&me.config.showPosterOnEnd&&("video"===me.type&&_(),me.restart(),me.media.load())}),a.on(me.media,"progress playing",Z),a.on(me.media,"volumechange",G),a.on(me.media,"play pause ended",z),a.on(me.media,"waiting canplay seeked",K),me.config.clickToPlay&&"audio"!==me.type){var e=u("."+me.config.classes.video);if(!e)return;e.style.cursor="pointer",a.on(e,"click",function(){me.config.hideControls&&r.touch&&!me.media.paused||(me.media.paused?me.play():me.media.ended?(me.restart(),me.play()):me.pause())})}me.config.disableContextMenu&&a.on(me.media,"contextmenu",function(e){e.preventDefault()},!1),a.on(me.media,"ratechange",function(e){me.config.speed.selected=me.media.playbackRate,T(),j({speed:me.config.speed.selected})}),a.on(me.media,me.config.events.concat(["keyup","keydown"]).join(" "),function(e){n(me.elements.container,e.type,!0)})}function ce(){if(a.inArray(o.html5,me.type)){for(var e=me.media.querySelectorAll("source"),t=0;t=0;n--){var i=n>0?t.cloneNode(!0):t,o=e[n],a=o.parentNode,s=o.nextSibling;return i.appendChild(o),s?a.insertBefore(i,s):a.appendChild(i),i}},removeElement:function(e){a.is.htmlElement(e)&&a.is.htmlElement(e.parentNode)&&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,t,n){var i=document.createElement(e);return a.is.object(t)&&a.setAttributes(i,t),a.is.string(n)&&(i.textContent=n),i},insertElement:function(e,t,n,i){var o=a.createElement(e,n,i);a.prependChild(t,o)},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(!a.is.string(e)||a.is.empty(e))return{};var n={};return e.split(",").forEach(function(e){e=e.trim();var i=e.charAt(0);switch(i){case".":var o=e.replace(".","");a.is.object(t)&&a.is.string(t.class)&&(t.class+=" "+o),n.class=o;break;case"#":n.id=e.replace("#","");break;case"[":e=e.replace(/[\[\]]/g,"");var s=e.split("="),r=s[0],l=s.length>1?s[1].replace(/[\"\']/g,""):"";n[r]=l}}),n},toggleClass:function(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var i=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=i+(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,t){var n=Element.prototype,i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(e){return[].indexOf.call(document.querySelectorAll(e),this)!==-1};return i.call(e,t)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},proxy:function(e,t,n,i,o,s){a.on(e,t,function(t){n&&n.apply(e,[t]),i.apply(e,[t])},o,s)},toggleListener:function(e,t,n,i,o,s){if(null!==e&&!a.is.undefined(e)){if(t=t.split(" "),a.is.boolean(s)||(s=!1),a.is.boolean(o)||(o=!0),e instanceof NodeList){var l=1===arguments.length?[arguments[0]]:Array.apply(null,arguments);return l.shift(),void[].forEach.call(e,function(e){e instanceof Node&&a.toggleListener.apply(null,[e].concat(l))})}var c=s;r.passiveListeners&&(c={passive:o,capture:s}),t.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,c)})}},on:function(e,t,n,i,o){a.toggleListener(e,t,n,!0,i,o)},off:function(e,t,n,i,o){a.toggleListener(e,t,n,!1,i,o)},event:function(e,t,n,i){if(e&&t){a.is.boolean(n)||(n=!1);var o;a.is.function(window.CustomEvent)?o=window.CustomEvent:(o=function(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n},o.prototype=window.Event.prototype);var s=new o(t,{bubbles:n,detail:i});e.dispatchEvent(s)}},toggleState:function(e,t){if(e)return t=a.is.boolean(t)?t:!e.getAttribute("aria-pressed"),e.setAttribute("aria-pressed",t),t},getPercentage:function(e,t){return 0===e||0===t||isNaN(e)||isNaN(t)?0:(e/t*100).toFixed(2)},extend:function(){var e=arguments;if(e.length){if(1===e.length)return e[0];var t=Array.prototype.shift.call(e);a.is.object(t)||(t={});for(var n=e.length,i=0;is&&(n=s),t.core.updateSeekDisplay(n),a.inArray(o.embed,t.type)){switch(t.type){case"youtube":t.embed.seekTo(n);break;case"vimeo":t.embed.setCurrentTime(n.toFixed(0));break;case"soundcloud":t.embed.seekTo(1e3*n)}i&&t.pause(),t.core.trigger(t.media,"timeupdate"),t.media.seeking=!0,t.core.trigger(t.media,"seeking")}else t.media.currentTime=n.toFixed(4);return t.core.log("Seeking to "+t.media.currentTime+" seconds"),t},t.prototype.setVolume=function(e){var t=this,n=10,i=0;if(a.is.undefined(e)&&(e=t.storage.volume),(null===e||isNaN(e))&&(e=t.config.volume),e>n&&(e=n),e0&&t.toggleMute(),t},t.prototype.increaseVolume=function(e){var t=this,n=t.media.muted?0:10*t.media.volume;return a.is.number(e)||(e=1),t.setVolume(n+e),t},t.prototype.decreaseVolume=function(e){var t=this,n=t.media.muted?0:10*t.media.volume;return a.is.number(e)||(e=1),t.setVolume(n-e),t},t.prototype.toggleMute=function(e){var t=this;if(a.is.boolean(e)||(e=!t.media.muted),a.toggleState(t.elements.buttons.mute,e),t.media.muted=e,0===t.media.volume&&t.volume(t.config.volume),a.inArray(o.embed,t.type)){switch(t.type){case"youtube":t.embed[t.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":t.embed.setVolume(t.media.muted?0:parseFloat(t.config.volume/10))}t.core.trigger(t.media,"volumechange")}return t},t.prototype.setSpeed=function(e){var t=this;if(a.is.number(e)||(e=parseFloat(t.storage.speed||t.config.speed.selected)),e<.1&&(e=.1),e>2&&(e=2),!a.inArray(t.config.speed.options,e))return void t.core.warn("Unsupported speed ("+e+")");switch(t.type){case"youtube":t.embed.setPlaybackRate(e);break;case"vimeo":t.core.warn("Vimeo playback rate change is not supported");break;default:t.media.playbackRate=e}return t},t.prototype.loop=function(e){var t=this;a.inArray(["start","end","all","none","toggle"],e)||(e="toggle");var n=Number(t.media.currentTime);switch(e){case"start":t.config.loop.end&&t.config.loop.end<=n&&(t.config.loop.end=null),t.config.loop.start=n,t.config.loop.indicator.start=t.elements.display.played.value;break;case"end":if(t.config.loop.start>=n)return;t.config.loop.end=n,t.config.loop.indicator.end=t.elements.display.played.value;break;case"all":t.config.loop.start=0,t.config.loop.end=t.media.duration-2,t.config.loop.indicator.start=0,t.config.loop.indicator.end=100;break;case"toggle":t.config.loop.active?(t.config.loop.start=0,t.config.loop.end=null):(t.config.loop.start=0,t.config.loop.end=t.media.duration-2);break;default:t.config.loop.start=0,t.config.loop.end=null}t.config.loop.active=a.is.number(t.config.loop.start)&&a.is.number(t.config.loop.end);var i=(t.core.updateTimeDisplay(t.config.loop.start,t.core.getElement('[data-plyr-loop="start"]')),null);return a.is.number(t.config.loop.end)&&(i=t.core.updateTimeDisplay(t.config.loop.end,t.core.getElement('[data-loop__value="loopout"]'))),t.config.loop.active,t},t.prototype.source=function(e){var t=this;if(a.is.object(e))return t.core.updateSource(e),t;var n;switch(t.type){case"youtube":n=t.embed.getVideoUrl();break;case"vimeo":t.embed.getVideoUrl.then(function(e){n=e});break;case"soundcloud":t.embed.getCurrentSound(function(e){n=e.permalink_url});break;default:n=t.media.currentSrc}return n},t.prototype.poster=function(e){var t=this;return a.is.string(e)?("video"===t.type?t.media.setAttribute("poster",e):t.core.warn("Poster can only be set on HTML5 video"),t):t.media.getAttribute("poster")},t.prototype.toggleCaptions=function(e){var t=this;if(t.supported.full&&t.elements.buttons.captions)return a.is.boolean(e)||(e=t.elements.container.className.indexOf(t.config.classes.captions.active)===-1),t.captions.enabled=e,a.toggleState(t.elements.buttons.captions,t.captions.enabled),a.toggleClass(t.elements.container,t.config.classes.captions.active,t.captions.enabled),t.core.trigger(t.elements.container,t.captions.enabled?"captionsenabled":"captionsdisabled",!0),t.core.updateStorage({captions:t.captions.enabled}),t},t.prototype.setLanguage=function(e){var t=this;return a.is.string(e)?(t.config.captions.language=e.toLowerCase(),t.core.setCaption(),t.core.setupCaptions(),t):void t.core.warn("Language is required")},t.prototype.getLanguage=function(){return this.config.captions.language},t.prototype.toggleFullscreen=function(e){function t(){n={x:window.pageXOffset||0,y:window.pageYOffset||0}}function i(){window.scrollTo(n.x,n.y)}var o=this,l=r.fullscreen;if(l){if(!a.is.event(e)||e.type!==s.eventType)return s.isFullScreen(o.elements.container)?s.cancelFullScreen():(t(),s.requestFullScreen(o.elements.container)),void(o.fullscreen.active=s.isFullScreen(o.elements.container));o.fullscreen.active=s.isFullScreen(o.elements.container)}else o.fullscreen.active=!o.fullscreen.active,document.body.style.overflow=o.fullscreen.active?"hidden":"";return a.toggleClass(o.elements.container,o.config.classes.fullscreen.active,o.fullscreen.active),o.elements.buttons&&o.elements.buttons.fullscreen&&a.toggleState(o.elements.buttons.fullscreen,o.fullscreen.active),o.core.trigger(o.elements.container,o.fullscreen.active?"enterfullscreen":"exitfullscreen",!0),!o.fullscreen.active&&l&&i(),o},t.prototype.togglePictureInPicture=function(e){var t=this,n={pip:"picture-in-picture",inline:"inline"};if(t.core.support.pip)return a.is.boolean(e)||(e=t.media.webkitPresentationMode===n.inline),t.media.webkitSetPresentationMode(e?n.pip:n.inline),t},t.prototype.airPlay=function(){var e=this;if(e.core.support.airplay)return e.media.webkitShowPlaybackTargetPicker(),e},t.prototype.toggleControls=function(e){var t=this;if(t.config.hideControls&&"audio"!==t.type){var n=0,i=e,o=!1,s=a.hasClass(t.elements.container,t.config.classes.loading);if(a.is.boolean(e)||(a.is.event(e)?(o="enterfullscreen"===e.type,i=a.inArray(["mousemove","touchstart","mouseenter","focus"],e.type),a.inArray(["mousemove","touchmove"],e.type)&&(n=2e3),"focus"===e.type&&(n=3e3)):i=a.hasClass(t.elements.container,t.config.classes.hideControls)),window.clearTimeout(t.core.timers.hover),i||t.media.paused||s){if(a.toggleClass(t.elements.container,t.config.classes.hideControls,!1),t.media.paused||s)return;r.touch&&(n=3e3)}return i&&t.media.paused||(t.core.timers.hover=window.setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||o)&&a.toggleClass(t.elements.container,t.config.classes.hideControls,!0)},n)),t}},t.prototype.on=function(e,t){var n=this;return a.on(n.elements.container,e,t),n},t.prototype.off=function(e,t){var n=this;return a.off(n.elements.container,e,t),n},t.prototype.supports=function(e){return r.mime(this,e)},t.prototype.destroy=function(e,t){function n(){if(null!==i){if(a.is.boolean(t)||(t=!0),document.body.style.overflow="",t){var n=i.elements.container.parentNode;a.is.htmlElement(n)&&n.replaceChild(i.elements.original,i.elements.container)}i.core.trigger(i.elements.original,"destroyed",!0),a.is.function(e)&&e.call(i.elements.original),i=null}}var i=this;switch(i.type){case"youtube":window.clearInterval(i.core.timers.buffering),window.clearInterval(i.core.timers.playing),i.embed.destroy(),n();break;case"vimeo":i.embed.unload().then(n),window.setTimeout(n,200);break;case"video":case"audio":i.core.toggleNativeControls(!0),n()}},t.prototype.getDuration=function(){var e=this,t=parseInt(e.config.duration),n=0;return null===e.media.duration||isNaN(e.media.duration)||(n=e.media.duration),isNaN(t)?n:t},t}); \ No newline at end of file diff --git a/notes.md b/notes.md deleted file mode 100644 index 56ecc9f7..00000000 --- a/notes.md +++ /dev/null @@ -1,84 +0,0 @@ -### Todo - -#### To finish -[x] Get list of subtitles/captions available (HTML5, Vimeo) -[x] Add preferred quality option into config -[ ] Update quality options on YouTube play -[ ] Update speed options on YouTube load -[ ] Handle quality change for YouTube -[ ] Handle speed change for YouTube -[ ] Set quality when loading YouTube vid -[ ] Set default values -[ ] Hide unsupported menu items on source change -[ ] Test PiP (need MacOS Sierra) -[ ] Test AirPlay (need MacOS Sierra) -[ ] Add `controlshidden` and `controlsshown` events -[ ] Test custom controls still works (without settings support for now) -[ ] Tidy up small UI for iOS inline -[ ] Finish new loop setup and display in seek bar -[ ] Update docs for removal of setup - -#### Later -[ ] Wistia player -[ ] Inlined sprite option -[ ] Start / end time options for all players? -[ ] Get quality options for HTML5 somehow (multi source?) -[ ] Download button - grab first or src attribute (or maybe use currentSrc?) for HTML5 and links for embedded players -[ ] Scale captions size based on video size (in lieu of element queries) -[ ] Allow passing YouTube/Vimeo iframe to setup - -#### Bugs -[ ] Fix audio setup bug when calling `.setup()` again -[ ] Fix events on unsupported devices (iOS, old IE) -[x] Fix YouTube rights blocking (origin perhaps?) - -### Release notes -- No quality HTML5 support (yet) -- No Vimeo quality support -- No YouTube caption support -- Added Vimeo captions support -- No PiP or AirPlay for Vimeo/YouTube -- Settings won't be supported for custom controls (coming soon, need to work on templating) -- Added `playsinline` support for iOS 10 -- Embed setup now accepts an