1!function (e, t) { 2 "use strict"; 3 "object" == typeof module && "object" == typeof module.exports ? module.exports = t(e, document) : "function" == typeof define && define.amd ? define([], function () { 4 return t(e, document) 5 }) : e.plyr = t(e, document) 6}("undefined" != typeof window ? window : this, function (e, t) { 7 "use strict"; 8 function n() { 9 var e, n, r, a = navigator.userAgent, s = navigator.appName, o = "" + parseFloat(navigator.appVersion), i = parseInt(navigator.appVersion, 10), l = !1, u = !1, c = !1, d = !1; 10 return navigator.appVersion.indexOf("Windows NT") !== -1 && navigator.appVersion.indexOf("rv:11") !== -1 ? (l = !0, s = "IE", o = "11") : (n = a.indexOf("MSIE")) !== -1 ? (l = !0, s = "IE", o = a.substring(n + 5)) : (n = a.indexOf("Chrome")) !== -1 ? (c = !0, s = "Chrome", o = a.substring(n + 7)) : (n = a.indexOf("Safari")) !== -1 ? (d = !0, s = "Safari", o = a.substring(n + 7), (n = a.indexOf("Version")) !== -1 && (o = a.substring(n + 8))) : (n = a.indexOf("Firefox")) !== -1 ? (u = !0, s = "Firefox", o = a.substring(n + 8)) : (e = a.lastIndexOf(" ") + 1) < (n = a.lastIndexOf("/")) && (s = a.substring(e, n), o = a.substring(n + 1), s.toLowerCase() === s.toUpperCase() && (s = navigator.appName)), (r = o.indexOf(";")) !== -1 && (o = o.substring(0, r)), (r = o.indexOf(" ")) !== -1 && (o = o.substring(0, r)), i = parseInt("" + o, 10), isNaN(i) && (o = "" + parseFloat(navigator.appVersion), i = parseInt(navigator.appVersion, 10)), { 11 name : s, 12 version : i, 13 isIE : l, 14 isFirefox: u, 15 isChrome : c, 16 isSafari : d, 17 isIos : /(iPad|iPhone|iPod)/g.test(navigator.platform), 18 isIphone : /(iPhone|iPod)/g.test(navigator.userAgent), 19 isTouch : "ontouchstart" in t.documentElement 20 } 21 } 22 23 function r(e, t) { 24 var n = e.media; 25 if ( "video" === e.type )switch ( t ) { 26 case"video/webm": 27 return !(!n.canPlayType || !n.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/, "")); 28 case"video/mp4": 29 return !(!n.canPlayType || !n.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/, "")); 30 case"video/ogg": 31 return !(!n.canPlayType || !n.canPlayType('video/ogg; codecs="theora"').replace(/no/, "")) 32 } else if ( "audio" === e.type )switch ( t ) { 33 case"audio/mpeg": 34 return !(!n.canPlayType || !n.canPlayType("audio/mpeg;").replace(/no/, "")); 35 case"audio/ogg": 36 return !(!n.canPlayType || !n.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, "")); 37 case"audio/wav": 38 return !(!n.canPlayType || !n.canPlayType('audio/wav; codecs="1"').replace(/no/, "")) 39 } 40 return !1 41 } 42 43 function a(e) { 44 if ( !t.querySelectorAll('script[src="' + e + '"]').length ) { 45 var n = t.createElement("script"); 46 n.src = e; 47 var r = t.getElementsByTagName("script")[ 0 ]; 48 r.parentNode.insertBefore(n, r) 49 } 50 } 51 52 function s(e, t) { 53 return Array.prototype.indexOf && e.indexOf(t) !== -1 54 } 55 56 function o(e, t, n) { 57 return e.replace(new RegExp(t.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g, "\\$1"), "g"), n) 58 } 59 60 function i(e, t) { 61 e.length || (e = [ e ]); 62 for ( var n = e.length - 1; n >= 0; n-- ) { 63 var r = n > 0 ? t.cloneNode(!0) : t, a = e[ n ], s = a.parentNode, o = a.nextSibling; 64 return r.appendChild(a), o ? s.insertBefore(r, o) : s.appendChild(r), r 65 } 66 } 67 68 function l(e) { 69 e && e.parentNode.removeChild(e) 70 } 71 72 function u(e, t) { 73 e.insertBefore(t, e.firstChild) 74 } 75 76 function c(e, t) { 77 for ( var n in t )e.setAttribute(n, O.boolean(t[ n ]) && t[ n ] ? "" : t[ n ]) 78 } 79 80 function d(e, n, r) { 81 var a = t.createElement(e); 82 c(a, r), u(n, a) 83 } 84 85 function p(e) { 86 return e.replace(".", "") 87 } 88 89 function m(e, t, n) { 90 if ( e )if ( e.classList ) e.classList[ n ? "add" : "remove" ](t); else { 91 var r = (" " + e.className + " ").replace(/\s+/g, " ").replace(" " + t + " ", ""); 92 e.className = r + (n ? " " + t : "") 93 } 94 } 95 96 function f(e, t) { 97 return !!e && (e.classList ? e.classList.contains(t) : new RegExp("(\\s|^)" + t + "(\\s|$)").test(e.className)) 98 } 99 100 function y(e, n) { 101 var r = Element.prototype, a = r.matches || r.webkitMatchesSelector || r.mozMatchesSelector || r.msMatchesSelector || function (e) { 102 return [].indexOf.call(t.querySelectorAll(e), this) !== -1 103 }; 104 return a.call(e, n) 105 } 106 107 function b(e, t, n, r, a) { 108 g(e, t, function (t) { 109 n && n.apply(e, [ t ]), r.apply(e, [ t ]) 110 }, a) 111 } 112 113 function v(e, t, n, r, a) { 114 var s = t.split(" "); 115 if ( O.boolean(a) || (a = !1), e instanceof NodeList )for ( var o = 0; o < e.length; o++ )e[ o ] instanceof Node && v(e[ o ], arguments[ 1 ], arguments[ 2 ], arguments[ 3 ]); else for ( var i = 0; i < s.length; i++ )e[ r ? "addEventListener" : "removeEventListener" ](s[ i ], n, a) 116 } 117 118 function g(e, t, n, r) { 119 e && v(e, t, n, !0, r) 120 } 121 122 function h(e, t, n, r) { 123 if ( e && t ) { 124 O.boolean(n) || (n = !1); 125 var a = new CustomEvent(t, { bubbles: n, detail: r }); 126 e.dispatchEvent(a) 127 } 128 } 129 130 function k(e, t) { 131 if ( e )return t = O.boolean(t) ? t : !e.getAttribute("aria-pressed"), e.setAttribute("aria-pressed", t), t 132 } 133 134 function w(e, t) { 135 return 0 === e || 0 === t || isNaN(e) || isNaN(t) ? 0 : (e / t * 100).toFixed(2) 136 } 137 138 function x() { 139 var e = arguments; 140 if ( e.length ) { 141 if ( 1 === e.length )return e[ 0 ]; 142 for ( var t = Array.prototype.shift.call(e), n = e.length, r = 0; r < n; r++ ) { 143 var a = e[ r ]; 144 for ( var s in a )a[ s ] && a[ s ].constructor && a[ s ].constructor === Object ? (t[ s ] = t[ s ] || {}, x(t[ s ], a[ s ])) : t[ s ] = a[ s ] 145 } 146 return t 147 } 148 } 149 150 function T(e) { 151 var t = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; 152 return e.match(t) ? RegExp.$2 : e 153 } 154 155 function S(e) { 156 var t = /^.*(vimeo.com\/|video\/)(\d+).*/; 157 return e.match(t) ? RegExp.$2 : e 158 } 159 160 function _() { 161 var e = { 162 supportsFullScreen : !1, isFullScreen: function () { 163 return !1 164 }, requestFullScreen : function () { 165 }, cancelFullScreen : function () { 166 }, fullScreenEventName: "", element: null, prefix: "" 167 }, n = "webkit o moz ms khtml".split(" "); 168 if ( O.undefined(t.cancelFullScreen) )for ( var r = 0, a = n.length; r < a; r++ ) { 169 if ( e.prefix = n[ r ], !O.undefined(t[ e.prefix + "CancelFullScreen" ]) ) { 170 e.supportsFullScreen = !0; 171 break 172 } 173 if ( !O.undefined(t.msExitFullscreen) && t.msFullscreenEnabled ) { 174 e.prefix = "ms", e.supportsFullScreen = !0; 175 break 176 } 177 } else e.supportsFullScreen = !0;
178 return e.supportsFullScreen && (e.fullScreenEventName = "ms" === e.prefix ? "MSFullscreenChange" : e.prefix + "fullscreenchange", e.isFullScreen = function (e) { 179 switch ( O.undefined(e) && (e = t.body), this.prefix ) { 180 case"": 181 return t.fullscreenElement === e; 182 case"moz": 183 return t.mozFullScreenElement === e; 184 default: 185 return t[ this.prefix + "FullscreenElement" ] === e 186 } 187 }, e.requestFullScreen = function (e) { 188 return O.undefined(e) && (e = t.body), "" === this.prefix ? e.requestFullScreen() : e[ this.prefix + ("ms" === this.prefix ? "RequestFullscreen" : "RequestFullScreen") ]() 189 }, e.cancelFullScreen = function () { 190 return "" === this.prefix ? t.cancelFullScreen() : t[ this.prefix + ("ms" === this.prefix ? "ExitFullscreen" : "CancelFullScreen") ]() 191 }, e.element = function () { 192 return "" === this.prefix ? t.fullscreenElement : t[ this.prefix + "FullscreenElement" ] 193 }), e 194 } 195 196 function E(v, E) { 197 function A(e, t, n, r) { 198 h(e, t, n, x({}, r, { plyr: Be })) 199 } 200 201 function j(t, n) { 202 E.debug && e.console && (n = Array.prototype.slice.call(n), O.string(E.logPrefix) && E.logPrefix.length && n.unshift(E.logPrefix), console[ t ].apply(console, n)) 203 } 204 205 function V() { 206 return { url: E.iconUrl, absolute: 0 === E.iconUrl.indexOf("http") || Ue.browser.isIE } 207 } 208 209 function R() { 210 var e = [], t = V(), n = (t.absolute ? "" : t.url) + "#" + E.iconPrefix; 211 return s(E.controls, "play-large") && e.push('<button type="button" data-plyr="play" class="plyr__play-large">', '<svg><use xlink:href="' + n + '-play" /></svg>', '<span class="plyr__sr-only">' + E.i18n.play + "</span>", "</button>"), e.push('<div class="plyr__controls">'), s(E.controls, "restart") && e.push('<button type="button" data-plyr="restart">', '<svg><use xlink:href="' + n + '-restart" /></svg>', '<span class="plyr__sr-only">' + E.i18n.restart + "</span>", "</button>"), s(E.controls, "rewind") && e.push('<button type="button" data-plyr="rewind">', '<svg><use xlink:href="' + n + '-rewind" /></svg>', '<span class="plyr__sr-only">' + E.i18n.rewind + "</span>", "</button>"), s(E.controls, "play") && e.push('<button type="button" data-plyr="play">', '<svg><use xlink:href="' + n + '-play" /></svg>', '<span class="plyr__sr-only">' + E.i18n.play + "</span>", "</button>", '<button type="button" data-plyr="pause">', '<svg><use xlink:href="' + n + '-pause" /></svg>', '<span class="plyr__sr-only">' + E.i18n.pause + "</span>", "</button>"), s(E.controls, "fast-forward") && e.push('<button type="button" data-plyr="fast-forward">', '<svg><use xlink:href="' + n + '-fast-forward" /></svg>', '<span class="plyr__sr-only">' + E.i18n.forward + "</span>", "</button>"), s(E.controls, "progress") && (e.push('<span class="plyr__progress">', '<label for="seek{id}" class="plyr__sr-only">Seek</label>', '<input id="seek{id}" class="plyr__progress--seek" type="range" min="0" max="100" step="0.1" value="0" data-plyr="seek">', '<progress class="plyr__progress--played" max="100" value="0" role="presentation"></progress>', '<progress class="plyr__progress--buffer" max="100" value="0">', "<span>0</span>% " + E.i18n.buffered, "</progress>"), E.tooltips.seek && e.push('<span class="plyr__tooltip">00:00</span>'), e.push("</span>")), s(E.controls, "current-time") && e.push('<span class="plyr__time">', '<span class="plyr__sr-only">' + E.i18n.currentTime + "</span>", '<span class="plyr__time--current">00:00</span>', "</span>"), s(E.controls, "duration") && e.push('<span class="plyr__time">', '<span class="plyr__sr-only">' + E.i18n.duration + "</span>", '<span class="plyr__time--duration">00:00</span>', "</span>"), s(E.controls, "mute") && e.push('<button type="button" data-plyr="mute">', '<svg class="icon--muted"><use xlink:href="' + n + '-muted" /></svg>', '<svg><use xlink:href="' + n + '-volume" /></svg>', '<span class="plyr__sr-only">' + E.i18n.toggleMute + "</span>", "</button>"), s(E.controls, "volume") && e.push('<span class="plyr__volume">', '<label for="volume{id}" class="plyr__sr-only">' + E.i18n.volume + "</label>", '<input id="volume{id}" class="plyr__volume--input" type="range" min="' + E.volumeMin + '" max="' + E.volumeMax + '" value="' + E.volume
211+ '" data-plyr="volume">', '<progress class="plyr__volume--display" max="' + E.volumeMax + '" value="' + E.volumeMin + '" role="presentation"></progress>', "</span>"), s(E.controls, "captions") && e.push('<button type="button" data-plyr="captions">', '<svg class="icon--captions-on"><use xlink:href="' + n + '-captions-on" /></svg>', '<svg><use xlink:href="' + n + '-captions-off" /></svg>', '<span class="plyr__sr-only">' + E.i18n.toggleCaptions + "</span>", "</button>"), s(E.controls, "fullscreen") && e.push('<button type="button" data-plyr="fullscreen">', '<svg class="icon--exit-fullscreen"><use xlink:href="' + n + '-exit-fullscreen" /></svg>', '<svg><use xlink:href="' + n + '-enter-fullscreen" /></svg>', '<span class="plyr__sr-only">' + E.i18n.toggleFullscreen + "</span>", "</button>"), e.push("</div>"), e.join("") 212 } 213 214 function q() { 215 if ( Ue.supported.full && ("audio" !== Ue.type || E.fullscreen.allowAudio) && E.fullscreen.enabled ) { 216 var e = N.supportsFullScreen; 217 e || E.fullscreen.fallback && !X() ? (Je((e ? "Native" : "Fallback") + " fullscreen enabled"), m(Ue.container, E.classes.fullscreen.enabled, !0)) : Je("Fullscreen not supported and fallback disabled"), Ue.buttons && Ue.buttons.fullscreen && k(Ue.buttons.fullscreen, !1), $() 218 } 219 } 220 221 function D() { 222 if ( "video" === Ue.type ) { 223 U(E.selectors.captions) || Ue.videoContainer.insertAdjacentHTML("afterbegin", '<div class="' + p(E.selectors.captions) + '"></div>'), Ue.usingTextTracks = !1, Ue.media.textTracks && (Ue.usingTextTracks = !0); 224 for ( var e, t = "", n = Ue.media.childNodes, r = 0; r < n.length; r++ )"track" === n[ r ].nodeName.toLowerCase() && (e = n[ r ].kind, "captions" !== e && "subtitles" !== e || (t = n[ r ].getAttribute("src"))); 225 if ( Ue.captionExists = !0, "" === t ? (Ue.captionExists = !1, Je("No caption track found")) : Je("Caption track found; URI: " + t), Ue.captionExists ) { 226 for ( var a = Ue.media.textTracks, s = 0; s < a.length; s++ )a[ s ].mode = "hidden"; 227 if ( Y(Ue), (Ue.browser.isIE && Ue.browser.version >= 10 || Ue.browser.isFirefox && Ue.browser.version >= 31) && (Je("Detected browser with known TextTrack issues - using manual fallback"), Ue.usingTextTracks = !1), Ue.usingTextTracks ) {
228 Je("TextTracks supported"); 229 for ( var o = 0; o < a.length; o++ ) { 230 var i = a[ o ]; 231 "captions" !== i.kind && "subtitles" !== i.kind || g(i, "cuechange", function () { 232 this.activeCues[ 0 ] && "text" in this.activeCues[ 0 ] ? H(this.activeCues[ 0 ].getCueAsHTML()) : H() 233 }) 234 } 235 } else if ( Je("TextTracks not supported so rendering captions manually"), Ue.currentCaption = "", Ue.captions = [], "" !== t ) { 236 var l = new XMLHttpRequest; 237 l.onreadystatechange = function () { 238 if ( 4 === l.readyState )if ( 200 === l.status ) { 239 var e, t = [], n = l.responseText, r = "\r\n"; 240 n.indexOf(r + r) === -1 && (r = n.indexOf("\r\r") !== -1 ? "\r" : "\n"), t = n.split(r + r); 241 for ( var a = 0; a < t.length; a++ ) { 242 e = t[ a ], Ue.captions[ a ] = []; 243 var s = e.split(r), o = 0; 244 s[ o ].indexOf(":") === -1 && (o = 1), Ue.captions[ a ] = [ s[ o ], s[ o + 1 ] ] 245 } 246 Ue.captions.shift(), Je("Successfully loaded the caption file via AJAX") 247 } else ze(E.logPrefix + "There was a problem loading the caption file via AJAX") 248 }, l.open("get", t, !0), l.send() 249 } 250 } else m(Ue.container, E.classes.captions.enabled) 251 } 252 } 253 254 function H(e) { 255 var n = U(E.selectors.captions), r = t.createElement("span"); 256 n.innerHTML = "", O.undefined(e) && (e = ""), O.string(e) ? r.innerHTML = e.trim() : r.appendChild(e), n.appendChild(r); 257 n.offsetHeight 258 } 259 260 function W(e) { 261 function t(e, t) { 262 var n = []; 263 n = e.split(" --> "); 264 for ( var r = 0; r < n.length; r++ )n[ r ] = n[ r ].replace(/(\d+:\d+:\d+\.\d+).*/, "$1"); 265 return a(n[ t ]) 266 } 267 268 function n(e) { 269 return t(e, 0) 270 } 271 272 function r(e) { 273 return t(e, 1) 274 } 275 276 function a(e) { 277 if ( null === e || void 0 === e )return 0; 278 var t, n = [], r = []; 279 return n = e.split(","), r = n[ 0 ].split(":"), t = Math.floor(60 * r[ 0 ] * 60) + Math.floor(60 * r[ 1 ]) + Math.floor(r[ 2 ]) 280 } 281 282 if ( !Ue.usingTextTracks && "video" === Ue.type && Ue.supported.full && (Ue.subcount = 0, e = O.number(e) ? e : Ue.media.currentTime, Ue.captions[ Ue.subcount ]) ) { 283 for ( ; r(Ue.captions[ Ue.subcount ][ 0 ]) < e.toFixed(1); )if ( Ue.subcount++, Ue.subcount > Ue.captions.length - 1 ) { 284 Ue.subcount = Ue.captions.length - 1; 285 break 286 } 287 Ue.media.currentTime.toFixed(1) >= n(Ue.captions[ Ue.subcount ][ 0 ]) && Ue.media.currentTime.toFixed(1) <= r(Ue.captions[ Ue.subcount ][ 0 ]) ? (Ue.currentCaption = Ue.captions[ Ue.subcount ][ 1 ], H(Ue.currentCaption)) : H() 288 } 289 } 290 291 function Y() { 292 if ( Ue.buttons.captions ) { 293 m(Ue.container, E.classes.captions.enabled, !0); 294 var e = Ue.storage.captionsEnabled; 295 O.boolean(e) || (e = E.captions.defaultActive), e && (m(Ue.container, E.classes.captions.active, !0), k(Ue.buttons.captions, !0)) 296 } 297 } 298 299 function B(e) { 300 return Ue.container.querySelectorAll(e) 301 } 302 303 function U(e) { 304 return B(e)[ 0 ] 305 } 306 307 function X() { 308 try { 309 return e.self !== e.top 310 } catch ( e ) { 311 return !0 312 } 313 } 314 315 function $() { 316 function e(e) { 317 9 === e.which && Ue.isFullscreen && (e.target !== r || e.shiftKey ? e.target === n && e.shiftKey && (e.preventDefault(), r.focus()) : (e.preventDefault(), n.focus())) 318 } 319 320 var t = B("input:not([disabled]), button:not([disabled])"), n = t[ 0 ], r = t[ t.length - 1 ]; 321 g(Ue.container, "keydown", e) 322 } 323 324 function J(e, t) { 325 if ( O.string(t) ) d(e, Ue.media, { src: t }); else if ( t.constructor === Array )for ( var n = t.length - 1; n >= 0; n-- )d(e, Ue.media, t[ n ]) 326 } 327 328 function z() { 329 if ( E.loadSprite ) { 330 var e = V(); 331 e.absolute ? (Je("AJAX loading absolute SVG sprite" + (Ue.browser.isIE ? " (due to IE)" : "")), C(e.url, "sprite-plyr")) : Je("Sprite will be used as external resource directly") 332 } 333 var n = E.html; 334 Je("Injecting custom controls"), n || (n = R()), n = o(n, "{seektime}", E.seekTime), n = o(n, "{id}", Math.floor(1e4 * Math.random())); 335 var r; 336 if ( O.string(E.selectors.controls.container) && (r = t.querySelector(E.selectors.controls.container)), O.htmlElement(r) || (r = Ue.container), r.insertAdjacentHTML("beforeend", n), E.tooltips.controls )for ( var a = B([ E.selectors.controls.wrapper, " ", E.selectors.labels, " .", E.classes.hidden ].join("")), s = a.length - 1; s >= 0; s-- ) { 337 var i = a[ s ]; 338 m(i, E.classes.hidden, !1), m(i, E.classes.tooltip, !0) 339 } 340 } 341 342 function G() { 343 try { 344 return Ue.controls = U(E.selectors.controls.wrapper), Ue.buttons = {}, Ue.buttons.seek = U(E.selectors.buttons.seek), Ue.buttons.play = B(E.selectors.buttons.play), Ue.buttons.pause = U(E.selectors.buttons.pause), Ue.buttons.restart = U(E.selectors.buttons.restart), Ue.buttons.rewind = U(E.selectors.buttons.rewind), Ue.buttons.forward = U(E.selectors.buttons.forward), Ue.buttons.fullscreen = U(E.selectors.buttons.fullscreen), Ue.buttons.mute = U(E.selectors.buttons.mute), Ue.buttons.captions =
344U(E.selectors.buttons.captions), Ue.progress = {}, Ue.progress.container = U(E.selectors.progress.container), Ue.progress.buffer = {}, Ue.progress.buffer.bar = U(E.selectors.progress.buffer), Ue.progress.buffer.text = Ue.progress.buffer.bar && Ue.progress.buffer.bar.getElementsByTagName("span")[ 0 ], Ue.progress.played = U(E.selectors.progress.played), Ue.progress.tooltip = Ue.progress.container && Ue.progress.container.querySelector("." + E.classes.tooltip), Ue.volume = {}, Ue.volume.input = U(E.selectors.volume.input), Ue.volume.display = U(E.selectors.volume.display), Ue.duration = U(E.selectors.duration), Ue.currentTime = U(E.selectors.currentTime), Ue.seekTime = B(E.selectors.seekTime), !0 345 } catch ( e ) { 346 return ze("It looks like there is a problem with your controls HTML"), Q(!0), !1 347 } 348 } 349 350 function K() { 351 m(Ue.container, E.selectors.container.replace(".", ""), Ue.supported.full) 352 } 353 354 function Q(e) { 355 e && s(E.types.html5, Ue.type) ? Ue.media.setAttribute("controls", "") : Ue.media.removeAttribute("controls") 356 } 357 358 function Z(e) { 359 var t = E.i18n.play; 360 if ( O.string(E.title) && E.title.length && (t += ", " + E.title, Ue.container.setAttribute("aria-label", E.title)), Ue.supported.full && Ue.buttons.play )for ( var n = Ue.buttons.play.length - 1; n >= 0; n-- )Ue.buttons.play[ n ].setAttribute("aria-label", t); 361 O.htmlElement(e) && e.setAttribute("title", E.i18n.frameTitle.replace("{title}", E.title)) 362 } 363 364 function ee() { 365 var t = null; 366 Ue.storage = {}, L.supported && E.storage.enabled && (e.localStorage.removeItem("plyr-volume"), t = e.localStorage.getItem(E.storage.key), t && (/^\d+(\.\d+)?$/.test(t) ? te({ volume: parseFloat(t) }) : Ue.storage = JSON.parse(t))) 367 } 368 369 function te(t) { 370 L.supported && E.storage.enabled && (x(Ue.storage, t), e.localStorage.setItem(E.storage.key, JSON.stringify(Ue.storage))) 371 } 372 373 function ne() { 374 if ( !Ue.media )return void ze("No media element found!"); 375 if ( Ue.supported.full && (m(Ue.container, E.classes.type.replace("{0}", Ue.type), !0), s(E.types.embed, Ue.type) && m(Ue.container, E.classes.type.replace("{0}", "video"), !0), m(Ue.container, E.classes.stopped, E.autoplay), m(Ue.ontainer, E.classes.isIos, Ue.browser.isIos), m(Ue.container, E.classes.isTouch, Ue.browser.isTouch), "video" === Ue.type) ) { 376 var e = t.createElement("div"); 377 e.setAttribute("class", E.classes.videoWrapper), i(Ue.media, e), Ue.videoContainer = e 378 } 379 s(E.types.embed, Ue.type) && re() 380 } 381 382 function re() { 383 var n, r = t.createElement("div"), s = Ue.type + "-" + Math.floor(1e4 * Math.random()); 384 switch ( Ue.type ) { 385 case"youtube": 386 n = T(Ue.embedId); 387 break; 388 case"vimeo": 389 n = S(Ue.embedId); 390 break; 391 default: 392 n = Ue.embedId 393 } 394 for ( var o = B('[id^="' + Ue.type + '-"]'), i = o.length - 1; i >= 0; i-- )l(o[ i ]); 395 if ( m(Ue.media, E.classes.videoWrapper, !0), m(Ue.media, E.classes.embedWrapper, !0), "youtube" === Ue.type ) Ue.media.appendChild(r), r.setAttribute("id", s), O.object(e.YT) ? se(n, r) : (a(E.urls.youtube.api), e.onYouTubeReadyCallbacks = e.onYouTubeReadyCallbacks || [], e.onYouTubeReadyCallbacks.push(function () { 396 se(n, r) 397 }), e.onYouTubeIframeAPIReady = function () { 398 e.onYouTubeReadyCallbacks.forEach(function (e) { 399 e() 400 }) 401 }); else if ( "vimeo" === Ue.type )if ( Ue.supported.full ? Ue.media.appendChild(r) : r = Ue.media, r.setAttribute("id", s), O.object(e.Vimeo) ) oe(n, r); else { 402 a(E.urls.vimeo.api); 403 var u = e.setInterval(function () { 404 O.object(e.Vimeo) && (e.clearInterval(u), oe(n, r)) 405 }, 50) 406 } else if ( "soundcloud" === Ue.type ) { 407 var d = t.createElement("iframe"); 408 d.loaded = !1, g(d, "load", function () { 409 d.loaded = !0 410 }), c(d, { 411 src: "https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/" + n, 412 id : s 413 }), r.appendChild(d), Ue.media.appendChild(r), e.SC || a(E.urls.soundcloud.api); 414 var p = e.setInterval(function () { 415 e.SC && d.loaded && (e.clearInterval(p), ie.call(d)) 416 }, 50) 417 } 418 } 419 420 function ae() { 421 Ue.supported.full && (We(), Ye()), Z(U("iframe")) 422 } 423 424 function se(t, n) { 425 Ue.embed = new e.YT.Player(n.id, { 426 videoId : t, 427 playerVars: { 428 autoplay : E.autoplay ? 1 : 0, 429 controls : Ue.supported.full ? 0 : 1, 430 rel : 0, 431 showinfo : 0, 432 iv_load_policy: 3, 433 cc_load_policy: E.captions.defaultActive ? 1 : 0, 434 cc_lang_pref : "en", 435 wmode : "transparent", 436 modestbranding: 1, 437 disablekb : 1, 438 origin : "*" 439 }, 440 events : { 441 onError : function (e) { 442 A(Ue.container, "error", !0, { code: e.data, embed: e.target }) 443 }, onReady : function (t) { 444 var n = t.target; 445 Ue.media.play = function () { 446 n.playVideo(), Ue.media.paused = !1 447 }, Ue.media.pause = function () { 448 n.pauseVideo(), Ue.media.paused = !0 449 }, Ue.media.stop = function () { 450 n.stopVideo(), Ue.media.paused = !0 451 }, Ue.media.duration = n.getDuration(), Ue.media.paused = !0, Ue.media.currentTime = 0, Ue.media.muted = n.isMuted(), E.title = n.getVideoData().title, Ue.supported.full && Ue.media.querySelector("iframe").setAttribute("tabindex", "-1"), ae(), A(Ue.media, "timeupdate"), A(Ue.media, "durationchange"), e.clearInterval(Xe.buffering), Xe.buffering = e.setInterval(function () { 452 Ue.media.buffered = n.getVideoLoadedFraction(), (null === Ue.media.lastBuffered || Ue.media.lastBuffered < Ue.media.buffered) && A(Ue.media, "progress"), Ue.media.lastBuffered = Ue.media.buffered, 1 === Ue.media.buffered && (e.clearInterval(Xe.buffering), A(Ue.media, "canplaythrough")) 453 }, 200) 454 }, onStateChange: function (t) { 455 var n = t.target; 456 switch ( e.clearInterval(Xe.playing), t.data ) { 457 case 0: 458 Ue.media.paused = !0, A(Ue.media, "ended"); 459 break; 460 case 1: 461 Ue.media.paused = !1, Ue.media.seeking && A(Ue.media, "seeked"), Ue.media.seeking = !1, A(Ue.media, "play"), A(Ue.media, "playing"), Xe.playing = e.setInterval(function () { 462 Ue.media.currentTime = n.getCurrentTime(), A(Ue.media, "timeupdate") 463 }, 100), Ue.media.duration !== n.getDuration() && (Ue.media.duration = n.getDuration(), A(Ue.media, "durationchange")); 464 break; 465 case 2: 466 Ue.media.paused = !0, A(Ue.media, "pause") 467 } 468 A(Ue.container, "statechange", !1, { code: t.data }) 469 } 470 } 471 }) 472 } 473 474 function oe(t, n) { 475 Ue.embed = new e.Vimeo.Player(n, { 476 id : parseInt(t), 477 loop : E.loop, 478 autoplay: E.autoplay, 479 byline : !1, 480 portrait: !1, 481 title : !1 482 }), Ue.media.play = function () { 483 Ue.embed.play(), Ue.media.paused = !1 484 }, Ue.media.pause = function () { 485 Ue.embed.pause(), Ue.media.paused = !0 486 }, Ue.media.stop = function () { 487 Ue.embed.stop(), Ue.media.paused = !0 488 }, Ue.media.paused = !0, Ue.media.currentTime = 0, ae(), Ue.embed.getCurrentTime().then(function (e) { 489 Ue.media.currentTime = e, A(Ue.media, "timeupdate") 490 }), Ue.embed.getDuration().then(function (e) { 491 Ue.media.duration = e, A(Ue.media, "durationchange") 492 }), Ue.embed.on("loaded", function () { 493 O.htmlElement(Ue.embed.element) && Ue.supported.full && Ue.embed.element.setAttribute("tabindex", "-1") 494 }), Ue.embed.on("play", function () { 495 Ue.media.paused = !1, A(Ue.media, "play"), A(Ue.media, "playing") 496 }), Ue.embed.on("pause", function () { 497 Ue.media.paused = !0, A(Ue.media, "pause") 498 }), Ue.embed.on("timeupdate", function (e) { 499 Ue.media.seeking = !1, Ue.media.currentTime = e.seconds, A(Ue.media, "timeupdate") 500 }), Ue.embed.on("progress", function (e) { 501 Ue.media.buffered = e.percent, A(Ue.media, "progress"), 1 === parseInt(e.percent) && A(Ue.media, "canplaythrough") 502 }), Ue.embed.on("seeked", function () { 503 Ue.media.seeking = !1, A(Ue.media, "seeked"), A(Ue.media, "play") 504 }), Ue.embed.on("ended", function () { 505 Ue.media.paused = !0, A(Ue.media, "ended") 506 }) 507 } 508 509 function ie() { 510 Ue.embed = e.SC.Widget(this), Ue.embed.bind(e.SC.Widget.Events.READY, function () { 511 Ue.media.play = function () { 512 Ue.embed.play(), Ue.media.paused = !1 513 }, Ue.media.pause = function () { 514 Ue.embed.pause(), Ue.media.paused = !0 515 }, Ue.media.stop = function () { 516 Ue.embed.seekTo(0), Ue.embed.pause(), Ue.media.paused = !0 517 }, Ue.media.paused = !0, Ue.media.currentTime = 0, Ue.embed.getDuration(function (e) { 518 Ue.media.duration = e / 1e3, ae() 519 }), Ue.embed.getPosition(function (e) { 520 Ue.media.currentTime = e, A(Ue.media, "timeupdate") 521 }), Ue.embed.bind(e.SC.Widget.Events.PLAY, function () { 522 Ue.media.paused = !1, A(Ue.media, "play"), A(Ue.media, "playing") 523 }), Ue.embed.bind(e.SC.Widget.Events.PAUSE, function () { 524 Ue.media.paused = !0, A(Ue.media, "pause") 525 }), Ue.embed.bind(e.SC.Widget.Events.PLAY_PROGRESS, function (e) { 526 Ue.media.seeking = !1, Ue.media.currentTime = e.currentPosition / 1e3, A(Ue.media, "timeupdate") 527 }), Ue.embed.bind(e.SC.Widget.Events.LOAD_PROGRESS, function (e) { 528 Ue.media.buffered = e.loadProgress, A(Ue.media, "progress"), 1 === parseInt(e.loadProgress) && A(Ue.media, "canplaythrough") 529 }), Ue.embed.bind(e.SC.Widget.Events.FINISH, function () { 530 Ue.media.paused = !0, A(Ue.media, "ended") 531 }) 532 }) 533 } 534 535 function le() { 536 "play" in Ue.media && Ue.media.play() 537 } 538 539 function ue() { 540 "pause" in Ue.media && Ue.media.pause() 541 } 542 543 function ce(e) { 544 return O.boolean(e) || (e = Ue.media.paused), e ? le() : ue(), e 545 } 546 547 function de(e) { 548 O.number(e) || (e = E.seekTime), me(Ue.media.currentTime - e) 549 } 550 551 function pe(e) { 552 O.number(e) || (e = E.seekTime), me(Ue.media.currentTime + e) 553 } 554 555 function me(e) { 556 var t = 0, n = Ue.media.paused, r = fe(); 557 O.number(e) ? t = e : O.object(e) && s([ "input", "change" ], e.type) && (t = e.target.value / e.target.max * r), t < 0 ? t = 0 : t > r && (t = r), Ne(t); 558 try { 559 Ue.media.currentTime = t.toFixed(4) 560 } catch ( e ) { 561 } 562 if ( s(E.types.embed, Ue.type) ) { 563 switch ( Ue.type ) { 564 case"youtube": 565 Ue.embed.seekTo(t); 566 break; 567 case"vimeo": 568 Ue.embed.setCurrentTime(t.toFixed(0)); 569 break; 570 case"soundcloud": 571 Ue.embed.seekTo(1e3 * t) 572 } 573 n && ue(), A(Ue.media, "timeupdate"), Ue.media.seeking = !0, A(Ue.media, "seeking") 574 } 575 Je("Seeking to " + Ue.media.currentTime + " seconds"), W(t) 576 } 577 578 function fe() { 579 var e = parseInt(E.duration), t = 0; 580 return null === Ue.media.duration || isNaN(Ue.media.duration) || (t = Ue.media.duration), isNaN(e) ? t : e 581 } 582 583 function ye() { 584 m(Ue.container, E.classes.playing, !Ue.media.paused), m(Ue.container, E.classes.stopped, Ue.media.paused), Me(Ue.media.paused) 585 } 586 587 function be() { 588 P = { x: e.pageXOffset || 0, y: e.pageYOffset || 0 } 589 } 590 591 function ve() { 592 e.scrollTo(P.x, P.y) 593 } 594 595 function ge(e) { 596 var n = N.supportsFullScreen; 597 if ( n ) { 598 if ( !e || e.type !== N.fullScreenEventName )return N.isFullScreen(Ue.container) ? N.cancelFullScreen() : (be(), N.requestFullScreen(Ue.container)), void(Ue.isFullscreen =
598N.isFullScreen(Ue.container)); 599 Ue.isFullscreen = N.isFullScreen(Ue.container) 600 } else Ue.isFullscreen = !Ue.isFullscreen, t.body.style.overflow = Ue.isFullscreen ? "hidden" : ""; 601 m(Ue.container, E.classes.fullscreen.active, Ue.isFullscreen), $(Ue.isFullscreen), Ue.buttons && Ue.buttons.fullscreen && k(Ue.buttons.fullscreen, Ue.isFullscreen), A(Ue.container, Ue.isFullscreen ? "enterfullscreen" : "exitfullscreen", !0), !Ue.isFullscreen && n && ve() 602 } 603 604 function he(e) { 605 if ( O.boolean(e) || (e = !Ue.media.muted), k(Ue.buttons.mute, e), Ue.media.muted = e, 0 === Ue.media.volume && ke(E.volume), s(E.types.embed, Ue.type) ) { 606 switch ( Ue.type ) { 607 case"youtube": 608 Ue.embed[ Ue.media.muted ? "mute" : "unMute" ](); 609 break; 610 case"vimeo": 611 case"soundcloud": 612 Ue.embed.setVolume(Ue.media.muted ? 0 : parseFloat(E.volume / E.volumeMax)) 613 } 614 A(Ue.media, "volumechange") 615 } 616 } 617 618 function ke(e) { 619 var t = E.volumeMax, n = E.volumeMin; 620 if ( O.undefined(e) && (e = Ue.storage.volume), (null === e || isNaN(e)) && (e = E.volume), e > t && (e = t), e < n && (e = n), Ue.media.volume = parseFloat(e / t), Ue.volume.display && (Ue.volume.display.value = e), s(E.types.embed, Ue.type) ) { 621 switch ( Ue.type ) { 622 case"youtube": 623 Ue.embed.setVolume(100 * Ue.media.volume); 624 break; 625 case"vimeo": 626 case"soundcloud": 627 Ue.embed.setVolume(Ue.media.volume) 628 } 629 A(Ue.media, "volumechange") 630 } 631 0 === e ? Ue.media.muted = !0 : Ue.media.muted && e > 0 && he() 632 } 633 634 function we(e) { 635 var t = Ue.media.muted ? 0 : Ue.media.volume * E.volumeMax; 636 O.number(e) || (e = E.volumeStep), ke(t + e) 637 } 638 639 function xe(e) { 640 var t = Ue.media.muted ? 0 : Ue.media.volume * E.volumeMax; 641 O.number(e) || (e = E.volumeStep), ke(t - e) 642 } 643 644 function Te() { 645 var e = Ue.media.muted ? 0 : Ue.media.volume * E.volumeMax; 646 Ue.supported.full && (Ue.volume.input && (Ue.volume.input.value = e), Ue.volume.display && (Ue.volume.display.value = e)), te({ volume: e }), m(Ue.container, E.classes.muted, 0 === e), Ue.supported.full && Ue.buttons.mute && k(Ue.buttons.mute, 0 === e) 647 } 648 649 function Se(e) { 650 Ue.supported.full && Ue.buttons.captions && (O.boolean(e) || (e = Ue.container.className.indexOf(E.classes.captions.active) === -1), Ue.captionsEnabled = e, k(Ue.buttons.captions, Ue.captionsEnabled), m(Ue.container, E.classes.captions.active, Ue.captionsEnabled), A(Ue.container, Ue.captionsEnabled ? "captionsenabled" : "captionsdisabled", !0), te({ captionsEnabled: Ue.captionsEnabled })) 651 } 652 653 function _e(e) { 654 var t = "waiting" === e.type; 655 clearTimeout(Xe.loading), Xe.loading = setTimeout(function () { 656 m(Ue.container, E.classes.loading, t), Me(t) 657 }, t ? 250 : 0) 658 } 659 660 function Ee(e) { 661 if ( Ue.supported.full ) { 662 var t = Ue.progress.played, n = 0, r = fe(); 663 if ( e )switch ( e.type ) { 664 case"timeupdate": 665 case"seeking": 666 if ( Ue.controls.pressed )return; 667 n = w(Ue.media.currentTime, r), "timeupdate" === e.type && Ue.buttons.seek && (Ue.buttons.seek.value = n); 668 break; 669 case"playing": 670 case"progress": 671 t = Ue.progress.buffer, n = function () { 672 var e = Ue.media.buffered; 673 return e && e.length ? w(e.end(0), r) : O.number(e) ? 100 * e : 0 674 }() 675 } 676 Ce(t, n) 677 } 678 } 679 680 function Ce(e, t) { 681 if ( Ue.supported.full ) { 682 if ( O.undefined(t) && (t = 0), O.undefined(e) ) { 683 if ( !Ue.progress || !Ue.progress.buffer )return; 684 e = Ue.progress.buffer 685 } 686 O.htmlElement(e) ? e.value = t : e && (e.bar && (e.bar.value = t), e.text && (e.text.innerHTML = t)) 687 } 688 } 689 690 function Fe(e, t) { 691 if ( t ) { 692 isNaN(e) && (e = 0), Ue.secs = parseInt(e % 60), Ue.mins = parseInt(e / 60 % 60), Ue.hours = parseInt(e / 60 / 60 % 60); 693 var n = parseInt(fe() / 60 / 60 % 60) > 0; 694 Ue.secs = ("0" + Ue.secs).slice(-2), Ue.mins = ("0" + Ue.mins).slice(-2), t.innerHTML = (n ? Ue.hours + ":" : "") + Ue.mins + ":" + Ue.secs 695 } 696 } 697 698 function Ae() { 699 if ( Ue.supported.full ) { 700 var e = fe() || 0; 701 !Ue.duration && E.displayDuration && Ue.media.paused && Fe(e, Ue.currentTime), Ue.duration && Fe(e, Ue.duration), Pe() 702 } 703 } 704 705 function Ie(e) { 706 Fe(Ue.media.currentTime, Ue.currentTime), e && "timeupdate" === e.type && Ue.media.seeking || Ee(e) 707 } 708 709 function Ne(e) { 710 O.number(e) || (e = 0); 711 var t = fe(), n = w(e, t); 712 Ue.progress && Ue.progress.played && (Ue.progress.played.value = n), Ue.buttons && Ue.buttons.seek && (Ue.buttons.seek.value = n) 713 } 714 715 function Pe(e) { 716 var t = fe(); 717 if ( E.tooltips.seek && Ue.progress.container && 0 !== t ) { 718 var n = Ue.progress.container.getBoundingClientRect(), r = 0, a = E.classes.tooltip + "--visible"; 719 if ( e ) r = 100 / n.width * (e.pageX - n.left); else { 720 if ( !f(Ue.progress.tooltip, a) )return; 721 r = Ue.progress.tooltip.style.left.replace("%", "") 722 } 723 r < 0 ? r = 0 : r > 100 && (r = 100), Fe(t / 100 * r, Ue.progress.tooltip), Ue.progress.tooltip.style.left = r + "%", e && s([ "mouseenter", "mouseleave" ], e.type) && m(Ue.progress.tooltip, a, "mouseenter" === e.type) 724 } 725 } 726 727 function Me(t) { 728 if ( E.hideControls && "audio" !== Ue.type ) { 729 var n = 0, r = !1, a = t, o = f(Ue.container, E.classes.loading); 730 if ( O.boolean(t) || (t && t.type ? (r = "enterfullscreen" === t.type, a = s([ "mousemove", "touchstart", "mouseenter", "focu
730s" ], t.type), s([ "mousemove", "touchmove" ], t.type) && (n = 2e3), "focus" === t.type && (n = 3e3)) : a = f(Ue.container, E.classes.hideControls)), e.clearTimeout(Xe.hover), a || Ue.media.paused || o ) { 731 if ( m(Ue.container, E.classes.hideControls, !1), Ue.media.paused || o )return; 732 Ue.browser.isTouch && (n = 3e3) 733 } 734 a && Ue.media.paused || (Xe.hover = e.setTimeout(function () { 735 (!Ue.controls.pressed && !Ue.controls.hover || r) && m(Ue.container, E.classes.hideControls, !0) 736 }, n)) 737 } 738 } 739 740 function Oe(e) { 741 if ( !O.undefined(e) )return void Le(e); 742 var t; 743 switch ( Ue.type ) { 744 case"youtube": 745 t = Ue.embed.getVideoUrl(); 746 break; 747 case"vimeo": 748 Ue.embed.getVideoUrl.then(function (e) { 749 t = e 750 }); 751 break; 752 case"soundcloud": 753 Ue.embed.getCurrentSound(function (e) { 754 t = e.permalink_url 755 }); 756 break; 757 default: 758 t = Ue.media.currentSrc 759 } 760 return t || "" 761 } 762 763 function Le(e) { 764 function n() { 765 if ( Ue.embed = null, l(Ue.media), "video" === Ue.type && Ue.videoContainer && l(Ue.videoContainer), Ue.container && Ue.container.removeAttribute("class"), "type" in e && (Ue.type = e.type, "video" === Ue.type) ) { 766 var n = e.sources[ 0 ]; 767 "type" in n && s(E.types.embed, n.type) && (Ue.type = n.type) 768 } 769 switch ( Ue.supported = F(Ue.type), Ue.type ) { 770 case"video": 771 Ue.media = t.createElement("video"); 772 break; 773 case"audio": 774 Ue.media = t.createElement("audio"); 775 break; 776 case"youtube": 777 case"vimeo": 778 case"soundcloud": 779 Ue.media = t.createElement("div"), Ue.embedId = e.sources[ 0 ].src 780 } 781 u(Ue.container, Ue.media), O.boolean(e.autoplay) && (E.autoplay = e.autoplay), s(E.types.html5, Ue.type) && (E.crossorigin && Ue.media.setAttribute("crossorigin", ""), E.autoplay && Ue.media.setAttribute("autoplay", ""), "poster" in e && Ue.media.setAttribute("poster", e.poster), E.loop && Ue.media.setAttribute("loop", "")), m(Ue.container, E.classes.fullscreen.active, Ue.isFullscreen), m(Ue.container, E.classes.captions.active, Ue.captionsEnabled), K(), s(E.types.html5, Ue.type) && J("source", e.sources), ne(), s(E.types.html5, Ue.type) && ("tracks" in e && J("track", e.tracks), Ue.media.load()), (s(E.types.html5, Ue.type) || s(E.types.embed, Ue.type) && !Ue.supported.full) && (We(), Ye()), E.title = e.title, Z() 782 } 783 784 return O.object(e) && "sources" in e && e.sources.length ? (m(Ue.container, E.classes.ready, !1), ue(), Ne(), Ce(), qe(), void De(n, !1)) : void ze("Invalid source format") 785 } 786 787 function je(e) { 788 "video" === Ue.type && Ue.media.setAttribute("poster", e) 789 } 790 791 function Ve() { 792 function n() { 793 var e = ce(), t = Ue.buttons[ e ? "play" : "pause" ], n = Ue.buttons[ e ? "pause" : "play" ]; 794 if ( n = n && n.length > 1 ? n[ n.length - 1 ] : n[ 0 ] ) { 795 var r = f(t, E.classes.tabFocus); 796 setTimeout(function () { 797 n.focus(), r && (m(t, E.classes.tabFocus, !1), m(n, E.classes.tabFocus, !0)) 798 }, 100) 799 } 800 } 801 802 function r() { 803 var e = t.activeElement; 804 return e = e && e !== t.body ? t.querySelector(":focus") : null 805 } 806 807 function a(e) { 808 return e.keyCode ? e.keyCode : e.which 809 } 810 811 function o(e) { 812 for ( var t in Ue.buttons ) { 813 var n = Ue.buttons[ t ]; 814 if ( O.nodeList(n) )for ( var r = 0; r < n.length; r++ )m(n[ r ], E.classes.tabFocus, n[ r ] === e); else m(n, E.classes.tabFocus, n === e) 815 } 816 } 817 818 function i(e) { 819 function t() { 820 var e = Ue.media.duration; 821 O.number(e) && me(e / 10 * (n - 48)) 822 } 823 824 var n = a(e), r = "keydown" === e.type, o = r && n === u; 825 if ( O.number(n) )if ( r ) { 826 var i = [ 48, 49, 50, 51, 52, 53, 54, 56, 57, 32, 75, 38, 40, 77, 39, 37, 70, 67 ]; 827 switch ( s(i, n) && (e.preventDefault(), e.stopPropagation()), n ) { 828 case 48: 829 case 49: 830 case 50: 831 case 51: 832 case 52: 833 case 53: 834 case 54: 835 case 55: 836 case 56: 837 case 57: 838 o || t(); 839 break; 840 case 32: 841 case 75: 842 o || ce(); 843 break; 844 case 38: 845 we(); 846 break; 847 case 40: 848 xe(); 849 break; 850 case 77: 851 o || he(); 852 break; 853 case 39: 854 pe(); 855 break; 856 case 37: 857 de(); 858 break; 859 case 70: 860 ge(); 861 break; 862 case 67: 863 o || Se() 864 } 865 !N.supportsFullScreen && Ue.isFullscreen && 27 === n && ge(), u = n 866 } else u = null 867 } 868 869 var l = Ue.browser.isIE ? "change" : "input"; 870 if ( E.keyboardShorcuts.focused ) { 871 var u = null; 872 E.keyboardShorcuts.global && g(e, "keydown keyup", function (e) { 873 var t = a(e), n = r(), o = [ 48, 49, 50, 51, 52, 53, 54, 56, 57, 75, 77, 70, 67 ], l = I().length; 874 1 !== l || !s(o, t) || O.htmlElement(n) && y(n, E.selectors.editable) || i(e) 875 }), g(Ue.container, "keydown keyup", i) 876 } 877 g(e, "keyup", function (e) { 878 var t = a(e), n = r(); 879 9 === t && o(n) 880 }), g(t.body, "click", function () { 881 m(U("." + E.classes.tabFocus), E.classes.tabFocus, !1) 882 }); 883 for ( var c in Ue.buttons ) { 884 var d = Ue.buttons[ c ]; 885 g(d, "blur", function () { 886 m(d, "tab-focus", !1); 887 }) 888 } 889 b(Ue.buttons.play, "click", E.listeners.play, n), b(Ue.buttons.pause, "click", E.listeners.pause, n), b(Ue.buttons.restart, "click", E.listeners.restart, me), b(Ue.buttons.rewind, "click", E.listeners.rewind, de), b(Ue.buttons.forward, "click", E.listeners.forward, pe), b(Ue.buttons.seek, l, E.listeners.seek, me), b(Ue.volume.input, l, E.listeners.volume, function () { 890 ke(Ue.volume.input.value) 891 }), b(Ue.buttons.mute, "click", E.listeners.mute, he), b(Ue.buttons.fullscreen, "click", E.listeners.fullscreen, ge), N.supportsFullScreen && g(t, N.fullScreenEventName, ge), g(Ue.buttons.captions, "click", Se), g(Ue.progress.container, "mouseenter mouseleave mousemove", Pe), E.hideControls && (g(Ue.container, "mouseenter mouseleave mousemove touchstart touchend touchcancel touchmove enterfullscreen", Me), g(Ue.controls, "mouseenter mouseleave", function (e) { 892 Ue.controls.hover = "mouseenter" === e.type 893 }), g(Ue.controls, "mousedown mouseup touchstart touchend touchcancel", function (e) { 894 Ue.controls.pressed = s([ "mousedown", "touchstart" ], e.type) 895 }), g(Ue.controls, "focus blur", Me, !0)), g(Ue.volume.input, "wheel", function (e) { 896 e.preventDefault(); 897 var t = e.webkitDirectionInvertedFromDevice, n = E.volumeStep / 5; 898 (e.deltaY < 0 || e.deltaX > 0) && (t ? xe(n) : we(n)), (e.deltaY > 0 || e.deltaX < 0) && (t ? we(n) : xe(n)) 899 }) 900 } 901 902 function Re() { 903 if ( g(Ue.media, "timeupdate seeking", Ie), g(Ue.media, "timeupdate", W), g(Ue.media, "durationchange loadedmetadata", Ae), g(Ue.media, "ended", function () { 904 "video" === Ue.type && E.showPosterOnEnd && ("video" === Ue.type && H(), me(), Ue.media.load()) 905 }), g(Ue.media, "progress playing", Ee), g(Ue.media, "volumechange", Te), g(Ue.media, "play pause ended", ye), g(Ue.media, "waiting canplay seeked", _e), E.clickToPlay && "audio" !== Ue.type ) { 906 var e = U("." + E.classes.videoWrapper); 907 if ( !e )return; 908 e.style.cursor = "pointer", g(e, "click", function () { 909 E.hideControls && Ue.browser.isTouch && !Ue.media.paused || (Ue.media.paused ? le() : Ue.media.ended ? (me(), le()) : ue()) 910 }) 911 } 912 E.disableContextMenu && g(Ue.media, "contextmenu", function (e) { 913 e.preventDefault() 914 }), g(Ue.media, E.events.concat([ "keyup", "keydown" ]).join(" "), function (e) { 915 A(Ue.container, e.type, !0) 916 }) 917 } 918 919 function qe() { 920 if ( s(E.types.html5, Ue.type) ) { 921 for ( var e = Ue.media.querySelectorAll("source"), t = 0; t < e.length; t++ )l(e[ t ]); 922 Ue.media.setAttribute("src", "https://cdn.selz.com/plyr/blank.mp4"), Ue.media.load(), Je("Cancelled network requests") 923 } 924 } 925 926 function De(n, r) { 927 function a() { 928 clearTimeout(Xe.cleanUp), O.boolean(r) || (r = !0), O.function(n) && n.call($e), r && (Ue.init = !1, Ue.container.parentNode.replaceChild($e, Ue.container), t.body.style.overflow = "", A($e, "destroyed", !0)) 929 } 930 931 if ( !Ue.init )return null; 932 switch ( Ue.type ) { 933 case"youtube": 934 e.clearInterval(Xe.buffering), e.clearInterval(Xe.playing), Ue.embed.destroy(), a(); 935 break; 936 case"vimeo": 937 Ue.embed.unload().then(a), Xe.cleanUp = e.setTimeout(a, 200); 938 break; 939 case"video":
940 case"audio": 941 Q(!0), a() 942 } 943 } 944 945 function He() { 946 if ( Ue.init )return null; 947 if ( N = _(), Ue.browser = n(), O.htmlElement(Ue.media) ) { 948 ee(); 949 var e = v.tagName.toLowerCase(); 950 "div" === e ? (Ue.type = v.getAttribute("data-type"), Ue.embedId = v.getAttribute("data-video-id"), v.removeAttribute("data-type"), v.removeAttribute("data-video-id")) : (Ue.type = e, E.crossorigin = null !== v.getAttribute("crossorigin"), E.autoplay = E.autoplay || null !== v.getAttribute("autoplay"), E.loop = E.loop || null !== v.getAttribute("loop")), Ue.supported = F(Ue.type), Ue.supported.basic && (Ue.container = i(v, t.createElement("div")), Ue.container.setAttribute("tabindex", 0), K(), Je("" + Ue.browser.name + " " + Ue.browser.version), ne(), (s(E.types.html5, Ue.type) || s(E.types.embed, Ue.type) && !Ue.supported.full) && (We(), Ye(), Z()), Ue.init = !0) 951 } 952 } 953 954 function We() { 955 if ( !Ue.supported.full )return ze("Basic support only", Ue.type), l(U(E.selectors.controls.wrapper)), l(U(E.selectors.buttons.play)), void Q(!0); 956 var e = !B(E.selectors.controls.wrapper).length; 957 e && z(), G() && (e && Ve(), Re(), Q(), q(), D(), ke(), Te(), Ie(), ye()) 958 } 959 960 function Ye() { 961 e.setTimeout(function () { 962 A(Ue.media, "ready") 963 }, 0), m(Ue.media, M.classes.setup, !0), m(Ue.container, E.classes.ready, !0), Ue.media.plyr = Be, E.autoplay && le() 964 } 965 966 var Be, Ue = this, Xe = {}; 967 Ue.media = v; 968 var $e = v.cloneNode(!0), Je = function () { 969 j("log", arguments) 970 }, ze = function () { 971 j("warn", arguments) 972 }; 973 return Je("Config", E), Be = { 974 getOriginal : function () { 975 return $e 976 }, 977 getContainer : function () { 978 return Ue.container 979 }, 980 getEmbed : function () { 981 return Ue.embed 982 }, 983 getMedia : function () { 984 return Ue.media 985 }, 986 getType : function () { 987 return Ue.type 988 }, 989 getDuration : fe, 990 getCurrentTime : function () { 991 return Ue.media.currentTime 992 }, 993 getVolume : function () { 994 return Ue.media.volume 995 }, 996 isMuted : function () { 997 return Ue.media.muted 998 }, 999 isReady : function () { 1000 return f(Ue.container, E.classes.ready) 1001 }, 1002 isLoading : function () { 1003 return f(Ue.container, E.classes.loading) 1004 }, 1005 isPaused : function () { 1006 return Ue.media.paused 1007 }, 1008 on : function (e, t) { 1009 return g(Ue.container, e, t), this 1010 }, 1011 play : le, 1012 pause : ue, 1013 stop : function () { 1014 ue(), me() 1015 }, 1016 restart : me, 1017 rewind : de, 1018 forward : pe, 1019 seek : me, 1020 source : Oe, 1021 poster : je, 1022 setVolume : ke, 1023 togglePlay : ce, 1024 toggleMute : he, 1025 toggleCaptions : Se, 1026 toggleFullscreen: ge, 1027 toggleControls : Me, 1028 isFullscreen : function () { 1029 return Ue.isFullscreen || !1 1030 }, 1031 support : function (e) { 1032 return r(Ue, e) 1033 }, 1034 destroy : De 1035 }, He(), Ue.init ? Be : null 1036 } 1037 1038 function C(e, n) { 1039 var r = new XMLHttpRequest; 1040 if ( !O.string(n) || !O.htmlElement(t.querySelector("#" + n)) ) { 1041 var a = t.createElement("div"); 1042 a.setAttribute("hidden", ""), O.string(n) && a.setAttribute("id", n), t.body.insertBefore(a, t.body.childNodes[ 0 ]), "withCredentials" in r && (r.open("GET", e, !0), r.onload = function () { 1043 a.innerHTML = r.responseText 1044 }, r.send()) 1045 } 1046 } 1047 1048 function F(e) { 1049 var r = n(), a = r.isIE && r.version <= 9, s = r.isIos, o = r.isIphone, i = !!t.createElement("audio").canPlayType, l = !!t.createElement("video").canPlayType, u = !1, c = !1; 1050 switch ( e ) { 1051 case"video": 1052 u = l, c = u && !a && !o; 1053 break; 1054 case"audio": 1055 u = i, c = u && !a; 1056 break; 1057 case"vimeo": 1058 u = !0, c = !a && !s; 1059 break; 1060 case"youtube": 1061 u = !0, c = !a && !s, s && !o && r.version >= 10 && (c = !0); 1062 break; 1063 case"soundcloud": 1064 u = !0, c = !a && !o; 1065 break; 1066 default: 1067 u = i && l, c = u && !a 1068 } 1069 return { basic: u, full: c } 1070 } 1071 1072 function A(e, n) { 1073 function r(e, t) { 1074 f(t, M.classes.hook) || a.push({ target: e, media: t }) 1075 } 1076 1077 var a = [], s = [], o = [ M.selectors.html5, M.selectors.embed ].join(","); 1078 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(
1078o)), O.nodeList(e) && (e = Array.prototype.slice.call(e)), !F().basic || !e.length )return !1; 1079 for ( var i = 0; i < e.length; i++ ) { 1080 var l = e[ i ], u = l.querySelectorAll(o); 1081 if ( u.length )for ( var c = 0; c < u.length; c++ )r(l, u[ c ]); else y(l, o) && r(l, l) 1082 } 1083 return a.forEach(function (e) { 1084 var t = e.target, r = e.media, a = !1; 1085 r === t && (a = !0); 1086 var o = {}; 1087 try { 1088 o = JSON.parse(t.getAttribute("data-plyr")) 1089 } catch ( e ) { 1090 } 1091 var i = x({}, M, n, o); 1092 if ( !i.enabled )return null; 1093 var l = new E(r, i); 1094 if ( O.object(l) ) { 1095 if ( i.debug ) { 1096 var u = i.events.concat([ "setup", "statechange", "enterfullscreen", "exitfullscreen", "captionsenabled", "captionsdisabled" ]); 1097 g(l.getContainer(), u.join(" "), function (e) { 1098 console.log([ i.logPrefix, "event:", e.type ].join(" "), e.detail.plyr) 1099 }) 1100 } 1101 h(l.getContainer(), "setup", !0, { plyr: l }), s.push(l) 1102 } 1103 }), s 1104 } 1105 1106 function I(e) { 1107 if ( O.string(e) ? e = t.querySelector(e) : O.undefined(e) && (e = t.body), O.htmlElement(e) ) { 1108 var n = e.querySelectorAll("." + M.classes.setup), r = []; 1109 return Array.prototype.slice.call(n).forEach(function (e) { 1110 O.object(e.plyr) && r.push(e.plyr) 1111 }), r 1112 } 1113 return [] 1114 } 1115 1116 var N, P = { x: 0, y: 0 }, M = { 1117 enabled : !0, 1118 debug : !1, 1119 autoplay : !1, 1120 loop : !1, 1121 seekTime : 10, 1122 volume : 10, 1123 volumeMin : 0, 1124 volumeMax : 10, 1125 volumeStep : 1, 1126 duration : null, 1127 displayDuration : !0, 1128 loadSprite : !0, 1129 iconPrefix : "plyr", 1130 iconUrl : "https://cdn.plyr.io/2.0.10/plyr.svg", 1131 clickToPlay : !0, 1132 hideControls : !0, 1133 showPosterOnEnd : !1, 1134 disableContextMenu: !0, 1135 keyboardShorcuts : { focused: !0, global: !1 }, 1136 tooltips : { controls: !1, seek: !0 }, 1137 selectors : { 1138 html5 : "video, audio", 1139 embed : "[data-type]", 1140 editable : "input, textarea, select, [contenteditable]", 1141 container : ".plyr", 1142 controls : { container: null, wrapper: ".plyr__controls" }, 1143 labels : "[data-plyr]", 1144 buttons : { 1145 seek : '[data-plyr="seek"]', 1146 play : '[data-plyr="play"]', 1147 pause : '[data-plyr="pause"]', 1148 restart : '[data-plyr="restart"]', 1149 rewind : '[data-plyr="rewind"]', 1150 forward : '[data-plyr="fast-forward"]', 1151 mute : '[data-plyr="mute"]', 1152 captions : '[data-plyr="captions"]', 1153 fullscreen: '[data-plyr="fullscreen"]' 1154 }, 1155 volume : { input: '[data-plyr="volume"]', display: ".plyr__volume--display" }, 1156 progress : { 1157 container: ".plyr__progress", 1158 buffer : ".plyr__progress--buffer", 1159 played : ".plyr__progress--played" 1160 }, 1161 captions : ".plyr__captions", 1162 currentTime: ".plyr__time--current", 1163 duration : ".plyr__time--duration" 1164 }, 1165 classes : { 1166 setup : "plyr--setup", 1167 ready : "plyr--ready", 1168 videoWrapper: "plyr__video-wrapper", 1169 embedWrapper: "plyr__video-embed", 1170 type : "plyr--{0}", 1171 stopped : "plyr--stopped", 1172 playing : "plyr--playing", 1173 muted : "plyr--muted", 1174 loading : "plyr--loading", 1175 hover : "plyr--hover", 1176 tooltip : "plyr__tooltip", 1177 hidden : "plyr__sr-only", 1178 hideControls: "plyr--hide-controls", 1179 isIos : "plyr--is-ios", 1180 isTouch : "plyr--is-touch", 1181 captions : { enabled: "plyr--captions-enabled", active: "plyr--captions-active" }, 1182 fullscreen : { enabled: "plyr--fullscreen-enabled", active: "plyr--fullscreen-active" }, 1183 tabFocus : "tab-focus" 1184 }, 1185 captions : { defaultActive: !1 }, 1186 fullscreen : { enabled: !0, fallback: !0, allowAudio: !1 }, 1187 storage : { enabled: !0, key: "plyr" }, 1188 controls : [ "play-large", "play", "progress", "current-time", "mute", "volume", "captions", "fullscreen" ], 1189 i18n : { 1190 restart : "Restart", 1191 rewind : "Rewind {seektime} secs", 1192 play : "Play", 1193 pause : "Pause", 1194 forward : "Forward {seektime} secs", 1195 played : "played", 1196 buffered : "buffered", 1197 currentTime : "Current time", 1198 duration : "Duration", 1199 volume : "Volume", 1200 toggleMute : "Toggle Mute", 1201 toggleCaptions : "Toggle Captions", 1202 toggleFullscreen: "Toggle Fullscreen", 1203 frameTitle : "Player for {title}" 1204 }, 1205 types : { 1206 embed: [ "youtube", "vimeo", "soundcloud" ], 1207 html5: [ "video", "audio" ] 1208 }, 1209 urls : { 1210 vimeo : { api: "https://player.vimeo.com/api/player.js" }, 1211 youtube : { api: "https://www.youtube.com/iframe_api" }, 1212 soundcloud: { api: "https://w.soundcloud.com/player/api.js" } 1213 }, 1214 listeners : { 1215 seek : null, 1216 play : null, 1217 pause : null, 1218 restart : null, 1219 rewind : null, 1220 forward : null, 1221 mute : null, 1222 volume : null, 1223 captions : null, 1224 fullscreen: null 1225 }, 1226 events : [ "ready", "ended", "progress", "stalled", "playing", "waiting", "canplay", "canplaythrough", "loadstart", "loadeddata", "loadedmetadata", "timeupdate", "volumechange", "play", "pause", "error", "seeking", "seeked", "emptied" ], 1227 logPrefix : "[Plyr]" 1228 }, O = { 1229 object : function (e) { 1230 return null !== e && "object" == typeof e 1231 }, array : function (e) { 1232 return null !== e && "object" == typeof e && e.constructor === Array 1233 }, number : function (e) { 1234 return null !== e && ("number" == typeof e && !isNaN(e - 0) || "object" == typeof e && e.constructor === Number) 1235 }, string : function (e) { 1236 return null !== e && ("string" == typeof e || "object" == typeof e && e.constructor === String) 1237 }, boolean : function (e) { 1238 return null !== e && "boolean" == typeof e 1239 }, nodeList : function (e) { 1240 return null !== e && e instanceof NodeList 1241 }, htmlElement: function (e) { 1242 return null !== e && e instanceof HTMLElement 1243 }, function : function (e) { 1244 return null !== e && "function" == typeof e 1245 }, undefined : function (e) { 1246 return null !== e && "undefined" == typeof e 1247 } 1248 }, L = { 1249 supported: function () { 1250 if ( !("localStorage" in e) )return !1; 1251 try { 1252 e.localStorage.setItem("___test", "OK"); 1253 var t = e.localStorage.getItem("___test"); 1254 return e.localStorage.removeItem("___test"), "OK" === t 1255 } catch ( e ) { 1256 return !1 1257 } 1258 return !1 1259 }() 1260 }; 1261 return { setup: A, supported: F, loadSprite: C, get: I } 1262}), function () { 1263 function e(e, t) { 1264 t = t || { bubbles: !1, cancelable: !1, detail: void 0 }; 1265 var n = document.createEvent("CustomEvent");
1266 return n.initCustomEvent(e, t.bubbles, t.cancelable, t.detail), n 1267 } 1268 1269 "function" != typeof window.CustomEvent && (e.prototype = window.Event.prototype, window.CustomEvent = e) 1270}();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.