aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Potts <me@sampotts.me>2017-09-03 14:36:55 +1000
committerSam Potts <me@sampotts.me>2017-09-03 14:36:55 +1000
commit2bba1f30e28f402ef96b5f5181dd75788b0e25c9 (patch)
tree1e40cc57e3a5b62117b5c9b8906c1348d62d90e7
parent21966654957f59acc7baf40e60beb72a856eca84 (diff)
downloadplyr-2bba1f30e28f402ef96b5f5181dd75788b0e25c9.tar.lz
plyr-2bba1f30e28f402ef96b5f5181dd75788b0e25c9.tar.xz
plyr-2bba1f30e28f402ef96b5f5181dd75788b0e25c9.zip
Fixing Vimeo captions, WIP on settings menu, prettier and VS code settings
-rw-r--r--.eslintrc.json3
-rw-r--r--.jsbeautifyrc32
-rw-r--r--.vscode/settings.json25
-rw-r--r--demo/dist/demo.css2
-rw-r--r--demo/dist/demo.js2
-rw-r--r--demo/src/js/main.js101
-rw-r--r--dist/plyr.css2
-rw-r--r--dist/plyr.js4
-rw-r--r--package.json100
-rw-r--r--src/js/plyr.js1160
-rw-r--r--src/less/plyr.less45
-rw-r--r--src/less/variables.less111
12 files changed, 979 insertions, 608 deletions
diff --git a/.eslintrc.json b/.eslintrc.json
index a4552c73..971d2aed 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -14,6 +14,7 @@
"SwitchCase": 1
}],
"quotes": ["error", "single"],
- "semi": ["error", "always"]
+ "semi": ["error", "always"],
+ "eqeqeq": ["error", "always"]
}
} \ No newline at end of file
diff --git a/.jsbeautifyrc b/.jsbeautifyrc
deleted file mode 100644
index 10bda02e..00000000
--- a/.jsbeautifyrc
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "html": {
- "allowed_file_extensions": []
- },
- "css": {
- "allowed_file_extensions": []
- },
- "js": {
- "allowed_file_extensions": ["js", "json", "jsbeautifyrc"],
- "brace_style": "collapse",
- "break_chained_methods": false,
- "e4x": false,
- "end_with_newline": false,
- "indent_char": " ",
- "indent_level": 0,
- "indent_size": 4,
- "indent_with_tabs": false,
- "jslint_happy": false,
- "keep_array_indentation": true,
- "keep_function_indentation": true,
- "max_preserve_newlines": 2,
- "preserve_newlines": true,
- "space_after_anon_function": false,
- "space_before_conditional": true,
- "space_in_empty_paren": false,
- "space_in_paren": false,
- "unescape_strings": false,
- "wrap_line_length": 0,
- "wrap_attributes": "auto",
- "wrap_attributes_indent_size": 4
- }
-}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..a2ac0b30
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,25 @@
+{
+ // Exclude from the editor
+ "files.exclude": {
+ "**/node_modules": true
+ },
+
+ // Exclude from search
+ "search.exclude": {
+ "dist/": true
+ },
+
+ // Formatting
+ "editor.tabSize": 4,
+ "editor.insertSpaces": true,
+ "editor.formatOnSave": true,
+
+ // Trim on save
+ "files.trimTrailingWhitespace": true,
+
+ // Prettier settings
+ "prettier.tabWidth": 4,
+ "prettier.eslintIntegration": true,
+ "prettier.printWidth": 120,
+ "prettier.cssEnable": ["css", "less", "scss"]
+} \ No newline at end of file
diff --git a/demo/dist/demo.css b/demo/dist/demo.css
index e16e5357..f709fedc 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}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}.btn__bar,body{max-width:1200px}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;margin:0 auto 20px;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}@media (min-width:480px){body{margin-bottom:40px}header{padding-top:60px;padding-bottom:60px}}.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}.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 */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:0 0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-webkit-box-sizing:content-box;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}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}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]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;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(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%}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}h1,h2{letter-spacing:-.025em;color:#3498db;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{display:block;padding:0 10px;font-size:14px;font-size:.875rem}li,ul{list-style:none;margin:0;padding:0}a{text-decoration:none;color:#3498db;border-bottom:1px dotted currentColor;-webkit-transition:background .3s ease,color .3s ease,border .3s ease;transition:background .3s ease,color .3s ease,border .3s ease}a:focus,a:hover{color:#343f4a;border-bottom-color:transparent}a:focus{outline:thin dotted #343f4a;outline-offset:1px}a.logo{border:0}.color--vimeo{color:#19b7ed}.color--youtube{color:#cc181e}*,::after,::before{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none}html{height:100%;background:#f2f5f7 fixed}body{margin:0 auto 20px;padding:10px;max-width:1200px}@media (min-width:480px){body{margin-bottom:40px}}header{padding:20px;margin-bottom:20px}header p{font-size:18px;font-size:1.125rem}@media (min-width:480px){header{padding-top:60px;padding-bottom:60px}}.icon{fill:currentColor;width:18px;height:18px;vertical-align:-3px}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{list-style:none;margin:0;padding:0;font-size:0}nav li{display:inline-block;margin-top:10px;font-size:16px;font-size:1rem;white-space:nowrap}nav li+li{margin-left:20px}.btn__bar{position:relative;margin:0 auto 20px;max-width:1200px;white-space:nowrap}.btn__bar::before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background:#dbe3e8}.btn__bar ul{position:relative;z-index:1;display:inline-block;-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{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.2);box-shadow:inset 0 1px 1px rgba(0,0,0,.2);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;vertical-align:middle;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:-webkit-gradient(linear,left top,left bottom,from(#f8fafb),to(#e9eef1));background:linear-gradient(#f8fafb,#e9eef1);border:1px solid #cbd0d3;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05);text-shadow:0 1px 1px #fff;color:#55646b;-webkit-transition:background .1s ease,color .1s ease;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:-webkit-gradient(linear,left top,left bottom,from(#3498db),to(#258cd1));background-image:linear-gradient(#3498db,#258cd1);background-color:#3498db;border-color:#217dbb;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.15);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{content:"";position:absolute;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%;vertical-align:middle}video{max-width:100%;vertical-align:middle}.plyr{margin:0 auto;border-radius:6px}.plyr--audio{max-width:520px}.plyr__video-wrapper::after{content:"";pointer-events:none;position:absolute;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 10982d16..4ffad66c 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,n=arguments.length;for(i=0;i<n;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",n=e.Element[i],o=Object,r=String[i].trim||function(){return this.replace(/^\s+|\s+$/g,"")},s=Array[i].indexOf||function(e){for(var t=0,i=this.length;t<i;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 s.call(e,t)},l=function(e){for(var t=r.call(e.getAttribute("class")||""),i=t?t.split(/\s+/):[],n=0,o=i.length;n<o;n++)this.push(i[n]);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+="",c(this,e)!==-1},u.add=function(){var e,t=arguments,i=0,n=t.length,o=!1;do e=t[i]+"",c(this,e)===-1&&(this.push(e),o=!0);while(++i<n);o&&this._updateClassName()},u.remove=function(){var e,t,i=arguments,n=0,o=i.length,r=!1;do for(e=i[n]+"",t=c(this,e);t!==-1;)this.splice(t,1),r=!0,t=c(this,e);while(++n<o);r&&this._updateClassName()},u.toggle=function(e,t){e+="";var i=this.contains(e),n=i?t!==!0&&"remove":t!==!1&&"add";return n&&this[n](e),t===!0||t===!1?t:!i},u.toString=function(){return this.join(" ")},o.defineProperty){var p={get:d,enumerable:!0,configurable:!0};try{o.defineProperty(n,t,p)}catch(h){h.number===-2146823252&&(p.enumerable=!1,o.defineProperty(n,t,p))}}else o[i].__defineGetter__&&n.__defineGetter__(t,d)}}(self)),function(){window.loadSprite=function(e,t){function i(e,t){e.innerHTML=t,n.insertBefore(e,n.childNodes[0])}if("string"==typeof e){var n=document.body,o="cache-",r="string"==typeof t,s=!1,a=function(){if(!r)return!1;var e="___test";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}}();if(!r||0===document.querySelectorAll("#"+t).length){var c=document.createElement("div");if(c.setAttribute("hidden",""),r&&c.setAttribute("id",t),a){var l=localStorage.getItem(o+t);if(s=null!==l){var u=JSON.parse(l);i(c,u.content)}}var d=new XMLHttpRequest;if(!("withCredentials"in d))return;d.open("GET",e,!0),d.onload=function(){a&&localStorage.setItem(o+t,JSON.stringify({content:d.responseText})),i(c,d.responseText)},d.send()}}}}(),function(){function e(e,t,i){if(e)if(e.classList)e.classList[i?"add":"remove"](t);else{var n=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=n+(i?" "+t:"")}}function t(t,s){if(t in o&&(s||t!==r)&&(r.length||t!==o.video)){switch(t){case o.video:i.source({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"}],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":!0}]});break;case o.audio:i.source({type:"audio",title:"Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;",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.ogg",type:"audio/ogg"}]});break;case o.youtube:i.source({type:"video",title:"View From A Blue Moon",sources:[{src:"https://www.youtube.com/watch?v=bTqVqk7FSmY",type:"youtube"}]});break;case o.vimeo:i.source({type:"video",title:"View From A Blue Moon",sources:[{src:"https://vimeo.com/76979871",type:"vimeo"}]})}r=t;for(var a=n.length-1;a>=0;a--)e(n[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0),[].forEach.call(document.querySelectorAll(".plyr__cite"),function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+t).removeAttribute("hidden")}}var i=new Plyr("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","fullscreen","pip","airplay"]});window.player=i,window.loadSprite("dist/demo.svg","demo-sprite");var n=document.querySelectorAll("[data-source]"),o={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),s=window.history&&window.history.pushState;if([].forEach.call(n,function(e){e.addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),s&&history.pushState({type:e},"","#"+e)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),s){var a=!r.length;a&&(r=o.video),r in o&&history.replaceState({type:r},"",a?"":"#"+r),r!==o.video&&t(r,!0)}}(),"plyr.io"===window.location.host&&(!function(e,t,i,n,o,r,s){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,r=t.createElement(i),s=t.getElementsByTagName(i)[0],r.async=1,r.src=n,s.parentNode.insertBefore(r,s)}(window,document,"script","//www.google-analytics.com/analytics.js","ga"),window.ga("create","UA-40881672-11","auto"),window.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,o=arguments.length;for(i=0;i<o;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=e.Element.prototype,i=Object,o=String.prototype.trim||function(){return this.replace(/^\s+|\s+$/g,"")},n=Array.prototype.indexOf||function(e){for(var t=0,i=this.length;t<i;t++)if(t in this&&this[t]===e)return t;return-1},r=function(e,t){this.name=e,this.code=DOMException[e],this.message=t},s=function(e,t){if(""===t)throw new r("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(t))throw new r("INVALID_CHARACTER_ERR","String contains an invalid character");return n.call(e,t)},a=function(e){for(var t=o.call(e.getAttribute("class")||""),i=t?t.split(/\s+/):[],n=0,r=i.length;n<r;n++)this.push(i[n]);this._updateClassName=function(){e.setAttribute("class",this.toString())}},c=a.prototype=[],l=function(){return new a(this)};if(r.prototype=Error.prototype,c.item=function(e){return this[e]||null},c.contains=function(e){return e+="",-1!==s(this,e)},c.add=function(){var e,t=arguments,i=0,o=t.length,n=!1;do{e=t[i]+"",-1===s(this,e)&&(this.push(e),n=!0)}while(++i<o);n&&this._updateClassName()},c.remove=function(){var e,t,i=arguments,o=0,n=i.length,r=!1;do{for(e=i[o]+"",t=s(this,e);-1!==t;)this.splice(t,1),r=!0,t=s(this,e)}while(++o<n);r&&this._updateClassName()},c.toggle=function(e,t){e+="";var i=this.contains(e),o=i?!0!==t&&"remove":!1!==t&&"add";return o&&this[o](e),!0===t||!1===t?t:!i},c.toString=function(){return this.join(" ")},i.defineProperty){var u={get:l,enumerable:!0,configurable:!0};try{i.defineProperty(t,"classList",u)}catch(e){-2146823252===e.number&&(u.enumerable=!1,i.defineProperty(t,"classList",u))}}else i.prototype.__defineGetter__&&t.__defineGetter__("classList",l)}}(self)),window.loadSprite=function(e,t){function i(e,t){e.innerHTML=t,o.insertBefore(e,o.childNodes[0])}if("string"==typeof e){var o=document.body,n="string"==typeof t,r=function(){if(!n)return!1;try{return localStorage.setItem("___test","___test"),localStorage.removeItem("___test"),!0}catch(e){return!1}}();if(!n||0===document.querySelectorAll("#"+t).length){var s=document.createElement("div");if(s.setAttribute("hidden",""),n&&s.setAttribute("id",t),r){var a=localStorage.getItem("cache-"+t);if(null!==a){var c=JSON.parse(a);i(s,c.content)}}var l=new XMLHttpRequest;if(!("withCredentials"in l))return;l.open("GET",e,!0),l.onload=function(){r&&localStorage.setItem("cache-"+t,JSON.stringify({content:l.responseText})),i(s,l.responseText)},l.send()}}},function(){function e(e,t,i){if(e)if(e.classList)e.classList[i?"add":"remove"](t);else{var o=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=o+(i?" "+t:"")}}function t(t,s){if(t in n&&(s||t!==r)&&(r.length||t!==n.video)){switch(t){case n.video:i.source({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"}],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:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.selz.com/plyr/1.5/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]});break;case n.audio:i.source({type:"audio",title:"Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;",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.ogg",type:"audio/ogg"}]});break;case n.youtube:i.source({type:"video",title:"View From A Blue Moon",sources:[{src:"https://www.youtube.com/watch?v=bTqVqk7FSmY",type:"youtube"}]});break;case n.vimeo:i.source({type:"video",title:"View From A Blue Moon",sources:[{src:"https://vimeo.com/76979871",type:"vimeo"}]})}r=t;for(var a=o.length-1;a>=0;a--)e(o[a].parentElement,"active",!1);e(document.querySelector('[data-source="'+t+'"]').parentElement,"active",!0),[].forEach.call(document.querySelectorAll(".plyr__cite"),function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+t).removeAttribute("hidden")}}var i=new Plyr("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"../dist/plyr.svg",tooltips:{controls:!0},captions:{defaultActive:!0},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","fullscreen","pip","airplay"]});window.player=i,window.loadSprite("dist/demo.svg","demo-sprite");var o=document.querySelectorAll("[data-source]"),n={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},r=window.location.hash.replace("#",""),s=window.history&&window.history.pushState;if([].forEach.call(o,function(e){e.addEventListener("click",function(){var e=this.getAttribute("data-source");t(e),s&&history.pushState({type:e},"","#"+e)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&t(e.state.type)}),s){var a=!r.length;a&&(r=n.video),r in n&&history.replaceState({type:r},"",a?"":"#"+r),r!==n.video&&t(r,!0)}}(),"plyr.io"===window.location.host&&(!function(e,t,i,o,n,r,s){e.GoogleAnalyticsObject=n,e[n]=e[n]||function(){(e[n].q=e[n].q||[]).push(arguments)},e[n].l=1*new Date,r=t.createElement(i),s=t.getElementsByTagName(i)[0],r.async=1,r.src="//www.google-analytics.com/analytics.js",s.parentNode.insertBefore(r,s)}(window,document,"script",0,"ga"),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview")); \ No newline at end of file
diff --git a/demo/src/js/main.js b/demo/src/js/main.js
index 2ff94121..fb84957a 100644
--- a/demo/src/js/main.js
+++ b/demo/src/js/main.js
@@ -52,7 +52,7 @@
vimeo: 'vimeo'
};
var currentType = window.location.hash.replace('#', '');
- var historySupport = (window.history && window.history.pushState);
+ var historySupport = window.history && window.history.pushState;
// Bind to each button
[].forEach.call(buttons, function(button) {
@@ -62,9 +62,13 @@
newSource(type);
if (historySupport) {
- history.pushState({
- 'type': type
- }, '', '#' + type);
+ history.pushState(
+ {
+ type: type
+ },
+ '',
+ '#' + type
+ );
}
});
});
@@ -87,9 +91,13 @@
// Replace current history state
if (currentType in types) {
- history.replaceState({
- 'type': currentType
- }, '', (video ? '' : '#' + currentType));
+ history.replaceState(
+ {
+ type: currentType
+ },
+ '',
+ video ? '' : '#' + currentType
+ );
}
// If it's not video, load the source
@@ -122,18 +130,28 @@
player.source({
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'
- }],
+ sources: [
+ {
+ src: 'https://cdn.selz.com/plyr/1.5/View_From_A_Blue_Moon_Trailer-HD.mp4',
+ type: 'video/mp4'
+ }
+ ],
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
- }]
+ 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
+ },
+ {
+ kind: 'captions',
+ label: 'French',
+ srclang: 'fr',
+ src: 'https://cdn.selz.com/plyr/1.5/View_From_A_Blue_Moon_Trailer-HD.fr.vtt'
+ }
+ ]
});
break;
@@ -141,13 +159,16 @@
player.source({
type: 'audio',
title: 'Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;',
- 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.ogg',
- type: 'audio/ogg'
- }]
+ 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.ogg',
+ type: 'audio/ogg'
+ }
+ ]
});
break;
@@ -155,10 +176,12 @@
player.source({
type: 'video',
title: 'View From A Blue Moon',
- sources: [{
- src: 'https://www.youtube.com/watch?v=bTqVqk7FSmY',
- type: 'youtube'
- }]
+ sources: [
+ {
+ src: 'https://www.youtube.com/watch?v=bTqVqk7FSmY',
+ type: 'youtube'
+ }
+ ]
});
break;
@@ -166,10 +189,12 @@
player.source({
type: 'video',
title: 'View From A Blue Moon',
- sources: [{
- src: 'https://vimeo.com/76979871',
- type: 'vimeo'
- }]
+ sources: [
+ {
+ src: 'https://vimeo.com/76979871',
+ type: 'vimeo'
+ }
+ ]
});
break;
}
@@ -198,9 +223,11 @@
if (window.location.host === 'plyr.io') {
(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] =
+ 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];
@@ -210,4 +237,4 @@ if (window.location.host === 'plyr.io') {
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
window.ga('create', 'UA-40881672-11', 'auto');
window.ga('send', 'pageview');
-} \ No newline at end of file
+}
diff --git a/dist/plyr.css b/dist/plyr.css
index e9951387..0fd875fb 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:inherit;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;cursor:pointer;border:none;background:0 0;-webkit-appearance:none}.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:#1aafff}.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:#1aafff;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#1aafff;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#1aafff;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;z-index:0;overflow:hidden}.plyr__video-embed{padding-bottom:56.25%;height:0}.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,.8);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}@media (min-width:1024px){.plyr--fullscreen-active .plyr__captions{font-size:32px}}.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>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr__control{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__control svg{width:18px;height:18px;display:block;fill:currentColor;pointer-events:none}.plyr__control .icon--captions-on,.plyr__control .icon--exit-fullscreen,.plyr__control .icon--muted{display:none}.plyr__control:focus{outline:0}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;z-index:2;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 .plyr__control.tab-focus:focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565d64}.plyr--audio .plyr__controls .plyr__control.tab-focus:focus,.plyr--audio .plyr__controls .plyr__control:hover,.plyr--audio .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);padding:13px;background:rgba(26,175,255,.8);border:3px 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;pointer-events:none}.plyr__play-large:focus,.plyr__play-large:hover{background:#1aafff}.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__control .icon--captions-on,.plyr--fullscreen-active .plyr__control .icon--exit-fullscreen,.plyr--muted .plyr__control .icon--muted{display:block}.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip],.plyr [data-plyr=airplay],.plyr--captions-active .plyr__control .icon--captions-on+svg,.plyr--fullscreen-active .plyr__control .icon--exit-fullscreen+svg,.plyr--muted .plyr__control .icon--muted+svg{display:none}.plyr--airplay-enabled [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-enabled [data-plyr=pip]{display:inline-block}.plyr__menu{position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(45deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;z-index:1;bottom:100%;right:-3px;margin-bottom:10px;animation:plyr-popup .2s ease;background:rgba(52,63,74,.9);border-radius:4px;white-space:nowrap;text-align:left;color:#fff;font-size:14px}.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__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:4px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__menu__container ul{margin:0;padding:7px;list-style:none;overflow:hidden}.plyr__menu__container .plyr__control{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__control::after{content:"";position:absolute;top:50%;transform:translateY(-50%);border:4px solid transparent}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{right:5px;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__control--back{position:relative;width:calc(100% - 14px);margin:7px 7px 3px;padding-left:28px;font-weight:500}.plyr__menu__container .plyr__control--back::after{left:7px;border-right-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__control--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 label.plyr__control{padding-left:18px}.plyr__menu__container label.plyr__control input[type=radio]{position:relative;left:-7px}.plyr__menu__container .plyr__menu__value{display:inherit;margin-left:auto;padding-left:25px;pointer-events:none;overflow:hidden;font-weight:500;color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__value .plyr__badge{font-weight:600}.plyr__badge{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 .plyr__control.tab-focus:focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.tab-focus:focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>.plyr__control: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;border:none;border-radius:100px;-webkit-appearance:none}.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:#1aafff;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__video-embed{overflow:visible}.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
+@-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:inherit;font-weight:500;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{-webkit-box-sizing:border-box;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:focus{outline:0}.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;cursor:pointer;border:none;background:0 0;-webkit-appearance:none}.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%;-webkit-transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;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;-webkit-box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);box-shadow:0 1px 1px rgba(52,63,74,.15),0 0 0 1px rgba(52,63,74,.2);-webkit-box-sizing:border-box;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%;-webkit-transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;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;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#1aafff}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;-webkit-transition:background .2s ease,border .2s ease,-webkit-transform .2s ease;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]:focus{outline:0}.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:#1aafff;border-color:#fff;-webkit-transform:scale(1.25);transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#1aafff;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#1aafff;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:1px dotted rgba(255,255,255,.5)}.plyr--audio input[type=range].tab-focus:focus{outline:1px dotted rgba(86,93,100,.5)}.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;z-index:0;overflow:hidden}.plyr__video-embed{padding-bottom:56.25%;height:0}.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 .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:10px;-webkit-transform:translateY(-40px);transform:translateY(-40px);-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease;color:#fff;font-size:14px;text-align:center}.plyr__captions span{border-radius:2px;padding:.2em .5em;background:rgba(52,63,74,.8);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:170%;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{padding:20px;font-size:16px}}@media (min-width:768px){.plyr__captions{font-size:20px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{-webkit-transform:translateY(-15px);transform:translateY(-15px)}@media (min-width:1024px){.plyr--fullscreen-active .plyr__captions{font-size:24px}}.plyr ::-webkit-media-controls{display:none}.plyr__controls{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align: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>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none}.plyr__control{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;-webkit-transition:background .3s ease,color .3s ease,opacity .3s ease;transition:background .3s ease,color .3s ease,opacity .3s ease;color:inherit}.plyr__control svg{width:18px;height:18px;display:block;fill:currentColor;pointer-events:none;-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr__control .icon--captions-on,.plyr__control .icon--exit-fullscreen,.plyr__control .icon--muted{display:none}.plyr__control:focus{outline:0}.plyr--video .plyr__controls{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:35px 10px 10px;background:-webkit-gradient(linear,left top,left bottom,from(rgba(52,63,74,0)),to(rgba(52,63,74,.85)));background:linear-gradient(rgba(52,63,74,0),rgba(52,63,74,.85));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;color:#fff;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.plyr--video .plyr__controls .plyr__control.tab-focus:focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{padding:10px;border-radius:inherit;background:#fff;border:1px solid #dbe3e8;color:#565d64}.plyr--audio .plyr__controls .plyr__control.tab-focus:focus,.plyr--audio .plyr__controls .plyr__control:hover,.plyr--audio .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;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:13px;background:rgba(26,175,255,.8);border:3px solid currentColor;border-radius:100%;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.15);box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;-webkit-transition:all .3s ease;transition:all .3s ease}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor;pointer-events:none}.plyr__play-large:focus,.plyr__play-large:hover{background:#1aafff}.plyr__play-large:focus{outline:1px dotted rgba(255,255,255,.5)}.plyr .plyr__play-large{display:inline-block}.plyr--audio .plyr__play-large{display:none}.plyr--playing .plyr__play-large{opacity:0;visibility:hidden}.plyr--playing .plyr__controls [data-plyr=play],.plyr__controls [data-plyr=pause]{display:none}.plyr--playing .plyr__controls [data-plyr=pause]{display:inline-block}.plyr--captions-active .plyr__control .icon--captions-on,.plyr--fullscreen-active .plyr__control .icon--exit-fullscreen,.plyr--muted .plyr__control .icon--muted{display:block}.plyr--captions-active .plyr__control .icon--captions-on+svg,.plyr--fullscreen-active .plyr__control .icon--exit-fullscreen+svg,.plyr--muted .plyr__control .icon--muted+svg{display:none}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-enabled [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-enabled [data-plyr=pip]{display:inline-block}.plyr__menu{position:relative}.plyr__menu .plyr__control svg{-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{position:absolute;z-index:1;bottom:100%;right:-3px;margin-bottom:10px;-webkit-animation:plyr-popup .2s ease;animation:plyr-popup .2s ease;background:rgba(52,63,74,.9);border-radius:4px;white-space:nowrap;text-align:left;color:#fff;font-size:14px}.plyr__menu__container>div{overflow:hidden;-webkit-transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1);transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:4px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__menu__container ul{margin:0;padding:7px;list-style:none;overflow:hidden}.plyr__menu__container .plyr__control{display:-webkit-box;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__control::after{content:"";position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);border:4px solid transparent}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{right:5px;border-left-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__control--back{position:relative;width:calc(100% - 14px);margin:7px;margin-bottom:3px;padding-left:28px;font-weight:500}.plyr__menu__container .plyr__control--back::after{left:7px;border-right-color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__control--back::before{content:"";position:absolute;top:100%;left:0;right:0;height:1px;overflow:hidden;margin-top:4px;background:rgba(0,0,0,.15);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.1);box-shadow:0 1px 0 rgba(255,255,255,.1)}.plyr__menu__container label.plyr__control{padding-left:18px}.plyr__menu__container label.plyr__control input[type=radio]{position:relative;left:-7px}.plyr__menu__container .plyr__menu__value{display:inherit;margin-left:auto;padding-left:25px;pointer-events:none;overflow:hidden;font-weight:500;color:rgba(255,255,255,.8)}.plyr__menu__container .plyr__menu__value .plyr__badge{font-weight:600}.plyr__badge{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;-webkit-transform:translate(-50%,10px) scale(.8);transform:translate(-50%,10px) scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transition:opacity .2s .1s ease,-webkit-transform .2s .1s ease;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 .plyr__control.tab-focus:focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;-webkit-transform:translate(-50%,0) scale(1);transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .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>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control: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>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;-webkit-transform:translateX(50%);transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.tab-focus:focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.tab-focus:focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.tab-focus:focus .plyr__tooltip,.plyr__controls>.plyr__control: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-box-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;border:none;border-radius:100px;-webkit-appearance:none}.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:#1aafff;background:0 0;-webkit-transition:none;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;-webkit-transition:none;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;-webkit-transition:none;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{-webkit-transition:width .2s ease;transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{-webkit-transition:width .2s ease;transition:width .2s ease}.plyr__progress--buffer::-ms-fill{-webkit-transition:width .2s ease;transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.15);box-shadow:0 1px 1px rgba(0,0,0,.15)}.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--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__volume{display:none}.plyr .plyr__volume{-webkit-box-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__video-embed{overflow:visible}.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 603097ab..b022fa87 100644
--- a/dist/plyr.js
+++ b/dist/plyr.js
@@ -1,3 +1 @@
-(function(e,t,n){"use strict";"object"==typeof exports?module.exports=n(require):"function"==typeof define&&define.amd?define(n):t[e]=n()}).call(this,"Plyr",this,function(){"use strict";function e(e,t){function r(e,t,n,i){o.event(e,t,n,o.extend({},i,{plyr:fe}))}function l(){function e(e){9===e.which&&fe.fullscreen.active&&(e.target!==i||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),i.focus()):(e.preventDefault(),n.focus()))}var t=c("input:not([disabled]), button:not([disabled])"),n=t[0],i=t[t.length-1];o.on(fe.elements.container,"keydown",e,!1)}function c(e){return fe.elements.container.querySelectorAll(e)}function u(e){return c(e)[0]}function d(e){o.is.string(e)?(o.removeElement(fe.elements[e]),fe.elements[e]=null):o.removeElement(e)}function p(e,t){o.is.string(t)?o.insertElement(e,fe.media,{src:t}):o.is.array(t)&&t.forEach(function(t){o.insertElement(e,fe.media,t)})}function m(){return{url:fe.config.iconUrl,absolute:0===fe.config.iconUrl.indexOf("http")||fe.browser.isIE}}function f(e,t){var n="http://www.w3.org/2000/svg",i=m(),a=(i.absolute?"":i.url)+"#"+fe.config.iconPrefix,s=document.createElementNS(n,"svg");o.setAttributes(s,o.extend(t,{role:"presentation"}));var r=document.createElementNS(n,"use");return r.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a+"-"+e),s.appendChild(r),s}function g(e){var t=fe.config.i18n[e];switch(e){case"pip":t="PIP";break;case"airplay":t="AirPlay"}return o.createElement("span",{"class":fe.config.classes.hidden},t)}function y(e){var t=o.createElement("span",{"class":fe.config.classes.menu.value});return t.appendChild(o.createElement("span",{"class":fe.config.classes.menu.badge},e)),t}function b(e,t){var n,i,a,s=o.createElement("button");switch(o.is.object(t)||(t={}),"class"in t?t["class"].indexOf(fe.config.classes.control)===-1&&(t["class"]+=" "+fe.config.classes.control):t["class"]=fe.config.classes.control,e){case"mute":a="toggleMute",n="volume",i="muted";break;case"captions":a="toggleCaptions",n="captions-off",i="captions-on";break;case"fullscreen":a="toggleFullscreen",n="enter-fullscreen",i="exit-fullscreen";break;case"play-large":t["class"]="plyr__play-large",e="play",a="play",n="play";break;default:a=e,n=e}return o.extend(t,o.getAttributesFromSelector(fe.config.selectors.buttons[e],t)),o.is.string(i)&&s.appendChild(f(i,{"class":"icon--"+i})),s.appendChild(f(n)),s.appendChild(g(a)),o.setAttributes(s,t),fe.elements.buttons[e]=s,s}function v(e,t){var n=o.createElement("label",{"for":t.id,"class":fe.config.classes.hidden},fe.config.i18n[e]),i=o.createElement("input",o.extend(o.getAttributesFromSelector(fe.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.1,value:0,autocomplete:"off"},t));return fe.elements.inputs[e]=i,{label:n,input:i}}function h(e,t){var n=o.createElement("progress",o.extend(o.getAttributesFromSelector(fe.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(o.createElement("span",null,"0"));var i="";switch(e){case"played":i=fe.config.i18n.played;break;case"buffer":i=fe.config.i18n.buffered}n.textContent="% "+i.toLowerCase()}return fe.elements.display[e]=n,n}function w(e){var t=o.createElement("span",{"class":"plyr__time"});return t.appendChild(o.createElement("span",{"class":fe.config.classes.hidden},fe.config.i18n[e])),t.appendChild(o.createElement("span",o.getAttributesFromSelector(fe.config.selectors.display[e]),"00:00")),fe.elements.display[e]=t,t}function k(e){if(!o.is.empty(fe.config.controls)){var t=o.createElement("div",o.getAttributesFromSelector(fe.config.selectors.controls.wrapper));if(o.inArray(fe.config.controls,"restart")&&t.appendChild(b("restart")),o.inArray(fe.config.controls,"rewind")&&t.appendChild(b("rewind")),o.inArray(fe.config.controls,"play")&&(t.appendChild(b("play")),t.appendChild(b("pause"))),o.inArray(fe.config.controls,"fast-forward")&&t.appendChild(b("fast-forward")),o.inArray(fe.config.controls,"progress")){var n=o.createElement("span",o.getAttributesFromSelector(fe.config.selectors.progress)),i=v("seek",{id:"plyr-seek-"+e.id});if(n.appendChild(i.label),n.appendChild(i.input),n.appendChild(h("played")),n.appendChild(h("buffer")),fe.config.tooltips.seek){var a=o.createElement("span",{role:"tooltip","class":fe.config.classes.tooltip},"00:00");n.appendChild(a),fe.elements.display.seekTooltip=a}fe.elements.progress=n,t.appendChild(fe.elements.progress)}if(o.inArray(fe.config.controls,"current-time")&&t.appendChild(w("currentTime")),o.inArray(fe.config.controls,"duration")&&t.appendChild(w("duration")),o.inArray(fe.config.controls,"mute")&&t.appendChild(b("mute")),o.inArray(fe.config.controls,"volume")){var r=o.createElement("span",{"class":"plyr__volume"}),l={max:1,step:.05,value:fe.config.volume},c=v("volume",o.extend(l,{id:"plyr-volume-"+e.id}));r.appendChild(c.label),r.appendChild(c.input);var u=h("volume",l);r.appendChild(u),t.appendChild(r)}if(o.inArray(fe.config.controls,"captions")&&t.appendChild(b("captions")),o.inArray(fe.config.controls,"settings")&&!o.is.empty(fe.config.settings)){var d=o.createElement("div",{"class":"plyr__menu"});d.appendChild(b("settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var p=o.createElement("form",{"class":"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),m=o.createElement("div"),f=o.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=o.createElement("ul",{role:"tablist"});fe.config.settings.forEach(function(t){var n=o.createElement("li",{role:"tab",hidden:""}),i=o.createElement("button",o.extend(o.getAttributesFromSelector(fe.config.selectors.buttons.settings),{type:"button","class":fe.config.classes.control+" "+fe.config.classes.control+"--forward",id:"plyr-settings-"+e.id+"-"+t+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+t,"aria-expanded":!1}),fe.config.i18n[t]),a=o.createElement("span",{"class":fe.config.classes.menu.value});a.innerHTML=e[t],i.appendChild(a),n.appendChild(i),g.appendChild(n),fe.elements.settings.tabs[t]=n}),f.appendChild(g),m.appendChild(f),fe.config.settings.forEach(function(t){var n=o.createElement("div",{id:"plyr-settings-"+e.id+"-"+t,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+t+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),i=o.createElement("button",{type:"button","class":fe.config.classes.control+" "+fe.config.classes.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},fe.config.i18n[t]);n.appendChild(i);var a=o.createElement("ul");n.appendChild(a),m.appendChild(n),fe.elements.settings.panes[t]=n}),p.appendChild(m),d.appendChild(p),t.appendChild(d),fe.elements.settings.form=p,fe.elements.settings.menu=d}return o.inArray(fe.config.controls,"pip")&&s.pip&&t.appendChild(b("pip")),o.inArray(fe.config.controls,"airplay")&&s.airplay&&t.appendChild(b("airplay")),o.inArray(fe.config.controls,"fullscreen")&&t.appendChild(b("fullscreen")),o.inArray(fe.config.controls,"play-large")&&(fe.elements.buttons.playLarge=b("play-large"),fe.elements.container.appendChild(fe.elements.buttons.playLarge)),fe.elements.controls=t,T(),P(),t}}function C(e,t){var n=fe.elements.settings.tabs[e],i=fe.elements.settings.panes[e];o.is.htmlElement(n)&&(t?n.removeAttribute("hidden"):n.setAttribute("hidden","")),o.is.htmlElement(i)&&(t?i.removeAttribute("hidden"):i.setAttribute("hidden",""))}function E(e,t){function n(e){var t="";switch(e){case"hd2160":t="4K";break;case"hd1440":t="WQHD";break;case"hd1080":t="HD";break;case"hd720":t="HD"}return t.length?y(t):null}var i=fe.elements.settings.panes.quality.querySelector("ul");o.is.array(e)?fe.quality.options=e.filter(function(e){return o.inArray(fe.config.quality.options,e)}):fe.quality.options=fe.config.quality.options,o.is.string(t)&&o.inArray(fe.quality.options,t)&&(fe.quality.selected=t);var a=!o.is.empty(fe.quality.options)&&"youtube"===fe.type;C("quality",a),a&&(o.emptyElement(i),fe.quality.options.forEach(function(e){var t=o.createElement("li"),a=o.createElement("label",{"class":fe.config.classes.control}),s=o.createElement("input",o.extend(o.getAttributesFromSelector(fe.config.selectors.inputs.quality),{type:"radio",name:"plyr-quality",value:e}));a.appendChild(s),a.appendChild(document.createTextNode(A("quality",e)));var r=n(e);o.is.htmlElement(r)&&a.appendChild(r),t.appendChild(a),i.appendChild(t)}),S("quality",i))}function A(e,t){if("speed"===e)return 1===t?"Normal":t+"&times;";if("quality"===e)switch(t){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";case"tiny":return"Tiny";case"default":return"Auto";default:return t}}function S(e,t){var n=fe[e].selected;if(o.is.empty(n)&&(n=fe.config[e]["default"]),o.inArray(fe[e].options,n)){o.is.htmlElement(t)||(t=fe.elements.settings.panes[e].querySelector("ul"));var i=t.querySelector('[value="'+n+'"]');if(o.is.htmlElement(i)){i.checked=!0;var a=fe.elements.settings.tabs[e].querySelector("."+fe.config.classes.menu.value);a.innerHTML=A(e,n)}}}function T(){var e=["start","end","all","reset"],t=fe.elements.settings.panes.loop.querySelector("ul");fe.elements.settings.tabs.loop.removeAttribute("hidden"),fe.elements.settings.panes.loop.removeAttribute("hidden"),o.emptyElement(t),e.forEach(function(e){var n=o.createElement("li"),i=o.createElement("button",o.extend(o.getAttributesFromSelector(fe.config.selectors.buttons.loop),{type:"button","class":fe.config.classes.control,"data-plyr-loop-action":e}),fe.config.i18n[e]);if(o.inArray(["start","end"],e)){var a=y("00:00");i.appendChild(a)}n.appendChild(i),t.appendChild(n)})}function x(){var e=fe.elements.settings.panes.captions.querySelector("ul");if(fe.elements.settings.tabs.captions.removeAttribute("hidden"),fe.elements.settings.panes.captions.removeAttribute("hidden"),o.emptyElement(e),!o.is.empty(fe.captions.tracks)){var t=[].map.call(fe.captions.tracks,function(e){return{language:e.language,badge:!0,label:o.is.empty(e.label)?e.language.toUpperCase():e.label}});t.unshift({language:"off",label:fe.config.i18n.none}),t.forEach(function(t){var n=o.createElement("li"),i=o.createElement("label",{"class":fe.config.classes.control}),a=o.createElement("input",o.extend(o.getAttributesFromSelector(fe.config.selectors.inputs.language),{type:"radio",name:"plyr-language",value:t.language}));t.language.toLowerCase()===fe.config.captions.language.toLowerCase()&&(a.checked=!0),i.appendChild(a),i.appendChild(document.createTextNode(t.label||t.language)),t.badge&&i.appendChild(y(t.language.toUpperCase())),n.appendChild(i),e.appendChild(n)})}}function P(e,t){o.is.array(e)?fe.speed.options=e.filter(function(e){return o.inArray(fe.config.speed.options,e)}):fe.speed.options=fe.config.speed.options,o.is.number(t)&&o.inArray(fe.speed.options,t)&&(fe.speed.selected=t);var n=!o.is.empty(fe.speed.options);if(C("speed",n),n){var i=fe.elements.settings.panes.speed.querySelector("ul");fe.elements.settings.tabs.speed.removeAttribute("hidden"),fe.elements.settings.panes.speed.removeAttribute("hidden"),o.emptyElement(i),fe.speed.options.forEach(function(e){var t=o.createElement("li"),n=o.createElement("label",{"class":fe.config.classes.control}),a=o.createElement("input",o.extend(o.getAttributesFromSelector(fe.config.selectors.inputs.speed),{type:"radio",name:"plyr-speed",value:e}));n.appendChild(a),n.insertAdjacentHTML("beforeend",A("speed",e)),t.appendChild(n),i.appendChild(t)}),S("speed",i)}}function F(){if(fe.supported.full&&("audio"!==fe.type||fe.config.fullscreen.allowAudio)&&fe.config.fullscreen.enabled){var e=s.fullscreen;e||fe.config.fullscreen.fallback&&!o.inFrame()?(ye((e?"Native":"Fallback")+" fullscreen enabled"),o.toggleClass(fe.elements.container,fe.config.classes.fullscreen.enabled,!0)):ye("Fullscreen not supported and fallback disabled"),fe.elements.buttons&&fe.elements.buttons.fullscreen&&o.toggleState(fe.elements.buttons.fullscreen,!1),l()}}function I(e){if(o.inArray(["video","vimeo"],fe.type)&&("video"!==fe.type||s.textTracks)&&(o.is.htmlElement(fe.elements.captions)||(fe.elements.captions=o.createElement("div",o.getAttributesFromSelector(fe.config.selectors.captions)),o.insertAfter(fe.elements.captions,fe.elements.wrapper)),fe.captions.tracks=o.is.array(e)?e:fe.media.textTracks,o.toggleClass(fe.elements.container,fe.config.classes.captions.enabled,!o.is.empty(fe.captions.tracks)),!o.is.empty(fe.captions.tracks))){if(_(),"video"===fe.type){var t=fe.config.captions.language.toLowerCase();[].forEach.call(fe.captions.tracks,function(e){o.off(e,"cuechange",N),e.mode="hidden",e.language===t&&(fe.captions.currentTrack=e)}),o.is.track(fe.captions.currentTrack)||(be("No language found to match "+t+" in tracks"),fe.captions.currentTrack=fe.captions.tracks[0]);var n=fe.captions.currentTrack;o.is.track(n)&&o.inArray(["captions","subtitles"],n.kind)&&(o.on(n,"cuechange",N),n.activeCues&&n.activeCues.length>0&&N(n))}x()}}function q(){return!s.textTracks||o.is.empty(fe.captions.tracks)?"None":fe.captions.enabled?fe.captions.currentTrack.label:"Disabled"}function N(e){o.is.event(e)&&(e=e.target);var t=e.activeCues[0];o.is.cue(t)?L(t.getCueAsHTML()):L()}function L(e){if(o.is.htmlElement(fe.elements.captions)){var t=o.createElement("span");o.emptyElement(fe.elements.captions),o.is.undefined(e)&&(e=""),o.is.string(e)?t.textContent=e.trim():t.appendChild(e),fe.elements.captions.appendChild(t)}else be("No captions element to render to")}function _(){if(fe.elements.buttons.captions){var e=fe.storage.captions;o.is["boolean"](e)?fe.config.captions.active=e:e=fe.config.captions.active,e&&(o.toggleClass(fe.elements.container,fe.config.classes.captions.active,!0),o.toggleState(fe.elements.buttons.captions,!0))}}function M(){if(fe.config.loadSprite){var e=m();e.absolute?(ye("AJAX loading absolute SVG sprite"+(fe.browser.isIE?" (due to IE)":"")),o.loadSprite(e.url,"sprite-plyr")):ye("Sprite will be used as external resource directly")}fe.id=Math.floor(1e4*Math.random());var t=null;t=o.is.string(fe.config.controls)?fe.config.controls:o.is["function"](fe.config.controls)?fe.config.controls({id:fe.id,seektime:fe.config.seekTime}):k({id:fe.id,seektime:fe.config.seekTime,speed:"-",quality:"-",captions:q(),loop:"None"});var n;if(o.is.string(fe.config.selectors.controls.container)&&(n=document.querySelector(fe.config.selectors.controls.container)),o.is.htmlElement(n)||(n=fe.elements.container),o.is.htmlElement(t)?n.appendChild(t):n.insertAdjacentHTML("beforeend",t),o.is.htmlElement(fe.elements.controls)&&V(),fe.config.tooltips.controls)for(var i=c([fe.config.selectors.controls.wrapper," ",fe.config.selectors.labels," .",fe.config.classes.hidden].join("")),a=i.length-1;a>=0;a--){var s=i[a];o.toggleClass(s,fe.config.classes.hidden,!1),o.toggleClass(s,fe.config.classes.tooltip,!0)}}function V(){try{return fe.elements.controls=u(fe.config.selectors.controls.wrapper),fe.elements.buttons={play:c(fe.config.selectors.buttons.play),pause:u(fe.config.selectors.buttons.pause),restart:u(fe.config.selectors.buttons.restart),rewind:u(fe.config.selectors.buttons.rewind),forward:u(fe.config.selectors.buttons.forward),mute:u(fe.config.selectors.buttons.mute),pip:u(fe.config.selectors.buttons.pip),airplay:u(fe.config.selectors.buttons.airplay),settings:u(fe.config.selectors.buttons.settings),captions:u(fe.config.selectors.buttons.captions),fullscreen:u(fe.config.selectors.buttons.fullscreen)},fe.elements.progress=u(fe.config.selectors.progress),fe.elements.inputs={seek:u(fe.config.selectors.inputs.seek),volume:u(fe.config.selectors.inputs.volume)},fe.elements.display={buffer:u(fe.config.selectors.display.buffer),played:u(fe.config.selectors.display.played),volume:u(fe.config.selectors.display.volume),duration:u(fe.config.selectors.display.duration),currentTime:u(fe.config.selectors.display.currentTime)},o.is.htmlElement(fe.elements.progress)&&(fe.elements.display.seekTooltip=fe.elements.progress.querySelector("."+fe.config.classes.tooltip)),!0}catch(e){return be("It looks like there is a problem with your custom controls HTML",e),D(!0),!1}}function O(){o.toggleClass(fe.elements.container,fe.config.selectors.container.replace(".",""),fe.supported.full)}function D(e){e&&o.inArray(i.html5,fe.type)?fe.media.setAttribute("controls",""):fe.media.removeAttribute("controls")}function j(e){var t=fe.config.i18n.play;if(o.is.string(fe.config.title)&&!o.is.empty(fe.config.title)&&(t+=", "+fe.config.title,fe.elements.container.setAttribute("aria-label",fe.config.title)),fe.supported.full&&(o.is.htmlElement(fe.elements.buttons.play)&&fe.elements.buttons.play.setAttribute("aria-label",t),o.is.htmlElement(fe.elements.buttons.playLarge)&&fe.elements.buttons.playLarge.setAttribute("aria-label",t)),o.is.htmlElement(e)){var n=o.is.string(fe.config.title)&&!o.is.empty(fe.config.title)?fe.config.title:"video";e.setAttribute("title",fe.config.i18n.frameTitle.replace("{title}",n))}}function R(){var e=null;fe.storage={},s.storage&&fe.config.storage.enabled&&(window.localStorage.removeItem("plyr-volume"),e=window.localStorage.getItem(fe.config.storage.key),e&&(/^\d+(\.\d+)?$/.test(e)?H({volume:parseFloat(e)}):fe.storage=JSON.parse(e)))}function H(e){s.storage&&fe.config.storage.enabled&&(o.extend(fe.storage,e),window.localStorage.setItem(fe.config.storage.key,JSON.stringify(fe.storage)))}function B(){return fe.media?(fe.supported.full&&(o.toggleClass(fe.elements.container,fe.config.classes.type.replace("{0}",fe.type),!0),o.inArray(i.embed,fe.type)&&o.toggleClass(fe.elements.container,fe.config.classes.type.replace("{0}","video"),!0),o.toggleClass(fe.elements.container,fe.config.classes.pip.enabled,s.pip&&"video"===fe.type),o.toggleClass(fe.elements.container,fe.config.classes.airplay.enabled,s.airplay&&o.inArray(i.html5,fe.type)),o.toggleClass(fe.elements.container,fe.config.classes.stopped,fe.config.autoplay),o.toggleClass(fe.elements.container,fe.config.classes.isIos,fe.browser.isIos),o.toggleClass(fe.elements.container,fe.config.classes.isTouch,s.touch)),o.inArray(["video","youtube","vimeo"],fe.type)&&(fe.elements.wrapper=o.createElement("div",{"class":fe.config.classes.video}),o.wrap(fe.media,fe.elements.wrapper)),void(o.inArray(i.embed,fe.type)&&Y())):void be("No media element found!")}function Y(){var e,t=fe.type+"-"+Math.floor(1e4*Math.random());switch(fe.type){case"youtube":e=o.parseYouTubeId(fe.embedId);break;default:e=fe.embedId}for(var n=c('[id^="'+fe.type+'-"]'),i=n.length-1;i>=0;i--)o.removeElement(n[i]);if(o.toggleClass(fe.elements.wrapper,fe.config.classes.embed,!0),"youtube"===fe.type)fe.media.setAttribute("id",t),o.is.object(window.YT)?Q(e):(o.injectScript(fe.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Q(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===fe.type)if(fe.media.setAttribute("id",t),o.is.object(window.Vimeo))U(e);else{o.injectScript(fe.config.urls.vimeo.api);var a=window.setInterval(function(){o.is.object(window.Vimeo)&&(window.clearInterval(a),U(e))},50)}else if("soundcloud"===fe.type){var s=o.createElement("iframe");s.loaded=!1,o.on(s,"load",function(){s.loaded=!0}),o.setAttributes(s,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+e,id:t}),fe.media.appendChild(s),window.SC||o.injectScript(fe.config.urls.soundcloud.api);var r=window.setInterval(function(){window.SC&&s.loaded&&(window.clearInterval(r),z.call(s))},50)}}function W(){fe.supported.full&&(de(),pe()),j(u("iframe"))}function Q(e){fe.embed=new window.YT.Player(fe.media.id,{videoId:e,playerVars:{autoplay:fe.config.autoplay?1:0,controls:fe.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,origin:window.location.hostname,widget_referrer:window.location.href},events:{onError:function(e){r(fe.elements.container,"error",!0,{code:e.data,embed:e.target})},onPlaybackQualityChange:function(e){var t=e.target;fe.media.quality=t.getPlaybackQuality(),r(fe.media,"qualitychange")},onPlaybackRateChange:function(e){var t=e.target;fe.media.playbackRate=t.getPlaybackRate(),r(fe.media,"ratechange")},onReady:function(e){var t=e.target;fe.media.play=function(){t.playVideo(),fe.media.paused=!1},fe.media.pause=function(){t.pauseVideo(),fe.media.paused=!0},fe.media.stop=function(){t.stopVideo(),fe.media.paused=!0},fe.media.duration=t.getDuration(),fe.media.paused=!0,fe.media.currentTime=0,fe.media.muted=t.isMuted(),P(t.getAvailablePlaybackRates(),t.getPlaybackRate()),fe.config.title=t.getVideoData().title,fe.supported.full&&fe.media.setAttribute("tabindex",-1),W(),r(fe.media,"timeupdate"),r(fe.media,"durationchange"),window.clearInterval(ge.buffering),ge.buffering=window.setInterval(function(){fe.media.buffered=t.getVideoLoadedFraction(),(null===fe.media.lastBuffered||fe.media.lastBuffered<fe.media.buffered)&&r(fe.media,"progress"),fe.media.lastBuffered=fe.media.buffered,1===fe.media.buffered&&(window.clearInterval(ge.buffering),r(fe.media,"canplaythrough"))},200)},onStateChange:function(e){var t=e.target;switch(window.clearInterval(ge.playing),e.data){case 0:if(fe.config.loop.active){t.stopVideo(),t.playVideo();break}fe.media.paused=!0,r(fe.media,"ended");break;case 1:fe.media.paused=!1,fe.media.seeking&&r(fe.media,"seeked"),fe.media.seeking=!1,r(fe.media,"play"),r(fe.media,"playing"),ge.playing=window.setInterval(function(){fe.media.currentTime=t.getCurrentTime(),r(fe.media,"timeupdate")},100),fe.media.duration!==t.getDuration()&&(fe.media.duration=t.getDuration(),r(fe.media,"durationchange")),E(t.getAvailableQualityLevels(),t.getPlaybackQuality());break;case 2:fe.media.paused=!0,r(fe.media,"pause")}r(fe.elements.container,"statechange",!1,{code:e.data})}}})}function U(e){fe.embed=new window.Vimeo.Player(fe.media,{id:e,loop:fe.config.loop.active,autoplay:fe.config.autoplay,byline:!1,portrait:!1,title:!1}),fe.media.play=function(){fe.embed.play(),fe.media.paused=!1},fe.media.pause=function(){fe.embed.pause(),fe.media.paused=!0},fe.media.stop=function(){fe.embed.stop(),fe.media.paused=!0},fe.media.paused=!0,fe.media.currentTime=0,W(),fe.embed.getCurrentTime().then(function(e){fe.media.currentTime=e,r(fe.media,"timeupdate")}),fe.embed.getDuration().then(function(e){fe.media.duration=e,r(fe.media,"durationchange")}),fe.embed.getTextTracks().then(function(e){I(e),fe.config.captions.active&&fe.embed.enableTextTrack(fe.config.captions.language.toLowerCase())}),fe.embed.on("cuechange",function(e){var t=null;e.cues.length&&(t=o.stripHTML(e.cues[0].text)),L(t)}),fe.embed.on("loaded",function(){o.is.htmlElement(fe.embed.element)&&fe.supported.full&&fe.embed.element.setAttribute("tabindex",-1)}),fe.embed.on("play",function(){fe.media.paused=!1,r(fe.media,"play"),r(fe.media,"playing")}),fe.embed.on("pause",function(){fe.media.paused=!0,r(fe.media,"pause")}),fe.embed.on("timeupdate",function(e){fe.media.seeking=!1,fe.media.currentTime=e.seconds,r(fe.media,"timeupdate")}),fe.embed.on("progress",function(e){fe.media.buffered=e.percent,r(fe.media,"progress"),1===parseInt(e.percent)&&r(fe.media,"canplaythrough")}),fe.embed.on("seeked",function(){fe.media.seeking=!1,r(fe.media,"seeked"),r(fe.media,"play")}),fe.embed.on("ended",function(){fe.media.paused=!0,r(fe.media,"ended")})}function z(){fe.embed=window.SC.Widget(this),fe.embed.bind(window.SC.Widget.Events.READY,function(){fe.media.play=function(){fe.embed.play(),fe.media.paused=!1},fe.media.pause=function(){fe.embed.pause(),fe.media.paused=!0},fe.media.stop=function(){fe.embed.seekTo(0),fe.embed.pause(),fe.media.paused=!0},fe.media.paused=!0,fe.media.currentTime=0,fe.embed.getDuration(function(e){fe.media.duration=e/1e3,W()}),fe.embed.getPosition(function(e){fe.media.currentTime=e,r(fe.media,"timeupdate")}),fe.embed.bind(window.SC.Widget.Events.PLAY,function(){fe.media.paused=!1,r(fe.media,"play"),r(fe.media,"playing")}),fe.embed.bind(window.SC.Widget.Events.PAUSE,function(){fe.media.paused=!0,r(fe.media,"pause")}),fe.embed.bind(window.SC.Widget.Events.PLAY_PROGRESS,function(e){fe.media.seeking=!1,fe.media.currentTime=e.currentPosition/1e3,r(fe.media,"timeupdate")}),fe.embed.bind(window.SC.Widget.Events.LOAD_PROGRESS,function(e){fe.media.buffered=e.loadProgress,r(fe.media,"progress"),1===parseInt(e.loadProgress)&&r(fe.media,"canplaythrough")}),fe.embed.bind(window.SC.Widget.Events.FINISH,function(){fe.media.paused=!0,r(fe.media,"ended")})})}function J(){o.toggleClass(fe.elements.container,fe.config.classes.playing,!fe.media.paused),o.toggleClass(fe.elements.container,fe.config.classes.stopped,fe.media.paused),fe.toggleControls(fe.media.paused)}function X(e){var t=fe.elements.settings.form,n=fe.elements.buttons.settings,i=o.is["boolean"](e)?e:"true"===t.getAttribute("aria-hidden");if(o.is.event(e)){var a=t.contains(e.target),s=e.target===fe.elements.buttons.settings;if(a||!a&&!s&&i)return;s&&e.stopPropagation()}t.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1)}function $(e){var t,n,i=e.cloneNode(!0);return i.style.position="absolute",i.style.opacity=0,i.setAttribute("aria-hidden",!1),[].forEach.call(i.querySelectorAll("input[name]"),function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(i),t=i.scrollWidth,n=i.scrollHeight,o.removeElement(i),{width:t,height:n}}function G(e){var t=fe.elements.settings.menu,n=e.target,i="false"===n.getAttribute("aria-expanded"),a=document.getElementById(n.getAttribute("aria-controls"));if(o.is.htmlElement(a)){var r="tabpanel"===a.getAttribute("role");if(r){var l=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),c=l.parentNode;if([].forEach.call(t.querySelectorAll('[aria-controls="'+l.getAttribute("id")+'"]'),function(e){e.setAttribute("aria-expanded",!1)}),s.transitions&&!s.reducedMotion){c.style.width=l.scrollWidth+"px",c.style.height=l.scrollHeight+"px";var u=$(a),d=function(e){e.target===c&&o.inArray(["width","height"],e.propertyName)&&(c.style.width="",c.style.height="",o.off(c,o.transitionEnd,d))};o.on(c,o.transitionEnd,d),c.style.width=u.width+"px",c.style.height=u.height+"px"}l.setAttribute("aria-hidden",!0),l.setAttribute("tabindex",-1),a.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),a.removeAttribute("tabindex")}}}function K(){if(fe.supported.full){var e=fe.media.muted?0:fe.media.volume;fe.elements.inputs.volume&&(fe.elements.inputs.volume.value=e),fe.elements.display.volume&&(fe.elements.display.volume.value=e)}fe.core.updateStorage({volume:fe.media.volume}),o.toggleClass(fe.elements.container,fe.config.classes.muted,fe.media.muted),fe.supported.full&&fe.elements.buttons.mute&&o.toggleState(fe.elements.buttons.mute,fe.media.muted)}function Z(e){fe.loading="waiting"===e.type,clearTimeout(ge.loading),ge.loading=setTimeout(function(){o.toggleClass(fe.elements.container,fe.config.classes.loading,fe.loading),fe.toggleControls(fe.loading)},fe.loading?250:0)}function ee(e){if(fe.supported.full){var t=fe.elements.display.played,n=0,i=fe.getDuration();if(e)switch(e.type){case"timeupdate":case"seeking":if(fe.elements.controls.pressed)return;n=o.getPercentage(fe.media.currentTime,i),"timeupdate"===e.type&&fe.elements.inputs.seek&&(fe.elements.inputs.seek.value=n);break;case"playing":case"progress":t=fe.elements.display.buffer,n=function(){var e=fe.media.buffered;return e&&e.length?o.getPercentage(e.end(0),i):o.is.number(e)?100*e:0}()}te(t,n)}}function te(e,t){if(fe.supported.full){if(o.is.undefined(t)&&(t=0),o.is.undefined(e)){if(!o.is.htmlElement(fe.elements.display.buffer))return;e=fe.elements.display.buffer}if(o.is.htmlElement(e)){e.value=t;var n=e.getElementsByTagName("span")[0];o.is.htmlElement(n)&&(n.childNodes[0].nodeValue=t)}}}function ne(e,t){if(t){isNaN(e)&&(e=0);var n=parseInt(e%60),i=parseInt(e/60%60),o=parseInt(e/60/60%60),a=fe.getDuration(),s=parseInt(a/60/60%60)>0;n=("0"+n).slice(-2),i=("0"+i).slice(-2);var r=(s?o+":":"")+i+":"+n;return t.textContent=r,r}}function ie(){if(fe.supported.full){var e=fe.getDuration()||0;!fe.elements.display.duration&&fe.config.displayDuration&&fe.media.paused&&ne(e,fe.elements.display.currentTime),fe.elements.display.duration&&ne(e,fe.elements.display.duration),se()}}function oe(e){ne(fe.media.currentTime,fe.elements.display.currentTime),e&&"timeupdate"===e.type&&fe.media.seeking||ee(e)}function ae(e){o.is.number(e)||(e=0);var t=fe.getDuration(),n=o.getPercentage(e,t);fe.elements.progress&&fe.elements.display.played&&(fe.elements.display.played.value=n),fe.elements.buttons&&fe.elements.inputs.seek&&(fe.elements.inputs.seek.value=n)}function se(e){var t=fe.getDuration();if(fe.config.tooltips.seek&&o.is.htmlElement(fe.elements.inputs.seek)&&o.is.htmlElement(fe.elements.display.seekTooltip)&&0!==t){var n=fe.elements.inputs.seek.getBoundingClientRect(),i=0,a=fe.config.classes.tooltip+"--visible";if(o.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!o.hasClass(fe.elements.display.seekTooltip,a))return;i=fe.elements.display.seekTooltip.style.left.replace("%","")}i<0?i=0:i>100&&(i=100),ne(t/100*i,fe.elements.display.seekTooltip),fe.elements.display.seekTooltip.style.left=i+"%",o.is.event(e)&&o.inArray(["mouseenter","mouseleave"],e.type)&&o.toggleClass(fe.elements.display.seekTooltip,a,"mouseenter"===e.type)}}function re(e){return o.is.object(e)&&"sources"in e&&e.sources.length?(ae(),te(),ue(),void fe.destroy(function(){if(d(fe.media),d("captions"),d("wrapper"),fe.elements.container&&fe.elements.container.removeAttribute("class"),"type"in e&&(fe.type=e.type,"video"===fe.type)){var t=e.sources[0];"type"in t&&o.inArray(i.embed,t.type)&&(fe.type=t.type)}switch(fe.supported=o.checkSupport(fe.type,fe.config.inline),fe.type){case"video":fe.media=o.createElement("video");break;case"audio":fe.media=o.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":fe.media=o.createElement("div"),fe.embedId=e.sources[0].src}o.prependChild(fe.elements.container,fe.media),o.is["boolean"](e.autoplay)&&(fe.config.autoplay=e.autoplay),o.inArray(i.html5,fe.type)&&(fe.config.crossorigin&&fe.media.setAttribute("crossorigin",""),fe.config.autoplay&&fe.media.setAttribute("autoplay",""),"poster"in e&&fe.media.setAttribute("poster",e.poster),fe.config.loop.active&&fe.media.setAttribute("loop",""),fe.config.muted&&fe.media.setAttribute("muted",""),fe.config.inline&&fe.media.setAttribute("playsinline","")),o.toggleClass(fe.elements.container,fe.config.classes.fullscreen.active,fe.fullscreen.active),o.toggleClass(fe.elements.container,fe.config.classes.captions.active,fe.captions.enabled),O(),o.inArray(i.html5,fe.type)&&p("source",e.sources),B(),o.inArray(i.html5,fe.type)&&("tracks"in e&&p("track",e.tracks),fe.media.load()),(o.inArray(i.html5,fe.type)||o.inArray(i.embed,fe.type)&&!fe.supported.full)&&(de(),pe()),fe.config.title=e.title,j()},!1)):void be("Invalid source format")}function le(){function e(){var e=fe.togglePlay(),t=fe.elements.buttons[e?"play":"pause"],n=fe.elements.buttons[e?"pause":"play"];if(n){var i=o.hasClass(t,fe.config.classes.tabFocus);setTimeout(function(){o.is.htmlElement(n)&&n.focus(),i&&(o.toggleClass(t,fe.config.classes.tabFocus,!1),o.toggleClass(n,fe.config.classes.tabFocus,!0))},100)}}function t(e){return e.keyCode?e.keyCode:e.which}function n(e){o.toggleClass(c("."+fe.config.classes.tabFocus),fe.config.classes.tabFocus,!1),fe.elements.container.contains(e)&&o.toggleClass(e,fe.config.classes.tabFocus,!0)}function i(n){function i(){var e=fe.media.duration;o.is.number(e)&&fe.seek(e/10*(a-48))}var a=t(n),r="keydown"===n.type,l=r&&a===d;if(o.is.number(a))if(r){var c=[48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79],u=[38,40];if(o.inArray(u,a)){var p=o.getFocusElement();if(o.is.htmlElement(p)&&"radio"===o.getFocusElement().type)return;
-}switch(o.inArray(c,a)&&(n.preventDefault(),n.stopPropagation()),a){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:l||i();break;case 32:case 75:l||e();break;case 38:fe.increaseVolume();break;case 40:fe.decreaseVolume();break;case 77:l||fe.toggleMute();break;case 39:fe.forward();break;case 37:fe.rewind();break;case 70:fe.toggleFullscreen();break;case 67:l||fe.toggleCaptions();break;case 73:fe.setLoop("start");break;case 76:fe.setLoop();break;case 79:fe.setLoop("end")}!s.fullscreen&&fe.fullscreen.active&&27===a&&fe.toggleFullscreen(),d=a}else d=null}function r(e){o.toggleClass(e.target,"tab-focus",!1)}var l=fe.browser.isIE?"change":"input";if(fe.config.keyboard.focused){var d=null;fe.config.keyboard.global&&o.on(window,"keydown keyup",function(e){var n=t(e),a=o.getFocusElement(),s=[48,49,50,51,52,53,54,56,57,75,77,70,67,73,76,79];!o.inArray(s,n)||o.is.htmlElement(a)&&o.matches(a,fe.config.selectors.editable)||i(e)},!1),o.on(fe.elements.container,"keydown keyup",i,!1)}o.on(window,"keyup",function(e){var i=t(e),a=o.getFocusElement();9===i&&n(a)}),o.on(document.body,"click",function(){o.toggleClass(u("."+fe.config.classes.tabFocus),fe.config.classes.tabFocus,!1)});for(var p in fe.elements.buttons)o.on(fe.elements.buttons[p],"blur",r);var m=function(e,t,n){o.is["function"](t)&&t.call(this,e),o.is["function"](n)&&n.call(this,e)};o.proxy(fe.elements.buttons.play,"click",fe.config.listeners.play,e),o.proxy(fe.elements.buttons.playLarge,"click",fe.config.listeners.play,e),o.proxy(fe.elements.buttons.pause,"click",fe.config.listeners.pause,e),o.proxy(fe.elements.buttons.restart,"click",fe.config.listeners.restart,function(){fe.restart()}),o.proxy(fe.elements.buttons.rewind,"click",fe.config.listeners.rewind,function(){fe.rewind()}),o.proxy(fe.elements.buttons.forward,"click",fe.config.listeners.forward,function(){fe.forward()}),o.proxy(fe.elements.buttons.mute,"click",fe.config.listeners.mute,function(){fe.toggleMute()}),o.proxy(fe.elements.buttons.captions,"click",fe.config.listeners.captions,function(){fe.toggleCaptions()}),o.proxy(fe.elements.buttons.fullscreen,"click",fe.config.listeners.fullscreen,function(e){fe.toggleFullscreen(e)}),o.proxy(fe.elements.buttons.pip,"click",fe.config.listeners.pip,function(){fe.togglePictureInPicture()}),o.proxy(fe.elements.buttons.airplay,"click",fe.config.listeners.airplay,function(){fe.airPlay()}),o.on(fe.elements.buttons.settings,"click",X),o.on(document.documentElement,"click",X),o.on(fe.elements.settings.form,"click",G),o.on(fe.elements.settings.form,"click",function(e){o.matches(e.target,fe.config.selectors.inputs.language)?m.call(this,e,fe.config.listeners.language,function(){fe.setLanguage(e.target.value.toLowerCase())}):o.matches(e.target,fe.config.selectors.inputs.quality)?m.call(this,e,fe.config.listeners.quality,function(){fe.setQuality(e.target.value)}):o.matches(e.target,fe.config.selectors.inputs.speed)?m.call(this,e,fe.config.listeners.speed,function(){fe.setSpeed(parseFloat(e.target.value))}):o.matches(e.target,fe.config.selectors.buttons.loop)&&m.call(this,e,fe.config.listeners.loop,function(){be("Set loop")})}),o.proxy(fe.elements.inputs.seek,l,fe.config.listeners.seek,function(e){var t=fe.getDuration();fe.seek(e.target.value/e.target.max*t)}),o.proxy(fe.elements.inputs.volume,l,fe.config.listeners.volume,function(){fe.setVolume(event.target.value)}),o.on(fe.elements.progress,"mouseenter mouseleave mousemove",se),fe.config.hideControls&&(o.on(fe.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen",function(e){fe.toggleControls(e)}),o.on(fe.elements.controls,"mouseenter mouseleave",function(e){fe.elements.controls.hover="mouseenter"===e.type}),o.on(fe.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){fe.elements.controls.pressed=o.inArray(["mousedown","touchstart"],e.type)}),o.on(fe.elements.controls,"focus blur",function(e){fe.toggleControls(e)},!0,!0)),o.proxy(fe.elements.inputs.volume,"wheel",fe.config.listeners.volume,function(e){var t=e.webkitDirectionInvertedFromDevice,n=.2,i=0;(e.deltaY<0||e.deltaX>0)&&(t?(fe.decreaseVolume(n),i=-1):(fe.increaseVolume(n),i=1)),(e.deltaY>0||e.deltaX<0)&&(t?(fe.increaseVolume(n),i=1):(fe.decreaseVolume(n),i=-1)),(1===i&&fe.media.volume<1||i===-1&&fe.media.volume>0)&&e.preventDefault()},!1),s.fullscreen&&o.on(document,a.eventType,function(e){fe.toggleFullscreen(e)})}function ce(){if(o.on(fe.media,"timeupdate seeking",oe),o.on(fe.media,"durationchange loadedmetadata",ie),o.on(fe.media,"ended",function(){"video"===fe.type&&fe.config.showPosterOnEnd&&("video"===fe.type&&L(),fe.restart(),fe.media.load())}),o.on(fe.media,"progress playing",ee),o.on(fe.media,"volumechange",K),o.on(fe.media,"play pause ended",J),o.on(fe.media,"waiting canplay seeked",Z),fe.config.clickToPlay&&"audio"!==fe.type){var e=u("."+fe.config.classes.video);if(!e)return;e.style.cursor="pointer",o.on(e,"click",function(){fe.config.hideControls&&s.touch&&!fe.media.paused||(fe.media.paused?fe.play():fe.media.ended?(fe.restart(),fe.play()):fe.pause())})}fe.config.disableContextMenu&&o.on(fe.media,"contextmenu",function(e){e.preventDefault()},!1),o.on(fe.media,"ratechange",function(){fe.speed.selected=fe.media.playbackRate,S("speed"),H({speed:fe.speed.selected})}),o.on(fe.media,"qualitychange",function(){fe.quality.selected=fe.media.quality,S("quality"),H({quality:fe.quality.selected})}),o.on(fe.media,fe.config.events.concat(["keyup","keydown"]).join(" "),function(e){r(fe.elements.container,e.type,!0)})}function ue(){if(o.inArray(i.html5,fe.type)){for(var e=fe.media.querySelectorAll("source"),t=0;t<e.length;t++)o.removeElement(e[t]);fe.media.setAttribute("src","https://cdn.selz.com/plyr/blank.mp4"),fe.media.load(),ye("Cancelled network requests")}}function de(){return fe.supported.full?(o.is.htmlElement(fe.elements.controls)||(M(),le()),void(o.is.htmlElement(fe.elements.controls)&&(ce(),D(),F(),I(),fe.setVolume(),K(),fe.setSpeed(),fe.setLoop(),oe(),J()))):(be("Basic support only",fe.type),d("controls"),d("buttons.play"),void D(!0))}function pe(){fe.ready=!0,window.setTimeout(function(){r(fe.elements.container,"ready",!0)},0),fe.config.autoplay&&fe.play()}function me(e){if(null===e||o.is.undefined(e)||!o.is.htmlElement(e))return void ve("Setup failed: no suitable element passed");if(e.plyr)return be("Target already setup"),void(fe=e.plyr);if(!fe.config.enabled)return void ve("Setup failed: disabled by config");if(!o.checkSupport().basic)return void ve("Setup failed: no support");fe.elements.original=e.cloneNode(!0);var t=e.tagName.toLowerCase();switch(t){case"div":if(fe.type=e.getAttribute("data-type"),fe.embedId=e.getAttribute("data-video-id"),o.is.empty(fe.type))return void ve("Setup failed: embed type missing");if(o.is.empty(fe.embedId))return void ve("Setup failed: video id missing");e.removeAttribute("data-type"),e.removeAttribute("data-video-id");break;case"iframe":break;case"video":case"audio":fe.type=t,null!==e.getAttribute("crossorigin")&&(fe.config.crossorigin=!0),null!==e.getAttribute("autoplay")&&(fe.config.autoplay=!0),null!==e.getAttribute("playsinline")&&(fe.config.inline=!0),null!==e.getAttribute("muted")&&(fe.config.muted=!0),null!==e.getAttribute("loop")&&(fe.config.loop.active=!0);break;default:return void ve("Setup failed: unsupported type")}return fe.browser=o.getBrowser(),R(),fe.supported=o.checkSupport(fe.type,fe.config.inline),fe.supported.basic?(e.plyr=fe,fe.elements.container=o.wrap(e,o.createElement("div")),fe.elements.container.setAttribute("tabindex",0),O(),ye(fe.browser.name+" "+fe.browser.version),B(),fe.config.debug&&o.on(fe.elements.container,fe.config.events.join(" "),function(e){ye("event: "+e.type)}),void((o.inArray(i.html5,fe.type)||o.inArray(i.embed,fe.type)&&!fe.supported.full)&&(de(),pe(),j()))):void ve("Setup failed: no support")}var fe=this,ge={};fe.ready=!1,fe.media=e,o.is.string(fe.media)&&(fe.media=document.querySelectorAll(fe.media)),(window.jQuery&&fe.media instanceof jQuery||o.is.nodeList(fe.media)||o.is.array(fe.media))&&(fe.media=fe.media[0]),fe.config=o.extend({},n,t,function(){try{return JSON.parse(fe.media.getAttribute("data-plyr"))}catch(e){}}()),fe.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},fe.captions={enabled:!1,captions:[],tracks:[],currentTrack:null},fe.fullscreen={active:!1},fe.speed={selected:null,options:[]},fe.quality={selected:null,options:[]},fe.loop={indicator:{start:0,end:0}};var ye=function(){},be=function(){},ve=function(){};fe.config.debug&&"console"in window&&(ye=console.log,be=console.warn,ve=console.error,ye("Debugging enabled")),ye("Config",fe.config),ye("Support",s),fe.core={getElement:u,getElements:c,trigger:r,setCaption:L,setupCaptions:I,toggleNativeControls:D,updateTimeDisplay:ne,updateSeekDisplay:ae,updateSource:re,updateStorage:H,timers:ge,support:s,log:ye,warn:be,error:ve},me(fe.media)}var t={x:0,y:0},n={enabled:!0,title:"",debug:!1,logPrefix:"",autoplay:!1,seekTime:10,volume:1,muted:!1,displayDuration:!0,clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/2.0.10/plyr.svg",duration:null,quality:{"default":"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1,start:null,end:null},speed:{"default":1,options:[.25,.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,allowAudio:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed","loop"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",forward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",toggleMute:"Toggle Mute",toggleCaptions:"Toggle Captions",toggleFullscreen:"Toggle Fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",none:"None"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},soundcloud:{api:"https://w.soundcloud.com/player/api.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","qualitychange","qualityrequested","controlshidden","controlsshown","statechange"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',forward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classes:{video:"plyr__video-wrapper",embed:"plyr__video-embed",control:"plyr__control",type:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",muted:"plyr--muted",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",menu:{value:"plyr__menu__value",badge:"plyr__badge"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",active:"plyr--fullscreen-active"},pip:{enabled:"plyr--pip-enabled",active:"plyr--pip-active"},airplay:{enabled:"plyr--airplay-enabled",active:"plyr--airplay-active"},tabFocus:"tab-focus"}},i={embed:["youtube","vimeo","soundcloud"],html5:["video","audio"]},o={is:{object:function(e){return null!==e&&"object"==typeof e&&e.constructor===Object},array:function(e){return null!==e&&Array.isArray(e)},number:function(e){return null!==e&&("number"==typeof e&&!isNaN(e-0)||"object"==typeof e&&e.constructor===Number)},string:function(e){return null!==e&&("string"==typeof e||"object"==typeof e&&e.constructor===String)},"boolean":function(e){return null!==e&&"boolean"==typeof e},nodeList:function(e){return null!==e&&e instanceof NodeList},htmlElement:function(e){return null!==e&&e instanceof HTMLElement},"function":function(e){return null!==e&&"function"==typeof e},event:function(e){return null!==e&&e instanceof Event},cue:function(e){return null!==e&&(e instanceof window.TextTrackCue||e instanceof window.VTTCue)},track:function(e){return null!==e&&e instanceof window.TextTrack},undefined:function(e){return null!==e&&"undefined"==typeof e},empty:function(e){return null===e||this.undefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&0===e.length||this.object(e)&&0===Object.keys(e).length}},getBrowser:function(){var e,t,n,i=navigator.userAgent,o=navigator.appName,a=""+parseFloat(navigator.appVersion),s=parseInt(navigator.appVersion,10),r=!1,l=!1,c=!1,u=!1;return navigator.appVersion.indexOf("Windows NT")!==-1&&navigator.appVersion.indexOf("rv:11")!==-1?(r=!0,o="IE",a="11"):(t=i.indexOf("MSIE"))!==-1?(r=!0,o="IE",a=i.substring(t+5)):(t=i.indexOf("Chrome"))!==-1?(c=!0,o="Chrome",a=i.substring(t+7)):(t=i.indexOf("Safari"))!==-1?(u=!0,o="Safari",a=i.substring(t+7),(t=i.indexOf("Version"))!==-1&&(a=i.substring(t+8))):(t=i.indexOf("Firefox"))!==-1?(l=!0,o="Firefox",a=i.substring(t+8)):(e=i.lastIndexOf(" ")+1)<(t=i.lastIndexOf("/"))&&(o=i.substring(e,t),a=i.substring(t+1),o.toLowerCase()===o.toUpperCase()&&(o=navigator.appName)),(n=a.indexOf(";"))!==-1&&(a=a.substring(0,n)),(n=a.indexOf(" "))!==-1&&(a=a.substring(0,n)),s=parseInt(""+a,10),isNaN(s)&&(a=""+parseFloat(navigator.appVersion),s=parseInt(navigator.appVersion,10)),{name:o,version:s,isIE:r,isOldIE:r&&s<=9,isFirefox:l,isChrome:c,isSafari:u,isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},checkSupport:function(e,t){var n=!1,i=!1,a=o.getBrowser(),r=a.isIPhone&&t&&s.inline;switch(e){case"video":n=s.video,i=n&&!a.isOldIE&&(!a.isIPhone||r);break;case"audio":n=s.audio,i=n&&!a.isOldIE;break;case"youtube":n=s.video,i=n&&!a.isOldIE&&(!a.isIPhone||r);break;case"vimeo":case"soundcloud":n=!0,i=!a.isOldIE&&!a.isIos;break;default:n=s.audio&&s.video,i=n&&!a.isOldIE}return{basic:n,full:i}},injectScript:function(e){if(!document.querySelectorAll('script[src="'+e+'"]').length){var t=document.createElement("script");t.src=e;var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n)}},inFrame:function(){try{return window.self!==window.top}catch(e){return!0}},inArray:function(e,t){return o.is.array(e)&&e.indexOf(t)!==-1},replaceAll:function(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)},wrap:function(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var i=n>0?t.cloneNode(!0):t,o=e[n],a=o.parentNode,s=o.nextSibling;return i.appendChild(o),s?a.insertBefore(i,s):a.appendChild(i),i}},removeElement:function(e){o.is.htmlElement(e)&&o.is.htmlElement(e.parentNode)&&e.parentNode.removeChild(e)},prependChild:function(e,t){e.insertBefore(t,e.firstChild)},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},createElement:function(e,t,n){var i=document.createElement(e);return o.is.object(t)&&o.setAttributes(i,t),o.is.string(n)&&(i.textContent=n),i},insertElement:function(e,t,n,i){var a=o.createElement(e,n,i);o.prependChild(t,a)},emptyElement:function(e){for(var t=e.childNodes.length;t--;)e.removeChild(e.lastChild)},setAttributes:function(e,t){for(var n in t)e.setAttribute(n,t[n])},getAttributesFromSelector:function(e,t){if(!o.is.string(e)||o.is.empty(e))return{};var n={};return e.split(",").forEach(function(e){e=e.trim();var i=e.charAt(0);switch(i){case".":var a=e.replace(".","");o.is.object(t)&&o.is.string(t["class"])&&(t["class"]+=" "+a),n["class"]=a;break;case"#":n.id=e.replace("#","");break;case"[":e=e.replace(/[\[\]]/g,"");var s=e.split("="),r=s[0],l=s.length>1?s[1].replace(/[\"\']/g,""):"";n[r]=l}}),n},toggleClass:function(e,t,n){if(o.is.htmlElement(e)){var i=!1;if(e.classList)i=e.classList.contains(t),e.classList[n?"add":"remove"](t);else{i=o.inArray(e.className.split(" "),t);var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}return n&&!i||!n&&i}return null},hasClass:function(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))},matches:function(e,t){var n=Element.prototype,i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(e){return[].indexOf.call(document.querySelectorAll(e),this)!==-1};return i.call(e,t)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},proxy:function(e,t,n,i,a,s){o.on(e,t,function(t){n&&n.apply(e,[t]),i.apply(e,[t])},a,s)},toggleListener:function(e,t,n,i,a,r){if(null!==e&&!o.is.undefined(e)){if(t=t.split(" "),o.is["boolean"](r)||(r=!1),o.is["boolean"](a)||(a=!0),e instanceof NodeList){var l=1===arguments.length?[arguments[0]]:Array.apply(null,arguments);return l.shift(),void[].forEach.call(e,function(e){e instanceof Node&&o.toggleListener.apply(null,[e].concat(l))})}var c=r;s.passiveListeners&&(c={passive:a,capture:r}),t.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,c)})}},on:function(e,t,n,i,a){o.toggleListener(e,t,n,!0,i,a)},off:function(e,t,n,i,a){o.toggleListener(e,t,n,!1,i,a)},event:function(e,t,n,i){if(e&&t){o.is["boolean"](n)||(n=!1);var a;o.is["function"](window.CustomEvent)?a=window.CustomEvent:(a=function(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n},a.prototype=window.Event.prototype);var s=new a(t,{bubbles:n,detail:i});e.dispatchEvent(s)}},toggleState:function(e,t){if(e)return t=o.is["boolean"](t)?t:!e.getAttribute("aria-pressed"),e.setAttribute("aria-pressed",t),t},getPercentage:function(e,t){return 0===e||0===t||isNaN(e)||isNaN(t)?0:(e/t*100).toFixed(2)},extend:function(){var e=arguments;if(e.length){if(1===e.length)return e[0];var t=Array.prototype.shift.call(e);o.is.object(t)||(t={});for(var n=e.length,i=0;i<n;i++){var a=e[i];o.is.object(a)||(a={});for(var s in a)a[s]&&a[s].constructor&&a[s].constructor===Object?(t[s]=t[s]||{},o.extend(t[s],a[s])):t[s]=a[s]}return t}},parseYouTubeId:function(e){var t=/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;return e.match(t)?RegExp.$2:e},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},loadSprite:function(e,t){function n(e,t){e.innerHTML=t,document.body.insertBefore(e,document.body.childNodes[0])}if("string"==typeof e){var i="cache-",o="string"==typeof t,a=!1;if(!o||!document.querySelectorAll("#"+t).length){var r=document.createElement("div");if(r.setAttribute("hidden",""),o&&r.setAttribute("id",t),s.storage){var l=window.localStorage.getItem(i+t);if(a=null!==l){var c=JSON.parse(l);n(r,c.content)}}var u=new XMLHttpRequest;if(!("withCredentials"in u))return;u.open("GET",e,!0),u.onload=function(){s.storage&&window.localStorage.setItem(i+t,JSON.stringify({content:u.responseText})),n(r,u.responseText)},u.send()}}},transitionEnd:function(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(void 0!==e.style[n])return t[n];return!1}()},a=function(){var e=function(){var e=!1;return o.is["function"](document.cancelFullScreen)?e="":["webkit","o","moz","ms","khtml"].some(function(t){return o.is["function"](document[t+"CancelFullScreen"])?(e=t,!0):o.is["function"](document.msExitFullscreen)&&document.msFullscreenEnabled?(e="ms",!0):void 0}),e}();return{prefix:e,eventType:"ms"===e?"MSFullscreenChange":e+"fullscreenchange",isFullScreen:function(t){if(!s.fullscreen)return!1;switch(o.is.undefined(t)&&(t=document.body),e){case"":return document.fullscreenElement===t;case"moz":return document.mozFullScreenElement===t;default:return document[e+"FullscreenElement"]===t}},requestFullScreen:function(t){return!!s.fullscreen&&(o.is.htmlElement(t)||(t=document.body),e.length?t[e+("ms"===e?"RequestFullscreen":"RequestFullScreen")]():t.requestFullScreen())},cancelFullScreen:function(){return!!s.fullscreen&&(e.length?document[e+("ms"===e?"ExitFullscreen":"CancelFullScreen")]():document.cancelFullScreen())},element:function(){return s.fullscreen?e.length?document[e+"FullscreenElement"]:document.fullscreenElement:null}}}(),s={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),fullscreen:a.prefix!==!1,storage:function(){if(!("localStorage"in window))return!1;var e="___test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(t){return!1}}(),pip:function(){var e=o.getBrowser();return!e.isIPhone&&o.is["function"](o.createElement("video").webkitSetPresentationMode)}(),airplay:o.is["function"](window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e,t){var n=e.media;try{if(!o.is["function"](n.canPlayType))return!1;if("video"===e.type)switch(t){case"video/webm":return n.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return n.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return n.canPlayType('video/ogg; codecs="theora"').replace(/no/,"")}else if("audio"===e.type)switch(t){case"audio/mpeg":return n.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return n.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return n.canPlayType('audio/wav; codecs="1"').replace(/no/,"")}}catch(i){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("test",null,t)}catch(n){}return e}(),touch:"ontouchstart"in document.documentElement,transitions:o.transitionEnd!==!1,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches};return e.prototype.play=function(){var e=this;return"play"in e.media&&e.media.play(),e},e.prototype.pause=function(){var e=this;return"pause"in e.media&&e.media.pause(),e},e.prototype.togglePlay=function(e){var t=this;return o.is["boolean"](e)||(e=t.media.paused),e?t.play():t.pause(),e},e.prototype.stop=function(){var e=this;return e.restart(),e.pause(),e},e.prototype.restart=function(){var e=this;return e.seek(),e},e.prototype.rewind=function(e){var t=this;return o.is.number(e)||(e=t.config.seekTime),t.seek(t.media.currentTime-e),t},e.prototype.forward=function(e){var t=this;return o.is.number(e)||(e=t.config.seekTime),t.seek(t.media.currentTime+e),t},e.prototype.seek=function(e){var t=this,n=0,a=t.media.paused,s=t.getDuration();if(o.is.number(e)&&(n=e),n<0?n=0:n>s&&(n=s),t.core.updateSeekDisplay(n),o.inArray(i.embed,t.type)){switch(t.type){case"youtube":t.embed.seekTo(n);break;case"vimeo":t.embed.setCurrentTime(n);break;case"soundcloud":t.embed.seekTo(1e3*n)}a&&t.pause(),t.core.trigger(t.media,"timeupdate"),t.media.seeking=!0,t.core.trigger(t.media,"seeking")}else t.media.currentTime=n.toFixed(4);return t.core.log("Seeking to "+t.media.currentTime+" seconds"),t},e.prototype.setVolume=function(e){var t=this,n=1,a=0,s=!o.is.undefined(e);if(o.is.string(e)&&(e=parseFloat(e)),o.is.number(e)||(e=t.storage.volume),o.is.number(e)||(e=t.config.volume),e>n&&(e=n),e<a&&(e=a),t.media.volume=e,o.inArray(i.embed,t.type)){switch(t.type){case"youtube":t.embed.setVolume(100*t.media.volume);break;case"vimeo":case"soundcloud":t.embed.setVolume(t.media.volume)}t.core.trigger(t.media,"volumechange")}return 0===e?t.toggleMute(!0):t.media.muted&&s&&t.toggleMute(),t},e.prototype.increaseVolume=function(e){var t=this,n=t.media.muted?0:t.media.volume;return o.is.number(e)||(e=1),t.setVolume(n+e),t},e.prototype.decreaseVolume=function(e){var t=this,n=t.media.muted?0:t.media.volume;return o.is.number(e)||(e=1),t.setVolume(n-e),t},e.prototype.toggleMute=function(e){var t=this;if(o.is["boolean"](e)||(e=!t.media.muted),o.toggleState(t.elements.buttons.mute,e),t.media.muted=e,t.media.muted||0!==t.media.volume||t.setVolume(t.config.volume),o.inArray(i.embed,t.type)){switch(t.type){case"youtube":t.embed[t.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":t.embed.setVolume(t.media.muted?0:t.config.volume)}t.core.trigger(t.media,"volumechange")}return t},e.prototype.setSpeed=function(e){var t=this;if(o.is.number(e)||(e=parseFloat(t.storage.speed||t.speed.selected||t.config.speed["default"])),e<.1&&(e=.1),e>2&&(e=2),!o.inArray(t.config.speed.options,e))return void t.core.warn("Unsupported speed ("+e+")");switch(t.type){case"youtube":t.embed.setPlaybackRate(e);break;case"vimeo":e=null,t.core.warn("Vimeo playback rate change is not supported");break;default:t.media.playbackRate=e}return t},e.prototype.setQuality=function(e){var t=this;if(o.is.string(e)||(e=parseFloat(t.storage.quality||t.config.quality.selected)),!o.inArray(t.config.quality.options,e))return void t.core.warn("Unsupported quality option ("+e+")");switch(t.type){case"youtube":t.core.trigger(t.media,"qualityrequested",!1,{quality:e}),t.embed.setPlaybackQuality(e);break;default:t.core.warn("Quality options are only available for YouTube")}return t},e.prototype.setLoop=function(e){var t=this;o.inArray(["start","end","all","none","toggle"],e)||(e="toggle");var n=Number(t.media.currentTime);switch(e){case"start":t.config.loop.end&&t.config.loop.end<=n&&(t.config.loop.end=null),t.config.loop.start=n,t.config.loop.indicator.start=t.elements.display.played.value;break;case"end":if(t.config.loop.start>=n)return;t.config.loop.end=n,t.config.loop.indicator.end=t.elements.display.played.value;break;case"all":t.config.loop.start=0,t.config.loop.end=t.media.duration-2,t.config.loop.indicator.start=0,t.config.loop.indicator.end=100;break;case"toggle":t.config.loop.active?(t.config.loop.start=0,t.config.loop.end=null):(t.config.loop.start=0,t.config.loop.end=t.media.duration-2);break;default:t.config.loop.start=0,t.config.loop.end=null}return t},e.prototype.source=function(e){var t=this;if(o.is.object(e))return t.core.updateSource(e),t;var n;switch(t.type){case"youtube":n=t.embed.getVideoUrl();break;case"vimeo":t.embed.getVideoUrl.then(function(e){n=e});break;case"soundcloud":t.embed.getCurrentSound(function(e){n=e.permalink_url});break;default:n=t.media.currentSrc}return n},e.prototype.poster=function(e){var t=this;return o.is.string(e)?("video"===t.type?t.media.setAttribute("poster",e):t.core.warn("Poster can only be set on HTML5 video"),t):t.media.getAttribute("poster")},e.prototype.toggleCaptions=function(e){var t=this;if(t.supported.full&&t.elements.buttons.captions)return o.is["boolean"](e)||(e=t.elements.container.className.indexOf(t.config.classes.captions.active)===-1),t.captions.enabled=e,o.toggleState(t.elements.buttons.captions,t.captions.enabled),o.toggleClass(t.elements.container,t.config.classes.captions.active,t.captions.enabled),t.core.trigger(t.media,t.captions.enabled?"captionsenabled":"captionsdisabled"),t.core.updateStorage({captions:t.captions.enabled}),t},e.prototype.setLanguage=function(e){var t=this;return o.is.string(e)?(t.config.captions.language=e.toLowerCase(),t.core.setCaption(),t.core.setupCaptions(),t):void t.core.warn("Language is required")},e.prototype.getLanguage=function(){return this.config.captions.language},e.prototype.toggleFullscreen=function(e){function n(){t={x:window.pageXOffset||0,y:window.pageYOffset||0}}function i(){window.scrollTo(t.x,t.y)}var r=this,l=s.fullscreen;if(l){if(!o.is.event(e)||e.type!==a.eventType)return a.isFullScreen(r.elements.container)?a.cancelFullScreen():(n(),a.requestFullScreen(r.elements.container)),void(r.fullscreen.active=a.isFullScreen(r.elements.container));r.fullscreen.active=a.isFullScreen(r.elements.container)}else r.fullscreen.active=!r.fullscreen.active,document.body.style.overflow=r.fullscreen.active?"hidden":"";return o.toggleClass(r.elements.container,r.config.classes.fullscreen.active,r.fullscreen.active),r.elements.buttons&&r.elements.buttons.fullscreen&&o.toggleState(r.elements.buttons.fullscreen,r.fullscreen.active),r.core.trigger(r.media,r.fullscreen.active?"enterfullscreen":"exitfullscreen",!0),!r.fullscreen.active&&l&&i(),r},e.prototype.togglePictureInPicture=function(e){var t=this,n={pip:"picture-in-picture",inline:"inline"};if(t.core.support.pip)return o.is["boolean"](e)||(e=t.media.webkitPresentationMode===n.inline),t.media.webkitSetPresentationMode(e?n.pip:n.inline),t},e.prototype.airPlay=function(){var e=this;if(e.core.support.airplay)return e.media.webkitShowPlaybackTargetPicker(),e},e.prototype.toggleControls=function(e){var t=this;if(t.config.hideControls&&"audio"!==t.type){var n=0,i=e,a=!1,r=o.hasClass(t.elements.container,t.config.classes.loading);if(o.is["boolean"](e)||(o.is.event(e)?(a="enterfullscreen"===e.type,i=o.inArray(["mousemove","touchstart","mouseenter","focus"],e.type),o.inArray(["mousemove","touchmove"],e.type)&&(n=2e3),"focus"===e.type&&(n=3e3)):i=o.hasClass(t.elements.container,t.config.classes.hideControls)),window.clearTimeout(t.core.timers.hover),i||t.media.paused||r){var l=o.toggleClass(t.elements.container,t.config.classes.hideControls,!1);if(l&&t.core.trigger(t.media,"controlsshown"),t.media.paused||r)return;s.touch&&(n=3e3)}return i&&t.media.paused||(t.core.timers.hover=window.setTimeout(function(){if(!t.elements.controls.pressed&&!t.elements.controls.hover||a){var e=o.toggleClass(t.elements.container,t.config.classes.hideControls,!0);e&&t.core.trigger(t.media,"controlshidden")}},n)),t}},e.prototype.on=function(e,t){var n=this;return o.on(n.elements.container,e,t),n},e.prototype.off=function(e,t){var n=this;return o.off(n.elements.container,e,t),n},e.prototype.supports=function(e){return s.mime(this,e)},e.prototype.destroy=function(e,t){function n(){if(null!==i){if(o.is["boolean"](t)||(t=!0),document.body.style.overflow="",t){var n=i.elements.container.parentNode;o.is.htmlElement(n)&&n.replaceChild(i.elements.original,i.elements.container)}i.core.trigger(i.elements.original,"destroyed",!0),o.is["function"](e)&&e.call(i.elements.original),i=null}}var i=this;switch(i.type){case"youtube":window.clearInterval(i.core.timers.buffering),window.clearInterval(i.core.timers.playing),i.embed.destroy(),n();break;case"vimeo":i.embed.unload().then(n),window.setTimeout(n,200);break;case"video":case"audio":i.core.toggleNativeControls(!0),n()}},e.prototype.getDuration=function(){var e=this,t=parseInt(e.config.duration),n=0;
-return null===e.media.duration||isNaN(e.media.duration)||(n=e.media.duration),isNaN(t)?n:t},e}); \ No newline at end of file
+(function(e,t,n){"use strict";"object"==typeof exports?module.exports=n(require):"function"==typeof define&&define.amd?define(n):t[e]=n()}).call(this,"Plyr",this,function(){"use strict";function e(e,t){function r(e,t,n,i){a.dispatchEvent(e,t,n,a.extend({},i,{plyr:de}))}function l(){var e=c("input:not([disabled]), button:not([disabled])"),t=e[0],n=e[e.length-1];a.on(de.elements.container,"keydown",function(e){9===e.which&&de.fullscreen.active&&(e.target!==n||e.shiftKey?e.target===t&&e.shiftKey&&(e.preventDefault(),n.focus()):(e.preventDefault(),t.focus()))},!1)}function c(e){return de.elements.container.querySelectorAll(e)}function u(e){return c(e)[0]}function d(e){a.is.string(e)?(a.removeElement(de.elements[e]),de.elements[e]=null):a.removeElement(e)}function p(e,t){a.is.string(t)?a.insertElement(e,de.media,{src:t}):a.is.array(t)&&(ge(t),t.forEach(function(t){a.insertElement(e,de.media,t)}))}function m(){return{url:de.config.iconUrl,absolute:0===de.config.iconUrl.indexOf("http")||de.browser.isIE}}function g(e,t){var n=m(),i=(n.absolute?"":n.url)+"#"+de.config.iconPrefix,o=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttributes(o,a.extend(t,{role:"presentation"}));var s=document.createElementNS("http://www.w3.org/2000/svg","use");return s.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",i+"-"+e),o.appendChild(s),o}function f(e){var t=de.config.i18n[e];switch(e){case"pip":t="PIP";break;case"airplay":t="AirPlay"}return a.createElement("span",{class:de.config.classNames.hidden},t)}function y(e){var t=a.createElement("span",{class:de.config.classNames.menu.value});return t.appendChild(a.createElement("span",{class:de.config.classNames.menu.badge},e)),t}function b(e,t){var n,i,o,s=a.createElement("button");switch(a.is.object(t)||(t={}),"class"in t?-1===t.class.indexOf(de.config.classNames.control)&&(t.class+=" "+de.config.classNames.control):t.class=de.config.classNames.control,e){case"mute":o="toggleMute",n="volume",i="muted";break;case"captions":o="toggleCaptions",n="captions-off",i="captions-on";break;case"fullscreen":o="toggleFullscreen",n="enter-fullscreen",i="exit-fullscreen";break;case"play-large":t.class="plyr__play-large",e="play",o="play",n="play";break;default:o=e,n=e}return a.extend(t,a.getAttributesFromSelector(de.config.selectors.buttons[e],t)),a.is.string(i)&&s.appendChild(g(i,{class:"icon--"+i})),s.appendChild(g(n)),s.appendChild(f(o)),a.setAttributes(s,t),de.elements.buttons[e]=s,s}function v(e,t){var n=a.createElement("label",{for:t.id,class:de.config.classNames.hidden},de.config.i18n[e]),i=a.createElement("input",a.extend(a.getAttributesFromSelector(de.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.1,value:0,autocomplete:"off"},t));return de.elements.inputs[e]=i,{label:n,input:i}}function h(e,t){var n=a.createElement("progress",a.extend(a.getAttributesFromSelector(de.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(a.createElement("span",null,"0"));var i="";switch(e){case"played":i=de.config.i18n.played;break;case"buffer":i=de.config.i18n.buffered}n.textContent="% "+i.toLowerCase()}return de.elements.display[e]=n,n}function w(e){var t=a.createElement("span",{class:"plyr__time"});return t.appendChild(a.createElement("span",{class:de.config.classNames.hidden},de.config.i18n[e])),t.appendChild(a.createElement("span",a.getAttributesFromSelector(de.config.selectors.display[e]),"00:00")),de.elements.display[e]=t,t}function k(e){if(!a.is.empty(de.config.controls)){var t=a.createElement("div",a.getAttributesFromSelector(de.config.selectors.controls.wrapper));if(a.inArray(de.config.controls,"restart")&&t.appendChild(b("restart")),a.inArray(de.config.controls,"rewind")&&t.appendChild(b("rewind")),a.inArray(de.config.controls,"play")&&(t.appendChild(b("play")),t.appendChild(b("pause"))),a.inArray(de.config.controls,"fast-forward")&&t.appendChild(b("fast-forward")),a.inArray(de.config.controls,"progress")){var n=a.createElement("span",a.getAttributesFromSelector(de.config.selectors.progress)),i=v("seek",{id:"plyr-seek-"+e.id});if(n.appendChild(i.label),n.appendChild(i.input),n.appendChild(h("played")),n.appendChild(h("buffer")),de.config.tooltips.seek){var o=a.createElement("span",{role:"tooltip",class:de.config.classNames.tooltip},"00:00");n.appendChild(o),de.elements.display.seekTooltip=o}de.elements.progress=n,t.appendChild(de.elements.progress)}if(a.inArray(de.config.controls,"current-time")&&t.appendChild(w("currentTime")),a.inArray(de.config.controls,"duration")&&t.appendChild(w("duration")),a.inArray(de.config.controls,"mute")&&t.appendChild(b("mute")),a.inArray(de.config.controls,"volume")){var r=a.createElement("span",{class:"plyr__volume"}),l={max:1,step:.05,value:de.config.volume},c=v("volume",a.extend(l,{id:"plyr-volume-"+e.id}));r.appendChild(c.label),r.appendChild(c.input);var u=h("volume",l);r.appendChild(u),t.appendChild(r)}if(a.inArray(de.config.controls,"captions")&&t.appendChild(b("captions")),a.inArray(de.config.controls,"settings")&&!a.is.empty(de.config.settings)){var d=a.createElement("div",{class:"plyr__menu"});d.appendChild(b("settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var p=a.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),m=a.createElement("div"),g=a.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),f=a.createElement("ul",{role:"tablist"});de.config.settings.forEach(function(t){var n=a.createElement("li",{role:"tab",hidden:""}),i=a.createElement("button",a.extend(a.getAttributesFromSelector(de.config.selectors.buttons.settings),{type:"button",class:de.config.classNames.control+" "+de.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+t+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+t,"aria-expanded":!1}),de.config.i18n[t]),o=a.createElement("span",{class:de.config.classNames.menu.value});o.innerHTML=e[t],i.appendChild(o),n.appendChild(i),f.appendChild(n),de.elements.settings.tabs[t]=n}),g.appendChild(f),m.appendChild(g),de.config.settings.forEach(function(t){var n=a.createElement("div",{id:"plyr-settings-"+e.id+"-"+t,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+t+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),i=a.createElement("button",{type:"button",class:de.config.classNames.control+" "+de.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},de.config.i18n[t]);n.appendChild(i);var o=a.createElement("ul");n.appendChild(o),m.appendChild(n),de.elements.settings.panes[t]=n}),p.appendChild(m),d.appendChild(p),t.appendChild(d),de.elements.settings.form=p,de.elements.settings.menu=d}return a.inArray(de.config.controls,"pip")&&s.pip&&t.appendChild(b("pip")),a.inArray(de.config.controls,"airplay")&&s.airplay&&t.appendChild(b("airplay")),a.inArray(de.config.controls,"fullscreen")&&t.appendChild(b("fullscreen")),a.inArray(de.config.controls,"play-large")&&(de.elements.buttons.playLarge=b("play-large"),de.elements.container.appendChild(de.elements.buttons.playLarge)),de.elements.controls=t,N(),t}}function C(e,t){var n=de.elements.settings.tabs[e],i=de.elements.settings.panes[e];a.is.htmlElement(n)&&(t?n.removeAttribute("hidden"):n.setAttribute("hidden","")),a.is.htmlElement(i)&&(t?i.removeAttribute("hidden"):i.setAttribute("hidden",""))}function E(e,t){function n(e){var t="";switch(e){case"hd2160":t="4K";break;case"hd1440":t="WQHD";break;case"hd1080":case"hd720":t="HD"}return t.length?y(t):null}var i=de.elements.settings.panes.quality.querySelector("ul");a.is.array(e)?de.quality.options=e.filter(function(e){return a.inArray(de.config.quality.options,e)}):de.quality.options=de.config.quality.options,a.is.string(t)&&a.inArray(de.quality.options,t)&&(de.quality.selected=t);var o=!a.is.empty(de.quality.options)&&"youtube"===de.type;C("quality",o),o&&(a.emptyElement(i),de.quality.options.forEach(function(e){var t=a.createElement("li"),o=a.createElement("label",{class:de.config.classNames.control}),s=a.createElement("input",a.extend(a.getAttributesFromSelector(de.config.selectors.inputs.quality),{type:"radio",name:"plyr-quality",value:e}));o.appendChild(s),o.appendChild(document.createTextNode(A("quality",e)));var r=n(e);a.is.htmlElement(r)&&o.appendChild(r),t.appendChild(o),i.appendChild(t)}),T("quality",i))}function A(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){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";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return F()}}function T(e,t){var n=null;switch(e){case"captions":n=de.captions.language,de.captions.enabled||(n="");break;default:if(n=de[e].selected,a.is.empty(n)&&(n=de.config[e].default),!a.inArray(de[e].options,n))return void ge("Unsupported option")}a.is.htmlElement(t)||(t=de.elements.settings.panes[e].querySelector("ul"));var i=t.querySelector('input[value="'+n+'"]');a.is.htmlElement(i)&&(i.checked=!0,de.elements.settings.tabs[e].querySelector("."+de.config.classNames.menu.value).innerHTML=A(e,n))}function S(){var e=de.elements.settings.panes.captions.querySelector("ul");if(C("captions",!a.is.empty(de.captions.tracks)),a.emptyElement(e),!a.is.empty(de.captions.tracks)){var t=[].map.call(de.captions.tracks,function(e){return{language:e.language,badge:!0,label:a.is.empty(e.label)?e.language.toUpperCase():e.label}});t.unshift({language:"",label:de.config.i18n.none}),t.forEach(function(t){var n=a.createElement("li"),i=a.createElement("label",{class:de.config.classNames.control}),o=a.createElement("input",a.extend(a.getAttributesFromSelector(de.config.selectors.inputs.language),{type:"radio",name:"plyr-language",value:t.language}));t.language.toLowerCase()===de.captions.language.toLowerCase()&&(o.checked=!0),i.appendChild(o),i.appendChild(document.createTextNode(t.label||t.language)),t.badge&&i.appendChild(y(t.language.toUpperCase())),n.appendChild(i),e.appendChild(n)}),T("captions",e)}}function N(e,t){a.is.array(e)?de.speed.options=e.filter(function(e){return a.inArray(de.config.speed.options,e)}):de.speed.options=de.config.speed.options,a.is.number(t)&&a.inArray(de.speed.options,t)&&(de.speed.selected=t);var n=!a.is.empty(de.speed.options);if(C("speed",n),n){var i=de.elements.settings.panes.speed.querySelector("ul");de.elements.settings.tabs.speed.removeAttribute("hidden"),de.elements.settings.panes.speed.removeAttribute("hidden"),a.emptyElement(i),de.speed.options.forEach(function(e){var t=a.createElement("li"),n=a.createElement("label",{class:de.config.classNames.control}),o=a.createElement("input",a.extend(a.getAttributesFromSelector(de.config.selectors.inputs.speed),{type:"radio",name:"plyr-speed",value:e}));n.appendChild(o),n.insertAdjacentHTML("beforeend",A("speed",e)),t.appendChild(n),i.appendChild(t)}),T("speed",i)}}function x(){if(de.supported.full&&("audio"!==de.type||de.config.fullscreen.allowAudio)&&de.config.fullscreen.enabled){var e=s.fullscreen;e||de.config.fullscreen.fallback&&!a.inFrame()?(me((e?"Native":"Fallback")+" fullscreen enabled"),a.toggleClass(de.elements.container,de.config.classNames.fullscreen.enabled,!0)):me("Fullscreen not supported and fallback disabled"),de.elements.buttons&&de.elements.buttons.fullscreen&&a.toggleState(de.elements.buttons.fullscreen,!1),l()}}function P(){function e(){de.captions.currentTrack=null,[].forEach.call(de.captions.tracks,function(e){e.language===de.captions.language.toLowerCase()&&(de.captions.currentTrack=e)})}if(a.is.empty(de.storage.language)?a.is.empty(de.captions.language)&&(de.captions.language=de.config.captions.language.toLowerCase()):de.captions.language=de.storage.language,a.is.boolean(de.captions.enabled)||(a.is.empty(de.storage.language)?de.captions.enabled=de.config.captions.active:de.captions.enabled=de.storage.captions),!a.inArray(["video","vimeo"],de.type)||"video"===de.type&&!s.textTracks)return de.captions.tracks=null,void S();if(a.is.htmlElement(de.elements.captions)||(de.elements.captions=a.createElement("div",a.getAttributesFromSelector(de.config.selectors.captions)),a.insertAfter(de.elements.captions,de.elements.wrapper)),"video"===de.type&&(de.captions.tracks=de.media.textTracks),a.toggleClass(de.elements.container,de.config.classNames.captions.enabled,!a.is.empty(de.captions.tracks)),!a.is.empty(de.captions.tracks)){if(_(),e(),!a.is.track(de.captions.currentTrack)){var t=de.config.captions.language;de.captions.language=t,e(),a.is.track(de.captions.currentTrack)||de.toggleCaptions(!1),T("captions")}if("video"===de.type){[].forEach.call(de.captions.tracks,function(e){a.off(e,"cuechange",I),e.mode="hidden"});var n=a.inArray(["captions","subtitles"],de.captions.currentTrack.kind);a.is.track(de.captions.currentTrack)&&n&&(a.on(de.captions.currentTrack,"cuechange",I),de.captions.currentTrack.activeCues&&de.captions.currentTrack.activeCues.length>0&&I(de.captions.currentTrack))}else"vimeo"===de.type&&de.captions.active&&de.embed.enableTextTrack(de.captions.language);S()}}function F(){return!s.textTracks||a.is.empty(de.captions.tracks)?de.config.i18n.none:de.captions.enabled?de.captions.currentTrack.label:de.config.i18n.disabled}function I(e){a.is.event(e)&&(e=e.target);var t=e.activeCues[0];a.is.cue(t)?q(t.getCueAsHTML()):q(),r(de.media,"cuechange")}function q(e){if(a.is.htmlElement(de.elements.captions)){var t=a.createElement("span");a.emptyElement(de.elements.captions),a.is.undefined(e)&&(e=""),a.is.string(e)?t.textContent=e.trim():t.appendChild(e),de.elements.captions.appendChild(t)}else ge("No captions element to render to")}function _(){if(de.elements.buttons.captions){var e=de.storage.captions;a.is.boolean(e)?de.captions.active=e:e=de.captions.active,e&&(a.toggleClass(de.elements.container,de.config.classNames.captions.active,!0),a.toggleState(de.elements.buttons.captions,!0))}}function L(){if(de.config.loadSprite){var e=m();e.absolute?(me("AJAX loading absolute SVG sprite"+(de.browser.isIE?" (due to IE)":"")),a.loadSprite(e.url,"sprite-plyr")):me("Sprite will be used as external resource directly")}de.id=Math.floor(1e4*Math.random());var t=null;t=a.is.string(de.config.controls)?de.config.controls:a.is.function(de.config.controls)?de.config.controls({id:de.id,seektime:de.config.seekTime}):k({id:de.id,seektime:de.config.seekTime,speed:"-",quality:"-",captions:F(),loop:"None"});var n;if(a.is.string(de.config.selectors.controls.container)&&(n=document.querySelector(de.config.selectors.controls.container)),a.is.htmlElement(n)||(n=de.elements.container),a.is.htmlElement(t)?n.appendChild(t):n.insertAdjacentHTML("beforeend",t),a.is.htmlElement(de.elements.controls)&&M(),de.config.tooltips.controls)for(var i=c([de.config.selectors.controls.wrapper," ",de.config.selectors.labels," .",de.config.classNames.hidden].join("")),o=i.length-1;o>=0;o--){var s=i[o];a.toggleClass(s,de.config.classNames.hidden,!1),a.toggleClass(s,de.config.classNames.tooltip,!0)}}function M(){try{return de.elements.controls=u(de.config.selectors.controls.wrapper),de.elements.buttons={play:c(de.config.selectors.buttons.play),pause:u(de.config.selectors.buttons.pause),restart:u(de.config.selectors.buttons.restart),rewind:u(de.config.selectors.buttons.rewind),forward:u(de.config.selectors.buttons.forward),mute:u(de.config.selectors.buttons.mute),pip:u(de.config.selectors.buttons.pip),airplay:u(de.config.selectors.buttons.airplay),settings:u(de.config.selectors.buttons.settings),captions:u(de.config.selectors.buttons.captions),fullscreen:u(de.config.selectors.buttons.fullscreen)},de.elements.progress=u(de.config.selectors.progress),de.elements.inputs={seek:u(de.config.selectors.inputs.seek),volume:u(de.config.selectors.inputs.volume)},de.elements.display={buffer:u(de.config.selectors.display.buffer),played:u(de.config.selectors.display.played),volume:u(de.config.selectors.display.volume),duration:u(de.config.selectors.display.duration),currentTime:u(de.config.selectors.display.currentTime)},a.is.htmlElement(de.elements.progress)&&(de.elements.display.seekTooltip=de.elements.progress.querySelector("."+de.config.classNames.tooltip)),!0}catch(e){return ge("It looks like there is a problem with your custom controls HTML",e),O(!0),!1}}function V(){a.toggleClass(de.elements.container,de.config.selectors.container.replace(".",""),de.supported.full)}function O(e){e&&a.inArray(i.html5,de.type)?de.media.setAttribute("controls",""):de.media.removeAttribute("controls")}function j(e){var t=de.config.i18n.play;if(a.is.string(de.config.title)&&!a.is.empty(de.config.title)&&(t+=", "+de.config.title,de.elements.container.setAttribute("aria-label",de.config.title)),de.supported.full&&(a.is.htmlElement(de.elements.buttons.play)&&de.elements.buttons.play.setAttribute("aria-label",t),a.is.htmlElement(de.elements.buttons.playLarge)&&de.elements.buttons.playLarge.setAttribute("aria-label",t)),a.is.htmlElement(e)){var n=a.is.string(de.config.title)&&!a.is.empty(de.config.title)?de.config.title:"video";e.setAttribute("title",de.config.i18n.frameTitle.replace("{title}",n))}}function D(){var e=null;de.storage={},s.storage&&de.config.storage.enabled&&(window.localStorage.removeItem("plyr-volume"),(e=window.localStorage.getItem(de.config.storage.key))&&(/^\d+(\.\d+)?$/.test(e)?R({volume:parseFloat(e)}):de.storage=JSON.parse(e)))}function R(e){s.storage&&de.config.storage.enabled&&(a.extend(de.storage,e),window.localStorage.setItem(de.config.storage.key,JSON.stringify(de.storage)))}function H(){de.media?(de.supported.full&&(a.toggleClass(de.elements.container,de.config.classNames.type.replace("{0}",de.type),!0),a.inArray(i.embed,de.type)&&a.toggleClass(de.elements.container,de.config.classNames.type.replace("{0}","video"),!0),a.toggleClass(de.elements.container,de.config.classNames.pip.enabled,s.pip&&"video"===de.type),a.toggleClass(de.elements.container,de.config.classNames.airplay.enabled,s.airplay&&a.inArray(i.html5,de.type)),a.toggleClass(de.elements.container,de.config.classNames.stopped,de.config.autoplay),a.toggleClass(de.elements.container,de.config.classNames.isIos,de.browser.isIos),a.toggleClass(de.elements.container,de.config.classNames.isTouch,s.touch)),a.inArray(["video","youtube","vimeo"],de.type)&&(de.elements.wrapper=a.createElement("div",{class:de.config.classNames.video}),a.wrap(de.media,de.elements.wrapper)),a.inArray(i.embed,de.type)&&B()):ge("No media element found!")}function B(){var e,t=de.type+"-"+Math.floor(1e4*Math.random());switch(de.type){case"youtube":e=a.parseYouTubeId(de.embedId);break;default:e=de.embedId}for(var n=c('[id^="'+de.type+'-"]'),i=n.length-1;i>=0;i--)a.removeElement(n[i]);if(a.toggleClass(de.elements.wrapper,de.config.classNames.embed,!0),"youtube"===de.type)de.media.setAttribute("id",t),a.is.object(window.YT)?W(e):(a.injectScript(de.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){W(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===de.type)if(de.media.setAttribute("id",t),a.is.object(window.Vimeo))Q(e);else{a.injectScript(de.config.urls.vimeo.api);var o=window.setInterval(function(){a.is.object(window.Vimeo)&&(window.clearInterval(o),Q(e))},50)}else if("soundcloud"===de.type){var s=a.createElement("iframe");s.loaded=!1,a.on(s,"load",function(){s.loaded=!0}),a.setAttributes(s,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+e,id:t}),de.media.appendChild(s),window.SC||a.injectScript(de.config.urls.soundcloud.api);var r=window.setInterval(function(){window.SC&&s.loaded&&(window.clearInterval(r),U.call(s))},50)}}function Y(){de.supported.full&&(ce(),ue()),j(u("iframe"))}function W(e){de.embed=new window.YT.Player(de.media.id,{videoId:e,playerVars:{autoplay:de.config.autoplay?1:0,controls:de.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,origin:window.location.hostname,widget_referrer:window.location.href},events:{onError:function(e){r(de.elements.container,"error",!0,{code:e.data,embed:e.target})},onPlaybackQualityChange:function(e){var t=e.target;de.media.quality=t.getPlaybackQuality(),r(de.media,"qualitychange")},onPlaybackRateChange:function(e){var t=e.target;de.media.playbackRate=t.getPlaybackRate(),r(de.media,"ratechange")},onReady:function(e){var t=e.target;de.media.play=function(){t.playVideo(),de.media.paused=!1},de.media.pause=function(){t.pauseVideo(),de.media.paused=!0},de.media.stop=function(){t.stopVideo(),de.media.paused=!0},de.media.duration=t.getDuration(),de.media.paused=!0,de.media.currentTime=0,de.media.muted=t.isMuted(),N(t.getAvailablePlaybackRates(),t.getPlaybackRate()),de.config.title=t.getVideoData().title,de.supported.full&&de.media.setAttribute("tabindex",-1),Y(),r(de.media,"timeupdate"),r(de.media,"durationchange"),window.clearInterval(pe.buffering),pe.buffering=window.setInterval(function(){de.media.buffered=t.getVideoLoadedFraction(),(null===de.media.lastBuffered||de.media.lastBuffered<de.media.buffered)&&r(de.media,"progress"),de.media.lastBuffered=de.media.buffered,1===de.media.buffered&&(window.clearInterval(pe.buffering),r(de.media,"canplaythrough"))},200)},onStateChange:function(e){var t=e.target;switch(window.clearInterval(pe.playing),e.data){case 0:if(de.config.loop.active){t.stopVideo(),t.playVideo();break}de.media.paused=!0,r(de.media,"ended");break;case 1:de.media.paused=!1,de.media.seeking&&r(de.media,"seeked"),de.media.seeking=!1,r(de.media,"play"),r(de.media,"playing"),pe.playing=window.setInterval(function(){de.media.currentTime=t.getCurrentTime(),r(de.media,"timeupdate")},100),de.media.duration!==t.getDuration()&&(de.media.duration=t.getDuration(),r(de.media,"durationchange")),E(t.getAvailableQualityLevels(),t.getPlaybackQuality());break;case 2:de.media.paused=!0,r(de.media,"pause")}r(de.elements.container,"statechange",!1,{code:e.data})}}})}function Q(e){de.embed=new window.Vimeo.Player(de.media,{id:e,loop:de.config.loop.active,autoplay:de.config.autoplay,byline:!1,portrait:!1,title:!1}),de.media.play=function(){de.embed.play(),de.media.paused=!1},de.media.pause=function(){de.embed.pause(),de.media.paused=!0},de.media.stop=function(){de.embed.stop(),de.media.paused=!0},de.media.paused=!0,de.media.currentTime=0,Y(),de.embed.getCurrentTime().then(function(e){de.media.currentTime=e,r(de.media,"timeupdate")}),de.embed.getDuration().then(function(e){de.media.duration=e,r(de.media,"durationchange")}),de.embed.getTextTracks().then(function(e){de.captions.tracks=e,P()}),de.embed.on("cuechange",function(e){var t=null;e.cues.length&&(t=a.stripHTML(e.cues[0].text)),q(t)}),de.embed.on("loaded",function(){a.is.htmlElement(de.embed.element)&&de.supported.full&&de.embed.element.setAttribute("tabindex",-1)}),de.embed.on("play",function(){de.media.paused=!1,r(de.media,"play"),r(de.media,"playing")}),de.embed.on("pause",function(){de.media.paused=!0,r(de.media,"pause")}),de.embed.on("timeupdate",function(e){de.media.seeking=!1,de.media.currentTime=e.seconds,r(de.media,"timeupdate")}),de.embed.on("progress",function(e){de.media.buffered=e.percent,r(de.media,"progress"),1===parseInt(e.percent)&&r(de.media,"canplaythrough")}),de.embed.on("seeked",function(){de.media.seeking=!1,r(de.media,"seeked"),r(de.media,"play")}),de.embed.on("ended",function(){de.media.paused=!0,r(de.media,"ended")})}function U(){de.embed=window.SC.Widget(this),de.embed.bind(window.SC.Widget.Events.READY,function(){de.media.play=function(){de.embed.play(),de.media.paused=!1},de.media.pause=function(){de.embed.pause(),de.media.paused=!0},de.media.stop=function(){de.embed.seekTo(0),de.embed.pause(),de.media.paused=!0},de.media.paused=!0,de.media.currentTime=0,de.embed.getDuration(function(e){de.media.duration=e/1e3,Y()}),de.embed.getPosition(function(e){de.media.currentTime=e,r(de.media,"timeupdate")}),de.embed.bind(window.SC.Widget.Events.PLAY,function(){de.media.paused=!1,r(de.media,"play"),r(de.media,"playing")}),de.embed.bind(window.SC.Widget.Events.PAUSE,function(){de.media.paused=!0,r(de.media,"pause")}),de.embed.bind(window.SC.Widget.Events.PLAY_PROGRESS,function(e){de.media.seeking=!1,de.media.currentTime=e.currentPosition/1e3,r(de.media,"timeupdate")}),de.embed.bind(window.SC.Widget.Events.LOAD_PROGRESS,function(e){de.media.buffered=e.loadProgress,r(de.media,"progress"),1===parseInt(e.loadProgress)&&r(de.media,"canplaythrough")}),de.embed.bind(window.SC.Widget.Events.FINISH,function(){de.media.paused=!0,r(de.media,"ended")})})}function z(){a.toggleClass(de.elements.container,de.config.classNames.playing,!de.media.paused),a.toggleClass(de.elements.container,de.config.classNames.stopped,de.media.paused),de.toggleControls(de.media.paused)}function J(e){var t=de.elements.settings.form,n=de.elements.buttons.settings,i=a.is.boolean(e)?e:"true"===t.getAttribute("aria-hidden");if(a.is.event(e)){var o=t.contains(e.target),s=e.target===de.elements.buttons.settings;if(o||!o&&!s&&i)return;s&&e.stopPropagation()}t.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1)}function X(e){var t,n,i=e.cloneNode(!0);return i.style.position="absolute",i.style.opacity=0,i.setAttribute("aria-hidden",!1),[].forEach.call(i.querySelectorAll("input[name]"),function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(i),t=i.scrollWidth,n=i.scrollHeight,a.removeElement(i),{width:t,height:n}}function $(e){var t=de.elements.settings.menu,n=e.target,i="false"===n.getAttribute("aria-expanded"),o=document.getElementById(n.getAttribute("aria-controls"));if(a.is.htmlElement(o)&&"tabpanel"===o.getAttribute("role")){var r=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),l=r.parentNode;if([].forEach.call(t.querySelectorAll('[aria-controls="'+r.getAttribute("id")+'"]'),function(e){e.setAttribute("aria-expanded",!1)}),s.transitions&&!s.reducedMotion){l.style.width=r.scrollWidth+"px",l.style.height=r.scrollHeight+"px";var c=X(o),u=function(e){e.target===l&&a.inArray(["width","height"],e.propertyName)&&(l.style.width="",l.style.height="",a.off(l,a.transitionEnd,u))};a.on(l,a.transitionEnd,u),l.style.width=c.width+"px",l.style.height=c.height+"px"}r.setAttribute("aria-hidden",!0),r.setAttribute("tabindex",-1),o.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),o.removeAttribute("tabindex")}}function G(){if(de.supported.full){var e=de.media.muted?0:de.media.volume;de.elements.inputs.volume&&(de.elements.inputs.volume.value=e),de.elements.display.volume&&(de.elements.display.volume.value=e)}R({volume:de.media.volume}),a.toggleClass(de.elements.container,de.config.classNames.muted,de.media.muted),de.supported.full&&de.elements.buttons.mute&&a.toggleState(de.elements.buttons.mute,de.media.muted)}function K(e){de.loading="waiting"===e.type,clearTimeout(pe.loading),pe.loading=setTimeout(function(){a.toggleClass(de.elements.container,de.config.classNames.loading,de.loading),de.toggleControls(de.loading)},de.loading?250:0)}function Z(e){if(de.supported.full){var t=de.elements.display.played,n=0,i=de.getDuration();if(e)switch(e.type){case"timeupdate":case"seeking":n=a.getPercentage(de.media.currentTime,i),"timeupdate"===e.type&&de.elements.inputs.seek&&(de.elements.inputs.seek.value=n);break;case"playing":case"progress":t=de.elements.display.buffer,n=function(){var e=de.media.buffered;return e&&e.length?a.getPercentage(e.end(0),i):a.is.number(e)?100*e:0}()}ee(t,n)}}function ee(e,t){if(de.supported.full){if(a.is.undefined(t)&&(t=0),a.is.undefined(e)){if(!a.is.htmlElement(de.elements.display.buffer))return;e=de.elements.display.buffer}if(a.is.htmlElement(e)){e.value=t;var n=e.getElementsByTagName("span")[0];a.is.htmlElement(n)&&(n.childNodes[0].nodeValue=t)}}}function te(e,t){if(t){isNaN(e)&&(e=0);var n=parseInt(e%60),i=parseInt(e/60%60),a=parseInt(e/60/60%60),o=de.getDuration(),s=parseInt(o/60/60%60)>0;n=("0"+n).slice(-2),i=("0"+i).slice(-2);var r=(s?a+":":"")+i+":"+n;return t.textContent=r,r}}function ne(){if(de.supported.full){var e=de.getDuration()||0;!de.elements.display.duration&&de.config.displayDuration&&de.media.paused&&te(e,de.elements.display.currentTime),de.elements.display.duration&&te(e,de.elements.display.duration),oe()}}function ie(e){te(de.media.currentTime,de.elements.display.currentTime),e&&"timeupdate"===e.type&&de.media.seeking||Z(e)}function ae(e){a.is.number(e)||(e=0);var t=de.getDuration(),n=a.getPercentage(e,t);de.elements.progress&&de.elements.display.played&&(de.elements.display.played.value=n),de.elements.buttons&&de.elements.inputs.seek&&(de.elements.inputs.seek.value=n)}function oe(e){var t=de.getDuration();if(de.config.tooltips.seek&&a.is.htmlElement(de.elements.inputs.seek)&&a.is.htmlElement(de.elements.display.seekTooltip)&&0!==t){var n=de.elements.inputs.seek.getBoundingClientRect(),i=0,o=de.config.classNames.tooltip+"--visible";if(a.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!a.hasClass(de.elements.display.seekTooltip,o))return;i=de.elements.display.seekTooltip.style.left.replace("%","")}i<0?i=0:i>100&&(i=100),te(t/100*i,de.elements.display.seekTooltip),de.elements.display.seekTooltip.style.left=i+"%",a.is.event(e)&&a.inArray(["mouseenter","mouseleave"],e.type)&&a.toggleClass(de.elements.display.seekTooltip,o,"mouseenter"===e.type)}}function se(){function e(){var e=de.togglePlay(),t=de.elements.buttons[e?"play":"pause"],n=de.elements.buttons[e?"pause":"play"];if(n){var i=a.hasClass(t,de.config.classNames.tabFocus);setTimeout(function(){a.is.htmlElement(n)&&n.focus(),i&&(a.toggleClass(t,de.config.classNames.tabFocus,!1),a.toggleClass(n,de.config.classNames.tabFocus,!0))},100)}}function t(e){return e.keyCode?e.keyCode:e.which}function n(e){a.toggleClass(c("."+de.config.classNames.tabFocus),de.config.classNames.tabFocus,!1),de.elements.container.contains(e)&&a.toggleClass(e,de.config.classNames.tabFocus,!0)}function i(n){var i=t(n),o="keydown"===n.type,r=o&&i===l;if(a.is.number(i))if(o){var c=[48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79],u=[38,40];if(a.inArray(u,i)){var d=a.getFocusElement();if(a.is.htmlElement(d)&&"radio"===a.getFocusElement().type)return}switch(a.inArray(c,i)&&(n.preventDefault(),n.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||function(){var e=de.media.duration;a.is.number(e)&&de.seek(e/10*(i-48))}();break;case 32:case 75:r||e();break;case 38:de.increaseVolume();break;case 40:de.decreaseVolume();break;case 77:r||de.toggleMute();break;case 39:de.forward();break;case 37:de.rewind();break;case 70:de.toggleFullscreen();break;case 67:r||de.toggleCaptions();break;case 73:de.setLoop("start");break;case 76:de.setLoop();break;case 79:de.setLoop("end")}!s.fullscreen&&de.fullscreen.active&&27===i&&de.toggleFullscreen(),l=i}else l=null}var r=de.browser.isIE?"change":"input";if(de.config.keyboard.focused){var l=null;de.config.keyboard.global&&a.on(window,"keydown keyup",function(e){var n=t(e),o=a.getFocusElement(),s=[48,49,50,51,52,53,54,56,57,75,77,70,67,73,76,79];!a.inArray(s,n)||a.is.htmlElement(o)&&a.matches(o,de.config.selectors.editable)||i(e)},!1),a.on(de.elements.container,"keydown keyup",i,!1)}a.on(window,"keyup",function(e){var i=t(e),o=a.getFocusElement();9===i&&n(o)}),a.on(document.body,"click",function(){a.toggleClass(u("."+de.config.classNames.tabFocus),de.config.classNames.tabFocus,!1)});for(var d in de.elements.buttons)a.on(de.elements.buttons[d],"blur",function(e){a.toggleClass(e.target,"tab-focus",!1)});var p=function(e,t,n){a.is.function(t)&&t.call(this,e),a.is.function(n)&&n.call(this,e)};a.proxy(de.elements.buttons.play,"click",de.config.listeners.play,e),a.proxy(de.elements.buttons.playLarge,"click",de.config.listeners.play,e),a.proxy(de.elements.buttons.pause,"click",de.config.listeners.pause,e),a.proxy(de.elements.buttons.restart,"click",de.config.listeners.restart,function(){de.restart()}),a.proxy(de.elements.buttons.rewind,"click",de.config.listeners.rewind,function(){de.rewind()}),a.proxy(de.elements.buttons.forward,"click",de.config.listeners.forward,function(){de.forward()}),a.proxy(de.elements.buttons.mute,"click",de.config.listeners.mute,function(){de.toggleMute()}),a.proxy(de.elements.buttons.captions,"click",de.config.listeners.captions,function(){de.toggleCaptions()}),a.proxy(de.elements.buttons.fullscreen,"click",de.config.listeners.fullscreen,function(e){de.toggleFullscreen(e)}),a.proxy(de.elements.buttons.pip,"click",de.config.listeners.pip,function(){de.togglePictureInPicture()}),a.proxy(de.elements.buttons.airplay,"click",de.config.listeners.airplay,function(){de.airPlay()}),a.on(de.elements.buttons.settings,"click",J),a.on(document.documentElement,"click",J),a.on(de.elements.settings.form,"click",$),a.on(de.elements.settings.form,"click",function(e){a.matches(e.target,de.config.selectors.inputs.language)?p.call(this,e,de.config.listeners.language,function(){de.toggleCaptions(!0),de.setLanguage(e.target.value.toLowerCase())}):a.matches(e.target,de.config.selectors.inputs.quality)?p.call(this,e,de.config.listeners.quality,function(){de.setQuality(e.target.value)}):a.matches(e.target,de.config.selectors.inputs.speed)?p.call(this,e,de.config.listeners.speed,function(){de.setSpeed(parseFloat(e.target.value))}):a.matches(e.target,de.config.selectors.buttons.loop)&&p.call(this,e,de.config.listeners.loop,function(){ge("Set loop")})}),a.proxy(de.elements.inputs.seek,r,de.config.listeners.seek,function(e){var t=de.getDuration();de.seek(e.target.value/e.target.max*t)}),a.proxy(de.elements.inputs.volume,r,de.config.listeners.volume,function(){de.setVolume(event.target.value)}),a.on(de.elements.progress,"mouseenter mouseleave mousemove",oe),de.config.hideControls&&(a.on(de.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen",function(e){de.toggleControls(e)}),a.on(de.elements.controls,"mouseenter mouseleave",function(e){de.elements.controls.hover="mouseenter"===e.type}),a.on(de.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){de.elements.controls.pressed=a.inArray(["mousedown","touchstart"],e.type)}),a.on(de.elements.controls,"focus blur",function(e){de.toggleControls(e)},!0,!0)),a.proxy(de.elements.inputs.volume,"wheel",de.config.listeners.volume,function(e){var t=e.webkitDirectionInvertedFromDevice,n=0;(e.deltaY<0||e.deltaX>0)&&(t?(de.decreaseVolume(.02),n=-1):(de.increaseVolume(.02),n=1)),(e.deltaY>0||e.deltaX<0)&&(t?(de.increaseVolume(.02),n=1):(de.decreaseVolume(.02),n=-1)),(1===n&&de.media.volume<1||-1===n&&de.media.volume>0)&&e.preventDefault()},!1),s.fullscreen&&a.on(document,o.eventType,function(e){de.toggleFullscreen(e)})}function re(){if(a.on(de.media,"timeupdate seeking",ie),a.on(de.media,"durationchange loadedmetadata",ne),a.on(de.media,"ended",function(){"video"===de.type&&de.config.showPosterOnEnd&&("video"===de.type&&q(),de.restart(),de.media.load())}),a.on(de.media,"progress playing",Z),a.on(de.media,"volumechange",G),a.on(de.media,"play pause ended",z),a.on(de.media,"waiting canplay seeked",K),de.config.clickToPlay&&"audio"!==de.type){var e=u("."+de.config.classNames.video);if(!e)return;e.style.cursor="pointer",a.on(e,"click",function(){de.config.hideControls&&s.touch&&!de.media.paused||(de.media.paused?de.play():de.media.ended?(de.restart(),de.play()):de.pause())})}de.config.disableContextMenu&&a.on(de.media,"contextmenu",function(e){e.preventDefault()},!1),a.on(de.media,"ratechange",function(){de.speed.selected=de.media.playbackRate,T("speed"),R({speed:de.speed.selected})}),a.on(de.media,"qualitychange",function(){de.quality.selected=de.media.quality,T("quality"),R({quality:de.quality.selected})}),a.on(de.media,"captionchange",function(){R({language:de.captions.language})}),a.on(de.media,"captionsenabled captionsdisabled",function(){T("captions"),R({captions:de.captions.enabled})}),a.on(de.media,de.config.events.concat(["keyup","keydown"]).join(" "),function(e){r(de.elements.container,e.type,!0)})}function le(){if(a.inArray(i.html5,de.type)){for(var e=de.media.querySelectorAll("source"),t=0;t<e.length;t++)a.removeElement(e[t]);de.media.setAttribute("src","https://cdn.selz.com/plyr/blank.mp4"),de.media.load(),me("Cancelled network requests")}}function ce(){if(!de.supported.full)return ge("Basic support only",de.type),d("controls"),d("buttons.play"),void O(!0);a.is.htmlElement(de.elements.controls)||(L(),se()),a.is.htmlElement(de.elements.controls)&&(re(),O(),x(),P(),de.setVolume(),G(),de.setSpeed(),de.setLoop(),ie(),z())}function ue(){de.ready=!0,window.setTimeout(function(){r(de.elements.container,"ready",!0)},0),de.config.autoplay&&de.play()}var de=this,pe={};de.ready=!1,de.media=e,a.is.string(de.media)&&(de.media=document.querySelectorAll(de.media)),(window.jQuery&&de.media instanceof jQuery||a.is.nodeList(de.media)||a.is.array(de.media))&&(de.media=de.media[0]),de.config=a.extend({},n,t,function(){try{return JSON.parse(de.media.getAttribute("data-plyr"))}catch(e){}}()),de.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},de.captions={enabled:null,tracks:null,currentTrack:null},de.fullscreen={active:!1},de.speed={selected:null,options:[]},de.quality={selected:null,options:[]},de.loop={indicator:{start:0,end:0}};var me=function(){},ge=function(){},fe=function(){};de.config.debug&&"console"in window&&(me=console.log,ge=console.warn,fe=console.error,me("Debugging enabled")),me("Config",de.config),me("Support",s),de.core={getElement:u,getElements:c,trigger:r,setCaption:q,setupCaptions:P,toggleNativeControls:O,updateTimeDisplay:te,updateSeekDisplay:ae,updateSource:function(e){a.is.object(e)&&"sources"in e&&e.sources.length?(ae(),ee(),le(),de.destroy(function(){if(d(de.media),d("captions"),d("wrapper"),de.elements.container&&de.elements.container.removeAttribute("class"),"type"in e&&(de.type=e.type,"video"===de.type)){var t=e.sources[0];"type"in t&&a.inArray(i.embed,t.type)&&(de.type=t.type)}switch(de.supported=a.checkSupport(de.type,de.config.inline),de.type){case"video":de.media=a.createElement("video");break;case"audio":de.media=a.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":de.media=a.createElement("div"),de.embedId=e.sources[0].src}de.elements.container.appendChild(de.media),a.is.boolean(e.autoplay)&&(de.config.autoplay=e.autoplay),a.inArray(i.html5,de.type)&&(de.config.crossorigin&&de.media.setAttribute("crossorigin",""),de.config.autoplay&&de.media.setAttribute("autoplay",""),"poster"in e&&de.media.setAttribute("poster",e.poster),de.config.loop.active&&de.media.setAttribute("loop",""),de.config.muted&&de.media.setAttribute("muted",""),de.config.inline&&de.media.setAttribute("playsinline","")),a.toggleClass(de.elements.container,de.config.classNames.fullscreen.active,de.fullscreen.active),a.toggleClass(de.elements.container,de.config.classNames.captions.active,de.captions.enabled),V(),a.inArray(i.html5,de.type)&&p("source",e.sources),H(),a.inArray(i.html5,de.type)&&("tracks"in e&&p("track",e.tracks),de.media.load()),(a.inArray(i.html5,de.type)||a.inArray(i.embed,de.type)&&!de.supported.full)&&(ce(),ue()),de.config.title=e.title,j()},!1)):ge("Invalid source format")},toggleMenu:J,timers:pe,support:s,log:me,warn:ge,error:fe},function(e){if(null!==e&&!a.is.undefined(e)&&a.is.htmlElement(e)){if(e.plyr)return ge("Target already setup"),void(de=e.plyr);if(de.config.enabled)if(a.checkSupport().basic){de.elements.original=e.cloneNode(!0);var t=e.tagName.toLowerCase();switch(t){case"div":if(de.type=e.getAttribute("data-type"),de.embedId=e.getAttribute("data-video-id"),a.is.empty(de.type))return void fe("Setup failed: embed type missing");if(a.is.empty(de.embedId))return void fe("Setup failed: video id missing");e.removeAttribute("data-type"),e.removeAttribute("data-video-id");break;case"iframe":break;case"video":case"audio":de.type=t,null!==e.getAttribute("crossorigin")&&(de.config.crossorigin=!0),null!==e.getAttribute("autoplay")&&(de.config.autoplay=!0),null!==e.getAttribute("playsinline")&&(de.config.inline=!0),null!==e.getAttribute("muted")&&(de.config.muted=!0),null!==e.getAttribute("loop")&&(de.config.loop.active=!0);break;default:return void fe("Setup failed: unsupported type")}de.browser=a.getBrowser(),D(),de.supported=a.checkSupport(de.type,de.config.inline),de.supported.basic?(e.plyr=de,de.elements.container=a.wrap(e,a.createElement("div")),de.elements.container.setAttribute("tabindex",0),V(),me(de.browser.name+" "+de.browser.version),H(),de.config.debug&&a.on(de.elements.container,de.config.events.join(" "),function(e){me("event: "+e.type)}),(a.inArray(i.html5,de.type)||a.inArray(i.embed,de.type)&&!de.supported.full)&&(ce(),ue(),j())):fe("Setup failed: no support")}else fe("Setup failed: no support");else fe("Setup failed: disabled by config")}else fe("Setup failed: no suitable element passed")}(de.media)}var t={x:0,y:0},n={enabled:!0,title:"",debug:!1,autoplay:!1,seekTime:10,volume:1,muted:!1,displayDuration:!0,clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/2.0.10/plyr.svg",duration:null,quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1,start:null,end:null},speed:{default:1,options:[.25,.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,allowAudio:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed","loop"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",forward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",toggleMute:"Toggle Mute",toggleCaptions:"Toggle Captions",toggleFullscreen:"Toggle Fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",none:"None",disabled:"Disabled"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},soundcloud:{api:"https://w.soundcloud.com/player/api.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","captionchange","controlshidden","controlsshown","statechange","qualitychange","qualityrequested"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',forward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",control:"plyr__control",type:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",muted:"plyr--muted",loading:"plyr--loading",hover:"plyr--hover",tooltip:"plyr__tooltip",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",menu:{value:"plyr__menu__value",badge:"plyr__badge"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",active:"plyr--fullscreen-active"},pip:{enabled:"plyr--pip-enabled",active:"plyr--pip-active"},airplay:{enabled:"plyr--airplay-enabled",active:"plyr--airplay-active"},tabFocus:"tab-focus"}},i={embed:["youtube","vimeo","soundcloud"],html5:["video","audio"]},a={is:{object:function(e){return null!==e&&"object"==typeof e&&e.constructor===Object},array:function(e){return null!==e&&Array.isArray(e)},number:function(e){return null!==e&&("number"==typeof e&&!isNaN(e-0)||"object"==typeof e&&e.constructor===Number)},string:function(e){return null!==e&&("string"==typeof e||"object"==typeof e&&e.constructor===String)},boolean:function(e){return null!==e&&"boolean"==typeof e},nodeList:function(e){return null!==e&&e instanceof NodeList},htmlElement:function(e){return null!==e&&e instanceof HTMLElement},function:function(e){return null!==e&&"function"==typeof e},event:function(e){return null!==e&&e instanceof Event},cue:function(e){return null!==e&&(e instanceof window.TextTrackCue||e instanceof window.VTTCue)},track:function(e){return null!==e&&(e instanceof window.TextTrack||"string"==typeof e.kind)},undefined:function(e){return null!==e&&void 0===e},empty:function(e){return null===e||this.undefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&0===e.length||this.object(e)&&0===Object.keys(e).length}},getBrowser:function(){var e,t,n,i=navigator.userAgent,a=navigator.appName,o=""+parseFloat(navigator.appVersion),s=parseInt(navigator.appVersion,10),r=!1,l=!1,c=!1,u=!1;return-1!==navigator.appVersion.indexOf("Windows NT")&&-1!==navigator.appVersion.indexOf("rv:11")?(r=!0,a="IE",o="11"):-1!==(t=i.indexOf("MSIE"))?(r=!0,a="IE",o=i.substring(t+5)):-1!==(t=i.indexOf("Chrome"))?(c=!0,a="Chrome",o=i.substring(t+7)):-1!==(t=i.indexOf("Safari"))?(u=!0,a="Safari",o=i.substring(t+7),-1!==(t=i.indexOf("Version"))&&(o=i.substring(t+8))):-1!==(t=i.indexOf("Firefox"))?(l=!0,a="Firefox",o=i.substring(t+8)):(e=i.lastIndexOf(" ")+1)<(t=i.lastIndexOf("/"))&&(a=i.substring(e,t),o=i.substring(t+1),a.toLowerCase()===a.toUpperCase()&&(a=navigator.appName)),-1!==(n=o.indexOf(";"))&&(o=o.substring(0,n)),-1!==(n=o.indexOf(" "))&&(o=o.substring(0,n)),s=parseInt(""+o,10),isNaN(s)&&(o=""+parseFloat(navigator.appVersion),s=parseInt(navigator.appVersion,10)),{name:a,version:s,isIE:r,isOldIE:r&&s<=9,isFirefox:l,isChrome:c,isSafari:u,isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},checkSupport:function(e,t){var n=!1,i=!1,o=a.getBrowser(),r=o.isIPhone&&t&&s.inline;switch(e){case"video":i=(n=s.video)&&!o.isOldIE&&(!o.isIPhone||r);break;case"audio":i=(n=s.audio)&&!o.isOldIE;break;case"youtube":i=(n=s.video)&&!o.isOldIE&&(!o.isIPhone||r);break;case"vimeo":case"soundcloud":n=!0,i=!o.isOldIE&&!o.isIos;break;default:i=(n=s.audio&&s.video)&&!o.isOldIE}return{basic:n,full:i}},injectScript:function(e){if(!document.querySelectorAll('script[src="'+e+'"]').length){var t=document.createElement("script");t.src=e;var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n)}},inFrame:function(){try{return window.self!==window.top}catch(e){return!0}},inArray:function(e,t){return a.is.array(e)&&-1!==e.indexOf(t)},replaceAll:function(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)},wrap:function(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var i=n>0?t.cloneNode(!0):t,a=e[n],o=a.parentNode,s=a.nextSibling;return i.appendChild(a),s?o.insertBefore(i,s):o.appendChild(i),i}},removeElement:function(e){a.is.htmlElement(e)&&a.is.htmlElement(e.parentNode)&&e.parentNode.removeChild(e)},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},createElement:function(e,t,n){var i=document.createElement(e);return a.is.object(t)&&a.setAttributes(i,t),a.is.string(n)&&(i.textContent=n),i},insertElement:function(e,t,n,i){t.appendChild(a.createElement(e,n,i))},emptyElement:function(e){for(var t=e.childNodes.length;t--;)e.removeChild(e.lastChild)},setAttributes:function(e,t){for(var n in t)e.setAttribute(n,t[n])},getAttributesFromSelector:function(e,t){if(!a.is.string(e)||a.is.empty(e))return{};var n={};return e.split(",").forEach(function(e){switch((e=e.trim()).charAt(0)){case".":var i=e.replace(".","");a.is.object(t)&&a.is.string(t.class)&&(t.class+=" "+i),n.class=i;break;case"#":n.id=e.replace("#","");break;case"[":var o=(e=e.replace(/[\[\]]/g,"")).split("="),s=o[0],r=o.length>1?o[1].replace(/[\"\']/g,""):"";n[s]=r}}),n},toggleClass:function(e,t,n){if(a.is.htmlElement(e)){var i=!1;if(e.classList)i=e.classList.contains(t),e.classList[n?"add":"remove"](t);else{i=a.inArray(e.className.split(" "),t);var o=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=o+(n?" "+t:"")}return n&&!i||!n&&i}return null},hasClass:function(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))},matches:function(e,t){var n=Element.prototype;return(n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(e){return-1!==[].indexOf.call(document.querySelectorAll(e),this)}).call(e,t)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},proxy:function(e,t,n,i,o,s){a.on(e,t,function(t){n&&n.apply(e,[t]),i.apply(e,[t])},o,s)},toggleListener:function(e,t,n,i,o,r){if(null!==e&&!a.is.undefined(e)){if(t=t.split(" "),a.is.boolean(r)||(r=!1),a.is.boolean(o)||(o=!0),e instanceof NodeList){var l=1===arguments.length?[arguments[0]]:Array.apply(null,arguments);return l.shift(),void[].forEach.call(e,function(e){e instanceof Node&&a.toggleListener.apply(null,[e].concat(l))})}var c=r;s.passiveListeners&&(c={passive:o,capture:r}),t.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,c)})}},on:function(e,t,n,i,o){a.toggleListener(e,t,n,!0,i,o)},off:function(e,t,n,i,o){a.toggleListener(e,t,n,!1,i,o)},dispatchEvent:function(e,t,n,i){if(e&&t){a.is.boolean(n)||(n=!1);var o;a.is.function(window.CustomEvent)?o=window.CustomEvent:(o=function(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}).prototype=window.Event.prototype;var s=new o(t,{bubbles:n,detail:i});e.dispatchEvent(s)}},toggleState:function(e,t){if(e)return t=a.is.boolean(t)?t:!e.getAttribute("aria-pressed"),e.setAttribute("aria-pressed",t),t},getPercentage:function(e,t){return 0===e||0===t||isNaN(e)||isNaN(t)?0:(e/t*100).toFixed(2)},extend:function(){var e=arguments;if(e.length){if(1===e.length)return e[0];var t=Array.prototype.shift.call(e);a.is.object(t)||(t={});for(var n=e.length,i=0;i<n;i++){var o=e[i];a.is.object(o)||(o={});for(var s in o)o[s]&&o[s].constructor&&o[s].constructor===Object?(t[s]=t[s]||{},a.extend(t[s],o[s])):t[s]=o[s]}return t}},parseYouTubeId:function(e){var t=/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;return e.match(t)?RegExp.$2:e},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},loadSprite:function(e,t){function n(e,t){e.innerHTML=t,document.body.insertBefore(e,document.body.childNodes[0])}if("string"==typeof e){var i="string"==typeof t;if(!i||!document.querySelectorAll("#"+t).length){var a=document.createElement("div");if(a.setAttribute("hidden",""),i&&a.setAttribute("id",t),s.storage){var o=window.localStorage.getItem("cache-"+t);if(null!==o){var r=JSON.parse(o);n(a,r.content)}}var l=new XMLHttpRequest;if(!("withCredentials"in l))return;l.open("GET",e,!0),l.onload=function(){s.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:l.responseText})),n(a,l.responseText)},l.send()}}},transitionEnd:function(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(void 0!==e.style[n])return t[n];return!1}()},o=function(){var e=function(){var e=!1;return a.is.function(document.cancelFullScreen)?e="":["webkit","o","moz","ms","khtml"].some(function(t){return a.is.function(document[t+"CancelFullScreen"])?(e=t,!0):a.is.function(document.msExitFullscreen)&&document.msFullscreenEnabled?(e="ms",!0):void 0}),e}();return{prefix:e,eventType:"ms"===e?"MSFullscreenChange":e+"fullscreenchange",isFullScreen:function(t){if(!s.fullscreen)return!1;switch(a.is.undefined(t)&&(t=document.body),e){case"":return document.fullscreenElement===t;case"moz":return document.mozFullScreenElement===t;default:return document[e+"FullscreenElement"]===t}},requestFullScreen:function(t){return!!s.fullscreen&&(a.is.htmlElement(t)||(t=document.body),e.length?t[e+("ms"===e?"RequestFullscreen":"RequestFullScreen")]():t.requestFullScreen())},cancelFullScreen:function(){return!!s.fullscreen&&(e.length?document[e+("ms"===e?"ExitFullscreen":"CancelFullScreen")]():document.cancelFullScreen())},element:function(){return s.fullscreen?e.length?document[e+"FullscreenElement"]:document.fullscreenElement:null}}}(),s={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),fullscreen:!1!==o.prefix,storage:function(){if(!("localStorage"in window))return!1;try{return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}(),pip:!a.getBrowser().isIPhone&&a.is.function(a.createElement("video").webkitSetPresentationMode),airplay:a.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e,t){var n=e.media;try{if(!a.is.function(n.canPlayType))return!1;if("video"===e.type)switch(t){case"video/webm":return n.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return n.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return n.canPlayType('video/ogg; codecs="theora"').replace(/no/,"")}else if("audio"===e.type)switch(t){case"audio/mpeg":return n.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return n.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return n.canPlayType('audio/wav; codecs="1"').replace(/no/,"")}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("test",null,t)}catch(e){}return e}(),touch:"ontouchstart"in document.documentElement,transitions:!1!==a.transitionEnd,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches};return e.prototype.play=function(){var e=this;return"play"in e.media&&e.media.play(),e},e.prototype.pause=function(){var e=this;return"pause"in e.media&&e.media.pause(),e},e.prototype.togglePlay=function(e){var t=this;return a.is.boolean(e)||(e=t.media.paused),e?t.play():t.pause(),e},e.prototype.stop=function(){var e=this;return e.restart(),e.pause(),e},e.prototype.restart=function(){var e=this;return e.seek(),e},e.prototype.rewind=function(e){var t=this;return a.is.number(e)||(e=t.config.seekTime),t.seek(t.media.currentTime-e),t},e.prototype.forward=function(e){var t=this;return a.is.number(e)||(e=t.config.seekTime),t.seek(t.media.currentTime+e),t},e.prototype.seek=function(e){var t=this,n=0,o=t.media.paused,s=t.getDuration();if(a.is.number(e)&&(n=e),n<0?n=0:n>s&&(n=s),t.core.updateSeekDisplay(n),a.inArray(i.embed,t.type)){switch(t.type){case"youtube":t.embed.seekTo(n);break;case"vimeo":t.embed.setCurrentTime(n);break;case"soundcloud":t.embed.seekTo(1e3*n)}o&&t.pause(),t.core.trigger(t.media,"timeupdate"),t.media.seeking=!0,t.core.trigger(t.media,"seeking")}else t.media.currentTime=n.toFixed(4);return t.core.log("Seeking to "+t.media.currentTime+" seconds"),t},e.prototype.setVolume=function(e){var t=this,n=!a.is.undefined(e);if(a.is.string(e)&&(e=parseFloat(e)),a.is.number(e)||(e=t.storage.volume),a.is.number(e)||(e=t.config.volume),e>1&&(e=1),e<0&&(e=0),t.media.volume=e,a.inArray(i.embed,t.type)){switch(t.type){case"youtube":t.embed.setVolume(100*t.media.volume);break;case"vimeo":case"soundcloud":t.embed.setVolume(t.media.volume)}t.core.trigger(t.media,"volumechange")}return 0===e?t.toggleMute(!0):t.media.muted&&n&&t.toggleMute(),t},e.prototype.increaseVolume=function(e){var t=this,n=t.media.muted?0:t.media.volume;return a.is.number(e)||(e=1),t.setVolume(n+e),t},e.prototype.decreaseVolume=function(e){var t=this,n=t.media.muted?0:t.media.volume;return a.is.number(e)||(e=1),t.setVolume(n-e),t},e.prototype.toggleMute=function(e){var t=this;if(a.is.boolean(e)||(e=!t.media.muted),a.toggleState(t.elements.buttons.mute,e),t.media.muted=e,t.media.muted||0!==t.media.volume||t.setVolume(t.config.volume),a.inArray(i.embed,t.type)){switch(t.type){case"youtube":t.embed[t.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":t.embed.setVolume(t.media.muted?0:t.config.volume)}t.core.trigger(t.media,"volumechange")}return t},e.prototype.setSpeed=function(e){var t=this;if(a.is.number(e)||(e=parseFloat(t.storage.speed||t.speed.selected||t.config.speed.default)),e<.1&&(e=.1),e>2&&(e=2),a.inArray(t.config.speed.options,e)){switch(t.type){case"youtube":t.embed.setPlaybackRate(e);break;case"vimeo":e=null,t.core.warn("Vimeo playback rate change is not supported");break;default:t.media.playbackRate=e}return t}t.core.warn("Unsupported speed ("+e+")")},e.prototype.setQuality=function(e){var t=this;a.is.string(e)||(e=parseFloat(t.storage.quality||t.config.quality.selected));{if(a.inArray(t.config.quality.options,e)){switch(t.type){case"youtube":t.core.trigger(t.media,"qualityrequested",!1,{quality:e}),t.embed.setPlaybackQuality(e);break;default:t.core.warn("Quality options are only available for YouTube")}return t}t.core.warn("Unsupported quality option ("+e+")")}},e.prototype.setLoop=function(e){var t=this;a.inArray(["start","end","all","none","toggle"],e)||(e="toggle");var n=Number(t.media.currentTime);switch(e){case"start":t.config.loop.end&&t.config.loop.end<=n&&(t.config.loop.end=null),t.config.loop.start=n,t.config.loop.indicator.start=t.elements.display.played.value;break;case"end":if(t.config.loop.start>=n)return;t.config.loop.end=n,t.config.loop.indicator.end=t.elements.display.played.value;break;case"all":t.config.loop.start=0,t.config.loop.end=t.media.duration-2,t.config.loop.indicator.start=0,t.config.loop.indicator.end=100;break;case"toggle":t.config.loop.active?(t.config.loop.start=0,t.config.loop.end=null):(t.config.loop.start=0,t.config.loop.end=t.media.duration-2);break;default:t.config.loop.start=0,t.config.loop.end=null}return t},e.prototype.source=function(e){var t=this;if(a.is.object(e))return t.core.updateSource(e),t;var n;switch(t.type){case"youtube":n=t.embed.getVideoUrl();break;case"vimeo":t.embed.getVideoUrl.then(function(e){n=e});break;case"soundcloud":t.embed.getCurrentSound(function(e){n=e.permalink_url});break;default:n=t.media.currentSrc}return n},e.prototype.poster=function(e){var t=this;return a.is.string(e)?("video"===t.type?t.media.setAttribute("poster",e):t.core.warn("Poster can only be set on HTML5 video"),t):t.media.getAttribute("poster")},e.prototype.toggleCaptions=function(e){var t=this;if(t.supported.full&&t.elements.buttons.captions)return a.is.boolean(e)||(e=-1===t.elements.container.className.indexOf(t.config.classNames.captions.active)),t.captions.enabled===e?t:(t.captions.enabled=e,a.toggleState(t.elements.buttons.captions,t.captions.enabled),a.toggleClass(t.elements.container,t.config.classNames.captions.active,t.captions.enabled),t.core.trigger(t.media,t.captions.enabled?"captionsenabled":"captionsdisabled"),t)},e.prototype.setLanguage=function(e){var t=this;return a.is.empty(e)?(t.toggleCaptions(!1),t):(e=e.toLowerCase(),t.captions.language===e?t:(t.toggleCaptions(!0),t.captions.language=e,t.core.trigger(t.media,"captionchange"),t.core.setCaption(),t.core.setupCaptions(),t))},e.prototype.getLanguage=function(){return this.captions.language},e.prototype.toggleFullscreen=function(e){var n=this,i=s.fullscreen;if(i){if(!a.is.event(e)||e.type!==o.eventType)return o.isFullScreen(n.elements.container)?o.cancelFullScreen():(t={x:window.pageXOffset||0,y:window.pageYOffset||0},o.requestFullScreen(n.elements.container)),void(n.fullscreen.active=o.isFullScreen(n.elements.container));n.fullscreen.active=o.isFullScreen(n.elements.container)}else n.fullscreen.active=!n.fullscreen.active,document.body.style.overflow=n.fullscreen.active?"hidden":"";return a.toggleClass(n.elements.container,n.config.classNames.fullscreen.active,n.fullscreen.active),n.elements.buttons&&n.elements.buttons.fullscreen&&a.toggleState(n.elements.buttons.fullscreen,n.fullscreen.active),n.core.trigger(n.media,n.fullscreen.active?"enterfullscreen":"exitfullscreen",!0),!n.fullscreen.active&&i&&window.scrollTo(t.x,t.y),n},e.prototype.togglePictureInPicture=function(e){var t=this,n={pip:"picture-in-picture",inline:"inline"};if(t.core.support.pip)return a.is.boolean(e)||(e=t.media.webkitPresentationMode===n.inline),t.media.webkitSetPresentationMode(e?n.pip:n.inline),t},e.prototype.airPlay=function(){var e=this;if(e.core.support.airplay)return e.media.webkitShowPlaybackTargetPicker(),e},e.prototype.toggleControls=function(e){var t=this;if(t.config.hideControls&&"audio"!==t.type){var n=0,i=e,o=!1,r=a.hasClass(t.elements.container,t.config.classNames.loading);if(a.is.boolean(e)||(a.is.event(e)?(o="enterfullscreen"===e.type,i=a.inArray(["mousemove","touchstart","mouseenter","focus"],e.type),a.inArray(["mousemove","touchmove"],e.type)&&(n=2e3),"focus"===e.type&&(n=3e3)):i=a.hasClass(t.elements.container,t.config.classNames.hideControls)),window.clearTimeout(t.core.timers.hover),i||t.media.paused||r){if(a.toggleClass(t.elements.container,t.config.classNames.hideControls,!1)&&t.core.trigger(t.media,"controlsshown"),t.media.paused||r)return;s.touch&&(n=3e3)}return i&&t.media.paused||(t.core.timers.hover=window.setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||o)&&a.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(t.core.trigger(t.media,"controlshidden"),t.core.toggleMenu(!1))},n)),t}},e.prototype.on=function(e,t){var n=this;return a.on(n.elements.container,e,t),n},e.prototype.off=function(e,t){var n=this;return a.off(n.elements.container,e,t),n},e.prototype.supports=function(e){return s.mime(this,e)},e.prototype.destroy=function(e,t){function n(){if(null!==i){if(a.is.boolean(t)||(t=!0),document.body.style.overflow="",t){var n=i.elements.container.parentNode;a.is.htmlElement(n)&&n.replaceChild(i.elements.original,i.elements.container)}i.core.trigger(i.elements.original,"destroyed",!0),a.is.function(e)&&e.call(i.elements.original),i=null}}var i=this;switch(i.type){case"youtube":window.clearInterval(i.core.timers.buffering),window.clearInterval(i.core.timers.playing),i.embed.destroy(),n();break;case"vimeo":i.embed.unload().then(n),window.setTimeout(n,200);break;case"video":case"audio":i.core.toggleNativeControls(!0),n()}},e.prototype.getDuration=function(){var e=this,t=parseInt(e.config.duration),n=0;return null===e.media.duration||isNaN(e.media.duration)||(n=e.media.duration),isNaN(t)?n:t},e}); \ No newline at end of file
diff --git a/package.json b/package.json
index d53cc9ee..fbae5ab6 100644
--- a/package.json
+++ b/package.json
@@ -1,51 +1,51 @@
{
- "name": "plyr",
- "version": "2.0.13",
- "description": "A simple, accessible and customizable HTML5, YouTube and Vimeo media player",
- "homepage": "http://plyr.io",
- "main": "src/js/plyr.js",
- "dependencies": {},
- "devDependencies": {
- "gulp": "^3.9.1",
- "gulp-autoprefixer": "^3.1.1",
- "gulp-clean-css": "^2.0.12",
- "gulp-concat": "^2.3.3",
- "gulp-less": "^3.0.5",
- "gulp-open": "^2.0.0",
- "gulp-rename": "^1.2.0",
- "gulp-replace": "^0.5.3",
- "gulp-s3": "^0.3.0",
- "gulp-sass": "^2.3.2",
- "gulp-size": "^2.1.0",
- "gulp-svgmin": "^1.2.2",
- "gulp-svgstore": "^6.0.0",
- "gulp-uglify": "^2.0.0",
- "gulp-util": "^3.0.7",
- "run-sequence": "^1.2.2",
- "through2": "^2.0.1"
- },
- "keywords": [
- "HTML5 Video",
- "HTML5 Audio",
- "Media Player",
- "DASH",
- "Shaka",
- "WordPress",
- "HLS"
- ],
- "repository": {
- "type": "git",
- "url": "git://github.com/sampotts/plyr.git"
- },
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/sampotts/plyr/issues"
- },
- "directories": {
- "doc": "readme.md"
- },
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "author": "Sam Potts <sam@potts.es>"
-}
+ "name": "plyr",
+ "version": "2.0.13",
+ "description": "A simple, accessible and customizable HTML5, YouTube and Vimeo media player",
+ "homepage": "http://plyr.io",
+ "main": "src/js/plyr.js",
+ "dependencies": {},
+ "devDependencies": {
+ "gulp": "^3.9.1",
+ "gulp-autoprefixer": "^4.0.0",
+ "gulp-clean-css": "^3.7.0",
+ "gulp-concat": "^2.3.3",
+ "gulp-less": "^3.3.2",
+ "gulp-open": "^2.0.0",
+ "gulp-rename": "^1.2.0",
+ "gulp-replace": "^0.6.1",
+ "gulp-s3": "^0.11.0",
+ "gulp-sass": "^3.1.0",
+ "gulp-size": "^2.1.0",
+ "gulp-svgmin": "^1.2.4",
+ "gulp-svgstore": "^6.0.0",
+ "gulp-uglify": "^3.0.0",
+ "gulp-util": "^3.0.7",
+ "run-sequence": "^1.2.2",
+ "through2": "^2.0.1"
+ },
+ "keywords": [
+ "HTML5 Video",
+ "HTML5 Audio",
+ "Media Player",
+ "DASH",
+ "Shaka",
+ "WordPress",
+ "HLS"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/sampotts/plyr.git"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/sampotts/plyr/issues"
+ },
+ "directories": {
+ "doc": "readme.md"
+ },
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "Sam Potts <sam@potts.es>"
+} \ No newline at end of file
diff --git a/src/js/plyr.js b/src/js/plyr.js
index 22f07788..db17ad00 100644
--- a/src/js/plyr.js
+++ b/src/js/plyr.js
@@ -16,7 +16,7 @@
} else {
context[name] = definition();
}
-}).call(this, 'Plyr', this, function() {
+}.call(this, 'Plyr', this, function() {
'use strict';
/* global jQuery, console */
@@ -36,7 +36,6 @@
// Logging to console
debug: false,
- logPrefix: '',
// Auto play (if supported)
autoplay: false,
@@ -135,12 +134,7 @@
'airplay',
'fullscreen'
],
- settings: [
- 'captions',
- 'quality',
- 'speed',
- 'loop'
- ],
+ settings: ['captions', 'quality', 'speed', 'loop'],
// Localisation
i18n: {
@@ -168,13 +162,14 @@
end: 'End',
all: 'All',
reset: 'Reset',
- none: 'None'
+ none: 'None',
+ disabled: 'Disabled'
},
// URLs
urls: {
vimeo: {
- api: 'https://player.vimeo.com/api/player.js',
+ api: 'https://player.vimeo.com/api/player.js'
},
youtube: {
api: 'https://www.youtube.com/iframe_api'
@@ -227,19 +222,21 @@
'seeked',
'emptied',
'ratechange',
+ 'cuechange',
// Custom events
'enterfullscreen',
'exitfullscreen',
'captionsenabled',
'captionsdisabled',
- 'qualitychange',
- 'qualityrequested',
+ 'captionchange',
'controlshidden',
'controlsshown',
// YouTube
- 'statechange'
+ 'statechange',
+ 'qualitychange',
+ 'qualityrequested'
],
// Selectors
@@ -279,7 +276,7 @@
buffer: '.plyr__progress--buffer',
played: '.plyr__progress--played',
loop: '.plyr__progress--loop',
- volume: '.plyr__volume--display',
+ volume: '.plyr__volume--display'
},
progress: '.plyr__progress',
captions: '.plyr__captions',
@@ -289,7 +286,7 @@
},
// Class hooks added to the player in different states
- classes: {
+ classNames: {
video: 'plyr__video-wrapper',
embed: 'plyr__video-embed',
control: 'plyr__control',
@@ -345,10 +342,17 @@
return input !== null && Array.isArray(input);
},
number: function(input) {
- return input !== null && (typeof input === 'number' && !isNaN(input - 0) || (typeof input === 'object' && input.constructor === Number));
+ return (
+ input !== null &&
+ ((typeof input === 'number' && !isNaN(input - 0)) ||
+ (typeof input === 'object' && input.constructor === Number))
+ );
},
string: function(input) {
- return input !== null && (typeof input === 'string' || (typeof input === 'object' && input.constructor === String));
+ return (
+ input !== null &&
+ (typeof input === 'string' || (typeof input === 'object' && input.constructor === String))
+ );
},
boolean: function(input) {
return input !== null && typeof input === 'boolean';
@@ -369,13 +373,18 @@
return input !== null && (input instanceof window.TextTrackCue || input instanceof window.VTTCue);
},
track: function(input) {
- return input !== null && input instanceof window.TextTrack;
+ return input !== null && (input instanceof window.TextTrack || typeof input.kind === 'string');
},
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);
+ 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)
+ );
}
},
@@ -394,7 +403,7 @@
var isChrome = false;
var isSafari = false;
- if ((navigator.appVersion.indexOf('Windows NT') !== -1) && (navigator.appVersion.indexOf('rv:11') !== -1)) {
+ if (navigator.appVersion.indexOf('Windows NT') !== -1 && navigator.appVersion.indexOf('rv:11') !== -1) {
// MSIE 11
isIE = true;
name = 'IE';
@@ -453,7 +462,7 @@
name: name,
version: majorVersion,
isIE: isIE,
- isOldIE: (isIE && majorVersion <= 9),
+ isOldIE: isIE && majorVersion <= 9,
isFirefox: isFirefox,
isChrome: isChrome,
isSafari: isSafari,
@@ -468,7 +477,7 @@
var basic = false;
var full = false;
var browser = utils.getBrowser();
- var playsInline = (browser.isIPhone && inline && support.inline);
+ var playsInline = browser.isIPhone && inline && support.inline;
switch (type) {
case 'video':
@@ -489,12 +498,12 @@
case 'vimeo':
case 'soundcloud':
basic = true;
- full = (!browser.isOldIE && !browser.isIos);
+ full = !browser.isOldIE && !browser.isIos;
break;
default:
- basic = (support.audio && support.video);
- full = (basic && !browser.isOldIE);
+ basic = support.audio && support.video;
+ full = basic && !browser.isOldIE;
}
return {
@@ -546,7 +555,7 @@
// Loops backwards to prevent having to clone the wrapper on the
// first element (see `child` below).
for (var i = elements.length - 1; i >= 0; i--) {
- var child = (i > 0) ? wrapper.cloneNode(true) : wrapper;
+ var child = i > 0 ? wrapper.cloneNode(true) : wrapper;
var element = elements[i];
// Cache the current parent and sibling.
@@ -572,19 +581,13 @@
// Remove an element
removeElement: function(element) {
- if (!utils.is.htmlElement(element) ||
- !utils.is.htmlElement(element.parentNode)) {
+ if (!utils.is.htmlElement(element) || !utils.is.htmlElement(element.parentNode)) {
return;
}
element.parentNode.removeChild(element);
},
- // Prepend child
- prependChild: function(parent, element) {
- parent.insertBefore(element, parent.firstChild);
- },
-
// Inaert an element after another
insertAfter: function(element, target) {
target.parentNode.insertBefore(element, target.nextSibling);
@@ -611,16 +614,14 @@
// Insert a DocumentFragment
insertElement: function(type, parent, attributes, text) {
- // Create a new <element>
- var element = utils.createElement(type, attributes, text);
-
- // Inject the new element
- utils.prependChild(parent, element);
+ // Inject the new <element>
+ parent.appendChild(utils.createElement(type, attributes, text));
},
// Remove all child elements
emptyElement: function(element) {
var length = element.childNodes.length;
+
while (length--) {
element.removeChild(element.lastChild);
}
@@ -706,7 +707,7 @@
element.className = name + (toggle ? ' ' + className : '');
}
- return toggle && !contains || !toggle && contains;
+ return (toggle && !contains) || (!toggle && contains);
}
return null;
@@ -728,7 +729,8 @@
matches: function(element, selector) {
var prototype = Element.prototype;
- var matches = prototype.matches ||
+ var matches =
+ prototype.matches ||
prototype.webkitMatchesSelector ||
prototype.mozMatchesSelector ||
prototype.msMatchesSelector ||
@@ -754,12 +756,18 @@
// Bind along with custom handler
proxy: function(element, eventName, customListener, defaultListener, passive, capture) {
- utils.on(element, eventName, function(event) {
- if (customListener) {
- customListener.apply(element, [event]);
- }
- defaultListener.apply(element, [event]);
- }, passive, capture);
+ utils.on(
+ element,
+ eventName,
+ function(event) {
+ if (customListener) {
+ customListener.apply(element, [event]);
+ }
+ defaultListener.apply(element, [event]);
+ },
+ passive,
+ capture
+ );
},
// Toggle event listener
@@ -832,7 +840,7 @@
},
// Trigger event
- event: function(element, type, bubbles, properties) {
+ dispatchEvent: function(element, type, bubbles, properties) {
// Bail if no element
if (!element || !type) {
return;
@@ -882,7 +890,7 @@
}
// Get state
- state = (utils.is.boolean(state) ? state : !target.getAttribute('aria-pressed'));
+ state = utils.is.boolean(state) ? state : !target.getAttribute('aria-pressed');
// Set the attribute on target
target.setAttribute('aria-pressed', state);
@@ -895,7 +903,7 @@
if (current === 0 || max === 0 || isNaN(current) || isNaN(max)) {
return 0;
}
- return ((current / max) * 100).toFixed(2);
+ return (current / max * 100).toFixed(2);
},
// Deep extend/merge destination object with N more objects
@@ -1011,9 +1019,12 @@
// Once loaded, inject to container and body
xhr.onload = function() {
if (support.storage) {
- window.localStorage.setItem(prefix + id, JSON.stringify({
- content: xhr.responseText
- }));
+ window.localStorage.setItem(
+ prefix + id,
+ JSON.stringify({
+ content: xhr.responseText
+ })
+ );
}
updateSprite(container, xhr.responseText);
@@ -1073,7 +1084,7 @@
prefix: prefix,
// Yet again Microsoft awesomeness,
// Sometimes the prefix is 'ms', sometimes 'MS' to keep you on your toes
- eventType: (prefix === 'ms' ? 'MSFullscreenChange' : prefix + 'fullscreenchange'),
+ eventType: prefix === 'ms' ? 'MSFullscreenChange' : prefix + 'fullscreenchange',
// Is an element fullscreen
isFullScreen: function(element) {
@@ -1105,14 +1116,18 @@
element = document.body;
}
- return !prefix.length ? element.requestFullScreen() : element[prefix + (prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen')]();
+ return !prefix.length
+ ? element.requestFullScreen()
+ : element[prefix + (prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen')]();
},
cancelFullScreen: function() {
if (!support.fullscreen) {
return false;
}
- return !prefix.length ? document.cancelFullScreen() : document[prefix + (prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen')]();
+ return !prefix.length
+ ? document.cancelFullScreen()
+ : document[prefix + (prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen')]();
},
element: function() {
if (!support.fullscreen) {
@@ -1255,18 +1270,25 @@
}
// jQuery, NodeList or Array passed, use first element
- if ((window.jQuery && player.media instanceof jQuery) ||
+ if (
+ (window.jQuery && player.media instanceof jQuery) ||
utils.is.nodeList(player.media) ||
- utils.is.array(player.media)) {
+ utils.is.array(player.media)
+ ) {
player.media = player.media[0];
}
// Set config
- player.config = utils.extend({}, defaults, options, (function() {
- try {
- return JSON.parse(player.media.getAttribute('data-plyr'));
- } catch (e) {}
- })());
+ player.config = utils.extend(
+ {},
+ defaults,
+ options,
+ (function() {
+ try {
+ return JSON.parse(player.media.getAttribute('data-plyr'));
+ } catch (e) {}
+ })()
+ );
// Elements cache
player.elements = {
@@ -1285,9 +1307,8 @@
// Captions
player.captions = {
- enabled: false,
- captions: [],
- tracks: [],
+ enabled: null,
+ tracks: null,
currentTrack: null
};
@@ -1333,9 +1354,14 @@
// Trigger events, with plyr instance passed
function trigger(element, type, bubbles, properties) {
- utils.event(element, type, bubbles, utils.extend({}, properties, {
- plyr: player
- }));
+ utils.dispatchEvent(
+ element,
+ type,
+ bubbles,
+ utils.extend({}, properties, {
+ plyr: player
+ })
+ );
}
// Trap focus inside container
@@ -1391,6 +1417,8 @@
src: attributes
});
} else if (utils.is.array(attributes)) {
+ warn(attributes);
+
attributes.forEach(function(attribute) {
utils.insertElement(type, player.media, attribute);
});
@@ -1401,7 +1429,7 @@
function getIconUrl() {
return {
url: player.config.iconUrl,
- absolute: (player.config.iconUrl.indexOf('http') === 0) || player.browser.isIE
+ absolute: player.config.iconUrl.indexOf('http') === 0 || player.browser.isIE
};
}
@@ -1413,9 +1441,12 @@
// Create <svg>
var icon = document.createElementNS(namespace, 'svg');
- utils.setAttributes(icon, utils.extend(attributes, {
- role: 'presentation'
- }));
+ utils.setAttributes(
+ icon,
+ utils.extend(attributes, {
+ role: 'presentation'
+ })
+ );
// Create the <use> to reference sprite
var use = document.createElementNS(namespace, 'use');
@@ -1441,20 +1472,30 @@
break;
}
- return utils.createElement('span', {
- class: player.config.classes.hidden
- }, text);
+ return utils.createElement(
+ 'span',
+ {
+ class: player.config.classNames.hidden
+ },
+ text
+ );
}
// Create a badge
function createBadge(text) {
var badge = utils.createElement('span', {
- class: player.config.classes.menu.value
+ class: player.config.classNames.menu.value
});
- badge.appendChild(utils.createElement('span', {
- class: player.config.classes.menu.badge
- }, text));
+ badge.appendChild(
+ utils.createElement(
+ 'span',
+ {
+ class: player.config.classNames.menu.badge
+ },
+ text
+ )
+ );
return badge;
}
@@ -1471,11 +1512,11 @@
}
if ('class' in attributes) {
- if (attributes.class.indexOf(player.config.classes.control) === -1) {
- attributes.class += ' ' + player.config.classes.control;
+ if (attributes.class.indexOf(player.config.classNames.control) === -1) {
+ attributes.class += ' ' + player.config.classNames.control;
}
} else {
- attributes.class = player.config.classes.control;
+ attributes.class = player.config.classNames.control;
}
// Large play button
@@ -1511,13 +1552,18 @@
}
// Merge attributes
- utils.extend(attributes, utils.getAttributesFromSelector(player.config.selectors.buttons[type], attributes));
+ utils.extend(
+ attributes,
+ utils.getAttributesFromSelector(player.config.selectors.buttons[type], attributes)
+ );
// Add toggle icon if needed
if (utils.is.string(iconToggled)) {
- button.appendChild(createIcon(iconToggled, {
- class: 'icon--' + iconToggled
- }));
+ button.appendChild(
+ createIcon(iconToggled, {
+ class: 'icon--' + iconToggled
+ })
+ );
}
button.appendChild(createIcon(iconDefault));
@@ -1533,20 +1579,31 @@
// Create an <input type='range'>
function createRange(type, attributes) {
// Seek label
- var label = utils.createElement('label', {
- for: attributes.id,
- class: player.config.classes.hidden
- }, player.config.i18n[type]);
+ var label = utils.createElement(
+ 'label',
+ {
+ for: attributes.id,
+ class: player.config.classNames.hidden
+ },
+ player.config.i18n[type]
+ );
// Seek input
- var input = utils.createElement('input', utils.extend(utils.getAttributesFromSelector(player.config.selectors.inputs[type]), {
- type: 'range',
- min: 0,
- max: 100,
- step: 0.1,
- value: 0,
- autocomplete: 'off'
- }, attributes));
+ var input = utils.createElement(
+ 'input',
+ utils.extend(
+ utils.getAttributesFromSelector(player.config.selectors.inputs[type]),
+ {
+ type: 'range',
+ min: 0,
+ max: 100,
+ step: 0.1,
+ value: 0,
+ autocomplete: 'off'
+ },
+ attributes
+ )
+ );
player.elements.inputs[type] = input;
@@ -1558,11 +1615,18 @@
// Create a <progress>
function createProgress(type, attributes) {
- var progress = utils.createElement('progress', utils.extend(utils.getAttributesFromSelector(player.config.selectors.display[type]), {
- min: 0,
- max: 100,
- value: 0
- }, attributes));
+ var progress = utils.createElement(
+ 'progress',
+ utils.extend(
+ utils.getAttributesFromSelector(player.config.selectors.display[type]),
+ {
+ min: 0,
+ max: 100,
+ value: 0
+ },
+ attributes
+ )
+ );
// Create the label inside
if (type !== 'volume') {
@@ -1593,11 +1657,23 @@
class: 'plyr__time'
});
- container.appendChild(utils.createElement('span', {
- class: player.config.classes.hidden
- }, player.config.i18n[type]));
-
- container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(player.config.selectors.display[type]), '00:00'));
+ container.appendChild(
+ utils.createElement(
+ 'span',
+ {
+ class: player.config.classNames.hidden
+ },
+ player.config.i18n[type]
+ )
+ );
+
+ container.appendChild(
+ utils.createElement(
+ 'span',
+ utils.getAttributesFromSelector(player.config.selectors.display[type]),
+ '00:00'
+ )
+ );
player.elements.display[type] = container;
@@ -1613,7 +1689,10 @@
}
// Create the container
- var controls = utils.createElement('div', utils.getAttributesFromSelector(player.config.selectors.controls.wrapper));
+ var controls = utils.createElement(
+ 'div',
+ utils.getAttributesFromSelector(player.config.selectors.controls.wrapper)
+ );
// Restart button
if (utils.inArray(player.config.controls, 'restart')) {
@@ -1639,7 +1718,10 @@
// Progress
if (utils.inArray(player.config.controls, 'progress')) {
- var container = utils.createElement('span', utils.getAttributesFromSelector(player.config.selectors.progress));
+ var container = utils.createElement(
+ 'span',
+ utils.getAttributesFromSelector(player.config.selectors.progress)
+ );
// Seek range slider
var seek = createRange('seek', {
@@ -1658,10 +1740,14 @@
// Seek tooltip
if (player.config.tooltips.seek) {
- var tooltip = utils.createElement('span', {
- role: 'tooltip',
- class: player.config.classes.tooltip
- }, '00:00');
+ var tooltip = utils.createElement(
+ 'span',
+ {
+ role: 'tooltip',
+ class: player.config.classNames.tooltip
+ },
+ '00:00'
+ );
container.appendChild(tooltip);
player.elements.display.seekTooltip = tooltip;
@@ -1700,9 +1786,12 @@
};
// Create the volume range slider
- var range = createRange('volume', utils.extend(attributes, {
- id: 'plyr-volume-' + data.id
- }));
+ var range = createRange(
+ 'volume',
+ utils.extend(attributes, {
+ id: 'plyr-volume-' + data.id
+ })
+ );
volume.appendChild(range.label);
volume.appendChild(range.input);
@@ -1724,12 +1813,14 @@
class: 'plyr__menu'
});
- menu.appendChild(createButton('settings', {
- id: 'plyr-settings-toggle-' + data.id,
- 'aria-haspopup': true,
- 'aria-controls': 'plyr-settings-' + data.id,
- 'aria-expanded': false
- }));
+ menu.appendChild(
+ createButton('settings', {
+ id: 'plyr-settings-toggle-' + data.id,
+ 'aria-haspopup': true,
+ 'aria-controls': 'plyr-settings-' + data.id,
+ 'aria-expanded': false
+ })
+ );
var form = utils.createElement('form', {
class: 'plyr__menu__container',
@@ -1761,17 +1852,22 @@
hidden: ''
});
- var button = utils.createElement('button', utils.extend(utils.getAttributesFromSelector(player.config.selectors.buttons.settings), {
- type: 'button',
- class: player.config.classes.control + ' ' + player.config.classes.control + '--forward',
- id: 'plyr-settings-' + data.id + '-' + type + '-tab',
- 'aria-haspopup': true,
- 'aria-controls': 'plyr-settings-' + data.id + '-' + type,
- 'aria-expanded': false
- }), player.config.i18n[type]);
+ var button = utils.createElement(
+ 'button',
+ utils.extend(utils.getAttributesFromSelector(player.config.selectors.buttons.settings), {
+ type: 'button',
+ class:
+ player.config.classNames.control + ' ' + player.config.classNames.control + '--forward',
+ id: 'plyr-settings-' + data.id + '-' + type + '-tab',
+ 'aria-haspopup': true,
+ 'aria-controls': 'plyr-settings-' + data.id + '-' + type,
+ 'aria-expanded': false
+ }),
+ player.config.i18n[type]
+ );
var value = utils.createElement('span', {
- class: player.config.classes.menu.value
+ class: player.config.classNames.menu.value
});
// Speed contains HTML entities
@@ -1798,13 +1894,17 @@
hidden: ''
});
- var back = utils.createElement('button', {
- type: 'button',
- class: player.config.classes.control + ' ' + player.config.classes.control + '--back',
- 'aria-haspopup': true,
- 'aria-controls': 'plyr-settings-' + data.id + '-home',
- 'aria-expanded': false
- }, player.config.i18n[type]);
+ var back = utils.createElement(
+ 'button',
+ {
+ type: 'button',
+ class: player.config.classNames.control + ' ' + player.config.classNames.control + '--back',
+ 'aria-haspopup': true,
+ 'aria-controls': 'plyr-settings-' + data.id + '-home',
+ 'aria-expanded': false
+ },
+ player.config.i18n[type]
+ );
pane.appendChild(back);
@@ -1847,7 +1947,7 @@
player.elements.controls = controls;
- setLoopMenu();
+ //setLoopMenu();
setSpeedMenu();
return controls;
@@ -1936,14 +2036,17 @@
var item = utils.createElement('li');
var label = utils.createElement('label', {
- class: player.config.classes.control
+ class: player.config.classNames.control
});
- var radio = utils.createElement('input', utils.extend(utils.getAttributesFromSelector(player.config.selectors.inputs.quality), {
- type: 'radio',
- name: 'plyr-quality',
- value: quality,
- }));
+ var radio = utils.createElement(
+ 'input',
+ utils.extend(utils.getAttributesFromSelector(player.config.selectors.inputs.quality), {
+ type: 'radio',
+ name: 'plyr-quality',
+ value: quality
+ })
+ );
label.appendChild(radio);
label.appendChild(document.createTextNode(getLabel('quality', quality)));
@@ -1957,55 +2060,73 @@
list.appendChild(item);
});
- setSelectedSetting('quality', list);
+ updateSetting('quality', list);
}
// Translate a value into a nice label
// TODO: Localisation
function getLabel(setting, value) {
- if (setting === 'speed') {
- if (value === 1) {
- return 'Normal';
- }
+ switch (setting) {
+ case 'speed':
+ return value === 1 ? 'Normal' : value + '&times;';
+
+ case 'quality':
+ switch (value) {
+ 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';
+ case 'tiny':
+ return 'Tiny';
+ case 'default':
+ return 'Auto';
+ default:
+ return value;
+ }
- return value + '&times;';
- } else if (setting === 'quality') {
- switch (value) {
- 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';
- case 'tiny':
- return 'Tiny';
- case 'default':
- return 'Auto';
- default:
- return value;
- }
+ case 'captions':
+ return getLanguage();
}
}
// Update the selected setting
- function setSelectedSetting(setting, list) {
- var value = player[setting].selected;
+ function updateSetting(setting, list) {
+ var value = null;
- if (utils.is.empty(value)) {
- value = player.config[setting].default;
- }
+ switch (setting) {
+ case 'captions':
+ value = player.captions.language;
- // Unsupported quality
- if (!utils.inArray(player[setting].options, value)) {
- return;
+ if (!player.captions.enabled) {
+ value = '';
+ }
+
+ break;
+
+ default:
+ value = player[setting].selected;
+
+ if (utils.is.empty(value)) {
+ value = player.config[setting].default;
+ }
+
+ // Unsupported value
+ if (!utils.inArray(player[setting].options, value)) {
+ warn('Unsupported option');
+ return;
+ }
+
+ break;
}
// Get the list if we need to
@@ -2014,7 +2135,7 @@
}
// Find the radio option
- var target = list.querySelector('[value="' + value + '"]');
+ var target = list.querySelector('input[value="' + value + '"]');
if (!utils.is.htmlElement(target)) {
return;
@@ -2024,12 +2145,12 @@
target.checked = true;
// Find the label
- var label = player.elements.settings.tabs[setting].querySelector('.' + player.config.classes.menu.value);
+ var label = player.elements.settings.tabs[setting].querySelector('.' + player.config.classNames.menu.value);
label.innerHTML = getLabel(setting, value);
}
// Set the looping options
- function setLoopMenu() {
+ /*function setLoopMenu() {
var options = ['start', 'end', 'all', 'reset'];
var list = player.elements.settings.panes.loop.querySelector('ul');
@@ -2037,17 +2158,25 @@
player.elements.settings.tabs.loop.removeAttribute('hidden');
player.elements.settings.panes.loop.removeAttribute('hidden');
+ // Toggle the pane and tab
+ var toggle = !utils.is.empty(player.loop.options);
+ toggleTab('loop', toggle);
+
// Empty the menu
utils.emptyElement(list);
options.forEach(function(option) {
var item = utils.createElement('li');
- var button = utils.createElement('button', utils.extend(utils.getAttributesFromSelector(player.config.selectors.buttons.loop), {
- type: 'button',
- class: player.config.classes.control,
- 'data-plyr-loop-action': option
- }), player.config.i18n[option]);
+ var button = utils.createElement(
+ 'button',
+ utils.extend(utils.getAttributesFromSelector(player.config.selectors.buttons.loop), {
+ type: 'button',
+ class: player.config.classNames.control,
+ 'data-plyr-loop-action': option
+ }),
+ player.config.i18n[option]
+ );
if (utils.inArray(['start', 'end'], option)) {
var badge = createBadge('00:00');
@@ -2057,15 +2186,15 @@
item.appendChild(button);
list.appendChild(item);
});
- }
+ }*/
// Set a list of available captions languages
function setCaptionsMenu() {
var list = player.elements.settings.panes.captions.querySelector('ul');
- // Show the pane and tab
- player.elements.settings.tabs.captions.removeAttribute('hidden');
- player.elements.settings.panes.captions.removeAttribute('hidden');
+ // Toggle the pane and tab
+ var toggle = !utils.is.empty(player.captions.tracks);
+ toggleTab('captions', toggle);
// Empty the menu
utils.emptyElement(list);
@@ -2086,7 +2215,7 @@
// Add the "None" option to turn off captions
tracks.unshift({
- language: 'off',
+ language: '',
label: player.config.i18n.none
});
@@ -2095,16 +2224,19 @@
var item = utils.createElement('li');
var label = utils.createElement('label', {
- class: player.config.classes.control
+ class: player.config.classNames.control
});
- var radio = utils.createElement('input', utils.extend(utils.getAttributesFromSelector(player.config.selectors.inputs.language), {
- type: 'radio',
- name: 'plyr-language',
- value: track.language,
- }));
+ var radio = utils.createElement(
+ 'input',
+ utils.extend(utils.getAttributesFromSelector(player.config.selectors.inputs.language), {
+ type: 'radio',
+ name: 'plyr-language',
+ value: track.language
+ })
+ );
- if (track.language.toLowerCase() === player.config.captions.language.toLowerCase()) {
+ if (track.language.toLowerCase() === player.captions.language.toLowerCase()) {
radio.checked = true;
}
@@ -2118,6 +2250,8 @@
item.appendChild(label);
list.appendChild(item);
});
+
+ updateSetting('captions', list);
}
// Set a list of available captions languages
@@ -2160,14 +2294,17 @@
var item = utils.createElement('li');
var label = utils.createElement('label', {
- class: player.config.classes.control
+ class: player.config.classNames.control
});
- var radio = utils.createElement('input', utils.extend(utils.getAttributesFromSelector(player.config.selectors.inputs.speed), {
- type: 'radio',
- name: 'plyr-speed',
- value: speed,
- }));
+ var radio = utils.createElement(
+ 'input',
+ utils.extend(utils.getAttributesFromSelector(player.config.selectors.inputs.speed), {
+ type: 'radio',
+ name: 'plyr-speed',
+ value: speed
+ })
+ );
label.appendChild(radio);
label.insertAdjacentHTML('beforeend', getLabel('speed', speed));
@@ -2175,7 +2312,7 @@
list.appendChild(item);
});
- setSelectedSetting('speed', list);
+ updateSetting('speed', list);
}
// Setup fullscreen
@@ -2192,7 +2329,7 @@
log((nativeSupport ? 'Native' : 'Fallback') + ' fullscreen enabled');
// Add styling hook
- utils.toggleClass(player.elements.container, player.config.classes.fullscreen.enabled, true);
+ utils.toggleClass(player.elements.container, player.config.classNames.fullscreen.enabled, true);
} else {
log('Fullscreen not supported and fallback disabled');
}
@@ -2208,23 +2345,53 @@
}
// Setup captions
- function setupCaptions(tracks) {
+ function setupCaptions() {
+ // Set default language if not set
+ if (!utils.is.empty(player.storage.language)) {
+ player.captions.language = player.storage.language;
+ } else if (utils.is.empty(player.captions.language)) {
+ player.captions.language = player.config.captions.language.toLowerCase();
+ }
+
+ // Set captions enabled state if not set
+ if (!utils.is.boolean(player.captions.enabled)) {
+ if (!utils.is.empty(player.storage.language)) {
+ player.captions.enabled = player.storage.captions;
+ } else {
+ player.captions.enabled = player.config.captions.active;
+ }
+ }
+
// Only Vimeo and HTML5 video supported at this point
if (!utils.inArray(['video', 'vimeo'], player.type) || (player.type === 'video' && !support.textTracks)) {
+ player.captions.tracks = null;
+
+ // Clear menu and hide
+ setCaptionsMenu();
+
return;
}
// Inject the container
if (!utils.is.htmlElement(player.elements.captions)) {
- player.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(player.config.selectors.captions));
+ player.elements.captions = utils.createElement(
+ 'div',
+ utils.getAttributesFromSelector(player.config.selectors.captions)
+ );
utils.insertAfter(player.elements.captions, player.elements.wrapper);
}
// Get tracks
- player.captions.tracks = utils.is.array(tracks) ? tracks : player.media.textTracks;
+ if (player.type === 'video') {
+ player.captions.tracks = player.media.textTracks;
+ }
// Set the class hook
- utils.toggleClass(player.elements.container, player.config.classes.captions.enabled, !utils.is.empty(player.captions.tracks));
+ utils.toggleClass(
+ player.elements.container,
+ player.config.classNames.captions.enabled,
+ !utils.is.empty(player.captions.tracks)
+ );
// If no caption file exists, hide container for caption text
if (utils.is.empty(player.captions.tracks)) {
@@ -2234,9 +2401,43 @@
// Enable UI
showCaptions();
- if (player.type === 'video') {
- var language = player.config.captions.language.toLowerCase();
+ // Get a track
+ function setCurrentTrack() {
+ // Reset by default
+ player.captions.currentTrack = null;
+
+ // Filter doesn't seem to work for a TextTrackList :-(
+ [].forEach.call(player.captions.tracks, function(track) {
+ if (track.language === player.captions.language.toLowerCase()) {
+ player.captions.currentTrack = track;
+ }
+ });
+ }
+
+ // Get current track
+ setCurrentTrack();
+
+ // If we couldn't get the requested language, revert to default
+ if (!utils.is.track(player.captions.currentTrack)) {
+ var language = player.config.captions.language;
+
+ // Reset to default
+ // We don't update user storage as the selected language could become available
+ player.captions.language = language;
+
+ // Get fallback track
+ setCurrentTrack();
+
+ // If no match, disable captions
+ if (!utils.is.track(player.captions.currentTrack)) {
+ player.toggleCaptions(false);
+ }
+
+ updateSetting('captions');
+ }
+ // Setup HTML5 track rendering
+ if (player.type === 'video') {
// Turn off native caption rendering to avoid double captions
[].forEach.call(player.captions.tracks, function(track) {
// Remove previous bindings (if we've changed source or language)
@@ -2244,29 +2445,21 @@
// Hide captions
track.mode = 'hidden';
-
- // If language matches, it's the selected track
- if (track.language === language) {
- player.captions.currentTrack = track;
- }
});
- // If we couldn't get the requested language, we get the first
- if (!utils.is.track(player.captions.currentTrack)) {
- warn('No language found to match ' + language + ' in tracks');
- player.captions.currentTrack = player.captions.tracks[0];
- }
+ // Check if suported kind
+ var supported = utils.inArray(['captions', 'subtitles'], player.captions.currentTrack.kind);
- // If it's a caption or subtitle, render it
- var track = player.captions.currentTrack;
- if (utils.is.track(track) && utils.inArray(['captions', 'subtitles'], track.kind)) {
- utils.on(track, 'cuechange', setActiveCue);
+ if (utils.is.track(player.captions.currentTrack) && supported) {
+ utils.on(player.captions.currentTrack, '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);
+ if (player.captions.currentTrack.activeCues && player.captions.currentTrack.activeCues.length > 0) {
+ setActiveCue(player.captions.currentTrack);
}
}
+ } else if (player.type === 'vimeo' && player.captions.active) {
+ player.embed.enableTextTrack(player.captions.language);
}
// Set available languages in list
@@ -2276,13 +2469,13 @@
// Get current selected caption language
function getLanguage() {
if (!support.textTracks || utils.is.empty(player.captions.tracks)) {
- return 'None';
+ return player.config.i18n.none;
}
if (player.captions.enabled) {
return player.captions.currentTrack.label;
} else {
- return 'Disabled';
+ return player.config.i18n.disabled;
}
}
@@ -2301,6 +2494,8 @@
} else {
setCaption();
}
+
+ trigger(player.media, 'cuechange');
}
// Set the current caption
@@ -2342,13 +2537,13 @@
// Otherwise fall back to the default config
if (!utils.is.boolean(active)) {
- active = player.config.captions.active;
+ active = player.captions.active;
} else {
- player.config.captions.active = active;
+ player.captions.active = active;
}
if (active) {
- utils.toggleClass(player.elements.container, player.config.classes.captions.active, true);
+ utils.toggleClass(player.elements.container, player.config.classNames.captions.active, true);
utils.toggleState(player.elements.buttons.captions, true);
}
}
@@ -2377,17 +2572,15 @@
// HTML passed as the option
if (utils.is.string(player.config.controls)) {
controls = player.config.controls;
- }
- // A custom function to build controls
- // The function can return a HTMLElement or String
- else if (utils.is.function(player.config.controls)) {
+ } else if (utils.is.function(player.config.controls)) {
+ // A custom function to build controls
+ // The function can return a HTMLElement or String
controls = player.config.controls({
id: player.id,
seektime: player.config.seekTime
});
- }
- // Create controls
- else {
+ } else {
+ // Create controls
controls = createControls({
id: player.id,
seektime: player.config.seekTime,
@@ -2427,13 +2620,21 @@
// Setup tooltips
if (player.config.tooltips.controls) {
- var labels = getElements([player.config.selectors.controls.wrapper, ' ', player.config.selectors.labels, ' .', player.config.classes.hidden].join(''));
+ var labels = getElements(
+ [
+ player.config.selectors.controls.wrapper,
+ ' ',
+ player.config.selectors.labels,
+ ' .',
+ player.config.classNames.hidden
+ ].join('')
+ );
for (var i = labels.length - 1; i >= 0; i--) {
var label = labels[i];
- utils.toggleClass(label, player.config.classes.hidden, false);
- utils.toggleClass(label, player.config.classes.tooltip, true);
+ utils.toggleClass(label, player.config.classNames.hidden, false);
+ utils.toggleClass(label, player.config.classNames.tooltip, true);
}
}
}
@@ -2465,7 +2666,7 @@
// Inputs
player.elements.inputs = {
seek: getElement(player.config.selectors.inputs.seek),
- volume: getElement(player.config.selectors.inputs.volume),
+ volume: getElement(player.config.selectors.inputs.volume)
};
// Display
@@ -2474,12 +2675,14 @@
played: getElement(player.config.selectors.display.played),
volume: getElement(player.config.selectors.display.volume),
duration: getElement(player.config.selectors.display.duration),
- currentTime: getElement(player.config.selectors.display.currentTime),
+ currentTime: getElement(player.config.selectors.display.currentTime)
};
// Seek tooltip
if (utils.is.htmlElement(player.elements.progress)) {
- player.elements.display.seekTooltip = player.elements.progress.querySelector('.' + player.config.classes.tooltip);
+ player.elements.display.seekTooltip = player.elements.progress.querySelector(
+ '.' + player.config.classNames.tooltip
+ );
}
return true;
@@ -2496,7 +2699,11 @@
// Toggle style hook
function toggleStyleHook() {
- utils.toggleClass(player.elements.container, player.config.selectors.container.replace('.', ''), player.supported.full);
+ utils.toggleClass(
+ player.elements.container,
+ player.config.selectors.container.replace('.', ''),
+ player.supported.full
+ );
}
// Toggle native HTML5 media controls
@@ -2534,7 +2741,10 @@
// Set iframe title
// https://github.com/sampotts/plyr/issues/124
if (utils.is.htmlElement(iframe)) {
- var title = utils.is.string(player.config.title) && !utils.is.empty(player.config.title) ? player.config.title : 'video';
+ var title =
+ utils.is.string(player.config.title) && !utils.is.empty(player.config.title)
+ ? player.config.title
+ : 'video';
iframe.setAttribute('title', player.config.i18n.frameTitle.replace('{title}', title));
}
}
@@ -2596,35 +2806,51 @@
if (player.supported.full) {
// Add type class
- utils.toggleClass(player.elements.container, player.config.classes.type.replace('{0}', player.type), true);
+ utils.toggleClass(
+ player.elements.container,
+ player.config.classNames.type.replace('{0}', player.type),
+ true
+ );
// Add video class for embeds
// This will require changes if audio embeds are added
if (utils.inArray(types.embed, player.type)) {
- utils.toggleClass(player.elements.container, player.config.classes.type.replace('{0}', 'video'), true);
+ utils.toggleClass(
+ player.elements.container,
+ player.config.classNames.type.replace('{0}', 'video'),
+ true
+ );
}
// Check for picture-in-picture support
- utils.toggleClass(player.elements.container, player.config.classes.pip.enabled, support.pip && player.type === 'video');
+ utils.toggleClass(
+ player.elements.container,
+ player.config.classNames.pip.enabled,
+ support.pip && player.type === 'video'
+ );
// Check for airplay support
- utils.toggleClass(player.elements.container, player.config.classes.airplay.enabled, support.airplay && utils.inArray(types.html5, player.type));
+ utils.toggleClass(
+ player.elements.container,
+ player.config.classNames.airplay.enabled,
+ support.airplay && utils.inArray(types.html5, player.type)
+ );
// If there's no autoplay attribute, assume the video is stopped and add state class
- utils.toggleClass(player.elements.container, player.config.classes.stopped, player.config.autoplay);
+ utils.toggleClass(player.elements.container, player.config.classNames.stopped, player.config.autoplay);
// Add iOS class
- utils.toggleClass(player.elements.container, player.config.classes.isIos, player.browser.isIos);
+ utils.toggleClass(player.elements.container, player.config.classNames.isIos, player.browser.isIos);
// Add touch class
- utils.toggleClass(player.elements.container, player.config.classes.isTouch, support.touch);
+ utils.toggleClass(player.elements.container, player.config.classNames.isTouch, support.touch);
}
// Inject the player wrapper
if (utils.inArray(['video', 'youtube', 'vimeo'], player.type)) {
// Create the wrapper div
player.elements.wrapper = utils.createElement('div', {
- class: player.config.classes.video
+ class: player.config.classNames.video
});
// Wrap the video in a container
@@ -2640,7 +2866,7 @@
// Setup YouTube/Vimeo
function setupEmbed() {
var mediaId;
- var id = player.type + '-' + Math.floor(Math.random() * (10000));
+ var id = player.type + '-' + Math.floor(Math.random() * 10000);
// Parse IDs from URLs if supplied
switch (player.type) {
@@ -2659,7 +2885,7 @@
}
// Add embed class for responsive
- utils.toggleClass(player.elements.wrapper, player.config.classes.embed, true);
+ utils.toggleClass(player.elements.wrapper, player.config.classNames.embed, true);
if (player.type === 'youtube') {
// Set ID
@@ -2717,8 +2943,8 @@
});
utils.setAttributes(soundCloud, {
- 'src': 'https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/' + mediaId,
- 'id': id
+ src: 'https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/' + mediaId,
+ id: id
});
player.media.appendChild(soundCloud);
@@ -2757,8 +2983,8 @@
player.embed = new window.YT.Player(player.media.id, {
videoId: videoId,
playerVars: {
- autoplay: (player.config.autoplay ? 1 : 0), // Autoplay
- controls: (player.supported.full ? 0 : 1), // Only show controls if not fully supported
+ autoplay: player.config.autoplay ? 1 : 0, // Autoplay
+ controls: player.supported.full ? 0 : 1, // Only show controls if not fully supported
rel: 0, // No related vids
showinfo: 0, // Hide info
iv_load_policy: 3, // Hide annotations
@@ -2768,20 +2994,20 @@
// Tracking for stats
origin: window.location.hostname,
- widget_referrer: window.location.href,
+ widget_referrer: window.location.href
// Captions is flaky on YouTube
- //cc_load_policy: (player.config.captions.active ? 1 : 0),
+ //cc_load_policy: (player.captions.active ? 1 : 0),
//cc_lang_pref: 'en',
},
events: {
- 'onError': function(event) {
+ onError: function(event) {
trigger(player.elements.container, 'error', true, {
code: event.data,
embed: event.target
});
},
- 'onPlaybackQualityChange': function(event) {
+ onPlaybackQualityChange: function(event) {
// Get the instance
var instance = event.target;
@@ -2791,7 +3017,7 @@
// Trigger timeupdate
trigger(player.media, 'qualitychange');
},
- 'onPlaybackRateChange': function(event) {
+ onPlaybackRateChange: function(event) {
// Get the instance
var instance = event.target;
@@ -2801,7 +3027,7 @@
// Trigger timeupdate
trigger(player.media, 'ratechange');
},
- 'onReady': function(event) {
+ onReady: function(event) {
// Get the instance
var instance = event.target;
@@ -2852,7 +3078,10 @@
player.media.buffered = instance.getVideoLoadedFraction();
// Trigger progress only when we actually buffer something
- if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {
+ if (
+ player.media.lastBuffered === null ||
+ player.media.lastBuffered < player.media.buffered
+ ) {
trigger(player.media, 'progress');
}
@@ -2868,7 +3097,7 @@
}
}, 200);
},
- 'onStateChange': function(event) {
+ onStateChange: function(event) {
// Get the instance
var instance = event.target;
@@ -2999,13 +3228,9 @@
// Get captions
player.embed.getTextTracks().then(function(tracks) {
- // tracks = an array of track objects
- setupCaptions(tracks);
+ player.captions.tracks = tracks;
- // TODO: Captions
- if (player.config.captions.active) {
- player.embed.enableTextTrack(player.config.captions.language.toLowerCase());
- }
+ setupCaptions();
});
player.embed.on('cuechange', function(data) {
@@ -3140,9 +3365,9 @@
// Check playing state
function checkPlaying() {
- utils.toggleClass(player.elements.container, player.config.classes.playing, !player.media.paused);
+ utils.toggleClass(player.elements.container, player.config.classNames.playing, !player.media.paused);
- utils.toggleClass(player.elements.container, player.config.classes.stopped, player.media.paused);
+ utils.toggleClass(player.elements.container, player.config.classNames.stopped, player.media.paused);
player.toggleControls(player.media.paused);
}
@@ -3237,7 +3462,9 @@
var container = current.parentNode;
// Set other toggles to be expanded false
- [].forEach.call(menu.querySelectorAll('[aria-controls="' + current.getAttribute('id') + '"]'), function(toggle) {
+ [].forEach.call(menu.querySelectorAll('[aria-controls="' + current.getAttribute('id') + '"]'), function(
+ toggle
+ ) {
toggle.setAttribute('aria-expanded', false);
});
@@ -3253,8 +3480,7 @@
// Restore auto height/width
var restore = function(event) {
// We're only bothered about height and width on the container
- if (event.target !== container ||
- !utils.inArray(['width', 'height'], event.propertyName)) {
+ if (event.target !== container || !utils.inArray(['width', 'height'], event.propertyName)) {
return;
}
@@ -3299,12 +3525,12 @@
}
// Update the volume in storage
- player.core.updateStorage({
+ updateStorage({
volume: player.media.volume
});
// Toggle class if muted
- utils.toggleClass(player.elements.container, player.config.classes.muted, player.media.muted);
+ utils.toggleClass(player.elements.container, player.config.classNames.muted, player.media.muted);
// Update checkbox for mute state
if (player.supported.full && player.elements.buttons.mute) {
@@ -3314,7 +3540,7 @@
// Check if media is loading
function checkLoading(event) {
- player.loading = (event.type === 'waiting');
+ player.loading = event.type === 'waiting';
// Clear timer
clearTimeout(timers.loading);
@@ -3322,11 +3548,11 @@
// Timer to prevent flicker when seeking
timers.loading = setTimeout(function() {
// Toggle container class hook
- utils.toggleClass(player.elements.container, player.config.classes.loading, player.loading);
+ utils.toggleClass(player.elements.container, player.config.classNames.loading, player.loading);
// Show controls if loading, hide if done
player.toggleControls(player.loading);
- }, (player.loading ? 250 : 0));
+ }, player.loading ? 250 : 0);
}
// Update <progress> elements
@@ -3344,10 +3570,6 @@
// Video playing
case 'timeupdate':
case 'seeking':
- if (player.elements.controls.pressed) {
- return;
- }
-
value = utils.getPercentage(player.media.currentTime, duration);
// Set seek range value only if it's a 'natural' time event
@@ -3357,7 +3579,7 @@
break;
- // Check buffer status
+ // Check buffer status
case 'playing':
case 'progress':
progress = player.elements.display.buffer;
@@ -3369,7 +3591,7 @@
return utils.getPercentage(buffered.end(0), duration);
} else if (utils.is.number(buffered)) {
// YouTube returns between 0 and 1
- return (buffered * 100);
+ return buffered * 100;
}
return 0;
@@ -3433,11 +3655,11 @@
var secs = parseInt(time % 60);
var mins = parseInt((time / 60) % 60);
- var hours = parseInt(((time / 60) / 60) % 60);
+ var hours = parseInt((time / 60 / 60) % 60);
var duration = player.getDuration();
// Do we need to display hours?
- var displayHours = (parseInt(((duration / 60) / 60) % 60) > 0);
+ var displayHours = parseInt((duration / 60 / 60) % 60) > 0;
// Ensure it's two digits. For example, 03 rather than 3.
secs = ('0' + secs).slice(-2);
@@ -3516,18 +3738,23 @@
var duration = player.getDuration();
// Bail if setting not true
- if (!player.config.tooltips.seek || !utils.is.htmlElement(player.elements.inputs.seek) || !utils.is.htmlElement(player.elements.display.seekTooltip) || duration === 0) {
+ if (
+ !player.config.tooltips.seek ||
+ !utils.is.htmlElement(player.elements.inputs.seek) ||
+ !utils.is.htmlElement(player.elements.display.seekTooltip) ||
+ duration === 0
+ ) {
return;
}
// Calculate percentage
var clientRect = player.elements.inputs.seek.getBoundingClientRect();
var percent = 0;
- var visible = player.config.classes.tooltip + '--visible';
+ var visible = player.config.classNames.tooltip + '--visible';
// Determine percentage, if already visible
if (utils.is.event(event)) {
- percent = ((100 / clientRect.width) * (event.pageX - clientRect.left));
+ percent = 100 / clientRect.width * (event.pageX - clientRect.left);
} else {
if (utils.hasClass(player.elements.display.seekTooltip, visible)) {
percent = player.elements.display.seekTooltip.style.left.replace('%', '');
@@ -3544,7 +3771,7 @@
}
// Display the time a click would seek to
- updateTimeDisplay(((duration / 100) * percent), player.elements.display.seekTooltip);
+ updateTimeDisplay(duration / 100 * percent, player.elements.display.seekTooltip);
// Set position
player.elements.display.seekTooltip.style.left = percent + '%';
@@ -3552,7 +3779,7 @@
// Show/hide the tooltip
// If the event is a moues in/out and percentage is inside bounds
if (utils.is.event(event) && utils.inArray(['mouseenter', 'mouseleave'], event.type)) {
- utils.toggleClass(player.elements.display.seekTooltip, visible, (event.type === 'mouseenter'));
+ utils.toggleClass(player.elements.display.seekTooltip, visible, event.type === 'mouseenter');
}
}
@@ -3621,7 +3848,7 @@
}
// Inject the new element
- utils.prependChild(player.elements.container, player.media);
+ player.elements.container.appendChild(player.media);
// Autoplay the new source?
if (utils.is.boolean(source.autoplay)) {
@@ -3651,8 +3878,16 @@
}
// Restore class hooks
- utils.toggleClass(player.elements.container, player.config.classes.fullscreen.active, player.fullscreen.active);
- utils.toggleClass(player.elements.container, player.config.classes.captions.active, player.captions.enabled);
+ utils.toggleClass(
+ player.elements.container,
+ player.config.classNames.fullscreen.active,
+ player.fullscreen.active
+ );
+ utils.toggleClass(
+ player.elements.container,
+ player.config.classNames.captions.active,
+ player.captions.enabled
+ );
toggleStyleHook();
// Set new sources for html5
@@ -3675,7 +3910,10 @@
}
// If HTML5 or embed but not fully supported, setupInterface and call ready now
- if (utils.inArray(types.html5, player.type) || (utils.inArray(types.embed, player.type) && !player.supported.full)) {
+ if (
+ utils.inArray(types.html5, player.type) ||
+ (utils.inArray(types.embed, player.type) && !player.supported.full)
+ ) {
// Setup interface
setupInterface();
@@ -3692,7 +3930,7 @@
// Listen for control events
function listeners() {
// IE doesn't support input event, so we fallback to change
- var inputEvent = (player.browser.isIE ? 'change' : 'input');
+ var inputEvent = player.browser.isIE ? 'change' : 'input';
// Click play/pause helper
function togglePlay() {
@@ -3704,7 +3942,7 @@
// Setup focus and tab focus
if (target) {
- var hadTabFocus = utils.hasClass(trigger, player.config.classes.tabFocus);
+ var hadTabFocus = utils.hasClass(trigger, player.config.classNames.tabFocus);
setTimeout(function() {
if (utils.is.htmlElement(target)) {
@@ -3712,8 +3950,8 @@
}
if (hadTabFocus) {
- utils.toggleClass(trigger, player.config.classes.tabFocus, false);
- utils.toggleClass(target, player.config.classes.tabFocus, true);
+ utils.toggleClass(trigger, player.config.classNames.tabFocus, false);
+ utils.toggleClass(target, player.config.classNames.tabFocus, true);
}
}, 100);
}
@@ -3726,10 +3964,14 @@
// Detect tab focus
function checkTabFocus(focused) {
- utils.toggleClass(getElements('.' + player.config.classes.tabFocus), player.config.classes.tabFocus, false);
+ utils.toggleClass(
+ getElements('.' + player.config.classNames.tabFocus),
+ player.config.classNames.tabFocus,
+ false
+ );
if (player.elements.container.contains(focused)) {
- utils.toggleClass(focused, player.config.classes.tabFocus, true);
+ utils.toggleClass(focused, player.config.classNames.tabFocus, true);
}
}
@@ -3739,18 +3981,27 @@
// Handle global presses
if (player.config.keyboard.global) {
- utils.on(window, 'keydown keyup', function(event) {
- var code = getKeyCode(event);
- var focused = utils.getFocusElement();
- var allowed = [48, 49, 50, 51, 52, 53, 54, 56, 57, 75, 77, 70, 67, 73, 76, 79];
-
- // Only handle global key press if 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 (utils.inArray(allowed, code) && (!utils.is.htmlElement(focused) || !utils.matches(focused, player.config.selectors.editable))) {
- handleKey(event);
- }
- }, false);
+ utils.on(
+ window,
+ 'keydown keyup',
+ function(event) {
+ var code = getKeyCode(event);
+ var focused = utils.getFocusElement();
+ var allowed = [48, 49, 50, 51, 52, 53, 54, 56, 57, 75, 77, 70, 67, 73, 76, 79];
+
+ // Only handle global key press if 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 (
+ utils.inArray(allowed, code) &&
+ (!utils.is.htmlElement(focused) ||
+ !utils.matches(focused, player.config.selectors.editable))
+ ) {
+ handleKey(event);
+ }
+ },
+ false
+ );
}
// Handle presses on focused
@@ -3779,14 +4030,36 @@
}
// Divide the max duration into 10th's and times by the number value
- player.seek((duration / 10) * (code - 48));
+ player.seek(duration / 10 * (code - 48));
}
// Handle the key on keydown
// Reset on keyup
if (pressed) {
// Which keycodes should we prevent default
- var preventDefault = [48, 49, 50, 51, 52, 53, 54, 56, 57, 32, 75, 38, 40, 77, 39, 37, 70, 67, 73, 76, 79];
+ var preventDefault = [
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 56,
+ 57,
+ 32,
+ 75,
+ 38,
+ 40,
+ 77,
+ 39,
+ 37,
+ 70,
+ 67,
+ 73,
+ 76,
+ 79
+ ];
var checkFocus = [38, 40];
if (utils.inArray(checkFocus, code)) {
@@ -3904,7 +4177,11 @@
});
utils.on(document.body, 'click', function() {
- utils.toggleClass(getElement('.' + player.config.classes.tabFocus), player.config.classes.tabFocus, false);
+ utils.toggleClass(
+ getElement('.' + player.config.classNames.tabFocus),
+ player.config.classNames.tabFocus,
+ false
+ );
});
for (var button in player.elements.buttons) {
@@ -3958,7 +4235,9 @@
});
// Fullscreen
- utils.proxy(player.elements.buttons.fullscreen, 'click', player.config.listeners.fullscreen, function(event) {
+ utils.proxy(player.elements.buttons.fullscreen, 'click', player.config.listeners.fullscreen, function(
+ event
+ ) {
player.toggleFullscreen(event);
});
@@ -3986,27 +4265,23 @@
// Settings - Language
if (utils.matches(event.target, player.config.selectors.inputs.language)) {
handlerProxy.call(this, event, player.config.listeners.language, function() {
+ player.toggleCaptions(true);
+
player.setLanguage(event.target.value.toLowerCase());
});
- }
-
- // Settings - Quality
- else if (utils.matches(event.target, player.config.selectors.inputs.quality)) {
+ } else if (utils.matches(event.target, player.config.selectors.inputs.quality)) {
+ // Settings - Quality
handlerProxy.call(this, event, player.config.listeners.quality, function() {
player.setQuality(event.target.value);
});
- }
-
- // Settings - Speed
- else if (utils.matches(event.target, player.config.selectors.inputs.speed)) {
+ } else if (utils.matches(event.target, player.config.selectors.inputs.speed)) {
+ // Settings - Speed
handlerProxy.call(this, event, player.config.listeners.speed, function() {
player.setSpeed(parseFloat(event.target.value));
});
- }
-
- // Settings - Looping
- // TODO: use toggle buttons
- else if (utils.matches(event.target, player.config.selectors.buttons.loop)) {
+ } else if (utils.matches(event.target, player.config.selectors.buttons.loop)) {
+ // Settings - Looping
+ // TODO: use toggle buttons
handlerProxy.call(this, event, player.config.listeners.loop, function() {
// TODO: This should be done in the method itself I think
// var value = event.target.getAttribute('data-loop__value') || event.target.getAttribute('data-loop__type');
@@ -4023,7 +4298,7 @@
// Seek
utils.proxy(player.elements.inputs.seek, inputEvent, player.config.listeners.seek, function(event) {
var duration = player.getDuration();
- player.seek((event.target.value / event.target.max) * duration);
+ player.seek(event.target.value / event.target.max * duration);
});
// Seek
@@ -4037,9 +4312,13 @@
// Toggle controls visibility based on mouse movement
if (player.config.hideControls) {
// Toggle controls on mouse events and entering fullscreen
- utils.on(player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen', function(event) {
- player.toggleControls(event);
- });
+ utils.on(
+ player.elements.container,
+ 'mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen',
+ function(event) {
+ player.toggleControls(event);
+ }
+ );
// Watch for cursor over controls so they don't hide when trying to interact
utils.on(player.elements.controls, 'mouseenter mouseleave', function(event) {
@@ -4047,53 +4326,66 @@
});
// Watch for cursor over controls so they don't hide when trying to interact
- utils.on(player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function(event) {
+ utils.on(player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function(
+ event
+ ) {
player.elements.controls.pressed = utils.inArray(['mousedown', 'touchstart'], event.type);
});
// Focus in/out on controls
// TODO: Check we need capture here
- utils.on(player.elements.controls, 'focus blur', function(event) {
- player.toggleControls(event);
- }, true, true);
+ utils.on(
+ player.elements.controls,
+ 'focus blur',
+ function(event) {
+ player.toggleControls(event);
+ },
+ true,
+ true
+ );
}
// Mouse wheel for volume
- utils.proxy(player.elements.inputs.volume, 'wheel', player.config.listeners.volume, function(event) {
- // Detect "natural" scroll - suppored on OS X Safari only
- // Other browsers on OS X will be inverted until support improves
- var inverted = event.webkitDirectionInvertedFromDevice;
- var step = (1 / 5);
- var direction = 0;
-
- // Scroll down (or up on natural) to decrease
- if (event.deltaY < 0 || event.deltaX > 0) {
- if (inverted) {
- player.decreaseVolume(step);
- direction = -1;
- } else {
- player.increaseVolume(step);
- direction = 1;
+ utils.proxy(
+ player.elements.inputs.volume,
+ 'wheel',
+ player.config.listeners.volume,
+ function(event) {
+ // Detect "natural" scroll - suppored on OS X Safari only
+ // Other browsers on OS X will be inverted until support improves
+ var inverted = event.webkitDirectionInvertedFromDevice;
+ var step = 1 / 50;
+ var direction = 0;
+
+ // Scroll down (or up on natural) to decrease
+ if (event.deltaY < 0 || event.deltaX > 0) {
+ if (inverted) {
+ player.decreaseVolume(step);
+ direction = -1;
+ } else {
+ player.increaseVolume(step);
+ direction = 1;
+ }
}
- }
- // Scroll up (or down on natural) to increase
- if (event.deltaY > 0 || event.deltaX < 0) {
- if (inverted) {
- player.increaseVolume(step);
- direction = 1;
- } else {
- player.decreaseVolume(step);
- direction = -1;
+ // Scroll up (or down on natural) to increase
+ if (event.deltaY > 0 || event.deltaX < 0) {
+ if (inverted) {
+ player.increaseVolume(step);
+ direction = 1;
+ } else {
+ player.decreaseVolume(step);
+ direction = -1;
+ }
}
- }
- // Don't break page scrolling at max and min
- if ((direction === 1 && player.media.volume < 1) ||
- (direction === -1 && player.media.volume > 0)) {
- event.preventDefault();
- }
- }, false);
+ // Don't break page scrolling at max and min
+ if ((direction === 1 && player.media.volume < 1) || (direction === -1 && player.media.volume > 0)) {
+ event.preventDefault();
+ }
+ },
+ false
+ );
// Handle user exiting fullscreen by escaping etc
if (support.fullscreen) {
@@ -4143,7 +4435,7 @@
// Click video
if (player.config.clickToPlay && player.type !== 'audio') {
// Re-fetch the wrapper
- var wrapper = getElement('.' + player.config.classes.video);
+ var wrapper = getElement('.' + player.config.classNames.video);
// Bail if there's no wrapper (this should never happen)
if (!wrapper) {
@@ -4173,9 +4465,14 @@
// Disable right click
if (player.config.disableContextMenu) {
- utils.on(player.media, 'contextmenu', function(event) {
- event.preventDefault();
- }, false);
+ utils.on(
+ player.media,
+ 'contextmenu',
+ function(event) {
+ event.preventDefault();
+ },
+ false
+ );
}
// Speed change
@@ -4184,7 +4481,7 @@
player.speed.selected = player.media.playbackRate;
// Update UI
- setSelectedSetting('speed');
+ updateSetting('speed');
// Save speed to localStorage
updateStorage({
@@ -4198,7 +4495,7 @@
player.quality.selected = player.media.quality;
// Update UI
- setSelectedSetting('quality');
+ updateSetting('quality');
// Save speed to localStorage
updateStorage({
@@ -4206,6 +4503,25 @@
});
});
+ // Caption language change
+ utils.on(player.media, 'captionchange', function() {
+ // Save speed to localStorage
+ updateStorage({
+ language: player.captions.language
+ });
+ });
+
+ // Captions toggle
+ utils.on(player.media, 'captionsenabled captionsdisabled', function() {
+ // Update UI
+ updateSetting('captions');
+
+ // Save speed to localStorage
+ updateStorage({
+ captions: player.captions.enabled
+ });
+ });
+
// Proxy events to container
// Bubble up key events for Edge
utils.on(player.media, player.config.events.concat(['keyup', 'keydown']).join(' '), function(event) {
@@ -4445,7 +4761,10 @@
// Setup interface
// If embed but not fully supported, setupInterface (to avoid flash of controls) and call ready now
- if (utils.inArray(types.html5, player.type) || (utils.inArray(types.embed, player.type) && !player.supported.full)) {
+ if (
+ utils.inArray(types.html5, player.type) ||
+ (utils.inArray(types.embed, player.type) && !player.supported.full)
+ ) {
// Setup UI
setupInterface();
@@ -4468,7 +4787,7 @@
updateTimeDisplay: updateTimeDisplay,
updateSeekDisplay: updateSeekDisplay,
updateSource: updateSource,
- updateStorage: updateStorage,
+ toggleMenu: toggleMenu,
timers: timers,
support: support,
@@ -4999,7 +5318,12 @@
// If the method is called without parameter, toggle based on current value
if (!utils.is.boolean(show)) {
- show = (player.elements.container.className.indexOf(player.config.classes.captions.active) === -1);
+ show = player.elements.container.className.indexOf(player.config.classNames.captions.active) === -1;
+ }
+
+ // Nothing to change...
+ if (player.captions.enabled === show) {
+ return player;
}
// Set global
@@ -5009,16 +5333,11 @@
utils.toggleState(player.elements.buttons.captions, player.captions.enabled);
// Add class hook
- utils.toggleClass(player.elements.container, player.config.classes.captions.active, player.captions.enabled);
+ utils.toggleClass(player.elements.container, player.config.classNames.captions.active, player.captions.enabled);
// Trigger an event
player.core.trigger(player.media, player.captions.enabled ? 'captionsenabled' : 'captionsdisabled');
- // Save captions state to localStorage
- player.core.updateStorage({
- captions: player.captions.enabled
- });
-
// Allow chaining
return player;
};
@@ -5028,13 +5347,27 @@
var player = this;
// Nothing specified
- if (!utils.is.string(language)) {
- player.core.warn('Language is required');
- return;
+ if (utils.is.empty(language)) {
+ player.toggleCaptions(false);
+ return player;
}
+ // Normalize
+ language = language.toLowerCase();
+
+ // If nothing to change, bail
+ if (player.captions.language === language) {
+ return player;
+ }
+
+ // Reset UI
+ player.toggleCaptions(true);
+
// Update config
- player.config.captions.language = language.toLowerCase();
+ player.captions.language = language;
+
+ // Trigger an event
+ player.core.trigger(player.media, 'captionchange');
// Clear caption
player.core.setCaption();
@@ -5048,7 +5381,7 @@
// Get current language
Plyr.prototype.getLanguage = function() {
- return this.config.captions.language;
+ return this.captions.language;
};
// Toggle fullscreen
@@ -5103,7 +5436,11 @@
}
// Set class hook
- utils.toggleClass(player.elements.container, player.config.classes.fullscreen.active, player.fullscreen.active);
+ utils.toggleClass(
+ player.elements.container,
+ player.config.classNames.fullscreen.active,
+ player.fullscreen.active
+ );
// Set button state
if (player.elements.buttons && player.elements.buttons.fullscreen) {
@@ -5178,13 +5515,13 @@
var delay = 0;
var show = toggle;
var isEnterFullscreen = false;
- var loading = utils.hasClass(player.elements.container, player.config.classes.loading);
+ var loading = utils.hasClass(player.elements.container, player.config.classNames.loading);
// Default to false if no boolean
if (!utils.is.boolean(toggle)) {
if (utils.is.event(toggle)) {
// Is the enter fullscreen event
- isEnterFullscreen = (toggle.type === 'enterfullscreen');
+ isEnterFullscreen = toggle.type === 'enterfullscreen';
// Whether to show controls
show = utils.inArray(['mousemove', 'touchstart', 'mouseenter', 'focus'], toggle.type);
@@ -5199,7 +5536,7 @@
delay = 3000;
}
} else {
- show = utils.hasClass(player.elements.container, player.config.classes.hideControls);
+ show = utils.hasClass(player.elements.container, player.config.classNames.hideControls);
}
}
@@ -5209,7 +5546,7 @@
// If the mouse is not over the controls, set a timeout to hide them
if (show || player.media.paused || loading) {
// Check if controls toggled
- var toggled = utils.toggleClass(player.elements.container, player.config.classes.hideControls, false);
+ var toggled = utils.toggleClass(player.elements.container, player.config.classNames.hideControls, false);
// Trigger event
if (toggled) {
@@ -5237,11 +5574,12 @@
}
// Check if controls toggled
- var toggled = utils.toggleClass(player.elements.container, player.config.classes.hideControls, true);
+ var toggled = utils.toggleClass(player.elements.container, player.config.classNames.hideControls, true);
- // Trigger event
+ // Trigger event and close menu
if (toggled) {
player.core.trigger(player.media, 'controlshidden');
+ player.core.toggleMenu(false);
}
}, delay);
}
@@ -5370,8 +5708,8 @@
}
// If custom duration is funky, use regular duration
- return (isNaN(duration) ? mediaDuration : duration);
+ return isNaN(duration) ? mediaDuration : duration;
};
return Plyr;
-}); \ No newline at end of file
+}));
diff --git a/src/less/plyr.less b/src/less/plyr.less
index 16d8fa25..01fbc7e7 100644
--- a/src/less/plyr.less
+++ b/src/less/plyr.less
@@ -9,7 +9,9 @@
// Animation
// ---------------------------------------
@keyframes plyr-progress {
- to { background-position: @plyr-progress-loading-size 0; }
+ to {
+ background-position: @plyr-progress-loading-size 0;
+ }
}
@keyframes plyr-popup {
from {
@@ -46,7 +48,10 @@
& when (@plyr-touch-action = true) {
// Fix 300ms delay
- a, button, input, label {
+ a,
+ button,
+ input,
+ label {
touch-action: manipulation;
}
}
@@ -232,19 +237,20 @@
bottom: 0;
left: 0;
width: 100%;
- padding: (@plyr-control-spacing * 2);
+ padding: @plyr-control-spacing;
transform: translateY(-(@plyr-control-spacing * 4));
transition: transform .3s ease;
color: @plyr-captions-color;
- font-size: @plyr-font-size-captions-base;
+ font-size: @plyr-font-size-captions-small;
text-align: center;
span {
border-radius: 2px;
- padding: floor(@plyr-control-spacing / 3) @plyr-control-spacing;
+ padding: .2em .5em;
background: @plyr-captions-bg;
box-decoration-break: clone;
- line-height: 150%;
+ line-height: 170%;
+ white-space: pre-wrap;
// Firefox adds a <div> when using getCueAsHTML()
div {
@@ -255,6 +261,10 @@
display: none;
}
+ @media (min-width: @plyr-bp-screen-sm) {
+ padding: (@plyr-control-spacing * 2);
+ font-size: @plyr-font-size-captions-base;
+ }
@media (min-width: @plyr-bp-screen-md) {
font-size: @plyr-font-size-captions-medium;
}
@@ -335,9 +345,7 @@
background: transparent;
border-radius: 3px;
cursor: pointer;
- transition: background .3s ease,
- color .3s ease,
- opacity .3s ease;
+ transition: background .3s ease, color .3s ease, opacity .3s ease;
color: inherit;
svg {
@@ -346,7 +354,9 @@
display: block;
fill: currentColor;
pointer-events: none;
+ filter: drop-shadow(0 1px 1px fade(#000, 15%));
}
+
// Hide toggle icons by default
.icon--exit-fullscreen,
.icon--muted,
@@ -367,8 +377,8 @@
right: 0;
bottom: 0;
z-index: 2;
- 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, 70%));
+ padding: (@plyr-control-spacing * 3.5) @plyr-control-spacing @plyr-control-spacing;
+ background: linear-gradient(fade(@plyr-video-controls-bg, 0%), fade(@plyr-video-controls-bg, 85%));
border-bottom-left-radius: inherit;
border-bottom-right-radius: inherit;
color: @plyr-video-control-color;
@@ -521,8 +531,7 @@
> div {
overflow: hidden;
- transition: height .35s cubic-bezier(.4, 0, .2, 1),
- width .35s cubic-bezier(.4, 0, .2, 1);
+ transition: height .35s cubic-bezier(.4, 0, .2, 1), width .35s cubic-bezier(.4, 0, .2, 1);
}
// Arrow
@@ -719,7 +728,6 @@
}
}
-
// Playback progress
// --------------------------------------------------------------
// <progress> element
@@ -763,7 +771,7 @@
margin: -(@plyr-range-track-height / 2) 0 0;
padding: 0;
vertical-align: top;
-
+
border: none;
border-radius: 100px;
@@ -830,6 +838,7 @@
.plyr--video .plyr__progress--buffer,
.plyr--video .plyr__volume--display {
background: @plyr-video-range-track-bg;
+ box-shadow: 0 1px 1px fade(#000, 15%);
}
.plyr--video .plyr__progress--buffer {
color: @plyr-video-progress-buffered-bg;
@@ -855,7 +864,8 @@
@plyr-progress-loading-bg 50%,
@plyr-progress-loading-bg 75%,
transparent 75%,
- transparent);
+ transparent
+ );
color: transparent;
}
.plyr--video.plyr--loading .plyr__progress--buffer {
@@ -886,6 +896,9 @@
margin-right: @plyr-control-spacing;
}
}
+.plyr--video .plyr__time {
+ text-shadow: 0 1px 1px fade(#000, 15%);
+}
// Volume
// --------------------------------------------------------------
diff --git a/src/less/variables.less b/src/less/variables.less
index dd6c9e0f..fe6e3e39 100644
--- a/src/less/variables.less
+++ b/src/less/variables.less
@@ -4,76 +4,77 @@
// ==========================================================================
// Settings
-@plyr-border-box: true;
-@plyr-touch-action: true;
-@plyr-sr-only-important: true;
+@plyr-border-box: true;
+@plyr-touch-action: true;
+@plyr-sr-only-important: true;
// Colors
-@plyr-color-main: #1aafff;
+@plyr-color-main: #1aafff;
// Font
-@plyr-font-family: inherit; //Avenir, 'Avenir Next', 'Helvetica Neue', 'Segoe UI', Helvetica, Arial, sans-serif;
-@plyr-font-size-small: 14px;
-@plyr-font-size-base: 16px;
-@plyr-font-weight-normal: 500;
-@plyr-font-weight-bold: 600;
+@plyr-font-family: inherit; //Avenir, 'Avenir Next', 'Helvetica Neue', 'Segoe UI', Helvetica, Arial, sans-serif;
+@plyr-font-size-small: 14px;
+@plyr-font-size-base: 16px;
+@plyr-font-weight-normal: 500;
+@plyr-font-weight-bold: 600;
// Captions
-@plyr-captions-bg: fade(#343f4a, 80%);
-@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);
-@plyr-font-size-captions-large: (@plyr-font-size-base * 2);
+@plyr-captions-bg: fade(#343f4a, 80%);
+@plyr-captions-color: #fff;
+@plyr-font-size-captions-base: @plyr-font-size-base;
+@plyr-font-size-captions-small: @plyr-font-size-small;
+@plyr-font-size-captions-medium: ceil(@plyr-font-size-base * 1.25);
+@plyr-font-size-captions-large: (@plyr-font-size-base * 1.5);
// Controls
-@plyr-control-icon-size: 18px;
-@plyr-control-spacing: 10px;
-@plyr-control-padding: (@plyr-control-spacing * .7);
-@plyr-video-controls-bg: #343f4a;
-@plyr-video-control-color: #fff;
-@plyr-video-control-color-hover: #fff;
-@plyr-video-control-bg-hover: @plyr-color-main;
-@plyr-audio-controls-bg: #fff;
-@plyr-audio-controls-border: 1px solid #dbe3e8;
-@plyr-audio-control-color: #565d64;
-@plyr-audio-control-color-hover: #fff;
-@plyr-audio-control-bg-hover: @plyr-color-main;
+@plyr-control-icon-size: 18px;
+@plyr-control-spacing: 10px;
+@plyr-control-padding: (@plyr-control-spacing * .7);
+@plyr-video-controls-bg: #343f4a;
+@plyr-video-control-color: #fff;
+@plyr-video-control-color-hover: #fff;
+@plyr-video-control-bg-hover: @plyr-color-main;
+@plyr-audio-controls-bg: #fff;
+@plyr-audio-controls-border: 1px solid #dbe3e8;
+@plyr-audio-control-color: #565d64;
+@plyr-audio-control-color-hover: #fff;
+@plyr-audio-control-bg-hover: @plyr-color-main;
// Tooltips
-@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;
+@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;
+@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%);
-@plyr-video-progress-bg: fade(#fff, 25%);
-@plyr-video-progress-buffered-bg: @plyr-video-progress-bg;
-@plyr-audio-progress-bg: fade(#c6d6db, 66%);
-@plyr-audio-progress-buffered-bg: @plyr-audio-progress-bg;
+@plyr-progress-loading-size: 25px;
+@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%);
+@plyr-audio-progress-buffered-bg: @plyr-audio-progress-bg;
// Range sliders
-@plyr-range-track-height: 8px;
-@plyr-range-thumb-height: floor(@plyr-range-track-height * 2);
-@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(#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;
-@plyr-video-range-track-bg: @plyr-video-progress-buffered-bg;
-@plyr-audio-range-track-bg: @plyr-audio-progress-buffered-bg;
-@plyr-range-selected-bg: @plyr-color-main;
+@plyr-range-track-height: 8px;
+@plyr-range-thumb-height: floor(@plyr-range-track-height * 2);
+@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(#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;
+@plyr-video-range-track-bg: @plyr-video-progress-buffered-bg;
+@plyr-audio-range-track-bg: @plyr-audio-progress-buffered-bg;
+@plyr-range-selected-bg: @plyr-color-main;
// Breakpoints
-@plyr-bp-screen-sm: 480px;
-@plyr-bp-screen-md: 768px;
-@plyr-bp-screen-lg: 1024px; \ No newline at end of file
+@plyr-bp-screen-sm: 480px;
+@plyr-bp-screen-md: 768px;
+@plyr-bp-screen-lg: 1024px;