diff options
author | Sam Potts <me@sampotts.me> | 2017-05-07 19:03:48 +1000 |
---|---|---|
committer | Sam Potts <me@sampotts.me> | 2017-05-07 19:03:48 +1000 |
commit | aba5a9dc0e421a9f8a6098847fe3927f565c3241 (patch) | |
tree | f4498cb22459737fe6651ab05f4e8c42ff0d4d0e | |
parent | 97157efcfa51297324046087ad787ed346a39f06 (diff) | |
download | plyr-aba5a9dc0e421a9f8a6098847fe3927f565c3241.tar.lz plyr-aba5a9dc0e421a9f8a6098847fe3927f565c3241.tar.xz plyr-aba5a9dc0e421a9f8a6098847fe3927f565c3241.zip |
Utils object, work on Vimeo captions
-rw-r--r-- | dist/plyr.css | 2 | ||||
-rw-r--r-- | dist/plyr.js | 4 | ||||
-rw-r--r-- | src/js/plyr.js | 1255 | ||||
-rw-r--r-- | src/less/plyr.less | 4 |
4 files changed, 641 insertions, 624 deletions
diff --git a/dist/plyr.css b/dist/plyr.css index 2fd4001b..6e73e410 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 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 +.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-wrapper{position:relative;background:#000;border-radius:inherit;z-index:0;overflow:hidden}.plyr__video-embed{padding-bottom:56.25%;height:0}.plyr__video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.plyr__video-embed>div{position:relative;padding-bottom:200%;transform:translateY(-35.95%)}.plyr .plyr__video-embed iframe{pointer-events:none}.plyr video::-webkit-media-text-track-container{display:none}.plyr__captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;transform:translateY(-40px);transition:transform .3s ease;color:#fff;font-size:16px;text-align:center}.plyr__captions span{border-radius:2px;padding:3px 10px;background:rgba(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 cd18658f..d84df9a1 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,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(!O.string(e)||O.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(".","");O.object(t)&&O.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 O.object(n)&&u(l,n),O.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(O.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){O.undefined(e)||h(e,t,n,!0,a)}function C(e,t,n,a){O.undefined(e)||h(e,t,n,!1,a)}function w(e,t,n,a){if(e&&t){O.boolean(n)||(n=!1);var l=new CustomEvent(t,{bubbles:n,detail:a});e.dispatchEvent(l)}}function T(e,t){if(e)return t=O.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);O.object(t)||(t={});for(var n=e.length,a=0;a<n;a++){var l=e[a];O.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(h,A){function N(e,t,n,a){w(e,t,n,E({},a,{plyr:it}))}function V(e){return rt.elements.container.querySelectorAll(e)}function D(e){return V(e)[0]}function R(){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=V("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];k(rt.elements.container,"keydown",e)}function W(e,t){O.string(t)?p(e,rt.elements.media,{src:t}):O.array(t)&&t.forEach(function(t){p(e,rt.elements.media,t)})}function B(){return{url:A.iconUrl,absolute:0===A.iconUrl.indexOf("http")||rt.browser.isIE}}function H(e,n){var a="http://www.w3.org/2000/svg",l=B(),s=(l.absolute?"":l.url)+"#"+A.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 Y(e){var t=A.i18n[e];switch(e){case"pip":t="PIP";break;case"airplay":t="AirPlay"}return d("span",{class:A.classes.hidden},t)}function U(e){var t=d("span",{class:A.classes.menu.value});return t.appendChild(d("span",{class:A.classes.menu.badge},e)),t}function K(e,t){var n,a,l,s=d("button");switch(O.object(t)||(t={}),"class"in t?t.class.indexOf(A.classes.control)===-1&&(t.class+=" "+A.classes.control):t.class=A.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(A.selectors.buttons[e],t)),O.string(a)&&s.appendChild(H(a,{class:"icon--"+a})),s.appendChild(H(n)),s.appendChild(Y(l)),u(s,t),rt.elements.buttons[e]=s,s}function Q(e,t){var n=d("label",{for:t.id,class:A.classes.hidden},A.i18n[e]),a=d("input",E(c(A.selectors.inputs[e]),{type:"range",min:0,max:100,step:.1,value:0,autocomplete:"off"},t));return rt.elements.inputs[e]=a,{label:n,input:a}}function X(e,t){var n=d("progress",E(c(A.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=A.i18n.played;break;case"buffer":a=A.i18n.buffered}n.textContent="% "+a.toLowerCase()}return rt.elements.display[e]=n,n}function z(e){var t=d("span",{class:"plyr__time"});return t.appendChild(d("span",{class:A.classes.hidden},A.i18n[e])),t.appendChild(d("span",c(A.selectors.display[e]),"00:00")),rt.elements.display[e]=t,t}function G(e){var t=d("div",c(A.selectors.controls.wrapper));if(s(A.controls,"restart")&&t.appendChild(K("restart")),s(A.controls,"rewind")&&t.appendChild(K("rewind")),s(A.controls,"play")&&(t.appendChild(K("play")),t.appendChild(K("pause"))),s(A.controls,"fast-forward")&&t.appendChild(K("fast-forward")),s(A.controls,"progress")){var n=d("span",c(A.selectors.progress)),a=Q("seek",{id:"plyr-seek-"+e.id});if(n.appendChild(a.label),n.appendChild(a.input),n.appendChild(X("played")),n.appendChild(X("buffer")),A.tooltips.seek){var l=d("span",{role:"tooltip",class:A.classes.tooltip},"00:00");n.appendChild(l),rt.elements.display.seekTooltip=l}rt.elements.progress=n,t.appendChild(rt.elements.progress)}if(s(A.controls,"current-time")&&t.appendChild(z("currentTime")),s(A.controls,"duration")&&t.appendChild(z("duration")),s(A.controls,"mute")&&t.appendChild(K("mute")),s(A.controls,"volume")){var i=d("span",{class:"plyr__volume"}),r={max:10,value:A.volume},o=Q("volume",E(r,{id:"plyr-volume-"+e.id}));i.appendChild(o.label),i.appendChild(o.input);var u=X("volume",r);i.appendChild(u),t.appendChild(i)}if(s(A.controls,"captions")&&t.appendChild(K("captions")),s(A.controls,"settings")){var p=d("span",E(c(A.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"}),b=d("ul",{role:"tablist"});["captions","quality","speed","loop"].forEach(function(t){var n=d("li",{role:"tab"}),a=d("button",E(c(A.selectors.buttons.settings),{type:"button",class:A.classes.control+" "+A.classes.control+"--forward",id:"plyr-settings-"+e.id+"-"+t+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+t,"aria-expanded":!1}),A.i18n[t]),l=d("span",{class:A.classes.menu.value});l.innerHTML=e[t],a.appendChild(l),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-"+e.id+"-"+t+"-tab",role:"tabpanel",tabindex:-1}),a=d("button",{type:"button",class:A.classes.control+" "+A.classes.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},A.i18n[t]);n.appendChild(a);var l=d("ul");n.appendChild(l),f.appendChild(n),rt.elements.settings.panes[t]=n}),m.appendChild(f),p.appendChild(m),t.appendChild(p),rt.elements.settings.menu=p}return s(A.controls,"pip")&&M.pip&&t.appendChild(K("pip")),s(A.controls,"airplay")&&M.airplay&&t.appendChild(K("airplay")),s(A.controls,"fullscreen")&&t.appendChild(K("fullscreen")),rt.elements.controls=t,$(),ee(),t}function J(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?U(t):null}function l(e){switch(e){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";default:return"Auto"}}var s=rt.elements.settings.panes.quality.querySelector("ul");if(m(s),O.array(e)&&!O.empty(e)){var i=e.filter(function(e){return["tiny","small"].indexOf(e)===-1});i.forEach(function(e){var n=d("li"),i=d("label",{class:A.classes.control,for:"plyr-quality-"+e}),r=d("input",E(c(A.selectors.inputs.quality),{type:"radio",id:"plyr-quality-"+e,name:"plyr-quality",value:e}));e===A.quality.selected&&r.setAttribute("checked",""),i.appendChild(r),i.appendChild(t.createTextNode(l(e)));var o=a(e);O.htmlElement(o)&&i.appendChild(o),n.appendChild(i),s.appendChild(n)})}}function $(){var e=["start","end","all","reset"],t=rt.elements.settings.panes.loop.querySelector("ul");m(t),e.forEach(function(e){var n=d("li"),a=d("button",E(c(A.selectors.buttons.loop),{type:"button",class:A.classes.control,"data-plyr-loop-action":e}),A.i18n[e]);if(s(["start","end"],e)){var l=U("0:00");a.appendChild(l)}n.appendChild(a),t.appendChild(n)})}function Z(){var e=rt.elements.settings.panes.captions.querySelector("ul");if(m(e),!O.empty(rt.captions.tracks)){var n=[].map.call(rt.captions.tracks,function(e){return{language:e.language,badge:!0,label:O.empty(e.label)?e.language.toUpperCase():e.label}});n.unshift({language:"off",label:A.i18n.none}),n.forEach(function(n){var a=d("li"),l=d("label",{class:A.classes.control,for:"plyr-language-"+n.language}),s=d("input",E(c(A.selectors.inputs.language),{type:"radio",id:"plyr-language-"+n.language,name:"plyr-language",value:n.language}));n.language===A.captions.language.toLowerCase()&&s.setAttribute("checked",""),l.appendChild(s),l.appendChild(t.createTextNode(n.label||n.language)),n.badge&&l.appendChild(U(n.language.toUpperCase())),a.appendChild(l),e.appendChild(a)})}}function ee(e){var t=rt.elements.settings.panes.speed.querySelector("ul");m(t),O.array(e)||(e=A.speed.options),e.forEach(function(e){var n=d("li"),a=d("label",{class:A.classes.control,for:"plyr-speed-"+e.toString().replace(".","-")}),l=d("input",E(c(A.selectors.inputs.speed),{type:"radio",id:"plyr-speed-"+e.toString().replace(".","-"),name:"plyr-speed",value:e}));e===A.speed.selected&&l.setAttribute("checked",""),a.appendChild(l),a.insertAdjacentHTML("beforeend","×"+e),n.appendChild(a),t.appendChild(n)})}function te(){if(rt.supported.full&&("audio"!==rt.type||A.fullscreen.allowAudio)&&A.fullscreen.enabled){var e=M.fullscreen;e||A.fullscreen.fallback&&!l()?(ct((e?"Native":"Fallback")+" fullscreen enabled"),f(rt.elements.container,A.classes.fullscreen.enabled,!0)):ct("Fullscreen not supported and fallback disabled"),rt.elements.buttons&&rt.elements.buttons.fullscreen&&T(rt.elements.buttons.fullscreen,!1),R()}}function ne(e){if(s(["video","vimeo"],rt.type)&&("video"!==rt.type||M.textTracks)&&(O.htmlElement(rt.elements.captions)||(rt.elements.captions=d("div",c(A.selectors.captions)),rt.elements.wrapper.appendChild(rt.elements.captions)),rt.captions.tracks=O.array(e)?e:rt.elements.media.textTracks,f(rt.elements.container,A.classes.captions.enabled,!O.empty(rt.captions.tracks)),!O.empty(rt.captions.tracks))){var t=A.captions.language.toLowerCase();[].forEach.call(rt.captions.tracks,function(e){C(e,"cuechange",le),e.mode="hidden",e.language===t&&(rt.captions.currentTrack=e)}),O.track(rt.captions.currentTrack)||(dt("No language found to match "+t+" in tracks"),rt.captions.currentTrack=rt.captions.tracks[0]),re();var n=rt.captions.currentTrack;O.track(n)&&s(["captions","subtitles"],n.kind)&&(k(n,"cuechange",le),n.activeCues&&n.activeCues.length>0&&le(n)),Z()}}function ae(){return!M.textTracks||O.empty(rt.captions.tracks)?"No Subs":rt.captions.enabled?rt.captions.currentTrack.label:"Disabled"}function le(e){O.event(e)&&(e=e.target);var t=e.activeCues[0];O.cue(t)?ie(t.getCueAsHTML()):ie()}function se(e){O.string(e)?A.captions.language=e.toLowerCase():O.event(e)&&(A.captions.language=e.target.value.toLowerCase()),ie(),ne()}function ie(e){var t=D(A.selectors.captions);if(O.htmlElement(t)){var n=d("span");m(t),O.undefined(e)&&(e=""),O.string(e)?n.textContent=e.trim():n.appendChild(e),t.appendChild(n)}}function re(){if(rt.elements.buttons.captions){var e=rt.storage.captions;O.boolean(e)?A.captions.active=e:e=A.captions.active,e&&(f(rt.elements.container,A.classes.captions.active,!0),T(rt.elements.buttons.captions,!0))}}function oe(e){rt.supported.full&&rt.elements.buttons.captions&&(O.boolean(e)||(e=rt.elements.container.className.indexOf(A.classes.captions.active)===-1),rt.captions.enabled=e,T(rt.elements.buttons.captions,rt.captions.enabled),f(rt.elements.container,A.classes.captions.active,rt.captions.enabled),N(rt.elements.container,rt.captions.enabled?"captionsenabled":"captionsdisabled",!0),fe({captions:rt.captions.enabled}))}function ue(){if(A.loadSprite){var e=B();e.absolute?(ct("AJAX loading absolute SVG sprite"+(rt.browser.isIE?" (due to IE)":"")),_(e.url,"sprite-plyr")):ct("Sprite will be used as external resource directly")}s(A.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=null;n=O.string(A.controls)?A.controls:O.function(A.controls)?A.controls({id:rt.id,seektime:A.seekTime}):G({id:rt.id,seektime:A.seekTime,speed:xe(),quality:"HD",captions:ae(),loop:"None"});var a;if(O.string(A.selectors.controls.container)&&(a=t.querySelector(A.selectors.controls.container)),O.htmlElement(a)||(a=rt.elements.container),a.appendChild(n),A.tooltips.controls)for(var l=V([A.selectors.controls.wrapper," ",A.selectors.labels," .",A.classes.hidden].join("")),i=l.length-1;i>=0;i--){var r=l[i];f(r,A.classes.hidden,!1),f(r,A.classes.tooltip,!0)}}function ce(){f(rt.elements.container,A.selectors.container.replace(".",""),rt.supported.full)}function de(e){e&&s(L.html5,rt.type)?rt.elements.media.setAttribute("controls",""):rt.elements.media.removeAttribute("controls")}function pe(e){var t=A.i18n.play;if(O.string(A.title)&&!O.empty(A.title)&&(t+=", "+A.title,rt.elements.container.setAttribute("aria-label",A.title)),rt.supported.full&&(O.htmlElement(rt.elements.buttons.play)&&rt.elements.buttons.play.setAttribute("aria-label",t),O.htmlElement(rt.elements.buttons.playLarge)&&rt.elements.buttons.playLarge.setAttribute("aria-label",t)),O.htmlElement(e)){var n=O.string(A.title)&&!O.empty(A.title)?A.title:"video";e.setAttribute("title",A.i18n.frameTitle.replace("{title}",n))}}function me(){var t=null;rt.storage={},M.storage&&A.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(A.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?fe({volume:parseFloat(t)}):rt.storage=JSON.parse(t)))}function fe(t){M.storage&&A.storage.enabled&&(E(rt.storage,t),e.localStorage.setItem(A.storage.key,JSON.stringify(rt.storage)))}function ye(){if(!rt.elements.media)return void dt("No media element found!");if(rt.supported.full&&(f(rt.elements.container,A.classes.type.replace("{0}",rt.type),!0),s(L.embed,rt.type)&&f(rt.elements.container,A.classes.type.replace("{0}","video"),!0),f(rt.elements.container,A.classes.pip.enabled,M.pip&&"video"===rt.type),f(rt.elements.container,A.classes.airplay.enabled,M.airplay&&s(L.html5,rt.type)),f(rt.elements.container,A.classes.stopped,A.autoplay),f(rt.elements.container,A.classes.isIos,rt.browser.isIos),f(rt.elements.container,A.classes.isTouch,rt.browser.isTouch),"video"===rt.type)){var e=d("div");e.setAttribute("class",A.classes.videoWrapper),i(rt.elements.media,e),rt.elements.wrapper=e}s(L.embed,rt.type)&&be()}function be(){var t,n=d("div"),l=rt.type+"-"+Math.floor(1e4*Math.random());switch(rt.type){case"youtube":t=x(rt.embedId);break;default:t=rt.embedId}for(var s=V('[id^="'+rt.type+'-"]'),i=s.length-1;i>=0;i--)r(s[i]);if(f(rt.elements.media,A.classes.videoWrapper,!0),f(rt.elements.media,A.classes.embedWrapper,!0),"youtube"===rt.type)rt.elements.media.appendChild(n),n.setAttribute("id",l),O.object(e.YT)?ve(t,n):(a(A.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){ve(t,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===rt.type)if(rt.supported.full?rt.elements.media.appendChild(n):n=rt.elements.media,n.setAttribute("id",l),O.object(e.Vimeo))he(t,n);else{a(A.urls.vimeo.api);var o=e.setInterval(function(){O.object(e.Vimeo)&&(e.clearInterval(o),he(t,n))},50)}else if("soundcloud"===rt.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),rt.elements.media.appendChild(n),e.SC||a(A.urls.soundcloud.api);var p=e.setInterval(function(){e.SC&&c.loaded&&(e.clearInterval(p),ke.call(c))},50)}}function ge(){rt.supported.full&&(lt(),st()),pe(D("iframe"))}function ve(t,n){rt.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:A.autoplay?1:0,controls:rt.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:A.captions.active?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:"https://plyr.io"},events:{onError:function(e){N(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(),l=n.getAvailablePlaybackRates();console.warn(a,l),A.title=n.getVideoData().title,rt.supported.full&&rt.elements.media.querySelector("iframe").setAttribute("tabindex",-1),ge(),N(rt.elements.media,"timeupdate"),N(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)&&N(rt.elements.media,"progress"),rt.elements.media.lastBuffered=rt.elements.media.buffered,1===rt.elements.media.buffered&&(e.clearInterval(ot.buffering),N(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,N(rt.elements.media,"ended");break;case 1:rt.elements.media.paused=!1,rt.elements.media.seeking&&N(rt.elements.media,"seeked"),rt.elements.media.seeking=!1,N(rt.elements.media,"play"),N(rt.elements.media,"playing"),ot.playing=e.setInterval(function(){rt.elements.media.currentTime=n.getCurrentTime(),N(rt.elements.media,"timeupdate")},100),rt.elements.media.duration!==n.getDuration()&&(rt.elements.media.duration=n.getDuration(),N(rt.elements.media,"durationchange"));var a=n.getAvailableQualityLevels(),l=n.getPlaybackQuality();J(a,l);break;case 2:rt.elements.media.paused=!0,N(rt.elements.media,"pause")}N(rt.elements.container,"statechange",!1,{code:t.data})}}})}function he(t,n){rt.embed=new e.Vimeo.Player(n,{id:t,loop:A.loop.active,autoplay:A.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,ge(),rt.embed.getCurrentTime().then(function(e){rt.elements.media.currentTime=e,N(rt.elements.media,"timeupdate")}),rt.embed.getDuration().then(function(e){rt.elements.media.duration=e,N(rt.elements.media,"durationchange")}),rt.embed.getTextTracks().then(function(e){rt.captions.tracks=e,Z(),A.captions.active&&rt.embed.enableTextTrack(A.captions.language.toLowerCase())}),rt.embed.on("cuechange",function(e){ct(e);var t=e.cues[0].html;ie(t)}),rt.embed.on("loaded",function(){O.htmlElement(rt.embed.element)&&rt.supported.full&&rt.embed.element.setAttribute("tabindex",-1)}),rt.embed.on("play",function(){rt.elements.media.paused=!1,N(rt.elements.media,"play"),N(rt.elements.media,"playing")}),rt.embed.on("pause",function(){rt.elements.media.paused=!0,N(rt.elements.media,"pause")}),rt.embed.on("timeupdate",function(e){rt.elements.media.seeking=!1,rt.elements.media.currentTime=e.seconds,N(rt.elements.media,"timeupdate")}),rt.embed.on("progress",function(e){rt.elements.media.buffered=e.percent,N(rt.elements.media,"progress"),1===parseInt(e.percent)&&N(rt.elements.media,"canplaythrough")}),rt.embed.on("seeked",function(){rt.elements.media.seeking=!1,N(rt.elements.media,"seeked"),N(rt.elements.media,"play")}),rt.embed.on("ended",function(){rt.elements.media.paused=!0,N(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,ge()}),rt.embed.getPosition(function(e){rt.elements.media.currentTime=e,N(rt.elements.media,"timeupdate")}),rt.embed.bind(e.SC.Widget.Events.PLAY,function(){rt.elements.media.paused=!1,N(rt.elements.media,"play"),N(rt.elements.media,"playing")}),rt.embed.bind(e.SC.Widget.Events.PAUSE,function(){rt.elements.media.paused=!0,N(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,N(rt.elements.media,"timeupdate")}),rt.embed.bind(e.SC.Widget.Events.LOAD_PROGRESS,function(e){rt.elements.media.buffered=e.loadProgress,N(rt.elements.media,"progress"),1===parseInt(e.loadProgress)&&N(rt.elements.media,"canplaythrough")}),rt.embed.bind(e.SC.Widget.Events.FINISH,function(){rt.elements.media.paused=!0,N(rt.elements.media,"ended")})})}function Ce(){"play"in rt.elements.media&&rt.elements.media.play()}function we(){"pause"in rt.elements.media&&rt.elements.media.pause()}function Te(e){return O.boolean(e)||(e=rt.elements.media.paused),e?Ce():we(),e}function Se(e){s(["start","end","all","none","toggle"],e)||(e="toggle");var n=Number(rt.elements.media.currentTime);switch(e){case"start":A.loop.end&&A.loop.end<=n&&(A.loop.end=null),A.loop.start=n,A.loop.indicator.start=rt.elements.display.played.value;break;case"end":if(A.loop.start>=n)return;A.loop.end=n,A.loop.indicator.end=rt.elements.display.played.value;break;case"all":A.loop.start=0,A.loop.end=rt.elements.media.duration-2,A.loop.indicator.start=0,A.loop.indicator.end=100;break;case"toggle":A.loop.active?(A.loop.start=0,A.loop.end=null):(A.loop.start=0,A.loop.end=rt.elements.media.duration-2);break;default:A.loop.start=0,A.loop.end=null}A.loop.active=O.number(A.loop.start)&&O.number(A.loop.end);var a=(Ye(A.loop.start,D('[data-plyr-loop="start"]')),null);O.number(A.loop.end)&&(a=Ye(A.loop.end,t.querySelector('[data-loop__value="loopout"]'))),A.loop.active}function Ee(e){return O.event(e)?e=parseFloat(e.target.value):O.number(e)||(e=parseFloat(rt.storage.speed||A.speed.selected)),e<.1&&(e=.1),e>2&&(e=2),O.array(A.speed.options)?(A.speed.selected=e,rt.elements.media.playbackRate=e,void fe({speed:e})):void dt("Invalid speeds format")}function xe(){return A.speed.selected.toFixed(1).toString().replace(".0","")+"×"}function Ae(e){O.number(e)||(e=A.seekTime),Pe(rt.elements.media.currentTime-e)}function _e(e){O.number(e)||(e=A.seekTime),Pe(rt.elements.media.currentTime+e)}function Pe(e){var t=0,n=rt.elements.media.paused,a=Ne();O.number(e)?t=e:O.event(e)&&s(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Qe(t);try{rt.elements.media.currentTime=t.toFixed(4)}catch(e){}if(s(L.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&&we(),N(rt.elements.media,"timeupdate"),rt.elements.media.seeking=!0,N(rt.elements.media,"seeking")}ct("Seeking to "+rt.elements.media.currentTime+" seconds")}function Ne(){var e=parseInt(A.duration),t=0;return null===rt.elements.media.duration||isNaN(rt.elements.media.duration)||(t=rt.elements.media.duration),isNaN(e)?t:e}function Ie(){f(rt.elements.container,A.classes.playing,!rt.elements.media.paused),f(rt.elements.container,A.classes.stopped,rt.elements.media.paused),ze(rt.elements.media.paused)}function Fe(){F={x:e.pageXOffset||0,y:e.pageYOffset||0}}function qe(){e.scrollTo(F.x,F.y)}function Le(e){var n=M.fullscreen;if(n){if(!e||e.type!==j.eventType)return j.isFullScreen(rt.elements.container)?j.cancelFullScreen():(Fe(),j.requestFullScreen(rt.elements.container)),void(rt.fullscreen.active=j.isFullScreen(rt.elements.container));rt.fullscreen.active=j.isFullScreen(rt.elements.container)}else rt.fullscreen.active=!rt.fullscreen.active,t.body.style.overflow=rt.fullscreen.active?"hidden":"";f(rt.elements.container,A.classes.fullscreen.active,rt.fullscreen.active),R(rt.fullscreen.active),rt.elements.buttons&&rt.elements.buttons.fullscreen&&T(rt.elements.buttons.fullscreen,rt.fullscreen.active),N(rt.elements.container,rt.fullscreen.active?"enterfullscreen":"exitfullscreen",!0),!rt.fullscreen.active&&n&&qe()}function Oe(n){var a=rt.elements.settings.menu.parentNode,l=n.target,s=t.getElementById(l.getAttribute("aria-controls")),i="false"===l.getAttribute("aria-expanded");if(O.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.removeAttribute("tabindex"),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(O.boolean(e)||(e=!rt.elements.media.muted),T(rt.elements.buttons.mute,e),rt.elements.media.muted=e,0===rt.elements.media.volume&&Me(A.volume),s(L.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(A.volume/10))}N(rt.elements.media,"volumechange")}}function Me(e){var t=10,n=0;if(O.event(e)&&(e=e.target.value),O.undefined(e)&&(e=rt.storage.volume),(null===e||isNaN(e))&&(e=A.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),s(L.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)}N(rt.elements.media,"volumechange")}0===e?rt.elements.media.muted=!0:rt.elements.media.muted&&e>0&&je()}function Ve(e){var t=rt.elements.media.muted?0:10*rt.elements.media.volume;O.number(e)||(e=1),Me(t+e)}function De(e){var t=rt.elements.media.muted?0:10*rt.elements.media.volume;O.number(e)||(e=1),Me(t-e)}function Re(){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}),f(rt.elements.container,A.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(){f(rt.elements.container,A.classes.loading,t),ze(t)},t?250:0)}function Be(e){if(rt.supported.full){var t=rt.elements.display.played,n=0,a=Ne();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):O.number(e)?100*e:0}()}O.number(A.loop.start)&&O.number(A.loop.end)&&rt.elements.media.currentTime>=A.loop.end&&Pe(A.loop.start),He(t,n)}}function He(e,t){if(rt.supported.full){if(O.undefined(t)&&(t=0),O.undefined(e)){if(!O.htmlElement(rt.elements.display.buffer))return;e=rt.elements.display.buffer}if(O.htmlElement(e)){e.value=t;var n=e.getElementsByTagName("span")[0];O.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),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 Ue(){if(rt.supported.full){var e=Ne()||0;!rt.elements.display.duration&&A.displayDuration&&rt.elements.media.paused&&Ye(e,rt.elements.display.currentTime),rt.elements.display.duration&&Ye(e,rt.elements.display.duration),Xe()}}function Ke(e){Ye(rt.elements.media.currentTime,rt.elements.display.currentTime),e&&"timeupdate"===e.type&&rt.elements.media.seeking||Be(e); -}function Qe(e){O.number(e)||(e=0);var t=Ne(),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 Xe(e){var t=Ne();if(A.tooltips.seek&&O.htmlElement(rt.elements.inputs.seek)&&O.htmlElement(rt.elements.display.seekTooltip)&&0!==t){var n=rt.elements.inputs.seek.getBoundingClientRect(),a=0,l=A.classes.tooltip+"--visible";if(O.event(e))a=100/n.width*(e.pageX-n.left);else{if(!y(rt.elements.display.seekTooltip,l))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+"%",O.event(e)&&s(["mouseenter","mouseleave"],e.type)&&f(rt.elements.display.seekTooltip,l,"mouseenter"===e.type)}}function ze(t){if(A.hideControls&&"audio"!==rt.type){var n=0,a=!1,l=t,i=y(rt.elements.container,A.classes.loading);if(O.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(rt.elements.container,A.classes.hideControls)),e.clearTimeout(ot.hover),l||rt.elements.media.paused||i){if(f(rt.elements.container,A.classes.hideControls,!1),rt.elements.media.paused||i)return;rt.browser.isTouch&&(n=3e3)}l&&rt.elements.media.paused||(ot.hover=e.setTimeout(function(){(!rt.elements.controls.pressed&&!rt.elements.controls.hover||a)&&f(rt.elements.container,A.classes.hideControls,!0)},n))}}function Ge(e){if(!O.undefined(e))return void Je(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 Je(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&&s(L.embed,t.type)&&(rt.type=t.type)}switch(rt.supported=P(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),O.boolean(e.autoplay)&&(A.autoplay=e.autoplay),s(L.html5,rt.type)&&(A.crossorigin&&rt.elements.media.setAttribute("crossorigin",""),A.autoplay&&rt.elements.media.setAttribute("autoplay",""),"poster"in e&&rt.elements.media.setAttribute("poster",e.poster),A.loop.active&&rt.elements.media.setAttribute("loop","")),f(rt.elements.container,A.classes.fullscreen.active,rt.fullscreen.active),f(rt.elements.container,A.classes.captions.active,rt.captions.enabled),ce(),s(L.html5,rt.type)&&W("source",e.sources),ye(),s(L.html5,rt.type)&&("tracks"in e&&W("track",e.tracks),rt.elements.media.load()),(s(L.html5,rt.type)||s(L.embed,rt.type)&&!rt.supported.full)&&(lt(),st()),A.title=e.title,pe()}return O.object(e)&&"sources"in e&&e.sources.length?(f(rt.elements.container,A.classes.ready,!1),we(),Qe(),He(),tt(),void nt(t,!1)):void dt("Invalid source format")}function $e(e){"video"===rt.type&&rt.elements.media.setAttribute("poster",e)}function Ze(){function n(){var e=Te(),t=rt.elements.buttons[e?"play":"pause"],n=rt.elements.buttons[e?"pause":"play"];if(n){var a=y(t,A.classes.tabFocus);setTimeout(function(){n.focus(),a&&(f(t,A.classes.tabFocus,!1),f(n,A.classes.tabFocus,!0))},100)}}function a(e){return e.keyCode?e.keyCode:e.which}function l(e){f(V("."+A.classes.tabFocus),A.classes.tabFocus,!1),rt.elements.container.contains(e)&&f(e,A.classes.tabFocus,!0)}function i(e){function t(){var e=rt.elements.media.duration;O.number(e)&&Pe(e/10*(l-48))}var l=a(e),i="keydown"===e.type,r=i&&l===o;if(O.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(O.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:Ve();break;case 40:De();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:Se("start");break;case 76:Se();break;case 79:Se("end")}!M.fullscreen&&rt.fullscreen.active&&27===l&&Le(),o=l}else o=null}var r=rt.browser.isIE?"change":"input";if(A.keyboardShortcuts.focused){var o=null;A.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=I().length;1!==r||!s(l,t)||O.htmlElement(n)&&b(n,A.selectors.editable)||i(e)}),k(rt.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(D("."+A.classes.tabFocus),A.classes.tabFocus,!1)});for(var u in rt.elements.buttons){var c=rt.elements.buttons[u];k(c,"blur",function(){f(c,"tab-focus",!1)})}var d=function(e,t,n){O.function(t)&&t.call(this,e),O.function(n)&&n.call(this,e)};v(rt.elements.buttons.play,"click",A.listeners.play,n),v(rt.elements.buttons.playLarge,"click",A.listeners.play,n),v(rt.elements.buttons.pause,"click",A.listeners.pause,n),v(rt.elements.buttons.restart,"click",A.listeners.restart,Pe),v(rt.elements.buttons.rewind,"click",A.listeners.rewind,Ae),v(rt.elements.buttons.forward,"click",A.listeners.forward,_e),v(rt.elements.buttons.mute,"click",A.listeners.mute,je),v(rt.elements.buttons.captions,"click",A.listeners.captions,oe),v(rt.elements.buttons.fullscreen,"click",A.listeners.fullscreen,Le),v(rt.elements.buttons.pip,"click",A.listeners.pip,function(e){M.pip&&rt.elements.media.webkitSetPresentationMode("picture-in-picture"===rt.elements.media.webkitPresentationMode?"inline":"picture-in-picture")}),v(rt.elements.buttons.airplay,"click",A.listeners.airplay,function(e){M.airplay&&rt.elements.media.webkitShowPlaybackTargetPicker()}),k(rt.elements.settings.menu,"click",Oe),k(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)}),k(rt.elements.settings.menu,"click",function(e){b(e.target,A.selectors.inputs.language)?d.call(this,e,A.listeners.language,se):b(e.target,A.selectors.inputs.quality)?d.call(this,e,A.listeners.quality,function(){dt("Set quality")}):b(e.target,A.selectors.inputs.speed)?d.call(this,e,A.listeners.speed,Ee):b(e.target,A.selectors.buttons.loop)&&d.call(this,e,A.listeners.loop,function(){var t=e.target.getAttribute("data-loop__value")||e.target.getAttribute("data-loop__type");s(["start","end","all","none"],t)&&Se(t)})}),v(rt.elements.inputs.seek,r,A.listeners.seek,Pe),v(rt.elements.inputs.volume,r,A.listeners.volume,Me),k(rt.elements.progress,"mouseenter mouseleave mousemove",Xe),A.hideControls&&(k(rt.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen",ze),k(rt.elements.controls,"mouseenter mouseleave",function(e){rt.elements.controls.hover="mouseenter"===e.type}),k(rt.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){rt.elements.controls.pressed=s(["mousedown","touchstart"],e.type)}),k(rt.elements.controls,"focus blur",ze,!0)),v(rt.elements.inputs.volume,"wheel",A.listeners.volume,function(e){var t=e.webkitDirectionInvertedFromDevice,n=.2,a=0;(e.deltaY<0||e.deltaX>0)&&(t?(De(n),a=-1):(Ve(n),a=1)),(e.deltaY>0||e.deltaX<0)&&(t?(Ve(n),a=1):(De(n),a=-1)),(1===a&&rt.elements.media.volume<1||a===-1&&rt.elements.media.volume>0)&&e.preventDefault()}),M.fullscreen&&k(t,j.eventType,Le)}function et(){if(k(rt.elements.media,"timeupdate seeking",Ke),k(rt.elements.media,"durationchange loadedmetadata",Ue),k(rt.elements.media,"ended",function(){"video"===rt.type&&A.showPosterOnEnd&&("video"===rt.type&&ie(),Pe(),rt.elements.media.load())}),k(rt.elements.media,"progress playing",Be),k(rt.elements.media,"volumechange",Re),k(rt.elements.media,"play pause ended",Ie),k(rt.elements.media,"waiting canplay seeked",We),A.clickToPlay&&"audio"!==rt.type){var e=D("."+A.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",k(e,"click",function(){A.hideControls&&rt.browser.isTouch&&!rt.elements.media.paused||(rt.elements.media.paused?Ce():rt.elements.media.ended?(Pe(),Ce()):we())})}A.disableContextMenu&&k(rt.elements.media,"contextmenu",function(e){e.preventDefault()}),k(rt.elements.media,A.events.concat(["keyup","keydown"]).join(" "),function(e){N(rt.elements.container,e.type,!0)})}function tt(){if(s(L.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 l(){O.boolean(a)||(a=!0),O.function(n)&&n.call(ut),a&&(rt.init=!1,rt.elements.container.parentNode.replaceChild(ut,rt.elements.container),t.body.style.overflow="",N(ut,"destroyed",!0))}if(!rt.init)return null;switch(rt.type){case"youtube":e.clearInterval(ot.buffering),e.clearInterval(ot.playing),rt.embed.destroy(),l();break;case"vimeo":rt.embed.unload().then(l),e.setTimeout(l,200);break;case"video":case"audio":de(!0),l()}}function at(){if(rt.init)return null;if(rt.browser=n(),O.htmlElement(rt.elements.media)){me();var e=h.tagName.toLowerCase();"div"===e?(rt.type=h.getAttribute("data-type"),rt.embedId=h.getAttribute("data-video-id"),h.removeAttribute("data-type"),h.removeAttribute("data-video-id")):(rt.type=e,A.crossorigin=null!==h.getAttribute("crossorigin"),A.autoplay=A.autoplay||null!==h.getAttribute("autoplay"),A.loop=A.loop||null!==h.getAttribute("loop")),rt.supported=P(rt.type),rt.supported.basic&&(rt.elements.container=i(h,d("div")),rt.elements.container.setAttribute("tabindex",0),ce(),ct(""+rt.browser.name+" "+rt.browser.version),ye(),(s(L.html5,rt.type)||s(L.embed,rt.type)&&!rt.supported.full)&&(lt(),st(),pe()),rt.init=!0)}}function lt(){return rt.supported.full?(O.htmlElement(rt.elements.controls)||(ue(),Ze()),et(),de(),te(),ne(),Me(),Re(),Ee(),Se(),Ke(),void Ie()):(dt("Basic support only",rt.type),r(D(A.selectors.controls.wrapper)),r(D(A.selectors.buttons.play)),void de(!0))}function st(){e.setTimeout(function(){N(rt.elements.media,"ready")},0),f(rt.elements.media,q.classes.setup,!0),f(rt.elements.container,A.classes.ready,!0),rt.elements.media.plyr=it,A.autoplay&&Ce()}var it,rt=this,ot={};rt.fullscreen={active:!1},rt.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},media:h,captions:null},rt.captions={enabled:!1,captions:[],tracks:[],currentTrack:null};var ut=h.cloneNode(!0),ct=function(){},dt=function(){};return A.debug&&"console"in e&&(ct=e.console.log,dt=e.console.warn),ct("Config",A),ct("Support",M),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:Ne,getCurrentTime:function(){return rt.elements.media.currentTime},getVolume:function(){return rt.elements.media.volume},isMuted:function(){return rt.elements.media.muted},isReady:function(){return y(rt.elements.container,A.classes.ready)},isLoading:function(){return y(rt.elements.container,A.classes.loading)},isPaused:function(){return rt.elements.media.paused},isLooping:function(){return A.loop.active},on:function(e,t){return k(rt.elements.container,e,t),this},play:Ce,pause:we,loop:Se,stop:function(){we(),Pe()},restart:Pe,rewind:Ae,forward:_e,seek:Pe,source:Ge,poster:$e,setVolume:Me,setSpeed:Ee,togglePlay:Te,toggleMute:je,toggleCaptions:oe,toggleFullscreen:Le,toggleControls:ze,setLanguage:se,isFullscreen:function(){return rt.fullscreen.active||!1},support:function(e){return M.mime(rt,e)},destroy:nt},at(),rt.init?it:null}function _(e,n){var a=new XMLHttpRequest;if(!O.string(n)||!O.htmlElement(t.querySelector("#"+n))){var l=d("div");l.setAttribute("hidden",""),O.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 P(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,q.classes.hook)||l.push({target:e,media:t})}var l=[],s=[],i=[q.selectors.html5,q.selectors.embed].join(",");if(O.string(e)?e=t.querySelectorAll(e):O.htmlElement(e)?e=[e]:O.nodeList(e)||O.array(e)||O.string(e)||(O.undefined(n)&&O.object(e)&&(n=e),e=t.querySelectorAll(i)),O.nodeList(e)&&(e=Array.prototype.slice.call(e)),!P().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({},q,n,i);if(!r.enabled)return null;var o=new A(a,r);if(O.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 I(e){if(O.string(e)?e=t.querySelector(e):O.undefined(e)&&(e=t.body),O.htmlElement(e)){var n=e.querySelectorAll("."+q.classes.setup),a=[];return Array.prototype.slice.call(n).forEach(function(e){O.object(e.plyr)&&a.push(e.plyr)}),a}return[]}var F={x:0,y:0},q={enabled:!0,title:"",debug:!1,autoplay:!1,seekTime:10,volume:10,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",selected:"auto"},loop:{active:!1,start:0,end:null,indicator:{start:0,end:0}},speed:{selected:1,options:[.25,.5,.75,1,1.25,1.5,2]},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:{active:!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",none:"None"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},soundcloud:{api:"https://w.soundcloud.com/player/api.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ready","ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied"],logPrefix:""},L={embed:["youtube","vimeo","soundcloud"],html5:["video","audio"]},O={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}},j=function(){var e=function(){var e=!1;return O.function(t.cancelFullScreen)?e="":["webkit","o","moz","ms","khtml"].some(function(n){return O.function(t[n+"CancelFullScreen"])?(e=n,!0):O.function(t.msExitFullscreen)&&t.msFullscreenEnabled?(e="ms",!0):void 0}),e}();return{prefix:e,eventType:"ms"===e?"MSFullscreenChange":e+"fullscreenchange",isFullScreen:function(n){if(!M.fullscreen)return!1;switch(O.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!!M.fullscreen&&(O.htmlElement(n)||(n=t.body),console.log(e),""===e?n.requestFullScreen():n[e+("ms"===e?"RequestFullscreen":"RequestFullScreen")]())},cancelFullScreen:function(){return!!M.fullscreen&&(""===e?t.cancelFullScreen():t[e+("ms"===e?"ExitFullscreen":"CancelFullScreen")]())},element:function(){return M.fullscreen?""===e?t.fullscreenElement:t[e+"FullscreenElement"]:null}}}(),M={fullscreen:j.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 O.function(d("video").webkitSetPresentationMode)}(),airplay:function(){return O.function(e.WebKitPlaybackTargetAvailabilityEvent)}(),mime:function(e,t){var n=e.media;try{if(!O.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:P,loadSprite:_,get:I}}),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(n,s){function f(e,t,n,a){d.event(e,t,n,d.extend({},a,{plyr:Re}))}function y(e){return De.elements.container.querySelectorAll(e)}function g(e){return y(e)[0]}function b(e){c.string(e)?(d.removeElement(De.elements[e]),De.elements[e]=null):d.removeElement(e)}function v(){function e(e){9===e.which&&De.fullscreen.active&&(e.target!==a||e.shiftKey?e.target===n&&e.shiftKey&&(e.preventDefault(),a.focus()):(e.preventDefault(),n.focus()))}var t=y("input:not([disabled]), button:not([disabled])"),n=t[0],a=t[t.length-1];d.on(De.elements.container,"keydown",e)}function h(e,t){c.string(t)?d.insertElement(e,De.elements.media,{src:t}):c.array(t)&&t.forEach(function(t){d.insertElement(e,De.elements.media,t)})}function k(){return{url:s.iconUrl,absolute:0===s.iconUrl.indexOf("http")||De.browser.isIE}}function C(e,n){var a="http://www.w3.org/2000/svg",l=k(),r=(l.absolute?"":l.url)+"#"+s.iconPrefix,i=t.createElementNS(a,"svg");d.setAttributes(i,d.extend(n,{role:"presentation"}));var o=t.createElementNS(a,"use");return o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",r+"-"+e),i.appendChild(o),i}function E(e){var t=s.i18n[e];switch(e){case"pip":t="PIP";break;case"airplay":t="AirPlay"}return d.createElement("span",{class:s.classes.hidden},t)}function w(e){var t=d.createElement("span",{class:s.classes.menu.value});return t.appendChild(d.createElement("span",{class:s.classes.menu.badge},e)),t}function A(e,t){var n,a,l,r=d.createElement("button");switch(c.object(t)||(t={}),"class"in t?t.class.indexOf(s.classes.control)===-1&&(t.class+=" "+s.classes.control):t.class=s.classes.control,e){case"mute":l="toggleMute",n="volume",a="muted";break;case"captions":l="toggleCaptions",n="captions-off",a="captions-on";break;case"fullscreen":l="toggleFullscreen",n="enter-fullscreen",a="exit-fullscreen";break;case"play-large":t.class="plyr__play-large",e="play",l="play",n="play";break;default:l=e,n=e}return d.extend(t,d.getAttributesFromSelector(s.selectors.buttons[e],t)),c.string(a)&&r.appendChild(C(a,{class:"icon--"+a})),r.appendChild(C(n)),r.appendChild(E(l)),d.setAttributes(r,t),De.elements.buttons[e]=r,r}function S(e,t){var n=d.createElement("label",{for:t.id,class:s.classes.hidden},s.i18n[e]),a=d.createElement("input",d.extend(d.getAttributesFromSelector(s.selectors.inputs[e]),{type:"range",min:0,max:100,step:.1,value:0,autocomplete:"off"},t));return De.elements.inputs[e]=a,{label:n,input:a}}function T(e,t){var n=d.createElement("progress",d.extend(d.getAttributesFromSelector(s.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(d.createElement("span",null,"0"));var a="";switch(e){case"played":a=s.i18n.played;break;case"buffer":a=s.i18n.buffered}n.textContent="% "+a.toLowerCase()}return De.elements.display[e]=n,n}function x(e){var t=d.createElement("span",{class:"plyr__time"});return t.appendChild(d.createElement("span",{class:s.classes.hidden},s.i18n[e])),t.appendChild(d.createElement("span",d.getAttributesFromSelector(s.selectors.display[e]),"00:00")),De.elements.display[e]=t,t}function F(e){var t=d.createElement("div",d.getAttributesFromSelector(s.selectors.controls.wrapper));if(d.inArray(s.controls,"restart")&&t.appendChild(A("restart")),d.inArray(s.controls,"rewind")&&t.appendChild(A("rewind")),d.inArray(s.controls,"play")&&(t.appendChild(A("play")),t.appendChild(A("pause"))),d.inArray(s.controls,"fast-forward")&&t.appendChild(A("fast-forward")),d.inArray(s.controls,"progress")){var n=d.createElement("span",d.getAttributesFromSelector(s.selectors.progress)),a=S("seek",{id:"plyr-seek-"+e.id});if(n.appendChild(a.label),n.appendChild(a.input),n.appendChild(T("played")),n.appendChild(T("buffer")),s.tooltips.seek){var l=d.createElement("span",{role:"tooltip",class:s.classes.tooltip},"00:00");n.appendChild(l),De.elements.display.seekTooltip=l}De.elements.progress=n,t.appendChild(De.elements.progress)}if(d.inArray(s.controls,"current-time")&&t.appendChild(x("currentTime")),d.inArray(s.controls,"duration")&&t.appendChild(x("duration")),d.inArray(s.controls,"mute")&&t.appendChild(A("mute")),d.inArray(s.controls,"volume")){var r=d.createElement("span",{class:"plyr__volume"}),i={max:10,value:s.volume},o=S("volume",d.extend(i,{id:"plyr-volume-"+e.id}));r.appendChild(o.label),r.appendChild(o.input);var u=T("volume",i);r.appendChild(u),t.appendChild(r)}if(d.inArray(s.controls,"captions")&&t.appendChild(A("captions")),d.inArray(s.controls,"settings")){var c=d.createElement("span",d.extend(d.getAttributesFromSelector(s.selectors.buttons.settings),{class:"plyr__menu"}));c.appendChild(A("settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var p=d.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),f=d.createElement("div"),y=d.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=d.createElement("ul",{role:"tablist"});["captions","quality","speed","loop"].forEach(function(t){var n=d.createElement("li",{role:"tab"}),a=d.createElement("button",d.extend(d.getAttributesFromSelector(s.selectors.buttons.settings),{type:"button",class:s.classes.control+" "+s.classes.control+"--forward",id:"plyr-settings-"+e.id+"-"+t+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+t,"aria-expanded":!1}),s.i18n[t]),l=d.createElement("span",{class:s.classes.menu.value});l.innerHTML=e[t],a.appendChild(l),n.appendChild(a),g.appendChild(n),De.elements.settings.tabs[t]=n}),y.appendChild(g),f.appendChild(y),["captions","quality","speed","loop"].forEach(function(t){var n=d.createElement("div",{id:"plyr-settings-"+e.id+"-"+t,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+t+"-tab",role:"tabpanel",tabindex:-1}),a=d.createElement("button",{type:"button",class:s.classes.control+" "+s.classes.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},s.i18n[t]);n.appendChild(a);var l=d.createElement("ul");n.appendChild(l),f.appendChild(n),De.elements.settings.panes[t]=n}),p.appendChild(f),c.appendChild(p),t.appendChild(c),De.elements.settings.menu=c}return d.inArray(s.controls,"pip")&&m.pip&&t.appendChild(A("pip")),d.inArray(s.controls,"airplay")&&m.airplay&&t.appendChild(A("airplay")),d.inArray(s.controls,"fullscreen")&&t.appendChild(A("fullscreen")),De.elements.controls=t,P(),N(),t}function _(e,n){function a(e){var t="";switch(e){case"hd2160":t="4K";break;case"hd1440":t="WQHD";break;case"hd1080":t="HD";break;case"hd720":t="HD"}return t.length?w(t):null}function l(e){switch(e){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";default:return"Auto"}}var r=De.elements.settings.panes.quality.querySelector("ul");if(d.emptyElement(r),c.array(e)&&!c.empty(e)){var i=e.filter(function(e){return["tiny","small"].indexOf(e)===-1});i.forEach(function(e){var n=d.createElement("li"),i=d.createElement("label",{class:s.classes.control,for:"plyr-quality-"+e}),o=d.createElement("input",d.extend(d.getAttributesFromSelector(s.selectors.inputs.quality),{type:"radio",id:"plyr-quality-"+e,name:"plyr-quality",value:e}));e===s.quality.selected&&o.setAttribute("checked",""),i.appendChild(o),i.appendChild(t.createTextNode(l(e)));var u=a(e);c.htmlElement(u)&&i.appendChild(u),n.appendChild(i),r.appendChild(n)})}}function P(){var e=["start","end","all","reset"],t=De.elements.settings.panes.loop.querySelector("ul");d.emptyElement(t),e.forEach(function(e){var n=d.createElement("li"),a=d.createElement("button",d.extend(d.getAttributesFromSelector(s.selectors.buttons.loop),{type:"button",class:s.classes.control,"data-plyr-loop-action":e}),s.i18n[e]);if(d.inArray(["start","end"],e)){var l=w("0:00");a.appendChild(l)}n.appendChild(a),t.appendChild(n)})}function I(){var e=De.elements.settings.panes.captions.querySelector("ul");if(d.emptyElement(e),!c.empty(De.captions.tracks)){var n=[].map.call(De.captions.tracks,function(e){return{language:e.language,badge:!0,label:c.empty(e.label)?e.language.toUpperCase():e.label}});n.unshift({language:"off",label:s.i18n.none}),n.forEach(function(n){var a=d.createElement("li"),l=d.createElement("label",{class:s.classes.control,for:"plyr-language-"+n.language}),r=d.createElement("input",d.extend(d.getAttributesFromSelector(s.selectors.inputs.language),{type:"radio",id:"plyr-language-"+n.language,name:"plyr-language",value:n.language}));n.language===s.captions.language.toLowerCase()&&r.setAttribute("checked",""),l.appendChild(r),l.appendChild(t.createTextNode(n.label||n.language)),n.badge&&l.appendChild(w(n.language.toUpperCase())),a.appendChild(l),e.appendChild(a)})}}function N(e){var t=De.elements.settings.panes.speed.querySelector("ul");d.emptyElement(t),c.array(e)||(e=s.speed.options),e.forEach(function(e){var n=d.createElement("li"),a=d.createElement("label",{class:s.classes.control,for:"plyr-speed-"+e.toString().replace(".","-")}),l=d.createElement("input",d.extend(d.getAttributesFromSelector(s.selectors.inputs.speed),{type:"radio",id:"plyr-speed-"+e.toString().replace(".","-"),name:"plyr-speed",value:e}));e===s.speed.selected&&l.setAttribute("checked",""),a.appendChild(l),a.insertAdjacentHTML("beforeend","×"+e),n.appendChild(a),t.appendChild(n)})}function q(){if(De.supported.full&&("audio"!==De.type||s.fullscreen.allowAudio)&&s.fullscreen.enabled){var e=m.fullscreen;e||s.fullscreen.fallback&&!d.inFrame()?(He((e?"Native":"Fallback")+" fullscreen enabled"),d.toggleClass(De.elements.container,s.classes.fullscreen.enabled,!0)):He("Fullscreen not supported and fallback disabled"),De.elements.buttons&&De.elements.buttons.fullscreen&&d.toggleState(De.elements.buttons.fullscreen,!1),v()}}function L(e){if(d.inArray(["video","vimeo"],De.type)&&("video"!==De.type||m.textTracks)&&(c.htmlElement(De.elements.captions)||(De.elements.captions=d.createElement("div",d.getAttributesFromSelector(s.selectors.captions)),console.warn(De.type),"video"===De.type?De.elements.wrapper.appendChild(De.elements.captions):(console.warn(De.elements.media),De.elements.media.appendChild(De.elements.captions))),De.captions.tracks=c.array(e)?e:De.elements.media.textTracks,d.toggleClass(De.elements.container,s.classes.captions.enabled,!c.empty(De.captions.tracks)),!c.empty(De.captions.tracks))){if(R(),"video"===De.type){var t=s.captions.language.toLowerCase();[].forEach.call(De.captions.tracks,function(e){d.off(e,"cuechange",O),e.mode="hidden",e.language===t&&(De.captions.currentTrack=e)}),c.track(De.captions.currentTrack)||(Ye("No language found to match "+t+" in tracks"),De.captions.currentTrack=De.captions.tracks[0]);var n=De.captions.currentTrack;c.track(n)&&d.inArray(["captions","subtitles"],n.kind)&&(d.on(n,"cuechange",O),n.activeCues&&n.activeCues.length>0&&O(n))}I()}}function j(){return!m.textTracks||c.empty(De.captions.tracks)?"No Subs":De.captions.enabled?De.captions.currentTrack.label:"Disabled"}function O(e){c.event(e)&&(e=e.target);var t=e.activeCues[0];c.cue(t)?V(t.getCueAsHTML()):V()}function M(e){c.string(e)?s.captions.language=e.toLowerCase():c.event(e)&&(s.captions.language=e.target.value.toLowerCase()),V(),L()}function V(e){if(c.htmlElement(De.elements.captions)){var t=d.createElement("span");d.emptyElement(De.elements.captions),c.undefined(e)&&(e=""),c.string(e)?t.textContent=e.trim():t.appendChild(e),De.elements.captions.appendChild(t)}else Ye("No captions element to render to")}function R(){if(De.elements.buttons.captions){var e=De.storage.captions;c.boolean(e)?s.captions.active=e:e=s.captions.active,e&&(d.toggleClass(De.elements.container,s.classes.captions.active,!0),d.toggleState(De.elements.buttons.captions,!0))}}function D(e){De.supported.full&&De.elements.buttons.captions&&(c.boolean(e)||(e=De.elements.container.className.indexOf(s.classes.captions.active)===-1),De.captions.enabled=e,d.toggleState(De.elements.buttons.captions,De.captions.enabled),d.toggleClass(De.elements.container,s.classes.captions.active,De.captions.enabled),f(De.elements.container,De.captions.enabled?"captionsenabled":"captionsdisabled",!0),Q({captions:De.captions.enabled}))}function W(){if(s.loadSprite){var e=k();e.absolute?(He("AJAX loading absolute SVG sprite"+(De.browser.isIE?" (due to IE)":"")),a(e.url,"sprite-plyr")):He("Sprite will be used as external resource directly")}d.inArray(s.controls,"play-large")&&(De.elements.buttons.playLarge=A("play-large"),De.elements.container.appendChild(De.elements.buttons.playLarge)),De.id=Math.floor(1e4*Math.random());var n=null;n=c.string(s.controls)?s.controls:c.function(s.controls)?s.controls({id:De.id,seektime:s.seekTime}):F({id:De.id,seektime:s.seekTime,speed:se(),quality:"HD",captions:j(),loop:"None"});var l;if(c.string(s.selectors.controls.container)&&(l=t.querySelector(s.selectors.controls.container)),c.htmlElement(l)||(l=De.elements.container),c.htmlElement(n)?l.appendChild(n):l.insertAdjacentHTML("beforeend",n),c.htmlElement(De.elements.controls)&&B(),s.tooltips.controls)for(var r=y([s.selectors.controls.wrapper," ",s.selectors.labels," .",s.classes.hidden].join("")),i=r.length-1;i>=0;i--){var o=r[i];d.toggleClass(o,s.classes.hidden,!1),d.toggleClass(o,s.classes.tooltip,!0)}}function B(){try{return De.elements.controls=g(s.selectors.controls.wrapper),De.elements.buttons={play:y(s.selectors.buttons.play),pause:g(s.selectors.buttons.pause),restart:g(s.selectors.buttons.restart),rewind:g(s.selectors.buttons.rewind),forward:g(s.selectors.buttons.forward),mute:g(s.selectors.buttons.mute),pip:g(s.selectors.buttons.pip),airplay:g(s.selectors.buttons.airplay),settings:g(s.selectors.buttons.settings),captions:g(s.selectors.buttons.captions),fullscreen:g(s.selectors.buttons.fullscreen)},De.elements.progress=g(s.selectors.progress),De.elements.inputs={seek:g(s.selectors.inputs.seek),volume:g(s.selectors.inputs.volume)},De.elements.display={buffer:g(s.selectors.display.buffer),played:g(s.selectors.display.played),volume:g(s.selectors.display.volume),duration:g(s.selectors.display.duration),currentTime:g(s.selectors.display.currentTime)},c.htmlElement(De.elements.progress)&&(De.elements.display.seekTooltip=De.elements.progress.querySelector("."+s.classes.tooltip)),!0}catch(e){return Ye("It looks like there is a problem with your custom controls HTML",e),Y(!0),!1}}function H(){d.toggleClass(De.elements.container,s.selectors.container.replace(".",""),De.supported.full)}function Y(e){e&&d.inArray(u.html5,De.type)?De.elements.media.setAttribute("controls",""):De.elements.media.removeAttribute("controls")}function U(e){var t=s.i18n.play;if(c.string(s.title)&&!c.empty(s.title)&&(t+=", "+s.title,De.elements.container.setAttribute("aria-label",s.title)),De.supported.full&&(c.htmlElement(De.elements.buttons.play)&&De.elements.buttons.play.setAttribute("aria-label",t),c.htmlElement(De.elements.buttons.playLarge)&&De.elements.buttons.playLarge.setAttribute("aria-label",t)),c.htmlElement(e)){var n=c.string(s.title)&&!c.empty(s.title)?s.title:"video";e.setAttribute("title",s.i18n.frameTitle.replace("{title}",n))}}function K(){var t=null;De.storage={},m.storage&&s.storage.enabled&&(e.localStorage.removeItem("plyr-volume"),t=e.localStorage.getItem(s.storage.key),t&&(/^\d+(\.\d+)?$/.test(t)?Q({volume:parseFloat(t)}):De.storage=JSON.parse(t)))}function Q(t){m.storage&&s.storage.enabled&&(d.extend(De.storage,t),e.localStorage.setItem(s.storage.key,JSON.stringify(De.storage)))}function X(){return De.elements.media?(De.supported.full&&(d.toggleClass(De.elements.container,s.classes.type.replace("{0}",De.type),!0),d.inArray(u.embed,De.type)&&d.toggleClass(De.elements.container,s.classes.type.replace("{0}","video"),!0),d.toggleClass(De.elements.container,s.classes.pip.enabled,m.pip&&"video"===De.type),d.toggleClass(De.elements.container,s.classes.airplay.enabled,m.airplay&&d.inArray(u.html5,De.type)),d.toggleClass(De.elements.container,s.classes.stopped,s.autoplay),d.toggleClass(De.elements.container,s.classes.isIos,De.browser.isIos),d.toggleClass(De.elements.container,s.classes.isTouch,De.browser.isTouch),"video"===De.type&&(De.elements.wrapper=d.createElement("div",{class:s.classes.videoWrapper}),d.wrap(De.elements.media,De.elements.wrapper))),void(d.inArray(u.embed,De.type)&&z())):void Ye("No media element found!")}function z(){var t,n=d.createElement("div"),a=De.type+"-"+Math.floor(1e4*Math.random());switch(De.type){case"youtube":t=d.parseYouTubeId(De.embedId);break;default:t=De.embedId}for(var l=y('[id^="'+De.type+'-"]'),r=l.length-1;r>=0;r--)d.removeElement(l[r]);if(d.toggleClass(De.elements.media,s.classes.videoWrapper,!0),d.toggleClass(De.elements.media,s.classes.embedWrapper,!0),"youtube"===De.type)De.elements.media.appendChild(n),n.setAttribute("id",a),c.object(e.YT)?G(t,n):(d.injectScript(s.urls.youtube.api),e.onYouTubeReadyCallbacks=e.onYouTubeReadyCallbacks||[],e.onYouTubeReadyCallbacks.push(function(){G(t,n)}),e.onYouTubeIframeAPIReady=function(){e.onYouTubeReadyCallbacks.forEach(function(e){e()})});else if("vimeo"===De.type)if(De.supported.full?De.elements.media.appendChild(n):n=De.elements.media,n.setAttribute("id",a),c.object(e.Vimeo))J(t,n);else{d.injectScript(s.urls.vimeo.api);var i=e.setInterval(function(){c.object(e.Vimeo)&&(e.clearInterval(i),J(t,n))},50)}else if("soundcloud"===De.type){var o=d.createElement("iframe");o.loaded=!1,d.on(o,"load",function(){o.loaded=!0}),d.setAttributes(o,{src:"https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+t,id:a}),n.appendChild(o),De.elements.media.appendChild(n),e.SC||d.injectScript(s.urls.soundcloud.api);var u=e.setInterval(function(){e.SC&&o.loaded&&(e.clearInterval(u),Z.call(o))},50)}}function $(){De.supported.full&&(Me(),Ve()),U(g("iframe"))}function G(t,n){De.embed=new e.YT.Player(n.id,{videoId:t,playerVars:{autoplay:s.autoplay?1:0,controls:De.supported.full?0:1,rel:0,showinfo:0,iv_load_policy:3,cc_load_policy:s.captions.active?1:0,cc_lang_pref:"en",wmode:"transparent",modestbranding:1,disablekb:1,origin:e.location.href},events:{onError:function(e){f(De.elements.container,"error",!0,{code:e.data,embed:e.target})},onPlaybackQualityChange:function(e){var t=e.target,n=t.getPlaybackQuality();console.warn(n)},onReady:function(t){var n=t.target;De.elements.media.play=function(){n.playVideo(),De.elements.media.paused=!1},De.elements.media.pause=function(){n.pauseVideo(),De.elements.media.paused=!0},De.elements.media.stop=function(){n.stopVideo(),De.elements.media.paused=!0},De.elements.media.duration=n.getDuratiutils.on(),De.elements.media.paused=!0,De.elements.media.currentTime=0,De.elements.media.muted=n.isMuted();var a=n.getPlaybackRate(),l=n.getAvailablePlaybackRates();console.warn(a,l),s.title=n.getVideoData().title,De.supported.full&&De.elements.media.querySelector("iframe").setAttribute("tabindex",-1),$(),f(De.elements.media,"timeupdate"),f(De.elements.media,"durationchange"),e.clearInterval(We.buffering),We.buffering=e.setInterval(function(){De.elements.media.buffered=n.getVideoLoadedFraction(),(null===De.elements.media.lastBuffered||De.elements.media.lastBuffered<De.elements.media.buffered)&&f(De.elements.media,"progress"),De.elements.media.lastBuffered=De.elements.media.buffered,1===De.elements.media.buffered&&(e.clearInterval(We.buffering),f(De.elements.media,"canplaythrough"))},200)},onStateChange:function(t){var n=t.target;switch(e.clearInterval(We.playing),t.data){case 0:De.elements.media.paused=!0,f(De.elements.media,"ended");break;case 1:De.elements.media.paused=!1,De.elements.media.seeking&&f(De.elements.media,"seeked"),De.elements.media.seeking=!1,f(De.elements.media,"play"),f(De.elements.media,"playing"),We.playing=e.setInterval(function(){De.elements.media.currentTime=n.getCurrentTime(),f(De.elements.media,"timeupdate")},100),De.elements.media.duration!==n.getDuration()&&(De.elements.media.duration=n.getDuration(),f(De.elements.media,"durationchange"));var a=n.getAvailableQualityLevels(),l=n.getPlaybackQuality();_(a,l);break;case 2:De.elements.media.paused=!0,f(De.elements.media,"pause")}f(De.elements.container,"statechange",!1,{code:t.data})}}})}function J(t,n){De.embed=new e.Vimeo.Player(n,{id:t,loop:s.loop.active,autoplay:s.autoplay,byline:!1,portrait:!1,title:!1}),De.elements.media.play=function(){De.embed.play(),De.elements.media.paused=!1},De.elements.media.pause=function(){De.embed.pause(),De.elements.media.paused=!0},De.elements.media.stop=function(){De.embed.stop(),De.elements.media.paused=!0},De.elements.media.paused=!0,De.elements.media.currentTime=0,$(),De.embed.getCurrentTime().then(function(e){De.elements.media.currentTime=e,f(De.elements.media,"timeupdate")}),De.embed.getDuration().then(function(e){De.elements.media.duration=e,f(De.elements.media,"durationchange")}),De.embed.getTextTracks().then(function(e){L(e),s.captions.active&&De.embed.enableTextTrack(s.captions.language.toLowerCase())}),De.embed.on("cuechange",function(e){He(e);var t=e.cues[0].html;V(t)}),De.embed.on("loaded",function(){c.htmlElement(De.embed.element)&&De.supported.full&&De.embed.element.setAttribute("tabindex",-1)}),De.embed.on("play",function(){De.elements.media.paused=!1,f(De.elements.media,"play"),f(De.elements.media,"playing")}),De.embed.on("pause",function(){De.elements.media.paused=!0,f(De.elements.media,"pause")}),De.embed.on("timeupdate",function(e){De.elements.media.seeking=!1,De.elements.media.currentTime=e.seconds,f(De.elements.media,"timeupdate")}),De.embed.on("progress",function(e){De.elements.media.buffered=e.percent,f(De.elements.media,"progress"),1===parseInt(e.percent)&&f(De.elements.media,"canplaythrough")}),De.embed.on("seeked",function(){De.elements.media.seeking=!1,f(De.elements.media,"seeked"),f(De.elements.media,"play")}),De.embed.on("ended",function(){De.elements.media.paused=!0,f(De.elements.media,"ended")})}function Z(){De.embed=e.SC.Widget(this),De.embed.bind(e.SC.Widget.Events.READY,function(){De.elements.media.play=function(){De.embed.play(),De.elements.media.paused=!1},De.elements.media.pause=function(){De.embed.pause(),De.elements.media.paused=!0},De.elements.media.stop=function(){De.embed.seekTo(0),De.embed.pause(),De.elements.media.paused=!0},De.elements.media.paused=!0,De.elements.media.currentTime=0,De.embed.getDuration(function(e){De.elements.media.duration=e/1e3,$()}),De.embed.getPosition(function(e){De.elements.media.currentTime=e,f(De.elements.media,"timeupdate")}),De.embed.bind(e.SC.Widget.Events.PLAY,function(){De.elements.media.paused=!1,f(De.elements.media,"play"),f(De.elements.media,"playing")}),De.embed.bind(e.SC.Widget.Events.PAUSE,function(){De.elements.media.paused=!0,f(De.elements.media,"pause")}),De.embed.bind(e.SC.Widget.Events.PLAY_PROGRESS,function(e){De.elements.media.seeking=!1,De.elements.media.currentTime=e.currentPosition/1e3,f(De.elements.media,"timeupdate")}),De.embed.bind(e.SC.Widget.Events.LOAD_PROGRESS,function(e){De.elements.media.buffered=e.loadProgress,f(De.elements.media,"progress"),1===parseInt(e.loadProgress)&&f(De.elements.media,"canplaythrough")}),De.embed.bind(e.SC.Widget.Events.FINISH,function(){De.elements.media.paused=!0,f(De.elements.media,"ended")})})}function ee(){"play"in De.elements.media&&De.elements.media.play()}function te(){"pause"in De.elements.media&&De.elements.media.pause()}function ne(e){return c.boolean(e)||(e=De.elements.media.paused),e?ee():te(),e}function ae(e){d.inArray(["start","end","all","none","toggle"],e)||(e="toggle");var n=Number(De.elements.media.currentTime);switch(e){case"start":s.loop.end&&s.loop.end<=n&&(s.loop.end=null),s.loop.start=n,s.loop.indicator.start=De.elements.display.played.value;break;case"end":if(s.loop.start>=n)return;s.loop.end=n,s.loop.indicator.end=De.elements.display.played.value;break;case"all":s.loop.start=0,s.loop.end=De.elements.media.duration-2,s.loop.indicator.start=0,s.loop.indicator.end=100;break;case"toggle":s.loop.active?(s.loop.start=0,s.loop.end=null):(s.loop.start=0,s.loop.end=De.elements.media.duration-2);break;default:s.loop.start=0,s.loop.end=null}s.loop.active=c.number(s.loop.start)&&c.number(s.loop.end);var a=(we(s.loop.start,g('[data-plyr-loop="start"]')),null);c.number(s.loop.end)&&(a=we(s.loop.end,t.querySelector('[data-loop__value="loopout"]'))),s.loop.active}function le(e){return c.event(e)?e=parseFloat(e.target.value):c.number(e)||(e=parseFloat(De.storage.speed||s.speed.selected)),e<.1&&(e=.1),e>2&&(e=2),c.array(s.speed.options)?(s.speed.selected=e,De.elements.media.playbackRate=e,void Q({speed:e})):void Ye("Invalid speeds format")}function se(){return s.speed.selected.toFixed(1).toString().replace(".0","")+"×"}function re(e){c.number(e)||(e=s.seekTime),oe(De.elements.media.currentTime-e)}function ie(e){c.number(e)||(e=s.seekTime),oe(De.elements.media.currentTime+e)}function oe(e){var t=0,n=De.elements.media.paused,a=ue();c.number(e)?t=e:c.event(e)&&d.inArray(["input","change"],e.type)&&(t=e.target.value/e.target.max*a),t<0?t=0:t>a&&(t=a),Te(t);try{De.elements.media.currentTime=t.toFixed(4)}catch(e){}if(d.inArray(u.embed,De.type)){switch(De.type){case"youtube":De.embed.seekTo(t);break;case"vimeo":De.embed.setCurrentTime(t.toFixed(0));break;case"soundcloud":De.embed.seekTo(1e3*t)}n&&te(),f(De.elements.media,"timeupdate"),De.elements.media.seeking=!0,f(De.elements.media,"seeking")}He("Seeking to "+De.elements.media.currentTime+" seconds")}function ue(){var e=parseInt(s.duration),t=0;return null===De.elements.media.duration||isNaN(De.elements.media.duration)||(t=De.elements.media.duration),isNaN(e)?t:e}function ce(){d.toggleClass(De.elements.container,s.classes.playing,!De.elements.media.paused),d.toggleClass(De.elements.container,s.classes.stopped,De.elements.media.paused),Fe(De.elements.media.paused)}function de(){i={x:e.pageXOffset||0,y:e.pageYOffset||0}}function pe(){e.scrollTo(i.x,i.y)}function me(e){var n=m.fullscreen;if(n){if(!e||e.type!==p.eventType)return p.isFullScreen(De.elements.container)?p.cancelFullScreen():(de(),p.requestFullScreen(De.elements.container)),void(De.fullscreen.active=p.isFullScreen(De.elements.container));De.fullscreen.active=p.isFullScreen(De.elements.container)}else De.fullscreen.active=!De.fullscreen.active,t.body.style.overflow=De.fullscreen.active?"hidden":"";d.toggleClass(De.elements.container,s.classes.fullscreen.active,De.fullscreen.active),v(De.fullscreen.active),De.elements.buttons&&De.elements.buttons.fullscreen&&d.toggleState(De.elements.buttons.fullscreen,De.fullscreen.active),f(De.elements.container,De.fullscreen.active?"enterfullscreen":"exitfullscreen",!0),!De.fullscreen.active&&n&&pe()}function fe(n){var a=De.elements.settings.menu.parentNode,l=n.target,s=t.getElementById(l.getAttribute("aria-controls")),r="false"===l.getAttribute("aria-expanded");if(c.htmlElement(s)){var i,o,u,p="tabpanel"===s.getAttribute("role");if(p){var m=a.querySelector('[role="tabpanel"][aria-hidden="false"]');u=m.parentNode,[].forEach.call(a.querySelectorAll('[aria-controls="'+m.getAttribute("id")+'"]'),function(e){e.setAttribute("aria-expanded",!1)}),u.style.width=m.scrollWidth+"px",u.style.height=m.scrollHeight+"px",m.setAttribute("aria-hidden",!0),m.setAttribute("tabindex",-1);var f=s.cloneNode(!0);f.style.position="absolute",f.style.opacity=0,f.setAttribute("aria-hidden",!1),u.appendChild(f),i=f.scrollWidth,o=f.scrollHeight,d.removeElement(f)}s.setAttribute("aria-hidden",!r),l.setAttribute("aria-expanded",r),s.removeAttribute("tabindex"),p&&(u.style.width=i+"px",u.style.height=o+"px",e.setTimeout(function(){u.style.width="",u.style.height=""},300))}}function ye(e){if(c.boolean(e)||(e=!De.elements.media.muted),d.toggleState(De.elements.buttons.mute,e),De.elements.media.muted=e,0===De.elements.media.volume&&ge(s.volume),d.inArray(u.embed,De.type)){switch(De.type){case"youtube":De.embed[De.elements.media.muted?"mute":"unMute"]();break;case"vimeo":case"soundcloud":De.embed.setVolume(De.elements.media.muted?0:parseFloat(s.volume/10))}f(De.elements.media,"volumechange")}}function ge(e){var t=10,n=0;if(c.event(e)&&(e=e.target.value),c.undefined(e)&&(e=De.storage.volume),(null===e||isNaN(e))&&(e=s.volume),e>t&&(e=t),e<n&&(e=n),De.elements.media.volume=parseFloat(e/t),De.elements.display.volume&&(De.elements.display.volume.value=e),d.inArray(u.embed,De.type)){switch(De.type){case"youtube":De.embed.setVolume(100*De.elements.media.volume);break;case"vimeo":case"soundcloud":De.embed.setVolume(De.elements.media.volume)}f(De.elements.media,"volumechange")}0===e?De.elements.media.muted=!0:De.elements.media.muted&&e>0&&ye()}function be(e){var t=De.elements.media.muted?0:10*De.elements.media.volume;c.number(e)||(e=1),ge(t+e)}function ve(e){var t=De.elements.media.muted?0:10*De.elements.media.volume;c.number(e)||(e=1),ge(t-e)}function he(){var e=De.elements.media.muted?0:10*De.elements.media.volume;De.supported.full&&(De.elements.inputs.volume&&(De.elements.inputs.volume.value=e),De.elements.display.volume&&(De.elements.display.volume.value=e)),Q({volume:e}),d.toggleClass(De.elements.container,s.classes.muted,0===e),De.supported.full&&De.elements.buttons.mute&&d.toggleState(De.elements.buttons.mute,0===e)}function ke(e){var t="waiting"===e.type;clearTimeout(We.loading),We.loading=setTimeout(function(){d.toggleClass(De.elements.container,s.classes.loading,t),Fe(t)},t?250:0)}function Ce(e){if(De.supported.full){var t=De.elements.display.played,n=0,a=ue();if(e)switch(e.type){case"timeupdate":case"seeking":if(De.elements.controls.pressed)return;n=d.getPercentage(De.elements.media.currentTime,a),"timeupdate"===e.type&&De.elements.inputs.seek&&(De.elements.inputs.seek.value=n);break;case"playing":case"progress":t=De.elements.display.buffer,n=function(){var e=De.elements.media.buffered;return e&&e.length?d.getPercentage(e.end(0),a):c.number(e)?100*e:0}()}c.number(s.loop.start)&&c.number(s.loop.end)&&De.elements.media.currentTime>=s.loop.end&&oe(s.loop.start),Ee(t,n)}}function Ee(e,t){if(De.supported.full){if(c.undefined(t)&&(t=0),c.undefined(e)){if(!c.htmlElement(De.elements.display.buffer))return;e=De.elements.display.buffer}if(c.htmlElement(e)){e.value=t;var n=e.getElementsByTagName("span")[0];c.htmlElement(n)&&(n.childNodes[0].nodeValue=t)}}}function we(e,t){if(t){isNaN(e)&&(e=0);var n=parseInt(e%60),a=parseInt(e/60%60),l=parseInt(e/60/60%60),s=parseInt(ue()/60/60%60)>0;n=("0"+n).slice(-2),a=("0"+a).slice(-2);var r=(s?l+":":"")+a+":"+n;return t.textContent=r,r}}function Ae(){if(De.supported.full){var e=ue()||0;!De.elements.display.duration&&s.displayDuration&&De.elements.media.paused&&we(e,De.elements.display.currentTime),De.elements.display.duration&&we(e,De.elements.display.duration),xe()}}function Se(e){we(De.elements.media.currentTime,De.elements.display.currentTime),e&&"timeupdate"===e.type&&De.elements.media.seeking||Ce(e)}function Te(e){c.number(e)||(e=0);var t=ue(),n=d.getPercentage(e,t);De.elements.progress&&De.elements.display.played&&(De.elements.display.played.value=n),De.elements.buttons&&De.elements.inputs.seek&&(De.elements.inputs.seek.value=n)}function xe(e){var t=ue();if(s.tooltips.seek&&c.htmlElement(De.elements.inputs.seek)&&c.htmlElement(De.elements.display.seekTooltip)&&0!==t){var n=De.elements.inputs.seek.getBoundingClientRect(),a=0,l=s.classes.tooltip+"--visible";if(c.event(e))a=100/n.width*(e.pageX-n.left);else{if(!d.hasClass(De.elements.display.seekTooltip,l))return;a=De.elements.display.seekTooltip.style.left.replace("%","")}a<0?a=0:a>100&&(a=100),we(t/100*a,De.elements.display.seekTooltip),De.elements.display.seekTooltip.style.left=a+"%",c.event(e)&&d.inArray(["mouseenter","mouseleave"],e.type)&&d.toggleClass(De.elements.display.seekTooltip,l,"mouseenter"===e.type); +}}function Fe(t){if(s.hideControls&&"audio"!==De.type){var n=0,a=!1,l=t,r=d.hasClass(De.elements.container,s.classes.loading);if(c.boolean(t)||(t&&t.type?(a="enterfullscreen"===t.type,l=d.inArray(["mousemove","touchstart","mouseenter","focus"],t.type),d.inArray(["mousemove","touchmove"],t.type)&&(n=2e3),"focus"===t.type&&(n=3e3)):l=d.hasClass(De.elements.container,s.classes.hideControls)),e.clearTimeout(We.hover),l||De.elements.media.paused||r){if(d.toggleClass(De.elements.container,s.classes.hideControls,!1),De.elements.media.paused||r)return;De.browser.isTouch&&(n=3e3)}l&&De.elements.media.paused||(We.hover=e.setTimeout(function(){(!De.elements.controls.pressed&&!De.elements.controls.hover||a)&&d.toggleClass(De.elements.container,s.classes.hideControls,!0)},n))}}function _e(e){if(!c.undefined(e))return void Pe(e);var t;switch(De.type){case"youtube":t=De.embed.getVideoUrl();break;case"vimeo":De.embed.getVideoUrl.then(function(e){t=e});break;case"soundcloud":De.embed.getCurrentSound(function(e){t=e.permalink_url});break;default:t=De.elements.media.currentSrc}return t||""}function Pe(e){function t(){if(De.embed=null,b("media"),b("captions"),"video"===De.type&&De.elements.wrapper&&b("wrapper"),De.elements.container&&De.elements.container.removeAttribute("class"),"type"in e&&(De.type=e.type,"video"===De.type)){var t=e.sources[0];"type"in t&&d.inArray(u.embed,t.type)&&(De.type=t.type)}switch(De.supported=l(De.type),De.type){case"video":De.elements.media=d.createElement("video");break;case"audio":De.elements.media=d.createElement("audio");break;case"youtube":case"vimeo":case"soundcloud":De.elements.media=d.createElement("div"),De.embedId=e.sources[0].src}d.prependChild(De.elements.container,De.elements.media),c.boolean(e.autoplay)&&(s.autoplay=e.autoplay),d.inArray(u.html5,De.type)&&(s.crossorigin&&De.elements.media.setAttribute("crossorigin",""),s.autoplay&&De.elements.media.setAttribute("autoplay",""),"poster"in e&&De.elements.media.setAttribute("poster",e.poster),s.loop.active&&De.elements.media.setAttribute("loop","")),d.toggleClass(De.elements.container,s.classes.fullscreen.active,De.fullscreen.active),d.toggleClass(De.elements.container,s.classes.captions.active,De.captions.enabled),H(),d.inArray(u.html5,De.type)&&h("source",e.sources),X(),d.inArray(u.html5,De.type)&&("tracks"in e&&h("track",e.tracks),De.elements.media.load()),(d.inArray(u.html5,De.type)||d.inArray(u.embed,De.type)&&!De.supported.full)&&(Me(),Ve()),s.title=e.title,U()}return c.object(e)&&"sources"in e&&e.sources.length?(d.toggleClass(De.elements.container,s.classes.ready,!1),te(),Te(),Ee(),Le(),void je(t,!1)):void Ye("Invalid source format")}function Ie(e){"video"===De.type&&De.elements.media.setAttribute("poster",e)}function Ne(){function n(){var e=ne(),t=De.elements.buttons[e?"play":"pause"],n=De.elements.buttons[e?"pause":"play"];if(n){var a=d.hasClass(t,s.classes.tabFocus);setTimeout(function(){n.focus(),a&&(d.toggleClass(t,s.classes.tabFocus,!1),d.toggleClass(n,s.classes.tabFocus,!0))},100)}}function a(e){return e.keyCode?e.keyCode:e.which}function l(e){d.toggleClass(y("."+s.classes.tabFocus),s.classes.tabFocus,!1),De.elements.container.contains(e)&&d.toggleClass(e,s.classes.tabFocus,!0)}function i(e){function t(){var e=De.elements.media.duration;c.number(e)&&oe(e/10*(l-48))}var l=a(e),s="keydown"===e.type,r=s&&l===u;if(c.number(l))if(s){var i=[48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79],o=[38,40];if(d.inArray(o,l)){var p=d.getFocusElement();if(c.htmlElement(p)&&"radio"===d.getFocusElement().type)return}switch(d.inArray(i,l)&&(e.preventDefault(),e.stopPropagation()),l){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||t();break;case 32:case 75:r||n();break;case 38:be();break;case 40:ve();break;case 77:r||ye();break;case 39:ie();break;case 37:re();break;case 70:me();break;case 67:r||D();break;case 73:ae("start");break;case 76:ae();break;case 79:ae("end")}!m.fullscreen&&De.fullscreen.active&&27===l&&me(),u=l}else u=null}var o=De.browser.isIE?"change":"input";if(s.keyboardShortcuts.focused){var u=null;s.keyboardShortcuts.global&&d.on(e,"keydown keyup",function(e){var t=a(e),n=d.getFocusElement(),l=[48,49,50,51,52,53,54,56,57,75,77,70,67,73,76,79],o=r().length;1!==o||!d.inArray(l,t)||c.htmlElement(n)&&d.matches(n,s.selectors.editable)||i(e)}),d.on(De.elements.container,"keydown keyup",i)}d.on(e,"keyup",function(e){var t=a(e),n=d.getFocusElement();9===t&&l(n)}),d.on(t.body,"click",function(){d.toggleClass(g("."+s.classes.tabFocus),s.classes.tabFocus,!1)});for(var f in De.elements.buttons){var b=De.elements.buttons[f];d.on(b,"blur",function(){d.toggleClass(b,"tab-focus",!1)})}var v=function(e,t,n){c.function(t)&&t.call(this,e),c.function(n)&&n.call(this,e)};d.proxy(De.elements.buttons.play,"click",s.listeners.play,n),d.proxy(De.elements.buttons.playLarge,"click",s.listeners.play,n),d.proxy(De.elements.buttons.pause,"click",s.listeners.pause,n),d.proxy(De.elements.buttons.restart,"click",s.listeners.restart,oe),d.proxy(De.elements.buttons.rewind,"click",s.listeners.rewind,re),d.proxy(De.elements.buttons.forward,"click",s.listeners.forward,ie),d.proxy(De.elements.buttons.mute,"click",s.listeners.mute,ye),d.proxy(De.elements.buttons.captions,"click",s.listeners.captions,D),d.proxy(De.elements.buttons.fullscreen,"click",s.listeners.fullscreen,me),d.proxy(De.elements.buttons.pip,"click",s.listeners.pip,function(e){m.pip&&De.elements.media.webkitSetPresentationMode("picture-in-picture"===De.elements.media.webkitPresentationMode?"inline":"picture-in-picture")}),d.proxy(De.elements.buttons.airplay,"click",s.listeners.airplay,function(e){m.airplay&&De.elements.media.webkitShowPlaybackTargetPicker()}),d.on(De.elements.settings.menu,"click",fe),d.on(t.body,"click",function(e){var t=De.elements.settings.menu,n=t.querySelector("form");"true"===n.getAttribute("aria-hidden")||t.contains(e.target)||n.setAttribute("aria-hidden",!0)}),d.on(De.elements.settings.menu,"click",function(e){d.matches(e.target,s.selectors.inputs.language)?v.call(this,e,s.listeners.language,M):d.matches(e.target,s.selectors.inputs.quality)?v.call(this,e,s.listeners.quality,function(){Ye("Set quality")}):d.matches(e.target,s.selectors.inputs.speed)?v.call(this,e,s.listeners.speed,le):d.matches(e.target,s.selectors.buttons.loop)&&v.call(this,e,s.listeners.loop,function(){var t=e.target.getAttribute("data-loop__value")||e.target.getAttribute("data-loop__type");d.inArray(["start","end","all","none"],t)&&ae(t)})}),d.proxy(De.elements.inputs.seek,o,s.listeners.seek,oe),d.proxy(De.elements.inputs.volume,o,s.listeners.volume,ge),d.on(De.elements.progress,"mouseenter mouseleave mousemove",xe),s.hideControls&&(d.on(De.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen",Fe),d.on(De.elements.controls,"mouseenter mouseleave",function(e){De.elements.controls.hover="mouseenter"===e.type}),d.on(De.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(e){De.elements.controls.pressed=d.inArray(["mousedown","touchstart"],e.type)}),d.on(De.elements.controls,"focus blur",Fe,!0)),d.proxy(De.elements.inputs.volume,"wheel",s.listeners.volume,function(e){var t=e.webkitDirectionInvertedFromDevice,n=.2,a=0;(e.deltaY<0||e.deltaX>0)&&(t?(ve(n),a=-1):(be(n),a=1)),(e.deltaY>0||e.deltaX<0)&&(t?(be(n),a=1):(ve(n),a=-1)),(1===a&&De.elements.media.volume<1||a===-1&&De.elements.media.volume>0)&&e.preventDefault()}),m.fullscreen&&d.on(t,p.eventType,me)}function qe(){if(d.on(De.elements.media,"timeupdate seeking",Se),d.on(De.elements.media,"durationchange loadedmetadata",Ae),d.on(De.elements.media,"ended",function(){"video"===De.type&&s.showPosterOnEnd&&("video"===De.type&&V(),oe(),De.elements.media.load())}),d.on(De.elements.media,"progress playing",Ce),d.on(De.elements.media,"volumechange",he),d.on(De.elements.media,"play pause ended",ce),d.on(De.elements.media,"waiting canplay seeked",ke),s.clickToPlay&&"audio"!==De.type){var e=g("."+s.classes.videoWrapper);if(!e)return;e.style.cursor="pointer",d.on(e,"click",function(){s.hideControls&&De.browser.isTouch&&!De.elements.media.paused||(De.elements.media.paused?ee():De.elements.media.ended?(oe(),ee()):te())})}s.disableContextMenu&&d.on(De.elements.media,"contextmenu",function(e){e.preventDefault()}),d.on(De.elements.media,s.events.concat(["keyup","keydown"]).join(" "),function(e){f(De.elements.container,e.type,!0)})}function Le(){if(d.inArray(u.html5,De.type)){for(var e=De.elements.media.querySelectorAll("source"),t=0;t<e.length;t++)d.removeElement(e[t]);De.elements.media.setAttribute("src","https://cdn.selz.com/plyr/blank.mp4"),De.elements.media.load(),He("Cancelled network requests")}}function je(n,a){function l(){c.boolean(a)||(a=!0),c.function(n)&&n.call(Be),a&&(De.init=!1,De.elements.container.parentNode.replaceChild(Be,De.elements.container),t.body.style.overflow="",f(Be,"destroyed",!0))}if(!De.init)return null;switch(De.type){case"youtube":e.clearInterval(We.buffering),e.clearInterval(We.playing),De.embed.destroy(),l();break;case"vimeo":De.embed.unload().then(l),e.setTimeout(l,200);break;case"video":case"audio":Y(!0),l()}}function Oe(){if(De.init)return null;if(De.browser=d.getBrowser(),c.htmlElement(De.elements.media)){K();var e=n.tagName.toLowerCase();"div"===e?(De.type=n.getAttribute("data-type"),De.embedId=n.getAttribute("data-video-id"),n.removeAttribute("data-type"),n.removeAttribute("data-video-id")):(De.type=e,s.crossorigin=null!==n.getAttribute("crossorigin"),s.autoplay=s.autoplay||null!==n.getAttribute("autoplay"),s.loop=s.loop||null!==n.getAttribute("loop")),De.supported=l(De.type),De.supported.basic&&(De.elements.container=d.wrap(n,d.createElement("div")),De.elements.container.setAttribute("tabindex",0),H(),He(""+De.browser.name+" "+De.browser.version),X(),(d.inArray(u.html5,De.type)||d.inArray(u.embed,De.type)&&!De.supported.full)&&(Me(),Ve(),U()),De.init=!0)}}function Me(){return De.supported.full?(c.htmlElement(De.elements.controls)||(W(),Ne()),void(c.htmlElement(De.elements.controls)&&(qe(),Y(),q(),L(),ge(),he(),le(),ae(),Se(),ce()))):(Ye("Basic support only",De.type),b("controls"),b("buttons.play"),void Y(!0))}function Ve(){e.setTimeout(function(){f(De.elements.media,"ready")},0),d.toggleClass(De.elements.media,o.classes.setup,!0),d.toggleClass(De.elements.container,s.classes.ready,!0),De.elements.media.plyr=Re,s.autoplay&&ee()}var Re,De=this,We={};De.fullscreen={active:!1},De.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},media:n,captions:null},De.captions={enabled:!1,captions:[],tracks:[],currentTrack:null};var Be=n.cloneNode(!0),He=function(){},Ye=function(){};return s.debug&&"console"in e&&(He=e.console.log,Ye=e.console.warn),He("Config",s),He("Support",m),Re={getOriginal:function(){return Be},getContainer:function(){return De.elements.container},getEmbed:function(){return De.embed},getMedia:function(){return De.elements.media},getType:function(){return De.type},getDuration:ue,getCurrentTime:function(){return De.elements.media.currentTime},getVolume:function(){return De.elements.media.volume},isMuted:function(){return De.elements.media.muted},isReady:function(){return d.hasClass(De.elements.container,s.classes.ready)},isLoading:function(){return d.hasClass(De.elements.container,s.classes.loading)},isPaused:function(){return De.elements.media.paused},isLooping:function(){return s.loop.active},on:function(e,t){return d.on(De.elements.container,e,t),this},play:ee,pause:te,loop:ae,stop:function(){te(),oe()},restart:oe,rewind:re,forward:ie,seek:oe,source:_e,poster:Ie,setVolume:ge,setSpeed:le,togglePlay:ne,toggleMute:ye,toggleCaptions:D,toggleFullscreen:me,toggleControls:Fe,setLanguage:M,isFullscreen:function(){return De.fullscreen.active||!1},support:function(e){return m.mime(De,e)},destroy:je},Oe(),De.init?Re:null}function a(e,n){var a=new XMLHttpRequest;if(!c.string(n)||!c.htmlElement(t.querySelector("#"+n))){var l=d.createElement("div");l.setAttribute("hidden",""),c.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 l(e){var t,n,a=d.getBrowser(),l=a.isIE&&a.version<=9,s=a.isIos,r=/iPhone|iPod/i.test(navigator.userAgent),i=!!d.createElement("audio").canPlayType,o=!!d.createElement("video").canPlayType;switch(e){case"video":t=o,n=t&&!l&&!r;break;case"audio":t=i,n=t&&!l;break;case"vimeo":case"youtube":case"soundcloud":t=!0,n=!l&&!s;break;default:t=i&&o,n=t&&!l}return{basic:t,full:n}}function s(e,a){function s(e,t){d.hasClass(t,o.classes.hook)||r.push({target:e,media:t})}var r=[],i=[],u=[o.selectors.html5,o.selectors.embed].join(",");if(c.string(e)?e=t.querySelectorAll(e):c.htmlElement(e)?e=[e]:c.nodeList(e)||c.array(e)||c.string(e)||(c.undefined(a)&&c.object(e)&&(a=e),e=t.querySelectorAll(u)),c.nodeList(e)&&(e=Array.prototype.slice.call(e)),!l().basic||!e.length)return!1;for(var p=0;p<e.length;p++){var m=e[p],f=m.querySelectorAll(u);if(f.length)for(var y=0;y<f.length;y++)s(m,f[y]);else d.matches(m,u)&&s(m,m)}return r.forEach(function(e){var t=e.target,l=e.media,s=!1;l===t&&(s=!0);var r={};try{r=JSON.parse(t.getAttribute("data-plyr"))}catch(e){}var u=d.extend({},o,a,r);if(!u.enabled)return null;var p=new n(l,u);if(c.object(p)){if(u.debug){var m=u.events.concat(["setup","statechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled"]);d.on(p.getContainer(),m.join(" "),function(e){console.log([u.logPrefix,"event:",e.type].join(" "),e.detail.plyr)})}d.event(p.getContainer(),"setup",!0,{plyr:p}),i.push(p)}}),i}function r(e){if(c.string(e)?e=t.querySelector(e):c.undefined(e)&&(e=t.body),c.htmlElement(e)){var n=e.querySelectorAll("."+o.classes.setup),a=[];return Array.prototype.slice.call(n).forEach(function(e){c.object(e.plyr)&&a.push(e.plyr)}),a}return[]}var i={x:0,y:0},o={enabled:!0,title:"",debug:!1,autoplay:!1,seekTime:10,volume:10,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",selected:"auto"},loop:{active:!1,start:0,end:null,indicator:{start:0,end:0}},speed:{selected:1,options:[.25,.5,.75,1,1.25,1.5,2]},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:{active:!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",none:"None"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},soundcloud:{api:"https://w.soundcloud.com/player/api.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ready","ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied"],logPrefix:""},u={embed:["youtube","vimeo","soundcloud"],html5:["video","audio"]},c={object:function(e){return null!==e&&"object"==typeof e&&e.constructor===Object},array:function(e){return null!==e&&Array.isArray(e)},number:function(e){return null!==e&&("number"==typeof e&&!isNaN(e-0)||"object"==typeof e&&e.constructor===Number)},string:function(e){return null!==e&&("string"==typeof e||"object"==typeof e&&e.constructor===String)},boolean:function(e){return null!==e&&"boolean"==typeof e},nodeList:function(e){return null!==e&&e instanceof NodeList},htmlElement:function(e){return null!==e&&e instanceof HTMLElement},function:function(e){return null!==e&&"function"==typeof e},event:function(e){return null!==e&&e instanceof Event},cue:function(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}},d={getBrowser:function(){var e,n,a,l=navigator.userAgent,s=navigator.appName,r=""+parseFloat(navigator.appVersion),i=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",r="11"):(n=l.indexOf("MSIE"))!==-1?(o=!0,s="IE",r=l.substring(n+5)):(n=l.indexOf("Chrome"))!==-1?(c=!0,s="Chrome",r=l.substring(n+7)):(n=l.indexOf("Safari"))!==-1?(d=!0,s="Safari",r=l.substring(n+7),(n=l.indexOf("Version"))!==-1&&(r=l.substring(n+8))):(n=l.indexOf("Firefox"))!==-1?(u=!0,s="Firefox",r=l.substring(n+8)):(e=l.lastIndexOf(" ")+1)<(n=l.lastIndexOf("/"))&&(s=l.substring(e,n),r=l.substring(n+1),s.toLowerCase()===s.toUpperCase()&&(s=navigator.appName)),(a=r.indexOf(";"))!==-1&&(r=r.substring(0,a)),(a=r.indexOf(" "))!==-1&&(r=r.substring(0,a)),i=parseInt(""+r,10),isNaN(i)&&(r=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),{name:s,version:i,isIE:o,isFirefox:u,isChrome:c,isSafari:d,isIos:/(iPad|iPhone|iPod)/g.test(navigator.platform),isTouch:"ontouchstart"in t.documentElement}},injectScript:function(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)}},inFrame:function(){try{return e.self!==e.top}catch(e){return!0}},inArray:function(e,t){return c.array(e)&&e.indexOf(t)!==-1},replaceAll:function(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)},wrap:function(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var a=n>0?t.cloneNode(!0):t,l=e[n],s=l.parentNode,r=l.nextSibling;return a.appendChild(l),r?s.insertBefore(a,r):s.appendChild(a),a}},removeElement:function(e){c.htmlElement(e)&&e.parentNode.removeChild(e)},prependChild:function(e,t){e.insertBefore(t,e.firstChild)},setAttributes:function(e,t){for(var n in t)e.setAttribute(n,t[n])},getAttributesFromSelector:function(e,t){if(!c.string(e)||c.empty(e))return{};var n={};return e.split(",").forEach(function(e){e=e.trim();var a=e.charAt(0);switch(a){case".":var l=e.replace(".","");c.object(t)&&c.string(t.class)&&(t.class+=" "+l),n.class=l;break;case"#":n.id=e.replace("#","");break;case"[":e=e.replace(/[\[\]]/g,"");var s=e.split("="),r=s[0],i=s.length>1?s[1].replace(/[\"\']/g,""):"";n[r]=i}}),n},createElement:function(e,n,a){var l=t.createElement(e);return c.object(n)&&d.setAttributes(l,n),c.string(a)&&(l.textContent=a),l},insertElement:function(e,t,n,a){var l=d.createElement(e,n,a);d.prependChild(t,l)},emptyElement:function(e){for(var t=e.childNodes.length;t--;)e.removeChild(e.lastChild)},toggleClass:function(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var a=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=a+(n?" "+t:"")}},hasClass:function(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className))},matches:function(e,n){var a=Element.prototype,l=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector||function(e){return[].indexOf.call(t.querySelectorAll(e),this)!==-1};return l.call(e,n)},getFocusElement:function(){var e=t.activeElement;return e=e&&e!==t.body?t.querySelector(":focus"):null},proxy:function(e,t,n,a,l){d.on(e,t,function(t){n&&n.apply(e,[t]),a.apply(e,[t])},l)},toggleListener:function(e,t,n,a,l){var s=t.split(" ");if(c.boolean(l)||(l=!1),e instanceof NodeList)for(var r=0;r<e.length;r++)e[r]instanceof Node&&d.toggleListener(e[r],arguments[1],arguments[2],arguments[3]);else for(var i=0;i<s.length;i++)e[a?"addEventListener":"removeEventListener"](s[i],n,l)},on:function(e,t,n,a){c.undefined(e)||d.toggleListener(e,t,n,!0,a)},off:function(e,t,n,a){c.undefined(e)||d.toggleListener(e,t,n,!1,a)},event:function(e,t,n,a){if(e&&t){c.boolean(n)||(n=!1);var l=new CustomEvent(t,{bubbles:n,detail:a});e.dispatchEvent(l)}},toggleState:function(e,t){if(e)return t=c.boolean(t)?t:!e.getAttribute("aria-pressed"),e.setAttribute("aria-pressed",t),t},getPercentage:function(e,t){return 0===e||0===t||isNaN(e)||isNaN(t)?0:(e/t*100).toFixed(2)},extend:function(){var e=arguments;if(e.length){if(1===e.length)return e[0];var t=Array.prototype.shift.call(e);c.object(t)||(t={});for(var n=e.length,a=0;a<n;a++){var l=e[a];c.object(l)||(l={});for(var s in l)l[s]&&l[s].constructor&&l[s].constructor===Object?(t[s]=t[s]||{},d.extend(t[s],l[s])):t[s]=l[s]}return t}},parseYouTubeId:function(e){var t=/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;return e.match(t)?RegExp.$2:e}},p=function(){var e=function(){var e=!1;return c.function(t.cancelFullScreen)?e="":["webkit","o","moz","ms","khtml"].some(function(n){return c.function(t[n+"CancelFullScreen"])?(e=n,!0):c.function(t.msExitFullscreen)&&t.msFullscreenEnabled?(e="ms",!0):void 0}),e}();return{prefix:e,eventType:"ms"===e?"MSFullscreenChange":e+"fullscreenchange",isFullScreen:function(n){if(!m.fullscreen)return!1;switch(c.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!!m.fullscreen&&(c.htmlElement(n)||(n=t.body),""===e?n.requestFullScreen():n[e+("ms"===e?"RequestFullscreen":"RequestFullScreen")]())},cancelFullScreen:function(){return!!m.fullscreen&&(""===e?t.cancelFullScreen():t[e+("ms"===e?"ExitFullscreen":"CancelFullScreen")]())},element:function(){return m.fullscreen?""===e?t.fullscreenElement:t[e+"FullscreenElement"]:null}}}(),m={fullscreen:p.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 c.function(d.createElement("video").webkitSetPresentationMode)}(),airplay:function(){return c.function(e.WebKitPlaybackTargetAvailabilityEvent)}(),mime:function(e,t){var n=e.media;try{if(!c.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:s,supported:l,loadSprite:a,get:r}}),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 diff --git a/src/js/plyr.js b/src/js/plyr.js index fd823bbc..6e2ec27f 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -309,7 +309,7 @@ return input !== null && typeof(input) === 'object' && input.constructor === Object; }, array: function(input) { - return input !== null && typeof(input) === 'object' && input.constructor === Array; + return input !== null && Array.isArray(input); }, number: function(input) { return input !== null && (typeof(input) === 'number' && !isNaN(input - 0) || (typeof input === 'object' && input.constructor === Number)); @@ -346,470 +346,473 @@ } }; - // Credits: http://paypal.github.io/accessible-html5-video-player/ - // Unfortunately, due to mixed support, UA sniffing is required - function getBrowser() { - var ua = navigator.userAgent; - var name = navigator.appName; - var fullVersion = '' + parseFloat(navigator.appVersion); - var majorVersion = parseInt(navigator.appVersion, 10); - var nameOffset; - var verOffset; - var ix; - var isIE = false; - var isFirefox = false; - var isChrome = false; - var isSafari = false; - - if ((navigator.appVersion.indexOf('Windows NT') !== -1) && (navigator.appVersion.indexOf('rv:11') !== -1)) { - // MSIE 11 - isIE = true; - name = 'IE'; - fullVersion = '11'; - } else if ((verOffset = ua.indexOf('MSIE')) !== -1) { - // MSIE - isIE = true; - name = 'IE'; - fullVersion = ua.substring(verOffset + 5); - } else if ((verOffset = ua.indexOf('Chrome')) !== -1) { - // Chrome - isChrome = true; - name = 'Chrome'; - fullVersion = ua.substring(verOffset + 7); - } else if ((verOffset = ua.indexOf('Safari')) !== -1) { - // Safari - isSafari = true; - name = 'Safari'; - fullVersion = ua.substring(verOffset + 7); - - if ((verOffset = ua.indexOf('Version')) !== -1) { + var utils = { + // Credits: http://paypal.github.io/accessible-html5-video-player/ + // Unfortunately, due to mixed support, UA sniffing is required + getBrowser: function() { + var ua = navigator.userAgent; + var name = navigator.appName; + var fullVersion = '' + parseFloat(navigator.appVersion); + var majorVersion = parseInt(navigator.appVersion, 10); + var nameOffset; + var verOffset; + var ix; + var isIE = false; + var isFirefox = false; + var isChrome = false; + var isSafari = false; + + if ((navigator.appVersion.indexOf('Windows NT') !== -1) && (navigator.appVersion.indexOf('rv:11') !== -1)) { + // MSIE 11 + isIE = true; + name = 'IE'; + fullVersion = '11'; + } else if ((verOffset = ua.indexOf('MSIE')) !== -1) { + // MSIE + isIE = true; + name = 'IE'; + fullVersion = ua.substring(verOffset + 5); + } else if ((verOffset = ua.indexOf('Chrome')) !== -1) { + // Chrome + isChrome = true; + name = 'Chrome'; + fullVersion = ua.substring(verOffset + 7); + } else if ((verOffset = ua.indexOf('Safari')) !== -1) { + // Safari + isSafari = true; + name = 'Safari'; + fullVersion = ua.substring(verOffset + 7); + + if ((verOffset = ua.indexOf('Version')) !== -1) { + fullVersion = ua.substring(verOffset + 8); + } + } else if ((verOffset = ua.indexOf('Firefox')) !== -1) { + // Firefox + isFirefox = true; + name = 'Firefox'; fullVersion = ua.substring(verOffset + 8); + } else if ((nameOffset = ua.lastIndexOf(' ') + 1) < (verOffset = ua.lastIndexOf('/'))) { + // In most other browsers, 'name/version' is at the end of userAgent + name = ua.substring(nameOffset, verOffset); + fullVersion = ua.substring(verOffset + 1); + + if (name.toLowerCase() === name.toUpperCase()) { + name = navigator.appName; + } } - } else if ((verOffset = ua.indexOf('Firefox')) !== -1) { - // Firefox - isFirefox = true; - name = 'Firefox'; - fullVersion = ua.substring(verOffset + 8); - } else if ((nameOffset = ua.lastIndexOf(' ') + 1) < (verOffset = ua.lastIndexOf('/'))) { - // In most other browsers, 'name/version' is at the end of userAgent - name = ua.substring(nameOffset, verOffset); - fullVersion = ua.substring(verOffset + 1); - if (name.toLowerCase() === name.toUpperCase()) { - name = navigator.appName; + // Trim the fullVersion string at semicolon/space if present + if ((ix = fullVersion.indexOf(';')) !== -1) { + fullVersion = fullVersion.substring(0, ix); + } + if ((ix = fullVersion.indexOf(' ')) !== -1) { + fullVersion = fullVersion.substring(0, ix); } - } - // Trim the fullVersion string at semicolon/space if present - if ((ix = fullVersion.indexOf(';')) !== -1) { - fullVersion = fullVersion.substring(0, ix); - } - if ((ix = fullVersion.indexOf(' ')) !== -1) { - fullVersion = fullVersion.substring(0, ix); - } + // Get major version + majorVersion = parseInt('' + fullVersion, 10); + if (isNaN(majorVersion)) { + fullVersion = '' + parseFloat(navigator.appVersion); + majorVersion = parseInt(navigator.appVersion, 10); + } - // Get major version - majorVersion = parseInt('' + fullVersion, 10); - if (isNaN(majorVersion)) { - fullVersion = '' + parseFloat(navigator.appVersion); - majorVersion = parseInt(navigator.appVersion, 10); - } + // Return data + return { + name: name, + version: majorVersion, + isIE: isIE, + isFirefox: isFirefox, + isChrome: isChrome, + isSafari: isSafari, + isIos: /(iPad|iPhone|iPod)/g.test(navigator.platform), + isTouch: 'ontouchstart' in document.documentElement + }; + }, - // Return data - return { - name: name, - version: majorVersion, - isIE: isIE, - isFirefox: isFirefox, - isChrome: isChrome, - isSafari: isSafari, - isIos: /(iPad|iPhone|iPod)/g.test(navigator.platform), - isTouch: 'ontouchstart' in document.documentElement - }; - } + // Inject a script + injectScript: function(url) { + // Check script is not already referenced + if (document.querySelectorAll('script[src="' + url + '"]').length) { + return; + } - // Inject a script - function injectScript(url) { - // Check script is not already referenced - if (document.querySelectorAll('script[src="' + url + '"]').length) { - return; - } + var tag = document.createElement('script'); + tag.src = url; - var tag = document.createElement('script'); - tag.src = url; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + }, - var firstScriptTag = document.getElementsByTagName('script')[0]; - firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); - } + // Determine if we're in an iframe + inFrame: function() { + try { + return window.self !== window.top; + } catch (e) { + return true; + } + }, - // Determine if we're in an iframe - function inFrame() { - try { - return window.self !== window.top; - } catch (e) { - return true; - } - } + // Element exists in an array + inArray: function(haystack, needle) { + return is.array(haystack) && haystack.indexOf(needle) !== -1; + }, - // Element exists in an array - function inArray(haystack, needle) { - return Array.prototype.indexOf && (haystack.indexOf(needle) !== -1); - } + // Replace all + replaceAll: function(string, find, replace) { + return string.replace(new RegExp(find.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g, '\\$1'), 'g'), replace); + }, - // Replace all - function replaceAll(string, find, replace) { - return string.replace(new RegExp(find.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g, '\\$1'), 'g'), replace); - } + // Wrap an element + wrap: function(elements, wrapper) { + // Convert `elements` to an array, if necessary. + if (!elements.length) { + elements = [elements]; + } - // Wrap an element - function wrap(elements, wrapper) { - // Convert `elements` to an array, if necessary. - if (!elements.length) { - elements = [elements]; - } + // Loops backwards to prevent having to clone the wrapper on the + // first element (see `child` below). + for (var i = elements.length - 1; i >= 0; i--) { + var child = (i > 0) ? wrapper.cloneNode(true) : wrapper; + var element = elements[i]; - // Loops backwards to prevent having to clone the wrapper on the - // first element (see `child` below). - for (var i = elements.length - 1; i >= 0; i--) { - var child = (i > 0) ? wrapper.cloneNode(true) : wrapper; - var element = elements[i]; - - // Cache the current parent and sibling. - var parent = element.parentNode; - var sibling = element.nextSibling; - - // Wrap the element (is automatically removed from its current - // parent). - child.appendChild(element); - - // If the element had a sibling, insert the wrapper before - // the sibling to maintain the HTML structure; otherwise, just - // append it to the parent. - if (sibling) { - parent.insertBefore(child, sibling); - } else { - parent.appendChild(child); + // Cache the current parent and sibling. + var parent = element.parentNode; + var sibling = element.nextSibling; + + // Wrap the element (is automatically removed from its current + // parent). + child.appendChild(element); + + // If the element had a sibling, insert the wrapper before + // the sibling to maintain the HTML structure; otherwise, just + // append it to the parent. + if (sibling) { + parent.insertBefore(child, sibling); + } else { + parent.appendChild(child); + } + + return child; } + }, - return child; - } - } + // Remove an element + removeElement: function(element) { + if (!is.htmlElement(element)) { + return; + } - // Remove an element - function remove(element) { - if (!element) { - return; - } - element.parentNode.removeChild(element); - } + element.parentNode.removeChild(element); + }, - // Prepend child - function prependChild(parent, element) { - parent.insertBefore(element, parent.firstChild); - } + // Prepend child + prependChild: function(parent, element) { + parent.insertBefore(element, parent.firstChild); + }, - // Set attributes - function setAttributes(element, attributes) { - for (var key in attributes) { - element.setAttribute(key, attributes[key]); - } - } + // Set attributes + setAttributes: function(element, attributes) { + for (var key in attributes) { + element.setAttribute(key, attributes[key]); + } + }, - // Get an attribute object from a string selector - function getAttributesFromSelector(selector, existingAttributes) { - // For example: - // '.test' to { class: 'test' } - // '#test' to { id: 'test' } - // '[data-test="test"]' to { 'data-test': 'test' } + // Get an attribute object from a string selector + getAttributesFromSelector: function(selector, existingAttributes) { + // For example: + // '.test' to { class: 'test' } + // '#test' to { id: 'test' } + // '[data-test="test"]' to { 'data-test': 'test' } - if (!is.string(selector) || is.empty(selector)) { - return {}; - } + if (!is.string(selector) || is.empty(selector)) { + return {}; + } - var attributes = {}; + var attributes = {}; - selector.split(',').forEach(function(selector) { - // Remove whitespace - selector = selector.trim(); + selector.split(',').forEach(function(selector) { + // Remove whitespace + selector = selector.trim(); - // Get the first character - var start = selector.charAt(0); + // Get the first character + var start = selector.charAt(0); - switch (start) { - case '.': - // Classname selector - var className = selector.replace('.', ''); + switch (start) { + case '.': + // Classname selector + var className = selector.replace('.', ''); - // Add to existing classname - if (is.object(existingAttributes) && is.string(existingAttributes.class)) { - existingAttributes.class += ' ' + className; - } + // Add to existing classname + if (is.object(existingAttributes) && is.string(existingAttributes.class)) { + existingAttributes.class += ' ' + className; + } - attributes.class = className; - break; + attributes.class = className; + break; - case '#': - // ID selector - attributes.id = selector.replace('#', ''); - break; + case '#': + // ID selector + attributes.id = selector.replace('#', ''); + break; - case '[': - // Strip the [] - selector = selector.replace(/[\[\]]/g, ''); + case '[': + // Strip the [] + selector = selector.replace(/[\[\]]/g, ''); - // Get the parts if - var parts = selector.split('='); - var key = parts[0]; + // Get the parts if + var parts = selector.split('='); + var key = parts[0]; - // Get the value if provided - var value = parts.length > 1 ? parts[1].replace(/[\"\']/g, '') : ''; + // Get the value if provided + var value = parts.length > 1 ? parts[1].replace(/[\"\']/g, '') : ''; - // Attribute selector - attributes[key] = value; + // Attribute selector + attributes[key] = value; - break; - } - }); + break; + } + }); - return attributes; - } + return attributes; + }, - // Create a DocumentFragment - function createElement(type, attributes, text) { - // Create a new <element> - var element = document.createElement(type); + // Create a DocumentFragment + createElement: function(type, attributes, text) { + // Create a new <element> + var element = document.createElement(type); - // Set all passed attributes - if (is.object(attributes)) { - setAttributes(element, attributes); - } + // Set all passed attributes + if (is.object(attributes)) { + utils.setAttributes(element, attributes); + } - // Add text node - if (is.string(text)) { - element.textContent = text; - } + // Add text node + if (is.string(text)) { + element.textContent = text; + } - // Return built element - return element; - } + // Return built element + return element; + }, - // Insert a DocumentFragment - function insertElement(type, parent, attributes, text) { - // Create a new <element> - var element = createElement(type, attributes, text); + // Insert a DocumentFragment + insertElement: function(type, parent, attributes, text) { + // Create a new <element> + var element = utils.createElement(type, attributes, text); - // Inject the new element - prependChild(parent, element); - } + // Inject the new element + utils.prependChild(parent, element); + }, - // Remove all child elements - function emptyElement(element) { - var length = element.childNodes.length; - while (length--) { - element.removeChild(element.lastChild); - } - } + // Remove all child elements + emptyElement: function(element) { + var length = element.childNodes.length; + while (length--) { + element.removeChild(element.lastChild); + } + }, - // Toggle class on an element - function toggleClass(element, className, state) { - if (element) { - if (element.classList) { - element.classList[state ? 'add' : 'remove'](className); - } else { - var name = (' ' + element.className + ' ').replace(/\s+/g, ' ').replace(' ' + className + ' ', ''); - element.className = name + (state ? ' ' + className : ''); + // Toggle class on an element + toggleClass: function(element, className, state) { + if (element) { + if (element.classList) { + element.classList[state ? 'add' : 'remove'](className); + } else { + var name = (' ' + element.className + ' ').replace(/\s+/g, ' ').replace(' ' + className + ' ', ''); + element.className = name + (state ? ' ' + className : ''); + } } - } - } + }, - // Has class name - function hasClass(element, className) { - if (element) { - if (element.classList) { - return element.classList.contains(className); - } else { - return new RegExp('(\\s|^)' + className + '(\\s|$)').test(element.className); + // Has class name + hasClass: function(element, className) { + if (element) { + if (element.classList) { + return element.classList.contains(className); + } else { + return new RegExp('(\\s|^)' + className + '(\\s|$)').test(element.className); + } } - } - return false; - } + return false; + }, - // Element matches selector - function matches(element, selector) { - var prototype = Element.prototype; + // Element matches selector + matches: function(element, selector) { + var prototype = Element.prototype; - var matches = prototype.matches || - prototype.webkitMatchesSelector || - prototype.mozMatchesSelector || - prototype.msMatchesSelector || - function(s) { - return [].indexOf.call(document.querySelectorAll(s), this) !== -1; - }; + var matches = prototype.matches || + prototype.webkitMatchesSelector || + prototype.mozMatchesSelector || + prototype.msMatchesSelector || + function(s) { + return [].indexOf.call(document.querySelectorAll(s), this) !== -1; + }; - return matches.call(element, selector); - } + return matches.call(element, selector); + }, - // Get the focused element - function getFocusElement() { - var focused = document.activeElement; + // Get the focused element + getFocusElement: function() { + var focused = document.activeElement; - if (!focused || focused === document.body) { - focused = null; - } else { - focused = document.querySelector(':focus'); - } + if (!focused || focused === document.body) { + focused = null; + } else { + focused = document.querySelector(':focus'); + } - return focused; - } + return focused; + }, - // Bind along with custom handler - function proxy(element, eventName, customListener, defaultListener, useCapture) { - on(element, eventName, function(event) { - if (customListener) { - customListener.apply(element, [event]); - } - defaultListener.apply(element, [event]); - }, useCapture); - } + // Bind along with custom handler + proxy: function(element, eventName, customListener, defaultListener, useCapture) { + utils.on(element, eventName, function(event) { + if (customListener) { + customListener.apply(element, [event]); + } + defaultListener.apply(element, [event]); + }, useCapture); + }, - // Toggle event listener - function toggleListener(elements, events, callback, toggle, useCapture) { - var eventList = events.split(' '); + // Toggle event listener + toggleListener: function(elements, events, callback, toggle, useCapture) { + var eventList = events.split(' '); - // Whether the listener is a capturing listener or not - // Default to false - if (!is.boolean(useCapture)) { - useCapture = false; - } + // Whether the listener is a capturing listener or not + // Default to false + if (!is.boolean(useCapture)) { + useCapture = false; + } - // If a nodelist is passed, call itself on each node - if (elements instanceof NodeList) { - for (var x = 0; x < elements.length; x++) { - if (elements[x] instanceof Node) { - toggleListener(elements[x], arguments[1], arguments[2], arguments[3]); + // If a nodelist is passed, call itself on each node + if (elements instanceof NodeList) { + for (var x = 0; x < elements.length; x++) { + if (elements[x] instanceof Node) { + utils.toggleListener(elements[x], arguments[1], arguments[2], arguments[3]); + } } + return; } - return; - } - // If a single node is passed, bind the event listener - for (var i = 0; i < eventList.length; i++) { - elements[toggle ? 'addEventListener' : 'removeEventListener'](eventList[i], callback, useCapture); - } - } + // If a single node is passed, bind the event listener + for (var i = 0; i < eventList.length; i++) { + elements[toggle ? 'addEventListener' : 'removeEventListener'](eventList[i], callback, useCapture); + } + }, - // Bind event handler - function on(element, events, callback, useCapture) { - if (!is.undefined(element)) { - toggleListener(element, events, callback, true, useCapture); - } - } + // Bind event handler + on: function(element, events, callback, useCapture) { + if (!is.undefined(element)) { + utils.toggleListener(element, events, callback, true, useCapture); + } + }, - // Unbind event handler - function off(element, events, callback, useCapture) { - if (!is.undefined(element)) { - toggleListener(element, events, callback, false, useCapture); - } - } + // Unbind event handler + off: function(element, events, callback, useCapture) { + if (!is.undefined(element)) { + utils.toggleListener(element, events, callback, false, useCapture); + } + }, - // Trigger event - function event(element, type, bubbles, properties) { - // Bail if no element - if (!element || !type) { - return; - } + // Trigger event + event: function(element, type, bubbles, properties) { + // Bail if no element + if (!element || !type) { + return; + } - // Default bubbles to false - if (!is.boolean(bubbles)) { - bubbles = false; - } + // Default bubbles to false + if (!is.boolean(bubbles)) { + bubbles = false; + } - // Create and dispatch the event - var event = new CustomEvent(type, { - bubbles: bubbles, - detail: properties - }); + // Create and dispatch the event + var event = new CustomEvent(type, { + bubbles: bubbles, + detail: properties + }); - // Dispatch the event - element.dispatchEvent(event); - } + // Dispatch the event + element.dispatchEvent(event); + }, - // Toggle aria-pressed state on a toggle button - // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles - function toggleState(target, state) { - // Bail if no target - if (!target) { - return; - } + // Toggle aria-pressed state on a toggle button + // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles + toggleState: function(target, state) { + // Bail if no target + if (!target) { + return; + } - // Get state - state = (is.boolean(state) ? state : !target.getAttribute('aria-pressed')); + // Get state + state = (is.boolean(state) ? state : !target.getAttribute('aria-pressed')); - // Set the attribute on target - target.setAttribute('aria-pressed', state); + // Set the attribute on target + target.setAttribute('aria-pressed', state); - return state; - } + return state; + }, - // Get percentage - function getPercentage(current, max) { - if (current === 0 || max === 0 || isNaN(current) || isNaN(max)) { - return 0; - } - return ((current / max) * 100).toFixed(2); - } + // Get percentage + getPercentage: function(current, max) { + if (current === 0 || max === 0 || isNaN(current) || isNaN(max)) { + return 0; + } + return ((current / max) * 100).toFixed(2); + }, - // Deep extend/merge destination object with N more objects - // http://andrewdupont.net/2009/08/28/deep-extending-objects-in-javascript/ - // Removed call to arguments.callee (used explicit function name instead) - function extend() { - // Get arguments - var objects = arguments; + // Deep extend/merge destination object with N more objects + // http://andrewdupont.net/2009/08/28/deep-extending-objects-in-javascript/ + // Removed call to arguments.callee (used explicit function name instead) + extend: function() { + // Get arguments + var objects = arguments; - // Bail if nothing to merge - if (!objects.length) { - return; - } + // Bail if nothing to merge + if (!objects.length) { + return; + } - // Return first if specified but nothing to merge - if (objects.length === 1) { - return objects[0]; - } + // Return first if specified but nothing to merge + if (objects.length === 1) { + return objects[0]; + } - // First object is the destination - var destination = Array.prototype.shift.call(objects); - if (!is.object(destination)) { - destination = {}; - } + // First object is the destination + var destination = Array.prototype.shift.call(objects); + if (!is.object(destination)) { + destination = {}; + } - var length = objects.length; + var length = objects.length; - // Loop through all objects to merge - for (var i = 0; i < length; i++) { - var source = objects[i]; + // Loop through all objects to merge + for (var i = 0; i < length; i++) { + var source = objects[i]; - if (!is.object(source)) { - source = {}; - } + if (!is.object(source)) { + source = {}; + } - for (var property in source) { - if (source[property] && source[property].constructor && source[property].constructor === Object) { - destination[property] = destination[property] || {}; - extend(destination[property], source[property]); - } else { - destination[property] = source[property]; + for (var property in source) { + if (source[property] && source[property].constructor && source[property].constructor === Object) { + destination[property] = destination[property] || {}; + utils.extend(destination[property], source[property]); + } else { + destination[property] = source[property]; + } } } - } - return destination; - } + return destination; + }, - // Parse YouTube ID from url - function parseYouTubeId(url) { - var regex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; - return url.match(regex) ? RegExp.$2 : url; - } + // Parse YouTube ID from url + parseYouTubeId: function(url) { + var regex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; + return url.match(regex) ? RegExp.$2 : url; + } + }; // Fullscreen API var fullscreen = (function() { @@ -866,9 +869,6 @@ if (!is.htmlElement(element)) { element = document.body; } - - console.log(prefix); - return (prefix === '') ? element.requestFullScreen() : element[prefix + (prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen')](); }, cancelFullScreen: function() { @@ -922,7 +922,7 @@ // Picture-in-picture support // Safari only currently pip: (function() { - return is.function(createElement('video').webkitSetPresentationMode); + return is.function(utils.createElement('video').webkitSetPresentationMode); })(), // Airplay support @@ -1028,7 +1028,7 @@ // Trigger events, with plyr instance passed function trigger(element, type, bubbles, properties) { - event(element, type, bubbles, extend({}, properties, { + utils.event(element, type, bubbles, utils.extend({}, properties, { plyr: api })); } @@ -1043,6 +1043,16 @@ return getElements(selector)[0]; } + function removeElement(element) { + // Remove reference from player.elements cache + if (is.string(element)) { + utils.removeElement(player.elements[element]); + player.elements[element] = null; + } else { + utils.removeElement(element); + } + } + // Trap focus inside container function focusTrap() { var tabbables = getElements('input:not([disabled]), button:not([disabled])'); @@ -1065,18 +1075,18 @@ } // Bind the handler - on(player.elements.container, 'keydown', checkFocus); + utils.on(player.elements.container, 'keydown', checkFocus); } // Add elements to HTML5 media (source, tracks, etc) function insertElements(type, attributes) { if (is.string(attributes)) { - insertElement(type, player.elements.media, { + utils.insertElement(type, player.elements.media, { src: attributes }); } else if (is.array(attributes)) { attributes.forEach(function(attribute) { - insertElement(type, player.elements.media, attribute); + utils.insertElement(type, player.elements.media, attribute); }); } } @@ -1097,7 +1107,7 @@ // Create <svg> var icon = document.createElementNS(namespace, 'svg'); - setAttributes(icon, extend(attributes, { + utils.setAttributes(icon, utils.extend(attributes, { role: 'presentation' })); @@ -1125,18 +1135,18 @@ break; } - return createElement('span', { + return utils.createElement('span', { class: config.classes.hidden }, text); } // Create a badge function createBadge(text) { - var badge = createElement('span', { + var badge = utils.createElement('span', { class: config.classes.menu.value }); - badge.appendChild(createElement('span', { + badge.appendChild(utils.createElement('span', { class: config.classes.menu.badge }, text)); @@ -1145,7 +1155,7 @@ // Create a <button> function createButton(type, attributes) { - var button = createElement('button'); + var button = utils.createElement('button'); var iconDefault; var iconToggled; var labelKey; @@ -1195,7 +1205,7 @@ } // Merge attributes - extend(attributes, getAttributesFromSelector(config.selectors.buttons[type], attributes)); + utils.extend(attributes, utils.getAttributesFromSelector(config.selectors.buttons[type], attributes)); // Add toggle icon if needed if (is.string(iconToggled)) { @@ -1211,7 +1221,7 @@ button.appendChild(createLabel(labelKey)); // Set element attributes - setAttributes(button, attributes); + utils.setAttributes(button, attributes); player.elements.buttons[type] = button; @@ -1221,13 +1231,13 @@ // Create an <input type='range'> function createRange(type, attributes) { // Seek label - var label = createElement('label', { + var label = utils.createElement('label', { for: attributes.id, class: config.classes.hidden }, config.i18n[type]); // Seek input - var input = createElement('input', extend(getAttributesFromSelector(config.selectors.inputs[type]), { + var input = utils.createElement('input', utils.extend(utils.getAttributesFromSelector(config.selectors.inputs[type]), { type: 'range', min: 0, max: 100, @@ -1246,7 +1256,7 @@ // Create a <progress> function createProgress(type, attributes) { - var progress = createElement('progress', extend(getAttributesFromSelector(config.selectors.display[type]), { + var progress = utils.createElement('progress', utils.extend(utils.getAttributesFromSelector(config.selectors.display[type]), { min: 0, max: 100, value: 0 @@ -1254,7 +1264,7 @@ // Create the label inside if (type !== 'volume') { - progress.appendChild(createElement('span', null, '0')); + progress.appendChild(utils.createElement('span', null, '0')); var suffix = ''; switch (type) { @@ -1277,15 +1287,15 @@ // Create time display function createTime(type) { - var container = createElement('span', { + var container = utils.createElement('span', { class: 'plyr__time' }); - container.appendChild(createElement('span', { + container.appendChild(utils.createElement('span', { class: config.classes.hidden }, config.i18n[type])); - container.appendChild(createElement('span', getAttributesFromSelector(config.selectors.display[type]), '00:00')); + container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(config.selectors.display[type]), '00:00')); player.elements.display[type] = container; @@ -1295,33 +1305,33 @@ // Build the default HTML function createControls(data) { // Create the container - var controls = createElement('div', getAttributesFromSelector(config.selectors.controls.wrapper)); + var controls = utils.createElement('div', utils.getAttributesFromSelector(config.selectors.controls.wrapper)); // Restart button - if (inArray(config.controls, 'restart')) { + if (utils.inArray(config.controls, 'restart')) { controls.appendChild(createButton('restart')); } // Rewind button - if (inArray(config.controls, 'rewind')) { + if (utils.inArray(config.controls, 'rewind')) { controls.appendChild(createButton('rewind')); } // Play Pause button // TODO: This should be a toggle button really? - if (inArray(config.controls, 'play')) { + if (utils.inArray(config.controls, 'play')) { controls.appendChild(createButton('play')); controls.appendChild(createButton('pause')); } // Fast forward button - if (inArray(config.controls, 'fast-forward')) { + if (utils.inArray(config.controls, 'fast-forward')) { controls.appendChild(createButton('fast-forward')); } // Progress - if (inArray(config.controls, 'progress')) { - var container = createElement('span', getAttributesFromSelector(config.selectors.progress)); + if (utils.inArray(config.controls, 'progress')) { + var container = utils.createElement('span', utils.getAttributesFromSelector(config.selectors.progress)); // Seek range slider var seek = createRange('seek', { @@ -1340,7 +1350,7 @@ // Seek tooltip if (config.tooltips.seek) { - var tooltip = createElement('span', { + var tooltip = utils.createElement('span', { role: 'tooltip', class: config.classes.tooltip }, '00:00'); @@ -1354,23 +1364,23 @@ } // Media current time display - if (inArray(config.controls, 'current-time')) { + if (utils.inArray(config.controls, 'current-time')) { controls.appendChild(createTime('currentTime')); } // Media duration display - if (inArray(config.controls, 'duration')) { + if (utils.inArray(config.controls, 'duration')) { controls.appendChild(createTime('duration')); } // Toggle mute button - if (inArray(config.controls, 'mute')) { + if (utils.inArray(config.controls, 'mute')) { controls.appendChild(createButton('mute')); } // Volume range control - if (inArray(config.controls, 'volume')) { - var volume = createElement('span', { + if (utils.inArray(config.controls, 'volume')) { + var volume = utils.createElement('span', { class: 'plyr__volume' }); @@ -1381,7 +1391,7 @@ }; // Create the volume range slider - var range = createRange('volume', extend(attributes, { + var range = createRange('volume', utils.extend(attributes, { id: 'plyr-volume-' + data.id })); volume.appendChild(range.label); @@ -1395,13 +1405,13 @@ } // Toggle captions button - if (inArray(config.controls, 'captions')) { + if (utils.inArray(config.controls, 'captions')) { controls.appendChild(createButton('captions')); } // Settings button / menu - if (inArray(config.controls, 'settings')) { - var menu = createElement('span', extend(getAttributesFromSelector(config.selectors.buttons.settings), { + if (utils.inArray(config.controls, 'settings')) { + var menu = utils.createElement('span', utils.extend(utils.getAttributesFromSelector(config.selectors.buttons.settings), { class: 'plyr__menu' })); @@ -1412,7 +1422,7 @@ 'aria-expanded': false })); - var form = createElement('form', { + var form = utils.createElement('form', { class: 'plyr__menu__container', id: 'plyr-settings-' + data.id, 'aria-hidden': true, @@ -1421,25 +1431,25 @@ tabindex: -1 }); - var inner = createElement('div'); + var inner = utils.createElement('div'); - var home = createElement('div', { + var home = utils.createElement('div', { id: 'plyr-settings-' + data.id + '-home', 'aria-hidden': false, 'aria-labelled-by': 'plyr-settings-toggle-' + data.id, role: 'tabpanel' }); - var tabs = createElement('ul', { + var tabs = utils.createElement('ul', { role: 'tablist' }); ['captions', 'quality', 'speed', 'loop'].forEach(function(type) { - var tab = createElement('li', { + var tab = utils.createElement('li', { role: 'tab' }); - var button = createElement('button', extend(getAttributesFromSelector(config.selectors.buttons.settings), { + var button = utils.createElement('button', utils.extend(utils.getAttributesFromSelector(config.selectors.buttons.settings), { type: 'button', class: config.classes.control + ' ' + config.classes.control + '--forward', id: 'plyr-settings-' + data.id + '-' + type + '-tab', @@ -1448,7 +1458,7 @@ 'aria-expanded': false }), config.i18n[type]); - var value = createElement('span', { + var value = utils.createElement('span', { class: config.classes.menu.value }); @@ -1469,7 +1479,7 @@ inner.appendChild(home); ['captions', 'quality', 'speed', 'loop'].forEach(function(type) { - var pane = createElement('div', { + var pane = utils.createElement('div', { id: 'plyr-settings-' + data.id + '-' + type, 'aria-hidden': true, 'aria-labelled-by': 'plyr-settings-' + data.id + '-' + type + '-tab', @@ -1477,7 +1487,7 @@ tabindex: -1 }); - var back = createElement('button', { + var back = utils.createElement('button', { type: 'button', class: config.classes.control + ' ' + config.classes.control + '--back', 'aria-haspopup': true, @@ -1487,7 +1497,7 @@ pane.appendChild(back); - var options = createElement('ul'); + var options = utils.createElement('ul'); pane.appendChild(options); @@ -1506,17 +1516,17 @@ } // Picture in picture button - if (inArray(config.controls, 'pip') && support.pip) { + if (utils.inArray(config.controls, 'pip') && support.pip) { controls.appendChild(createButton('pip')); } // Airplay button - if (inArray(config.controls, 'airplay') && support.airplay) { + if (utils.inArray(config.controls, 'airplay') && support.airplay) { controls.appendChild(createButton('airplay')); } // Toggle fullscreen button - if (inArray(config.controls, 'fullscreen')) { + if (utils.inArray(config.controls, 'fullscreen')) { controls.appendChild(createButton('fullscreen')); } @@ -1535,7 +1545,7 @@ var list = player.elements.settings.panes.quality.querySelector('ul'); // Empty the menu - emptyElement(list); + utils.emptyElement(list); // Get the badge HTML for HD, 4K etc function getBadge(quality) { @@ -1592,14 +1602,14 @@ }); filtered.forEach(function(quality) { - var item = createElement('li'); + var item = utils.createElement('li'); - var label = createElement('label', { + var label = utils.createElement('label', { class: config.classes.control, for: 'plyr-quality-' + quality }); - var radio = createElement('input', extend(getAttributesFromSelector(config.selectors.inputs.quality), { + var radio = utils.createElement('input', utils.extend(utils.getAttributesFromSelector(config.selectors.inputs.quality), { type: 'radio', id: 'plyr-quality-' + quality, name: 'plyr-quality', @@ -1631,18 +1641,18 @@ var list = player.elements.settings.panes.loop.querySelector('ul'); // Empty the menu - emptyElement(list); + utils.emptyElement(list); options.forEach(function(option) { - var item = createElement('li'); + var item = utils.createElement('li'); - var button = createElement('button', extend(getAttributesFromSelector(config.selectors.buttons.loop), { + var button = utils.createElement('button', utils.extend(utils.getAttributesFromSelector(config.selectors.buttons.loop), { type: 'button', class: config.classes.control, 'data-plyr-loop-action': option }), config.i18n[option]); - if (inArray(['start', 'end'], option)) { + if (utils.inArray(['start', 'end'], option)) { var badge = createBadge('0:00'); button.appendChild(badge); } @@ -1658,7 +1668,7 @@ var list = player.elements.settings.panes.captions.querySelector('ul'); // Empty the menu - emptyElement(list); + utils.emptyElement(list); // If there's no captions, bail if (is.empty(player.captions.tracks)) { @@ -1682,14 +1692,14 @@ // Generate options tracks.forEach(function(track) { - var item = createElement('li'); + var item = utils.createElement('li'); - var label = createElement('label', { + var label = utils.createElement('label', { class: config.classes.control, for: 'plyr-language-' + track.language }); - var radio = createElement('input', extend(getAttributesFromSelector(config.selectors.inputs.language), { + var radio = utils.createElement('input', utils.extend(utils.getAttributesFromSelector(config.selectors.inputs.language), { type: 'radio', id: 'plyr-language-' + track.language, name: 'plyr-language', @@ -1718,7 +1728,7 @@ var list = player.elements.settings.panes.speed.querySelector('ul'); // Empty the menu - emptyElement(list); + utils.emptyElement(list); // If there's no captions, bail if (!is.array(options)) { @@ -1726,14 +1736,14 @@ } options.forEach(function(speed) { - var item = createElement('li'); + var item = utils.createElement('li'); - var label = createElement('label', { + var label = utils.createElement('label', { class: config.classes.control, for: 'plyr-speed-' + speed.toString().replace('.', '-') }); - var radio = createElement('input', extend(getAttributesFromSelector(config.selectors.inputs.speed), { + var radio = utils.createElement('input', utils.extend(utils.getAttributesFromSelector(config.selectors.inputs.speed), { type: 'radio', id: 'plyr-speed-' + speed.toString().replace('.', '-'), name: 'plyr-speed', @@ -1763,18 +1773,18 @@ // Check for native support var nativeSupport = support.fullscreen; - if (nativeSupport || (config.fullscreen.fallback && !inFrame())) { + if (nativeSupport || (config.fullscreen.fallback && !utils.inFrame())) { log((nativeSupport ? 'Native' : 'Fallback') + ' fullscreen enabled'); // Add styling hook - toggleClass(player.elements.container, config.classes.fullscreen.enabled, true); + utils.toggleClass(player.elements.container, config.classes.fullscreen.enabled, true); } else { log('Fullscreen not supported and fallback disabled'); } // Toggle state if (player.elements.buttons && player.elements.buttons.fullscreen) { - toggleState(player.elements.buttons.fullscreen, false); + utils.toggleState(player.elements.buttons.fullscreen, false); } // Setup focus trap @@ -1785,21 +1795,29 @@ // Setup captions function setupCaptions(tracks) { // Only Vimeo and HTML5 video supported at this point - if (!inArray(['video', 'vimeo'], player.type) || (player.type === 'video' && !support.textTracks)) { + if (!utils.inArray(['video', 'vimeo'], player.type) || (player.type === 'video' && !support.textTracks)) { return; } // Inject the container if (!is.htmlElement(player.elements.captions)) { - player.elements.captions = createElement('div', getAttributesFromSelector(config.selectors.captions)); - player.elements.wrapper.appendChild(player.elements.captions); + player.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(config.selectors.captions)); + + console.warn(player.type); + + if (player.type === 'video') { + player.elements.wrapper.appendChild(player.elements.captions); + } else { + console.warn(player.elements.media); + player.elements.media.appendChild(player.elements.captions); + } } // Get tracks player.captions.tracks = is.array(tracks) ? tracks : player.elements.media.textTracks; // Set the class hook - toggleClass(player.elements.container, config.classes.captions.enabled, !is.empty(player.captions.tracks)); + utils.toggleClass(player.elements.container, config.classes.captions.enabled, !is.empty(player.captions.tracks)); // If no caption file exists, hide container for caption text if (is.empty(player.captions.tracks)) { @@ -1815,7 +1833,7 @@ // Turn off native caption rendering to avoid double captions [].forEach.call(player.captions.tracks, function(track) { // Remove previous bindings (if we've changed source or language) - off(track, 'cuechange', setActiveCue); + utils.off(track, 'cuechange', setActiveCue); // Hide captions track.mode = 'hidden'; @@ -1834,8 +1852,8 @@ // 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); + if (is.track(track) && utils.inArray(['captions', 'subtitles'], track.kind)) { + utils.on(track, 'cuechange', setActiveCue); // If we change the active track while a cue is already displayed we need to update it if (track.activeCues && track.activeCues.length > 0) { @@ -1897,10 +1915,10 @@ // Set the current caption function setCaption(caption) { if (is.htmlElement(player.elements.captions)) { - var content = createElement('span'); + var content = utils.createElement('span'); // Empty the container - emptyElement(player.elements.captions); + utils.emptyElement(player.elements.captions); // Default to empty if (is.undefined(caption)) { @@ -1942,8 +1960,8 @@ } if (active) { - toggleClass(player.elements.container, config.classes.captions.active, true); - toggleState(player.elements.buttons.captions, true); + utils.toggleClass(player.elements.container, config.classes.captions.active, true); + utils.toggleState(player.elements.buttons.captions, true); } } @@ -1963,10 +1981,10 @@ player.captions.enabled = show; // Toggle state - toggleState(player.elements.buttons.captions, player.captions.enabled); + utils.toggleState(player.elements.buttons.captions, player.captions.enabled); // Add class hook - toggleClass(player.elements.container, config.classes.captions.active, player.captions.enabled); + utils.toggleClass(player.elements.container, config.classes.captions.active, player.captions.enabled); // Trigger an event trigger(player.elements.container, player.captions.enabled ? 'captionsenabled' : 'captionsdisabled', true); @@ -1993,7 +2011,7 @@ } // Larger overlaid play button - if (inArray(config.controls, 'play-large')) { + if (utils.inArray(config.controls, 'play-large')) { player.elements.buttons.playLarge = createButton('play-large'); player.elements.container.appendChild(player.elements.buttons.playLarge); } @@ -2062,8 +2080,8 @@ for (var i = labels.length - 1; i >= 0; i--) { var label = labels[i]; - toggleClass(label, config.classes.hidden, false); - toggleClass(label, config.classes.tooltip, true); + utils.toggleClass(label, config.classes.hidden, false); + utils.toggleClass(label, config.classes.tooltip, true); } } } @@ -2126,12 +2144,12 @@ // Toggle style hook function toggleStyleHook() { - toggleClass(player.elements.container, config.selectors.container.replace('.', ''), player.supported.full); + utils.toggleClass(player.elements.container, config.selectors.container.replace('.', ''), player.supported.full); } // Toggle native controls function toggleNativeControls(toggle) { - if (toggle && inArray(types.html5, player.type)) { + if (toggle && utils.inArray(types.html5, player.type)) { player.elements.media.setAttribute('controls', ''); } else { player.elements.media.removeAttribute('controls'); @@ -2210,7 +2228,7 @@ } // Update the working copy of the values - extend(player.storage, value); + utils.extend(player.storage, value); // Update storage window.localStorage.setItem(config.storage.key, JSON.stringify(player.storage)); @@ -2226,57 +2244,57 @@ if (player.supported.full) { // Add type class - toggleClass(player.elements.container, config.classes.type.replace('{0}', player.type), true); + utils.toggleClass(player.elements.container, config.classes.type.replace('{0}', player.type), true); // Add video class for embeds // This will require changes if audio embeds are added - if (inArray(types.embed, player.type)) { - toggleClass(player.elements.container, config.classes.type.replace('{0}', 'video'), true); + if (utils.inArray(types.embed, player.type)) { + utils.toggleClass(player.elements.container, config.classes.type.replace('{0}', 'video'), true); } // Check for picture-in-picture support - toggleClass(player.elements.container, config.classes.pip.enabled, support.pip && player.type === 'video'); + utils.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(types.html5, player.type)); + utils.toggleClass(player.elements.container, config.classes.airplay.enabled, support.airplay && utils.inArray(types.html5, player.type)); // If there's no autoplay attribute, assume the video is stopped and add state class - toggleClass(player.elements.container, config.classes.stopped, config.autoplay); + utils.toggleClass(player.elements.container, config.classes.stopped, config.autoplay); // Add iOS class - toggleClass(player.elements.container, config.classes.isIos, player.browser.isIos); + utils.toggleClass(player.elements.container, config.classes.isIos, player.browser.isIos); // Add touch class - toggleClass(player.elements.container, config.classes.isTouch, player.browser.isTouch); + utils.toggleClass(player.elements.container, config.classes.isTouch, player.browser.isTouch); // Inject the player wrapper if (player.type === 'video') { // Create the wrapper div - player.elements.wrapper = createElement('div', { + player.elements.wrapper = utils.createElement('div', { class: config.classes.videoWrapper }); // Wrap the video in a container - wrap(player.elements.media, player.elements.wrapper); + utils.wrap(player.elements.media, player.elements.wrapper); } } // Embeds - if (inArray(types.embed, player.type)) { + if (utils.inArray(types.embed, player.type)) { setupEmbed(); } } // Setup YouTube/Vimeo function setupEmbed() { - var container = createElement('div'); + var container = utils.createElement('div'); var mediaId; var id = player.type + '-' + Math.floor(Math.random() * (10000)); // Parse IDs from URLs if supplied switch (player.type) { case 'youtube': - mediaId = parseYouTubeId(player.embedId); + mediaId = utils.parseYouTubeId(player.embedId); break; default: @@ -2286,12 +2304,12 @@ // Remove old containers var containers = getElements('[id^="' + player.type + '-"]'); for (var i = containers.length - 1; i >= 0; i--) { - remove(containers[i]); + utils.removeElement(containers[i]); } // Add embed class for responsive - toggleClass(player.elements.media, config.classes.videoWrapper, true); - toggleClass(player.elements.media, config.classes.embedWrapper, true); + utils.toggleClass(player.elements.media, config.classes.videoWrapper, true); + utils.toggleClass(player.elements.media, config.classes.embedWrapper, true); if (player.type === 'youtube') { // Create the YouTube container @@ -2305,7 +2323,7 @@ youTubeReady(mediaId, container); } else { // Load the API - injectScript(config.urls.youtube.api); + utils.injectScript(config.urls.youtube.api); // Setup callback for the API window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || []; @@ -2335,7 +2353,7 @@ // Load the API if not already if (!is.object(window.Vimeo)) { - injectScript(config.urls.vimeo.api); + utils.injectScript(config.urls.vimeo.api); // Wait for fragaloop load var vimeoTimer = window.setInterval(function() { @@ -2350,15 +2368,15 @@ } else if (player.type === 'soundcloud') { // TODO: Currently unsupported and undocumented // Inject the iframe - var soundCloud = createElement('iframe'); + var soundCloud = utils.createElement('iframe'); // Watch for iframe load soundCloud.loaded = false; - on(soundCloud, 'load', function() { + utils.on(soundCloud, 'load', function() { soundCloud.loaded = true; }); - setAttributes(soundCloud, { + utils.setAttributes(soundCloud, { 'src': 'https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/' + mediaId, 'id': id }); @@ -2368,7 +2386,7 @@ // Load the API if not already if (!window.SC) { - injectScript(config.urls.soundcloud.api); + utils.injectScript(config.urls.soundcloud.api); } // Wait for SC load @@ -2410,7 +2428,7 @@ wmode: 'transparent', modestbranding: 1, disablekb: 1, - origin: 'https://plyr.io' + origin: window.location.href }, events: { 'onError': function(event) { @@ -2446,7 +2464,7 @@ instance.stopVideo(); player.elements.media.paused = true; }; - player.elements.media.duration = instance.getDuration(); + player.elements.media.duration = instance.getDuratiutils.on(); player.elements.media.paused = true; player.elements.media.currentTime = 0; player.elements.media.muted = instance.isMuted(); @@ -2789,7 +2807,7 @@ // TODO: Set the indicator on load as user may pass loop as config function toggleLoop(type) { // Set default to be a true toggle - if (!inArray(['start', 'end', 'all', 'none', 'toggle'], type)) { + if (!utils.inArray(['start', 'end', 'all', 'none', 'toggle'], type)) { type = 'toggle'; } @@ -2931,7 +2949,7 @@ if (is.number(input)) { targetTime = input; - } else if (is.event(input) && inArray(['input', 'change'], input.type)) { + } else if (is.event(input) && utils.inArray(['input', 'change'], input.type)) { // It's the seek slider // Seek to the selected time targetTime = ((input.target.value / input.target.max) * duration); @@ -2954,7 +2972,7 @@ } catch (e) {} // Embeds - if (inArray(types.embed, player.type)) { + if (utils.inArray(types.embed, player.type)) { switch (player.type) { case 'youtube': player.embed.seekTo(targetTime); @@ -3007,9 +3025,9 @@ // Check playing state function checkPlaying() { - toggleClass(player.elements.container, config.classes.playing, !player.elements.media.paused); + utils.toggleClass(player.elements.container, config.classes.playing, !player.elements.media.paused); - toggleClass(player.elements.container, config.classes.stopped, player.elements.media.paused); + utils.toggleClass(player.elements.container, config.classes.stopped, player.elements.media.paused); toggleControls(player.elements.media.paused); } @@ -3063,14 +3081,14 @@ } // Set class hook - toggleClass(player.elements.container, config.classes.fullscreen.active, player.fullscreen.active); + utils.toggleClass(player.elements.container, config.classes.fullscreen.active, player.fullscreen.active); // Trap focus focusTrap(player.fullscreen.active); // Set button state if (player.elements.buttons && player.elements.buttons.fullscreen) { - toggleState(player.elements.buttons.fullscreen, player.fullscreen.active); + utils.toggleState(player.elements.buttons.fullscreen, player.fullscreen.active); } // Trigger an event @@ -3124,7 +3142,7 @@ container.appendChild(clone); targetWidth = clone.scrollWidth; targetHeight = clone.scrollHeight; - remove(clone); + utils.removeElement(clone); } target.setAttribute('aria-hidden', !show); @@ -3150,7 +3168,7 @@ } // Set button state - toggleState(player.elements.buttons.mute, muted); + utils.toggleState(player.elements.buttons.mute, muted); // Set mute on the player player.elements.media.muted = muted; @@ -3161,7 +3179,7 @@ } // Embeds - if (inArray(types.embed, player.type)) { + if (utils.inArray(types.embed, player.type)) { // YouTube switch (player.type) { case 'youtube': @@ -3217,7 +3235,7 @@ } // Embeds - if (inArray(types.embed, player.type)) { + if (utils.inArray(types.embed, player.type)) { switch (player.type) { case 'youtube': player.embed.setVolume(player.elements.media.volume * 100); @@ -3284,11 +3302,11 @@ }); // Toggle class if muted - toggleClass(player.elements.container, config.classes.muted, (volume === 0)); + utils.toggleClass(player.elements.container, config.classes.muted, (volume === 0)); // Update checkbox for mute state if (player.supported.full && player.elements.buttons.mute) { - toggleState(player.elements.buttons.mute, (volume === 0)); + utils.toggleState(player.elements.buttons.mute, (volume === 0)); } } @@ -3302,7 +3320,7 @@ // Timer to prevent flicker when seeking timers.loading = setTimeout(function() { // Toggle container class hook - toggleClass(player.elements.container, config.classes.loading, loading); + utils.toggleClass(player.elements.container, config.classes.loading, loading); // Show controls if loading, hide if done toggleControls(loading); @@ -3328,7 +3346,7 @@ return; } - value = getPercentage(player.elements.media.currentTime, duration); + value = utils.getPercentage(player.elements.media.currentTime, duration); // Set seek range value only if it's a 'natural' time event if (event.type === 'timeupdate' && player.elements.inputs.seek) { @@ -3346,7 +3364,7 @@ if (buffered && buffered.length) { // HTML5 - return getPercentage(buffered.end(0), duration); + return utils.getPercentage(buffered.end(0), duration); } else if (is.number(buffered)) { // YouTube returns between 0 and 1 return (buffered * 100); @@ -3475,7 +3493,7 @@ } var duration = getDuration(), - value = getPercentage(time, duration); + value = utils.getPercentage(time, duration); // Update progress if (player.elements.progress && player.elements.display.played) { @@ -3506,7 +3524,7 @@ if (is.event(event)) { percent = ((100 / clientRect.width) * (event.pageX - clientRect.left)); } else { - if (hasClass(player.elements.display.seekTooltip, visible)) { + if (utils.hasClass(player.elements.display.seekTooltip, visible)) { percent = player.elements.display.seekTooltip.style.left.replace('%', ''); } else { return; @@ -3528,8 +3546,8 @@ // Show/hide the tooltip // If the event is a moues in/out and percentage is inside bounds - if (is.event(event) && inArray(['mouseenter', 'mouseleave'], event.type)) { - toggleClass(player.elements.display.seekTooltip, visible, (event.type === 'mouseenter')); + if (is.event(event) && utils.inArray(['mouseenter', 'mouseleave'], event.type)) { + utils.toggleClass(player.elements.display.seekTooltip, visible, (event.type === 'mouseenter')); } } @@ -3543,7 +3561,7 @@ var delay = 0; var isEnterFullscreen = false; var show = toggle; - var loading = hasClass(player.elements.container, config.classes.loading); + var loading = utils.hasClass(player.elements.container, config.classes.loading); // Default to false if no boolean if (!is.boolean(toggle)) { @@ -3552,10 +3570,10 @@ isEnterFullscreen = (toggle.type === 'enterfullscreen'); // Whether to show controls - show = inArray(['mousemove', 'touchstart', 'mouseenter', 'focus'], toggle.type); + show = utils.inArray(['mousemove', 'touchstart', 'mouseenter', 'focus'], toggle.type); // Delay hiding on move events - if (inArray(['mousemove', 'touchmove'], toggle.type)) { + if (utils.inArray(['mousemove', 'touchmove'], toggle.type)) { delay = 2000; } @@ -3564,7 +3582,7 @@ delay = 3000; } } else { - show = hasClass(player.elements.container, config.classes.hideControls); + show = utils.hasClass(player.elements.container, config.classes.hideControls); } } @@ -3573,7 +3591,7 @@ // If the mouse is not over the controls, set a timeout to hide them if (show || player.elements.media.paused || loading) { - toggleClass(player.elements.container, config.classes.hideControls, false); + utils.toggleClass(player.elements.container, config.classes.hideControls, false); // Always show controls when paused or if touch if (player.elements.media.paused || loading) { @@ -3595,7 +3613,7 @@ return; } - toggleClass(player.elements.container, config.classes.hideControls, true); + utils.toggleClass(player.elements.container, config.classes.hideControls, true); }, delay); } } @@ -3644,7 +3662,7 @@ } // Remove ready class hook - toggleClass(player.elements.container, config.classes.ready, false); + utils.toggleClass(player.elements.container, config.classes.ready, false); // Pause playback pause(); @@ -3664,11 +3682,14 @@ player.embed = null; // Remove the old media - remove(player.elements.media); + removeElement('media'); + + // Remove the old captions + removeElement('captions'); // Remove video container if (player.type === 'video' && player.elements.wrapper) { - remove(player.elements.wrapper); + removeElement('wrapper'); } // Reset class name @@ -3684,7 +3705,7 @@ if (player.type === 'video') { var firstSource = source.sources[0]; - if ('type' in firstSource && inArray(types.embed, firstSource.type)) { + if ('type' in firstSource && utils.inArray(types.embed, firstSource.type)) { player.type = firstSource.type; } } @@ -3696,23 +3717,23 @@ // Create new markup switch (player.type) { case 'video': - player.elements.media = createElement('video'); + player.elements.media = utils.createElement('video'); break; case 'audio': - player.elements.media = createElement('audio'); + player.elements.media = utils.createElement('audio'); break; case 'youtube': case 'vimeo': case 'soundcloud': - player.elements.media = createElement('div'); + player.elements.media = utils.createElement('div'); player.embedId = source.sources[0].src; break; } // Inject the new element - prependChild(player.elements.container, player.elements.media); + utils.prependChild(player.elements.container, player.elements.media); // Autoplay the new source? if (is.boolean(source.autoplay)) { @@ -3720,7 +3741,7 @@ } // Set attributes for audio and video - if (inArray(types.html5, player.type)) { + if (utils.inArray(types.html5, player.type)) { if (config.crossorigin) { player.elements.media.setAttribute('crossorigin', ''); } @@ -3736,12 +3757,12 @@ } // Restore class hooks - toggleClass(player.elements.container, config.classes.fullscreen.active, player.fullscreen.active); - toggleClass(player.elements.container, config.classes.captions.active, player.captions.enabled); + utils.toggleClass(player.elements.container, config.classes.fullscreen.active, player.fullscreen.active); + utils.toggleClass(player.elements.container, config.classes.captions.active, player.captions.enabled); toggleStyleHook(); // Set new sources for html5 - if (inArray(types.html5, player.type)) { + if (utils.inArray(types.html5, player.type)) { insertElements('source', source.sources); } @@ -3749,7 +3770,7 @@ setupMedia(); // HTML5 stuff - if (inArray(types.html5, player.type)) { + if (utils.inArray(types.html5, player.type)) { // Setup captions if ('tracks' in source) { insertElements('track', source.tracks); @@ -3760,7 +3781,7 @@ } // If HTML5 or embed but not fully supported, setupInterface and call ready now - if (inArray(types.html5, player.type) || (inArray(types.embed, player.type) && !player.supported.full)) { + if (utils.inArray(types.html5, player.type) || (utils.inArray(types.embed, player.type) && !player.supported.full)) { // Setup interface setupInterface(); @@ -3800,14 +3821,14 @@ // Setup focus and tab focus if (target) { - var hadTabFocus = hasClass(trigger, config.classes.tabFocus); + var hadTabFocus = utils.hasClass(trigger, config.classes.tabFocus); setTimeout(function() { target.focus(); if (hadTabFocus) { - toggleClass(trigger, config.classes.tabFocus, false); - toggleClass(target, config.classes.tabFocus, true); + utils.toggleClass(trigger, config.classes.tabFocus, false); + utils.toggleClass(target, config.classes.tabFocus, true); } }, 100); } @@ -3820,10 +3841,10 @@ // Detect tab focus function checkTabFocus(focused) { - toggleClass(getElements('.' + config.classes.tabFocus), config.classes.tabFocus, false); + utils.toggleClass(getElements('.' + config.classes.tabFocus), config.classes.tabFocus, false); if (player.elements.container.contains(focused)) { - toggleClass(focused, config.classes.tabFocus, true); + utils.toggleClass(focused, config.classes.tabFocus, true); } } @@ -3833,9 +3854,9 @@ // Handle global presses if (config.keyboardShortcuts.global) { - on(window, 'keydown keyup', function(event) { + utils.on(window, 'keydown keyup', function(event) { var code = getKeyCode(event); - var focused = getFocusElement(); + var focused = utils.getFocusElement(); var allowed = [48, 49, 50, 51, 52, 53, 54, 56, 57, 75, 77, 70, 67, 73, 76, 79]; var count = get().length; @@ -3843,14 +3864,14 @@ // and the key is in the allowed keys // and if the focused element is not editable (e.g. text input) // and any that accept key input http://webaim.org/techniques/keyboard/ - if (count === 1 && inArray(allowed, code) && (!is.htmlElement(focused) || !matches(focused, config.selectors.editable))) { + if (count === 1 && utils.inArray(allowed, code) && (!is.htmlElement(focused) || !utils.matches(focused, config.selectors.editable))) { handleKey(event); } }); } // Handle presses on focused - on(player.elements.container, 'keydown keyup', handleKey); + utils.on(player.elements.container, 'keydown keyup', handleKey); } function handleKey(event) { @@ -3885,16 +3906,16 @@ var preventDefault = [48, 49, 50, 51, 52, 53, 54, 56, 57, 32, 75, 38, 40, 77, 39, 37, 70, 67, 73, 76, 79]; var checkFocus = [38, 40]; - if (inArray(checkFocus, code)) { - var focused = getFocusElement(); + if (utils.inArray(checkFocus, code)) { + var focused = utils.getFocusElement(); - if (is.htmlElement(focused) && getFocusElement().type === "radio") { + if (is.htmlElement(focused) && utils.getFocusElement().type === "radio") { return; } } // If the code is found prevent default (e.g. prevent scrolling for arrows) - if (inArray(preventDefault, code)) { + if (utils.inArray(preventDefault, code)) { event.preventDefault(); event.stopPropagation(); } @@ -3990,22 +4011,22 @@ } // Focus/tab management - on(window, 'keyup', function(event) { + utils.on(window, 'keyup', function(event) { var code = getKeyCode(event); - var focused = getFocusElement(); + var focused = utils.getFocusElement(); if (code === 9) { checkTabFocus(focused); } }); - on(document.body, 'click', function() { - toggleClass(getElement('.' + config.classes.tabFocus), config.classes.tabFocus, false); + utils.on(document.body, 'click', function() { + utils.toggleClass(getElement('.' + config.classes.tabFocus), config.classes.tabFocus, false); }); for (var button in player.elements.buttons) { var element = player.elements.buttons[button]; - on(element, 'blur', function() { - toggleClass(element, 'tab-focus', false); + utils.on(element, 'blur', function() { + utils.toggleClass(element, 'tab-focus', false); }); } @@ -4020,32 +4041,32 @@ } // Play - proxy(player.elements.buttons.play, 'click', config.listeners.play, _togglePlay); - proxy(player.elements.buttons.playLarge, 'click', config.listeners.play, _togglePlay); + utils.proxy(player.elements.buttons.play, 'click', config.listeners.play, _togglePlay); + utils.proxy(player.elements.buttons.playLarge, 'click', config.listeners.play, _togglePlay); // Pause - proxy(player.elements.buttons.pause, 'click', config.listeners.pause, _togglePlay); + utils.proxy(player.elements.buttons.pause, 'click', config.listeners.pause, _togglePlay); // Pause - proxy(player.elements.buttons.restart, 'click', config.listeners.restart, seek); + utils.proxy(player.elements.buttons.restart, 'click', config.listeners.restart, seek); // Rewind - proxy(player.elements.buttons.rewind, 'click', config.listeners.rewind, rewind); + utils.proxy(player.elements.buttons.rewind, 'click', config.listeners.rewind, rewind); // Rewind - proxy(player.elements.buttons.forward, 'click', config.listeners.forward, forward); + utils.proxy(player.elements.buttons.forward, 'click', config.listeners.forward, forward); // Mute - proxy(player.elements.buttons.mute, 'click', config.listeners.mute, toggleMute); + utils.proxy(player.elements.buttons.mute, 'click', config.listeners.mute, toggleMute); // Captions - proxy(player.elements.buttons.captions, 'click', config.listeners.captions, toggleCaptions); + utils.proxy(player.elements.buttons.captions, 'click', config.listeners.captions, toggleCaptions); // Fullscreen - proxy(player.elements.buttons.fullscreen, 'click', config.listeners.fullscreen, toggleFullscreen); + utils.proxy(player.elements.buttons.fullscreen, 'click', config.listeners.fullscreen, toggleFullscreen); // Picture-in-Picture - proxy(player.elements.buttons.pip, 'click', config.listeners.pip, function(event) { + utils.proxy(player.elements.buttons.pip, 'click', config.listeners.pip, function(event) { if (!support.pip) { return; } @@ -4053,7 +4074,7 @@ }); // Airplay - proxy(player.elements.buttons.airplay, 'click', config.listeners.airplay, function(event) { + utils.proxy(player.elements.buttons.airplay, 'click', config.listeners.airplay, function(event) { if (!support.airplay) { return; } @@ -4061,10 +4082,10 @@ }); // Settings menu - on(player.elements.settings.menu, 'click', toggleMenu); + utils.on(player.elements.settings.menu, 'click', toggleMenu); // Click anywhere closes menu - on(document.body, 'click', function(event) { + utils.on(document.body, 'click', function(event) { var menu = player.elements.settings.menu; var form = menu.querySelector('form'); @@ -4077,32 +4098,32 @@ }); // Settings menu items - use event delegation as items are added/removed - on(player.elements.settings.menu, 'click', function(event) { + utils.on(player.elements.settings.menu, 'click', function(event) { // Settings - Language - if (matches(event.target, config.selectors.inputs.language)) { + if (utils.matches(event.target, config.selectors.inputs.language)) { handlerProxy.call(this, event, config.listeners.language, setLanguage); } // Settings - Quality - else if (matches(event.target, config.selectors.inputs.quality)) { + else if (utils.matches(event.target, config.selectors.inputs.quality)) { handlerProxy.call(this, event, config.listeners.quality, function() { warn("Set quality"); }); } // Settings - Speed - else if (matches(event.target, config.selectors.inputs.speed)) { + else if (utils.matches(event.target, config.selectors.inputs.speed)) { handlerProxy.call(this, event, config.listeners.speed, setSpeed); } // Settings - Looping // TODO: use toggle buttons - else if (matches(event.target, config.selectors.buttons.loop)) { + else if (utils.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 var value = event.target.getAttribute('data-loop__value') || event.target.getAttribute('data-loop__type'); - if (inArray(['start', 'end', 'all', 'none'], value)) { + if (utils.inArray(['start', 'end', 'all', 'none'], value)) { toggleLoop(value); } }); @@ -4110,35 +4131,35 @@ }); // Seek - proxy(player.elements.inputs.seek, inputEvent, config.listeners.seek, seek); + utils.proxy(player.elements.inputs.seek, inputEvent, config.listeners.seek, seek); // Seek - proxy(player.elements.inputs.volume, inputEvent, config.listeners.volume, setVolume); + utils.proxy(player.elements.inputs.volume, inputEvent, config.listeners.volume, setVolume); // Seek tooltip - on(player.elements.progress, 'mouseenter mouseleave mousemove', updateSeekTooltip); + utils.on(player.elements.progress, 'mouseenter mouseleave mousemove', updateSeekTooltip); // Toggle controls visibility based on mouse movement if (config.hideControls) { // Toggle controls on mouse events and entering fullscreen - on(player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen', toggleControls); + utils.on(player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen', toggleControls); // Watch for cursor over controls so they don't hide when trying to interact - on(player.elements.controls, 'mouseenter mouseleave', function(event) { + utils.on(player.elements.controls, 'mouseenter mouseleave', function(event) { player.elements.controls.hover = event.type === 'mouseenter'; }); // Watch for cursor over controls so they don't hide when trying to interact - on(player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function(event) { - player.elements.controls.pressed = inArray(['mousedown', 'touchstart'], event.type); + utils.on(player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function(event) { + player.elements.controls.pressed = utils.inArray(['mousedown', 'touchstart'], event.type); }); // Focus in/out on controls - on(player.elements.controls, 'focus blur', toggleControls, true); + utils.on(player.elements.controls, 'focus blur', toggleControls, true); } // Mouse wheel for volume - proxy(player.elements.inputs.volume, 'wheel', config.listeners.volume, function(event) { + utils.proxy(player.elements.inputs.volume, 'wheel', config.listeners.volume, function(event) { // Detect "natural" scroll - suppored on OS X Safari only // Other browsers on OS X will be inverted until support improves var inverted = event.webkitDirectionInvertedFromDevice; @@ -4176,20 +4197,20 @@ // Handle user exiting fullscreen by escaping etc if (support.fullscreen) { - on(document, fullscreen.eventType, toggleFullscreen); + utils.on(document, fullscreen.eventType, toggleFullscreen); } } // Listen for media events function mediaListeners() { // Time change on media - on(player.elements.media, 'timeupdate seeking', timeUpdate); + utils.on(player.elements.media, 'timeupdate seeking', timeUpdate); // Display duration - on(player.elements.media, 'durationchange loadedmetadata', displayDuration); + utils.on(player.elements.media, 'durationchange loadedmetadata', displayDuration); // Handle the media finishing - on(player.elements.media, 'ended', function() { + utils.on(player.elements.media, 'ended', function() { // Show poster on end if (player.type === 'video' && config.showPosterOnEnd) { // Clear @@ -4206,16 +4227,16 @@ }); // Check for buffer progress - on(player.elements.media, 'progress playing', updateProgress); + utils.on(player.elements.media, 'progress playing', updateProgress); // Handle native mute - on(player.elements.media, 'volumechange', updateVolume); + utils.on(player.elements.media, 'volumechange', updateVolume); // Handle native play/pause - on(player.elements.media, 'play pause ended', checkPlaying); + utils.on(player.elements.media, 'play pause ended', checkPlaying); // Loading - on(player.elements.media, 'waiting canplay seeked', checkLoading); + utils.on(player.elements.media, 'waiting canplay seeked', checkLoading); // Click video if (config.clickToPlay && player.type !== 'audio') { @@ -4231,7 +4252,7 @@ wrapper.style.cursor = "pointer"; // On click play, pause ore restart - on(wrapper, 'click', function() { + utils.on(wrapper, 'click', function() { // Touch devices will just show controls (if we're hiding controls) if (config.hideControls && player.browser.isTouch && !player.elements.media.paused) { return; @@ -4250,14 +4271,14 @@ // Disable right click if (config.disableContextMenu) { - on(player.elements.media, 'contextmenu', function(event) { + utils.on(player.elements.media, 'contextmenu', function(event) { event.preventDefault(); }); } // Proxy events to container // Bubble up key events for Edge - on(player.elements.media, config.events.concat(['keyup', 'keydown']).join(' '), function(event) { + utils.on(player.elements.media, config.events.concat(['keyup', 'keydown']).join(' '), function(event) { trigger(player.elements.container, event.type, true); }); } @@ -4265,14 +4286,14 @@ // Cancel current network requests // See https://github.com/Selz/plyr/issues/174 function cancelRequests() { - if (!inArray(types.html5, player.type)) { + if (!utils.inArray(types.html5, player.type)) { return; } // Remove child sources var sources = player.elements.media.querySelectorAll('source'); for (var i = 0; i < sources.length; i++) { - remove(sources[i]); + utils.removeElement(sources[i]); } // Set blank video src attribute @@ -4372,7 +4393,7 @@ } // Sniff out the browser - player.browser = getBrowser(); + player.browser = utils.getBrowser(); // Bail if nothing to setup if (!is.htmlElement(player.elements.media)) { @@ -4408,7 +4429,7 @@ } // Wrap media - player.elements.container = wrap(media, createElement('div')); + player.elements.container = utils.wrap(media, utils.createElement('div')); // Allow focus to be captured player.elements.container.setAttribute('tabindex', 0); @@ -4424,7 +4445,7 @@ // Setup interface // If embed but not fully supported, setupInterface (to avoid flash of controls) and call ready now - if (inArray(types.html5, player.type) || (inArray(types.embed, player.type) && !player.supported.full)) { + if (utils.inArray(types.html5, player.type) || (utils.inArray(types.embed, player.type) && !player.supported.full)) { // Setup UI setupInterface(); @@ -4446,10 +4467,10 @@ warn('Basic support only', player.type); // Remove controls - remove(getElement(config.selectors.controls.wrapper)); + removeElement('controls'); // Remove large play - remove(getElement(config.selectors.buttons.play)); + removeElement('buttons.play'); // Restore native controls toggleNativeControls(true); @@ -4528,10 +4549,10 @@ return player.elements.media.muted; }, isReady: function() { - return hasClass(player.elements.container, config.classes.ready); + return utils.hasClass(player.elements.container, config.classes.ready); }, isLoading: function() { - return hasClass(player.elements.container, config.classes.loading); + return utils.hasClass(player.elements.container, config.classes.loading); }, isPaused: function() { return player.elements.media.paused; @@ -4540,7 +4561,7 @@ return config.loop.active; }, on: function(event, callback) { - on(player.elements.container, event, callback); + utils.on(player.elements.container, event, callback); return this; }, play: play, @@ -4581,10 +4602,10 @@ }, 0); // Set class hook on media element - toggleClass(player.elements.media, defaults.classes.setup, true); + utils.toggleClass(player.elements.media, defaults.classes.setup, true); // Set container class for ready - toggleClass(player.elements.container, config.classes.ready, true); + utils.toggleClass(player.elements.container, config.classes.ready, true); // Store a refernce to instance player.elements.media.plyr = api; @@ -4616,7 +4637,7 @@ } // Create placeholder (to prevent loading twice) - var container = createElement('div'); + var container = utils.createElement('div'); container.setAttribute('hidden', ''); if (is.string(id)) { container.setAttribute('id', id); @@ -4640,12 +4661,12 @@ // Check for support function checkSupport(type) { - var browser = getBrowser(); + var browser = utils.getBrowser(); var isOldIE = (browser.isIE && browser.version <= 9); var isIos = browser.isIos; var isIphone = /iPhone|iPod/i.test(navigator.userAgent); - var audio = !!createElement('audio').canPlayType; - var video = !!createElement('video').canPlayType; + var audio = !!utils.createElement('audio').canPlayType; + var video = !!utils.createElement('video').canPlayType; var basic; var full; @@ -4716,10 +4737,10 @@ // Add to container list function add(target, media) { - if (!hasClass(media, defaults.classes.hook)) { + if (!utils.hasClass(media, defaults.classes.hook)) { players.push({ // Always wrap in a <div> for styling - // container: wrap(media, document.createElement('div')), + // container: utils.wrap(media, document.createElement('div')), // Could be a container or the media itself target: target, // This should be the <video>, <audio> or <div> (YouTube/Vimeo) @@ -4740,7 +4761,7 @@ for (var x = 0; x < children.length; x++) { add(target, children[x]); } - } else if (matches(target, selector)) { + } else if (utils.matches(target, selector)) { // Target is media element add(target, target); } @@ -4766,7 +4787,7 @@ data = JSON.parse(element.getAttribute('data-plyr')); } catch (e) {} - var config = extend({}, defaults, options, data); + var config = utils.extend({}, defaults, options, data); // Bail if not enabled if (!config.enabled) { @@ -4785,13 +4806,13 @@ if (config.debug) { var events = config.events.concat(['setup', 'statechange', 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled']); - on(instance.getContainer(), events.join(' '), function(event) { + utils.on(instance.getContainer(), events.join(' '), function(event) { console.log([config.logPrefix, 'event:', event.type].join(' '), event.detail.plyr); }); } // Callback - event(instance.getContainer(), 'setup', true, { + utils.event(instance.getContainer(), 'setup', true, { plyr: instance }); diff --git a/src/less/plyr.less b/src/less/plyr.less index 744f07cf..3ffa95fe 100644 --- a/src/less/plyr.less +++ b/src/less/plyr.less @@ -198,10 +198,6 @@ .plyr__video-embed { padding-bottom: 56.25%; /* 16:9 */ height: 0; - border-radius: inherit; - // Require overflow and z-index to force border-radius - overflow: hidden; - z-index: 0; iframe { position: absolute; |