/*! * Mui Player Javascript Library v1.6.0 @Professional edition * Date:2021-12-01 * Released under GPL-3.0 license * https://muiplayer.js.org/ */ "use strict"; function _toConsumableArray(e) { return _arrayWithoutHoles(e) || _iterableToArray(e) || _unsupportedIterableToArray(e) || _nonIterableSpread() } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.") } function _iterableToArray(e) { if ("undefined" != typeof Symbol && null != e[Symbol.iterator] || null != e["@@iterator"]) return Array.from(e) } function _arrayWithoutHoles(e) { if (Array.isArray(e)) return _arrayLikeToArray(e) } function _createForOfIteratorHelper(e, t) { var o = "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"]; if (!o) { if (Array.isArray(e) || (o = _unsupportedIterableToArray(e)) || t && e && "number" == typeof e.length) { o && (e = o); var r = 0, t = function() {}; return { s: t, n: function() { return r >= e.length ? { done: !0 } : { done: !1, value: e[r++] } }, e: function(e) { throw e }, f: t } } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.") } var n, l = !0, i = !1; return { s: function() { o = o.call(e) }, n: function() { var e = o.next(); return l = e.done, e }, e: function(e) { i = !0, n = e }, f: function() { try { l || null == o.return || o.return() } finally { if (i) throw n } } } } function _unsupportedIterableToArray(e, t) { if (e) { if ("string" == typeof e) return _arrayLikeToArray(e, t); var o = Object.prototype.toString.call(e).slice(8, -1); return "Map" === (o = "Object" === o && e.constructor ? e.constructor.name : o) || "Set" === o ? Array.from(e) : "Arguments" === o || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o) ? _arrayLikeToArray(e, t) : void 0 } } function _arrayLikeToArray(e, t) { (null == t || t > e.length) && (t = e.length); for (var o = 0, r = new Array(t); o < t; o++) r[o] = e[o]; return r } function _typeof(e) { return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { return typeof e } : function(e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e })(e) } !function(e, t) { "object" == ("undefined" == typeof exports ? "undefined" : _typeof(exports)) && "object" == ("undefined" == typeof module ? "undefined" : _typeof(module)) ? module.exports = t() : "function" == typeof define && _typeof(define.amd) ? define(t) : e.MuiPlayer = t() }(window, function() { var MuiPlayer = function MuiPlayer(config) { var _this = this; _this._global_ = {}; var webpagePlugin = "", mobilePlugin = "", hls = null, flv = null, option = config || {}, plugins = option.plugins || []; this._event_ = {}; var con = "string" == typeof option.container ? document.querySelector(option.container) : option.container, $CONSTANT, $habit, $node, $global, element, $el, variable, $data, $method; con && ($CONSTANT = { unitLengthReg: /^(auto|inherit|initial|\d+(\.\d+)?(\%|px|cm|mm|em|rem|vw|vh|)?)$/i, encodeKey: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" }, $habit = { themeColor: "#1e98d4" }, $node = { video: '\x3c!-- HTML5 Video --\x3e
', mplayerPoster: '
', mplayerCover: '\x3c!-- 媒体播放遮罩层 --\x3e
', mplayerLoading: '\x3c!-- Mplayer加载Loading --\x3e
', mplayerError: '\x3c!-- 视频加载错误显示 --\x3e
视频加载失败,点击刷新或切换线路
', mplayerHeader: '\x3c!-- Mplayer 顶部导航 --\x3e
', mplayerFooter: '\x3c!-- Mplayer 底部操作控件 --\x3e', miniProgress: '\x3c!-- Mplayer 底部播放迷你进度条 --\x3e
\x3c!--加载进度条总长--\x3e
\x3c!--资源缓存进度--\x3e
\x3c!--播放进度--\x3e
' }, $global = function() { return { first_authplay: !1, isReady: !1, webpagePlugin: {}, mobilePlugin: {}, cssAutoprefixer: ["webkit", "ms", "moz", "o"] } }, element = function() { return { mPlayer: con, videoObject: con.querySelector("video"), mplayerCover: con.querySelector("#mplayer-cover"), mplayerPoster: con.querySelector("#mplayer-poster"), mplayerHeader: con.querySelector("#mplayer-header"), headerMenu: con.querySelector("#buttom-group"), backButton: con.querySelector("#back-button"), mplayerFooter: con.querySelector("#mplayer-footer"), progressContainer: con.querySelector("#progress-container"), playSwitch: con.querySelector("#play-switch"), fullSwitch: con.querySelector("#full-switch"), progressBall: con.querySelector("#progress-ball"), progressBegin: con.querySelector("#progress-begin"), progressLong: con.querySelector("#progress-long"), touchEffective: con.querySelector("#touch-effective"), progressBuffered: con.querySelector("#progress-buffered"), progressPlay: con.querySelector("#progress-play"), miniProgress: con.querySelector("#mini-progress"), miniBuffered: con.querySelector("#mini-buffered"), miniPlay: con.querySelector("#mini-play"), mplayerLoading: con.querySelector("#mplayer-loading"), mplayerError: con.querySelector("#mplayer-error") } }, $el = new element, variable = function() { return { mediaPlayDirectives: 0, isFullScreen: !1, showScreenControls: !1, ball_move_status: !1, isPlay: !1, mediaStatus: !1, duration: 0, percentage: 0, currentTime: 0, playError: 0, isDestory: !1, startX: null, startY: null, moveX: null, moveY: null, _defaultPlayProgressPro: null, isTouchMove: !1 } }, $data = new variable, $method = { getLanguageText: function() { return { "zh-cn": { srcNull: "视频地址为空", begin: "开始", end: "结束", live: "直播", settings: "设置", coveredPlay: "铺满播放", loopPlay: "循环播放", playbackSpeed: "播放速度", share: "分享", pictureInPicture: "画中画", exitPictureInPicture: "退出画中画", pageScreen: "网页全屏", exitPageScreen: "退出网页全屏", fullScreen: "全屏", exitFullScreen: "退出全屏", normal: "正常", open: "打开", subtitles: "字幕", selectLangage: "选择语言", dsps: "切换到默认倍速度播放", tsps: "切换到?倍速度播放", errorTip: "视频加载失败,点击刷新或切换线路", shortcuts: "快捷键", shortcutsPanel: { title: "快捷功能", space: "空格", spaceAction: "播放/暂停", esc: "退出全屏", up: "音量增加5%", down: "音量减少5%", right: "快进5秒", left: "快退5秒" } }, en: { srcNull: "Video address is empty", begin: "Begin", end: "End", live: "Live", settings: "Settings", coveredPlay: "Covered play", loopPlay: "Loop play", playbackSpeed: "Playback speed", share: "Share", pictureInPicture: "Picture in picture", exitPictureInPicture: "Exit picture in picture", pageScreen: "Page screen", exitPageScreen: "Exit page screen", fullScreen: "Full screen", exitFullScreen: "Exit full screen", normal: "Normal", open: "Open", subtitles: "Subtitles", selectLangage: "Select langage", dsps: "to default speed playback", tsps: "to ?x speed playback", errorTip: "Video failed to load, click refresh", shortcuts: "Shortcuts", shortcutsPanel: { title: "Shortcuts function", space: "Space", spaceAction: "play/pause", esc: "exit full screen", up: "voice increase 5%", down: "voice reduce 5%", right: "fast forward 5 seconds", left: "fast backward 5 seconds" } }, "zh-tw": { srcNull: "視頻地址為空", begin: "開始", end: "結束", live: "直播", settings: "設置", coveredPlay: "鋪滿播放", loopPlay: "循環播放", playbackSpeed: "播放速度", share: "分享", pictureInPicture: "畫中畫", exitPictureInPicture: "退出畫中畫", pageScreen: "網頁全屏", exitPageScreen: "退出網頁全屏", fullScreen: "全屏", exitFullScreen: "退出全屏", normal: "正常", open: "打開", subtitles: "字幕", selectLangage: "選擇語言", dsps: "切換到默認倍速度播放", tsps: "切換到?倍速度播放", errorTip: "視頻加載失敗,點擊刷新或切換線路", shortcuts: "快捷鍵", shortcutsPanel: { title: "快捷功能", space: "空格", spaceAction: "播放/暫停", esc: "退出全屏", up: "音量增加5%", down: "音量减少5%", right: "快進5秒", left: "快退5秒" } } } }, getLangObject: function() { var e = option.lang || navigator.language || navigator.browserLanguage || "zh-cn"; return -1 != ["zh-cn", "en", "zh-tw"].indexOf(e.toLowerCase()) ? $method.getLanguageText()[e.toLowerCase()] : $method.getLanguageText()["zh-cn"] }, initCreateMplayer: function(e) { for (var t = $node.video + $node.mplayerPoster + $node.mplayerCover + $node.mplayerLoading + $node.mplayerError + $node.mplayerHeader + $node.mplayerFooter + $node.miniProgress, t = $node.logWrite ? t + $node.logWrite : t, o = 0; o < plugins.length; o++) "androd" != $method.returnSys() && "ios" != $method.returnSys() || plugins[o] instanceof Object && "MuiPlayerMobilePlugin" == plugins[o].name && (mobilePlugin = plugins[o]), "window" == $method.returnSys() && plugins[o] instanceof Object && "MuiPlayerDesktopPlugin" == plugins[o].name && (webpagePlugin = plugins[o]); t = t.toString().replace(//g, ""); t = $method.createRangeIsDocFragment(t), t = $method.initConifgAttribute(t, e); t = $method.initConfigControl(t), t = $method.initConfigCustom(t), t = $method.initConfigTheme(t); e = { option: option, _this: _this, $el: element, $data: $data, $method: $method, $habit: $habit, $CONSTANT: $CONSTANT }; mobilePlugin && (t = mobilePlugin.appendTemplate(t, e)), webpagePlugin && (t = webpagePlugin.appendTemplate(t, e)); e = con.querySelector("#mplayer-media-wrapper"); e && $method.removeNode(con, "#mplayer-media-wrapper"), (e = document.createElement("div")).setAttribute("id", "mplayer-media-wrapper"), e.setAttribute("class", "player-wrapper"), e.appendChild(t), $el.mPlayer.appendChild(e), option.src ? ($method.playerReady(), setTimeout(function() { _this._global_.isReady = !0, _this.emit("ready"), setTimeout(function() { $method.onScreenResize({ type: "showControls" }) }, 10) }, 100)) : $method.showToast($method.getLangObject().srcNull) }, onAction: function() {}, playerReady: function() { $method.resetVariable(), !0 === option.autoplay && ($data.mediaPlayDirectives = 1, $method.onPlay()), $method.toggleEventListenerGlobal("add", "playerReady"), $method.toggleEventListenerCustom("add"), $method.nodesObserver() }, overloadingEl: function() { $el = new element; for (var e = 0, t = Object.keys($el); e < t.length; e++) { var o = t[e]; "mPlayer" != o && ($el[o] || ($el[o] = { style: {}, classList: { add: function() {}, contains: function() {}, remove: function() {} }, addEventListener: function() {}, removeEventListener: function() {} }), $el[o].querySelector = function(e) { e = this.querySelectorAll ? this.querySelectorAll(e) : []; return e[0] || { exist: !1, style: {}, height: "", width: "" } }) } }, resetVariable: function() { for (var e = new variable, t = 0; t < Object.keys(e).length; t++) { var o = Object.keys(e)[t]; $data[o] = e[o] } $method.overloadingEl(), _this._global_ = new $global }, plusRuntimeHandle: function(e) { "resume" == (e = e || {}).type && (_this._global_._beferPlayState && $el.videoObject.play(), $data.isFullScreen && plus.navigator.hideSystemNavigation()), "pause" == e.type && (_this._global_._beferPlayState = $data.isPlay, $el.videoObject.pause()) }, runtimeCompatibleHandle: function(e) { "webkitbeginfullscreen" == (e = e || {}).type && $method.createTimerCloseControl({ type: "cancel" }), "webkitendfullscreen" == e.type && $method.createTimerCloseControl() }, assginConfig: function() { option.themeColor && ($habit.themeColor = option.themeColor) }, parseCamel: function(e) { return e.replace(/\B([A-Z])/g, "-$1").toLowerCase() }, createRangeIsDocFragment: function(e) { var t = document.createRange(); return t.selectNode($el.mPlayer), t.createContextualFragment(e) }, consoleLog: function(e, t) { "development" == process.env.NODE_ENV && console[t || "log"](e) }, removeNode: function(e, t) { e instanceof Element || e instanceof DocumentFragment ? (e = e.querySelector(t)) instanceof Element ? e.parentNode.removeChild(e) : console.warn("the body element not query the selector node......") : (t = document.querySelector(t)) ? t.parentNode.removeChild(t) : console.warn("from document not query the selector node......") }, getKeyCode: function(e) { return e.keyCode || e.which || "" }, focusToggle: function(e) { $el.mPlayer.classList["ON" == e ? "add" : "remove"]("mp-keyboard-focus") }, setElementStyle: function(e, t) { var o = Object.keys(t); if (0 < o.length) { var r, n = _createForOfIteratorHelper(o); try { for (n.s(); !(r = n.n()).done;) { var l = r.value; e.style[$method.parseCamel(l)] = t[l] } } catch (e) { n.e(e) } finally { n.f() } e.setAttribute("stylesheet", JSON.stringify(t)) } }, initConfigTheme: function(e) { return $method.assginConfig(), e.querySelector("#progress-play") && (e.querySelector("#progress-play").style.background = $habit.themeColor), e.querySelector("#mplayer-loading") && (e.querySelector("#mplayer-loading").style.color = $habit.themeColor), e.querySelector("#mini-play") && (e.querySelector("#mini-play").style.background = $habit.themeColor), e.querySelector("#live-mode") && (e.querySelector("#live-mode .spot").style.background = $habit.themeColor), e }, initConfigCustom: function(e) { for (var t = option.custom || {}, o = t.headControls || [], r = 0; r < o.length && !(5 <= r); r++) o[r] instanceof Object && o[r].slot && (l = o[r].slot, (i = $el.mPlayer.querySelector("[slot=" + l + "]")) && (a = "TEMPLATE" == i.tagName ? i.content.cloneNode(!0) : $method.createRangeIsDocFragment(i.innerHTML), (s = document.createElement("button")).setAttribute("class", "player-btn header-control"), s.setAttribute("slot", l), s.setAttribute("control", ""), o[r].click instanceof Function && s.classList.add("keyboard-input"), o[r].style && o[r].style instanceof Object && $method.setElementStyle(s, o[r].style), s.appendChild(a), e.querySelector("#buttom-group").insertBefore(s, e.querySelector("#buttom-group .header-control")), i.style.display = "none")); for (var n = t.footerControls || [], r = 0; r < n.length && !(5 <= r); r++) n[r] instanceof Object && n[r].slot && (l = n[r].slot, (i = $el.mPlayer.querySelector("[slot=" + l + "]")) && (a = "TEMPLATE" == i.tagName ? i.content.cloneNode(!0) : $method.createRangeIsDocFragment(i.innerHTML), (s = document.createElement("button")).setAttribute("class", "player-btn footer-control"), s.setAttribute("slot", l), s.setAttribute("control", ""), n[r].tooltip && s.setAttribute("tooltip", n[r].tooltip), n[r].click instanceof Function && s.classList.add("keyboard-input"), n[r].style && n[r].style instanceof Object && $method.setElementStyle(s, n[r].style), s.appendChild(a), "left" == n[r].position ? e.querySelector("#mplayer-footer #left-part").appendChild(s) : e.querySelector("#mplayer-footer #right-part").insertBefore(s, e.querySelector("#mplayer-footer #right-part").childNodes[0]), i.style.display = "none")); for (var l, i, a, s, c, d = t.rightSidebar || [], r = 0; r < d.length && !(5 <= r); r++) d[r] instanceof Object && d[r].slot && (l = d[r].slot, (i = $el.mPlayer.querySelector("[slot=" + l + "]")) && (a = "TEMPLATE" == i.tagName ? i.content.cloneNode(!0) : $method.createRangeIsDocFragment(i.innerHTML), (s = document.createElement("div")).appendChild(a), s.setAttribute("slot", l), s.setAttribute("class", "mplayer-sidebar"), c = d[r].width || "", $CONSTANT.unitLengthReg.test(c) && (s.style.width = isNaN(Number(c)) ? c : c + "px"), e.appendChild(s), i.style.display = "none")); return e }, initConfigControl: function(e) { !1 !== option.showMiniProgress && !0 !== option.live || $method.removeNode(e, "#mini-progress"), !0 === option.live ? (e.querySelector("#live-mode .mode-text").innerText = $method.getLangObject().live, $method.removeNode(e, "#progress-container")) : $method.removeNode(e, "#live-mode"), !1 === option.pageHead && (e.querySelector("#mplayer-header").style.opacity = 0); var t = option.subtitle || {}, o = t.tracks, r = t.styles; if ("[object Array]" === Object.prototype.toString.call(o) && 0 < o.length) { for (var n = document.createDocumentFragment(), l = 0; l < o.length; l++) { var i, a = o[l]; "object" == _typeof(a) && /.\.vtt$/.test(a.src) && ((i = document.createElement("track")).setAttribute("src", a.src), i.setAttribute("kind", a.kind || "subtitles"), i.setAttribute("label", a.label || "字幕" + (l + 1)), a.srclang && i.setAttribute("srclang", a.srclang), !0 === a.default && i.setAttribute("default", !0), n.appendChild(i)) } e.querySelector("video").appendChild(n) } if ("[object Object]" == Object.prototype.toString.call(r) && 0 < Object.keys(r).length) { var s = document.createElement("style"); s.setAttribute("id", "pseudo-classes-cue"), s.setAttribute("type", "text/css"); for (var c = "", d = 0, u = Object.keys(r); d < u.length; d++) { var p = u[d]; c += $method.parseCamel(p) + ":" + r[p] + "!important;" } t = document.createTextNode(".m-player video::cue {" + c + "}"); s.appendChild(t), document.getElementsByTagName("head").item(0).appendChild(s) } return e }, initConifgAttribute: function(a, e) { var t = $el.mPlayer.getBoundingClientRect(), o = t.width, r = t.height; $el.mPlayer.classList.add("m-player"), $el.mPlayer.setAttribute("tabindex", "0"); var n, t = option.width || "auto"; !$CONSTANT.unitLengthReg.test(t) && !0 !== e || $data.isFullScreen || (n = isNaN(Number(t)) ? t : t + "px", $el.mPlayer.style.width = !0 === e ? o + "px" : n, !0 === e && setTimeout(function() { $el.mPlayer.style.width = n }, 800)); var l, o = option.height || "225px"; !$CONSTANT.unitLengthReg.test(o) && !0 !== e || $data.isFullScreen || (l = isNaN(Number(o)) ? o : o + "px", $el.mPlayer.style.height = !0 === e ? r + "px" : l, !0 === e && !1 === option.autoFit && setTimeout(function() { $el.mPlayer.style.height = l }, 800)), 0 <= option.volume && option.volume <= 1 && (a.querySelector("video").volume = option.volume), !0 === option.muted && (a.querySelector("video").muted = !0); function i(e, t) { var o = a.querySelector("video"); if ("src" == e) { var r = option.parse || {}, n = r.type, l = r.loader, i = r.config || {}; if (r.customKernel && r.customKernel instanceof Function) return console.info("custom kernel..."), r.customKernel(o, t), 0; if (o.setAttribute(e, t), "hls" == n) { if ("function" != typeof l) return; 1 == l.isSupported() ? $method.hlsDecodeAction(o, t, { loader: l, config: i }) : console.error("browser does not support hls js. to check whether your browser is supporting MediaSource Extensions.") } "flv" == n && "object" == _typeof(l) && (1 == l.isSupported() ? $method.flvDecodeAction(o, t, { loader: l, config: i }) : console.error("browser does not support flv js. to check whether your browser is supporting MediaSource Extensions.")) } else o.setAttribute(e, t) } option.src && i("src", option.src), // !0 === option.autoplay && i("autoplay", "autoplay"), !0 === option.autoplay && i("autoplay",option.autoplay), 1 == option.autoplay || option.preload && i("preload", option.preload), option.loop && i("loop", "loop"); var s = option.videoAttribute || []; if (0 < s.length) for (var c = 0; c < s.length; c++) i(s[c].attrKey, s[c].attrValue); return option.poster ? ((e = document.createElement("img")).setAttribute("src", option.poster), e.setAttribute("style", "width: 100%;height: 100%;object-fit: cover;"), a.querySelector("#mplayer-poster").appendChild(e)) : $method.removeNode(a, "#mplayer-poster"), option.title && (a.querySelector("#title-name").innerHTML = option.title), !0 === option.initFullFixed && $el.mPlayer.classList.add("page-fullscreen"), "square" == option.dragSpotShape && (a.querySelector("#progress-ball .progress-ball").style.borderRadius = "3px", a.querySelector("#progress-ball .progress-ball").style.width = "9px", a.querySelector("#progress-ball .progress-ball").style.height = "14px"), "cover" == option.objectFit && a.querySelector("video").classList.add("covered"), a.querySelector("#mplayer-footer #full-switch").setAttribute("tooltip", $method.getLangObject().fullScreen), a.querySelector("#mplayer-error .errop-tip").innerText = $method.getLangObject().errorTip, a.querySelector("#progress-begin").innerText = $method.getLangObject().begin, a.querySelector("#progress-long").innerText = $method.getLangObject().end, a }, hlsDecodeAction: function(e, t, o) { console.info("hls create..."); var r = Object.assign({ autoStartLoad: !0 === option.autoplay || "none" != option.preload }, o.config); (hls = new o.loader(r)).attachMedia(e), hls.on(o.loader.Events.MEDIA_ATTACHED, function() { hls.loadSource(t) }), hls.on(o.loader.Events.ERROR, $method.onError) }, flvDecodeAction: function(e, t, o) { console.info("flv create..."); t = Object.assign({ type: "flv", url: t }, o.config); (flv = o.loader.createPlayer(t)).attachMediaElement(e), !0 !== option.autoplay && "none" == option.preload || flv.load(), flv.on(o.loader.Events.ERROR, $method.onError) }, hasNotchInScreen: function() { return !!window.plus && plus.navigator.hasNotchInScreen() }, applicationFullHandle: function(e) { window.plus && (this._landscape_lock = function() { plus.navigator.setFullscreen(!0), plus.screen.lockOrientation("landscape"), setTimeout(function() { plus.navigator.hideSystemNavigation() }, 200), setTimeout(function() { var e = plus.navigator.getStatusbarHeight(), e = $method.hasNotchInScreen() ? e + 10 : 10; $el.mplayerHeader.style.paddingLeft = e + "px", $el.mplayerHeader.style.paddingRight = e + "px", $el.mplayerFooter.style.paddingLeft = e + "px", $el.mplayerFooter.style.paddingRight = e + "px", $el.progressContainer.style.left = e + "px", $el.progressContainer.style.right = e + "px" }, 100) }, this._portrait_lock = function() { plus.navigator.setFullscreen(!1), plus.screen.lockOrientation("portrait"), setTimeout(function() { $el.mplayerHeader.style.paddingLeft = "10px", $el.mplayerHeader.style.paddingRight = "10px", $el.mplayerFooter.style.paddingLeft = "10px", $el.mplayerFooter.style.paddingRight = "10px" }, 100) }) }, setTooltipText: function(e, t) { e.setAttribute && e.setAttribute("tooltip", t), $el.mplayerFooter.querySelector(".mp-tooltip").innerText = t }, fullToggle: function(e) { (e = e || { type: "" }).stopPropagation && e.stopPropagation(); _this._global_.generate_fullscreen_listener || (_this._global_.generate_fullscreen_listener = !0, $el.mPlayer.requestFullscreen ? document.addEventListener("fullscreenchange", function() { document.fullscreenElement ? $method.fullScreenChangeAction("Y") : $method.fullScreenChangeAction("N") }) : $el.mPlayer.webkitRequestFullscreen ? document.addEventListener("webkitfullscreenchange", function() { document.webkitFullscreenElement ? $method.fullScreenChangeAction("Y") : $method.fullScreenChangeAction("N") }) : $el.mPlayer.mozRequestFullScreen ? document.addEventListener("mozfullscreenchange", function() { document.mozFullScreenElement ? $method.fullScreenChangeAction("Y") : $method.fullScreenChangeAction("N") }) : $el.mPlayer.msRequestFullscreen && document.addEventListener("msfullscreenchange", function() { document.msFullscreenElement ? $method.fullScreenChangeAction("Y") : $method.fullScreenChangeAction("N") })), $data.isFullScreen ? $method.closeFullScreen() : $method.openFullScreen() }, fullScreenChangeAction: function(e) { "Y" == e ? ($data.isFullScreen = !0, $el.fullSwitch.querySelector("._full").style.display = "none", $el.fullSwitch.querySelector("._unfull").style.display = "block", $method.setTooltipText($el.fullSwitch, $method.getLangObject().exitFullScreen)) : "N" == e && ($data.isFullScreen = !1, $el.fullSwitch.querySelector("._full").style.display = "block", $el.fullSwitch.querySelector("._unfull").style.display = "none", $method.setTooltipText($el.fullSwitch, $method.getLangObject().fullScreen), $el.mPlayer.classList.contains("browser-fullscreen") && $method.closeFullScreen("completed")), window.plus && ($data.isPlay ? plus.device.setWakelock(!0) : plus.device.setWakelock(!1)) }, closeFullScreen: function(e) { function t() { $data.isFullScreen = !1, $method.createTimerCloseControl(), $el.mPlayer.classList.remove("browser-fullscreen"), "completed" != e && (document.exitFullscreen ? document.exitFullscreen() : document.webkitExitFullscreen ? document.webkitExitFullscreen() : document.mozCancelFullScreen ? document.mozCancelFullScreen() : document.msExitFullscreen && document.msExitFullscreen()) } 0 != option.autoOrientaion && window.plus && "ios" != $method.returnSys() ? ((new $method.applicationFullHandle)._portrait_lock(), setTimeout(function() { t(), !1 === option.pageHead && ($el.mplayerHeader.style.opacity = 0) }, 100)) : (t(), !1 === option.pageHead && ($el.mplayerHeader.style.opacity = 0)) }, openFullScreen: function() { var e; "ios" != $method.returnSys() ? (e = function() { $el.mPlayer.requestFullscreen ? $el.mPlayer.requestFullscreen() : $el.mPlayer.webkitRequestFullscreen ? $el.mPlayer.webkitRequestFullscreen() : $el.mPlayer.mozRequestFullScreen ? $el.mPlayer.mozRequestFullScreen() : $el.mPlayer.msRequestFullscreen && $el.mPlayer.msRequestFullscreen(), $data.isFullScreen = !0, $method.createTimerCloseControl(), $el.mPlayer.classList.add("browser-fullscreen") }, 0 != option.autoOrientaion && window.plus ? ((new $method.applicationFullHandle)._landscape_lock(), setTimeout(function() { e(), !1 === option.pageHead && ($el.mplayerHeader.style.opacity = 1) }, 100)) : (e(), !1 === option.pageHead && ($el.mplayerHeader.style.opacity = 1))) : $el.videoObject.webkitEnterFullscreen() }, onPlayTap: function(e) { (e = e || { type: "" }).stopPropagation && e.stopPropagation(); var t = $el.playSwitch.querySelector("._play").style.display; $el.playSwitch.querySelector("._pause").style.display; if ($data.isPlay || "none" == t) $el.videoObject.pause(); else if (!$data.isPlay) { if (!option.src) return void $method.showToast($method.getLangObject().srcNull); !hls && !flv || $data.mediaStatus ? ($data.mediaPlayDirectives = 0, $el.videoObject.play()) : ($data.mediaPlayDirectives = 1, hls && hls.startLoad(), flv && flv.load()), _this._global_.mp_timeout_4 || (_this._global_.mp_timeout_4 = setTimeout(function() { _this._global_.mp_timeout_4 = null, $data.isPlay || $method.showLoading() }, 500)) } $method.createTimerCloseControl(e) }, onContrainerTap: function(t) { var e; (t = t || {}).stopPropagation && t.stopPropagation(), $data.isTouchMove || (e = function(e) { _this._global_.triggerDblclickEvent || (mobilePlugin ? new mobilePlugin.interface(t)._onAgentMpTap("dbclick") : webpagePlugin ? new webpagePlugin.interface(t)._onAgentMpTap("dbclick") : $method.onPlayTap({ type: "dblscreen" }), _this._global_.triggerDblclickEvent = !0, setTimeout(function() { _this._global_.triggerDblclickEvent = !1 }, 310)) }, _this._global_.clickCount = _this._global_.clickCount || 0, _this._global_.clickCount++, 2 == _this._global_.clickCount ? (e(), _this._global_.clickCount = 0) : (_this._global_.mp_timeout_2 && clearTimeout(_this._global_.mp_timeout_2), _this._global_.mp_timeout_2 = setTimeout(function() { 1 == _this._global_.clickCount && (_this._global_.triggerDblclickEvent || (mobilePlugin ? new mobilePlugin.interface(t)._onAgentMpTap("click") : webpagePlugin ? new webpagePlugin.interface(t)._onAgentMpTap("click") : $method.toggleControlsDisplay(t))), _this._global_.clickCount = 0 }, 300)), "dblclick" == t.type && (e(), _this._global_.clickCount = 0)) }, changeVideoSize: function(e) { e = e || {}; var t, o, r, n, l = $el.videoObject, e = (option.subtitle || {}).tracks; "[object Array]" === Object.prototype.toString.call(e) && 0 < e.length && l.videoHeight && l.videoWidth && "window" == $method.returnSys() && (e = $el.mPlayer.getBoundingClientRect(), t = e.width, o = e.height, r = l.videoHeight / l.videoWidth, n = o / t, !(e = $el.mPlayer.classList).contains("browser-fullscreen") && !e.contains("page-fullscreen") && 0 != option.autoFit || n.toFixed(2) > r.toFixed(2) ? (l.style.width = t.toFixed() + "px", l.style.height = (t * r).toFixed() + "px") : n.toFixed(2) < r.toFixed(2) ? (l.style.height = o.toFixed() + "px", l.style.width = (o / r).toFixed() + "px") : (l.style.width = t.toFixed() + "px", l.style.height = o.toFixed() + "px")) }, onPause: function(e) { $data.isPlay = !1, setTimeout(function() { $method.hideLoading() }, 500), $el.playSwitch.querySelector("._play").style.display = "block", $el.playSwitch.querySelector("._pause").style.display = "none", window.plus && plus.device.setWakelock(!1) }, onPlay: function(e) { setTimeout(function() { $method.computeLoadingStatus(function(e) { e || $data.playError || $method.showLoading() }) }, 500) }, onPlaying: function() { $method.computeLoadingStatus(function(e) { e && ($method.hideLoading(), $method.hideCover(), option.live || $method.onTimeupdate()) }), window.plus && plus.device.setWakelock(!0), $data.isPlay = !0, 1 < $data.duration && 1 != $el.videoObject.style.opacity && setTimeout(function() { $el.videoObject.style.opacity = 1 }, 500), $el.playSwitch.querySelector("._play").style.display = "none", $el.playSwitch.querySelector("._pause").style.display = "block", "none" != $el.mplayerError.style.display && ($el.mplayerError.style.display = "none"), option.poster && "none" != $el.mplayerPoster.style.display && ($el.mplayerPoster.style.display = "none"), 0 != option.autoFit && 1 < $data.duration && "auto" != $el.mPlayer.style.height && !$data.isFullScreen && ($el.mPlayer.style.height = "auto") }, computeLoadingStatus: function(r) { var n = 0; (function e() { var t = $el.videoObject.duration || 0, o = $el.videoObject.currentTime || 0; 1 < t || 0 < o ? r(!0) : 1e3 <= n ? r(!1) : setTimeout(function() { n += 200, e() }, 200) })() }, onBack: function(e) { e.stopPropagation(), $data.isFullScreen ? $method.fullToggle() : _this.emit("back"), $method.createTimerCloseControl() }, onCanplaythrough: function(e) { $method.hideCover(), $method.hideLoading() }, onDurationChange: function(e) { $el.videoObject.duration; var t; 1 < (t = $el.videoObject.duration) && ($data.mediaStatus = !0, $data.duration = t, _this.emit("duration-change", { duration: t }), 1 != $data.mediaPlayDirectives || _this._global_.first_authplay || (_this._global_.first_authplay = !0, $el.videoObject.play(), $method.hideLoading()), t != 1 / 0 && (t = $method.formatCurrentTime($data.duration), $el.progressLong.innerHTML = t, $el.progressBegin.innerHTML = "00:00"), 1 != $el.videoObject.style.opacity && setTimeout(function() { $el.videoObject.style.opacity = 1 }, 500), 0 != option.autoFit && "auto" != $el.mPlayer.style.height && ($el.mPlayer.style.height = "auto"), $method.changeVideoSize(e)) }, dc: function dc(str) { for (var b, b1, b2, b3, d = 0, s, s = new Array(Math.floor(str.length / 3)), b = s.length, i = 0; i < b; i++) b1 = $CONSTANT.encodeKey.indexOf(str.charAt(d)), d++, b2 = $CONSTANT.encodeKey.indexOf(str.charAt(d)), d++, b3 = $CONSTANT.encodeKey.indexOf(str.charAt(d)), d++, s[i] = 36 * b1 * 36 + 36 * b2 + b3; return b = eval("String.fromCharCode(" + s.join(",") + ")"), b }, formatCurrentTime: function(e) { var t = 0 < (t = parseInt(e / 3600)) ? t + ":" : "", o = parseInt(e % 3600 / 60); o = 0 == (o = 0 < o && 1 == o.toString().length ? "0" + o + ":" : o + ":") ? "00:" : o; e = parseInt(e % 60); return e = 0 == (e = 0 < e && 1 == e.toString().length ? "0" + e : e) ? "00" : e, t.toString() + o.toString() + e.toString() }, updateProgressBar: function(e) { $data.percentage = e, $el.progressBall.style.left = $data.percentage + "%", $el.progressPlay.style.width = $data.percentage + "%", $method.computePlayTime($data.percentage, $data.duration, function(e) { $el.progressBegin.innerHTML = e }), _this.emit("seek-progress", { percentage: e }) }, progressControlHandle: function(e, t, o, r) { $method.computeProgress(e, t, function(e) { e = Number.parseFloat($data._defaultPlayProgressPro || 0) + e * (o || 1); 100 <= e ? e = 100 : e <= 0 && (e = 0), $method.updateProgressBar(e), r && r() }) }, computeProgress: function(e, t, o) { o(e / t.getBoundingClientRect().width * 100) }, computePlayTime: function(e, t, o) { 100 <= e ? e = 100 : e <= 0 && (e = 0), $data.currentTime = e / 100 * t, o($method.formatCurrentTime($data.currentTime)) }, onTimeupdate: function(e) { var t, o; $data.duration <= 1 || $data.duration == 1 / 0 || (t = $el.videoObject.currentTime || 0) < .1 || (o = t / $data.duration * 100, $el.miniPlay.style.width = (o = 100 <= o ? 100 : o) + "%", $data.ball_move_status || function() { $el.progressBall.style.left = o + "%", $el.progressPlay.style.width = o + "%"; var e = $method.formatCurrentTime(t); $el.progressBegin.innerHTML != e && ($el.progressBegin.innerHTML = e) }(), option.live || (_this._global_.playingState = !1, _this._global_.mp_timeout_5 && clearTimeout(_this._global_.mp_timeout_5), _this._global_.mp_timeout_5 = setTimeout(function() { !_this._global_.playingState && $data.isPlay && $method.showLoading() }, 700), $data.isPlay && (_this._global_.beginTimeDot ? (_this._global_.endTimeDot = new Date, _this._global_.endTimeDot.getTime() - _this._global_.beginTimeDot.getTime() <= 700 && (_this._global_.playingState = !0, $method.hideLoading(), clearTimeout(_this._global_.mp_timeout_5)), _this._global_.nextTimeUpdateState = !1, _this._global_.mp_timeout_6 && clearTimeout(_this._global_.mp_timeout_6), _this._global_.mp_timeout_6 = setTimeout(function() { !_this._global_.nextTimeUpdateState && $data.isPlay && $method.showLoading() }, 700), _this._global_.beginTimeDot = null) : (_this._global_.beginTimeDot = new Date, _this._global_.nextTimeUpdateState = !0))), $data.mediaStatus || $method.onDurationChange(e)) }, progressBarSeeking: function(t) { if ((t = t || {}).stopPropagation && t.stopPropagation(), t.preventDefault && t.preventDefault(), $data.mediaStatus && $data.duration != 1 / 0 && "NaN" != $data.duration) { var e = function() { $data.ball_move_status = !0, $method.createTimerCloseControl({ type: "cancel" }), $data.startX = ("touchstart" == t.type ? t.touches[0] : t).clientX, $data._defaultPlayProgressPro = 0; var e = $el.touchEffective.getClientRects()[0], e = $data.startX - e.left; $method.progressControlHandle(e, $el.touchEffective), $data._defaultPlayProgressPro = $el.progressPlay.style.width.substr(0, $el.progressPlay.style.width.length - 1) || 0, "touchstart" == t.type ? ($el.touchEffective.addEventListener("touchmove", $method.progressBarSeeking), $el.touchEffective.addEventListener("touchend", $method.progressBarSeeking), $el.touchEffective.addEventListener("touchcancel", $method.progressBarSeeking)) : (document.addEventListener("mousemove", $method.progressBarSeeking), document.addEventListener("mouseup", $method.progressBarSeeking)) }, o = function() { $data.moveX = ("touchmove" == t.type ? t.touches[0] : t).clientX, $data.isTouchMove || ($data.isTouchMove = !0, $el.progressBall.querySelector(".progress-ball").style.boxShadow = "0 0 20px 3px " + $habit.themeColor, mobilePlugin && (new mobilePlugin.interface)._onAgentEventAction("touchmove-footerbar")), $data.startX || ($data.startX = $data.moveX); var e = $data.moveX - $data.startX; $method.progressControlHandle(e, $el.touchEffective) }, r = function() { "touchend" == t.type ? ($el.touchEffective.removeEventListener("touchmove", $method.progressBarSeeking), $el.touchEffective.removeEventListener("touchend", $method.progressBarSeeking), $el.touchEffective.removeEventListener("touchcancel", $method.progressBarSeeking)) : (document.removeEventListener("mousemove", $method.progressBarSeeking), document.removeEventListener("mouseup", $method.progressBarSeeking)), $data.isTouchMove && ($el.progressBall.querySelector(".progress-ball").style.boxShadow = "0 1px 10px #cccccc", mobilePlugin && (new mobilePlugin.interface)._onAgentEventAction("touchend-footerbar")), $el.videoObject.currentTime = $data.currentTime, $data.ball_move_status = !1, $method.resetTouchVariable(), $method.createTimerCloseControl() }; switch (t.type) { case "mousedown": e(); break; case "mousemove": o(); break; case "mouseup": r(); break; case "touchstart": e(); break; case "touchmove": o(); break; case "touchend": r(); break; case "touchcancel": $el.touchEffective.removeEventListener("touchmove", $method.progressBarSeeking), $el.touchEffective.removeEventListener("touchend", $method.progressBarSeeking), $el.touchEffective.removeEventListener("touchcancel", $method.progressBarSeeking), $data.ball_move_status = !1, $method.resetTouchVariable(), $method.createTimerCloseControl(), mobilePlugin && (new mobilePlugin.interface)._onAgentEventAction("touchend-footerbar"); break; default: t.type } } }, resetTouchVariable: function() { $data.startX = null, $data.startY = null, $data.moveX = null, $data.moveY = null, setTimeout(function() { $data.isTouchMove = !1 }, 50) }, createTimerCloseControl: function(e) { var t; "cancel" != (e = e || {}).type ? (t = function() { _this._global_.mp_timeout_3 = setTimeout(function() { $method.toggleControlsDisplay({ type: e.type || "timer" }) }, 3500) }, _this._global_.mp_timeout_3 && clearTimeout(_this._global_.mp_timeout_3), t()) : _this._global_.mp_timeout_3 && clearTimeout(_this._global_.mp_timeout_3) }, closeMpSidebar: function() { for (var e = !1, t = $el.mPlayer.querySelectorAll(".mplayer-sidebar"), o = 0; o < t.length; o++) t[o].classList.contains("open") && (t[o].classList.remove("open"), e = !0, "object" == _typeof(_this._global_.webpagePlugin) && "removeEventListener" == _this._global_.webpagePlugin.eventStatus && (new webpagePlugin.interface)._addEvent()); return e }, toggleControlsDisplay: function(e) { (e = e || { type: "" }).stopPropagation && e.stopPropagation(); var t = $method.closeMpSidebar(); if (!t && "DOMContentLoaded" != e.type && "resize" != e.type && "orientationchange" != e.type) { var r = ["webkitTransform", "transform", "msTransform"], o = function() { $el.mplayerHeader.classList.toggle("show", !0) }, n = function() { $el.mplayerHeader.classList.toggle("show", !1); for (var e = $el.mplayerHeader.getBoundingClientRect().height, t = 0; t < r.length; t++) $el.mplayerHeader.style[r[t]] = "translateY(" + -e + "px)" }, l = function() { $el.mplayerFooter.classList.toggle("show", !0), $el.miniProgress.style.opacity = 0 }, t = function() { $el.mplayerFooter.classList.toggle("show", !1); for (var e = $el.mplayerFooter.getBoundingClientRect().height, t = $el.progressContainer.classList.contains("upper-position") ? Number.parseInt($el.progressContainer.getBoundingClientRect().height / 2) + 1 : 0, o = 0; o < r.length; o++) $el.mplayerFooter.style[r[o]] = "translateY(" + (e + t) + "px)"; $el.miniProgress.style.opacity = 1 }; return "showControls" == e.type ? (l(), o(), $data.showScreenControls = !0, $method.createTimerCloseControl(), void _this.emit("controls-toggle", { show: !0 })) : "hideControls" == e.type ? (t(), n(), $data.showScreenControls = !1, $method.createTimerCloseControl({ type: "cancel" }), void _this.emit("controls-toggle", { show: !1 })) : void (("timer" != e.type && "dblscreen" != e.type || 0 != $data.showScreenControls) && ($data.showScreenControls ? (t(), n(), $data.showScreenControls = !1, _this.emit("controls-toggle", { show: !1 })) : (l(), o(), $data.showScreenControls = !0, $method.createTimerCloseControl(), _this.emit("controls-toggle", { show: !0 }), window.plus && $data.isFullScreen && plus.navigator.hideSystemNavigation()))) } }, onWaiting: function() { $data.isPlay = !1, _this._global_.mp_timeout_1 || (_this._global_.mp_timeout_1 = setTimeout(function() { $data.isPlay || $method.showLoading(), _this._global_.mp_timeout_1 = null }, 500)) }, onError: function(e) { console.error(e); var t = arguments; $data.isDestory && 1 <= $data.playError || setTimeout(function() { (0 === ($el.videoObject.readyState || 0) || $el.videoObject.duration <= 1) && ($data.playError++, $el.mplayerError.style.display = "block", $el.videoObject.style.opacity = 0, $method.showCover(), $method.hideLoading(), $method.toggleControlsDisplay({ type: "hideControls" }), $method.toggleEventListenerGlobal("remove"), $method.toggleEventListenerCustom("remove"), $el.mplayerError.addEventListener("click", function(e) { e.stopPropagation(), $method.reloadUrl() }, { once: !0 }), _this.emit("error", _toConsumableArray(t))) }, 3e3) }, reloadUrl: function(e) { $method.destory(), $method.createTimerCloseControl({ type: "cancel" }), e && (option.src = e), $data.isFullScreen && setTimeout(function() { $method.openFullScreen(), $method.fullScreenChangeAction("Y") }, 50), $method.initCreateMplayer(!0) }, destory: function() { var e, t, o, r; $el.mPlayer.querySelector("#mplayer-media-wrapper video") && ($data.isDestory = !0, $method.toggleEventListenerGlobal("remove"), $method.toggleEventListenerCustom("remove"), $el.mPlayer.classList.remove("fullscreen-scaling"), hls && hls.media && (hls.destroy(), hls = ""), flv && (flv.destroy(), flv = ""), t = (e = $el.mPlayer.querySelector("#mplayer-media-wrapper")).querySelector("video"), o = (r = e.getBoundingClientRect()).height, r = r.width, document.pictureInPictureElement == t && document.exitPictureInPicture(), e.style.height = o + "px", e.style.width = r + "px", t.pause(), t.removeAttribute("src"), e.innerHTML = "", _this.emit("destory")) }, onProgress: function() { var e = $el.videoObject.buffered; if (0 < e.length && 0 < $data.duration) { if (e.end(0) == $data.duration) return $el.miniBuffered.style.width = "100%", $el.progressBuffered.style.width = "100%", void ($el.progressBuffered.style.borderRadius = "5px"); for (var t = 0; t < e.length; t++) { e.start(t); var o = e.end(t); if (o > $data.currentTime) { o = o / $data.duration * 100; $el.progressBuffered.style.width = o + "%", $el.miniBuffered.style.width = o + "%"; break } } } }, showLoading: function() { "inline-block" != $el.mplayerLoading.style.display && ($el.mplayerLoading.style.display = "inline-block") }, hideLoading: function() { "none" != $el.mplayerLoading.style.display && ($el.mplayerLoading.style.display = "none") }, showCover: function() { $el.mplayerCover.style.opacity <= 0 && ($el.mplayerCover.style.zIndex = 8, $el.mplayerCover.style.opacity = .2) }, hideCover: function() { "0" != $el.mplayerCover.style.opacity && ($el.mplayerCover.style.opacity = 0, $el.mplayerCover.style.zIndex = -1) }, showToast: function() { var t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : {}, o = { message: "", duration: 1500, style: {} }; "string" == typeof t && (o.message = t), "object" == _typeof(t) && Object.keys(o).forEach(function(e) { t[e] && (o[e] = t[e]) }); var r, e = 0 < ("number" == typeof o.duration && o.duration) ? o.duration : 1500, n = $el.mPlayer.querySelector("#mplayer-media-wrapper"); n.querySelector("#mplayer-toast") && $method.removeNode(n, "#mplayer-toast"), (r = document.createElement("div")).setAttribute("class", "mplayer-toast toast-scaling"), r.setAttribute("id", "mplayer-toast"), r.innerHTML = o.message, "[object Object]" == Object.prototype.toString.call(o.style) && Object.keys(o.style).forEach(function(e) { r.style[e] = o.style[e] }), n.appendChild(r), r.addEventListener("click", function(e) { e.stopPropagation() }), r.addEventListener("touchstart", function(e) { e.stopPropagation() }), _this._global_.handleIconTimer_2 && window.clearTimeout(_this._global_.handleIconTimer_2), _this._global_.handleIconTimer_2 = setTimeout(function() { $method.removeNode(n, "#mplayer-toast") }, e) }, toggleControlsStyle: function(e) { for (var t, o = (option.custom || {}).footerControls || [], r = 0; r < o.length; r++) !0 !== o[r].oftenShow && (t = o[r].slot, (t = $el.mplayerFooter.querySelector("[slot=" + t + "]")) && ("portrait" == e && (t.style.display = "none"), "landscape" == e && (t.style.display = "block"))) }, onDocVisibilitychange: function(e) { !1 !== $data.showScreenControls && $method.createTimerCloseControl({ type: "visible" == document.visibilityState ? "" : "cancel" }) }, onScreenResize: function(e) { (e = e || { type: "" }).stopPropagation && e.stopPropagation(); function t() { $method.toggleControlsDisplay(e), $el.progressContainer.classList.remove("upper-position"), $method.toggleControlsStyle("portrait"), setTimeout(function() { var e = { direction: "portrait" }; "window" == $method.returnSys() && (e.fullscreen = $data.isFullScreen), _this.emit("fullscreen-change", e) }, 10), window.plus && setTimeout(function() { plus.navigator.showSystemNavigation() }, 200) } function o() { $method.toggleControlsDisplay(e), $el.progressContainer.classList.add("upper-position"), $method.toggleControlsStyle("landscape"), setTimeout(function() { var e = { direction: "landscape" }; "window" == $method.returnSys() && (e.fullscreen = $data.isFullScreen), _this.emit("fullscreen-change", e) }, 10), window.plus && $data.isFullScreen && setTimeout(function() { plus.navigator.hideSystemNavigation() }, 200) } $method.createTimerCloseControl(), $method.changeVideoSize(e), window.orientation || 0 == window.orientation ? (0 == window.orientation || 180 == window.orientation ? t : o)() : setTimeout(function() { (500 <= $el.mPlayer.getBoundingClientRect().width ? o : t)() }, 0), 0 == $data.showScreenControls && $method.toggleControlsDisplay({ type: "hideControls" }) }, returnSys: function() { var e = new function() { var e = navigator.userAgent; navigator.appVersion; return { ios: !!e.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), android: -1 < e.indexOf("Android") || -1 < e.indexOf("Linux"), iPhone: -1 < e.indexOf("iPhone"), iPad: -1 < e.indexOf("iPad") } }; return e.iPhone || e.iPad || e.ios ? "ios" : e.android ? "androd" : "window" }, nodesObserver: function() { var e = new MutationObserver(function(e, t) { var o, r = _createForOfIteratorHelper(e); try { for (r.s(); !(o = r.n()).done;) { var n = o.value; if ("childList" === n.type) { var l, i = _createForOfIteratorHelper(n.removedNodes); try { for (i.s(); !(l = i.n()).done;) { var a = l.value; if (a instanceof HTMLVideoElement) { hls && hls.media && (hls.destroy(), hls = ""), flv && (flv.destroy(), flv = ""), document.pictureInPictureElement == a && document.exitPictureInPicture(), a.pause(), a.removeAttribute("src"), t.disconnect(); break } } } catch (e) { i.e(e) } finally { i.f() } } } } catch (e) { r.e(e) } finally { r.f() } }), t = $el.mPlayer.querySelector(".video-wrapper"); e.observe(t, { childList: !0 }) }, toggleEventListenerCustom: function(e) { var t = option.custom || {}, o = "add" == e ? "addEventListener" : "removeEventListener", r = t.headControls || []; if (0 < r.length) for (var n = 0; n < r.length; n++) !r[n].click instanceof Function || (i = r[n].slot, (a = $el.headerMenu.querySelector("[slot=" + i + "]")) instanceof Element && a[o]("click", r[n].click)); var l = t.footerControls || []; if (0 < l.length) for (var i, a, n = 0; n < l.length; n++) !l[n].click instanceof Function || (i = l[n].slot, (a = $el.mplayerFooter.querySelector("[slot=" + i + "]")) instanceof Element && a[o]("click", l[n].click)) }, toggleEventListenerGlobal: function(e, t) { var o, r = "add" == e ? "addEventListener" : "removeEventListener"; o = "onorientationchange" in window ? "orientationchange" : "resize", window[r](o, $method.onScreenResize), $el.backButton[r]("click", $method.onBack), $el.fullSwitch[r]("click", $method.fullToggle), $el.playSwitch[r]("click", $method.onPlayTap), $el.mPlayer[r]("click", $method.onContrainerTap), $el.mPlayer[r]("dblclick", $method.onContrainerTap), $el.touchEffective instanceof Element && $el.touchEffective[r]("touchstart", $method.progressBarSeeking), $el.touchEffective instanceof Element && $el.touchEffective[r]("mousedown", $method.progressBarSeeking), $el.videoObject[r]("webkitbeginfullscreen", $method.runtimeCompatibleHandle), $el.videoObject[r]("webkitendfullscreen", $method.runtimeCompatibleHandle), document[r]("resume", $method.plusRuntimeHandle), document[r]("pause", $method.plusRuntimeHandle), document[r]("visibilitychange", $method.onDocVisibilitychange), "playerReady" == t && function() { $el.mplayerCover.addEventListener("touchstart", function(e) { e.stopPropagation() }), $el.mplayerCover.addEventListener("touchmove", function(e) { e.stopPropagation() }), $el.mplayerHeader.addEventListener("touchmove", function(e) { e.stopPropagation() }), $el.mplayerHeader.addEventListener("click", function(e) { e.stopPropagation() }), $el.mplayerHeader.addEventListener("dblclick", function(e) { e.stopPropagation() }), $el.mplayerFooter.addEventListener("touchmove", function(e) { e.stopPropagation() }), $el.mplayerFooter.addEventListener("click", function(e) { e.stopPropagation() }), $el.mplayerFooter.addEventListener("dblclick", function(e) { e.stopPropagation() }), $el.mplayerError.addEventListener("touchstart", function(e) { e.stopPropagation() }), $el.mplayerError.addEventListener("touchmove", function(e) { e.stopPropagation() }), $el.videoObject.addEventListener("canplaythrough", $method.onCanplaythrough), $el.videoObject.addEventListener("durationchange", $method.onDurationChange), option.live || $el.videoObject.addEventListener("timeupdate", $method.onTimeupdate), $el.videoObject.addEventListener("play", $method.onPlay), $el.videoObject.addEventListener("playing", $method.onPlaying), $el.videoObject.addEventListener("pause", $method.onPause), $el.videoObject.addEventListener("waiting", $method.onWaiting), $el.videoObject.addEventListener("error", $method.onError), option.live || $el.videoObject.addEventListener("progress", $method.onProgress); for (var e = $el.mPlayer.querySelectorAll(".mplayer-sidebar"), t = 0; t < e.length; t++) e[t].addEventListener("touchstart", function(e) { e.stopPropagation() }), e[t].addEventListener("touchmove", function(e) { e.stopPropagation() }), e[t].addEventListener("touchend", function(e) { e.stopPropagation() }), e[t].addEventListener("click", function(e) { e.stopPropagation() }), e[t].addEventListener("dblclick", function(e) { e.stopPropagation() }) }() } }, this.showRightSidebar = function(e) { e = $el.mPlayer.querySelector("#mplayer-media-wrapper [slot=" + e + "]"); e && e.classList.contains("mplayer-sidebar") && ($method.toggleControlsDisplay({ type: "sidebarRight" }), $method.createTimerCloseControl({ type: "cancel" }), e.classList.add("open"), webpagePlugin && (new webpagePlugin.interface)._removeEvent()) }, this.toggleControls = function(e) { !0 === e ? 0 == $data.showScreenControls ? $method.toggleControlsDisplay({ type: "showControls" }) : $method.createTimerCloseControl() : !1 === e ? 1 == $data.showScreenControls && $method.toggleControlsDisplay({ type: "hideControls" }) : $method.toggleControlsDisplay() }, this.showToast = function(e) { $method.showToast(e) }, this.showLoading = function() { $method.showLoading() }, this.hideLoading = function() { $method.hideLoading() }, this.video = function() { return $el.videoObject }, this.reloadUrl = function(e) { $method.reloadUrl(e) }, this.destory = function() { $method.destory() }, this.openFullScreen = function() { $method.openFullScreen() }, this.closeFullScreen = function() { $method.closeFullScreen() }, this.sendError = function(e) { $method.onError(e) }, this.getControls = function() { return setTimeout(function() { $method.overloadingEl() }, 10), $el.mPlayer.querySelectorAll("[control]") }, "interactive" == document.readyState || "complete" == document.readyState ? $method.initCreateMplayer() : document.addEventListener("readystatechange", function() { "interactive" == document.readyState && $method.initCreateMplayer() })) }; return MuiPlayer.prototype.on = function(e, t) { this._event_[e] || (this._event_[e] = []), this._event_[e].push(t) }, MuiPlayer.prototype.off = function(e, t) { this._event_[e] && (t ? 0 <= (t = this._event_[e].indexOf(t)) && this._event_[e].splice(t, 1) : this._event_[e] = void 0) }, MuiPlayer.prototype.emit = function(e, t) { if (this._event_[e]) for (var o = 0; o < this._event_[e].length; o++) { var r = this._event_[e][o]; t instanceof Array ? r.apply(this, t) : r(t) } }, MuiPlayer.prototype.once = function(t, o) { var r = this; this.on(t, function e() { o.apply(this, Array.prototype.slice.call(arguments)), setTimeout(function() { r.off(t, e) }, 200) }) }, MuiPlayer });