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