From d690560fc207b3062a8412f9dd738c1f5a9fee58 Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Thu, 19 Feb 2015 21:46:45 +1100 Subject: [PATCH] Fullscreen fallback for older browsers --- assets/js/plyr.js | 191 +++++++++++++++++++++++++++--------------- assets/less/docs.less | 4 +- assets/less/plyr.less | 6 +- dist/css/docs.css | 2 +- dist/css/plyr.css | 2 +- dist/js/plyr.js | 2 +- 6 files changed, 131 insertions(+), 76 deletions(-) diff --git a/assets/js/plyr.js b/assets/js/plyr.js index 6d260f3c..a9812025 100644 --- a/assets/js/plyr.js +++ b/assets/js/plyr.js @@ -1,6 +1,6 @@ // ========================================================================== // Plyr -// plyr.js v1.0.0 +// plyr.js v1.0.6 // https://github.com/sampotts/plyr // ========================================================================== // Credits: http://paypal.github.io/accessible-html5-video-player/ @@ -46,21 +46,30 @@ playing: "playing", muted: "muted", captions: { - active: "captions-active", - enabled: "captions-enabled" + enabled: "captions-enabled", + active: "captions-active" }, fullscreen: { - enabled: "fullscreen-enabled" + enabled: "fullscreen-enabled", + active: "fullscreen-active" } }, captions: { defaultActive: false }, fullscreen: { - enabled: true + enabled: true, + fallback: true } }; + // Debugging + function _log(text, error) { + if(config.debug && window.console) { + console[(error ? "error" : "log")](text); + } + } + // Credits: http://paypal.github.io/accessible-html5-video-player/ // Unfortunately, due to scattered support, browser sniffing is required function _browserSniff() { @@ -180,6 +189,11 @@ element.addEventListener(event, callback, false); } + // Unbind event + function _off(element, event, callback) { + element.removeEventListener(event, callback, false); + } + // Get click position relative to parent // http://www.kirupa.com/html5/getting_mouse_click_position.htm function _getClickPosition(event) { @@ -266,7 +280,9 @@ // Update methods to do something useful if (fullscreen.supportsFullScreen) { - fullscreen.fullScreenEventName = fullscreen.prefix + "fullscreenchange"; + // Yet again Microsoft awesomeness, + // Sometimes the prefix is "ms", sometimes "MS" to keep you on your toes + fullscreen.fullScreenEventName = (fullscreen.prefix == "ms" ? "MSFullscreenChange" : fullscreen.prefix + "fullscreenchange"); fullscreen.isFullScreen = function() { switch (this.prefix) { @@ -361,12 +377,20 @@ return _getElements(selector)[0]; } + // Determine if we're in an iframe + function _inFrame() { + try { + return window.self !== window.top; + } + catch (e) { + return true; + } + } + // Insert controls function _injectControls() { // Insert custom video controls - if (config.debug) { - console.log("Injecting custom controls"); - } + _log("Injecting custom controls"); // Use specified html // Need to do a default? @@ -416,7 +440,7 @@ // If there's no media, bail if(!player.media) { - console.error("No audio or video element found!"); + _log("No audio or video element found!", true); return false; } @@ -479,14 +503,10 @@ player.captionExists = true; if (captionSrc === "") { player.captionExists = false; - if (config.debug) { - console.log("No caption track found."); - } + _log("No caption track found."); } else { - if (config.debug) { - console.log("Caption track found; URI: " + captionSrc); - } + _log("Caption track found; URI: " + captionSrc); } // If no caption file exists, hide container for caption text @@ -502,13 +522,13 @@ (player.browserName === "IE" && player.browserMajorVersion === 11) || (player.browserName === "Firefox" && player.browserMajorVersion >= 31) || (player.browserName === "Safari" && player.browserMajorVersion >= 7)) { - if (config.debug) { - console.log("Detected IE 10/11 or Firefox 31+ or Safari 7+"); - } - // set to false so skips to "manual" captioning + // Debugging + _log("Detected IE 10/11 or Firefox 31+ or Safari 7+"); + + // Set to false so skips to "manual" captioning player.isTextTracks = false; - // turn off native caption rendering to avoid double captions [doesn"t work in Safari 7; see patch below] + // Turn off native caption rendering to avoid double captions [doesn"t work in Safari 7; see patch below] track = {}; tracks = player.media.textTracks; for (j=0; j < tracks.length; j++) { @@ -519,9 +539,7 @@ // Rendering caption tracks - native support required - http://caniuse.com/webvtt if (player.isTextTracks) { - if (config.debug) { - console.log("textTracks supported"); - } + _log("textTracks supported"); _showCaptions(player); track = {}; @@ -542,9 +560,7 @@ } // Caption tracks not natively supported else { - if (config.debug) { - console.log("textTracks not supported so rendering captions manually"); - } + _log("textTracks not supported so rendering captions manually"); _showCaptions(player); // Render captions from array at appropriate time @@ -589,12 +605,10 @@ // Remove first element ("VTT") player.captions.shift(); - if (config.debug) { - console.log("Successfully loaded the caption file via ajax."); - } + _log("Successfully loaded the caption file via ajax."); } - else if (config.debug) { - console.error("There was a problem loading the caption file via ajax."); + else { + _log("There was a problem loading the caption file via ajax.", true); } } } @@ -607,10 +621,10 @@ // If Safari 7, removing track from DOM [see "turn off native caption rendering" above] if (player.browserName === "Safari" && player.browserMajorVersion === 7) { - if (config.debug) { - console.log("Safari 7 detected; removing track from DOM"); - } + _log("Safari 7 detected; removing track from DOM"); + tracks = player.media.getElementsByTagName("track"); + player.media.removeChild(tracks[0]); } } @@ -627,15 +641,17 @@ // Setup fullscreen function _setupFullscreen() { if(player.type === "video" && config.fullscreen.enabled) { - if(fullscreen.supportsFullScreen) { - if(config.debug) { - console.log("Fullscreen enabled"); - } + // Check for native support + var nativeSupport = fullscreen.supportsFullScreen; + if(nativeSupport || (config.fullscreen.fallback && !_inFrame())) { + _log((nativeSupport ? "Native" : "Fallback") + " fullscreen enabled"); + + // Add styling hook _toggleClass(player.container, config.classes.fullscreen.enabled, true); } - else if(config.debug) { - console.warn("Fullscreen not supported"); + else { + _log("Fullscreen not supported and fallback disabled."); } } } @@ -714,11 +730,51 @@ // Toggle fullscreen function _toggleFullscreen() { - if(!fullscreen.isFullScreen()) { - fullscreen.requestFullScreen(player.container); + // Check for native support + var nativeSupport = fullscreen.supportsFullScreen; + + // If it's a fullscreen change event, it's probably a native close + if(event.type === fullscreen.fullScreenEventName) { + config.fullscreen.active = fullscreen.isFullScreen(); + } + // If there's native support, use it + else if(nativeSupport) { + // Request fullscreen + if(!fullscreen.isFullScreen()) { + fullscreen.requestFullScreen(player.container); + } + // Bail from fullscreen + else { + fullscreen.cancelFullScreen(); + } + + // Check if we're actually full screen (it could fail) + config.fullscreen.active = fullscreen.isFullScreen(); } else { - fullscreen.cancelFullScreen(); + // Otherwise, it's a simple toggle + config.fullscreen.active = !config.fullscreen.active; + + // Bind/unbind escape key + if(config.fullscreen.active) { + _on(document, "keyup", _handleEscapeFullscreen); + document.body.style.overflow = "hidden"; + } + else { + _off(document, "keyup", _handleEscapeFullscreen); + document.body.style.overflow = ""; + } + } + + // Set class hook + _toggleClass(player.container, config.classes.fullscreen.active, config.fullscreen.active); + } + + // Bail from faux-fullscreen + function _handleEscapeFullscreen(event) { + // If it's a keypress and not escape, bail + if((event.which || event.charCode || event.keyCode) === 27 && config.fullscreen.active) { + _toggleFullscreen(); } } @@ -773,24 +829,6 @@ // Listen for events function _listeners() { - // Fullscreen - _on(player.buttons.fullscreen, "click", _toggleFullscreen); - - // Click video - if(player.type === "video" && config.click) { - _on(player.videoContainer, "click", function() { - if(player.media.paused) { - _play(); - } - else if(player.media.ended) { - _restart(); - } - else { - _pause(); - } - }); - } - // Play _on(player.buttons.play, "click", function() { _play(); @@ -825,6 +863,27 @@ _on(player.buttons.mute, "change", function() { _toggleMute(this.checked); }); + + // Fullscreen + _on(player.buttons.fullscreen, "click", _toggleFullscreen); + + // Handle user exiting fullscreen by escaping etc + _on(document, fullscreen.fullScreenEventName, _toggleFullscreen); + + // Click video + if(player.type === "video" && config.click) { + _on(player.videoContainer, "click", function() { + if(player.media.paused) { + _play(); + } + else if(player.media.ended) { + _restart(); + } + else { + _pause(); + } + }); + } // Duration _on(player.media, "timeupdate", function() { @@ -885,16 +944,12 @@ player.browserMajorVersion = player.browserInfo[1]; // Debug info - if(config.debug) { - console.log(player.browserName + " " + player.browserMajorVersion); - } + _log(player.browserName + " " + player.browserMajorVersion); // If IE8, stop customization (use fallback) // If IE9, stop customization (use native controls) if (player.browserName === "IE" && (player.browserMajorVersion === 8 || player.browserMajorVersion === 9) ) { - if(config.debug) { - console.error("Browser not suppported."); - } + _log("Browser not suppported.", true); return false; } diff --git a/assets/less/docs.less b/assets/less/docs.less index 7559f420..4c8baa50 100644 --- a/assets/less/docs.less +++ b/assets/less/docs.less @@ -130,8 +130,8 @@ a { .example-video .player { margin: 0 auto @padding-base; - &:fullscreen, - &-fullscreen { + &-fullscreen, + &.fullscreen-active { max-width: none; } } diff --git a/assets/less/plyr.less b/assets/less/plyr.less index 9a35a0a3..1c8a32d4 100644 --- a/assets/less/plyr.less +++ b/assets/less/plyr.less @@ -349,15 +349,15 @@ // Full screen mode &-fullscreen, - &:fullscreen { - position: absolute; + &.fullscreen-active { + position: fixed; top: 0; left: 0; right: 0; bottom: 0; height: 100%; width: 100%; - z-index: 999999; + z-index: 10000000; .player-video-wrapper { height: 100%; diff --git a/dist/css/docs.css b/dist/css/docs.css index 78b3c1a7..c649f70d 100644 --- a/dist/css/docs.css +++ b/dist/css/docs.css @@ -1 +1 @@ -/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}*,::after,::before{box-sizing:border-box}body{font-family:Avenir,"Helvetica Neue",Helvetica,Arial,sans-serif;background:#fff;line-height:1.5;text-align:center;color:#6D797F}h1,h2{letter-spacing:-.025em;color:#2E3C44;margin:0 0 10px;line-height:1.2;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}h1{font-size:64px;font-size:4rem;color:#3498DB}p,small{margin:0 0 20px}small{display:block;padding:0 10px;font-size:14px;font-size:.9rem}header{padding:20px;margin-bottom:20px}header p{font-size:18px;font-size:1.1rem}@media (min-width:560px){header{padding-top:60px;padding-bottom:60px}}section{padding-bottom:20px}@media (min-width:560px){section{padding-bottom:40px}}a{text-decoration:none;color:#3498db;border-bottom:1px solid currentColor;transition:all .3s ease}a:focus,a:hover{color:#000}a:focus{outline:#343f4a dotted thin;outline-offset:1px}.btn{display:inline-block;padding:10px 30px;background:#3498db;border:0;color:#fff;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-weight:600;border-radius:3px}.btn:focus,.btn:hover{color:#fff;background:#258cd1}.example-audio .player{max-width:480px}.example-video .player{max-width:1200px}.example-audio .player,.example-video .player{margin:0 auto 20px}.example-audio .player-fullscreen,.example-audio .player:-webkit-full-screen,.example-video .player-fullscreen,.example-video .player:-webkit-full-screen{max-width:none}.example-audio .player-fullscreen,.example-audio .player:-moz-full-screen,.example-video .player-fullscreen,.example-video .player:-moz-full-screen{max-width:none}.example-audio .player-fullscreen,.example-audio .player:-ms-fullscreen,.example-video .player-fullscreen,.example-video .player:-ms-fullscreen{max-width:none}.example-audio .player-fullscreen,.example-audio .player:fullscreen,.example-video .player-fullscreen,.example-video .player:fullscreen{max-width:none}@font-face{font-family:Avenir;src:url(../../assets/fonts/AvenirLTStd-Medium.woff2) format("woff2"),url(../../assets/fonts/AvenirLTStd-Medium.woff) format("woff"),url(../../assets/fonts/AvenirLTStd-Medium.ttf) format("truetype");font-style:normal;font-weight:400}@font-face{font-family:Avenir;src:url(../../assets/fonts/AvenirLTStd-Heavy.woff2) format("woff2"),url(../../assets/fonts/AvenirLTStd-Heavy.woff) format("woff"),url(../../assets/fonts/AvenirLTStd-Heavy.ttf) format("truetype");font-style:normal;font-weight:600} \ No newline at end of file +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}*,::after,::before{box-sizing:border-box}body{font-family:Avenir,"Helvetica Neue",Helvetica,Arial,sans-serif;background:#fff;line-height:1.5;text-align:center;color:#6D797F}h1,h2{letter-spacing:-.025em;color:#2E3C44;margin:0 0 10px;line-height:1.2;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}h1{font-size:64px;font-size:4rem;color:#3498DB}p,small{margin:0 0 20px}small{display:block;padding:0 10px;font-size:14px;font-size:.9rem}header{padding:20px;margin-bottom:20px}header p{font-size:18px;font-size:1.1rem}@media (min-width:560px){header{padding-top:60px;padding-bottom:60px}}section{padding-bottom:20px}@media (min-width:560px){section{padding-bottom:40px}}a{text-decoration:none;color:#3498db;border-bottom:1px solid currentColor;transition:all .3s ease}a:focus,a:hover{color:#000}a:focus{outline:#343f4a dotted thin;outline-offset:1px}.btn{display:inline-block;padding:10px 30px;background:#3498db;border:0;color:#fff;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-weight:600;border-radius:3px}.btn:focus,.btn:hover{color:#fff;background:#258cd1}.example-audio .player{max-width:480px}.example-video .player{max-width:1200px}.example-audio .player,.example-video .player{margin:0 auto 20px}.example-audio .player-fullscreen,.example-audio .player.fullscreen-active,.example-video .player-fullscreen,.example-video .player.fullscreen-active{max-width:none}@font-face{font-family:Avenir;src:url(../../assets/fonts/AvenirLTStd-Medium.woff2) format("woff2"),url(../../assets/fonts/AvenirLTStd-Medium.woff) format("woff"),url(../../assets/fonts/AvenirLTStd-Medium.ttf) format("truetype");font-style:normal;font-weight:400}@font-face{font-family:Avenir;src:url(../../assets/fonts/AvenirLTStd-Heavy.woff2) format("woff2"),url(../../assets/fonts/AvenirLTStd-Heavy.woff) format("woff"),url(../../assets/fonts/AvenirLTStd-Heavy.ttf) format("truetype");font-style:normal;font-weight:600} \ No newline at end of file diff --git a/dist/css/plyr.css b/dist/css/plyr.css index e972d869..297b0f7f 100644 --- a/dist/css/plyr.css +++ b/dist/css/plyr.css @@ -1 +1 @@ -.sr-only{position:absolute!important;clip:rect(1px,1px,1px,1px);padding:0!important;border:0!important;height:1px!important;width:1px!important;overflow:hidden}.player{position:relative;max-width:100%;min-width:290px;overflow:hidden;background:#000}.player,.player *,.player ::after,.player ::before{box-sizing:border-box}.player-video-wrapper{position:relative}.player video{width:100%;height:auto;vertical-align:middle}.player-captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;min-height:2.5em;color:#fff;font-size:16px;font-weight:600;text-shadow:-1px -1px 0 rgba(52,63,74,.5),1px -1px 0 rgba(52,63,74,.5),-1px 1px 0 rgba(52,63,74,.5),1px 1px 0 rgba(52,63,74,.5);text-align:center;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}@media (min-width:768px){.player-captions{font-size:24px}}.player.captions-active .player-captions{display:block}.player-controls{zoom:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:relative;padding:20px 10px 10px;background:#343f4a;line-height:1;text-align:center}.player-controls:after,.player-controls:before{content:"";display:table}.player-controls:after{clear:both}.player-controls-sound{display:block;margin:10px auto 0}@media (min-width:560px){.player-controls-playback{float:left}.player-controls-sound{float:right;margin-top:0}}.player-controls button,.player-controls input+label{display:inline-block;vertical-align:middle;margin:0 2px;padding:5px 10px;transition:background .3s ease;border-radius:3px;cursor:pointer}.player-controls button svg,.player-controls input+label svg{width:18px;height:18px;display:block;fill:currentColor;transition:fill .3s ease}.player-controls input+label,.player-controls input.inverted:checked+label{color:#565d64}.player-controls button,.player-controls input.inverted+label,.player-controls input:checked+label{color:#cbd0d3}.player-controls button{border:0;background:0 0;overflow:hidden}.player-controls button:focus,.player-controls input:focus+label{outline:#000 dotted thin;outline-offset:1px}.player-controls button:focus svg,.player-controls input:focus+label svg{fill:#fff}.player-controls button:hover,.player-controls input+label:hover{background:#3498db}.player-controls button:hover svg,.player-controls input+label:hover svg{fill:#fff}.player-controls .icon-exit-fullscreen,.player-controls .icon-muted{display:none}.player-controls .player-time{display:inline-block;vertical-align:middle;margin-left:10px;color:#fff;font-weight:600;font-size:14px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.player-progress{position:absolute;top:0;left:0;right:0;width:100%;height:10px;margin:0;vertical-align:top}.player-progress[value]{-webkit-appearance:none;border:none;background:#565d64;cursor:pointer;color:#3498db}.player-progress[value]::-webkit-progress-bar{background:#565d64}.player-progress[value]::-webkit-progress-value{background:currentColor}.player-progress[value]::-moz-progress-bar{background:currentColor}.player-controls [data-player=pause],.player.playing .player-controls [data-player=play]{display:none}.player.playing .player-controls [data-player=pause]{display:inline-block}.player.muted .player-controls .icon-muted{display:block}.player.muted .player-controls .icon-muted+svg{display:none}.player-volume{vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;width:100px;margin:0 10px 0 0;padding:0;cursor:pointer;background:0 0}.player-volume::-webkit-slider-runnable-track{height:6px;background:#565d64;border:0;border-radius:3px}.player-volume::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-3px;height:12px;width:12px;background:#cbd0d3;border:0;border-radius:6px;transition:background .3s ease;cursor:ew-resize}.player-volume::-moz-range-track{height:6px;background:#565d64;border:0;border-radius:3px}.player-volume::-moz-range-thumb{height:12px;width:12px;background:#cbd0d3;border:0;border-radius:6px;transition:background .3s ease;cursor:ew-resize}.player-volume::-ms-track{height:6px;background:0 0;border-color:transparent;border-width:3px 0;color:transparent}.player-volume::-ms-fill-lower,.player-volume::-ms-fill-upper{height:6px;background:#565d64;border:0;border-radius:3px}.player-volume::-ms-thumb{height:12px;width:12px;background:#cbd0d3;border:0;border-radius:6px;transition:background .3s ease;cursor:ew-resize}.player-volume:focus{outline:0}.player-volume:focus::-webkit-slider-thumb{background:#3498db}.player-volume:focus::-moz-range-thumb{background:#3498db}.player-volume:focus::-ms-thumb{background:#3498db}.player-fullscreen,.player:-webkit-full-screen{position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:999999}.player-fullscreen,.player:-moz-full-screen{position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:999999}.player-fullscreen,.player:-ms-fullscreen{position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:999999}.player-fullscreen,.player:fullscreen{position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:999999}.player-fullscreen .player-video-wrapper,.player:-webkit-full-screen .player-video-wrapper{height:100%;width:100%}.player-fullscreen .player-video-wrapper,.player:-moz-full-screen .player-video-wrapper{height:100%;width:100%}.player-fullscreen .player-video-wrapper,.player:-ms-fullscreen .player-video-wrapper{height:100%;width:100%}.player-fullscreen .player-video-wrapper,.player:fullscreen .player-video-wrapper{height:100%;width:100%}.player-fullscreen .player-video-wrapper video,.player:-webkit-full-screen .player-video-wrapper video{height:100%}.player-fullscreen .player-video-wrapper video,.player:-moz-full-screen .player-video-wrapper video{height:100%}.player-fullscreen .player-video-wrapper video,.player:-ms-fullscreen .player-video-wrapper video{height:100%}.player-fullscreen .player-video-wrapper video,.player:fullscreen .player-video-wrapper video{height:100%}.player-fullscreen .player-video-wrapper .player-captions,.player:-webkit-full-screen .player-video-wrapper .player-captions{top:auto;bottom:90px}.player-fullscreen .player-video-wrapper .player-captions,.player:-moz-full-screen .player-video-wrapper .player-captions{top:auto;bottom:90px}.player-fullscreen .player-video-wrapper .player-captions,.player:-ms-fullscreen .player-video-wrapper .player-captions{top:auto;bottom:90px}.player-fullscreen .player-video-wrapper .player-captions,.player:fullscreen .player-video-wrapper .player-captions{top:auto;bottom:90px}@media (min-width:560px) and (max-width:767px){.player-fullscreen .player-video-wrapper .player-captions,.player:-webkit-full-screen .player-video-wrapper .player-captions{bottom:60px}.player-fullscreen .player-video-wrapper .player-captions,.player:-moz-full-screen .player-video-wrapper .player-captions{bottom:60px}.player-fullscreen .player-video-wrapper .player-captions,.player:-ms-fullscreen .player-video-wrapper .player-captions{bottom:60px}.player-fullscreen .player-video-wrapper .player-captions,.player:fullscreen .player-video-wrapper .player-captions{bottom:60px}}@media (min-width:768px){.player-fullscreen .player-video-wrapper .player-captions,.player:-webkit-full-screen .player-video-wrapper .player-captions{bottom:80px}.player-fullscreen .player-video-wrapper .player-captions,.player:-moz-full-screen .player-video-wrapper .player-captions{bottom:80px}.player-fullscreen .player-video-wrapper .player-captions,.player:-ms-fullscreen .player-video-wrapper .player-captions{bottom:80px}.player-fullscreen .player-video-wrapper .player-captions,.player:fullscreen .player-video-wrapper .player-captions{bottom:80px}}.player-fullscreen .player-controls,.player:-webkit-full-screen .player-controls{position:absolute;bottom:0;left:0;right:0}.player-fullscreen .player-controls,.player:-moz-full-screen .player-controls{position:absolute;bottom:0;left:0;right:0}.player-fullscreen .player-controls,.player:-ms-fullscreen .player-controls{position:absolute;bottom:0;left:0;right:0}.player-fullscreen .player-controls,.player:fullscreen .player-controls{position:absolute;bottom:0;left:0;right:0}.player-fullscreen .player-controls .icon-exit-fullscreen,.player:-webkit-full-screen .player-controls .icon-exit-fullscreen{display:block}.player-fullscreen .player-controls .icon-exit-fullscreen,.player:-moz-full-screen .player-controls .icon-exit-fullscreen{display:block}.player-fullscreen .player-controls .icon-exit-fullscreen,.player:-ms-fullscreen .player-controls .icon-exit-fullscreen{display:block}.player-fullscreen .player-controls .icon-exit-fullscreen,.player:fullscreen .player-controls .icon-exit-fullscreen{display:block}.player-fullscreen .player-controls .icon-exit-fullscreen+svg,.player:-webkit-full-screen .player-controls .icon-exit-fullscreen+svg{display:none}.player-fullscreen .player-controls .icon-exit-fullscreen+svg,.player:-moz-full-screen .player-controls .icon-exit-fullscreen+svg{display:none}.player-fullscreen .player-controls .icon-exit-fullscreen+svg,.player:-ms-fullscreen .player-controls .icon-exit-fullscreen+svg{display:none}.player-fullscreen .player-controls .icon-exit-fullscreen+svg,.player:fullscreen .player-controls .icon-exit-fullscreen+svg{display:none}.player [data-player=captions],.player [data-player=captions]+label,.player [data-player=fullscreen],.player [data-player=fullscreen]+label{display:none}.player.captions-enabled [data-player=captions],.player.captions-enabled [data-player=captions]+label,.player.fullscreen-enabled [data-player=fullscreen],.player.fullscreen-enabled [data-player=fullscreen]+label{display:inline-block}.player-fullscreen [data-player=fullscreen],.player-fullscreen [data-player=fullscreen]+label{display:none!important} \ No newline at end of file +.sr-only{position:absolute!important;clip:rect(1px,1px,1px,1px);padding:0!important;border:0!important;height:1px!important;width:1px!important;overflow:hidden}.player{position:relative;max-width:100%;min-width:290px;overflow:hidden;background:#000}.player,.player *,.player ::after,.player ::before{box-sizing:border-box}.player-video-wrapper{position:relative}.player video{width:100%;height:auto;vertical-align:middle}.player-captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px;min-height:2.5em;color:#fff;font-size:16px;font-weight:600;text-shadow:-1px -1px 0 rgba(52,63,74,.5),1px -1px 0 rgba(52,63,74,.5),-1px 1px 0 rgba(52,63,74,.5),1px 1px 0 rgba(52,63,74,.5);text-align:center;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}@media (min-width:768px){.player-captions{font-size:24px}}.player.captions-active .player-captions{display:block}.player-controls{zoom:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:relative;padding:20px 10px 10px;background:#343f4a;line-height:1;text-align:center}.player-controls:after,.player-controls:before{content:"";display:table}.player-controls:after{clear:both}.player-controls-sound{display:block;margin:10px auto 0}@media (min-width:560px){.player-controls-playback{float:left}.player-controls-sound{float:right;margin-top:0}}.player-controls button,.player-controls input+label{display:inline-block;vertical-align:middle;margin:0 2px;padding:5px 10px;transition:background .3s ease;border-radius:3px;cursor:pointer}.player-controls button svg,.player-controls input+label svg{width:18px;height:18px;display:block;fill:currentColor;transition:fill .3s ease}.player-controls input+label,.player-controls input.inverted:checked+label{color:#565d64}.player-controls button,.player-controls input.inverted+label,.player-controls input:checked+label{color:#cbd0d3}.player-controls button{border:0;background:0 0;overflow:hidden}.player-controls button:focus,.player-controls input:focus+label{outline:#000 dotted thin;outline-offset:1px}.player-controls button:focus svg,.player-controls input:focus+label svg{fill:#fff}.player-controls button:hover,.player-controls input+label:hover{background:#3498db}.player-controls button:hover svg,.player-controls input+label:hover svg{fill:#fff}.player-controls .icon-exit-fullscreen,.player-controls .icon-muted{display:none}.player-controls .player-time{display:inline-block;vertical-align:middle;margin-left:10px;color:#fff;font-weight:600;font-size:14px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.player-progress{position:absolute;top:0;left:0;right:0;width:100%;height:10px;margin:0;vertical-align:top}.player-progress[value]{-webkit-appearance:none;border:none;background:#565d64;cursor:pointer;color:#3498db}.player-progress[value]::-webkit-progress-bar{background:#565d64}.player-progress[value]::-webkit-progress-value{background:currentColor}.player-progress[value]::-moz-progress-bar{background:currentColor}.player-controls [data-player=pause],.player.playing .player-controls [data-player=play]{display:none}.player.playing .player-controls [data-player=pause]{display:inline-block}.player.muted .player-controls .icon-muted{display:block}.player.muted .player-controls .icon-muted+svg{display:none}.player-volume{vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;width:100px;margin:0 10px 0 0;padding:0;cursor:pointer;background:0 0}.player-volume::-webkit-slider-runnable-track{height:6px;background:#565d64;border:0;border-radius:3px}.player-volume::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-3px;height:12px;width:12px;background:#cbd0d3;border:0;border-radius:6px;transition:background .3s ease;cursor:ew-resize}.player-volume::-moz-range-track{height:6px;background:#565d64;border:0;border-radius:3px}.player-volume::-moz-range-thumb{height:12px;width:12px;background:#cbd0d3;border:0;border-radius:6px;transition:background .3s ease;cursor:ew-resize}.player-volume::-ms-track{height:6px;background:0 0;border-color:transparent;border-width:3px 0;color:transparent}.player-volume::-ms-fill-lower,.player-volume::-ms-fill-upper{height:6px;background:#565d64;border:0;border-radius:3px}.player-volume::-ms-thumb{height:12px;width:12px;background:#cbd0d3;border:0;border-radius:6px;transition:background .3s ease;cursor:ew-resize}.player-volume:focus{outline:0}.player-volume:focus::-webkit-slider-thumb{background:#3498db}.player-volume:focus::-moz-range-thumb{background:#3498db}.player-volume:focus::-ms-thumb{background:#3498db}.player-fullscreen,.player.fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000}.player-fullscreen .player-video-wrapper,.player.fullscreen-active .player-video-wrapper{height:100%;width:100%}.player-fullscreen .player-video-wrapper video,.player.fullscreen-active .player-video-wrapper video{height:100%}.player-fullscreen .player-video-wrapper .player-captions,.player.fullscreen-active .player-video-wrapper .player-captions{top:auto;bottom:90px}@media (min-width:560px) and (max-width:767px){.player-fullscreen .player-video-wrapper .player-captions,.player.fullscreen-active .player-video-wrapper .player-captions{bottom:60px}}@media (min-width:768px){.player-fullscreen .player-video-wrapper .player-captions,.player.fullscreen-active .player-video-wrapper .player-captions{bottom:80px}}.player-fullscreen .player-controls,.player.fullscreen-active .player-controls{position:absolute;bottom:0;left:0;right:0}.player-fullscreen .player-controls .icon-exit-fullscreen,.player.fullscreen-active .player-controls .icon-exit-fullscreen{display:block}.player [data-player=captions],.player [data-player=captions]+label,.player [data-player=fullscreen],.player [data-player=fullscreen]+label,.player-fullscreen .player-controls .icon-exit-fullscreen+svg,.player.fullscreen-active .player-controls .icon-exit-fullscreen+svg{display:none}.player.captions-enabled [data-player=captions],.player.captions-enabled [data-player=captions]+label,.player.fullscreen-enabled [data-player=fullscreen],.player.fullscreen-enabled [data-player=fullscreen]+label{display:inline-block}.player-fullscreen [data-player=fullscreen],.player-fullscreen [data-player=fullscreen]+label{display:none!important} \ No newline at end of file diff --git a/dist/js/plyr.js b/dist/js/plyr.js index 563cb5a7..bea6bdd3 100644 --- a/dist/js/plyr.js +++ b/dist/js/plyr.js @@ -1 +1 @@ -!function(e){"use strict";function t(){var e,t,n,r=navigator.userAgent,s=navigator.appName,o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10);return-1!==navigator.appVersion.indexOf("Windows NT")&&-1!==navigator.appVersion.indexOf("rv:11")?(s="IE",o="11;"):-1!==(t=r.indexOf("MSIE"))?(s="IE",o=r.substring(t+5)):-1!==(t=r.indexOf("Chrome"))?(s="Chrome",o=r.substring(t+7)):-1!==(t=r.indexOf("Safari"))?(s="Safari",o=r.substring(t+7),-1!==(t=r.indexOf("Version"))&&(o=r.substring(t+8))):-1!==(t=r.indexOf("Firefox"))?(s="Firefox",o=r.substring(t+8)):(e=r.lastIndexOf(" ")+1)<(t=r.lastIndexOf("/"))&&(s=r.substring(e,t),o=r.substring(t+1),s.toLowerCase()==s.toUpperCase()&&(s=navigator.appName)),-1!==(n=o.indexOf(";"))&&(o=o.substring(0,n)),-1!==(n=o.indexOf(" "))&&(o=o.substring(0,n)),i=parseInt(""+o,10),isNaN(i)&&(o=""+parseFloat(navigator.appVersion),i=parseInt(navigator.appVersion,10)),[s,i]}function n(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function r(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],o=s.parentNode,i=s.nextSibling;r.appendChild(s),i?o.insertBefore(r,i):o.appendChild(r)}}function s(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function o(e,t,n){e.addEventListener(t,n,!1)}function i(e){var t=l().isFullScreen()?{x:0,y:0}:a(e.currentTarget);return{x:e.clientX-t.x,y:e.clientY-t.y}}function a(e){for(var t=0,n=0;e;)t+=e.offsetLeft-e.scrollLeft+e.clientLeft,n+=e.offsetTop-e.scrollTop+e.clientTop,e=e.offsetParent;return{x:t,y:n}}function c(e,t){for(var n in t)t[n]&&t[n].constructor&&t[n].constructor===Object?(e[n]=e[n]||{},c(e[n],t[n])):e[n]=t[n];return e}function l(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},t="webkit moz o ms khtml".split(" ");if("undefined"!=typeof document.cancelFullScreen)e.supportsFullScreen=!0;else for(var n=0,r=t.length;r>n;n++){if(e.prefix=t[n],"undefined"!=typeof document[e.prefix+"CancelFullScreen"]){e.supportsFullScreen=!0;break}if("undefined"!=typeof document.msExitFullscreen&&document.msFullscreenEnabled){e.prefix="ms",e.supportsFullScreen=!0;break}}return"webkit"===e.prefix&&navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)&&(e.supportsFullScreen=!1),e.supportsFullScreen&&(e.fullScreenEventName=e.prefix+"fullscreenchange",e.isFullScreen=function(){switch(this.prefix){case"":return document.fullScreen;case"webkit":return document.webkitIsFullScreen;case"ms":return null!==document.msFullscreenElement;default:return document[this.prefix+"FullScreen"]}},e.requestFullScreen=function(e){return""===this.prefix?e.requestFullScreen():e[this.prefix+("ms"==this.prefix?"RequestFullscreen":"RequestFullScreen")]("webkit"===this.prefix?e.ALLOW_KEYBOARD_INPUT:null)},e.cancelFullScreen=function(){return""===this.prefix?document.cancelFullScreen():document[this.prefix+("ms"==this.prefix?"ExitFullscreen":"CancelFullScreen")]()},e.element=function(){return""===this.prefix?document.fullscreenElement:document[this.prefix+"FullscreenElement"]}),e}function u(e){function a(){for(j.subcount=0;f(j.captions[j.subcount][0])j.captions.length-1){j.subcount=j.captions.length-1;break}}function c(){s(j.container,p.classes.captions.enabled,!0),p.captions.defaultActive&&(s(j.container,p.classes.captions.active,!0),j.buttons.captions.setAttribute("checked","checked"))}function u(e){var t=[];return t=e.split(" --> "),m(t[0])}function f(e){var t=[];return t=e.split(" --> "),m(t[1])}function m(e){if(null===e||void 0===e)return 0;var t,n=[],r=[];return n=e.split(","),r=n[0].split(":"),t=Math.floor(60*r[0]*60)+Math.floor(60*r[1])+Math.floor(r[2])}function b(e){return j.container.querySelectorAll(e)}function v(e){return b(e)[0]}function g(){p.debug&&console.log("Injecting custom controls");var e=p.html;e=n(e,"{aria-label}",p.playAriaLabel),e=n(e,"{id}",j.random),j.container.insertAdjacentHTML("beforeend",e)}function y(){j.controls=v(p.selectors.controls),j.buttons={},j.buttons.play=v(p.selectors.buttons.play),j.buttons.pause=v(p.selectors.buttons.pause),j.buttons.restart=v(p.selectors.buttons.restart),j.buttons.rewind=v(p.selectors.buttons.rewind),j.buttons.forward=v(p.selectors.buttons.forward),j.buttons.mute=v(p.selectors.buttons.mute),j.buttons.captions=v(p.selectors.buttons.captions),j.buttons.fullscreen=v(p.selectors.buttons.fullscreen),j.progress={},j.progress.bar=v(p.selectors.progress),j.progress.text=j.progress.bar.getElementsByTagName("span")[0],j.volume=v(p.selectors.buttons.volume),j.duration=v(p.selectors.duration),j.seekTime=b(p.selectors.seekTime)}function x(){if(j.media=j.container.querySelectorAll("audio, video")[0],!j.media)return console.error("No audio or video element found!"),!1;if(j.media.removeAttribute("controls"),j.type="video"==j.media.tagName.toLowerCase()?"video":"audio",s(j.container,p.classes[j.type],!0),s(j.container,p.classes.stopped,null===j.media.getAttribute("autoplay")),"video"===j.type){var e=document.createElement("div");e.setAttribute("class",p.classes.videoWrapper),r(j.media,e),j.videoContainer=e}}function h(){if("video"===j.type){j.videoContainer.insertAdjacentHTML("afterbegin","
"),j.captionsContainer=v(p.selectors.captions),j.isTextTracks=!1,j.media.textTracks&&(j.isTextTracks=!0);for(var e,t="",n=j.media.childNodes,r=0;r=31||"Safari"===j.browserName&&j.browserMajorVersion>=7)for(p.debug&&console.log("Detected IE 10/11 or Firefox 31+ or Safari 7+"),j.isTextTracks=!1,l={},i=j.media.textTracks,a=0;au(j.captions[j.subcount][0])&&j.media.currentTime.toFixed(1)f(j.captions[j.subcount][0])&&j.subcountt?0:t,j.isTextTracks||"video"!==j.type||a(j)}function N(e){"undefined"==typeof e&&(e=p.seekInterval);var t=j.media.currentTime+e;j.media.currentTime=t>j.media.duration?j.media.duration:t,j.isTextTracks||"video"!==j.type||a(j)}function M(){d.isFullScreen()?d.cancelFullScreen():d.requestFullScreen(j.container)}function C(e){"undefined"==typeof e&&(e=p.volume),e>10&&(e=10),j.volume.value=e,j.media.volume=parseFloat(e/10),A()}function E(e){"undefined"==typeof active&&(e=!j.media.muted,j.buttons.mute.checked=e),j.media.muted=e,A()}function L(e){"undefined"==typeof e&&(e=-1===j.container.className.indexOf(p.classes.captions.active),j.buttons.captions.checked=e),e?s(j.container,p.classes.captions.active,!0):s(j.container,p.classes.captions.active)}function A(){s(j.container,p.classes.muted,0===j.media.volume||j.media.muted)}function V(){o(j.buttons.fullscreen,"click",M),"video"===j.type&&p.click&&o(j.videoContainer,"click",function(){j.media.paused?w():j.media.ended?S():F()}),o(j.buttons.play,"click",function(){w(),j.buttons.pause.focus()}),o(j.buttons.pause,"click",function(){F(),j.buttons.play.focus()}),o(j.buttons.restart,"click",S),o(j.buttons.rewind,"click",function(){I(p.seekInterval)}),o(j.buttons.forward,"click",function(){N(p.seekInterval)}),o(j.volume,"change",function(){C(this.value)}),o(j.buttons.mute,"change",function(){E(this.checked)}),o(j.media,"timeupdate",function(){j.secs=parseInt(j.media.currentTime%60),j.mins=parseInt(j.media.currentTime/60%60),j.secs=("0"+j.secs).slice(-2),j.mins=("0"+j.mins).slice(-2),j.duration.innerHTML=j.mins+":"+j.secs}),o(j.media,"timeupdate",function(){j.percent=100/j.media.duration*j.media.currentTime,j.percent>0&&(j.progress.bar.value=j.percent,j.progress.text.innerHTML=j.percent)}),o(j.progress.bar,"click",function(e){j.pos=i(e).x/this.offsetWidth,j.media.currentTime=j.pos*j.media.duration,j.isTextTracks||"video"!==j.type||a(j)}),o(j.buttons.captions,"click",function(){L(this.checked)}),o(j.media,"ended",function(){"video"===j.type&&(j.captionsContainer.innerHTML=""),s(j.container,p.classes.stopped,!0),s(j.container,p.classes.playing)})}function O(){return d=l(),j.browserInfo=t(),j.browserName=j.browserInfo[0],j.browserMajorVersion=j.browserInfo[1],p.debug&&console.log(j.browserName+" "+j.browserMajorVersion),"IE"!==j.browserName||8!==j.browserMajorVersion&&9!==j.browserMajorVersion?(p.playAriaLabel="undefined"!=typeof p.title&&p.title.length?"Play "+p.title:"Play",x(),j.random=Math.floor(1e4*Math.random()),g(),y(),C(p.volume),T(),h(),k(),V(),void 0):(p.debug&&console.error("Browser not suppported."),!1)}var j=this;return j.container=e,O(),{media:j.media,play:w,pause:F,restart:S,rewind:I,forward:N,setVolume:C,toggleMute:E,toggleCaptions:L}}var d,p,f={enabled:!0,debug:!1,seekInterval:10,volume:5,click:!0,selectors:{container:".player",controls:".player-controls",buttons:{play:"[data-player='play']",pause:"[data-player='pause']",restart:"[data-player='restart']",rewind:"[data-player='rewind']",forward:"[data-player='fast-forward']",mute:"[data-player='mute']",volume:"[data-player='volume']",captions:"[data-player='captions']",fullscreen:"[data-player='fullscreen']"},progress:".player-progress",captions:".player-captions",duration:".player-duration",seekTime:".player-seek-time"},classes:{video:"player-video",videoWrapper:"player-video-wrapper",audio:"player-audio",stopped:"stopped",playing:"playing",muted:"muted",captions:{active:"captions-active",enabled:"captions-enabled"},fullscreen:{enabled:"fullscreen-enabled"}},captions:{defaultActive:!1},fullscreen:{enabled:!0}};e.setup=function(e){if(p=c(f,e),!p.enabled)return!1;for(var t=document.querySelectorAll(p.selectors.container),n=[],r=t.length-1;r>=0;r--){var s=t[r];"undefined"==typeof s.plyr&&(s.plyr=new u(s)),n.push(s.plyr)}return n}}(this.plyr=this.plyr||{}); \ No newline at end of file +!function(e){"use strict";function t(e,t){m.debug&&window.console&&console[t?"error":"log"](e)}function n(){var e,t,n,r=navigator.userAgent,s=navigator.appName,i=""+parseFloat(navigator.appVersion),a=parseInt(navigator.appVersion,10);return-1!==navigator.appVersion.indexOf("Windows NT")&&-1!==navigator.appVersion.indexOf("rv:11")?(s="IE",i="11;"):-1!==(t=r.indexOf("MSIE"))?(s="IE",i=r.substring(t+5)):-1!==(t=r.indexOf("Chrome"))?(s="Chrome",i=r.substring(t+7)):-1!==(t=r.indexOf("Safari"))?(s="Safari",i=r.substring(t+7),-1!==(t=r.indexOf("Version"))&&(i=r.substring(t+8))):-1!==(t=r.indexOf("Firefox"))?(s="Firefox",i=r.substring(t+8)):(e=r.lastIndexOf(" ")+1)<(t=r.lastIndexOf("/"))&&(s=r.substring(e,t),i=r.substring(t+1),s.toLowerCase()==s.toUpperCase()&&(s=navigator.appName)),-1!==(n=i.indexOf(";"))&&(i=i.substring(0,n)),-1!==(n=i.indexOf(" "))&&(i=i.substring(0,n)),a=parseInt(""+i,10),isNaN(a)&&(i=""+parseFloat(navigator.appVersion),a=parseInt(navigator.appVersion,10)),[s,a]}function r(e,t,n){return e.replace(new RegExp(t.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1"),"g"),n)}function s(e,t){e.length||(e=[e]);for(var n=e.length-1;n>=0;n--){var r=n>0?t.cloneNode(!0):t,s=e[n],i=s.parentNode,a=s.nextSibling;r.appendChild(s),a?i.insertBefore(r,a):i.appendChild(r)}}function i(e,t,n){if(e)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(/\s+/g," ").replace(" "+t+" ","");e.className=r+(n?" "+t:"")}}function a(e,t,n){e.addEventListener(t,n,!1)}function o(e,t,n){e.removeEventListener(t,n,!1)}function c(e){var t=d().isFullScreen()?{x:0,y:0}:l(e.currentTarget);return{x:e.clientX-t.x,y:e.clientY-t.y}}function l(e){for(var t=0,n=0;e;)t+=e.offsetLeft-e.scrollLeft+e.clientLeft,n+=e.offsetTop-e.scrollTop+e.clientTop,e=e.offsetParent;return{x:t,y:n}}function u(e,t){for(var n in t)t[n]&&t[n].constructor&&t[n].constructor===Object?(e[n]=e[n]||{},u(e[n],t[n])):e[n]=t[n];return e}function d(){var e={supportsFullScreen:!1,isFullScreen:function(){return!1},requestFullScreen:function(){},cancelFullScreen:function(){},fullScreenEventName:"",element:null,prefix:""},t="webkit moz o ms khtml".split(" ");if("undefined"!=typeof document.cancelFullScreen)e.supportsFullScreen=!0;else for(var n=0,r=t.length;r>n;n++){if(e.prefix=t[n],"undefined"!=typeof document[e.prefix+"CancelFullScreen"]){e.supportsFullScreen=!0;break}if("undefined"!=typeof document.msExitFullscreen&&document.msFullscreenEnabled){e.prefix="ms",e.supportsFullScreen=!0;break}}return"webkit"===e.prefix&&navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)&&(e.supportsFullScreen=!1),e.supportsFullScreen&&(e.fullScreenEventName="ms"==e.prefix?"MSFullscreenChange":e.prefix+"fullscreenchange",e.isFullScreen=function(){switch(this.prefix){case"":return document.fullScreen;case"webkit":return document.webkitIsFullScreen;case"ms":return null!==document.msFullscreenElement;default:return document[this.prefix+"FullScreen"]}},e.requestFullScreen=function(e){return""===this.prefix?e.requestFullScreen():e[this.prefix+("ms"==this.prefix?"RequestFullscreen":"RequestFullScreen")]("webkit"===this.prefix?e.ALLOW_KEYBOARD_INPUT:null)},e.cancelFullScreen=function(){return""===this.prefix?document.cancelFullScreen():document[this.prefix+("ms"==this.prefix?"ExitFullscreen":"CancelFullScreen")]()},e.element=function(){return""===this.prefix?document.fullscreenElement:document[this.prefix+"FullscreenElement"]}),e}function p(e){function l(){for(B.subcount=0;v(B.captions[B.subcount][0])B.captions.length-1){B.subcount=B.captions.length-1;break}}function u(){i(B.container,m.classes.captions.enabled,!0),m.captions.defaultActive&&(i(B.container,m.classes.captions.active,!0),B.buttons.captions.setAttribute("checked","checked"))}function p(e){var t=[];return t=e.split(" --> "),b(t[0])}function v(e){var t=[];return t=e.split(" --> "),b(t[1])}function b(e){if(null===e||void 0===e)return 0;var t,n=[],r=[];return n=e.split(","),r=n[0].split(":"),t=Math.floor(60*r[0]*60)+Math.floor(60*r[1])+Math.floor(r[2])}function y(e){return B.container.querySelectorAll(e)}function g(e){return y(e)[0]}function h(){try{return window.self!==window.top}catch(e){return!0}}function x(){t("Injecting custom controls");var e=m.html;e=r(e,"{aria-label}",m.playAriaLabel),e=r(e,"{id}",B.random),B.container.insertAdjacentHTML("beforeend",e)}function k(){B.controls=g(m.selectors.controls),B.buttons={},B.buttons.play=g(m.selectors.buttons.play),B.buttons.pause=g(m.selectors.buttons.pause),B.buttons.restart=g(m.selectors.buttons.restart),B.buttons.rewind=g(m.selectors.buttons.rewind),B.buttons.forward=g(m.selectors.buttons.forward),B.buttons.mute=g(m.selectors.buttons.mute),B.buttons.captions=g(m.selectors.buttons.captions),B.buttons.fullscreen=g(m.selectors.buttons.fullscreen),B.progress={},B.progress.bar=g(m.selectors.progress),B.progress.text=B.progress.bar.getElementsByTagName("span")[0],B.volume=g(m.selectors.buttons.volume),B.duration=g(m.selectors.duration),B.seekTime=y(m.selectors.seekTime)}function T(){if(B.media=B.container.querySelectorAll("audio, video")[0],!B.media)return t("No audio or video element found!",!0),!1;if(B.media.removeAttribute("controls"),B.type="video"==B.media.tagName.toLowerCase()?"video":"audio",i(B.container,m.classes[B.type],!0),i(B.container,m.classes.stopped,null===B.media.getAttribute("autoplay")),"video"===B.type){var e=document.createElement("div");e.setAttribute("class",m.classes.videoWrapper),s(B.media,e),B.videoContainer=e}}function w(){if("video"===B.type){B.videoContainer.insertAdjacentHTML("afterbegin","
"),B.captionsContainer=g(m.selectors.captions),B.isTextTracks=!1,B.media.textTracks&&(B.isTextTracks=!0);for(var e,n="",r=B.media.childNodes,s=0;s=31||"Safari"===B.browserName&&B.browserMajorVersion>=7)for(t("Detected IE 10/11 or Firefox 31+ or Safari 7+"),B.isTextTracks=!1,l={},o=B.media.textTracks,c=0;cp(B.captions[B.subcount][0])&&B.media.currentTime.toFixed(1)v(B.captions[B.subcount][0])&&B.subcountt?0:t,B.isTextTracks||"video"!==B.type||l(B)}function E(e){"undefined"==typeof e&&(e=m.seekInterval);var t=B.media.currentTime+e;B.media.currentTime=t>B.media.duration?B.media.duration:t,B.isTextTracks||"video"!==B.type||l(B)}function L(){var e=f.supportsFullScreen;event.type===f.fullScreenEventName?m.fullscreen.active=f.isFullScreen():e?(f.isFullScreen()?f.cancelFullScreen():f.requestFullScreen(B.container),m.fullscreen.active=f.isFullScreen()):(m.fullscreen.active=!m.fullscreen.active,m.fullscreen.active?(a(document,"keyup",A),document.body.style.overflow="hidden"):(o(document,"keyup",A),document.body.style.overflow="")),i(B.container,m.classes.fullscreen.active,m.fullscreen.active)}function A(e){27===(e.which||e.charCode||e.keyCode)&&m.fullscreen.active&&L()}function V(e){"undefined"==typeof e&&(e=m.volume),e>10&&(e=10),B.volume.value=e,B.media.volume=parseFloat(e/10),q()}function O(e){"undefined"==typeof active&&(e=!B.media.muted,B.buttons.mute.checked=e),B.media.muted=e,q()}function j(e){"undefined"==typeof e&&(e=-1===B.container.className.indexOf(m.classes.captions.active),B.buttons.captions.checked=e),e?i(B.container,m.classes.captions.active,!0):i(B.container,m.classes.captions.active)}function q(){i(B.container,m.classes.muted,0===B.media.volume||B.media.muted)}function H(){a(B.buttons.play,"click",function(){N(),B.buttons.pause.focus()}),a(B.buttons.pause,"click",function(){C(),B.buttons.play.focus()}),a(B.buttons.restart,"click",I),a(B.buttons.rewind,"click",function(){M(m.seekInterval)}),a(B.buttons.forward,"click",function(){E(m.seekInterval)}),a(B.volume,"change",function(){V(this.value)}),a(B.buttons.mute,"change",function(){O(this.checked)}),a(B.buttons.fullscreen,"click",L),a(document,f.fullScreenEventName,L),"video"===B.type&&m.click&&a(B.videoContainer,"click",function(){B.media.paused?N():B.media.ended?I():C()}),a(B.media,"timeupdate",function(){B.secs=parseInt(B.media.currentTime%60),B.mins=parseInt(B.media.currentTime/60%60),B.secs=("0"+B.secs).slice(-2),B.mins=("0"+B.mins).slice(-2),B.duration.innerHTML=B.mins+":"+B.secs}),a(B.media,"timeupdate",function(){B.percent=100/B.media.duration*B.media.currentTime,B.percent>0&&(B.progress.bar.value=B.percent,B.progress.text.innerHTML=B.percent)}),a(B.progress.bar,"click",function(e){B.pos=c(e).x/this.offsetWidth,B.media.currentTime=B.pos*B.media.duration,B.isTextTracks||"video"!==B.type||l(B)}),a(B.buttons.captions,"click",function(){j(this.checked)}),a(B.media,"ended",function(){"video"===B.type&&(B.captionsContainer.innerHTML=""),i(B.container,m.classes.stopped,!0),i(B.container,m.classes.playing)})}function R(){return f=d(),B.browserInfo=n(),B.browserName=B.browserInfo[0],B.browserMajorVersion=B.browserInfo[1],t(B.browserName+" "+B.browserMajorVersion),"IE"!==B.browserName||8!==B.browserMajorVersion&&9!==B.browserMajorVersion?(m.playAriaLabel="undefined"!=typeof m.title&&m.title.length?"Play "+m.title:"Play",T(),B.random=Math.floor(1e4*Math.random()),x(),k(),V(m.volume),S(),w(),F(),H(),void 0):(t("Browser not suppported.",!0),!1)}var B=this;return B.container=e,R(),{media:B.media,play:N,pause:C,restart:I,rewind:M,forward:E,setVolume:V,toggleMute:O,toggleCaptions:j}}var f,m,v={enabled:!0,debug:!1,seekInterval:10,volume:5,click:!0,selectors:{container:".player",controls:".player-controls",buttons:{play:"[data-player='play']",pause:"[data-player='pause']",restart:"[data-player='restart']",rewind:"[data-player='rewind']",forward:"[data-player='fast-forward']",mute:"[data-player='mute']",volume:"[data-player='volume']",captions:"[data-player='captions']",fullscreen:"[data-player='fullscreen']"},progress:".player-progress",captions:".player-captions",duration:".player-duration",seekTime:".player-seek-time"},classes:{video:"player-video",videoWrapper:"player-video-wrapper",audio:"player-audio",stopped:"stopped",playing:"playing",muted:"muted",captions:{enabled:"captions-enabled",active:"captions-active"},fullscreen:{enabled:"fullscreen-enabled",active:"fullscreen-active"}},captions:{defaultActive:!1},fullscreen:{enabled:!0,fallback:!0}};e.setup=function(e){if(m=u(v,e),!m.enabled)return!1;for(var t=document.querySelectorAll(m.selectors.container),n=[],r=t.length-1;r>=0;r--){var s=t[r];"undefined"==typeof s.plyr&&(s.plyr=new p(s)),n.push(s.plyr)}return n}}(this.plyr=this.plyr||{}); \ No newline at end of file