1/*! 2 3 Flowplayer HTML5 quality selector plugin 4 5 Copyright (c) 2016, Flowplayer Oy 6 7 Released under the MIT License: 8 http://www.opensource.org/licenses/mit-license.php 9 10 revision: a0ee936 11 12 */ 13! function() { 14 "use strict"; 15 var t = function(t) { 16 t(function(e, i) { 17 function a(t) { 18 return t.sources.some(function(t) { 19 return /mpegurl/i.test(t.type); 20 }) 21 } 22 23 function n(t) { 24 var e = document.createElement("video"); 25 return !!e.canPlayType(t).replace("no", "") 26 } 27 28 function l(t, e) { 29 var i = /-(\d+p)(\.(mp4|webm))?$/.exec(t); 30 if (i && -1 !== e.indexOf(i[1])) return i[1] 31 } 32 33 function r() { 34 e.qualities && e.qualities.length && (c.removeClass(i, "quality-abr"), e.qualities.forEach(function(t) { 35 c.removeClass(i, "quality-" + t) 36 })) 37 } 38 39 function u(t, e) { 40 if ("abr" === t) return "abr"; 41 var i, a = parseInt(t, 0); 42 return e.forEach(function(t, n) { 43 n != e.length - 1 || i || (i = t), parseInt(t) <= a && parseInt(e[n + 1]) > a && (i = t) 44 }), i 45 } 46 47 function s(i, a, n) { 48 var l, r = !1, 49 u = a === e.defaultQuality, 50 qu = i.qualitiesUrl, 51 s = e.quality || Math.min(e.video.height, e.video.width) + "p"; 52 var qus = Object.keys(qu).map(function(key) { 53 return qu[key]; 54 }); 55 var qqq = qu.a; 56 57 58 l = s === e.defaultQuality ? /(.+?)((\.(mp4|webm)$|$))/ : /(-\d+p)?((\.(mp4|webm)$|$))/; 59 var o = i.sources.map(function(t) { 60 if ("abr" === a || n && u || /mpegurl/i.test(t.type)) return t; 61 var i = { 62 type: t.type, 63 src: qu[a] 64 }; 65 66 return i.src !== t.src && (r = !0), i 67 68 }), 69 c = JSON.stringify(o); 70 o.sort(function(t, e) { 71 var i, n = /mpegurl/i; 72 return i = "abr" === a ? n.test(e.type) - n.test(t.type) : n.test(t.type) - n.test(e.type) 73 }), r = r || JSON.stringify(o) !== c; 74 var f = t.extend({}, i, { 75 sources: o 76 }); 77 return r ? f : !1 78 } 79 var o = t.bean, 80 c = t.common, 81 f = !1, 82 p = !1; 83 e.conf.hlsjs !== !1 && t.engines.forEach(function(t) { 84 "hlsjs" === t.engineName && t.canPlay("application/x-mpegurl", e.conf) && (p = !0) 85 }), e.pluginQualitySelectorEnabled || (e.pluginQualitySelectorEnabled = !0, t.support.inlineVideo && (e.conf.qualities && (e.conf.qualities = "string" == typeof e.conf.qualities ? e.conf.qualities.split(",") : e.conf.qualities), o.on(i, "click", ".fp-quality-selector li", function(t) { 86 var i = t.currentTarget; 87 if (!c.hasClass(i, "active")) { 88 var a, n = e.finished ? 0 : e.video.time, 89 l = i.getAttribute("data-quality"); 90 if (a = s(e.video, l), e.quality = l, !a) return; 91 f = !0, p && a.hlsjs !== !1 && !e.live && n && "abr" === l && (a.hlsjs = { 92 startPosition: n 93 }), e.load(a, function() { 94 f = !1, e.finished = !1, !n || e.live || a.hlsjs && a.hlsjs.startPosition ? a.hlsjs && (a.hlsjs.startPosition = 0) : e.seek(n, function() { 95 e.resume() 96 }) 97 }) 98 } 99 }), e.on("load", function(t, e, i) { 100 if (e.qualities = i.qualities || e.conf.qualities || [], e.defaultQuality = i.defaultQuality || e.conf.defaultQuality, "string" == typeof e.qualities && (e.qualities = e.qualities.split(",")), e.quality) { 101 var a = u(e.quality, e.qualities), 102 n = s(i, a, !f); 103 !f && n && (t.preventDefault(), e.loading = !1, e.load(n)) 104 } 105 }).on("ready", function(t, e, u) { 106 var s = /mpegurl/i.test(u.type) ? "abr" : l(u.src, e.qualities) || Math.min(u.height, u.width) + "p"; 107 r(), c.addClass(i, "quality-" + s); 108 var o = c.find(".fp-ui", i)[0]; 109 if (c.removeNode(c.find(".fp-quality-selector", o)[0]), !(e.qualities.length < 2)) { 110 e.quality = s; 111 var f = c.createElement("ul", { 112 "class": "fp-quality-selector" 113 }); 114 o.appendChild(f), (a(u) && n("application/x-mpegurl") || e.conf.swfHls) && f.appendChild(c.createElement("li", { 115 "data-quality": "abr", 116 "class": "abr" === s ? "active" : "" 117 }
117, "Auto")), e.qualities.forEach(function(t) { 118 f.appendChild(c.createElement("li", { 119 "data-quality": t, 120 "class": t == s ? "active" : "" 121 }, t)) 122 }) 123 } 124 }).on("unload", function() { 125 r(), c.removeNode(c.find(".fp-quality-selector", i)[0]) 126 }))) 127 }) 128 }; 129 "object" == typeof module && module.exports ? module.exports = t : window.flowplayer && t(window.flowplayer) 130}();
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.