diff options
author | Sam Potts <me@sampotts.me> | 2017-04-25 18:37:31 +1000 |
---|---|---|
committer | Sam Potts <me@sampotts.me> | 2017-04-25 18:37:31 +1000 |
commit | 1960d35d8b8319614adb4a7852a9614dfa8c1eb1 (patch) | |
tree | ce5d6cce58149fb7942c44c616ab47e3560d8816 | |
parent | bbe4b7e565f6fd8acc946065934bdeae8d0dfc0e (diff) | |
download | plyr-1960d35d8b8319614adb4a7852a9614dfa8c1eb1.tar.lz plyr-1960d35d8b8319614adb4a7852a9614dfa8c1eb1.tar.xz plyr-1960d35d8b8319614adb4a7852a9614dfa8c1eb1.zip |
More work on menus and tidy up
-rw-r--r-- | dist/plyr.css | 2 | ||||
-rw-r--r-- | dist/plyr.js | 4 | ||||
-rw-r--r-- | notes.md | 7 | ||||
-rw-r--r-- | src/js/plyr.js | 887 | ||||
-rw-r--r-- | src/less/plyr.less | 5 |
5 files changed, 320 insertions, 585 deletions
diff --git a/dist/plyr.css b/dist/plyr.css index 74730c03..2fd4001b 100644 --- a/dist/plyr.css +++ b/dist/plyr.css @@ -1 +1 @@ -.plyr input[type=range]:focus,.plyr:focus{outline:0}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{from{transform:translateY(10px);opacity:.5}to{transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;font-weight:500;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.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(0,0,0,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-embed,.plyr__video-wrapper{border-radius:inherit;overflow:hidden;z-index:0}.plyr__video-wrapper{position:relative;background:#000}.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(0,0,0,.6);-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:150%}.plyr__captions span:empty{display:none}@media (min-width:768px){.plyr__captions{font-size:24px}}.plyr--captions-active .plyr__captions{display:block}.plyr--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(0,0,0,0),rgba(0,0,0,.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:#3498db;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:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor;pointer-events:none}.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=pip],.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.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__container.is-resizing,.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu .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:-5px;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::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__menu__container ul{margin:0;padding: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:5px 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:5px;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;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__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 +.plyr input[type=range]:focus,.plyr:focus{outline:0}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{from{transform:translateY(10px);opacity:.5}to{transform:translateY(0);opacity:1}}.plyr{position:relative;max-width:100%;min-width:200px;font-family:Avenir,'Avenir Next','Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;font-weight:500;direction:ltr}.plyr,.plyr *,.plyr ::after,.plyr ::before{box-sizing:border-box}.plyr a,.plyr button,.plyr input,.plyr label{-ms-touch-action:manipulation;touch-action:manipulation}.plyr [aria-hidden=true]{display:none}.plyr audio,.plyr video{width:100%;height:auto;vertical-align:middle;border-radius:inherit}.plyr input[type=range]{display:block;height:20px;width:100%;margin:0;padding:0;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border:none;background:0 0}.plyr input[type=range]::-webkit-slider-runnable-track{height:8px;background:0 0;border:0;border-radius:4px;-webkit-user-select:none;user-select:none}.plyr input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-4px;position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.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(0,0,0,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box}.plyr input[type=range]::-ms-track{height:8px;background:0 0;border:0;color:transparent}.plyr input[type=range]::-ms-fill-upper{height:8px;background:0 0;border:0;border-radius:4px;-ms-user-select:none;user-select:none}.plyr input[type=range]::-ms-fill-lower{height:8px;border:0;border-radius:4px;-ms-user-select:none;user-select:none;background:#3498db}.plyr input[type=range]::-ms-thumb{position:relative;height:16px;width:16px;background:#fff;border:2px solid transparent;border-radius:100%;transition:background .2s ease,border .2s ease,transform .2s ease;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(52,63,74,.2);box-sizing:border-box;margin-top:0}.plyr input[type=range]::-ms-tooltip{display:none}.plyr input[type=range]::-moz-focus-outer{border:0}.plyr input[type=range].tab-focus:focus{outline-offset:3px}.plyr input[type=range]:active::-webkit-slider-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-moz-range-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr input[type=range]:active::-ms-thumb{background:#3498db;border-color:#fff;transform:scale(1.25)}.plyr--video input[type=range].tab-focus:focus{outline:rgba(255,255,255,.5) dotted 1px}.plyr--audio input[type=range].tab-focus:focus{outline:rgba(86,93,100,.5) dotted 1px}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute!important;padding:0!important;border:0!important;height:1px!important;width:1px!important}.plyr__video-embed,.plyr__video-wrapper{border-radius:inherit;overflow:hidden;z-index:0}.plyr__video-wrapper{position:relative;background:#000}.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(0,0,0,.6);-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(0,0,0,0),rgba(0,0,0,.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:#3498db;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:#3498db;color:#fff}.plyr__play-large{display:none;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);padding:10px;background:#3498db;border:4px solid currentColor;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;transition:all .3s ease}.plyr__play-large svg{position:relative;left:2px;width:20px;height:20px;display:block;fill:currentColor;pointer-events:none}.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=pip],.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.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__container.is-resizing,.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu .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:-5px;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::after{content:"";position:absolute;top:100%;right:15px;height:0;width:0;border:6px solid transparent;border-top-color:rgba(52,63,74,.9)}.plyr__menu__container ul{margin:0;padding: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:5px 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:5px;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;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;border-radius:100px}.plyr__progress--buffer::-webkit-progress-bar,.plyr__progress--played::-webkit-progress-bar,.plyr__volume--display::-webkit-progress-bar{background:0 0}.plyr__progress--buffer::-webkit-progress-value,.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-moz-progress-bar,.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:8px}.plyr__progress--buffer::-ms-fill,.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{border-radius:100px}.plyr__progress--played,.plyr__volume--display{z-index:1;color:#3498db;background:0 0;transition:none}.plyr__progress--played::-webkit-progress-value,.plyr__volume--display::-webkit-progress-value{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-moz-progress-bar,.plyr__volume--display::-moz-progress-bar{min-width:8px;max-width:99%;border-top-right-radius:0;border-bottom-right-radius:0;transition:none}.plyr__progress--played::-ms-fill,.plyr__volume--display::-ms-fill{display:none}.plyr__progress--buffer::-webkit-progress-value{transition:width .2s ease}.plyr__progress--buffer::-moz-progress-bar{transition:width .2s ease}.plyr__progress--buffer::-ms-fill{transition:width .2s ease}.plyr--video .plyr__progress--buffer,.plyr--video .plyr__volume--display{background:rgba(255,255,255,.25)}.plyr--video .plyr__progress--buffer{color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress--buffer,.plyr--audio .plyr__volume--display{background:rgba(198,214,219,.66)}.plyr--audio .plyr__progress--buffer{color:rgba(198,214,219,.66)}.plyr--loading .plyr__progress--buffer{animation:plyr-progress 1s linear infinite;background-size:25px 25px;background-repeat:repeat-x;background-image:linear-gradient(-45deg,rgba(52,63,74,.2) 25%,transparent 25%,transparent 50%,rgba(52,63,74,.2) 50%,rgba(52,63,74,.2) 75%,transparent 75%,transparent);color:transparent}.plyr--video.plyr--loading .plyr__progress--buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress--buffer{background-color:rgba(198,214,219,.66)}.plyr__time{display:inline-block;vertical-align:middle;font-size:14px}.plyr__time+.plyr__time{display:none}@media (min-width:768px){.plyr__time+.plyr__time{display:inline-block}}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}.plyr__volume{display:none}.plyr .plyr__volume{-ms-flex:1;flex:1;position:relative}.plyr .plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr .plyr__volume{display:block;max-width:60px}}@media (min-width:768px){.plyr .plyr__volume{max-width:100px}}.plyr--is-ios .plyr__volume,.plyr--is-ios [data-plyr=mute]{display:none!important}.plyr--fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000;border-radius:0!important}.plyr--fullscreen-active video{height:100%}.plyr--fullscreen-active .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-active .plyr__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 diff --git a/dist/plyr.js b/dist/plyr.js index 3fb7951f..7251860f 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,a,s=navigator.userAgent,l=navigator.appName,i=""+parseFloat(navigator.appVersion),r=parseInt(navigator.appVersion,10),o=!1,u=!1,c=!1,d=!1;return navigator.appVersion.indexOf("Windows NT")!==-1&&navigator.appVersion.indexOf("rv:11")!==-1?(o=!0,l="IE",i="11"):(n=s.indexOf("MSIE"))!==-1?(o=!0,l="IE",i=s.substring(n+5)):(n=s.indexOf("Chrome"))!==-1?(c=!0,l="Chrome",i=s.substring(n+7)):(n=s.indexOf("Safari"))!==-1?(d=!0,l="Safari",i=s.substring(n+7),(n=s.indexOf("Version"))!==-1&&(i=s.substring(n+8))):(n=s.indexOf("Firefox"))!==-1?(u=!0,l="Firefox",i=s.substring(n+8)):(e=s.lastIndexOf(" ")+1)<(n=s.lastIndexOf("/"))&&(l=s.substring(e,n),i=s.substring(n+1),l.toLowerCase()===l.toUpperCase()&&(l=navigator.appName)),(a=i.indexOf(";"))!==-1&&(i=i.substring(0,a)),(a=i.indexOf(" "))!==-1&&(i=i.substring(0,a)),r=parseInt(""+i,10),isNaN(r)&&(i=""+parseFloat(navigator.appVersion),r=parseInt(navigator.appVersion,10)),{name:l,version:r,isIE:o,isFirefox:u,isChrome:c,isSafari:d,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function a(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var a=t.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a)}}function s(){try{return e.self!==e.top}catch(e){return!0}}function l(e,t){return Array.prototype.indexOf&&e.indexOf(t)!==-1}function i(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var a=n>0?t.cloneNode(!0):t,s=e[n],l=s.parentNode,i=s.nextSibling;return a.appendChild(s),i?l.insertBefore(a,i):l.appendChild(a),a}}function r(e){e&&e.parentNode.removeChild(e)}function o(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,t[n])}function c(e,t){if(!j.string(e)||j.empty(e))return{};var n={};return e.split(",").forEach(function(e){e=e.trim();var a=e.charAt(0);switch(a){case".":var s=e.replace(".","");j.object(t)&&j.string(t.class)&&(t.class+=" "+s),n.class=s;break;case"#":n.id=e.replace("#","");break;case"[":e=e.replace(/[\[\]]/g,"");var l=e.split("="),i=l[0],r=l.length>1?l[1].replace(/[\"\']/g,""):"";n[i]=r}}),n}function d(e,n,a){var s=t.createElement(e);return j.object(n)&&u(s,n),j.string(a)&&(s.textContent=a),s}function p(e,t,n,a){var s=d(e,n,a);o(t,s)}function m(e){for(var t=e.childNodes.length;t--;)e.removeChild(e.lastChild)}function f(e){return e.replace(".","")}function y(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function b(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function v(e,n){var a=Element.prototype,s=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return s.call(e,n)}function g(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function h(e,t,n,a,s){w(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},s)}function k(e,t,n,a,s){var l=t.split(" ");if(j.boolean(s)||(s=!1),e instanceof NodeList)for(var i=0;i<e.length;i++)e[i]instanceof Node&&k(e[i],arguments[1],arguments[2],arguments[3]);else for(var r=0;r<l.length;r++)e[a?"addEventListener":"removeEventListener"](l[r],n,s)}function w(e,t,n,a){j.undefined(e)||k(e,t,n,!0,a)}function C(e,t,n,a){j.undefined(e)||k(e,t,n,!1,a)}function x(e,t,n,a){if(e&&t){j.boolean(n)||(n=!1);var s=new CustomEvent(t,{bubbles:n,detail:a});e.dispatchEvent(s)}}function T(e,t){if(e)return t=j.boolean(t)?t:!e.getAttribute("aria-pressed"),e.setAttribute("aria-pressed",t),t}function S(e,t){return 0===e||0===t||isNaN(e)||isNaN(t)?0:(e/t*100).toFixed(2)}function E(){var e=arguments;if(e.length){if(1===e.length)return e[0];var t=Array.prototype.shift.call(e);j.object(t)||(t={});for(var n=e.length,a=0;a<n;a++){var s=e[a];j.object(s)||(s={});for(var l in s)s[l]&&s[l].constructor&&s[l].constructor===Object?(t[l]=t[l]||{},E(t[l],s[l])):t[l]=s[l]}return t}}function A(e){var t=/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;return e.match(t)?RegExp.$2:e}function _(e){var t=/^.*(vimeo.com\/|video\/)(\d+).*/;return e.match(t)?RegExp.$2:e}function I(k,I){function F(t,n){I.debug&&e.console&&(n=Array.prototype.slice.call(n),j.string(I.logPrefix)&&I.logPrefix.length&&n.unshift(I.logPrefix),e.console[t].apply(e.console,n))}function V(e,t,n,a){x(e,t,n,E({},a,{plyr:it}))}function D(e){return rt.elements.container.querySelectorAll(e)}function W(e){return D(e)[0]}function H(){function e(e){9===e.which&&rt.fullscreen.active&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=D("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];w(rt.elements.container,"keydown",e)}function B(e,t){j.string(t)?p(e,rt.elements.media,{src:t}):j.array(t)&&t.forEach(function(t){p(e,rt.elements.media,t)})}function Y(){return{url:I.iconUrl,absolute:0===I.iconUrl.indexOf("http")||rt.browser.isIE}}function X(e,n){var a="http://www.w3.org/2000/svg",s=Y(),l=(s.absolute?"":s.url)+"#"+I.iconPrefix,i=t.createElementNS(a,"svg");u(i,E(n,{role:"presentation"}));var r=t.createElementNS(a,"use");return r.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",l+"-"+e),i.appendChild(r),i}function U(e){var t=I.i18n[e];switch(e){case"pip":t="PIP";break;case"airplay":t="AirPlay"}return d("span",{class:I.classes.hidden},t)}function J(e){var t=d("span",{class:I.classes.menu.value});return t.appendChild(d("span",{class:I.classes.menu.badge},e)),t}function K(e,t){var n,a,s,l=d("button");switch(j.object(t)||(t={}),"class"in t?t.class.indexOf(I.classes.control)===-1&&(t.class+=" "+I.classes.control):t.class=I.classes.control,e){case"mute":s="toggleMute",n="volume",a="muted";break;case"captions":s="toggleCaptions",n="captions-off",a="captions-on";break;case"fullscreen":s="toggleFullscreen",n="enter-fullscreen",a="exit-fullscreen";break;case"play-large":t.class="plyr__play-large",e="play",s="play",n="play";break;default:s=e,n=e}return E(t,c(I.selectors.buttons[e],t)),j.string(a)&&l.appendChild(X(a,{class:"icon--"+a})),l.appendChild(X(n)),l.appendChild(U(s)),u(l,t),rt.elements.buttons[e]=l,l}function Q(e,t){var n=d("label",{for:t.id,class:I.classes.hidden},I.i18n[e]),a=d("input",E(c(I.selectors.inputs[e]),{type:"range",min:0,max:100,step:.1,value:0},t));return rt.elements.inputs[e]=a,{label:n,input:a}}function z(e,t){var n=d("progress",E(c(I.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(d("span",null,"0"));var a="";switch(e){case"played":a=I.i18n.played;break;case"buffer":a=I.i18n.buffered}n.textContent="% "+a.toLowerCase()}return rt.elements.display[e]=n,n}function $(e){var t=d("span",{class:"plyr__time"});return t.appendChild(d("span",{class:I.classes.hidden},I.i18n[e])),t.appendChild(d("span",c(I.selectors.display[e]),"00:00")),rt.elements.display[e]=t,t}function G(e){var t=d("div",c(I.selectors.controls.wrapper));if(l(I.controls,"restart")&&t.appendChild(K("restart")),l(I.controls,"rewind")&&t.appendChild(K("rewind")),l(I.controls,"play")&&(t.appendChild(K("play")),t.appendChild(K("pause"))),l(I.controls,"fast-forward")&&t.appendChild(K("fast-forward")),l(I.controls,"progress")){var n=d("span",c(I.selectors.progress)),a=Q("seek",{id:"plyr-seek-"+e.id});if(n.appendChild(a.label),n.appendChild(a.input),n.appendChild(z("played")),n.appendChild(z("buffer")),I.tooltips.seek){var s=d("span",{role:"tooltip",class:I.classes.tooltip},"00:00");n.appendChild(s),rt.elements.display.seekTooltip=s}rt.elements.progress=n,t.appendChild(rt.elements.progress)}if(l(I.controls,"current-time")&&t.appendChild($("currentTime")),l(I.controls,"duration")&&t.appendChild($("duration")),l(I.controls,"mute")&&t.appendChild(K("mute")),l(I.controls,"volume")){var i=d("span",{class:"plyr__volume"}),r={max:10,value:I.volume},o=Q("volume",E(r,{id:"plyr-volume-"+e.id}));i.appendChild(o.label),i.appendChild(o.input);var u=z("volume",r);i.appendChild(u),t.appendChild(i)}if(l(I.controls,"captions")&&t.appendChild(K("captions")),l(I.controls,"settings")){var p=d("span",E(c(I.selectors.buttons.settings),{class:"plyr__menu"}));p.appendChild(K("settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var m=d("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=d("div"),y=d("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel",tabindex:-1}),b=d("ul",{role:"tablist"});["captions","quality","speed","loop"].forEach(function(t){var n=d("li",{role:"tab"}),a=d("button",E(c(I.selectors.buttons.settings),{type:"button",class:I.classes.control+" "+I.classes.control+"--forward",id:"plyr-settings-"+e.id+"-"+t+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+t,"aria-expanded":!1}),I.i18n[t]),s=d("span",{class:I.classes.menu.value});s.innerHTML=e[t],a.appendChild(s),n.appendChild(a),b.appendChild(n),rt.elements.settings.tabs[t]=n}),y.appendChild(b),f.appendChild(y),["captions","quality","speed","loop"].forEach(function(t){var n=d("div",{id:"plyr-settings-"+e.id+"-"+t,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-tab-"+e.id,role:"tabpanel",tabindex:-1}),a=d("button",{type:"button",class:I.classes.control+" "+I.classes.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},I.i18n[t]);n.appendChild(a);var s=d("ul");n.appendChild(s),f.appendChild(n),rt.elements.settings.panes[t]=n}),m.appendChild(f),p.appendChild(m),t.appendChild(p),rt.elements.settings.menu=p}return l(I.controls,"pip")&&R.pip&&t.appendChild(K("pip")),l(I.controls,"airplay")&&R.airplay&&t.appendChild(K("airplay")),l(I.controls,"fullscreen")&&t.appendChild(K("fullscreen")),rt.elements.controls=t,ee(),t}function Z(e,n){function a(e){var t="";switch(e){case"hd2160":t="4K";break;case"hd1440":t="WQHD";break;case"hd1080":t="HD";break;case"hd720":t="HD"}return t.length?J(t):null}function s(e){switch(e){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";default:return"Auto"}}if(!j.object(rt.quality)&&(rt.quality={available:e,current:n},j.array(e)&&e.length)){var l=e.filter(function(e){return["tiny","small"].indexOf(e)===-1}),i=rt.elements.settings.panes.quality.querySelector("ul");l.forEach(function(e){var n=d("li"),l=d("label",{class:I.classes.control}),r=d("input",{type:"radio",name:"quality",value:e});e===rt.quality.current&&r.setAttribute("checked",""),l.appendChild(r),l.appendChild(t.createTextNode(s(e)));var o=a(e);j.htmlElement(o)&&l.appendChild(o),n.appendChild(l),i.appendChild(n)})}}function ee(){var e=["start","end","all","reset"],t=rt.elements.settings.panes.loop.querySelector("ul");e.forEach(function(e){var n=d("li"),a=d("button",{type:"button",class:I.classes.control,"data-plyr":"loop","data-plyr-loop-action":e},I.i18n[e]);if(l(["start","end"],e)){var s=J("0:00");a.appendChild(s)}n.appendChild(a),t.appendChild(n)})}function te(){if(rt.supported.full&&("audio"!==rt.type||I.fullscreen.allowAudio)&&I.fullscreen.enabled){var e=R.fullscreen;e||I.fullscreen.fallback&&!s()?(ct((e?"Native":"Fallback")+" fullscreen enabled"),y(rt.elements.container,I.classes.fullscreen.enabled,!0)):ct("Fullscreen not supported and fallback disabled"),rt.elements.buttons&&rt.elements.buttons.fullscreen&&T(rt.elements.buttons.fullscreen,!1),H()}}function ne(e){j.event(e)&&(e=e.target),e.activeCues[0]&&"text"in e.activeCues[0]?le(e.activeCues[0].getCueAsHTML()):le()}function ae(){if("video"===rt.type){W(I.selectors.captions)||rt.elements.wrapper.insertAdjacentHTML("afterbegin",'<div class="'+f(I.selectors.captions)+'"></div>'),rt.captions.textTracks=!1,rt.elements.media.textTracks&&(rt.captions.textTracks=!0);var e=[],t="";if(rt.elements.media.childNodes.forEach(function(t){"track"===t.nodeName.toLowerCase()&&("captions"!==t.kind&&"subtitles"!==t.kind||e.push(t.getAttribute("src")))}),rt.captions.exist=!0,0===e.length?(rt.captions.exist=!1,ct("No caption track found")):Number(I.captions.selectedIndex)+1>e.length?(rt.captions.exist=!1,ct("Caption index out of bound")):(t=e[I.captions.selectedIndex],ct("Caption track found; URI: "+t)),rt.captions.exist){var n=rt.elements.media.textTracks;if([].forEach.call(n,function(e){C(e,"cuechange",ne),e.mode="hidden"}),re(rt),(rt.browser.isIE&&rt.browser.version>=10||rt.browser.isFirefox&&rt.browser.version>=31)&&(ct("Detected browser with known TextTrack issues - using manual fallback"),rt.captions.textTracks=!1),rt.captions.textTracks){ct("TextTracks supported");var a=n[I.captions.selectedIndex];"captions"!==a.kind&&"subtitles"!==a.kind||(w(a,"cuechange",ne),a.activeCues&&a.activeCues.length>0&&ne(a))}else if(ct("TextTracks not supported so rendering captions manually"),rt.captions.current="",rt.captions.captions=[],""!==t){var s=new XMLHttpRequest;s.onreadystatechange=function(){if(4===s.readyState)if(200===s.status){var e=s.responseText,t="\r\n";e.indexOf(t+t)===-1&&(t=e.indexOf("\r\r")!==-1?"\r":"\n");var n=e.split(t+t);rt.captions.captions=n.map(function(e){var n=e.split(t),a=0;return n[a].indexOf(":")!==-1&&(a=1),[n[a],n[a+1]]}),rt.captions.captions.shift(),ct("Successfully loaded the caption file via AJAX")}else dt(I.logPrefix+"There was a problem loading the caption file via AJAX")},s.open("get",t,!0),s.send()}}else y(rt.elements.container,I.classes.captions.enabled)}}function se(e){I.captions.selectedIndex=e||I.captions.selectedIndex,le(),ae()}function le(e){var t=W(I.selectors.captions);if(j.htmlElement(t)){var n=d("span");m(t),j.undefined(e)&&(e=""),j.string(e)?n.innerHTML=e.trim():n.appendChild(e),t.appendChild(n)}}function ie(e){function t(e,t){var n=[];n=e.split(" --> ");for(var a=0;a<n.length;a++)n[a]=n[a].replace(/(\d+:\d+:\d+\.\d+).*/,"$1");return s(n[t])}function n(e){return t(e,0)}function a(e){return t(e,1)}function s(e){if(j.undefined(e))return 0;var t=[],n=[],a=0;t=e.split(","),n=t[0].split(":");for(var s=0,l=n.length;s<l;s++)a+=Math.floor(n[s]*Math.pow(60,l-(s+1)));return a}if(!rt.captions.textTracks&&"video"===rt.type&&rt.supported.full&&(rt.captions.count=0,e=j.number(e)?e:rt.elements.media.currentTime,rt.captions.captions[rt.captions.count])){for(;a(rt.captions.captions[rt.captions.count][0])<e.toFixed(1);)if(rt.captions.count++,rt.captions.count>rt.captions.captions.length-1){rt.captions.count=rt.captions.captions.length-1;break}rt.elements.media.currentTime.toFixed(1)>=n(rt.captions[rt.subcount][0])&&rt.elements.media.currentTime.toFixed(1)<=a(rt.captions[rt.subcount][0])?(rt.captions.current=rt.captions.captions[rt.captions.count][1],le(rt.captions.current)):le()}}function re(){if(rt.elements.buttons.captions){y(rt.elements.container,I.classes.captions.enabled,!0);var e=rt.storage.captions;j.boolean(e)||(e=I.captions.defaultActive),e&&(y(rt.elements.container,I.classes.captions.active,!0),T(rt.elements.buttons.captions,!0))}}function oe(e){rt.supported.full&&rt.elements.buttons.captions&&(j.boolean(e)||(e=rt.elements.container.className.indexOf(I.classes.captions.active)===-1),rt.captions.enabled=e,T(rt.elements.buttons.captions,rt.captions.enabled),y(rt.elements.container,I.classes.captions.active,rt.captions.enabled),V(rt.elements.container,rt.captions.enabled?"captionsenabled":"captionsdisabled",!0),fe({captions:rt.captions.enabled}))}function ue(){if(I.loadSprite){var e=Y();e.absolute?(ct("AJAX loading absolute SVG sprite"+(rt.browser.isIE?" (due to IE)":"")),P(e.url,"sprite-plyr")):ct("Sprite will be used as external resource directly")}l(I.controls,"play-large")&&(rt.elements.buttons.playLarge=K("play-large"),rt.elements.container.appendChild(rt.elements.buttons.playLarge)),rt.id=Math.floor(1e4*Math.random());var n,a=G({id:rt.id,seektime:I.seekTime,speed:Ee(),quality:"HD",captions:"English",loop:"None"});if(j.string(I.selectors.controls.container)&&(n=t.querySelector(I.selectors.controls.container)),j.htmlElement(n)||(n=rt.elements.container),n.appendChild(a),I.tooltips.controls)for(var s=D([I.selectors.controls.wrapper," ",I.selectors.labels," .",I.classes.hidden].join("")),i=s.length-1;i>=0;i--){var r=s[i];y(r,I.classes.hidden,!1),y(r,I.classes.tooltip,!0)}}function ce(){y(rt.elements.container,I.selectors.container.replace(".",""),rt.supported.full)}function de(e){e&&l(I.types.html5,rt.type)?rt.elements.media.setAttribute("controls",""):rt.elements.media.removeAttribute("controls")}function pe(e){var t=I.i18n.play;j.string(I.title)&&I.title.length&&(t+=", "+I.title,rt.elements.container.setAttribute("aria-label",I.title)),rt.supported.full&&(j.htmlElement(rt.elements.buttons.play)&&rt.elements.buttons.play.setAttribute("aria-label",t),j.htmlElement(rt.elements.buttons.playLarge)&&rt.elements.buttons.playLarge.setAttribute("aria-label",t)),j.htmlElement(e)&&e.setAttribute("title",I.i18n.frameTitle.replace("{title}",I.title))}function me(){var t=null;rt.storage={},R.storage&&I.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(I.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?fe({volume:parseFloat(t)}):rt.storage=JSON.parse(t)))}function fe(t){R.storage&&I.storage.enabled&&(E(rt.storage,t),e.localStorage.setItem(I.storage.key,JSON.stringify(rt.storage)))}function ye(){if(!rt.elements.media)return void dt("No media element found!");if(rt.supported.full&&(y(rt.elements.container,I.classes.type.replace("{0}",rt.type),!0),l(I.types.embed,rt.type)&&y(rt.elements.container,I.classes.type.replace("{0}","video"),!0),y(rt.elements.container,I.classes.pip.enabled,R.pip&&"video"===rt.type),y(rt.elements.container,I.classes.airplay.enabled,R.airplay&&l(I.types.html5,rt.type)),y(rt.elements.container,I.classes.stopped,I.autoplay),y(rt.elements.container,I.classes.isIos,rt.browser.isIos),y(rt.elements.container,I.classes.isTouch,rt.browser.isTouch),"video"===rt.type)){var e=d("div");e.setAttribute("class",I.classes.videoWrapper),i(rt.elements.media,e),rt.elements.wrapper=e}l(I.types.embed,rt.type)&&be()}function be(){var t,n=d("div"),s=rt.type+"-"+Math.floor(1e4*Math.random());switch(rt.type){case"youtube":t=A(rt.embedId);break;case"vimeo":t=_(rt.embedId);break;default:t=rt.embedId}for(var l=D('[id^="'+rt.type+'-"]'),i=l.length-1;i>=0;i--)r(l[i]);if(y(rt.elements.media,I.classes.videoWrapper,!0),y(rt.elements.media,I.classes.embedWrapper,!0),"youtube"===rt.type)rt.elements.media.appendChild(n),n.setAttribute("id",s),j.object(e.YT)?ge(t,n):(a(I.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){ge(t,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===rt.type)if(rt.supported.full?rt.elements.media.appendChild(n):n=rt.elements.media,n.setAttribute("id",s),j.object(e.Vimeo))he(t,n);else{a(I.urls.vimeo.api);var o=e.setInterval(function(){j.object(e.Vimeo)&&(e.clearInterval(o),he(t,n))},50)}else if("soundcloud"===rt.type){var c=d("iframe");c.loaded=!1,w(c,"load",function(){c.loaded=!0}),u(c,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+t,id:s}),n.appendChild(c),rt.elements.media.appendChild(n),e.SC||a(I.urls.soundcloud.api);var p=e.setInterval(function(){e.SC&&c.loaded&&(e.clearInterval(p),ke.call(c))},50)}}function ve(){rt.supported.full&&(st(),lt()),pe(W("iframe"))}function ge(t,n){rt.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:I.autoplay?1:0,controls:rt.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:I.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){V(rt.elements.container,"error",!0,{code:e.data,embed:e.target})},onPlaybackQualityChange:function(e){var t=e.target,n=t.getPlaybackQuality();console.warn(n)},onReady:function(t){var n=t.target;rt.elements.media.play=function(){n.playVideo(),rt.elements.media.paused=!1},rt.elements.media.pause=function(){n.pauseVideo(),rt.elements.media.paused=!0},rt.elements.media.stop=function(){n.stopVideo(),rt.elements.media.paused=!0},rt.elements.media.duration=n.getDuration(),rt.elements.media.paused=!0,rt.elements.media.currentTime=0,rt.elements.media.muted=n.isMuted();var a=n.getPlaybackRate(),s=n.getAvailablePlaybackRates();console.warn(a,s),I.title=n.getVideoData().title,rt.supported.full&&rt.elements.media.querySelector("iframe").setAttribute("tabindex","-1"),ve(),V(rt.elements.media,"timeupdate"),V(rt.elements.media,"durationchange"),e.clearInterval(ot.buffering),ot.buffering=e.setInterval(function(){rt.elements.media.buffered=n.getVideoLoadedFraction(),(null===rt.elements.media.lastBuffered||rt.elements.media.lastBuffered<rt.elements.media.buffered)&&V(rt.elements.media,"progress"),rt.elements.media.lastBuffered=rt.elements.media.buffered,1===rt.elements.media.buffered&&(e.clearInterval(ot.buffering),V(rt.elements.media,"canplaythrough"))},200)},onStateChange:function(t){var n=t.target;switch(e.clearInterval(ot.playing),t.data){case 0:rt.elements.media.paused=!0,V(rt.elements.media,"ended");break;case 1:rt.elements.media.paused=!1,rt.elements.media.seeking&&V(rt.elements.media,"seeked"),rt.elements.media.seeking=!1,V(rt.elements.media,"play"),V(rt.elements.media,"playing"),ot.playing=e.setInterval(function(){rt.elements.media.currentTime=n.getCurrentTime(),V(rt.elements.media,"timeupdate")},100),rt.elements.media.duration!==n.getDuration()&&(rt.elements.media.duration=n.getDuration(),V(rt.elements.media,"durationchange"));var a=n.getAvailableQualityLevels(),s=n.getPlaybackQuality();Z(a,s);break;case 2:rt.elements.media.paused=!0,V(rt.elements.media,"pause")}V(rt.elements.container,"statechange",!1,{code:t.data})}}})}function he(t,n){rt.embed=new e.Vimeo.Player(n,{id:parseInt(t),loop:I.loop.active,autoplay:I.autoplay,byline:!1,portrait:!1,title:!1}),rt.elements.media.play=function(){rt.embed.play(),rt.elements.media.paused=!1},rt.elements.media.pause=function(){rt.embed.pause(),rt.elements.media.paused=!0},rt.elements.media.stop=function(){rt.embed.stop(),rt.elements.media.paused=!0},rt.elements.media.paused=!0,rt.elements.media.currentTime=0,ve(),rt.embed.getCurrentTime().then(function(e){rt.elements.media.currentTime=e,V(rt.elements.media,"timeupdate")}),rt.embed.getDuration().then(function(e){rt.elements.media.duration=e,V(rt.elements.media,"durationchange")}),rt.embed.on("loaded",function(){j.htmlElement(rt.embed.element)&&rt.supported.full&&rt.embed.element.setAttribute("tabindex","-1")}),rt.embed.on("play",function(){rt.elements.media.paused=!1,V(rt.elements.media,"play"),V(rt.elements.media,"playing")}),rt.embed.on("pause",function(){rt.elements.media.paused=!0,V(rt.elements.media,"pause")}),rt.embed.on("timeupdate",function(e){rt.elements.media.seeking=!1,rt.elements.media.currentTime=e.seconds,V(rt.elements.media,"timeupdate")}),rt.embed.on("progress",function(e){rt.elements.media.buffered=e.percent,V(rt.elements.media,"progress"),1===parseInt(e.percent)&&V(rt.elements.media,"canplaythrough")}),rt.embed.on("seeked",function(){rt.elements.media.seeking=!1,V(rt.elements.media,"seeked"),V(rt.elements.media,"play")}),rt.embed.on("ended",function(){rt.elements.media.paused=!0,V(rt.elements.media,"ended")})}function ke(){rt.embed=e.SC.Widget(this),rt.embed.bind(e.SC.Widget.Events.READY,function(){rt.elements.media.play=function(){rt.embed.play(),rt.elements.media.paused=!1},rt.elements.media.pause=function(){rt.embed.pause(),rt.elements.media.paused=!0},rt.elements.media.stop=function(){rt.embed.seekTo(0),rt.embed.pause(),rt.elements.media.paused=!0},rt.elements.media.paused=!0,rt.elements.media.currentTime=0,rt.embed.getDuration(function(e){rt.elements.media.duration=e/1e3,ve()}),rt.embed.getPosition(function(e){rt.elements.media.currentTime=e,V(rt.elements.media,"timeupdate")}),rt.embed.bind(e.SC.Widget.Events.PLAY,function(){rt.elements.media.paused=!1,V(rt.elements.media,"play"),V(rt.elements.media,"playing")}),rt.embed.bind(e.SC.Widget.Events.PAUSE,function(){rt.elements.media.paused=!0,V(rt.elements.media,"pause")}),rt.embed.bind(e.SC.Widget.Events.PLAY_PROGRESS,function(e){rt.elements.media.seeking=!1,rt.elements.media.currentTime=e.currentPosition/1e3,V(rt.elements.media,"timeupdate")}),rt.embed.bind(e.SC.Widget.Events.LOAD_PROGRESS,function(e){rt.elements.media.buffered=e.loadProgress,V(rt.elements.media,"progress"),1===parseInt(e.loadProgress)&&V(rt.elements.media,"canplaythrough")}),rt.embed.bind(e.SC.Widget.Events.FINISH,function(){rt.elements.media.paused=!0,V(rt.elements.media,"ended")})})}function we(){"play"in rt.elements.media&&rt.elements.media.play()}function Ce(){"pause"in rt.elements.media&&rt.elements.media.pause()}function xe(e){return j.boolean(e)||(e=rt.elements.media.paused),e?we():Ce(),e}function Te(e){l(["start","end","all","none","toggle"],e)||(e="toggle");var n=Number(rt.elements.media.currentTime);switch(e){case"start":I.loop.end&&I.loop.end<=n&&(I.loop.end=null),I.loop.start=n,I.loop.indicator.start=rt.elements.display.played.value;break;case"end":if(I.loop.start>=n)return;I.loop.end=n,I.loop.indicator.end=rt.elements.display.played.value;break;case"all":I.loop.start=0,I.loop.end=rt.elements.media.duration-2,I.loop.indicator.start=0,I.loop.indicator.end=100;break;case"toggle":I.loop.active?(I.loop.start=0,I.loop.end=null):(I.loop.start=0,I.loop.end=rt.elements.media.duration-2);break;default:I.loop.start=0,I.loop.end=null}I.loop.active=j.number(I.loop.start)&&j.number(I.loop.end);var a=(Ye(I.loop.start,W('[data-plyr-loop="start"]')),null);j.number(I.loop.end)&&(a=Ye(I.loop.end,t.querySelector('[data-loop__value="loopout"]'))),I.loop.active}function Se(e){if(j.undefined(e)&&(e=rt.storage.speed||I.defaultSpeed),!j.array(I.speeds))return void dt("Invalid speeds format");if(!j.number(e)){var t=I.speeds.indexOf(I.currentSpeed);if(t!==-1){var n=t+1;n>=I.speeds.length&&(n=0),e=I.speeds[n]}else e=I.defaultSpeed}I.currentSpeed=e,rt.elements.media.playbackRate=e,fe({speed:e})}function Ee(){return I.currentSpeed.toFixed(1).toString().replace(".0","")+"×"}function Ae(e){j.number(e)||(e=I.seekTime),Ie(rt.elements.media.currentTime-e)}function _e(e){j.number(e)||(e=I.seekTime),Ie(rt.elements.media.currentTime+e)}function Ie(e){var t=0,n=rt.elements.media.paused,a=Pe();j.number(e)?t=e:j.event(e)&&l(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Je(t);try{rt.elements.media.currentTime=t.toFixed(4)}catch(e){}if(l(I.types.embed,rt.type)){switch(rt.type){case"youtube":rt.embed.seekTo(t);break;case"vimeo":rt.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":rt.embed.seekTo(1e3*t)}n&&Ce(),V(rt.elements.media,"timeupdate"),rt.elements.media.seeking=!0,V(rt.elements.media,"seeking")}ct("Seeking to "+rt.elements.media.currentTime+" seconds"),ie(t)}function Pe(){var e=parseInt(I.duration),t=0;return null===rt.elements.media.duration||isNaN(rt.elements.media.duration)||(t=rt.elements.media.duration),isNaN(e)?t:e}function Ne(){y(rt.elements.container,I.classes.playing,!rt.elements.media.paused),y(rt.elements.container,I.classes.stopped,rt.elements.media.paused),Qe(rt.elements.media.paused)}function Fe(){L={x:e.pageXOffset||0,y:e.pageYOffset||0}}function qe(){e.scrollTo(L.x,L.y)}function Le(e){var n=R.fullscreen;if(n){if(!e||e.type!==M.eventType)return M.isFullScreen(rt.elements.container)?M.cancelFullScreen():(Fe(),M.requestFullScreen(rt.elements.container)),void(rt.fullscreen.active=M.isFullScreen(rt.elements.container));rt.fullscreen.active=M.isFullScreen(rt.elements.container)}else rt.fullscreen.active=!rt.fullscreen.active,t.body.style.overflow=rt.fullscreen.active?"hidden":"";y(rt.elements.container,I.classes.fullscreen.active,rt.fullscreen.active),H(rt.fullscreen.active),rt.elements.buttons&&rt.elements.buttons.fullscreen&&T(rt.elements.buttons.fullscreen,rt.fullscreen.active),V(rt.elements.container,rt.fullscreen.active?"enterfullscreen":"exitfullscreen",!0),!rt.fullscreen.active&&n&&qe()}function Oe(n){var a=rt.elements.settings.menu.parentNode,s=n.target,l=t.getElementById(s.getAttribute("aria-controls")),i="false"===s.getAttribute("aria-expanded");if(j.htmlElement(l)){var o,u,c,d="tabpanel"===l.getAttribute("role");if(d){var p=a.querySelector('[role="tabpanel"][aria-hidden="false"]');c=p.parentNode,[].forEach.call(a.querySelectorAll('[aria-controls="'+p.getAttribute("id")+'"]'),function(e){e.setAttribute("aria-expanded",!1)}),c.style.width=p.scrollWidth+"px",c.style.height=p.scrollHeight+"px",p.setAttribute("aria-hidden",!0),p.setAttribute("tabindex",-1);var m=l.cloneNode(!0);m.style.position="absolute",m.style.opacity=0,m.setAttribute("aria-hidden",!1),c.appendChild(m),o=m.scrollWidth,u=m.scrollHeight,r(m)}l.setAttribute("aria-hidden",!i),s.setAttribute("aria-expanded",i),l.setAttribute("tabindex",0),d&&(c.style.width=o+"px",c.style.height=u+"px",e.setTimeout(function(){c.style.width="",c.style.height=""},300))}}function je(e){if(j.boolean(e)||(e=!rt.elements.media.muted),T(rt.elements.buttons.mute,e),rt.elements.media.muted=e,0===rt.elements.media.volume&&Me(I.volume),l(I.types.embed,rt.type)){switch(rt.type){case"youtube":rt.embed[rt.elements.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":rt.embed.setVolume(rt.elements.media.muted?0:parseFloat(I.volume/10))}V(rt.elements.media,"volumechange")}}function Me(e){var t=10,n=0;if(j.event(e)&&(e=e.target.value),j.undefined(e)&&(e=rt.storage.volume),(null===e||isNaN(e))&&(e=I.volume),e>t&&(e=t),e<n&&(e=n),rt.elements.media.volume=parseFloat(e/t),rt.elements.display.volume&&(rt.elements.display.volume.value=e),l(I.types.embed,rt.type)){switch(rt.type){case"youtube":rt.embed.setVolume(100*rt.elements.media.volume);break;case"vimeo":case"soundcloud":rt.embed.setVolume(rt.elements.media.volume)}V(rt.elements.media,"volumechange")}0===e?rt.elements.media.muted=!0:rt.elements.media.muted&&e>0&&je()}function Re(e){var t=rt.elements.media.muted?0:10*rt.elements.media.volume;j.number(e)||(e=1),Me(t+e)}function Ve(e){var t=rt.elements.media.muted?0:10*rt.elements.media.volume;j.number(e)||(e=1),Me(t-e)}function De(){var e=rt.elements.media.muted?0:10*rt.elements.media.volume;rt.supported.full&&(rt.elements.inputs.volume&&(rt.elements.inputs.volume.value=e),rt.elements.display.volume&&(rt.elements.display.volume.value=e)),fe({volume:e}),y(rt.elements.container,I.classes.muted,0===e),rt.supported.full&&rt.elements.buttons.mute&&T(rt.elements.buttons.mute,0===e)}function We(e){var t="waiting"===e.type;clearTimeout(ot.loading),ot.loading=setTimeout(function(){y(rt.elements.container,I.classes.loading,t),Qe(t)},t?250:0)}function He(e){if(rt.supported.full){var t=rt.elements.display.played,n=0,a=Pe();if(e)switch(e.type){case"timeupdate":case"seeking":if(rt.elements.controls.pressed)return;n=S(rt.elements.media.currentTime,a),"timeupdate"===e.type&&rt.elements.inputs.seek&&(rt.elements.inputs.seek.value=n);break;case"playing":case"progress":t=rt.elements.display.buffer,n=function(){var e=rt.elements.media.buffered;return e&&e.length?S(e.end(0),a):j.number(e)?100*e:0}()}j.number(I.loop.start)&&j.number(I.loop.end)&&rt.elements.media.currentTime>=I.loop.end&&Ie(I.loop.start),Be(t,n)}}function Be(e,t){if(rt.supported.full){if(j.undefined(t)&&(t=0),j.undefined(e)){if(!j.htmlElement(rt.elements.display.buffer))return;e=rt.elements.display.buffer}if(j.htmlElement(e)){e.value=t;var n=e.getElementsByTagName("span")[0];j.htmlElement(n)&&(n.childNodes[0].nodeValue=t)}}}function Ye(e,t){if(t){isNaN(e)&&(e=0); -var n=parseInt(e%60),a=parseInt(e/60%60),s=parseInt(e/60/60%60),l=parseInt(Pe()/60/60%60)>0;n=("0"+n).slice(-2),a=("0"+a).slice(-2);var i=(l?s+":":"")+a+":"+n;return t.textContent=i,i}}function Xe(){if(rt.supported.full){var e=Pe()||0;!rt.elements.display.duration&&I.displayDuration&&rt.elements.media.paused&&Ye(e,rt.elements.display.currentTime),rt.elements.display.duration&&Ye(e,rt.elements.display.duration),Ke()}}function Ue(e){Ye(rt.elements.media.currentTime,rt.elements.display.currentTime),e&&"timeupdate"===e.type&&rt.elements.media.seeking||He(e)}function Je(e){j.number(e)||(e=0);var t=Pe(),n=S(e,t);rt.elements.progress&&rt.elements.display.played&&(rt.elements.display.played.value=n),rt.elements.buttons&&rt.elements.inputs.seek&&(rt.elements.inputs.seek.value=n)}function Ke(e){var t=Pe();if(I.tooltips.seek&&j.htmlElement(rt.elements.inputs.seek)&&j.htmlElement(rt.elements.display.seekTooltip)&&0!==t){var n=rt.elements.inputs.seek.getBoundingClientRect(),a=0,s=I.classes.tooltip+"--visible";if(j.event(e))a=100/n.width*(e.pageX-n.left);else{if(!b(rt.elements.display.seekTooltip,s))return;a=rt.elements.display.seekTooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Ye(t/100*a,rt.elements.display.seekTooltip),rt.elements.display.seekTooltip.style.left=a+"%",j.event(e)&&l(["mouseenter","mouseleave"],e.type)&&y(rt.elements.display.seekTooltip,s,"mouseenter"===e.type)}}function Qe(t){if(I.hideControls&&"audio"!==rt.type){var n=0,a=!1,s=t,i=b(rt.elements.container,I.classes.loading);if(j.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,s=l(["mousemove","touchstart","mouseenter","focus"],t.type),l(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):s=b(rt.elements.container,I.classes.hideControls)),e.clearTimeout(ot.hover),s||rt.elements.media.paused||i){if(y(rt.elements.container,I.classes.hideControls,!1),rt.elements.media.paused||i)return;rt.browser.isTouch&&(n=3e3)}s&&rt.elements.media.paused||(ot.hover=e.setTimeout(function(){(!rt.elements.controls.pressed&&!rt.elements.controls.hover||a)&&y(rt.elements.container,I.classes.hideControls,!0)},n))}}function ze(e){if(!j.undefined(e))return void $e(e);var t;switch(rt.type){case"youtube":t=rt.embed.getVideoUrl();break;case"vimeo":rt.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":rt.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=rt.elements.media.currentSrc}return t||""}function $e(e){function t(){if(rt.embed=null,r(rt.elements.media),"video"===rt.type&&rt.elements.wrapper&&r(rt.elements.wrapper),rt.elements.container&&rt.elements.container.removeAttribute("class"),"type"in e&&(rt.type=e.type,"video"===rt.type)){var t=e.sources[0];"type"in t&&l(I.types.embed,t.type)&&(rt.type=t.type)}switch(rt.supported=N(rt.type),rt.type){case"video":rt.elements.media=d("video");break;case"audio":rt.elements.media=d("audio");break;case"youtube":case"vimeo":case"soundcloud":rt.elements.media=d("div"),rt.embedId=e.sources[0].src}o(rt.elements.container,rt.elements.media),j.boolean(e.autoplay)&&(I.autoplay=e.autoplay),l(I.types.html5,rt.type)&&(I.crossorigin&&rt.elements.media.setAttribute("crossorigin",""),I.autoplay&&rt.elements.media.setAttribute("autoplay",""),"poster"in e&&rt.elements.media.setAttribute("poster",e.poster),I.loop.active&&rt.elements.media.setAttribute("loop","")),y(rt.elements.container,I.classes.fullscreen.active,rt.fullscreen.active),y(rt.elements.container,I.classes.captions.active,rt.captions.enabled),ce(),l(I.types.html5,rt.type)&&B("source",e.sources),ye(),l(I.types.html5,rt.type)&&("tracks"in e&&B("track",e.tracks),rt.elements.media.load()),(l(I.types.html5,rt.type)||l(I.types.embed,rt.type)&&!rt.supported.full)&&(st(),lt()),I.title=e.title,pe()}return j.object(e)&&"sources"in e&&e.sources.length?(y(rt.elements.container,I.classes.ready,!1),Ce(),Je(),Be(),tt(),void nt(t,!1)):void dt("Invalid source format")}function Ge(e){"video"===rt.type&&rt.elements.media.setAttribute("poster",e)}function Ze(){function n(){var e=xe(),t=rt.elements.buttons[e?"play":"pause"],n=rt.elements.buttons[e?"pause":"play"];if(n){var a=b(t,I.classes.tabFocus);setTimeout(function(){n.focus(),a&&(y(t,I.classes.tabFocus,!1),y(n,I.classes.tabFocus,!0))},100)}}function a(e){return e.keyCode?e.keyCode:e.which}function s(e){for(var t in rt.elements.buttons){var n=rt.elements.buttons[t];if(j.nodeList(n))for(var a=0;a<n.length;a++)y(n[a],I.classes.tabFocus,n[a]===e);else y(n,I.classes.tabFocus,n===e)}}function i(e){function t(){var e=rt.elements.media.duration;j.number(e)&&Ie(e/10*(s-48))}var s=a(e),i="keydown"===e.type,r=i&&s===o;if(j.number(s))if(i){var u=[48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79],c=[38,40];if(l(c,s)){var d=g();if(j.htmlElement(d)&&"radio"===g().type)return}switch(l(u,s)&&(e.preventDefault(),e.stopPropagation()),s){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||t();break;case 32:case 75:r||n();break;case 38:Re();break;case 40:Ve();break;case 77:r||je();break;case 39:_e();break;case 37:Ae();break;case 70:Le();break;case 67:r||oe();break;case 73:Te("start");break;case 76:Te();break;case 79:Te("end")}!R.fullscreen&&rt.fullscreen.active&&27===s&&Le(),o=s}else o=null}var r=rt.browser.isIE?"change":"input";if(I.keyboardShortcuts.focused){var o=null;I.keyboardShortcuts.global&&w(e,"keydown keyup",function(e){var t=a(e),n=g(),s=[48,49,50,51,52,53,54,56,57,75,77,70,67,73,76,79],r=q().length;1!==r||!l(s,t)||j.htmlElement(n)&&v(n,I.selectors.editable)||i(e)}),w(rt.elements.container,"keydown keyup",i)}w(e,"keyup",function(e){var t=a(e),n=g();9===t&&s(n)}),w(t.body,"click",function(){y(W("."+I.classes.tabFocus),I.classes.tabFocus,!1)});for(var u in rt.elements.buttons){var c=rt.elements.buttons[u];w(c,"blur",function(){y(c,"tab-focus",!1)})}var d=function(e,t,n){j.function(t)&&t.call(this,e),j.function(n)&&n.call(this,e)};h(rt.elements.buttons.play,"click",I.listeners.play,n),h(rt.elements.buttons.playLarge,"click",I.listeners.play,n),h(rt.elements.buttons.pause,"click",I.listeners.pause,n),h(rt.elements.buttons.restart,"click",I.listeners.restart,Ie),h(rt.elements.buttons.rewind,"click",I.listeners.rewind,Ae),h(rt.elements.buttons.forward,"click",I.listeners.forward,_e),h(rt.elements.buttons.mute,"click",I.listeners.mute,je),h(rt.elements.buttons.captions,"click",I.listeners.captions,oe),h(rt.elements.buttons.fullscreen,"click",I.listeners.fullscreen,Le),h(rt.elements.buttons.pip,"click",I.listeners.pip,function(e){R.pip&&rt.elements.media.webkitSetPresentationMode("picture-in-picture"===rt.elements.media.webkitPresentationMode?"inline":"picture-in-picture")}),h(rt.elements.buttons.airplay,"click",I.listeners.airplay,function(e){R.airplay&&rt.elements.media.webkitShowPlaybackTargetPicker()}),w(rt.elements.settings.menu,"click",Oe),w(t.body,"click",function(e){var t=rt.elements.settings.menu,n=t.querySelector("form");"true"===n.getAttribute("aria-hidden")||t.contains(e.target)||n.setAttribute("aria-hidden",!0)}),w(rt.elements.settings.menu,"click",function(e){v(e.target,I.selectors.buttons.speed)?d.call(this,e,I.listeners.speed,function(){console.warn("Set speed")}):v(e.target,I.selectors.buttons.quality)?d.call(this,e,I.listeners.quality,function(){console.warn("Set quality")}):v(e.target,I.selectors.buttons.loop)?d.call(this,e,I.listeners.loop,function(){var t=e.target.getAttribute("data-loop__value")||e.target.getAttribute("data-loop__type");l(["start","end","all","none"],t)&&Te(t)}):v(e.target,I.selectors.buttons.language)&&d.call(this,e,I.listeners.language,function(e){var t=e.target.attributes.getNamedItem("data-index").value;se(t)})}),h(rt.elements.inputs.seek,r,I.listeners.seek,Ie),h(rt.elements.inputs.volume,r,I.listeners.volume,Me),w(rt.elements.progress,"mouseenter mouseleave mousemove",Ke),I.hideControls&&(w(rt.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen",Qe),w(rt.elements.controls,"mouseenter mouseleave",function(e){rt.elements.controls.hover="mouseenter"===e.type}),w(rt.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){rt.elements.controls.pressed=l(["mousedown","touchstart"],e.type)}),w(rt.elements.controls,"focus blur",Qe,!0)),h(rt.elements.inputs.volume,"wheel",I.listeners.volume,function(e){var t=e.webkitDirectionInvertedFromDevice,n=.2,a=0;(e.deltaY<0||e.deltaX>0)&&(t?(Ve(n),a=-1):(Re(n),a=1)),(e.deltaY>0||e.deltaX<0)&&(t?(Re(n),a=1):(Ve(n),a=-1)),(1===a&&rt.elements.media.volume<1||a===-1&&rt.elements.media.volume>0)&&e.preventDefault()}),R.fullscreen&&w(t,M.eventType,Le)}function et(){if(w(rt.elements.media,"timeupdate seeking",Ue),w(rt.elements.media,"timeupdate",ie),w(rt.elements.media,"durationchange loadedmetadata",Xe),w(rt.elements.media,"ended",function(){"video"===rt.type&&I.showPosterOnEnd&&("video"===rt.type&&le(),Ie(),rt.elements.media.load())}),w(rt.elements.media,"progress playing",He),w(rt.elements.media,"volumechange",De),w(rt.elements.media,"play pause ended",Ne),w(rt.elements.media,"waiting canplay seeked",We),I.clickToPlay&&"audio"!==rt.type){var e=W("."+I.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",w(e,"click",function(){I.hideControls&&rt.browser.isTouch&&!rt.elements.media.paused||(rt.elements.media.paused?we():rt.elements.media.ended?(Ie(),we()):Ce())})}I.disableContextMenu&&w(rt.elements.media,"contextmenu",function(e){e.preventDefault()}),w(rt.elements.media,I.events.concat(["keyup","keydown"]).join(" "),function(e){V(rt.elements.container,e.type,!0)})}function tt(){if(l(I.types.html5,rt.type)){for(var e=rt.elements.media.querySelectorAll("source"),t=0;t<e.length;t++)r(e[t]);rt.elements.media.setAttribute("src","https://cdn.selz.com/plyr/blank.mp4"),rt.elements.media.load(),ct("Cancelled network requests")}}function nt(n,a){function s(){j.boolean(a)||(a=!0),j.function(n)&&n.call(ut),a&&(rt.init=!1,rt.elements.container.parentNode.replaceChild(ut,rt.elements.container),t.body.style.overflow="",V(ut,"destroyed",!0))}if(!rt.init)return null;switch(rt.type){case"youtube":e.clearInterval(ot.buffering),e.clearInterval(ot.playing),rt.embed.destroy(),s();break;case"vimeo":rt.embed.unload().then(s),e.setTimeout(s,200);break;case"video":case"audio":de(!0),s()}}function at(){if(rt.init)return null;if(rt.browser=n(),j.htmlElement(rt.elements.media)){me();var e=k.tagName.toLowerCase();"div"===e?(rt.type=k.getAttribute("data-type"),rt.embedId=k.getAttribute("data-video-id"),k.removeAttribute("data-type"),k.removeAttribute("data-video-id")):(rt.type=e,I.crossorigin=null!==k.getAttribute("crossorigin"),I.autoplay=I.autoplay||null!==k.getAttribute("autoplay"),I.loop=I.loop||null!==k.getAttribute("loop")),rt.supported=N(rt.type),rt.supported.basic&&(rt.elements.container=i(k,d("div")),rt.elements.container.setAttribute("tabindex",0),ce(),ct(""+rt.browser.name+" "+rt.browser.version),ye(),(l(I.types.html5,rt.type)||l(I.types.embed,rt.type)&&!rt.supported.full)&&(st(),lt(),pe()),rt.init=!0)}}function st(){return rt.supported.full?(j.htmlElement(W(I.selectors.controls.wrapper))||(ue(),Ze()),et(),de(),te(),ae(),se(),Me(),De(),Se(),Te(),Ue(),void Ne()):(dt("Basic support only",rt.type),r(W(I.selectors.controls.wrapper)),r(W(I.selectors.buttons.play)),void de(!0))}function lt(){e.setTimeout(function(){V(rt.elements.media,"ready")},0),y(rt.elements.media,O.classes.setup,!0),y(rt.elements.container,I.classes.ready,!0),rt.elements.media.plyr=it,I.autoplay&&we()}var it,rt=this,ot={};rt.fullscreen={active:!1},rt.elements={buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},media:k},rt.captions={enabled:!1,textTracks:!1,captions:[]};var ut=k.cloneNode(!0),ct=function(){F("log",arguments)},dt=function(){F("warn",arguments)};return ct("Config",I),ct("Support",R),it={getOriginal:function(){return ut},getContainer:function(){return rt.elements.container},getEmbed:function(){return rt.embed},getMedia:function(){return rt.elements.media},getType:function(){return rt.type},getDuration:Pe,getCurrentTime:function(){return rt.elements.media.currentTime},getVolume:function(){return rt.elements.media.volume},isMuted:function(){return rt.elements.media.muted},isReady:function(){return b(rt.elements.container,I.classes.ready)},isLoading:function(){return b(rt.elements.container,I.classes.loading)},isPaused:function(){return rt.elements.media.paused},isLooping:function(){return I.loop.active},on:function(e,t){return w(rt.elements.container,e,t),this},play:we,pause:Ce,loop:Te,stop:function(){Ce(),Ie()},restart:Ie,rewind:Ae,forward:_e,seek:Ie,source:ze,poster:Ge,setVolume:Me,setSpeed:Se,togglePlay:xe,toggleMute:je,toggleCaptions:oe,toggleFullscreen:Le,toggleControls:Qe,setCaptionIndex:se,isFullscreen:function(){return rt.fullscreen.active||!1},support:function(e){return R.mime(rt,e)},destroy:nt},at(),rt.init?it:null}function P(e,n){var a=new XMLHttpRequest;if(!j.string(n)||!j.htmlElement(t.querySelector("#"+n))){var s=d("div");s.setAttribute("hidden",""),j.string(n)&&s.setAttribute("id",n),t.body.insertBefore(s,t.body.childNodes[0]),"withCredentials"in a&&(a.open("GET",e,!0),a.onload=function(){s.innerHTML=a.responseText},a.send())}}function N(e){var t,a,s=n(),l=s.isIE&&s.version<=9,i=s.isIos,r=/iPhone|iPod/i.test(navigator.userAgent),o=!!d("audio").canPlayType,u=!!d("video").canPlayType;switch(e){case"video":t=u,a=t&&!l&&!r;break;case"audio":t=o,a=t&&!l;break;case"vimeo":case"youtube":case"soundcloud":t=!0,a=!l&&!i;break;default:t=o&&u,a=t&&!l}return{basic:t,full:a}}function F(e,n){function a(e,t){b(t,O.classes.hook)||s.push({target:e,media:t})}var s=[],l=[],i=[O.selectors.html5,O.selectors.embed].join(",");if(j.string(e)?e=t.querySelectorAll(e):j.htmlElement(e)?e=[e]:j.nodeList(e)||j.array(e)||j.string(e)||(j.undefined(n)&&j.object(e)&&(n=e),e=t.querySelectorAll(i)),j.nodeList(e)&&(e=Array.prototype.slice.call(e)),!N().basic||!e.length)return!1;for(var r=0;r<e.length;r++){var o=e[r],u=o.querySelectorAll(i);if(u.length)for(var c=0;c<u.length;c++)a(o,u[c]);else v(o,i)&&a(o,o)}return s.forEach(function(e){var t=e.target,a=e.media,s=!1;a===t&&(s=!0);var i={};try{i=JSON.parse(t.getAttribute("data-plyr"))}catch(e){}var r=E({},O,n,i);if(!r.enabled)return null;var o=new I(a,r);if(j.object(o)){if(r.debug){var u=r.events.concat(["setup","statechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled"]);w(o.getContainer(),u.join(" "),function(e){console.log([r.logPrefix,"event:",e.type].join(" "),e.detail.plyr)})}x(o.getContainer(),"setup",!0,{plyr:o}),l.push(o)}}),l}function q(e){if(j.string(e)?e=t.querySelector(e):j.undefined(e)&&(e=t.body),j.htmlElement(e)){var n=e.querySelectorAll("."+O.classes.setup),a=[];return Array.prototype.slice.call(n).forEach(function(e){j.object(e.plyr)&&a.push(e.plyr)}),a}return[]}var L={x:0,y:0},O={enabled:!0,debug:!1,autoplay:!1,loop:{active:!1,start:0,end:null,indicator:{start:0,end:0}},seekTime:10,volume:10,defaultSpeed:1,currentSpeed:1,speeds:[.5,1,1.5,2],duration:null,displayDuration:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/2.0.10/plyr.svg",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,quality:{options:!1},keyboardShortcuts:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},tracks:[],selectors:{html5:"video, audio",embed:"[data-type]",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"]',speed:'[data-plyr="speed"]',loop:'[data-plyr="loop"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]'},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:{setup:"plyr--setup",ready:"plyr--ready",videoWrapper:"plyr__video-wrapper",embedWrapper:"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"},captions:{defaultActive:!1,selectedIndex: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"],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"},types:{embed:["youtube","vimeo","soundcloud"],html5:["video","audio"]},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:["ready","ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied"],logPrefix:""},j={object:function(e){return null!==e&&"object"==typeof e&&e.constructor===Object},array:function(e){return null!==e&&"object"==typeof e&&e.constructor===Array},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},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}},M=function(){var e=function(){var e=!1;return j.function(t.cancelFullScreen)?e="":["webkit","o","moz","ms","khtml"].some(function(n){return j.function(t[n+"CancelFullScreen"])?(e=n,!0):j.function(t.msExitFullscreen)&&t.msFullscreenEnabled?(e="ms",!0):void 0}),e}();return{prefix:e,eventType:"ms"===e?"MSFullscreenChange":e+"fullscreenchange",isFullScreen:function(n){if(!R.fullscreen)return!1;switch(j.undefined(n)&&(n=t.body),this.prefix){case"":return t.fullscreenElement===n;case"moz":return t.mozFullScreenElement===n;default:return t[e+"FullscreenElement"]===n}},requestFullScreen:function(n){return!!R.fullscreen&&(j.htmlElement(n)||(n=t.body),console.log(e),""===e?n.requestFullScreen():n[e+("ms"===e?"RequestFullscreen":"RequestFullScreen")]())},cancelFullScreen:function(){return!!R.fullscreen&&(""===e?t.cancelFullScreen():t[e+("ms"===e?"ExitFullscreen":"CancelFullScreen")]())},element:function(){return R.fullscreen?""===e?t.fullscreenElement:t[e+"FullscreenElement"]:null}}}(),R={fullscreen:M.prefix!==!1,storage:function(){if(!("localStorage"in e))return!1;try{e.localStorage.setItem("___test","OK");var t=e.localStorage.getItem("___test");return e.localStorage.removeItem("___test"),"OK"===t}catch(e){return!1}return!1}(),pip:function(){return j.function(d("video").webkitSetPresentationMode)}(),airplay:function(){return j.function(e.WebKitPlaybackTargetAvailabilityEvent)}(),mime:function(e,t){var n=e.media;try{if(!j.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}};return{setup:F,supported:N,loadSprite:P,get:q}}),function(){function e(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}"function"!=typeof window.CustomEvent&&(e.prototype=window.Event.prototype,window.CustomEvent=e)}();
\ No newline at end of file +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t(e,document):"function"==typeof define&&define.amd?define([],function(){return t(e,document)}):e.plyr=t(e,document)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(){var e,n,a,l=navigator.userAgent,s=navigator.appName,i=""+parseFloat(navigator.appVersion),r=parseInt(navigator.appVersion,10),o=!1,u=!1,c=!1,d=!1;return navigator.appVersion.indexOf("Windows NT")!==-1&&navigator.appVersion.indexOf("rv:11")!==-1?(o=!0,s="IE",i="11"):(n=l.indexOf("MSIE"))!==-1?(o=!0,s="IE",i=l.substring(n+5)):(n=l.indexOf("Chrome"))!==-1?(c=!0,s="Chrome",i=l.substring(n+7)):(n=l.indexOf("Safari"))!==-1?(d=!0,s="Safari",i=l.substring(n+7),(n=l.indexOf("Version"))!==-1&&(i=l.substring(n+8))):(n=l.indexOf("Firefox"))!==-1?(u=!0,s="Firefox",i=l.substring(n+8)):(e=l.lastIndexOf(" ")+1)<(n=l.lastIndexOf("/"))&&(s=l.substring(e,n),i=l.substring(n+1),s.toLowerCase()===s.toUpperCase()&&(s=navigator.appName)),(a=i.indexOf(";"))!==-1&&(i=i.substring(0,a)),(a=i.indexOf(" "))!==-1&&(i=i.substring(0,a)),r=parseInt(""+i,10),isNaN(r)&&(i=""+parseFloat(navigator.appVersion),r=parseInt(navigator.appVersion,10)),{name:s,version:r,isIE:o,isFirefox:u,isChrome:c,isSafari:d,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}}function a(e){if(!t.querySelectorAll('script[src="'+e+'"]').length){var n=t.createElement("script");n.src=e;var a=t.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a)}}function l(){try{return e.self!==e.top}catch(e){return!0}}function s(e,t){return Array.prototype.indexOf&&e.indexOf(t)!==-1}function i(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var a=n>0?t.cloneNode(!0):t,l=e[n],s=l.parentNode,i=l.nextSibling;return a.appendChild(l),i?s.insertBefore(a,i):s.appendChild(a),a}}function r(e){e&&e.parentNode.removeChild(e)}function o(e,t){e.insertBefore(t,e.firstChild)}function u(e,t){for(var n in t)e.setAttribute(n,t[n])}function c(e,t){if(!j.string(e)||j.empty(e))return{};var n={};return e.split(",").forEach(function(e){e=e.trim();var a=e.charAt(0);switch(a){case".":var l=e.replace(".","");j.object(t)&&j.string(t.class)&&(t.class+=" "+l),n.class=l;break;case"#":n.id=e.replace("#","");break;case"[":e=e.replace(/[\[\]]/g,"");var s=e.split("="),i=s[0],r=s.length>1?s[1].replace(/[\"\']/g,""):"";n[i]=r}}),n}function d(e,n,a){var l=t.createElement(e);return j.object(n)&&u(l,n),j.string(a)&&(l.textContent=a),l}function p(e,t,n,a){var l=d(e,n,a);o(t,l)}function m(e){for(var t=e.childNodes.length;t--;)e.removeChild(e.lastChild)}function f(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}}function y(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))}function b(e,n){var a=Element.prototype,l=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return l.call(e,n)}function g(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null}function v(e,t,n,a,l){k(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},l)}function h(e,t,n,a,l){var s=t.split(" ");if(j.boolean(l)||(l=!1),e instanceof NodeList)for(var i=0;i<e.length;i++)e[i]instanceof Node&&h(e[i],arguments[1],arguments[2],arguments[3]);else for(var r=0;r<s.length;r++)e[a?"addEventListener":"removeEventListener"](s[r],n,l)}function k(e,t,n,a){j.undefined(e)||h(e,t,n,!0,a)}function C(e,t,n,a){j.undefined(e)||h(e,t,n,!1,a)}function w(e,t,n,a){if(e&&t){j.boolean(n)||(n=!1);var l=new CustomEvent(t,{bubbles:n,detail:a});e.dispatchEvent(l)}}function T(e,t){if(e)return t=j.boolean(t)?t:!e.getAttribute("aria-pressed"),e.setAttribute("aria-pressed",t),t}function S(e,t){return 0===e||0===t||isNaN(e)||isNaN(t)?0:(e/t*100).toFixed(2)}function E(){var e=arguments;if(e.length){if(1===e.length)return e[0];var t=Array.prototype.shift.call(e);j.object(t)||(t={});for(var n=e.length,a=0;a<n;a++){var l=e[a];j.object(l)||(l={});for(var s in l)l[s]&&l[s].constructor&&l[s].constructor===Object?(t[s]=t[s]||{},E(t[s],l[s])):t[s]=l[s]}return t}}function x(e){var t=/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;return e.match(t)?RegExp.$2:e}function A(e){var t=/^.*(vimeo.com\/|video\/)(\d+).*/;return e.match(t)?RegExp.$2:e}function _(h,_){function N(t,n){_.debug&&e.console&&(n=Array.prototype.slice.call(n),j.string(_.logPrefix)&&_.logPrefix.length&&n.unshift(_.logPrefix),e.console[t].apply(e.console,n))}function R(e,t,n,a){w(e,t,n,E({},a,{plyr:rt}))}function D(e){return ot.elements.container.querySelectorAll(e)}function W(e){return D(e)[0]}function B(){function e(e){9===e.which&&ot.fullscreen.active&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=D("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];k(ot.elements.container,"keydown",e)}function Y(e,t){j.string(t)?p(e,ot.elements.media,{src:t}):j.array(t)&&t.forEach(function(t){p(e,ot.elements.media,t)})}function H(){return{url:_.iconUrl,absolute:0===_.iconUrl.indexOf("http")||ot.browser.isIE}}function U(e,n){var a="http://www.w3.org/2000/svg",l=H(),s=(l.absolute?"":l.url)+"#"+_.iconPrefix,i=t.createElementNS(a,"svg");u(i,E(n,{role:"presentation"}));var r=t.createElementNS(a,"use");return r.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s+"-"+e),i.appendChild(r),i}function K(e){var t=_.i18n[e];switch(e){case"pip":t="PIP";break;case"airplay":t="AirPlay"}return d("span",{class:_.classes.hidden},t)}function Q(e){var t=d("span",{class:_.classes.menu.value});return t.appendChild(d("span",{class:_.classes.menu.badge},e)),t}function X(e,t){var n,a,l,s=d("button");switch(j.object(t)||(t={}),"class"in t?t.class.indexOf(_.classes.control)===-1&&(t.class+=" "+_.classes.control):t.class=_.classes.control,e){case"mute":l="toggleMute",n="volume",a="muted";break;case"captions":l="toggleCaptions",n="captions-off",a="captions-on";break;case"fullscreen":l="toggleFullscreen",n="enter-fullscreen",a="exit-fullscreen";break;case"play-large":t.class="plyr__play-large",e="play",l="play",n="play";break;default:l=e,n=e}return E(t,c(_.selectors.buttons[e],t)),j.string(a)&&s.appendChild(U(a,{class:"icon--"+a})),s.appendChild(U(n)),s.appendChild(K(l)),u(s,t),ot.elements.buttons[e]=s,s}function z(e,t){var n=d("label",{for:t.id,class:_.classes.hidden},_.i18n[e]),a=d("input",E(c(_.selectors.inputs[e]),{type:"range",min:0,max:100,step:.1,value:0,autocomplete:"off"},t));return ot.elements.inputs[e]=a,{label:n,input:a}}function G(e,t){var n=d("progress",E(c(_.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(d("span",null,"0"));var a="";switch(e){case"played":a=_.i18n.played;break;case"buffer":a=_.i18n.buffered}n.textContent="% "+a.toLowerCase()}return ot.elements.display[e]=n,n}function J(e){var t=d("span",{class:"plyr__time"});return t.appendChild(d("span",{class:_.classes.hidden},_.i18n[e])),t.appendChild(d("span",c(_.selectors.display[e]),"00:00")),ot.elements.display[e]=t,t}function $(e){var t=d("div",c(_.selectors.controls.wrapper));if(s(_.controls,"restart")&&t.appendChild(X("restart")),s(_.controls,"rewind")&&t.appendChild(X("rewind")),s(_.controls,"play")&&(t.appendChild(X("play")),t.appendChild(X("pause"))),s(_.controls,"fast-forward")&&t.appendChild(X("fast-forward")),s(_.controls,"progress")){var n=d("span",c(_.selectors.progress)),a=z("seek",{id:"plyr-seek-"+e.id});if(n.appendChild(a.label),n.appendChild(a.input),n.appendChild(G("played")),n.appendChild(G("buffer")),_.tooltips.seek){var l=d("span",{role:"tooltip",class:_.classes.tooltip},"00:00");n.appendChild(l),ot.elements.display.seekTooltip=l}ot.elements.progress=n,t.appendChild(ot.elements.progress)}if(s(_.controls,"current-time")&&t.appendChild(J("currentTime")),s(_.controls,"duration")&&t.appendChild(J("duration")),s(_.controls,"mute")&&t.appendChild(X("mute")),s(_.controls,"volume")){var i=d("span",{class:"plyr__volume"}),r={max:10,value:_.volume},o=z("volume",E(r,{id:"plyr-volume-"+e.id}));i.appendChild(o.label),i.appendChild(o.input);var u=G("volume",r);i.appendChild(u),t.appendChild(i)}if(s(_.controls,"captions")&&t.appendChild(X("captions")),s(_.controls,"settings")){var p=d("span",E(c(_.selectors.buttons.settings),{class:"plyr__menu"}));p.appendChild(X("settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var m=d("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=d("div"),y=d("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel",tabindex:-1}),b=d("ul",{role:"tablist"});["captions","quality","speed","loop"].forEach(function(t){var n=d("li",{role:"tab"}),a=d("button",E(c(_.selectors.buttons.settings),{type:"button",class:_.classes.control+" "+_.classes.control+"--forward",id:"plyr-settings-"+e.id+"-"+t+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+t,"aria-expanded":!1}),_.i18n[t]),l=d("span",{class:_.classes.menu.value});l.innerHTML=e[t],a.appendChild(l),n.appendChild(a),b.appendChild(n),ot.elements.settings.tabs[t]=n}),y.appendChild(b),f.appendChild(y),["captions","quality","speed","loop"].forEach(function(t){var n=d("div",{id:"plyr-settings-"+e.id+"-"+t,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-tab-"+e.id,role:"tabpanel",tabindex:-1}),a=d("button",{type:"button",class:_.classes.control+" "+_.classes.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},_.i18n[t]);n.appendChild(a);var l=d("ul");n.appendChild(l),f.appendChild(n),ot.elements.settings.panes[t]=n}),m.appendChild(f),p.appendChild(m),t.appendChild(p),ot.elements.settings.menu=p}return s(_.controls,"pip")&&V.pip&&t.appendChild(X("pip")),s(_.controls,"airplay")&&V.airplay&&t.appendChild(X("airplay")),s(_.controls,"fullscreen")&&t.appendChild(X("fullscreen")),ot.elements.controls=t,ee(),t}function Z(e,n){function a(e){var t="";switch(e){case"hd2160":t="4K";break;case"hd1440":t="WQHD";break;case"hd1080":t="HD";break;case"hd720":t="HD"}return t.length?Q(t):null}function l(e){switch(e){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";default:return"Auto"}}if(!j.object(ot.quality)&&(ot.quality={available:e,current:n},j.array(e)&&e.length)){var s=e.filter(function(e){return["tiny","small"].indexOf(e)===-1}),i=ot.elements.settings.panes.quality.querySelector("ul");s.forEach(function(e){var n=d("li"),s=d("label",{class:_.classes.control,for:"plyr-quality-"+e}),r=d("input",E(c(_.selectors.inputs.quality),{type:"radio",id:"plyr-quality-"+e,name:"plyr-quality",value:e}));e===ot.quality.current&&r.setAttribute("checked",""),s.appendChild(r),s.appendChild(t.createTextNode(l(e)));var o=a(e);j.htmlElement(o)&&s.appendChild(o),n.appendChild(s),i.appendChild(n)})}}function ee(){var e=["start","end","all","reset"],t=ot.elements.settings.panes.loop.querySelector("ul");e.forEach(function(e){var n=d("li"),a=d("button",E(c(_.selectors.buttons.loop),{type:"button",class:_.classes.control,"data-plyr-loop-action":e}),_.i18n[e]);if(s(["start","end"],e)){var l=Q("0:00");a.appendChild(l)}n.appendChild(a),t.appendChild(n)})}function te(){var e=ot.elements.settings.panes.captions.querySelector("ul");m(e),j.empty(ot.captions.tracks)||[].forEach.call(ot.captions.tracks,function(n,a){if(!j.function(n)){var l=d("li"),s=d("label",{class:_.classes.control,for:"plyr-language-"+n.language}),i=d("input",E(c(_.selectors.inputs.language),{type:"radio",id:"plyr-language-"+n.language,name:"plyr-language",value:n.language}));n.language===_.captions.language.toLowerCase()&&i.setAttribute("checked",""),s.appendChild(i),s.appendChild(t.createTextNode(n.label||n.language)),s.appendChild(Q(n.language.toUpperCase())),l.appendChild(s),e.appendChild(l)}})}function ne(){if(ot.supported.full&&("audio"!==ot.type||_.fullscreen.allowAudio)&&_.fullscreen.enabled){var e=V.fullscreen;e||_.fullscreen.fallback&&!l()?(dt((e?"Native":"Fallback")+" fullscreen enabled"),f(ot.elements.container,_.classes.fullscreen.enabled,!0)):dt("Fullscreen not supported and fallback disabled"),ot.elements.buttons&&ot.elements.buttons.fullscreen&&T(ot.elements.buttons.fullscreen,!1),B()}}function ae(){if("video"===ot.type&&V.textTracks)if(j.htmlElement(ot.elements.captions)||(ot.elements.captions=d("div",c(_.selectors.captions)),ot.elements.wrapper.appendChild(ot.elements.captions)),ot.captions.tracks=ot.elements.media.textTracks,j.empty(ot.captions.tracks))f(ot.elements.container,_.classes.captions.enabled);else{var e=_.captions.language.toLowerCase();[].forEach.call(ot.captions.tracks,function(t){C(t,"cuechange",se),t.mode="hidden",t.language===e&&(ot.captions.currentTrack=t)}),j.track(ot.captions.currentTrack)||(pt("No language found to match "+e+" in tracks"),ot.captions.currentTrack=ot.captions.tracks[0]),oe(ot);var t=ot.captions.currentTrack;j.track(t)&&s(["captions","subtitles"],t.kind)&&(k(t,"cuechange",se),t.activeCues&&t.activeCues.length>0&&se(t)),te()}}function le(){return!V.textTracks||j.empty(ot.captions.tracks)?"No Subs":ot.captions.enabled?ot.captions.currentTrack.label:"Disabled"}function se(e){j.event(e)&&(e=e.target);var t=e.activeCues[0];j.cue(t)?re(t.getCueAsHTML()):re()}function ie(e){j.string(e)?_.captions.language=e.toLowerCase():j.event(e)&&(_.captions.language=e.target.value.toLowerCase()),re(),ae()}function re(e){var t=W(_.selectors.captions);if(j.htmlElement(t)){var n=d("span");m(t),j.undefined(e)&&(e=""),j.string(e)?n.textContent=e.trim():n.appendChild(e),t.appendChild(n)}}function oe(){if(ot.elements.buttons.captions){f(ot.elements.container,_.classes.captions.enabled,!0);var e=ot.storage.captions;j.boolean(e)||(e=_.captions.defaultActive),e&&(f(ot.elements.container,_.classes.captions.active,!0),T(ot.elements.buttons.captions,!0))}}function ue(e){ot.supported.full&&ot.elements.buttons.captions&&(j.boolean(e)||(e=ot.elements.container.className.indexOf(_.classes.captions.active)===-1),ot.captions.enabled=e,T(ot.elements.buttons.captions,ot.captions.enabled),f(ot.elements.container,_.classes.captions.active,ot.captions.enabled),R(ot.elements.container,ot.captions.enabled?"captionsenabled":"captionsdisabled",!0),ye({captions:ot.captions.enabled}))}function ce(){if(_.loadSprite){var e=H();e.absolute?(dt("AJAX loading absolute SVG sprite"+(ot.browser.isIE?" (due to IE)":"")),P(e.url,"sprite-plyr")):dt("Sprite will be used as external resource directly")}s(_.controls,"play-large")&&(ot.elements.buttons.playLarge=X("play-large"),ot.elements.container.appendChild(ot.elements.buttons.playLarge)),ot.id=Math.floor(1e4*Math.random());var n,a=$({id:ot.id,seektime:_.seekTime,speed:Ae(),quality:"HD",captions:le(),loop:"None"});if(j.string(_.selectors.controls.container)&&(n=t.querySelector(_.selectors.controls.container)),j.htmlElement(n)||(n=ot.elements.container),n.appendChild(a),_.tooltips.controls)for(var l=D([_.selectors.controls.wrapper," ",_.selectors.labels," .",_.classes.hidden].join("")),i=l.length-1;i>=0;i--){var r=l[i];f(r,_.classes.hidden,!1),f(r,_.classes.tooltip,!0)}}function de(){f(ot.elements.container,_.selectors.container.replace(".",""),ot.supported.full)}function pe(e){e&&s(O.html5,ot.type)?ot.elements.media.setAttribute("controls",""):ot.elements.media.removeAttribute("controls")}function me(e){var t=_.i18n.play;j.string(_.title)&&_.title.length&&(t+=", "+_.title,ot.elements.container.setAttribute("aria-label",_.title)),ot.supported.full&&(j.htmlElement(ot.elements.buttons.play)&&ot.elements.buttons.play.setAttribute("aria-label",t),j.htmlElement(ot.elements.buttons.playLarge)&&ot.elements.buttons.playLarge.setAttribute("aria-label",t)),j.htmlElement(e)&&e.setAttribute("title",_.i18n.frameTitle.replace("{title}",_.title))}function fe(){var t=null;ot.storage={},V.storage&&_.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(_.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?ye({volume:parseFloat(t)}):ot.storage=JSON.parse(t)))}function ye(t){V.storage&&_.storage.enabled&&(E(ot.storage,t),e.localStorage.setItem(_.storage.key,JSON.stringify(ot.storage)))}function be(){if(!ot.elements.media)return void pt("No media element found!");if(ot.supported.full&&(f(ot.elements.container,_.classes.type.replace("{0}",ot.type),!0),s(O.embed,ot.type)&&f(ot.elements.container,_.classes.type.replace("{0}","video"),!0),f(ot.elements.container,_.classes.pip.enabled,V.pip&&"video"===ot.type),f(ot.elements.container,_.classes.airplay.enabled,V.airplay&&s(O.html5,ot.type)),f(ot.elements.container,_.classes.stopped,_.autoplay),f(ot.elements.container,_.classes.isIos,ot.browser.isIos),f(ot.elements.container,_.classes.isTouch,ot.browser.isTouch),"video"===ot.type)){var e=d("div");e.setAttribute("class",_.classes.videoWrapper),i(ot.elements.media,e),ot.elements.wrapper=e}s(O.embed,ot.type)&&ge()}function ge(){var t,n=d("div"),l=ot.type+"-"+Math.floor(1e4*Math.random());switch(ot.type){case"youtube":t=x(ot.embedId);break;case"vimeo":t=A(ot.embedId);break;default:t=ot.embedId}for(var s=D('[id^="'+ot.type+'-"]'),i=s.length-1;i>=0;i--)r(s[i]);if(f(ot.elements.media,_.classes.videoWrapper,!0),f(ot.elements.media,_.classes.embedWrapper,!0),"youtube"===ot.type)ot.elements.media.appendChild(n),n.setAttribute("id",l),j.object(e.YT)?he(t,n):(a(_.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){he(t,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===ot.type)if(ot.supported.full?ot.elements.media.appendChild(n):n=ot.elements.media,n.setAttribute("id",l),j.object(e.Vimeo))ke(t,n);else{a(_.urls.vimeo.api);var o=e.setInterval(function(){j.object(e.Vimeo)&&(e.clearInterval(o),ke(t,n))},50)}else if("soundcloud"===ot.type){var c=d("iframe");c.loaded=!1,k(c,"load",function(){c.loaded=!0}),u(c,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+t,id:l}),n.appendChild(c),ot.elements.media.appendChild(n),e.SC||a(_.urls.soundcloud.api);var p=e.setInterval(function(){e.SC&&c.loaded&&(e.clearInterval(p),Ce.call(c))},50)}}function ve(){ot.supported.full&&(st(),it()),me(W("iframe"))}function he(t,n){ot.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:_.autoplay?1:0,controls:ot.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:_.captions.defaultActive?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"*"},events:{onError:function(e){R(ot.elements.container,"error",!0,{code:e.data,embed:e.target})},onPlaybackQualityChange:function(e){var t=e.target,n=t.getPlaybackQuality();console.warn(n)},onReady:function(t){var n=t.target;ot.elements.media.play=function(){n.playVideo(),ot.elements.media.paused=!1},ot.elements.media.pause=function(){n.pauseVideo(),ot.elements.media.paused=!0},ot.elements.media.stop=function(){n.stopVideo(),ot.elements.media.paused=!0},ot.elements.media.duration=n.getDuration(),ot.elements.media.paused=!0,ot.elements.media.currentTime=0,ot.elements.media.muted=n.isMuted();var a=n.getPlaybackRate(),l=n.getAvailablePlaybackRates();console.warn(a,l),_.title=n.getVideoData().title,ot.supported.full&&ot.elements.media.querySelector("iframe").setAttribute("tabindex","-1"),ve(),R(ot.elements.media,"timeupdate"),R(ot.elements.media,"durationchange"),e.clearInterval(ut.buffering),ut.buffering=e.setInterval(function(){ot.elements.media.buffered=n.getVideoLoadedFraction(),(null===ot.elements.media.lastBuffered||ot.elements.media.lastBuffered<ot.elements.media.buffered)&&R(ot.elements.media,"progress"),ot.elements.media.lastBuffered=ot.elements.media.buffered,1===ot.elements.media.buffered&&(e.clearInterval(ut.buffering),R(ot.elements.media,"canplaythrough"))},200)},onStateChange:function(t){var n=t.target;switch(e.clearInterval(ut.playing),t.data){case 0:ot.elements.media.paused=!0,R(ot.elements.media,"ended");break;case 1:ot.elements.media.paused=!1,ot.elements.media.seeking&&R(ot.elements.media,"seeked"),ot.elements.media.seeking=!1,R(ot.elements.media,"play"),R(ot.elements.media,"playing"),ut.playing=e.setInterval(function(){ot.elements.media.currentTime=n.getCurrentTime(),R(ot.elements.media,"timeupdate")},100),ot.elements.media.duration!==n.getDuration()&&(ot.elements.media.duration=n.getDuration(),R(ot.elements.media,"durationchange"));var a=n.getAvailableQualityLevels(),l=n.getPlaybackQuality();Z(a,l);break;case 2:ot.elements.media.paused=!0,R(ot.elements.media,"pause")}R(ot.elements.container,"statechange",!1,{code:t.data})}}})}function ke(t,n){ot.embed=new e.Vimeo.Player(n,{id:parseInt(t),loop:_.loop.active,autoplay:_.autoplay,byline:!1,portrait:!1,title:!1}),ot.elements.media.play=function(){ot.embed.play(),ot.elements.media.paused=!1},ot.elements.media.pause=function(){ot.embed.pause(),ot.elements.media.paused=!0},ot.elements.media.stop=function(){ot.embed.stop(),ot.elements.media.paused=!0},ot.elements.media.paused=!0,ot.elements.media.currentTime=0,ve(),ot.embed.getCurrentTime().then(function(e){ot.elements.media.currentTime=e,R(ot.elements.media,"timeupdate")}),ot.embed.getDuration().then(function(e){ot.elements.media.duration=e,R(ot.elements.media,"durationchange")}),ot.embed.on("loaded",function(){j.htmlElement(ot.embed.element)&&ot.supported.full&&ot.embed.element.setAttribute("tabindex","-1")}),ot.embed.on("play",function(){ot.elements.media.paused=!1,R(ot.elements.media,"play"),R(ot.elements.media,"playing")}),ot.embed.on("pause",function(){ot.elements.media.paused=!0,R(ot.elements.media,"pause")}),ot.embed.on("timeupdate",function(e){ot.elements.media.seeking=!1,ot.elements.media.currentTime=e.seconds,R(ot.elements.media,"timeupdate")}),ot.embed.on("progress",function(e){ot.elements.media.buffered=e.percent,R(ot.elements.media,"progress"),1===parseInt(e.percent)&&R(ot.elements.media,"canplaythrough")}),ot.embed.on("seeked",function(){ot.elements.media.seeking=!1,R(ot.elements.media,"seeked"),R(ot.elements.media,"play")}),ot.embed.on("ended",function(){ot.elements.media.paused=!0,R(ot.elements.media,"ended")})}function Ce(){ot.embed=e.SC.Widget(this),ot.embed.bind(e.SC.Widget.Events.READY,function(){ot.elements.media.play=function(){ot.embed.play(),ot.elements.media.paused=!1},ot.elements.media.pause=function(){ot.embed.pause(),ot.elements.media.paused=!0},ot.elements.media.stop=function(){ot.embed.seekTo(0),ot.embed.pause(),ot.elements.media.paused=!0},ot.elements.media.paused=!0,ot.elements.media.currentTime=0,ot.embed.getDuration(function(e){ot.elements.media.duration=e/1e3,ve()}),ot.embed.getPosition(function(e){ot.elements.media.currentTime=e,R(ot.elements.media,"timeupdate")}),ot.embed.bind(e.SC.Widget.Events.PLAY,function(){ot.elements.media.paused=!1,R(ot.elements.media,"play"),R(ot.elements.media,"playing")}),ot.embed.bind(e.SC.Widget.Events.PAUSE,function(){ot.elements.media.paused=!0,R(ot.elements.media,"pause")}),ot.embed.bind(e.SC.Widget.Events.PLAY_PROGRESS,function(e){ot.elements.media.seeking=!1,ot.elements.media.currentTime=e.currentPosition/1e3,R(ot.elements.media,"timeupdate")}),ot.embed.bind(e.SC.Widget.Events.LOAD_PROGRESS,function(e){ot.elements.media.buffered=e.loadProgress,R(ot.elements.media,"progress"),1===parseInt(e.loadProgress)&&R(ot.elements.media,"canplaythrough")}),ot.embed.bind(e.SC.Widget.Events.FINISH,function(){ot.elements.media.paused=!0,R(ot.elements.media,"ended")})})}function we(){"play"in ot.elements.media&&ot.elements.media.play()}function Te(){"pause"in ot.elements.media&&ot.elements.media.pause()}function Se(e){return j.boolean(e)||(e=ot.elements.media.paused),e?we():Te(),e}function Ee(e){s(["start","end","all","none","toggle"],e)||(e="toggle");var n=Number(ot.elements.media.currentTime);switch(e){case"start":_.loop.end&&_.loop.end<=n&&(_.loop.end=null),_.loop.start=n,_.loop.indicator.start=ot.elements.display.played.value;break;case"end":if(_.loop.start>=n)return;_.loop.end=n,_.loop.indicator.end=ot.elements.display.played.value;break;case"all":_.loop.start=0,_.loop.end=ot.elements.media.duration-2,_.loop.indicator.start=0,_.loop.indicator.end=100;break;case"toggle":_.loop.active?(_.loop.start=0,_.loop.end=null):(_.loop.start=0,_.loop.end=ot.elements.media.duration-2);break;default:_.loop.start=0,_.loop.end=null}_.loop.active=j.number(_.loop.start)&&j.number(_.loop.end);var a=(Ue(_.loop.start,W('[data-plyr-loop="start"]')),null);j.number(_.loop.end)&&(a=Ue(_.loop.end,t.querySelector('[data-loop__value="loopout"]'))),_.loop.active}function xe(e){if(j.undefined(e)&&(e=ot.storage.speed||_.defaultSpeed),!j.array(_.speeds))return void pt("Invalid speeds format");if(!j.number(e)){var t=_.speeds.indexOf(_.currentSpeed);if(t!==-1){var n=t+1;n>=_.speeds.length&&(n=0),e=_.speeds[n]}else e=_.defaultSpeed}_.currentSpeed=e,ot.elements.media.playbackRate=e,ye({speed:e})}function Ae(){return _.currentSpeed.toFixed(1).toString().replace(".0","")+"×"}function _e(e){j.number(e)||(e=_.seekTime),Ie(ot.elements.media.currentTime-e)}function Pe(e){j.number(e)||(e=_.seekTime),Ie(ot.elements.media.currentTime+e)}function Ie(e){var t=0,n=ot.elements.media.paused,a=Ne();j.number(e)?t=e:j.event(e)&&s(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Xe(t);try{ot.elements.media.currentTime=t.toFixed(4)}catch(e){}if(s(O.embed,ot.type)){switch(ot.type){case"youtube":ot.embed.seekTo(t);break;case"vimeo":ot.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":ot.embed.seekTo(1e3*t)}n&&Te(),R(ot.elements.media,"timeupdate"),ot.elements.media.seeking=!0,R(ot.elements.media,"seeking")}dt("Seeking to "+ot.elements.media.currentTime+" seconds")}function Ne(){var e=parseInt(_.duration),t=0;return null===ot.elements.media.duration||isNaN(ot.elements.media.duration)||(t=ot.elements.media.duration),isNaN(e)?t:e}function Fe(){f(ot.elements.container,_.classes.playing,!ot.elements.media.paused),f(ot.elements.container,_.classes.stopped,ot.elements.media.paused),Ge(ot.elements.media.paused)}function qe(){q={x:e.pageXOffset||0,y:e.pageYOffset||0}}function Le(){e.scrollTo(q.x,q.y)}function Oe(e){var n=V.fullscreen;if(n){if(!e||e.type!==M.eventType)return M.isFullScreen(ot.elements.container)?M.cancelFullScreen():(qe(),M.requestFullScreen(ot.elements.container)),void(ot.fullscreen.active=M.isFullScreen(ot.elements.container));ot.fullscreen.active=M.isFullScreen(ot.elements.container)}else ot.fullscreen.active=!ot.fullscreen.active,t.body.style.overflow=ot.fullscreen.active?"hidden":"";f(ot.elements.container,_.classes.fullscreen.active,ot.fullscreen.active),B(ot.fullscreen.active),ot.elements.buttons&&ot.elements.buttons.fullscreen&&T(ot.elements.buttons.fullscreen,ot.fullscreen.active),R(ot.elements.container,ot.fullscreen.active?"enterfullscreen":"exitfullscreen",!0),!ot.fullscreen.active&&n&&Le()}function je(n){var a=ot.elements.settings.menu.parentNode,l=n.target,s=t.getElementById(l.getAttribute("aria-controls")),i="false"===l.getAttribute("aria-expanded");if(j.htmlElement(s)){var o,u,c,d="tabpanel"===s.getAttribute("role");if(d){var p=a.querySelector('[role="tabpanel"][aria-hidden="false"]');c=p.parentNode,[].forEach.call(a.querySelectorAll('[aria-controls="'+p.getAttribute("id")+'"]'),function(e){e.setAttribute("aria-expanded",!1)}),c.style.width=p.scrollWidth+"px",c.style.height=p.scrollHeight+"px",p.setAttribute("aria-hidden",!0),p.setAttribute("tabindex",-1);var m=s.cloneNode(!0);m.style.position="absolute",m.style.opacity=0,m.setAttribute("aria-hidden",!1),c.appendChild(m),o=m.scrollWidth,u=m.scrollHeight,r(m)}s.setAttribute("aria-hidden",!i),l.setAttribute("aria-expanded",i),s.setAttribute("tabindex",0),d&&(c.style.width=o+"px",c.style.height=u+"px",e.setTimeout(function(){c.style.width="",c.style.height=""},300))}}function Me(e){if(j.boolean(e)||(e=!ot.elements.media.muted),T(ot.elements.buttons.mute,e),ot.elements.media.muted=e,0===ot.elements.media.volume&&Ve(_.volume),s(O.embed,ot.type)){switch(ot.type){case"youtube":ot.embed[ot.elements.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":ot.embed.setVolume(ot.elements.media.muted?0:parseFloat(_.volume/10))}R(ot.elements.media,"volumechange")}}function Ve(e){var t=10,n=0;if(j.event(e)&&(e=e.target.value),j.undefined(e)&&(e=ot.storage.volume),(null===e||isNaN(e))&&(e=_.volume),e>t&&(e=t),e<n&&(e=n),ot.elements.media.volume=parseFloat(e/t),ot.elements.display.volume&&(ot.elements.display.volume.value=e),s(O.embed,ot.type)){switch(ot.type){case"youtube":ot.embed.setVolume(100*ot.elements.media.volume);break;case"vimeo":case"soundcloud":ot.embed.setVolume(ot.elements.media.volume)}R(ot.elements.media,"volumechange")}0===e?ot.elements.media.muted=!0:ot.elements.media.muted&&e>0&&Me()}function Re(e){var t=ot.elements.media.muted?0:10*ot.elements.media.volume;j.number(e)||(e=1),Ve(t+e)}function De(e){var t=ot.elements.media.muted?0:10*ot.elements.media.volume;j.number(e)||(e=1),Ve(t-e)}function We(){var e=ot.elements.media.muted?0:10*ot.elements.media.volume;ot.supported.full&&(ot.elements.inputs.volume&&(ot.elements.inputs.volume.value=e),ot.elements.display.volume&&(ot.elements.display.volume.value=e)),ye({volume:e}),f(ot.elements.container,_.classes.muted,0===e),ot.supported.full&&ot.elements.buttons.mute&&T(ot.elements.buttons.mute,0===e)}function Be(e){var t="waiting"===e.type;clearTimeout(ut.loading),ut.loading=setTimeout(function(){f(ot.elements.container,_.classes.loading,t),Ge(t)},t?250:0)}function Ye(e){if(ot.supported.full){var t=ot.elements.display.played,n=0,a=Ne();if(e)switch(e.type){case"timeupdate":case"seeking":if(ot.elements.controls.pressed)return;n=S(ot.elements.media.currentTime,a),"timeupdate"===e.type&&ot.elements.inputs.seek&&(ot.elements.inputs.seek.value=n);break;case"playing":case"progress":t=ot.elements.display.buffer,n=function(){var e=ot.elements.media.buffered;return e&&e.length?S(e.end(0),a):j.number(e)?100*e:0}()}j.number(_.loop.start)&&j.number(_.loop.end)&&ot.elements.media.currentTime>=_.loop.end&&Ie(_.loop.start),He(t,n)}}function He(e,t){if(ot.supported.full){if(j.undefined(t)&&(t=0),j.undefined(e)){if(!j.htmlElement(ot.elements.display.buffer))return;e=ot.elements.display.buffer}if(j.htmlElement(e)){e.value=t;var n=e.getElementsByTagName("span")[0];j.htmlElement(n)&&(n.childNodes[0].nodeValue=t)}}}function Ue(e,t){if(t){isNaN(e)&&(e=0);var n=parseInt(e%60),a=parseInt(e/60%60),l=parseInt(e/60/60%60),s=parseInt(Ne()/60/60%60)>0;n=("0"+n).slice(-2),a=("0"+a).slice(-2);var i=(s?l+":":"")+a+":"+n;return t.textContent=i,i}}function Ke(){if(ot.supported.full){var e=Ne()||0;!ot.elements.display.duration&&_.displayDuration&&ot.elements.media.paused&&Ue(e,ot.elements.display.currentTime),ot.elements.display.duration&&Ue(e,ot.elements.display.duration),ze()}}function Qe(e){Ue(ot.elements.media.currentTime,ot.elements.display.currentTime),e&&"timeupdate"===e.type&&ot.elements.media.seeking||Ye(e)}function Xe(e){j.number(e)||(e=0);var t=Ne(),n=S(e,t);ot.elements.progress&&ot.elements.display.played&&(ot.elements.display.played.value=n),ot.elements.buttons&&ot.elements.inputs.seek&&(ot.elements.inputs.seek.value=n)}function ze(e){var t=Ne();if(_.tooltips.seek&&j.htmlElement(ot.elements.inputs.seek)&&j.htmlElement(ot.elements.display.seekTooltip)&&0!==t){var n=ot.elements.inputs.seek.getBoundingClientRect(),a=0,l=_.classes.tooltip+"--visible";if(j.event(e))a=100/n.width*(e.pageX-n.left);else{if(!y(ot.elements.display.seekTooltip,l))return;a=ot.elements.display.seekTooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),Ue(t/100*a,ot.elements.display.seekTooltip),ot.elements.display.seekTooltip.style.left=a+"%", +j.event(e)&&s(["mouseenter","mouseleave"],e.type)&&f(ot.elements.display.seekTooltip,l,"mouseenter"===e.type)}}function Ge(t){if(_.hideControls&&"audio"!==ot.type){var n=0,a=!1,l=t,i=y(ot.elements.container,_.classes.loading);if(j.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,l=s(["mousemove","touchstart","mouseenter","focus"],t.type),s(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):l=y(ot.elements.container,_.classes.hideControls)),e.clearTimeout(ut.hover),l||ot.elements.media.paused||i){if(f(ot.elements.container,_.classes.hideControls,!1),ot.elements.media.paused||i)return;ot.browser.isTouch&&(n=3e3)}l&&ot.elements.media.paused||(ut.hover=e.setTimeout(function(){(!ot.elements.controls.pressed&&!ot.elements.controls.hover||a)&&f(ot.elements.container,_.classes.hideControls,!0)},n))}}function Je(e){if(!j.undefined(e))return void $e(e);var t;switch(ot.type){case"youtube":t=ot.embed.getVideoUrl();break;case"vimeo":ot.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":ot.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=ot.elements.media.currentSrc}return t||""}function $e(e){function t(){if(ot.embed=null,r(ot.elements.media),"video"===ot.type&&ot.elements.wrapper&&r(ot.elements.wrapper),ot.elements.container&&ot.elements.container.removeAttribute("class"),"type"in e&&(ot.type=e.type,"video"===ot.type)){var t=e.sources[0];"type"in t&&s(O.embed,t.type)&&(ot.type=t.type)}switch(ot.supported=I(ot.type),ot.type){case"video":ot.elements.media=d("video");break;case"audio":ot.elements.media=d("audio");break;case"youtube":case"vimeo":case"soundcloud":ot.elements.media=d("div"),ot.embedId=e.sources[0].src}o(ot.elements.container,ot.elements.media),j.boolean(e.autoplay)&&(_.autoplay=e.autoplay),s(O.html5,ot.type)&&(_.crossorigin&&ot.elements.media.setAttribute("crossorigin",""),_.autoplay&&ot.elements.media.setAttribute("autoplay",""),"poster"in e&&ot.elements.media.setAttribute("poster",e.poster),_.loop.active&&ot.elements.media.setAttribute("loop","")),f(ot.elements.container,_.classes.fullscreen.active,ot.fullscreen.active),f(ot.elements.container,_.classes.captions.active,ot.captions.enabled),de(),s(O.html5,ot.type)&&Y("source",e.sources),be(),s(O.html5,ot.type)&&("tracks"in e&&Y("track",e.tracks),ot.elements.media.load()),(s(O.html5,ot.type)||s(O.embed,ot.type)&&!ot.supported.full)&&(st(),it()),_.title=e.title,me()}return j.object(e)&&"sources"in e&&e.sources.length?(f(ot.elements.container,_.classes.ready,!1),Te(),Xe(),He(),nt(),void at(t,!1)):void pt("Invalid source format")}function Ze(e){"video"===ot.type&&ot.elements.media.setAttribute("poster",e)}function et(){function n(){var e=Se(),t=ot.elements.buttons[e?"play":"pause"],n=ot.elements.buttons[e?"pause":"play"];if(n){var a=y(t,_.classes.tabFocus);setTimeout(function(){n.focus(),a&&(f(t,_.classes.tabFocus,!1),f(n,_.classes.tabFocus,!0))},100)}}function a(e){return e.keyCode?e.keyCode:e.which}function l(e){for(var t in ot.elements.buttons){var n=ot.elements.buttons[t];if(j.nodeList(n))for(var a=0;a<n.length;a++)f(n[a],_.classes.tabFocus,n[a]===e);else f(n,_.classes.tabFocus,n===e)}}function i(e){function t(){var e=ot.elements.media.duration;j.number(e)&&Ie(e/10*(l-48))}var l=a(e),i="keydown"===e.type,r=i&&l===o;if(j.number(l))if(i){var u=[48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79],c=[38,40];if(s(c,l)){var d=g();if(j.htmlElement(d)&&"radio"===g().type)return}switch(s(u,l)&&(e.preventDefault(),e.stopPropagation()),l){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||t();break;case 32:case 75:r||n();break;case 38:Re();break;case 40:De();break;case 77:r||Me();break;case 39:Pe();break;case 37:_e();break;case 70:Oe();break;case 67:r||ue();break;case 73:Ee("start");break;case 76:Ee();break;case 79:Ee("end")}!V.fullscreen&&ot.fullscreen.active&&27===l&&Oe(),o=l}else o=null}var r=ot.browser.isIE?"change":"input";if(_.keyboardShortcuts.focused){var o=null;_.keyboardShortcuts.global&&k(e,"keydown keyup",function(e){var t=a(e),n=g(),l=[48,49,50,51,52,53,54,56,57,75,77,70,67,73,76,79],r=F().length;1!==r||!s(l,t)||j.htmlElement(n)&&b(n,_.selectors.editable)||i(e)}),k(ot.elements.container,"keydown keyup",i)}k(e,"keyup",function(e){var t=a(e),n=g();9===t&&l(n)}),k(t.body,"click",function(){f(W("."+_.classes.tabFocus),_.classes.tabFocus,!1)});for(var u in ot.elements.buttons){var c=ot.elements.buttons[u];k(c,"blur",function(){f(c,"tab-focus",!1)})}var d=function(e,t,n){j.function(t)&&t.call(this,e),j.function(n)&&n.call(this,e)};v(ot.elements.buttons.play,"click",_.listeners.play,n),v(ot.elements.buttons.playLarge,"click",_.listeners.play,n),v(ot.elements.buttons.pause,"click",_.listeners.pause,n),v(ot.elements.buttons.restart,"click",_.listeners.restart,Ie),v(ot.elements.buttons.rewind,"click",_.listeners.rewind,_e),v(ot.elements.buttons.forward,"click",_.listeners.forward,Pe),v(ot.elements.buttons.mute,"click",_.listeners.mute,Me),v(ot.elements.buttons.captions,"click",_.listeners.captions,ue),v(ot.elements.buttons.fullscreen,"click",_.listeners.fullscreen,Oe),v(ot.elements.buttons.pip,"click",_.listeners.pip,function(e){V.pip&&ot.elements.media.webkitSetPresentationMode("picture-in-picture"===ot.elements.media.webkitPresentationMode?"inline":"picture-in-picture")}),v(ot.elements.buttons.airplay,"click",_.listeners.airplay,function(e){V.airplay&&ot.elements.media.webkitShowPlaybackTargetPicker()}),k(ot.elements.settings.menu,"click",je),k(t.body,"click",function(e){var t=ot.elements.settings.menu,n=t.querySelector("form");"true"===n.getAttribute("aria-hidden")||t.contains(e.target)||n.setAttribute("aria-hidden",!0)}),k(ot.elements.settings.menu,"click",function(e){b(e.target,_.selectors.inputs.speed)?d.call(this,e,_.listeners.speed,function(){console.warn("Set speed")}):b(e.target,_.selectors.inputs.quality)?d.call(this,e,_.listeners.quality,function(){console.warn("Set quality")}):b(e.target,_.selectors.buttons.loop)?d.call(this,e,_.listeners.loop,function(){var t=e.target.getAttribute("data-loop__value")||e.target.getAttribute("data-loop__type");s(["start","end","all","none"],t)&&Ee(t)}):b(e.target,_.selectors.inputs.language)&&d.call(this,e,_.listeners.language,ie)}),v(ot.elements.inputs.seek,r,_.listeners.seek,Ie),v(ot.elements.inputs.volume,r,_.listeners.volume,Ve),k(ot.elements.progress,"mouseenter mouseleave mousemove",ze),_.hideControls&&(k(ot.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen",Ge),k(ot.elements.controls,"mouseenter mouseleave",function(e){ot.elements.controls.hover="mouseenter"===e.type}),k(ot.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){ot.elements.controls.pressed=s(["mousedown","touchstart"],e.type)}),k(ot.elements.controls,"focus blur",Ge,!0)),v(ot.elements.inputs.volume,"wheel",_.listeners.volume,function(e){var t=e.webkitDirectionInvertedFromDevice,n=.2,a=0;(e.deltaY<0||e.deltaX>0)&&(t?(De(n),a=-1):(Re(n),a=1)),(e.deltaY>0||e.deltaX<0)&&(t?(Re(n),a=1):(De(n),a=-1)),(1===a&&ot.elements.media.volume<1||a===-1&&ot.elements.media.volume>0)&&e.preventDefault()}),V.fullscreen&&k(t,M.eventType,Oe)}function tt(){if(k(ot.elements.media,"timeupdate seeking",Qe),k(ot.elements.media,"durationchange loadedmetadata",Ke),k(ot.elements.media,"ended",function(){"video"===ot.type&&_.showPosterOnEnd&&("video"===ot.type&&re(),Ie(),ot.elements.media.load())}),k(ot.elements.media,"progress playing",Ye),k(ot.elements.media,"volumechange",We),k(ot.elements.media,"play pause ended",Fe),k(ot.elements.media,"waiting canplay seeked",Be),_.clickToPlay&&"audio"!==ot.type){var e=W("."+_.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",k(e,"click",function(){_.hideControls&&ot.browser.isTouch&&!ot.elements.media.paused||(ot.elements.media.paused?we():ot.elements.media.ended?(Ie(),we()):Te())})}_.disableContextMenu&&k(ot.elements.media,"contextmenu",function(e){e.preventDefault()}),k(ot.elements.media,_.events.concat(["keyup","keydown"]).join(" "),function(e){R(ot.elements.container,e.type,!0)})}function nt(){if(s(O.html5,ot.type)){for(var e=ot.elements.media.querySelectorAll("source"),t=0;t<e.length;t++)r(e[t]);ot.elements.media.setAttribute("src","https://cdn.selz.com/plyr/blank.mp4"),ot.elements.media.load(),dt("Cancelled network requests")}}function at(n,a){function l(){j.boolean(a)||(a=!0),j.function(n)&&n.call(ct),a&&(ot.init=!1,ot.elements.container.parentNode.replaceChild(ct,ot.elements.container),t.body.style.overflow="",R(ct,"destroyed",!0))}if(!ot.init)return null;switch(ot.type){case"youtube":e.clearInterval(ut.buffering),e.clearInterval(ut.playing),ot.embed.destroy(),l();break;case"vimeo":ot.embed.unload().then(l),e.setTimeout(l,200);break;case"video":case"audio":pe(!0),l()}}function lt(){if(ot.init)return null;if(ot.browser=n(),j.htmlElement(ot.elements.media)){fe();var e=h.tagName.toLowerCase();"div"===e?(ot.type=h.getAttribute("data-type"),ot.embedId=h.getAttribute("data-video-id"),h.removeAttribute("data-type"),h.removeAttribute("data-video-id")):(ot.type=e,_.crossorigin=null!==h.getAttribute("crossorigin"),_.autoplay=_.autoplay||null!==h.getAttribute("autoplay"),_.loop=_.loop||null!==h.getAttribute("loop")),ot.supported=I(ot.type),ot.supported.basic&&(ot.elements.container=i(h,d("div")),ot.elements.container.setAttribute("tabindex",0),de(),dt(""+ot.browser.name+" "+ot.browser.version),be(),(s(O.html5,ot.type)||s(O.embed,ot.type)&&!ot.supported.full)&&(st(),it(),me()),ot.init=!0)}}function st(){return ot.supported.full?(j.htmlElement(W(_.selectors.controls.wrapper))||(ce(),et()),tt(),pe(),ne(),ae(),Ve(),We(),xe(),Ee(),Qe(),void Fe()):(pt("Basic support only",ot.type),r(W(_.selectors.controls.wrapper)),r(W(_.selectors.buttons.play)),void pe(!0))}function it(){e.setTimeout(function(){R(ot.elements.media,"ready")},0),f(ot.elements.media,L.classes.setup,!0),f(ot.elements.container,_.classes.ready,!0),ot.elements.media.plyr=rt,_.autoplay&&we()}var rt,ot=this,ut={};ot.fullscreen={active:!1},ot.elements={buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},media:h,captions:null},ot.captions={exist:!1,enabled:!1,captions:[],tracks:[],currentTrack:null};var ct=h.cloneNode(!0),dt=function(){N("log",arguments)},pt=function(){N("warn",arguments)};return dt("Config",_),dt("Support",V),rt={getOriginal:function(){return ct},getContainer:function(){return ot.elements.container},getEmbed:function(){return ot.embed},getMedia:function(){return ot.elements.media},getType:function(){return ot.type},getDuration:Ne,getCurrentTime:function(){return ot.elements.media.currentTime},getVolume:function(){return ot.elements.media.volume},isMuted:function(){return ot.elements.media.muted},isReady:function(){return y(ot.elements.container,_.classes.ready)},isLoading:function(){return y(ot.elements.container,_.classes.loading)},isPaused:function(){return ot.elements.media.paused},isLooping:function(){return _.loop.active},on:function(e,t){return k(ot.elements.container,e,t),this},play:we,pause:Te,loop:Ee,stop:function(){Te(),Ie()},restart:Ie,rewind:_e,forward:Pe,seek:Ie,source:Je,poster:Ze,setVolume:Ve,setSpeed:xe,togglePlay:Se,toggleMute:Me,toggleCaptions:ue,toggleFullscreen:Oe,toggleControls:Ge,setLanguage:ie,isFullscreen:function(){return ot.fullscreen.active||!1},support:function(e){return V.mime(ot,e)},destroy:at},lt(),ot.init?rt:null}function P(e,n){var a=new XMLHttpRequest;if(!j.string(n)||!j.htmlElement(t.querySelector("#"+n))){var l=d("div");l.setAttribute("hidden",""),j.string(n)&&l.setAttribute("id",n),t.body.insertBefore(l,t.body.childNodes[0]),"withCredentials"in a&&(a.open("GET",e,!0),a.onload=function(){l.innerHTML=a.responseText},a.send())}}function I(e){var t,a,l=n(),s=l.isIE&&l.version<=9,i=l.isIos,r=/iPhone|iPod/i.test(navigator.userAgent),o=!!d("audio").canPlayType,u=!!d("video").canPlayType;switch(e){case"video":t=u,a=t&&!s&&!r;break;case"audio":t=o,a=t&&!s;break;case"vimeo":case"youtube":case"soundcloud":t=!0,a=!s&&!i;break;default:t=o&&u,a=t&&!s}return{basic:t,full:a}}function N(e,n){function a(e,t){y(t,L.classes.hook)||l.push({target:e,media:t})}var l=[],s=[],i=[L.selectors.html5,L.selectors.embed].join(",");if(j.string(e)?e=t.querySelectorAll(e):j.htmlElement(e)?e=[e]:j.nodeList(e)||j.array(e)||j.string(e)||(j.undefined(n)&&j.object(e)&&(n=e),e=t.querySelectorAll(i)),j.nodeList(e)&&(e=Array.prototype.slice.call(e)),!I().basic||!e.length)return!1;for(var r=0;r<e.length;r++){var o=e[r],u=o.querySelectorAll(i);if(u.length)for(var c=0;c<u.length;c++)a(o,u[c]);else b(o,i)&&a(o,o)}return l.forEach(function(e){var t=e.target,a=e.media,l=!1;a===t&&(l=!0);var i={};try{i=JSON.parse(t.getAttribute("data-plyr"))}catch(e){}var r=E({},L,n,i);if(!r.enabled)return null;var o=new _(a,r);if(j.object(o)){if(r.debug){var u=r.events.concat(["setup","statechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled"]);k(o.getContainer(),u.join(" "),function(e){console.log([r.logPrefix,"event:",e.type].join(" "),e.detail.plyr)})}w(o.getContainer(),"setup",!0,{plyr:o}),s.push(o)}}),s}function F(e){if(j.string(e)?e=t.querySelector(e):j.undefined(e)&&(e=t.body),j.htmlElement(e)){var n=e.querySelectorAll("."+L.classes.setup),a=[];return Array.prototype.slice.call(n).forEach(function(e){j.object(e.plyr)&&a.push(e.plyr)}),a}return[]}var q={x:0,y:0},L={enabled:!0,debug:!1,autoplay:!1,seekTime:10,volume:10,defaultSpeed:1,currentSpeed:1,speeds:[.5,1,1.5,2],duration:null,displayDuration:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/2.0.10/plyr.svg",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,quality:{default:"auto"},loop:{active:!1,start:0,end:null,indicator:{start:0,end:0}},keyboardShortcuts:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},selectors:{html5:"video, audio",embed:"[data-type]",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:{setup:"plyr--setup",ready:"plyr--ready",videoWrapper:"plyr__video-wrapper",embedWrapper:"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"},captions:{defaultActive:!1,language:e.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"],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"},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:["ready","ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied"],logPrefix:""},O={embed:["youtube","vimeo","soundcloud"],html5:["video","audio"]},j={object:function(e){return null!==e&&"object"==typeof e&&e.constructor===Object},array:function(e){return null!==e&&"object"==typeof e&&e.constructor===Array},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(t){return null!==t&&(t instanceof e.TextTrackCue||t instanceof e.VTTCue)},track:function(t){return null!==t&&t instanceof e.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}},M=function(){var e=function(){var e=!1;return j.function(t.cancelFullScreen)?e="":["webkit","o","moz","ms","khtml"].some(function(n){return j.function(t[n+"CancelFullScreen"])?(e=n,!0):j.function(t.msExitFullscreen)&&t.msFullscreenEnabled?(e="ms",!0):void 0}),e}();return{prefix:e,eventType:"ms"===e?"MSFullscreenChange":e+"fullscreenchange",isFullScreen:function(n){if(!V.fullscreen)return!1;switch(j.undefined(n)&&(n=t.body),this.prefix){case"":return t.fullscreenElement===n;case"moz":return t.mozFullScreenElement===n;default:return t[e+"FullscreenElement"]===n}},requestFullScreen:function(n){return!!V.fullscreen&&(j.htmlElement(n)||(n=t.body),console.log(e),""===e?n.requestFullScreen():n[e+("ms"===e?"RequestFullscreen":"RequestFullScreen")]())},cancelFullScreen:function(){return!!V.fullscreen&&(""===e?t.cancelFullScreen():t[e+("ms"===e?"ExitFullscreen":"CancelFullScreen")]())},element:function(){return V.fullscreen?""===e?t.fullscreenElement:t[e+"FullscreenElement"]:null}}}(),V={fullscreen:M.prefix!==!1,storage:function(){if(!("localStorage"in e))return!1;try{e.localStorage.setItem("___test","OK");var t=e.localStorage.getItem("___test");return e.localStorage.removeItem("___test"),"OK"===t}catch(e){return!1}return!1}(),pip:function(){return j.function(d("video").webkitSetPresentationMode)}(),airplay:function(){return j.function(e.WebKitPlaybackTargetAvailabilityEvent)}(),mime:function(e,t){var n=e.media;try{if(!j.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:function(){return"textTracks"in t.createElement("video")}()};return{setup:N,supported:I,loadSprite:P,get:F}}),function(){function e(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}"function"!=typeof window.CustomEvent&&(e.prototype=window.Event.prototype,window.CustomEvent=e)}();
\ No newline at end of file @@ -5,19 +5,18 @@ - Add preferred quality option into config - Update quality options on YouTube play (can't get up front?!) - Update speed options on YouTube load - - Get quality options for HTML5 somehow (multi source?) -- Build templating for controls somehow - Finish and test PiP (need Sierra VM) - Finish and test AirPlay (need Sierra VM) - - Download button - grab first <source> or src attribute (or maybe use currentSrc?) for HTML5 and links for embedded players +- Controls hide/show events # Notes - No quality HTML5 support (yet) - No Vimeo quality support - No Vimeo or YouTube caption support - No PiP or AirPlay for Vimeo/YouTube +- Settings won't be supported for custom controls (coming soon, need to work on templating) #### Bugs - Fix audio setup bug when calling .setup() again @@ -26,7 +25,7 @@ - Look at Vimeo's "background" option #### Breaking changes -- Custom controls HTML removed (temporarily, will return) - perhaps can re-instate but no options UI +- New config options for loop - Selectors changes (new `input` and `display` object) - DOCUMENT ## Added diff --git a/src/js/plyr.js b/src/js/plyr.js index 55bdd252..99a70b88 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -37,20 +37,8 @@ enabled: true, debug: false, autoplay: false, - loop: { - active: false, - start: 0, - end: null, - indicator: { - start: 0, - end: 0 - } - }, seekTime: 10, volume: 10, - defaultSpeed: 1.0, - currentSpeed: 1, - speeds: [0.5, 1.0, 1.5, 2.0], duration: null, displayDuration: true, loadSprite: true, @@ -60,18 +48,44 @@ hideControls: true, showPosterOnEnd: false, disableContextMenu: true, + + // Quality settings quality: { - options: false + default: 'auto', + selected: 'auto' }, + + // Set loops + loop: { + active: false, + start: 0, + end: null, + indicator: { + start: 0, + end: 0 + } + }, + + // Speed up/down + speed: { + selected: 1.0, + options: [0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0] + }, + + // Keyboard shortcut settings keyboardShortcuts: { focused: true, global: false }, + + // Display tooltips tooltips: { controls: false, seek: true }, - tracks: [], + + // Selectors + // Change these to match your template if using custom HTML selectors: { html5: 'video, audio', embed: '[data-type]', @@ -94,14 +108,14 @@ pip: '[data-plyr="pip"]', airplay: '[data-plyr="airplay"]', settings: '[data-plyr="settings"]', - speed: '[data-plyr="speed"]', - loop: '[data-plyr="loop"]', - language: '[data-plyr="language"]', - quality: '[data-plyr="quality"]' + loop: '[data-plyr="loop"]' }, inputs: { seek: '[data-plyr="seek"]', - volume: '[data-plyr="volume"]' + volume: '[data-plyr="volume"]', + speed: '[data-plyr="speed"]', + language: '[data-plyr="language"]', + quality: '[data-plyr="quality"]' }, display: { currentTime: '.plyr__time--current', @@ -117,6 +131,8 @@ quality: '.js-plyr__menu__list--quality' } }, + + // Class hooks added to the player in different states classes: { setup: 'plyr--setup', ready: 'plyr--ready', @@ -156,19 +172,27 @@ }, tabFocus: 'tab-focus' }, + + // Captions settings captions: { defaultActive: false, - selectedIndex: 0 + language: window.navigator.language.split("-")[0] }, + + // Fullscreen settings fullscreen: { enabled: true, fallback: true, allowAudio: false }, + + // Local storage storage: { enabled: true, key: 'plyr' }, + + // Default controls controls: [ 'play-large', 'play', @@ -182,6 +206,8 @@ 'airplay', 'fullscreen' ], + + // Localisation i18n: { restart: 'Restart', rewind: 'Rewind {seektime} secs', @@ -208,10 +234,7 @@ all: 'All', reset: 'Reset', }, - types: { - embed: ['youtube', 'vimeo', 'soundcloud'], - html5: ['video', 'audio'] - }, + // URLs urls: { vimeo: { @@ -224,6 +247,7 @@ api: 'https://w.soundcloud.com/player/api.js' } }, + // Custom control listeners listeners: { seek: null, @@ -243,7 +267,8 @@ loop: null, language: null }, - // Events to watch on HTML5 media elements + + // Events to watch on HTML5 media elements and bubble events: [ 'ready', 'ended', @@ -265,10 +290,17 @@ 'seeked', 'emptied' ], + // Logging logPrefix: '' }; + // Types + var types = { + embed: ['youtube', 'vimeo', 'soundcloud'], + html5: ['video', 'audio'] + }; + // Check variable types var is = { object: function(input) { @@ -298,6 +330,12 @@ event: function(input) { return input !== null && input instanceof Event; }, + cue: function(input) { + return input !== null && (input instanceof window.TextTrackCue || input instanceof window.VTTCue); + }, + track: function(input) { + return input !== null && input instanceof window.TextTrack; + }, undefined: function(input) { return input !== null && typeof input === 'undefined'; }, @@ -389,13 +427,14 @@ } // Inject a script - function injectScript(source) { - if (document.querySelectorAll('script[src="' + source + '"]').length) { + function injectScript(url) { + // Check script is not already referenced + if (document.querySelectorAll('script[src="' + url + '"]').length) { return; } var tag = document.createElement('script'); - tag.src = source; + tag.src = url; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); @@ -569,11 +608,6 @@ } } - // Get a classname from selector - function getClassname(selector) { - return selector.replace('.', ''); - } - // Toggle class on an element function toggleClass(element, className, state) { if (element) { @@ -860,7 +894,8 @@ var support = { // Fullscreen support and set prefix fullscreen: fullscreen.prefix !== false, - // Local storage mode + + // Local storage // We can't assume if local storage is present that we can use it storage: (function() { if (!('localStorage' in window)) { @@ -887,16 +922,19 @@ return false; })(), + // Picture-in-picture support // Safari only currently pip: (function() { return is.function(createElement('video').webkitSetPresentationMode); })(), + // Airplay support // Safari only currently airplay: (function() { return is.function(window.WebKitPlaybackTargetAvailabilityEvent); })(), + // Check for mime type support against a player instance // Credits: http://diveintohtml5.info/everything.html // Related: http://www.leanbackplayer.com/test/h5mt.html @@ -935,7 +973,12 @@ // If we got this far, we're stuffed return false; - } + }, + + // Check for textTracks support + textTracks: (function() { + return 'textTracks' in document.createElement('video'); + })() }; // Player instance @@ -950,6 +993,7 @@ // Elements cache player.elements = { + container: null, buttons: {}, display: {}, progress: {}, @@ -959,37 +1003,29 @@ panes: {}, tabs: {} }, - media: media + media: media, + captions: null }; // Captions player.captions = { enabled: false, - textTracks: false, - captions: [] + captions: [], + tracks: [], + currentTrack: null }; // Set media var original = media.cloneNode(true); // Debugging - function logger(type, args) { - if (config.debug && window.console) { - args = Array.prototype.slice.call(args); - - if (is.string(config.logPrefix) && config.logPrefix.length) { - args.unshift(config.logPrefix); - } - - window.console[type].apply(window.console, args); - } + var log = function() {}; + var warn = function() {}; + if (config.debug && 'console' in window) { + log = window.console.log; + warn = window.console.warn; } - var log = function() { - logger('log', arguments); - }; - var warn = function() { - logger('warn', arguments); - }; + // Log config options and support log('Config', config); log('Support', support); @@ -1200,7 +1236,8 @@ min: 0, max: 100, step: 0.1, - value: 0 + value: 0, + autocomplete: 'off' }, attributes)); player.elements.inputs[type] = input; @@ -1394,8 +1431,7 @@ id: 'plyr-settings-' + data.id + '-home', 'aria-hidden': false, 'aria-labelled-by': 'plyr-settings-toggle-' + data.id, - role: 'tabpanel', - tabindex: -1 + role: 'tabpanel' }); var tabs = createElement('ul', { @@ -1440,7 +1476,7 @@ var pane = createElement('div', { id: 'plyr-settings-' + data.id + '-' + type, 'aria-hidden': true, - 'aria-labelled-by': 'plyr-settings-tab-' + data.id, + 'aria-labelled-by': 'plyr-settings-' + data.id + '-' + type + '-tab', role: 'tabpanel', tabindex: -1 }); @@ -1457,29 +1493,6 @@ var options = createElement('ul'); - /*switch (type) { - case 'captions': - if (is.array(config.tracks)) { - config.tracks.forEach(function(track, index) { - if (is.function(track)) { - return; - } - - var option = createElement('li'); - - var button = createButton('language', { - 'data-language': track.srclang, - 'data-index': index - }, track.label); - - option.appendChild(button); - - options.appendChild(options); - }); - } - break; - }*/ - pane.appendChild(options); inner.appendChild(pane); @@ -1494,183 +1507,6 @@ controls.appendChild(menu); player.elements.settings.menu = menu; - - /*html.push( - '<div class="plyr__menu" data-plyr="settings">', - '<button type="button" id="plyr-settings-toggle-{id}" class="plyr__control" aria-haspopup="true" aria-controls="plyr-settings-{id}" aria-expanded="false">', - '<svg><use xlink:href="' + iconPath + '-settings" /></svg>', - '<span class="plyr__sr-only">' + config.i18n.settings + '</span>', - '</button>', - '<form class="plyr__menu__container" id="plyr-settings-{id}" aria-hidden="true" aria-labelled-by="plyr-settings-toggle-{id}" role="tablist" tabindex="-1">', - '<div>', - '<div id="plyr-settings-{id}-primary" aria-hidden="false" aria-labelled-by="plyr-settings-toggle-{id}" role="tabpanel" tabindex="-1">', - '<ul>', - captionsMenuItem, - '<li role="tab">', - '<button type="button" class="plyr__control plyr__control--forward" id="plyr-settings-{id}-speed-toggle" aria-haspopup="true" aria-controls="plyr-settings-{id}-speed" aria-expanded="false">', - config.i18n.speed + - '<span class="plyr__menu__value" data-menu="speed">{speed}</span>', - '</button>', - '</li>', - '<li role="tab">', - - //showQuality, - - '<button type="button" class="plyr__control plyr__control--forward" id="plyr-settings-{id}-quality-toggle" aria-haspopup="true" aria-controls="plyr-settings-{id}-quality" aria-expanded="false">', - config.i18n.quality, - '<span class="plyr__menu__value">{quality}</span>', - '</button>', - - '</li>', - '<li role="tab">', - '<button type="button" class="plyr__control plyr__control--forward" id="plyr-settings-{id}-loop-toggle" aria-haspopup="true" aria-controls="plyr-settings-{id}-loop" aria-expanded="false">', - config.i18n.loop + - '<span class="plyr__menu__value" data-menu="loop">{loop}</span>', - '</button>', - '</li>', - '</ul>', - '</div>', - '<div id="plyr-settings-{id}-captions" aria-hidden="true" aria-labelled-by="plyr-settings-{id}-captions-toggle" role="tabpanel" tabindex="-1">', - '<ul>', - '<li role="tab">', - '<button type="button" class="plyr__control plyr__control--back" aria-haspopup="true" aria-controls="plyr-settings-{id}-primary" aria-expanded="false">', - config.i18n.captions, - '</button>', - '</li>', - '<li data-captions="langs">', - buildCaptionsMenu(), - '</li>', - '<li>', - '<button type="button" class="plyr__control" data-plyr="captions_menu">Off</button>', - '</li>', - '</ul>', - '</div>', - '<div id="plyr-settings-{id}-speed" aria-hidden="true" aria-labelled-by="plyr-settings-{id}-speed-toggle" role="tabpanel" tabindex="-1">', - '<ul>', - '<li role="tab">', - '<button type="button" class="plyr__control plyr__control--back" aria-haspopup="true" aria-controls="plyr-settings-{id}-primary" aria-expanded="false">', - config.i18n.speed, - '</button>', - '</li>', - '<li>', - '<label class="plyr__control">', - '<input type="radio" name="speed" data-plyr="speed" value="2.0" '+ (config.currentSpeed === 2 ? 'checked' : '') +'>', - '2.0×', - '</label>', - '</li>', - '<li>', - '<label class="plyr__control">', - '<input type="radio" name="speed" data-plyr="speed" value="1.5" '+ (config.currentSpeed === 1.5 ? 'checked' : '') +'>', - '1.5×', - '</label>', - '</li>', - '<li>', - '<label class="plyr__control">', - '<input type="radio" name="speed" data-plyr="speed" value="1.0" '+ (config.currentSpeed === 1 ? 'checked' : '') +'>', - '1.0×', - '</label>', - '</li>', - '<li>', - '<label class="plyr__control">', - '<input type="radio" name="speed" data-plyr="speed" value="0.5" '+ (config.currentSpeed === 0.5 ? 'checked' : '') +'>', - '0.5×', - '</label>', - '</li>', - '</ul>', - '</div>', - '<div id="plyr-settings-{id}-quality" aria-hidden="true" aria-labelled-by="plyr-settings-{id}-quality-toggle" role="tabpanel" tabindex="-1">', - '<ul>', - '<li role="tab">', - '<button type="button" class="plyr__control plyr__control--back" aria-haspopup="true" aria-controls="plyr-settings-{id}-primary" aria-expanded="false">', - config.i18n.quality, - '</button>', - '</li>', - '<li>', - '<label class="plyr__control">', - '<input type="radio" name="quality">', - '2160P', - '<span class="plyr__menu__value">', - '<span class="plyr__badge">4K</span>', - '</span>', - '</label>', - '</li>', - '<li>', - '<label class="plyr__control">', - '<input type="radio" name="quality">', - '1440P', - '<span class="plyr__menu__value">', - '<span class="plyr__badge">WQHD</span>', - '</span>', - '</label>', - '</li>', - '<li>', - '<label class="plyr__control">', - '<input type="radio" name="quality">', - '1080P', - '<span class="plyr__menu__value">', - '<span class="plyr__badge">HD</span>', - '</span>', - '</label>', - '</li>', - '<li>', - '<label class="plyr__control">', - '<input type="radio" name="quality">', - '720P', - '<span class="plyr__menu__value">', - '<span class="plyr__badge">HD</span>', - '</span>', - '</label>', - '</li>', - '<li>', - '<label class="plyr__control">', - '<input type="radio" name="quality">', - '480P', - '</label>', - '</li>', - '<li>', - '<label class="plyr__control">', - '<input type="radio" name="quality">', - '360P', - '</label>', - '</li>', - '</ul>', - '</div>', - '<div id="plyr-settings-{id}-loop" aria-hidden="true" aria-labelled-by="plyr-settings-{id}-loop-toggle" role="tabpanel" tabindex="-1">', - '<ul>', - '<li role="tab">', - '<button type="button" class="plyr__control plyr__control--back" aria-haspopup="true" aria-controls="plyr-settings-{id}-primary" aria-expanded="false">', - config.i18n.loop, - '</button>', - '</li>', - '<li>', - '<button type="button" class="plyr__control" data-plyr="loop" data-plyr-loop="all">', - config.i18n.loopAll, - '<span></span>', - '</button>', - '</li>', - '<li>', - '<button type="button" class="plyr__control" data-plyr="loop" data-plyr-loop="start">', - config.i18n.loopStart, - '<span></span>', - '</button>', - '</li>', - '<li>', - '<button type="button" class="plyr__control" data-plyr="loop" data-plyr-loop="end">', - config.i18n.loopEnd, - '<span></span>', - '</button>', - '</li>', - '<li>', - '<button type="button" class="plyr__control" data-plyr="loop" data-plyr-loop="none">', - config.i18n.loopNone, - '</button>', - '</li>', - '</ul>', - '</div>', - '</div>', - '</form>', - '</div>' - ); */ } // Picture in picture button @@ -1691,6 +1527,7 @@ player.elements.controls = controls; setLoopMenu(); + setSpeedMenu(); return controls; } @@ -1698,15 +1535,11 @@ // Set the YouTube quality menu // TODO: Support for HTML5 // YouTube: "hd2160", "hd1440", "hd1080", "hd720", "large", "medium", "small", "tiny", "auto" - function setQualityMenu(available, current) { - if (is.object(player.quality)) { - return; - } + function setQualityMenu(options, current) { + var list = player.elements.settings.panes.quality.querySelector('ul'); - player.quality = { - available: available, - current: current - }; + // Empty the menu + emptyElement(list); // Get the badge HTML for HD, 4K etc function getBadge(quality) { @@ -1756,28 +1589,28 @@ } } - if (is.array(available) && available.length) { + if (is.array(options) && !is.empty(options)) { // Remove any unwanted quality levels - var filtered = available.filter(function(quality) { + var filtered = options.filter(function(quality) { return ['tiny', 'small'].indexOf(quality) === -1; }); - var list = player.elements.settings.panes.quality.querySelector('ul'); - filtered.forEach(function(quality) { var item = createElement('li'); var label = createElement('label', { - class: config.classes.control + class: config.classes.control, + for: 'plyr-quality-' + quality }); - var radio = createElement('input', { + var radio = createElement('input', extend(getAttributesFromSelector(config.selectors.inputs.quality), { type: 'radio', - name: 'quality', + id: 'plyr-quality-' + quality, + name: 'plyr-quality', value: quality, - }); + })); - if (quality === player.quality.current) { + if (quality === config.quality.selected) { radio.setAttribute('checked', ''); } @@ -1801,15 +1634,17 @@ var options = ['start', 'end', 'all', 'reset']; var list = player.elements.settings.panes.loop.querySelector('ul'); + // Empty the menu + emptyElement(list); + options.forEach(function(option) { var item = createElement('li'); - var button = createElement('button', { + var button = createElement('button', extend(getAttributesFromSelector(config.selectors.buttons.loop), { type: 'button', class: config.classes.control, - 'data-plyr': 'loop', 'data-plyr-loop-action': option - }, config.i18n[option]); + }), config.i18n[option]); if (inArray(['start', 'end'], option)) { var badge = createBadge('0:00'); @@ -1822,6 +1657,91 @@ }); } + // Set a list of available captions languages + function setCaptionsMenu() { + var list = player.elements.settings.panes.captions.querySelector('ul'); + + // Empty the menu + emptyElement(list); + + // If there's no captions, bail + if (is.empty(player.captions.tracks)) { + return; + } + + [].forEach.call(player.captions.tracks, function(track) { + if (is.function(track)) { + return; + } + + var item = createElement('li'); + + var label = createElement('label', { + class: config.classes.control, + for: 'plyr-language-' + track.language + }); + + var radio = createElement('input', extend(getAttributesFromSelector(config.selectors.inputs.language), { + type: 'radio', + id: 'plyr-language-' + track.language, + name: 'plyr-language', + value: track.language, + })); + + if (track.language === config.captions.language.toLowerCase()) { + radio.setAttribute('checked', ''); + } + + label.appendChild(radio); + label.appendChild(document.createTextNode(track.label || track.language)); + label.appendChild(createBadge(track.language.toUpperCase())); + + item.appendChild(label); + + list.appendChild(item); + }); + } + + // Set a list of available captions languages + function setSpeedMenu(options) { + var list = player.elements.settings.panes.speed.querySelector('ul'); + + // Empty the menu + emptyElement(list); + + // If there's no captions, bail + if (!is.array(options)) { + options = config.speed.options; + } + + options.forEach(function(speed) { + var item = createElement('li'); + + var label = createElement('label', { + class: config.classes.control, + for: 'plyr-speed-' + speed.toString().replace('.', '-') + }); + + var radio = createElement('input', extend(getAttributesFromSelector(config.selectors.inputs.speed), { + type: 'radio', + id: 'plyr-speed-' + speed.toString().replace('.', '-'), + name: 'plyr-speed', + value: speed, + })); + + if (speed === config.speed.selected) { + radio.setAttribute('checked', ''); + } + + label.appendChild(radio); + label.insertAdjacentHTML('beforeend', '×' + speed); + + item.appendChild(label); + + list.appendChild(item); + }); + } + // Setup fullscreen function setupFullscreen() { if (!player.supported.full) { @@ -1851,194 +1771,111 @@ } } - // Display active caption if it contains text - function setActiveCue(track) { - // Get the track from the event if needed - if (is.event(track)) { - track = track.target; - } - - // Display a cue, if there is one - if (track.activeCues[0] && 'text' in track.activeCues[0]) { - setCaption(track.activeCues[0].getCueAsHTML()); - } else { - setCaption(); - } - } - // Setup captions function setupCaptions() { - // Bail if not HTML5 video - if (player.type !== 'video') { + // Bail if not HTML5 video or textTracks not supported + if (player.type !== 'video' || !support.textTracks) { return; } // Inject the container - if (!getElement(config.selectors.captions)) { - player.elements.wrapper.insertAdjacentHTML('afterbegin', '<div class="' + getClassname(config.selectors.captions) + '"></div>'); + if (!is.htmlElement(player.elements.captions)) { + player.elements.captions = createElement('div', getAttributesFromSelector(config.selectors.captions)); + player.elements.wrapper.appendChild(player.elements.captions); } - // Determine if HTML5 textTracks is supported - player.captions.textTracks = false; - if (player.elements.media.textTracks) { - player.captions.textTracks = true; - } - - // Get URL of caption file if exists - var captionSources = []; - var captionSrc = ''; - - player.elements.media.childNodes.forEach(function(child) { - if (child.nodeName.toLowerCase() === 'track') { - if (child.kind === 'captions' || child.kind === 'subtitles') { - captionSources.push(child.getAttribute('src')); - } - } - }); - - // Record if caption file exists or not - player.captions.exist = true; - if (captionSources.length === 0) { - player.captions.exist = false; - log('No caption track found'); - } else if ((Number(config.captions.selectedIndex) + 1) > captionSources.length) { - player.captions.exist = false; - log('Caption index out of bound'); - } else { - captionSrc = captionSources[config.captions.selectedIndex]; - log('Caption track found; URI: ' + captionSrc); - } + // Get tracks + player.captions.tracks = player.elements.media.textTracks; // If no caption file exists, hide container for caption text - if (!player.captions.exist) { + if (is.empty(player.captions.tracks)) { toggleClass(player.elements.container, config.classes.captions.enabled); } else { - var tracks = player.elements.media.textTracks; + var language = config.captions.language.toLowerCase(); // Turn off native caption rendering to avoid double captions - // This doesn't seem to work in Safari 7+, so the <track> elements are removed from the dom below - [].forEach.call(tracks, function(track) { - // Remove the listener to prevent event overlapping + [].forEach.call(player.captions.tracks, function(track) { + // Remove previous bindings (if we've changed source or language) off(track, 'cuechange', setActiveCue); // 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 (!is.track(player.captions.currentTrack)) { + warn('No language found to match ' + language + ' in tracks'); + player.captions.currentTrack = player.captions.tracks[0]; + } + // Enable UI showCaptions(player); - // Disable unsupported browsers than report false positive - // Firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1033144 - if ((player.browser.isIE && player.browser.version >= 10) || - (player.browser.isFirefox && player.browser.version >= 31)) { - - // Debugging - log('Detected browser with known TextTrack issues - using manual fallback'); + // If it's a caption or subtitle, render it + var track = player.captions.currentTrack; + if (is.track(track) && inArray(['captions', 'subtitles'], track.kind)) { + on(track, 'cuechange', setActiveCue); - // Set to false so skips to 'manual' captioning - player.captions.textTracks = false; + // 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); + } } - // Rendering caption tracks - // Native support required - http://caniuse.com/webvtt - if (player.captions.textTracks) { - log('TextTracks supported'); + // Set available languages in list + setCaptionsMenu(); + } + } - var track = tracks[config.captions.selectedIndex]; + // Get current selected caption language + function getLanguage() { + if (!support.textTracks || is.empty(player.captions.tracks)) { + return 'No Subs'; + } - if (track.kind === 'captions' || track.kind === 'subtitles') { - on(track, 'cuechange', setActiveCue); + if (player.captions.enabled) { + return player.captions.currentTrack.label; + } else { + return 'Disabled'; + } + } - // 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); - } - } - } else { - // Caption tracks not natively supported - log('TextTracks not supported so rendering captions manually'); - - // Render captions from array at appropriate time - player.captions.current = ''; - player.captions.captions = []; - - if (captionSrc !== '') { - // Create XMLHttpRequest Object - var xhr = new XMLHttpRequest(); - - xhr.onreadystatechange = function() { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - var response = xhr.responseText; - - // According to webvtt spec, line terminator consists of one of the following - // CRLF (U+000D U+000A), LF (U+000A) or CR (U+000D) - var lineSeparator = '\r\n'; - if (response.indexOf(lineSeparator + lineSeparator) === -1) { - if (response.indexOf('\r\r') !== -1) { - lineSeparator = '\r'; - } else { - lineSeparator = '\n'; - } - } - - var captions = response.split(lineSeparator + lineSeparator); - - player.captions.captions = captions.map(function(caption) { - var parts = caption.split(lineSeparator); - var index = 0; - - // Incase caption numbers are added - if (parts[index].indexOf(":") !== -1) { - index = 1; - } - - return [parts[index], parts[index + 1]]; - }); - - player.captions.captions.shift(); - - log('Successfully loaded the caption file via AJAX'); - } else { - warn(config.logPrefix + 'There was a problem loading the caption file via AJAX'); - } - } - }; + // Display active caption if it contains text + function setActiveCue(track) { + // Get the track from the event if needed + if (is.event(track)) { + track = track.target; + } - xhr.open('get', captionSrc, true); + var active = track.activeCues[0]; - xhr.send(); - } - } + // Display a cue, if there is one + if (is.cue(active)) { + setCaption(active.getCueAsHTML()); + } else { + setCaption(); } } // Select active caption - function setCaptionIndex(index) { - // Save active caption - config.captions.selectedIndex = index || config.captions.selectedIndex; + function setLanguage(language) { + // Save config + if (is.string(language)) { + config.captions.language = language.toLowerCase(); + } else if (is.event(language)) { + config.captions.language = language.target.value.toLowerCase(); + } // Clear caption setCaption(); // Re-run setup setupCaptions(); - - //getElement('[data-captions="settings"]').innerHTML = getSelectedLanguage(); - } - - // Get current selected caption language - function getSelectedLanguage() { - if (config.tracks.length === 0) { - return 'No Subs'; - } - - if (player.captions.enabled || !is.boolean(player.captions.enabled) && player.storage.captions) { - return config.tracks[config.captions.selectedIndex].label; - } else { - return 'Disabled'; - } } // Set the current caption @@ -2058,7 +1895,7 @@ // Set the span content if (is.string(caption)) { - content.innerHTML = caption.trim(); + content.textContent = caption.trim(); } else { content.appendChild(caption); } @@ -2071,86 +1908,6 @@ } } - // Captions functions - // Seek the manual caption time and update UI - function seekManualCaptions(time) { - // Utilities for caption time codes - function timecodeCommon(timecode, pos) { - var parts = []; - parts = timecode.split(' --> '); - for (var i = 0; i < parts.length; i++) { - // WebVTT allows for extra meta data after the timestamp line - // So get rid of this if it exists - parts[i] = parts[i].replace(/(\d+:\d+:\d+\.\d+).*/, "$1"); - } - return subTcSecs(parts[pos]); - } - - function timecodeMin(timecode) { - return timecodeCommon(timecode, 0); - } - - function timecodeMax(timecode) { - return timecodeCommon(timecode, 1); - } - - function subTcSecs(timecode) { - if (is.undefined(timecode)) { - return 0; - } else { - var tc1 = []; - var tc2 = []; - var seconds = 0; - tc1 = timecode.split(','); - tc2 = tc1[0].split(':'); - - for (var i = 0, len = tc2.length; i < len; i++) { - seconds += Math.floor(tc2[i] * (Math.pow(60, len - (i + 1)))); - } - - return seconds; - } - } - - // If it's not video, or we're using textTracks, bail. - if (player.captions.textTracks || player.type !== 'video' || !player.supported.full) { - return; - } - - // Reset subcount - player.captions.count = 0; - - // Check time is a number, if not use currentTime - // IE has a bug where currentTime doesn't go to 0 - // https://twitter.com/Sam_Potts/status/573715746506731521 - time = is.number(time) ? time : player.elements.media.currentTime; - - // If there's no subs available, bail - if (!player.captions.captions[player.captions.count]) { - return; - } - - while (timecodeMax(player.captions.captions[player.captions.count][0]) < time.toFixed(1)) { - player.captions.count++; - - if (player.captions.count > player.captions.captions.length - 1) { - player.captions.count = player.captions.captions.length - 1; - break; - } - } - - // Check if the next caption is in the current time range - if (player.elements.media.currentTime.toFixed(1) >= timecodeMin(player.captions[player.subcount][0]) && - player.elements.media.currentTime.toFixed(1) <= timecodeMax(player.captions[player.subcount][0])) { - player.captions.current = player.captions.captions[player.captions.count][1]; - - // Render the caption - setCaption(player.captions.current); - } else { - setCaption(); - } - } - // Display captions container and button (for initialization) function showCaptions() { // If there's no caption toggle, bail @@ -2188,12 +1945,6 @@ // Set global player.captions.enabled = show; - //player.elements.buttons.captions_menu.innerHTML = show ? 'Off' : 'On'; - //TODO: display lang getElement('[data-captions="settings"]').innerHTML = getSubsLangValue(); - - // Set current language etc - //elements.buttons.captions_menu.innerHTML = show ? 'Off' : 'On'; - //getElement('[data-captions="settings"]').innerHTML = getSubsLangValue(); // Toggle state toggleState(player.elements.buttons.captions, player.captions.enabled); @@ -2238,11 +1989,11 @@ var controls = createControls({ id: player.id, seektime: config.seekTime, - speed: getSpeedDisplayValue(), + speed: getSpeed(), // TODO: Get current quality quality: 'HD', // TODO: Set language automatically based on UA? - captions: 'English', + captions: getLanguage(), // TODO: Get loop loop: 'None' }); @@ -2278,7 +2029,7 @@ } // Find the UI controls and store references - // TODO: Restore when re-enabling custom HTML + // TODO: Re-configure for new elements /*function findElements() { try { player.elements.controls = getElement(config.selectors.controls.wrapper); @@ -2341,7 +2092,7 @@ // Toggle native controls function toggleNativeControls(toggle) { - if (toggle && inArray(config.types.html5, player.type)) { + if (toggle && inArray(types.html5, player.type)) { player.elements.media.setAttribute('controls', ''); } else { player.elements.media.removeAttribute('controls'); @@ -2439,7 +2190,7 @@ // Add video class for embeds // This will require changes if audio embeds are added - if (inArray(config.types.embed, player.type)) { + if (inArray(types.embed, player.type)) { toggleClass(player.elements.container, config.classes.type.replace('{0}', 'video'), true); } @@ -2447,7 +2198,7 @@ toggleClass(player.elements.container, config.classes.pip.enabled, support.pip && player.type === 'video'); // Check for airplay support - toggleClass(player.elements.container, config.classes.airplay.enabled, support.airplay && inArray(config.types.html5, player.type)); + toggleClass(player.elements.container, config.classes.airplay.enabled, support.airplay && inArray(types.html5, player.type)); // If there's no autoplay attribute, assume the video is stopped and add state class toggleClass(player.elements.container, config.classes.stopped, config.autoplay); @@ -2473,7 +2224,7 @@ } // Embeds - if (inArray(config.types.embed, player.type)) { + if (inArray(types.embed, player.type)) { setupEmbed(); } } @@ -2625,7 +2376,7 @@ wmode: 'transparent', modestbranding: 1, disablekb: 1, - origin: '*' // https://code.google.com/p/gdata-issues/issues/detail?id=5788#c45 + origin: 'https://plyr.io' }, events: { 'onError': function(event) { @@ -2677,7 +2428,7 @@ // Set the tabindex if (player.supported.full) { - player.elements.media.querySelector('iframe').setAttribute('tabindex', '-1'); + player.elements.media.querySelector('iframe').setAttribute('tabindex', -1); } // Update UI @@ -2840,7 +2591,7 @@ // Fix keyboard focus issues // https://github.com/Selz/plyr/issues/317 if (is.htmlElement(player.embed.element) && player.supported.full) { - player.embed.element.setAttribute('tabindex', '-1'); + player.embed.element.setAttribute('tabindex', -1); } }); @@ -3068,47 +2819,47 @@ // Set playback speed function setSpeed(speed) { // Load speed from storage or default value - if (is.undefined(speed)) { - speed = player.storage.speed || config.defaultSpeed; + if (is.event(speed)) { + speed = parseFloat(speed.target.value); + } else if (!is.number(speed)) { + speed = parseFloat(player.storage.speed || config.speed.selected); } - if (!is.array(config.speeds)) { + if (!is.array(config.speed.options)) { warn('Invalid speeds format'); return; } if (!is.number(speed)) { - var index = config.speeds.indexOf(config.currentSpeed); + var index = config.speed.options.indexOf(config.speed.selected); if (index !== -1) { - var nextIndex = index + 1; - if (nextIndex >= config.speeds.length) { - nextIndex = 0; + var next = index + 1; + if (next >= config.speeds.length) { + next = 0; } - speed = config.speeds[nextIndex]; + speed = config.speed.options[next]; } else { - speed = config.defaultSpeed; + speed = config.speed.selected; } } // Store current speed - config.currentSpeed = speed; + config.speed.selected = speed; // Set HTML5 speed + // TODO: set YouTube player.elements.media.playbackRate = speed; // Save speed to localStorage updateStorage({ speed: speed }); - - // Update current value of menu - // document.querySelector('[data-menu="speed"]').innerHTML = getSpeedDisplayValue(); } // Get the current speed value - function getSpeedDisplayValue() { - return config.currentSpeed.toFixed(1).toString().replace('.0', '') + '×' + function getSpeed() { + return config.speed.selected.toFixed(1).toString().replace('.0', '') + '×' } // Rewind @@ -3161,7 +2912,7 @@ } catch (e) {} // Embeds - if (inArray(config.types.embed, player.type)) { + if (inArray(types.embed, player.type)) { switch (player.type) { case 'youtube': player.embed.seekTo(targetTime); @@ -3193,9 +2944,6 @@ // Logging log('Seeking to ' + player.elements.media.currentTime + ' seconds'); - - // Special handling for 'manual' captions - seekManualCaptions(targetTime); } // Get the duration (or custom if set) @@ -3339,7 +3087,7 @@ target.setAttribute('aria-hidden', !show); toggle.setAttribute('aria-expanded', show); - target.setAttribute('tabindex', 0); + target.removeAttribute('tabindex'); if (isTab) { container.style.width = targetWidth + 'px'; @@ -3371,7 +3119,7 @@ } // Embeds - if (inArray(config.types.embed, player.type)) { + if (inArray(types.embed, player.type)) { // YouTube switch (player.type) { case 'youtube': @@ -3427,7 +3175,7 @@ } // Embeds - if (inArray(config.types.embed, player.type)) { + if (inArray(types.embed, player.type)) { switch (player.type) { case 'youtube': player.embed.setVolume(player.elements.media.volume * 100); @@ -3894,7 +3642,7 @@ if (player.type === 'video') { var firstSource = source.sources[0]; - if ('type' in firstSource && inArray(config.types.embed, firstSource.type)) { + if ('type' in firstSource && inArray(types.embed, firstSource.type)) { player.type = firstSource.type; } } @@ -3930,7 +3678,7 @@ } // Set attributes for audio and video - if (inArray(config.types.html5, player.type)) { + if (inArray(types.html5, player.type)) { if (config.crossorigin) { player.elements.media.setAttribute('crossorigin', ''); } @@ -3951,7 +3699,7 @@ toggleStyleHook(); // Set new sources for html5 - if (inArray(config.types.html5, player.type)) { + if (inArray(types.html5, player.type)) { insertElements('source', source.sources); } @@ -3959,7 +3707,7 @@ setupMedia(); // HTML5 stuff - if (inArray(config.types.html5, player.type)) { + if (inArray(types.html5, player.type)) { // Setup captions if ('tracks' in source) { insertElements('track', source.tracks); @@ -3970,7 +3718,7 @@ } // If HTML5 or embed but not fully supported, setupInterface and call ready now - if (inArray(config.types.html5, player.type) || (inArray(config.types.embed, player.type) && !player.supported.full)) { + if (inArray(types.html5, player.type) || (inArray(types.embed, player.type) && !player.supported.full)) { // Setup interface setupInterface(); @@ -4030,16 +3778,10 @@ // Detect tab focus function checkTabFocus(focused) { - for (var button in player.elements.buttons) { - var element = player.elements.buttons[button]; + toggleClass(getElements('.' + config.classes.tabFocus), config.classes.tabFocus, false); - if (is.nodeList(element)) { - for (var i = 0; i < element.length; i++) { - toggleClass(element[i], config.classes.tabFocus, (element[i] === focused)); - } - } else { - toggleClass(element, config.classes.tabFocus, (element === focused)); - } + if (player.elements.container.contains(focused)) { + toggleClass(focused, config.classes.tabFocus, true); } } @@ -4295,22 +4037,19 @@ // Settings menu items - use event delegation as items are added/removed on(player.elements.settings.menu, 'click', function(event) { // Settings - Speed - if (matches(event.target, config.selectors.buttons.speed)) { - handlerProxy.call(this, event, config.listeners.speed, function() { - //var speedValue = document.querySelector('[data-plyr="speed"]:checked').value; - //setSpeed(Number(speedValue)); - console.warn("Set speed"); - }); + if (matches(event.target, config.selectors.inputs.speed)) { + handlerProxy.call(this, event, config.listeners.speed, setSpeed); } // Settings - Quality - else if (matches(event.target, config.selectors.buttons.quality)) { + else if (matches(event.target, config.selectors.inputs.quality)) { handlerProxy.call(this, event, config.listeners.quality, function() { console.warn("Set quality"); }); } // Settings - Looping + // TODO: use toggle buttons else if (matches(event.target, config.selectors.buttons.loop)) { handlerProxy.call(this, event, config.listeners.loop, function() { // TODO: This should be done in the method itself I think @@ -4323,12 +4062,8 @@ } // Settings - Language - else if (matches(event.target, config.selectors.buttons.language)) { - handlerProxy.call(this, event, config.listeners.language, function(event) { - // TODO: This should be done in the method itself I think - var index = event.target.attributes.getNamedItem("data-index").value; - setCaptionIndex(index); - }); + else if (matches(event.target, config.selectors.inputs.language)) { + handlerProxy.call(this, event, config.listeners.language, setLanguage); } }); @@ -4408,9 +4143,6 @@ // Time change on media on(player.elements.media, 'timeupdate seeking', timeUpdate); - // Update manual captions - on(player.elements.media, 'timeupdate', seekManualCaptions); - // Display duration on(player.elements.media, 'durationchange loadedmetadata', displayDuration); @@ -4491,7 +4223,7 @@ // Cancel current network requests // See https://github.com/Selz/plyr/issues/174 function cancelRequests() { - if (!inArray(config.types.html5, player.type)) { + if (!inArray(types.html5, player.type)) { return; } @@ -4650,7 +4382,7 @@ // Setup interface // If embed but not fully supported, setupInterface (to avoid flash of controls) and call ready now - if (inArray(config.types.html5, player.type) || (inArray(config.types.embed, player.type) && !player.supported.full)) { + if (inArray(types.html5, player.type) || (inArray(types.embed, player.type) && !player.supported.full)) { // Setup UI setupInterface(); @@ -4708,7 +4440,6 @@ // Captions setupCaptions(); - setCaptionIndex(); // Set volume setVolume(); @@ -4789,7 +4520,7 @@ toggleCaptions: toggleCaptions, toggleFullscreen: toggleFullscreen, toggleControls: toggleControls, - setCaptionIndex: setCaptionIndex, + setLanguage: setLanguage, isFullscreen: function() { return player.fullscreen.active || false; }, diff --git a/src/less/plyr.less b/src/less/plyr.less index 8e08cf40..98917f96 100644 --- a/src/less/plyr.less +++ b/src/less/plyr.less @@ -251,6 +251,11 @@ background: @plyr-captions-bg; box-decoration-break: clone; line-height: 150%; + + // Firefox adds a <div> when using getCueAsHTML() + div { + display: inline; + } } span:empty { display: none; |