From a41208578552dca987ccd5c5ee166f3b0dcc84c5 Mon Sep 17 00:00:00 2001 From: Amo Wu Date: Wed, 31 Aug 2016 15:11:29 +0800 Subject: [PATCH 01/70] feat: add playback speed button --- src/js/plyr.js | 74 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 3 deletions(-) diff --git a/src/js/plyr.js b/src/js/plyr.js index 9af0ad05..f880ee4f 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -39,6 +39,14 @@ volumeMin: 0, volumeMax: 10, volumeStep: 1, + defaultSpeed: 1.0, + currentSpeed: 1.0, + speeds: [ + 1.0, + 1.5, + 2.0, + 0.5 + ], duration: null, displayDuration: true, loadSprite: true, @@ -75,7 +83,8 @@ forward: '[data-plyr="fast-forward"]', mute: '[data-plyr="mute"]', captions: '[data-plyr="captions"]', - fullscreen: '[data-plyr="fullscreen"]' + fullscreen: '[data-plyr="fullscreen"]', + speedup: '[data-plyr="speed-up"]' }, volume: { input: '[data-plyr="volume"]', @@ -143,7 +152,8 @@ toggleMute: 'Toggle Mute', toggleCaptions: 'Toggle Captions', toggleFullscreen: 'Toggle Fullscreen', - frameTitle: 'Player for {title}' + frameTitle: 'Player for {title}', + speedup: 'Speed x{speed}' }, types: { embed: ['youtube', 'vimeo', 'soundcloud'], @@ -172,7 +182,8 @@ mute: null, volume: null, captions: null, - fullscreen: null + fullscreen: null, + speedup: null }, // Events to watch on HTML5 media elements events: ['ready', 'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'emptied'], @@ -802,6 +813,16 @@ ); } + // Speed-up button + if (_inArray(config.controls, 'speed-up')) { + html.push( + '' + ); + } + // Progress if (_inArray(config.controls, 'progress')) { // Create progress @@ -1270,6 +1291,9 @@ // Replace seek time instances html = _replaceAll(html, '{seektime}', config.seekTime); + // Replace seek time instances + html = _replaceAll(html, '{speed}', config.currentSpeed); + // Replace all id references with random numbers html = _replaceAll(html, '{id}', Math.floor(Math.random() * (10000))); @@ -1316,6 +1340,7 @@ plyr.buttons.rewind = _getElement(config.selectors.buttons.rewind); plyr.buttons.forward = _getElement(config.selectors.buttons.forward); plyr.buttons.fullscreen = _getElement(config.selectors.buttons.fullscreen); + plyr.buttons.speedup = _getElement(config.selectors.buttons.speedup); // Inputs plyr.buttons.mute = _getElement(config.selectors.buttons.mute); @@ -1956,6 +1981,28 @@ _seek(plyr.media.currentTime + seekTime); } + // Speed-up + function _speedup(speed) { + if (!_is.number(speed)) { + var index = config.speeds.indexOf(config.currentSpeed); + if (index !== -1) { + var nextIndex = index + 1; + if (nextIndex >= config.speeds.length) { + nextIndex = 0; + } + speed = config.speeds[nextIndex]; + } else { + speed = config.defaultSpeed; + } + } + + config.currentSpeed = speed; + + plyr.media.playbackRate = speed; + + _updateSpeedupTooltip(speed); + } + // Seek to time // The input parameter can be an event or a number function _seek(input) { @@ -2523,6 +2570,24 @@ } } + // Update hover tooltip for playback speed changed + function _updateSpeedupTooltip(speed) { + if (!isNaN(speed)) { + speed = config.currentSpeed; + } + + var button = plyr.buttons.speedup; + var template = config.i18n.speedup; + + var elements= button.getElementsByClassName(config.classes.tooltip); + if (elements.length === 0){ + return; + } + + var tooltip = elements[0]; + tooltip.innerHTML = _replaceAll(template, '{speed}', speed); + } + // Show the player controls in fullscreen mode function _toggleControls(toggle) { // Don't hide if config says not to, it's audio, or not ready or loading @@ -2985,6 +3050,9 @@ // Fast forward _proxyListener(plyr.buttons.forward, 'click', config.listeners.forward, _forward); + // Speed-up + _proxyListener(plyr.buttons.speedup, 'click', config.listeners.speedup, _speedup); + // Seek _proxyListener(plyr.buttons.seek, inputEvent, config.listeners.seek, _seek); From f0ac542a7f313c472a869ea522ff3fbcc133ca70 Mon Sep 17 00:00:00 2001 From: Amo Wu Date: Wed, 31 Aug 2016 15:34:44 +0800 Subject: [PATCH 02/70] refactor: add localStorage supporting --- src/js/plyr.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/js/plyr.js b/src/js/plyr.js index f880ee4f..eb7b9f2d 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -2001,6 +2001,9 @@ plyr.media.playbackRate = speed; _updateSpeedupTooltip(speed); + + // Save speed to localStorage + _updateStorage({speed: speed}); } // Seek to time @@ -2570,6 +2573,16 @@ } } + // Set playback speed + function _setSpeedup(speed) { + // Load speed from storage or default value + if (_is.undefined(speed)) { + speed = plyr.storage.speed || config.defaultSpeed; + } + + _speedup(speed); + } + // Update hover tooltip for playback speed changed function _updateSpeedupTooltip(speed) { if (!isNaN(speed)) { @@ -3438,6 +3451,9 @@ _setVolume(); _updateVolume(); + // Set playback speed + _setSpeedup(); + // Reset time display _timeUpdate(); From c291e8c5d90710cf7c1afd6f6e50f41333dd67b4 Mon Sep 17 00:00:00 2001 From: Amo Wu Date: Wed, 31 Aug 2016 15:42:01 +0800 Subject: [PATCH 03/70] refactor: check config.speeds format --- src/js/plyr.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/js/plyr.js b/src/js/plyr.js index eb7b9f2d..a676f635 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -1983,6 +1983,10 @@ // Speed-up function _speedup(speed) { + if (!_is.array(config.speeds)) { + _warn('Invalid speeds format'); + return; + } if (!_is.number(speed)) { var index = config.speeds.indexOf(config.currentSpeed); if (index !== -1) { From ea60fd0f4546891c011b3fb472ab42b841dce972 Mon Sep 17 00:00:00 2001 From: Amo Wu Date: Wed, 31 Aug 2016 17:18:44 +0800 Subject: [PATCH 04/70] docs: update readme --- readme.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index bb2c0881..b24e339f 100644 --- a/readme.md +++ b/readme.md @@ -244,7 +244,7 @@ Note the single quotes encapsulating the JSON and double quotes on the object ke controls Array - ['play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'captions', 'fullscreen'] + ['play-large', 'play', 'speed-up', 'progress', 'current-time', 'mute', 'volume', 'captions', 'fullscreen'] Toggle which control elements you would like to display when using the default controls html. If you specify a html option, this is redundant. The default value is to display everything. @@ -383,6 +383,12 @@ Note the single quotes encapsulating the JSON and double quotes on the object ke — Two properties; enabled which toggles if local storage should be enabled (if the browser supports it). The default value is `true`. This enables storing user settings, currently it only stores volume but more will be added later. The second property key is the key used for the local storage. The default is plyr_volume until more settings are stored. + + speeds + Array + [1.0, 1.5, 2.0, 0.5] + Playback speed list. + From ac7e1ab2997c667fb578bd1a1a639e35275dcd77 Mon Sep 17 00:00:00 2001 From: Amo Wu Date: Mon, 5 Sep 2016 18:00:11 +0800 Subject: [PATCH 05/70] test: add `speed-up` button --- demo/src/js/main.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/demo/src/js/main.js b/demo/src/js/main.js index 3337df88..80dab906 100644 --- a/demo/src/js/main.js +++ b/demo/src/js/main.js @@ -20,7 +20,8 @@ }, captions: { defaultActive: true - } + }, + controls: ['play-large', 'play', 'speed-up', 'progress', 'current-time', 'mute', 'volume', 'captions', 'fullscreen'] }); plyr.loadSprite('dist/demo.svg'); From 78ec5b3322e082b609b5f038350d84d7027b2e92 Mon Sep 17 00:00:00 2001 From: Amo Wu Date: Mon, 5 Sep 2016 22:56:19 +0800 Subject: [PATCH 06/70] refactor: sorting speed --- src/js/plyr.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/plyr.js b/src/js/plyr.js index a676f635..9a437383 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -42,10 +42,10 @@ defaultSpeed: 1.0, currentSpeed: 1.0, speeds: [ + 0.5, 1.0, 1.5, - 2.0, - 0.5 + 2.0 ], duration: null, displayDuration: true, From 37840c384414401a914eb43aa7a93eb0e17ee68e Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 6 Sep 2016 23:48:09 +1000 Subject: [PATCH 07/70] Working on settings menu --- demo/dist/demo.js | 2 +- demo/src/js/main.js | 4 +- dist/plyr.css | 2 +- dist/plyr.js | 4 +- dist/plyr.svg | 2 +- src/js/plyr.js | 153 +++++++++++++++++------------------ src/less/plyr.less | 109 +++++++++++++++++++++++-- src/less/variables.less | 10 +-- src/sprite/plyr-settings.svg | 12 +++ 9 files changed, 200 insertions(+), 98 deletions(-) create mode 100644 src/sprite/plyr-settings.svg diff --git a/demo/dist/demo.js b/demo/dist/demo.js index fdb89c46..7db71d26 100644 --- a/demo/dist/demo.js +++ b/demo/dist/demo.js @@ -1 +1 @@ -"document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var e=document.createElement("_");if(e.classList.add("c1","c2"),!e.classList.contains("c2")){var t=function(e){var t=DOMTokenList.prototype[e];DOMTokenList.prototype[e]=function(e){var i,s=arguments.length;for(i=0;s>i;i++)e=arguments[i],t.call(this,e)}};t("add"),t("remove")}if(e.classList.toggle("c3",!1),e.classList.contains("c3")){var i=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(e,t){return 1 in arguments&&!this.contains(e)==!t?t:i.call(this,e)}}e=null}():!function(e){"use strict";if("Element"in e){var t="classList",i="prototype",s=e.Element[i],o=Object,n=String[i].trim||function(){return this.replace(/^\s+|\s+$/g,"")},r=Array[i].indexOf||function(e){for(var t=0,i=this.length;i>t;t++)if(t in this&&this[t]===e)return t;return-1},a=function(e,t){this.name=e,this.code=DOMException[e],this.message=t},c=function(e,t){if(""===t)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(t))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return r.call(e,t)},l=function(e){for(var t=n.call(e.getAttribute("class")||""),i=t?t.split(/\s+/):[],s=0,o=i.length;o>s;s++)this.push(i[s]);this._updateClassName=function(){e.setAttribute("class",this.toString())}},u=l[i]=[],d=function(){return new l(this)};if(a[i]=Error[i],u.item=function(e){return this[e]||null},u.contains=function(e){return e+="",-1!==c(this,e)},u.add=function(){var e,t=arguments,i=0,s=t.length,o=!1;do e=t[i]+"",-1===c(this,e)&&(this.push(e),o=!0);while(++i=0;a--)e(o[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0)}}var i=plyr.setup({debug:!0,title:"Video demo",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0}});plyr.loadSprite("dist/demo.svg");for(var s=i[0],o=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),a=window.history&&window.history.pushState,c=o.length-1;c>=0;c--)o[c].addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),a&&history.pushState({type:e},"","#"+e)});if(window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),a){var l=!r.length;l&&(r=n.video),r in n&&history.replaceState({type:r},"",l?"":"#"+r),r!==n.video&&t(r,!0)}}(),document.domain.indexOf("plyr.io")>-1&&(!function(e,t,i,s,o,n,r){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,n=t.createElement(i),r=t.getElementsByTagName(i)[0],n.async=1,n.src=s,r.parentNode.insertBefore(n,r)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40881672-11","auto"),ga("send","pageview")); \ No newline at end of file +"document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var e=document.createElement("_");if(e.classList.add("c1","c2"),!e.classList.contains("c2")){var t=function(e){var t=DOMTokenList.prototype[e];DOMTokenList.prototype[e]=function(e){var i,s=arguments.length;for(i=0;s>i;i++)e=arguments[i],t.call(this,e)}};t("add"),t("remove")}if(e.classList.toggle("c3",!1),e.classList.contains("c3")){var i=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(e,t){return 1 in arguments&&!this.contains(e)==!t?t:i.call(this,e)}}e=null}():!function(e){"use strict";if("Element"in e){var t="classList",i="prototype",s=e.Element[i],o=Object,n=String[i].trim||function(){return this.replace(/^\s+|\s+$/g,"")},r=Array[i].indexOf||function(e){for(var t=0,i=this.length;i>t;t++)if(t in this&&this[t]===e)return t;return-1},a=function(e,t){this.name=e,this.code=DOMException[e],this.message=t},c=function(e,t){if(""===t)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(t))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return r.call(e,t)},l=function(e){for(var t=n.call(e.getAttribute("class")||""),i=t?t.split(/\s+/):[],s=0,o=i.length;o>s;s++)this.push(i[s]);this._updateClassName=function(){e.setAttribute("class",this.toString())}},u=l[i]=[],d=function(){return new l(this)};if(a[i]=Error[i],u.item=function(e){return this[e]||null},u.contains=function(e){return e+="",-1!==c(this,e)},u.add=function(){var e,t=arguments,i=0,s=t.length,o=!1;do e=t[i]+"",-1===c(this,e)&&(this.push(e),o=!0);while(++i=0;a--)e(o[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0)}}var i=plyr.setup({debug:!0,title:"Video demo",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0},controls:["play-large","play","speed-up","progress","current-time","mute","volume","captions","settings","fullscreen"]});plyr.loadSprite("dist/demo.svg");for(var s=i[0],o=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),a=window.history&&window.history.pushState,c=o.length-1;c>=0;c--)o[c].addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),a&&history.pushState({type:e},"","#"+e)});if(window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),a){var l=!r.length;l&&(r=n.video),r in n&&history.replaceState({type:r},"",l?"":"#"+r),r!==n.video&&t(r,!0)}}(),document.domain.indexOf("plyr.io")>-1&&(!function(e,t,i,s,o,n,r){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,n=t.createElement(i),r=t.getElementsByTagName(i)[0],n.async=1,n.src=s,r.parentNode.insertBefore(n,r)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40881672-11","auto"),ga("send","pageview")); \ No newline at end of file diff --git a/demo/src/js/main.js b/demo/src/js/main.js index 80dab906..158736ae 100644 --- a/demo/src/js/main.js +++ b/demo/src/js/main.js @@ -21,7 +21,7 @@ captions: { defaultActive: true }, - controls: ['play-large', 'play', 'speed-up', 'progress', 'current-time', 'mute', 'volume', 'captions', 'fullscreen'] + controls: ['play-large', 'play', 'speed-up', 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'fullscreen'] }); plyr.loadSprite('dist/demo.svg'); @@ -95,7 +95,7 @@ // Set a new source function newSource(type, init) { // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video - if(!(type in types) || (!init && type == currentType) || (!currentType.length && type == types.video)) { + if(!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) { return; } diff --git a/dist/plyr.css b/dist/plyr.css index 943ee8d1..e7ecba6e 100644 --- a/dist/plyr.css +++ b/dist/plyr.css @@ -1 +1 @@ -.plyr input[type=range]:focus,.plyr:focus{outline:0}.plyr .plyr__video-embed iframe,.plyr__tooltip{pointer-events:none}@keyframes plyr-progress{to{background-position:25px 0}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(0,0,0,.15);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(0,0,0,.15);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(0,0,0,.15);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;transform:translateY(-35.95%)}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;transform:translateY(-40px);transition:transform .3s ease;color:#fff;font-size:16px;text-align:center;font-weight:400}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(0,0,0,.7);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.5));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover,.plyr__play-large{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);padding:10px;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);transition:all .3s ease}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__tooltip{position:absolute;z-index:2;bottom:100%;margin-bottom:10px;padding:5px 7.5px;opacity:0;background:rgba(0,0,0,.7);border-radius:3px;color:#fff;font-size:14px;line-height:1.3;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(0,0,0,.7);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls button:first-child .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls button:first-child .plyr__tooltip::before{left:16px}.plyr__controls button:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls button:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls button:first-child .plyr__tooltip--visible,.plyr__controls button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls button:first-child:hover .plyr__tooltip,.plyr__controls button:last-child .plyr__tooltip--visible,.plyr__controls button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls button:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(0,0,0,.15) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.15) 50%,rgba(0,0,0,.15) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)} \ No newline at end of file +.plyr input[type=range]:focus,.plyr:focus{outline:0}.plyr .plyr__video-embed iframe,.plyr__tooltip{pointer-events:none}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{from{transform:translateY(10px);opacity:.5}to{transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;transform:translateY(-35.95%)}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;transform:translateY(-40px);transition:transform .3s ease;color:#fff;font-size:16px;text-align:center;font-weight:400}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(52,63,74,.85);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}.plyr__controls .plyr__menu+button,.plyr__controls>button+.plyr__menu,.plyr__controls>button+button{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__menu{position:relative}.plyr__menu button[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;bottom:100%;right:-5px;margin-bottom:10px;animation:plyr-popup .2s ease;background:rgba(52,63,74,.9);box-shadow:0 1px 0 rgba(0,0,0,.2);border-radius:4px;white-space:nowrap;text-align:left;color:#fff;font-size:14px}.plyr__menu__container ul{margin:0;padding:5px;list-style:none}.plyr__menu__container button{display:-ms-flexbox;display:flex;width:100%;padding:10px 30px 10px 12px;color:#fff;font-weight:600}.plyr__menu__container button::after{content:"";position:absolute;top:50%;transform:translateY(-50%);right:5px;border:5px solid transparent;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__value{margin-left:auto;padding-left:25px;font-weight:400;color:rgba(255,255,255,.8)}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__tooltip{position:absolute;z-index:2;bottom:100%;margin-bottom:10px;padding:5px 7.5px;opacity:0;background:rgba(52,63,74,.85);border-radius:3px;color:#fff;font-size:14px;line-height:1.3;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(52,63,74,.85);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls>button:first-child .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>button:first-child .plyr__tooltip::before{left:16px}.plyr__controls>button:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>button:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>button:first-child .plyr__tooltip--visible,.plyr__controls>button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:first-child:hover .plyr__tooltip,.plyr__controls>button:last-child .plyr__tooltip--visible,.plyr__controls>button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)} \ No newline at end of file diff --git a/dist/plyr.js b/dist/plyr.js index bbeb7ae7..207201a3 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,r,a=navigator.userAgent,s=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,d=!1;return-1!==navigator.appVersion.indexOf("Windows NT")&&-1!==navigator.appVersion.indexOf("rv:11")?(l=!0,s="IE",o="11"):-1!==(n=a.indexOf("MSIE"))?(l=!0,s="IE",o=a.substring(n+5)):-1!==(n=a.indexOf("Chrome"))?(c=!0,s="Chrome",o=a.substring(n+7)):-1!==(n=a.indexOf("Safari"))?(d=!0,s="Safari",o=a.substring(n+7),-1!==(n=a.indexOf("Version"))&&(o=a.substring(n+8))):-1!==(n=a.indexOf("Firefox"))?(u=!0,s="Firefox",o=a.substring(n+8)):(e=a.lastIndexOf(" ")+1)<(n=a.lastIndexOf("/"))&&(s=a.substring(e,n),o=a.substring(n+1),s.toLowerCase()===s.toUpperCase()&&(s=navigator.appName)),-1!==(r=o.indexOf(";"))&&(o=o.substring(0,r)),-1!==(r=o.indexOf(" "))&&(o=o.substring(0,r)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:s,version:i,isIE:l,isFirefox:u,isChrome:c,isSafari:d,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function r(e,t){var n=e.media;if("video"===e.type)switch(t){case"video/webm":return!(!n.canPlayType||!n.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,""));case"video/mp4":return!(!n.canPlayType||!n.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,""));case"video/ogg":return!(!n.canPlayType||!n.canPlayType('video/ogg; codecs="theora"').replace(/no/,""))}else if("audio"===e.type)switch(t){case"audio/mpeg":return!(!n.canPlayType||!n.canPlayType("audio/mpeg;").replace(/no/,""));case"audio/ogg":return!(!n.canPlayType||!n.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,""));case"audio/wav":return!(!n.canPlayType||!n.canPlayType('audio/wav; codecs="1"').replace(/no/,""))}return!1}function a(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var r=t.getElementsByTagName("script")[0];r.parentNode.insertBefore(n,r)}}function s(e,t){return Array.prototype.indexOf&&-1!==e.indexOf(t)}function o(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function i(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var r=n>0?t.cloneNode(!0):t,a=e[n],s=a.parentNode,o=a.nextSibling;return r.appendChild(a),o?s.insertBefore(r,o):s.appendChild(r),r}}function l(e){e&&e.parentNode.removeChild(e)}function u(e,t){e.insertBefore(t,e.firstChild)}function c(e,t){for(var n in t)e.setAttribute(n,P["boolean"](t[n])&&t[n]?"":t[n])}function d(e,n,r){var a=t.createElement(e);c(a,r),u(n,a)}function p(e){return e.replace(".","")}function m(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function f(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function y(e,n){var r=Element.prototype,a=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return a.call(e,n)}function b(e,t,n,r,a){g(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},a)}function v(e,t,n,r,a){var s=t.split(" ");if(P["boolean"](a)||(a=!1),e instanceof NodeList)for(var o=0;or;r++){var a=e[r];for(var s in a)a[s]&&a[s].constructor&&a[s].constructor===Object?(t[s]=t[s]||{},x(t[s],a[s])):t[s]=a[s]}return t}}function T(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},n="webkit o moz ms khtml".split(" ");if(P.undefined(t.cancelFullScreen))for(var r=0,a=n.length;a>r;r++){if(e.prefix=n[r],!P.undefined(t[e.prefix+"CancelFullScreen"])){e.supportsFullScreen=!0;break}if(!P.undefined(t.msExitFullscreen)&&t.msFullscreenEnabled){e.prefix="ms",e.supportsFullScreen=!0;break}}else e.supportsFullScreen=!0;return e.supportsFullScreen&&(e.fullScreenEventName="ms"===e.prefix?"MSFullscreenChange":e.prefix+"fullscreenchange",e.isFullScreen=function(e){switch(P.undefined(e)&&(e=t.body),this.prefix){case"":return t.fullscreenElement===e;case"moz":return t.mozFullScreenElement===e;default:return t[this.prefix+"FullscreenElement"]===e}},e.requestFullScreen=function(e){return P.undefined(e)&&(e=t.body),""===this.prefix?e.requestFullScreen():e[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]()},e.cancelFullScreen=function(){return""===this.prefix?t.cancelFullScreen():t[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]()},e.element=function(){return""===this.prefix?t.fullscreenElement:t[this.prefix+"FullscreenElement"]}),e}function S(v,S){function C(e,t,n,r){h(e,t,n,x({},r,{plyr:We}))}function L(t,n){S.debug&&e.console&&(n=Array.prototype.slice.call(n),P.string(S.logPrefix)&&S.logPrefix.length&&n.unshift(S.logPrefix),console[t].apply(console,n))}function O(){return{url:S.iconUrl,absolute:0===S.iconUrl.indexOf("http")||Ye.browser.isIE}}function j(){var e=[],t=O(),n=(t.absolute?"":t.url)+"#"+S.iconPrefix;return s(S.controls,"play-large")&&e.push('"),e.push('
'),s(S.controls,"restart")&&e.push('"),s(S.controls,"rewind")&&e.push('"),s(S.controls,"play")&&e.push('",'"),s(S.controls,"fast-forward")&&e.push('"),s(S.controls,"progress")&&(e.push('','','','','',"0% "+S.i18n.buffered,""),S.tooltips.seek&&e.push('00:00'),e.push("")),s(S.controls,"current-time")&&e.push('',''+S.i18n.currentTime+"",'00:00',""),s(S.controls,"duration")&&e.push('',''+S.i18n.duration+"",'00:00',""),s(S.controls,"mute")&&e.push('"),s(S.controls,"volume")&&e.push('','",'','',""),s(S.controls,"captions")&&e.push('"),s(S.controls,"fullscreen")&&e.push('"),e.push("
"),e.join("")}function V(){if(Ye.supported.full&&("audio"!==Ye.type||S.fullscreen.allowAudio)&&S.fullscreen.enabled){var e=A.supportsFullScreen;e||S.fullscreen.fallback&&!B()?(Ue((e?"Native":"Fallback")+" fullscreen enabled"),m(Ye.container,S.classes.fullscreen.enabled,!0)):Ue("Fullscreen not supported and fallback disabled"),Ye.buttons&&Ye.buttons.fullscreen&&k(Ye.buttons.fullscreen,!1),X()}}function q(){if("video"===Ye.type){Y(S.selectors.captions)||Ye.videoContainer.insertAdjacentHTML("afterbegin",'
'),Ye.usingTextTracks=!1,Ye.media.textTracks&&(Ye.usingTextTracks=!0);for(var e,t="",n=Ye.media.childNodes,r=0;r=10||Ye.browser.isFirefox&&Ye.browser.version>=31)&&(Ue("Detected browser with known TextTrack issues - using manual fallback"),Ye.usingTextTracks=!1),Ye.usingTextTracks){Ue("TextTracks supported");for(var o=0;o ");for(var r=0;rYe.captions.length-1){Ye.subcount=Ye.captions.length-1;break}Ye.media.currentTime.toFixed(1)>=n(Ye.captions[Ye.subcount][0])&&Ye.media.currentTime.toFixed(1)<=r(Ye.captions[Ye.subcount][0])?(Ye.currentCaption=Ye.captions[Ye.subcount][1],R(Ye.currentCaption)):R()}}function H(){if(Ye.buttons.captions){m(Ye.container,S.classes.captions.enabled,!0);var e=Ye.storage.captionsEnabled;P["boolean"](e)||(e=S.captions.defaultActive),e&&(m(Ye.container,S.classes.captions.active,!0),k(Ye.buttons.captions,!0))}}function W(e){return Ye.container.querySelectorAll(e)}function Y(e){return W(e)[0]}function B(){try{return e.self!==e.top}catch(t){return!0}}function X(){function e(e){9===e.which&&Ye.isFullscreen&&(e.target!==r||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),r.focus()):(e.preventDefault(),n.focus()))}var t=W("input:not([disabled]), button:not([disabled])"),n=t[0],r=t[t.length-1];g(Ye.container,"keydown",e)}function U(e,t){if(P.string(t))d(e,Ye.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)d(e,Ye.media,t[n])}function J(){if(S.loadSprite){var e=O();e.absolute?(Ue("AJAX loading absolute SVG sprite"+(Ye.browser.isIE?" (due to IE)":"")),_(e.url,"sprite-plyr")):Ue("Sprite will be used as external resource directly")}var n=S.html;Ue("Injecting custom controls"),n||(n=j()),n=o(n,"{seektime}",S.seekTime),n=o(n,"{id}",Math.floor(1e4*Math.random()));var r;if(P.string(S.selectors.controls.container)&&(r=t.querySelector(S.selectors.controls.container)),P.htmlElement(r)||(r=Ye.container),r.insertAdjacentHTML("beforeend",n),S.tooltips.controls)for(var a=W([S.selectors.controls.wrapper," ",S.selectors.labels," .",S.classes.hidden].join("")),s=a.length-1;s>=0;s--){var i=a[s];m(i,S.classes.hidden,!1),m(i,S.classes.tooltip,!0)}}function z(){try{return Ye.controls=Y(S.selectors.controls.wrapper),Ye.buttons={},Ye.buttons.seek=Y(S.selectors.buttons.seek),Ye.buttons.play=W(S.selectors.buttons.play),Ye.buttons.pause=Y(S.selectors.buttons.pause),Ye.buttons.restart=Y(S.selectors.buttons.restart),Ye.buttons.rewind=Y(S.selectors.buttons.rewind),Ye.buttons.forward=Y(S.selectors.buttons.forward),Ye.buttons.fullscreen=Y(S.selectors.buttons.fullscreen),Ye.buttons.mute=Y(S.selectors.buttons.mute),Ye.buttons.captions=Y(S.selectors.buttons.captions),Ye.progress={},Ye.progress.container=Y(S.selectors.progress.container),Ye.progress.buffer={},Ye.progress.buffer.bar=Y(S.selectors.progress.buffer),Ye.progress.buffer.text=Ye.progress.buffer.bar&&Ye.progress.buffer.bar.getElementsByTagName("span")[0],Ye.progress.played=Y(S.selectors.progress.played),Ye.progress.tooltip=Ye.progress.container&&Ye.progress.container.querySelector("."+S.classes.tooltip),Ye.volume={},Ye.volume.input=Y(S.selectors.volume.input),Ye.volume.display=Y(S.selectors.volume.display),Ye.duration=Y(S.selectors.duration),Ye.currentTime=Y(S.selectors.currentTime),Ye.seekTime=W(S.selectors.seekTime),!0}catch(e){return Je("It looks like there is a problem with your controls HTML"),G(!0),!1}}function $(){m(Ye.container,S.selectors.container.replace(".",""),Ye.supported.full)}function G(e){e&&s(S.types.html5,Ye.type)?Ye.media.setAttribute("controls",""):Ye.media.removeAttribute("controls")}function K(e){var t=S.i18n.play;if(P.string(S.title)&&S.title.length&&(t+=", "+S.title,Ye.container.setAttribute("aria-label",S.title)),Ye.supported.full&&Ye.buttons.play)for(var n=Ye.buttons.play.length-1;n>=0;n--)Ye.buttons.play[n].setAttribute("aria-label",t);P.htmlElement(e)&&e.setAttribute("title",S.i18n.frameTitle.replace("{title}",S.title))}function Q(){var t=null;Ye.storage={},M.supported&&S.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(S.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Z({volume:parseFloat(t)}):Ye.storage=JSON.parse(t)))}function Z(t){M.supported&&S.storage.enabled&&(x(Ye.storage,t),e.localStorage.setItem(S.storage.key,JSON.stringify(Ye.storage)))}function ee(){if(!Ye.media)return void Je("No media element found!");if(Ye.supported.full&&(m(Ye.container,S.classes.type.replace("{0}",Ye.type),!0),s(S.types.embed,Ye.type)&&m(Ye.container,S.classes.type.replace("{0}","video"),!0),m(Ye.container,S.classes.stopped,S.autoplay),m(Ye.ontainer,S.classes.isIos,Ye.browser.isIos),m(Ye.container,S.classes.isTouch,Ye.browser.isTouch),"video"===Ye.type)){var e=t.createElement("div");e.setAttribute("class",S.classes.videoWrapper),i(Ye.media,e),Ye.videoContainer=e}s(S.types.embed,Ye.type)&&te()}function te(){for(var n=t.createElement("div"),r=Ye.embedId,s=Ye.type+"-"+Math.floor(1e4*Math.random()),o=W('[id^="'+Ye.type+'-"]'),i=o.length-1;i>=0;i--)l(o[i]);if(m(Ye.media,S.classes.videoWrapper,!0),m(Ye.media,S.classes.embedWrapper,!0),"youtube"===Ye.type)Ye.media.appendChild(n),n.setAttribute("id",s),P.object(e.YT)?re(r,n):(a(S.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){re(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Ye.type)if(Ye.supported.full?Ye.media.appendChild(n):n=Ye.media,n.setAttribute("id",s),P.object(e.Vimeo))ae(r,n);else{a(S.urls.vimeo.api);var u=e.setInterval(function(){P.object(e.Vimeo)&&(e.clearInterval(u),ae(r,n))},50)}else if("soundcloud"===Ye.type){var d=t.createElement("iframe");d.loaded=!1,g(d,"load",function(){d.loaded=!0}),c(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:s}),n.appendChild(d),Ye.media.appendChild(n),e.SC||a(S.urls.soundcloud.api);var p=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(p),se.call(d))},50)}}function ne(){Ye.supported.full&&(De(),He()),K(Y("iframe"))}function re(t,n){Ye.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:S.autoplay?1:0,controls:Ye.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:S.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){C(Ye.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Ye.media.play=function(){n.playVideo(),Ye.media.paused=!1},Ye.media.pause=function(){n.pauseVideo(),Ye.media.paused=!0},Ye.media.stop=function(){n.stopVideo(),Ye.media.paused=!0},Ye.media.duration=n.getDuration(),Ye.media.paused=!0,Ye.media.currentTime=0,Ye.media.muted=n.isMuted(),S.title=n.getVideoData().title,Ye.supported.full&&Ye.media.querySelector("iframe").setAttribute("tabindex","-1"),ne(),C(Ye.media,"timeupdate"),C(Ye.media,"durationchange"),e.clearInterval(Be.buffering),Be.buffering=e.setInterval(function(){Ye.media.buffered=n.getVideoLoadedFraction(),(null===Ye.media.lastBuffered||Ye.media.lastBufferedt?t=0:t>r&&(t=r),Ae(t);try{Ye.media.currentTime=t.toFixed(4)}catch(a){}if(s(S.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.seekTo(t);break;case"vimeo":Ye.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Ye.embed.seekTo(1e3*t)}n&&ie(),C(Ye.media,"timeupdate"),Ye.media.seeking=!0}Ue("Seeking to "+Ye.media.currentTime+" seconds"),D(t)}function pe(){var e=parseInt(S.duration),t=0;return null===Ye.media.duration||isNaN(Ye.media.duration)||(t=Ye.media.duration),isNaN(e)?t:e}function me(){m(Ye.container,S.classes.playing,!Ye.media.paused),m(Ye.container,S.classes.stopped,Ye.media.paused),Ne(Ye.media.paused)}function fe(){I={x:e.pageXOffset||0,y:e.pageYOffset||0}}function ye(){e.scrollTo(I.x,I.y)}function be(e){var n=A.supportsFullScreen;if(n){if(!e||e.type!==A.fullScreenEventName)return A.isFullScreen(Ye.container)?A.cancelFullScreen():(fe(),A.requestFullScreen(Ye.container)),void(Ye.isFullscreen=A.isFullScreen(Ye.container));Ye.isFullscreen=A.isFullScreen(Ye.container)}else Ye.isFullscreen=!Ye.isFullscreen,t.body.style.overflow=Ye.isFullscreen?"hidden":"";m(Ye.container,S.classes.fullscreen.active,Ye.isFullscreen),X(Ye.isFullscreen),Ye.buttons&&Ye.buttons.fullscreen&&k(Ye.buttons.fullscreen,Ye.isFullscreen),C(Ye.container,Ye.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Ye.isFullscreen&&n&&ye()}function ve(e){if(P["boolean"](e)||(e=!Ye.media.muted),k(Ye.buttons.mute,e),Ye.media.muted=e,0===Ye.media.volume&&ge(S.volume),s(S.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed[Ye.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.muted?0:parseFloat(S.volume/S.volumeMax))}C(Ye.media,"volumechange")}}function ge(e){var t=S.volumeMax,n=S.volumeMin;if(P.undefined(e)&&(e=Ye.storage.volume),(null===e||isNaN(e))&&(e=S.volume),e>t&&(e=t),n>e&&(e=n),Ye.media.volume=parseFloat(e/t),Ye.volume.display&&(Ye.volume.display.value=e),s(S.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.setVolume(100*Ye.media.volume);break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.volume)}C(Ye.media,"volumechange")}0===e?Ye.media.muted=!0:Ye.media.muted&&e>0&&ve()}function he(e){var t=Ye.media.muted?0:Ye.media.volume*S.volumeMax;P.number(e)||(e=S.volumeStep),ge(t+e)}function ke(e){var t=Ye.media.muted?0:Ye.media.volume*S.volumeMax;P.number(e)||(e=S.volumeStep),ge(t-e)}function we(){var e=Ye.media.muted?0:Ye.media.volume*S.volumeMax;Ye.supported.full&&(Ye.volume.input&&(Ye.volume.input.value=e),Ye.volume.display&&(Ye.volume.display.value=e)),Z({volume:e}),m(Ye.container,S.classes.muted,0===e),Ye.supported.full&&Ye.buttons.mute&&k(Ye.buttons.mute,0===e)}function xe(e){Ye.supported.full&&Ye.buttons.captions&&(P["boolean"](e)||(e=-1===Ye.container.className.indexOf(S.classes.captions.active)),Ye.captionsEnabled=e,k(Ye.buttons.captions,Ye.captionsEnabled),m(Ye.container,S.classes.captions.active,Ye.captionsEnabled),C(Ye.container,Ye.captionsEnabled?"captionsenabled":"captionsdisabled",!0),Z({captionsEnabled:Ye.captionsEnabled}))}function Te(e){var t="waiting"===e.type;clearTimeout(Be.loading),Be.loading=setTimeout(function(){m(Ye.container,S.classes.loading,t),Ne(t)},t?250:0)}function Se(e){if(Ye.supported.full){var t=Ye.progress.played,n=0,r=pe();if(e)switch(e.type){case"timeupdate":case"seeking":if(Ye.controls.pressed)return;n=w(Ye.media.currentTime,r),"timeupdate"===e.type&&Ye.buttons.seek&&(Ye.buttons.seek.value=n);break;case"playing":case"progress":t=Ye.progress.buffer,n=function(){var e=Ye.media.buffered;return e&&e.length?w(e.end(0),r):P.number(e)?100*e:0}()}_e(t,n)}}function _e(e,t){if(Ye.supported.full){if(P.undefined(t)&&(t=0),P.undefined(e)){if(!Ye.progress||!Ye.progress.buffer)return;e=Ye.progress.buffer}P.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ee(e,t){if(t){isNaN(e)&&(e=0),Ye.secs=parseInt(e%60),Ye.mins=parseInt(e/60%60),Ye.hours=parseInt(e/60/60%60);var n=parseInt(pe()/60/60%60)>0;Ye.secs=("0"+Ye.secs).slice(-2),Ye.mins=("0"+Ye.mins).slice(-2),t.innerHTML=(n?Ye.hours+":":"")+Ye.mins+":"+Ye.secs}}function Ce(){if(Ye.supported.full){var e=pe()||0;!Ye.duration&&S.displayDuration&&Ye.media.paused&&Ee(e,Ye.currentTime),Ye.duration&&Ee(e,Ye.duration),Ie()}}function Fe(e){Ee(Ye.media.currentTime,Ye.currentTime),e&&"timeupdate"===e.type&&Ye.media.seeking||Se(e)}function Ae(e){P.number(e)||(e=0);var t=pe(),n=w(e,t);Ye.progress&&Ye.progress.played&&(Ye.progress.played.value=n),Ye.buttons&&Ye.buttons.seek&&(Ye.buttons.seek.value=n)}function Ie(e){var t=pe();if(S.tooltips.seek&&Ye.progress.container&&0!==t){var n=Ye.progress.container.getBoundingClientRect(),r=0,a=S.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!f(Ye.progress.tooltip,a))return;r=Ye.progress.tooltip.style.left.replace("%","")}0>r?r=0:r>100&&(r=100),Ee(t/100*r,Ye.progress.tooltip),Ye.progress.tooltip.style.left=r+"%",e&&s(["mouseenter","mouseleave"],e.type)&&m(Ye.progress.tooltip,a,"mouseenter"===e.type)}}function Ne(t){if(S.hideControls&&"audio"!==Ye.type){var n=0,r=!1,a=t,o=f(Ye.container,S.classes.loading);if(P["boolean"](t)||(t&&t.type?(r="enterfullscreen"===t.type,a=s(["mousemove","touchstart","mouseenter","focus"],t.type),s(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):a=f(Ye.container,S.classes.hideControls)),e.clearTimeout(Be.hover),a||Ye.media.paused||o){if(m(Ye.container,S.classes.hideControls,!1),Ye.media.paused||o)return;Ye.browser.isTouch&&(n=3e3)}a&&Ye.media.paused||(Be.hover=e.setTimeout(function(){(!Ye.controls.pressed&&!Ye.controls.hover||r)&&m(Ye.container,S.classes.hideControls,!0)},n))}}function Pe(e){if(!P.undefined(e))return void Me(e);var t;switch(Ye.type){case"youtube":t=Ye.embed.getVideoUrl();break;case"vimeo":Ye.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Ye.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Ye.media.currentSrc}return t||""}function Me(e){function n(){if(Ye.embed=null,l(Ye.media),"video"===Ye.type&&Ye.videoContainer&&l(Ye.videoContainer),Ye.container&&Ye.container.removeAttribute("class"),"type"in e&&(Ye.type=e.type,"video"===Ye.type)){var n=e.sources[0];"type"in n&&s(S.types.embed,n.type)&&(Ye.type=n.type)}switch(Ye.supported=E(Ye.type),Ye.type){case"video":Ye.media=t.createElement("video");break;case"audio":Ye.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Ye.media=t.createElement("div"),Ye.embedId=e.sources[0].src}u(Ye.container,Ye.media),P["boolean"](e.autoplay)&&(S.autoplay=e.autoplay),s(S.types.html5,Ye.type)&&(S.crossorigin&&Ye.media.setAttribute("crossorigin",""),S.autoplay&&Ye.media.setAttribute("autoplay",""),"poster"in e&&Ye.media.setAttribute("poster",e.poster),S.loop&&Ye.media.setAttribute("loop","")),m(Ye.container,S.classes.fullscreen.active,Ye.isFullscreen),m(Ye.container,S.classes.captions.active,Ye.captionsEnabled),$(),s(S.types.html5,Ye.type)&&U("source",e.sources),ee(),s(S.types.html5,Ye.type)&&("tracks"in e&&U("track",e.tracks),Ye.media.load()),(s(S.types.html5,Ye.type)||s(S.types.embed,Ye.type)&&!Ye.supported.full)&&(De(),He()),S.title=e.title,K()}return P.object(e)&&"sources"in e&&e.sources.length?(m(Ye.container,S.classes.ready,!1),ie(),Ae(),_e(),Ve(),void qe(n,!1)):void Je("Invalid source format")}function Le(e){"video"===Ye.type&&Ye.media.setAttribute("poster",e)}function Oe(){function n(){var e=le(),t=Ye.buttons[e?"play":"pause"],n=Ye.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=f(t,S.classes.tabFocus);setTimeout(function(){n.focus(),r&&(m(t,S.classes.tabFocus,!1),m(n,S.classes.tabFocus,!0))},100)}}function r(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function a(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Ye.buttons){var n=Ye.buttons[t];if(P.nodeList(n))for(var r=0;r0)&&(t?ke(n):he(n)),(e.deltaY>0||e.deltaX<0)&&(t?he(n):ke(n))})}function je(){if(g(Ye.media,"timeupdate seeking",Fe),g(Ye.media,"timeupdate",D),g(Ye.media,"durationchange loadedmetadata",Ce),g(Ye.media,"ended",function(){"video"===Ye.type&&S.showPosterOnEnd&&("video"===Ye.type&&R(),de(),Ye.media.load())}),g(Ye.media,"progress playing",Se),g(Ye.media,"volumechange",we),g(Ye.media,"play pause ended",me),g(Ye.media,"waiting canplay seeked",Te),S.clickToPlay&&"audio"!==Ye.type){var e=Y("."+S.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){S.hideControls&&Ye.browser.isTouch&&!Ye.media.paused||(Ye.media.paused?oe():Ye.media.ended?(de(),oe()):ie())})}S.disableContextMenu&&g(Ye.media,"contextmenu",function(e){e.preventDefault()}),g(Ye.media,S.events.concat(["keyup","keydown"]).join(" "),function(e){C(Ye.container,e.type,!0)})}function Ve(){if(s(S.types.html5,Ye.type)){for(var e=Ye.media.querySelectorAll("source"),t=0;t=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],a=s.parentNode,o=s.nextSibling;return r.appendChild(s),o?a.insertBefore(r,o):a.appendChild(r),r}}function l(e){e&&e.parentNode.removeChild(e)}function u(e,t){e.insertBefore(t,e.firstChild)}function c(e,t){for(var n in t)e.setAttribute(n,P["boolean"](t[n])&&t[n]?"":t[n])}function d(e,n,r){var s=t.createElement(e);c(s,r),u(n,s)}function p(e){return e.replace(".","")}function m(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function f(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function y(e,n){var r=Element.prototype,s=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return s.call(e,n)}function b(e,t,n,r,s){g(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},s)}function v(e,t,n,r,s){var a=t.split(" ");if(P["boolean"](s)||(s=!1),e instanceof NodeList)for(var o=0;or;r++){var s=e[r];for(var a in s)s[a]&&s[a].constructor&&s[a].constructor===Object?(t[a]=t[a]||{},x(t[a],s[a])):t[a]=s[a]}return t}}function T(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},n="webkit o moz ms khtml".split(" ");if(P.undefined(t.cancelFullScreen))for(var r=0,s=n.length;s>r;r++){if(e.prefix=n[r],!P.undefined(t[e.prefix+"CancelFullScreen"])){e.supportsFullScreen=!0;break}if(!P.undefined(t.msExitFullscreen)&&t.msFullscreenEnabled){e.prefix="ms",e.supportsFullScreen=!0;break}}else e.supportsFullScreen=!0;return e.supportsFullScreen&&(e.fullScreenEventName="ms"===e.prefix?"MSFullscreenChange":e.prefix+"fullscreenchange",e.isFullScreen=function(e){switch(P.undefined(e)&&(e=t.body),this.prefix){case"":return t.fullscreenElement===e;case"moz":return t.mozFullScreenElement===e;default:return t[this.prefix+"FullscreenElement"]===e}},e.requestFullScreen=function(e){return P.undefined(e)&&(e=t.body),""===this.prefix?e.requestFullScreen():e[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]()},e.cancelFullScreen=function(){return""===this.prefix?t.cancelFullScreen():t[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]()},e.element=function(){return""===this.prefix?t.fullscreenElement:t[this.prefix+"FullscreenElement"]}),e}function _(v,_){function C(e,t,n,r){h(e,t,n,x({},r,{plyr:Be}))}function L(t,n){_.debug&&e.console&&(n=Array.prototype.slice.call(n),P.string(_.logPrefix)&&_.logPrefix.length&&n.unshift(_.logPrefix),console[t].apply(console,n))}function O(){return{url:_.iconUrl,absolute:0===_.iconUrl.indexOf("http")||Xe.browser.isIE}}function j(){var e=[],t=O(),n=(t.absolute?"":t.url)+"#"+_.iconPrefix;return a(_.controls,"play-large")&&e.push('"),e.push('
'),a(_.controls,"restart")&&e.push('"),a(_.controls,"rewind")&&e.push('"),a(_.controls,"play")&&e.push('",'"),a(_.controls,"fast-forward")&&e.push('"),a(_.controls,"progress")&&(e.push('','','','','',"0% "+_.i18n.buffered,""),_.tooltips.seek&&e.push('00:00'),e.push("")),a(_.controls,"current-time")&&e.push('',''+_.i18n.currentTime+"",'00:00',""),a(_.controls,"duration")&&e.push('',''+_.i18n.duration+"",'00:00',""),a(_.controls,"mute")&&e.push('"),a(_.controls,"volume")&&e.push('','",'','',""),a(_.controls,"captions")&&e.push('"),a(_.controls,"settings")&&e.push('
','",'","
"),a(_.controls,"fullscreen")&&e.push('"),e.push("
"),e.join("")}function q(){if(Xe.supported.full&&("audio"!==Xe.type||_.fullscreen.allowAudio)&&_.fullscreen.enabled){var e=A.supportsFullScreen;e||_.fullscreen.fallback&&!B()?(ze((e?"Native":"Fallback")+" fullscreen enabled"),m(Xe.container,_.classes.fullscreen.enabled,!0)):ze("Fullscreen not supported and fallback disabled"),Xe.buttons&&Xe.buttons.fullscreen&&k(Xe.buttons.fullscreen,!1),X()}}function V(){if("video"===Xe.type){Y(_.selectors.captions)||Xe.videoContainer.insertAdjacentHTML("afterbegin",'
'),Xe.usingTextTracks=!1,Xe.media.textTracks&&(Xe.usingTextTracks=!0);for(var e,t="",n=Xe.media.childNodes,r=0;r=10||Xe.browser.isFirefox&&Xe.browser.version>=31)&&(ze("Detected browser with known TextTrack issues - using manual fallback"),Xe.usingTextTracks=!1),Xe.usingTextTracks){ze("TextTracks supported");for(var o=0;o ");for(var r=0;rXe.captions.length-1){Xe.subcount=Xe.captions.length-1;break}Xe.media.currentTime.toFixed(1)>=n(Xe.captions[Xe.subcount][0])&&Xe.media.currentTime.toFixed(1)<=r(Xe.captions[Xe.subcount][0])?(Xe.currentCaption=Xe.captions[Xe.subcount][1],R(Xe.currentCaption)):R()}}function H(){if(Xe.buttons.captions){m(Xe.container,_.classes.captions.enabled,!0);var e=Xe.storage.captionsEnabled;P["boolean"](e)||(e=_.captions.defaultActive),e&&(m(Xe.container,_.classes.captions.active,!0),k(Xe.buttons.captions,!0))}}function W(e){return Xe.container.querySelectorAll(e)}function Y(e){return W(e)[0]}function B(){try{return e.self!==e.top}catch(t){return!0}}function X(){function e(e){9===e.which&&Xe.isFullscreen&&(e.target!==r||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),r.focus()):(e.preventDefault(),n.focus()))}var t=W("input:not([disabled]), button:not([disabled])"),n=t[0],r=t[t.length-1];g(Xe.container,"keydown",e)}function U(e,t){if(P.string(t))d(e,Xe.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)d(e,Xe.media,t[n])}function J(){if(_.loadSprite){var e=O();e.absolute?(ze("AJAX loading absolute SVG sprite"+(Xe.browser.isIE?" (due to IE)":"")),S(e.url,"sprite-plyr")):ze("Sprite will be used as external resource directly")}var n=_.html;ze("Injecting custom controls"),n||(n=j()),n=o(n,"{seektime}",_.seekTime),n=o(n,"{speed}",1===_.currentSpeed?"Normal":_.currentSpeed.toFixed(1)+"x"),n=o(n,"{lang}","English"),n=o(n,"{id}",Math.floor(1e4*Math.random()));var r;if(P.string(_.selectors.controls.container)&&(r=t.querySelector(_.selectors.controls.container)),P.htmlElement(r)||(r=Xe.container),r.insertAdjacentHTML("beforeend",n),_.tooltips.controls)for(var s=W([_.selectors.controls.wrapper," ",_.selectors.labels," .",_.classes.hidden].join("")),a=s.length-1;a>=0;a--){var i=s[a];m(i,_.classes.hidden,!1),m(i,_.classes.tooltip,!0)}}function z(){try{return Xe.controls=Y(_.selectors.controls.wrapper),Xe.buttons={},Xe.buttons.seek=Y(_.selectors.buttons.seek),Xe.buttons.play=W(_.selectors.buttons.play),Xe.buttons.pause=Y(_.selectors.buttons.pause),Xe.buttons.restart=Y(_.selectors.buttons.restart),Xe.buttons.rewind=Y(_.selectors.buttons.rewind),Xe.buttons.forward=Y(_.selectors.buttons.forward),Xe.buttons.fullscreen=Y(_.selectors.buttons.fullscreen),Xe.buttons.settings=Y(_.selectors.buttons.settings),Xe.buttons.mute=Y(_.selectors.buttons.mute),Xe.buttons.captions=Y(_.selectors.buttons.captions),Xe.progress={},Xe.progress.container=Y(_.selectors.progress.container),Xe.progress.buffer={},Xe.progress.buffer.bar=Y(_.selectors.progress.buffer),Xe.progress.buffer.text=Xe.progress.buffer.bar&&Xe.progress.buffer.bar.getElementsByTagName("span")[0],Xe.progress.played=Y(_.selectors.progress.played),Xe.progress.tooltip=Xe.progress.container&&Xe.progress.container.querySelector("."+_.classes.tooltip),Xe.volume={},Xe.volume.input=Y(_.selectors.volume.input),Xe.volume.display=Y(_.selectors.volume.display),Xe.duration=Y(_.selectors.duration),Xe.currentTime=Y(_.selectors.currentTime),Xe.seekTime=W(_.selectors.seekTime),!0}catch(e){return $e("It looks like there is a problem with your controls HTML"),G(!0),!1}}function $(){m(Xe.container,_.selectors.container.replace(".",""),Xe.supported.full)}function G(e){e&&a(_.types.html5,Xe.type)?Xe.media.setAttribute("controls",""):Xe.media.removeAttribute("controls")}function K(e){var t=_.i18n.play;if(P.string(_.title)&&_.title.length&&(t+=", "+_.title,Xe.container.setAttribute("aria-label",_.title)),Xe.supported.full&&Xe.buttons.play)for(var n=Xe.buttons.play.length-1;n>=0;n--)Xe.buttons.play[n].setAttribute("aria-label",t);P.htmlElement(e)&&e.setAttribute("title",_.i18n.frameTitle.replace("{title}",_.title))}function Q(){var t=null;Xe.storage={},M.supported&&_.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(_.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Z({volume:parseFloat(t)}):Xe.storage=JSON.parse(t)))}function Z(t){M.supported&&_.storage.enabled&&(x(Xe.storage,t),e.localStorage.setItem(_.storage.key,JSON.stringify(Xe.storage)))}function ee(){if(!Xe.media)return void $e("No media element found!");if(Xe.supported.full&&(m(Xe.container,_.classes.type.replace("{0}",Xe.type),!0),a(_.types.embed,Xe.type)&&m(Xe.container,_.classes.type.replace("{0}","video"),!0),m(Xe.container,_.classes.stopped,_.autoplay),m(Xe.ontainer,_.classes.isIos,Xe.browser.isIos),m(Xe.container,_.classes.isTouch,Xe.browser.isTouch),"video"===Xe.type)){var e=t.createElement("div");e.setAttribute("class",_.classes.videoWrapper),i(Xe.media,e),Xe.videoContainer=e}a(_.types.embed,Xe.type)&&te()}function te(){for(var n=t.createElement("div"),r=Xe.embedId,a=Xe.type+"-"+Math.floor(1e4*Math.random()),o=W('[id^="'+Xe.type+'-"]'),i=o.length-1;i>=0;i--)l(o[i]);if(m(Xe.media,_.classes.videoWrapper,!0),m(Xe.media,_.classes.embedWrapper,!0),"youtube"===Xe.type)Xe.media.appendChild(n),n.setAttribute("id",a),P.object(e.YT)?re(r,n):(s(_.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){re(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Xe.type)if(Xe.supported.full?Xe.media.appendChild(n):n=Xe.media,n.setAttribute("id",a),P.object(e.Vimeo))se(r,n);else{s(_.urls.vimeo.api);var u=e.setInterval(function(){P.object(e.Vimeo)&&(e.clearInterval(u),se(r,n))},50)}else if("soundcloud"===Xe.type){var d=t.createElement("iframe");d.loaded=!1,g(d,"load",function(){d.loaded=!0}),c(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:a}),n.appendChild(d),Xe.media.appendChild(n),e.SC||s(_.urls.soundcloud.api);var p=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(p),ae.call(d))},50)}}function ne(){Xe.supported.full&&(We(),Ye()),K(Y("iframe"))}function re(t,n){Xe.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:_.autoplay?1:0,controls:Xe.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:_.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){C(Xe.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Xe.media.play=function(){n.playVideo(),Xe.media.paused=!1},Xe.media.pause=function(){n.pauseVideo(),Xe.media.paused=!0},Xe.media.stop=function(){n.stopVideo(),Xe.media.paused=!0},Xe.media.duration=n.getDuration(),Xe.media.paused=!0,Xe.media.currentTime=0,Xe.media.muted=n.isMuted(),_.title=n.getVideoData().title,Xe.supported.full&&Xe.media.querySelector("iframe").setAttribute("tabindex","-1"),ne(),C(Xe.media,"timeupdate"),C(Xe.media,"durationchange"),e.clearInterval(Ue.buffering),Ue.buffering=e.setInterval(function(){Xe.media.buffered=n.getVideoLoadedFraction(),(null===Xe.media.lastBuffered||Xe.media.lastBuffered=_.speeds.length&&(n=0),e=_.speeds[n]}else e=_.defaultSpeed}_.currentSpeed=e,Xe.media.playbackRate=e,Z({speed:e})}function pe(e){var t=0,n=Xe.media.paused,r=me();P.number(e)?t=e:P.object(e)&&a(["input","change"],e.type)&&(t=e.target.value/e.target.max*r),0>t?t=0:t>r&&(t=r),Ie(t);try{Xe.media.currentTime=t.toFixed(4)}catch(s){}if(a(_.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed.seekTo(t);break;case"vimeo":Xe.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Xe.embed.seekTo(1e3*t)}n&&ie(),C(Xe.media,"timeupdate"),Xe.media.seeking=!0}ze("Seeking to "+Xe.media.currentTime+" seconds"),D(t)}function me(){var e=parseInt(_.duration),t=0;return null===Xe.media.duration||isNaN(Xe.media.duration)||(t=Xe.media.duration),isNaN(e)?t:e}function fe(){m(Xe.container,_.classes.playing,!Xe.media.paused),m(Xe.container,_.classes.stopped,Xe.media.paused),Me(Xe.media.paused)}function ye(){I={x:e.pageXOffset||0,y:e.pageYOffset||0}}function be(){e.scrollTo(I.x,I.y)}function ve(e){var n=A.supportsFullScreen;if(n){if(!e||e.type!==A.fullScreenEventName)return A.isFullScreen(Xe.container)?A.cancelFullScreen():(ye(),A.requestFullScreen(Xe.container)),void(Xe.isFullscreen=A.isFullScreen(Xe.container));Xe.isFullscreen=A.isFullScreen(Xe.container)}else Xe.isFullscreen=!Xe.isFullscreen,t.body.style.overflow=Xe.isFullscreen?"hidden":"";m(Xe.container,_.classes.fullscreen.active,Xe.isFullscreen),X(Xe.isFullscreen),Xe.buttons&&Xe.buttons.fullscreen&&k(Xe.buttons.fullscreen,Xe.isFullscreen),C(Xe.container,Xe.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Xe.isFullscreen&&n&&be()}function ge(e){if(P["boolean"](e)||(e=!Xe.media.muted),k(Xe.buttons.mute,e),Xe.media.muted=e,0===Xe.media.volume&&he(_.volume),a(_.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed[Xe.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Xe.embed.setVolume(Xe.media.muted?0:parseFloat(_.volume/_.volumeMax))}C(Xe.media,"volumechange")}}function he(e){var t=_.volumeMax,n=_.volumeMin;if(P.undefined(e)&&(e=Xe.storage.volume),(null===e||isNaN(e))&&(e=_.volume),e>t&&(e=t),n>e&&(e=n),Xe.media.volume=parseFloat(e/t),Xe.volume.display&&(Xe.volume.display.value=e),a(_.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed.setVolume(100*Xe.media.volume);break;case"vimeo":case"soundcloud":Xe.embed.setVolume(Xe.media.volume)}C(Xe.media,"volumechange")}0===e?Xe.media.muted=!0:Xe.media.muted&&e>0&&ge()}function ke(e){var t=Xe.media.muted?0:Xe.media.volume*_.volumeMax;P.number(e)||(e=_.volumeStep),he(t+e)}function we(e){var t=Xe.media.muted?0:Xe.media.volume*_.volumeMax;P.number(e)||(e=_.volumeStep),he(t-e)}function xe(){var e=Xe.media.muted?0:Xe.media.volume*_.volumeMax;Xe.supported.full&&(Xe.volume.input&&(Xe.volume.input.value=e),Xe.volume.display&&(Xe.volume.display.value=e)),Z({volume:e}),m(Xe.container,_.classes.muted,0===e),Xe.supported.full&&Xe.buttons.mute&&k(Xe.buttons.mute,0===e)}function Te(e){Xe.supported.full&&Xe.buttons.captions&&(P["boolean"](e)||(e=-1===Xe.container.className.indexOf(_.classes.captions.active)),Xe.captionsEnabled=e,k(Xe.buttons.captions,Xe.captionsEnabled),m(Xe.container,_.classes.captions.active,Xe.captionsEnabled),C(Xe.container,Xe.captionsEnabled?"captionsenabled":"captionsdisabled",!0),Z({captionsEnabled:Xe.captionsEnabled}))}function _e(e){var t="waiting"===e.type;clearTimeout(Ue.loading),Ue.loading=setTimeout(function(){m(Xe.container,_.classes.loading,t),Me(t)},t?250:0)}function Se(e){if(Xe.supported.full){var t=Xe.progress.played,n=0,r=me();if(e)switch(e.type){case"timeupdate":case"seeking":if(Xe.controls.pressed)return;n=w(Xe.media.currentTime,r),"timeupdate"===e.type&&Xe.buttons.seek&&(Xe.buttons.seek.value=n);break;case"playing":case"progress":t=Xe.progress.buffer,n=function(){var e=Xe.media.buffered;return e&&e.length?w(e.end(0),r):P.number(e)?100*e:0}()}Ee(t,n)}}function Ee(e,t){if(Xe.supported.full){if(P.undefined(t)&&(t=0),P.undefined(e)){if(!Xe.progress||!Xe.progress.buffer)return;e=Xe.progress.buffer}P.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ce(e,t){if(t){isNaN(e)&&(e=0),Xe.secs=parseInt(e%60),Xe.mins=parseInt(e/60%60),Xe.hours=parseInt(e/60/60%60);var n=parseInt(me()/60/60%60)>0;Xe.secs=("0"+Xe.secs).slice(-2),Xe.mins=("0"+Xe.mins).slice(-2),t.innerHTML=(n?Xe.hours+":":"")+Xe.mins+":"+Xe.secs}}function Fe(){if(Xe.supported.full){var e=me()||0;!Xe.duration&&_.displayDuration&&Xe.media.paused&&Ce(e,Xe.currentTime),Xe.duration&&Ce(e,Xe.duration),Ne()}}function Ae(e){Ce(Xe.media.currentTime,Xe.currentTime),e&&"timeupdate"===e.type&&Xe.media.seeking||Se(e)}function Ie(e){P.number(e)||(e=0);var t=me(),n=w(e,t);Xe.progress&&Xe.progress.played&&(Xe.progress.played.value=n),Xe.buttons&&Xe.buttons.seek&&(Xe.buttons.seek.value=n)}function Ne(e){var t=me();if(_.tooltips.seek&&Xe.progress.container&&0!==t){var n=Xe.progress.container.getBoundingClientRect(),r=0,s=_.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!f(Xe.progress.tooltip,s))return;r=Xe.progress.tooltip.style.left.replace("%","")}0>r?r=0:r>100&&(r=100),Ce(t/100*r,Xe.progress.tooltip),Xe.progress.tooltip.style.left=r+"%",e&&a(["mouseenter","mouseleave"],e.type)&&m(Xe.progress.tooltip,s,"mouseenter"===e.type)}}function Pe(e){P.undefined(e)&&(e=Xe.storage.speed||_.defaultSpeed),de(e)}function Me(t){if(_.hideControls&&"audio"!==Xe.type){var n=0,r=!1,s=t,o=f(Xe.container,_.classes.loading);if(P["boolean"](t)||(t&&t.type?(r="enterfullscreen"===t.type,s=a(["mousemove","touchstart","mouseenter","focus"],t.type),a(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=f(Xe.container,_.classes.hideControls)),e.clearTimeout(Ue.hover),s||Xe.media.paused||o){if(m(Xe.container,_.classes.hideControls,!1),Xe.media.paused||o)return;Xe.browser.isTouch&&(n=3e3)}s&&Xe.media.paused||(Ue.hover=e.setTimeout(function(){(!Xe.controls.pressed&&!Xe.controls.hover||r)&&m(Xe.container,_.classes.hideControls,!0)},n))}}function Le(e){if(!P.undefined(e))return void Oe(e);var t;switch(Xe.type){case"youtube":t=Xe.embed.getVideoUrl();break;case"vimeo":Xe.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Xe.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Xe.media.currentSrc}return t||""}function Oe(e){function n(){if(Xe.embed=null,l(Xe.media),"video"===Xe.type&&Xe.videoContainer&&l(Xe.videoContainer),Xe.container&&Xe.container.removeAttribute("class"),"type"in e&&(Xe.type=e.type,"video"===Xe.type)){var n=e.sources[0];"type"in n&&a(_.types.embed,n.type)&&(Xe.type=n.type)}switch(Xe.supported=E(Xe.type),Xe.type){case"video":Xe.media=t.createElement("video");break;case"audio":Xe.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Xe.media=t.createElement("div"),Xe.embedId=e.sources[0].src}u(Xe.container,Xe.media),P["boolean"](e.autoplay)&&(_.autoplay=e.autoplay),a(_.types.html5,Xe.type)&&(_.crossorigin&&Xe.media.setAttribute("crossorigin",""),_.autoplay&&Xe.media.setAttribute("autoplay",""),"poster"in e&&Xe.media.setAttribute("poster",e.poster),_.loop&&Xe.media.setAttribute("loop","")),m(Xe.container,_.classes.fullscreen.active,Xe.isFullscreen),m(Xe.container,_.classes.captions.active,Xe.captionsEnabled),$(),a(_.types.html5,Xe.type)&&U("source",e.sources),ee(),a(_.types.html5,Xe.type)&&("tracks"in e&&U("track",e.tracks),Xe.media.load()),(a(_.types.html5,Xe.type)||a(_.types.embed,Xe.type)&&!Xe.supported.full)&&(We(),Ye()),_.title=e.title,K()}return P.object(e)&&"sources"in e&&e.sources.length?(m(Xe.container,_.classes.ready,!1),ie(),Ie(),Ee(),Re(),void De(n,!1)):void $e("Invalid source format")}function je(e){"video"===Xe.type&&Xe.media.setAttribute("poster",e)}function qe(){function n(){var e=le(),t=Xe.buttons[e?"play":"pause"],n=Xe.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=f(t,_.classes.tabFocus);setTimeout(function(){n.focus(),r&&(m(t,_.classes.tabFocus,!1),m(n,_.classes.tabFocus,!0))},100)}}function r(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Xe.buttons){var n=Xe.buttons[t];if(P.nodeList(n))for(var r=0;r0)&&(t?we(n):ke(n)),(e.deltaY>0||e.deltaX<0)&&(t?ke(n):we(n))})}function Ve(){if(g(Xe.media,"timeupdate seeking",Ae),g(Xe.media,"timeupdate",D),g(Xe.media,"durationchange loadedmetadata",Fe),g(Xe.media,"ended",function(){"video"===Xe.type&&_.showPosterOnEnd&&("video"===Xe.type&&R(),pe(),Xe.media.load())}),g(Xe.media,"progress playing",Se),g(Xe.media,"volumechange",xe),g(Xe.media,"play pause ended",fe),g(Xe.media,"waiting canplay seeked",_e),_.clickToPlay&&"audio"!==Xe.type){var e=Y("."+_.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){_.hideControls&&Xe.browser.isTouch&&!Xe.media.paused||(Xe.media.paused?oe():Xe.media.ended?(pe(),oe()):ie())})}_.disableContextMenu&&g(Xe.media,"contextmenu",function(e){e.preventDefault()}),g(Xe.media,_.events.concat(["keyup","keydown"]).join(" "),function(e){C(Xe.container,e.type,!0)})}function Re(){if(a(_.types.html5,Xe.type)){for(var e=Xe.media.querySelectorAll("source"),t=0;t \ No newline at end of file + \ No newline at end of file diff --git a/src/js/plyr.js b/src/js/plyr.js index 9a437383..53af4cda 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -41,12 +41,7 @@ volumeStep: 1, defaultSpeed: 1.0, currentSpeed: 1.0, - speeds: [ - 0.5, - 1.0, - 1.5, - 2.0 - ], + speeds: [ 0.5, 1.0, 1.5, 2.0 ], duration: null, displayDuration: true, loadSprite: true, @@ -84,7 +79,7 @@ mute: '[data-plyr="mute"]', captions: '[data-plyr="captions"]', fullscreen: '[data-plyr="fullscreen"]', - speedup: '[data-plyr="speed-up"]' + settings: '[data-plyr="settings"]' }, volume: { input: '[data-plyr="volume"]', @@ -137,7 +132,7 @@ enabled: true, key: 'plyr' }, - controls: ['play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'captions', 'fullscreen'], + controls: ['play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'settings', 'fullscreen'], i18n: { restart: 'Restart', rewind: 'Rewind {seektime} secs', @@ -153,7 +148,9 @@ toggleCaptions: 'Toggle Captions', toggleFullscreen: 'Toggle Fullscreen', frameTitle: 'Player for {title}', - speedup: 'Speed x{speed}' + captions: 'Captions', + settings: 'Settings', + speed: 'Speed' }, types: { embed: ['youtube', 'vimeo', 'soundcloud'], @@ -183,7 +180,7 @@ volume: null, captions: null, fullscreen: null, - speedup: null + speed: null }, // Events to watch on HTML5 media elements events: ['ready', 'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'emptied'], @@ -354,21 +351,6 @@ } } - // Unwrap an element - // http://plainjs.com/javascript/manipulation/unwrap-a-dom-element-35/ - /*function _unwrap(wrapper) { - // Get the element's parent node - var parent = wrapper.parentNode; - - // Move all children out of the element - while (wrapper.firstChild) { - parent.insertBefore(wrapper.firstChild, wrapper); - } - - // Remove the empty element - parent.removeChild(wrapper); - }*/ - // Remove an element function _remove(element) { if (!element) { @@ -452,7 +434,7 @@ } // Toggle event listener - function _toggleListener(element, events, callback, toggle, useCapture) { + function _toggleListener(elements, events, callback, toggle, useCapture) { var eventList = events.split(' '); // Whether the listener is a capturing listener or not @@ -462,10 +444,10 @@ } // If a nodelist is passed, call itself on each node - if (element instanceof NodeList) { - for (var x = 0; x < element.length; x++) { - if (element[x] instanceof Node) { - _toggleListener(element[x], arguments[1], arguments[2], arguments[3]); + if (elements instanceof NodeList) { + for (var x = 0; x < elements.length; x++) { + if (elements[x] instanceof Node) { + _toggleListener(elements[x], arguments[1], arguments[2], arguments[3]); } } return; @@ -473,7 +455,7 @@ // If a single node is passed, bind the event listener for (var i = 0; i < eventList.length; i++) { - element[toggle ? 'addEventListener' : 'removeEventListener'](eventList[i], callback, useCapture); + elements[toggle ? 'addEventListener' : 'removeEventListener'](eventList[i], callback, useCapture); } } @@ -484,13 +466,6 @@ } } - // Unbind event - /*function _off(element, events, callback, useCapture) { - if (element) { - _toggleListener(element, events, callback, false, useCapture); - } - }*/ - // Trigger event function _event(element, type, bubbles, properties) { // Bail if no element @@ -604,6 +579,9 @@ }, undefined: function(input) { return input !== null && typeof input === 'undefined'; + }, + empty: function(input) { + return input === null || this.undefined(input) || ((this.string(input) || this.array(input) || this.nodeList(input)) && input.length === 0) || (this.object(input) && Object.keys(input).length === 0); } }; @@ -813,22 +791,12 @@ ); } - // Speed-up button - if (_inArray(config.controls, 'speed-up')) { - html.push( - '' - ); - } - // Progress if (_inArray(config.controls, 'progress')) { // Create progress html.push('', - '', - '', + '', + '', '', '', '0% ' + config.i18n.buffered, @@ -878,8 +846,8 @@ if (_inArray(config.controls, 'volume')) { html.push( '', - '', - '', + '', + '', '', '' ); @@ -896,6 +864,34 @@ ); } + // Settings button + if (_inArray(config.controls, 'settings')) { + + + html.push( + '
', + '', + '', + '
' + ); + } + // Toggle fullscreen button if (_inArray(config.controls, 'fullscreen')) { html.push( @@ -1292,7 +1288,10 @@ html = _replaceAll(html, '{seektime}', config.seekTime); // Replace seek time instances - html = _replaceAll(html, '{speed}', config.currentSpeed); + html = _replaceAll(html, '{speed}', config.currentSpeed === 1 ? 'Normal' : config.currentSpeed.toFixed(1) + 'x'); + + // Replace current captions language + html = _replaceAll(html, '{lang}', 'English'); // Replace all id references with random numbers html = _replaceAll(html, '{id}', Math.floor(Math.random() * (10000))); @@ -1340,7 +1339,7 @@ plyr.buttons.rewind = _getElement(config.selectors.buttons.rewind); plyr.buttons.forward = _getElement(config.selectors.buttons.forward); plyr.buttons.fullscreen = _getElement(config.selectors.buttons.fullscreen); - plyr.buttons.speedup = _getElement(config.selectors.buttons.speedup); + plyr.buttons.settings = _getElement(config.selectors.buttons.settings); // Inputs plyr.buttons.mute = _getElement(config.selectors.buttons.mute); @@ -1982,13 +1981,14 @@ } // Speed-up - function _speedup(speed) { + function _speed(speed) { if (!_is.array(config.speeds)) { _warn('Invalid speeds format'); return; } if (!_is.number(speed)) { var index = config.speeds.indexOf(config.currentSpeed); + if (index !== -1) { var nextIndex = index + 1; if (nextIndex >= config.speeds.length) { @@ -2000,12 +2000,12 @@ } } + // Store current speed config.currentSpeed = speed; + // Set HTML5 speed plyr.media.playbackRate = speed; - _updateSpeedupTooltip(speed); - // Save speed to localStorage _updateStorage({speed: speed}); } @@ -2578,31 +2578,13 @@ } // Set playback speed - function _setSpeedup(speed) { + function _setSpeed(speed) { // Load speed from storage or default value if (_is.undefined(speed)) { speed = plyr.storage.speed || config.defaultSpeed; } - _speedup(speed); - } - - // Update hover tooltip for playback speed changed - function _updateSpeedupTooltip(speed) { - if (!isNaN(speed)) { - speed = config.currentSpeed; - } - - var button = plyr.buttons.speedup; - var template = config.i18n.speedup; - - var elements= button.getElementsByClassName(config.classes.tooltip); - if (elements.length === 0){ - return; - } - - var tooltip = elements[0]; - tooltip.innerHTML = _replaceAll(template, '{speed}', speed); + _speed(speed); } // Show the player controls in fullscreen mode @@ -3068,7 +3050,7 @@ _proxyListener(plyr.buttons.forward, 'click', config.listeners.forward, _forward); // Speed-up - _proxyListener(plyr.buttons.speedup, 'click', config.listeners.speedup, _speedup); + _proxyListener(plyr.buttons.speed, 'click', config.listeners.speed, _speed); // Seek _proxyListener(plyr.buttons.seek, inputEvent, config.listeners.seek, _seek); @@ -3092,6 +3074,18 @@ // Captions _on(plyr.buttons.captions, 'click', _toggleCaptions); + // Menus + _on(plyr.controls.querySelectorAll('[aria-haspopup="true"]'), 'click', function() { + var toggle = this, + target = document.querySelector('#' + toggle.getAttribute('aria-controls')), + show = (toggle.getAttribute('aria-expanded') === 'false'); + + console.log(target, toggle); + + toggle.setAttribute('aria-expanded', show); + target.setAttribute('aria-hidden', !show); + }); + // Seek tooltip _on(plyr.progress.container, 'mouseenter mouseleave mousemove', _updateSeekTooltip); @@ -3456,7 +3450,7 @@ _updateVolume(); // Set playback speed - _setSpeedup(); + _setSpeed(); // Reset time display _timeUpdate(); @@ -3488,6 +3482,7 @@ source: _source, poster: _updatePoster, setVolume: _setVolume, + setSpeed: _setSpeed, togglePlay: _togglePlay, toggleMute: _toggleMute, toggleCaptions: _toggleCaptions, diff --git a/src/less/plyr.less b/src/less/plyr.less index f70d135c..a3dd8e83 100644 --- a/src/less/plyr.less +++ b/src/less/plyr.less @@ -11,6 +11,16 @@ @keyframes plyr-progress { to { background-position: @plyr-progress-loading-size 0; } } +@keyframes plyr-popup { + from { + transform: translateY(10px); + opacity: .5; + } + to { + transform: translateY(0); + opacity: 1; + } +} // Styles // ------------------------------- @@ -40,6 +50,11 @@ } } + // ARIA + [aria-hidden='true'] { + display: none; + } + // Focus &:focus { outline: 0; @@ -268,7 +283,8 @@ // Spacing > button, .plyr__progress, - .plyr__time { + .plyr__time, + .plyr__menu { margin-left: (@plyr-control-spacing / 2); &:first-child { @@ -320,9 +336,16 @@ @media (min-width: @plyr-bp-screen-sm) { > button, .plyr__progress, - .plyr__time { + .plyr__time, + .plyr__menu { margin-left: @plyr-control-spacing; } + + > button + button, + .plyr__menu + button, + > button + .plyr__menu { + margin-left: (@plyr-control-spacing / 2); + } } } // Hide controls @@ -338,7 +361,7 @@ right: 0; bottom: 0; padding: (@plyr-control-spacing * 5) @plyr-control-spacing @plyr-control-spacing; - background: linear-gradient(fade(@plyr-video-controls-bg, 0%), fade(@plyr-video-controls-bg, 50%)); + background: linear-gradient(fade(@plyr-video-controls-bg, 0%), fade(@plyr-video-controls-bg, 70%)); border-bottom-left-radius: inherit; border-bottom-right-radius: inherit; color: @plyr-video-control-color; @@ -442,6 +465,78 @@ display: inline-block; } +// Menus +// -------------------------------------------------------------- +.plyr__menu { + position: relative; + + // Hide tooltip + button[aria-expanded='true'] .plyr__tooltip { + display: none; + } + + // The actual menu container + &__container { + position: absolute; + bottom: 100%; + right: -5px; + margin-bottom: 10px; + animation: plyr-popup .2s ease; + background: fade(@plyr-video-controls-bg, 90%); + box-shadow: 0 1px 0 fade(#000, 20%); + border-radius: 4px; + white-space: nowrap; + text-align: left; + color: @plyr-video-control-color; + font-size: @plyr-font-size-small; + + ul { + margin: 0; + padding: 5px; + list-style: none; + } + + button { + display: flex; + width: 100%; + padding: 10px 30px 10px 12px; + color: @plyr-video-control-color; + font-weight: 600; + + // Arrow + &::after { + content: ""; + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 5px; + border: 5px solid transparent; + border-left-color: fade(@plyr-video-control-color, 80%); + } + } + + // Option value + .plyr__menu__value { + margin-left: auto; + padding-left: 25px; + font-weight: 400; + color: fade(@plyr-video-control-color, 80%); + } + + // Arrow + &::after { + content: ""; + position: absolute; + top: 100%; + right: 15px; + height: 0; + width: 0; + border: 6px solid transparent; + border-top-color: fade(@plyr-video-controls-bg, 90%); + } + } +} + // Tooltips // -------------------------------------------------------------- .plyr__tooltip { @@ -492,7 +587,7 @@ } // First tooltip -.plyr__controls button:first-child .plyr__tooltip { +.plyr__controls > button:first-child .plyr__tooltip { left: 0; transform: translate(0, 10px) scale(.8); transform-origin: 0 100%; @@ -503,7 +598,7 @@ } // Last tooltip -.plyr__controls button:last-child .plyr__tooltip { +.plyr__controls > button:last-child .plyr__tooltip { right: 0; transform: translate(0, 10px) scale(.8); transform-origin: 100% 100%; @@ -515,8 +610,8 @@ } } -.plyr__controls button:first-child, -.plyr__controls button:last-child { +.plyr__controls > button:first-child, +.plyr__controls > button:last-child { &:hover .plyr__tooltip, &.tab-focus:focus .plyr__tooltip, .plyr__tooltip--visible { diff --git a/src/less/variables.less b/src/less/variables.less index fc9e895a..8a601571 100644 --- a/src/less/variables.less +++ b/src/less/variables.less @@ -17,7 +17,7 @@ @plyr-font-size-base: 16px; // Captions -@plyr-captions-bg: fade(#000, 70%); +@plyr-captions-bg: fade(#343f4a, 85%); @plyr-captions-color: #fff; @plyr-font-size-captions-base: @plyr-font-size-base; @plyr-font-size-captions-medium: ceil(@plyr-font-size-base * 1.5); @@ -27,7 +27,7 @@ @plyr-control-icon-size: 18px; @plyr-control-spacing: 10px; @plyr-control-padding: (@plyr-control-spacing * .7); -@plyr-video-controls-bg: #000; +@plyr-video-controls-bg: #343f4a; @plyr-video-control-color: #fff; @plyr-video-control-color-hover: #fff; @plyr-video-control-bg-hover: @plyr-color-main; @@ -38,7 +38,7 @@ @plyr-audio-control-bg-hover: @plyr-color-main; // Tooltips -@plyr-tooltip-bg: fade(#000, 70%); +@plyr-tooltip-bg: fade(#343f4a, 85%); @plyr-tooltip-color: #fff; @plyr-tooltip-padding: (@plyr-control-spacing / 2); @plyr-tooltip-arrow-size: 4px; @@ -46,7 +46,7 @@ // Progress @plyr-progress-loading-size: 25px; -@plyr-progress-loading-bg: fade(#000, 15%); +@plyr-progress-loading-bg: fade(#343f4a, 20%); @plyr-video-progress-bg: fade(#fff, 25%); @plyr-video-progress-buffered-bg: @plyr-video-progress-bg; @plyr-audio-progress-bg: fade(#C6D6DB, 66%); @@ -58,7 +58,7 @@ @plyr-range-thumb-width: floor(@plyr-range-track-height * 2); @plyr-range-thumb-bg: #fff; @plyr-range-thumb-border: 2px solid transparent; -@plyr-range-thumb-shadow: 0 1px 1px fade(@plyr-video-controls-bg, 15%), 0 0 0 1px fade(#000, 15%); +@plyr-range-thumb-shadow: 0 1px 1px fade(@plyr-video-controls-bg, 15%), 0 0 0 1px fade(#343f4a, 20%); @plyr-range-thumb-active-border-color: #fff; @plyr-range-thumb-active-bg: @plyr-video-control-bg-hover; @plyr-range-thumb-active-scale: 1.25; diff --git a/src/sprite/plyr-settings.svg b/src/sprite/plyr-settings.svg new file mode 100644 index 00000000..e6fd0f75 --- /dev/null +++ b/src/sprite/plyr-settings.svg @@ -0,0 +1,12 @@ + + + + From 42a2642d402b0c04dd133a894c1c8461abbfbf2a Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 6 Sep 2016 23:50:59 +1000 Subject: [PATCH 08/70] Icon fix --- dist/plyr.svg | 2 +- src/sprite/plyr-settings.svg | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/dist/plyr.svg b/dist/plyr.svg index 69d3f559..fc3575fc 100644 --- a/dist/plyr.svg +++ b/dist/plyr.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/sprite/plyr-settings.svg b/src/sprite/plyr-settings.svg index e6fd0f75..fbf8ecd1 100644 --- a/src/sprite/plyr-settings.svg +++ b/src/sprite/plyr-settings.svg @@ -1,12 +1,6 @@ - - - - + + + + + + \ No newline at end of file From 46f82a4af375164355315f08b5724a25961aa39b Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Wed, 7 Sep 2016 22:18:05 +1000 Subject: [PATCH 09/70] Added quality in menu --- demo/dist/demo.css | 2 +- dist/plyr.css | 2 +- dist/plyr.js | 4 ++-- src/js/plyr.js | 8 +++++++- src/less/plyr.less | 12 ++++++------ src/less/variables.less | 7 ++++++- 6 files changed, 23 insertions(+), 12 deletions(-) diff --git a/demo/dist/demo.css b/demo/dist/demo.css index a9b2f5bc..cf8073a7 100644 --- a/demo/dist/demo.css +++ b/demo/dist/demo.css @@ -1 +1 @@ -/*! normalize.css v2.1.3 | MIT License | git.io/normalize */a.logo,img,legend{border:0}a,h1,h2{color:#3498db}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,small,summary{display:block}body,figure,li,ul{margin:0}[hidden],template{display:none}li,nav ul,ul{list-style:none;padding:0}legend,li,nav ul,ul{padding:0}.btn__bar,sub,sup{position:relative}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:0 0;text-decoration:none;border-bottom:1px dotted currentColor;transition:background .3s ease,color .3s ease,border .3s ease}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}.btn__bar,nav li{white-space:nowrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-medium.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-medium.woff) format("woff");font-style:normal;font-weight:500}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-bold.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-bold.woff) format("woff");font-style:normal;font-weight:700}html{font-size:100%;height:100%;background:fixed #f2f5f7}body{font-family:Avenir,"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.5;text-align:center;color:#55646b;font-weight:500;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding:10px}h1,h2{letter-spacing:-.025em;margin:0 0 10px;line-height:1.2;font-weight:700}h1{font-size:64px;font-size:4rem}p,small{margin:0 0 20px}small{padding:0 10px;font-size:14px;font-size:.875rem}a:focus,a:hover{color:#343f4a;border-bottom-color:transparent}a:focus{outline:#343f4a dotted thin;outline-offset:1px}.color--vimeo{color:#19b7ed}.color--youtube{color:#cc181e}*,::after,::before{box-sizing:border-box}.btn__bar ul,nav li{display:inline-block}header{padding:20px;margin-bottom:20px}header p{font-size:18px;font-size:1.125rem}section{max-width:1200px;margin:0 auto 20px}@media (min-width:480px){header{padding-top:60px;padding-bottom:60px}section{margin-bottom:40px}}.icon{fill:currentColor;width:18px;height:18px;vertical-align:-3px}.btn,.btn__count,.error main,video{vertical-align:middle}a svg,button svg,label svg{pointer-events:none}.btn .icon,a .icon{margin-right:10px}.btn:not(.btn-large) .icon{width:16px;height:16px}nav ul{margin:0;font-size:0}nav li{margin-top:10px;font-size:16px;font-size:1rem}nav li+li{margin-left:20px}.btn__bar{margin:0 auto 20px;max-width:1200px}.btn__bar::before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background:#dbe3e8}.btn__bar ul{position:relative;z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn__bar li{margin:0}.btn__bar li:first-child .btn{border-radius:4px 0 0 4px}.btn__bar li:last-child .btn{border-radius:0 4px 4px 0}.btn__bar li+li .btn{margin-left:-1px}.btn__bar li.active .btn{position:relative;z-index:1}.btn__bar li.active .btn .icon{color:inherit}.btn__bar li.active+li .btn:hover{z-index:0}.btn__bar .btn{position:relative;display:block;border-radius:0}.btn__bar .btn:focus,.btn__bar .btn:hover{z-index:1}@media (min-width:560px){.btn__bar{margin-bottom:40px}}.btn,.btn__count{display:inline-block;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:700}.btn{padding:10px 12px;background:linear-gradient(#f8fafb,#e9eef1);border:1px solid #cbd0d3;box-shadow:0 1px 1px rgba(0,0,0,.05);text-shadow:0 1px 1px #fff;color:#55646b;transition:background .1s ease,color .1s ease;font-size:14px;font-size:.875rem}.btn:focus,.btn:hover{border-color:#b5bcc0;color:#55646b;outline:0}.btn--large{padding:10px 20px;font-size:16px;font-size:1rem}.btn--primary,.btn__bar li.active .btn{background-image:linear-gradient(#3498db,#258cd1);background-color:#3498db;border-color:#217dbb;box-shadow:0 1px 1px rgba(0,0,0,.15);text-shadow:0 1px 1px rgba(0,0,0,.1);color:#fff}.btn--primary:focus,.btn--primary:hover{color:#fff;border-color:#196090}.btn--youtube .icon{color:#cc181e}.btn--vimeo .icon{color:#19b7ed}.btn--twitter .icon{color:#4BAAF4}.btn__count{position:relative;margin-left:10px;padding:10px 15px;background:#fff;border:1px solid #cbd0d3}.btn__count::before,.plyr__video-wrapper::after{content:"";position:absolute}.btn__count::before{display:block;width:8px;height:8px;left:1px;top:50%;margin-top:-4px;background:inherit;border:inherit;border-width:1px 0 0 1px;transform:rotate(-45deg) translate(-50%,-50%)}.error body,html.error{height:100%}.error body{width:100%;display:table;table-layout:fixed}.error main{display:table-cell;width:100%}video{max-width:100%}.plyr{margin:0 auto;border-radius:6px}.plyr--audio{max-width:520px}.plyr__video-wrapper::after{pointer-events:none;top:0;bottom:0;left:0;right:0;border:1px solid rgba(0,0,0,.15);border-radius:inherit}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:5px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block} \ No newline at end of file +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */a.logo,img,legend{border:0}a,h1,h2{color:#3498db}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,small,summary{display:block}body,figure,li,ul{margin:0}[hidden],template{display:none}li,nav ul,ul{list-style:none;padding:0}legend,li,nav ul,ul{padding:0}.btn__bar,sub,sup{position:relative}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:0 0;text-decoration:none;border-bottom:1px dotted currentColor;transition:background .3s ease,color .3s ease,border .3s ease}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}.btn__bar,nav li{white-space:nowrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@-webkit-keyframes fade-in{0%{opacity:0}100%{opacity:1}}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-medium.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-medium.woff) format("woff");font-style:normal;font-weight:500}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-bold.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-bold.woff) format("woff");font-style:normal;font-weight:700}html{font-size:100%;height:100%;background:fixed #f2f5f7}body{font-family:Avenir,"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.5;text-align:center;color:#55646b;font-weight:500;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding:10px}h1,h2{letter-spacing:-.025em;margin:0 0 10px;line-height:1.2;font-weight:700}h1{font-size:64px;font-size:4rem}p,small{margin:0 0 20px}small{padding:0 10px;font-size:14px;font-size:.875rem}a:focus,a:hover{color:#343f4a;border-bottom-color:transparent}a:focus{outline:#343f4a dotted thin;outline-offset:1px}.color--vimeo{color:#19b7ed}.color--youtube{color:#cc181e}*,::after,::before{box-sizing:border-box}.btn__bar ul,nav li{display:inline-block}header{padding:20px;margin-bottom:20px}header p{font-size:18px;font-size:1.125rem}section{max-width:1200px;margin:0 auto 20px}@media (min-width:480px){header{padding-top:60px;padding-bottom:60px}section{margin-bottom:40px}}.icon{fill:currentColor;width:18px;height:18px;vertical-align:-3px}.btn,.btn__count,.error main,video{vertical-align:middle}a svg,button svg,label svg{pointer-events:none}.btn .icon,a .icon{margin-right:10px}.btn:not(.btn-large) .icon{width:16px;height:16px}nav ul{margin:0;font-size:0}nav li{margin-top:10px;font-size:16px;font-size:1rem}nav li+li{margin-left:20px}.btn__bar{margin:0 auto 20px;max-width:1200px}.btn__bar::before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background:#dbe3e8}.btn__bar ul{position:relative;z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn__bar li{margin:0}.btn__bar li:first-child .btn{border-radius:4px 0 0 4px}.btn__bar li:last-child .btn{border-radius:0 4px 4px 0}.btn__bar li+li .btn{margin-left:-1px}.btn__bar li.active .btn{position:relative;z-index:1}.btn__bar li.active .btn .icon{color:inherit}.btn__bar li.active+li .btn:hover{z-index:0}.btn__bar .btn{position:relative;display:block;border-radius:0}.btn__bar .btn:focus,.btn__bar .btn:hover{z-index:1}@media (min-width:560px){.btn__bar{margin-bottom:40px}}.btn,.btn__count{display:inline-block;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:700}.btn{padding:10px 12px;background:linear-gradient(#f8fafb,#e9eef1);border:1px solid #cbd0d3;box-shadow:0 1px 1px rgba(0,0,0,.05);text-shadow:0 1px 1px #fff;color:#55646b;transition:background .1s ease,color .1s ease;font-size:14px;font-size:.875rem}.btn:focus,.btn:hover{border-color:#b5bcc0;color:#55646b;outline:0}.btn--large{padding:10px 20px;font-size:16px;font-size:1rem}.btn--primary,.btn__bar li.active .btn{background-image:linear-gradient(#3498db,#258cd1);background-color:#3498db;border-color:#217dbb;box-shadow:0 1px 1px rgba(0,0,0,.15);text-shadow:0 1px 1px rgba(0,0,0,.1);color:#fff}.btn--primary:focus,.btn--primary:hover{color:#fff;border-color:#196090}.btn--youtube .icon{color:#cc181e}.btn--vimeo .icon{color:#19b7ed}.btn--twitter .icon{color:#4BAAF4}.btn__count{position:relative;margin-left:10px;padding:10px 15px;background:#fff;border:1px solid #cbd0d3}.btn__count::before,.plyr__video-wrapper::after{content:"";position:absolute}.btn__count::before{display:block;width:8px;height:8px;left:1px;top:50%;margin-top:-4px;background:inherit;border:inherit;border-width:1px 0 0 1px;-webkit-transform:rotate(-45deg) translate(-50%,-50%);transform:rotate(-45deg) translate(-50%,-50%)}.error body,html.error{height:100%}.error body{width:100%;display:table;table-layout:fixed}.error main{display:table-cell;width:100%}video{max-width:100%}.plyr{margin:0 auto;border-radius:6px}.plyr--audio{max-width:520px}.plyr__video-wrapper::after{pointer-events:none;top:0;bottom:0;left:0;right:0;border:1px solid rgba(0,0,0,.15);border-radius:inherit}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:5px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block} \ No newline at end of file diff --git a/dist/plyr.css b/dist/plyr.css index e7ecba6e..8221b232 100644 --- a/dist/plyr.css +++ b/dist/plyr.css @@ -1 +1 @@ -.plyr input[type=range]:focus,.plyr:focus{outline:0}.plyr .plyr__video-embed iframe,.plyr__tooltip{pointer-events:none}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{from{transform:translateY(10px);opacity:.5}to{transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;transform:translateY(-35.95%)}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;transform:translateY(-40px);transition:transform .3s ease;color:#fff;font-size:16px;text-align:center;font-weight:400}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(52,63,74,.85);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}.plyr__controls .plyr__menu+button,.plyr__controls>button+.plyr__menu,.plyr__controls>button+button{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__menu{position:relative}.plyr__menu button[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;bottom:100%;right:-5px;margin-bottom:10px;animation:plyr-popup .2s ease;background:rgba(52,63,74,.9);box-shadow:0 1px 0 rgba(0,0,0,.2);border-radius:4px;white-space:nowrap;text-align:left;color:#fff;font-size:14px}.plyr__menu__container ul{margin:0;padding:5px;list-style:none}.plyr__menu__container button{display:-ms-flexbox;display:flex;width:100%;padding:10px 30px 10px 12px;color:#fff;font-weight:600}.plyr__menu__container button::after{content:"";position:absolute;top:50%;transform:translateY(-50%);right:5px;border:5px solid transparent;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__value{margin-left:auto;padding-left:25px;font-weight:400;color:rgba(255,255,255,.8)}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__tooltip{position:absolute;z-index:2;bottom:100%;margin-bottom:10px;padding:5px 7.5px;opacity:0;background:rgba(52,63,74,.85);border-radius:3px;color:#fff;font-size:14px;line-height:1.3;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(52,63,74,.85);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls>button:first-child .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>button:first-child .plyr__tooltip::before{left:16px}.plyr__controls>button:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>button:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>button:first-child .plyr__tooltip--visible,.plyr__controls>button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:first-child:hover .plyr__tooltip,.plyr__controls>button:last-child .plyr__tooltip--visible,.plyr__controls>button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)} \ No newline at end of file +.plyr input[type=range]:focus,.plyr:focus{outline:0}.plyr .plyr__video-embed iframe,.plyr__tooltip{pointer-events:none}@-webkit-keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-progress{to{background-position:25px 0}}@-webkit-keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;-webkit-transform:scale(1.25);transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;-webkit-transform:translateY(-35.95%);transform:translateY(-35.95%)}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;-webkit-transform:translateY(-40px);transform:translateY(-40px);transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease;color:#fff;font-size:16px;text-align:center;font-weight:400}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(52,63,74,.85);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{-webkit-transform:translateY(-15px);transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}.plyr__controls .plyr__menu+button,.plyr__controls>button+.plyr__menu,.plyr__controls>button+button{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__menu__container,.plyr__tooltip{bottom:100%;background:rgba(52,63,74,.9);font-size:14px}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__menu{position:relative}.plyr__menu button[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;right:-5px;margin-bottom:10px;-webkit-animation:plyr-popup .2s ease;animation:plyr-popup .2s ease;box-shadow:0 1px 0 rgba(0,0,0,.2);border-radius:4px;white-space:nowrap;text-align:left;color:#fff}.plyr__menu__container ul{margin:0;padding:5px;list-style:none}.plyr__menu__container button{display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;padding:10px 30px 10px 12px;color:#fff;font-weight:600}.plyr__menu__container button::after{content:"";position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);right:5px;border:5px solid transparent;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__value{margin-left:auto;padding-left:25px;font-weight:400;color:rgba(255,255,255,.8)}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__tooltip{position:absolute;z-index:2;margin-bottom:10px;padding:5px 7.5px;opacity:0;border-radius:3px;color:#fff;line-height:1.3;-webkit-transform:translate(-50%,10px) scale(.8);transform:translate(-50%,10px) scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;transition:opacity .2s .1s ease,-webkit-transform .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease,-webkit-transform .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(52,63,74,.9);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;-webkit-transform:translate(-50%,0) scale(1);transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls>button:first-child .plyr__tooltip{left:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:0 100%;transform-origin:0 100%}.plyr__controls>button:first-child .plyr__tooltip::before{left:16px}.plyr__controls>button:last-child .plyr__tooltip{right:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.plyr__controls>button:last-child .plyr__tooltip::before{left:auto;right:16px;-webkit-transform:translateX(50%);transform:translateX(50%)}.plyr__controls>button:first-child .plyr__tooltip--visible,.plyr__controls>button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:first-child:hover .plyr__tooltip,.plyr__controls>button:last-child .plyr__tooltip--visible,.plyr__controls>button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:last-child:hover .plyr__tooltip{-webkit-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-webkit-flex:1;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{-webkit-animation:plyr-progress 1s linear infinite;animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)} \ No newline at end of file diff --git a/dist/plyr.js b/dist/plyr.js index 207201a3..f27bd94a 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,r,s=navigator.userAgent,a=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,d=!1;return-1!==navigator.appVersion.indexOf("Windows NT")&&-1!==navigator.appVersion.indexOf("rv:11")?(l=!0,a="IE",o="11"):-1!==(n=s.indexOf("MSIE"))?(l=!0,a="IE",o=s.substring(n+5)):-1!==(n=s.indexOf("Chrome"))?(c=!0,a="Chrome",o=s.substring(n+7)):-1!==(n=s.indexOf("Safari"))?(d=!0,a="Safari",o=s.substring(n+7),-1!==(n=s.indexOf("Version"))&&(o=s.substring(n+8))):-1!==(n=s.indexOf("Firefox"))?(u=!0,a="Firefox",o=s.substring(n+8)):(e=s.lastIndexOf(" ")+1)<(n=s.lastIndexOf("/"))&&(a=s.substring(e,n),o=s.substring(n+1),a.toLowerCase()===a.toUpperCase()&&(a=navigator.appName)),-1!==(r=o.indexOf(";"))&&(o=o.substring(0,r)),-1!==(r=o.indexOf(" "))&&(o=o.substring(0,r)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:a,version:i,isIE:l,isFirefox:u,isChrome:c,isSafari:d,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function r(e,t){var n=e.media;if("video"===e.type)switch(t){case"video/webm":return!(!n.canPlayType||!n.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,""));case"video/mp4":return!(!n.canPlayType||!n.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,""));case"video/ogg":return!(!n.canPlayType||!n.canPlayType('video/ogg; codecs="theora"').replace(/no/,""))}else if("audio"===e.type)switch(t){case"audio/mpeg":return!(!n.canPlayType||!n.canPlayType("audio/mpeg;").replace(/no/,""));case"audio/ogg":return!(!n.canPlayType||!n.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,""));case"audio/wav":return!(!n.canPlayType||!n.canPlayType('audio/wav; codecs="1"').replace(/no/,""))}return!1}function s(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var r=t.getElementsByTagName("script")[0];r.parentNode.insertBefore(n,r)}}function a(e,t){return Array.prototype.indexOf&&-1!==e.indexOf(t)}function o(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function i(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],a=s.parentNode,o=s.nextSibling;return r.appendChild(s),o?a.insertBefore(r,o):a.appendChild(r),r}}function l(e){e&&e.parentNode.removeChild(e)}function u(e,t){e.insertBefore(t,e.firstChild)}function c(e,t){for(var n in t)e.setAttribute(n,P["boolean"](t[n])&&t[n]?"":t[n])}function d(e,n,r){var s=t.createElement(e);c(s,r),u(n,s)}function p(e){return e.replace(".","")}function m(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function f(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function y(e,n){var r=Element.prototype,s=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return s.call(e,n)}function b(e,t,n,r,s){g(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},s)}function v(e,t,n,r,s){var a=t.split(" ");if(P["boolean"](s)||(s=!1),e instanceof NodeList)for(var o=0;or;r++){var s=e[r];for(var a in s)s[a]&&s[a].constructor&&s[a].constructor===Object?(t[a]=t[a]||{},x(t[a],s[a])):t[a]=s[a]}return t}}function T(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},n="webkit o moz ms khtml".split(" ");if(P.undefined(t.cancelFullScreen))for(var r=0,s=n.length;s>r;r++){if(e.prefix=n[r],!P.undefined(t[e.prefix+"CancelFullScreen"])){e.supportsFullScreen=!0;break}if(!P.undefined(t.msExitFullscreen)&&t.msFullscreenEnabled){e.prefix="ms",e.supportsFullScreen=!0;break}}else e.supportsFullScreen=!0;return e.supportsFullScreen&&(e.fullScreenEventName="ms"===e.prefix?"MSFullscreenChange":e.prefix+"fullscreenchange",e.isFullScreen=function(e){switch(P.undefined(e)&&(e=t.body),this.prefix){case"":return t.fullscreenElement===e;case"moz":return t.mozFullScreenElement===e;default:return t[this.prefix+"FullscreenElement"]===e}},e.requestFullScreen=function(e){return P.undefined(e)&&(e=t.body),""===this.prefix?e.requestFullScreen():e[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]()},e.cancelFullScreen=function(){return""===this.prefix?t.cancelFullScreen():t[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]()},e.element=function(){return""===this.prefix?t.fullscreenElement:t[this.prefix+"FullscreenElement"]}),e}function _(v,_){function C(e,t,n,r){h(e,t,n,x({},r,{plyr:Be}))}function L(t,n){_.debug&&e.console&&(n=Array.prototype.slice.call(n),P.string(_.logPrefix)&&_.logPrefix.length&&n.unshift(_.logPrefix),console[t].apply(console,n))}function O(){return{url:_.iconUrl,absolute:0===_.iconUrl.indexOf("http")||Xe.browser.isIE}}function j(){var e=[],t=O(),n=(t.absolute?"":t.url)+"#"+_.iconPrefix;return a(_.controls,"play-large")&&e.push('"),e.push('
'),a(_.controls,"restart")&&e.push('"),a(_.controls,"rewind")&&e.push('"),a(_.controls,"play")&&e.push('",'"),a(_.controls,"fast-forward")&&e.push('"),a(_.controls,"progress")&&(e.push('','','','','',"0% "+_.i18n.buffered,""),_.tooltips.seek&&e.push('00:00'),e.push("")),a(_.controls,"current-time")&&e.push('',''+_.i18n.currentTime+"",'00:00',""),a(_.controls,"duration")&&e.push('',''+_.i18n.duration+"",'00:00',""),a(_.controls,"mute")&&e.push('"),a(_.controls,"volume")&&e.push('','",'','',""),a(_.controls,"captions")&&e.push('"),a(_.controls,"settings")&&e.push('
','",'","
"),a(_.controls,"fullscreen")&&e.push('"),e.push("
"),e.join("")}function q(){if(Xe.supported.full&&("audio"!==Xe.type||_.fullscreen.allowAudio)&&_.fullscreen.enabled){var e=A.supportsFullScreen;e||_.fullscreen.fallback&&!B()?(ze((e?"Native":"Fallback")+" fullscreen enabled"),m(Xe.container,_.classes.fullscreen.enabled,!0)):ze("Fullscreen not supported and fallback disabled"),Xe.buttons&&Xe.buttons.fullscreen&&k(Xe.buttons.fullscreen,!1),X()}}function V(){if("video"===Xe.type){Y(_.selectors.captions)||Xe.videoContainer.insertAdjacentHTML("afterbegin",'
'),Xe.usingTextTracks=!1,Xe.media.textTracks&&(Xe.usingTextTracks=!0);for(var e,t="",n=Xe.media.childNodes,r=0;r=10||Xe.browser.isFirefox&&Xe.browser.version>=31)&&(ze("Detected browser with known TextTrack issues - using manual fallback"),Xe.usingTextTracks=!1),Xe.usingTextTracks){ze("TextTracks supported");for(var o=0;o ");for(var r=0;rXe.captions.length-1){Xe.subcount=Xe.captions.length-1;break}Xe.media.currentTime.toFixed(1)>=n(Xe.captions[Xe.subcount][0])&&Xe.media.currentTime.toFixed(1)<=r(Xe.captions[Xe.subcount][0])?(Xe.currentCaption=Xe.captions[Xe.subcount][1],R(Xe.currentCaption)):R()}}function H(){if(Xe.buttons.captions){m(Xe.container,_.classes.captions.enabled,!0);var e=Xe.storage.captionsEnabled;P["boolean"](e)||(e=_.captions.defaultActive),e&&(m(Xe.container,_.classes.captions.active,!0),k(Xe.buttons.captions,!0))}}function W(e){return Xe.container.querySelectorAll(e)}function Y(e){return W(e)[0]}function B(){try{return e.self!==e.top}catch(t){return!0}}function X(){function e(e){9===e.which&&Xe.isFullscreen&&(e.target!==r||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),r.focus()):(e.preventDefault(),n.focus()))}var t=W("input:not([disabled]), button:not([disabled])"),n=t[0],r=t[t.length-1];g(Xe.container,"keydown",e)}function U(e,t){if(P.string(t))d(e,Xe.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)d(e,Xe.media,t[n])}function J(){if(_.loadSprite){var e=O();e.absolute?(ze("AJAX loading absolute SVG sprite"+(Xe.browser.isIE?" (due to IE)":"")),S(e.url,"sprite-plyr")):ze("Sprite will be used as external resource directly")}var n=_.html;ze("Injecting custom controls"),n||(n=j()),n=o(n,"{seektime}",_.seekTime),n=o(n,"{speed}",1===_.currentSpeed?"Normal":_.currentSpeed.toFixed(1)+"x"),n=o(n,"{lang}","English"),n=o(n,"{id}",Math.floor(1e4*Math.random()));var r;if(P.string(_.selectors.controls.container)&&(r=t.querySelector(_.selectors.controls.container)),P.htmlElement(r)||(r=Xe.container),r.insertAdjacentHTML("beforeend",n),_.tooltips.controls)for(var s=W([_.selectors.controls.wrapper," ",_.selectors.labels," .",_.classes.hidden].join("")),a=s.length-1;a>=0;a--){var i=s[a];m(i,_.classes.hidden,!1),m(i,_.classes.tooltip,!0)}}function z(){try{return Xe.controls=Y(_.selectors.controls.wrapper),Xe.buttons={},Xe.buttons.seek=Y(_.selectors.buttons.seek),Xe.buttons.play=W(_.selectors.buttons.play),Xe.buttons.pause=Y(_.selectors.buttons.pause),Xe.buttons.restart=Y(_.selectors.buttons.restart),Xe.buttons.rewind=Y(_.selectors.buttons.rewind),Xe.buttons.forward=Y(_.selectors.buttons.forward),Xe.buttons.fullscreen=Y(_.selectors.buttons.fullscreen),Xe.buttons.settings=Y(_.selectors.buttons.settings),Xe.buttons.mute=Y(_.selectors.buttons.mute),Xe.buttons.captions=Y(_.selectors.buttons.captions),Xe.progress={},Xe.progress.container=Y(_.selectors.progress.container),Xe.progress.buffer={},Xe.progress.buffer.bar=Y(_.selectors.progress.buffer),Xe.progress.buffer.text=Xe.progress.buffer.bar&&Xe.progress.buffer.bar.getElementsByTagName("span")[0],Xe.progress.played=Y(_.selectors.progress.played),Xe.progress.tooltip=Xe.progress.container&&Xe.progress.container.querySelector("."+_.classes.tooltip),Xe.volume={},Xe.volume.input=Y(_.selectors.volume.input),Xe.volume.display=Y(_.selectors.volume.display),Xe.duration=Y(_.selectors.duration),Xe.currentTime=Y(_.selectors.currentTime),Xe.seekTime=W(_.selectors.seekTime),!0}catch(e){return $e("It looks like there is a problem with your controls HTML"),G(!0),!1}}function $(){m(Xe.container,_.selectors.container.replace(".",""),Xe.supported.full)}function G(e){e&&a(_.types.html5,Xe.type)?Xe.media.setAttribute("controls",""):Xe.media.removeAttribute("controls")}function K(e){var t=_.i18n.play;if(P.string(_.title)&&_.title.length&&(t+=", "+_.title,Xe.container.setAttribute("aria-label",_.title)),Xe.supported.full&&Xe.buttons.play)for(var n=Xe.buttons.play.length-1;n>=0;n--)Xe.buttons.play[n].setAttribute("aria-label",t);P.htmlElement(e)&&e.setAttribute("title",_.i18n.frameTitle.replace("{title}",_.title))}function Q(){var t=null;Xe.storage={},M.supported&&_.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(_.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Z({volume:parseFloat(t)}):Xe.storage=JSON.parse(t)))}function Z(t){M.supported&&_.storage.enabled&&(x(Xe.storage,t),e.localStorage.setItem(_.storage.key,JSON.stringify(Xe.storage)))}function ee(){if(!Xe.media)return void $e("No media element found!");if(Xe.supported.full&&(m(Xe.container,_.classes.type.replace("{0}",Xe.type),!0),a(_.types.embed,Xe.type)&&m(Xe.container,_.classes.type.replace("{0}","video"),!0),m(Xe.container,_.classes.stopped,_.autoplay),m(Xe.ontainer,_.classes.isIos,Xe.browser.isIos),m(Xe.container,_.classes.isTouch,Xe.browser.isTouch),"video"===Xe.type)){var e=t.createElement("div");e.setAttribute("class",_.classes.videoWrapper),i(Xe.media,e),Xe.videoContainer=e}a(_.types.embed,Xe.type)&&te()}function te(){for(var n=t.createElement("div"),r=Xe.embedId,a=Xe.type+"-"+Math.floor(1e4*Math.random()),o=W('[id^="'+Xe.type+'-"]'),i=o.length-1;i>=0;i--)l(o[i]);if(m(Xe.media,_.classes.videoWrapper,!0),m(Xe.media,_.classes.embedWrapper,!0),"youtube"===Xe.type)Xe.media.appendChild(n),n.setAttribute("id",a),P.object(e.YT)?re(r,n):(s(_.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){re(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Xe.type)if(Xe.supported.full?Xe.media.appendChild(n):n=Xe.media,n.setAttribute("id",a),P.object(e.Vimeo))se(r,n);else{s(_.urls.vimeo.api);var u=e.setInterval(function(){P.object(e.Vimeo)&&(e.clearInterval(u),se(r,n))},50)}else if("soundcloud"===Xe.type){var d=t.createElement("iframe");d.loaded=!1,g(d,"load",function(){d.loaded=!0}),c(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:a}),n.appendChild(d),Xe.media.appendChild(n),e.SC||s(_.urls.soundcloud.api);var p=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(p),ae.call(d))},50)}}function ne(){Xe.supported.full&&(We(),Ye()),K(Y("iframe"))}function re(t,n){Xe.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:_.autoplay?1:0,controls:Xe.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:_.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){C(Xe.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Xe.media.play=function(){n.playVideo(),Xe.media.paused=!1},Xe.media.pause=function(){n.pauseVideo(),Xe.media.paused=!0},Xe.media.stop=function(){n.stopVideo(),Xe.media.paused=!0},Xe.media.duration=n.getDuration(),Xe.media.paused=!0,Xe.media.currentTime=0,Xe.media.muted=n.isMuted(),_.title=n.getVideoData().title,Xe.supported.full&&Xe.media.querySelector("iframe").setAttribute("tabindex","-1"),ne(),C(Xe.media,"timeupdate"),C(Xe.media,"durationchange"),e.clearInterval(Ue.buffering),Ue.buffering=e.setInterval(function(){Xe.media.buffered=n.getVideoLoadedFraction(),(null===Xe.media.lastBuffered||Xe.media.lastBuffered=_.speeds.length&&(n=0),e=_.speeds[n]}else e=_.defaultSpeed}_.currentSpeed=e,Xe.media.playbackRate=e,Z({speed:e})}function pe(e){var t=0,n=Xe.media.paused,r=me();P.number(e)?t=e:P.object(e)&&a(["input","change"],e.type)&&(t=e.target.value/e.target.max*r),0>t?t=0:t>r&&(t=r),Ie(t);try{Xe.media.currentTime=t.toFixed(4)}catch(s){}if(a(_.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed.seekTo(t);break;case"vimeo":Xe.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Xe.embed.seekTo(1e3*t)}n&&ie(),C(Xe.media,"timeupdate"),Xe.media.seeking=!0}ze("Seeking to "+Xe.media.currentTime+" seconds"),D(t)}function me(){var e=parseInt(_.duration),t=0;return null===Xe.media.duration||isNaN(Xe.media.duration)||(t=Xe.media.duration),isNaN(e)?t:e}function fe(){m(Xe.container,_.classes.playing,!Xe.media.paused),m(Xe.container,_.classes.stopped,Xe.media.paused),Me(Xe.media.paused)}function ye(){I={x:e.pageXOffset||0,y:e.pageYOffset||0}}function be(){e.scrollTo(I.x,I.y)}function ve(e){var n=A.supportsFullScreen;if(n){if(!e||e.type!==A.fullScreenEventName)return A.isFullScreen(Xe.container)?A.cancelFullScreen():(ye(),A.requestFullScreen(Xe.container)),void(Xe.isFullscreen=A.isFullScreen(Xe.container));Xe.isFullscreen=A.isFullScreen(Xe.container)}else Xe.isFullscreen=!Xe.isFullscreen,t.body.style.overflow=Xe.isFullscreen?"hidden":"";m(Xe.container,_.classes.fullscreen.active,Xe.isFullscreen),X(Xe.isFullscreen),Xe.buttons&&Xe.buttons.fullscreen&&k(Xe.buttons.fullscreen,Xe.isFullscreen),C(Xe.container,Xe.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Xe.isFullscreen&&n&&be()}function ge(e){if(P["boolean"](e)||(e=!Xe.media.muted),k(Xe.buttons.mute,e),Xe.media.muted=e,0===Xe.media.volume&&he(_.volume),a(_.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed[Xe.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Xe.embed.setVolume(Xe.media.muted?0:parseFloat(_.volume/_.volumeMax))}C(Xe.media,"volumechange")}}function he(e){var t=_.volumeMax,n=_.volumeMin;if(P.undefined(e)&&(e=Xe.storage.volume),(null===e||isNaN(e))&&(e=_.volume),e>t&&(e=t),n>e&&(e=n),Xe.media.volume=parseFloat(e/t),Xe.volume.display&&(Xe.volume.display.value=e),a(_.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed.setVolume(100*Xe.media.volume);break;case"vimeo":case"soundcloud":Xe.embed.setVolume(Xe.media.volume)}C(Xe.media,"volumechange")}0===e?Xe.media.muted=!0:Xe.media.muted&&e>0&&ge()}function ke(e){var t=Xe.media.muted?0:Xe.media.volume*_.volumeMax;P.number(e)||(e=_.volumeStep),he(t+e)}function we(e){var t=Xe.media.muted?0:Xe.media.volume*_.volumeMax;P.number(e)||(e=_.volumeStep),he(t-e)}function xe(){var e=Xe.media.muted?0:Xe.media.volume*_.volumeMax;Xe.supported.full&&(Xe.volume.input&&(Xe.volume.input.value=e),Xe.volume.display&&(Xe.volume.display.value=e)),Z({volume:e}),m(Xe.container,_.classes.muted,0===e),Xe.supported.full&&Xe.buttons.mute&&k(Xe.buttons.mute,0===e)}function Te(e){Xe.supported.full&&Xe.buttons.captions&&(P["boolean"](e)||(e=-1===Xe.container.className.indexOf(_.classes.captions.active)),Xe.captionsEnabled=e,k(Xe.buttons.captions,Xe.captionsEnabled),m(Xe.container,_.classes.captions.active,Xe.captionsEnabled),C(Xe.container,Xe.captionsEnabled?"captionsenabled":"captionsdisabled",!0),Z({captionsEnabled:Xe.captionsEnabled}))}function _e(e){var t="waiting"===e.type;clearTimeout(Ue.loading),Ue.loading=setTimeout(function(){m(Xe.container,_.classes.loading,t),Me(t)},t?250:0)}function Se(e){if(Xe.supported.full){var t=Xe.progress.played,n=0,r=me();if(e)switch(e.type){case"timeupdate":case"seeking":if(Xe.controls.pressed)return;n=w(Xe.media.currentTime,r),"timeupdate"===e.type&&Xe.buttons.seek&&(Xe.buttons.seek.value=n);break;case"playing":case"progress":t=Xe.progress.buffer,n=function(){var e=Xe.media.buffered;return e&&e.length?w(e.end(0),r):P.number(e)?100*e:0}()}Ee(t,n)}}function Ee(e,t){if(Xe.supported.full){if(P.undefined(t)&&(t=0),P.undefined(e)){if(!Xe.progress||!Xe.progress.buffer)return;e=Xe.progress.buffer}P.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ce(e,t){if(t){isNaN(e)&&(e=0),Xe.secs=parseInt(e%60),Xe.mins=parseInt(e/60%60),Xe.hours=parseInt(e/60/60%60);var n=parseInt(me()/60/60%60)>0;Xe.secs=("0"+Xe.secs).slice(-2),Xe.mins=("0"+Xe.mins).slice(-2),t.innerHTML=(n?Xe.hours+":":"")+Xe.mins+":"+Xe.secs}}function Fe(){if(Xe.supported.full){var e=me()||0;!Xe.duration&&_.displayDuration&&Xe.media.paused&&Ce(e,Xe.currentTime),Xe.duration&&Ce(e,Xe.duration),Ne()}}function Ae(e){Ce(Xe.media.currentTime,Xe.currentTime),e&&"timeupdate"===e.type&&Xe.media.seeking||Se(e)}function Ie(e){P.number(e)||(e=0);var t=me(),n=w(e,t);Xe.progress&&Xe.progress.played&&(Xe.progress.played.value=n),Xe.buttons&&Xe.buttons.seek&&(Xe.buttons.seek.value=n)}function Ne(e){var t=me();if(_.tooltips.seek&&Xe.progress.container&&0!==t){var n=Xe.progress.container.getBoundingClientRect(),r=0,s=_.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!f(Xe.progress.tooltip,s))return;r=Xe.progress.tooltip.style.left.replace("%","")}0>r?r=0:r>100&&(r=100),Ce(t/100*r,Xe.progress.tooltip),Xe.progress.tooltip.style.left=r+"%",e&&a(["mouseenter","mouseleave"],e.type)&&m(Xe.progress.tooltip,s,"mouseenter"===e.type)}}function Pe(e){P.undefined(e)&&(e=Xe.storage.speed||_.defaultSpeed),de(e)}function Me(t){if(_.hideControls&&"audio"!==Xe.type){var n=0,r=!1,s=t,o=f(Xe.container,_.classes.loading);if(P["boolean"](t)||(t&&t.type?(r="enterfullscreen"===t.type,s=a(["mousemove","touchstart","mouseenter","focus"],t.type),a(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=f(Xe.container,_.classes.hideControls)),e.clearTimeout(Ue.hover),s||Xe.media.paused||o){if(m(Xe.container,_.classes.hideControls,!1),Xe.media.paused||o)return;Xe.browser.isTouch&&(n=3e3)}s&&Xe.media.paused||(Ue.hover=e.setTimeout(function(){(!Xe.controls.pressed&&!Xe.controls.hover||r)&&m(Xe.container,_.classes.hideControls,!0)},n))}}function Le(e){if(!P.undefined(e))return void Oe(e);var t;switch(Xe.type){case"youtube":t=Xe.embed.getVideoUrl();break;case"vimeo":Xe.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Xe.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Xe.media.currentSrc}return t||""}function Oe(e){function n(){if(Xe.embed=null,l(Xe.media),"video"===Xe.type&&Xe.videoContainer&&l(Xe.videoContainer),Xe.container&&Xe.container.removeAttribute("class"),"type"in e&&(Xe.type=e.type,"video"===Xe.type)){var n=e.sources[0];"type"in n&&a(_.types.embed,n.type)&&(Xe.type=n.type)}switch(Xe.supported=E(Xe.type),Xe.type){case"video":Xe.media=t.createElement("video");break;case"audio":Xe.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Xe.media=t.createElement("div"),Xe.embedId=e.sources[0].src}u(Xe.container,Xe.media),P["boolean"](e.autoplay)&&(_.autoplay=e.autoplay),a(_.types.html5,Xe.type)&&(_.crossorigin&&Xe.media.setAttribute("crossorigin",""),_.autoplay&&Xe.media.setAttribute("autoplay",""),"poster"in e&&Xe.media.setAttribute("poster",e.poster),_.loop&&Xe.media.setAttribute("loop","")),m(Xe.container,_.classes.fullscreen.active,Xe.isFullscreen),m(Xe.container,_.classes.captions.active,Xe.captionsEnabled),$(),a(_.types.html5,Xe.type)&&U("source",e.sources),ee(),a(_.types.html5,Xe.type)&&("tracks"in e&&U("track",e.tracks),Xe.media.load()),(a(_.types.html5,Xe.type)||a(_.types.embed,Xe.type)&&!Xe.supported.full)&&(We(),Ye()),_.title=e.title,K()}return P.object(e)&&"sources"in e&&e.sources.length?(m(Xe.container,_.classes.ready,!1),ie(),Ie(),Ee(),Re(),void De(n,!1)):void $e("Invalid source format")}function je(e){"video"===Xe.type&&Xe.media.setAttribute("poster",e)}function qe(){function n(){var e=le(),t=Xe.buttons[e?"play":"pause"],n=Xe.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=f(t,_.classes.tabFocus);setTimeout(function(){n.focus(),r&&(m(t,_.classes.tabFocus,!1),m(n,_.classes.tabFocus,!0))},100)}}function r(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Xe.buttons){var n=Xe.buttons[t];if(P.nodeList(n))for(var r=0;r0)&&(t?we(n):ke(n)),(e.deltaY>0||e.deltaX<0)&&(t?ke(n):we(n))})}function Ve(){if(g(Xe.media,"timeupdate seeking",Ae),g(Xe.media,"timeupdate",D),g(Xe.media,"durationchange loadedmetadata",Fe),g(Xe.media,"ended",function(){"video"===Xe.type&&_.showPosterOnEnd&&("video"===Xe.type&&R(),pe(),Xe.media.load())}),g(Xe.media,"progress playing",Se),g(Xe.media,"volumechange",xe),g(Xe.media,"play pause ended",fe),g(Xe.media,"waiting canplay seeked",_e),_.clickToPlay&&"audio"!==Xe.type){var e=Y("."+_.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){_.hideControls&&Xe.browser.isTouch&&!Xe.media.paused||(Xe.media.paused?oe():Xe.media.ended?(pe(),oe()):ie())})}_.disableContextMenu&&g(Xe.media,"contextmenu",function(e){e.preventDefault()}),g(Xe.media,_.events.concat(["keyup","keydown"]).join(" "),function(e){C(Xe.container,e.type,!0)})}function Re(){if(a(_.types.html5,Xe.type)){for(var e=Xe.media.querySelectorAll("source"),t=0;t=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],a=s.parentNode,o=s.nextSibling;return r.appendChild(s),o?a.insertBefore(r,o):a.appendChild(r),r}}function l(e){e&&e.parentNode.removeChild(e)}function u(e,t){e.insertBefore(t,e.firstChild)}function c(e,t){for(var n in t)e.setAttribute(n,P["boolean"](t[n])&&t[n]?"":t[n])}function d(e,n,r){var s=t.createElement(e);c(s,r),u(n,s)}function p(e){return e.replace(".","")}function m(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function f(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function y(e,n){var r=Element.prototype,s=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return s.call(e,n)}function b(e,t,n,r,s){g(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},s)}function v(e,t,n,r,s){var a=t.split(" ");if(P["boolean"](s)||(s=!1),e instanceof NodeList)for(var o=0;or;r++){var s=e[r];for(var a in s)s[a]&&s[a].constructor&&s[a].constructor===Object?(t[a]=t[a]||{},x(t[a],s[a])):t[a]=s[a]}return t}}function _(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},n="webkit o moz ms khtml".split(" ");if(P.undefined(t.cancelFullScreen))for(var r=0,s=n.length;s>r;r++){if(e.prefix=n[r],!P.undefined(t[e.prefix+"CancelFullScreen"])){e.supportsFullScreen=!0;break}if(!P.undefined(t.msExitFullscreen)&&t.msFullscreenEnabled){e.prefix="ms",e.supportsFullScreen=!0;break}}else e.supportsFullScreen=!0;return e.supportsFullScreen&&(e.fullScreenEventName="ms"===e.prefix?"MSFullscreenChange":e.prefix+"fullscreenchange",e.isFullScreen=function(e){switch(P.undefined(e)&&(e=t.body),this.prefix){case"":return t.fullscreenElement===e;case"moz":return t.mozFullScreenElement===e;default:return t[this.prefix+"FullscreenElement"]===e}},e.requestFullScreen=function(e){return P.undefined(e)&&(e=t.body),""===this.prefix?e.requestFullScreen():e[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]()},e.cancelFullScreen=function(){return""===this.prefix?t.cancelFullScreen():t[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]()},e.element=function(){return""===this.prefix?t.fullscreenElement:t[this.prefix+"FullscreenElement"]}),e}function T(v,T){function C(e,t,n,r){h(e,t,n,x({},r,{plyr:Be}))}function L(t,n){T.debug&&e.console&&(n=Array.prototype.slice.call(n),P.string(T.logPrefix)&&T.logPrefix.length&&n.unshift(T.logPrefix),console[t].apply(console,n))}function O(){return{url:T.iconUrl,absolute:0===T.iconUrl.indexOf("http")||Xe.browser.isIE}}function j(){var e=[],t=O(),n=(t.absolute?"":t.url)+"#"+T.iconPrefix;return a(T.controls,"play-large")&&e.push('"),e.push('
'),a(T.controls,"restart")&&e.push('"),a(T.controls,"rewind")&&e.push('"),a(T.controls,"play")&&e.push('",'"),a(T.controls,"fast-forward")&&e.push('"),a(T.controls,"progress")&&(e.push('','','','','',"0% "+T.i18n.buffered,""),T.tooltips.seek&&e.push('00:00'),e.push("")),a(T.controls,"current-time")&&e.push('',''+T.i18n.currentTime+"",'00:00',""),a(T.controls,"duration")&&e.push('',''+T.i18n.duration+"",'00:00',""),a(T.controls,"mute")&&e.push('"),a(T.controls,"volume")&&e.push('','",'','',""),a(T.controls,"captions")&&e.push('"),a(T.controls,"settings")&&e.push('
','",'","
"),a(T.controls,"fullscreen")&&e.push('"),e.push("
"),e.join("")}function q(){if(Xe.supported.full&&("audio"!==Xe.type||T.fullscreen.allowAudio)&&T.fullscreen.enabled){var e=A.supportsFullScreen;e||T.fullscreen.fallback&&!B()?(ze((e?"Native":"Fallback")+" fullscreen enabled"),m(Xe.container,T.classes.fullscreen.enabled,!0)):ze("Fullscreen not supported and fallback disabled"),Xe.buttons&&Xe.buttons.fullscreen&&k(Xe.buttons.fullscreen,!1),X()}}function V(){if("video"===Xe.type){Y(T.selectors.captions)||Xe.videoContainer.insertAdjacentHTML("afterbegin",'
'),Xe.usingTextTracks=!1,Xe.media.textTracks&&(Xe.usingTextTracks=!0);for(var e,t="",n=Xe.media.childNodes,r=0;r=10||Xe.browser.isFirefox&&Xe.browser.version>=31)&&(ze("Detected browser with known TextTrack issues - using manual fallback"),Xe.usingTextTracks=!1),Xe.usingTextTracks){ze("TextTracks supported");for(var o=0;o ");for(var r=0;rXe.captions.length-1){Xe.subcount=Xe.captions.length-1;break}Xe.media.currentTime.toFixed(1)>=n(Xe.captions[Xe.subcount][0])&&Xe.media.currentTime.toFixed(1)<=r(Xe.captions[Xe.subcount][0])?(Xe.currentCaption=Xe.captions[Xe.subcount][1],R(Xe.currentCaption)):R()}}function H(){if(Xe.buttons.captions){m(Xe.container,T.classes.captions.enabled,!0);var e=Xe.storage.captionsEnabled;P["boolean"](e)||(e=T.captions.defaultActive),e&&(m(Xe.container,T.classes.captions.active,!0),k(Xe.buttons.captions,!0))}}function W(e){return Xe.container.querySelectorAll(e)}function Y(e){return W(e)[0]}function B(){try{return e.self!==e.top}catch(t){return!0}}function X(){function e(e){9===e.which&&Xe.isFullscreen&&(e.target!==r||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),r.focus()):(e.preventDefault(),n.focus()))}var t=W("input:not([disabled]), button:not([disabled])"),n=t[0],r=t[t.length-1];g(Xe.container,"keydown",e)}function U(e,t){if(P.string(t))d(e,Xe.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)d(e,Xe.media,t[n])}function J(){if(T.loadSprite){var e=O();e.absolute?(ze("AJAX loading absolute SVG sprite"+(Xe.browser.isIE?" (due to IE)":"")),S(e.url,"sprite-plyr")):ze("Sprite will be used as external resource directly")}var n=T.html;ze("Injecting custom controls"),n||(n=j()),n=o(n,"{seektime}",T.seekTime),n=o(n,"{speed}",1===T.currentSpeed?"Normal":T.currentSpeed.toFixed(1)+"x"),n=o(n,"{lang}","English"),n=o(n,"{id}",Math.floor(1e4*Math.random()));var r;if(P.string(T.selectors.controls.container)&&(r=t.querySelector(T.selectors.controls.container)),P.htmlElement(r)||(r=Xe.container),r.insertAdjacentHTML("beforeend",n),T.tooltips.controls)for(var s=W([T.selectors.controls.wrapper," ",T.selectors.labels," .",T.classes.hidden].join("")),a=s.length-1;a>=0;a--){var i=s[a];m(i,T.classes.hidden,!1),m(i,T.classes.tooltip,!0)}}function z(){try{return Xe.controls=Y(T.selectors.controls.wrapper),Xe.buttons={},Xe.buttons.seek=Y(T.selectors.buttons.seek),Xe.buttons.play=W(T.selectors.buttons.play),Xe.buttons.pause=Y(T.selectors.buttons.pause),Xe.buttons.restart=Y(T.selectors.buttons.restart),Xe.buttons.rewind=Y(T.selectors.buttons.rewind),Xe.buttons.forward=Y(T.selectors.buttons.forward),Xe.buttons.fullscreen=Y(T.selectors.buttons.fullscreen),Xe.buttons.settings=Y(T.selectors.buttons.settings),Xe.buttons.mute=Y(T.selectors.buttons.mute),Xe.buttons.captions=Y(T.selectors.buttons.captions),Xe.progress={},Xe.progress.container=Y(T.selectors.progress.container),Xe.progress.buffer={},Xe.progress.buffer.bar=Y(T.selectors.progress.buffer),Xe.progress.buffer.text=Xe.progress.buffer.bar&&Xe.progress.buffer.bar.getElementsByTagName("span")[0],Xe.progress.played=Y(T.selectors.progress.played),Xe.progress.tooltip=Xe.progress.container&&Xe.progress.container.querySelector("."+T.classes.tooltip),Xe.volume={},Xe.volume.input=Y(T.selectors.volume.input),Xe.volume.display=Y(T.selectors.volume.display),Xe.duration=Y(T.selectors.duration),Xe.currentTime=Y(T.selectors.currentTime),Xe.seekTime=W(T.selectors.seekTime),!0}catch(e){return $e("It looks like there is a problem with your controls HTML"),G(!0),!1}}function $(){m(Xe.container,T.selectors.container.replace(".",""),Xe.supported.full)}function G(e){e&&a(T.types.html5,Xe.type)?Xe.media.setAttribute("controls",""):Xe.media.removeAttribute("controls")}function K(e){var t=T.i18n.play;if(P.string(T.title)&&T.title.length&&(t+=", "+T.title,Xe.container.setAttribute("aria-label",T.title)),Xe.supported.full&&Xe.buttons.play)for(var n=Xe.buttons.play.length-1;n>=0;n--)Xe.buttons.play[n].setAttribute("aria-label",t);P.htmlElement(e)&&e.setAttribute("title",T.i18n.frameTitle.replace("{title}",T.title))}function Q(){var t=null;Xe.storage={},M.supported&&T.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(T.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Z({volume:parseFloat(t)}):Xe.storage=JSON.parse(t)))}function Z(t){M.supported&&T.storage.enabled&&(x(Xe.storage,t),e.localStorage.setItem(T.storage.key,JSON.stringify(Xe.storage)))}function ee(){if(!Xe.media)return void $e("No media element found!");if(Xe.supported.full&&(m(Xe.container,T.classes.type.replace("{0}",Xe.type),!0),a(T.types.embed,Xe.type)&&m(Xe.container,T.classes.type.replace("{0}","video"),!0),m(Xe.container,T.classes.stopped,T.autoplay),m(Xe.ontainer,T.classes.isIos,Xe.browser.isIos),m(Xe.container,T.classes.isTouch,Xe.browser.isTouch),"video"===Xe.type)){var e=t.createElement("div");e.setAttribute("class",T.classes.videoWrapper),i(Xe.media,e),Xe.videoContainer=e}a(T.types.embed,Xe.type)&&te()}function te(){for(var n=t.createElement("div"),r=Xe.embedId,a=Xe.type+"-"+Math.floor(1e4*Math.random()),o=W('[id^="'+Xe.type+'-"]'),i=o.length-1;i>=0;i--)l(o[i]);if(m(Xe.media,T.classes.videoWrapper,!0),m(Xe.media,T.classes.embedWrapper,!0),"youtube"===Xe.type)Xe.media.appendChild(n),n.setAttribute("id",a),P.object(e.YT)?re(r,n):(s(T.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){re(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Xe.type)if(Xe.supported.full?Xe.media.appendChild(n):n=Xe.media,n.setAttribute("id",a),P.object(e.Vimeo))se(r,n);else{s(T.urls.vimeo.api);var u=e.setInterval(function(){P.object(e.Vimeo)&&(e.clearInterval(u),se(r,n))},50)}else if("soundcloud"===Xe.type){var d=t.createElement("iframe");d.loaded=!1,g(d,"load",function(){d.loaded=!0}),c(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:a}),n.appendChild(d),Xe.media.appendChild(n),e.SC||s(T.urls.soundcloud.api);var p=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(p),ae.call(d))},50)}}function ne(){Xe.supported.full&&(We(),Ye()),K(Y("iframe"))}function re(t,n){Xe.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:T.autoplay?1:0,controls:Xe.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:T.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){C(Xe.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Xe.media.play=function(){n.playVideo(),Xe.media.paused=!1},Xe.media.pause=function(){n.pauseVideo(),Xe.media.paused=!0},Xe.media.stop=function(){n.stopVideo(),Xe.media.paused=!0},Xe.media.duration=n.getDuration(),Xe.media.paused=!0,Xe.media.currentTime=0,Xe.media.muted=n.isMuted(),T.title=n.getVideoData().title,Xe.supported.full&&Xe.media.querySelector("iframe").setAttribute("tabindex","-1"),ne(),C(Xe.media,"timeupdate"),C(Xe.media,"durationchange"),e.clearInterval(Ue.buffering),Ue.buffering=e.setInterval(function(){Xe.media.buffered=n.getVideoLoadedFraction(),(null===Xe.media.lastBuffered||Xe.media.lastBuffered=T.speeds.length&&(n=0),e=T.speeds[n]}else e=T.defaultSpeed}T.currentSpeed=e,Xe.media.playbackRate=e,Z({speed:e})}function pe(e){var t=0,n=Xe.media.paused,r=me();P.number(e)?t=e:P.object(e)&&a(["input","change"],e.type)&&(t=e.target.value/e.target.max*r),0>t?t=0:t>r&&(t=r),Ie(t);try{Xe.media.currentTime=t.toFixed(4)}catch(s){}if(a(T.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed.seekTo(t);break;case"vimeo":Xe.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Xe.embed.seekTo(1e3*t)}n&&ie(),C(Xe.media,"timeupdate"),Xe.media.seeking=!0}ze("Seeking to "+Xe.media.currentTime+" seconds"),D(t)}function me(){var e=parseInt(T.duration),t=0;return null===Xe.media.duration||isNaN(Xe.media.duration)||(t=Xe.media.duration),isNaN(e)?t:e}function fe(){m(Xe.container,T.classes.playing,!Xe.media.paused),m(Xe.container,T.classes.stopped,Xe.media.paused),Me(Xe.media.paused)}function ye(){I={x:e.pageXOffset||0,y:e.pageYOffset||0}}function be(){e.scrollTo(I.x,I.y)}function ve(e){var n=A.supportsFullScreen;if(n){if(!e||e.type!==A.fullScreenEventName)return A.isFullScreen(Xe.container)?A.cancelFullScreen():(ye(),A.requestFullScreen(Xe.container)),void(Xe.isFullscreen=A.isFullScreen(Xe.container));Xe.isFullscreen=A.isFullScreen(Xe.container)}else Xe.isFullscreen=!Xe.isFullscreen,t.body.style.overflow=Xe.isFullscreen?"hidden":"";m(Xe.container,T.classes.fullscreen.active,Xe.isFullscreen),X(Xe.isFullscreen),Xe.buttons&&Xe.buttons.fullscreen&&k(Xe.buttons.fullscreen,Xe.isFullscreen),C(Xe.container,Xe.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Xe.isFullscreen&&n&&be()}function ge(e){if(P["boolean"](e)||(e=!Xe.media.muted),k(Xe.buttons.mute,e),Xe.media.muted=e,0===Xe.media.volume&&he(T.volume),a(T.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed[Xe.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Xe.embed.setVolume(Xe.media.muted?0:parseFloat(T.volume/T.volumeMax))}C(Xe.media,"volumechange")}}function he(e){var t=T.volumeMax,n=T.volumeMin;if(P.undefined(e)&&(e=Xe.storage.volume),(null===e||isNaN(e))&&(e=T.volume),e>t&&(e=t),n>e&&(e=n),Xe.media.volume=parseFloat(e/t),Xe.volume.display&&(Xe.volume.display.value=e),a(T.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed.setVolume(100*Xe.media.volume);break;case"vimeo":case"soundcloud":Xe.embed.setVolume(Xe.media.volume)}C(Xe.media,"volumechange")}0===e?Xe.media.muted=!0:Xe.media.muted&&e>0&&ge()}function ke(e){var t=Xe.media.muted?0:Xe.media.volume*T.volumeMax;P.number(e)||(e=T.volumeStep),he(t+e)}function we(e){var t=Xe.media.muted?0:Xe.media.volume*T.volumeMax;P.number(e)||(e=T.volumeStep),he(t-e)}function xe(){var e=Xe.media.muted?0:Xe.media.volume*T.volumeMax;Xe.supported.full&&(Xe.volume.input&&(Xe.volume.input.value=e),Xe.volume.display&&(Xe.volume.display.value=e)),Z({volume:e}),m(Xe.container,T.classes.muted,0===e),Xe.supported.full&&Xe.buttons.mute&&k(Xe.buttons.mute,0===e)}function _e(e){Xe.supported.full&&Xe.buttons.captions&&(P["boolean"](e)||(e=-1===Xe.container.className.indexOf(T.classes.captions.active)),Xe.captionsEnabled=e,k(Xe.buttons.captions,Xe.captionsEnabled),m(Xe.container,T.classes.captions.active,Xe.captionsEnabled),C(Xe.container,Xe.captionsEnabled?"captionsenabled":"captionsdisabled",!0),Z({captionsEnabled:Xe.captionsEnabled}))}function Te(e){var t="waiting"===e.type;clearTimeout(Ue.loading),Ue.loading=setTimeout(function(){m(Xe.container,T.classes.loading,t),Me(t)},t?250:0)}function Se(e){if(Xe.supported.full){var t=Xe.progress.played,n=0,r=me();if(e)switch(e.type){case"timeupdate":case"seeking":if(Xe.controls.pressed)return;n=w(Xe.media.currentTime,r),"timeupdate"===e.type&&Xe.buttons.seek&&(Xe.buttons.seek.value=n);break;case"playing":case"progress":t=Xe.progress.buffer,n=function(){var e=Xe.media.buffered;return e&&e.length?w(e.end(0),r):P.number(e)?100*e:0}()}Ee(t,n)}}function Ee(e,t){if(Xe.supported.full){if(P.undefined(t)&&(t=0),P.undefined(e)){if(!Xe.progress||!Xe.progress.buffer)return;e=Xe.progress.buffer}P.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ce(e,t){if(t){isNaN(e)&&(e=0),Xe.secs=parseInt(e%60),Xe.mins=parseInt(e/60%60),Xe.hours=parseInt(e/60/60%60);var n=parseInt(me()/60/60%60)>0;Xe.secs=("0"+Xe.secs).slice(-2),Xe.mins=("0"+Xe.mins).slice(-2),t.innerHTML=(n?Xe.hours+":":"")+Xe.mins+":"+Xe.secs}}function Fe(){if(Xe.supported.full){var e=me()||0;!Xe.duration&&T.displayDuration&&Xe.media.paused&&Ce(e,Xe.currentTime),Xe.duration&&Ce(e,Xe.duration),Ne()}}function Ae(e){Ce(Xe.media.currentTime,Xe.currentTime),e&&"timeupdate"===e.type&&Xe.media.seeking||Se(e)}function Ie(e){P.number(e)||(e=0);var t=me(),n=w(e,t);Xe.progress&&Xe.progress.played&&(Xe.progress.played.value=n),Xe.buttons&&Xe.buttons.seek&&(Xe.buttons.seek.value=n)}function Ne(e){var t=me();if(T.tooltips.seek&&Xe.progress.container&&0!==t){var n=Xe.progress.container.getBoundingClientRect(),r=0,s=T.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!f(Xe.progress.tooltip,s))return;r=Xe.progress.tooltip.style.left.replace("%","")}0>r?r=0:r>100&&(r=100),Ce(t/100*r,Xe.progress.tooltip),Xe.progress.tooltip.style.left=r+"%",e&&a(["mouseenter","mouseleave"],e.type)&&m(Xe.progress.tooltip,s,"mouseenter"===e.type)}}function Pe(e){P.undefined(e)&&(e=Xe.storage.speed||T.defaultSpeed),de(e)}function Me(t){if(T.hideControls&&"audio"!==Xe.type){var n=0,r=!1,s=t,o=f(Xe.container,T.classes.loading);if(P["boolean"](t)||(t&&t.type?(r="enterfullscreen"===t.type,s=a(["mousemove","touchstart","mouseenter","focus"],t.type),a(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=f(Xe.container,T.classes.hideControls)),e.clearTimeout(Ue.hover),s||Xe.media.paused||o){if(m(Xe.container,T.classes.hideControls,!1),Xe.media.paused||o)return;Xe.browser.isTouch&&(n=3e3)}s&&Xe.media.paused||(Ue.hover=e.setTimeout(function(){(!Xe.controls.pressed&&!Xe.controls.hover||r)&&m(Xe.container,T.classes.hideControls,!0)},n))}}function Le(e){if(!P.undefined(e))return void Oe(e);var t;switch(Xe.type){case"youtube":t=Xe.embed.getVideoUrl();break;case"vimeo":Xe.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Xe.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Xe.media.currentSrc}return t||""}function Oe(e){function n(){if(Xe.embed=null,l(Xe.media),"video"===Xe.type&&Xe.videoContainer&&l(Xe.videoContainer),Xe.container&&Xe.container.removeAttribute("class"),"type"in e&&(Xe.type=e.type,"video"===Xe.type)){var n=e.sources[0];"type"in n&&a(T.types.embed,n.type)&&(Xe.type=n.type)}switch(Xe.supported=E(Xe.type),Xe.type){case"video":Xe.media=t.createElement("video");break;case"audio":Xe.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Xe.media=t.createElement("div"),Xe.embedId=e.sources[0].src}u(Xe.container,Xe.media),P["boolean"](e.autoplay)&&(T.autoplay=e.autoplay),a(T.types.html5,Xe.type)&&(T.crossorigin&&Xe.media.setAttribute("crossorigin",""),T.autoplay&&Xe.media.setAttribute("autoplay",""),"poster"in e&&Xe.media.setAttribute("poster",e.poster),T.loop&&Xe.media.setAttribute("loop","")),m(Xe.container,T.classes.fullscreen.active,Xe.isFullscreen),m(Xe.container,T.classes.captions.active,Xe.captionsEnabled),$(),a(T.types.html5,Xe.type)&&U("source",e.sources),ee(),a(T.types.html5,Xe.type)&&("tracks"in e&&U("track",e.tracks),Xe.media.load()),(a(T.types.html5,Xe.type)||a(T.types.embed,Xe.type)&&!Xe.supported.full)&&(We(),Ye()),T.title=e.title,K()}return P.object(e)&&"sources"in e&&e.sources.length?(m(Xe.container,T.classes.ready,!1),ie(),Ie(),Ee(),Re(),void De(n,!1)):void $e("Invalid source format")}function je(e){"video"===Xe.type&&Xe.media.setAttribute("poster",e)}function qe(){function n(){var e=le(),t=Xe.buttons[e?"play":"pause"],n=Xe.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=f(t,T.classes.tabFocus);setTimeout(function(){n.focus(),r&&(m(t,T.classes.tabFocus,!1),m(n,T.classes.tabFocus,!0))},100)}}function r(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Xe.buttons){var n=Xe.buttons[t];if(P.nodeList(n))for(var r=0;r0)&&(t?we(n):ke(n)),(e.deltaY>0||e.deltaX<0)&&(t?ke(n):we(n))})}function Ve(){if(g(Xe.media,"timeupdate seeking",Ae),g(Xe.media,"timeupdate",D),g(Xe.media,"durationchange loadedmetadata",Fe),g(Xe.media,"ended",function(){"video"===Xe.type&&T.showPosterOnEnd&&("video"===Xe.type&&R(),pe(),Xe.media.load())}),g(Xe.media,"progress playing",Se),g(Xe.media,"volumechange",xe),g(Xe.media,"play pause ended",fe),g(Xe.media,"waiting canplay seeked",Te),T.clickToPlay&&"audio"!==Xe.type){var e=Y("."+T.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){T.hideControls&&Xe.browser.isTouch&&!Xe.media.paused||(Xe.media.paused?oe():Xe.media.ended?(pe(),oe()):ie())})}T.disableContextMenu&&g(Xe.media,"contextmenu",function(e){e.preventDefault()}),g(Xe.media,T.events.concat(["keyup","keydown"]).join(" "),function(e){C(Xe.container,e.type,!0)})}function Re(){if(a(T.types.html5,Xe.type)){for(var e=Xe.media.querySelectorAll("source"),t=0;t{speed}
', '', '', + '
  • ', + '', + '
  • ', '', '', '' diff --git a/src/less/plyr.less b/src/less/plyr.less index a3dd8e83..20550b80 100644 --- a/src/less/plyr.less +++ b/src/less/plyr.less @@ -482,12 +482,12 @@ right: -5px; margin-bottom: 10px; animation: plyr-popup .2s ease; - background: fade(@plyr-video-controls-bg, 90%); + background: @plyr-menu-bg; box-shadow: 0 1px 0 fade(#000, 20%); border-radius: 4px; white-space: nowrap; text-align: left; - color: @plyr-video-control-color; + color: @plyr-menu-color; font-size: @plyr-font-size-small; ul { @@ -500,7 +500,7 @@ display: flex; width: 100%; padding: 10px 30px 10px 12px; - color: @plyr-video-control-color; + color: @plyr-menu-color; font-weight: 600; // Arrow @@ -511,7 +511,7 @@ transform: translateY(-50%); right: 5px; border: 5px solid transparent; - border-left-color: fade(@plyr-video-control-color, 80%); + border-left-color: fade(@plyr-menu-color, 80%); } } @@ -520,7 +520,7 @@ margin-left: auto; padding-left: 25px; font-weight: 400; - color: fade(@plyr-video-control-color, 80%); + color: fade(@plyr-menu-color, 80%); } // Arrow @@ -532,7 +532,7 @@ height: 0; width: 0; border: 6px solid transparent; - border-top-color: fade(@plyr-video-controls-bg, 90%); + border-top-color: @plyr-menu-bg; } } } diff --git a/src/less/variables.less b/src/less/variables.less index 8a601571..c7eab243 100644 --- a/src/less/variables.less +++ b/src/less/variables.less @@ -38,12 +38,17 @@ @plyr-audio-control-bg-hover: @plyr-color-main; // Tooltips -@plyr-tooltip-bg: fade(#343f4a, 85%); +@plyr-tooltip-bg: fade(#343f4a, 90%); @plyr-tooltip-color: #fff; @plyr-tooltip-padding: (@plyr-control-spacing / 2); @plyr-tooltip-arrow-size: 4px; @plyr-tooltip-radius: 3px; +// Menus +@plyr-menu-bg: @plyr-tooltip-bg; +@plyr-menu-color: @plyr-tooltip-color; +@plyr-menu-arrow-size: 6px; + // Progress @plyr-progress-loading-size: 25px; @plyr-progress-loading-bg: fade(#343f4a, 20%); From d638cdcdd346b964ef0e782e4111adbe7877f05e Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 13 Sep 2016 00:16:27 +1000 Subject: [PATCH 10/70] Started on PIP support --- demo/dist/demo.css | 2 +- dist/plyr.css | 2 +- dist/plyr.js | 4 +- src/js/plyr.js | 221 +++++++++++++++++++++++---------------------- src/less/plyr.less | 5 +- 5 files changed, 121 insertions(+), 113 deletions(-) diff --git a/demo/dist/demo.css b/demo/dist/demo.css index cf8073a7..a9b2f5bc 100644 --- a/demo/dist/demo.css +++ b/demo/dist/demo.css @@ -1 +1 @@ -/*! normalize.css v2.1.3 | MIT License | git.io/normalize */a.logo,img,legend{border:0}a,h1,h2{color:#3498db}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,small,summary{display:block}body,figure,li,ul{margin:0}[hidden],template{display:none}li,nav ul,ul{list-style:none;padding:0}legend,li,nav ul,ul{padding:0}.btn__bar,sub,sup{position:relative}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:0 0;text-decoration:none;border-bottom:1px dotted currentColor;transition:background .3s ease,color .3s ease,border .3s ease}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}.btn__bar,nav li{white-space:nowrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@-webkit-keyframes fade-in{0%{opacity:0}100%{opacity:1}}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-medium.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-medium.woff) format("woff");font-style:normal;font-weight:500}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-bold.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-bold.woff) format("woff");font-style:normal;font-weight:700}html{font-size:100%;height:100%;background:fixed #f2f5f7}body{font-family:Avenir,"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.5;text-align:center;color:#55646b;font-weight:500;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding:10px}h1,h2{letter-spacing:-.025em;margin:0 0 10px;line-height:1.2;font-weight:700}h1{font-size:64px;font-size:4rem}p,small{margin:0 0 20px}small{padding:0 10px;font-size:14px;font-size:.875rem}a:focus,a:hover{color:#343f4a;border-bottom-color:transparent}a:focus{outline:#343f4a dotted thin;outline-offset:1px}.color--vimeo{color:#19b7ed}.color--youtube{color:#cc181e}*,::after,::before{box-sizing:border-box}.btn__bar ul,nav li{display:inline-block}header{padding:20px;margin-bottom:20px}header p{font-size:18px;font-size:1.125rem}section{max-width:1200px;margin:0 auto 20px}@media (min-width:480px){header{padding-top:60px;padding-bottom:60px}section{margin-bottom:40px}}.icon{fill:currentColor;width:18px;height:18px;vertical-align:-3px}.btn,.btn__count,.error main,video{vertical-align:middle}a svg,button svg,label svg{pointer-events:none}.btn .icon,a .icon{margin-right:10px}.btn:not(.btn-large) .icon{width:16px;height:16px}nav ul{margin:0;font-size:0}nav li{margin-top:10px;font-size:16px;font-size:1rem}nav li+li{margin-left:20px}.btn__bar{margin:0 auto 20px;max-width:1200px}.btn__bar::before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background:#dbe3e8}.btn__bar ul{position:relative;z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn__bar li{margin:0}.btn__bar li:first-child .btn{border-radius:4px 0 0 4px}.btn__bar li:last-child .btn{border-radius:0 4px 4px 0}.btn__bar li+li .btn{margin-left:-1px}.btn__bar li.active .btn{position:relative;z-index:1}.btn__bar li.active .btn .icon{color:inherit}.btn__bar li.active+li .btn:hover{z-index:0}.btn__bar .btn{position:relative;display:block;border-radius:0}.btn__bar .btn:focus,.btn__bar .btn:hover{z-index:1}@media (min-width:560px){.btn__bar{margin-bottom:40px}}.btn,.btn__count{display:inline-block;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:700}.btn{padding:10px 12px;background:linear-gradient(#f8fafb,#e9eef1);border:1px solid #cbd0d3;box-shadow:0 1px 1px rgba(0,0,0,.05);text-shadow:0 1px 1px #fff;color:#55646b;transition:background .1s ease,color .1s ease;font-size:14px;font-size:.875rem}.btn:focus,.btn:hover{border-color:#b5bcc0;color:#55646b;outline:0}.btn--large{padding:10px 20px;font-size:16px;font-size:1rem}.btn--primary,.btn__bar li.active .btn{background-image:linear-gradient(#3498db,#258cd1);background-color:#3498db;border-color:#217dbb;box-shadow:0 1px 1px rgba(0,0,0,.15);text-shadow:0 1px 1px rgba(0,0,0,.1);color:#fff}.btn--primary:focus,.btn--primary:hover{color:#fff;border-color:#196090}.btn--youtube .icon{color:#cc181e}.btn--vimeo .icon{color:#19b7ed}.btn--twitter .icon{color:#4BAAF4}.btn__count{position:relative;margin-left:10px;padding:10px 15px;background:#fff;border:1px solid #cbd0d3}.btn__count::before,.plyr__video-wrapper::after{content:"";position:absolute}.btn__count::before{display:block;width:8px;height:8px;left:1px;top:50%;margin-top:-4px;background:inherit;border:inherit;border-width:1px 0 0 1px;-webkit-transform:rotate(-45deg) translate(-50%,-50%);transform:rotate(-45deg) translate(-50%,-50%)}.error body,html.error{height:100%}.error body{width:100%;display:table;table-layout:fixed}.error main{display:table-cell;width:100%}video{max-width:100%}.plyr{margin:0 auto;border-radius:6px}.plyr--audio{max-width:520px}.plyr__video-wrapper::after{pointer-events:none;top:0;bottom:0;left:0;right:0;border:1px solid rgba(0,0,0,.15);border-radius:inherit}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:5px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block} \ No newline at end of file +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */a.logo,img,legend{border:0}a,h1,h2{color:#3498db}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,small,summary{display:block}body,figure,li,ul{margin:0}[hidden],template{display:none}li,nav ul,ul{list-style:none;padding:0}legend,li,nav ul,ul{padding:0}.btn__bar,sub,sup{position:relative}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:0 0;text-decoration:none;border-bottom:1px dotted currentColor;transition:background .3s ease,color .3s ease,border .3s ease}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}.btn__bar,nav li{white-space:nowrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-medium.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-medium.woff) format("woff");font-style:normal;font-weight:500}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-bold.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-bold.woff) format("woff");font-style:normal;font-weight:700}html{font-size:100%;height:100%;background:fixed #f2f5f7}body{font-family:Avenir,"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.5;text-align:center;color:#55646b;font-weight:500;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding:10px}h1,h2{letter-spacing:-.025em;margin:0 0 10px;line-height:1.2;font-weight:700}h1{font-size:64px;font-size:4rem}p,small{margin:0 0 20px}small{padding:0 10px;font-size:14px;font-size:.875rem}a:focus,a:hover{color:#343f4a;border-bottom-color:transparent}a:focus{outline:#343f4a dotted thin;outline-offset:1px}.color--vimeo{color:#19b7ed}.color--youtube{color:#cc181e}*,::after,::before{box-sizing:border-box}.btn__bar ul,nav li{display:inline-block}header{padding:20px;margin-bottom:20px}header p{font-size:18px;font-size:1.125rem}section{max-width:1200px;margin:0 auto 20px}@media (min-width:480px){header{padding-top:60px;padding-bottom:60px}section{margin-bottom:40px}}.icon{fill:currentColor;width:18px;height:18px;vertical-align:-3px}.btn,.btn__count,.error main,video{vertical-align:middle}a svg,button svg,label svg{pointer-events:none}.btn .icon,a .icon{margin-right:10px}.btn:not(.btn-large) .icon{width:16px;height:16px}nav ul{margin:0;font-size:0}nav li{margin-top:10px;font-size:16px;font-size:1rem}nav li+li{margin-left:20px}.btn__bar{margin:0 auto 20px;max-width:1200px}.btn__bar::before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background:#dbe3e8}.btn__bar ul{position:relative;z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn__bar li{margin:0}.btn__bar li:first-child .btn{border-radius:4px 0 0 4px}.btn__bar li:last-child .btn{border-radius:0 4px 4px 0}.btn__bar li+li .btn{margin-left:-1px}.btn__bar li.active .btn{position:relative;z-index:1}.btn__bar li.active .btn .icon{color:inherit}.btn__bar li.active+li .btn:hover{z-index:0}.btn__bar .btn{position:relative;display:block;border-radius:0}.btn__bar .btn:focus,.btn__bar .btn:hover{z-index:1}@media (min-width:560px){.btn__bar{margin-bottom:40px}}.btn,.btn__count{display:inline-block;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:700}.btn{padding:10px 12px;background:linear-gradient(#f8fafb,#e9eef1);border:1px solid #cbd0d3;box-shadow:0 1px 1px rgba(0,0,0,.05);text-shadow:0 1px 1px #fff;color:#55646b;transition:background .1s ease,color .1s ease;font-size:14px;font-size:.875rem}.btn:focus,.btn:hover{border-color:#b5bcc0;color:#55646b;outline:0}.btn--large{padding:10px 20px;font-size:16px;font-size:1rem}.btn--primary,.btn__bar li.active .btn{background-image:linear-gradient(#3498db,#258cd1);background-color:#3498db;border-color:#217dbb;box-shadow:0 1px 1px rgba(0,0,0,.15);text-shadow:0 1px 1px rgba(0,0,0,.1);color:#fff}.btn--primary:focus,.btn--primary:hover{color:#fff;border-color:#196090}.btn--youtube .icon{color:#cc181e}.btn--vimeo .icon{color:#19b7ed}.btn--twitter .icon{color:#4BAAF4}.btn__count{position:relative;margin-left:10px;padding:10px 15px;background:#fff;border:1px solid #cbd0d3}.btn__count::before,.plyr__video-wrapper::after{content:"";position:absolute}.btn__count::before{display:block;width:8px;height:8px;left:1px;top:50%;margin-top:-4px;background:inherit;border:inherit;border-width:1px 0 0 1px;transform:rotate(-45deg) translate(-50%,-50%)}.error body,html.error{height:100%}.error body{width:100%;display:table;table-layout:fixed}.error main{display:table-cell;width:100%}video{max-width:100%}.plyr{margin:0 auto;border-radius:6px}.plyr--audio{max-width:520px}.plyr__video-wrapper::after{pointer-events:none;top:0;bottom:0;left:0;right:0;border:1px solid rgba(0,0,0,.15);border-radius:inherit}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:5px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block} \ No newline at end of file diff --git a/dist/plyr.css b/dist/plyr.css index 8221b232..f4de4802 100644 --- a/dist/plyr.css +++ b/dist/plyr.css @@ -1 +1 @@ -.plyr input[type=range]:focus,.plyr:focus{outline:0}.plyr .plyr__video-embed iframe,.plyr__tooltip{pointer-events:none}@-webkit-keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-progress{to{background-position:25px 0}}@-webkit-keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;-webkit-transform:scale(1.25);transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;-webkit-transform:translateY(-35.95%);transform:translateY(-35.95%)}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;-webkit-transform:translateY(-40px);transform:translateY(-40px);transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease;color:#fff;font-size:16px;text-align:center;font-weight:400}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(52,63,74,.85);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{-webkit-transform:translateY(-15px);transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}.plyr__controls .plyr__menu+button,.plyr__controls>button+.plyr__menu,.plyr__controls>button+button{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__menu__container,.plyr__tooltip{bottom:100%;background:rgba(52,63,74,.9);font-size:14px}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__menu{position:relative}.plyr__menu button[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;right:-5px;margin-bottom:10px;-webkit-animation:plyr-popup .2s ease;animation:plyr-popup .2s ease;box-shadow:0 1px 0 rgba(0,0,0,.2);border-radius:4px;white-space:nowrap;text-align:left;color:#fff}.plyr__menu__container ul{margin:0;padding:5px;list-style:none}.plyr__menu__container button{display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;padding:10px 30px 10px 12px;color:#fff;font-weight:600}.plyr__menu__container button::after{content:"";position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);right:5px;border:5px solid transparent;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__value{margin-left:auto;padding-left:25px;font-weight:400;color:rgba(255,255,255,.8)}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__tooltip{position:absolute;z-index:2;margin-bottom:10px;padding:5px 7.5px;opacity:0;border-radius:3px;color:#fff;line-height:1.3;-webkit-transform:translate(-50%,10px) scale(.8);transform:translate(-50%,10px) scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;transition:opacity .2s .1s ease,-webkit-transform .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease,-webkit-transform .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(52,63,74,.9);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;-webkit-transform:translate(-50%,0) scale(1);transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls>button:first-child .plyr__tooltip{left:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:0 100%;transform-origin:0 100%}.plyr__controls>button:first-child .plyr__tooltip::before{left:16px}.plyr__controls>button:last-child .plyr__tooltip{right:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.plyr__controls>button:last-child .plyr__tooltip::before{left:auto;right:16px;-webkit-transform:translateX(50%);transform:translateX(50%)}.plyr__controls>button:first-child .plyr__tooltip--visible,.plyr__controls>button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:first-child:hover .plyr__tooltip,.plyr__controls>button:last-child .plyr__tooltip--visible,.plyr__controls>button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:last-child:hover .plyr__tooltip{-webkit-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-webkit-flex:1;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{-webkit-animation:plyr-progress 1s linear infinite;animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)} \ No newline at end of file +.plyr input[type=range]:focus,.plyr:focus{outline:0}.plyr .plyr__video-embed iframe,.plyr__tooltip{pointer-events:none}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{from{transform:translateY(10px);opacity:.5}to{transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;font-weight:500;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;transform:translateY(-35.95%)}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;transform:translateY(-40px);transition:transform .3s ease;color:#fff;font-size:16px;text-align:center}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(52,63,74,.85);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}.plyr__controls .plyr__menu+button,.plyr__controls>button+.plyr__menu,.plyr__controls>button+button{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__menu__container,.plyr__tooltip{bottom:100%;background:rgba(52,63,74,.9);font-size:14px}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__menu{position:relative}.plyr__menu button[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;right:-5px;margin-bottom:10px;animation:plyr-popup .2s ease;box-shadow:0 1px 0 rgba(0,0,0,.2);border-radius:4px;white-space:nowrap;text-align:left;color:#fff}.plyr__menu__container ul{margin:0;padding:5px;list-style:none}.plyr__menu__container button{display:-ms-flexbox;display:flex;width:100%;padding:10px 30px 10px 12px;color:#fff;font-weight:600}.plyr__menu__container button::after{content:"";position:absolute;top:50%;transform:translateY(-50%);right:5px;border:5px solid transparent;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__value{margin-left:auto;padding-left:25px;font-weight:500;color:rgba(255,255,255,.8)}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__tooltip{position:absolute;z-index:2;margin-bottom:10px;padding:5px 7.5px;opacity:0;border-radius:3px;color:#fff;font-weight:500;line-height:1.3;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(52,63,74,.9);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls>button:first-child .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>button:first-child .plyr__tooltip::before{left:16px}.plyr__controls>button:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>button:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>button:first-child .plyr__tooltip--visible,.plyr__controls>button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:first-child:hover .plyr__tooltip,.plyr__controls>button:last-child .plyr__tooltip--visible,.plyr__controls>button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)} \ No newline at end of file diff --git a/dist/plyr.js b/dist/plyr.js index f27bd94a..b0ce1b6c 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,r,s=navigator.userAgent,a=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,d=!1;return-1!==navigator.appVersion.indexOf("Windows NT")&&-1!==navigator.appVersion.indexOf("rv:11")?(l=!0,a="IE",o="11"):-1!==(n=s.indexOf("MSIE"))?(l=!0,a="IE",o=s.substring(n+5)):-1!==(n=s.indexOf("Chrome"))?(c=!0,a="Chrome",o=s.substring(n+7)):-1!==(n=s.indexOf("Safari"))?(d=!0,a="Safari",o=s.substring(n+7),-1!==(n=s.indexOf("Version"))&&(o=s.substring(n+8))):-1!==(n=s.indexOf("Firefox"))?(u=!0,a="Firefox",o=s.substring(n+8)):(e=s.lastIndexOf(" ")+1)<(n=s.lastIndexOf("/"))&&(a=s.substring(e,n),o=s.substring(n+1),a.toLowerCase()===a.toUpperCase()&&(a=navigator.appName)),-1!==(r=o.indexOf(";"))&&(o=o.substring(0,r)),-1!==(r=o.indexOf(" "))&&(o=o.substring(0,r)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:a,version:i,isIE:l,isFirefox:u,isChrome:c,isSafari:d,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function r(e,t){var n=e.media;if("video"===e.type)switch(t){case"video/webm":return!(!n.canPlayType||!n.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,""));case"video/mp4":return!(!n.canPlayType||!n.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,""));case"video/ogg":return!(!n.canPlayType||!n.canPlayType('video/ogg; codecs="theora"').replace(/no/,""))}else if("audio"===e.type)switch(t){case"audio/mpeg":return!(!n.canPlayType||!n.canPlayType("audio/mpeg;").replace(/no/,""));case"audio/ogg":return!(!n.canPlayType||!n.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,""));case"audio/wav":return!(!n.canPlayType||!n.canPlayType('audio/wav; codecs="1"').replace(/no/,""))}return!1}function s(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var r=t.getElementsByTagName("script")[0];r.parentNode.insertBefore(n,r)}}function a(e,t){return Array.prototype.indexOf&&-1!==e.indexOf(t)}function o(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function i(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],a=s.parentNode,o=s.nextSibling;return r.appendChild(s),o?a.insertBefore(r,o):a.appendChild(r),r}}function l(e){e&&e.parentNode.removeChild(e)}function u(e,t){e.insertBefore(t,e.firstChild)}function c(e,t){for(var n in t)e.setAttribute(n,P["boolean"](t[n])&&t[n]?"":t[n])}function d(e,n,r){var s=t.createElement(e);c(s,r),u(n,s)}function p(e){return e.replace(".","")}function m(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function f(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function y(e,n){var r=Element.prototype,s=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return s.call(e,n)}function b(e,t,n,r,s){g(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},s)}function v(e,t,n,r,s){var a=t.split(" ");if(P["boolean"](s)||(s=!1),e instanceof NodeList)for(var o=0;or;r++){var s=e[r];for(var a in s)s[a]&&s[a].constructor&&s[a].constructor===Object?(t[a]=t[a]||{},x(t[a],s[a])):t[a]=s[a]}return t}}function _(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},n="webkit o moz ms khtml".split(" ");if(P.undefined(t.cancelFullScreen))for(var r=0,s=n.length;s>r;r++){if(e.prefix=n[r],!P.undefined(t[e.prefix+"CancelFullScreen"])){e.supportsFullScreen=!0;break}if(!P.undefined(t.msExitFullscreen)&&t.msFullscreenEnabled){e.prefix="ms",e.supportsFullScreen=!0;break}}else e.supportsFullScreen=!0;return e.supportsFullScreen&&(e.fullScreenEventName="ms"===e.prefix?"MSFullscreenChange":e.prefix+"fullscreenchange",e.isFullScreen=function(e){switch(P.undefined(e)&&(e=t.body),this.prefix){case"":return t.fullscreenElement===e;case"moz":return t.mozFullScreenElement===e;default:return t[this.prefix+"FullscreenElement"]===e}},e.requestFullScreen=function(e){return P.undefined(e)&&(e=t.body),""===this.prefix?e.requestFullScreen():e[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]()},e.cancelFullScreen=function(){return""===this.prefix?t.cancelFullScreen():t[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]()},e.element=function(){return""===this.prefix?t.fullscreenElement:t[this.prefix+"FullscreenElement"]}),e}function T(v,T){function C(e,t,n,r){h(e,t,n,x({},r,{plyr:Be}))}function L(t,n){T.debug&&e.console&&(n=Array.prototype.slice.call(n),P.string(T.logPrefix)&&T.logPrefix.length&&n.unshift(T.logPrefix),console[t].apply(console,n))}function O(){return{url:T.iconUrl,absolute:0===T.iconUrl.indexOf("http")||Xe.browser.isIE}}function j(){var e=[],t=O(),n=(t.absolute?"":t.url)+"#"+T.iconPrefix;return a(T.controls,"play-large")&&e.push('"),e.push('
    '),a(T.controls,"restart")&&e.push('"),a(T.controls,"rewind")&&e.push('"),a(T.controls,"play")&&e.push('",'"),a(T.controls,"fast-forward")&&e.push('"),a(T.controls,"progress")&&(e.push('','','','','',"0% "+T.i18n.buffered,""),T.tooltips.seek&&e.push('00:00'),e.push("")),a(T.controls,"current-time")&&e.push('',''+T.i18n.currentTime+"",'00:00',""),a(T.controls,"duration")&&e.push('',''+T.i18n.duration+"",'00:00',""),a(T.controls,"mute")&&e.push('"),a(T.controls,"volume")&&e.push('','",'','',""),a(T.controls,"captions")&&e.push('"),a(T.controls,"settings")&&e.push('
    ','",'","
    "),a(T.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function q(){if(Xe.supported.full&&("audio"!==Xe.type||T.fullscreen.allowAudio)&&T.fullscreen.enabled){var e=A.supportsFullScreen;e||T.fullscreen.fallback&&!B()?(ze((e?"Native":"Fallback")+" fullscreen enabled"),m(Xe.container,T.classes.fullscreen.enabled,!0)):ze("Fullscreen not supported and fallback disabled"),Xe.buttons&&Xe.buttons.fullscreen&&k(Xe.buttons.fullscreen,!1),X()}}function V(){if("video"===Xe.type){Y(T.selectors.captions)||Xe.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Xe.usingTextTracks=!1,Xe.media.textTracks&&(Xe.usingTextTracks=!0);for(var e,t="",n=Xe.media.childNodes,r=0;r=10||Xe.browser.isFirefox&&Xe.browser.version>=31)&&(ze("Detected browser with known TextTrack issues - using manual fallback"),Xe.usingTextTracks=!1),Xe.usingTextTracks){ze("TextTracks supported");for(var o=0;o ");for(var r=0;rXe.captions.length-1){Xe.subcount=Xe.captions.length-1;break}Xe.media.currentTime.toFixed(1)>=n(Xe.captions[Xe.subcount][0])&&Xe.media.currentTime.toFixed(1)<=r(Xe.captions[Xe.subcount][0])?(Xe.currentCaption=Xe.captions[Xe.subcount][1],R(Xe.currentCaption)):R()}}function H(){if(Xe.buttons.captions){m(Xe.container,T.classes.captions.enabled,!0);var e=Xe.storage.captionsEnabled;P["boolean"](e)||(e=T.captions.defaultActive),e&&(m(Xe.container,T.classes.captions.active,!0),k(Xe.buttons.captions,!0))}}function W(e){return Xe.container.querySelectorAll(e)}function Y(e){return W(e)[0]}function B(){try{return e.self!==e.top}catch(t){return!0}}function X(){function e(e){9===e.which&&Xe.isFullscreen&&(e.target!==r||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),r.focus()):(e.preventDefault(),n.focus()))}var t=W("input:not([disabled]), button:not([disabled])"),n=t[0],r=t[t.length-1];g(Xe.container,"keydown",e)}function U(e,t){if(P.string(t))d(e,Xe.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)d(e,Xe.media,t[n])}function J(){if(T.loadSprite){var e=O();e.absolute?(ze("AJAX loading absolute SVG sprite"+(Xe.browser.isIE?" (due to IE)":"")),S(e.url,"sprite-plyr")):ze("Sprite will be used as external resource directly")}var n=T.html;ze("Injecting custom controls"),n||(n=j()),n=o(n,"{seektime}",T.seekTime),n=o(n,"{speed}",1===T.currentSpeed?"Normal":T.currentSpeed.toFixed(1)+"x"),n=o(n,"{lang}","English"),n=o(n,"{id}",Math.floor(1e4*Math.random()));var r;if(P.string(T.selectors.controls.container)&&(r=t.querySelector(T.selectors.controls.container)),P.htmlElement(r)||(r=Xe.container),r.insertAdjacentHTML("beforeend",n),T.tooltips.controls)for(var s=W([T.selectors.controls.wrapper," ",T.selectors.labels," .",T.classes.hidden].join("")),a=s.length-1;a>=0;a--){var i=s[a];m(i,T.classes.hidden,!1),m(i,T.classes.tooltip,!0)}}function z(){try{return Xe.controls=Y(T.selectors.controls.wrapper),Xe.buttons={},Xe.buttons.seek=Y(T.selectors.buttons.seek),Xe.buttons.play=W(T.selectors.buttons.play),Xe.buttons.pause=Y(T.selectors.buttons.pause),Xe.buttons.restart=Y(T.selectors.buttons.restart),Xe.buttons.rewind=Y(T.selectors.buttons.rewind),Xe.buttons.forward=Y(T.selectors.buttons.forward),Xe.buttons.fullscreen=Y(T.selectors.buttons.fullscreen),Xe.buttons.settings=Y(T.selectors.buttons.settings),Xe.buttons.mute=Y(T.selectors.buttons.mute),Xe.buttons.captions=Y(T.selectors.buttons.captions),Xe.progress={},Xe.progress.container=Y(T.selectors.progress.container),Xe.progress.buffer={},Xe.progress.buffer.bar=Y(T.selectors.progress.buffer),Xe.progress.buffer.text=Xe.progress.buffer.bar&&Xe.progress.buffer.bar.getElementsByTagName("span")[0],Xe.progress.played=Y(T.selectors.progress.played),Xe.progress.tooltip=Xe.progress.container&&Xe.progress.container.querySelector("."+T.classes.tooltip),Xe.volume={},Xe.volume.input=Y(T.selectors.volume.input),Xe.volume.display=Y(T.selectors.volume.display),Xe.duration=Y(T.selectors.duration),Xe.currentTime=Y(T.selectors.currentTime),Xe.seekTime=W(T.selectors.seekTime),!0}catch(e){return $e("It looks like there is a problem with your controls HTML"),G(!0),!1}}function $(){m(Xe.container,T.selectors.container.replace(".",""),Xe.supported.full)}function G(e){e&&a(T.types.html5,Xe.type)?Xe.media.setAttribute("controls",""):Xe.media.removeAttribute("controls")}function K(e){var t=T.i18n.play;if(P.string(T.title)&&T.title.length&&(t+=", "+T.title,Xe.container.setAttribute("aria-label",T.title)),Xe.supported.full&&Xe.buttons.play)for(var n=Xe.buttons.play.length-1;n>=0;n--)Xe.buttons.play[n].setAttribute("aria-label",t);P.htmlElement(e)&&e.setAttribute("title",T.i18n.frameTitle.replace("{title}",T.title))}function Q(){var t=null;Xe.storage={},M.supported&&T.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(T.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Z({volume:parseFloat(t)}):Xe.storage=JSON.parse(t)))}function Z(t){M.supported&&T.storage.enabled&&(x(Xe.storage,t),e.localStorage.setItem(T.storage.key,JSON.stringify(Xe.storage)))}function ee(){if(!Xe.media)return void $e("No media element found!");if(Xe.supported.full&&(m(Xe.container,T.classes.type.replace("{0}",Xe.type),!0),a(T.types.embed,Xe.type)&&m(Xe.container,T.classes.type.replace("{0}","video"),!0),m(Xe.container,T.classes.stopped,T.autoplay),m(Xe.ontainer,T.classes.isIos,Xe.browser.isIos),m(Xe.container,T.classes.isTouch,Xe.browser.isTouch),"video"===Xe.type)){var e=t.createElement("div");e.setAttribute("class",T.classes.videoWrapper),i(Xe.media,e),Xe.videoContainer=e}a(T.types.embed,Xe.type)&&te()}function te(){for(var n=t.createElement("div"),r=Xe.embedId,a=Xe.type+"-"+Math.floor(1e4*Math.random()),o=W('[id^="'+Xe.type+'-"]'),i=o.length-1;i>=0;i--)l(o[i]);if(m(Xe.media,T.classes.videoWrapper,!0),m(Xe.media,T.classes.embedWrapper,!0),"youtube"===Xe.type)Xe.media.appendChild(n),n.setAttribute("id",a),P.object(e.YT)?re(r,n):(s(T.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){re(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Xe.type)if(Xe.supported.full?Xe.media.appendChild(n):n=Xe.media,n.setAttribute("id",a),P.object(e.Vimeo))se(r,n);else{s(T.urls.vimeo.api);var u=e.setInterval(function(){P.object(e.Vimeo)&&(e.clearInterval(u),se(r,n))},50)}else if("soundcloud"===Xe.type){var d=t.createElement("iframe");d.loaded=!1,g(d,"load",function(){d.loaded=!0}),c(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:a}),n.appendChild(d),Xe.media.appendChild(n),e.SC||s(T.urls.soundcloud.api);var p=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(p),ae.call(d))},50)}}function ne(){Xe.supported.full&&(We(),Ye()),K(Y("iframe"))}function re(t,n){Xe.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:T.autoplay?1:0,controls:Xe.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:T.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){C(Xe.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Xe.media.play=function(){n.playVideo(),Xe.media.paused=!1},Xe.media.pause=function(){n.pauseVideo(),Xe.media.paused=!0},Xe.media.stop=function(){n.stopVideo(),Xe.media.paused=!0},Xe.media.duration=n.getDuration(),Xe.media.paused=!0,Xe.media.currentTime=0,Xe.media.muted=n.isMuted(),T.title=n.getVideoData().title,Xe.supported.full&&Xe.media.querySelector("iframe").setAttribute("tabindex","-1"),ne(),C(Xe.media,"timeupdate"),C(Xe.media,"durationchange"),e.clearInterval(Ue.buffering),Ue.buffering=e.setInterval(function(){Xe.media.buffered=n.getVideoLoadedFraction(),(null===Xe.media.lastBuffered||Xe.media.lastBuffered=T.speeds.length&&(n=0),e=T.speeds[n]}else e=T.defaultSpeed}T.currentSpeed=e,Xe.media.playbackRate=e,Z({speed:e})}function pe(e){var t=0,n=Xe.media.paused,r=me();P.number(e)?t=e:P.object(e)&&a(["input","change"],e.type)&&(t=e.target.value/e.target.max*r),0>t?t=0:t>r&&(t=r),Ie(t);try{Xe.media.currentTime=t.toFixed(4)}catch(s){}if(a(T.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed.seekTo(t);break;case"vimeo":Xe.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Xe.embed.seekTo(1e3*t)}n&&ie(),C(Xe.media,"timeupdate"),Xe.media.seeking=!0}ze("Seeking to "+Xe.media.currentTime+" seconds"),D(t)}function me(){var e=parseInt(T.duration),t=0;return null===Xe.media.duration||isNaN(Xe.media.duration)||(t=Xe.media.duration),isNaN(e)?t:e}function fe(){m(Xe.container,T.classes.playing,!Xe.media.paused),m(Xe.container,T.classes.stopped,Xe.media.paused),Me(Xe.media.paused)}function ye(){I={x:e.pageXOffset||0,y:e.pageYOffset||0}}function be(){e.scrollTo(I.x,I.y)}function ve(e){var n=A.supportsFullScreen;if(n){if(!e||e.type!==A.fullScreenEventName)return A.isFullScreen(Xe.container)?A.cancelFullScreen():(ye(),A.requestFullScreen(Xe.container)),void(Xe.isFullscreen=A.isFullScreen(Xe.container));Xe.isFullscreen=A.isFullScreen(Xe.container)}else Xe.isFullscreen=!Xe.isFullscreen,t.body.style.overflow=Xe.isFullscreen?"hidden":"";m(Xe.container,T.classes.fullscreen.active,Xe.isFullscreen),X(Xe.isFullscreen),Xe.buttons&&Xe.buttons.fullscreen&&k(Xe.buttons.fullscreen,Xe.isFullscreen),C(Xe.container,Xe.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Xe.isFullscreen&&n&&be()}function ge(e){if(P["boolean"](e)||(e=!Xe.media.muted),k(Xe.buttons.mute,e),Xe.media.muted=e,0===Xe.media.volume&&he(T.volume),a(T.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed[Xe.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Xe.embed.setVolume(Xe.media.muted?0:parseFloat(T.volume/T.volumeMax))}C(Xe.media,"volumechange")}}function he(e){var t=T.volumeMax,n=T.volumeMin;if(P.undefined(e)&&(e=Xe.storage.volume),(null===e||isNaN(e))&&(e=T.volume),e>t&&(e=t),n>e&&(e=n),Xe.media.volume=parseFloat(e/t),Xe.volume.display&&(Xe.volume.display.value=e),a(T.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed.setVolume(100*Xe.media.volume);break;case"vimeo":case"soundcloud":Xe.embed.setVolume(Xe.media.volume)}C(Xe.media,"volumechange")}0===e?Xe.media.muted=!0:Xe.media.muted&&e>0&&ge()}function ke(e){var t=Xe.media.muted?0:Xe.media.volume*T.volumeMax;P.number(e)||(e=T.volumeStep),he(t+e)}function we(e){var t=Xe.media.muted?0:Xe.media.volume*T.volumeMax;P.number(e)||(e=T.volumeStep),he(t-e)}function xe(){var e=Xe.media.muted?0:Xe.media.volume*T.volumeMax;Xe.supported.full&&(Xe.volume.input&&(Xe.volume.input.value=e),Xe.volume.display&&(Xe.volume.display.value=e)),Z({volume:e}),m(Xe.container,T.classes.muted,0===e),Xe.supported.full&&Xe.buttons.mute&&k(Xe.buttons.mute,0===e)}function _e(e){Xe.supported.full&&Xe.buttons.captions&&(P["boolean"](e)||(e=-1===Xe.container.className.indexOf(T.classes.captions.active)),Xe.captionsEnabled=e,k(Xe.buttons.captions,Xe.captionsEnabled),m(Xe.container,T.classes.captions.active,Xe.captionsEnabled),C(Xe.container,Xe.captionsEnabled?"captionsenabled":"captionsdisabled",!0),Z({captionsEnabled:Xe.captionsEnabled}))}function Te(e){var t="waiting"===e.type;clearTimeout(Ue.loading),Ue.loading=setTimeout(function(){m(Xe.container,T.classes.loading,t),Me(t)},t?250:0)}function Se(e){if(Xe.supported.full){var t=Xe.progress.played,n=0,r=me();if(e)switch(e.type){case"timeupdate":case"seeking":if(Xe.controls.pressed)return;n=w(Xe.media.currentTime,r),"timeupdate"===e.type&&Xe.buttons.seek&&(Xe.buttons.seek.value=n);break;case"playing":case"progress":t=Xe.progress.buffer,n=function(){var e=Xe.media.buffered;return e&&e.length?w(e.end(0),r):P.number(e)?100*e:0}()}Ee(t,n)}}function Ee(e,t){if(Xe.supported.full){if(P.undefined(t)&&(t=0),P.undefined(e)){if(!Xe.progress||!Xe.progress.buffer)return;e=Xe.progress.buffer}P.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ce(e,t){if(t){isNaN(e)&&(e=0),Xe.secs=parseInt(e%60),Xe.mins=parseInt(e/60%60),Xe.hours=parseInt(e/60/60%60);var n=parseInt(me()/60/60%60)>0;Xe.secs=("0"+Xe.secs).slice(-2),Xe.mins=("0"+Xe.mins).slice(-2),t.innerHTML=(n?Xe.hours+":":"")+Xe.mins+":"+Xe.secs}}function Fe(){if(Xe.supported.full){var e=me()||0;!Xe.duration&&T.displayDuration&&Xe.media.paused&&Ce(e,Xe.currentTime),Xe.duration&&Ce(e,Xe.duration),Ne()}}function Ae(e){Ce(Xe.media.currentTime,Xe.currentTime),e&&"timeupdate"===e.type&&Xe.media.seeking||Se(e)}function Ie(e){P.number(e)||(e=0);var t=me(),n=w(e,t);Xe.progress&&Xe.progress.played&&(Xe.progress.played.value=n),Xe.buttons&&Xe.buttons.seek&&(Xe.buttons.seek.value=n)}function Ne(e){var t=me();if(T.tooltips.seek&&Xe.progress.container&&0!==t){var n=Xe.progress.container.getBoundingClientRect(),r=0,s=T.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!f(Xe.progress.tooltip,s))return;r=Xe.progress.tooltip.style.left.replace("%","")}0>r?r=0:r>100&&(r=100),Ce(t/100*r,Xe.progress.tooltip),Xe.progress.tooltip.style.left=r+"%",e&&a(["mouseenter","mouseleave"],e.type)&&m(Xe.progress.tooltip,s,"mouseenter"===e.type)}}function Pe(e){P.undefined(e)&&(e=Xe.storage.speed||T.defaultSpeed),de(e)}function Me(t){if(T.hideControls&&"audio"!==Xe.type){var n=0,r=!1,s=t,o=f(Xe.container,T.classes.loading);if(P["boolean"](t)||(t&&t.type?(r="enterfullscreen"===t.type,s=a(["mousemove","touchstart","mouseenter","focus"],t.type),a(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=f(Xe.container,T.classes.hideControls)),e.clearTimeout(Ue.hover),s||Xe.media.paused||o){if(m(Xe.container,T.classes.hideControls,!1),Xe.media.paused||o)return;Xe.browser.isTouch&&(n=3e3)}s&&Xe.media.paused||(Ue.hover=e.setTimeout(function(){(!Xe.controls.pressed&&!Xe.controls.hover||r)&&m(Xe.container,T.classes.hideControls,!0)},n))}}function Le(e){if(!P.undefined(e))return void Oe(e);var t;switch(Xe.type){case"youtube":t=Xe.embed.getVideoUrl();break;case"vimeo":Xe.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Xe.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Xe.media.currentSrc}return t||""}function Oe(e){function n(){if(Xe.embed=null,l(Xe.media),"video"===Xe.type&&Xe.videoContainer&&l(Xe.videoContainer),Xe.container&&Xe.container.removeAttribute("class"),"type"in e&&(Xe.type=e.type,"video"===Xe.type)){var n=e.sources[0];"type"in n&&a(T.types.embed,n.type)&&(Xe.type=n.type)}switch(Xe.supported=E(Xe.type),Xe.type){case"video":Xe.media=t.createElement("video");break;case"audio":Xe.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Xe.media=t.createElement("div"),Xe.embedId=e.sources[0].src}u(Xe.container,Xe.media),P["boolean"](e.autoplay)&&(T.autoplay=e.autoplay),a(T.types.html5,Xe.type)&&(T.crossorigin&&Xe.media.setAttribute("crossorigin",""),T.autoplay&&Xe.media.setAttribute("autoplay",""),"poster"in e&&Xe.media.setAttribute("poster",e.poster),T.loop&&Xe.media.setAttribute("loop","")),m(Xe.container,T.classes.fullscreen.active,Xe.isFullscreen),m(Xe.container,T.classes.captions.active,Xe.captionsEnabled),$(),a(T.types.html5,Xe.type)&&U("source",e.sources),ee(),a(T.types.html5,Xe.type)&&("tracks"in e&&U("track",e.tracks),Xe.media.load()),(a(T.types.html5,Xe.type)||a(T.types.embed,Xe.type)&&!Xe.supported.full)&&(We(),Ye()),T.title=e.title,K()}return P.object(e)&&"sources"in e&&e.sources.length?(m(Xe.container,T.classes.ready,!1),ie(),Ie(),Ee(),Re(),void De(n,!1)):void $e("Invalid source format")}function je(e){"video"===Xe.type&&Xe.media.setAttribute("poster",e)}function qe(){function n(){var e=le(),t=Xe.buttons[e?"play":"pause"],n=Xe.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=f(t,T.classes.tabFocus);setTimeout(function(){n.focus(),r&&(m(t,T.classes.tabFocus,!1),m(n,T.classes.tabFocus,!0))},100)}}function r(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Xe.buttons){var n=Xe.buttons[t];if(P.nodeList(n))for(var r=0;r0)&&(t?we(n):ke(n)),(e.deltaY>0||e.deltaX<0)&&(t?ke(n):we(n))})}function Ve(){if(g(Xe.media,"timeupdate seeking",Ae),g(Xe.media,"timeupdate",D),g(Xe.media,"durationchange loadedmetadata",Fe),g(Xe.media,"ended",function(){"video"===Xe.type&&T.showPosterOnEnd&&("video"===Xe.type&&R(),pe(),Xe.media.load())}),g(Xe.media,"progress playing",Se),g(Xe.media,"volumechange",xe),g(Xe.media,"play pause ended",fe),g(Xe.media,"waiting canplay seeked",Te),T.clickToPlay&&"audio"!==Xe.type){var e=Y("."+T.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){T.hideControls&&Xe.browser.isTouch&&!Xe.media.paused||(Xe.media.paused?oe():Xe.media.ended?(pe(),oe()):ie())})}T.disableContextMenu&&g(Xe.media,"contextmenu",function(e){e.preventDefault()}),g(Xe.media,T.events.concat(["keyup","keydown"]).join(" "),function(e){C(Xe.container,e.type,!0)})}function Re(){if(a(T.types.html5,Xe.type)){for(var e=Xe.media.querySelectorAll("source"),t=0;t=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],a=s.parentNode,o=s.nextSibling;return r.appendChild(s),o?a.insertBefore(r,o):a.appendChild(r),r}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,I["boolean"](t[n])&&t[n]?"":t[n])}function c(e,n,r){var s=t.createElement(e);u(s,r),l(n,s)}function d(e){return e.replace(".","")}function p(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function m(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function f(e,n){var r=Element.prototype,s=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return s.call(e,n)}function y(e,t,n,r,s){v(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},s)}function b(e,t,n,r,s){var a=t.split(" ");if(I["boolean"](s)||(s=!1),e instanceof NodeList)for(var o=0;or;r++){var s=e[r];for(var a in s)s[a]&&s[a].constructor&&s[a].constructor===Object?(t[a]=t[a]||{},w(t[a],s[a])):t[a]=s[a]}return t}}function T(b,T){function S(e,t,n,r){g(e,t,n,w({},r,{plyr:We}))}function M(t,n){T.debug&&e.console&&(n=Array.prototype.slice.call(n),I.string(T.logPrefix)&&T.logPrefix.length&&n.unshift(T.logPrefix),console[t].apply(console,n))}function N(){return{url:T.iconUrl,absolute:0===T.iconUrl.indexOf("http")||Ye.browser.isIE}}function L(){var e=[],t=N(),n=(t.absolute?"":t.url)+"#"+T.iconPrefix;return s(T.controls,"play-large")&&e.push('"),e.push('
    '),s(T.controls,"restart")&&e.push('"),s(T.controls,"rewind")&&e.push('"),s(T.controls,"play")&&e.push('",'"),s(T.controls,"fast-forward")&&e.push('"),s(T.controls,"progress")&&(e.push('','','','','',"0% "+T.i18n.buffered,""),T.tooltips.seek&&e.push('00:00'),e.push("")),s(T.controls,"current-time")&&e.push('',''+T.i18n.currentTime+"",'00:00',""),s(T.controls,"duration")&&e.push('',''+T.i18n.duration+"",'00:00',""),s(T.controls,"mute")&&e.push('"),s(T.controls,"volume")&&e.push('','",'','',""),s(T.controls,"captions")&&e.push('"),s(T.controls,"settings")&&e.push('
    ','",'","
    "),s(T.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function O(){if(Ye.supported.full&&("audio"!==Ye.type||T.fullscreen.allowAudio)&&T.fullscreen.enabled){var e=P.fullscreen;e||T.fullscreen.fallback&&!W()?(Ue((e?"Native":"Fallback")+" fullscreen enabled"),p(Ye.container,T.classes.fullscreen.enabled,!0)):Ue("Fullscreen not supported and fallback disabled"),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,!1),Y()}}function j(){if("video"===Ye.type){H(T.selectors.captions)||Ye.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Ye.usingTextTracks=!1,Ye.media.textTracks&&(Ye.usingTextTracks=!0);for(var e,t="",n=Ye.media.childNodes,r=0;r=10||Ye.browser.isFirefox&&Ye.browser.version>=31)&&(Ue("Detected browser with known TextTrack issues - using manual fallback"),Ye.usingTextTracks=!1),Ye.usingTextTracks){Ue("TextTracks supported");for(var o=0;o ");for(var r=0;rYe.captions.length-1){Ye.subcount=Ye.captions.length-1;break}Ye.media.currentTime.toFixed(1)>=n(Ye.captions[Ye.subcount][0])&&Ye.media.currentTime.toFixed(1)<=r(Ye.captions[Ye.subcount][0])?(Ye.currentCaption=Ye.captions[Ye.subcount][1],q(Ye.currentCaption)):q()}}function R(){if(Ye.buttons.captions){p(Ye.container,T.classes.captions.enabled,!0);var e=Ye.storage.captionsEnabled;I["boolean"](e)||(e=T.captions.defaultActive),e&&(p(Ye.container,T.classes.captions.active,!0),h(Ye.buttons.captions,!0))}}function D(e){return Ye.container.querySelectorAll(e)}function H(e){return D(e)[0]}function W(){try{return e.self!==e.top}catch(t){return!0}}function Y(){function e(e){9===e.which&&Ye.isFullscreen&&(e.target!==r||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),r.focus()):(e.preventDefault(),n.focus()))}var t=D("input:not([disabled]), button:not([disabled])"),n=t[0],r=t[t.length-1];v(Ye.container,"keydown",e)}function B(e,t){if(I.string(t))c(e,Ye.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Ye.media,t[n])}function X(){if(T.loadSprite){var e=N();e.absolute?(Ue("AJAX loading absolute SVG sprite"+(Ye.browser.isIE?" (due to IE)":"")),_(e.url,"sprite-plyr")):Ue("Sprite will be used as external resource directly")}var n=T.html;Ue("Injecting custom controls"),n||(n=L()),n=a(n,"{seektime}",T.seekTime),n=a(n,"{speed}",1===T.currentSpeed?"Normal":T.currentSpeed.toFixed(1)+"x"),n=a(n,"{lang}","English"),n=a(n,"{id}",Math.floor(1e4*Math.random()));var r;if(I.string(T.selectors.controls.container)&&(r=t.querySelector(T.selectors.controls.container)),I.htmlElement(r)||(r=Ye.container),r.insertAdjacentHTML("beforeend",n),T.tooltips.controls)for(var s=D([T.selectors.controls.wrapper," ",T.selectors.labels," .",T.classes.hidden].join("")),o=s.length-1;o>=0;o--){var i=s[o];p(i,T.classes.hidden,!1),p(i,T.classes.tooltip,!0)}}function U(){try{return Ye.controls=H(T.selectors.controls.wrapper),Ye.buttons={},Ye.buttons.seek=H(T.selectors.buttons.seek),Ye.buttons.play=D(T.selectors.buttons.play),Ye.buttons.pause=H(T.selectors.buttons.pause),Ye.buttons.restart=H(T.selectors.buttons.restart),Ye.buttons.rewind=H(T.selectors.buttons.rewind),Ye.buttons.forward=H(T.selectors.buttons.forward),Ye.buttons.fullscreen=H(T.selectors.buttons.fullscreen),Ye.buttons.settings=H(T.selectors.buttons.settings),Ye.buttons.mute=H(T.selectors.buttons.mute),Ye.buttons.captions=H(T.selectors.buttons.captions),Ye.progress={},Ye.progress.container=H(T.selectors.progress.container),Ye.progress.buffer={},Ye.progress.buffer.bar=H(T.selectors.progress.buffer),Ye.progress.buffer.text=Ye.progress.buffer.bar&&Ye.progress.buffer.bar.getElementsByTagName("span")[0],Ye.progress.played=H(T.selectors.progress.played),Ye.progress.tooltip=Ye.progress.container&&Ye.progress.container.querySelector("."+T.classes.tooltip),Ye.volume={},Ye.volume.input=H(T.selectors.volume.input),Ye.volume.display=H(T.selectors.volume.display),Ye.duration=H(T.selectors.duration),Ye.currentTime=H(T.selectors.currentTime),Ye.seekTime=D(T.selectors.seekTime),!0}catch(e){return Je("It looks like there is a problem with your controls HTML"),z(!0),!1}}function J(){p(Ye.container,T.selectors.container.replace(".",""),Ye.supported.full)}function z(e){e&&s(T.types.html5,Ye.type)?Ye.media.setAttribute("controls",""):Ye.media.removeAttribute("controls")}function $(e){var t=T.i18n.play;if(I.string(T.title)&&T.title.length&&(t+=", "+T.title,Ye.container.setAttribute("aria-label",T.title)),Ye.supported.full&&Ye.buttons.play)for(var n=Ye.buttons.play.length-1;n>=0;n--)Ye.buttons.play[n].setAttribute("aria-label",t);I.htmlElement(e)&&e.setAttribute("title",T.i18n.frameTitle.replace("{title}",T.title))}function G(){var t=null;Ye.storage={},P.storage&&T.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(T.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?K({volume:parseFloat(t)}):Ye.storage=JSON.parse(t)))}function K(t){P.storage&&T.storage.enabled&&(w(Ye.storage,t),e.localStorage.setItem(T.storage.key,JSON.stringify(Ye.storage)))}function Q(){if(!Ye.media)return void Je("No media element found!");if(Ye.supported.full&&(p(Ye.container,T.classes.type.replace("{0}",Ye.type),!0),s(T.types.embed,Ye.type)&&p(Ye.container,T.classes.type.replace("{0}","video"),!0),p(Ye.container,T.classes.pip.enabled,P.pip(Ye)),p(Ye.container,T.classes.stopped,T.autoplay),p(Ye.ontainer,T.classes.isIos,Ye.browser.isIos),p(Ye.container,T.classes.isTouch,Ye.browser.isTouch),"video"===Ye.type)){var e=t.createElement("div");e.setAttribute("class",T.classes.videoWrapper),o(Ye.media,e),Ye.videoContainer=e}s(T.types.embed,Ye.type)&&Z()}function Z(){for(var n=t.createElement("div"),s=Ye.embedId,a=Ye.type+"-"+Math.floor(1e4*Math.random()),o=D('[id^="'+Ye.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(p(Ye.media,T.classes.videoWrapper,!0),p(Ye.media,T.classes.embedWrapper,!0),"youtube"===Ye.type)Ye.media.appendChild(n),n.setAttribute("id",a),I.object(e.YT)?te(s,n):(r(T.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){te(s,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Ye.type)if(Ye.supported.full?Ye.media.appendChild(n):n=Ye.media,n.setAttribute("id",a),I.object(e.Vimeo))ne(s,n);else{r(T.urls.vimeo.api);var c=e.setInterval(function(){I.object(e.Vimeo)&&(e.clearInterval(c),ne(s,n))},50)}else if("soundcloud"===Ye.type){var d=t.createElement("iframe");d.loaded=!1,v(d,"load",function(){d.loaded=!0}),u(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+s,id:a}),n.appendChild(d),Ye.media.appendChild(n),e.SC||r(T.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(m),re.call(d))},50)}}function ee(){Ye.supported.full&&(De(),He()),$(H("iframe"))}function te(t,n){Ye.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:T.autoplay?1:0,controls:Ye.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:T.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){S(Ye.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Ye.media.play=function(){n.playVideo(),Ye.media.paused=!1},Ye.media.pause=function(){n.pauseVideo(),Ye.media.paused=!0},Ye.media.stop=function(){n.stopVideo(),Ye.media.paused=!0},Ye.media.duration=n.getDuration(),Ye.media.paused=!0,Ye.media.currentTime=0,Ye.media.muted=n.isMuted(),T.title=n.getVideoData().title,Ye.supported.full&&Ye.media.querySelector("iframe").setAttribute("tabindex","-1"),ee(),S(Ye.media,"timeupdate"),S(Ye.media,"durationchange"),e.clearInterval(Be.buffering),Be.buffering=e.setInterval(function(){Ye.media.buffered=n.getVideoLoadedFraction(),(null===Ye.media.lastBuffered||Ye.media.lastBuffered=T.speeds.length&&(n=0),e=T.speeds[n]}else e=T.defaultSpeed}T.currentSpeed=e,Ye.media.playbackRate=e,K({speed:e})}function ce(e){var t=0,n=Ye.media.paused,r=de();I.number(e)?t=e:I.object(e)&&s(["input","change"],e.type)&&(t=e.target.value/e.target.max*r),0>t?t=0:t>r&&(t=r),Ae(t);try{Ye.media.currentTime=t.toFixed(4)}catch(a){}if(s(T.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.seekTo(t);break;case"vimeo":Ye.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Ye.embed.seekTo(1e3*t)}n&&ae(),S(Ye.media,"timeupdate"),Ye.media.seeking=!0}Ue("Seeking to "+Ye.media.currentTime+" seconds"),V(t)}function de(){var e=parseInt(T.duration),t=0;return null===Ye.media.duration||isNaN(Ye.media.duration)||(t=Ye.media.duration),isNaN(e)?t:e}function pe(){p(Ye.container,T.classes.playing,!Ye.media.paused),p(Ye.container,T.classes.stopped,Ye.media.paused),Pe(Ye.media.paused)}function me(){A={x:e.pageXOffset||0,y:e.pageYOffset||0}}function fe(){e.scrollTo(A.x,A.y)}function ye(e){var n=P.fullscreen;if(n){if(!e||e.type!==C.eventType)return C.isFullScreen(Ye.container)?C.cancelFullScreen():(me(),C.requestFullScreen(Ye.container)),void(Ye.isFullscreen=C.isFullScreen(Ye.container));Ye.isFullscreen=C.isFullScreen(Ye.container)}else Ye.isFullscreen=!Ye.isFullscreen,t.body.style.overflow=Ye.isFullscreen?"hidden":"";p(Ye.container,T.classes.fullscreen.active,Ye.isFullscreen),Y(Ye.isFullscreen),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,Ye.isFullscreen),S(Ye.container,Ye.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Ye.isFullscreen&&n&&fe()}function be(e){if(I["boolean"](e)||(e=!Ye.media.muted),h(Ye.buttons.mute,e),Ye.media.muted=e,0===Ye.media.volume&&ve(T.volume),s(T.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed[Ye.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.muted?0:parseFloat(T.volume/T.volumeMax))}S(Ye.media,"volumechange")}}function ve(e){var t=T.volumeMax,n=T.volumeMin;if(I.undefined(e)&&(e=Ye.storage.volume),(null===e||isNaN(e))&&(e=T.volume),e>t&&(e=t),n>e&&(e=n),Ye.media.volume=parseFloat(e/t),Ye.volume.display&&(Ye.volume.display.value=e),s(T.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.setVolume(100*Ye.media.volume);break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.volume)}S(Ye.media,"volumechange")}0===e?Ye.media.muted=!0:Ye.media.muted&&e>0&&be()}function ge(e){var t=Ye.media.muted?0:Ye.media.volume*T.volumeMax;I.number(e)||(e=T.volumeStep),ve(t+e)}function he(e){var t=Ye.media.muted?0:Ye.media.volume*T.volumeMax;I.number(e)||(e=T.volumeStep),ve(t-e)}function ke(){var e=Ye.media.muted?0:Ye.media.volume*T.volumeMax;Ye.supported.full&&(Ye.volume.input&&(Ye.volume.input.value=e),Ye.volume.display&&(Ye.volume.display.value=e)),K({volume:e}),p(Ye.container,T.classes.muted,0===e),Ye.supported.full&&Ye.buttons.mute&&h(Ye.buttons.mute,0===e)}function we(e){Ye.supported.full&&Ye.buttons.captions&&(I["boolean"](e)||(e=-1===Ye.container.className.indexOf(T.classes.captions.active)),Ye.captionsEnabled=e,h(Ye.buttons.captions,Ye.captionsEnabled),p(Ye.container,T.classes.captions.active,Ye.captionsEnabled),S(Ye.container,Ye.captionsEnabled?"captionsenabled":"captionsdisabled",!0),K({captionsEnabled:Ye.captionsEnabled}))}function Te(e){var t="waiting"===e.type;clearTimeout(Be.loading),Be.loading=setTimeout(function(){p(Ye.container,T.classes.loading,t),Pe(t)},t?250:0)}function _e(e){if(Ye.supported.full){var t=Ye.progress.played,n=0,r=de();if(e)switch(e.type){case"timeupdate":case"seeking":if(Ye.controls.pressed)return;n=k(Ye.media.currentTime,r),"timeupdate"===e.type&&Ye.buttons.seek&&(Ye.buttons.seek.value=n);break;case"playing":case"progress":t=Ye.progress.buffer,n=function(){var e=Ye.media.buffered;return e&&e.length?k(e.end(0),r):I.number(e)?100*e:0}()}xe(t,n)}}function xe(e,t){if(Ye.supported.full){if(I.undefined(t)&&(t=0),I.undefined(e)){if(!Ye.progress||!Ye.progress.buffer)return;e=Ye.progress.buffer}I.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Se(e,t){if(t){isNaN(e)&&(e=0),Ye.secs=parseInt(e%60),Ye.mins=parseInt(e/60%60),Ye.hours=parseInt(e/60/60%60);var n=parseInt(de()/60/60%60)>0;Ye.secs=("0"+Ye.secs).slice(-2),Ye.mins=("0"+Ye.mins).slice(-2),t.innerHTML=(n?Ye.hours+":":"")+Ye.mins+":"+Ye.secs}}function Ee(){if(Ye.supported.full){var e=de()||0;!Ye.duration&&T.displayDuration&&Ye.media.paused&&Se(e,Ye.currentTime),Ye.duration&&Se(e,Ye.duration),Fe()}}function Ce(e){Se(Ye.media.currentTime,Ye.currentTime),e&&"timeupdate"===e.type&&Ye.media.seeking||_e(e)}function Ae(e){I.number(e)||(e=0);var t=de(),n=k(e,t);Ye.progress&&Ye.progress.played&&(Ye.progress.played.value=n),Ye.buttons&&Ye.buttons.seek&&(Ye.buttons.seek.value=n)}function Fe(e){var t=de();if(T.tooltips.seek&&Ye.progress.container&&0!==t){var n=Ye.progress.container.getBoundingClientRect(),r=0,a=T.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!m(Ye.progress.tooltip,a))return;r=Ye.progress.tooltip.style.left.replace("%","")}0>r?r=0:r>100&&(r=100),Se(t/100*r,Ye.progress.tooltip),Ye.progress.tooltip.style.left=r+"%",e&&s(["mouseenter","mouseleave"],e.type)&&p(Ye.progress.tooltip,a,"mouseenter"===e.type)}}function Ie(e){I.undefined(e)&&(e=Ye.storage.speed||T.defaultSpeed),ue(e)}function Pe(t){if(T.hideControls&&"audio"!==Ye.type){var n=0,r=!1,a=t,o=m(Ye.container,T.classes.loading);if(I["boolean"](t)||(t&&t.type?(r="enterfullscreen"===t.type,a=s(["mousemove","touchstart","mouseenter","focus"],t.type),s(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):a=m(Ye.container,T.classes.hideControls)),e.clearTimeout(Be.hover),a||Ye.media.paused||o){if(p(Ye.container,T.classes.hideControls,!1),Ye.media.paused||o)return;Ye.browser.isTouch&&(n=3e3)}a&&Ye.media.paused||(Be.hover=e.setTimeout(function(){(!Ye.controls.pressed&&!Ye.controls.hover||r)&&p(Ye.container,T.classes.hideControls,!0)},n))}}function Me(e){if(!I.undefined(e))return void Ne(e);var t;switch(Ye.type){case"youtube":t=Ye.embed.getVideoUrl();break;case"vimeo":Ye.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Ye.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Ye.media.currentSrc}return t||""}function Ne(e){function n(){if(Ye.embed=null,i(Ye.media),"video"===Ye.type&&Ye.videoContainer&&i(Ye.videoContainer),Ye.container&&Ye.container.removeAttribute("class"),"type"in e&&(Ye.type=e.type,"video"===Ye.type)){var n=e.sources[0];"type"in n&&s(T.types.embed,n.type)&&(Ye.type=n.type)}switch(Ye.supported=x(Ye.type),Ye.type){case"video":Ye.media=t.createElement("video");break;case"audio":Ye.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Ye.media=t.createElement("div"),Ye.embedId=e.sources[0].src}l(Ye.container,Ye.media),I["boolean"](e.autoplay)&&(T.autoplay=e.autoplay),s(T.types.html5,Ye.type)&&(T.crossorigin&&Ye.media.setAttribute("crossorigin",""),T.autoplay&&Ye.media.setAttribute("autoplay",""),"poster"in e&&Ye.media.setAttribute("poster",e.poster),T.loop&&Ye.media.setAttribute("loop","")),p(Ye.container,T.classes.fullscreen.active,Ye.isFullscreen),p(Ye.container,T.classes.captions.active,Ye.captionsEnabled),J(),s(T.types.html5,Ye.type)&&B("source",e.sources),Q(),s(T.types.html5,Ye.type)&&("tracks"in e&&B("track",e.tracks),Ye.media.load()),(s(T.types.html5,Ye.type)||s(T.types.embed,Ye.type)&&!Ye.supported.full)&&(De(),He()),T.title=e.title,$()}return I.object(e)&&"sources"in e&&e.sources.length?(p(Ye.container,T.classes.ready,!1),ae(),Ae(),xe(),qe(),void Ve(n,!1)):void Je("Invalid source format")}function Le(e){"video"===Ye.type&&Ye.media.setAttribute("poster",e)}function Oe(){function n(){var e=oe(),t=Ye.buttons[e?"play":"pause"],n=Ye.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=m(t,T.classes.tabFocus);setTimeout(function(){n.focus(),r&&(p(t,T.classes.tabFocus,!1),p(n,T.classes.tabFocus,!0))},100)}}function r(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function a(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Ye.buttons){var n=Ye.buttons[t];if(I.nodeList(n))for(var r=0;r0)&&(t?he(n):ge(n)),(e.deltaY>0||e.deltaX<0)&&(t?ge(n):he(n))})}function je(){if(v(Ye.media,"timeupdate seeking",Ce),v(Ye.media,"timeupdate",V),v(Ye.media,"durationchange loadedmetadata",Ee),v(Ye.media,"ended",function(){"video"===Ye.type&&T.showPosterOnEnd&&("video"===Ye.type&&q(),ce(),Ye.media.load())}),v(Ye.media,"progress playing",_e),v(Ye.media,"volumechange",ke),v(Ye.media,"play pause ended",pe),v(Ye.media,"waiting canplay seeked",Te),T.clickToPlay&&"audio"!==Ye.type){var e=H("."+T.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",v(e,"click",function(){T.hideControls&&Ye.browser.isTouch&&!Ye.media.paused||(Ye.media.paused?se():Ye.media.ended?(ce(),se()):ae())})}T.disableContextMenu&&v(Ye.media,"contextmenu",function(e){e.preventDefault()}),v(Ye.media,T.events.concat(["keyup","keydown"]).join(" "),function(e){S(Ye.container,e.type,!0)})}function qe(){if(s(T.types.html5,Ye.type)){for(var e=Ye.media.querySelectorAll("source"),t=0;t', '', '', '
  • ', - '', '
  • ', @@ -923,7 +932,7 @@ if ((plyr.type !== 'audio' || config.fullscreen.allowAudio) && config.fullscreen.enabled) { // Check for native support - var nativeSupport = fullscreen.supportsFullScreen; + var nativeSupport = _support.fullscreen; if (nativeSupport || (config.fullscreen.fallback && !_inFrame())) { _log((nativeSupport ? 'Native' : 'Fallback') + ' fullscreen enabled'); @@ -1435,7 +1444,7 @@ plyr.storage = {}; // Bail if we don't have localStorage support or it's disabled - if (!_storage.supported || !config.storage.enabled) { + if (!_support.storage || !config.storage.enabled) { return; } @@ -1463,7 +1472,7 @@ // Save a value back to local storage function _updateStorage(value) { // Bail if we don't have localStorage support or it's disabled - if (!_storage.supported || !config.storage.enabled) { + if (!_support.storage || !config.storage.enabled) { return; } @@ -1492,6 +1501,9 @@ _toggleClass(plyr.container, config.classes.type.replace('{0}', 'video'), true); } + // Check for picture-in-picture support + _toggleClass(plyr.container, config.classes.pip.enabled, _support.pip(plyr)); + // If there's no autoplay attribute, assume the video is stopped and add state class _toggleClass(plyr.container, config.classes.stopped, config.autoplay); @@ -2126,27 +2138,27 @@ // Toggle fullscreen function _toggleFullscreen(event) { // Check for native support - var nativeSupport = fullscreen.supportsFullScreen; + var nativeSupport = _support.fullscreen; if (nativeSupport) { // If it's a fullscreen change event, update the UI - if (event && event.type === fullscreen.fullScreenEventName) { - plyr.isFullscreen = fullscreen.isFullScreen(plyr.container); + if (event && event.type === _fullscreen.eventType) { + plyr.isFullscreen = _fullscreen.isFullScreen(plyr.container); } else { // Else it's a user request to enter or exit - if (!fullscreen.isFullScreen(plyr.container)) { + if (!_fullscreen.isFullScreen(plyr.container)) { // Save scroll position _saveScrollPosition(); // Request full screen - fullscreen.requestFullScreen(plyr.container); + _fullscreen.requestFullScreen(plyr.container); } else { // Bail from fullscreen - fullscreen.cancelFullScreen(); + _fullscreen.cancelFullScreen(); } // Check if we're actually full screen (it could fail) - plyr.isFullscreen = fullscreen.isFullScreen(plyr.container); + plyr.isFullscreen = _fullscreen.isFullScreen(plyr.container); return; } @@ -3009,7 +3021,7 @@ // Escape is handle natively when in full screen // So we only need to worry about non native - if (!fullscreen.supportsFullScreen && plyr.isFullscreen && code === 27) { + if (!_support.fullscreen && plyr.isFullscreen && code === 27) { _toggleFullscreen(); } @@ -3073,8 +3085,8 @@ _proxyListener(plyr.buttons.fullscreen, 'click', config.listeners.fullscreen, _toggleFullscreen); // Handle user exiting fullscreen by escaping etc - if (fullscreen.supportsFullScreen) { - _on(document, fullscreen.fullScreenEventName, _toggleFullscreen); + if (_support.fullscreen) { + _on(document, _fullscreen.eventType, _toggleFullscreen); } // Captions @@ -3086,8 +3098,6 @@ target = document.querySelector('#' + toggle.getAttribute('aria-controls')), show = (toggle.getAttribute('aria-expanded') === 'false'); - console.log(target, toggle); - toggle.setAttribute('aria-expanded', show); target.setAttribute('aria-hidden', !show); }); @@ -3332,11 +3342,8 @@ return null; } - // Setup the fullscreen api - fullscreen = _fullscreen(); - // Sniff out the browser - plyr.browser = _browserSniff(); + plyr.browser = _getBrowser(); // Bail if nothing to setup if (!_is.htmlElement(plyr.media)) { @@ -3495,7 +3502,7 @@ toggleFullscreen: _toggleFullscreen, toggleControls: _toggleControls, isFullscreen: function() { return plyr.isFullscreen || false; }, - support: function(mimeType) { return _supportMime(plyr, mimeType); }, + support: function(mimeType) { return _support.mime(plyr, mimeType); }, destroy: _destroy }; @@ -3566,7 +3573,7 @@ // Check for support function supported(type) { - var browser = _browserSniff(), + var browser = _getBrowser(), isOldIE = (browser.isIE && browser.version <= 9), isIos = browser.isIos, isIphone = /iPhone|iPod/i.test(navigator.userAgent), diff --git a/src/less/plyr.less b/src/less/plyr.less index 20550b80..cf48274d 100644 --- a/src/less/plyr.less +++ b/src/less/plyr.less @@ -30,6 +30,7 @@ max-width: 100%; min-width: 200px; font-family: @plyr-font-family; + font-weight: 500; direction: ltr; & when (@plyr-border-box = true) { @@ -239,7 +240,6 @@ color: @plyr-captions-color; font-size: @plyr-font-size-captions-base; text-align: center; - font-weight: 400; span { border-radius: 2px; @@ -519,7 +519,7 @@ .plyr__menu__value { margin-left: auto; padding-left: 25px; - font-weight: 400; + font-weight: 500; color: fade(@plyr-menu-color, 80%); } @@ -553,6 +553,7 @@ color: @plyr-tooltip-color; font-size: @plyr-font-size-small; + font-weight: 500; line-height: 1.3; transform: translate(-50%, 10px) scale(.8); From c8b9c9bcaaf7fcf8c6386047cd8729b05159585f Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Tue, 13 Sep 2016 23:52:25 +1000 Subject: [PATCH 11/70] Expanded --- dist/plyr.css | 2 +- dist/plyr.js | 2 +- src/js/plyr.js | 2 -- src/less/plyr.less | 6 ++++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dist/plyr.css b/dist/plyr.css index 8221b232..4c9a9e82 100644 --- a/dist/plyr.css +++ b/dist/plyr.css @@ -1 +1 @@ -.plyr input[type=range]:focus,.plyr:focus{outline:0}.plyr .plyr__video-embed iframe,.plyr__tooltip{pointer-events:none}@-webkit-keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-progress{to{background-position:25px 0}}@-webkit-keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;-webkit-transform:scale(1.25);transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;-webkit-transform:translateY(-35.95%);transform:translateY(-35.95%)}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;-webkit-transform:translateY(-40px);transform:translateY(-40px);transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease;color:#fff;font-size:16px;text-align:center;font-weight:400}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(52,63,74,.85);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{-webkit-transform:translateY(-15px);transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}.plyr__controls .plyr__menu+button,.plyr__controls>button+.plyr__menu,.plyr__controls>button+button{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__menu__container,.plyr__tooltip{bottom:100%;background:rgba(52,63,74,.9);font-size:14px}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__menu{position:relative}.plyr__menu button[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;right:-5px;margin-bottom:10px;-webkit-animation:plyr-popup .2s ease;animation:plyr-popup .2s ease;box-shadow:0 1px 0 rgba(0,0,0,.2);border-radius:4px;white-space:nowrap;text-align:left;color:#fff}.plyr__menu__container ul{margin:0;padding:5px;list-style:none}.plyr__menu__container button{display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;padding:10px 30px 10px 12px;color:#fff;font-weight:600}.plyr__menu__container button::after{content:"";position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);right:5px;border:5px solid transparent;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__value{margin-left:auto;padding-left:25px;font-weight:400;color:rgba(255,255,255,.8)}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__tooltip{position:absolute;z-index:2;margin-bottom:10px;padding:5px 7.5px;opacity:0;border-radius:3px;color:#fff;line-height:1.3;-webkit-transform:translate(-50%,10px) scale(.8);transform:translate(-50%,10px) scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;transition:opacity .2s .1s ease,-webkit-transform .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease,-webkit-transform .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(52,63,74,.9);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;-webkit-transform:translate(-50%,0) scale(1);transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls>button:first-child .plyr__tooltip{left:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:0 100%;transform-origin:0 100%}.plyr__controls>button:first-child .plyr__tooltip::before{left:16px}.plyr__controls>button:last-child .plyr__tooltip{right:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.plyr__controls>button:last-child .plyr__tooltip::before{left:auto;right:16px;-webkit-transform:translateX(50%);transform:translateX(50%)}.plyr__controls>button:first-child .plyr__tooltip--visible,.plyr__controls>button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:first-child:hover .plyr__tooltip,.plyr__controls>button:last-child .plyr__tooltip--visible,.plyr__controls>button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:last-child:hover .plyr__tooltip{-webkit-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-webkit-flex:1;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{-webkit-animation:plyr-progress 1s linear infinite;animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)} \ No newline at end of file +.plyr input[type=range]:focus,.plyr:focus{outline:0}.plyr .plyr__video-embed iframe,.plyr__tooltip{pointer-events:none}@-webkit-keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-progress{to{background-position:25px 0}}@-webkit-keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes plyr-popup{from{-webkit-transform:translateY(10px);transform:translateY(10px);opacity:.5}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease;transition:background .2s ease,border .2s ease,transform .2s ease,-webkit-transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;-webkit-transform:scale(1.25);transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;-webkit-transform:translateY(-35.95%);transform:translateY(-35.95%)}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;-webkit-transform:translateY(-40px);transform:translateY(-40px);transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease;color:#fff;font-size:16px;text-align:center;font-weight:400}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(52,63,74,.85);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{-webkit-transform:translateY(-15px);transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}.plyr__controls .plyr__menu+button,.plyr__controls>button+.plyr__menu,.plyr__controls>button+button{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover,.plyr--video .plyr__controls button[aria-expanded=true]{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover,.plyr--audio .plyr__controls button[aria-expanded=true]{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__menu__container,.plyr__tooltip{bottom:100%;background:rgba(52,63,74,.9);font-size:14px}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__menu{position:relative}.plyr__menu button[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;right:-5px;margin-bottom:10px;-webkit-animation:plyr-popup .2s ease;animation:plyr-popup .2s ease;box-shadow:0 1px 0 rgba(0,0,0,.2);border-radius:4px;white-space:nowrap;text-align:left;color:#fff}.plyr__menu__container ul{margin:0;padding:5px;list-style:none}.plyr__menu__container button{display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;padding:10px 30px 10px 12px;color:#fff;font-weight:600}.plyr__menu__container button::after{content:"";position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);right:5px;border:5px solid transparent;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__value{margin-left:auto;padding-left:25px;font-weight:400;color:rgba(255,255,255,.8)}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__tooltip{position:absolute;z-index:2;margin-bottom:10px;padding:5px 7.5px;opacity:0;border-radius:3px;color:#fff;line-height:1.3;-webkit-transform:translate(-50%,10px) scale(.8);transform:translate(-50%,10px) scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;transition:opacity .2s .1s ease,-webkit-transform .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease,-webkit-transform .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(52,63,74,.9);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;-webkit-transform:translate(-50%,0) scale(1);transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls>button:first-child .plyr__tooltip{left:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:0 100%;transform-origin:0 100%}.plyr__controls>button:first-child .plyr__tooltip::before{left:16px}.plyr__controls>button:last-child .plyr__tooltip{right:0;-webkit-transform:translate(0,10px) scale(.8);transform:translate(0,10px) scale(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.plyr__controls>button:last-child .plyr__tooltip::before{left:auto;right:16px;-webkit-transform:translateX(50%);transform:translateX(50%)}.plyr__controls>button:first-child .plyr__tooltip--visible,.plyr__controls>button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:first-child:hover .plyr__tooltip,.plyr__controls>button:last-child .plyr__tooltip--visible,.plyr__controls>button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:last-child:hover .plyr__tooltip{-webkit-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-webkit-flex:1;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{-webkit-animation:plyr-progress 1s linear infinite;animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)} \ No newline at end of file diff --git a/dist/plyr.js b/dist/plyr.js index f27bd94a..b62c8892 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,r,s=navigator.userAgent,a=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,d=!1;return-1!==navigator.appVersion.indexOf("Windows NT")&&-1!==navigator.appVersion.indexOf("rv:11")?(l=!0,a="IE",o="11"):-1!==(n=s.indexOf("MSIE"))?(l=!0,a="IE",o=s.substring(n+5)):-1!==(n=s.indexOf("Chrome"))?(c=!0,a="Chrome",o=s.substring(n+7)):-1!==(n=s.indexOf("Safari"))?(d=!0,a="Safari",o=s.substring(n+7),-1!==(n=s.indexOf("Version"))&&(o=s.substring(n+8))):-1!==(n=s.indexOf("Firefox"))?(u=!0,a="Firefox",o=s.substring(n+8)):(e=s.lastIndexOf(" ")+1)<(n=s.lastIndexOf("/"))&&(a=s.substring(e,n),o=s.substring(n+1),a.toLowerCase()===a.toUpperCase()&&(a=navigator.appName)),-1!==(r=o.indexOf(";"))&&(o=o.substring(0,r)),-1!==(r=o.indexOf(" "))&&(o=o.substring(0,r)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:a,version:i,isIE:l,isFirefox:u,isChrome:c,isSafari:d,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function r(e,t){var n=e.media;if("video"===e.type)switch(t){case"video/webm":return!(!n.canPlayType||!n.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,""));case"video/mp4":return!(!n.canPlayType||!n.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,""));case"video/ogg":return!(!n.canPlayType||!n.canPlayType('video/ogg; codecs="theora"').replace(/no/,""))}else if("audio"===e.type)switch(t){case"audio/mpeg":return!(!n.canPlayType||!n.canPlayType("audio/mpeg;").replace(/no/,""));case"audio/ogg":return!(!n.canPlayType||!n.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,""));case"audio/wav":return!(!n.canPlayType||!n.canPlayType('audio/wav; codecs="1"').replace(/no/,""))}return!1}function s(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var r=t.getElementsByTagName("script")[0];r.parentNode.insertBefore(n,r)}}function a(e,t){return Array.prototype.indexOf&&-1!==e.indexOf(t)}function o(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function i(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],a=s.parentNode,o=s.nextSibling;return r.appendChild(s),o?a.insertBefore(r,o):a.appendChild(r),r}}function l(e){e&&e.parentNode.removeChild(e)}function u(e,t){e.insertBefore(t,e.firstChild)}function c(e,t){for(var n in t)e.setAttribute(n,P["boolean"](t[n])&&t[n]?"":t[n])}function d(e,n,r){var s=t.createElement(e);c(s,r),u(n,s)}function p(e){return e.replace(".","")}function m(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function f(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function y(e,n){var r=Element.prototype,s=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return s.call(e,n)}function b(e,t,n,r,s){g(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},s)}function v(e,t,n,r,s){var a=t.split(" ");if(P["boolean"](s)||(s=!1),e instanceof NodeList)for(var o=0;or;r++){var s=e[r];for(var a in s)s[a]&&s[a].constructor&&s[a].constructor===Object?(t[a]=t[a]||{},x(t[a],s[a])):t[a]=s[a]}return t}}function _(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},n="webkit o moz ms khtml".split(" ");if(P.undefined(t.cancelFullScreen))for(var r=0,s=n.length;s>r;r++){if(e.prefix=n[r],!P.undefined(t[e.prefix+"CancelFullScreen"])){e.supportsFullScreen=!0;break}if(!P.undefined(t.msExitFullscreen)&&t.msFullscreenEnabled){e.prefix="ms",e.supportsFullScreen=!0;break}}else e.supportsFullScreen=!0;return e.supportsFullScreen&&(e.fullScreenEventName="ms"===e.prefix?"MSFullscreenChange":e.prefix+"fullscreenchange",e.isFullScreen=function(e){switch(P.undefined(e)&&(e=t.body),this.prefix){case"":return t.fullscreenElement===e;case"moz":return t.mozFullScreenElement===e;default:return t[this.prefix+"FullscreenElement"]===e}},e.requestFullScreen=function(e){return P.undefined(e)&&(e=t.body),""===this.prefix?e.requestFullScreen():e[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]()},e.cancelFullScreen=function(){return""===this.prefix?t.cancelFullScreen():t[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]()},e.element=function(){return""===this.prefix?t.fullscreenElement:t[this.prefix+"FullscreenElement"]}),e}function T(v,T){function C(e,t,n,r){h(e,t,n,x({},r,{plyr:Be}))}function L(t,n){T.debug&&e.console&&(n=Array.prototype.slice.call(n),P.string(T.logPrefix)&&T.logPrefix.length&&n.unshift(T.logPrefix),console[t].apply(console,n))}function O(){return{url:T.iconUrl,absolute:0===T.iconUrl.indexOf("http")||Xe.browser.isIE}}function j(){var e=[],t=O(),n=(t.absolute?"":t.url)+"#"+T.iconPrefix;return a(T.controls,"play-large")&&e.push('"),e.push('
    '),a(T.controls,"restart")&&e.push('"),a(T.controls,"rewind")&&e.push('"),a(T.controls,"play")&&e.push('",'"),a(T.controls,"fast-forward")&&e.push('"),a(T.controls,"progress")&&(e.push('','','','','',"0% "+T.i18n.buffered,""),T.tooltips.seek&&e.push('00:00'),e.push("")),a(T.controls,"current-time")&&e.push('',''+T.i18n.currentTime+"",'00:00',""),a(T.controls,"duration")&&e.push('',''+T.i18n.duration+"",'00:00',""),a(T.controls,"mute")&&e.push('"),a(T.controls,"volume")&&e.push('','",'','',""),a(T.controls,"captions")&&e.push('"),a(T.controls,"settings")&&e.push('
    ','",'","
    "),a(T.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function q(){if(Xe.supported.full&&("audio"!==Xe.type||T.fullscreen.allowAudio)&&T.fullscreen.enabled){var e=A.supportsFullScreen;e||T.fullscreen.fallback&&!B()?(ze((e?"Native":"Fallback")+" fullscreen enabled"),m(Xe.container,T.classes.fullscreen.enabled,!0)):ze("Fullscreen not supported and fallback disabled"),Xe.buttons&&Xe.buttons.fullscreen&&k(Xe.buttons.fullscreen,!1),X()}}function V(){if("video"===Xe.type){Y(T.selectors.captions)||Xe.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Xe.usingTextTracks=!1,Xe.media.textTracks&&(Xe.usingTextTracks=!0);for(var e,t="",n=Xe.media.childNodes,r=0;r=10||Xe.browser.isFirefox&&Xe.browser.version>=31)&&(ze("Detected browser with known TextTrack issues - using manual fallback"),Xe.usingTextTracks=!1),Xe.usingTextTracks){ze("TextTracks supported");for(var o=0;o ");for(var r=0;rXe.captions.length-1){Xe.subcount=Xe.captions.length-1;break}Xe.media.currentTime.toFixed(1)>=n(Xe.captions[Xe.subcount][0])&&Xe.media.currentTime.toFixed(1)<=r(Xe.captions[Xe.subcount][0])?(Xe.currentCaption=Xe.captions[Xe.subcount][1],R(Xe.currentCaption)):R()}}function H(){if(Xe.buttons.captions){m(Xe.container,T.classes.captions.enabled,!0);var e=Xe.storage.captionsEnabled;P["boolean"](e)||(e=T.captions.defaultActive),e&&(m(Xe.container,T.classes.captions.active,!0),k(Xe.buttons.captions,!0))}}function W(e){return Xe.container.querySelectorAll(e)}function Y(e){return W(e)[0]}function B(){try{return e.self!==e.top}catch(t){return!0}}function X(){function e(e){9===e.which&&Xe.isFullscreen&&(e.target!==r||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),r.focus()):(e.preventDefault(),n.focus()))}var t=W("input:not([disabled]), button:not([disabled])"),n=t[0],r=t[t.length-1];g(Xe.container,"keydown",e)}function U(e,t){if(P.string(t))d(e,Xe.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)d(e,Xe.media,t[n])}function J(){if(T.loadSprite){var e=O();e.absolute?(ze("AJAX loading absolute SVG sprite"+(Xe.browser.isIE?" (due to IE)":"")),S(e.url,"sprite-plyr")):ze("Sprite will be used as external resource directly")}var n=T.html;ze("Injecting custom controls"),n||(n=j()),n=o(n,"{seektime}",T.seekTime),n=o(n,"{speed}",1===T.currentSpeed?"Normal":T.currentSpeed.toFixed(1)+"x"),n=o(n,"{lang}","English"),n=o(n,"{id}",Math.floor(1e4*Math.random()));var r;if(P.string(T.selectors.controls.container)&&(r=t.querySelector(T.selectors.controls.container)),P.htmlElement(r)||(r=Xe.container),r.insertAdjacentHTML("beforeend",n),T.tooltips.controls)for(var s=W([T.selectors.controls.wrapper," ",T.selectors.labels," .",T.classes.hidden].join("")),a=s.length-1;a>=0;a--){var i=s[a];m(i,T.classes.hidden,!1),m(i,T.classes.tooltip,!0)}}function z(){try{return Xe.controls=Y(T.selectors.controls.wrapper),Xe.buttons={},Xe.buttons.seek=Y(T.selectors.buttons.seek),Xe.buttons.play=W(T.selectors.buttons.play),Xe.buttons.pause=Y(T.selectors.buttons.pause),Xe.buttons.restart=Y(T.selectors.buttons.restart),Xe.buttons.rewind=Y(T.selectors.buttons.rewind),Xe.buttons.forward=Y(T.selectors.buttons.forward),Xe.buttons.fullscreen=Y(T.selectors.buttons.fullscreen),Xe.buttons.settings=Y(T.selectors.buttons.settings),Xe.buttons.mute=Y(T.selectors.buttons.mute),Xe.buttons.captions=Y(T.selectors.buttons.captions),Xe.progress={},Xe.progress.container=Y(T.selectors.progress.container),Xe.progress.buffer={},Xe.progress.buffer.bar=Y(T.selectors.progress.buffer),Xe.progress.buffer.text=Xe.progress.buffer.bar&&Xe.progress.buffer.bar.getElementsByTagName("span")[0],Xe.progress.played=Y(T.selectors.progress.played),Xe.progress.tooltip=Xe.progress.container&&Xe.progress.container.querySelector("."+T.classes.tooltip),Xe.volume={},Xe.volume.input=Y(T.selectors.volume.input),Xe.volume.display=Y(T.selectors.volume.display),Xe.duration=Y(T.selectors.duration),Xe.currentTime=Y(T.selectors.currentTime),Xe.seekTime=W(T.selectors.seekTime),!0}catch(e){return $e("It looks like there is a problem with your controls HTML"),G(!0),!1}}function $(){m(Xe.container,T.selectors.container.replace(".",""),Xe.supported.full)}function G(e){e&&a(T.types.html5,Xe.type)?Xe.media.setAttribute("controls",""):Xe.media.removeAttribute("controls")}function K(e){var t=T.i18n.play;if(P.string(T.title)&&T.title.length&&(t+=", "+T.title,Xe.container.setAttribute("aria-label",T.title)),Xe.supported.full&&Xe.buttons.play)for(var n=Xe.buttons.play.length-1;n>=0;n--)Xe.buttons.play[n].setAttribute("aria-label",t);P.htmlElement(e)&&e.setAttribute("title",T.i18n.frameTitle.replace("{title}",T.title))}function Q(){var t=null;Xe.storage={},M.supported&&T.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(T.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Z({volume:parseFloat(t)}):Xe.storage=JSON.parse(t)))}function Z(t){M.supported&&T.storage.enabled&&(x(Xe.storage,t),e.localStorage.setItem(T.storage.key,JSON.stringify(Xe.storage)))}function ee(){if(!Xe.media)return void $e("No media element found!");if(Xe.supported.full&&(m(Xe.container,T.classes.type.replace("{0}",Xe.type),!0),a(T.types.embed,Xe.type)&&m(Xe.container,T.classes.type.replace("{0}","video"),!0),m(Xe.container,T.classes.stopped,T.autoplay),m(Xe.ontainer,T.classes.isIos,Xe.browser.isIos),m(Xe.container,T.classes.isTouch,Xe.browser.isTouch),"video"===Xe.type)){var e=t.createElement("div");e.setAttribute("class",T.classes.videoWrapper),i(Xe.media,e),Xe.videoContainer=e}a(T.types.embed,Xe.type)&&te()}function te(){for(var n=t.createElement("div"),r=Xe.embedId,a=Xe.type+"-"+Math.floor(1e4*Math.random()),o=W('[id^="'+Xe.type+'-"]'),i=o.length-1;i>=0;i--)l(o[i]);if(m(Xe.media,T.classes.videoWrapper,!0),m(Xe.media,T.classes.embedWrapper,!0),"youtube"===Xe.type)Xe.media.appendChild(n),n.setAttribute("id",a),P.object(e.YT)?re(r,n):(s(T.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){re(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Xe.type)if(Xe.supported.full?Xe.media.appendChild(n):n=Xe.media,n.setAttribute("id",a),P.object(e.Vimeo))se(r,n);else{s(T.urls.vimeo.api);var u=e.setInterval(function(){P.object(e.Vimeo)&&(e.clearInterval(u),se(r,n))},50)}else if("soundcloud"===Xe.type){var d=t.createElement("iframe");d.loaded=!1,g(d,"load",function(){d.loaded=!0}),c(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:a}),n.appendChild(d),Xe.media.appendChild(n),e.SC||s(T.urls.soundcloud.api);var p=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(p),ae.call(d))},50)}}function ne(){Xe.supported.full&&(We(),Ye()),K(Y("iframe"))}function re(t,n){Xe.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:T.autoplay?1:0,controls:Xe.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:T.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){C(Xe.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Xe.media.play=function(){n.playVideo(),Xe.media.paused=!1},Xe.media.pause=function(){n.pauseVideo(),Xe.media.paused=!0},Xe.media.stop=function(){n.stopVideo(),Xe.media.paused=!0},Xe.media.duration=n.getDuration(),Xe.media.paused=!0,Xe.media.currentTime=0,Xe.media.muted=n.isMuted(),T.title=n.getVideoData().title,Xe.supported.full&&Xe.media.querySelector("iframe").setAttribute("tabindex","-1"),ne(),C(Xe.media,"timeupdate"),C(Xe.media,"durationchange"),e.clearInterval(Ue.buffering),Ue.buffering=e.setInterval(function(){Xe.media.buffered=n.getVideoLoadedFraction(),(null===Xe.media.lastBuffered||Xe.media.lastBuffered=T.speeds.length&&(n=0),e=T.speeds[n]}else e=T.defaultSpeed}T.currentSpeed=e,Xe.media.playbackRate=e,Z({speed:e})}function pe(e){var t=0,n=Xe.media.paused,r=me();P.number(e)?t=e:P.object(e)&&a(["input","change"],e.type)&&(t=e.target.value/e.target.max*r),0>t?t=0:t>r&&(t=r),Ie(t);try{Xe.media.currentTime=t.toFixed(4)}catch(s){}if(a(T.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed.seekTo(t);break;case"vimeo":Xe.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Xe.embed.seekTo(1e3*t)}n&&ie(),C(Xe.media,"timeupdate"),Xe.media.seeking=!0}ze("Seeking to "+Xe.media.currentTime+" seconds"),D(t)}function me(){var e=parseInt(T.duration),t=0;return null===Xe.media.duration||isNaN(Xe.media.duration)||(t=Xe.media.duration),isNaN(e)?t:e}function fe(){m(Xe.container,T.classes.playing,!Xe.media.paused),m(Xe.container,T.classes.stopped,Xe.media.paused),Me(Xe.media.paused)}function ye(){I={x:e.pageXOffset||0,y:e.pageYOffset||0}}function be(){e.scrollTo(I.x,I.y)}function ve(e){var n=A.supportsFullScreen;if(n){if(!e||e.type!==A.fullScreenEventName)return A.isFullScreen(Xe.container)?A.cancelFullScreen():(ye(),A.requestFullScreen(Xe.container)),void(Xe.isFullscreen=A.isFullScreen(Xe.container));Xe.isFullscreen=A.isFullScreen(Xe.container)}else Xe.isFullscreen=!Xe.isFullscreen,t.body.style.overflow=Xe.isFullscreen?"hidden":"";m(Xe.container,T.classes.fullscreen.active,Xe.isFullscreen),X(Xe.isFullscreen),Xe.buttons&&Xe.buttons.fullscreen&&k(Xe.buttons.fullscreen,Xe.isFullscreen),C(Xe.container,Xe.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Xe.isFullscreen&&n&&be()}function ge(e){if(P["boolean"](e)||(e=!Xe.media.muted),k(Xe.buttons.mute,e),Xe.media.muted=e,0===Xe.media.volume&&he(T.volume),a(T.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed[Xe.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Xe.embed.setVolume(Xe.media.muted?0:parseFloat(T.volume/T.volumeMax))}C(Xe.media,"volumechange")}}function he(e){var t=T.volumeMax,n=T.volumeMin;if(P.undefined(e)&&(e=Xe.storage.volume),(null===e||isNaN(e))&&(e=T.volume),e>t&&(e=t),n>e&&(e=n),Xe.media.volume=parseFloat(e/t),Xe.volume.display&&(Xe.volume.display.value=e),a(T.types.embed,Xe.type)){switch(Xe.type){case"youtube":Xe.embed.setVolume(100*Xe.media.volume);break;case"vimeo":case"soundcloud":Xe.embed.setVolume(Xe.media.volume)}C(Xe.media,"volumechange")}0===e?Xe.media.muted=!0:Xe.media.muted&&e>0&&ge()}function ke(e){var t=Xe.media.muted?0:Xe.media.volume*T.volumeMax;P.number(e)||(e=T.volumeStep),he(t+e)}function we(e){var t=Xe.media.muted?0:Xe.media.volume*T.volumeMax;P.number(e)||(e=T.volumeStep),he(t-e)}function xe(){var e=Xe.media.muted?0:Xe.media.volume*T.volumeMax;Xe.supported.full&&(Xe.volume.input&&(Xe.volume.input.value=e),Xe.volume.display&&(Xe.volume.display.value=e)),Z({volume:e}),m(Xe.container,T.classes.muted,0===e),Xe.supported.full&&Xe.buttons.mute&&k(Xe.buttons.mute,0===e)}function _e(e){Xe.supported.full&&Xe.buttons.captions&&(P["boolean"](e)||(e=-1===Xe.container.className.indexOf(T.classes.captions.active)),Xe.captionsEnabled=e,k(Xe.buttons.captions,Xe.captionsEnabled),m(Xe.container,T.classes.captions.active,Xe.captionsEnabled),C(Xe.container,Xe.captionsEnabled?"captionsenabled":"captionsdisabled",!0),Z({captionsEnabled:Xe.captionsEnabled}))}function Te(e){var t="waiting"===e.type;clearTimeout(Ue.loading),Ue.loading=setTimeout(function(){m(Xe.container,T.classes.loading,t),Me(t)},t?250:0)}function Se(e){if(Xe.supported.full){var t=Xe.progress.played,n=0,r=me();if(e)switch(e.type){case"timeupdate":case"seeking":if(Xe.controls.pressed)return;n=w(Xe.media.currentTime,r),"timeupdate"===e.type&&Xe.buttons.seek&&(Xe.buttons.seek.value=n);break;case"playing":case"progress":t=Xe.progress.buffer,n=function(){var e=Xe.media.buffered;return e&&e.length?w(e.end(0),r):P.number(e)?100*e:0}()}Ee(t,n)}}function Ee(e,t){if(Xe.supported.full){if(P.undefined(t)&&(t=0),P.undefined(e)){if(!Xe.progress||!Xe.progress.buffer)return;e=Xe.progress.buffer}P.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ce(e,t){if(t){isNaN(e)&&(e=0),Xe.secs=parseInt(e%60),Xe.mins=parseInt(e/60%60),Xe.hours=parseInt(e/60/60%60);var n=parseInt(me()/60/60%60)>0;Xe.secs=("0"+Xe.secs).slice(-2),Xe.mins=("0"+Xe.mins).slice(-2),t.innerHTML=(n?Xe.hours+":":"")+Xe.mins+":"+Xe.secs}}function Fe(){if(Xe.supported.full){var e=me()||0;!Xe.duration&&T.displayDuration&&Xe.media.paused&&Ce(e,Xe.currentTime),Xe.duration&&Ce(e,Xe.duration),Ne()}}function Ae(e){Ce(Xe.media.currentTime,Xe.currentTime),e&&"timeupdate"===e.type&&Xe.media.seeking||Se(e)}function Ie(e){P.number(e)||(e=0);var t=me(),n=w(e,t);Xe.progress&&Xe.progress.played&&(Xe.progress.played.value=n),Xe.buttons&&Xe.buttons.seek&&(Xe.buttons.seek.value=n)}function Ne(e){var t=me();if(T.tooltips.seek&&Xe.progress.container&&0!==t){var n=Xe.progress.container.getBoundingClientRect(),r=0,s=T.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!f(Xe.progress.tooltip,s))return;r=Xe.progress.tooltip.style.left.replace("%","")}0>r?r=0:r>100&&(r=100),Ce(t/100*r,Xe.progress.tooltip),Xe.progress.tooltip.style.left=r+"%",e&&a(["mouseenter","mouseleave"],e.type)&&m(Xe.progress.tooltip,s,"mouseenter"===e.type)}}function Pe(e){P.undefined(e)&&(e=Xe.storage.speed||T.defaultSpeed),de(e)}function Me(t){if(T.hideControls&&"audio"!==Xe.type){var n=0,r=!1,s=t,o=f(Xe.container,T.classes.loading);if(P["boolean"](t)||(t&&t.type?(r="enterfullscreen"===t.type,s=a(["mousemove","touchstart","mouseenter","focus"],t.type),a(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=f(Xe.container,T.classes.hideControls)),e.clearTimeout(Ue.hover),s||Xe.media.paused||o){if(m(Xe.container,T.classes.hideControls,!1),Xe.media.paused||o)return;Xe.browser.isTouch&&(n=3e3)}s&&Xe.media.paused||(Ue.hover=e.setTimeout(function(){(!Xe.controls.pressed&&!Xe.controls.hover||r)&&m(Xe.container,T.classes.hideControls,!0)},n))}}function Le(e){if(!P.undefined(e))return void Oe(e);var t;switch(Xe.type){case"youtube":t=Xe.embed.getVideoUrl();break;case"vimeo":Xe.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Xe.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Xe.media.currentSrc}return t||""}function Oe(e){function n(){if(Xe.embed=null,l(Xe.media),"video"===Xe.type&&Xe.videoContainer&&l(Xe.videoContainer),Xe.container&&Xe.container.removeAttribute("class"),"type"in e&&(Xe.type=e.type,"video"===Xe.type)){var n=e.sources[0];"type"in n&&a(T.types.embed,n.type)&&(Xe.type=n.type)}switch(Xe.supported=E(Xe.type),Xe.type){case"video":Xe.media=t.createElement("video");break;case"audio":Xe.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Xe.media=t.createElement("div"),Xe.embedId=e.sources[0].src}u(Xe.container,Xe.media),P["boolean"](e.autoplay)&&(T.autoplay=e.autoplay),a(T.types.html5,Xe.type)&&(T.crossorigin&&Xe.media.setAttribute("crossorigin",""),T.autoplay&&Xe.media.setAttribute("autoplay",""),"poster"in e&&Xe.media.setAttribute("poster",e.poster),T.loop&&Xe.media.setAttribute("loop","")),m(Xe.container,T.classes.fullscreen.active,Xe.isFullscreen),m(Xe.container,T.classes.captions.active,Xe.captionsEnabled),$(),a(T.types.html5,Xe.type)&&U("source",e.sources),ee(),a(T.types.html5,Xe.type)&&("tracks"in e&&U("track",e.tracks),Xe.media.load()),(a(T.types.html5,Xe.type)||a(T.types.embed,Xe.type)&&!Xe.supported.full)&&(We(),Ye()),T.title=e.title,K()}return P.object(e)&&"sources"in e&&e.sources.length?(m(Xe.container,T.classes.ready,!1),ie(),Ie(),Ee(),Re(),void De(n,!1)):void $e("Invalid source format")}function je(e){"video"===Xe.type&&Xe.media.setAttribute("poster",e)}function qe(){function n(){var e=le(),t=Xe.buttons[e?"play":"pause"],n=Xe.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=f(t,T.classes.tabFocus);setTimeout(function(){n.focus(),r&&(m(t,T.classes.tabFocus,!1),m(n,T.classes.tabFocus,!0))},100)}}function r(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Xe.buttons){var n=Xe.buttons[t];if(P.nodeList(n))for(var r=0;r0)&&(t?we(n):ke(n)),(e.deltaY>0||e.deltaX<0)&&(t?ke(n):we(n))})}function Ve(){if(g(Xe.media,"timeupdate seeking",Ae),g(Xe.media,"timeupdate",D),g(Xe.media,"durationchange loadedmetadata",Fe),g(Xe.media,"ended",function(){"video"===Xe.type&&T.showPosterOnEnd&&("video"===Xe.type&&R(),pe(),Xe.media.load())}),g(Xe.media,"progress playing",Se),g(Xe.media,"volumechange",xe),g(Xe.media,"play pause ended",fe),g(Xe.media,"waiting canplay seeked",Te),T.clickToPlay&&"audio"!==Xe.type){var e=Y("."+T.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){T.hideControls&&Xe.browser.isTouch&&!Xe.media.paused||(Xe.media.paused?oe():Xe.media.ended?(pe(),oe()):ie())})}T.disableContextMenu&&g(Xe.media,"contextmenu",function(e){e.preventDefault()}),g(Xe.media,T.events.concat(["keyup","keydown"]).join(" "),function(e){C(Xe.container,e.type,!0)})}function Re(){if(a(T.types.html5,Xe.type)){for(var e=Xe.media.querySelectorAll("source"),t=0;t0)&&(t?we(n):ke(n)),(e.deltaY>0||e.deltaX<0)&&(t?ke(n):we(n))})}function Ve(){if(g(Xe.media,"timeupdate seeking",Ae),g(Xe.media,"timeupdate",D),g(Xe.media,"durationchange loadedmetadata",Fe),g(Xe.media,"ended",function(){"video"===Xe.type&&T.showPosterOnEnd&&("video"===Xe.type&&R(),pe(),Xe.media.load())}),g(Xe.media,"progress playing",Se),g(Xe.media,"volumechange",xe),g(Xe.media,"play pause ended",fe),g(Xe.media,"waiting canplay seeked",Te),T.clickToPlay&&"audio"!==Xe.type){var e=Y("."+T.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){T.hideControls&&Xe.browser.isTouch&&!Xe.media.paused||(Xe.media.paused?oe():Xe.media.ended?(pe(),oe()):ie())})}T.disableContextMenu&&g(Xe.media,"contextmenu",function(e){e.preventDefault()}),g(Xe.media,T.events.concat(["keyup","keydown"]).join(" "),function(e){C(Xe.container,e.type,!0)})}function Re(){if(a(T.types.html5,Xe.type)){for(var e=Xe.media.querySelectorAll("source"),t=0;t Date: Sun, 25 Sep 2016 20:01:58 +1000 Subject: [PATCH 12/70] More menu work --- demo/dist/demo.css | 2 +- demo/src/less/lib/fontface.less | 8 +- dist/plyr.css | 2 +- dist/plyr.js | 4 +- gulpfile.js | 6 +- src/js/plyr.js | 142 +++++++++++++++++++++++++------- src/less/plyr.less | 125 ++++++++++++++++++++-------- 7 files changed, 213 insertions(+), 76 deletions(-) diff --git a/demo/dist/demo.css b/demo/dist/demo.css index a9b2f5bc..73829ee3 100644 --- a/demo/dist/demo.css +++ b/demo/dist/demo.css @@ -1 +1 @@ -/*! normalize.css v2.1.3 | MIT License | git.io/normalize */a.logo,img,legend{border:0}a,h1,h2{color:#3498db}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,small,summary{display:block}body,figure,li,ul{margin:0}[hidden],template{display:none}li,nav ul,ul{list-style:none;padding:0}legend,li,nav ul,ul{padding:0}.btn__bar,sub,sup{position:relative}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:0 0;text-decoration:none;border-bottom:1px dotted currentColor;transition:background .3s ease,color .3s ease,border .3s ease}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}.btn__bar,nav li{white-space:nowrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-medium.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-medium.woff) format("woff");font-style:normal;font-weight:500}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-bold.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-bold.woff) format("woff");font-style:normal;font-weight:700}html{font-size:100%;height:100%;background:fixed #f2f5f7}body{font-family:Avenir,"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.5;text-align:center;color:#55646b;font-weight:500;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding:10px}h1,h2{letter-spacing:-.025em;margin:0 0 10px;line-height:1.2;font-weight:700}h1{font-size:64px;font-size:4rem}p,small{margin:0 0 20px}small{padding:0 10px;font-size:14px;font-size:.875rem}a:focus,a:hover{color:#343f4a;border-bottom-color:transparent}a:focus{outline:#343f4a dotted thin;outline-offset:1px}.color--vimeo{color:#19b7ed}.color--youtube{color:#cc181e}*,::after,::before{box-sizing:border-box}.btn__bar ul,nav li{display:inline-block}header{padding:20px;margin-bottom:20px}header p{font-size:18px;font-size:1.125rem}section{max-width:1200px;margin:0 auto 20px}@media (min-width:480px){header{padding-top:60px;padding-bottom:60px}section{margin-bottom:40px}}.icon{fill:currentColor;width:18px;height:18px;vertical-align:-3px}.btn,.btn__count,.error main,video{vertical-align:middle}a svg,button svg,label svg{pointer-events:none}.btn .icon,a .icon{margin-right:10px}.btn:not(.btn-large) .icon{width:16px;height:16px}nav ul{margin:0;font-size:0}nav li{margin-top:10px;font-size:16px;font-size:1rem}nav li+li{margin-left:20px}.btn__bar{margin:0 auto 20px;max-width:1200px}.btn__bar::before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background:#dbe3e8}.btn__bar ul{position:relative;z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn__bar li{margin:0}.btn__bar li:first-child .btn{border-radius:4px 0 0 4px}.btn__bar li:last-child .btn{border-radius:0 4px 4px 0}.btn__bar li+li .btn{margin-left:-1px}.btn__bar li.active .btn{position:relative;z-index:1}.btn__bar li.active .btn .icon{color:inherit}.btn__bar li.active+li .btn:hover{z-index:0}.btn__bar .btn{position:relative;display:block;border-radius:0}.btn__bar .btn:focus,.btn__bar .btn:hover{z-index:1}@media (min-width:560px){.btn__bar{margin-bottom:40px}}.btn,.btn__count{display:inline-block;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:700}.btn{padding:10px 12px;background:linear-gradient(#f8fafb,#e9eef1);border:1px solid #cbd0d3;box-shadow:0 1px 1px rgba(0,0,0,.05);text-shadow:0 1px 1px #fff;color:#55646b;transition:background .1s ease,color .1s ease;font-size:14px;font-size:.875rem}.btn:focus,.btn:hover{border-color:#b5bcc0;color:#55646b;outline:0}.btn--large{padding:10px 20px;font-size:16px;font-size:1rem}.btn--primary,.btn__bar li.active .btn{background-image:linear-gradient(#3498db,#258cd1);background-color:#3498db;border-color:#217dbb;box-shadow:0 1px 1px rgba(0,0,0,.15);text-shadow:0 1px 1px rgba(0,0,0,.1);color:#fff}.btn--primary:focus,.btn--primary:hover{color:#fff;border-color:#196090}.btn--youtube .icon{color:#cc181e}.btn--vimeo .icon{color:#19b7ed}.btn--twitter .icon{color:#4BAAF4}.btn__count{position:relative;margin-left:10px;padding:10px 15px;background:#fff;border:1px solid #cbd0d3}.btn__count::before,.plyr__video-wrapper::after{content:"";position:absolute}.btn__count::before{display:block;width:8px;height:8px;left:1px;top:50%;margin-top:-4px;background:inherit;border:inherit;border-width:1px 0 0 1px;transform:rotate(-45deg) translate(-50%,-50%)}.error body,html.error{height:100%}.error body{width:100%;display:table;table-layout:fixed}.error main{display:table-cell;width:100%}video{max-width:100%}.plyr{margin:0 auto;border-radius:6px}.plyr--audio{max-width:520px}.plyr__video-wrapper::after{pointer-events:none;top:0;bottom:0;left:0;right:0;border:1px solid rgba(0,0,0,.15);border-radius:inherit}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:5px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block} \ No newline at end of file +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */a.logo,img,legend{border:0}a,h1,h2{color:#3498db}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,small,summary{display:block}body,figure,li,ul{margin:0}[hidden],template{display:none}li,nav ul,ul{list-style:none;padding:0}legend,li,nav ul,ul{padding:0}.btn__bar,sub,sup{position:relative}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:0 0;text-decoration:none;border-bottom:1px dotted currentColor;transition:background .3s ease,color .3s ease,border .3s ease}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}.btn__bar,nav li{white-space:nowrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@font-face{font-family:Avenir;src:url(https://cdn.plyr.io/fonts/avenir-medium.woff2) format("woff2"),url(https://cdn.plyr.io/fonts/avenir-medium.woff) format("woff");font-style:normal;font-weight:500}@font-face{font-family:Avenir;src:url(https://cdn.plyr.io/fonts/avenir-bold.woff2) format("woff2"),url(https://cdn.plyr.io/fonts/avenir-bold.woff) format("woff");font-style:normal;font-weight:700}html{font-size:100%;height:100%;background:fixed #f2f5f7}body{font-family:Avenir,"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.5;text-align:center;color:#55646b;font-weight:500;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding:10px}h1,h2{letter-spacing:-.025em;margin:0 0 10px;line-height:1.2;font-weight:700}h1{font-size:64px;font-size:4rem}p,small{margin:0 0 20px}small{padding:0 10px;font-size:14px;font-size:.875rem}a:focus,a:hover{color:#343f4a;border-bottom-color:transparent}a:focus{outline:#343f4a dotted thin;outline-offset:1px}.color--vimeo{color:#19b7ed}.color--youtube{color:#cc181e}*,::after,::before{box-sizing:border-box}.btn__bar ul,nav li{display:inline-block}header{padding:20px;margin-bottom:20px}header p{font-size:18px;font-size:1.125rem}section{max-width:1200px;margin:0 auto 20px}@media (min-width:480px){header{padding-top:60px;padding-bottom:60px}section{margin-bottom:40px}}.icon{fill:currentColor;width:18px;height:18px;vertical-align:-3px}.btn,.btn__count,.error main,video{vertical-align:middle}a svg,button svg,label svg{pointer-events:none}.btn .icon,a .icon{margin-right:10px}.btn:not(.btn-large) .icon{width:16px;height:16px}nav ul{margin:0;font-size:0}nav li{margin-top:10px;font-size:16px;font-size:1rem}nav li+li{margin-left:20px}.btn__bar{margin:0 auto 20px;max-width:1200px}.btn__bar::before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background:#dbe3e8}.btn__bar ul{position:relative;z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn__bar li{margin:0}.btn__bar li:first-child .btn{border-radius:4px 0 0 4px}.btn__bar li:last-child .btn{border-radius:0 4px 4px 0}.btn__bar li+li .btn{margin-left:-1px}.btn__bar li.active .btn{position:relative;z-index:1}.btn__bar li.active .btn .icon{color:inherit}.btn__bar li.active+li .btn:hover{z-index:0}.btn__bar .btn{position:relative;display:block;border-radius:0}.btn__bar .btn:focus,.btn__bar .btn:hover{z-index:1}@media (min-width:560px){.btn__bar{margin-bottom:40px}}.btn,.btn__count{display:inline-block;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:700}.btn{padding:10px 12px;background:linear-gradient(#f8fafb,#e9eef1);border:1px solid #cbd0d3;box-shadow:0 1px 1px rgba(0,0,0,.05);text-shadow:0 1px 1px #fff;color:#55646b;transition:background .1s ease,color .1s ease;font-size:14px;font-size:.875rem}.btn:focus,.btn:hover{border-color:#b5bcc0;color:#55646b;outline:0}.btn--large{padding:10px 20px;font-size:16px;font-size:1rem}.btn--primary,.btn__bar li.active .btn{background-image:linear-gradient(#3498db,#258cd1);background-color:#3498db;border-color:#217dbb;box-shadow:0 1px 1px rgba(0,0,0,.15);text-shadow:0 1px 1px rgba(0,0,0,.1);color:#fff}.btn--primary:focus,.btn--primary:hover{color:#fff;border-color:#196090}.btn--youtube .icon{color:#cc181e}.btn--vimeo .icon{color:#19b7ed}.btn--twitter .icon{color:#4BAAF4}.btn__count{position:relative;margin-left:10px;padding:10px 15px;background:#fff;border:1px solid #cbd0d3}.btn__count::before,.plyr__video-wrapper::after{content:"";position:absolute}.btn__count::before{display:block;width:8px;height:8px;left:1px;top:50%;margin-top:-4px;background:inherit;border:inherit;border-width:1px 0 0 1px;transform:rotate(-45deg) translate(-50%,-50%)}.error body,html.error{height:100%}.error body{width:100%;display:table;table-layout:fixed}.error main{display:table-cell;width:100%}video{max-width:100%}.plyr{margin:0 auto;border-radius:6px}.plyr--audio{max-width:520px}.plyr__video-wrapper::after{pointer-events:none;top:0;bottom:0;left:0;right:0;border:1px solid rgba(0,0,0,.15);border-radius:inherit}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:5px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block} \ No newline at end of file diff --git a/demo/src/less/lib/fontface.less b/demo/src/less/lib/fontface.less index a7da5ad9..ff03f75e 100644 --- a/demo/src/less/lib/fontface.less +++ b/demo/src/less/lib/fontface.less @@ -4,15 +4,15 @@ @font-face { font-family: "Avenir"; - src: url("//cdn.plyr.io/fonts/avenir-medium.woff2") format("woff2"), - url("//cdn.plyr.io/fonts/avenir-medium.woff") format("woff"); + src: url("https://cdn.plyr.io/fonts/avenir-medium.woff2") format("woff2"), + url("https://cdn.plyr.io/fonts/avenir-medium.woff") format("woff"); font-style: normal; font-weight: @font-weight-base; } @font-face { font-family: "Avenir"; - src: url("//cdn.plyr.io/fonts/avenir-bold.woff2") format("woff2"), - url("//cdn.plyr.io/fonts/avenir-bold.woff") format("woff"); + src: url("https://cdn.plyr.io/fonts/avenir-bold.woff2") format("woff2"), + url("https://cdn.plyr.io/fonts/avenir-bold.woff") format("woff"); font-style: normal; font-weight: @font-weight-bold; } \ No newline at end of file diff --git a/dist/plyr.css b/dist/plyr.css index 88344564..0ec373d0 100644 --- a/dist/plyr.css +++ b/dist/plyr.css @@ -1 +1 @@ -.plyr input[type=range]:focus,.plyr:focus{outline:0}.plyr .plyr__video-embed iframe,.plyr__tooltip{pointer-events:none}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{from{transform:translateY(10px);opacity:.5}to{transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;font-weight:500;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;transform:translateY(-35.95%)}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;transform:translateY(-40px);transition:transform .3s ease;color:#fff;font-size:16px;text-align:center}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(52,63,74,.85);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}.plyr__controls .plyr__menu+button,.plyr__controls>button+.plyr__menu,.plyr__controls>button+button{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover,.plyr--video .plyr__controls button[aria-expanded=true]{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover,.plyr--audio .plyr__controls button[aria-expanded=true]{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__menu__container,.plyr__tooltip{bottom:100%;background:rgba(52,63,74,.9);font-size:14px}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__menu{position:relative}.plyr__menu button[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;right:-5px;margin-bottom:10px;animation:plyr-popup .2s ease;box-shadow:0 1px 0 rgba(0,0,0,.2);border-radius:4px;white-space:nowrap;text-align:left;color:#fff}.plyr__menu__container ul{margin:0;padding:5px;list-style:none}.plyr__menu__container button{display:-ms-flexbox;display:flex;width:100%;padding:10px 30px 10px 12px;color:#fff;font-weight:600}.plyr__menu__container button::after{content:"";position:absolute;top:50%;transform:translateY(-50%);right:5px;border:5px solid transparent;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__value{margin-left:auto;padding-left:25px;font-weight:500;color:rgba(255,255,255,.8)}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__tooltip{position:absolute;z-index:2;margin-bottom:10px;padding:5px 7.5px;opacity:0;border-radius:3px;color:#fff;font-weight:500;line-height:1.3;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(52,63,74,.9);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls>button:first-child .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>button:first-child .plyr__tooltip::before{left:16px}.plyr__controls>button:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>button:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>button:first-child .plyr__tooltip--visible,.plyr__controls>button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:first-child:hover .plyr__tooltip,.plyr__controls>button:last-child .plyr__tooltip--visible,.plyr__controls>button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)} \ No newline at end of file +.plyr input[type=range]:focus,.plyr:focus{outline:0}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{from{transform:translateY(10px);opacity:.5}to{transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;font-weight:500;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;transform:translateY(-35.95%)}.plyr .plyr__video-embed iframe{pointer-events:none}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;transform:translateY(-40px);transition:transform .3s ease;color:#fff;font-size:16px;text-align:center}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(52,63,74,.85);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}.plyr__controls .plyr__menu+button,.plyr__controls>button+.plyr__menu,.plyr__controls>button+button{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover,.plyr--video .plyr__controls button[aria-expanded=true]{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover,.plyr--audio .plyr__controls button[aria-expanded=true]{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__menu{position:relative}.plyr__menu button svg{transition:transform .3s ease}.plyr__menu button[aria-expanded=true] svg{transform:rotate(45deg)}.plyr__menu button[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;bottom:100%;right:-5px;margin-bottom:10px;animation:plyr-popup .2s ease;background:rgba(52,63,74,.9);box-shadow:0 1px 0 rgba(0,0,0,.2);border-radius:4px;white-space:nowrap;text-align:left;color:#fff;font-size:14px}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__menu__container ul{margin:0;padding:5px;list-style:none}.plyr__menu__container button{display:-ms-flexbox;display:flex;width:100%;padding:7px 14px;color:#fff;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__menu__container .plyr__menu__btn::after{content:"";position:absolute;top:50%;transform:translateY(-50%);border:5px solid transparent}.plyr__menu__container .plyr__menu__btn--forward{padding-right:28px}.plyr__menu__container .plyr__menu__btn--forward::after{right:5px;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__btn--back{position:relative;padding-top:4px;padding-bottom:4px;padding-left:28px;margin-bottom:10px;font-weight:500}.plyr__menu__container .plyr__menu__btn--back::after{left:5px;border-right-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__btn--back::before{content:"";position:absolute;top:100%;left:0;right:0;height:1px;overflow:hidden;margin-top:4px;background:rgba(0,0,0,.15);box-shadow:0 1px 0 rgba(255,255,255,.1)}.plyr__menu__container .plyr__menu__btn__badge,.plyr__menu__container .plyr__menu__btn__value{display:inherit;margin-left:auto;padding-left:25px;pointer-events:none}.plyr__menu__container .plyr__menu__btn__value{font-weight:500;color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__btn__badge span{padding:2px 4px;border-radius:2px;background:#fff;color:rgba(52,63,74,.9);font-size:10px}.plyr__tooltip{position:absolute;z-index:2;bottom:100%;margin-bottom:10px;padding:5px 7.5px;pointer-events:none;opacity:0;background:rgba(52,63,74,.9);border-radius:3px;color:#fff;font-size:14px;font-weight:500;line-height:1.3;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(52,63,74,.9);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls>button:first-child .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>button:first-child .plyr__tooltip::before{left:16px}.plyr__controls>button:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>button:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>button:first-child .plyr__tooltip--visible,.plyr__controls>button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:first-child:hover .plyr__tooltip,.plyr__controls>button:last-child .plyr__tooltip--visible,.plyr__controls>button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)} \ No newline at end of file diff --git a/dist/plyr.js b/dist/plyr.js index a7382111..7ece425d 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,r,s=navigator.userAgent,a=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,d=!1;return navigator.appVersion.indexOf("Windows NT")!==-1&&navigator.appVersion.indexOf("rv:11")!==-1?(l=!0,a="IE",o="11"):(n=s.indexOf("MSIE"))!==-1?(l=!0,a="IE",o=s.substring(n+5)):(n=s.indexOf("Chrome"))!==-1?(c=!0,a="Chrome",o=s.substring(n+7)):(n=s.indexOf("Safari"))!==-1?(d=!0,a="Safari",o=s.substring(n+7),(n=s.indexOf("Version"))!==-1&&(o=s.substring(n+8))):(n=s.indexOf("Firefox"))!==-1?(u=!0,a="Firefox",o=s.substring(n+8)):(e=s.lastIndexOf(" ")+1)<(n=s.lastIndexOf("/"))&&(a=s.substring(e,n),o=s.substring(n+1),a.toLowerCase()===a.toUpperCase()&&(a=navigator.appName)),(r=o.indexOf(";"))!==-1&&(o=o.substring(0,r)),(r=o.indexOf(" "))!==-1&&(o=o.substring(0,r)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:a,version:i,isIE:l,isFirefox:u,isChrome:c,isSafari:d,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function r(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var r=t.getElementsByTagName("script")[0];r.parentNode.insertBefore(n,r)}}function s(e,t){return Array.prototype.indexOf&&e.indexOf(t)!==-1}function a(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function o(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],a=s.parentNode,o=s.nextSibling;return r.appendChild(s),o?a.insertBefore(r,o):a.appendChild(r),r}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,I.boolean(t[n])&&t[n]?"":t[n])}function c(e,n,r){var s=t.createElement(e);u(s,r),l(n,s)}function d(e){return e.replace(".","")}function p(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function m(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function f(e,n){var r=Element.prototype,s=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return s.call(e,n)}function y(e,t,n,r,s){v(e,t,function(t){n&&n.apply(e,[t]),r.apply(e,[t])},s)}function b(e,t,n,r,s){var a=t.split(" ");if(I.boolean(s)||(s=!1),e instanceof NodeList)for(var o=0;o','',''+T.i18n.play+"",""),e.push('
    '),s(T.controls,"restart")&&e.push('"),s(T.controls,"rewind")&&e.push('"),s(T.controls,"play")&&e.push('",'"),s(T.controls,"fast-forward")&&e.push('"),s(T.controls,"progress")&&(e.push('','','','','',"0% "+T.i18n.buffered,""),T.tooltips.seek&&e.push('00:00'),e.push("")),s(T.controls,"current-time")&&e.push('',''+T.i18n.currentTime+"",'00:00',""),s(T.controls,"duration")&&e.push('',''+T.i18n.duration+"",'00:00',""),s(T.controls,"mute")&&e.push('"),s(T.controls,"volume")&&e.push('','",'','',""),s(T.controls,"captions")&&e.push('"),s(T.controls,"settings")&&e.push('
    ','",'","
    "),s(T.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function O(){if(Ye.supported.full&&("audio"!==Ye.type||T.fullscreen.allowAudio)&&T.fullscreen.enabled){var e=P.fullscreen;e||T.fullscreen.fallback&&!W()?(Ue((e?"Native":"Fallback")+" fullscreen enabled"),p(Ye.container,T.classes.fullscreen.enabled,!0)):Ue("Fullscreen not supported and fallback disabled"),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,!1),Y()}}function j(){if("video"===Ye.type){H(T.selectors.captions)||Ye.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Ye.usingTextTracks=!1,Ye.media.textTracks&&(Ye.usingTextTracks=!0);for(var e,t="",n=Ye.media.childNodes,r=0;r=10||Ye.browser.isFirefox&&Ye.browser.version>=31)&&(Ue("Detected browser with known TextTrack issues - using manual fallback"),Ye.usingTextTracks=!1),Ye.usingTextTracks){Ue("TextTracks supported");for(var o=0;o ");for(var r=0;rYe.captions.length-1){Ye.subcount=Ye.captions.length-1;break}Ye.media.currentTime.toFixed(1)>=n(Ye.captions[Ye.subcount][0])&&Ye.media.currentTime.toFixed(1)<=r(Ye.captions[Ye.subcount][0])?(Ye.currentCaption=Ye.captions[Ye.subcount][1],q(Ye.currentCaption)):q()}}function R(){if(Ye.buttons.captions){p(Ye.container,T.classes.captions.enabled,!0);var e=Ye.storage.captionsEnabled;I.boolean(e)||(e=T.captions.defaultActive),e&&(p(Ye.container,T.classes.captions.active,!0),h(Ye.buttons.captions,!0))}}function D(e){return Ye.container.querySelectorAll(e)}function H(e){return D(e)[0]}function W(){try{return e.self!==e.top}catch(e){return!0}}function Y(){function e(e){9===e.which&&Ye.isFullscreen&&(e.target!==r||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),r.focus()):(e.preventDefault(),n.focus()))}var t=D("input:not([disabled]), button:not([disabled])"),n=t[0],r=t[t.length-1];v(Ye.container,"keydown",e)}function B(e,t){if(I.string(t))c(e,Ye.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Ye.media,t[n])}function X(){if(T.loadSprite){var e=N();e.absolute?(Ue("AJAX loading absolute SVG sprite"+(Ye.browser.isIE?" (due to IE)":"")),_(e.url,"sprite-plyr")):Ue("Sprite will be used as external resource directly")}var n=T.html;Ue("Injecting custom controls"),n||(n=L()),n=a(n,"{seektime}",T.seekTime),n=a(n,"{speed}",1===T.currentSpeed?"Normal":T.currentSpeed.toFixed(1)+"x"),n=a(n,"{lang}","English"),n=a(n,"{id}",Math.floor(1e4*Math.random()));var r;if(I.string(T.selectors.controls.container)&&(r=t.querySelector(T.selectors.controls.container)),I.htmlElement(r)||(r=Ye.container),r.insertAdjacentHTML("beforeend",n),T.tooltips.controls)for(var s=D([T.selectors.controls.wrapper," ",T.selectors.labels," .",T.classes.hidden].join("")),o=s.length-1;o>=0;o--){var i=s[o];p(i,T.classes.hidden,!1),p(i,T.classes.tooltip,!0)}}function U(){try{return Ye.controls=H(T.selectors.controls.wrapper),Ye.buttons={},Ye.buttons.seek=H(T.selectors.buttons.seek),Ye.buttons.play=D(T.selectors.buttons.play),Ye.buttons.pause=H(T.selectors.buttons.pause),Ye.buttons.restart=H(T.selectors.buttons.restart),Ye.buttons.rewind=H(T.selectors.buttons.rewind),Ye.buttons.forward=H(T.selectors.buttons.forward),Ye.buttons.fullscreen=H(T.selectors.buttons.fullscreen),Ye.buttons.settings=H(T.selectors.buttons.settings),Ye.buttons.mute=H(T.selectors.buttons.mute),Ye.buttons.captions=H(T.selectors.buttons.captions),Ye.progress={},Ye.progress.container=H(T.selectors.progress.container),Ye.progress.buffer={},Ye.progress.buffer.bar=H(T.selectors.progress.buffer),Ye.progress.buffer.text=Ye.progress.buffer.bar&&Ye.progress.buffer.bar.getElementsByTagName("span")[0],Ye.progress.played=H(T.selectors.progress.played),Ye.progress.tooltip=Ye.progress.container&&Ye.progress.container.querySelector("."+T.classes.tooltip),Ye.volume={},Ye.volume.input=H(T.selectors.volume.input),Ye.volume.display=H(T.selectors.volume.display),Ye.duration=H(T.selectors.duration),Ye.currentTime=H(T.selectors.currentTime),Ye.seekTime=D(T.selectors.seekTime),!0}catch(e){return Je("It looks like there is a problem with your controls HTML"),z(!0),!1}}function J(){p(Ye.container,T.selectors.container.replace(".",""),Ye.supported.full)}function z(e){e&&s(T.types.html5,Ye.type)?Ye.media.setAttribute("controls",""):Ye.media.removeAttribute("controls")}function $(e){var t=T.i18n.play;if(I.string(T.title)&&T.title.length&&(t+=", "+T.title,Ye.container.setAttribute("aria-label",T.title)),Ye.supported.full&&Ye.buttons.play)for(var n=Ye.buttons.play.length-1;n>=0;n--)Ye.buttons.play[n].setAttribute("aria-label",t);I.htmlElement(e)&&e.setAttribute("title",T.i18n.frameTitle.replace("{title}",T.title))}function G(){var t=null;Ye.storage={},P.storage&&T.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(T.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?K({volume:parseFloat(t)}):Ye.storage=JSON.parse(t)))}function K(t){P.storage&&T.storage.enabled&&(w(Ye.storage,t),e.localStorage.setItem(T.storage.key,JSON.stringify(Ye.storage)))}function Q(){if(!Ye.media)return void Je("No media element found!");if(Ye.supported.full&&(p(Ye.container,T.classes.type.replace("{0}",Ye.type),!0),s(T.types.embed,Ye.type)&&p(Ye.container,T.classes.type.replace("{0}","video"),!0),p(Ye.container,T.classes.pip.enabled,P.pip(Ye)),p(Ye.container,T.classes.stopped,T.autoplay),p(Ye.ontainer,T.classes.isIos,Ye.browser.isIos),p(Ye.container,T.classes.isTouch,Ye.browser.isTouch),"video"===Ye.type)){var e=t.createElement("div");e.setAttribute("class",T.classes.videoWrapper),o(Ye.media,e),Ye.videoContainer=e}s(T.types.embed,Ye.type)&&Z()}function Z(){for(var n=t.createElement("div"),s=Ye.embedId,a=Ye.type+"-"+Math.floor(1e4*Math.random()),o=D('[id^="'+Ye.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(p(Ye.media,T.classes.videoWrapper,!0),p(Ye.media,T.classes.embedWrapper,!0),"youtube"===Ye.type)Ye.media.appendChild(n),n.setAttribute("id",a),I.object(e.YT)?te(s,n):(r(T.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){te(s,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Ye.type)if(Ye.supported.full?Ye.media.appendChild(n):n=Ye.media,n.setAttribute("id",a),I.object(e.Vimeo))ne(s,n);else{r(T.urls.vimeo.api);var c=e.setInterval(function(){I.object(e.Vimeo)&&(e.clearInterval(c),ne(s,n))},50)}else if("soundcloud"===Ye.type){var d=t.createElement("iframe");d.loaded=!1,v(d,"load",function(){d.loaded=!0}),u(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+s,id:a}),n.appendChild(d),Ye.media.appendChild(n),e.SC||r(T.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(m),re.call(d))},50)}}function ee(){Ye.supported.full&&(De(),He()),$(H("iframe"))}function te(t,n){Ye.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:T.autoplay?1:0,controls:Ye.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:T.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){S(Ye.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Ye.media.play=function(){n.playVideo(),Ye.media.paused=!1},Ye.media.pause=function(){n.pauseVideo(),Ye.media.paused=!0},Ye.media.stop=function(){n.stopVideo(),Ye.media.paused=!0},Ye.media.duration=n.getDuration(),Ye.media.paused=!0,Ye.media.currentTime=0,Ye.media.muted=n.isMuted(),T.title=n.getVideoData().title,Ye.supported.full&&Ye.media.querySelector("iframe").setAttribute("tabindex","-1"),ee(),S(Ye.media,"timeupdate"),S(Ye.media,"durationchange"),e.clearInterval(Be.buffering),Be.buffering=e.setInterval(function(){Ye.media.buffered=n.getVideoLoadedFraction(),(null===Ye.media.lastBuffered||Ye.media.lastBuffered=T.speeds.length&&(n=0),e=T.speeds[n]}else e=T.defaultSpeed}T.currentSpeed=e,Ye.media.playbackRate=e,K({speed:e})}function ce(e){var t=0,n=Ye.media.paused,r=de();I.number(e)?t=e:I.object(e)&&s(["input","change"],e.type)&&(t=e.target.value/e.target.max*r),t<0?t=0:t>r&&(t=r),Ae(t);try{Ye.media.currentTime=t.toFixed(4)}catch(e){}if(s(T.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.seekTo(t);break;case"vimeo":Ye.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Ye.embed.seekTo(1e3*t)}n&&ae(),S(Ye.media,"timeupdate"),Ye.media.seeking=!0}Ue("Seeking to "+Ye.media.currentTime+" seconds"),V(t)}function de(){var e=parseInt(T.duration),t=0;return null===Ye.media.duration||isNaN(Ye.media.duration)||(t=Ye.media.duration),isNaN(e)?t:e}function pe(){p(Ye.container,T.classes.playing,!Ye.media.paused),p(Ye.container,T.classes.stopped,Ye.media.paused),Pe(Ye.media.paused)}function me(){A={x:e.pageXOffset||0,y:e.pageYOffset||0}}function fe(){e.scrollTo(A.x,A.y)}function ye(e){var n=P.fullscreen;if(n){if(!e||e.type!==C.eventType)return C.isFullScreen(Ye.container)?C.cancelFullScreen():(me(),C.requestFullScreen(Ye.container)),void(Ye.isFullscreen=C.isFullScreen(Ye.container));Ye.isFullscreen=C.isFullScreen(Ye.container)}else Ye.isFullscreen=!Ye.isFullscreen,t.body.style.overflow=Ye.isFullscreen?"hidden":"";p(Ye.container,T.classes.fullscreen.active,Ye.isFullscreen),Y(Ye.isFullscreen),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,Ye.isFullscreen),S(Ye.container,Ye.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Ye.isFullscreen&&n&&fe()}function be(e){if(I.boolean(e)||(e=!Ye.media.muted),h(Ye.buttons.mute,e),Ye.media.muted=e,0===Ye.media.volume&&ve(T.volume),s(T.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed[Ye.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.muted?0:parseFloat(T.volume/T.volumeMax))}S(Ye.media,"volumechange")}}function ve(e){var t=T.volumeMax,n=T.volumeMin;if(I.undefined(e)&&(e=Ye.storage.volume),(null===e||isNaN(e))&&(e=T.volume),e>t&&(e=t),e0&&be()}function ge(e){var t=Ye.media.muted?0:Ye.media.volume*T.volumeMax;I.number(e)||(e=T.volumeStep),ve(t+e)}function he(e){var t=Ye.media.muted?0:Ye.media.volume*T.volumeMax;I.number(e)||(e=T.volumeStep),ve(t-e)}function ke(){var e=Ye.media.muted?0:Ye.media.volume*T.volumeMax;Ye.supported.full&&(Ye.volume.input&&(Ye.volume.input.value=e),Ye.volume.display&&(Ye.volume.display.value=e)),K({volume:e}),p(Ye.container,T.classes.muted,0===e),Ye.supported.full&&Ye.buttons.mute&&h(Ye.buttons.mute,0===e)}function we(e){Ye.supported.full&&Ye.buttons.captions&&(I.boolean(e)||(e=Ye.container.className.indexOf(T.classes.captions.active)===-1),Ye.captionsEnabled=e,h(Ye.buttons.captions,Ye.captionsEnabled),p(Ye.container,T.classes.captions.active,Ye.captionsEnabled),S(Ye.container,Ye.captionsEnabled?"captionsenabled":"captionsdisabled",!0),K({captionsEnabled:Ye.captionsEnabled}))}function Te(e){var t="waiting"===e.type;clearTimeout(Be.loading),Be.loading=setTimeout(function(){p(Ye.container,T.classes.loading,t),Pe(t)},t?250:0)}function _e(e){if(Ye.supported.full){var t=Ye.progress.played,n=0,r=de();if(e)switch(e.type){case"timeupdate":case"seeking":if(Ye.controls.pressed)return;n=k(Ye.media.currentTime,r),"timeupdate"===e.type&&Ye.buttons.seek&&(Ye.buttons.seek.value=n);break;case"playing":case"progress":t=Ye.progress.buffer,n=function(){var e=Ye.media.buffered;return e&&e.length?k(e.end(0),r):I.number(e)?100*e:0}()}xe(t,n)}}function xe(e,t){if(Ye.supported.full){if(I.undefined(t)&&(t=0),I.undefined(e)){if(!Ye.progress||!Ye.progress.buffer)return;e=Ye.progress.buffer}I.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Se(e,t){if(t){isNaN(e)&&(e=0),Ye.secs=parseInt(e%60),Ye.mins=parseInt(e/60%60),Ye.hours=parseInt(e/60/60%60);var n=parseInt(de()/60/60%60)>0;Ye.secs=("0"+Ye.secs).slice(-2),Ye.mins=("0"+Ye.mins).slice(-2),t.innerHTML=(n?Ye.hours+":":"")+Ye.mins+":"+Ye.secs}}function Ee(){if(Ye.supported.full){var e=de()||0;!Ye.duration&&T.displayDuration&&Ye.media.paused&&Se(e,Ye.currentTime),Ye.duration&&Se(e,Ye.duration),Fe()}}function Ce(e){Se(Ye.media.currentTime,Ye.currentTime),e&&"timeupdate"===e.type&&Ye.media.seeking||_e(e)}function Ae(e){I.number(e)||(e=0);var t=de(),n=k(e,t);Ye.progress&&Ye.progress.played&&(Ye.progress.played.value=n),Ye.buttons&&Ye.buttons.seek&&(Ye.buttons.seek.value=n)}function Fe(e){var t=de();if(T.tooltips.seek&&Ye.progress.container&&0!==t){var n=Ye.progress.container.getBoundingClientRect(),r=0,a=T.classes.tooltip+"--visible";if(e)r=100/n.width*(e.pageX-n.left);else{if(!m(Ye.progress.tooltip,a))return;r=Ye.progress.tooltip.style.left.replace("%","")}r<0?r=0:r>100&&(r=100),Se(t/100*r,Ye.progress.tooltip),Ye.progress.tooltip.style.left=r+"%",e&&s(["mouseenter","mouseleave"],e.type)&&p(Ye.progress.tooltip,a,"mouseenter"===e.type)}}function Ie(e){I.undefined(e)&&(e=Ye.storage.speed||T.defaultSpeed),ue(e)}function Pe(t){if(T.hideControls&&"audio"!==Ye.type){var n=0,r=!1,a=t,o=m(Ye.container,T.classes.loading);if(I.boolean(t)||(t&&t.type?(r="enterfullscreen"===t.type,a=s(["mousemove","touchstart","mouseenter","focus"],t.type),s(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):a=m(Ye.container,T.classes.hideControls)),e.clearTimeout(Be.hover),a||Ye.media.paused||o){if(p(Ye.container,T.classes.hideControls,!1),Ye.media.paused||o)return;Ye.browser.isTouch&&(n=3e3)}a&&Ye.media.paused||(Be.hover=e.setTimeout(function(){(!Ye.controls.pressed&&!Ye.controls.hover||r)&&p(Ye.container,T.classes.hideControls,!0)},n))}}function Me(e){if(!I.undefined(e))return void Ne(e);var t;switch(Ye.type){case"youtube":t=Ye.embed.getVideoUrl();break;case"vimeo":Ye.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Ye.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Ye.media.currentSrc}return t||""}function Ne(e){function n(){if(Ye.embed=null,i(Ye.media),"video"===Ye.type&&Ye.videoContainer&&i(Ye.videoContainer),Ye.container&&Ye.container.removeAttribute("class"),"type"in e&&(Ye.type=e.type,"video"===Ye.type)){var n=e.sources[0];"type"in n&&s(T.types.embed,n.type)&&(Ye.type=n.type)}switch(Ye.supported=x(Ye.type),Ye.type){case"video":Ye.media=t.createElement("video");break;case"audio":Ye.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Ye.media=t.createElement("div"),Ye.embedId=e.sources[0].src}l(Ye.container,Ye.media),I.boolean(e.autoplay)&&(T.autoplay=e.autoplay),s(T.types.html5,Ye.type)&&(T.crossorigin&&Ye.media.setAttribute("crossorigin",""),T.autoplay&&Ye.media.setAttribute("autoplay",""),"poster"in e&&Ye.media.setAttribute("poster",e.poster),T.loop&&Ye.media.setAttribute("loop","")),p(Ye.container,T.classes.fullscreen.active,Ye.isFullscreen),p(Ye.container,T.classes.captions.active,Ye.captionsEnabled),J(),s(T.types.html5,Ye.type)&&B("source",e.sources),Q(),s(T.types.html5,Ye.type)&&("tracks"in e&&B("track",e.tracks),Ye.media.load()),(s(T.types.html5,Ye.type)||s(T.types.embed,Ye.type)&&!Ye.supported.full)&&(De(),He()),T.title=e.title,$()}return I.object(e)&&"sources"in e&&e.sources.length?(p(Ye.container,T.classes.ready,!1),ae(),Ae(),xe(),qe(),void Ve(n,!1)):void Je("Invalid source format")}function Le(e){"video"===Ye.type&&Ye.media.setAttribute("poster",e)}function Oe(){function n(){var e=oe(),t=Ye.buttons[e?"play":"pause"],n=Ye.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var r=m(t,T.classes.tabFocus);setTimeout(function(){n.focus(),r&&(p(t,T.classes.tabFocus,!1),p(n,T.classes.tabFocus,!0))},100)}}function r(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function a(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Ye.buttons){var n=Ye.buttons[t];if(I.nodeList(n))for(var r=0;r0)&&(t?he(n):ge(n)),(e.deltaY>0||e.deltaX<0)&&(t?ge(n):he(n))})}function je(){if(v(Ye.media,"timeupdate seeking",Ce),v(Ye.media,"timeupdate",V),v(Ye.media,"durationchange loadedmetadata",Ee),v(Ye.media,"ended",function(){"video"===Ye.type&&T.showPosterOnEnd&&("video"===Ye.type&&q(),ce(),Ye.media.load())}),v(Ye.media,"progress playing",_e),v(Ye.media,"volumechange",ke),v(Ye.media,"play pause ended",pe),v(Ye.media,"waiting canplay seeked",Te),T.clickToPlay&&"audio"!==Ye.type){var e=H("."+T.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",v(e,"click",function(){T.hideControls&&Ye.browser.isTouch&&!Ye.media.paused||(Ye.media.paused?se():Ye.media.ended?(ce(),se()):ae())})}T.disableContextMenu&&v(Ye.media,"contextmenu",function(e){e.preventDefault()}),v(Ye.media,T.events.concat(["keyup","keydown"]).join(" "),function(e){S(Ye.container,e.type,!0)})}function qe(){if(s(T.types.html5,Ye.type)){for(var e=Ye.media.querySelectorAll("source"),t=0;t=0;n--){var a=n>0?t.cloneNode(!0):t,s=e[n],r=s.parentNode,o=s.nextSibling;return a.appendChild(s),o?r.insertBefore(a,o):r.appendChild(a),a}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,I.boolean(t[n])&&t[n]?"":t[n])}function c(e,n,a){var s=t.createElement(e);u(s,a),l(n,s)}function p(e){return e.replace(".","")}function d(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function f(e,n){var a=Element.prototype,s=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return s.call(e,n)}function y(e,t,n,a,s){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},s)}function b(e,t,n,a,s){var r=t.split(" ");if(I.boolean(s)||(s=!1),e instanceof NodeList)for(var o=0;o','',''+w.i18n.play+"",""),e.push('
    '),s(w.controls,"restart")&&e.push('"),s(w.controls,"rewind")&&e.push('"),s(w.controls,"play")&&e.push('",'"),s(w.controls,"fast-forward")&&e.push('"),s(w.controls,"progress")&&(e.push('','','','','',"0% "+w.i18n.buffered,""),w.tooltips.seek&&e.push('00:00'),e.push("")),s(w.controls,"current-time")&&e.push('',''+w.i18n.currentTime+"",'00:00',""),s(w.controls,"duration")&&e.push('',''+w.i18n.duration+"",'00:00',""),s(w.controls,"mute")&&e.push('"),s(w.controls,"volume")&&e.push('','",'','',""),s(w.controls,"captions")&&e.push('"),s(w.controls,"settings")&&e.push('
    ','",'","
    "),s(w.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function L(){if(Ye.supported.full&&("audio"!==Ye.type||w.fullscreen.allowAudio)&&w.fullscreen.enabled){var e=P.fullscreen;e||w.fullscreen.fallback&&!W()?(Ue((e?"Native":"Fallback")+" fullscreen enabled"),d(Ye.container,w.classes.fullscreen.enabled,!0)):Ue("Fullscreen not supported and fallback disabled"),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,!1),Y()}}function j(){if("video"===Ye.type){H(w.selectors.captions)||Ye.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Ye.usingTextTracks=!1,Ye.media.textTracks&&(Ye.usingTextTracks=!0);for(var e,t="",n=Ye.media.childNodes,a=0;a=10||Ye.browser.isFirefox&&Ye.browser.version>=31)&&(Ue("Detected browser with known TextTrack issues - using manual fallback"),Ye.usingTextTracks=!1),Ye.usingTextTracks){Ue("TextTracks supported");for(var o=0;o ");for(var a=0;aYe.captions.length-1){Ye.subcount=Ye.captions.length-1;break}Ye.media.currentTime.toFixed(1)>=n(Ye.captions[Ye.subcount][0])&&Ye.media.currentTime.toFixed(1)<=a(Ye.captions[Ye.subcount][0])?(Ye.currentCaption=Ye.captions[Ye.subcount][1],q(Ye.currentCaption)):q()}}function R(){if(Ye.buttons.captions){d(Ye.container,w.classes.captions.enabled,!0);var e=Ye.storage.captionsEnabled;I.boolean(e)||(e=w.captions.defaultActive),e&&(d(Ye.container,w.classes.captions.active,!0),h(Ye.buttons.captions,!0))}}function D(e){return Ye.container.querySelectorAll(e)}function H(e){return D(e)[0]}function W(){try{return e.self!==e.top}catch(e){return!0}}function Y(){function e(e){9===e.which&&Ye.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=D("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Ye.container,"keydown",e)}function B(e,t){if(I.string(t))c(e,Ye.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Ye.media,t[n])}function X(){if(w.loadSprite){var e=N();e.absolute?(Ue("AJAX loading absolute SVG sprite"+(Ye.browser.isIE?" (due to IE)":"")),x(e.url,"sprite-plyr")):Ue("Sprite will be used as external resource directly")}var n=w.html;Ue("Injecting custom controls"),n||(n=O()),n=r(n,"{seektime}",w.seekTime),n=r(n,"{speed}",w.currentSpeed.toFixed(1).toString().replace(".0","")+"×"),n=r(n,"{lang}","English"),n=r(n,"{id}",Math.floor(1e4*Math.random()));var a;if(I.string(w.selectors.controls.container)&&(a=t.querySelector(w.selectors.controls.container)),I.htmlElement(a)||(a=Ye.container),a.insertAdjacentHTML("beforeend",n),w.tooltips.controls)for(var s=D([w.selectors.controls.wrapper," ",w.selectors.labels," .",w.classes.hidden].join("")),o=s.length-1;o>=0;o--){var i=s[o];d(i,w.classes.hidden,!1),d(i,w.classes.tooltip,!0)}}function U(){try{return Ye.controls=H(w.selectors.controls.wrapper),Ye.buttons={},Ye.buttons.seek=H(w.selectors.buttons.seek),Ye.buttons.play=D(w.selectors.buttons.play),Ye.buttons.pause=H(w.selectors.buttons.pause),Ye.buttons.restart=H(w.selectors.buttons.restart),Ye.buttons.rewind=H(w.selectors.buttons.rewind),Ye.buttons.forward=H(w.selectors.buttons.forward),Ye.buttons.fullscreen=H(w.selectors.buttons.fullscreen),Ye.buttons.settings=H(w.selectors.buttons.settings),Ye.buttons.mute=H(w.selectors.buttons.mute),Ye.buttons.captions=H(w.selectors.buttons.captions),Ye.progress={},Ye.progress.container=H(w.selectors.progress.container),Ye.progress.buffer={},Ye.progress.buffer.bar=H(w.selectors.progress.buffer),Ye.progress.buffer.text=Ye.progress.buffer.bar&&Ye.progress.buffer.bar.getElementsByTagName("span")[0],Ye.progress.played=H(w.selectors.progress.played),Ye.progress.tooltip=Ye.progress.container&&Ye.progress.container.querySelector("."+w.classes.tooltip),Ye.volume={},Ye.volume.input=H(w.selectors.volume.input),Ye.volume.display=H(w.selectors.volume.display),Ye.duration=H(w.selectors.duration),Ye.currentTime=H(w.selectors.currentTime),Ye.seekTime=D(w.selectors.seekTime),!0}catch(e){return Je("It looks like there is a problem with your controls HTML"),z(!0),!1}}function J(){d(Ye.container,w.selectors.container.replace(".",""),Ye.supported.full)}function z(e){e&&s(w.types.html5,Ye.type)?Ye.media.setAttribute("controls",""):Ye.media.removeAttribute("controls")}function $(e){var t=w.i18n.play;if(I.string(w.title)&&w.title.length&&(t+=", "+w.title,Ye.container.setAttribute("aria-label",w.title)),Ye.supported.full&&Ye.buttons.play)for(var n=Ye.buttons.play.length-1;n>=0;n--)Ye.buttons.play[n].setAttribute("aria-label",t);I.htmlElement(e)&&e.setAttribute("title",w.i18n.frameTitle.replace("{title}",w.title))}function G(){var t=null;Ye.storage={},P.storage&&w.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(w.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?K({volume:parseFloat(t)}):Ye.storage=JSON.parse(t)))}function K(t){P.storage&&w.storage.enabled&&(k(Ye.storage,t),e.localStorage.setItem(w.storage.key,JSON.stringify(Ye.storage)))}function Q(){if(!Ye.media)return void Je("No media element found!");if(Ye.supported.full&&(d(Ye.container,w.classes.type.replace("{0}",Ye.type),!0),s(w.types.embed,Ye.type)&&d(Ye.container,w.classes.type.replace("{0}","video"),!0),d(Ye.container,w.classes.pip.enabled,P.pip(Ye)),d(Ye.container,w.classes.stopped,w.autoplay),d(Ye.ontainer,w.classes.isIos,Ye.browser.isIos),d(Ye.container,w.classes.isTouch,Ye.browser.isTouch),"video"===Ye.type)){var e=t.createElement("div");e.setAttribute("class",w.classes.videoWrapper),o(Ye.media,e),Ye.videoContainer=e}s(w.types.embed,Ye.type)&&Z()}function Z(){for(var n=t.createElement("div"),s=Ye.embedId,r=Ye.type+"-"+Math.floor(1e4*Math.random()),o=D('[id^="'+Ye.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(d(Ye.media,w.classes.videoWrapper,!0),d(Ye.media,w.classes.embedWrapper,!0),"youtube"===Ye.type)Ye.media.appendChild(n),n.setAttribute("id",r),I.object(e.YT)?te(s,n):(a(w.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){te(s,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Ye.type)if(Ye.supported.full?Ye.media.appendChild(n):n=Ye.media,n.setAttribute("id",r),I.object(e.Vimeo))ne(s,n);else{a(w.urls.vimeo.api);var c=e.setInterval(function(){I.object(e.Vimeo)&&(e.clearInterval(c),ne(s,n))},50)}else if("soundcloud"===Ye.type){var p=t.createElement("iframe");p.loaded=!1,g(p,"load",function(){p.loaded=!0}),u(p,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+s,id:r}),n.appendChild(p),Ye.media.appendChild(n),e.SC||a(w.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&p.loaded&&(e.clearInterval(m),ae.call(p))},50)}}function ee(){Ye.supported.full&&(De(),He()),$(H("iframe"))}function te(t,n){Ye.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:w.autoplay?1:0,controls:Ye.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:w.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){E(Ye.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Ye.media.play=function(){n.playVideo(),Ye.media.paused=!1},Ye.media.pause=function(){n.pauseVideo(),Ye.media.paused=!0},Ye.media.stop=function(){n.stopVideo(),Ye.media.paused=!0},Ye.media.duration=n.getDuration(),Ye.media.paused=!0,Ye.media.currentTime=0,Ye.media.muted=n.isMuted(),w.title=n.getVideoData().title,Ye.supported.full&&Ye.media.querySelector("iframe").setAttribute("tabindex","-1"),ee(),E(Ye.media,"timeupdate"),E(Ye.media,"durationchange"),e.clearInterval(Be.buffering),Be.buffering=e.setInterval(function(){Ye.media.buffered=n.getVideoLoadedFraction(),(null===Ye.media.lastBuffered||Ye.media.lastBuffered=w.speeds.length&&(n=0),e=w.speeds[n]}else e=w.defaultSpeed}w.currentSpeed=e,Ye.media.playbackRate=e,K({speed:e})}function ce(e){var t=0,n=Ye.media.paused,a=pe();I.number(e)?t=e:I.event(e)&&s(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Fe(t);try{Ye.media.currentTime=t.toFixed(4)}catch(e){}if(s(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.seekTo(t);break;case"vimeo":Ye.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Ye.embed.seekTo(1e3*t)}n&&re(),E(Ye.media,"timeupdate"),Ye.media.seeking=!0}Ue("Seeking to "+Ye.media.currentTime+" seconds"),V(t)}function pe(){var e=parseInt(w.duration),t=0;return null===Ye.media.duration||isNaN(Ye.media.duration)||(t=Ye.media.duration),isNaN(e)?t:e}function de(){d(Ye.container,w.classes.playing,!Ye.media.paused),d(Ye.container,w.classes.stopped,Ye.media.paused),Pe(Ye.media.paused)}function me(){F={x:e.pageXOffset||0,y:e.pageYOffset||0}}function fe(){e.scrollTo(F.x,F.y)}function ye(e){var n=P.fullscreen;if(n){if(!e||e.type!==C.eventType)return C.isFullScreen(Ye.container)?C.cancelFullScreen():(me(),C.requestFullScreen(Ye.container)),void(Ye.isFullscreen=C.isFullScreen(Ye.container));Ye.isFullscreen=C.isFullScreen(Ye.container)}else Ye.isFullscreen=!Ye.isFullscreen,t.body.style.overflow=Ye.isFullscreen?"hidden":"";d(Ye.container,w.classes.fullscreen.active,Ye.isFullscreen),Y(Ye.isFullscreen),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,Ye.isFullscreen),E(Ye.container,Ye.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Ye.isFullscreen&&n&&fe()}function be(e){if(I.boolean(e)||(e=!Ye.media.muted),h(Ye.buttons.mute,e),Ye.media.muted=e,0===Ye.media.volume&&ge(w.volume),s(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed[Ye.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.muted?0:parseFloat(w.volume/w.volumeMax))}E(Ye.media,"volumechange")}}function ge(e){var t=w.volumeMax,n=w.volumeMin;if(I.undefined(e)&&(e=Ye.storage.volume),(null===e||isNaN(e))&&(e=w.volume),e>t&&(e=t),e0&&be()}function ve(e){var t=Ye.media.muted?0:Ye.media.volume*w.volumeMax;I.number(e)||(e=w.volumeStep),ge(t+e)}function he(e){var t=Ye.media.muted?0:Ye.media.volume*w.volumeMax;I.number(e)||(e=w.volumeStep),ge(t-e)}function _e(){var e=Ye.media.muted?0:Ye.media.volume*w.volumeMax;Ye.supported.full&&(Ye.volume.input&&(Ye.volume.input.value=e),Ye.volume.display&&(Ye.volume.display.value=e)),K({volume:e}),d(Ye.container,w.classes.muted,0===e),Ye.supported.full&&Ye.buttons.mute&&h(Ye.buttons.mute,0===e)}function ke(e){Ye.supported.full&&Ye.buttons.captions&&(I.boolean(e)||(e=Ye.container.className.indexOf(w.classes.captions.active)===-1),Ye.captionsEnabled=e,h(Ye.buttons.captions,Ye.captionsEnabled),d(Ye.container,w.classes.captions.active,Ye.captionsEnabled),E(Ye.container,Ye.captionsEnabled?"captionsenabled":"captionsdisabled",!0),K({captionsEnabled:Ye.captionsEnabled}))}function we(e){var t="waiting"===e.type;clearTimeout(Be.loading),Be.loading=setTimeout(function(){d(Ye.container,w.classes.loading,t),Pe(t)},t?250:0)}function xe(e){if(Ye.supported.full){var t=Ye.progress.played,n=0,a=pe();if(e)switch(e.type){case"timeupdate":case"seeking":if(Ye.controls.pressed)return;n=_(Ye.media.currentTime,a),"timeupdate"===e.type&&Ye.buttons.seek&&(Ye.buttons.seek.value=n);break;case"playing":case"progress":t=Ye.progress.buffer,n=function(){var e=Ye.media.buffered;return e&&e.length?_(e.end(0),a):I.number(e)?100*e:0}()}Te(t,n)}}function Te(e,t){if(Ye.supported.full){if(I.undefined(t)&&(t=0),I.undefined(e)){if(!Ye.progress||!Ye.progress.buffer)return;e=Ye.progress.buffer}I.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ee(e,t){if(t){isNaN(e)&&(e=0),Ye.secs=parseInt(e%60),Ye.mins=parseInt(e/60%60),Ye.hours=parseInt(e/60/60%60);var n=parseInt(pe()/60/60%60)>0;Ye.secs=("0"+Ye.secs).slice(-2),Ye.mins=("0"+Ye.mins).slice(-2),t.innerHTML=(n?Ye.hours+":":"")+Ye.mins+":"+Ye.secs}}function Se(){if(Ye.supported.full){var e=pe()||0;!Ye.duration&&w.displayDuration&&Ye.media.paused&&Ee(e,Ye.currentTime),Ye.duration&&Ee(e,Ye.duration),Ae()}}function Ce(e){Ee(Ye.media.currentTime,Ye.currentTime),e&&"timeupdate"===e.type&&Ye.media.seeking||xe(e)}function Fe(e){I.number(e)||(e=0);var t=pe(),n=_(e,t);Ye.progress&&Ye.progress.played&&(Ye.progress.played.value=n),Ye.buttons&&Ye.buttons.seek&&(Ye.buttons.seek.value=n)}function Ae(e){var t=pe();if(w.tooltips.seek&&Ye.progress.container&&0!==t){var n=Ye.progress.container.getBoundingClientRect(),a=0,r=w.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Ye.progress.tooltip,r))return;a=Ye.progress.tooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Ee(t/100*a,Ye.progress.tooltip),Ye.progress.tooltip.style.left=a+"%",e&&s(["mouseenter","mouseleave"],e.type)&&d(Ye.progress.tooltip,r,"mouseenter"===e.type)}}function Ie(e){I.undefined(e)&&(e=Ye.storage.speed||w.defaultSpeed),ue(e)}function Pe(t){if(w.hideControls&&"audio"!==Ye.type){var n=0,a=!1,r=t,o=m(Ye.container,w.classes.loading);if(I.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,r=s(["mousemove","touchstart","mouseenter","focus"],t.type),s(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):r=m(Ye.container,w.classes.hideControls)),e.clearTimeout(Be.hover),r||Ye.media.paused||o){if(d(Ye.container,w.classes.hideControls,!1),Ye.media.paused||o)return;Ye.browser.isTouch&&(n=3e3)}r&&Ye.media.paused||(Be.hover=e.setTimeout(function(){(!Ye.controls.pressed&&!Ye.controls.hover||a)&&d(Ye.container,w.classes.hideControls,!0)},n))}}function Me(e){if(!I.undefined(e))return void Ne(e);var t;switch(Ye.type){case"youtube":t=Ye.embed.getVideoUrl();break;case"vimeo":Ye.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Ye.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Ye.media.currentSrc}return t||""}function Ne(e){function n(){if(Ye.embed=null,i(Ye.media),"video"===Ye.type&&Ye.videoContainer&&i(Ye.videoContainer),Ye.container&&Ye.container.removeAttribute("class"),"type"in e&&(Ye.type=e.type,"video"===Ye.type)){var n=e.sources[0];"type"in n&&s(w.types.embed,n.type)&&(Ye.type=n.type)}switch(Ye.supported=T(Ye.type),Ye.type){case"video":Ye.media=t.createElement("video");break;case"audio":Ye.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Ye.media=t.createElement("div"),Ye.embedId=e.sources[0].src}l(Ye.container,Ye.media),I.boolean(e.autoplay)&&(w.autoplay=e.autoplay),s(w.types.html5,Ye.type)&&(w.crossorigin&&Ye.media.setAttribute("crossorigin",""),w.autoplay&&Ye.media.setAttribute("autoplay",""),"poster"in e&&Ye.media.setAttribute("poster",e.poster),w.loop&&Ye.media.setAttribute("loop","")),d(Ye.container,w.classes.fullscreen.active,Ye.isFullscreen),d(Ye.container,w.classes.captions.active,Ye.captionsEnabled),J(),s(w.types.html5,Ye.type)&&B("source",e.sources),Q(),s(w.types.html5,Ye.type)&&("tracks"in e&&B("track",e.tracks),Ye.media.load()),(s(w.types.html5,Ye.type)||s(w.types.embed,Ye.type)&&!Ye.supported.full)&&(De(),He()),w.title=e.title,$()}return I.object(e)&&"sources"in e&&e.sources.length?(d(Ye.container,w.classes.ready,!1),re(),Fe(),Te(),qe(),void Ve(n,!1)):void Je("Invalid source format")}function Oe(e){"video"===Ye.type&&Ye.media.setAttribute("poster",e)}function Le(){function n(){var e=oe(),t=Ye.buttons[e?"play":"pause"],n=Ye.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,w.classes.tabFocus);setTimeout(function(){n.focus(),a&&(d(t,w.classes.tabFocus,!1),d(n,w.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function r(e){ +return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Ye.buttons){var n=Ye.buttons[t];if(I.nodeList(n))for(var a=0;a0)&&(t?he(n):ve(n)),(e.deltaY>0||e.deltaX<0)&&(t?ve(n):he(n))})}function je(){if(g(Ye.media,"timeupdate seeking",Ce),g(Ye.media,"timeupdate",V),g(Ye.media,"durationchange loadedmetadata",Se),g(Ye.media,"ended",function(){"video"===Ye.type&&w.showPosterOnEnd&&("video"===Ye.type&&q(),ce(),Ye.media.load())}),g(Ye.media,"progress playing",xe),g(Ye.media,"volumechange",_e),g(Ye.media,"play pause ended",de),g(Ye.media,"waiting canplay seeked",we),w.clickToPlay&&"audio"!==Ye.type){var e=H("."+w.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){w.hideControls&&Ye.browser.isTouch&&!Ye.media.paused||(Ye.media.paused?se():Ye.media.ended?(ce(),se()):re())})}w.disableContextMenu&&g(Ye.media,"contextmenu",function(e){e.preventDefault()}),g(Ye.media,w.events.concat(["keyup","keydown"]).join(" "),function(e){E(Ye.container,e.type,!0)})}function qe(){if(s(w.types.html5,Ye.type)){for(var e=Ye.media.querySelectorAll("source"),t=0;t', - '', - '' ); @@ -1303,7 +1365,7 @@ html = _replaceAll(html, '{seektime}', config.seekTime); // Replace seek time instances - html = _replaceAll(html, '{speed}', config.currentSpeed === 1 ? 'Normal' : config.currentSpeed.toFixed(1) + 'x'); + html = _replaceAll(html, '{speed}', config.currentSpeed.toFixed(1).toString().replace('.0', '') + '×'); // Replace current captions language html = _replaceAll(html, '{lang}', 'English'); @@ -2037,7 +2099,7 @@ if (_is.number(input)) { targetTime = input; - } else if (_is.object(input) && _inArray(['input', 'change'], input.type)) { + } else if (_is.event(input) && _inArray(['input', 'change'], input.type)) { // It's the seek slider // Seek to the selected time targetTime = ((input.target.value / input.target.max) * duration); @@ -3092,15 +3154,35 @@ // Captions _on(plyr.buttons.captions, 'click', _toggleCaptions); - // Menus - _on(plyr.controls.querySelectorAll('[aria-haspopup="true"]'), 'click', function() { - var toggle = this, - target = document.querySelector('#' + toggle.getAttribute('aria-controls')), + // Settings + /*_on(plyr.buttons.settings, 'click', function(event) { + var menu = this, + toggle = event.target, + target = document.getElementById(toggle.getAttribute('aria-controls')), + tabs = menu.querySelectorAll('[role="tabpanel"]'), show = (toggle.getAttribute('aria-expanded') === 'false'); + // Nothing to show, bail + if (!_is.htmlElement(target)) { + return; + } + + // Hide all other tabs + if (target.getAttribute('role') === 'tabpanel') { + [].forEach.call(tabs, function(tab) { + tab.setAttribute('aria-hidden', true); + tab.setAttribute('tabindex', -1); + + [].forEach.call(menu.querySelectorAll('[aria-controls="' + tab.getAttribute('id') + '"]'), function(toggle) { + toggle.setAttribute('aria-expanded', false); + }); + }); + } + toggle.setAttribute('aria-expanded', show); target.setAttribute('aria-hidden', !show); - }); + target.setAttribute('tabindex', 0); + });*/ // Seek tooltip _on(plyr.progress.container, 'mouseenter mouseleave mousemove', _updateSeekTooltip); diff --git a/src/less/plyr.less b/src/less/plyr.less index ae9fae0e..26c92b2d 100644 --- a/src/less/plyr.less +++ b/src/less/plyr.less @@ -473,8 +473,16 @@ position: relative; // Hide tooltip - button[aria-expanded='true'] .plyr__tooltip { - display: none; + button svg { + transition: transform .3s ease; + } + button[aria-expanded='true'] { + svg { + transform: rotate(45deg); + } + .plyr__tooltip { + display: none; + } } // The actual menu container @@ -492,39 +500,6 @@ color: @plyr-menu-color; font-size: @plyr-font-size-small; - ul { - margin: 0; - padding: 5px; - list-style: none; - } - - button { - display: flex; - width: 100%; - padding: 10px 30px 10px 12px; - color: @plyr-menu-color; - font-weight: 600; - - // Arrow - &::after { - content: ""; - position: absolute; - top: 50%; - transform: translateY(-50%); - right: 5px; - border: 5px solid transparent; - border-left-color: fade(@plyr-menu-color, 80%); - } - } - - // Option value - .plyr__menu__value { - margin-left: auto; - padding-left: 25px; - font-weight: 500; - color: fade(@plyr-menu-color, 80%); - } - // Arrow &::after { content: ""; @@ -536,6 +511,86 @@ border: 6px solid transparent; border-top-color: @plyr-menu-bg; } + + ul { + margin: 0; + padding: 5px; + list-style: none; + } + button { + display: flex; + width: 100%; + padding: @plyr-control-padding (@plyr-control-padding * 2); + color: @plyr-menu-color; + font-weight: 600; + user-select: none; + } + + // Buttons + .plyr__menu__btn::after { + content: ""; + position: absolute; + top: 50%; + transform: translateY(-50%); + border: 5px solid transparent; + } + .plyr__menu__btn--forward { + padding-right: ceil(@plyr-control-padding * 4); + + &::after { + right: 5px; + border-left-color: fade(@plyr-menu-color, 80%); + } + } + .plyr__menu__btn--back { + position: relative; + padding-top: floor(@plyr-control-padding * .7); + padding-bottom: floor(@plyr-control-padding * .7); + padding-left: ceil(@plyr-control-padding * 4); + margin-bottom: ceil(@plyr-control-padding * 1.3); + font-weight: 500; + + &::after { + left: 5px; + border-right-color: fade(@plyr-menu-color, 80%); + } + &::before { + content: ""; + position: absolute; + top: 100%; + left: 0; + right: 0; + height: 1px; + overflow: hidden; + margin-top: ceil(@plyr-control-padding / 2); + background: fade(#000, 15%); + box-shadow: 0 1px 0 fade(#fff, 10%); + } + } + + // Option value + .plyr__menu__btn__value, + .plyr__menu__btn__badge { + display: inherit; + margin-left: auto; + padding-left: ceil(@plyr-control-padding * 3.5); + pointer-events: none; + } + + // Option value + .plyr__menu__btn__value { + font-weight: 500; + color: fade(@plyr-menu-color, 80%); + } + + // Option value + .plyr__menu__btn__badge span { + padding: 2px 4px; + border-radius: 2px; + background: @plyr-menu-color; + color: @plyr-menu-bg; + font-size: 10px; + } } } From ca37b4c9ac24b840a9e8e5930012c33da9a44682 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 25 Sep 2016 23:54:49 +1000 Subject: [PATCH 13/70] Menu --- demo/dist/demo.css | 2 +- demo/dist/demo.js | 2 +- demo/src/less/lib/fontface.less | 8 ++++---- dist/plyr.js | 4 ++-- src/js/plyr.js | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/demo/dist/demo.css b/demo/dist/demo.css index 73829ee3..a9b2f5bc 100644 --- a/demo/dist/demo.css +++ b/demo/dist/demo.css @@ -1 +1 @@ -/*! normalize.css v2.1.3 | MIT License | git.io/normalize */a.logo,img,legend{border:0}a,h1,h2{color:#3498db}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,small,summary{display:block}body,figure,li,ul{margin:0}[hidden],template{display:none}li,nav ul,ul{list-style:none;padding:0}legend,li,nav ul,ul{padding:0}.btn__bar,sub,sup{position:relative}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:0 0;text-decoration:none;border-bottom:1px dotted currentColor;transition:background .3s ease,color .3s ease,border .3s ease}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}.btn__bar,nav li{white-space:nowrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@font-face{font-family:Avenir;src:url(https://cdn.plyr.io/fonts/avenir-medium.woff2) format("woff2"),url(https://cdn.plyr.io/fonts/avenir-medium.woff) format("woff");font-style:normal;font-weight:500}@font-face{font-family:Avenir;src:url(https://cdn.plyr.io/fonts/avenir-bold.woff2) format("woff2"),url(https://cdn.plyr.io/fonts/avenir-bold.woff) format("woff");font-style:normal;font-weight:700}html{font-size:100%;height:100%;background:fixed #f2f5f7}body{font-family:Avenir,"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.5;text-align:center;color:#55646b;font-weight:500;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding:10px}h1,h2{letter-spacing:-.025em;margin:0 0 10px;line-height:1.2;font-weight:700}h1{font-size:64px;font-size:4rem}p,small{margin:0 0 20px}small{padding:0 10px;font-size:14px;font-size:.875rem}a:focus,a:hover{color:#343f4a;border-bottom-color:transparent}a:focus{outline:#343f4a dotted thin;outline-offset:1px}.color--vimeo{color:#19b7ed}.color--youtube{color:#cc181e}*,::after,::before{box-sizing:border-box}.btn__bar ul,nav li{display:inline-block}header{padding:20px;margin-bottom:20px}header p{font-size:18px;font-size:1.125rem}section{max-width:1200px;margin:0 auto 20px}@media (min-width:480px){header{padding-top:60px;padding-bottom:60px}section{margin-bottom:40px}}.icon{fill:currentColor;width:18px;height:18px;vertical-align:-3px}.btn,.btn__count,.error main,video{vertical-align:middle}a svg,button svg,label svg{pointer-events:none}.btn .icon,a .icon{margin-right:10px}.btn:not(.btn-large) .icon{width:16px;height:16px}nav ul{margin:0;font-size:0}nav li{margin-top:10px;font-size:16px;font-size:1rem}nav li+li{margin-left:20px}.btn__bar{margin:0 auto 20px;max-width:1200px}.btn__bar::before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background:#dbe3e8}.btn__bar ul{position:relative;z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn__bar li{margin:0}.btn__bar li:first-child .btn{border-radius:4px 0 0 4px}.btn__bar li:last-child .btn{border-radius:0 4px 4px 0}.btn__bar li+li .btn{margin-left:-1px}.btn__bar li.active .btn{position:relative;z-index:1}.btn__bar li.active .btn .icon{color:inherit}.btn__bar li.active+li .btn:hover{z-index:0}.btn__bar .btn{position:relative;display:block;border-radius:0}.btn__bar .btn:focus,.btn__bar .btn:hover{z-index:1}@media (min-width:560px){.btn__bar{margin-bottom:40px}}.btn,.btn__count{display:inline-block;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:700}.btn{padding:10px 12px;background:linear-gradient(#f8fafb,#e9eef1);border:1px solid #cbd0d3;box-shadow:0 1px 1px rgba(0,0,0,.05);text-shadow:0 1px 1px #fff;color:#55646b;transition:background .1s ease,color .1s ease;font-size:14px;font-size:.875rem}.btn:focus,.btn:hover{border-color:#b5bcc0;color:#55646b;outline:0}.btn--large{padding:10px 20px;font-size:16px;font-size:1rem}.btn--primary,.btn__bar li.active .btn{background-image:linear-gradient(#3498db,#258cd1);background-color:#3498db;border-color:#217dbb;box-shadow:0 1px 1px rgba(0,0,0,.15);text-shadow:0 1px 1px rgba(0,0,0,.1);color:#fff}.btn--primary:focus,.btn--primary:hover{color:#fff;border-color:#196090}.btn--youtube .icon{color:#cc181e}.btn--vimeo .icon{color:#19b7ed}.btn--twitter .icon{color:#4BAAF4}.btn__count{position:relative;margin-left:10px;padding:10px 15px;background:#fff;border:1px solid #cbd0d3}.btn__count::before,.plyr__video-wrapper::after{content:"";position:absolute}.btn__count::before{display:block;width:8px;height:8px;left:1px;top:50%;margin-top:-4px;background:inherit;border:inherit;border-width:1px 0 0 1px;transform:rotate(-45deg) translate(-50%,-50%)}.error body,html.error{height:100%}.error body{width:100%;display:table;table-layout:fixed}.error main{display:table-cell;width:100%}video{max-width:100%}.plyr{margin:0 auto;border-radius:6px}.plyr--audio{max-width:520px}.plyr__video-wrapper::after{pointer-events:none;top:0;bottom:0;left:0;right:0;border:1px solid rgba(0,0,0,.15);border-radius:inherit}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:5px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block} \ No newline at end of file +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */a.logo,img,legend{border:0}a,h1,h2{color:#3498db}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,small,summary{display:block}body,figure,li,ul{margin:0}[hidden],template{display:none}li,nav ul,ul{list-style:none;padding:0}legend,li,nav ul,ul{padding:0}.btn__bar,sub,sup{position:relative}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:0 0;text-decoration:none;border-bottom:1px dotted currentColor;transition:background .3s ease,color .3s ease,border .3s ease}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}.btn__bar,nav li{white-space:nowrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-medium.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-medium.woff) format("woff");font-style:normal;font-weight:500}@font-face{font-family:Avenir;src:url(//cdn.plyr.io/fonts/avenir-bold.woff2) format("woff2"),url(//cdn.plyr.io/fonts/avenir-bold.woff) format("woff");font-style:normal;font-weight:700}html{font-size:100%;height:100%;background:fixed #f2f5f7}body{font-family:Avenir,"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.5;text-align:center;color:#55646b;font-weight:500;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding:10px}h1,h2{letter-spacing:-.025em;margin:0 0 10px;line-height:1.2;font-weight:700}h1{font-size:64px;font-size:4rem}p,small{margin:0 0 20px}small{padding:0 10px;font-size:14px;font-size:.875rem}a:focus,a:hover{color:#343f4a;border-bottom-color:transparent}a:focus{outline:#343f4a dotted thin;outline-offset:1px}.color--vimeo{color:#19b7ed}.color--youtube{color:#cc181e}*,::after,::before{box-sizing:border-box}.btn__bar ul,nav li{display:inline-block}header{padding:20px;margin-bottom:20px}header p{font-size:18px;font-size:1.125rem}section{max-width:1200px;margin:0 auto 20px}@media (min-width:480px){header{padding-top:60px;padding-bottom:60px}section{margin-bottom:40px}}.icon{fill:currentColor;width:18px;height:18px;vertical-align:-3px}.btn,.btn__count,.error main,video{vertical-align:middle}a svg,button svg,label svg{pointer-events:none}.btn .icon,a .icon{margin-right:10px}.btn:not(.btn-large) .icon{width:16px;height:16px}nav ul{margin:0;font-size:0}nav li{margin-top:10px;font-size:16px;font-size:1rem}nav li+li{margin-left:20px}.btn__bar{margin:0 auto 20px;max-width:1200px}.btn__bar::before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background:#dbe3e8}.btn__bar ul{position:relative;z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn__bar li{margin:0}.btn__bar li:first-child .btn{border-radius:4px 0 0 4px}.btn__bar li:last-child .btn{border-radius:0 4px 4px 0}.btn__bar li+li .btn{margin-left:-1px}.btn__bar li.active .btn{position:relative;z-index:1}.btn__bar li.active .btn .icon{color:inherit}.btn__bar li.active+li .btn:hover{z-index:0}.btn__bar .btn{position:relative;display:block;border-radius:0}.btn__bar .btn:focus,.btn__bar .btn:hover{z-index:1}@media (min-width:560px){.btn__bar{margin-bottom:40px}}.btn,.btn__count{display:inline-block;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:700}.btn{padding:10px 12px;background:linear-gradient(#f8fafb,#e9eef1);border:1px solid #cbd0d3;box-shadow:0 1px 1px rgba(0,0,0,.05);text-shadow:0 1px 1px #fff;color:#55646b;transition:background .1s ease,color .1s ease;font-size:14px;font-size:.875rem}.btn:focus,.btn:hover{border-color:#b5bcc0;color:#55646b;outline:0}.btn--large{padding:10px 20px;font-size:16px;font-size:1rem}.btn--primary,.btn__bar li.active .btn{background-image:linear-gradient(#3498db,#258cd1);background-color:#3498db;border-color:#217dbb;box-shadow:0 1px 1px rgba(0,0,0,.15);text-shadow:0 1px 1px rgba(0,0,0,.1);color:#fff}.btn--primary:focus,.btn--primary:hover{color:#fff;border-color:#196090}.btn--youtube .icon{color:#cc181e}.btn--vimeo .icon{color:#19b7ed}.btn--twitter .icon{color:#4BAAF4}.btn__count{position:relative;margin-left:10px;padding:10px 15px;background:#fff;border:1px solid #cbd0d3}.btn__count::before,.plyr__video-wrapper::after{content:"";position:absolute}.btn__count::before{display:block;width:8px;height:8px;left:1px;top:50%;margin-top:-4px;background:inherit;border:inherit;border-width:1px 0 0 1px;transform:rotate(-45deg) translate(-50%,-50%)}.error body,html.error{height:100%}.error body{width:100%;display:table;table-layout:fixed}.error main{display:table-cell;width:100%}video{max-width:100%}.plyr{margin:0 auto;border-radius:6px}.plyr--audio{max-width:520px}.plyr__video-wrapper::after{pointer-events:none;top:0;bottom:0;left:0;right:0;border:1px solid rgba(0,0,0,.15);border-radius:inherit}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:5px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block} \ No newline at end of file diff --git a/demo/dist/demo.js b/demo/dist/demo.js index d79c71e7..7db71d26 100644 --- a/demo/dist/demo.js +++ b/demo/dist/demo.js @@ -1 +1 @@ -"document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var e=document.createElement("_");if(e.classList.add("c1","c2"),!e.classList.contains("c2")){var t=function(e){var t=DOMTokenList.prototype[e];DOMTokenList.prototype[e]=function(e){var i,s=arguments.length;for(i=0;i=0;a--)e(o[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0)}}var i=plyr.setup({debug:!0,title:"Video demo",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0},controls:["play-large","play","speed-up","progress","current-time","mute","volume","captions","settings","fullscreen"]});plyr.loadSprite("dist/demo.svg");for(var s=i[0],o=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),a=window.history&&window.history.pushState,c=o.length-1;c>=0;c--)o[c].addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),a&&history.pushState({type:e},"","#"+e)});if(window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),a){var l=!r.length;l&&(r=n.video),r in n&&history.replaceState({type:r},"",l?"":"#"+r),r!==n.video&&t(r,!0)}}(),document.domain.indexOf("plyr.io")>-1&&(!function(e,t,i,s,o,n,r){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,n=t.createElement(i),r=t.getElementsByTagName(i)[0],n.async=1,n.src=s,r.parentNode.insertBefore(n,r)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40881672-11","auto"),ga("send","pageview")); \ No newline at end of file +"document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var e=document.createElement("_");if(e.classList.add("c1","c2"),!e.classList.contains("c2")){var t=function(e){var t=DOMTokenList.prototype[e];DOMTokenList.prototype[e]=function(e){var i,s=arguments.length;for(i=0;s>i;i++)e=arguments[i],t.call(this,e)}};t("add"),t("remove")}if(e.classList.toggle("c3",!1),e.classList.contains("c3")){var i=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(e,t){return 1 in arguments&&!this.contains(e)==!t?t:i.call(this,e)}}e=null}():!function(e){"use strict";if("Element"in e){var t="classList",i="prototype",s=e.Element[i],o=Object,n=String[i].trim||function(){return this.replace(/^\s+|\s+$/g,"")},r=Array[i].indexOf||function(e){for(var t=0,i=this.length;i>t;t++)if(t in this&&this[t]===e)return t;return-1},a=function(e,t){this.name=e,this.code=DOMException[e],this.message=t},c=function(e,t){if(""===t)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(t))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return r.call(e,t)},l=function(e){for(var t=n.call(e.getAttribute("class")||""),i=t?t.split(/\s+/):[],s=0,o=i.length;o>s;s++)this.push(i[s]);this._updateClassName=function(){e.setAttribute("class",this.toString())}},u=l[i]=[],d=function(){return new l(this)};if(a[i]=Error[i],u.item=function(e){return this[e]||null},u.contains=function(e){return e+="",-1!==c(this,e)},u.add=function(){var e,t=arguments,i=0,s=t.length,o=!1;do e=t[i]+"",-1===c(this,e)&&(this.push(e),o=!0);while(++i=0;a--)e(o[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0)}}var i=plyr.setup({debug:!0,title:"Video demo",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0},controls:["play-large","play","speed-up","progress","current-time","mute","volume","captions","settings","fullscreen"]});plyr.loadSprite("dist/demo.svg");for(var s=i[0],o=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),a=window.history&&window.history.pushState,c=o.length-1;c>=0;c--)o[c].addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),a&&history.pushState({type:e},"","#"+e)});if(window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),a){var l=!r.length;l&&(r=n.video),r in n&&history.replaceState({type:r},"",l?"":"#"+r),r!==n.video&&t(r,!0)}}(),document.domain.indexOf("plyr.io")>-1&&(!function(e,t,i,s,o,n,r){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,n=t.createElement(i),r=t.getElementsByTagName(i)[0],n.async=1,n.src=s,r.parentNode.insertBefore(n,r)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40881672-11","auto"),ga("send","pageview")); \ No newline at end of file diff --git a/demo/src/less/lib/fontface.less b/demo/src/less/lib/fontface.less index ff03f75e..a7da5ad9 100644 --- a/demo/src/less/lib/fontface.less +++ b/demo/src/less/lib/fontface.less @@ -4,15 +4,15 @@ @font-face { font-family: "Avenir"; - src: url("https://cdn.plyr.io/fonts/avenir-medium.woff2") format("woff2"), - url("https://cdn.plyr.io/fonts/avenir-medium.woff") format("woff"); + src: url("//cdn.plyr.io/fonts/avenir-medium.woff2") format("woff2"), + url("//cdn.plyr.io/fonts/avenir-medium.woff") format("woff"); font-style: normal; font-weight: @font-weight-base; } @font-face { font-family: "Avenir"; - src: url("https://cdn.plyr.io/fonts/avenir-bold.woff2") format("woff2"), - url("https://cdn.plyr.io/fonts/avenir-bold.woff") format("woff"); + src: url("//cdn.plyr.io/fonts/avenir-bold.woff2") format("woff2"), + url("//cdn.plyr.io/fonts/avenir-bold.woff") format("woff"); font-style: normal; font-weight: @font-weight-bold; } \ No newline at end of file diff --git a/dist/plyr.js b/dist/plyr.js index 7ece425d..abccfeaa 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,a,s=navigator.userAgent,r=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,p=!1;return navigator.appVersion.indexOf("Windows NT")!==-1&&navigator.appVersion.indexOf("rv:11")!==-1?(l=!0,r="IE",o="11"):(n=s.indexOf("MSIE"))!==-1?(l=!0,r="IE",o=s.substring(n+5)):(n=s.indexOf("Chrome"))!==-1?(c=!0,r="Chrome",o=s.substring(n+7)):(n=s.indexOf("Safari"))!==-1?(p=!0,r="Safari",o=s.substring(n+7),(n=s.indexOf("Version"))!==-1&&(o=s.substring(n+8))):(n=s.indexOf("Firefox"))!==-1?(u=!0,r="Firefox",o=s.substring(n+8)):(e=s.lastIndexOf(" ")+1)<(n=s.lastIndexOf("/"))&&(r=s.substring(e,n),o=s.substring(n+1),r.toLowerCase()===r.toUpperCase()&&(r=navigator.appName)),(a=o.indexOf(";"))!==-1&&(o=o.substring(0,a)),(a=o.indexOf(" "))!==-1&&(o=o.substring(0,a)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:r,version:i,isIE:l,isFirefox:u,isChrome:c,isSafari:p,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function a(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var a=t.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a)}}function s(e,t){return Array.prototype.indexOf&&e.indexOf(t)!==-1}function r(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function o(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var a=n>0?t.cloneNode(!0):t,s=e[n],r=s.parentNode,o=s.nextSibling;return a.appendChild(s),o?r.insertBefore(a,o):r.appendChild(a),a}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,I.boolean(t[n])&&t[n]?"":t[n])}function c(e,n,a){var s=t.createElement(e);u(s,a),l(n,s)}function p(e){return e.replace(".","")}function d(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function f(e,n){var a=Element.prototype,s=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return s.call(e,n)}function y(e,t,n,a,s){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},s)}function b(e,t,n,a,s){var r=t.split(" ");if(I.boolean(s)||(s=!1),e instanceof NodeList)for(var o=0;o','',''+w.i18n.play+"",""),e.push('
    '),s(w.controls,"restart")&&e.push('"),s(w.controls,"rewind")&&e.push('"),s(w.controls,"play")&&e.push('",'"),s(w.controls,"fast-forward")&&e.push('"),s(w.controls,"progress")&&(e.push('','','','','',"0% "+w.i18n.buffered,""),w.tooltips.seek&&e.push('00:00'),e.push("")),s(w.controls,"current-time")&&e.push('',''+w.i18n.currentTime+"",'00:00',""),s(w.controls,"duration")&&e.push('',''+w.i18n.duration+"",'00:00',""),s(w.controls,"mute")&&e.push('"),s(w.controls,"volume")&&e.push('','",'','',""),s(w.controls,"captions")&&e.push('"),s(w.controls,"settings")&&e.push('
    ','",'","
    "),s(w.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function L(){if(Ye.supported.full&&("audio"!==Ye.type||w.fullscreen.allowAudio)&&w.fullscreen.enabled){var e=P.fullscreen;e||w.fullscreen.fallback&&!W()?(Ue((e?"Native":"Fallback")+" fullscreen enabled"),d(Ye.container,w.classes.fullscreen.enabled,!0)):Ue("Fullscreen not supported and fallback disabled"),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,!1),Y()}}function j(){if("video"===Ye.type){H(w.selectors.captions)||Ye.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Ye.usingTextTracks=!1,Ye.media.textTracks&&(Ye.usingTextTracks=!0);for(var e,t="",n=Ye.media.childNodes,a=0;a=10||Ye.browser.isFirefox&&Ye.browser.version>=31)&&(Ue("Detected browser with known TextTrack issues - using manual fallback"),Ye.usingTextTracks=!1),Ye.usingTextTracks){Ue("TextTracks supported");for(var o=0;o ");for(var a=0;aYe.captions.length-1){Ye.subcount=Ye.captions.length-1;break}Ye.media.currentTime.toFixed(1)>=n(Ye.captions[Ye.subcount][0])&&Ye.media.currentTime.toFixed(1)<=a(Ye.captions[Ye.subcount][0])?(Ye.currentCaption=Ye.captions[Ye.subcount][1],q(Ye.currentCaption)):q()}}function R(){if(Ye.buttons.captions){d(Ye.container,w.classes.captions.enabled,!0);var e=Ye.storage.captionsEnabled;I.boolean(e)||(e=w.captions.defaultActive),e&&(d(Ye.container,w.classes.captions.active,!0),h(Ye.buttons.captions,!0))}}function D(e){return Ye.container.querySelectorAll(e)}function H(e){return D(e)[0]}function W(){try{return e.self!==e.top}catch(e){return!0}}function Y(){function e(e){9===e.which&&Ye.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=D("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Ye.container,"keydown",e)}function B(e,t){if(I.string(t))c(e,Ye.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Ye.media,t[n])}function X(){if(w.loadSprite){var e=N();e.absolute?(Ue("AJAX loading absolute SVG sprite"+(Ye.browser.isIE?" (due to IE)":"")),x(e.url,"sprite-plyr")):Ue("Sprite will be used as external resource directly")}var n=w.html;Ue("Injecting custom controls"),n||(n=O()),n=r(n,"{seektime}",w.seekTime),n=r(n,"{speed}",w.currentSpeed.toFixed(1).toString().replace(".0","")+"×"),n=r(n,"{lang}","English"),n=r(n,"{id}",Math.floor(1e4*Math.random()));var a;if(I.string(w.selectors.controls.container)&&(a=t.querySelector(w.selectors.controls.container)),I.htmlElement(a)||(a=Ye.container),a.insertAdjacentHTML("beforeend",n),w.tooltips.controls)for(var s=D([w.selectors.controls.wrapper," ",w.selectors.labels," .",w.classes.hidden].join("")),o=s.length-1;o>=0;o--){var i=s[o];d(i,w.classes.hidden,!1),d(i,w.classes.tooltip,!0)}}function U(){try{return Ye.controls=H(w.selectors.controls.wrapper),Ye.buttons={},Ye.buttons.seek=H(w.selectors.buttons.seek),Ye.buttons.play=D(w.selectors.buttons.play),Ye.buttons.pause=H(w.selectors.buttons.pause),Ye.buttons.restart=H(w.selectors.buttons.restart),Ye.buttons.rewind=H(w.selectors.buttons.rewind),Ye.buttons.forward=H(w.selectors.buttons.forward),Ye.buttons.fullscreen=H(w.selectors.buttons.fullscreen),Ye.buttons.settings=H(w.selectors.buttons.settings),Ye.buttons.mute=H(w.selectors.buttons.mute),Ye.buttons.captions=H(w.selectors.buttons.captions),Ye.progress={},Ye.progress.container=H(w.selectors.progress.container),Ye.progress.buffer={},Ye.progress.buffer.bar=H(w.selectors.progress.buffer),Ye.progress.buffer.text=Ye.progress.buffer.bar&&Ye.progress.buffer.bar.getElementsByTagName("span")[0],Ye.progress.played=H(w.selectors.progress.played),Ye.progress.tooltip=Ye.progress.container&&Ye.progress.container.querySelector("."+w.classes.tooltip),Ye.volume={},Ye.volume.input=H(w.selectors.volume.input),Ye.volume.display=H(w.selectors.volume.display),Ye.duration=H(w.selectors.duration),Ye.currentTime=H(w.selectors.currentTime),Ye.seekTime=D(w.selectors.seekTime),!0}catch(e){return Je("It looks like there is a problem with your controls HTML"),z(!0),!1}}function J(){d(Ye.container,w.selectors.container.replace(".",""),Ye.supported.full)}function z(e){e&&s(w.types.html5,Ye.type)?Ye.media.setAttribute("controls",""):Ye.media.removeAttribute("controls")}function $(e){var t=w.i18n.play;if(I.string(w.title)&&w.title.length&&(t+=", "+w.title,Ye.container.setAttribute("aria-label",w.title)),Ye.supported.full&&Ye.buttons.play)for(var n=Ye.buttons.play.length-1;n>=0;n--)Ye.buttons.play[n].setAttribute("aria-label",t);I.htmlElement(e)&&e.setAttribute("title",w.i18n.frameTitle.replace("{title}",w.title))}function G(){var t=null;Ye.storage={},P.storage&&w.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(w.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?K({volume:parseFloat(t)}):Ye.storage=JSON.parse(t)))}function K(t){P.storage&&w.storage.enabled&&(k(Ye.storage,t),e.localStorage.setItem(w.storage.key,JSON.stringify(Ye.storage)))}function Q(){if(!Ye.media)return void Je("No media element found!");if(Ye.supported.full&&(d(Ye.container,w.classes.type.replace("{0}",Ye.type),!0),s(w.types.embed,Ye.type)&&d(Ye.container,w.classes.type.replace("{0}","video"),!0),d(Ye.container,w.classes.pip.enabled,P.pip(Ye)),d(Ye.container,w.classes.stopped,w.autoplay),d(Ye.ontainer,w.classes.isIos,Ye.browser.isIos),d(Ye.container,w.classes.isTouch,Ye.browser.isTouch),"video"===Ye.type)){var e=t.createElement("div");e.setAttribute("class",w.classes.videoWrapper),o(Ye.media,e),Ye.videoContainer=e}s(w.types.embed,Ye.type)&&Z()}function Z(){for(var n=t.createElement("div"),s=Ye.embedId,r=Ye.type+"-"+Math.floor(1e4*Math.random()),o=D('[id^="'+Ye.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(d(Ye.media,w.classes.videoWrapper,!0),d(Ye.media,w.classes.embedWrapper,!0),"youtube"===Ye.type)Ye.media.appendChild(n),n.setAttribute("id",r),I.object(e.YT)?te(s,n):(a(w.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){te(s,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Ye.type)if(Ye.supported.full?Ye.media.appendChild(n):n=Ye.media,n.setAttribute("id",r),I.object(e.Vimeo))ne(s,n);else{a(w.urls.vimeo.api);var c=e.setInterval(function(){I.object(e.Vimeo)&&(e.clearInterval(c),ne(s,n))},50)}else if("soundcloud"===Ye.type){var p=t.createElement("iframe");p.loaded=!1,g(p,"load",function(){p.loaded=!0}),u(p,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+s,id:r}),n.appendChild(p),Ye.media.appendChild(n),e.SC||a(w.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&p.loaded&&(e.clearInterval(m),ae.call(p))},50)}}function ee(){Ye.supported.full&&(De(),He()),$(H("iframe"))}function te(t,n){Ye.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:w.autoplay?1:0,controls:Ye.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:w.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){E(Ye.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Ye.media.play=function(){n.playVideo(),Ye.media.paused=!1},Ye.media.pause=function(){n.pauseVideo(),Ye.media.paused=!0},Ye.media.stop=function(){n.stopVideo(),Ye.media.paused=!0},Ye.media.duration=n.getDuration(),Ye.media.paused=!0,Ye.media.currentTime=0,Ye.media.muted=n.isMuted(),w.title=n.getVideoData().title,Ye.supported.full&&Ye.media.querySelector("iframe").setAttribute("tabindex","-1"),ee(),E(Ye.media,"timeupdate"),E(Ye.media,"durationchange"),e.clearInterval(Be.buffering),Be.buffering=e.setInterval(function(){Ye.media.buffered=n.getVideoLoadedFraction(),(null===Ye.media.lastBuffered||Ye.media.lastBuffered=w.speeds.length&&(n=0),e=w.speeds[n]}else e=w.defaultSpeed}w.currentSpeed=e,Ye.media.playbackRate=e,K({speed:e})}function ce(e){var t=0,n=Ye.media.paused,a=pe();I.number(e)?t=e:I.event(e)&&s(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Fe(t);try{Ye.media.currentTime=t.toFixed(4)}catch(e){}if(s(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.seekTo(t);break;case"vimeo":Ye.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Ye.embed.seekTo(1e3*t)}n&&re(),E(Ye.media,"timeupdate"),Ye.media.seeking=!0}Ue("Seeking to "+Ye.media.currentTime+" seconds"),V(t)}function pe(){var e=parseInt(w.duration),t=0;return null===Ye.media.duration||isNaN(Ye.media.duration)||(t=Ye.media.duration),isNaN(e)?t:e}function de(){d(Ye.container,w.classes.playing,!Ye.media.paused),d(Ye.container,w.classes.stopped,Ye.media.paused),Pe(Ye.media.paused)}function me(){F={x:e.pageXOffset||0,y:e.pageYOffset||0}}function fe(){e.scrollTo(F.x,F.y)}function ye(e){var n=P.fullscreen;if(n){if(!e||e.type!==C.eventType)return C.isFullScreen(Ye.container)?C.cancelFullScreen():(me(),C.requestFullScreen(Ye.container)),void(Ye.isFullscreen=C.isFullScreen(Ye.container));Ye.isFullscreen=C.isFullScreen(Ye.container)}else Ye.isFullscreen=!Ye.isFullscreen,t.body.style.overflow=Ye.isFullscreen?"hidden":"";d(Ye.container,w.classes.fullscreen.active,Ye.isFullscreen),Y(Ye.isFullscreen),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,Ye.isFullscreen),E(Ye.container,Ye.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Ye.isFullscreen&&n&&fe()}function be(e){if(I.boolean(e)||(e=!Ye.media.muted),h(Ye.buttons.mute,e),Ye.media.muted=e,0===Ye.media.volume&&ge(w.volume),s(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed[Ye.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.muted?0:parseFloat(w.volume/w.volumeMax))}E(Ye.media,"volumechange")}}function ge(e){var t=w.volumeMax,n=w.volumeMin;if(I.undefined(e)&&(e=Ye.storage.volume),(null===e||isNaN(e))&&(e=w.volume),e>t&&(e=t),e0&&be()}function ve(e){var t=Ye.media.muted?0:Ye.media.volume*w.volumeMax;I.number(e)||(e=w.volumeStep),ge(t+e)}function he(e){var t=Ye.media.muted?0:Ye.media.volume*w.volumeMax;I.number(e)||(e=w.volumeStep),ge(t-e)}function _e(){var e=Ye.media.muted?0:Ye.media.volume*w.volumeMax;Ye.supported.full&&(Ye.volume.input&&(Ye.volume.input.value=e),Ye.volume.display&&(Ye.volume.display.value=e)),K({volume:e}),d(Ye.container,w.classes.muted,0===e),Ye.supported.full&&Ye.buttons.mute&&h(Ye.buttons.mute,0===e)}function ke(e){Ye.supported.full&&Ye.buttons.captions&&(I.boolean(e)||(e=Ye.container.className.indexOf(w.classes.captions.active)===-1),Ye.captionsEnabled=e,h(Ye.buttons.captions,Ye.captionsEnabled),d(Ye.container,w.classes.captions.active,Ye.captionsEnabled),E(Ye.container,Ye.captionsEnabled?"captionsenabled":"captionsdisabled",!0),K({captionsEnabled:Ye.captionsEnabled}))}function we(e){var t="waiting"===e.type;clearTimeout(Be.loading),Be.loading=setTimeout(function(){d(Ye.container,w.classes.loading,t),Pe(t)},t?250:0)}function xe(e){if(Ye.supported.full){var t=Ye.progress.played,n=0,a=pe();if(e)switch(e.type){case"timeupdate":case"seeking":if(Ye.controls.pressed)return;n=_(Ye.media.currentTime,a),"timeupdate"===e.type&&Ye.buttons.seek&&(Ye.buttons.seek.value=n);break;case"playing":case"progress":t=Ye.progress.buffer,n=function(){var e=Ye.media.buffered;return e&&e.length?_(e.end(0),a):I.number(e)?100*e:0}()}Te(t,n)}}function Te(e,t){if(Ye.supported.full){if(I.undefined(t)&&(t=0),I.undefined(e)){if(!Ye.progress||!Ye.progress.buffer)return;e=Ye.progress.buffer}I.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ee(e,t){if(t){isNaN(e)&&(e=0),Ye.secs=parseInt(e%60),Ye.mins=parseInt(e/60%60),Ye.hours=parseInt(e/60/60%60);var n=parseInt(pe()/60/60%60)>0;Ye.secs=("0"+Ye.secs).slice(-2),Ye.mins=("0"+Ye.mins).slice(-2),t.innerHTML=(n?Ye.hours+":":"")+Ye.mins+":"+Ye.secs}}function Se(){if(Ye.supported.full){var e=pe()||0;!Ye.duration&&w.displayDuration&&Ye.media.paused&&Ee(e,Ye.currentTime),Ye.duration&&Ee(e,Ye.duration),Ae()}}function Ce(e){Ee(Ye.media.currentTime,Ye.currentTime),e&&"timeupdate"===e.type&&Ye.media.seeking||xe(e)}function Fe(e){I.number(e)||(e=0);var t=pe(),n=_(e,t);Ye.progress&&Ye.progress.played&&(Ye.progress.played.value=n),Ye.buttons&&Ye.buttons.seek&&(Ye.buttons.seek.value=n)}function Ae(e){var t=pe();if(w.tooltips.seek&&Ye.progress.container&&0!==t){var n=Ye.progress.container.getBoundingClientRect(),a=0,r=w.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Ye.progress.tooltip,r))return;a=Ye.progress.tooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Ee(t/100*a,Ye.progress.tooltip),Ye.progress.tooltip.style.left=a+"%",e&&s(["mouseenter","mouseleave"],e.type)&&d(Ye.progress.tooltip,r,"mouseenter"===e.type)}}function Ie(e){I.undefined(e)&&(e=Ye.storage.speed||w.defaultSpeed),ue(e)}function Pe(t){if(w.hideControls&&"audio"!==Ye.type){var n=0,a=!1,r=t,o=m(Ye.container,w.classes.loading);if(I.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,r=s(["mousemove","touchstart","mouseenter","focus"],t.type),s(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):r=m(Ye.container,w.classes.hideControls)),e.clearTimeout(Be.hover),r||Ye.media.paused||o){if(d(Ye.container,w.classes.hideControls,!1),Ye.media.paused||o)return;Ye.browser.isTouch&&(n=3e3)}r&&Ye.media.paused||(Be.hover=e.setTimeout(function(){(!Ye.controls.pressed&&!Ye.controls.hover||a)&&d(Ye.container,w.classes.hideControls,!0)},n))}}function Me(e){if(!I.undefined(e))return void Ne(e);var t;switch(Ye.type){case"youtube":t=Ye.embed.getVideoUrl();break;case"vimeo":Ye.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Ye.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Ye.media.currentSrc}return t||""}function Ne(e){function n(){if(Ye.embed=null,i(Ye.media),"video"===Ye.type&&Ye.videoContainer&&i(Ye.videoContainer),Ye.container&&Ye.container.removeAttribute("class"),"type"in e&&(Ye.type=e.type,"video"===Ye.type)){var n=e.sources[0];"type"in n&&s(w.types.embed,n.type)&&(Ye.type=n.type)}switch(Ye.supported=T(Ye.type),Ye.type){case"video":Ye.media=t.createElement("video");break;case"audio":Ye.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Ye.media=t.createElement("div"),Ye.embedId=e.sources[0].src}l(Ye.container,Ye.media),I.boolean(e.autoplay)&&(w.autoplay=e.autoplay),s(w.types.html5,Ye.type)&&(w.crossorigin&&Ye.media.setAttribute("crossorigin",""),w.autoplay&&Ye.media.setAttribute("autoplay",""),"poster"in e&&Ye.media.setAttribute("poster",e.poster),w.loop&&Ye.media.setAttribute("loop","")),d(Ye.container,w.classes.fullscreen.active,Ye.isFullscreen),d(Ye.container,w.classes.captions.active,Ye.captionsEnabled),J(),s(w.types.html5,Ye.type)&&B("source",e.sources),Q(),s(w.types.html5,Ye.type)&&("tracks"in e&&B("track",e.tracks),Ye.media.load()),(s(w.types.html5,Ye.type)||s(w.types.embed,Ye.type)&&!Ye.supported.full)&&(De(),He()),w.title=e.title,$()}return I.object(e)&&"sources"in e&&e.sources.length?(d(Ye.container,w.classes.ready,!1),re(),Fe(),Te(),qe(),void Ve(n,!1)):void Je("Invalid source format")}function Oe(e){"video"===Ye.type&&Ye.media.setAttribute("poster",e)}function Le(){function n(){var e=oe(),t=Ye.buttons[e?"play":"pause"],n=Ye.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,w.classes.tabFocus);setTimeout(function(){n.focus(),a&&(d(t,w.classes.tabFocus,!1),d(n,w.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function r(e){ -return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Ye.buttons){var n=Ye.buttons[t];if(I.nodeList(n))for(var a=0;a0)&&(t?he(n):ve(n)),(e.deltaY>0||e.deltaX<0)&&(t?ve(n):he(n))})}function je(){if(g(Ye.media,"timeupdate seeking",Ce),g(Ye.media,"timeupdate",V),g(Ye.media,"durationchange loadedmetadata",Se),g(Ye.media,"ended",function(){"video"===Ye.type&&w.showPosterOnEnd&&("video"===Ye.type&&q(),ce(),Ye.media.load())}),g(Ye.media,"progress playing",xe),g(Ye.media,"volumechange",_e),g(Ye.media,"play pause ended",de),g(Ye.media,"waiting canplay seeked",we),w.clickToPlay&&"audio"!==Ye.type){var e=H("."+w.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){w.hideControls&&Ye.browser.isTouch&&!Ye.media.paused||(Ye.media.paused?se():Ye.media.ended?(ce(),se()):re())})}w.disableContextMenu&&g(Ye.media,"contextmenu",function(e){e.preventDefault()}),g(Ye.media,w.events.concat(["keyup","keydown"]).join(" "),function(e){E(Ye.container,e.type,!0)})}function qe(){if(s(w.types.html5,Ye.type)){for(var e=Ye.media.querySelectorAll("source"),t=0;t=0;n--){var a=n>0?t.cloneNode(!0):t,r=e[n],s=r.parentNode,o=r.nextSibling;return a.appendChild(r),o?s.insertBefore(a,o):s.appendChild(a),a}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,I["boolean"](t[n])&&t[n]?"":t[n])}function c(e,n,a){var r=t.createElement(e);u(r,a),l(n,r)}function d(e){return e.replace(".","")}function p(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function f(e,n){var a=Element.prototype,r=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return r.call(e,n)}function b(e,t,n,a,r){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},r)}function y(e,t,n,a,r){var s=t.split(" ");if(I["boolean"](r)||(r=!1),e instanceof NodeList)for(var o=0;oa;a++){var r=e[a];for(var s in r)r[s]&&r[s].constructor&&r[s].constructor===Object?(t[s]=t[s]||{},k(t[s],r[s])):t[s]=r[s]}return t}}function w(y,w){function E(e,t,n,a){v(e,t,n,k({},a,{plyr:We}))}function M(t,n){w.debug&&e.console&&(n=Array.prototype.slice.call(n),I.string(w.logPrefix)&&w.logPrefix.length&&n.unshift(w.logPrefix),console[t].apply(console,n))}function N(){return{url:w.iconUrl,absolute:0===w.iconUrl.indexOf("http")||Ye.browser.isIE}}function O(){var e=[],t=N(),n=(t.absolute?"":t.url)+"#"+w.iconPrefix;return r(w.controls,"play-large")&&e.push('"),e.push('
    '),r(w.controls,"restart")&&e.push('"),r(w.controls,"rewind")&&e.push('"),r(w.controls,"play")&&e.push('",'"),r(w.controls,"fast-forward")&&e.push('"),r(w.controls,"progress")&&(e.push('','','','','',"0% "+w.i18n.buffered,""),w.tooltips.seek&&e.push('00:00'),e.push("")),r(w.controls,"current-time")&&e.push('',''+w.i18n.currentTime+"",'00:00',""),r(w.controls,"duration")&&e.push('',''+w.i18n.duration+"",'00:00',""),r(w.controls,"mute")&&e.push('"),r(w.controls,"volume")&&e.push('','",'','',""),r(w.controls,"captions")&&e.push('"),r(w.controls,"settings")&&e.push('
    ','",'","
    "),r(w.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function L(){if(Ye.supported.full&&("audio"!==Ye.type||w.fullscreen.allowAudio)&&w.fullscreen.enabled){var e=P.fullscreen;e||w.fullscreen.fallback&&!W()?(Ue((e?"Native":"Fallback")+" fullscreen enabled"),p(Ye.container,w.classes.fullscreen.enabled,!0)):Ue("Fullscreen not supported and fallback disabled"),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,!1),Y()}}function q(){if("video"===Ye.type){H(w.selectors.captions)||Ye.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Ye.usingTextTracks=!1,Ye.media.textTracks&&(Ye.usingTextTracks=!0);for(var e,t="",n=Ye.media.childNodes,a=0;a=10||Ye.browser.isFirefox&&Ye.browser.version>=31)&&(Ue("Detected browser with known TextTrack issues - using manual fallback"),Ye.usingTextTracks=!1),Ye.usingTextTracks){Ue("TextTracks supported");for(var o=0;o ");for(var a=0;aYe.captions.length-1){Ye.subcount=Ye.captions.length-1;break}Ye.media.currentTime.toFixed(1)>=n(Ye.captions[Ye.subcount][0])&&Ye.media.currentTime.toFixed(1)<=a(Ye.captions[Ye.subcount][0])?(Ye.currentCaption=Ye.captions[Ye.subcount][1],j(Ye.currentCaption)):j()}}function R(){if(Ye.buttons.captions){p(Ye.container,w.classes.captions.enabled,!0);var e=Ye.storage.captionsEnabled;I["boolean"](e)||(e=w.captions.defaultActive),e&&(p(Ye.container,w.classes.captions.active,!0),h(Ye.buttons.captions,!0))}}function D(e){return Ye.container.querySelectorAll(e)}function H(e){return D(e)[0]}function W(){try{return e.self!==e.top}catch(t){return!0}}function Y(){function e(e){9===e.which&&Ye.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=D("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Ye.container,"keydown",e)}function B(e,t){if(I.string(t))c(e,Ye.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Ye.media,t[n])}function X(){if(w.loadSprite){var e=N();e.absolute?(Ue("AJAX loading absolute SVG sprite"+(Ye.browser.isIE?" (due to IE)":"")),x(e.url,"sprite-plyr")):Ue("Sprite will be used as external resource directly")}var n=w.html;Ue("Injecting custom controls"),n||(n=O()),n=s(n,"{seektime}",w.seekTime),n=s(n,"{speed}",w.currentSpeed.toFixed(1).toString().replace(".0","")+"×"),n=s(n,"{lang}","English"),n=s(n,"{id}",Math.floor(1e4*Math.random()));var a;if(I.string(w.selectors.controls.container)&&(a=t.querySelector(w.selectors.controls.container)),I.htmlElement(a)||(a=Ye.container),a.insertAdjacentHTML("beforeend",n),w.tooltips.controls)for(var r=D([w.selectors.controls.wrapper," ",w.selectors.labels," .",w.classes.hidden].join("")),o=r.length-1;o>=0;o--){var i=r[o];p(i,w.classes.hidden,!1),p(i,w.classes.tooltip,!0)}}function U(){try{return Ye.controls=H(w.selectors.controls.wrapper),Ye.buttons={},Ye.buttons.seek=H(w.selectors.buttons.seek),Ye.buttons.play=D(w.selectors.buttons.play),Ye.buttons.pause=H(w.selectors.buttons.pause),Ye.buttons.restart=H(w.selectors.buttons.restart),Ye.buttons.rewind=H(w.selectors.buttons.rewind),Ye.buttons.forward=H(w.selectors.buttons.forward),Ye.buttons.fullscreen=H(w.selectors.buttons.fullscreen),Ye.buttons.settings=H(w.selectors.buttons.settings),Ye.buttons.mute=H(w.selectors.buttons.mute),Ye.buttons.captions=H(w.selectors.buttons.captions),Ye.progress={},Ye.progress.container=H(w.selectors.progress.container),Ye.progress.buffer={},Ye.progress.buffer.bar=H(w.selectors.progress.buffer),Ye.progress.buffer.text=Ye.progress.buffer.bar&&Ye.progress.buffer.bar.getElementsByTagName("span")[0],Ye.progress.played=H(w.selectors.progress.played),Ye.progress.tooltip=Ye.progress.container&&Ye.progress.container.querySelector("."+w.classes.tooltip),Ye.volume={},Ye.volume.input=H(w.selectors.volume.input),Ye.volume.display=H(w.selectors.volume.display),Ye.duration=H(w.selectors.duration),Ye.currentTime=H(w.selectors.currentTime),Ye.seekTime=D(w.selectors.seekTime),!0}catch(e){return Je("It looks like there is a problem with your controls HTML"),z(!0),!1}}function J(){p(Ye.container,w.selectors.container.replace(".",""),Ye.supported.full)}function z(e){e&&r(w.types.html5,Ye.type)?Ye.media.setAttribute("controls",""):Ye.media.removeAttribute("controls")}function $(e){var t=w.i18n.play;if(I.string(w.title)&&w.title.length&&(t+=", "+w.title,Ye.container.setAttribute("aria-label",w.title)),Ye.supported.full&&Ye.buttons.play)for(var n=Ye.buttons.play.length-1;n>=0;n--)Ye.buttons.play[n].setAttribute("aria-label",t);I.htmlElement(e)&&e.setAttribute("title",w.i18n.frameTitle.replace("{title}",w.title))}function G(){var t=null;Ye.storage={},P.storage&&w.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(w.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?K({volume:parseFloat(t)}):Ye.storage=JSON.parse(t)))}function K(t){P.storage&&w.storage.enabled&&(k(Ye.storage,t),e.localStorage.setItem(w.storage.key,JSON.stringify(Ye.storage)))}function Q(){if(!Ye.media)return void Je("No media element found!");if(Ye.supported.full&&(p(Ye.container,w.classes.type.replace("{0}",Ye.type),!0),r(w.types.embed,Ye.type)&&p(Ye.container,w.classes.type.replace("{0}","video"),!0),p(Ye.container,w.classes.pip.enabled,P.pip(Ye)),p(Ye.container,w.classes.stopped,w.autoplay),p(Ye.ontainer,w.classes.isIos,Ye.browser.isIos),p(Ye.container,w.classes.isTouch,Ye.browser.isTouch),"video"===Ye.type)){var e=t.createElement("div");e.setAttribute("class",w.classes.videoWrapper),o(Ye.media,e),Ye.videoContainer=e}r(w.types.embed,Ye.type)&&Z()}function Z(){for(var n=t.createElement("div"),r=Ye.embedId,s=Ye.type+"-"+Math.floor(1e4*Math.random()),o=D('[id^="'+Ye.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(p(Ye.media,w.classes.videoWrapper,!0),p(Ye.media,w.classes.embedWrapper,!0),"youtube"===Ye.type)Ye.media.appendChild(n),n.setAttribute("id",s),I.object(e.YT)?te(r,n):(a(w.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){te(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Ye.type)if(Ye.supported.full?Ye.media.appendChild(n):n=Ye.media,n.setAttribute("id",s),I.object(e.Vimeo))ne(r,n);else{a(w.urls.vimeo.api);var c=e.setInterval(function(){I.object(e.Vimeo)&&(e.clearInterval(c),ne(r,n))},50)}else if("soundcloud"===Ye.type){var d=t.createElement("iframe");d.loaded=!1,g(d,"load",function(){d.loaded=!0}),u(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:s}),n.appendChild(d),Ye.media.appendChild(n),e.SC||a(w.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(m),ae.call(d))},50)}}function ee(){Ye.supported.full&&(De(),He()),$(H("iframe"))}function te(t,n){Ye.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:w.autoplay?1:0,controls:Ye.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:w.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){E(Ye.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Ye.media.play=function(){n.playVideo(),Ye.media.paused=!1},Ye.media.pause=function(){n.pauseVideo(),Ye.media.paused=!0},Ye.media.stop=function(){n.stopVideo(),Ye.media.paused=!0},Ye.media.duration=n.getDuration(),Ye.media.paused=!0,Ye.media.currentTime=0,Ye.media.muted=n.isMuted(),w.title=n.getVideoData().title,Ye.supported.full&&Ye.media.querySelector("iframe").setAttribute("tabindex","-1"),ee(),E(Ye.media,"timeupdate"),E(Ye.media,"durationchange"),e.clearInterval(Be.buffering),Be.buffering=e.setInterval(function(){Ye.media.buffered=n.getVideoLoadedFraction(),(null===Ye.media.lastBuffered||Ye.media.lastBuffered=w.speeds.length&&(n=0),e=w.speeds[n]}else e=w.defaultSpeed}w.currentSpeed=e,Ye.media.playbackRate=e,K({speed:e})}function ce(e){var t=0,n=Ye.media.paused,a=de();I.number(e)?t=e:I.event(e)&&r(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),0>t?t=0:t>a&&(t=a),Ae(t);try{Ye.media.currentTime=t.toFixed(4)}catch(s){}if(r(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.seekTo(t);break;case"vimeo":Ye.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Ye.embed.seekTo(1e3*t)}n&&se(),E(Ye.media,"timeupdate"),Ye.media.seeking=!0}Ue("Seeking to "+Ye.media.currentTime+" seconds"),V(t)}function de(){var e=parseInt(w.duration),t=0;return null===Ye.media.duration||isNaN(Ye.media.duration)||(t=Ye.media.duration),isNaN(e)?t:e}function pe(){p(Ye.container,w.classes.playing,!Ye.media.paused),p(Ye.container,w.classes.stopped,Ye.media.paused),Pe(Ye.media.paused)}function me(){A={x:e.pageXOffset||0,y:e.pageYOffset||0}}function fe(){e.scrollTo(A.x,A.y)}function be(e){var n=P.fullscreen;if(n){if(!e||e.type!==C.eventType)return C.isFullScreen(Ye.container)?C.cancelFullScreen():(me(),C.requestFullScreen(Ye.container)),void(Ye.isFullscreen=C.isFullScreen(Ye.container));Ye.isFullscreen=C.isFullScreen(Ye.container)}else Ye.isFullscreen=!Ye.isFullscreen,t.body.style.overflow=Ye.isFullscreen?"hidden":"";p(Ye.container,w.classes.fullscreen.active,Ye.isFullscreen),Y(Ye.isFullscreen),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,Ye.isFullscreen),E(Ye.container,Ye.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Ye.isFullscreen&&n&&fe()}function ye(e){if(I["boolean"](e)||(e=!Ye.media.muted),h(Ye.buttons.mute,e),Ye.media.muted=e,0===Ye.media.volume&&ge(w.volume),r(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed[Ye.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.muted?0:parseFloat(w.volume/w.volumeMax))}E(Ye.media,"volumechange")}}function ge(e){var t=w.volumeMax,n=w.volumeMin;if(I.undefined(e)&&(e=Ye.storage.volume),(null===e||isNaN(e))&&(e=w.volume),e>t&&(e=t),n>e&&(e=n),Ye.media.volume=parseFloat(e/t),Ye.volume.display&&(Ye.volume.display.value=e),r(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.setVolume(100*Ye.media.volume);break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.volume)}E(Ye.media,"volumechange")}0===e?Ye.media.muted=!0:Ye.media.muted&&e>0&&ye()}function ve(e){var t=Ye.media.muted?0:Ye.media.volume*w.volumeMax;I.number(e)||(e=w.volumeStep),ge(t+e)}function he(e){var t=Ye.media.muted?0:Ye.media.volume*w.volumeMax;I.number(e)||(e=w.volumeStep),ge(t-e)}function _e(){var e=Ye.media.muted?0:Ye.media.volume*w.volumeMax;Ye.supported.full&&(Ye.volume.input&&(Ye.volume.input.value=e),Ye.volume.display&&(Ye.volume.display.value=e)),K({volume:e}),p(Ye.container,w.classes.muted,0===e),Ye.supported.full&&Ye.buttons.mute&&h(Ye.buttons.mute,0===e)}function ke(e){Ye.supported.full&&Ye.buttons.captions&&(I["boolean"](e)||(e=-1===Ye.container.className.indexOf(w.classes.captions.active)),Ye.captionsEnabled=e,h(Ye.buttons.captions,Ye.captionsEnabled),p(Ye.container,w.classes.captions.active,Ye.captionsEnabled),E(Ye.container,Ye.captionsEnabled?"captionsenabled":"captionsdisabled",!0),K({captionsEnabled:Ye.captionsEnabled}))}function we(e){var t="waiting"===e.type;clearTimeout(Be.loading),Be.loading=setTimeout(function(){p(Ye.container,w.classes.loading,t),Pe(t)},t?250:0)}function xe(e){if(Ye.supported.full){var t=Ye.progress.played,n=0,a=de();if(e)switch(e.type){case"timeupdate":case"seeking":if(Ye.controls.pressed)return;n=_(Ye.media.currentTime,a),"timeupdate"===e.type&&Ye.buttons.seek&&(Ye.buttons.seek.value=n);break;case"playing":case"progress":t=Ye.progress.buffer,n=function(){var e=Ye.media.buffered;return e&&e.length?_(e.end(0),a):I.number(e)?100*e:0}()}Te(t,n)}}function Te(e,t){if(Ye.supported.full){if(I.undefined(t)&&(t=0),I.undefined(e)){if(!Ye.progress||!Ye.progress.buffer)return;e=Ye.progress.buffer}I.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ee(e,t){if(t){isNaN(e)&&(e=0),Ye.secs=parseInt(e%60),Ye.mins=parseInt(e/60%60),Ye.hours=parseInt(e/60/60%60);var n=parseInt(de()/60/60%60)>0;Ye.secs=("0"+Ye.secs).slice(-2),Ye.mins=("0"+Ye.mins).slice(-2),t.innerHTML=(n?Ye.hours+":":"")+Ye.mins+":"+Ye.secs}}function Se(){if(Ye.supported.full){var e=de()||0;!Ye.duration&&w.displayDuration&&Ye.media.paused&&Ee(e,Ye.currentTime),Ye.duration&&Ee(e,Ye.duration),Fe()}}function Ce(e){Ee(Ye.media.currentTime,Ye.currentTime),e&&"timeupdate"===e.type&&Ye.media.seeking||xe(e)}function Ae(e){I.number(e)||(e=0);var t=de(),n=_(e,t);Ye.progress&&Ye.progress.played&&(Ye.progress.played.value=n),Ye.buttons&&Ye.buttons.seek&&(Ye.buttons.seek.value=n)}function Fe(e){var t=de();if(w.tooltips.seek&&Ye.progress.container&&0!==t){var n=Ye.progress.container.getBoundingClientRect(),a=0,s=w.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Ye.progress.tooltip,s))return;a=Ye.progress.tooltip.style.left.replace("%","")}0>a?a=0:a>100&&(a=100),Ee(t/100*a,Ye.progress.tooltip),Ye.progress.tooltip.style.left=a+"%",e&&r(["mouseenter","mouseleave"],e.type)&&p(Ye.progress.tooltip,s,"mouseenter"===e.type)}}function Ie(e){I.undefined(e)&&(e=Ye.storage.speed||w.defaultSpeed),ue(e)}function Pe(t){if(w.hideControls&&"audio"!==Ye.type){var n=0,a=!1,s=t,o=m(Ye.container,w.classes.loading);if(I["boolean"](t)||(t&&t.type?(a="enterfullscreen"===t.type,s=r(["mousemove","touchstart","mouseenter","focus"],t.type),r(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=m(Ye.container,w.classes.hideControls)),e.clearTimeout(Be.hover),s||Ye.media.paused||o){if(p(Ye.container,w.classes.hideControls,!1),Ye.media.paused||o)return;Ye.browser.isTouch&&(n=3e3)}s&&Ye.media.paused||(Be.hover=e.setTimeout(function(){(!Ye.controls.pressed&&!Ye.controls.hover||a)&&p(Ye.container,w.classes.hideControls,!0)},n))}}function Me(e){if(!I.undefined(e))return void Ne(e);var t;switch(Ye.type){case"youtube":t=Ye.embed.getVideoUrl();break;case"vimeo":Ye.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Ye.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Ye.media.currentSrc}return t||""}function Ne(e){function n(){if(Ye.embed=null,i(Ye.media),"video"===Ye.type&&Ye.videoContainer&&i(Ye.videoContainer),Ye.container&&Ye.container.removeAttribute("class"),"type"in e&&(Ye.type=e.type,"video"===Ye.type)){var n=e.sources[0];"type"in n&&r(w.types.embed,n.type)&&(Ye.type=n.type)}switch(Ye.supported=T(Ye.type),Ye.type){case"video":Ye.media=t.createElement("video");break;case"audio":Ye.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Ye.media=t.createElement("div"),Ye.embedId=e.sources[0].src}l(Ye.container,Ye.media),I["boolean"](e.autoplay)&&(w.autoplay=e.autoplay),r(w.types.html5,Ye.type)&&(w.crossorigin&&Ye.media.setAttribute("crossorigin",""),w.autoplay&&Ye.media.setAttribute("autoplay",""),"poster"in e&&Ye.media.setAttribute("poster",e.poster),w.loop&&Ye.media.setAttribute("loop","")),p(Ye.container,w.classes.fullscreen.active,Ye.isFullscreen),p(Ye.container,w.classes.captions.active,Ye.captionsEnabled),J(),r(w.types.html5,Ye.type)&&B("source",e.sources),Q(),r(w.types.html5,Ye.type)&&("tracks"in e&&B("track",e.tracks),Ye.media.load()),(r(w.types.html5,Ye.type)||r(w.types.embed,Ye.type)&&!Ye.supported.full)&&(De(),He()),w.title=e.title,$()}return I.object(e)&&"sources"in e&&e.sources.length?(p(Ye.container,w.classes.ready,!1),se(),Ae(),Te(),je(),void Ve(n,!1)):void Je("Invalid source format")}function Oe(e){"video"===Ye.type&&Ye.media.setAttribute("poster",e)}function Le(){function n(){var e=oe(),t=Ye.buttons[e?"play":"pause"],n=Ye.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,w.classes.tabFocus);setTimeout(function(){n.focus(),a&&(p(t,w.classes.tabFocus,!1),p(n,w.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null; +}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Ye.buttons){var n=Ye.buttons[t];if(I.nodeList(n))for(var a=0;a0)&&(t?he(n):ve(n)),(e.deltaY>0||e.deltaX<0)&&(t?ve(n):he(n))})}function qe(){if(g(Ye.media,"timeupdate seeking",Ce),g(Ye.media,"timeupdate",V),g(Ye.media,"durationchange loadedmetadata",Se),g(Ye.media,"ended",function(){"video"===Ye.type&&w.showPosterOnEnd&&("video"===Ye.type&&j(),ce(),Ye.media.load())}),g(Ye.media,"progress playing",xe),g(Ye.media,"volumechange",_e),g(Ye.media,"play pause ended",pe),g(Ye.media,"waiting canplay seeked",we),w.clickToPlay&&"audio"!==Ye.type){var e=H("."+w.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){w.hideControls&&Ye.browser.isTouch&&!Ye.media.paused||(Ye.media.paused?re():Ye.media.ended?(ce(),re()):se())})}w.disableContextMenu&&g(Ye.media,"contextmenu",function(e){e.preventDefault()}),g(Ye.media,w.events.concat(["keyup","keydown"]).join(" "),function(e){E(Ye.container,e.type,!0)})}function je(){if(r(w.types.html5,Ye.type)){for(var e=Ye.media.querySelectorAll("source"),t=0;t Date: Mon, 26 Sep 2016 23:21:57 +1000 Subject: [PATCH 14/70] Menu animation --- dist/plyr.css | 2 +- dist/plyr.js | 4 +- src/js/plyr.js | 200 ++++++++++++++++++++++++++------------------- src/less/plyr.less | 19 +++++ 4 files changed, 138 insertions(+), 87 deletions(-) diff --git a/dist/plyr.css b/dist/plyr.css index 0ec373d0..503e711e 100644 --- a/dist/plyr.css +++ b/dist/plyr.css @@ -1 +1 @@ -.plyr input[type=range]:focus,.plyr:focus{outline:0}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{from{transform:translateY(10px);opacity:.5}to{transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;font-weight:500;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;transform:translateY(-35.95%)}.plyr .plyr__video-embed iframe{pointer-events:none}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;transform:translateY(-40px);transition:transform .3s ease;color:#fff;font-size:16px;text-align:center}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(52,63,74,.85);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}.plyr__controls .plyr__menu+button,.plyr__controls>button+.plyr__menu,.plyr__controls>button+button{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover,.plyr--video .plyr__controls button[aria-expanded=true]{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover,.plyr--audio .plyr__controls button[aria-expanded=true]{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__menu{position:relative}.plyr__menu button svg{transition:transform .3s ease}.plyr__menu button[aria-expanded=true] svg{transform:rotate(45deg)}.plyr__menu button[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;bottom:100%;right:-5px;margin-bottom:10px;animation:plyr-popup .2s ease;background:rgba(52,63,74,.9);box-shadow:0 1px 0 rgba(0,0,0,.2);border-radius:4px;white-space:nowrap;text-align:left;color:#fff;font-size:14px}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__menu__container ul{margin:0;padding:5px;list-style:none}.plyr__menu__container button{display:-ms-flexbox;display:flex;width:100%;padding:7px 14px;color:#fff;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__menu__container .plyr__menu__btn::after{content:"";position:absolute;top:50%;transform:translateY(-50%);border:5px solid transparent}.plyr__menu__container .plyr__menu__btn--forward{padding-right:28px}.plyr__menu__container .plyr__menu__btn--forward::after{right:5px;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__btn--back{position:relative;padding-top:4px;padding-bottom:4px;padding-left:28px;margin-bottom:10px;font-weight:500}.plyr__menu__container .plyr__menu__btn--back::after{left:5px;border-right-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__btn--back::before{content:"";position:absolute;top:100%;left:0;right:0;height:1px;overflow:hidden;margin-top:4px;background:rgba(0,0,0,.15);box-shadow:0 1px 0 rgba(255,255,255,.1)}.plyr__menu__container .plyr__menu__btn__badge,.plyr__menu__container .plyr__menu__btn__value{display:inherit;margin-left:auto;padding-left:25px;pointer-events:none}.plyr__menu__container .plyr__menu__btn__value{font-weight:500;color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__btn__badge span{padding:2px 4px;border-radius:2px;background:#fff;color:rgba(52,63,74,.9);font-size:10px}.plyr__tooltip{position:absolute;z-index:2;bottom:100%;margin-bottom:10px;padding:5px 7.5px;pointer-events:none;opacity:0;background:rgba(52,63,74,.9);border-radius:3px;color:#fff;font-size:14px;font-weight:500;line-height:1.3;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(52,63,74,.9);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls>button:first-child .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>button:first-child .plyr__tooltip::before{left:16px}.plyr__controls>button:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>button:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>button:first-child .plyr__tooltip--visible,.plyr__controls>button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:first-child:hover .plyr__tooltip,.plyr__controls>button:last-child .plyr__tooltip--visible,.plyr__controls>button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)} \ No newline at end of file +.plyr input[type=range]:focus,.plyr:focus{outline:0}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{from{transform:translateY(10px);opacity:.5}to{transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;font-weight:500;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-moz-range-track{height:8px;background:0 0;border:0;border-radius:4px;-moz-user-select:none;user-select:none}.plyr input[type=range]::-moz-range-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-wrapper{position:relative;background:#000;border-radius:inherit;-webkit-mask-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)}.plyr__video-embed{padding-bottom:56.25%;height:0;overflow:hidden}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;transform:translateY(-35.95%)}.plyr .plyr__video-embed iframe{pointer-events:none}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;transform:translateY(-40px);transition:transform .3s ease;color:#fff;font-size:16px;text-align:center}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(52,63,74,.85);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--fullscreen-active .plyr__captions{font-size:32px}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;line-height:1;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__time:first-child,.plyr__controls>button:first-child{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}.plyr__controls [data-plyr=pause]{margin-left:0}.plyr__controls button{position:relative;display:inline-block;-ms-flex-negative:0;flex-shrink:0;overflow:visible;vertical-align:middle;padding:7px;border:0;background:0 0;border-radius:3px;cursor:pointer;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__controls button svg{width:18px;height:18px;display:block;fill:currentColor}.plyr__controls button:focus{outline:0}.plyr__controls .icon--captions-on,.plyr__controls .icon--exit-fullscreen,.plyr__controls .icon--muted{display:none}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>button{margin-left:10px}.plyr__controls .plyr__menu+button,.plyr__controls>button+.plyr__menu,.plyr__controls>button+button{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;padding:50px 10px 10px;background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;transition:opacity .3s ease}.plyr--video .plyr__controls button.tab-focus:focus,.plyr--video .plyr__controls button:hover,.plyr--video .plyr__controls button[aria-expanded=true]{background:#3498db;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565D64}.plyr--audio .plyr__controls button.tab-focus:focus,.plyr--audio .plyr__controls button:hover,.plyr--audio .plyr__controls button[aria-expanded=true]{background:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor}.plyr__play-large:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large,.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__controls .icon--captions-on,.plyr--fullscreen-active .icon--exit-fullscreen,.plyr--muted .plyr__controls .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr--captions-active .plyr__controls .icon--captions-on+svg,.plyr--fullscreen-active .icon--exit-fullscreen+svg,.plyr--muted .plyr__controls .icon--muted+svg{display:none}.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen]{display:inline-block}.plyr__menu{position:relative}.plyr__menu button svg{transition:transform .3s ease}.plyr__menu__container.is-resizing,.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu button[aria-expanded=true] svg{transform:rotate(45deg)}.plyr__menu button[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;bottom:100%;right:-5px;margin-bottom:10px;animation:plyr-popup .2s ease;background:rgba(52,63,74,.9);box-shadow:0 1px 0 rgba(0,0,0,.2);border-radius:4px;white-space:nowrap;text-align:left;color:#fff;font-size:14px}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__menu__container ul{margin:0;padding:5px;list-style:none;overflow:hidden}.plyr__menu__container button{display:-ms-flexbox;display:flex;width:100%;padding:7px 14px;color:#fff;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__menu__container .plyr__menu__btn::after{content:"";position:absolute;top:50%;transform:translateY(-50%);border:5px solid transparent}.plyr__menu__container .plyr__menu__btn--forward{padding-right:28px}.plyr__menu__container .plyr__menu__btn--forward::after{right:5px;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__btn--back{position:relative;padding-top:4px;padding-bottom:4px;padding-left:28px;margin-bottom:10px;font-weight:500}.plyr__menu__container .plyr__menu__btn--back::after{left:5px;border-right-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__btn--back::before{content:"";position:absolute;top:100%;left:0;right:0;height:1px;overflow:hidden;margin-top:4px;background:rgba(0,0,0,.15);box-shadow:0 1px 0 rgba(255,255,255,.1)}.plyr__menu__container .plyr__menu__btn__badge,.plyr__menu__container .plyr__menu__btn__value{display:inherit;margin-left:auto;padding-left:25px;pointer-events:none;overflow:hidden}.plyr__menu__container .plyr__menu__btn__value{font-weight:500;color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__btn__badge span{padding:2px 4px;border-radius:2px;background:#fff;color:rgba(52,63,74,.9);font-size:10px}.plyr__tooltip{position:absolute;z-index:2;bottom:100%;margin-bottom:10px;padding:5px 7.5px;pointer-events:none;opacity:0;background:rgba(52,63,74,.9);border-radius:3px;color:#fff;font-size:14px;font-weight:500;line-height:1.3;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease}.plyr__tooltip::before{content:'';position:absolute;width:0;height:0;left:50%;transform:translateX(-50%);bottom:-4px;border-right:4px solid transparent;border-top:4px solid rgba(52,63,74,.9);border-left:4px solid transparent;z-index:2}.plyr button.tab-focus:focus .plyr__tooltip,.plyr button:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr button:hover .plyr__tooltip{z-index:3}.plyr__controls>button:first-child .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>button:first-child .plyr__tooltip::before{left:16px}.plyr__controls>button:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>button:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>button:first-child .plyr__tooltip--visible,.plyr__controls>button:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:first-child:hover .plyr__tooltip,.plyr__controls>button:last-child .plyr__tooltip--visible,.plyr__controls>button:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>button:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr__progress{position:relative;display:none;-ms-flex:1;flex:1}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress input[type=range]::-webkit-slider-runnable-track{background:0 0}.plyr__progress input[type=range]::-moz-range-track{background:0 0}.plyr__progress input[type=range]::-ms-fill-upper{background:0 0}.plyr__progress .plyr__tooltip{left:0}.plyr .plyr__progress{display:inline-block}.plyr__progress--buffer,.plyr__progress--played,.plyr__volume--display{position:absolute;left:0;top:50%;width:100%;height:8px;margin:-4px 0 0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__controls{position:absolute;bottom:0;left:0;right:0}.plyr--fullscreen-active.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)} \ No newline at end of file diff --git a/dist/plyr.js b/dist/plyr.js index abccfeaa..f5e27a50 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,a,r=navigator.userAgent,s=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,d=!1;return-1!==navigator.appVersion.indexOf("Windows NT")&&-1!==navigator.appVersion.indexOf("rv:11")?(l=!0,s="IE",o="11"):-1!==(n=r.indexOf("MSIE"))?(l=!0,s="IE",o=r.substring(n+5)):-1!==(n=r.indexOf("Chrome"))?(c=!0,s="Chrome",o=r.substring(n+7)):-1!==(n=r.indexOf("Safari"))?(d=!0,s="Safari",o=r.substring(n+7),-1!==(n=r.indexOf("Version"))&&(o=r.substring(n+8))):-1!==(n=r.indexOf("Firefox"))?(u=!0,s="Firefox",o=r.substring(n+8)):(e=r.lastIndexOf(" ")+1)<(n=r.lastIndexOf("/"))&&(s=r.substring(e,n),o=r.substring(n+1),s.toLowerCase()===s.toUpperCase()&&(s=navigator.appName)),-1!==(a=o.indexOf(";"))&&(o=o.substring(0,a)),-1!==(a=o.indexOf(" "))&&(o=o.substring(0,a)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:s,version:i,isIE:l,isFirefox:u,isChrome:c,isSafari:d,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function a(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var a=t.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a)}}function r(e,t){return Array.prototype.indexOf&&-1!==e.indexOf(t)}function s(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function o(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var a=n>0?t.cloneNode(!0):t,r=e[n],s=r.parentNode,o=r.nextSibling;return a.appendChild(r),o?s.insertBefore(a,o):s.appendChild(a),a}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,I["boolean"](t[n])&&t[n]?"":t[n])}function c(e,n,a){var r=t.createElement(e);u(r,a),l(n,r)}function d(e){return e.replace(".","")}function p(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function f(e,n){var a=Element.prototype,r=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return r.call(e,n)}function b(e,t,n,a,r){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},r)}function y(e,t,n,a,r){var s=t.split(" ");if(I["boolean"](r)||(r=!1),e instanceof NodeList)for(var o=0;oa;a++){var r=e[a];for(var s in r)r[s]&&r[s].constructor&&r[s].constructor===Object?(t[s]=t[s]||{},k(t[s],r[s])):t[s]=r[s]}return t}}function w(y,w){function E(e,t,n,a){v(e,t,n,k({},a,{plyr:We}))}function M(t,n){w.debug&&e.console&&(n=Array.prototype.slice.call(n),I.string(w.logPrefix)&&w.logPrefix.length&&n.unshift(w.logPrefix),console[t].apply(console,n))}function N(){return{url:w.iconUrl,absolute:0===w.iconUrl.indexOf("http")||Ye.browser.isIE}}function O(){var e=[],t=N(),n=(t.absolute?"":t.url)+"#"+w.iconPrefix;return r(w.controls,"play-large")&&e.push('"),e.push('
    '),r(w.controls,"restart")&&e.push('"),r(w.controls,"rewind")&&e.push('"),r(w.controls,"play")&&e.push('",'"),r(w.controls,"fast-forward")&&e.push('"),r(w.controls,"progress")&&(e.push('','','','','',"0% "+w.i18n.buffered,""),w.tooltips.seek&&e.push('00:00'),e.push("")),r(w.controls,"current-time")&&e.push('',''+w.i18n.currentTime+"",'00:00',""),r(w.controls,"duration")&&e.push('',''+w.i18n.duration+"",'00:00',""),r(w.controls,"mute")&&e.push('"),r(w.controls,"volume")&&e.push('','",'','',""),r(w.controls,"captions")&&e.push('"),r(w.controls,"settings")&&e.push('
    ','",'","
    "),r(w.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function L(){if(Ye.supported.full&&("audio"!==Ye.type||w.fullscreen.allowAudio)&&w.fullscreen.enabled){var e=P.fullscreen;e||w.fullscreen.fallback&&!W()?(Ue((e?"Native":"Fallback")+" fullscreen enabled"),p(Ye.container,w.classes.fullscreen.enabled,!0)):Ue("Fullscreen not supported and fallback disabled"),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,!1),Y()}}function q(){if("video"===Ye.type){H(w.selectors.captions)||Ye.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Ye.usingTextTracks=!1,Ye.media.textTracks&&(Ye.usingTextTracks=!0);for(var e,t="",n=Ye.media.childNodes,a=0;a=10||Ye.browser.isFirefox&&Ye.browser.version>=31)&&(Ue("Detected browser with known TextTrack issues - using manual fallback"),Ye.usingTextTracks=!1),Ye.usingTextTracks){Ue("TextTracks supported");for(var o=0;o ");for(var a=0;aYe.captions.length-1){Ye.subcount=Ye.captions.length-1;break}Ye.media.currentTime.toFixed(1)>=n(Ye.captions[Ye.subcount][0])&&Ye.media.currentTime.toFixed(1)<=a(Ye.captions[Ye.subcount][0])?(Ye.currentCaption=Ye.captions[Ye.subcount][1],j(Ye.currentCaption)):j()}}function R(){if(Ye.buttons.captions){p(Ye.container,w.classes.captions.enabled,!0);var e=Ye.storage.captionsEnabled;I["boolean"](e)||(e=w.captions.defaultActive),e&&(p(Ye.container,w.classes.captions.active,!0),h(Ye.buttons.captions,!0))}}function D(e){return Ye.container.querySelectorAll(e)}function H(e){return D(e)[0]}function W(){try{return e.self!==e.top}catch(t){return!0}}function Y(){function e(e){9===e.which&&Ye.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=D("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Ye.container,"keydown",e)}function B(e,t){if(I.string(t))c(e,Ye.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Ye.media,t[n])}function X(){if(w.loadSprite){var e=N();e.absolute?(Ue("AJAX loading absolute SVG sprite"+(Ye.browser.isIE?" (due to IE)":"")),x(e.url,"sprite-plyr")):Ue("Sprite will be used as external resource directly")}var n=w.html;Ue("Injecting custom controls"),n||(n=O()),n=s(n,"{seektime}",w.seekTime),n=s(n,"{speed}",w.currentSpeed.toFixed(1).toString().replace(".0","")+"×"),n=s(n,"{lang}","English"),n=s(n,"{id}",Math.floor(1e4*Math.random()));var a;if(I.string(w.selectors.controls.container)&&(a=t.querySelector(w.selectors.controls.container)),I.htmlElement(a)||(a=Ye.container),a.insertAdjacentHTML("beforeend",n),w.tooltips.controls)for(var r=D([w.selectors.controls.wrapper," ",w.selectors.labels," .",w.classes.hidden].join("")),o=r.length-1;o>=0;o--){var i=r[o];p(i,w.classes.hidden,!1),p(i,w.classes.tooltip,!0)}}function U(){try{return Ye.controls=H(w.selectors.controls.wrapper),Ye.buttons={},Ye.buttons.seek=H(w.selectors.buttons.seek),Ye.buttons.play=D(w.selectors.buttons.play),Ye.buttons.pause=H(w.selectors.buttons.pause),Ye.buttons.restart=H(w.selectors.buttons.restart),Ye.buttons.rewind=H(w.selectors.buttons.rewind),Ye.buttons.forward=H(w.selectors.buttons.forward),Ye.buttons.fullscreen=H(w.selectors.buttons.fullscreen),Ye.buttons.settings=H(w.selectors.buttons.settings),Ye.buttons.mute=H(w.selectors.buttons.mute),Ye.buttons.captions=H(w.selectors.buttons.captions),Ye.progress={},Ye.progress.container=H(w.selectors.progress.container),Ye.progress.buffer={},Ye.progress.buffer.bar=H(w.selectors.progress.buffer),Ye.progress.buffer.text=Ye.progress.buffer.bar&&Ye.progress.buffer.bar.getElementsByTagName("span")[0],Ye.progress.played=H(w.selectors.progress.played),Ye.progress.tooltip=Ye.progress.container&&Ye.progress.container.querySelector("."+w.classes.tooltip),Ye.volume={},Ye.volume.input=H(w.selectors.volume.input),Ye.volume.display=H(w.selectors.volume.display),Ye.duration=H(w.selectors.duration),Ye.currentTime=H(w.selectors.currentTime),Ye.seekTime=D(w.selectors.seekTime),!0}catch(e){return Je("It looks like there is a problem with your controls HTML"),z(!0),!1}}function J(){p(Ye.container,w.selectors.container.replace(".",""),Ye.supported.full)}function z(e){e&&r(w.types.html5,Ye.type)?Ye.media.setAttribute("controls",""):Ye.media.removeAttribute("controls")}function $(e){var t=w.i18n.play;if(I.string(w.title)&&w.title.length&&(t+=", "+w.title,Ye.container.setAttribute("aria-label",w.title)),Ye.supported.full&&Ye.buttons.play)for(var n=Ye.buttons.play.length-1;n>=0;n--)Ye.buttons.play[n].setAttribute("aria-label",t);I.htmlElement(e)&&e.setAttribute("title",w.i18n.frameTitle.replace("{title}",w.title))}function G(){var t=null;Ye.storage={},P.storage&&w.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(w.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?K({volume:parseFloat(t)}):Ye.storage=JSON.parse(t)))}function K(t){P.storage&&w.storage.enabled&&(k(Ye.storage,t),e.localStorage.setItem(w.storage.key,JSON.stringify(Ye.storage)))}function Q(){if(!Ye.media)return void Je("No media element found!");if(Ye.supported.full&&(p(Ye.container,w.classes.type.replace("{0}",Ye.type),!0),r(w.types.embed,Ye.type)&&p(Ye.container,w.classes.type.replace("{0}","video"),!0),p(Ye.container,w.classes.pip.enabled,P.pip(Ye)),p(Ye.container,w.classes.stopped,w.autoplay),p(Ye.ontainer,w.classes.isIos,Ye.browser.isIos),p(Ye.container,w.classes.isTouch,Ye.browser.isTouch),"video"===Ye.type)){var e=t.createElement("div");e.setAttribute("class",w.classes.videoWrapper),o(Ye.media,e),Ye.videoContainer=e}r(w.types.embed,Ye.type)&&Z()}function Z(){for(var n=t.createElement("div"),r=Ye.embedId,s=Ye.type+"-"+Math.floor(1e4*Math.random()),o=D('[id^="'+Ye.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(p(Ye.media,w.classes.videoWrapper,!0),p(Ye.media,w.classes.embedWrapper,!0),"youtube"===Ye.type)Ye.media.appendChild(n),n.setAttribute("id",s),I.object(e.YT)?te(r,n):(a(w.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){te(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Ye.type)if(Ye.supported.full?Ye.media.appendChild(n):n=Ye.media,n.setAttribute("id",s),I.object(e.Vimeo))ne(r,n);else{a(w.urls.vimeo.api);var c=e.setInterval(function(){I.object(e.Vimeo)&&(e.clearInterval(c),ne(r,n))},50)}else if("soundcloud"===Ye.type){var d=t.createElement("iframe");d.loaded=!1,g(d,"load",function(){d.loaded=!0}),u(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:s}),n.appendChild(d),Ye.media.appendChild(n),e.SC||a(w.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(m),ae.call(d))},50)}}function ee(){Ye.supported.full&&(De(),He()),$(H("iframe"))}function te(t,n){Ye.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:w.autoplay?1:0,controls:Ye.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:w.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){E(Ye.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Ye.media.play=function(){n.playVideo(),Ye.media.paused=!1},Ye.media.pause=function(){n.pauseVideo(),Ye.media.paused=!0},Ye.media.stop=function(){n.stopVideo(),Ye.media.paused=!0},Ye.media.duration=n.getDuration(),Ye.media.paused=!0,Ye.media.currentTime=0,Ye.media.muted=n.isMuted(),w.title=n.getVideoData().title,Ye.supported.full&&Ye.media.querySelector("iframe").setAttribute("tabindex","-1"),ee(),E(Ye.media,"timeupdate"),E(Ye.media,"durationchange"),e.clearInterval(Be.buffering),Be.buffering=e.setInterval(function(){Ye.media.buffered=n.getVideoLoadedFraction(),(null===Ye.media.lastBuffered||Ye.media.lastBuffered=w.speeds.length&&(n=0),e=w.speeds[n]}else e=w.defaultSpeed}w.currentSpeed=e,Ye.media.playbackRate=e,K({speed:e})}function ce(e){var t=0,n=Ye.media.paused,a=de();I.number(e)?t=e:I.event(e)&&r(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),0>t?t=0:t>a&&(t=a),Ae(t);try{Ye.media.currentTime=t.toFixed(4)}catch(s){}if(r(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.seekTo(t);break;case"vimeo":Ye.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Ye.embed.seekTo(1e3*t)}n&&se(),E(Ye.media,"timeupdate"),Ye.media.seeking=!0}Ue("Seeking to "+Ye.media.currentTime+" seconds"),V(t)}function de(){var e=parseInt(w.duration),t=0;return null===Ye.media.duration||isNaN(Ye.media.duration)||(t=Ye.media.duration),isNaN(e)?t:e}function pe(){p(Ye.container,w.classes.playing,!Ye.media.paused),p(Ye.container,w.classes.stopped,Ye.media.paused),Pe(Ye.media.paused)}function me(){A={x:e.pageXOffset||0,y:e.pageYOffset||0}}function fe(){e.scrollTo(A.x,A.y)}function be(e){var n=P.fullscreen;if(n){if(!e||e.type!==C.eventType)return C.isFullScreen(Ye.container)?C.cancelFullScreen():(me(),C.requestFullScreen(Ye.container)),void(Ye.isFullscreen=C.isFullScreen(Ye.container));Ye.isFullscreen=C.isFullScreen(Ye.container)}else Ye.isFullscreen=!Ye.isFullscreen,t.body.style.overflow=Ye.isFullscreen?"hidden":"";p(Ye.container,w.classes.fullscreen.active,Ye.isFullscreen),Y(Ye.isFullscreen),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,Ye.isFullscreen),E(Ye.container,Ye.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Ye.isFullscreen&&n&&fe()}function ye(e){if(I["boolean"](e)||(e=!Ye.media.muted),h(Ye.buttons.mute,e),Ye.media.muted=e,0===Ye.media.volume&&ge(w.volume),r(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed[Ye.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.muted?0:parseFloat(w.volume/w.volumeMax))}E(Ye.media,"volumechange")}}function ge(e){var t=w.volumeMax,n=w.volumeMin;if(I.undefined(e)&&(e=Ye.storage.volume),(null===e||isNaN(e))&&(e=w.volume),e>t&&(e=t),n>e&&(e=n),Ye.media.volume=parseFloat(e/t),Ye.volume.display&&(Ye.volume.display.value=e),r(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.setVolume(100*Ye.media.volume);break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.volume)}E(Ye.media,"volumechange")}0===e?Ye.media.muted=!0:Ye.media.muted&&e>0&&ye()}function ve(e){var t=Ye.media.muted?0:Ye.media.volume*w.volumeMax;I.number(e)||(e=w.volumeStep),ge(t+e)}function he(e){var t=Ye.media.muted?0:Ye.media.volume*w.volumeMax;I.number(e)||(e=w.volumeStep),ge(t-e)}function _e(){var e=Ye.media.muted?0:Ye.media.volume*w.volumeMax;Ye.supported.full&&(Ye.volume.input&&(Ye.volume.input.value=e),Ye.volume.display&&(Ye.volume.display.value=e)),K({volume:e}),p(Ye.container,w.classes.muted,0===e),Ye.supported.full&&Ye.buttons.mute&&h(Ye.buttons.mute,0===e)}function ke(e){Ye.supported.full&&Ye.buttons.captions&&(I["boolean"](e)||(e=-1===Ye.container.className.indexOf(w.classes.captions.active)),Ye.captionsEnabled=e,h(Ye.buttons.captions,Ye.captionsEnabled),p(Ye.container,w.classes.captions.active,Ye.captionsEnabled),E(Ye.container,Ye.captionsEnabled?"captionsenabled":"captionsdisabled",!0),K({captionsEnabled:Ye.captionsEnabled}))}function we(e){var t="waiting"===e.type;clearTimeout(Be.loading),Be.loading=setTimeout(function(){p(Ye.container,w.classes.loading,t),Pe(t)},t?250:0)}function xe(e){if(Ye.supported.full){var t=Ye.progress.played,n=0,a=de();if(e)switch(e.type){case"timeupdate":case"seeking":if(Ye.controls.pressed)return;n=_(Ye.media.currentTime,a),"timeupdate"===e.type&&Ye.buttons.seek&&(Ye.buttons.seek.value=n);break;case"playing":case"progress":t=Ye.progress.buffer,n=function(){var e=Ye.media.buffered;return e&&e.length?_(e.end(0),a):I.number(e)?100*e:0}()}Te(t,n)}}function Te(e,t){if(Ye.supported.full){if(I.undefined(t)&&(t=0),I.undefined(e)){if(!Ye.progress||!Ye.progress.buffer)return;e=Ye.progress.buffer}I.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ee(e,t){if(t){isNaN(e)&&(e=0),Ye.secs=parseInt(e%60),Ye.mins=parseInt(e/60%60),Ye.hours=parseInt(e/60/60%60);var n=parseInt(de()/60/60%60)>0;Ye.secs=("0"+Ye.secs).slice(-2),Ye.mins=("0"+Ye.mins).slice(-2),t.innerHTML=(n?Ye.hours+":":"")+Ye.mins+":"+Ye.secs}}function Se(){if(Ye.supported.full){var e=de()||0;!Ye.duration&&w.displayDuration&&Ye.media.paused&&Ee(e,Ye.currentTime),Ye.duration&&Ee(e,Ye.duration),Fe()}}function Ce(e){Ee(Ye.media.currentTime,Ye.currentTime),e&&"timeupdate"===e.type&&Ye.media.seeking||xe(e)}function Ae(e){I.number(e)||(e=0);var t=de(),n=_(e,t);Ye.progress&&Ye.progress.played&&(Ye.progress.played.value=n),Ye.buttons&&Ye.buttons.seek&&(Ye.buttons.seek.value=n)}function Fe(e){var t=de();if(w.tooltips.seek&&Ye.progress.container&&0!==t){var n=Ye.progress.container.getBoundingClientRect(),a=0,s=w.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Ye.progress.tooltip,s))return;a=Ye.progress.tooltip.style.left.replace("%","")}0>a?a=0:a>100&&(a=100),Ee(t/100*a,Ye.progress.tooltip),Ye.progress.tooltip.style.left=a+"%",e&&r(["mouseenter","mouseleave"],e.type)&&p(Ye.progress.tooltip,s,"mouseenter"===e.type)}}function Ie(e){I.undefined(e)&&(e=Ye.storage.speed||w.defaultSpeed),ue(e)}function Pe(t){if(w.hideControls&&"audio"!==Ye.type){var n=0,a=!1,s=t,o=m(Ye.container,w.classes.loading);if(I["boolean"](t)||(t&&t.type?(a="enterfullscreen"===t.type,s=r(["mousemove","touchstart","mouseenter","focus"],t.type),r(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=m(Ye.container,w.classes.hideControls)),e.clearTimeout(Be.hover),s||Ye.media.paused||o){if(p(Ye.container,w.classes.hideControls,!1),Ye.media.paused||o)return;Ye.browser.isTouch&&(n=3e3)}s&&Ye.media.paused||(Be.hover=e.setTimeout(function(){(!Ye.controls.pressed&&!Ye.controls.hover||a)&&p(Ye.container,w.classes.hideControls,!0)},n))}}function Me(e){if(!I.undefined(e))return void Ne(e);var t;switch(Ye.type){case"youtube":t=Ye.embed.getVideoUrl();break;case"vimeo":Ye.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Ye.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Ye.media.currentSrc}return t||""}function Ne(e){function n(){if(Ye.embed=null,i(Ye.media),"video"===Ye.type&&Ye.videoContainer&&i(Ye.videoContainer),Ye.container&&Ye.container.removeAttribute("class"),"type"in e&&(Ye.type=e.type,"video"===Ye.type)){var n=e.sources[0];"type"in n&&r(w.types.embed,n.type)&&(Ye.type=n.type)}switch(Ye.supported=T(Ye.type),Ye.type){case"video":Ye.media=t.createElement("video");break;case"audio":Ye.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Ye.media=t.createElement("div"),Ye.embedId=e.sources[0].src}l(Ye.container,Ye.media),I["boolean"](e.autoplay)&&(w.autoplay=e.autoplay),r(w.types.html5,Ye.type)&&(w.crossorigin&&Ye.media.setAttribute("crossorigin",""),w.autoplay&&Ye.media.setAttribute("autoplay",""),"poster"in e&&Ye.media.setAttribute("poster",e.poster),w.loop&&Ye.media.setAttribute("loop","")),p(Ye.container,w.classes.fullscreen.active,Ye.isFullscreen),p(Ye.container,w.classes.captions.active,Ye.captionsEnabled),J(),r(w.types.html5,Ye.type)&&B("source",e.sources),Q(),r(w.types.html5,Ye.type)&&("tracks"in e&&B("track",e.tracks),Ye.media.load()),(r(w.types.html5,Ye.type)||r(w.types.embed,Ye.type)&&!Ye.supported.full)&&(De(),He()),w.title=e.title,$()}return I.object(e)&&"sources"in e&&e.sources.length?(p(Ye.container,w.classes.ready,!1),se(),Ae(),Te(),je(),void Ve(n,!1)):void Je("Invalid source format")}function Oe(e){"video"===Ye.type&&Ye.media.setAttribute("poster",e)}function Le(){function n(){var e=oe(),t=Ye.buttons[e?"play":"pause"],n=Ye.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,w.classes.tabFocus);setTimeout(function(){n.focus(),a&&(p(t,w.classes.tabFocus,!1),p(n,w.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null; -}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Ye.buttons){var n=Ye.buttons[t];if(I.nodeList(n))for(var a=0;a0)&&(t?he(n):ve(n)),(e.deltaY>0||e.deltaX<0)&&(t?ve(n):he(n))})}function qe(){if(g(Ye.media,"timeupdate seeking",Ce),g(Ye.media,"timeupdate",V),g(Ye.media,"durationchange loadedmetadata",Se),g(Ye.media,"ended",function(){"video"===Ye.type&&w.showPosterOnEnd&&("video"===Ye.type&&j(),ce(),Ye.media.load())}),g(Ye.media,"progress playing",xe),g(Ye.media,"volumechange",_e),g(Ye.media,"play pause ended",pe),g(Ye.media,"waiting canplay seeked",we),w.clickToPlay&&"audio"!==Ye.type){var e=H("."+w.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){w.hideControls&&Ye.browser.isTouch&&!Ye.media.paused||(Ye.media.paused?re():Ye.media.ended?(ce(),re()):se())})}w.disableContextMenu&&g(Ye.media,"contextmenu",function(e){e.preventDefault()}),g(Ye.media,w.events.concat(["keyup","keydown"]).join(" "),function(e){E(Ye.container,e.type,!0)})}function je(){if(r(w.types.html5,Ye.type)){for(var e=Ye.media.querySelectorAll("source"),t=0;t=0;n--){var a=n>0?t.cloneNode(!0):t,r=e[n],s=r.parentNode,o=r.nextSibling;return a.appendChild(r),o?s.insertBefore(a,o):s.appendChild(a),a}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,I["boolean"](t[n])&&t[n]?"":t[n])}function c(e,n,a){var r=t.createElement(e);u(r,a),l(n,r)}function d(e){return e.replace(".","")}function p(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return e?e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className):!1}function f(e,n){var a=Element.prototype,r=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return-1!==[].indexOf.call(t.querySelectorAll(e),this)};return r.call(e,n)}function b(e,t,n,a,r){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},r)}function y(e,t,n,a,r){var s=t.split(" ");if(I["boolean"](r)||(r=!1),e instanceof NodeList)for(var o=0;oa;a++){var r=e[a];for(var s in r)r[s]&&r[s].constructor&&r[s].constructor===Object?(t[s]=t[s]||{},k(t[s],r[s])):t[s]=r[s]}return t}}function w(y,w){function E(e,t,n,a){v(e,t,n,k({},a,{plyr:We}))}function N(t,n){w.debug&&e.console&&(n=Array.prototype.slice.call(n),I.string(w.logPrefix)&&w.logPrefix.length&&n.unshift(w.logPrefix),console[t].apply(console,n))}function M(){return{url:w.iconUrl,absolute:0===w.iconUrl.indexOf("http")||Ye.browser.isIE}}function O(){var e=[],t=M(),n=(t.absolute?"":t.url)+"#"+w.iconPrefix;return r(w.controls,"play-large")&&e.push('"),e.push('
    '),r(w.controls,"restart")&&e.push('"),r(w.controls,"rewind")&&e.push('"),r(w.controls,"play")&&e.push('",'"),r(w.controls,"fast-forward")&&e.push('"),r(w.controls,"progress")&&(e.push('','','','','',"0% "+w.i18n.buffered,""),w.tooltips.seek&&e.push('00:00'),e.push("")),r(w.controls,"current-time")&&e.push('',''+w.i18n.currentTime+"",'00:00',""),r(w.controls,"duration")&&e.push('',''+w.i18n.duration+"",'00:00',""),r(w.controls,"mute")&&e.push('"),r(w.controls,"volume")&&e.push('','",'','',""),r(w.controls,"captions")&&e.push('"),r(w.controls,"settings")&&e.push('
    ','",'","
    "),r(w.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function L(){if(Ye.supported.full&&("audio"!==Ye.type||w.fullscreen.allowAudio)&&w.fullscreen.enabled){var e=P.fullscreen;e||w.fullscreen.fallback&&!W()?(Ue((e?"Native":"Fallback")+" fullscreen enabled"),p(Ye.container,w.classes.fullscreen.enabled,!0)):Ue("Fullscreen not supported and fallback disabled"),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,!1),Y()}}function q(){if("video"===Ye.type){H(w.selectors.captions)||Ye.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Ye.usingTextTracks=!1,Ye.media.textTracks&&(Ye.usingTextTracks=!0);for(var e,t="",n=Ye.media.childNodes,a=0;a=10||Ye.browser.isFirefox&&Ye.browser.version>=31)&&(Ue("Detected browser with known TextTrack issues - using manual fallback"),Ye.usingTextTracks=!1),Ye.usingTextTracks){Ue("TextTracks supported");for(var o=0;o ");for(var a=0;aYe.captions.length-1){Ye.subcount=Ye.captions.length-1;break}Ye.media.currentTime.toFixed(1)>=n(Ye.captions[Ye.subcount][0])&&Ye.media.currentTime.toFixed(1)<=a(Ye.captions[Ye.subcount][0])?(Ye.currentCaption=Ye.captions[Ye.subcount][1],j(Ye.currentCaption)):j()}}function R(){if(Ye.buttons.captions){p(Ye.container,w.classes.captions.enabled,!0);var e=Ye.storage.captionsEnabled;I["boolean"](e)||(e=w.captions.defaultActive),e&&(p(Ye.container,w.classes.captions.active,!0),h(Ye.buttons.captions,!0))}}function D(e){return Ye.container.querySelectorAll(e)}function H(e){return D(e)[0]}function W(){try{return e.self!==e.top}catch(t){return!0}}function Y(){function e(e){9===e.which&&Ye.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=D("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Ye.container,"keydown",e)}function B(e,t){if(I.string(t))c(e,Ye.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Ye.media,t[n])}function X(){if(w.loadSprite){var e=M();e.absolute?(Ue("AJAX loading absolute SVG sprite"+(Ye.browser.isIE?" (due to IE)":"")),x(e.url,"sprite-plyr")):Ue("Sprite will be used as external resource directly")}var n=w.html;Ue("Injecting custom controls"),n||(n=O()),n=s(n,"{seektime}",w.seekTime),n=s(n,"{speed}",w.currentSpeed.toFixed(1).toString().replace(".0","")+"×"),n=s(n,"{lang}","English"),n=s(n,"{id}",Math.floor(1e4*Math.random()));var a;if(I.string(w.selectors.controls.container)&&(a=t.querySelector(w.selectors.controls.container)),I.htmlElement(a)||(a=Ye.container),a.insertAdjacentHTML("beforeend",n),w.tooltips.controls)for(var r=D([w.selectors.controls.wrapper," ",w.selectors.labels," .",w.classes.hidden].join("")),o=r.length-1;o>=0;o--){var i=r[o];p(i,w.classes.hidden,!1),p(i,w.classes.tooltip,!0)}}function U(){try{return Ye.controls=H(w.selectors.controls.wrapper),Ye.buttons={},Ye.buttons.seek=H(w.selectors.buttons.seek),Ye.buttons.play=D(w.selectors.buttons.play),Ye.buttons.pause=H(w.selectors.buttons.pause),Ye.buttons.restart=H(w.selectors.buttons.restart),Ye.buttons.rewind=H(w.selectors.buttons.rewind),Ye.buttons.forward=H(w.selectors.buttons.forward),Ye.buttons.fullscreen=H(w.selectors.buttons.fullscreen),Ye.buttons.settings=H(w.selectors.buttons.settings),Ye.buttons.mute=H(w.selectors.buttons.mute),Ye.buttons.captions=H(w.selectors.buttons.captions),Ye.progress={},Ye.progress.container=H(w.selectors.progress.container),Ye.progress.buffer={},Ye.progress.buffer.bar=H(w.selectors.progress.buffer),Ye.progress.buffer.text=Ye.progress.buffer.bar&&Ye.progress.buffer.bar.getElementsByTagName("span")[0],Ye.progress.played=H(w.selectors.progress.played),Ye.progress.tooltip=Ye.progress.container&&Ye.progress.container.querySelector("."+w.classes.tooltip),Ye.volume={},Ye.volume.input=H(w.selectors.volume.input),Ye.volume.display=H(w.selectors.volume.display),Ye.duration=H(w.selectors.duration),Ye.currentTime=H(w.selectors.currentTime),Ye.seekTime=D(w.selectors.seekTime),!0}catch(e){return Je("It looks like there is a problem with your controls HTML"),z(!0),!1}}function J(){p(Ye.container,w.selectors.container.replace(".",""),Ye.supported.full)}function z(e){e&&r(w.types.html5,Ye.type)?Ye.media.setAttribute("controls",""):Ye.media.removeAttribute("controls")}function $(e){var t=w.i18n.play;if(I.string(w.title)&&w.title.length&&(t+=", "+w.title,Ye.container.setAttribute("aria-label",w.title)),Ye.supported.full&&Ye.buttons.play)for(var n=Ye.buttons.play.length-1;n>=0;n--)Ye.buttons.play[n].setAttribute("aria-label",t);I.htmlElement(e)&&e.setAttribute("title",w.i18n.frameTitle.replace("{title}",w.title))}function G(){var t=null;Ye.storage={},P.storage&&w.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(w.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?K({volume:parseFloat(t)}):Ye.storage=JSON.parse(t)))}function K(t){P.storage&&w.storage.enabled&&(k(Ye.storage,t),e.localStorage.setItem(w.storage.key,JSON.stringify(Ye.storage)))}function Q(){if(!Ye.media)return void Je("No media element found!");if(Ye.supported.full&&(p(Ye.container,w.classes.type.replace("{0}",Ye.type),!0),r(w.types.embed,Ye.type)&&p(Ye.container,w.classes.type.replace("{0}","video"),!0),p(Ye.container,w.classes.pip.enabled,P.pip(Ye)),p(Ye.container,w.classes.stopped,w.autoplay),p(Ye.ontainer,w.classes.isIos,Ye.browser.isIos),p(Ye.container,w.classes.isTouch,Ye.browser.isTouch),"video"===Ye.type)){var e=t.createElement("div");e.setAttribute("class",w.classes.videoWrapper),o(Ye.media,e),Ye.videoContainer=e}r(w.types.embed,Ye.type)&&Z()}function Z(){for(var n=t.createElement("div"),r=Ye.embedId,s=Ye.type+"-"+Math.floor(1e4*Math.random()),o=D('[id^="'+Ye.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(p(Ye.media,w.classes.videoWrapper,!0),p(Ye.media,w.classes.embedWrapper,!0),"youtube"===Ye.type)Ye.media.appendChild(n),n.setAttribute("id",s),I.object(e.YT)?te(r,n):(a(w.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){te(r,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Ye.type)if(Ye.supported.full?Ye.media.appendChild(n):n=Ye.media,n.setAttribute("id",s),I.object(e.Vimeo))ne(r,n);else{a(w.urls.vimeo.api);var c=e.setInterval(function(){I.object(e.Vimeo)&&(e.clearInterval(c),ne(r,n))},50)}else if("soundcloud"===Ye.type){var d=t.createElement("iframe");d.loaded=!1,g(d,"load",function(){d.loaded=!0}),u(d,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+r,id:s}),n.appendChild(d),Ye.media.appendChild(n),e.SC||a(w.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&d.loaded&&(e.clearInterval(m),ae.call(d))},50)}}function ee(){Ye.supported.full&&(De(),He()),$(H("iframe"))}function te(t,n){Ye.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:w.autoplay?1:0,controls:Ye.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:w.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){E(Ye.container,"error",!0,{code:e.data,embed:e.target})},onReady:function(t){var n=t.target;Ye.media.play=function(){n.playVideo(),Ye.media.paused=!1},Ye.media.pause=function(){n.pauseVideo(),Ye.media.paused=!0},Ye.media.stop=function(){n.stopVideo(),Ye.media.paused=!0},Ye.media.duration=n.getDuration(),Ye.media.paused=!0,Ye.media.currentTime=0,Ye.media.muted=n.isMuted(),w.title=n.getVideoData().title,Ye.supported.full&&Ye.media.querySelector("iframe").setAttribute("tabindex","-1"),ee(),E(Ye.media,"timeupdate"),E(Ye.media,"durationchange"),e.clearInterval(Be.buffering),Be.buffering=e.setInterval(function(){Ye.media.buffered=n.getVideoLoadedFraction(),(null===Ye.media.lastBuffered||Ye.media.lastBuffered=w.speeds.length&&(n=0),e=w.speeds[n]}else e=w.defaultSpeed}w.currentSpeed=e,Ye.media.playbackRate=e,K({speed:e})}function ce(e){var t=0,n=Ye.media.paused,a=de();I.number(e)?t=e:I.event(e)&&r(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),0>t?t=0:t>a&&(t=a),Ae(t);try{Ye.media.currentTime=t.toFixed(4)}catch(s){}if(r(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.seekTo(t);break;case"vimeo":Ye.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Ye.embed.seekTo(1e3*t)}n&&se(),E(Ye.media,"timeupdate"),Ye.media.seeking=!0}Ue("Seeking to "+Ye.media.currentTime+" seconds"),V(t)}function de(){var e=parseInt(w.duration),t=0;return null===Ye.media.duration||isNaN(Ye.media.duration)||(t=Ye.media.duration),isNaN(e)?t:e}function pe(){p(Ye.container,w.classes.playing,!Ye.media.paused),p(Ye.container,w.classes.stopped,Ye.media.paused),Pe(Ye.media.paused)}function me(){A={x:e.pageXOffset||0,y:e.pageYOffset||0}}function fe(){e.scrollTo(A.x,A.y)}function be(e){var n=P.fullscreen;if(n){if(!e||e.type!==C.eventType)return C.isFullScreen(Ye.container)?C.cancelFullScreen():(me(),C.requestFullScreen(Ye.container)),void(Ye.isFullscreen=C.isFullScreen(Ye.container));Ye.isFullscreen=C.isFullScreen(Ye.container)}else Ye.isFullscreen=!Ye.isFullscreen,t.body.style.overflow=Ye.isFullscreen?"hidden":"";p(Ye.container,w.classes.fullscreen.active,Ye.isFullscreen),Y(Ye.isFullscreen),Ye.buttons&&Ye.buttons.fullscreen&&h(Ye.buttons.fullscreen,Ye.isFullscreen),E(Ye.container,Ye.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Ye.isFullscreen&&n&&fe()}function ye(e){if(I["boolean"](e)||(e=!Ye.media.muted),h(Ye.buttons.mute,e),Ye.media.muted=e,0===Ye.media.volume&&ge(w.volume),r(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed[Ye.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.muted?0:parseFloat(w.volume/w.volumeMax))}E(Ye.media,"volumechange")}}function ge(e){var t=w.volumeMax,n=w.volumeMin;if(I.undefined(e)&&(e=Ye.storage.volume),(null===e||isNaN(e))&&(e=w.volume),e>t&&(e=t),n>e&&(e=n),Ye.media.volume=parseFloat(e/t),Ye.volume.display&&(Ye.volume.display.value=e),r(w.types.embed,Ye.type)){switch(Ye.type){case"youtube":Ye.embed.setVolume(100*Ye.media.volume);break;case"vimeo":case"soundcloud":Ye.embed.setVolume(Ye.media.volume)}E(Ye.media,"volumechange")}0===e?Ye.media.muted=!0:Ye.media.muted&&e>0&&ye()}function ve(e){var t=Ye.media.muted?0:Ye.media.volume*w.volumeMax;I.number(e)||(e=w.volumeStep),ge(t+e)}function he(e){var t=Ye.media.muted?0:Ye.media.volume*w.volumeMax;I.number(e)||(e=w.volumeStep),ge(t-e)}function _e(){var e=Ye.media.muted?0:Ye.media.volume*w.volumeMax;Ye.supported.full&&(Ye.volume.input&&(Ye.volume.input.value=e),Ye.volume.display&&(Ye.volume.display.value=e)),K({volume:e}),p(Ye.container,w.classes.muted,0===e),Ye.supported.full&&Ye.buttons.mute&&h(Ye.buttons.mute,0===e)}function ke(e){Ye.supported.full&&Ye.buttons.captions&&(I["boolean"](e)||(e=-1===Ye.container.className.indexOf(w.classes.captions.active)),Ye.captionsEnabled=e,h(Ye.buttons.captions,Ye.captionsEnabled),p(Ye.container,w.classes.captions.active,Ye.captionsEnabled),E(Ye.container,Ye.captionsEnabled?"captionsenabled":"captionsdisabled",!0),K({captionsEnabled:Ye.captionsEnabled}))}function we(e){var t="waiting"===e.type;clearTimeout(Be.loading),Be.loading=setTimeout(function(){p(Ye.container,w.classes.loading,t),Pe(t)},t?250:0)}function xe(e){if(Ye.supported.full){var t=Ye.progress.played,n=0,a=de();if(e)switch(e.type){case"timeupdate":case"seeking":if(Ye.controls.pressed)return;n=_(Ye.media.currentTime,a),"timeupdate"===e.type&&Ye.buttons.seek&&(Ye.buttons.seek.value=n);break;case"playing":case"progress":t=Ye.progress.buffer,n=function(){var e=Ye.media.buffered;return e&&e.length?_(e.end(0),a):I.number(e)?100*e:0}()}Te(t,n)}}function Te(e,t){if(Ye.supported.full){if(I.undefined(t)&&(t=0),I.undefined(e)){if(!Ye.progress||!Ye.progress.buffer)return;e=Ye.progress.buffer}I.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ee(e,t){if(t){isNaN(e)&&(e=0),Ye.secs=parseInt(e%60),Ye.mins=parseInt(e/60%60),Ye.hours=parseInt(e/60/60%60);var n=parseInt(de()/60/60%60)>0;Ye.secs=("0"+Ye.secs).slice(-2),Ye.mins=("0"+Ye.mins).slice(-2),t.innerHTML=(n?Ye.hours+":":"")+Ye.mins+":"+Ye.secs}}function Se(){if(Ye.supported.full){var e=de()||0;!Ye.duration&&w.displayDuration&&Ye.media.paused&&Ee(e,Ye.currentTime),Ye.duration&&Ee(e,Ye.duration),Fe()}}function Ce(e){Ee(Ye.media.currentTime,Ye.currentTime),e&&"timeupdate"===e.type&&Ye.media.seeking||xe(e)}function Ae(e){I.number(e)||(e=0);var t=de(),n=_(e,t);Ye.progress&&Ye.progress.played&&(Ye.progress.played.value=n),Ye.buttons&&Ye.buttons.seek&&(Ye.buttons.seek.value=n)}function Fe(e){var t=de();if(w.tooltips.seek&&Ye.progress.container&&0!==t){var n=Ye.progress.container.getBoundingClientRect(),a=0,s=w.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Ye.progress.tooltip,s))return;a=Ye.progress.tooltip.style.left.replace("%","")}0>a?a=0:a>100&&(a=100),Ee(t/100*a,Ye.progress.tooltip),Ye.progress.tooltip.style.left=a+"%",e&&r(["mouseenter","mouseleave"],e.type)&&p(Ye.progress.tooltip,s,"mouseenter"===e.type)}}function Ie(e){I.undefined(e)&&(e=Ye.storage.speed||w.defaultSpeed),ue(e)}function Pe(t){if(w.hideControls&&"audio"!==Ye.type){var n=0,a=!1,s=t,o=m(Ye.container,w.classes.loading);if(I["boolean"](t)||(t&&t.type?(a="enterfullscreen"===t.type,s=r(["mousemove","touchstart","mouseenter","focus"],t.type),r(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=m(Ye.container,w.classes.hideControls)),e.clearTimeout(Be.hover),s||Ye.media.paused||o){if(p(Ye.container,w.classes.hideControls,!1),Ye.media.paused||o)return;Ye.browser.isTouch&&(n=3e3)}s&&Ye.media.paused||(Be.hover=e.setTimeout(function(){(!Ye.controls.pressed&&!Ye.controls.hover||a)&&p(Ye.container,w.classes.hideControls,!0)},n))}}function Ne(e){if(!I.undefined(e))return void Me(e);var t;switch(Ye.type){case"youtube":t=Ye.embed.getVideoUrl();break;case"vimeo":Ye.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Ye.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Ye.media.currentSrc}return t||""}function Me(e){function n(){if(Ye.embed=null,i(Ye.media),"video"===Ye.type&&Ye.videoContainer&&i(Ye.videoContainer),Ye.container&&Ye.container.removeAttribute("class"),"type"in e&&(Ye.type=e.type,"video"===Ye.type)){var n=e.sources[0];"type"in n&&r(w.types.embed,n.type)&&(Ye.type=n.type)}switch(Ye.supported=T(Ye.type),Ye.type){case"video":Ye.media=t.createElement("video");break;case"audio":Ye.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Ye.media=t.createElement("div"),Ye.embedId=e.sources[0].src}l(Ye.container,Ye.media),I["boolean"](e.autoplay)&&(w.autoplay=e.autoplay),r(w.types.html5,Ye.type)&&(w.crossorigin&&Ye.media.setAttribute("crossorigin",""),w.autoplay&&Ye.media.setAttribute("autoplay",""),"poster"in e&&Ye.media.setAttribute("poster",e.poster),w.loop&&Ye.media.setAttribute("loop","")),p(Ye.container,w.classes.fullscreen.active,Ye.isFullscreen),p(Ye.container,w.classes.captions.active,Ye.captionsEnabled),J(),r(w.types.html5,Ye.type)&&B("source",e.sources),Q(),r(w.types.html5,Ye.type)&&("tracks"in e&&B("track",e.tracks),Ye.media.load()),(r(w.types.html5,Ye.type)||r(w.types.embed,Ye.type)&&!Ye.supported.full)&&(De(),He()),w.title=e.title,$()}return I.object(e)&&"sources"in e&&e.sources.length?(p(Ye.container,w.classes.ready,!1),se(),Ae(),Te(),je(),void Ve(n,!1)):void Je("Invalid source format")}function Oe(e){"video"===Ye.type&&Ye.media.setAttribute("poster",e)}function Le(){function n(){var e=oe(),t=Ye.buttons[e?"play":"pause"],n=Ye.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,w.classes.tabFocus);setTimeout(function(){n.focus(),a&&(p(t,w.classes.tabFocus,!1),p(n,w.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null; +}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Ye.buttons){var n=Ye.buttons[t];if(I.nodeList(n))for(var a=0;a0)&&(t?he(n):ve(n)),(e.deltaY>0||e.deltaX<0)&&(t?ve(n):he(n))})}function qe(){if(g(Ye.media,"timeupdate seeking",Ce),g(Ye.media,"timeupdate",V),g(Ye.media,"durationchange loadedmetadata",Se),g(Ye.media,"ended",function(){"video"===Ye.type&&w.showPosterOnEnd&&("video"===Ye.type&&j(),ce(),Ye.media.load())}),g(Ye.media,"progress playing",xe),g(Ye.media,"volumechange",_e),g(Ye.media,"play pause ended",pe),g(Ye.media,"waiting canplay seeked",we),w.clickToPlay&&"audio"!==Ye.type){var e=H("."+w.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){w.hideControls&&Ye.browser.isTouch&&!Ye.media.paused||(Ye.media.paused?re():Ye.media.ended?(ce(),re()):se())})}w.disableContextMenu&&g(Ye.media,"contextmenu",function(e){e.preventDefault()}),g(Ye.media,w.events.concat(["keyup","keydown"]).join(" "),function(e){E(Ye.container,e.type,!0)})}function je(){if(r(w.types.html5,Ye.type)){for(var e=Ye.media.querySelectorAll("source"),t=0;t' + config.i18n.settings + '', '', '' @@ -3159,7 +3161,6 @@ var menu = this, toggle = event.target, target = document.getElementById(toggle.getAttribute('aria-controls')), - tabs = menu.querySelectorAll('[role="tabpanel"]'), show = (toggle.getAttribute('aria-expanded') === 'false'); // Nothing to show, bail @@ -3167,21 +3168,52 @@ return; } + // Are we targetting a tab? + var isTab = target.getAttribute('role') === 'tabpanel', + targetWidth, + targetHeight, + container; + // Hide all other tabs - if (target.getAttribute('role') === 'tabpanel') { - [].forEach.call(tabs, function(tab) { - tab.setAttribute('aria-hidden', true); - tab.setAttribute('tabindex', -1); + if (isTab) { + // Get other tabs + var current = menu.querySelector('[role="tabpanel"][aria-hidden="false"]'); + container = current.parentNode; - [].forEach.call(menu.querySelectorAll('[aria-controls="' + tab.getAttribute('id') + '"]'), function(toggle) { - toggle.setAttribute('aria-expanded', false); - }); + [].forEach.call(menu.querySelectorAll('[aria-controls="' + current.getAttribute('id') + '"]'), function(toggle) { + toggle.setAttribute('aria-expanded', false); }); - } - toggle.setAttribute('aria-expanded', show); + container.style.width = current.scrollWidth + 'px'; + container.style.height = current.scrollHeight + 'px'; + + current.setAttribute('aria-hidden', true); + current.setAttribute('tabindex', -1); + + // Get the natural element size + var clone = target.cloneNode(true); + clone.style.position = "absolute"; + clone.style.opacity = 0; + clone.setAttribute('aria-hidden', false); + container.appendChild(clone); + targetWidth = clone.scrollWidth; + targetHeight = clone.scrollHeight; + _remove(clone); + } + target.setAttribute('aria-hidden', !show); + toggle.setAttribute('aria-expanded', show); target.setAttribute('tabindex', 0); + + if (isTab) { + container.style.width = targetWidth + 'px'; + container.style.height = targetHeight + 'px'; + + window.setTimeout(function() { + container.style.width = ''; + container.style.height = ''; + }, 300); + } }); // Seek tooltip diff --git a/src/less/plyr.less b/src/less/plyr.less index 26c92b2d..5ba916cd 100644 --- a/src/less/plyr.less +++ b/src/less/plyr.less @@ -492,14 +492,21 @@ right: -5px; margin-bottom: 10px; animation: plyr-popup .2s ease; + background: @plyr-menu-bg; box-shadow: 0 1px 0 fade(#000, 20%); border-radius: 4px; + white-space: nowrap; text-align: left; color: @plyr-menu-color; font-size: @plyr-font-size-small; + > div { + overflow: hidden; + transition: height .35s cubic-bezier(.4,0,.2,1), width .35s cubic-bezier(.4,0,.2,1); + } + // Arrow &::after { content: ""; @@ -516,6 +523,7 @@ margin: 0; padding: 5px; list-style: none; + overflow: hidden; } button { display: flex; @@ -575,6 +583,7 @@ margin-left: auto; padding-left: ceil(@plyr-control-padding * 3.5); pointer-events: none; + overflow: hidden; } // Option value @@ -591,6 +600,16 @@ color: @plyr-menu-bg; font-size: 10px; } + + // When animating between menus + &.is-resizing { + overflow: hidden; + transition: height .35s cubic-bezier(.4,0,.2,1), width .35s cubic-bezier(.4,0,.2,1); + + ul { + //opacity: 0; + } + } } } From eba083153845a472629d3010bc8e348e34ecc4c9 Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 1 Oct 2016 22:07:01 +1000 Subject: [PATCH 15/70] Manually merged #385 --- .gitignore | 5 +- demo/error.html | 2 +- demo/index.html | 5 +- .../View_From_A_Blue_Moon_Trailer-HD.en.vtt | 29 +++++++ .../View_From_A_Blue_Moon_Trailer-HD.fr.vtt | 29 +++++++ dist/plyr.js | 4 +- readme.md | 7 +- src/js/plyr.js | 81 ++++++++++++++----- 8 files changed, 134 insertions(+), 28 deletions(-) create mode 100644 demo/webvtt/View_From_A_Blue_Moon_Trailer-HD.en.vtt create mode 100644 demo/webvtt/View_From_A_Blue_Moon_Trailer-HD.fr.vtt diff --git a/.gitignore b/.gitignore index 610716ad..06460b5a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,9 +3,6 @@ node_modules *.sublime-workspace .DS_Store aws.json -docs/index.dev.html *.mp4 -index-dev.html +index-*.html notes.txt -*.vtt -docs/index.dev.php diff --git a/demo/error.html b/demo/error.html index f867c915..c9ba8c36 100644 --- a/demo/error.html +++ b/demo/error.html @@ -6,7 +6,7 @@ - +
    diff --git a/demo/index.html b/demo/index.html index 0c9b83af..5c9a6166 100644 --- a/demo/index.html +++ b/demo/index.html @@ -51,13 +51,14 @@
    -
    - + diff --git a/demo/src/js/main.js b/demo/src/js/main.js index 5302604b..d7c5f42a 100644 --- a/demo/src/js/main.js +++ b/demo/src/js/main.js @@ -7,21 +7,21 @@ /*global plyr*/ // General functions -;(function() { +(function() { //document.body.addEventListener('ready', function(event) { console.log(event); }); - + // Setup the player var instances = plyr.setup({ - debug: true, - title: 'Video demo', - iconUrl: '../dist/plyr.svg', + debug: true, + title: 'Video demo', + iconUrl: '../dist/plyr.svg', tooltips: { - controls: true + controls: true }, captions: { - defaultActive: true + defaultActive: true }, - //controls: ['play-large', 'play', 'speed-up', 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'fullscreen'] + controls: ['play-large', 'play', 'speed-up', 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'fullscreen'] }); plyr.loadSprite('dist/demo.svg'); @@ -31,10 +31,10 @@ // Setup type toggle var buttons = document.querySelectorAll('[data-source]'), types = { - video: 'video', - audio: 'audio', - youtube: 'youtube', - vimeo: 'vimeo' + video: 'video', + audio: 'audio', + youtube: 'youtube', + vimeo: 'vimeo' }, currentType = window.location.hash.replace('#', ''), historySupport = (window.history && window.history.pushState); @@ -47,34 +47,38 @@ newSource(type); if (historySupport) { - history.pushState({ 'type': type }, '', '#' + type); + history.pushState({ + 'type': type + }, '', '#' + type); } }); } // List for backwards/forwards window.addEventListener('popstate', function(event) { - if(event.state && 'type' in event.state) { + if (event.state && 'type' in event.state) { newSource(event.state.type); } }); // On load - if(historySupport) { + if (historySupport) { var video = !currentType.length; // If there's no current type set, assume video - if(video) { + if (video) { currentType = types.video; } // Replace current history state - if(currentType in types) { - history.replaceState({ 'type': currentType }, '', (video ? '' : '#' + currentType)); + if (currentType in types) { + history.replaceState({ + 'type': currentType + }, '', (video ? '' : '#' + currentType)); } // If it's not video, load the source - if(currentType !== types.video) { + if (currentType !== types.video) { newSource(currentType, true); } } @@ -84,8 +88,7 @@ if (element) { if (element.classList) { element.classList[state ? 'add' : 'remove'](className); - } - else { + } else { var name = (' ' + element.className + ' ').replace(/\s+/g, ' ').replace(' ' + className + ' ', ''); element.className = name + (state ? ' ' + className : ''); } @@ -95,29 +98,29 @@ // Set a new source function newSource(type, init) { // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video - if(!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) { + if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) { return; } - switch(type) { + switch (type) { case types.video: player.source({ - type: 'video', - title: 'View From A Blue Moon', + type: 'video', + title: 'View From A Blue Moon', sources: [{ - src: 'https://cdn.selz.com/plyr/1.5/View_From_A_Blue_Moon_Trailer-HD.mp4', - type: 'video/mp4' + src: 'https://cdn.selz.com/plyr/1.5/View_From_A_Blue_Moon_Trailer-HD.mp4', + type: 'video/mp4' }, - { - src: 'https://cdn.selz.com/plyr/1.5/View_From_A_Blue_Moon_Trailer-HD.webm', - type: 'video/webm' + { + src: 'https://cdn.selz.com/plyr/1.5/View_From_A_Blue_Moon_Trailer-HD.webm', + type: 'video/webm' }], - poster: 'https://cdn.selz.com/plyr/1.5/View_From_A_Blue_Moon_Trailer-HD.jpg', - tracks: [{ - kind: 'captions', - label: 'English', - srclang:'en', - src: 'https://cdn.selz.com/plyr/1.5/View_From_A_Blue_Moon_Trailer-HD.en.vtt', + poster: 'https://cdn.selz.com/plyr/1.5/View_From_A_Blue_Moon_Trailer-HD.jpg', + tracks: [{ + kind: 'captions', + label: 'English', + srclang: 'en', + src: 'https://cdn.selz.com/plyr/1.5/View_From_A_Blue_Moon_Trailer-HD.en.vtt', default: true }] }); @@ -125,37 +128,37 @@ case types.audio: player.source({ - type: 'audio', - title: 'Kishi Bashi – “It All Began With A Burst”', + type: 'audio', + title: 'Kishi Bashi – “It All Began With A Burst”', sources: [{ - src: 'https://cdn.selz.com/plyr/1.5/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3', - type: 'audio/mp3' + src: 'https://cdn.selz.com/plyr/1.5/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3', + type: 'audio/mp3' }, - { - src: 'https://cdn.selz.com/plyr/1.5/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg', - type: 'audio/ogg' + { + src: 'https://cdn.selz.com/plyr/1.5/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg', + type: 'audio/ogg' }] }); break; case types.youtube: player.source({ - type: 'video', - title: 'View From A Blue Moon', + type: 'video', + title: 'View From A Blue Moon', sources: [{ - src: 'bTqVqk7FSmY', - type: 'youtube' + src: 'bTqVqk7FSmY', + type: 'youtube' }] }); break; case types.vimeo: player.source({ - type: 'video', - title: 'View From A Blue Moon', + type: 'video', + title: 'View From A Blue Moon', sources: [{ - src: '143418951', - type: 'vimeo' + src: '143418951', + type: 'vimeo' }] }); break; @@ -170,17 +173,24 @@ } // Set active on parent - toggleClass(document.querySelector('[data-source="'+ type +'"]').parentElement, 'active', true); + toggleClass(document.querySelector('[data-source="' + type + '"]').parentElement, 'active', true); } })(); // Google analytics // For demo site (http://[www.]plyr.io) only -if(document.domain.indexOf('plyr.io') > -1) { - (function(i,s,o,g,r,a,m){i.GoogleAnalyticsObject=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); +if (document.domain.indexOf('plyr.io') > -1) { + (function(i, s, o, g, r, a, m) { + i.GoogleAnalyticsObject = r; + i[r] = i[r] || function() { + (i[r].q = i[r].q || []).push(arguments) + }, i[r].l = 1 * new Date(); + a = s.createElement(o), + m = s.getElementsByTagName(o)[0]; + a.async = 1; + a.src = g; + m.parentNode.insertBefore(a, m) + })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); ga('create', 'UA-40881672-11', 'auto'); ga('send', 'pageview'); } diff --git a/dist/plyr.js b/dist/plyr.js index 67ae9df0..e316c62c 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,a,r=navigator.userAgent,s=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,p=!1;return navigator.appVersion.indexOf("Windows NT")!==-1&&navigator.appVersion.indexOf("rv:11")!==-1?(l=!0,s="IE",o="11"):(n=r.indexOf("MSIE"))!==-1?(l=!0,s="IE",o=r.substring(n+5)):(n=r.indexOf("Chrome"))!==-1?(c=!0,s="Chrome",o=r.substring(n+7)):(n=r.indexOf("Safari"))!==-1?(p=!0,s="Safari",o=r.substring(n+7),(n=r.indexOf("Version"))!==-1&&(o=r.substring(n+8))):(n=r.indexOf("Firefox"))!==-1?(u=!0,s="Firefox",o=r.substring(n+8)):(e=r.lastIndexOf(" ")+1)<(n=r.lastIndexOf("/"))&&(s=r.substring(e,n),o=r.substring(n+1),s.toLowerCase()===s.toUpperCase()&&(s=navigator.appName)),(a=o.indexOf(";"))!==-1&&(o=o.substring(0,a)),(a=o.indexOf(" "))!==-1&&(o=o.substring(0,a)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:s,version:i,isIE:l,isFirefox:u,isChrome:c,isSafari:p,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function a(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var a=t.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a)}}function r(e,t){return Array.prototype.indexOf&&e.indexOf(t)!==-1}function s(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function o(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var a=n>0?t.cloneNode(!0):t,r=e[n],s=r.parentNode,o=r.nextSibling;return a.appendChild(r),o?s.insertBefore(a,o):s.appendChild(a),a}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,N.boolean(t[n])&&t[n]?"":t[n])}function c(e,n,a){var r=t.createElement(e);u(r,a),l(n,r)}function p(e){return e.replace(".","")}function d(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function f(e,n){var a=Element.prototype,r=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return r.call(e,n)}function y(e,t,n,a,r){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},r)}function b(e,t,n,a,r){var s=t.split(" ");if(N.boolean(r)||(r=!1),e instanceof NodeList)for(var o=0;o','',''+E.i18n.play+"",""),e.push('
    '),r(E.controls,"restart")&&e.push('"),r(E.controls,"rewind")&&e.push('"),r(E.controls,"play")&&e.push('",'"),r(E.controls,"fast-forward")&&e.push('"),r(E.controls,"progress")&&(e.push('','','','','',"0% "+E.i18n.buffered,""),E.tooltips.seek&&e.push('00:00'),e.push("")),r(E.controls,"current-time")&&e.push('',''+E.i18n.currentTime+"",'00:00',""),r(E.controls,"duration")&&e.push('',''+E.i18n.duration+"",'00:00',""),r(E.controls,"mute")&&e.push('"),r(E.controls,"volume")&&e.push('','",'','',""),r(E.controls,"captions")&&e.push('"),r(E.controls,"settings")&&e.push('
    ','",'","
    "),r(E.controls,"pip")&&q.pip&&e.push('"),r(E.controls,"airplay")&&q.airplay&&e.push('"),r(E.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function R(){if(Je.supported.full&&("audio"!==Je.type||E.fullscreen.allowAudio)&&E.fullscreen.enabled){var e=q.fullscreen;e||E.fullscreen.fallback&&!U()?(Qe((e?"Native":"Fallback")+" fullscreen enabled"),d(Je.container,E.classes.fullscreen.enabled,!0)):Qe("Fullscreen not supported and fallback disabled"),Je.buttons&&Je.buttons.fullscreen&&_(Je.buttons.fullscreen,!1),$()}}function V(e){N.event(e)&&(e=e.target),e.activeCues[0]&&"text"in e.activeCues[0]?H(e.activeCues[0].getCueAsHTML()):H()}function D(){if("video"===Je.type){X(E.selectors.captions)||Je.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Je.usingTextTracks=!1,Je.media.textTracks&&(Je.usingTextTracks=!0);var e=[],t="";if(Je.media.childNodes.forEach(function(t){"track"===t.nodeName.toLowerCase()&&("captions"!==t.kind&&"subtitles"!==t.kind||e.push(t.getAttribute("src")))}),Je.captionExists=!0,0===e.length?(Je.captionExists=!1,Qe("No caption track found")):E.captions.selectedIndex+1>e.length?(Je.captionExists=!1,Qe("Caption index out of bound")):(t=e[E.captions.selectedIndex],Qe("Caption track found; URI: "+t)),Je.captionExists){var n=Je.media.textTracks;if([].forEach.call(n,function(e){v(e,"cuechange",V),e.mode="hidden"}),Y(Je),(Je.browser.isIE&&Je.browser.version>=10||Je.browser.isFirefox&&Je.browser.version>=31)&&(Qe("Detected browser with known TextTrack issues - using manual fallback"),Je.usingTextTracks=!1),Je.usingTextTracks){Qe("TextTracks supported");var a=n[E.captions.selectedIndex];"captions"!==a.kind&&"subtitles"!==a.kind||(g(a,"cuechange",V),a.activeCues&&a.activeCues.length>0&&V(a))}else if(Qe("TextTracks not supported so rendering captions manually"),Je.currentCaption="",Je.captions=[],""!==t){var r=new XMLHttpRequest;r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var e,t=[],n=r.responseText,a="\r\n";n.indexOf(a+a)===-1&&(a=n.indexOf("\r\r")!==-1?"\r":"\n"),t=n.split(a+a);for(var s=0,o=0;o ");for(var a=0;aJe.captions.length-1){Je.subcount=Je.captions.length-1;break}Je.media.currentTime.toFixed(1)>=n(Je.captions[Je.subcount][0])&&Je.media.currentTime.toFixed(1)<=a(Je.captions[Je.subcount][0])?(Je.currentCaption=Je.captions[Je.subcount][1],H(Je.currentCaption)):H()}}function Y(){if(Je.buttons.captions){d(Je.container,E.classes.captions.enabled,!0);var e=Je.storage.captionsEnabled;N.boolean(e)||(e=E.captions.defaultActive),e&&(d(Je.container,E.classes.captions.active,!0),_(Je.buttons.captions,!0))}}function B(e){return Je.container.querySelectorAll(e)}function X(e){return B(e)[0]}function U(){try{return e.self!==e.top}catch(e){return!0}}function $(){function e(e){9===e.which&&Je.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=B("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Je.container,"keydown",e)}function J(e,t){if(N.string(t))c(e,Je.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Je.media,t[n])}function K(){if(E.loadSprite){var e=L();e.absolute?(Qe("AJAX loading absolute SVG sprite"+(Je.browser.isIE?" (due to IE)":"")),S(e.url,"sprite-plyr")):Qe("Sprite will be used as external resource directly")}var n=E.html;Qe("Injecting custom controls"),n||(n=j()),n=s(n,"{seektime}",E.seekTime),n=s(n,"{speed}",E.currentSpeed.toFixed(1).toString().replace(".0","")+"×"),n=s(n,"{lang}","English"),n=s(n,"{id}",Math.floor(1e4*Math.random()));var a;if(N.string(E.selectors.controls.container)&&(a=t.querySelector(E.selectors.controls.container)),N.htmlElement(a)||(a=Je.container),a.insertAdjacentHTML("beforeend",n),E.tooltips.controls)for(var r=B([E.selectors.controls.wrapper," ",E.selectors.labels," .",E.classes.hidden].join("")),o=r.length-1;o>=0;o--){var i=r[o];d(i,E.classes.hidden,!1),d(i,E.classes.tooltip,!0)}}function z(){try{return Je.controls=X(E.selectors.controls.wrapper),Je.buttons={seek:X(E.selectors.buttons.seek),play:B(E.selectors.buttons.play),pause:X(E.selectors.buttons.pause),restart:X(E.selectors.buttons.restart),rewind:X(E.selectors.buttons.rewind),forward:X(E.selectors.buttons.forward),fullscreen:X(E.selectors.buttons.fullscreen),settings:X(E.selectors.buttons.settings),pip:X(E.selectors.buttons.pip)},Je.buttons.mute=X(E.selectors.buttons.mute),Je.buttons.captions=X(E.selectors.buttons.captions),Je.progress={container:X(E.selectors.progress.container)},Je.progress.buffer=function(){var e=X(E.selectors.progress.buffer);return{bar:e,text:N.htmlElement(e)&&e.getElementsByTagName("span")[0]}}(),Je.progress.played=X(E.selectors.progress.played),Je.progress.tooltip=Je.progress.container&&Je.progress.container.querySelector("."+E.classes.tooltip),Je.volume={input:X(E.selectors.volume.input),display:X(E.selectors.volume.display)},Je.duration=X(E.selectors.duration),Je.currentTime=X(E.selectors.currentTime),Je.seekTime=B(E.selectors.seekTime),!0}catch(e){return Ge("It looks like there is a problem with your controls HTML",e),G(!0),!1}}function Q(){d(Je.container,E.selectors.container.replace(".",""),Je.supported.full)}function G(e){e&&r(E.types.html5,Je.type)?Je.media.setAttribute("controls",""):Je.media.removeAttribute("controls")}function Z(e){var t=E.i18n.play;if(N.string(E.title)&&E.title.length&&(t+=", "+E.title,Je.container.setAttribute("aria-label",E.title)),Je.supported.full&&Je.buttons.play)for(var n=Je.buttons.play.length-1;n>=0;n--)Je.buttons.play[n].setAttribute("aria-label",t);N.htmlElement(e)&&e.setAttribute("title",E.i18n.frameTitle.replace("{title}",E.title))}function ee(){var t=null;Je.storage={},q.storage&&E.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(E.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?te({volume:parseFloat(t)}):Je.storage=JSON.parse(t)))}function te(t){q.storage&&E.storage.enabled&&(x(Je.storage,t),e.localStorage.setItem(E.storage.key,JSON.stringify(Je.storage)))}function ne(){if(!Je.media)return void Ge("No media element found!");if(Je.supported.full&&(d(Je.container,E.classes.type.replace("{0}",Je.type),!0),r(E.types.embed,Je.type)&&d(Je.container,E.classes.type.replace("{0}","video"),!0),d(Je.container,E.classes.pip.enabled,q.pip),d(Je.container,E.classes.stopped,E.autoplay),d(Je.container,E.classes.isIos,Je.browser.isIos),d(Je.container,E.classes.isTouch,Je.browser.isTouch),"video"===Je.type)){var e=t.createElement("div");e.setAttribute("class",E.classes.videoWrapper),o(Je.media,e),Je.videoContainer=e}r(E.types.embed,Je.type)&&ae()}function ae(){var n,r=t.createElement("div"),s=Je.type+"-"+Math.floor(1e4*Math.random());switch(Je.type){case"youtube":n=w(Je.embedId);break;case"vimeo":n=T(Je.embedId);break;default:n=Je.embedId}for(var o=B('[id^="'+Je.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(d(Je.media,E.classes.videoWrapper,!0),d(Je.media,E.classes.embedWrapper,!0),"youtube"===Je.type)Je.media.appendChild(r),r.setAttribute("id",s),N.object(e.YT)?se(n,r):(a(E.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){se(n,r)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Je.type)if(Je.supported.full?Je.media.appendChild(r):r=Je.media,r.setAttribute("id",s),N.object(e.Vimeo))oe(n,r);else{a(E.urls.vimeo.api);var c=e.setInterval(function(){N.object(e.Vimeo)&&(e.clearInterval(c),oe(n,r))},50)}else if("soundcloud"===Je.type){var p=t.createElement("iframe");p.loaded=!1,g(p,"load",function(){p.loaded=!0}),u(p,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+n,id:s}),r.appendChild(p),Je.media.appendChild(r),e.SC||a(E.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&p.loaded&&(e.clearInterval(m),ie.call(p))},50)}}function re(){Je.supported.full&&(Xe(),Ue()),Z(X("iframe"))}function se(t,n){Je.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:E.autoplay?1:0,controls:Je.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:E.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){A(Je.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;Je.media.play=function(){n.playVideo(),Je.media.paused=!1},Je.media.pause=function(){n.pauseVideo(),Je.media.paused=!0},Je.media.stop=function(){n.stopVideo(),Je.media.paused=!0},Je.media.duration=n.getDuration(),Je.media.paused=!0,Je.media.currentTime=0,Je.media.muted=n.isMuted();var a=n.getPlaybackRate(),r=n.getAvailablePlaybackRates();console.warn(a,r),E.title=n.getVideoData().title,Je.supported.full&&Je.media.querySelector("iframe").setAttribute("tabindex","-1"),re(),A(Je.media,"timeupdate"),A(Je.media,"durationchange"),e.clearInterval(Ke.buffering),Ke.buffering=e.setInterval(function(){Je.media.buffered=n.getVideoLoadedFraction(),(null===Je.media.lastBuffered||Je.media.lastBuffered=E.speeds.length&&(n=0),e=E.speeds[n]}else e=E.defaultSpeed}E.currentSpeed=e,Je.media.playbackRate=e,te({speed:e})}function fe(e){var t=0,n=Je.media.paused,a=ye();N.number(e)?t=e:N.event(e)&&r(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Ne(t);try{Je.media.currentTime=t.toFixed(4)}catch(e){}if(r(E.types.embed,Je.type)){switch(Je.type){case"youtube":Je.embed.seekTo(t);break;case"vimeo":Je.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Je.embed.seekTo(1e3*t)}n&&ue(),A(Je.media,"timeupdate"),Je.media.seeking=!0,A(Je.media,"seeking")}Qe("Seeking to "+Je.media.currentTime+" seconds"),W(t)}function ye(){var e=parseInt(E.duration),t=0;return null===Je.media.duration||isNaN(Je.media.duration)||(t=Je.media.duration),isNaN(e)?t:e}function be(){d(Je.container,E.classes.playing,!Je.media.paused),d(Je.container,E.classes.stopped,Je.media.paused),Le(Je.media.paused)}function ge(){P={x:e.pageXOffset||0,y:e.pageYOffset||0}}function ve(){e.scrollTo(P.x,P.y)}function he(e){var n=q.fullscreen;if(n){if(!e||e.type!==I.eventType)return I.isFullScreen(Je.container)?I.cancelFullScreen():(ge(),I.requestFullScreen(Je.container)),void(Je.isFullscreen=I.isFullScreen(Je.container));Je.isFullscreen=I.isFullScreen(Je.container)}else Je.isFullscreen=!Je.isFullscreen,t.body.style.overflow=Je.isFullscreen?"hidden":"";d(Je.container,E.classes.fullscreen.active,Je.isFullscreen),$(Je.isFullscreen),Je.buttons&&Je.buttons.fullscreen&&_(Je.buttons.fullscreen,Je.isFullscreen),A(Je.container,Je.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Je.isFullscreen&&n&&ve()}function _e(e){if(N.boolean(e)||(e=!Je.media.muted),_(Je.buttons.mute,e),Je.media.muted=e,0===Je.media.volume&&ke(E.volume),r(E.types.embed,Je.type)){switch(Je.type){case"youtube":Je.embed[Je.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Je.embed.setVolume(Je.media.muted?0:parseFloat(E.volume/E.volumeMax))}A(Je.media,"volumechange")}}function ke(e){var t=E.volumeMax,n=E.volumeMin;if(N.undefined(e)&&(e=Je.storage.volume),(null===e||isNaN(e))&&(e=E.volume),e>t&&(e=t),e0&&_e()}function xe(e){var t=Je.media.muted?0:Je.media.volume*E.volumeMax;N.number(e)||(e=E.volumeStep),ke(t+e)}function we(e){var t=Je.media.muted?0:Je.media.volume*E.volumeMax;N.number(e)||(e=E.volumeStep),ke(t-e)}function Te(){var e=Je.media.muted?0:Je.media.volume*E.volumeMax;Je.supported.full&&(Je.volume.input&&(Je.volume.input.value=e),Je.volume.display&&(Je.volume.display.value=e)),te({volume:e}),d(Je.container,E.classes.muted,0===e),Je.supported.full&&Je.buttons.mute&&_(Je.buttons.mute,0===e)}function Ee(e){Je.supported.full&&Je.buttons.captions&&(N.boolean(e)||(e=Je.container.className.indexOf(E.classes.captions.active)===-1),Je.captionsEnabled=e,_(Je.buttons.captions,Je.captionsEnabled),d(Je.container,E.classes.captions.active,Je.captionsEnabled),A(Je.container,Je.captionsEnabled?"captionsenabled":"captionsdisabled",!0),te({captionsEnabled:Je.captionsEnabled}))}function Se(e){E.captions.selectedIndex=e,H(),D()}function Ce(e){var t="waiting"===e.type;clearTimeout(Ke.loading),Ke.loading=setTimeout(function(){d(Je.container,E.classes.loading,t),Le(t)},t?250:0)}function Ae(e){if(Je.supported.full){var t=Je.progress.played,n=0,a=ye();if(e)switch(e.type){case"timeupdate":case"seeking":if(Je.controls.pressed)return;n=k(Je.media.currentTime,a),"timeupdate"===e.type&&Je.buttons.seek&&(Je.buttons.seek.value=n);break;case"playing":case"progress":t=Je.progress.buffer,n=function(){var e=Je.media.buffered;return e&&e.length?k(e.end(0),a):N.number(e)?100*e:0}()}Fe(t,n)}}function Fe(e,t){if(Je.supported.full){if(N.undefined(t)&&(t=0),N.undefined(e)){if(!Je.progress||!Je.progress.buffer)return;e=Je.progress.buffer}N.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ie(e,t){if(t){isNaN(e)&&(e=0),Je.secs=parseInt(e%60),Je.mins=parseInt(e/60%60),Je.hours=parseInt(e/60/60%60);var n=parseInt(ye()/60/60%60)>0;Je.secs=("0"+Je.secs).slice(-2),Je.mins=("0"+Je.mins).slice(-2),t.innerHTML=(n?Je.hours+":":"")+Je.mins+":"+Je.secs}}function Pe(){if(Je.supported.full){var e=ye()||0;!Je.duration&&E.displayDuration&&Je.media.paused&&Ie(e,Je.currentTime),Je.duration&&Ie(e,Je.duration),qe()}}function Me(e){Ie(Je.media.currentTime,Je.currentTime),e&&"timeupdate"===e.type&&Je.media.seeking||Ae(e)}function Ne(e){N.number(e)||(e=0);var t=ye(),n=k(e,t);Je.progress&&Je.progress.played&&(Je.progress.played.value=n),Je.buttons&&Je.buttons.seek&&(Je.buttons.seek.value=n)}function qe(e){var t=ye();if(E.tooltips.seek&&Je.progress.container&&0!==t){var n=Je.progress.container.getBoundingClientRect(),a=0,s=E.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Je.progress.tooltip,s))return;a=Je.progress.tooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Ie(t/100*a,Je.progress.tooltip),Je.progress.tooltip.style.left=a+"%",e&&r(["mouseenter","mouseleave"],e.type)&&d(Je.progress.tooltip,s,"mouseenter"===e.type)}}function Oe(e){N.undefined(e)&&(e=Je.storage.speed||E.defaultSpeed),me(e)}function Le(t){if(E.hideControls&&"audio"!==Je.type){var n=0,a=!1,s=t,o=m(Je.container,E.classes.loading);if(N.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,s=r(["mousemove","touchstart","mouseenter","focus"],t.type),r(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=m(Je.container,E.classes.hideControls)),e.clearTimeout(Ke.hover), -s||Je.media.paused||o){if(d(Je.container,E.classes.hideControls,!1),Je.media.paused||o)return;Je.browser.isTouch&&(n=3e3)}s&&Je.media.paused||(Ke.hover=e.setTimeout(function(){(!Je.controls.pressed&&!Je.controls.hover||a)&&d(Je.container,E.classes.hideControls,!0)},n))}}function je(e){if(!N.undefined(e))return void Re(e);var t;switch(Je.type){case"youtube":t=Je.embed.getVideoUrl();break;case"vimeo":Je.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Je.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Je.media.currentSrc}return t||""}function Re(e){function n(){if(Je.embed=null,i(Je.media),"video"===Je.type&&Je.videoContainer&&i(Je.videoContainer),Je.container&&Je.container.removeAttribute("class"),"type"in e&&(Je.type=e.type,"video"===Je.type)){var n=e.sources[0];"type"in n&&r(E.types.embed,n.type)&&(Je.type=n.type)}switch(Je.supported=C(Je.type),Je.type){case"video":Je.media=t.createElement("video");break;case"audio":Je.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Je.media=t.createElement("div"),Je.embedId=e.sources[0].src}l(Je.container,Je.media),N.boolean(e.autoplay)&&(E.autoplay=e.autoplay),r(E.types.html5,Je.type)&&(E.crossorigin&&Je.media.setAttribute("crossorigin",""),E.autoplay&&Je.media.setAttribute("autoplay",""),"poster"in e&&Je.media.setAttribute("poster",e.poster),E.loop&&Je.media.setAttribute("loop","")),d(Je.container,E.classes.fullscreen.active,Je.isFullscreen),d(Je.container,E.classes.captions.active,Je.captionsEnabled),Q(),r(E.types.html5,Je.type)&&J("source",e.sources),ne(),r(E.types.html5,Je.type)&&("tracks"in e&&J("track",e.tracks),Je.media.load()),(r(E.types.html5,Je.type)||r(E.types.embed,Je.type)&&!Je.supported.full)&&(Xe(),Ue()),E.title=e.title,Z()}return N.object(e)&&"sources"in e&&e.sources.length?(d(Je.container,E.classes.ready,!1),ue(),Ne(),Fe(),We(),void Ye(n,!1)):void Ge("Invalid source format")}function Ve(e){"video"===Je.type&&Je.media.setAttribute("poster",e)}function De(){function n(){var e=ce(),t=Je.buttons[e?"play":"pause"],n=Je.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,E.classes.tabFocus);setTimeout(function(){n.focus(),a&&(d(t,E.classes.tabFocus,!1),d(n,E.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Je.buttons){var n=Je.buttons[t];if(N.nodeList(n))for(var a=0;a0)&&(t?we(n):xe(n)),(e.deltaY>0||e.deltaX<0)&&(t?xe(n):we(n))})}function He(){if(g(Je.media,"timeupdate seeking",Me),g(Je.media,"timeupdate",W),g(Je.media,"durationchange loadedmetadata",Pe),g(Je.media,"ended",function(){"video"===Je.type&&E.showPosterOnEnd&&("video"===Je.type&&H(),fe(),Je.media.load())}),g(Je.media,"progress playing",Ae),g(Je.media,"volumechange",Te),g(Je.media,"play pause ended",be),g(Je.media,"waiting canplay seeked",Ce),E.clickToPlay&&"audio"!==Je.type){var e=X("."+E.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){E.hideControls&&Je.browser.isTouch&&!Je.media.paused||(Je.media.paused?le():Je.media.ended?(fe(),le()):ue())})}E.disableContextMenu&&g(Je.media,"contextmenu",function(e){e.preventDefault()}),g(Je.media,E.events.concat(["keyup","keydown"]).join(" "),function(e){A(Je.container,e.type,!0)})}function We(){if(r(E.types.html5,Je.type)){for(var e=Je.media.querySelectorAll("source"),t=0;t=0;n--){var a=n>0?t.cloneNode(!0):t,r=e[n],s=r.parentNode,o=r.nextSibling;return a.appendChild(r),o?s.insertBefore(a,o):s.appendChild(a),a}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,N.boolean(t[n])&&t[n]?"":t[n])}function c(e,n,a){var r=t.createElement(e);u(r,a),l(n,r)}function p(e){return e.replace(".","")}function d(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function f(e,n){var a=Element.prototype,r=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return r.call(e,n)}function y(e,t,n,a,r){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},r)}function b(e,t,n,a,r){var s=t.split(" ");if(N.boolean(r)||(r=!1),e instanceof NodeList)for(var o=0;o','',''+E.i18n.play+"",""),e.push('
    '),r(E.controls,"restart")&&e.push('"),r(E.controls,"rewind")&&e.push('"),r(E.controls,"play")&&e.push('",'"),r(E.controls,"fast-forward")&&e.push('"),r(E.controls,"progress")&&(e.push('','','','','',"0% "+E.i18n.buffered,""),E.tooltips.seek&&e.push('00:00'),e.push("")),r(E.controls,"current-time")&&e.push('',''+E.i18n.currentTime+"",'00:00',""),r(E.controls,"duration")&&e.push('',''+E.i18n.duration+"",'00:00',""),r(E.controls,"mute")&&e.push('"),r(E.controls,"volume")&&e.push('','",'','',""),r(E.controls,"captions")&&e.push('"),r(E.controls,"settings")&&e.push('
    ','",'","
    "),r(E.controls,"pip")&&q.pip&&e.push('"),r(E.controls,"airplay")&&q.airplay&&e.push('"),r(E.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function R(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?['',''+t+"",""].join(""):""}function a(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"}}if(!N.object(Qe.quality)&&(Qe.quality={available:e,current:t},N.array(e)&&e.length)){var r=e.filter(function(e){return["tiny","small"].indexOf(e)===-1}),s=r.map(function(e){return["
  • ",'","
  • "].join("")});s.unshift(['
  • ','","
  • "].join("")),console.warn(s)}}function D(){if(Qe.supported.full&&("audio"!==Qe.type||E.fullscreen.allowAudio)&&E.fullscreen.enabled){var e=q.fullscreen;e||E.fullscreen.fallback&&!K()?(ze((e?"Native":"Fallback")+" fullscreen enabled"),d(Qe.container,E.classes.fullscreen.enabled,!0)):ze("Fullscreen not supported and fallback disabled"),Qe.buttons&&Qe.buttons.fullscreen&&_(Qe.buttons.fullscreen,!1),Q()}}function V(e){N.event(e)&&(e=e.target),e.activeCues[0]&&"text"in e.activeCues[0]?W(e.activeCues[0].getCueAsHTML()):W()}function H(){if("video"===Qe.type){U(E.selectors.captions)||Qe.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Qe.usingTextTracks=!1,Qe.media.textTracks&&(Qe.usingTextTracks=!0);var e=[],t="";if(Qe.media.childNodes.forEach(function(t){"track"===t.nodeName.toLowerCase()&&("captions"!==t.kind&&"subtitles"!==t.kind||e.push(t.getAttribute("src")))}),Qe.captionExists=!0,0===e.length?(Qe.captionExists=!1,ze("No caption track found")):E.captions.selectedIndex+1>e.length?(Qe.captionExists=!1,ze("Caption index out of bound")):(t=e[E.captions.selectedIndex],ze("Caption track found; URI: "+t)),Qe.captionExists){var n=Qe.media.textTracks;if([].forEach.call(n,function(e){v(e,"cuechange",V),e.mode="hidden"}),B(Qe),(Qe.browser.isIE&&Qe.browser.version>=10||Qe.browser.isFirefox&&Qe.browser.version>=31)&&(ze("Detected browser with known TextTrack issues - using manual fallback"),Qe.usingTextTracks=!1),Qe.usingTextTracks){ze("TextTracks supported");var a=n[E.captions.selectedIndex];"captions"!==a.kind&&"subtitles"!==a.kind||(g(a,"cuechange",V),a.activeCues&&a.activeCues.length>0&&V(a))}else if(ze("TextTracks not supported so rendering captions manually"),Qe.currentCaption="",Qe.captions=[],""!==t){var r=new XMLHttpRequest;r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var e=r.responseText,t="\r\n";e.indexOf(t+t)===-1&&(t=e.indexOf("\r\r")!==-1?"\r":"\n");var n=e.split(t+t);Qe.captions=n.map(function(e){var n=e.split(t),a=0;return n[a].indexOf(":")!==-1&&(a=1),[n[a],n[a+1]]}),Qe.captions.shift(),ze("Successfully loaded the caption file via AJAX")}else Ge(E.logPrefix+"There was a problem loading the caption file via AJAX")},r.open("get",t,!0),r.send()}}else d(Qe.container,E.classes.captions.enabled)}}function W(e){var n=U(E.selectors.captions),a=t.createElement("span");n.innerHTML="",N.undefined(e)&&(e=""),N.string(e)?a.innerHTML=e.trim():a.appendChild(e),n.appendChild(a);n.offsetHeight}function Y(e){function t(e,t){var n=[];n=e.split(" --> ");for(var a=0;aQe.captions.length-1){Qe.subcount=Qe.captions.length-1;break}Qe.media.currentTime.toFixed(1)>=n(Qe.captions[Qe.subcount][0])&&Qe.media.currentTime.toFixed(1)<=a(Qe.captions[Qe.subcount][0])?(Qe.currentCaption=Qe.captions[Qe.subcount][1],W(Qe.currentCaption)):W()}}function B(){if(Qe.buttons.captions){d(Qe.container,E.classes.captions.enabled,!0);var e=Qe.storage.captionsEnabled;N.boolean(e)||(e=E.captions.defaultActive),e&&(d(Qe.container,E.classes.captions.active,!0),_(Qe.buttons.captions,!0))}}function X(e){return Qe.container.querySelectorAll(e)}function U(e){return X(e)[0]}function K(){try{return e.self!==e.top}catch(e){return!0}}function Q(){function e(e){9===e.which&&Qe.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=X("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Qe.container,"keydown",e)}function $(e,t){if(N.string(t))c(e,Qe.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Qe.media,t[n])}function J(){if(E.loadSprite){var e=j();e.absolute?(ze("AJAX loading absolute SVG sprite"+(Qe.browser.isIE?" (due to IE)":"")),S(e.url,"sprite-plyr")):ze("Sprite will be used as external resource directly")}var n=E.html;ze("Injecting custom controls"),n||(n=L()),n=s(n,"{seektime}",E.seekTime),n=s(n,"{speed}",E.currentSpeed.toFixed(1).toString().replace(".0","")+"×"),n=s(n,"{lang}","English"),Qe.id=Math.floor(1e4*Math.random()),n=s(n,"{id}",Qe.id);var a;if(N.string(E.selectors.controls.container)&&(a=t.querySelector(E.selectors.controls.container)),N.htmlElement(a)||(a=Qe.container),a.insertAdjacentHTML("beforeend",n),E.tooltips.controls)for(var r=X([E.selectors.controls.wrapper," ",E.selectors.labels," .",E.classes.hidden].join("")),o=r.length-1;o>=0;o--){var i=r[o];d(i,E.classes.hidden,!1),d(i,E.classes.tooltip,!0)}}function z(){try{return Qe.controls=U(E.selectors.controls.wrapper),Qe.buttons={seek:U(E.selectors.buttons.seek),play:X(E.selectors.buttons.play),pause:U(E.selectors.buttons.pause),restart:U(E.selectors.buttons.restart),rewind:U(E.selectors.buttons.rewind),forward:U(E.selectors.buttons.forward),fullscreen:U(E.selectors.buttons.fullscreen),settings:U(E.selectors.buttons.settings),pip:U(E.selectors.buttons.pip)},Qe.buttons.mute=U(E.selectors.buttons.mute),Qe.buttons.captions=U(E.selectors.buttons.captions),Qe.progress={container:U(E.selectors.progress.container)},Qe.progress.buffer=function(){var e=U(E.selectors.progress.buffer);return{bar:e,text:N.htmlElement(e)&&e.getElementsByTagName("span")[0]}}(),Qe.progress.played=U(E.selectors.progress.played),Qe.progress.tooltip=Qe.progress.container&&Qe.progress.container.querySelector("."+E.classes.tooltip),Qe.volume={input:U(E.selectors.volume.input),display:U(E.selectors.volume.display)},Qe.duration=U(E.selectors.duration),Qe.currentTime=U(E.selectors.currentTime),Qe.seekTime=X(E.selectors.seekTime),!0}catch(e){return Ge("It looks like there is a problem with your controls HTML",e),Z(!0),!1}}function G(){d(Qe.container,E.selectors.container.replace(".",""),Qe.supported.full)}function Z(e){e&&r(E.types.html5,Qe.type)?Qe.media.setAttribute("controls",""):Qe.media.removeAttribute("controls")}function ee(e){var t=E.i18n.play;if(N.string(E.title)&&E.title.length&&(t+=", "+E.title,Qe.container.setAttribute("aria-label",E.title)),Qe.supported.full&&Qe.buttons.play)for(var n=Qe.buttons.play.length-1;n>=0;n--)Qe.buttons.play[n].setAttribute("aria-label",t);N.htmlElement(e)&&e.setAttribute("title",E.i18n.frameTitle.replace("{title}",E.title))}function te(){var t=null;Qe.storage={},q.storage&&E.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(E.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?ne({volume:parseFloat(t)}):Qe.storage=JSON.parse(t)))}function ne(t){q.storage&&E.storage.enabled&&(x(Qe.storage,t),e.localStorage.setItem(E.storage.key,JSON.stringify(Qe.storage)))}function ae(){if(!Qe.media)return void Ge("No media element found!");if(Qe.supported.full&&(d(Qe.container,E.classes.type.replace("{0}",Qe.type),!0),r(E.types.embed,Qe.type)&&d(Qe.container,E.classes.type.replace("{0}","video"),!0),d(Qe.container,E.classes.pip.enabled,q.pip),d(Qe.container,E.classes.stopped,E.autoplay),d(Qe.container,E.classes.isIos,Qe.browser.isIos),d(Qe.container,E.classes.isTouch,Qe.browser.isTouch),"video"===Qe.type)){var e=t.createElement("div");e.setAttribute("class",E.classes.videoWrapper),o(Qe.media,e),Qe.videoContainer=e}r(E.types.embed,Qe.type)&&re()}function re(){var n,r=t.createElement("div"),s=Qe.type+"-"+Math.floor(1e4*Math.random());switch(Qe.type){case"youtube":n=w(Qe.embedId);break;case"vimeo":n=T(Qe.embedId);break;default:n=Qe.embedId}for(var o=X('[id^="'+Qe.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(d(Qe.media,E.classes.videoWrapper,!0),d(Qe.media,E.classes.embedWrapper,!0),"youtube"===Qe.type)Qe.media.appendChild(r),r.setAttribute("id",s),N.object(e.YT)?oe(n,r):(a(E.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){oe(n,r)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Qe.type)if(Qe.supported.full?Qe.media.appendChild(r):r=Qe.media,r.setAttribute("id",s),N.object(e.Vimeo))ie(n,r);else{a(E.urls.vimeo.api);var c=e.setInterval(function(){N.object(e.Vimeo)&&(e.clearInterval(c),ie(n,r))},50)}else if("soundcloud"===Qe.type){var p=t.createElement("iframe");p.loaded=!1,g(p,"load",function(){p.loaded=!0}),u(p,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+n,id:s}),r.appendChild(p),Qe.media.appendChild(r),e.SC||a(E.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&p.loaded&&(e.clearInterval(m),le.call(p))},50)}}function se(){Qe.supported.full&&(Xe(),Ue()),ee(U("iframe"))}function oe(t,n){Qe.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:E.autoplay?1:0,controls:Qe.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:E.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){A(Qe.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;Qe.media.play=function(){n.playVideo(),Qe.media.paused=!1},Qe.media.pause=function(){n.pauseVideo(),Qe.media.paused=!0},Qe.media.stop=function(){n.stopVideo(),Qe.media.paused=!0},Qe.media.duration=n.getDuration(),Qe.media.paused=!0,Qe.media.currentTime=0,Qe.media.muted=n.isMuted();var a=n.getPlaybackRate(),r=n.getAvailablePlaybackRates();console.warn(a,r),E.title=n.getVideoData().title,Qe.supported.full&&Qe.media.querySelector("iframe").setAttribute("tabindex","-1"),se(),A(Qe.media,"timeupdate"),A(Qe.media,"durationchange"),e.clearInterval($e.buffering),$e.buffering=e.setInterval(function(){Qe.media.buffered=n.getVideoLoadedFraction(),(null===Qe.media.lastBuffered||Qe.media.lastBuffered=E.speeds.length&&(n=0),e=E.speeds[n]}else e=E.defaultSpeed}E.currentSpeed=e,Qe.media.playbackRate=e,ne({speed:e})}function me(e){N.number(e)||(e=E.seekTime),ye(Qe.media.currentTime-e)}function fe(e){N.number(e)||(e=E.seekTime),ye(Qe.media.currentTime+e)}function ye(e){var t=0,n=Qe.media.paused,a=be();N.number(e)?t=e:N.event(e)&&r(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),qe(t);try{Qe.media.currentTime=t.toFixed(4)}catch(e){}if(r(E.types.embed,Qe.type)){switch(Qe.type){case"youtube":Qe.embed.seekTo(t);break;case"vimeo":Qe.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Qe.embed.seekTo(1e3*t)}n&&ce(),A(Qe.media,"timeupdate"),Qe.media.seeking=!0,A(Qe.media,"seeking")}ze("Seeking to "+Qe.media.currentTime+" seconds"),Y(t)}function be(){var e=parseInt(E.duration),t=0;return null===Qe.media.duration||isNaN(Qe.media.duration)||(t=Qe.media.duration),isNaN(e)?t:e}function ge(){d(Qe.container,E.classes.playing,!Qe.media.paused),d(Qe.container,E.classes.stopped,Qe.media.paused),je(Qe.media.paused)}function ve(){P={x:e.pageXOffset||0,y:e.pageYOffset||0}}function he(){e.scrollTo(P.x,P.y)}function _e(e){var n=q.fullscreen;if(n){if(!e||e.type!==I.eventType)return I.isFullScreen(Qe.container)?I.cancelFullScreen():(ve(),I.requestFullScreen(Qe.container)),void(Qe.isFullscreen=I.isFullScreen(Qe.container));Qe.isFullscreen=I.isFullScreen(Qe.container)}else Qe.isFullscreen=!Qe.isFullscreen,t.body.style.overflow=Qe.isFullscreen?"hidden":"";d(Qe.container,E.classes.fullscreen.active,Qe.isFullscreen),Q(Qe.isFullscreen),Qe.buttons&&Qe.buttons.fullscreen&&_(Qe.buttons.fullscreen,Qe.isFullscreen),A(Qe.container,Qe.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Qe.isFullscreen&&n&&he()}function ke(e){if(N.boolean(e)||(e=!Qe.media.muted),_(Qe.buttons.mute,e),Qe.media.muted=e,0===Qe.media.volume&&xe(E.volume),r(E.types.embed,Qe.type)){switch(Qe.type){case"youtube":Qe.embed[Qe.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Qe.embed.setVolume(Qe.media.muted?0:parseFloat(E.volume/E.volumeMax))}A(Qe.media,"volumechange")}}function xe(e){var t=E.volumeMax,n=E.volumeMin;if(N.undefined(e)&&(e=Qe.storage.volume),(null===e||isNaN(e))&&(e=E.volume),e>t&&(e=t),e0&&ke()}function we(e){var t=Qe.media.muted?0:Qe.media.volume*E.volumeMax;N.number(e)||(e=E.volumeStep),xe(t+e)}function Te(e){var t=Qe.media.muted?0:Qe.media.volume*E.volumeMax;N.number(e)||(e=E.volumeStep),xe(t-e)}function Ee(){var e=Qe.media.muted?0:Qe.media.volume*E.volumeMax;Qe.supported.full&&(Qe.volume.input&&(Qe.volume.input.value=e),Qe.volume.display&&(Qe.volume.display.value=e)),ne({volume:e}),d(Qe.container,E.classes.muted,0===e),Qe.supported.full&&Qe.buttons.mute&&_(Qe.buttons.mute,0===e)}function Se(e){Qe.supported.full&&Qe.buttons.captions&&(N.boolean(e)||(e=Qe.container.className.indexOf(E.classes.captions.active)===-1),Qe.captionsEnabled=e,_(Qe.buttons.captions,Qe.captionsEnabled),d(Qe.container,E.classes.captions.active,Qe.captionsEnabled),A(Qe.container,Qe.captionsEnabled?"captionsenabled":"captionsdisabled",!0),ne({captionsEnabled:Qe.captionsEnabled}))}function Ce(e){E.captions.selectedIndex=e,W(),H()}function Ae(e){var t="waiting"===e.type;clearTimeout($e.loading),$e.loading=setTimeout(function(){d(Qe.container,E.classes.loading,t),je(t)},t?250:0)}function Fe(e){if(Qe.supported.full){var t=Qe.progress.played,n=0,a=be();if(e)switch(e.type){case"timeupdate":case"seeking":if(Qe.controls.pressed)return;n=k(Qe.media.currentTime,a),"timeupdate"===e.type&&Qe.buttons.seek&&(Qe.buttons.seek.value=n);break;case"playing":case"progress":t=Qe.progress.buffer,n=function(){var e=Qe.media.buffered;return e&&e.length?k(e.end(0),a):N.number(e)?100*e:0}()}Ie(t,n)}}function Ie(e,t){if(Qe.supported.full){if(N.undefined(t)&&(t=0),N.undefined(e)){if(!Qe.progress||!Qe.progress.buffer)return;e=Qe.progress.buffer}N.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Pe(e,t){if(t){isNaN(e)&&(e=0),Qe.secs=parseInt(e%60),Qe.mins=parseInt(e/60%60),Qe.hours=parseInt(e/60/60%60);var n=parseInt(be()/60/60%60)>0;Qe.secs=("0"+Qe.secs).slice(-2),Qe.mins=("0"+Qe.mins).slice(-2),t.innerHTML=(n?Qe.hours+":":"")+Qe.mins+":"+Qe.secs}}function Me(){if(Qe.supported.full){var e=be()||0;!Qe.duration&&E.displayDuration&&Qe.media.paused&&Pe(e,Qe.currentTime),Qe.duration&&Pe(e,Qe.duration),Oe()}}function Ne(e){Pe(Qe.media.currentTime,Qe.currentTime), +e&&"timeupdate"===e.type&&Qe.media.seeking||Fe(e)}function qe(e){N.number(e)||(e=0);var t=be(),n=k(e,t);Qe.progress&&Qe.progress.played&&(Qe.progress.played.value=n),Qe.buttons&&Qe.buttons.seek&&(Qe.buttons.seek.value=n)}function Oe(e){var t=be();if(E.tooltips.seek&&Qe.progress.container&&0!==t){var n=Qe.progress.container.getBoundingClientRect(),a=0,s=E.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Qe.progress.tooltip,s))return;a=Qe.progress.tooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Pe(t/100*a,Qe.progress.tooltip),Qe.progress.tooltip.style.left=a+"%",e&&r(["mouseenter","mouseleave"],e.type)&&d(Qe.progress.tooltip,s,"mouseenter"===e.type)}}function je(t){if(E.hideControls&&"audio"!==Qe.type){var n=0,a=!1,s=t,o=m(Qe.container,E.classes.loading);if(N.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,s=r(["mousemove","touchstart","mouseenter","focus"],t.type),r(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=m(Qe.container,E.classes.hideControls)),e.clearTimeout($e.hover),s||Qe.media.paused||o){if(d(Qe.container,E.classes.hideControls,!1),Qe.media.paused||o)return;Qe.browser.isTouch&&(n=3e3)}s&&Qe.media.paused||($e.hover=e.setTimeout(function(){(!Qe.controls.pressed&&!Qe.controls.hover||a)&&d(Qe.container,E.classes.hideControls,!0)},n))}}function Le(e){if(!N.undefined(e))return void Re(e);var t;switch(Qe.type){case"youtube":t=Qe.embed.getVideoUrl();break;case"vimeo":Qe.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Qe.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Qe.media.currentSrc}return t||""}function Re(e){function n(){if(Qe.embed=null,i(Qe.media),"video"===Qe.type&&Qe.videoContainer&&i(Qe.videoContainer),Qe.container&&Qe.container.removeAttribute("class"),"type"in e&&(Qe.type=e.type,"video"===Qe.type)){var n=e.sources[0];"type"in n&&r(E.types.embed,n.type)&&(Qe.type=n.type)}switch(Qe.supported=C(Qe.type),Qe.type){case"video":Qe.media=t.createElement("video");break;case"audio":Qe.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Qe.media=t.createElement("div"),Qe.embedId=e.sources[0].src}l(Qe.container,Qe.media),N.boolean(e.autoplay)&&(E.autoplay=e.autoplay),r(E.types.html5,Qe.type)&&(E.crossorigin&&Qe.media.setAttribute("crossorigin",""),E.autoplay&&Qe.media.setAttribute("autoplay",""),"poster"in e&&Qe.media.setAttribute("poster",e.poster),E.loop&&Qe.media.setAttribute("loop","")),d(Qe.container,E.classes.fullscreen.active,Qe.isFullscreen),d(Qe.container,E.classes.captions.active,Qe.captionsEnabled),G(),r(E.types.html5,Qe.type)&&$("source",e.sources),ae(),r(E.types.html5,Qe.type)&&("tracks"in e&&$("track",e.tracks),Qe.media.load()),(r(E.types.html5,Qe.type)||r(E.types.embed,Qe.type)&&!Qe.supported.full)&&(Xe(),Ue()),E.title=e.title,ee()}return N.object(e)&&"sources"in e&&e.sources.length?(d(Qe.container,E.classes.ready,!1),ce(),qe(),Ie(),We(),void Ye(n,!1)):void Ge("Invalid source format")}function De(e){"video"===Qe.type&&Qe.media.setAttribute("poster",e)}function Ve(){function n(){var e=pe(),t=Qe.buttons[e?"play":"pause"],n=Qe.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,E.classes.tabFocus);setTimeout(function(){n.focus(),a&&(d(t,E.classes.tabFocus,!1),d(n,E.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Qe.buttons){var n=Qe.buttons[t];if(N.nodeList(n))for(var a=0;a0)&&(t?Te(n):we(n)),(e.deltaY>0||e.deltaX<0)&&(t?we(n):Te(n))})}function He(){if(g(Qe.media,"timeupdate seeking",Ne),g(Qe.media,"timeupdate",Y),g(Qe.media,"durationchange loadedmetadata",Me),g(Qe.media,"ended",function(){"video"===Qe.type&&E.showPosterOnEnd&&("video"===Qe.type&&W(),ye(),Qe.media.load())}),g(Qe.media,"progress playing",Fe),g(Qe.media,"volumechange",Ee),g(Qe.media,"play pause ended",ge),g(Qe.media,"waiting canplay seeked",Ae),E.clickToPlay&&"audio"!==Qe.type){var e=U("."+E.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){E.hideControls&&Qe.browser.isTouch&&!Qe.media.paused||(Qe.media.paused?ue():Qe.media.ended?(ye(),ue()):ce())})}E.disableContextMenu&&g(Qe.media,"contextmenu",function(e){e.preventDefault()}),g(Qe.media,E.events.concat(["keyup","keydown"]).join(" "),function(e){A(Qe.container,e.type,!0)})}function We(){if(r(E.types.html5,Qe.type)){for(var e=Qe.media.querySelectorAll("source"),t=0;t var element = document.createElement(type); // Set all passed attributes - _setAttributes(element, attributes); + setAttributes(element, attributes); // Inject the new element - _prependChild(parent, element); + prependChild(parent, element); } // Get a classname from selector - function _getClassname(selector) { + function getClassname(selector) { return selector.replace('.', ''); } // Toggle class on an element - function _toggleClass(element, className, state) { + function toggleClass(element, className, state) { if (element) { if (element.classList) { element.classList[state ? 'add' : 'remove'](className); @@ -389,7 +389,7 @@ } // Has class name - function _hasClass(element, className) { + function hasClass(element, className) { if (element) { if (element.classList) { return element.classList.contains(className); @@ -401,7 +401,7 @@ } // Element matches selector - function _matches(element, selector) { + function matches(element, selector) { var prototype = Element.prototype; var matches = prototype.matches || @@ -416,8 +416,8 @@ } // Bind along with custom handler - function _proxyListener(element, eventName, userListener, defaultListener, useCapture) { - _on(element, eventName, function(event) { + function proxy(element, eventName, userListener, defaultListener, useCapture) { + on(element, eventName, function(event) { if (userListener) { userListener.apply(element, [event]); } @@ -426,12 +426,12 @@ } // Toggle event listener - function _toggleListener(elements, events, callback, toggle, useCapture) { + function toggleListener(elements, events, callback, toggle, useCapture) { var eventList = events.split(' '); // Whether the listener is a capturing listener or not // Default to false - if (!_is.boolean(useCapture)) { + if (!is.boolean(useCapture)) { useCapture = false; } @@ -439,7 +439,7 @@ if (elements instanceof NodeList) { for (var x = 0; x < elements.length; x++) { if (elements[x] instanceof Node) { - _toggleListener(elements[x], arguments[1], arguments[2], arguments[3]); + toggleListener(elements[x], arguments[1], arguments[2], arguments[3]); } } return; @@ -452,28 +452,28 @@ } // Bind event handler - function _on(element, events, callback, useCapture) { - if (!_is.undefined(element)) { - _toggleListener(element, events, callback, true, useCapture); + function on(element, events, callback, useCapture) { + if (!is.undefined(element)) { + toggleListener(element, events, callback, true, useCapture); } } // Unbind event handler - function _off(element, events, callback, useCapture) { - if (!_is.undefined(element)) { - _toggleListener(element, events, callback, false, useCapture); + function off(element, events, callback, useCapture) { + if (!is.undefined(element)) { + toggleListener(element, events, callback, false, useCapture); } } // Trigger event - function _event(element, type, bubbles, properties) { + function event(element, type, bubbles, properties) { // Bail if no element if (!element || !type) { return; } // Default bubbles to false - if (!_is.boolean(bubbles)) { + if (!is.boolean(bubbles)) { bubbles = false; } @@ -489,14 +489,14 @@ // Toggle aria-pressed state on a toggle button // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles - function _toggleState(target, state) { + function toggleState(target, state) { // Bail if no target if (!target) { return; } // Get state - state = (_is.boolean(state) ? state : !target.getAttribute('aria-pressed')); + state = (is.boolean(state) ? state : !target.getAttribute('aria-pressed')); // Set the attribute on target target.setAttribute('aria-pressed', state); @@ -505,7 +505,7 @@ } // Get percentage - function _getPercentage(current, max) { + function getPercentage(current, max) { if (current === 0 || max === 0 || isNaN(current) || isNaN(max)) { return 0; } @@ -515,7 +515,7 @@ // Deep extend/merge destination object with N more objects // http://andrewdupont.net/2009/08/28/deep-extending-objects-in-javascript/ // Removed call to arguments.callee (used explicit function name instead) - function _extend() { + function extend() { // Get arguments var objects = arguments; @@ -540,7 +540,7 @@ for (var property in source) { if (source[property] && source[property].constructor && source[property].constructor === Object) { destination[property] = destination[property] || {}; - _extend(destination[property], source[property]); + extend(destination[property], source[property]); } else { destination[property] = source[property]; } @@ -551,7 +551,7 @@ } // Check variable types - var _is = { + var is = { object: function(input) { return input !== null && typeof(input) === 'object' && input.constructor === Object; }, @@ -588,33 +588,33 @@ }; // Parse YouTube ID from url - function _parseYouTubeId(url) { + function parseYouTubeId(url) { var regex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; return (url.match(regex)) ? RegExp.$2 : url; } // Parse Vimeo ID from url - function _parseVimeoId(url) { + function parseVimeoId(url) { var regex = /^.*(vimeo.com\/|video\/)(\d+).*/; return (url.match(regex)) ? RegExp.$2 : url; } // Fullscreen API - var _fullscreen; + var fullscreen; (function() { // Determine the prefix var prefix = (function() { var value = false; - if (_is.function(document.cancelFullScreen)) { + if (is.function(document.cancelFullScreen)) { value = ''; } else { // Check for fullscreen support by vendor prefix ['webkit', 'o', 'moz', 'ms', 'khtml'].some(function(prefix) { - if (_is.function(document[prefix + 'CancelFullScreen'])) { + if (is.function(document[prefix + 'CancelFullScreen'])) { value = prefix; return true; - } else if (_is.function(document.msExitFullscreen) && document.msFullscreenEnabled) { + } else if (is.function(document.msExitFullscreen) && document.msFullscreenEnabled) { // Special case for MS (when isn't it?) value = 'ms'; return true; @@ -625,7 +625,7 @@ return value; })(); - _fullscreen = { + fullscreen = { prefix: prefix, // Yet again Microsoft awesomeness, // Sometimes the prefix is 'ms', sometimes 'MS' to keep you on your toes @@ -633,10 +633,10 @@ // Is an element fullscreen isFullScreen: function(element) { - if (!_support.fullscreen) { + if (!support.fullscreen) { return false; } - if (_is.undefined(element)) { + if (is.undefined(element)) { element = document.body; } switch (this.prefix) { @@ -649,10 +649,10 @@ } }, requestFullScreen: function(element) { - if (!_support.fullscreen) { + if (!support.fullscreen) { return false; } - if (!_is.htmlElement(element)) { + if (!is.htmlElement(element)) { element = document.body; } @@ -661,13 +661,13 @@ return (prefix === '') ? element.requestFullScreen() : element[prefix + (prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen')](); }, cancelFullScreen: function() { - if (!_support.fullscreen) { + if (!support.fullscreen) { return false; } return (prefix === '') ? document.cancelFullScreen() : document[prefix + (prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen')](); }, element: function() { - if (!_support.fullscreen) { + if (!support.fullscreen) { return null; } return (prefix === '') ? document.fullscreenElement : document[prefix + 'FullscreenElement']; @@ -676,9 +676,9 @@ })(); // Check for support - var _support = { + var support = { // Fullscreen support and set prefix - fullscreen: _fullscreen.prefix !== false, + fullscreen: fullscreen.prefix !== false, // Local storage mode // We can't assume if local storage is present that we can use it storage: (function() { @@ -709,12 +709,12 @@ // Picture-in-picture support // Safari only currently pip: (function() { - return _is.function(document.createElement('video').webkitSetPresentationMode); + return is.function(document.createElement('video').webkitSetPresentationMode); })(), // Airplay support // Safari only currently airplay: (function() { - return _is.function(window.WebKitPlaybackTargetAvailabilityEvent); + return is.function(window.WebKitPlaybackTargetAvailabilityEvent); })(), // Check for mime type support against a player instance // Credits: http://diveintohtml5.info/everything.html @@ -724,7 +724,7 @@ try { // Bail if no checking function - if (!_is.function(media.canPlayType)) { + if (!is.function(media.canPlayType)) { return false; } @@ -768,36 +768,36 @@ var original = media.cloneNode(true); // Trigger events, with plyr instance passed - function _triggerEvent(element, type, bubbles, properties) { - _event(element, type, bubbles, _extend({}, properties, { + function trigger(element, type, bubbles, properties) { + event(element, type, bubbles, extend({}, properties, { plyr: api })); } // Debugging - function _console(type, args) { + function logger(type, args) { if (config.debug && window.console) { args = Array.prototype.slice.call(args); - if (_is.string(config.logPrefix) && config.logPrefix.length) { + if (is.string(config.logPrefix) && config.logPrefix.length) { args.unshift(config.logPrefix); } console[type].apply(console, args); } } - var _log = function() { - _console('log', arguments) + var log = function() { + logger('log', arguments) }; - var _warn = function() { - _console('warn', arguments) + var warn = function() { + logger('warn', arguments) }; // Log config options - _log('Config', config); + log('Config', config); // Get icon URL - function _getIconUrl() { + function getIconUrl() { return { url: config.iconUrl, absolute: (config.iconUrl.indexOf("http") === 0) || plyr.browser.isIE @@ -805,14 +805,14 @@ } // Build the default HTML - function _buildControls() { + function buildControls() { // Create html array var html = []; - var iconUrl = _getIconUrl(); + var iconUrl = getIconUrl(); var iconPath = (!iconUrl.absolute ? iconUrl.url : '') + '#' + config.iconPrefix; // Larger overlaid play button - if (_inArray(config.controls, 'play-large')) { + if (inArray(config.controls, 'play-large')) { /* beautify ignore:start */ html.push( '', + '' + ].join('')); + + console.warn(list); + } + } + // Setup fullscreen - function _setupFullscreen() { + function setupFullscreen() { if (!plyr.supported.full) { return; } if ((plyr.type !== 'audio' || config.fullscreen.allowAudio) && config.fullscreen.enabled) { // Check for native support - var nativeSupport = _support.fullscreen; + var nativeSupport = support.fullscreen; - if (nativeSupport || (config.fullscreen.fallback && !_inFrame())) { - _log((nativeSupport ? 'Native' : 'Fallback') + ' fullscreen enabled'); + if (nativeSupport || (config.fullscreen.fallback && !inFrame())) { + log((nativeSupport ? 'Native' : 'Fallback') + ' fullscreen enabled'); // Add styling hook - _toggleClass(plyr.container, config.classes.fullscreen.enabled, true); + toggleClass(plyr.container, config.classes.fullscreen.enabled, true); } else { - _log('Fullscreen not supported and fallback disabled'); + log('Fullscreen not supported and fallback disabled'); } // Toggle state if (plyr.buttons && plyr.buttons.fullscreen) { - _toggleState(plyr.buttons.fullscreen, false); + toggleState(plyr.buttons.fullscreen, false); } // Setup focus trap - _focusTrap(); + focusTrap(); } } // Display active caption if it contains text - function _setActiveCue(track) { + function setActiveCue(track) { // Get the track from the event if needed - if (_is.event(track)) { + if (is.event(track)) { track = track.target; } // Display a cue, if there is one if (track.activeCues[0] && 'text' in track.activeCues[0]) { - _setCaption(track.activeCues[0].getCueAsHTML()); + setCaption(track.activeCues[0].getCueAsHTML()); } else { - _setCaption(); + setCaption(); } } // Setup captions - function _setupCaptions() { + function setupCaptions() { // Bail if not HTML5 video if (plyr.type !== 'video') { return; } // Inject the container - if (!_getElement(config.selectors.captions)) { - plyr.videoContainer.insertAdjacentHTML('afterbegin', '
    '); + if (!getElement(config.selectors.captions)) { + plyr.videoContainer.insertAdjacentHTML('afterbegin', '
    '); } // Determine if HTML5 textTracks is supported @@ -1219,18 +1314,18 @@ plyr.captionExists = true; if (captionSources.length === 0) { plyr.captionExists = false; - _log('No caption track found'); + log('No caption track found'); } else if ((config.captions.selectedIndex + 1) > captionSources.length) { plyr.captionExists = false; - _log('Caption index out of bound'); + log('Caption index out of bound'); } else { captionSrc = captionSources[config.captions.selectedIndex]; - _log('Caption track found; URI: ' + captionSrc); + log('Caption track found; URI: ' + captionSrc); } // If no caption file exists, hide container for caption text if (!plyr.captionExists) { - _toggleClass(plyr.container, config.classes.captions.enabled); + toggleClass(plyr.container, config.classes.captions.enabled); } else { var tracks = plyr.media.textTracks; @@ -1238,14 +1333,14 @@ // This doesn't seem to work in Safari 7+, so the elements are removed from the dom below [].forEach.call(tracks, function(track) { // Remove the listener to prevent event overlapping - _off(track, 'cuechange', _setActiveCue); + off(track, 'cuechange', setActiveCue); // Hide captions track.mode = 'hidden'; }); // Enable UI - _showCaptions(plyr); + showCaptions(plyr); // Disable unsupported browsers than report false positive // Firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1033144 @@ -1253,7 +1348,7 @@ (plyr.browser.isFirefox && plyr.browser.version >= 31)) { // Debugging - _log('Detected browser with known TextTrack issues - using manual fallback'); + log('Detected browser with known TextTrack issues - using manual fallback'); // Set to false so skips to 'manual' captioning plyr.usingTextTracks = false; @@ -1262,21 +1357,21 @@ // Rendering caption tracks // Native support required - http://caniuse.com/webvtt if (plyr.usingTextTracks) { - _log('TextTracks supported'); + log('TextTracks supported'); var track = tracks[config.captions.selectedIndex]; if (track.kind === 'captions' || track.kind === 'subtitles') { - _on(track, 'cuechange', _setActiveCue); + on(track, 'cuechange', setActiveCue); // If we change the active track while a cue is already displayed we need to update it if (track.activeCues && track.activeCues.length > 0) { - _setActiveCue(track); + setActiveCue(track); } } } else { // Caption tracks not natively supported - _log('TextTracks not supported so rendering captions manually'); + log('TextTracks not supported so rendering captions manually'); // Render captions from array at appropriate time plyr.currentCaption = ''; @@ -1289,42 +1384,38 @@ xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status === 200) { - var captions = [], - caption, - req = xhr.responseText; + var response = xhr.responseText; // According to webvtt spec, line terminator consists of one of the following // CRLF (U+000D U+000A), LF (U+000A) or CR (U+000D) var lineSeparator = '\r\n'; - if (req.indexOf(lineSeparator + lineSeparator) === -1) { - if (req.indexOf('\r\r') !== -1) { + if (response.indexOf(lineSeparator + lineSeparator) === -1) { + if (response.indexOf('\r\r') !== -1) { lineSeparator = '\r'; } else { lineSeparator = '\n'; } } - captions = req.split(lineSeparator + lineSeparator); + var captions = response.split(lineSeparator + lineSeparator); - var numOfAvailableCaptions = 0; - - for (var r = 0; r < captions.length; r++) { - caption = captions[r]; - - // Get the parts of the captions - var parts = caption.split(lineSeparator), - index = 0; + plyr.captions = captions.map(function(caption) { + var parts = caption.split(lineSeparator); + var index = 0; // Incase caption numbers are added if (parts[index].indexOf(":") !== -1) { - plyr.captions[numOfAvailableCaptions] = [parts[index], parts[index + 1]]; - numOfAvailableCaptions++; + index = 1; } - } - _log('Successfully loaded the caption file via AJAX'); + return [parts[index], parts[index + 1]]; + }); + + plyr.captions.shift(); + + log('Successfully loaded the caption file via AJAX'); } else { - _warn(config.logPrefix + 'There was a problem loading the caption file via AJAX'); + warn(config.logPrefix + 'There was a problem loading the caption file via AJAX'); } } }; @@ -1338,38 +1429,37 @@ } // Set the current caption - function _setCaption(caption) { - /* jshint unused:false */ - var container = _getElement(config.selectors.captions), - content = document.createElement('span'); + function setCaption(caption) { + var captions = getElement(config.selectors.captions); + var content = document.createElement('span'); // Empty the container - container.innerHTML = ''; + captions.innerHTML = ''; // Default to empty - if (_is.undefined(caption)) { + if (is.undefined(caption)) { caption = ''; } // Set the span content - if (_is.string(caption)) { + if (is.string(caption)) { content.innerHTML = caption.trim(); } else { content.appendChild(caption); } // Set new caption text - container.appendChild(content); + captions.appendChild(content); // Force redraw (for Safari) - var redraw = container.offsetHeight; + var redraw = captions.offsetHeight; } // Captions functions // Seek the manual caption time and update UI - function _seekManualCaptions(time) { + function seekManualCaptions(time) { // Utilities for caption time codes - function _timecodeCommon(tc, pos) { + function timecodeCommon(tc, pos) { var tcpair = []; tcpair = tc.split(' --> '); for (var i = 0; i < tcpair.length; i++) { @@ -1377,18 +1467,18 @@ // So get rid of this if it exists tcpair[i] = tcpair[i].replace(/(\d+:\d+:\d+\.\d+).*/, "$1"); } - return _subTcSecs(tcpair[pos]); + return subTcSecs(tcpair[pos]); } - function _timecodeMin(tc) { - return _timecodeCommon(tc, 0); + function timecodeMin(tc) { + return timecodeCommon(tc, 0); } - function _timecodeMax(tc) { - return _timecodeCommon(tc, 1); + function timecodeMax(tc) { + return timecodeCommon(tc, 1); } - function _subTcSecs(tc) { + function subTcSecs(tc) { if (tc === null || tc === undefined) { return 0; } else { @@ -1417,14 +1507,14 @@ // Check time is a number, if not use currentTime // IE has a bug where currentTime doesn't go to 0 // https://twitter.com/Sam_Potts/status/573715746506731521 - time = _is.number(time) ? time : plyr.media.currentTime; + time = is.number(time) ? time : plyr.media.currentTime; // If there's no subs available, bail if (!plyr.captions[plyr.subcount]) { return; } - while (_timecodeMax(plyr.captions[plyr.subcount][0]) < time.toFixed(1)) { + while (timecodeMax(plyr.captions[plyr.subcount][0]) < time.toFixed(1)) { plyr.subcount++; if (plyr.subcount > plyr.captions.length - 1) { plyr.subcount = plyr.captions.length - 1; @@ -1433,52 +1523,52 @@ } // Check if the next caption is in the current time range - if (plyr.media.currentTime.toFixed(1) >= _timecodeMin(plyr.captions[plyr.subcount][0]) && - plyr.media.currentTime.toFixed(1) <= _timecodeMax(plyr.captions[plyr.subcount][0])) { + if (plyr.media.currentTime.toFixed(1) >= timecodeMin(plyr.captions[plyr.subcount][0]) && + plyr.media.currentTime.toFixed(1) <= timecodeMax(plyr.captions[plyr.subcount][0])) { plyr.currentCaption = plyr.captions[plyr.subcount][1]; // Render the caption - _setCaption(plyr.currentCaption); + setCaption(plyr.currentCaption); } else { - _setCaption(); + setCaption(); } } // Display captions container and button (for initialization) - function _showCaptions() { + function showCaptions() { // If there's no caption toggle, bail if (!plyr.buttons.captions) { return; } - _toggleClass(plyr.container, config.classes.captions.enabled, true); + toggleClass(plyr.container, config.classes.captions.enabled, true); // Try to load the value from storage var active = plyr.storage.captionsEnabled; // Otherwise fall back to the default config - if (!_is.boolean(active)) { + if (!is.boolean(active)) { active = config.captions.defaultActive; } if (active) { - _toggleClass(plyr.container, config.classes.captions.active, true); - _toggleState(plyr.buttons.captions, true); + toggleClass(plyr.container, config.classes.captions.active, true); + toggleState(plyr.buttons.captions, true); } } // Find all elements - function _getElements(selector) { + function getElements(selector) { return plyr.container.querySelectorAll(selector); } // Find a single element - function _getElement(selector) { - return _getElements(selector)[0]; + function getElement(selector) { + return getElements(selector)[0]; } // Determine if we're in an iframe - function _inFrame() { + function inFrame() { try { return window.self !== window.top; } catch (e) { @@ -1487,12 +1577,12 @@ } // Trap focus inside container - function _focusTrap() { - var tabbables = _getElements('input:not([disabled]), button:not([disabled])'), + function focusTrap() { + var tabbables = getElements('input:not([disabled]), button:not([disabled])'), first = tabbables[0], last = tabbables[tabbables.length - 1]; - function _checkFocus(event) { + function checkFocus(event) { // If it is TAB if (event.which === 9 && plyr.isFullscreen) { if (event.target === last && !event.shiftKey) { @@ -1508,34 +1598,34 @@ } // Bind the handler - _on(plyr.container, 'keydown', _checkFocus); + on(plyr.container, 'keydown', checkFocus); } // Add elements to HTML5 media (source, tracks, etc) - function _insertChildElements(type, attributes) { - if (_is.string(attributes)) { - _insertElement(type, plyr.media, { + function insertChildElements(type, attributes) { + if (is.string(attributes)) { + insertElement(type, plyr.media, { src: attributes }); } else if (attributes.constructor === Array) { for (var i = attributes.length - 1; i >= 0; i--) { - _insertElement(type, plyr.media, attributes[i]); + insertElement(type, plyr.media, attributes[i]); } } } // Insert controls - function _injectControls() { + function injectControls() { // Sprite if (config.loadSprite) { - var iconUrl = _getIconUrl(); + var iconUrl = getIconUrl(); // Only load external sprite using AJAX if (iconUrl.absolute) { - _log('AJAX loading absolute SVG sprite' + (plyr.browser.isIE ? ' (due to IE)' : '')); + log('AJAX loading absolute SVG sprite' + (plyr.browser.isIE ? ' (due to IE)' : '')); loadSprite(iconUrl.url, "sprite-plyr"); } else { - _log('Sprite will be used as external resource directly'); + log('Sprite will be used as external resource directly'); } } @@ -1543,35 +1633,36 @@ var html = config.html; // Insert custom video controls - _log('Injecting custom controls'); + log('Injecting custom controls'); // If no controls are specified, create default if (!html) { - html = _buildControls(); + html = buildControls(); } // Replace seek time instances - html = _replaceAll(html, '{seektime}', config.seekTime); + html = replaceAll(html, '{seektime}', config.seekTime); // Replace seek time instances - html = _replaceAll(html, '{speed}', config.currentSpeed.toFixed(1).toString().replace('.0', '') + '×'); + html = replaceAll(html, '{speed}', config.currentSpeed.toFixed(1).toString().replace('.0', '') + '×'); // Replace current captions language - html = _replaceAll(html, '{lang}', 'English'); + html = replaceAll(html, '{lang}', 'English'); // Replace all id references with random numbers - html = _replaceAll(html, '{id}', Math.floor(Math.random() * (10000))); + plyr.id = Math.floor(Math.random() * (10000)); + html = replaceAll(html, '{id}', plyr.id); // Controls container var target; // Inject to custom location - if (_is.string(config.selectors.controls.container)) { + if (is.string(config.selectors.controls.container)) { target = document.querySelector(config.selectors.controls.container); } // Inject into the container by default - if (!_is.htmlElement(target)) { + if (!is.htmlElement(target)) { target = plyr.container } @@ -1580,90 +1671,90 @@ // Setup tooltips if (config.tooltips.controls) { - var labels = _getElements([config.selectors.controls.wrapper, ' ', config.selectors.labels, ' .', config.classes.hidden].join('')); + var labels = getElements([config.selectors.controls.wrapper, ' ', config.selectors.labels, ' .', config.classes.hidden].join('')); for (var i = labels.length - 1; i >= 0; i--) { var label = labels[i]; - _toggleClass(label, config.classes.hidden, false); - _toggleClass(label, config.classes.tooltip, true); + toggleClass(label, config.classes.hidden, false); + toggleClass(label, config.classes.tooltip, true); } } } // Find the UI controls and store references - function _findElements() { + function findElements() { try { - plyr.controls = _getElement(config.selectors.controls.wrapper); + plyr.controls = getElement(config.selectors.controls.wrapper); // Buttons plyr.buttons = { - seek: _getElement(config.selectors.buttons.seek), - play: _getElements(config.selectors.buttons.play), - pause: _getElement(config.selectors.buttons.pause), - restart: _getElement(config.selectors.buttons.restart), - rewind: _getElement(config.selectors.buttons.rewind), - forward: _getElement(config.selectors.buttons.forward), - fullscreen: _getElement(config.selectors.buttons.fullscreen), - settings: _getElement(config.selectors.buttons.settings), - pip: _getElement(config.selectors.buttons.pip) + seek: getElement(config.selectors.buttons.seek), + play: getElements(config.selectors.buttons.play), + pause: getElement(config.selectors.buttons.pause), + restart: getElement(config.selectors.buttons.restart), + rewind: getElement(config.selectors.buttons.rewind), + forward: getElement(config.selectors.buttons.forward), + fullscreen: getElement(config.selectors.buttons.fullscreen), + settings: getElement(config.selectors.buttons.settings), + pip: getElement(config.selectors.buttons.pip) }; // Inputs - plyr.buttons.mute = _getElement(config.selectors.buttons.mute); - plyr.buttons.captions = _getElement(config.selectors.buttons.captions); + plyr.buttons.mute = getElement(config.selectors.buttons.mute); + plyr.buttons.captions = getElement(config.selectors.buttons.captions); // Progress plyr.progress = { - container: _getElement(config.selectors.progress.container) + container: getElement(config.selectors.progress.container) }; // Progress - Buffering plyr.progress.buffer = (function() { - var bar = _getElement(config.selectors.progress.buffer); + var bar = getElement(config.selectors.progress.buffer); return { bar: bar, - text: _is.htmlElement(bar) && bar.getElementsByTagName('span')[0] + text: is.htmlElement(bar) && bar.getElementsByTagName('span')[0] }; })(); // Progress - Played - plyr.progress.played = _getElement(config.selectors.progress.played); + plyr.progress.played = getElement(config.selectors.progress.played); // Seek tooltip plyr.progress.tooltip = plyr.progress.container && plyr.progress.container.querySelector('.' + config.classes.tooltip); // Volume plyr.volume = { - input: _getElement(config.selectors.volume.input), - display: _getElement(config.selectors.volume.display) + input: getElement(config.selectors.volume.input), + display: getElement(config.selectors.volume.display) }; // Timing - plyr.duration = _getElement(config.selectors.duration); - plyr.currentTime = _getElement(config.selectors.currentTime); - plyr.seekTime = _getElements(config.selectors.seekTime); + plyr.duration = getElement(config.selectors.duration); + plyr.currentTime = getElement(config.selectors.currentTime); + plyr.seekTime = getElements(config.selectors.seekTime); return true; } catch (e) { - _warn('It looks like there is a problem with your controls HTML', e); + warn('It looks like there is a problem with your controls HTML', e); // Restore native video controls - _toggleNativeControls(true); + toggleNativeControls(true); return false; } } // Toggle style hook - function _toggleStyleHook() { - _toggleClass(plyr.container, config.selectors.container.replace('.', ''), plyr.supported.full); + function toggleStyleHook() { + toggleClass(plyr.container, config.selectors.container.replace('.', ''), plyr.supported.full); } // Toggle native controls - function _toggleNativeControls(toggle) { - if (toggle && _inArray(config.types.html5, plyr.type)) { + function toggleNativeControls(toggle) { + if (toggle && inArray(config.types.html5, plyr.type)) { plyr.media.setAttribute('controls', ''); } else { plyr.media.removeAttribute('controls'); @@ -1671,12 +1762,12 @@ } // Setup aria attribute for play and iframe title - function _setTitle(iframe) { + function setTitle(iframe) { // Find the current text var label = config.i18n.play; // If there's a media title set, use that for the label - if (_is.string(config.title) && config.title.length) { + if (is.string(config.title) && config.title.length) { label += ', ' + config.title; // Set container label @@ -1692,18 +1783,18 @@ // Set iframe title // https://github.com/Selz/plyr/issues/124 - if (_is.htmlElement(iframe)) { + if (is.htmlElement(iframe)) { iframe.setAttribute('title', config.i18n.frameTitle.replace('{title}', config.title)); } } // Setup localStorage - function _setupStorage() { + function setupStorage() { var value = null; plyr.storage = {}; // Bail if we don't have localStorage support or it's disabled - if (!_support.storage || !config.storage.enabled) { + if (!support.storage || !config.storage.enabled) { return; } @@ -1721,7 +1812,7 @@ // If value is a number, it's probably volume from an older // version of plyr. See: https://github.com/Selz/plyr/pull/313 // Update the key to be JSON - _updateStorage({ + updateStorage({ volume: parseFloat(value) }); } else { @@ -1731,48 +1822,48 @@ } // Save a value back to local storage - function _updateStorage(value) { + function updateStorage(value) { // Bail if we don't have localStorage support or it's disabled - if (!_support.storage || !config.storage.enabled) { + if (!support.storage || !config.storage.enabled) { return; } // Update the working copy of the values - _extend(plyr.storage, value); + extend(plyr.storage, value); // Update storage window.localStorage.setItem(config.storage.key, JSON.stringify(plyr.storage)); } // Setup media - function _setupMedia() { + function setupMedia() { // If there's no media, bail if (!plyr.media) { - _warn('No media element found!'); + warn('No media element found!'); return; } if (plyr.supported.full) { // Add type class - _toggleClass(plyr.container, config.classes.type.replace('{0}', plyr.type), true); + toggleClass(plyr.container, config.classes.type.replace('{0}', plyr.type), true); // Add video class for embeds // This will require changes if audio embeds are added - if (_inArray(config.types.embed, plyr.type)) { - _toggleClass(plyr.container, config.classes.type.replace('{0}', 'video'), true); + if (inArray(config.types.embed, plyr.type)) { + toggleClass(plyr.container, config.classes.type.replace('{0}', 'video'), true); } // Check for picture-in-picture support - _toggleClass(plyr.container, config.classes.pip.enabled, _support.pip); + toggleClass(plyr.container, config.classes.pip.enabled, support.pip); // If there's no autoplay attribute, assume the video is stopped and add state class - _toggleClass(plyr.container, config.classes.stopped, config.autoplay); + toggleClass(plyr.container, config.classes.stopped, config.autoplay); // Add iOS class - _toggleClass(plyr.container, config.classes.isIos, plyr.browser.isIos); + toggleClass(plyr.container, config.classes.isIos, plyr.browser.isIos); // Add touch class - _toggleClass(plyr.container, config.classes.isTouch, plyr.browser.isTouch); + toggleClass(plyr.container, config.classes.isTouch, plyr.browser.isTouch); // Inject the player wrapper if (plyr.type === 'video') { @@ -1781,7 +1872,7 @@ wrapper.setAttribute('class', config.classes.videoWrapper); // Wrap the video in a container - _wrap(plyr.media, wrapper); + wrap(plyr.media, wrapper); // Cache the container plyr.videoContainer = wrapper; @@ -1789,13 +1880,13 @@ } // Embeds - if (_inArray(config.types.embed, plyr.type)) { - _setupEmbed(); + if (inArray(config.types.embed, plyr.type)) { + setupEmbed(); } } // Setup YouTube/Vimeo - function _setupEmbed() { + function setupEmbed() { var container = document.createElement('div'), mediaId, id = plyr.type + '-' + Math.floor(Math.random() * (10000)); @@ -1803,11 +1894,11 @@ // Parse IDs from URLs if supplied switch (plyr.type) { case 'youtube': - mediaId = _parseYouTubeId(plyr.embedId); + mediaId = parseYouTubeId(plyr.embedId); break; case 'vimeo': - mediaId = _parseVimeoId(plyr.embedId); + mediaId = parseVimeoId(plyr.embedId); break; default: @@ -1815,14 +1906,14 @@ } // Remove old containers - var containers = _getElements('[id^="' + plyr.type + '-"]'); + var containers = getElements('[id^="' + plyr.type + '-"]'); for (var i = containers.length - 1; i >= 0; i--) { - _remove(containers[i]); + remove(containers[i]); } // Add embed class for responsive - _toggleClass(plyr.media, config.classes.videoWrapper, true); - _toggleClass(plyr.media, config.classes.embedWrapper, true); + toggleClass(plyr.media, config.classes.videoWrapper, true); + toggleClass(plyr.media, config.classes.embedWrapper, true); if (plyr.type === 'youtube') { // Create the YouTube container @@ -1832,18 +1923,18 @@ container.setAttribute('id', id); // Setup API - if (_is.object(window.YT)) { - _youTubeReady(mediaId, container); + if (is.object(window.YT)) { + youTubeReady(mediaId, container); } else { // Load the API - _injectScript(config.urls.youtube.api); + injectScript(config.urls.youtube.api); // Setup callback for the API window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || []; // Add to queue window.onYouTubeReadyCallbacks.push(function() { - _youTubeReady(mediaId, container); + youTubeReady(mediaId, container); }); // Set callback to process queue @@ -1865,18 +1956,18 @@ container.setAttribute('id', id); // Load the API if not already - if (!_is.object(window.Vimeo)) { - _injectScript(config.urls.vimeo.api); + if (!is.object(window.Vimeo)) { + injectScript(config.urls.vimeo.api); // Wait for fragaloop load var vimeoTimer = window.setInterval(function() { - if (_is.object(window.Vimeo)) { + if (is.object(window.Vimeo)) { window.clearInterval(vimeoTimer); - _vimeoReady(mediaId, container); + vimeoReady(mediaId, container); } }, 50); } else { - _vimeoReady(mediaId, container); + vimeoReady(mediaId, container); } } else if (plyr.type === 'soundcloud') { // TODO: Currently unsupported and undocumented @@ -1885,11 +1976,11 @@ // Watch for iframe load soundCloud.loaded = false; - _on(soundCloud, 'load', function() { + on(soundCloud, 'load', function() { soundCloud.loaded = true; }); - _setAttributes(soundCloud, { + setAttributes(soundCloud, { 'src': 'https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/' + mediaId, 'id': id }); @@ -1899,33 +1990,33 @@ // Load the API if not already if (!window.SC) { - _injectScript(config.urls.soundcloud.api); + injectScript(config.urls.soundcloud.api); } // Wait for SC load var soundCloudTimer = window.setInterval(function() { if (window.SC && soundCloud.loaded) { window.clearInterval(soundCloudTimer); - _soundcloudReady.call(soundCloud); + soundcloudReady.call(soundCloud); } }, 50); } } // When embeds are ready - function _embedReady() { + function embedReady() { // Setup the UI and call ready if full support if (plyr.supported.full) { - _setupInterface(); - _ready(); + setupInterface(); + ready(); } // Set title - _setTitle(_getElement('iframe')); + setTitle(getElement('iframe')); } // Handle YouTube API ready - function _youTubeReady(videoId, container) { + function youTubeReady(videoId, container) { // Setup instance // https://developers.google.com/youtube/iframe_api_reference plyr.embed = new window.YT.Player(container.id, { @@ -1945,7 +2036,7 @@ }, events: { 'onError': function(event) { - _triggerEvent(plyr.container, 'error', true, { + trigger(plyr.container, 'error', true, { code: event.data, embed: event.target }); @@ -1996,13 +2087,13 @@ } // Update UI - _embedReady(); + embedReady(); // Trigger timeupdate - _triggerEvent(plyr.media, 'timeupdate'); + trigger(plyr.media, 'timeupdate'); // Trigger timeupdate - _triggerEvent(plyr.media, 'durationchange'); + trigger(plyr.media, 'durationchange'); // Reset timer window.clearInterval(timers.buffering); @@ -2014,7 +2105,7 @@ // Trigger progress only when we actually buffer something if (plyr.media.lastBuffered === null || plyr.media.lastBuffered < plyr.media.buffered) { - _triggerEvent(plyr.media, 'progress'); + trigger(plyr.media, 'progress'); } // Set last buffer point @@ -2025,7 +2116,7 @@ window.clearInterval(timers.buffering); // Trigger event - _triggerEvent(plyr.media, 'canplaythrough'); + trigger(plyr.media, 'canplaythrough'); } }, 200); }, @@ -2046,7 +2137,7 @@ switch (event.data) { case 0: plyr.media.paused = true; - _triggerEvent(plyr.media, 'ended'); + trigger(plyr.media, 'ended'); break; case 1: @@ -2054,12 +2145,12 @@ // If we were seeking, fire seeked event if (plyr.media.seeking) { - _triggerEvent(plyr.media, 'seeked'); + trigger(plyr.media, 'seeked'); } plyr.media.seeking = false; - _triggerEvent(plyr.media, 'play'); - _triggerEvent(plyr.media, 'playing'); + trigger(plyr.media, 'play'); + trigger(plyr.media, 'playing'); // Poll to get playback progress timers.playing = window.setInterval(function() { @@ -2067,7 +2158,7 @@ plyr.media.currentTime = instance.getCurrentTime(); // Trigger timeupdate - _triggerEvent(plyr.media, 'timeupdate'); + trigger(plyr.media, 'timeupdate'); }, 100); // Check duration again due to YouTube bug @@ -2075,22 +2166,23 @@ // https://code.google.com/p/gdata-issues/issues/detail?id=8690 if (plyr.media.duration !== instance.getDuration()) { plyr.media.duration = instance.getDuration(); - _triggerEvent(plyr.media, 'durationchange'); + trigger(plyr.media, 'durationchange'); } // Get quality var qualityOptions = instance.getAvailableQualityLevels(); - console.warn(qualityOptions, event.data); + var quality = instance.getPlaybackQuality(); + setQualityMenu(qualityOptions, quality); break; case 2: plyr.media.paused = true; - _triggerEvent(plyr.media, 'pause'); + trigger(plyr.media, 'pause'); break; } - _triggerEvent(plyr.container, 'statechange', false, { + trigger(plyr.container, 'statechange', false, { code: event.data }); } @@ -2099,7 +2191,7 @@ } // Vimeo ready - function _vimeoReady(mediaId, container) { + function vimeoReady(mediaId, container) { // Setup instance // https://github.com/vimeo/player.js plyr.embed = new window.Vimeo.Player(container, { @@ -2129,20 +2221,20 @@ plyr.media.currentTime = 0; // Update UI - _embedReady(); + embedReady(); plyr.embed.getCurrentTime().then(function(value) { plyr.media.currentTime = value; // Trigger timeupdate - _triggerEvent(plyr.media, 'timeupdate'); + trigger(plyr.media, 'timeupdate'); }); plyr.embed.getDuration().then(function(value) { plyr.media.duration = value; // Trigger timeupdate - _triggerEvent(plyr.media, 'durationchange'); + trigger(plyr.media, 'durationchange'); }); // TODO: Captions @@ -2153,52 +2245,52 @@ plyr.embed.on('loaded', function() { // Fix keyboard focus issues // https://github.com/Selz/plyr/issues/317 - if (_is.htmlElement(plyr.embed.element) && plyr.supported.full) { + if (is.htmlElement(plyr.embed.element) && plyr.supported.full) { plyr.embed.element.setAttribute('tabindex', '-1'); } }); plyr.embed.on('play', function() { plyr.media.paused = false; - _triggerEvent(plyr.media, 'play'); - _triggerEvent(plyr.media, 'playing'); + trigger(plyr.media, 'play'); + trigger(plyr.media, 'playing'); }); plyr.embed.on('pause', function() { plyr.media.paused = true; - _triggerEvent(plyr.media, 'pause'); + trigger(plyr.media, 'pause'); }); plyr.embed.on('timeupdate', function(data) { plyr.media.seeking = false; plyr.media.currentTime = data.seconds; - _triggerEvent(plyr.media, 'timeupdate'); + trigger(plyr.media, 'timeupdate'); }); plyr.embed.on('progress', function(data) { plyr.media.buffered = data.percent; - _triggerEvent(plyr.media, 'progress'); + trigger(plyr.media, 'progress'); if (parseInt(data.percent) === 1) { // Trigger event - _triggerEvent(plyr.media, 'canplaythrough'); + trigger(plyr.media, 'canplaythrough'); } }); plyr.embed.on('seeked', function() { plyr.media.seeking = false; - _triggerEvent(plyr.media, 'seeked'); - _triggerEvent(plyr.media, 'play'); + trigger(plyr.media, 'seeked'); + trigger(plyr.media, 'play'); }); plyr.embed.on('ended', function() { plyr.media.paused = true; - _triggerEvent(plyr.media, 'ended'); + trigger(plyr.media, 'ended'); }); } // Soundcloud ready - function _soundcloudReady() { + function soundcloudReady() { /* jshint validthis: true */ plyr.embed = window.SC.Widget(this); @@ -2226,105 +2318,92 @@ plyr.media.duration = value / 1000; // Update UI - _embedReady(); + embedReady(); }); plyr.embed.getPosition(function(value) { plyr.media.currentTime = value; // Trigger timeupdate - _triggerEvent(plyr.media, 'timeupdate'); + trigger(plyr.media, 'timeupdate'); }); plyr.embed.bind(window.SC.Widget.Events.PLAY, function() { plyr.media.paused = false; - _triggerEvent(plyr.media, 'play'); - _triggerEvent(plyr.media, 'playing'); + trigger(plyr.media, 'play'); + trigger(plyr.media, 'playing'); }); plyr.embed.bind(window.SC.Widget.Events.PAUSE, function() { plyr.media.paused = true; - _triggerEvent(plyr.media, 'pause'); + trigger(plyr.media, 'pause'); }); plyr.embed.bind(window.SC.Widget.Events.PLAY_PROGRESS, function(data) { plyr.media.seeking = false; plyr.media.currentTime = data.currentPosition / 1000; - _triggerEvent(plyr.media, 'timeupdate'); + trigger(plyr.media, 'timeupdate'); }); plyr.embed.bind(window.SC.Widget.Events.LOAD_PROGRESS, function(data) { plyr.media.buffered = data.loadProgress; - _triggerEvent(plyr.media, 'progress'); + trigger(plyr.media, 'progress'); if (parseInt(data.loadProgress) === 1) { // Trigger event - _triggerEvent(plyr.media, 'canplaythrough'); + trigger(plyr.media, 'canplaythrough'); } }); plyr.embed.bind(window.SC.Widget.Events.FINISH, function() { plyr.media.paused = true; - _triggerEvent(plyr.media, 'ended'); + trigger(plyr.media, 'ended'); }); }); } // Play media - function _play() { + function play() { if ('play' in plyr.media) { plyr.media.play(); } } // Pause media - function _pause() { + function pause() { if ('pause' in plyr.media) { plyr.media.pause(); } } // Toggle playback - function _togglePlay(toggle) { + function togglePlay(toggle) { // True toggle - if (!_is.boolean(toggle)) { + if (!is.boolean(toggle)) { toggle = plyr.media.paused; } if (toggle) { - _play(); + play(); } else { - _pause(); + pause(); } return toggle; } - // Rewind - function _rewind(seekTime) { - // Use default if needed - if (!_is.number(seekTime)) { - seekTime = config.seekTime; - } - _seek(plyr.media.currentTime - seekTime); - } - - // Fast forward - function _forward(seekTime) { - // Use default if needed - if (!_is.number(seekTime)) { - seekTime = config.seekTime; - } - _seek(plyr.media.currentTime + seekTime); - } - // Speed-up - function _speed(speed) { - if (!_is.array(config.speeds)) { - _warn('Invalid speeds format'); + function setSpeed(speed) { + // Load speed from storage or default value + if (is.undefined(speed)) { + speed = plyr.storage.speed || config.defaultSpeed; + } + + if (!is.array(config.speeds)) { + warn('Invalid speeds format'); return; } - if (!_is.number(speed)) { + if (!is.number(speed)) { var index = config.speeds.indexOf(config.currentSpeed); if (index !== -1) { @@ -2345,21 +2424,39 @@ plyr.media.playbackRate = speed; // Save speed to localStorage - _updateStorage({ + updateStorage({ speed: speed }); } + // Rewind + function rewind(seekTime) { + // Use default if needed + if (!is.number(seekTime)) { + seekTime = config.seekTime; + } + seek(plyr.media.currentTime - seekTime); + } + + // Fast forward + function forward(seekTime) { + // Use default if needed + if (!is.number(seekTime)) { + seekTime = config.seekTime; + } + seek(plyr.media.currentTime + seekTime); + } + // Seek to time // The input parameter can be an event or a number - function _seek(input) { + function seek(input) { var targetTime = 0, paused = plyr.media.paused, - duration = _getDuration(); + duration = getDuration(); - if (_is.number(input)) { + if (is.number(input)) { targetTime = input; - } else if (_is.event(input) && _inArray(['input', 'change'], input.type)) { + } else if (is.event(input) && inArray(['input', 'change'], input.type)) { // It's the seek slider // Seek to the selected time targetTime = ((input.target.value / input.target.max) * duration); @@ -2373,7 +2470,7 @@ } // Update seek range and progress - _updateSeekDisplay(targetTime); + updateSeekDisplay(targetTime); // Set the current time // Try/catch incase the media isn't set and we're calling seek() from source() and IE moans @@ -2382,7 +2479,7 @@ } catch (e) {} // Embeds - if (_inArray(config.types.embed, plyr.type)) { + if (inArray(config.types.embed, plyr.type)) { switch (plyr.type) { case 'youtube': plyr.embed.seekTo(targetTime); @@ -2399,28 +2496,28 @@ } if (paused) { - _pause(); + pause(); } // Trigger timeupdate - _triggerEvent(plyr.media, 'timeupdate'); + trigger(plyr.media, 'timeupdate'); // Set seeking flag plyr.media.seeking = true; // Trigger seeking - _triggerEvent(plyr.media, 'seeking'); + trigger(plyr.media, 'seeking'); } // Logging - _log('Seeking to ' + plyr.media.currentTime + ' seconds'); + log('Seeking to ' + plyr.media.currentTime + ' seconds'); // Special handling for 'manual' captions - _seekManualCaptions(targetTime); + seekManualCaptions(targetTime); } // Get the duration (or custom if set) - function _getDuration() { + function getDuration() { // It should be a number, but parse it just incase var duration = parseInt(config.duration), @@ -2437,16 +2534,16 @@ } // Check playing state - function _checkPlaying() { - _toggleClass(plyr.container, config.classes.playing, !plyr.media.paused); + function checkPlaying() { + toggleClass(plyr.container, config.classes.playing, !plyr.media.paused); - _toggleClass(plyr.container, config.classes.stopped, plyr.media.paused); + toggleClass(plyr.container, config.classes.stopped, plyr.media.paused); - _toggleControls(plyr.media.paused); + toggleControls(plyr.media.paused); } // Save scroll position - function _saveScrollPosition() { + function saveScrollPosition() { scroll = { x: window.pageXOffset || 0, y: window.pageYOffset || 0 @@ -2454,34 +2551,34 @@ } // Restore scroll position - function _restoreScrollPosition() { + function restoreScrollPosition() { window.scrollTo(scroll.x, scroll.y); } // Toggle fullscreen - function _toggleFullscreen(event) { + function toggleFullscreen(event) { // Check for native support - var nativeSupport = _support.fullscreen; + var nativeSupport = support.fullscreen; if (nativeSupport) { // If it's a fullscreen change event, update the UI - if (event && event.type === _fullscreen.eventType) { - plyr.isFullscreen = _fullscreen.isFullScreen(plyr.container); + if (event && event.type === fullscreen.eventType) { + plyr.isFullscreen = fullscreen.isFullScreen(plyr.container); } else { // Else it's a user request to enter or exit - if (!_fullscreen.isFullScreen(plyr.container)) { + if (!fullscreen.isFullScreen(plyr.container)) { // Save scroll position - _saveScrollPosition(); + saveScrollPosition(); // Request full screen - _fullscreen.requestFullScreen(plyr.container); + fullscreen.requestFullScreen(plyr.container); } else { // Bail from fullscreen - _fullscreen.cancelFullScreen(); + fullscreen.cancelFullScreen(); } // Check if we're actually full screen (it could fail) - plyr.isFullscreen = _fullscreen.isFullScreen(plyr.container); + plyr.isFullscreen = fullscreen.isFullScreen(plyr.container); return; } @@ -2494,45 +2591,45 @@ } // Set class hook - _toggleClass(plyr.container, config.classes.fullscreen.active, plyr.isFullscreen); + toggleClass(plyr.container, config.classes.fullscreen.active, plyr.isFullscreen); // Trap focus - _focusTrap(plyr.isFullscreen); + focusTrap(plyr.isFullscreen); // Set button state if (plyr.buttons && plyr.buttons.fullscreen) { - _toggleState(plyr.buttons.fullscreen, plyr.isFullscreen); + toggleState(plyr.buttons.fullscreen, plyr.isFullscreen); } // Trigger an event - _triggerEvent(plyr.container, plyr.isFullscreen ? 'enterfullscreen' : 'exitfullscreen', true); + trigger(plyr.container, plyr.isFullscreen ? 'enterfullscreen' : 'exitfullscreen', true); // Restore scroll position if (!plyr.isFullscreen && nativeSupport) { - _restoreScrollPosition(); + restoreScrollPosition(); } } // Mute - function _toggleMute(muted) { + function toggleMute(muted) { // If the method is called without parameter, toggle based on current value - if (!_is.boolean(muted)) { + if (!is.boolean(muted)) { muted = !plyr.media.muted; } // Set button state - _toggleState(plyr.buttons.mute, muted); + toggleState(plyr.buttons.mute, muted); // Set mute on the player plyr.media.muted = muted; // If volume is 0 after unmuting, set to default if (plyr.media.volume === 0) { - _setVolume(config.volume); + setVolume(config.volume); } // Embeds - if (_inArray(config.types.embed, plyr.type)) { + if (inArray(config.types.embed, plyr.type)) { // YouTube switch (plyr.type) { case 'youtube': @@ -2546,17 +2643,17 @@ } // Trigger volumechange for embeds - _triggerEvent(plyr.media, 'volumechange'); + trigger(plyr.media, 'volumechange'); } } // Set volume - function _setVolume(volume) { + function setVolume(volume) { var max = config.volumeMax, min = config.volumeMin; // Load volume from storage if no value specified - if (_is.undefined(volume)) { + if (is.undefined(volume)) { volume = plyr.storage.volume; } @@ -2583,7 +2680,7 @@ } // Embeds - if (_inArray(config.types.embed, plyr.type)) { + if (inArray(config.types.embed, plyr.type)) { switch (plyr.type) { case 'youtube': plyr.embed.setVolume(plyr.media.volume * 100); @@ -2596,41 +2693,41 @@ } // Trigger volumechange for embeds - _triggerEvent(plyr.media, 'volumechange'); + trigger(plyr.media, 'volumechange'); } // Toggle muted state if (volume === 0) { plyr.media.muted = true; } else if (plyr.media.muted && volume > 0) { - _toggleMute(); + toggleMute(); } } // Increase volume - function _increaseVolume(step) { + function increaseVolume(step) { var volume = plyr.media.muted ? 0 : (plyr.media.volume * config.volumeMax); - if (!_is.number(step)) { + if (!is.number(step)) { step = config.volumeStep; } - _setVolume(volume + step); + setVolume(volume + step); } // Decrease volume - function _decreaseVolume(step) { + function decreaseVolume(step) { var volume = plyr.media.muted ? 0 : (plyr.media.volume * config.volumeMax); - if (!_is.number(step)) { + if (!is.number(step)) { step = config.volumeStep; } - _setVolume(volume - step); + setVolume(volume - step); } // Update volume UI and storage - function _updateVolume() { + function updateVolume() { // Get the current volume var volume = plyr.media.muted ? 0 : (plyr.media.volume * config.volumeMax); @@ -2645,28 +2742,28 @@ } // Update the volume in storage - _updateStorage({ + updateStorage({ volume: volume }); // Toggle class if muted - _toggleClass(plyr.container, config.classes.muted, (volume === 0)); + toggleClass(plyr.container, config.classes.muted, (volume === 0)); // Update checkbox for mute state if (plyr.supported.full && plyr.buttons.mute) { - _toggleState(plyr.buttons.mute, (volume === 0)); + toggleState(plyr.buttons.mute, (volume === 0)); } } // Toggle captions - function _toggleCaptions(show) { + function toggleCaptions(show) { // If there's no full support, or there's no caption toggle if (!plyr.supported.full || !plyr.buttons.captions) { return; } // If the method is called without parameter, toggle based on current value - if (!_is.boolean(show)) { + if (!is.boolean(show)) { show = (plyr.container.className.indexOf(config.classes.captions.active) === -1); } @@ -2674,34 +2771,34 @@ plyr.captionsEnabled = show; // Toggle state - _toggleState(plyr.buttons.captions, plyr.captionsEnabled); + toggleState(plyr.buttons.captions, plyr.captionsEnabled); // Add class hook - _toggleClass(plyr.container, config.classes.captions.active, plyr.captionsEnabled); + toggleClass(plyr.container, config.classes.captions.active, plyr.captionsEnabled); // Trigger an event - _triggerEvent(plyr.container, plyr.captionsEnabled ? 'captionsenabled' : 'captionsdisabled', true); + trigger(plyr.container, plyr.captionsEnabled ? 'captionsenabled' : 'captionsdisabled', true); // Save captions state to localStorage - _updateStorage({ + updateStorage({ captionsEnabled: plyr.captionsEnabled }); } // Select active caption - function _setCaptionIndex(index) { + function setCaptionIndex(index) { // Save active caption config.captions.selectedIndex = index; // Clear caption - _setCaption(); + setCaption(); // Re-run setup - _setupCaptions(); + setupCaptions(); } // Check if media is loading - function _checkLoading(event) { + function checkLoading(event) { var loading = (event.type === 'waiting'); // Clear timer @@ -2710,22 +2807,22 @@ // Timer to prevent flicker when seeking timers.loading = setTimeout(function() { // Toggle container class hook - _toggleClass(plyr.container, config.classes.loading, loading); + toggleClass(plyr.container, config.classes.loading, loading); // Show controls if loading, hide if done - _toggleControls(loading); + toggleControls(loading); }, (loading ? 250 : 0)); } // Update elements - function _updateProgress(event) { + function updateProgress(event) { if (!plyr.supported.full) { return; } var progress = plyr.progress.played, value = 0, - duration = _getDuration(); + duration = getDuration(); if (event) { switch (event.type) { @@ -2736,7 +2833,7 @@ return; } - value = _getPercentage(plyr.media.currentTime, duration); + value = getPercentage(plyr.media.currentTime, duration); // Set seek range value only if it's a 'natural' time event if (event.type === 'timeupdate' && plyr.buttons.seek) { @@ -2754,8 +2851,8 @@ if (buffered && buffered.length) { // HTML5 - return _getPercentage(buffered.end(0), duration); - } else if (_is.number(buffered)) { + return getPercentage(buffered.end(0), duration); + } else if (is.number(buffered)) { // YouTube returns between 0 and 1 return (buffered * 100); } @@ -2768,21 +2865,21 @@ } // Set values - _setProgress(progress, value); + setProgress(progress, value); } // Set value - function _setProgress(progress, value) { + function setProgress(progress, value) { if (!plyr.supported.full) { return; } // Default to 0 - if (_is.undefined(value)) { + if (is.undefined(value)) { value = 0; } // Default to buffer or bail - if (_is.undefined(progress)) { + if (is.undefined(progress)) { if (plyr.progress && plyr.progress.buffer) { progress = plyr.progress.buffer; } else { @@ -2791,7 +2888,7 @@ } // One progress element passed - if (_is.htmlElement(progress)) { + if (is.htmlElement(progress)) { progress.value = value; } else if (progress) { // Object of progress + text element @@ -2805,7 +2902,7 @@ } // Update the displayed time - function _updateTimeDisplay(time, element) { + function updateTimeDisplay(time, element) { // Bail if there's no duration display if (!element) { return; @@ -2821,7 +2918,7 @@ plyr.hours = parseInt(((time / 60) / 60) % 60); // Do we need to display hours? - var displayHours = (parseInt(((_getDuration() / 60) / 60) % 60) > 0); + var displayHours = (parseInt(((getDuration() / 60) / 60) % 60) > 0); // Ensure it's two digits. For example, 03 rather than 3. plyr.secs = ('0' + plyr.secs).slice(-2); @@ -2832,32 +2929,32 @@ } // Show the duration on metadataloaded - function _displayDuration() { + function displayDuration() { if (!plyr.supported.full) { return; } // Determine duration - var duration = _getDuration() || 0; + var duration = getDuration() || 0; // If there's only one time display, display duration there if (!plyr.duration && config.displayDuration && plyr.media.paused) { - _updateTimeDisplay(duration, plyr.currentTime); + updateTimeDisplay(duration, plyr.currentTime); } // If there's a duration element, update content if (plyr.duration) { - _updateTimeDisplay(duration, plyr.duration); + updateTimeDisplay(duration, plyr.duration); } // Update the tooltip (if visible) - _updateSeekTooltip(); + updateSeekTooltip(); } // Handle time change event - function _timeUpdate(event) { + function timeUpdate(event) { // Duration - _updateTimeDisplay(plyr.media.currentTime, plyr.currentTime); + updateTimeDisplay(plyr.media.currentTime, plyr.currentTime); // Ignore updates while seeking if (event && event.type === 'timeupdate' && plyr.media.seeking) { @@ -2865,18 +2962,18 @@ } // Playing progress - _updateProgress(event); + updateProgress(event); } // Update seek range and progress - function _updateSeekDisplay(time) { + function updateSeekDisplay(time) { // Default to 0 - if (!_is.number(time)) { + if (!is.number(time)) { time = 0; } - var duration = _getDuration(), - value = _getPercentage(time, duration); + var duration = getDuration(), + value = getPercentage(time, duration); // Update progress if (plyr.progress && plyr.progress.played) { @@ -2890,8 +2987,8 @@ } // Update hover tooltip for seeking - function _updateSeekTooltip(event) { - var duration = _getDuration(); + function updateSeekTooltip(event) { + var duration = getDuration(); // Bail if setting not true if (!config.tooltips.seek || !plyr.progress.container || duration === 0) { @@ -2905,7 +3002,7 @@ // Determine percentage, if already visible if (!event) { - if (_hasClass(plyr.progress.tooltip, visible)) { + if (hasClass(plyr.progress.tooltip, visible)) { percent = plyr.progress.tooltip.style.left.replace('%', ''); } else { return; @@ -2922,30 +3019,20 @@ } // Display the time a click would seek to - _updateTimeDisplay(((duration / 100) * percent), plyr.progress.tooltip); + updateTimeDisplay(((duration / 100) * percent), plyr.progress.tooltip); // Set position plyr.progress.tooltip.style.left = percent + "%"; // Show/hide the tooltip // If the event is a moues in/out and percentage is inside bounds - if (event && _inArray(['mouseenter', 'mouseleave'], event.type)) { - _toggleClass(plyr.progress.tooltip, visible, (event.type === 'mouseenter')); + if (event && inArray(['mouseenter', 'mouseleave'], event.type)) { + toggleClass(plyr.progress.tooltip, visible, (event.type === 'mouseenter')); } } - // Set playback speed - function _setSpeed(speed) { - // Load speed from storage or default value - if (_is.undefined(speed)) { - speed = plyr.storage.speed || config.defaultSpeed; - } - - _speed(speed); - } - // Show the player controls in fullscreen mode - function _toggleControls(toggle) { + function toggleControls(toggle) { // Don't hide if config says not to, it's audio, or not ready or loading if (!config.hideControls || plyr.type === 'audio') { return; @@ -2954,19 +3041,19 @@ var delay = 0, isEnterFullscreen = false, show = toggle, - loading = _hasClass(plyr.container, config.classes.loading); + loading = hasClass(plyr.container, config.classes.loading); // Default to false if no boolean - if (!_is.boolean(toggle)) { + if (!is.boolean(toggle)) { if (toggle && toggle.type) { // Is the enter fullscreen event isEnterFullscreen = (toggle.type === 'enterfullscreen'); // Whether to show controls - show = _inArray(['mousemove', 'touchstart', 'mouseenter', 'focus'], toggle.type); + show = inArray(['mousemove', 'touchstart', 'mouseenter', 'focus'], toggle.type); // Delay hiding on move events - if (_inArray(['mousemove', 'touchmove'], toggle.type)) { + if (inArray(['mousemove', 'touchmove'], toggle.type)) { delay = 2000; } @@ -2975,7 +3062,7 @@ delay = 3000; } } else { - show = _hasClass(plyr.container, config.classes.hideControls); + show = hasClass(plyr.container, config.classes.hideControls); } } @@ -2984,7 +3071,7 @@ // If the mouse is not over the controls, set a timeout to hide them if (show || plyr.media.paused || loading) { - _toggleClass(plyr.container, config.classes.hideControls, false); + toggleClass(plyr.container, config.classes.hideControls, false); // Always show controls when paused or if touch if (plyr.media.paused || loading) { @@ -3006,16 +3093,16 @@ return; } - _toggleClass(plyr.container, config.classes.hideControls, true); + toggleClass(plyr.container, config.classes.hideControls, true); }, delay); } } // Add common function to retrieve media source - function _source(source) { + function source(source) { // If not null or undefined, parse it - if (!_is.undefined(source)) { - _updateSource(source); + if (!is.undefined(source)) { + updateSource(source); return; } @@ -3048,26 +3135,26 @@ // Update source // Sources are not checked for support so be careful - function _updateSource(source) { - if (!_is.object(source) || !('sources' in source) || !source.sources.length) { - _warn('Invalid source format'); + function updateSource(source) { + if (!is.object(source) || !('sources' in source) || !source.sources.length) { + warn('Invalid source format'); return; } // Remove ready class hook - _toggleClass(plyr.container, config.classes.ready, false); + toggleClass(plyr.container, config.classes.ready, false); // Pause playback - _pause(); + pause(); // Update seek range and progress - _updateSeekDisplay(); + updateSeekDisplay(); // Reset buffer progress - _setProgress(); + setProgress(); // Cancel current network requests - _cancelRequests(); + cancelRequests(); // Setup new source function setup() { @@ -3075,11 +3162,11 @@ plyr.embed = null; // Remove the old media - _remove(plyr.media); + remove(plyr.media); // Remove video container if (plyr.type === 'video' && plyr.videoContainer) { - _remove(plyr.videoContainer); + remove(plyr.videoContainer); } // Reset class name @@ -3095,7 +3182,7 @@ if (plyr.type === 'video') { var firstSource = source.sources[0]; - if ('type' in firstSource && _inArray(config.types.embed, firstSource.type)) { + if ('type' in firstSource && inArray(config.types.embed, firstSource.type)) { plyr.type = firstSource.type; } } @@ -3123,15 +3210,15 @@ } // Inject the new element - _prependChild(plyr.container, plyr.media); + prependChild(plyr.container, plyr.media); // Autoplay the new source? - if (_is.boolean(source.autoplay)) { + if (is.boolean(source.autoplay)) { config.autoplay = source.autoplay; } // Set attributes for audio and video - if (_inArray(config.types.html5, plyr.type)) { + if (inArray(config.types.html5, plyr.type)) { if (config.crossorigin) { plyr.media.setAttribute('crossorigin', ''); } @@ -3147,23 +3234,23 @@ } // Restore class hooks - _toggleClass(plyr.container, config.classes.fullscreen.active, plyr.isFullscreen); - _toggleClass(plyr.container, config.classes.captions.active, plyr.captionsEnabled); - _toggleStyleHook(); + toggleClass(plyr.container, config.classes.fullscreen.active, plyr.isFullscreen); + toggleClass(plyr.container, config.classes.captions.active, plyr.captionsEnabled); + toggleStyleHook(); // Set new sources for html5 - if (_inArray(config.types.html5, plyr.type)) { - _insertChildElements('source', source.sources); + if (inArray(config.types.html5, plyr.type)) { + insertChildElements('source', source.sources); } // Set up from scratch - _setupMedia(); + setupMedia(); // HTML5 stuff - if (_inArray(config.types.html5, plyr.type)) { + if (inArray(config.types.html5, plyr.type)) { // Setup captions if ('tracks' in source) { - _insertChildElements('track', source.tracks); + insertChildElements('track', source.tracks); } // Load HTML5 sources @@ -3171,39 +3258,39 @@ } // If HTML5 or embed but not fully supported, setupInterface and call ready now - if (_inArray(config.types.html5, plyr.type) || (_inArray(config.types.embed, plyr.type) && !plyr.supported.full)) { + if (inArray(config.types.html5, plyr.type) || (inArray(config.types.embed, plyr.type) && !plyr.supported.full)) { // Setup interface - _setupInterface(); + setupInterface(); // Call ready - _ready(); + ready(); } // Set aria title and iframe title config.title = source.title; - _setTitle(); + setTitle(); } // Destroy instance adn wait for callback // Vimeo throws a wobbly if you don't wait - _destroy(setup, false); + destroy(setup, false); } // Update poster - function _updatePoster(source) { + function updatePoster(source) { if (plyr.type === 'video') { plyr.media.setAttribute('poster', source); } } // Listen for control events - function _controlListeners() { + function controlListeners() { // IE doesn't support input event, so we fallback to change var inputEvent = (plyr.browser.isIE ? 'change' : 'input'); // Click play/pause helper - function togglePlay() { - var play = _togglePlay(); + function _togglePlay() { + var play = togglePlay(); // Determine which buttons var trigger = plyr.buttons[play ? 'play' : 'pause'], @@ -3218,14 +3305,14 @@ // Setup focus and tab focus if (target) { - var hadTabFocus = _hasClass(trigger, config.classes.tabFocus); + var hadTabFocus = hasClass(trigger, config.classes.tabFocus); setTimeout(function() { target.focus(); if (hadTabFocus) { - _toggleClass(trigger, config.classes.tabFocus, false); - _toggleClass(target, config.classes.tabFocus, true); + toggleClass(trigger, config.classes.tabFocus, false); + toggleClass(target, config.classes.tabFocus, true); } }, 100); } @@ -3254,12 +3341,12 @@ for (var button in plyr.buttons) { var element = plyr.buttons[button]; - if (_is.nodeList(element)) { + if (is.nodeList(element)) { for (var i = 0; i < element.length; i++) { - _toggleClass(element[i], config.classes.tabFocus, (element[i] === focused)); + toggleClass(element[i], config.classes.tabFocus, (element[i] === focused)); } } else { - _toggleClass(element, config.classes.tabFocus, (element === focused)); + toggleClass(element, config.classes.tabFocus, (element === focused)); } } } @@ -3270,7 +3357,7 @@ // Handle global presses if (config.keyboardShorcuts.global) { - _on(window, 'keydown keyup', function(event) { + on(window, 'keydown keyup', function(event) { var code = getKeyCode(event), focused = getFocusElement(), allowed = [48, 49, 50, 51, 52, 53, 54, 56, 57, 75, 77, 70, 67], @@ -3280,14 +3367,14 @@ // and the key is in the allowed keys // and if the focused element is not editable (e.g. text input) // and any that accept key input http://webaim.org/techniques/keyboard/ - if (count === 1 && _inArray(allowed, code) && (!_is.htmlElement(focused) || !_matches(focused, config.selectors.editable))) { + if (count === 1 && inArray(allowed, code) && (!is.htmlElement(focused) || !matches(focused, config.selectors.editable))) { handleKey(event); } }); } // Handle presses on focused - _on(plyr.container, 'keydown keyup', handleKey); + on(plyr.container, 'keydown keyup', handleKey); } function handleKey(event) { @@ -3297,7 +3384,7 @@ // If the event is bubbled from the media element // Firefox doesn't get the keycode for whatever reason - if (!_is.number(code)) { + if (!is.number(code)) { return; } @@ -3307,12 +3394,12 @@ var duration = plyr.media.duration; // Bail if we have no duration set - if (!_is.number(duration)) { + if (!is.number(duration)) { return; } // Divide the max duration into 10th's and times by the number value - _seek((duration / 10) * (code - 48)); + seek((duration / 10) * (code - 48)); } // Handle the key on keydown @@ -3322,22 +3409,21 @@ var preventDefault = [48, 49, 50, 51, 52, 53, 54, 56, 57, 32, 75, 38, 40, 77, 39, 37, 70, 67]; var checkFocus = [38, 40]; - if (_inArray(checkFocus, code)) { + if (inArray(checkFocus, code)) { var focused = getFocusElement(); - if (_is.htmlElement(focused) && getFocusElement().type === "radio") { + if (is.htmlElement(focused) && getFocusElement().type === "radio") { return; } } // If the code is found prevent default (e.g. prevent scrolling for arrows) - if (_inArray(preventDefault, code)) { + if (inArray(preventDefault, code)) { event.preventDefault(); event.stopPropagation(); } switch (code) { - // 0-9 case 48: case 49: case 50: @@ -3348,55 +3434,64 @@ case 55: case 56: case 57: + // 0-9 if (!held) { seekByKey(); } break; - // Space and K key + case 32: case 75: + // Space and K key if (!held) { _togglePlay(); } break; - // Arrow up + case 38: - _increaseVolume(); + // Arrow up + increaseVolume(); break; - // Arrow down + case 40: - _decreaseVolume(); + // Arrow down + decreaseVolume(); break; - // M key + case 77: + // M key if (!held) { - _toggleMute() + toggleMute() } break; - // Arrow forward + case 39: - _forward(); + // Arrow forward + forward(); break; - // Arrow back + case 37: - _rewind(); + // Arrow back + rewind(); break; - // F key + case 70: - _toggleFullscreen(); + // F key + toggleFullscreen(); break; - // C key + case 67: + // C key if (!held) { - _toggleCaptions(); + toggleCaptions(); } break; } // Escape is handle natively when in full screen // So we only need to worry about non native - if (!_support.fullscreen && plyr.isFullscreen && code === 27) { - _toggleFullscreen(); + if (!support.fullscreen && plyr.isFullscreen && code === 27) { + toggleFullscreen(); } // Store last code for next cycle @@ -3407,7 +3502,7 @@ } // Focus/tab management - _on(window, 'keyup', function(event) { + on(window, 'keyup', function(event) { var code = getKeyCode(event), focused = getFocusElement(); @@ -3415,66 +3510,66 @@ checkTabFocus(focused); } }); - _on(document.body, 'click', function() { - _toggleClass(_getElement('.' + config.classes.tabFocus), config.classes.tabFocus, false); + on(document.body, 'click', function() { + toggleClass(getElement('.' + config.classes.tabFocus), config.classes.tabFocus, false); }); for (var button in plyr.buttons) { var element = plyr.buttons[button]; - _on(element, 'blur', function() { - _toggleClass(element, 'tab-focus', false); + on(element, 'blur', function() { + toggleClass(element, 'tab-focus', false); }); } // Play - _proxyListener(plyr.buttons.play, 'click', config.listeners.play, togglePlay); + proxy(plyr.buttons.play, 'click', config.listeners.play, _togglePlay); // Pause - _proxyListener(plyr.buttons.pause, 'click', config.listeners.pause, togglePlay); + proxy(plyr.buttons.pause, 'click', config.listeners.pause, _togglePlay); // Restart - _proxyListener(plyr.buttons.restart, 'click', config.listeners.restart, _seek); + proxy(plyr.buttons.restart, 'click', config.listeners.restart, seek); // Rewind - _proxyListener(plyr.buttons.rewind, 'click', config.listeners.rewind, _rewind); + proxy(plyr.buttons.rewind, 'click', config.listeners.rewind, rewind); // Fast forward - _proxyListener(plyr.buttons.forward, 'click', config.listeners.forward, _forward); + proxy(plyr.buttons.forward, 'click', config.listeners.forward, forward); // Speed-up - _proxyListener(plyr.buttons.speed, 'click', config.listeners.speed, _speed); + proxy(plyr.buttons.speed, 'click', config.listeners.speed, setSpeed); // Seek - _proxyListener(plyr.buttons.seek, inputEvent, config.listeners.seek, _seek); + proxy(plyr.buttons.seek, inputEvent, config.listeners.seek, seek); // Set volume - _proxyListener(plyr.volume.input, inputEvent, config.listeners.volume, function() { - _setVolume(plyr.volume.input.value); + proxy(plyr.volume.input, inputEvent, config.listeners.volume, function() { + setVolume(plyr.volume.input.value); }); // Mute - _proxyListener(plyr.buttons.mute, 'click', config.listeners.mute, _toggleMute); + proxy(plyr.buttons.mute, 'click', config.listeners.mute, toggleMute); // Fullscreen - _proxyListener(plyr.buttons.fullscreen, 'click', config.listeners.fullscreen, _toggleFullscreen); + proxy(plyr.buttons.fullscreen, 'click', config.listeners.fullscreen, toggleFullscreen); // Handle user exiting fullscreen by escaping etc - if (_support.fullscreen) { - _on(document, _fullscreen.eventType, _toggleFullscreen); + if (support.fullscreen) { + on(document, fullscreen.eventType, toggleFullscreen); } // Captions - _on(plyr.buttons.captions, 'click', _toggleCaptions); + on(plyr.buttons.captions, 'click', toggleCaptions); // Settings - _on(plyr.buttons.settings, 'click', function(event) { + on(plyr.buttons.settings, 'click', function(event) { var menu = this, toggle = event.target, target = document.getElementById(toggle.getAttribute('aria-controls')), show = (toggle.getAttribute('aria-expanded') === 'false'); // Nothing to show, bail - if (!_is.htmlElement(target)) { + if (!is.htmlElement(target)) { return; } @@ -3508,7 +3603,7 @@ container.appendChild(clone); targetWidth = clone.scrollWidth; targetHeight = clone.scrollHeight; - _remove(clone); + remove(clone); } target.setAttribute('aria-hidden', !show); @@ -3527,36 +3622,35 @@ }); // Picture in picture - _on(plyr.buttons.pip, 'click', function() { - //if () - + on(plyr.buttons.pip, 'click', function() { + // TODO: Check support here plyr.media.webkitSetPresentationMode(plyr.media.webkitPresentationMode === 'picture-in-picture' ? 'inline' : 'picture-in-picture'); }); // Seek tooltip - _on(plyr.progress.container, 'mouseenter mouseleave mousemove', _updateSeekTooltip); + on(plyr.progress.container, 'mouseenter mouseleave mousemove', updateSeekTooltip); // Toggle controls visibility based on mouse movement if (config.hideControls) { // Toggle controls on mouse events and entering fullscreen - _on(plyr.container, 'mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen', _toggleControls); + on(plyr.container, 'mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen', toggleControls); // Watch for cursor over controls so they don't hide when trying to interact - _on(plyr.controls, 'mouseenter mouseleave', function(event) { + on(plyr.controls, 'mouseenter mouseleave', function(event) { plyr.controls.hover = event.type === 'mouseenter'; }); // Watch for cursor over controls so they don't hide when trying to interact - _on(plyr.controls, 'mousedown mouseup touchstart touchend touchcancel', function(event) { - plyr.controls.pressed = _inArray(['mousedown', 'touchstart'], event.type); + on(plyr.controls, 'mousedown mouseup touchstart touchend touchcancel', function(event) { + plyr.controls.pressed = inArray(['mousedown', 'touchstart'], event.type); }); // Focus in/out on controls - _on(plyr.controls, 'focus blur', _toggleControls, true); + on(plyr.controls, 'focus blur', toggleControls, true); } // Adjust volume on scroll - _on(plyr.volume.input, 'wheel', function(event) { + on(plyr.volume.input, 'wheel', function(event) { event.preventDefault(); // Detect "natural" scroll - suppored on OS X Safari only @@ -3567,45 +3661,45 @@ // Scroll down (or up on natural) to decrease if (event.deltaY < 0 || event.deltaX > 0) { if (inverted) { - _decreaseVolume(step); + decreaseVolume(step); } else { - _increaseVolume(step); + increaseVolume(step); } } // Scroll up (or down on natural) to increase if (event.deltaY > 0 || event.deltaX < 0) { if (inverted) { - _increaseVolume(step); + increaseVolume(step); } else { - _decreaseVolume(step); + decreaseVolume(step); } } }); } // Listen for media events - function _mediaListeners() { + function mediaListeners() { // Time change on media - _on(plyr.media, 'timeupdate seeking', _timeUpdate); + on(plyr.media, 'timeupdate seeking', timeUpdate); // Update manual captions - _on(plyr.media, 'timeupdate', _seekManualCaptions); + on(plyr.media, 'timeupdate', seekManualCaptions); // Display duration - _on(plyr.media, 'durationchange loadedmetadata', _displayDuration); + on(plyr.media, 'durationchange loadedmetadata', displayDuration); // Handle the media finishing - _on(plyr.media, 'ended', function() { + on(plyr.media, 'ended', function() { // Show poster on end if (plyr.type === 'video' && config.showPosterOnEnd) { // Clear if (plyr.type === 'video') { - _setCaption(); + setCaption(); } // Restart - _seek(); + seek(); // Re-load media plyr.media.load(); @@ -3613,21 +3707,21 @@ }); // Check for buffer progress - _on(plyr.media, 'progress playing', _updateProgress); + on(plyr.media, 'progress playing', updateProgress); // Handle native mute - _on(plyr.media, 'volumechange', _updateVolume); + on(plyr.media, 'volumechange', updateVolume); // Handle native play/pause - _on(plyr.media, 'play pause ended', _checkPlaying); + on(plyr.media, 'play pause ended', checkPlaying); // Loading - _on(plyr.media, 'waiting canplay seeked', _checkLoading); + on(plyr.media, 'waiting canplay seeked', checkLoading); // Click video if (config.clickToPlay && plyr.type !== 'audio') { // Re-fetch the wrapper - var wrapper = _getElement('.' + config.classes.videoWrapper); + var wrapper = getElement('.' + config.classes.videoWrapper); // Bail if there's no wrapper (this should never happen) if (!wrapper) { @@ -3638,48 +3732,48 @@ wrapper.style.cursor = "pointer"; // On click play, pause ore restart - _on(wrapper, 'click', function() { + on(wrapper, 'click', function() { // Touch devices will just show controls (if we're hiding controls) if (config.hideControls && plyr.browser.isTouch && !plyr.media.paused) { return; } if (plyr.media.paused) { - _play(); + play(); } else if (plyr.media.ended) { - _seek(); - _play(); + seek(); + play(); } else { - _pause(); + pause(); } }); } // Disable right click if (config.disableContextMenu) { - _on(plyr.media, 'contextmenu', function(event) { + on(plyr.media, 'contextmenu', function(event) { event.preventDefault(); }); } // Proxy events to container // Bubble up key events for Edge - _on(plyr.media, config.events.concat(['keyup', 'keydown']).join(' '), function(event) { - _triggerEvent(plyr.container, event.type, true); + on(plyr.media, config.events.concat(['keyup', 'keydown']).join(' '), function(event) { + trigger(plyr.container, event.type, true); }); } // Cancel current network requests // See https://github.com/Selz/plyr/issues/174 - function _cancelRequests() { - if (!_inArray(config.types.html5, plyr.type)) { + function cancelRequests() { + if (!inArray(config.types.html5, plyr.type)) { return; } // Remove child sources var sources = plyr.media.querySelectorAll('source'); for (var i = 0; i < sources.length; i++) { - _remove(sources[i]); + remove(sources[i]); } // Set blank video src attribute @@ -3693,13 +3787,13 @@ plyr.media.load(); // Debugging - _log('Cancelled network requests'); + log('Cancelled network requests'); } // Destroy an instance // Event listeners are removed when elements are removed // http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory - function _destroy(callback, restore) { + function destroy(callback, restore) { // Bail if the element is not initialized if (!plyr.init) { return null; @@ -3733,7 +3827,7 @@ case 'video': case 'audio': // Restore native video controls - _toggleNativeControls(true); + toggleNativeControls(true); // Clean up cleanUp(); @@ -3743,12 +3837,12 @@ function cleanUp() { // Default to restore original element - if (!_is.boolean(restore)) { + if (!is.boolean(restore)) { restore = true; } // Callback - if (_is.function(callback)) { + if (is.function(callback)) { callback.call(original); } @@ -3767,27 +3861,27 @@ document.body.style.overflow = ''; // Event - _triggerEvent(original, 'destroyed', true); + trigger(original, 'destroyed', true); } } // Setup a player - function _init() { + function init() { // Bail if the element is initialized if (plyr.init) { return null; } // Sniff out the browser - plyr.browser = _getBrowser(); + plyr.browser = getBrowser(); // Bail if nothing to setup - if (!_is.htmlElement(plyr.media)) { + if (!is.htmlElement(plyr.media)) { return; } // Load saved settings from localStorage - _setupStorage(); + setupStorage(); // Set media type based on tag or data attribute // Supported: video, audio, vimeo, youtube @@ -3815,31 +3909,31 @@ } // Wrap media - plyr.container = _wrap(media, document.createElement('div')); + plyr.container = wrap(media, document.createElement('div')); // Allow focus to be captured plyr.container.setAttribute('tabindex', 0); // Add style hook - _toggleStyleHook(); + toggleStyleHook(); // Debug info - _log('' + plyr.browser.name + ' ' + plyr.browser.version); + log('' + plyr.browser.name + ' ' + plyr.browser.version); // Setup media - _setupMedia(); + setupMedia(); // Setup interface // If embed but not fully supported, setupInterface (to avoid flash of controls) and call ready now - if (_inArray(config.types.html5, plyr.type) || (_inArray(config.types.embed, plyr.type) && !plyr.supported.full)) { + if (inArray(config.types.html5, plyr.type) || (inArray(config.types.embed, plyr.type) && !plyr.supported.full)) { // Setup UI - _setupInterface(); + setupInterface(); // Call ready - _ready(); + ready(); // Set title on button and frame - _setTitle(); + setTitle(); } // Successful setup @@ -3847,65 +3941,65 @@ } // Setup the UI - function _setupInterface() { + function setupInterface() { // Don't setup interface if no support if (!plyr.supported.full) { - _warn('Basic support only', plyr.type); + warn('Basic support only', plyr.type); // Remove controls - _remove(_getElement(config.selectors.controls.wrapper)); + remove(getElement(config.selectors.controls.wrapper)); // Remove large play - _remove(_getElement(config.selectors.buttons.play)); + remove(getElement(config.selectors.buttons.play)); // Restore native controls - _toggleNativeControls(true); + toggleNativeControls(true); // Bail return; } // Inject custom controls if not present - var controlsMissing = !_getElements(config.selectors.controls.wrapper).length; + var controlsMissing = !getElements(config.selectors.controls.wrapper).length; if (controlsMissing) { // Inject custom controls - _injectControls(); + injectControls(); } // Find the elements - if (!_findElements()) { + if (!findElements()) { return; } // If the controls are injected, re-bind listeners for controls if (controlsMissing) { - _controlListeners(); + controlListeners(); } // Media element listeners - _mediaListeners(); + mediaListeners(); // Remove native controls - _toggleNativeControls(); + toggleNativeControls(); // Setup fullscreen - _setupFullscreen(); + setupFullscreen(); // Captions - _setupCaptions(); + setupCaptions(); // Set volume - _setVolume(); - _updateVolume(); + setVolume(); + updateVolume(); // Set playback speed - _setSpeed(); + setSpeed(); // Reset time display - _timeUpdate(); + timeUpdate(); // Update the UI - _checkPlaying(); + checkPlaying(); } api = { @@ -3924,7 +4018,7 @@ getType: function() { return plyr.type; }, - getDuration: _getDuration, + getDuration: getDuration, getCurrentTime: function() { return plyr.media.currentTime; }, @@ -3935,71 +4029,71 @@ return plyr.media.muted; }, isReady: function() { - return _hasClass(plyr.container, config.classes.ready); + return hasClass(plyr.container, config.classes.ready); }, isLoading: function() { - return _hasClass(plyr.container, config.classes.loading); + return hasClass(plyr.container, config.classes.loading); }, isPaused: function() { return plyr.media.paused; }, on: function(event, callback) { - _on(plyr.container, event, callback); + on(plyr.container, event, callback); return this; }, - play: _play, - pause: _pause, + play: play, + pause: pause, stop: function() { - _pause(); - _seek(); + pause(); + seek(); }, - restart: _seek, - rewind: _rewind, - forward: _forward, - seek: _seek, - source: _source, - poster: _updatePoster, - setVolume: _setVolume, - setSpeed: _setSpeed, - togglePlay: _togglePlay, - toggleMute: _toggleMute, - toggleCaptions: _toggleCaptions, - toggleFullscreen: _toggleFullscreen, - toggleControls: _toggleControls, - setCaptionIndex: _setCaptionIndex, + restart: seek, + rewind: rewind, + forward: forward, + seek: seek, + source: source, + poster: updatePoster, + setVolume: setVolume, + setSpeed: setSpeed, + togglePlay: togglePlay, + toggleMute: toggleMute, + toggleCaptions: toggleCaptions, + toggleFullscreen: toggleFullscreen, + toggleControls: toggleControls, + setCaptionIndex: setCaptionIndex, isFullscreen: function() { return plyr.isFullscreen || false; }, support: function(mimeType) { - return _support.mime(plyr, mimeType); + return support.mime(plyr, mimeType); }, - destroy: _destroy + destroy: destroy }; // Everything done - function _ready() { + function ready() { // Ready event at end of execution stack window.setTimeout(function() { - _triggerEvent(plyr.media, 'ready'); + trigger(plyr.media, 'ready'); }, 0); // Set class hook on media element - _toggleClass(plyr.media, defaults.classes.setup, true); + toggleClass(plyr.media, defaults.classes.setup, true); // Set container class for ready - _toggleClass(plyr.container, config.classes.ready, true); + toggleClass(plyr.container, config.classes.ready, true); // Store a refernce to instance plyr.media.plyr = api; // Autoplay if (config.autoplay) { - _play(); + play(); } } // Initialize instance - _init(); + init(); // If init failed, return null if (!plyr.init) { @@ -4014,14 +4108,14 @@ var x = new XMLHttpRequest(); // If the id is set and sprite exists, bail - if (_is.string(id) && _is.htmlElement(document.querySelector('#' + id))) { + if (is.string(id) && is.htmlElement(document.querySelector('#' + id))) { return; } // Create placeholder (to prevent loading twice) var container = document.createElement('div'); container.setAttribute('hidden', ''); - if (_is.string(id)) { + if (is.string(id)) { container.setAttribute('id', id); } document.body.insertBefore(container, document.body.childNodes[0]); @@ -4043,7 +4137,7 @@ // Check for support function supported(type) { - var browser = _getBrowser(), + var browser = getBrowser(), isOldIE = (browser.isIE && browser.version <= 9), isIos = browser.isIos, isIphone = /iPhone|iPod/i.test(navigator.userAgent), @@ -4088,16 +4182,16 @@ selector = [defaults.selectors.html5, defaults.selectors.embed].join(','); // Select the elements - if (_is.string(targets)) { + if (is.string(targets)) { // String selector passed targets = document.querySelectorAll(targets); - } else if (_is.htmlElement(targets)) { + } else if (is.htmlElement(targets)) { // Single HTMLElement passed targets = [targets]; - } else if (!_is.nodeList(targets) && !_is.array(targets) && !_is.string(targets)) { + } else if (!is.nodeList(targets) && !is.array(targets) && !is.string(targets)) { // No selector passed, possibly options as first argument // If options are the first argument - if (_is.undefined(options) && _is.object(targets)) { + if (is.undefined(options) && is.object(targets)) { options = targets; } @@ -4106,7 +4200,7 @@ } // Convert NodeList to array - if (_is.nodeList(targets)) { + if (is.nodeList(targets)) { targets = Array.prototype.slice.call(targets); } @@ -4118,10 +4212,10 @@ // Add to container list function add(target, media) { - if (!_hasClass(media, defaults.classes.hook)) { + if (!hasClass(media, defaults.classes.hook)) { players.push({ // Always wrap in a
    for styling - //container: _wrap(media, document.createElement('div')), + // container: wrap(media, document.createElement('div')), // Could be a container or the media itself target: target, // This should be the
    ', '', '' @@ -1278,6 +1331,35 @@ } } + // Setup Loop + function setupLoop() { + if (!plyr.supported.full) { + return; + } + + if ((plyr.type !== 'audio' || config.fullscreen.allowAudio) && config.fullscreen.enabled) { + // Check for native support + var nativeSupport = support.fullscreen; + + if (nativeSupport || (config.fullscreen.fallback && !inFrame())) { + log((nativeSupport ? 'Native' : 'Fallback') + ' fullscreen enabled'); + + // Add styling hook + toggleClass(plyr.container, config.classes.fullscreen.enabled, true); + } else { + log('Fullscreen not supported and fallback disabled'); + } + + // Toggle state + if (plyr.buttons && plyr.buttons.fullscreen) { + toggleState(plyr.buttons.fullscreen, false); + } + + // Setup focus trap + focusTrap(); + } + } + // Display active caption if it contains text function setActiveCue(track) { // Get the track from the event if needed @@ -1715,7 +1797,11 @@ fullscreen: getElement(config.selectors.buttons.fullscreen), settings: getElement(config.selectors.buttons.settings), pip: getElement(config.selectors.buttons.pip), - speed: document.querySelectorAll(config.selectors.buttons.speed) + speed: document.querySelectorAll(config.selectors.buttons.speed), + loopin: document.querySelectorAll(config.selectors.buttons.loopin), + loopout: document.querySelectorAll(config.selectors.buttons.loopout), + loopall: document.querySelectorAll(config.selectors.buttons.loopall), + loopclear: document.querySelectorAll(config.selectors.buttons.loopclear) }; // Inputs @@ -2410,6 +2496,50 @@ return toggle; } + // Toggle loop + function toggleLoop(toggle) { + if (['loopin', 'loopout', 'loopall'].indexOf(toggle) === -1) { + toggle = 'loopclear'; + } + + var currentTime = Number(plyr.media.currentTime); + + switch(toggle) { + case 'loopin': + if (config.loopout && config.loopout <= currentTime) { + config.loopout = null; + } + config.loopin = currentTime; + break; + case 'loopout': + if (config.loopin >= currentTime) { + return; + } + config.loopout = currentTime; + break; + case 'loopall': + config.loopin = 0; + config.loopout = plyr.media.duration - 2; + break; + default: + config.loopin = 0; + config.loopout = null; + break; + } + + //check if can loop + config.loop = is.number(config.loopin) && is.number(config.loopout); + + var loopin = updateTimeDisplay(config.loopin, document.querySelector('[data-loop__value="loopin"]')); + var loopout = is.number(config.loopout) ? updateTimeDisplay(config.loopout, document.querySelector('[data-loop__value="loopout"]')) : null; + if (config.loop) { + document.querySelector('[data-menu="loop"]').innerHTML = loopin + ' - ' + loopout; + } else { + document.querySelector('[data-menu="loop"]').innerHTML = config.i18n.loopclear; + } + + } + // Speed-up function setSpeed(speed) { // Load speed from storage or default value @@ -2776,6 +2906,36 @@ } } + + // Update volume UI and storage + function updateLoop() { + // Get the current volume + var volume = plyr.media.muted ? 0 : (plyr.media.volume * config.volumeMax); + + // Update the if present + if (plyr.supported.full) { + if (plyr.volume.input) { + plyr.volume.input.value = volume; + } + if (plyr.volume.display) { + plyr.volume.display.value = volume; + } + } + + // Update the volume in storage + updateStorage({ + volume: volume + }); + + // Toggle class if muted + toggleClass(plyr.container, config.classes.muted, (volume === 0)); + + // Update checkbox for mute state + if (plyr.supported.full && plyr.buttons.mute) { + toggleState(plyr.buttons.mute, (volume === 0)); + } + } + // Toggle captions function toggleCaptions(show) { // If there's no full support, or there's no caption toggle @@ -2885,7 +3045,10 @@ } } - // Set values + if (is.number(config.loopin) && is.number(config.loopout) && plyr.media.currentTime >= config.loopout) { + seek(config.loopin); + } + setProgress(progress, value); } @@ -2945,8 +3108,10 @@ plyr.secs = ('0' + plyr.secs).slice(-2); plyr.mins = ('0' + plyr.mins).slice(-2); + var txt = (displayHours ? plyr.hours + ':' : '') + plyr.mins + ':' + plyr.secs; // Render - element.innerHTML = (displayHours ? plyr.hours + ':' : '') + plyr.mins + ':' + plyr.secs; + element.innerHTML = txt; + return txt; } // Show the duration on metadataloaded @@ -3577,6 +3742,20 @@ // Fullscreen proxy(plyr.buttons.fullscreen, 'click', config.listeners.fullscreen, toggleFullscreen); + // Loop + proxy(plyr.buttons.loopall, 'click', config.listeners.loopall, function () { + toggleLoop('loopall'); + }); + proxy(plyr.buttons.loopin, 'click', config.listeners.loopin, function(){ + toggleLoop('loopin'); + }); + proxy(plyr.buttons.loopout, 'click', config.listeners.loopout, function () { + toggleLoop('loopout'); + }); + proxy(plyr.buttons.loopclear, 'click', config.listeners.loopclear, function () { + toggleLoop('loopclear'); + }); + // Handle user exiting fullscreen by escaping etc if (support.fullscreen) { on(document, fullscreen.eventType, toggleFullscreen); @@ -4019,6 +4198,10 @@ // Set playback speed setSpeed(); + + // Set loop + toggleLoop(); + // Reset time display timeUpdate(); @@ -4061,12 +4244,16 @@ isPaused: function() { return plyr.media.paused; }, + isLooping: function() { + return config.loopin && config.loopout; + }, on: function(event, callback) { on(plyr.container, event, callback); return this; }, play: play, pause: pause, + loop: toggleLoop, stop: function() { pause(); seek(); From 1bcdbe4c005968954813783af44dc6240e06e0ed Mon Sep 17 00:00:00 2001 From: Chrysa Papadopoulou Date: Thu, 2 Feb 2017 11:38:08 +0200 Subject: [PATCH 32/70] Refactored loop event buttons + on 'No Loop' cleared displayed timing --- demo/dist/demo.js | 2 +- dist/plyr.js | 4 ++-- src/js/plyr.js | 42 +++++++++++++----------------------------- 3 files changed, 16 insertions(+), 32 deletions(-) diff --git a/demo/dist/demo.js b/demo/dist/demo.js index d79c71e7..75866ed6 100644 --- a/demo/dist/demo.js +++ b/demo/dist/demo.js @@ -1 +1 @@ -"document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var e=document.createElement("_");if(e.classList.add("c1","c2"),!e.classList.contains("c2")){var t=function(e){var t=DOMTokenList.prototype[e];DOMTokenList.prototype[e]=function(e){var i,s=arguments.length;for(i=0;i=0;a--)e(o[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0)}}var i=plyr.setup({debug:!0,title:"Video demo",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0},controls:["play-large","play","speed-up","progress","current-time","mute","volume","captions","settings","fullscreen"]});plyr.loadSprite("dist/demo.svg");for(var s=i[0],o=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),a=window.history&&window.history.pushState,c=o.length-1;c>=0;c--)o[c].addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),a&&history.pushState({type:e},"","#"+e)});if(window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),a){var l=!r.length;l&&(r=n.video),r in n&&history.replaceState({type:r},"",l?"":"#"+r),r!==n.video&&t(r,!0)}}(),document.domain.indexOf("plyr.io")>-1&&(!function(e,t,i,s,o,n,r){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,n=t.createElement(i),r=t.getElementsByTagName(i)[0],n.async=1,n.src=s,r.parentNode.insertBefore(n,r)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40881672-11","auto"),ga("send","pageview")); \ No newline at end of file +"document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var e=document.createElement("_");if(e.classList.add("c1","c2"),!e.classList.contains("c2")){var t=function(e){var t=DOMTokenList.prototype[e];DOMTokenList.prototype[e]=function(e){var i,s=arguments.length;for(i=0;i=0;a--)e(o[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0)}}var i=plyr.setup({debug:!0,title:"Video demo",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0},controls:["play","progress","volume","captions","settings","fullscreen","fast-forward"]});plyr.loadSprite("dist/demo.svg");for(var s=i[0],o=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),a=window.history&&window.history.pushState,c=o.length-1;c>=0;c--)o[c].addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),a&&history.pushState({type:e},"","#"+e)});if(window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),a){var l=!r.length;l&&(r=n.video),r in n&&history.replaceState({type:r},"",l?"":"#"+r),r!==n.video&&t(r,!0)}}(),document.domain.indexOf("plyr.io")>-1&&(!function(e,t,i,s,o,n,r){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,n=t.createElement(i),r=t.getElementsByTagName(i)[0],n.async=1,n.src=s,r.parentNode.insertBefore(n,r)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40881672-11","auto"),ga("send","pageview")); \ No newline at end of file diff --git a/dist/plyr.js b/dist/plyr.js index abdfbac0..d2391bb1 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,a,o=navigator.userAgent,r=navigator.appName,l=""+parseFloat(navigator.appVersion),s=parseInt(navigator.appVersion,10),i=!1,u=!1,c=!1,p=!1;return navigator.appVersion.indexOf("Windows NT")!==-1&&navigator.appVersion.indexOf("rv:11")!==-1?(i=!0,r="IE",l="11"):(n=o.indexOf("MSIE"))!==-1?(i=!0,r="IE",l=o.substring(n+5)):(n=o.indexOf("Chrome"))!==-1?(c=!0,r="Chrome",l=o.substring(n+7)):(n=o.indexOf("Safari"))!==-1?(p=!0,r="Safari",l=o.substring(n+7),(n=o.indexOf("Version"))!==-1&&(l=o.substring(n+8))):(n=o.indexOf("Firefox"))!==-1?(u=!0,r="Firefox",l=o.substring(n+8)):(e=o.lastIndexOf(" ")+1)<(n=o.lastIndexOf("/"))&&(r=o.substring(e,n),l=o.substring(n+1),r.toLowerCase()===r.toUpperCase()&&(r=navigator.appName)),(a=l.indexOf(";"))!==-1&&(l=l.substring(0,a)),(a=l.indexOf(" "))!==-1&&(l=l.substring(0,a)),s=parseInt(""+l,10),isNaN(s)&&(l=""+parseFloat(navigator.appVersion),s=parseInt(navigator.appVersion,10)),{name:r,version:s,isIE:i,isFirefox:u,isChrome:c,isSafari:p,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function a(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var a=t.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a)}}function o(e,t){return Array.prototype.indexOf&&e.indexOf(t)!==-1}function r(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function l(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var a=n>0?t.cloneNode(!0):t,o=e[n],r=o.parentNode,l=o.nextSibling;return a.appendChild(o),l?r.insertBefore(a,l):r.appendChild(a),a}}function s(e){e&&e.parentNode.removeChild(e)}function i(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,M.boolean(t[n])&&t[n]?"":t[n])}function c(e,n,a){var o=t.createElement(e);u(o,a),i(n,o)}function p(e){return e.replace(".","")}function d(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function y(e,n){var a=Element.prototype,o=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return o.call(e,n)}function f(e,t,n,a,o){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},o)}function b(e,t,n,a,o){var r=t.split(" ");if(M.boolean(o)||(o=!1),e instanceof NodeList)for(var l=0;l','',''+S.i18n.play+"",""),e.push('
    '),o(S.controls,"restart")&&e.push('"),o(S.controls,"rewind")&&e.push('"),o(S.controls,"play")&&e.push('",'"),o(S.controls,"fast-forward")&&e.push('"),o(S.controls,"progress")&&(e.push('','','','','',"0% "+S.i18n.buffered,""),S.tooltips.seek&&e.push('00:00'),e.push("")),o(S.controls,"current-time")&&e.push('',''+S.i18n.currentTime+"",'00:00',""),o(S.controls,"duration")&&e.push('',''+S.i18n.duration+"",'00:00',""),o(S.controls,"mute")&&e.push('"),o(S.controls,"volume")&&e.push('','",'','',""),o(S.controls,"captions")&&e.push('"),o(S.controls,"settings")&&e.push('
    ','",'","
    "),o(S.controls,"pip")&&N.pip&&e.push('"),o(S.controls,"airplay")&&N.airplay&&e.push('"),o(S.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function R(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?['',''+t+"",""].join(""):""}function a(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"}}if(!M.object(Je.quality)&&(Je.quality={available:e,current:t},M.array(e)&&e.length)){var o=e.filter(function(e){return["tiny","small"].indexOf(e)===-1}),r=o.map(function(e){return["
  • ",'","
  • "].join("")});r.unshift(['
  • ','","
  • "].join("")),console.warn(r)}}function D(){if(Je.supported.full&&("audio"!==Je.type||S.fullscreen.allowAudio)&&S.fullscreen.enabled){var e=N.fullscreen;e||S.fullscreen.fallback&&!K()?(Ze((e?"Native":"Fallback")+" fullscreen enabled"),d(Je.container,S.classes.fullscreen.enabled,!0)):Ze("Fullscreen not supported and fallback disabled"),Je.buttons&&Je.buttons.fullscreen&&_(Je.buttons.fullscreen,!1),Q()}}function H(e){M.event(e)&&(e=e.target),e.activeCues[0]&&"text"in e.activeCues[0]?W(e.activeCues[0].getCueAsHTML()):W()}function V(){if("video"===Je.type){U(S.selectors.captions)||Je.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Je.usingTextTracks=!1,Je.media.textTracks&&(Je.usingTextTracks=!0);var e=[],t="";if(Je.media.childNodes.forEach(function(t){"track"===t.nodeName.toLowerCase()&&("captions"!==t.kind&&"subtitles"!==t.kind||e.push(t.getAttribute("src")))}),Je.captionExists=!0,0===e.length?(Je.captionExists=!1,Ze("No caption track found")):S.captions.selectedIndex+1>e.length?(Je.captionExists=!1,Ze("Caption index out of bound")):(t=e[S.captions.selectedIndex],Ze("Caption track found; URI: "+t)),Je.captionExists){var n=Je.media.textTracks;if([].forEach.call(n,function(e){v(e,"cuechange",H),e.mode="hidden"}),B(Je),(Je.browser.isIE&&Je.browser.version>=10||Je.browser.isFirefox&&Je.browser.version>=31)&&(Ze("Detected browser with known TextTrack issues - using manual fallback"),Je.usingTextTracks=!1),Je.usingTextTracks){Ze("TextTracks supported");var a=n[S.captions.selectedIndex];"captions"!==a.kind&&"subtitles"!==a.kind||(g(a,"cuechange",H),a.activeCues&&a.activeCues.length>0&&H(a))}else if(Ze("TextTracks not supported so rendering captions manually"),Je.currentCaption="",Je.captions=[],""!==t){var o=new XMLHttpRequest;o.onreadystatechange=function(){if(4===o.readyState)if(200===o.status){var e=o.responseText,t="\r\n";e.indexOf(t+t)===-1&&(t=e.indexOf("\r\r")!==-1?"\r":"\n");var n=e.split(t+t);Je.captions=n.map(function(e){var n=e.split(t),a=0;return n[a].indexOf(":")!==-1&&(a=1),[n[a],n[a+1]]}),Je.captions.shift(),Ze("Successfully loaded the caption file via AJAX")}else et(S.logPrefix+"There was a problem loading the caption file via AJAX")},o.open("get",t,!0),o.send()}}else d(Je.container,S.classes.captions.enabled)}}function W(e){var n=U(S.selectors.captions),a=t.createElement("span");n.innerHTML="",M.undefined(e)&&(e=""),M.string(e)?a.innerHTML=e.trim():a.appendChild(e),n.appendChild(a);n.offsetHeight}function Y(e){function t(e,t){var n=[];n=e.split(" --> ");for(var a=0;aJe.captions.length-1){Je.subcount=Je.captions.length-1;break}Je.media.currentTime.toFixed(1)>=n(Je.captions[Je.subcount][0])&&Je.media.currentTime.toFixed(1)<=a(Je.captions[Je.subcount][0])?(Je.currentCaption=Je.captions[Je.subcount][1],W(Je.currentCaption)):W()}}function B(){if(Je.buttons.captions){d(Je.container,S.classes.captions.enabled,!0);var e=Je.storage.captionsEnabled;M.boolean(e)||(e=S.captions.defaultActive),e&&(d(Je.container,S.classes.captions.active,!0),_(Je.buttons.captions,!0))}}function X(e){return Je.container.querySelectorAll(e)}function U(e){return X(e)[0]}function K(){try{return e.self!==e.top}catch(e){return!0}}function Q(){function e(e){9===e.which&&Je.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=X("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Je.container,"keydown",e)}function $(e,t){if(M.string(t))c(e,Je.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Je.media,t[n])}function J(){if(S.loadSprite){var e=O();e.absolute?(Ze("AJAX loading absolute SVG sprite"+(Je.browser.isIE?" (due to IE)":"")),E(e.url,"sprite-plyr")):Ze("Sprite will be used as external resource directly")}var n=S.html;Ze("Injecting custom controls"),n||(n=j()),n=r(n,"{seektime}",S.seekTime),n=r(n,"{speed}",z()),n=r(n,"{lang}","English"),Je.id=Math.floor(1e4*Math.random()),n=r(n,"{id}",Je.id);var a;if(M.string(S.selectors.controls.container)&&(a=t.querySelector(S.selectors.controls.container)),M.htmlElement(a)||(a=Je.container),a.insertAdjacentHTML("beforeend",n),S.tooltips.controls)for(var o=X([S.selectors.controls.wrapper," ",S.selectors.labels," .",S.classes.hidden].join("")),l=o.length-1;l>=0;l--){var s=o[l];d(s,S.classes.hidden,!1),d(s,S.classes.tooltip,!0)}}function z(){return S.currentSpeed.toFixed(1).toString().replace(".0","")+"×"}function G(){try{return Je.controls=U(S.selectors.controls.wrapper),Je.buttons={seek:U(S.selectors.buttons.seek),play:X(S.selectors.buttons.play),pause:U(S.selectors.buttons.pause),restart:U(S.selectors.buttons.restart),rewind:U(S.selectors.buttons.rewind),forward:U(S.selectors.buttons.forward),fullscreen:U(S.selectors.buttons.fullscreen),settings:U(S.selectors.buttons.settings),pip:U(S.selectors.buttons.pip),speed:t.querySelectorAll(S.selectors.buttons.speed),loopin:t.querySelectorAll(S.selectors.buttons.loopin),loopout:t.querySelectorAll(S.selectors.buttons.loopout),loopall:t.querySelectorAll(S.selectors.buttons.loopall),loopclear:t.querySelectorAll(S.selectors.buttons.loopclear)},Je.buttons.mute=U(S.selectors.buttons.mute),Je.buttons.captions=U(S.selectors.buttons.captions),Je.progress={container:U(S.selectors.progress.container)},Je.progress.buffer=function(){var e=U(S.selectors.progress.buffer);return{bar:e,text:M.htmlElement(e)&&e.getElementsByTagName("span")[0]}}(),Je.progress.played=U(S.selectors.progress.played),Je.progress.tooltip=Je.progress.container&&Je.progress.container.querySelector("."+S.classes.tooltip),Je.volume={input:U(S.selectors.volume.input),display:U(S.selectors.volume.display)},Je.duration=U(S.selectors.duration),Je.currentTime=U(S.selectors.currentTime),Je.seekTime=X(S.selectors.seekTime),!0}catch(e){return et("It looks like there is a problem with your controls HTML",e),ee(!0),!1}}function Z(){d(Je.container,S.selectors.container.replace(".",""),Je.supported.full)}function ee(e){e&&o(S.types.html5,Je.type)?Je.media.setAttribute("controls",""):Je.media.removeAttribute("controls")}function te(e){var t=S.i18n.play;if(M.string(S.title)&&S.title.length&&(t+=", "+S.title,Je.container.setAttribute("aria-label",S.title)),Je.supported.full&&Je.buttons.play)for(var n=Je.buttons.play.length-1;n>=0;n--)Je.buttons.play[n].setAttribute("aria-label",t);M.htmlElement(e)&&e.setAttribute("title",S.i18n.frameTitle.replace("{title}",S.title))}function ne(){var t=null;Je.storage={},N.storage&&S.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(S.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?ae({volume:parseFloat(t)}):Je.storage=JSON.parse(t)))}function ae(t){N.storage&&S.storage.enabled&&(x(Je.storage,t),e.localStorage.setItem(S.storage.key,JSON.stringify(Je.storage)))}function oe(){if(!Je.media)return void et("No media element found!");if(Je.supported.full&&(d(Je.container,S.classes.type.replace("{0}",Je.type),!0),o(S.types.embed,Je.type)&&d(Je.container,S.classes.type.replace("{0}","video"),!0),d(Je.container,S.classes.pip.enabled,N.pip),d(Je.container,S.classes.stopped,S.autoplay),d(Je.container,S.classes.isIos,Je.browser.isIos),d(Je.container,S.classes.isTouch,Je.browser.isTouch),"video"===Je.type)){var e=t.createElement("div");e.setAttribute("class",S.classes.videoWrapper),l(Je.media,e),Je.videoContainer=e}o(S.types.embed,Je.type)&&re()}function re(){var n,o=t.createElement("div"),r=Je.type+"-"+Math.floor(1e4*Math.random());switch(Je.type){case"youtube":n=w(Je.embedId);break;case"vimeo":n=T(Je.embedId);break;default:n=Je.embedId}for(var l=X('[id^="'+Je.type+'-"]'),i=l.length-1;i>=0;i--)s(l[i]);if(d(Je.media,S.classes.videoWrapper,!0),d(Je.media,S.classes.embedWrapper,!0),"youtube"===Je.type)Je.media.appendChild(o),o.setAttribute("id",r),M.object(e.YT)?se(n,o):(a(S.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){se(n,o)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Je.type)if(Je.supported.full?Je.media.appendChild(o):o=Je.media,o.setAttribute("id",r),M.object(e.Vimeo))ie(n,o);else{a(S.urls.vimeo.api);var c=e.setInterval(function(){M.object(e.Vimeo)&&(e.clearInterval(c),ie(n,o))},50)}else if("soundcloud"===Je.type){var p=t.createElement("iframe");p.loaded=!1,g(p,"load",function(){p.loaded=!0}),u(p,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+n,id:r}),o.appendChild(p),Je.media.appendChild(o),e.SC||a(S.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&p.loaded&&(e.clearInterval(m),ue.call(p))},50)}}function le(){Je.supported.full&&(Ke(),Qe()),te(U("iframe"))}function se(t,n){Je.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:S.autoplay?1:0,controls:Je.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:S.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){C(Je.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;Je.media.play=function(){n.playVideo(),Je.media.paused=!1},Je.media.pause=function(){n.pauseVideo(),Je.media.paused=!0},Je.media.stop=function(){n.stopVideo(),Je.media.paused=!0},Je.media.duration=n.getDuration(),Je.media.paused=!0,Je.media.currentTime=0,Je.media.muted=n.isMuted();var a=n.getPlaybackRate(),o=n.getAvailablePlaybackRates();console.warn(a,o),S.title=n.getVideoData().title,Je.supported.full&&Je.media.querySelector("iframe").setAttribute("tabindex","-1"),le(),C(Je.media,"timeupdate"),C(Je.media,"durationchange"),e.clearInterval(ze.buffering),ze.buffering=e.setInterval(function(){Je.media.buffered=n.getVideoLoadedFraction(),(null===Je.media.lastBuffered||Je.media.lastBuffered=n)return;S.loopout=n;break;case"loopall":S.loopin=0,S.loopout=Je.media.duration-2;break;default:S.loopin=0,S.loopout=null}S.loop=M.number(S.loopin)&&M.number(S.loopout);var a=Me(S.loopin,t.querySelector('[data-loop__value="loopin"]')),o=M.number(S.loopout)?Me(S.loopout,t.querySelector('[data-loop__value="loopout"]')):null;S.loop?t.querySelector('[data-menu="loop"]').innerHTML=a+" - "+o:t.querySelector('[data-menu="loop"]').innerHTML=S.i18n.loopclear}function ye(e){if(M.undefined(e)&&(e=Je.storage.speed||S.defaultSpeed),!M.array(S.speeds))return void et("Invalid speeds format");if(!M.number(e)){var n=S.speeds.indexOf(S.currentSpeed);if(n!==-1){var a=n+1;a>=S.speeds.length&&(a=0),e=S.speeds[a]}else e=S.defaultSpeed}S.currentSpeed=e,Je.media.playbackRate=e,ae({speed:e}),t.querySelector('[data-menu="speed"]').innerHTML=z()}function fe(e){M.number(e)||(e=S.seekTime),ge(Je.media.currentTime-e)}function be(e){M.number(e)||(e=S.seekTime),ge(Je.media.currentTime+e)}function ge(e){var t=0,n=Je.media.paused,a=ve();M.number(e)?t=e:M.event(e)&&o(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Oe(t);try{Je.media.currentTime=t.toFixed(4)}catch(e){}if(o(S.types.embed,Je.type)){switch(Je.type){case"youtube":Je.embed.seekTo(t);break;case"vimeo":Je.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Je.embed.seekTo(1e3*t)}n&&pe(),C(Je.media,"timeupdate"),Je.media.seeking=!0,C(Je.media,"seeking")}Ze("Seeking to "+Je.media.currentTime+" seconds"),Y(t)}function ve(){var e=parseInt(S.duration),t=0;return null===Je.media.duration||isNaN(Je.media.duration)||(t=Je.media.duration),isNaN(e)?t:e}function he(){d(Je.container,S.classes.playing,!Je.media.paused),d(Je.container,S.classes.stopped,Je.media.paused),Re(Je.media.paused)}function _e(){P={x:e.pageXOffset||0,y:e.pageYOffset||0}}function ke(){e.scrollTo(P.x,P.y)}function xe(e){var n=N.fullscreen;if(n){if(!e||e.type!==I.eventType)return I.isFullScreen(Je.container)?I.cancelFullScreen():(_e(),I.requestFullScreen(Je.container)),void(Je.isFullscreen=I.isFullScreen(Je.container));Je.isFullscreen=I.isFullScreen(Je.container)}else Je.isFullscreen=!Je.isFullscreen,t.body.style.overflow=Je.isFullscreen?"hidden":"";d(Je.container,S.classes.fullscreen.active,Je.isFullscreen),Q(Je.isFullscreen),Je.buttons&&Je.buttons.fullscreen&&_(Je.buttons.fullscreen,Je.isFullscreen),C(Je.container,Je.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Je.isFullscreen&&n&&ke()}function we(e){if(M.boolean(e)||(e=!Je.media.muted),_(Je.buttons.mute,e),Je.media.muted=e,0===Je.media.volume&&Te(S.volume),o(S.types.embed,Je.type)){switch(Je.type){case"youtube":Je.embed[Je.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Je.embed.setVolume(Je.media.muted?0:parseFloat(S.volume/S.volumeMax)); -}C(Je.media,"volumechange")}}function Te(e){var t=S.volumeMax,n=S.volumeMin;if(M.undefined(e)&&(e=Je.storage.volume),(null===e||isNaN(e))&&(e=S.volume),e>t&&(e=t),e0&&we()}function Se(e){var t=Je.media.muted?0:Je.media.volume*S.volumeMax;M.number(e)||(e=S.volumeStep),Te(t+e)}function Ee(e){var t=Je.media.muted?0:Je.media.volume*S.volumeMax;M.number(e)||(e=S.volumeStep),Te(t-e)}function Ae(){var e=Je.media.muted?0:Je.media.volume*S.volumeMax;Je.supported.full&&(Je.volume.input&&(Je.volume.input.value=e),Je.volume.display&&(Je.volume.display.value=e)),ae({volume:e}),d(Je.container,S.classes.muted,0===e),Je.supported.full&&Je.buttons.mute&&_(Je.buttons.mute,0===e)}function Ce(e){Je.supported.full&&Je.buttons.captions&&(M.boolean(e)||(e=Je.container.className.indexOf(S.classes.captions.active)===-1),Je.captionsEnabled=e,_(Je.buttons.captions,Je.captionsEnabled),d(Je.container,S.classes.captions.active,Je.captionsEnabled),C(Je.container,Je.captionsEnabled?"captionsenabled":"captionsdisabled",!0),ae({captionsEnabled:Je.captionsEnabled}))}function Fe(e){S.captions.selectedIndex=e,W(),V()}function Ie(e){var t="waiting"===e.type;clearTimeout(ze.loading),ze.loading=setTimeout(function(){d(Je.container,S.classes.loading,t),Re(t)},t?250:0)}function Pe(e){if(Je.supported.full){var t=Je.progress.played,n=0,a=ve();if(e)switch(e.type){case"timeupdate":case"seeking":if(Je.controls.pressed)return;n=k(Je.media.currentTime,a),"timeupdate"===e.type&&Je.buttons.seek&&(Je.buttons.seek.value=n);break;case"playing":case"progress":t=Je.progress.buffer,n=function(){var e=Je.media.buffered;return e&&e.length?k(e.end(0),a):M.number(e)?100*e:0}()}M.number(S.loopin)&&M.number(S.loopout)&&Je.media.currentTime>=S.loopout&&ge(S.loopin),qe(t,n)}}function qe(e,t){if(Je.supported.full){if(M.undefined(t)&&(t=0),M.undefined(e)){if(!Je.progress||!Je.progress.buffer)return;e=Je.progress.buffer}M.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Me(e,t){if(t){isNaN(e)&&(e=0),Je.secs=parseInt(e%60),Je.mins=parseInt(e/60%60),Je.hours=parseInt(e/60/60%60);var n=parseInt(ve()/60/60%60)>0;Je.secs=("0"+Je.secs).slice(-2),Je.mins=("0"+Je.mins).slice(-2);var a=(n?Je.hours+":":"")+Je.mins+":"+Je.secs;return t.innerHTML=a,a}}function Ne(){if(Je.supported.full){var e=ve()||0;!Je.duration&&S.displayDuration&&Je.media.paused&&Me(e,Je.currentTime),Je.duration&&Me(e,Je.duration),je()}}function Le(e){Me(Je.media.currentTime,Je.currentTime),e&&"timeupdate"===e.type&&Je.media.seeking||Pe(e)}function Oe(e){M.number(e)||(e=0);var t=ve(),n=k(e,t);Je.progress&&Je.progress.played&&(Je.progress.played.value=n),Je.buttons&&Je.buttons.seek&&(Je.buttons.seek.value=n)}function je(e){var t=ve();if(S.tooltips.seek&&Je.progress.container&&0!==t){var n=Je.progress.container.getBoundingClientRect(),a=0,r=S.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Je.progress.tooltip,r))return;a=Je.progress.tooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Me(t/100*a,Je.progress.tooltip),Je.progress.tooltip.style.left=a+"%",e&&o(["mouseenter","mouseleave"],e.type)&&d(Je.progress.tooltip,r,"mouseenter"===e.type)}}function Re(t){if(S.hideControls&&"audio"!==Je.type){var n=0,a=!1,r=t,l=m(Je.container,S.classes.loading);if(M.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,r=o(["mousemove","touchstart","mouseenter","focus"],t.type),o(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):r=m(Je.container,S.classes.hideControls)),e.clearTimeout(ze.hover),r||Je.media.paused||l){if(d(Je.container,S.classes.hideControls,!1),Je.media.paused||l)return;Je.browser.isTouch&&(n=3e3)}r&&Je.media.paused||(ze.hover=e.setTimeout(function(){(!Je.controls.pressed&&!Je.controls.hover||a)&&d(Je.container,S.classes.hideControls,!0)},n))}}function De(e){if(!M.undefined(e))return void He(e);var t;switch(Je.type){case"youtube":t=Je.embed.getVideoUrl();break;case"vimeo":Je.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Je.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Je.media.currentSrc}return t||""}function He(e){function n(){if(Je.embed=null,s(Je.media),"video"===Je.type&&Je.videoContainer&&s(Je.videoContainer),Je.container&&Je.container.removeAttribute("class"),"type"in e&&(Je.type=e.type,"video"===Je.type)){var n=e.sources[0];"type"in n&&o(S.types.embed,n.type)&&(Je.type=n.type)}switch(Je.supported=A(Je.type),Je.type){case"video":Je.media=t.createElement("video");break;case"audio":Je.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Je.media=t.createElement("div"),Je.embedId=e.sources[0].src}i(Je.container,Je.media),M.boolean(e.autoplay)&&(S.autoplay=e.autoplay),o(S.types.html5,Je.type)&&(S.crossorigin&&Je.media.setAttribute("crossorigin",""),S.autoplay&&Je.media.setAttribute("autoplay",""),"poster"in e&&Je.media.setAttribute("poster",e.poster),S.loop&&Je.media.setAttribute("loop","")),d(Je.container,S.classes.fullscreen.active,Je.isFullscreen),d(Je.container,S.classes.captions.active,Je.captionsEnabled),Z(),o(S.types.html5,Je.type)&&$("source",e.sources),oe(),o(S.types.html5,Je.type)&&("tracks"in e&&$("track",e.tracks),Je.media.load()),(o(S.types.html5,Je.type)||o(S.types.embed,Je.type)&&!Je.supported.full)&&(Ke(),Qe()),S.title=e.title,te()}return M.object(e)&&"sources"in e&&e.sources.length?(d(Je.container,S.classes.ready,!1),pe(),Oe(),qe(),Be(),void Xe(n,!1)):void et("Invalid source format")}function Ve(e){"video"===Je.type&&Je.media.setAttribute("poster",e)}function We(){function n(){var e=de(),t=Je.buttons[e?"play":"pause"],n=Je.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,S.classes.tabFocus);setTimeout(function(){n.focus(),a&&(d(t,S.classes.tabFocus,!1),d(n,S.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function r(e){return e.keyCode?e.keyCode:e.which}function l(e){for(var t in Je.buttons){var n=Je.buttons[t];if(M.nodeList(n))for(var a=0;a0)&&(t?Ee(n):Se(n)),(e.deltaY>0||e.deltaX<0)&&(t?Se(n):Ee(n))})}function Ye(){if(g(Je.media,"timeupdate seeking",Le),g(Je.media,"timeupdate",Y),g(Je.media,"durationchange loadedmetadata",Ne),g(Je.media,"ended",function(){"video"===Je.type&&S.showPosterOnEnd&&("video"===Je.type&&W(),ge(),Je.media.load())}),g(Je.media,"progress playing",Pe),g(Je.media,"volumechange",Ae),g(Je.media,"play pause ended",he),g(Je.media,"waiting canplay seeked",Ie),S.clickToPlay&&"audio"!==Je.type){var e=U("."+S.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){S.hideControls&&Je.browser.isTouch&&!Je.media.paused||(Je.media.paused?ce():Je.media.ended?(ge(),ce()):pe())})}S.disableContextMenu&&g(Je.media,"contextmenu",function(e){e.preventDefault()}),g(Je.media,S.events.concat(["keyup","keydown"]).join(" "),function(e){C(Je.container,e.type,!0)})}function Be(){if(o(S.types.html5,Je.type)){for(var e=Je.media.querySelectorAll("source"),t=0;t=0;n--){var a=n>0?t.cloneNode(!0):t,o=e[n],r=o.parentNode,s=o.nextSibling;return a.appendChild(o),s?r.insertBefore(a,s):r.appendChild(a),a}}function l(e){e&&e.parentNode.removeChild(e)}function i(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,N.boolean(t[n])&&t[n]?"":t[n])}function c(e,n,a){var o=t.createElement(e);u(o,a),i(n,o)}function p(e){return e.replace(".","")}function d(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function y(e,n){var a=Element.prototype,o=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return o.call(e,n)}function f(e,t,n,a,o){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},o)}function b(e,t,n,a,o){var r=t.split(" ");if(N.boolean(o)||(o=!1),e instanceof NodeList)for(var s=0;s','',''+S.i18n.play+"",""),e.push('
    '),o(S.controls,"restart")&&e.push('"),o(S.controls,"rewind")&&e.push('"),o(S.controls,"play")&&e.push('",'"),o(S.controls,"fast-forward")&&e.push('"),o(S.controls,"progress")&&(e.push('','','','','',"0% "+S.i18n.buffered,""),S.tooltips.seek&&e.push('00:00'),e.push("")),o(S.controls,"current-time")&&e.push('',''+S.i18n.currentTime+"",'00:00',""),o(S.controls,"duration")&&e.push('',''+S.i18n.duration+"",'00:00',""),o(S.controls,"mute")&&e.push('"),o(S.controls,"volume")&&e.push('','",'','',""),o(S.controls,"captions")&&e.push('"),o(S.controls,"settings")&&e.push('
    ','",'","
    "),o(S.controls,"pip")&&q.pip&&e.push('"),o(S.controls,"airplay")&&q.airplay&&e.push('"),o(S.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function R(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?['',''+t+"",""].join(""):""}function a(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"}}if(!N.object(Je.quality)&&(Je.quality={available:e,current:t},N.array(e)&&e.length)){var o=e.filter(function(e){return["tiny","small"].indexOf(e)===-1}),r=o.map(function(e){return["
  • ",'","
  • "].join("")});r.unshift(['
  • ','","
  • "].join("")),console.warn(r)}}function D(){if(Je.supported.full&&("audio"!==Je.type||S.fullscreen.allowAudio)&&S.fullscreen.enabled){var e=q.fullscreen;e||S.fullscreen.fallback&&!K()?(Ze((e?"Native":"Fallback")+" fullscreen enabled"),d(Je.container,S.classes.fullscreen.enabled,!0)):Ze("Fullscreen not supported and fallback disabled"),Je.buttons&&Je.buttons.fullscreen&&_(Je.buttons.fullscreen,!1),Q()}}function H(e){N.event(e)&&(e=e.target),e.activeCues[0]&&"text"in e.activeCues[0]?W(e.activeCues[0].getCueAsHTML()):W()}function V(){if("video"===Je.type){U(S.selectors.captions)||Je.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Je.usingTextTracks=!1,Je.media.textTracks&&(Je.usingTextTracks=!0);var e=[],t="";if(Je.media.childNodes.forEach(function(t){"track"===t.nodeName.toLowerCase()&&("captions"!==t.kind&&"subtitles"!==t.kind||e.push(t.getAttribute("src")))}),Je.captionExists=!0,0===e.length?(Je.captionExists=!1,Ze("No caption track found")):S.captions.selectedIndex+1>e.length?(Je.captionExists=!1,Ze("Caption index out of bound")):(t=e[S.captions.selectedIndex],Ze("Caption track found; URI: "+t)),Je.captionExists){var n=Je.media.textTracks;if([].forEach.call(n,function(e){v(e,"cuechange",H),e.mode="hidden"}),B(Je),(Je.browser.isIE&&Je.browser.version>=10||Je.browser.isFirefox&&Je.browser.version>=31)&&(Ze("Detected browser with known TextTrack issues - using manual fallback"),Je.usingTextTracks=!1),Je.usingTextTracks){Ze("TextTracks supported");var a=n[S.captions.selectedIndex];"captions"!==a.kind&&"subtitles"!==a.kind||(g(a,"cuechange",H),a.activeCues&&a.activeCues.length>0&&H(a))}else if(Ze("TextTracks not supported so rendering captions manually"),Je.currentCaption="",Je.captions=[],""!==t){var o=new XMLHttpRequest;o.onreadystatechange=function(){if(4===o.readyState)if(200===o.status){var e=o.responseText,t="\r\n";e.indexOf(t+t)===-1&&(t=e.indexOf("\r\r")!==-1?"\r":"\n");var n=e.split(t+t);Je.captions=n.map(function(e){var n=e.split(t),a=0;return n[a].indexOf(":")!==-1&&(a=1),[n[a],n[a+1]]}),Je.captions.shift(),Ze("Successfully loaded the caption file via AJAX")}else et(S.logPrefix+"There was a problem loading the caption file via AJAX")},o.open("get",t,!0),o.send()}}else d(Je.container,S.classes.captions.enabled)}}function W(e){var n=U(S.selectors.captions),a=t.createElement("span");n.innerHTML="",N.undefined(e)&&(e=""),N.string(e)?a.innerHTML=e.trim():a.appendChild(e),n.appendChild(a);n.offsetHeight}function Y(e){function t(e,t){var n=[];n=e.split(" --> ");for(var a=0;aJe.captions.length-1){Je.subcount=Je.captions.length-1;break}Je.media.currentTime.toFixed(1)>=n(Je.captions[Je.subcount][0])&&Je.media.currentTime.toFixed(1)<=a(Je.captions[Je.subcount][0])?(Je.currentCaption=Je.captions[Je.subcount][1],W(Je.currentCaption)):W()}}function B(){if(Je.buttons.captions){d(Je.container,S.classes.captions.enabled,!0);var e=Je.storage.captionsEnabled;N.boolean(e)||(e=S.captions.defaultActive),e&&(d(Je.container,S.classes.captions.active,!0),_(Je.buttons.captions,!0))}}function X(e){return Je.container.querySelectorAll(e)}function U(e){return X(e)[0]}function K(){try{return e.self!==e.top}catch(e){return!0}}function Q(){function e(e){9===e.which&&Je.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=X("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Je.container,"keydown",e)}function $(e,t){if(N.string(t))c(e,Je.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Je.media,t[n])}function J(){if(S.loadSprite){var e=O();e.absolute?(Ze("AJAX loading absolute SVG sprite"+(Je.browser.isIE?" (due to IE)":"")),E(e.url,"sprite-plyr")):Ze("Sprite will be used as external resource directly")}var n=S.html;Ze("Injecting custom controls"),n||(n=j()),n=r(n,"{seektime}",S.seekTime),n=r(n,"{speed}",z()),n=r(n,"{lang}","English"),Je.id=Math.floor(1e4*Math.random()),n=r(n,"{id}",Je.id);var a;if(N.string(S.selectors.controls.container)&&(a=t.querySelector(S.selectors.controls.container)),N.htmlElement(a)||(a=Je.container),a.insertAdjacentHTML("beforeend",n),S.tooltips.controls)for(var o=X([S.selectors.controls.wrapper," ",S.selectors.labels," .",S.classes.hidden].join("")),s=o.length-1;s>=0;s--){var l=o[s];d(l,S.classes.hidden,!1),d(l,S.classes.tooltip,!0)}}function z(){return S.currentSpeed.toFixed(1).toString().replace(".0","")+"×"}function G(){try{return Je.controls=U(S.selectors.controls.wrapper),Je.buttons={seek:U(S.selectors.buttons.seek),play:X(S.selectors.buttons.play),pause:U(S.selectors.buttons.pause),restart:U(S.selectors.buttons.restart),rewind:U(S.selectors.buttons.rewind),forward:U(S.selectors.buttons.forward),fullscreen:U(S.selectors.buttons.fullscreen),settings:U(S.selectors.buttons.settings),pip:U(S.selectors.buttons.pip),speed:t.querySelectorAll(S.selectors.buttons.speed),loop:t.querySelectorAll(S.selectors.buttons.loop)},Je.buttons.mute=U(S.selectors.buttons.mute),Je.buttons.captions=U(S.selectors.buttons.captions),Je.progress={container:U(S.selectors.progress.container)},Je.progress.buffer=function(){var e=U(S.selectors.progress.buffer);return{bar:e,text:N.htmlElement(e)&&e.getElementsByTagName("span")[0]}}(),Je.progress.played=U(S.selectors.progress.played),Je.progress.tooltip=Je.progress.container&&Je.progress.container.querySelector("."+S.classes.tooltip),Je.volume={input:U(S.selectors.volume.input),display:U(S.selectors.volume.display)},Je.duration=U(S.selectors.duration),Je.currentTime=U(S.selectors.currentTime),Je.seekTime=X(S.selectors.seekTime),!0}catch(e){return et("It looks like there is a problem with your controls HTML",e),ee(!0),!1}}function Z(){d(Je.container,S.selectors.container.replace(".",""),Je.supported.full)}function ee(e){e&&o(S.types.html5,Je.type)?Je.media.setAttribute("controls",""):Je.media.removeAttribute("controls")}function te(e){var t=S.i18n.play;if(N.string(S.title)&&S.title.length&&(t+=", "+S.title,Je.container.setAttribute("aria-label",S.title)),Je.supported.full&&Je.buttons.play)for(var n=Je.buttons.play.length-1;n>=0;n--)Je.buttons.play[n].setAttribute("aria-label",t);N.htmlElement(e)&&e.setAttribute("title",S.i18n.frameTitle.replace("{title}",S.title))}function ne(){var t=null;Je.storage={},q.storage&&S.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(S.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?ae({volume:parseFloat(t)}):Je.storage=JSON.parse(t)))}function ae(t){q.storage&&S.storage.enabled&&(x(Je.storage,t),e.localStorage.setItem(S.storage.key,JSON.stringify(Je.storage)))}function oe(){if(!Je.media)return void et("No media element found!");if(Je.supported.full&&(d(Je.container,S.classes.type.replace("{0}",Je.type),!0),o(S.types.embed,Je.type)&&d(Je.container,S.classes.type.replace("{0}","video"),!0),d(Je.container,S.classes.pip.enabled,q.pip),d(Je.container,S.classes.stopped,S.autoplay),d(Je.container,S.classes.isIos,Je.browser.isIos),d(Je.container,S.classes.isTouch,Je.browser.isTouch),"video"===Je.type)){var e=t.createElement("div");e.setAttribute("class",S.classes.videoWrapper),s(Je.media,e),Je.videoContainer=e}o(S.types.embed,Je.type)&&re()}function re(){var n,o=t.createElement("div"),r=Je.type+"-"+Math.floor(1e4*Math.random());switch(Je.type){case"youtube":n=w(Je.embedId);break;case"vimeo":n=T(Je.embedId);break;default:n=Je.embedId}for(var s=X('[id^="'+Je.type+'-"]'),i=s.length-1;i>=0;i--)l(s[i]);if(d(Je.media,S.classes.videoWrapper,!0),d(Je.media,S.classes.embedWrapper,!0),"youtube"===Je.type)Je.media.appendChild(o),o.setAttribute("id",r),N.object(e.YT)?le(n,o):(a(S.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){le(n,o)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Je.type)if(Je.supported.full?Je.media.appendChild(o):o=Je.media,o.setAttribute("id",r),N.object(e.Vimeo))ie(n,o);else{a(S.urls.vimeo.api);var c=e.setInterval(function(){N.object(e.Vimeo)&&(e.clearInterval(c),ie(n,o))},50)}else if("soundcloud"===Je.type){var p=t.createElement("iframe");p.loaded=!1,g(p,"load",function(){p.loaded=!0}),u(p,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+n,id:r}),o.appendChild(p),Je.media.appendChild(o),e.SC||a(S.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&p.loaded&&(e.clearInterval(m),ue.call(p))},50)}}function se(){Je.supported.full&&(Ke(),Qe()),te(U("iframe"))}function le(t,n){Je.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:S.autoplay?1:0,controls:Je.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:S.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){C(Je.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;Je.media.play=function(){n.playVideo(),Je.media.paused=!1},Je.media.pause=function(){n.pauseVideo(),Je.media.paused=!0},Je.media.stop=function(){n.stopVideo(),Je.media.paused=!0},Je.media.duration=n.getDuration(),Je.media.paused=!0,Je.media.currentTime=0,Je.media.muted=n.isMuted();var a=n.getPlaybackRate(),o=n.getAvailablePlaybackRates();console.warn(a,o),S.title=n.getVideoData().title,Je.supported.full&&Je.media.querySelector("iframe").setAttribute("tabindex","-1"),se(),C(Je.media,"timeupdate"),C(Je.media,"durationchange"),e.clearInterval(ze.buffering),ze.buffering=e.setInterval(function(){Je.media.buffered=n.getVideoLoadedFraction(),(null===Je.media.lastBuffered||Je.media.lastBuffered=n)return;S.loopout=n;break;case"loopall":S.loopin=0,S.loopout=Je.media.duration-2;break;default:S.loopin=0,S.loopout=null}S.loop=N.number(S.loopin)&&N.number(S.loopout);var a=Ne(S.loopin,t.querySelector('[data-loop__value="loopin"]')),o=N.number(S.loopout)?Ne(S.loopout+2,t.querySelector('[data-loop__value="loopout"]')):t.querySelector('[data-loop__value="loopout"]').innerHTML="";S.loop?t.querySelector('[data-menu="loop"]').innerHTML=a+" - "+o:t.querySelector('[data-menu="loop"]').innerHTML=S.i18n.loopclear}function ye(e){if(N.undefined(e)&&(e=Je.storage.speed||S.defaultSpeed),!N.array(S.speeds))return void et("Invalid speeds format");if(!N.number(e)){var n=S.speeds.indexOf(S.currentSpeed);if(n!==-1){var a=n+1;a>=S.speeds.length&&(a=0),e=S.speeds[a]}else e=S.defaultSpeed}S.currentSpeed=e,Je.media.playbackRate=e,ae({speed:e}),t.querySelector('[data-menu="speed"]').innerHTML=z()}function fe(e){N.number(e)||(e=S.seekTime),ge(Je.media.currentTime-e)}function be(e){N.number(e)||(e=S.seekTime),ge(Je.media.currentTime+e)}function ge(e){var t=0,n=Je.media.paused,a=ve();N.number(e)?t=e:N.event(e)&&o(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Oe(t);try{Je.media.currentTime=t.toFixed(4)}catch(e){}if(o(S.types.embed,Je.type)){switch(Je.type){case"youtube":Je.embed.seekTo(t);break;case"vimeo":Je.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Je.embed.seekTo(1e3*t)}n&&pe(),C(Je.media,"timeupdate"),Je.media.seeking=!0,C(Je.media,"seeking")}Ze("Seeking to "+Je.media.currentTime+" seconds"),Y(t)}function ve(){var e=parseInt(S.duration),t=0;return null===Je.media.duration||isNaN(Je.media.duration)||(t=Je.media.duration),isNaN(e)?t:e}function he(){d(Je.container,S.classes.playing,!Je.media.paused),d(Je.container,S.classes.stopped,Je.media.paused),Re(Je.media.paused)}function _e(){P={x:e.pageXOffset||0,y:e.pageYOffset||0}}function ke(){e.scrollTo(P.x,P.y)}function xe(e){var n=q.fullscreen;if(n){if(!e||e.type!==I.eventType)return I.isFullScreen(Je.container)?I.cancelFullScreen():(_e(),I.requestFullScreen(Je.container)),void(Je.isFullscreen=I.isFullScreen(Je.container));Je.isFullscreen=I.isFullScreen(Je.container)}else Je.isFullscreen=!Je.isFullscreen,t.body.style.overflow=Je.isFullscreen?"hidden":"";d(Je.container,S.classes.fullscreen.active,Je.isFullscreen),Q(Je.isFullscreen),Je.buttons&&Je.buttons.fullscreen&&_(Je.buttons.fullscreen,Je.isFullscreen),C(Je.container,Je.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Je.isFullscreen&&n&&ke()}function we(e){if(N.boolean(e)||(e=!Je.media.muted),_(Je.buttons.mute,e),Je.media.muted=e,0===Je.media.volume&&Te(S.volume),o(S.types.embed,Je.type)){switch(Je.type){case"youtube":Je.embed[Je.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Je.embed.setVolume(Je.media.muted?0:parseFloat(S.volume/S.volumeMax)); +}C(Je.media,"volumechange")}}function Te(e){var t=S.volumeMax,n=S.volumeMin;if(N.undefined(e)&&(e=Je.storage.volume),(null===e||isNaN(e))&&(e=S.volume),e>t&&(e=t),e0&&we()}function Se(e){var t=Je.media.muted?0:Je.media.volume*S.volumeMax;N.number(e)||(e=S.volumeStep),Te(t+e)}function Ee(e){var t=Je.media.muted?0:Je.media.volume*S.volumeMax;N.number(e)||(e=S.volumeStep),Te(t-e)}function Ae(){var e=Je.media.muted?0:Je.media.volume*S.volumeMax;Je.supported.full&&(Je.volume.input&&(Je.volume.input.value=e),Je.volume.display&&(Je.volume.display.value=e)),ae({volume:e}),d(Je.container,S.classes.muted,0===e),Je.supported.full&&Je.buttons.mute&&_(Je.buttons.mute,0===e)}function Ce(e){Je.supported.full&&Je.buttons.captions&&(N.boolean(e)||(e=Je.container.className.indexOf(S.classes.captions.active)===-1),Je.captionsEnabled=e,_(Je.buttons.captions,Je.captionsEnabled),d(Je.container,S.classes.captions.active,Je.captionsEnabled),C(Je.container,Je.captionsEnabled?"captionsenabled":"captionsdisabled",!0),ae({captionsEnabled:Je.captionsEnabled}))}function Fe(e){S.captions.selectedIndex=e,W(),V()}function Ie(e){var t="waiting"===e.type;clearTimeout(ze.loading),ze.loading=setTimeout(function(){d(Je.container,S.classes.loading,t),Re(t)},t?250:0)}function Pe(e){if(Je.supported.full){var t=Je.progress.played,n=0,a=ve();if(e)switch(e.type){case"timeupdate":case"seeking":if(Je.controls.pressed)return;n=k(Je.media.currentTime,a),"timeupdate"===e.type&&Je.buttons.seek&&(Je.buttons.seek.value=n);break;case"playing":case"progress":t=Je.progress.buffer,n=function(){var e=Je.media.buffered;return e&&e.length?k(e.end(0),a):N.number(e)?100*e:0}()}N.number(S.loopin)&&N.number(S.loopout)&&Je.media.currentTime>=S.loopout&&ge(S.loopin),Me(t,n)}}function Me(e,t){if(Je.supported.full){if(N.undefined(t)&&(t=0),N.undefined(e)){if(!Je.progress||!Je.progress.buffer)return;e=Je.progress.buffer}N.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Ne(e,t){if(t){isNaN(e)&&(e=0),Je.secs=parseInt(e%60),Je.mins=parseInt(e/60%60),Je.hours=parseInt(e/60/60%60);var n=parseInt(ve()/60/60%60)>0;Je.secs=("0"+Je.secs).slice(-2),Je.mins=("0"+Je.mins).slice(-2);var a=(n?Je.hours+":":"")+Je.mins+":"+Je.secs;return t.innerHTML=a,a}}function qe(){if(Je.supported.full){var e=ve()||0;!Je.duration&&S.displayDuration&&Je.media.paused&&Ne(e,Je.currentTime),Je.duration&&Ne(e,Je.duration),je()}}function Le(e){Ne(Je.media.currentTime,Je.currentTime),e&&"timeupdate"===e.type&&Je.media.seeking||Pe(e)}function Oe(e){N.number(e)||(e=0);var t=ve(),n=k(e,t);Je.progress&&Je.progress.played&&(Je.progress.played.value=n),Je.buttons&&Je.buttons.seek&&(Je.buttons.seek.value=n)}function je(e){var t=ve();if(S.tooltips.seek&&Je.progress.container&&0!==t){var n=Je.progress.container.getBoundingClientRect(),a=0,r=S.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Je.progress.tooltip,r))return;a=Je.progress.tooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Ne(t/100*a,Je.progress.tooltip),Je.progress.tooltip.style.left=a+"%",e&&o(["mouseenter","mouseleave"],e.type)&&d(Je.progress.tooltip,r,"mouseenter"===e.type)}}function Re(t){if(S.hideControls&&"audio"!==Je.type){var n=0,a=!1,r=t,s=m(Je.container,S.classes.loading);if(N.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,r=o(["mousemove","touchstart","mouseenter","focus"],t.type),o(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):r=m(Je.container,S.classes.hideControls)),e.clearTimeout(ze.hover),r||Je.media.paused||s){if(d(Je.container,S.classes.hideControls,!1),Je.media.paused||s)return;Je.browser.isTouch&&(n=3e3)}r&&Je.media.paused||(ze.hover=e.setTimeout(function(){(!Je.controls.pressed&&!Je.controls.hover||a)&&d(Je.container,S.classes.hideControls,!0)},n))}}function De(e){if(!N.undefined(e))return void He(e);var t;switch(Je.type){case"youtube":t=Je.embed.getVideoUrl();break;case"vimeo":Je.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Je.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Je.media.currentSrc}return t||""}function He(e){function n(){if(Je.embed=null,l(Je.media),"video"===Je.type&&Je.videoContainer&&l(Je.videoContainer),Je.container&&Je.container.removeAttribute("class"),"type"in e&&(Je.type=e.type,"video"===Je.type)){var n=e.sources[0];"type"in n&&o(S.types.embed,n.type)&&(Je.type=n.type)}switch(Je.supported=A(Je.type),Je.type){case"video":Je.media=t.createElement("video");break;case"audio":Je.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Je.media=t.createElement("div"),Je.embedId=e.sources[0].src}i(Je.container,Je.media),N.boolean(e.autoplay)&&(S.autoplay=e.autoplay),o(S.types.html5,Je.type)&&(S.crossorigin&&Je.media.setAttribute("crossorigin",""),S.autoplay&&Je.media.setAttribute("autoplay",""),"poster"in e&&Je.media.setAttribute("poster",e.poster),S.loop&&Je.media.setAttribute("loop","")),d(Je.container,S.classes.fullscreen.active,Je.isFullscreen),d(Je.container,S.classes.captions.active,Je.captionsEnabled),Z(),o(S.types.html5,Je.type)&&$("source",e.sources),oe(),o(S.types.html5,Je.type)&&("tracks"in e&&$("track",e.tracks),Je.media.load()),(o(S.types.html5,Je.type)||o(S.types.embed,Je.type)&&!Je.supported.full)&&(Ke(),Qe()),S.title=e.title,te()}return N.object(e)&&"sources"in e&&e.sources.length?(d(Je.container,S.classes.ready,!1),pe(),Oe(),Me(),Be(),void Xe(n,!1)):void et("Invalid source format")}function Ve(e){"video"===Je.type&&Je.media.setAttribute("poster",e)}function We(){function n(){var e=de(),t=Je.buttons[e?"play":"pause"],n=Je.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,S.classes.tabFocus);setTimeout(function(){n.focus(),a&&(d(t,S.classes.tabFocus,!1),d(n,S.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function r(e){return e.keyCode?e.keyCode:e.which}function s(e){for(var t in Je.buttons){var n=Je.buttons[t];if(N.nodeList(n))for(var a=0;a-1&&me(t)}),q.fullscreen&&g(t,I.eventType,xe),g(Je.buttons.captions,"click",Ce),g(Je.buttons.settings,"click",function(n){var a=this,o=n.target,r=t.getElementById(o.getAttribute("aria-controls")),s="false"===o.getAttribute("aria-expanded");if(N.htmlElement(r)){var i,u,c,p="tabpanel"===r.getAttribute("role");if(p){var d=a.querySelector('[role="tabpanel"][aria-hidden="false"]');c=d.parentNode,[].forEach.call(a.querySelectorAll('[aria-controls="'+d.getAttribute("id")+'"]'),function(e){e.setAttribute("aria-expanded",!1)}),c.style.width=d.scrollWidth+"px",c.style.height=d.scrollHeight+"px",d.setAttribute("aria-hidden",!0),d.setAttribute("tabindex",-1);var m=r.cloneNode(!0);m.style.position="absolute",m.style.opacity=0,m.setAttribute("aria-hidden",!1),c.appendChild(m),i=m.scrollWidth,u=m.scrollHeight,l(m)}r.setAttribute("aria-hidden",!s),o.setAttribute("aria-expanded",s),r.setAttribute("tabindex",0),p&&(c.style.width=i+"px",c.style.height=u+"px",e.setTimeout(function(){c.style.width="",c.style.height=""},300))}}),g(Je.buttons.pip,"click",function(){Je.media.webkitSetPresentationMode("picture-in-picture"===Je.media.webkitPresentationMode?"inline":"picture-in-picture")}),g(Je.progress.container,"mouseenter mouseleave mousemove",je),S.hideControls&&(g(Je.container,"mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen",Re),g(Je.controls,"mouseenter mouseleave",function(e){Je.controls.hover="mouseenter"===e.type}),g(Je.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){Je.controls.pressed=o(["mousedown","touchstart"],e.type)}),g(Je.controls,"focus blur",Re,!0)),g(Je.volume.input,"wheel",function(e){e.preventDefault();var t=e.webkitDirectionInvertedFromDevice,n=S.volumeStep/5;(e.deltaY<0||e.deltaX>0)&&(t?Ee(n):Se(n)),(e.deltaY>0||e.deltaX<0)&&(t?Se(n):Ee(n))})}function Ye(){if(g(Je.media,"timeupdate seeking",Le),g(Je.media,"timeupdate",Y),g(Je.media,"durationchange loadedmetadata",qe),g(Je.media,"ended",function(){"video"===Je.type&&S.showPosterOnEnd&&("video"===Je.type&&W(),ge(),Je.media.load())}),g(Je.media,"progress playing",Pe),g(Je.media,"volumechange",Ae),g(Je.media,"play pause ended",he),g(Je.media,"waiting canplay seeked",Ie),S.clickToPlay&&"audio"!==Je.type){var e=U("."+S.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){S.hideControls&&Je.browser.isTouch&&!Je.media.paused||(Je.media.paused?ce():Je.media.ended?(ge(),ce()):pe())})}S.disableContextMenu&&g(Je.media,"contextmenu",function(e){e.preventDefault()}),g(Je.media,S.events.concat(["keyup","keydown"]).join(" "),function(e){C(Je.container,e.type,!0)})}function Be(){if(o(S.types.html5,Je.type)){for(var e=Je.media.querySelectorAll("source"),t=0;t', '', '
  • ', - '', '
  • ', '
  • ', - '', '
  • ', '
  • ', - '', '
  • ', '
  • ', - '', '
  • ', @@ -1798,10 +1792,7 @@ settings: getElement(config.selectors.buttons.settings), pip: getElement(config.selectors.buttons.pip), speed: document.querySelectorAll(config.selectors.buttons.speed), - loopin: document.querySelectorAll(config.selectors.buttons.loopin), - loopout: document.querySelectorAll(config.selectors.buttons.loopout), - loopall: document.querySelectorAll(config.selectors.buttons.loopall), - loopclear: document.querySelectorAll(config.selectors.buttons.loopclear) + loop: document.querySelectorAll(config.selectors.buttons.loop) }; // Inputs @@ -2529,9 +2520,8 @@ //check if can loop config.loop = is.number(config.loopin) && is.number(config.loopout); - var loopin = updateTimeDisplay(config.loopin, document.querySelector('[data-loop__value="loopin"]')); - var loopout = is.number(config.loopout) ? updateTimeDisplay(config.loopout, document.querySelector('[data-loop__value="loopout"]')) : null; + var loopout = is.number(config.loopout) ? updateTimeDisplay(config.loopout + 2, document.querySelector('[data-loop__value="loopout"]')) : document.querySelector('[data-loop__value="loopout"]').innerHTML = ''; if (config.loop) { document.querySelector('[data-menu="loop"]').innerHTML = loopin + ' - ' + loopout; } else { @@ -3743,17 +3733,11 @@ proxy(plyr.buttons.fullscreen, 'click', config.listeners.fullscreen, toggleFullscreen); // Loop - proxy(plyr.buttons.loopall, 'click', config.listeners.loopall, function () { - toggleLoop('loopall'); - }); - proxy(plyr.buttons.loopin, 'click', config.listeners.loopin, function(){ - toggleLoop('loopin'); - }); - proxy(plyr.buttons.loopout, 'click', config.listeners.loopout, function () { - toggleLoop('loopout'); - }); - proxy(plyr.buttons.loopclear, 'click', config.listeners.loopclear, function () { - toggleLoop('loopclear'); + proxy(plyr.buttons.loop, 'click', config.listeners.loop, function (event) { + var loopValue = event.target.getAttribute('data-loop__value') || event.target.getAttribute('data-loop__type'); + if (['loopin', 'loopout', 'loopall', 'loopclear'].indexOf(loopValue) > -1) { + toggleLoop(loopValue); + } }); // Handle user exiting fullscreen by escaping etc From afcdf17a72ffe8dc8f431765d867b97e0f57cbb1 Mon Sep 17 00:00:00 2001 From: Chrysa Papadopoulou Date: Fri, 3 Feb 2017 14:52:38 +0200 Subject: [PATCH 33/70] Removed not needed functions + reverted demo.js to previous --- demo/dist/demo.js | 2 +- demo/src/js/main.js | 2 +- src/js/plyr.js | 61 +-------------------------------------------- 3 files changed, 3 insertions(+), 62 deletions(-) diff --git a/demo/dist/demo.js b/demo/dist/demo.js index 75866ed6..d79c71e7 100644 --- a/demo/dist/demo.js +++ b/demo/dist/demo.js @@ -1 +1 @@ -"document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var e=document.createElement("_");if(e.classList.add("c1","c2"),!e.classList.contains("c2")){var t=function(e){var t=DOMTokenList.prototype[e];DOMTokenList.prototype[e]=function(e){var i,s=arguments.length;for(i=0;i=0;a--)e(o[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0)}}var i=plyr.setup({debug:!0,title:"Video demo",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0},controls:["play","progress","volume","captions","settings","fullscreen","fast-forward"]});plyr.loadSprite("dist/demo.svg");for(var s=i[0],o=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),a=window.history&&window.history.pushState,c=o.length-1;c>=0;c--)o[c].addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),a&&history.pushState({type:e},"","#"+e)});if(window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),a){var l=!r.length;l&&(r=n.video),r in n&&history.replaceState({type:r},"",l?"":"#"+r),r!==n.video&&t(r,!0)}}(),document.domain.indexOf("plyr.io")>-1&&(!function(e,t,i,s,o,n,r){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,n=t.createElement(i),r=t.getElementsByTagName(i)[0],n.async=1,n.src=s,r.parentNode.insertBefore(n,r)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40881672-11","auto"),ga("send","pageview")); \ No newline at end of file +"document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var e=document.createElement("_");if(e.classList.add("c1","c2"),!e.classList.contains("c2")){var t=function(e){var t=DOMTokenList.prototype[e];DOMTokenList.prototype[e]=function(e){var i,s=arguments.length;for(i=0;i=0;a--)e(o[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0)}}var i=plyr.setup({debug:!0,title:"Video demo",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0},controls:["play-large","play","speed-up","progress","current-time","mute","volume","captions","settings","fullscreen"]});plyr.loadSprite("dist/demo.svg");for(var s=i[0],o=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),a=window.history&&window.history.pushState,c=o.length-1;c>=0;c--)o[c].addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),a&&history.pushState({type:e},"","#"+e)});if(window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),a){var l=!r.length;l&&(r=n.video),r in n&&history.replaceState({type:r},"",l?"":"#"+r),r!==n.video&&t(r,!0)}}(),document.domain.indexOf("plyr.io")>-1&&(!function(e,t,i,s,o,n,r){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,n=t.createElement(i),r=t.getElementsByTagName(i)[0],n.async=1,n.src=s,r.parentNode.insertBefore(n,r)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-40881672-11","auto"),ga("send","pageview")); \ No newline at end of file diff --git a/demo/src/js/main.js b/demo/src/js/main.js index 3fe0b488..d7c5f42a 100644 --- a/demo/src/js/main.js +++ b/demo/src/js/main.js @@ -21,7 +21,7 @@ captions: { defaultActive: true }, - controls: ['play', 'progress', 'volume', 'captions', 'settings', 'fullscreen', 'fast-forward'] + controls: ['play-large', 'play', 'speed-up', 'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'fullscreen'] }); plyr.loadSprite('dist/demo.svg'); diff --git a/src/js/plyr.js b/src/js/plyr.js index 903fa88f..88fcd548 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -46,7 +46,7 @@ volumeMax: 10, volumeStep: 1, defaultSpeed: 1.0, - currentSpeed: 1.0, + currentSpeed: 1, speeds: [0.5, 1.0, 1.5, 2.0], duration: null, displayDuration: true, @@ -1325,35 +1325,6 @@ } } - // Setup Loop - function setupLoop() { - if (!plyr.supported.full) { - return; - } - - if ((plyr.type !== 'audio' || config.fullscreen.allowAudio) && config.fullscreen.enabled) { - // Check for native support - var nativeSupport = support.fullscreen; - - if (nativeSupport || (config.fullscreen.fallback && !inFrame())) { - log((nativeSupport ? 'Native' : 'Fallback') + ' fullscreen enabled'); - - // Add styling hook - toggleClass(plyr.container, config.classes.fullscreen.enabled, true); - } else { - log('Fullscreen not supported and fallback disabled'); - } - - // Toggle state - if (plyr.buttons && plyr.buttons.fullscreen) { - toggleState(plyr.buttons.fullscreen, false); - } - - // Setup focus trap - focusTrap(); - } - } - // Display active caption if it contains text function setActiveCue(track) { // Get the track from the event if needed @@ -2896,36 +2867,6 @@ } } - - // Update volume UI and storage - function updateLoop() { - // Get the current volume - var volume = plyr.media.muted ? 0 : (plyr.media.volume * config.volumeMax); - - // Update the if present - if (plyr.supported.full) { - if (plyr.volume.input) { - plyr.volume.input.value = volume; - } - if (plyr.volume.display) { - plyr.volume.display.value = volume; - } - } - - // Update the volume in storage - updateStorage({ - volume: volume - }); - - // Toggle class if muted - toggleClass(plyr.container, config.classes.muted, (volume === 0)); - - // Update checkbox for mute state - if (plyr.supported.full && plyr.buttons.mute) { - toggleState(plyr.buttons.mute, (volume === 0)); - } - } - // Toggle captions function toggleCaptions(show) { // If there's no full support, or there's no caption toggle From cbef45841cbd677a62052e8464151704c55f9966 Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Sun, 5 Feb 2017 11:34:33 +1100 Subject: [PATCH 34/70] Menu work --- dist/plyr.js | 4 ++-- src/js/plyr.js | 19 ++++++++++-------- src/less/plyr.less | 50 ++++++++++++++++++++++------------------------ 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/dist/plyr.js b/dist/plyr.js index e316c62c..8157a10c 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,a,r=navigator.userAgent,s=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10),l=!1,u=!1,c=!1,p=!1;return navigator.appVersion.indexOf("Windows NT")!==-1&&navigator.appVersion.indexOf("rv:11")!==-1?(l=!0,s="IE",o="11"):(n=r.indexOf("MSIE"))!==-1?(l=!0,s="IE",o=r.substring(n+5)):(n=r.indexOf("Chrome"))!==-1?(c=!0,s="Chrome",o=r.substring(n+7)):(n=r.indexOf("Safari"))!==-1?(p=!0,s="Safari",o=r.substring(n+7),(n=r.indexOf("Version"))!==-1&&(o=r.substring(n+8))):(n=r.indexOf("Firefox"))!==-1?(u=!0,s="Firefox",o=r.substring(n+8)):(e=r.lastIndexOf(" ")+1)<(n=r.lastIndexOf("/"))&&(s=r.substring(e,n),o=r.substring(n+1),s.toLowerCase()===s.toUpperCase()&&(s=navigator.appName)),(a=o.indexOf(";"))!==-1&&(o=o.substring(0,a)),(a=o.indexOf(" "))!==-1&&(o=o.substring(0,a)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:s,version:i,isIE:l,isFirefox:u,isChrome:c,isSafari:p,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function a(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var a=t.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a)}}function r(e,t){return Array.prototype.indexOf&&e.indexOf(t)!==-1}function s(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function o(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var a=n>0?t.cloneNode(!0):t,r=e[n],s=r.parentNode,o=r.nextSibling;return a.appendChild(r),o?s.insertBefore(a,o):s.appendChild(a),a}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,N.boolean(t[n])&&t[n]?"":t[n])}function c(e,n,a){var r=t.createElement(e);u(r,a),l(n,r)}function p(e){return e.replace(".","")}function d(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function f(e,n){var a=Element.prototype,r=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return r.call(e,n)}function y(e,t,n,a,r){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},r)}function b(e,t,n,a,r){var s=t.split(" ");if(N.boolean(r)||(r=!1),e instanceof NodeList)for(var o=0;o','',''+E.i18n.play+"",""),e.push('
    '),r(E.controls,"restart")&&e.push('"),r(E.controls,"rewind")&&e.push('"),r(E.controls,"play")&&e.push('",'"),r(E.controls,"fast-forward")&&e.push('"),r(E.controls,"progress")&&(e.push('','','','','',"0% "+E.i18n.buffered,""),E.tooltips.seek&&e.push('00:00'),e.push("")),r(E.controls,"current-time")&&e.push('',''+E.i18n.currentTime+"",'00:00',""),r(E.controls,"duration")&&e.push('',''+E.i18n.duration+"",'00:00',""),r(E.controls,"mute")&&e.push('"),r(E.controls,"volume")&&e.push('','",'','',""),r(E.controls,"captions")&&e.push('"),r(E.controls,"settings")&&e.push('
    ','",'","
    "),r(E.controls,"pip")&&q.pip&&e.push('"),r(E.controls,"airplay")&&q.airplay&&e.push('"),r(E.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function R(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?['',''+t+"",""].join(""):""}function a(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"}}if(!N.object(Qe.quality)&&(Qe.quality={available:e,current:t},N.array(e)&&e.length)){var r=e.filter(function(e){return["tiny","small"].indexOf(e)===-1}),s=r.map(function(e){return["
  • ",'","
  • "].join("")});s.unshift(['
  • ','","
  • "].join("")),console.warn(s)}}function D(){if(Qe.supported.full&&("audio"!==Qe.type||E.fullscreen.allowAudio)&&E.fullscreen.enabled){var e=q.fullscreen;e||E.fullscreen.fallback&&!K()?(ze((e?"Native":"Fallback")+" fullscreen enabled"),d(Qe.container,E.classes.fullscreen.enabled,!0)):ze("Fullscreen not supported and fallback disabled"),Qe.buttons&&Qe.buttons.fullscreen&&_(Qe.buttons.fullscreen,!1),Q()}}function V(e){N.event(e)&&(e=e.target),e.activeCues[0]&&"text"in e.activeCues[0]?W(e.activeCues[0].getCueAsHTML()):W()}function H(){if("video"===Qe.type){U(E.selectors.captions)||Qe.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Qe.usingTextTracks=!1,Qe.media.textTracks&&(Qe.usingTextTracks=!0);var e=[],t="";if(Qe.media.childNodes.forEach(function(t){"track"===t.nodeName.toLowerCase()&&("captions"!==t.kind&&"subtitles"!==t.kind||e.push(t.getAttribute("src")))}),Qe.captionExists=!0,0===e.length?(Qe.captionExists=!1,ze("No caption track found")):E.captions.selectedIndex+1>e.length?(Qe.captionExists=!1,ze("Caption index out of bound")):(t=e[E.captions.selectedIndex],ze("Caption track found; URI: "+t)),Qe.captionExists){var n=Qe.media.textTracks;if([].forEach.call(n,function(e){v(e,"cuechange",V),e.mode="hidden"}),B(Qe),(Qe.browser.isIE&&Qe.browser.version>=10||Qe.browser.isFirefox&&Qe.browser.version>=31)&&(ze("Detected browser with known TextTrack issues - using manual fallback"),Qe.usingTextTracks=!1),Qe.usingTextTracks){ze("TextTracks supported");var a=n[E.captions.selectedIndex];"captions"!==a.kind&&"subtitles"!==a.kind||(g(a,"cuechange",V),a.activeCues&&a.activeCues.length>0&&V(a))}else if(ze("TextTracks not supported so rendering captions manually"),Qe.currentCaption="",Qe.captions=[],""!==t){var r=new XMLHttpRequest;r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var e=r.responseText,t="\r\n";e.indexOf(t+t)===-1&&(t=e.indexOf("\r\r")!==-1?"\r":"\n");var n=e.split(t+t);Qe.captions=n.map(function(e){var n=e.split(t),a=0;return n[a].indexOf(":")!==-1&&(a=1),[n[a],n[a+1]]}),Qe.captions.shift(),ze("Successfully loaded the caption file via AJAX")}else Ge(E.logPrefix+"There was a problem loading the caption file via AJAX")},r.open("get",t,!0),r.send()}}else d(Qe.container,E.classes.captions.enabled)}}function W(e){var n=U(E.selectors.captions),a=t.createElement("span");n.innerHTML="",N.undefined(e)&&(e=""),N.string(e)?a.innerHTML=e.trim():a.appendChild(e),n.appendChild(a);n.offsetHeight}function Y(e){function t(e,t){var n=[];n=e.split(" --> ");for(var a=0;aQe.captions.length-1){Qe.subcount=Qe.captions.length-1;break}Qe.media.currentTime.toFixed(1)>=n(Qe.captions[Qe.subcount][0])&&Qe.media.currentTime.toFixed(1)<=a(Qe.captions[Qe.subcount][0])?(Qe.currentCaption=Qe.captions[Qe.subcount][1],W(Qe.currentCaption)):W()}}function B(){if(Qe.buttons.captions){d(Qe.container,E.classes.captions.enabled,!0);var e=Qe.storage.captionsEnabled;N.boolean(e)||(e=E.captions.defaultActive),e&&(d(Qe.container,E.classes.captions.active,!0),_(Qe.buttons.captions,!0))}}function X(e){return Qe.container.querySelectorAll(e)}function U(e){return X(e)[0]}function K(){try{return e.self!==e.top}catch(e){return!0}}function Q(){function e(e){9===e.which&&Qe.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=X("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Qe.container,"keydown",e)}function $(e,t){if(N.string(t))c(e,Qe.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Qe.media,t[n])}function J(){if(E.loadSprite){var e=j();e.absolute?(ze("AJAX loading absolute SVG sprite"+(Qe.browser.isIE?" (due to IE)":"")),S(e.url,"sprite-plyr")):ze("Sprite will be used as external resource directly")}var n=E.html;ze("Injecting custom controls"),n||(n=L()),n=s(n,"{seektime}",E.seekTime),n=s(n,"{speed}",E.currentSpeed.toFixed(1).toString().replace(".0","")+"×"),n=s(n,"{lang}","English"),Qe.id=Math.floor(1e4*Math.random()),n=s(n,"{id}",Qe.id);var a;if(N.string(E.selectors.controls.container)&&(a=t.querySelector(E.selectors.controls.container)),N.htmlElement(a)||(a=Qe.container),a.insertAdjacentHTML("beforeend",n),E.tooltips.controls)for(var r=X([E.selectors.controls.wrapper," ",E.selectors.labels," .",E.classes.hidden].join("")),o=r.length-1;o>=0;o--){var i=r[o];d(i,E.classes.hidden,!1),d(i,E.classes.tooltip,!0)}}function z(){try{return Qe.controls=U(E.selectors.controls.wrapper),Qe.buttons={seek:U(E.selectors.buttons.seek),play:X(E.selectors.buttons.play),pause:U(E.selectors.buttons.pause),restart:U(E.selectors.buttons.restart),rewind:U(E.selectors.buttons.rewind),forward:U(E.selectors.buttons.forward),fullscreen:U(E.selectors.buttons.fullscreen),settings:U(E.selectors.buttons.settings),pip:U(E.selectors.buttons.pip)},Qe.buttons.mute=U(E.selectors.buttons.mute),Qe.buttons.captions=U(E.selectors.buttons.captions),Qe.progress={container:U(E.selectors.progress.container)},Qe.progress.buffer=function(){var e=U(E.selectors.progress.buffer);return{bar:e,text:N.htmlElement(e)&&e.getElementsByTagName("span")[0]}}(),Qe.progress.played=U(E.selectors.progress.played),Qe.progress.tooltip=Qe.progress.container&&Qe.progress.container.querySelector("."+E.classes.tooltip),Qe.volume={input:U(E.selectors.volume.input),display:U(E.selectors.volume.display)},Qe.duration=U(E.selectors.duration),Qe.currentTime=U(E.selectors.currentTime),Qe.seekTime=X(E.selectors.seekTime),!0}catch(e){return Ge("It looks like there is a problem with your controls HTML",e),Z(!0),!1}}function G(){d(Qe.container,E.selectors.container.replace(".",""),Qe.supported.full)}function Z(e){e&&r(E.types.html5,Qe.type)?Qe.media.setAttribute("controls",""):Qe.media.removeAttribute("controls")}function ee(e){var t=E.i18n.play;if(N.string(E.title)&&E.title.length&&(t+=", "+E.title,Qe.container.setAttribute("aria-label",E.title)),Qe.supported.full&&Qe.buttons.play)for(var n=Qe.buttons.play.length-1;n>=0;n--)Qe.buttons.play[n].setAttribute("aria-label",t);N.htmlElement(e)&&e.setAttribute("title",E.i18n.frameTitle.replace("{title}",E.title))}function te(){var t=null;Qe.storage={},q.storage&&E.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(E.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?ne({volume:parseFloat(t)}):Qe.storage=JSON.parse(t)))}function ne(t){q.storage&&E.storage.enabled&&(x(Qe.storage,t),e.localStorage.setItem(E.storage.key,JSON.stringify(Qe.storage)))}function ae(){if(!Qe.media)return void Ge("No media element found!");if(Qe.supported.full&&(d(Qe.container,E.classes.type.replace("{0}",Qe.type),!0),r(E.types.embed,Qe.type)&&d(Qe.container,E.classes.type.replace("{0}","video"),!0),d(Qe.container,E.classes.pip.enabled,q.pip),d(Qe.container,E.classes.stopped,E.autoplay),d(Qe.container,E.classes.isIos,Qe.browser.isIos),d(Qe.container,E.classes.isTouch,Qe.browser.isTouch),"video"===Qe.type)){var e=t.createElement("div");e.setAttribute("class",E.classes.videoWrapper),o(Qe.media,e),Qe.videoContainer=e}r(E.types.embed,Qe.type)&&re()}function re(){var n,r=t.createElement("div"),s=Qe.type+"-"+Math.floor(1e4*Math.random());switch(Qe.type){case"youtube":n=w(Qe.embedId);break;case"vimeo":n=T(Qe.embedId);break;default:n=Qe.embedId}for(var o=X('[id^="'+Qe.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(d(Qe.media,E.classes.videoWrapper,!0),d(Qe.media,E.classes.embedWrapper,!0),"youtube"===Qe.type)Qe.media.appendChild(r),r.setAttribute("id",s),N.object(e.YT)?oe(n,r):(a(E.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){oe(n,r)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Qe.type)if(Qe.supported.full?Qe.media.appendChild(r):r=Qe.media,r.setAttribute("id",s),N.object(e.Vimeo))ie(n,r);else{a(E.urls.vimeo.api);var c=e.setInterval(function(){N.object(e.Vimeo)&&(e.clearInterval(c),ie(n,r))},50)}else if("soundcloud"===Qe.type){var p=t.createElement("iframe");p.loaded=!1,g(p,"load",function(){p.loaded=!0}),u(p,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+n,id:s}),r.appendChild(p),Qe.media.appendChild(r),e.SC||a(E.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&p.loaded&&(e.clearInterval(m),le.call(p))},50)}}function se(){Qe.supported.full&&(Xe(),Ue()),ee(U("iframe"))}function oe(t,n){Qe.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:E.autoplay?1:0,controls:Qe.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:E.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){A(Qe.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;Qe.media.play=function(){n.playVideo(),Qe.media.paused=!1},Qe.media.pause=function(){n.pauseVideo(),Qe.media.paused=!0},Qe.media.stop=function(){n.stopVideo(),Qe.media.paused=!0},Qe.media.duration=n.getDuration(),Qe.media.paused=!0,Qe.media.currentTime=0,Qe.media.muted=n.isMuted();var a=n.getPlaybackRate(),r=n.getAvailablePlaybackRates();console.warn(a,r),E.title=n.getVideoData().title,Qe.supported.full&&Qe.media.querySelector("iframe").setAttribute("tabindex","-1"),se(),A(Qe.media,"timeupdate"),A(Qe.media,"durationchange"),e.clearInterval($e.buffering),$e.buffering=e.setInterval(function(){Qe.media.buffered=n.getVideoLoadedFraction(),(null===Qe.media.lastBuffered||Qe.media.lastBuffered=E.speeds.length&&(n=0),e=E.speeds[n]}else e=E.defaultSpeed}E.currentSpeed=e,Qe.media.playbackRate=e,ne({speed:e})}function me(e){N.number(e)||(e=E.seekTime),ye(Qe.media.currentTime-e)}function fe(e){N.number(e)||(e=E.seekTime),ye(Qe.media.currentTime+e)}function ye(e){var t=0,n=Qe.media.paused,a=be();N.number(e)?t=e:N.event(e)&&r(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),qe(t);try{Qe.media.currentTime=t.toFixed(4)}catch(e){}if(r(E.types.embed,Qe.type)){switch(Qe.type){case"youtube":Qe.embed.seekTo(t);break;case"vimeo":Qe.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Qe.embed.seekTo(1e3*t)}n&&ce(),A(Qe.media,"timeupdate"),Qe.media.seeking=!0,A(Qe.media,"seeking")}ze("Seeking to "+Qe.media.currentTime+" seconds"),Y(t)}function be(){var e=parseInt(E.duration),t=0;return null===Qe.media.duration||isNaN(Qe.media.duration)||(t=Qe.media.duration),isNaN(e)?t:e}function ge(){d(Qe.container,E.classes.playing,!Qe.media.paused),d(Qe.container,E.classes.stopped,Qe.media.paused),je(Qe.media.paused)}function ve(){P={x:e.pageXOffset||0,y:e.pageYOffset||0}}function he(){e.scrollTo(P.x,P.y)}function _e(e){var n=q.fullscreen;if(n){if(!e||e.type!==I.eventType)return I.isFullScreen(Qe.container)?I.cancelFullScreen():(ve(),I.requestFullScreen(Qe.container)),void(Qe.isFullscreen=I.isFullScreen(Qe.container));Qe.isFullscreen=I.isFullScreen(Qe.container)}else Qe.isFullscreen=!Qe.isFullscreen,t.body.style.overflow=Qe.isFullscreen?"hidden":"";d(Qe.container,E.classes.fullscreen.active,Qe.isFullscreen),Q(Qe.isFullscreen),Qe.buttons&&Qe.buttons.fullscreen&&_(Qe.buttons.fullscreen,Qe.isFullscreen),A(Qe.container,Qe.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Qe.isFullscreen&&n&&he()}function ke(e){if(N.boolean(e)||(e=!Qe.media.muted),_(Qe.buttons.mute,e),Qe.media.muted=e,0===Qe.media.volume&&xe(E.volume),r(E.types.embed,Qe.type)){switch(Qe.type){case"youtube":Qe.embed[Qe.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Qe.embed.setVolume(Qe.media.muted?0:parseFloat(E.volume/E.volumeMax))}A(Qe.media,"volumechange")}}function xe(e){var t=E.volumeMax,n=E.volumeMin;if(N.undefined(e)&&(e=Qe.storage.volume),(null===e||isNaN(e))&&(e=E.volume),e>t&&(e=t),e0&&ke()}function we(e){var t=Qe.media.muted?0:Qe.media.volume*E.volumeMax;N.number(e)||(e=E.volumeStep),xe(t+e)}function Te(e){var t=Qe.media.muted?0:Qe.media.volume*E.volumeMax;N.number(e)||(e=E.volumeStep),xe(t-e)}function Ee(){var e=Qe.media.muted?0:Qe.media.volume*E.volumeMax;Qe.supported.full&&(Qe.volume.input&&(Qe.volume.input.value=e),Qe.volume.display&&(Qe.volume.display.value=e)),ne({volume:e}),d(Qe.container,E.classes.muted,0===e),Qe.supported.full&&Qe.buttons.mute&&_(Qe.buttons.mute,0===e)}function Se(e){Qe.supported.full&&Qe.buttons.captions&&(N.boolean(e)||(e=Qe.container.className.indexOf(E.classes.captions.active)===-1),Qe.captionsEnabled=e,_(Qe.buttons.captions,Qe.captionsEnabled),d(Qe.container,E.classes.captions.active,Qe.captionsEnabled),A(Qe.container,Qe.captionsEnabled?"captionsenabled":"captionsdisabled",!0),ne({captionsEnabled:Qe.captionsEnabled}))}function Ce(e){E.captions.selectedIndex=e,W(),H()}function Ae(e){var t="waiting"===e.type;clearTimeout($e.loading),$e.loading=setTimeout(function(){d(Qe.container,E.classes.loading,t),je(t)},t?250:0)}function Fe(e){if(Qe.supported.full){var t=Qe.progress.played,n=0,a=be();if(e)switch(e.type){case"timeupdate":case"seeking":if(Qe.controls.pressed)return;n=k(Qe.media.currentTime,a),"timeupdate"===e.type&&Qe.buttons.seek&&(Qe.buttons.seek.value=n);break;case"playing":case"progress":t=Qe.progress.buffer,n=function(){var e=Qe.media.buffered;return e&&e.length?k(e.end(0),a):N.number(e)?100*e:0}()}Ie(t,n)}}function Ie(e,t){if(Qe.supported.full){if(N.undefined(t)&&(t=0),N.undefined(e)){if(!Qe.progress||!Qe.progress.buffer)return;e=Qe.progress.buffer}N.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Pe(e,t){if(t){isNaN(e)&&(e=0),Qe.secs=parseInt(e%60),Qe.mins=parseInt(e/60%60),Qe.hours=parseInt(e/60/60%60);var n=parseInt(be()/60/60%60)>0;Qe.secs=("0"+Qe.secs).slice(-2),Qe.mins=("0"+Qe.mins).slice(-2),t.innerHTML=(n?Qe.hours+":":"")+Qe.mins+":"+Qe.secs}}function Me(){if(Qe.supported.full){var e=be()||0;!Qe.duration&&E.displayDuration&&Qe.media.paused&&Pe(e,Qe.currentTime),Qe.duration&&Pe(e,Qe.duration),Oe()}}function Ne(e){Pe(Qe.media.currentTime,Qe.currentTime), -e&&"timeupdate"===e.type&&Qe.media.seeking||Fe(e)}function qe(e){N.number(e)||(e=0);var t=be(),n=k(e,t);Qe.progress&&Qe.progress.played&&(Qe.progress.played.value=n),Qe.buttons&&Qe.buttons.seek&&(Qe.buttons.seek.value=n)}function Oe(e){var t=be();if(E.tooltips.seek&&Qe.progress.container&&0!==t){var n=Qe.progress.container.getBoundingClientRect(),a=0,s=E.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Qe.progress.tooltip,s))return;a=Qe.progress.tooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Pe(t/100*a,Qe.progress.tooltip),Qe.progress.tooltip.style.left=a+"%",e&&r(["mouseenter","mouseleave"],e.type)&&d(Qe.progress.tooltip,s,"mouseenter"===e.type)}}function je(t){if(E.hideControls&&"audio"!==Qe.type){var n=0,a=!1,s=t,o=m(Qe.container,E.classes.loading);if(N.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,s=r(["mousemove","touchstart","mouseenter","focus"],t.type),r(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=m(Qe.container,E.classes.hideControls)),e.clearTimeout($e.hover),s||Qe.media.paused||o){if(d(Qe.container,E.classes.hideControls,!1),Qe.media.paused||o)return;Qe.browser.isTouch&&(n=3e3)}s&&Qe.media.paused||($e.hover=e.setTimeout(function(){(!Qe.controls.pressed&&!Qe.controls.hover||a)&&d(Qe.container,E.classes.hideControls,!0)},n))}}function Le(e){if(!N.undefined(e))return void Re(e);var t;switch(Qe.type){case"youtube":t=Qe.embed.getVideoUrl();break;case"vimeo":Qe.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Qe.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Qe.media.currentSrc}return t||""}function Re(e){function n(){if(Qe.embed=null,i(Qe.media),"video"===Qe.type&&Qe.videoContainer&&i(Qe.videoContainer),Qe.container&&Qe.container.removeAttribute("class"),"type"in e&&(Qe.type=e.type,"video"===Qe.type)){var n=e.sources[0];"type"in n&&r(E.types.embed,n.type)&&(Qe.type=n.type)}switch(Qe.supported=C(Qe.type),Qe.type){case"video":Qe.media=t.createElement("video");break;case"audio":Qe.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Qe.media=t.createElement("div"),Qe.embedId=e.sources[0].src}l(Qe.container,Qe.media),N.boolean(e.autoplay)&&(E.autoplay=e.autoplay),r(E.types.html5,Qe.type)&&(E.crossorigin&&Qe.media.setAttribute("crossorigin",""),E.autoplay&&Qe.media.setAttribute("autoplay",""),"poster"in e&&Qe.media.setAttribute("poster",e.poster),E.loop&&Qe.media.setAttribute("loop","")),d(Qe.container,E.classes.fullscreen.active,Qe.isFullscreen),d(Qe.container,E.classes.captions.active,Qe.captionsEnabled),G(),r(E.types.html5,Qe.type)&&$("source",e.sources),ae(),r(E.types.html5,Qe.type)&&("tracks"in e&&$("track",e.tracks),Qe.media.load()),(r(E.types.html5,Qe.type)||r(E.types.embed,Qe.type)&&!Qe.supported.full)&&(Xe(),Ue()),E.title=e.title,ee()}return N.object(e)&&"sources"in e&&e.sources.length?(d(Qe.container,E.classes.ready,!1),ce(),qe(),Ie(),We(),void Ye(n,!1)):void Ge("Invalid source format")}function De(e){"video"===Qe.type&&Qe.media.setAttribute("poster",e)}function Ve(){function n(){var e=pe(),t=Qe.buttons[e?"play":"pause"],n=Qe.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,E.classes.tabFocus);setTimeout(function(){n.focus(),a&&(d(t,E.classes.tabFocus,!1),d(n,E.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Qe.buttons){var n=Qe.buttons[t];if(N.nodeList(n))for(var a=0;a0)&&(t?Te(n):we(n)),(e.deltaY>0||e.deltaX<0)&&(t?we(n):Te(n))})}function He(){if(g(Qe.media,"timeupdate seeking",Ne),g(Qe.media,"timeupdate",Y),g(Qe.media,"durationchange loadedmetadata",Me),g(Qe.media,"ended",function(){"video"===Qe.type&&E.showPosterOnEnd&&("video"===Qe.type&&W(),ye(),Qe.media.load())}),g(Qe.media,"progress playing",Fe),g(Qe.media,"volumechange",Ee),g(Qe.media,"play pause ended",ge),g(Qe.media,"waiting canplay seeked",Ae),E.clickToPlay&&"audio"!==Qe.type){var e=U("."+E.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){E.hideControls&&Qe.browser.isTouch&&!Qe.media.paused||(Qe.media.paused?ue():Qe.media.ended?(ye(),ue()):ce())})}E.disableContextMenu&&g(Qe.media,"contextmenu",function(e){e.preventDefault()}),g(Qe.media,E.events.concat(["keyup","keydown"]).join(" "),function(e){A(Qe.container,e.type,!0)})}function We(){if(r(E.types.html5,Qe.type)){for(var e=Qe.media.querySelectorAll("source"),t=0;t=0;n--){var a=n>0?t.cloneNode(!0):t,r=e[n],s=r.parentNode,o=r.nextSibling;return a.appendChild(r),o?s.insertBefore(a,o):s.appendChild(a),a}}function i(e){e&&e.parentNode.removeChild(e)}function l(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,M.boolean(t[n])&&t[n]?"":t[n])}function c(e,n,a){var r=t.createElement(e);u(r,a),l(n,r)}function p(e){return e.replace(".","")}function d(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function m(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function f(e,n){var a=Element.prototype,r=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return r.call(e,n)}function y(e,t,n,a,r){g(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},r)}function b(e,t,n,a,r){var s=t.split(" ");if(M.boolean(r)||(r=!1),e instanceof NodeList)for(var o=0;o','',''+E.i18n.play+"",""),e.push('
    '),r(E.controls,"restart")&&e.push('"),r(E.controls,"rewind")&&e.push('"),r(E.controls,"play")&&e.push('",'"),r(E.controls,"fast-forward")&&e.push('"),r(E.controls,"progress")&&(e.push('','','','','',"0% "+E.i18n.buffered,""),E.tooltips.seek&&e.push('00:00'),e.push("")),r(E.controls,"current-time")&&e.push('',''+E.i18n.currentTime+"",'00:00',""),r(E.controls,"duration")&&e.push('',''+E.i18n.duration+"",'00:00',""),r(E.controls,"mute")&&e.push('"),r(E.controls,"volume")&&e.push('','",'','',""),r(E.controls,"captions")&&e.push('"),r(E.controls,"settings")&&e.push('
    ','",'","
    "),r(E.controls,"pip")&&N.pip&&e.push('"),r(E.controls,"airplay")&&N.airplay&&e.push('"),r(E.controls,"fullscreen")&&e.push('"),e.push("
    "),e.join("")}function R(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?['',''+t+"",""].join(""):""}function a(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"}}if(!M.object(Qe.quality)&&(Qe.quality={available:e,current:t},M.array(e)&&e.length)){var r=e.filter(function(e){return["tiny","small"].indexOf(e)===-1}),s=r.map(function(e){return console.log(e,Qe.quality.current),console.log(e.length,Qe.quality.current.length),console.log(e===Qe.quality.current),["
  • ",'","
  • "].join("")});s.unshift(['
  • ','","
  • "].join("")),U(E.selectors.menu.quality).innerHTML=s.join("")}}function D(){if(Qe.supported.full&&("audio"!==Qe.type||E.fullscreen.allowAudio)&&E.fullscreen.enabled){var e=N.fullscreen;e||E.fullscreen.fallback&&!K()?(ze((e?"Native":"Fallback")+" fullscreen enabled"),d(Qe.container,E.classes.fullscreen.enabled,!0)):ze("Fullscreen not supported and fallback disabled"),Qe.buttons&&Qe.buttons.fullscreen&&_(Qe.buttons.fullscreen,!1),Q()}}function V(e){M.event(e)&&(e=e.target),e.activeCues[0]&&"text"in e.activeCues[0]?W(e.activeCues[0].getCueAsHTML()):W()}function H(){if("video"===Qe.type){U(E.selectors.captions)||Qe.videoContainer.insertAdjacentHTML("afterbegin",'
    '),Qe.usingTextTracks=!1,Qe.media.textTracks&&(Qe.usingTextTracks=!0);var e=[],t="";if(Qe.media.childNodes.forEach(function(t){"track"===t.nodeName.toLowerCase()&&("captions"!==t.kind&&"subtitles"!==t.kind||e.push(t.getAttribute("src")))}),Qe.captionExists=!0,0===e.length?(Qe.captionExists=!1,ze("No caption track found")):E.captions.selectedIndex+1>e.length?(Qe.captionExists=!1,ze("Caption index out of bound")):(t=e[E.captions.selectedIndex],ze("Caption track found; URI: "+t)),Qe.captionExists){var n=Qe.media.textTracks;if([].forEach.call(n,function(e){v(e,"cuechange",V),e.mode="hidden"}),B(Qe),(Qe.browser.isIE&&Qe.browser.version>=10||Qe.browser.isFirefox&&Qe.browser.version>=31)&&(ze("Detected browser with known TextTrack issues - using manual fallback"),Qe.usingTextTracks=!1),Qe.usingTextTracks){ze("TextTracks supported");var a=n[E.captions.selectedIndex];"captions"!==a.kind&&"subtitles"!==a.kind||(g(a,"cuechange",V),a.activeCues&&a.activeCues.length>0&&V(a))}else if(ze("TextTracks not supported so rendering captions manually"),Qe.currentCaption="",Qe.captions=[],""!==t){var r=new XMLHttpRequest;r.onreadystatechange=function(){if(4===r.readyState)if(200===r.status){var e=r.responseText,t="\r\n";e.indexOf(t+t)===-1&&(t=e.indexOf("\r\r")!==-1?"\r":"\n");var n=e.split(t+t);Qe.captions=n.map(function(e){var n=e.split(t),a=0;return n[a].indexOf(":")!==-1&&(a=1),[n[a],n[a+1]]}),Qe.captions.shift(),ze("Successfully loaded the caption file via AJAX")}else Ge(E.logPrefix+"There was a problem loading the caption file via AJAX")},r.open("get",t,!0),r.send()}}else d(Qe.container,E.classes.captions.enabled)}}function W(e){var n=U(E.selectors.captions),a=t.createElement("span");n.innerHTML="",M.undefined(e)&&(e=""),M.string(e)?a.innerHTML=e.trim():a.appendChild(e),n.appendChild(a);n.offsetHeight}function Y(e){function t(e,t){var n=[];n=e.split(" --> ");for(var a=0;aQe.captions.length-1){Qe.subcount=Qe.captions.length-1;break}Qe.media.currentTime.toFixed(1)>=n(Qe.captions[Qe.subcount][0])&&Qe.media.currentTime.toFixed(1)<=a(Qe.captions[Qe.subcount][0])?(Qe.currentCaption=Qe.captions[Qe.subcount][1],W(Qe.currentCaption)):W()}}function B(){if(Qe.buttons.captions){d(Qe.container,E.classes.captions.enabled,!0);var e=Qe.storage.captionsEnabled;M.boolean(e)||(e=E.captions.defaultActive),e&&(d(Qe.container,E.classes.captions.active,!0),_(Qe.buttons.captions,!0))}}function X(e){return Qe.container.querySelectorAll(e)}function U(e){return X(e)[0]}function K(){try{return e.self!==e.top}catch(e){return!0}}function Q(){function e(e){9===e.which&&Qe.isFullscreen&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=X("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];g(Qe.container,"keydown",e)}function $(e,t){if(M.string(t))c(e,Qe.media,{src:t});else if(t.constructor===Array)for(var n=t.length-1;n>=0;n--)c(e,Qe.media,t[n])}function J(){if(E.loadSprite){var e=j();e.absolute?(ze("AJAX loading absolute SVG sprite"+(Qe.browser.isIE?" (due to IE)":"")),S(e.url,"sprite-plyr")):ze("Sprite will be used as external resource directly")}var n=E.html;ze("Injecting custom controls"),n||(n=L()),n=s(n,"{seektime}",E.seekTime),n=s(n,"{speed}",E.currentSpeed.toFixed(1).toString().replace(".0","")+"×"),n=s(n,"{lang}","English"),Qe.id=Math.floor(1e4*Math.random()),n=s(n,"{id}",Qe.id);var a;if(M.string(E.selectors.controls.container)&&(a=t.querySelector(E.selectors.controls.container)),M.htmlElement(a)||(a=Qe.container),a.insertAdjacentHTML("beforeend",n),E.tooltips.controls)for(var r=X([E.selectors.controls.wrapper," ",E.selectors.labels," .",E.classes.hidden].join("")),o=r.length-1;o>=0;o--){var i=r[o];d(i,E.classes.hidden,!1),d(i,E.classes.tooltip,!0)}}function z(){try{return Qe.controls=U(E.selectors.controls.wrapper),Qe.buttons={seek:U(E.selectors.buttons.seek),play:X(E.selectors.buttons.play),pause:U(E.selectors.buttons.pause),restart:U(E.selectors.buttons.restart),rewind:U(E.selectors.buttons.rewind),forward:U(E.selectors.buttons.forward),fullscreen:U(E.selectors.buttons.fullscreen),settings:U(E.selectors.buttons.settings),pip:U(E.selectors.buttons.pip)},Qe.buttons.mute=U(E.selectors.buttons.mute),Qe.buttons.captions=U(E.selectors.buttons.captions),Qe.progress={container:U(E.selectors.progress.container)},Qe.progress.buffer=function(){var e=U(E.selectors.progress.buffer);return{bar:e,text:M.htmlElement(e)&&e.getElementsByTagName("span")[0]}}(),Qe.progress.played=U(E.selectors.progress.played),Qe.progress.tooltip=Qe.progress.container&&Qe.progress.container.querySelector("."+E.classes.tooltip),Qe.volume={input:U(E.selectors.volume.input),display:U(E.selectors.volume.display)},Qe.duration=U(E.selectors.duration),Qe.currentTime=U(E.selectors.currentTime),Qe.seekTime=X(E.selectors.seekTime),!0}catch(e){return Ge("It looks like there is a problem with your controls HTML",e),Z(!0),!1}}function G(){d(Qe.container,E.selectors.container.replace(".",""),Qe.supported.full)}function Z(e){e&&r(E.types.html5,Qe.type)?Qe.media.setAttribute("controls",""):Qe.media.removeAttribute("controls")}function ee(e){var t=E.i18n.play;if(M.string(E.title)&&E.title.length&&(t+=", "+E.title,Qe.container.setAttribute("aria-label",E.title)),Qe.supported.full&&Qe.buttons.play)for(var n=Qe.buttons.play.length-1;n>=0;n--)Qe.buttons.play[n].setAttribute("aria-label",t);M.htmlElement(e)&&e.setAttribute("title",E.i18n.frameTitle.replace("{title}",E.title))}function te(){var t=null;Qe.storage={},N.storage&&E.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(E.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?ne({volume:parseFloat(t)}):Qe.storage=JSON.parse(t)))}function ne(t){N.storage&&E.storage.enabled&&(x(Qe.storage,t),e.localStorage.setItem(E.storage.key,JSON.stringify(Qe.storage)))}function ae(){if(!Qe.media)return void Ge("No media element found!");if(Qe.supported.full&&(d(Qe.container,E.classes.type.replace("{0}",Qe.type),!0),r(E.types.embed,Qe.type)&&d(Qe.container,E.classes.type.replace("{0}","video"),!0),d(Qe.container,E.classes.pip.enabled,N.pip),d(Qe.container,E.classes.stopped,E.autoplay),d(Qe.container,E.classes.isIos,Qe.browser.isIos),d(Qe.container,E.classes.isTouch,Qe.browser.isTouch),"video"===Qe.type)){var e=t.createElement("div");e.setAttribute("class",E.classes.videoWrapper),o(Qe.media,e),Qe.videoContainer=e}r(E.types.embed,Qe.type)&&re()}function re(){var n,r=t.createElement("div"),s=Qe.type+"-"+Math.floor(1e4*Math.random());switch(Qe.type){case"youtube":n=w(Qe.embedId);break;case"vimeo":n=T(Qe.embedId);break;default:n=Qe.embedId}for(var o=X('[id^="'+Qe.type+'-"]'),l=o.length-1;l>=0;l--)i(o[l]);if(d(Qe.media,E.classes.videoWrapper,!0),d(Qe.media,E.classes.embedWrapper,!0),"youtube"===Qe.type)Qe.media.appendChild(r),r.setAttribute("id",s),M.object(e.YT)?oe(n,r):(a(E.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){oe(n,r)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===Qe.type)if(Qe.supported.full?Qe.media.appendChild(r):r=Qe.media,r.setAttribute("id",s),M.object(e.Vimeo))ie(n,r);else{a(E.urls.vimeo.api);var c=e.setInterval(function(){M.object(e.Vimeo)&&(e.clearInterval(c),ie(n,r))},50)}else if("soundcloud"===Qe.type){var p=t.createElement("iframe");p.loaded=!1,g(p,"load",function(){p.loaded=!0}),u(p,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+n,id:s}),r.appendChild(p),Qe.media.appendChild(r),e.SC||a(E.urls.soundcloud.api);var m=e.setInterval(function(){e.SC&&p.loaded&&(e.clearInterval(m),le.call(p))},50)}}function se(){Qe.supported.full&&(Xe(),Ue()),ee(U("iframe"))}function oe(t,n){Qe.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:E.autoplay?1:0,controls:Qe.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:E.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){A(Qe.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;Qe.media.play=function(){n.playVideo(),Qe.media.paused=!1},Qe.media.pause=function(){n.pauseVideo(),Qe.media.paused=!0},Qe.media.stop=function(){n.stopVideo(),Qe.media.paused=!0},Qe.media.duration=n.getDuration(),Qe.media.paused=!0,Qe.media.currentTime=0,Qe.media.muted=n.isMuted();var a=n.getPlaybackRate(),r=n.getAvailablePlaybackRates();console.warn(a,r),E.title=n.getVideoData().title,Qe.supported.full&&Qe.media.querySelector("iframe").setAttribute("tabindex","-1"),se(),A(Qe.media,"timeupdate"),A(Qe.media,"durationchange"),e.clearInterval($e.buffering),$e.buffering=e.setInterval(function(){Qe.media.buffered=n.getVideoLoadedFraction(),(null===Qe.media.lastBuffered||Qe.media.lastBuffered=E.speeds.length&&(n=0),e=E.speeds[n]}else e=E.defaultSpeed}E.currentSpeed=e,Qe.media.playbackRate=e,ne({speed:e})}function me(e){M.number(e)||(e=E.seekTime),ye(Qe.media.currentTime-e)}function fe(e){M.number(e)||(e=E.seekTime),ye(Qe.media.currentTime+e)}function ye(e){var t=0,n=Qe.media.paused,a=be();M.number(e)?t=e:M.event(e)&&r(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Ne(t);try{Qe.media.currentTime=t.toFixed(4)}catch(e){}if(r(E.types.embed,Qe.type)){switch(Qe.type){case"youtube":Qe.embed.seekTo(t);break;case"vimeo":Qe.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":Qe.embed.seekTo(1e3*t)}n&&ce(),A(Qe.media,"timeupdate"),Qe.media.seeking=!0,A(Qe.media,"seeking")}ze("Seeking to "+Qe.media.currentTime+" seconds"),Y(t)}function be(){var e=parseInt(E.duration),t=0;return null===Qe.media.duration||isNaN(Qe.media.duration)||(t=Qe.media.duration),isNaN(e)?t:e}function ge(){d(Qe.container,E.classes.playing,!Qe.media.paused),d(Qe.container,E.classes.stopped,Qe.media.paused),je(Qe.media.paused)}function ve(){P={x:e.pageXOffset||0,y:e.pageYOffset||0}}function he(){e.scrollTo(P.x,P.y)}function _e(e){var n=N.fullscreen;if(n){if(!e||e.type!==I.eventType)return I.isFullScreen(Qe.container)?I.cancelFullScreen():(ve(),I.requestFullScreen(Qe.container)),void(Qe.isFullscreen=I.isFullScreen(Qe.container));Qe.isFullscreen=I.isFullScreen(Qe.container)}else Qe.isFullscreen=!Qe.isFullscreen,t.body.style.overflow=Qe.isFullscreen?"hidden":"";d(Qe.container,E.classes.fullscreen.active,Qe.isFullscreen),Q(Qe.isFullscreen),Qe.buttons&&Qe.buttons.fullscreen&&_(Qe.buttons.fullscreen,Qe.isFullscreen),A(Qe.container,Qe.isFullscreen?"enterfullscreen":"exitfullscreen",!0),!Qe.isFullscreen&&n&&he()}function ke(e){if(M.boolean(e)||(e=!Qe.media.muted),_(Qe.buttons.mute,e),Qe.media.muted=e,0===Qe.media.volume&&xe(E.volume),r(E.types.embed,Qe.type)){switch(Qe.type){case"youtube":Qe.embed[Qe.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":Qe.embed.setVolume(Qe.media.muted?0:parseFloat(E.volume/E.volumeMax))}A(Qe.media,"volumechange")}}function xe(e){var t=E.volumeMax,n=E.volumeMin;if(M.undefined(e)&&(e=Qe.storage.volume),(null===e||isNaN(e))&&(e=E.volume),e>t&&(e=t),e0&&ke()}function we(e){var t=Qe.media.muted?0:Qe.media.volume*E.volumeMax;M.number(e)||(e=E.volumeStep),xe(t+e)}function Te(e){var t=Qe.media.muted?0:Qe.media.volume*E.volumeMax;M.number(e)||(e=E.volumeStep),xe(t-e)}function Ee(){var e=Qe.media.muted?0:Qe.media.volume*E.volumeMax;Qe.supported.full&&(Qe.volume.input&&(Qe.volume.input.value=e),Qe.volume.display&&(Qe.volume.display.value=e)),ne({volume:e}),d(Qe.container,E.classes.muted,0===e),Qe.supported.full&&Qe.buttons.mute&&_(Qe.buttons.mute,0===e)}function Se(e){Qe.supported.full&&Qe.buttons.captions&&(M.boolean(e)||(e=Qe.container.className.indexOf(E.classes.captions.active)===-1),Qe.captionsEnabled=e,_(Qe.buttons.captions,Qe.captionsEnabled),d(Qe.container,E.classes.captions.active,Qe.captionsEnabled),A(Qe.container,Qe.captionsEnabled?"captionsenabled":"captionsdisabled",!0),ne({captionsEnabled:Qe.captionsEnabled}))}function Ce(e){E.captions.selectedIndex=e,W(),H()}function Ae(e){var t="waiting"===e.type;clearTimeout($e.loading),$e.loading=setTimeout(function(){d(Qe.container,E.classes.loading,t),je(t)},t?250:0)}function Fe(e){if(Qe.supported.full){var t=Qe.progress.played,n=0,a=be();if(e)switch(e.type){case"timeupdate":case"seeking":if(Qe.controls.pressed)return;n=k(Qe.media.currentTime,a),"timeupdate"===e.type&&Qe.buttons.seek&&(Qe.buttons.seek.value=n);break;case"playing":case"progress":t=Qe.progress.buffer,n=function(){var e=Qe.media.buffered;return e&&e.length?k(e.end(0),a):M.number(e)?100*e:0}()}Ie(t,n)}}function Ie(e,t){if(Qe.supported.full){if(M.undefined(t)&&(t=0),M.undefined(e)){if(!Qe.progress||!Qe.progress.buffer)return;e=Qe.progress.buffer}M.htmlElement(e)?e.value=t:e&&(e.bar&&(e.bar.value=t),e.text&&(e.text.innerHTML=t))}}function Pe(e,t){if(t){isNaN(e)&&(e=0),Qe.secs=parseInt(e%60),Qe.mins=parseInt(e/60%60),Qe.hours=parseInt(e/60/60%60);var n=parseInt(be()/60/60%60)>0;Qe.secs=("0"+Qe.secs).slice(-2),Qe.mins=("0"+Qe.mins).slice(-2),t.innerHTML=(n?Qe.hours+":":"")+Qe.mins+":"+Qe.secs}}function qe(){if(Qe.supported.full){var e=be()||0;!Qe.duration&&E.displayDuration&&Qe.media.paused&&Pe(e,Qe.currentTime), +Qe.duration&&Pe(e,Qe.duration),Oe()}}function Me(e){Pe(Qe.media.currentTime,Qe.currentTime),e&&"timeupdate"===e.type&&Qe.media.seeking||Fe(e)}function Ne(e){M.number(e)||(e=0);var t=be(),n=k(e,t);Qe.progress&&Qe.progress.played&&(Qe.progress.played.value=n),Qe.buttons&&Qe.buttons.seek&&(Qe.buttons.seek.value=n)}function Oe(e){var t=be();if(E.tooltips.seek&&Qe.progress.container&&0!==t){var n=Qe.progress.container.getBoundingClientRect(),a=0,s=E.classes.tooltip+"--visible";if(e)a=100/n.width*(e.pageX-n.left);else{if(!m(Qe.progress.tooltip,s))return;a=Qe.progress.tooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Pe(t/100*a,Qe.progress.tooltip),Qe.progress.tooltip.style.left=a+"%",e&&r(["mouseenter","mouseleave"],e.type)&&d(Qe.progress.tooltip,s,"mouseenter"===e.type)}}function je(t){if(E.hideControls&&"audio"!==Qe.type){var n=0,a=!1,s=t,o=m(Qe.container,E.classes.loading);if(M.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,s=r(["mousemove","touchstart","mouseenter","focus"],t.type),r(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=m(Qe.container,E.classes.hideControls)),e.clearTimeout($e.hover),s||Qe.media.paused||o){if(d(Qe.container,E.classes.hideControls,!1),Qe.media.paused||o)return;Qe.browser.isTouch&&(n=3e3)}s&&Qe.media.paused||($e.hover=e.setTimeout(function(){(!Qe.controls.pressed&&!Qe.controls.hover||a)&&d(Qe.container,E.classes.hideControls,!0)},n))}}function Le(e){if(!M.undefined(e))return void Re(e);var t;switch(Qe.type){case"youtube":t=Qe.embed.getVideoUrl();break;case"vimeo":Qe.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":Qe.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=Qe.media.currentSrc}return t||""}function Re(e){function n(){if(Qe.embed=null,i(Qe.media),"video"===Qe.type&&Qe.videoContainer&&i(Qe.videoContainer),Qe.container&&Qe.container.removeAttribute("class"),"type"in e&&(Qe.type=e.type,"video"===Qe.type)){var n=e.sources[0];"type"in n&&r(E.types.embed,n.type)&&(Qe.type=n.type)}switch(Qe.supported=C(Qe.type),Qe.type){case"video":Qe.media=t.createElement("video");break;case"audio":Qe.media=t.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":Qe.media=t.createElement("div"),Qe.embedId=e.sources[0].src}l(Qe.container,Qe.media),M.boolean(e.autoplay)&&(E.autoplay=e.autoplay),r(E.types.html5,Qe.type)&&(E.crossorigin&&Qe.media.setAttribute("crossorigin",""),E.autoplay&&Qe.media.setAttribute("autoplay",""),"poster"in e&&Qe.media.setAttribute("poster",e.poster),E.loop&&Qe.media.setAttribute("loop","")),d(Qe.container,E.classes.fullscreen.active,Qe.isFullscreen),d(Qe.container,E.classes.captions.active,Qe.captionsEnabled),G(),r(E.types.html5,Qe.type)&&$("source",e.sources),ae(),r(E.types.html5,Qe.type)&&("tracks"in e&&$("track",e.tracks),Qe.media.load()),(r(E.types.html5,Qe.type)||r(E.types.embed,Qe.type)&&!Qe.supported.full)&&(Xe(),Ue()),E.title=e.title,ee()}return M.object(e)&&"sources"in e&&e.sources.length?(d(Qe.container,E.classes.ready,!1),ce(),Ne(),Ie(),We(),void Ye(n,!1)):void Ge("Invalid source format")}function De(e){"video"===Qe.type&&Qe.media.setAttribute("poster",e)}function Ve(){function n(){var e=pe(),t=Qe.buttons[e?"play":"pause"],n=Qe.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=m(t,E.classes.tabFocus);setTimeout(function(){n.focus(),a&&(d(t,E.classes.tabFocus,!1),d(n,E.classes.tabFocus,!0))},100)}}function a(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function s(e){return e.keyCode?e.keyCode:e.which}function o(e){for(var t in Qe.buttons){var n=Qe.buttons[t];if(M.nodeList(n))for(var a=0;a0)&&(t?Te(n):we(n)),(e.deltaY>0||e.deltaX<0)&&(t?we(n):Te(n))})}function He(){if(g(Qe.media,"timeupdate seeking",Me),g(Qe.media,"timeupdate",Y),g(Qe.media,"durationchange loadedmetadata",qe),g(Qe.media,"ended",function(){"video"===Qe.type&&E.showPosterOnEnd&&("video"===Qe.type&&W(),ye(),Qe.media.load())}),g(Qe.media,"progress playing",Fe),g(Qe.media,"volumechange",Ee),g(Qe.media,"play pause ended",ge),g(Qe.media,"waiting canplay seeked",Ae),E.clickToPlay&&"audio"!==Qe.type){var e=U("."+E.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",g(e,"click",function(){E.hideControls&&Qe.browser.isTouch&&!Qe.media.paused||(Qe.media.paused?ue():Qe.media.ended?(ye(),ue()):ce())})}E.disableContextMenu&&g(Qe.media,"contextmenu",function(e){e.preventDefault()}),g(Qe.media,E.events.concat(["keyup","keydown"]).join(" "),function(e){A(Qe.container,e.type,!0)})}function We(){if(r(E.types.html5,Qe.type)){for(var e=Qe.media.querySelectorAll("source"),t=0;t', ''),lt.captions.textTracks=!1,lt.elements.media.textTracks&&(lt.captions.textTracks=!0);var e=[],t="";if(lt.elements.media.childNodes.forEach(function(t){"track"===t.nodeName.toLowerCase()&&("captions"!==t.kind&&"subtitles"!==t.kind||e.push(t.getAttribute("src")))}),lt.captions.exist=!0,0===e.length?(lt.captions.exist=!1,ot("No caption track found")):Number(I.captions.selectedIndex)+1>e.length?(lt.captions.exist=!1,ot("Caption index out of bound")):(t=e[I.captions.selectedIndex],ot("Caption track found; URI: "+t)),lt.captions.exist){var n=lt.elements.media.textTracks;if([].forEach.call(n,function(e){C(e,"cuechange",te),e.mode="hidden"}),ie(lt),(lt.browser.isIE&<.browser.version>=10||lt.browser.isFirefox&<.browser.version>=31)&&(ot("Detected browser with known TextTrack issues - using manual fallback"),lt.captions.textTracks=!1),lt.captions.textTracks){ot("TextTracks supported");var a=n[I.captions.selectedIndex];"captions"!==a.kind&&"subtitles"!==a.kind||(w(a,"cuechange",te),a.activeCues&&a.activeCues.length>0&&te(a))}else if(ot("TextTracks not supported so rendering captions manually"),lt.captions.current="",lt.captions.captions=[],""!==t){var s=new XMLHttpRequest;s.onreadystatechange=function(){if(4===s.readyState)if(200===s.status){var e=s.responseText,t="\r\n";e.indexOf(t+t)===-1&&(t=e.indexOf("\r\r")!==-1?"\r":"\n");var n=e.split(t+t);lt.captions.captions=n.map(function(e){var n=e.split(t),a=0;return n[a].indexOf(":")!==-1&&(a=1),[n[a],n[a+1]]}),lt.captions.captions.shift(),ot("Successfully loaded the caption file via AJAX")}else ut(I.logPrefix+"There was a problem loading the caption file via AJAX")},s.open("get",t,!0),s.send()}}else y(lt.elements.container,I.classes.captions.enabled)}}function ae(e){I.captions.selectedIndex=e||I.captions.selectedIndex,se(),ne()}function se(e){var t=W(I.selectors.captions);if(j.htmlElement(t)){var n=d("span");m(t),j.undefined(e)&&(e=""),j.string(e)?n.innerHTML=e.trim():n.appendChild(e),t.appendChild(n)}}function le(e){function t(e,t){var n=[];n=e.split(" --> ");for(var a=0;alt.captions.captions.length-1){lt.captions.count=lt.captions.captions.length-1;break}lt.elements.media.currentTime.toFixed(1)>=n(lt.captions[lt.subcount][0])&<.elements.media.currentTime.toFixed(1)<=a(lt.captions[lt.subcount][0])?(lt.captions.current=lt.captions.captions[lt.captions.count][1],se(lt.captions.current)):se()}}function ie(){if(lt.elements.buttons.captions){y(lt.elements.container,I.classes.captions.enabled,!0);var e=lt.storage.captions;j.boolean(e)||(e=I.captions.defaultActive),e&&(y(lt.elements.container,I.classes.captions.active,!0),T(lt.elements.buttons.captions,!0))}}function re(e){lt.supported.full&<.elements.buttons.captions&&(j.boolean(e)||(e=lt.elements.container.className.indexOf(I.classes.captions.active)===-1),lt.captions.enabled=e,T(lt.elements.buttons.captions,lt.captions.enabled),y(lt.elements.container,I.classes.captions.active,lt.captions.enabled),V(lt.elements.container,lt.captions.enabled?"captionsenabled":"captionsdisabled",!0),me({captions:lt.captions.enabled}))}function oe(){if(I.loadSprite){var e=Y();e.absolute?(ot("AJAX loading absolute SVG sprite"+(lt.browser.isIE?" (due to IE)":"")),P(e.url,"sprite-plyr")):ot("Sprite will be used as external resource directly")}l(I.controls,"play-large")&&(lt.elements.buttons.playLarge=K("play-large"),lt.elements.container.appendChild(lt.elements.buttons.playLarge)),lt.id=Math.floor(1e4*Math.random());var n,a=G({id:lt.id,seektime:I.seekTime,speed:Se(),quality:"HD",captions:"English",loop:"None"});if(j.string(I.selectors.controls.container)&&(n=t.querySelector(I.selectors.controls.container)),j.htmlElement(n)||(n=lt.elements.container),n.appendChild(a),I.tooltips.controls)for(var s=D([I.selectors.controls.wrapper," ",I.selectors.labels," .",I.classes.hidden].join("")),i=s.length-1;i>=0;i--){var r=s[i];y(r,I.classes.hidden,!1),y(r,I.classes.tooltip,!0)}}function ue(){y(lt.elements.container,I.selectors.container.replace(".",""),lt.supported.full)}function ce(e){e&&l(I.types.html5,lt.type)?lt.elements.media.setAttribute("controls",""):lt.elements.media.removeAttribute("controls")}function de(e){var t=I.i18n.play;j.string(I.title)&&I.title.length&&(t+=", "+I.title,lt.elements.container.setAttribute("aria-label",I.title)),lt.supported.full&&(j.htmlElement(lt.elements.buttons.play)&<.elements.buttons.play.setAttribute("aria-label",t),j.htmlElement(lt.elements.buttons.playLarge)&<.elements.buttons.playLarge.setAttribute("aria-label",t)),j.htmlElement(e)&&e.setAttribute("title",I.i18n.frameTitle.replace("{title}",I.title))}function pe(){var t=null;lt.storage={},R.storage&&I.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(I.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?me({volume:parseFloat(t)}):lt.storage=JSON.parse(t)))}function me(t){R.storage&&I.storage.enabled&&(E(lt.storage,t),e.localStorage.setItem(I.storage.key,JSON.stringify(lt.storage)))}function fe(){if(!lt.elements.media)return void ut("No media element found!");if(lt.supported.full&&(y(lt.elements.container,I.classes.type.replace("{0}",lt.type),!0),l(I.types.embed,lt.type)&&y(lt.elements.container,I.classes.type.replace("{0}","video"),!0),y(lt.elements.container,I.classes.pip.enabled,R.pip&&"video"===lt.type),y(lt.elements.container,I.classes.airplay.enabled,R.airplay&&"video"===lt.type),y(lt.elements.container,I.classes.stopped,I.autoplay),y(lt.elements.container,I.classes.isIos,lt.browser.isIos),y(lt.elements.container,I.classes.isTouch,lt.browser.isTouch),"video"===lt.type)){var e=d("div");e.setAttribute("class",I.classes.videoWrapper),i(lt.elements.media,e),lt.elements.wrapper=e}l(I.types.embed,lt.type)&&ye()}function ye(){var t,n=d("div"),s=lt.type+"-"+Math.floor(1e4*Math.random());switch(lt.type){case"youtube":t=A(lt.embedId);break;case"vimeo":t=_(lt.embedId);break;default:t=lt.embedId}for(var l=D('[id^="'+lt.type+'-"]'),i=l.length-1;i>=0;i--)r(l[i]);if(y(lt.elements.media,I.classes.videoWrapper,!0),y(lt.elements.media,I.classes.embedWrapper,!0),"youtube"===lt.type)lt.elements.media.appendChild(n),n.setAttribute("id",s),j.object(e.YT)?ve(t,n):(a(I.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){ve(t,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===lt.type)if(lt.supported.full?lt.elements.media.appendChild(n):n=lt.elements.media,n.setAttribute("id",s),j.object(e.Vimeo))ge(t,n);else{a(I.urls.vimeo.api);var o=e.setInterval(function(){j.object(e.Vimeo)&&(e.clearInterval(o),ge(t,n))},50)}else if("soundcloud"===lt.type){var c=d("iframe");c.loaded=!1,w(c,"load",function(){c.loaded=!0}),u(c,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+t,id:s}),n.appendChild(c),lt.elements.media.appendChild(n),e.SC||a(I.urls.soundcloud.api);var p=e.setInterval(function(){e.SC&&c.loaded&&(e.clearInterval(p),he.call(c))},50)}}function be(){lt.supported.full&&(nt(),at()),de(W("iframe"))}function ve(t,n){lt.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:I.autoplay?1:0,controls:lt.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:I.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){V(lt.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;lt.elements.media.play=function(){n.playVideo(),lt.elements.media.paused=!1},lt.elements.media.pause=function(){n.pauseVideo(),lt.elements.media.paused=!0},lt.elements.media.stop=function(){n.stopVideo(),lt.elements.media.paused=!0},lt.elements.media.duration=n.getDuration(),lt.elements.media.paused=!0,lt.elements.media.currentTime=0,lt.elements.media.muted=n.isMuted();var a=n.getPlaybackRate(),s=n.getAvailablePlaybackRates();console.warn(a,s),I.title=n.getVideoData().title,lt.supported.full&<.elements.media.querySelector("iframe").setAttribute("tabindex","-1"),be(),V(lt.elements.media,"timeupdate"),V(lt.elements.media,"durationchange"),e.clearInterval(it.buffering),it.buffering=e.setInterval(function(){lt.elements.media.buffered=n.getVideoLoadedFraction(),(null===lt.elements.media.lastBuffered||lt.elements.media.lastBuffered=n)return;I.loop.end=n,I.loop.indicator.end=lt.elements.display.played.value;break;case"all":I.loop.start=0,I.loop.end=lt.elements.media.duration-2,I.loop.indicator.start=0,I.loop.indicator.end=100;break;case"toggle":I.loop.active?(I.loop.start=0,I.loop.end=null):(I.loop.start=0,I.loop.end=lt.elements.media.duration-2);break;default:I.loop.start=0,I.loop.end=null}I.loop.active=j.number(I.loop.start)&&j.number(I.loop.end);var a=(He(I.loop.start,W('[data-plyr-loop="start"]')),null);j.number(I.loop.end)&&(a=He(I.loop.end,t.querySelector('[data-loop__value="loopout"]'))),I.loop.active}function Te(e){if(j.undefined(e)&&(e=lt.storage.speed||I.defaultSpeed),!j.array(I.speeds))return void ut("Invalid speeds format");if(!j.number(e)){var t=I.speeds.indexOf(I.currentSpeed);if(t!==-1){var n=t+1;n>=I.speeds.length&&(n=0),e=I.speeds[n]}else e=I.defaultSpeed}I.currentSpeed=e,lt.elements.media.playbackRate=e,me({speed:e})}function Se(){return I.currentSpeed.toFixed(1).toString().replace(".0","")+"×"}function Ee(e){j.number(e)||(e=I.seekTime),_e(lt.elements.media.currentTime-e)}function Ae(e){j.number(e)||(e=I.seekTime),_e(lt.elements.media.currentTime+e)}function _e(e){var t=0,n=lt.elements.media.paused,a=Ie();j.number(e)?t=e:j.event(e)&&l(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Xe(t);try{lt.elements.media.currentTime=t.toFixed(4)}catch(e){}if(l(I.types.embed,lt.type)){switch(lt.type){case"youtube":lt.embed.seekTo(t);break;case"vimeo":lt.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":lt.embed.seekTo(1e3*t)}n&&we(),V(lt.elements.media,"timeupdate"),lt.elements.media.seeking=!0,V(lt.elements.media,"seeking")}ot("Seeking to "+lt.elements.media.currentTime+" seconds"),le(t)}function Ie(){var e=parseInt(I.duration),t=0;return null===lt.elements.media.duration||isNaN(lt.elements.media.duration)||(t=lt.elements.media.duration),isNaN(e)?t:e}function Pe(){y(lt.elements.container,I.classes.playing,!lt.elements.media.paused),y(lt.elements.container,I.classes.stopped,lt.elements.media.paused),Je(lt.elements.media.paused)}function Ne(){L={x:e.pageXOffset||0,y:e.pageYOffset||0}}function Fe(){e.scrollTo(L.x,L.y)}function qe(e){var n=R.fullscreen;if(n){if(!e||e.type!==M.eventType)return M.isFullScreen(lt.elements.container)?M.cancelFullScreen():(Ne(),M.requestFullScreen(lt.elements.container)),void(lt.fullscreen.active=M.isFullScreen(lt.elements.container));lt.fullscreen.active=M.isFullScreen(lt.elements.container)}else lt.fullscreen.active=!lt.fullscreen.active,t.body.style.overflow=lt.fullscreen.active?"hidden":"";y(lt.elements.container,I.classes.fullscreen.active,lt.fullscreen.active),H(lt.fullscreen.active),lt.elements.buttons&<.elements.buttons.fullscreen&&T(lt.elements.buttons.fullscreen,lt.fullscreen.active),V(lt.elements.container,lt.fullscreen.active?"enterfullscreen":"exitfullscreen",!0),!lt.fullscreen.active&&n&&Fe()}function Le(e){if(j.boolean(e)||(e=!lt.elements.media.muted),T(lt.elements.buttons.mute,e),lt.elements.media.muted=e,0===lt.elements.media.volume&&Oe(I.volume),l(I.types.embed,lt.type)){switch(lt.type){case"youtube":lt.embed[lt.elements.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":lt.embed.setVolume(lt.elements.media.muted?0:parseFloat(I.volume/10))}V(lt.elements.media,"volumechange")}}function Oe(e){var t=10,n=0;if(j.event(e)&&(e=e.target.value),j.undefined(e)&&(e=lt.storage.volume),(null===e||isNaN(e))&&(e=I.volume),e>t&&(e=t),e0&&Le()}function je(e){var t=lt.elements.media.muted?0:10*lt.elements.media.volume;j.number(e)||(e=1),Oe(t+e)}function Me(e){var t=lt.elements.media.muted?0:10*lt.elements.media.volume;j.number(e)||(e=1),Oe(t-e)}function Re(){var e=lt.elements.media.muted?0:10*lt.elements.media.volume;lt.supported.full&&(lt.elements.inputs.volume&&(lt.elements.inputs.volume.value=e),lt.elements.display.volume&&(lt.elements.display.volume.value=e)),me({volume:e}),y(lt.elements.container,I.classes.muted,0===e),lt.supported.full&<.elements.buttons.mute&&T(lt.elements.buttons.mute,0===e)}function Ve(e){var t="waiting"===e.type;clearTimeout(it.loading),it.loading=setTimeout(function(){y(lt.elements.container,I.classes.loading,t),Je(t)},t?250:0)}function De(e){if(lt.supported.full){var t=lt.elements.display.played,n=0,a=Ie();if(e)switch(e.type){case"timeupdate":case"seeking":if(lt.elements.controls.pressed)return;n=S(lt.elements.media.currentTime,a),"timeupdate"===e.type&<.elements.inputs.seek&&(lt.elements.inputs.seek.value=n);break;case"playing":case"progress":t=lt.elements.display.buffer,n=function(){var e=lt.elements.media.buffered;return e&&e.length?S(e.end(0),a):j.number(e)?100*e:0}()}j.number(I.loop.start)&&j.number(I.loop.end)&<.elements.media.currentTime>=I.loop.end&&_e(I.loop.start),We(t,n)}}function We(e,t){if(lt.supported.full){if(j.undefined(t)&&(t=0),j.undefined(e)){if(!j.htmlElement(lt.elements.display.buffer))return;e=lt.elements.display.buffer}if(j.htmlElement(e)){e.value=t;var n=e.getElementsByTagName("span")[0];j.htmlElement(n)&&(n.childNodes[0].nodeValue=t)}}}function He(e,t){if(t){isNaN(e)&&(e=0);var n=parseInt(e%60),a=parseInt(e/60%60),s=parseInt(e/60/60%60),l=parseInt(Ie()/60/60%60)>0;n=("0"+n).slice(-2),a=("0"+a).slice(-2);var i=(l?s+":":"")+a+":"+n;return t.textContent=i,i}}function Be(){if(lt.supported.full){var e=Ie()||0;!lt.elements.display.duration&&I.displayDuration&<.elements.media.paused&&He(e,lt.elements.display.currentTime),lt.elements.display.duration&&He(e,lt.elements.display.duration),Ue()}}function Ye(e){He(lt.elements.media.currentTime,lt.elements.display.currentTime),e&&"timeupdate"===e.type&<.elements.media.seeking||De(e)}function Xe(e){j.number(e)||(e=0);var t=Ie(),n=S(e,t);lt.elements.progress&<.elements.display.played&&(lt.elements.display.played.value=n),lt.elements.buttons&<.elements.inputs.seek&&(lt.elements.inputs.seek.value=n)}function Ue(e){var t=Ie();if(I.tooltips.seek&&j.htmlElement(lt.elements.inputs.seek)&&j.htmlElement(lt.elements.display.seekTooltip)&&0!==t){var n=lt.elements.inputs.seek.getBoundingClientRect(),a=0,s=I.classes.tooltip+"--visible";if(j.event(e))a=100/n.width*(e.pageX-n.left);else{if(!b(lt.elements.display.seekTooltip,s))return;a=lt.elements.display.seekTooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),He(t/100*a,lt.elements.display.seekTooltip),lt.elements.display.seekTooltip.style.left=a+"%",j.event(e)&&l(["mouseenter","mouseleave"],e.type)&&y(lt.elements.display.seekTooltip,s,"mouseenter"===e.type); +}}function Je(t){if(I.hideControls&&"audio"!==lt.type){var n=0,a=!1,s=t,i=b(lt.elements.container,I.classes.loading);if(j.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,s=l(["mousemove","touchstart","mouseenter","focus"],t.type),l(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=b(lt.elements.container,I.classes.hideControls)),e.clearTimeout(it.hover),s||lt.elements.media.paused||i){if(y(lt.elements.container,I.classes.hideControls,!1),lt.elements.media.paused||i)return;lt.browser.isTouch&&(n=3e3)}s&<.elements.media.paused||(it.hover=e.setTimeout(function(){(!lt.elements.controls.pressed&&!lt.elements.controls.hover||a)&&y(lt.elements.container,I.classes.hideControls,!0)},n))}}function Ke(e){if(!j.undefined(e))return void Qe(e);var t;switch(lt.type){case"youtube":t=lt.embed.getVideoUrl();break;case"vimeo":lt.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":lt.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=lt.elements.media.currentSrc}return t||""}function Qe(e){function t(){if(lt.embed=null,r(lt.elements.media),"video"===lt.type&<.elements.wrapper&&r(lt.elements.wrapper),lt.elements.container&<.elements.container.removeAttribute("class"),"type"in e&&(lt.type=e.type,"video"===lt.type)){var t=e.sources[0];"type"in t&&l(I.types.embed,t.type)&&(lt.type=t.type)}switch(lt.supported=N(lt.type),lt.type){case"video":lt.elements.media=d("video");break;case"audio":lt.elements.media=d("audio");break;case"youtube":case"vimeo":case"soundcloud":lt.elements.media=d("div"),lt.embedId=e.sources[0].src}o(lt.elements.container,lt.elements.media),j.boolean(e.autoplay)&&(I.autoplay=e.autoplay),l(I.types.html5,lt.type)&&(I.crossorigin&<.elements.media.setAttribute("crossorigin",""),I.autoplay&<.elements.media.setAttribute("autoplay",""),"poster"in e&<.elements.media.setAttribute("poster",e.poster),I.loop.active&<.elements.media.setAttribute("loop","")),y(lt.elements.container,I.classes.fullscreen.active,lt.fullscreen.active),y(lt.elements.container,I.classes.captions.active,lt.captions.enabled),ue(),l(I.types.html5,lt.type)&&B("source",e.sources),fe(),l(I.types.html5,lt.type)&&("tracks"in e&&B("track",e.tracks),lt.elements.media.load()),(l(I.types.html5,lt.type)||l(I.types.embed,lt.type)&&!lt.supported.full)&&(nt(),at()),I.title=e.title,de()}return j.object(e)&&"sources"in e&&e.sources.length?(y(lt.elements.container,I.classes.ready,!1),we(),Xe(),We(),Ze(),void et(t,!1)):void ut("Invalid source format")}function ze(e){"video"===lt.type&<.elements.media.setAttribute("poster",e)}function $e(){function n(){var e=Ce(),t=lt.elements.buttons[e?"play":"pause"],n=lt.elements.buttons[e?"pause":"play"];if(n=n&&n.length>1?n[n.length-1]:n[0]){var a=b(t,I.classes.tabFocus);setTimeout(function(){n.focus(),a&&(y(t,I.classes.tabFocus,!1),y(n,I.classes.tabFocus,!0))},100)}}function a(e){return e.keyCode?e.keyCode:e.which}function s(e){for(var t in lt.elements.buttons){var n=lt.elements.buttons[t];if(j.nodeList(n))for(var a=0;a0)&&(t?(Me(n),a=-1):(je(n),a=1)),(e.deltaY>0||e.deltaX<0)&&(t?(je(n),a=1):(Me(n),a=-1)),(1===a&<.elements.media.volume<1||a===-1&<.elements.media.volume>0)&&e.preventDefault()}),R.fullscreen&&w(t,M.eventType,qe)}function Ge(){if(w(lt.elements.media,"timeupdate seeking",Ye),w(lt.elements.media,"timeupdate",le),w(lt.elements.media,"durationchange loadedmetadata",Be),w(lt.elements.media,"ended",function(){"video"===lt.type&&I.showPosterOnEnd&&("video"===lt.type&&se(),_e(),lt.elements.media.load())}),w(lt.elements.media,"progress playing",De),w(lt.elements.media,"volumechange",Re),w(lt.elements.media,"play pause ended",Pe),w(lt.elements.media,"waiting canplay seeked",Ve),I.clickToPlay&&"audio"!==lt.type){var e=W("."+I.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",w(e,"click",function(){I.hideControls&<.browser.isTouch&&!lt.elements.media.paused||(lt.elements.media.paused?ke():lt.elements.media.ended?(_e(),ke()):we())})}I.disableContextMenu&&w(lt.elements.media,"contextmenu",function(e){e.preventDefault()}),w(lt.elements.media,I.events.concat(["keyup","keydown"]).join(" "),function(e){V(lt.elements.container,e.type,!0)})}function Ze(){if(l(I.types.html5,lt.type)){for(var e=lt.elements.media.querySelectorAll("source"),t=0;t