mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-08 19:06:15 -08:00
- Created a new documentation file for the danmuku plugin with interactive code execution. - Added comprehensive i18n setup instructions, including default language settings, language imports, and examples for adding and modifying languages. - Introduced a test file to verify the integration of the danmuku plugin.
1 line
32 KiB
Plaintext
1 line
32 KiB
Plaintext
{"mappings":"C,A,S,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,E,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,A,Y,O,C,C,E,E,C,C,E,C,E,E,C,E,C,E,E,E,K,E,C,E,E,A,a,O,Q,A,Y,O,O,O,E,O,O,C,I,C,Q,S,E,C,C,C,E,G,C,C,C,E,C,C,G,C,C,C,E,C,C,G,C,C,E,C,O,C,C,E,C,I,E,A,Y,O,C,C,E,E,C,C,E,C,G,C,G,E,O,E,E,C,G,G,E,O,E,E,C,G,G,G,A,U,O,E,O,E,G,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,O,C,S,C,E,I,E,C,C,E,C,E,C,E,C,O,A,M,E,E,C,E,E,K,C,C,E,I,E,C,C,E,C,I,E,M,C,G,C,C,E,C,E,C,I,C,E,O,C,E,E,E,O,C,E,C,O,C,C,E,C,O,C,S,E,C,E,I,E,E,O,C,G,M,A,C,I,E,C,E,E,E,C,C,E,e,C,C,E,E,M,C,S,C,E,I,C,E,C,E,I,C,M,C,E,I,C,O,C,E,I,C,O,C,C,C,E,E,O,C,E,E,K,C,E,E,M,C,E,E,O,C,K,E,E,S,C,K,E,E,S,C,K,E,E,C,C,E,E,Q,C,S,C,C,C,E,C,C,E,C,C,S,C,C,C,E,E,O,C,C,E,C,E,A,E,O,c,C,E,O,C,I,W,O,C,C,E,A,C,G,C,C,E,C,E,I,I,E,E,E,E,M,C,I,E,C,C,E,E,G,E,C,I,E,E,E,A,C,U,O,S,A,a,O,O,O,O,C,E,A,Y,O,Q,O,G,E,O,W,O,C,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,E,I,E,E,kD,E,iB,C,GCgBwB,EAAA,MAAA,CAAA,EAAA,UAAA,IAAA,GAhBxB,IAAA,EAAA,EAAA,4B,E,E,c,C,GAgBe,SAAS,EAAmB,CAAM,EAC/C,OAAO,AAAC,IAdR,GAAM,CACJ,QAAA,CAAO,CACP,MAAO,CAAE,YAAA,CAAW,CAAE,CACvB,CAAG,AAYW,EAZP,WAAW,CACb,EAAM,EAAQ,KAAK,CAAC,KAAK,GAAG,CAAC,QAGnC,EACE,AAHY,CAAG,CAAC,EAAE,CACN,CAAG,CAAC,EAAE,CAAG,KAEJ,EACjB,CAAC,aAAa,EAAE,EAAQ,0CAA0C,EAAE,EAAmB,OAAO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","sources":["<anon>","packages/artplayer-plugin-ads/src/index.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-8bdb8791472ee09f.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js"],"sourcesContent":["// modules are defined as an array\n// [ module function, map of requires ]\n//\n// map of requires is short require name -> numeric require\n//\n// anything defined in a previous bundle is accessed via the\n// orig method which is the require for previous bundles\n\n(function (\n modules,\n entry,\n mainEntry,\n parcelRequireName,\n externals,\n distDir,\n publicUrl,\n devServer\n) {\n /* eslint-disable no-undef */\n var globalObject =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n /* eslint-enable no-undef */\n\n // Save the require from previous bundle to this closure if any\n var previousRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n\n var importMap = previousRequire.i || {};\n var cache = previousRequire.cache || {};\n // Do not use `require` to prevent Webpack from trying to bundle this call\n var nodeRequire =\n typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n\n function newRequire(name, jumped) {\n if (!cache[name]) {\n if (!modules[name]) {\n if (externals[name]) {\n return externals[name];\n }\n // if we cannot find the module within our internal map or\n // cache jump to the current global require ie. the last bundle\n // that was added to the page.\n var currentRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n if (!jumped && currentRequire) {\n return currentRequire(name, true);\n }\n\n // If there are other bundles on this page the require from the\n // previous one is saved to 'previousRequire'. Repeat this as\n // many times as there are bundles until the module is found or\n // we exhaust the require chain.\n if (previousRequire) {\n return previousRequire(name, true);\n }\n\n // Try the node require function if it exists.\n if (nodeRequire && typeof name === 'string') {\n return nodeRequire(name);\n }\n\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n }\n\n localRequire.resolve = resolve;\n localRequire.cache = {};\n\n var module = (cache[name] = new newRequire.Module(name));\n\n modules[name][0].call(\n module.exports,\n localRequire,\n module,\n module.exports,\n globalObject\n );\n }\n\n return cache[name].exports;\n\n function localRequire(x) {\n var res = localRequire.resolve(x);\n return res === false ? {} : newRequire(res);\n }\n\n function resolve(x) {\n var id = modules[name][1][x];\n return id != null ? id : x;\n }\n }\n\n function Module(moduleName) {\n this.id = moduleName;\n this.bundle = newRequire;\n this.require = nodeRequire;\n this.exports = {};\n }\n\n newRequire.isParcelRequire = true;\n newRequire.Module = Module;\n newRequire.modules = modules;\n newRequire.cache = cache;\n newRequire.parent = previousRequire;\n newRequire.distDir = distDir;\n newRequire.publicUrl = publicUrl;\n newRequire.devServer = devServer;\n newRequire.i = importMap;\n newRequire.register = function (id, exports) {\n modules[id] = [\n function (require, module) {\n module.exports = exports;\n },\n {},\n ];\n };\n\n // Only insert newRequire.load when it is actually used.\n // The code in this file is linted against ES5, so dynamic import is not allowed.\n // INSERT_LOAD_HERE\n\n Object.defineProperty(newRequire, 'root', {\n get: function () {\n return globalObject[parcelRequireName];\n },\n });\n\n globalObject[parcelRequireName] = newRequire;\n\n for (var i = 0; i < entry.length; i++) {\n newRequire(entry[i]);\n }\n\n if (mainEntry) {\n // Expose entry point to Node, AMD or browser globals\n // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js\n var mainExports = newRequire(mainEntry);\n\n // CommonJS\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = mainExports;\n\n // RequireJS\n } else if (typeof define === 'function' && define.amd) {\n define(function () {\n return mainExports;\n });\n }\n }\n})({\"2Uydo\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"default\", ()=>artplayerPluginAds);\nvar _styleLess = require(\"bundle-text:./style.less\");\nvar _styleLessDefault = parcelHelpers.interopDefault(_styleLess);\nfunction checkVersion(art) {\n const { version, utils: { errorHandle } } = art.constructor;\n const arr = version.split('.').map(Number);\n const major = arr[0];\n const minor = arr[1] / 100;\n errorHandle(major + minor >= 5, `Artplayer.js@${version} is not compatible the artplayerPluginAds@${artplayerPluginAds.version}. Please update it to version Artplayer.js@5.x.x`);\n}\nfunction artplayerPluginAds(option) {\n return (art)=>{\n checkVersion(art);\n const { template: { $player }, icons: { volume, volumeClose, fullscreenOn, fullscreenOff, loading }, constructor: { validator, utils: { query, append, setStyle } } } = art;\n option = validator({\n html: '',\n video: '',\n url: '',\n playDuration: 5,\n totalDuration: 10,\n muted: false,\n i18n: {\n close: \"\\u5173\\u95ED\\u5E7F\\u544A\",\n countdown: \"%s\\u79D2\",\n detail: \"\\u67E5\\u770B\\u8BE6\\u60C5\",\n canBeClosed: \"%s\\u79D2\\u540E\\u53EF\\u5173\\u95ED\\u5E7F\\u544A\"\n },\n ...option\n }, {\n html: '?string',\n video: '?string',\n url: '?string',\n playDuration: 'number',\n totalDuration: 'number',\n muted: '?boolean',\n i18n: {\n close: 'string',\n countdown: 'string',\n detail: 'string',\n canBeClosed: 'string'\n }\n });\n let $ads = null;\n let $timer = null;\n let $close = null;\n let $countdown = null;\n let $control = null;\n let $loading = null;\n let time = 0;\n let timer = null;\n let isEnd = false;\n let isInit = false;\n let isCanClose = false;\n function getI18n(val, str) {\n return str.replace('%s', val);\n }\n function skip() {\n isEnd = true;\n art.play();\n if (option.video) $ads.pause();\n setStyle(art.template.$ads, 'display', 'none');\n art.emit('artplayerPluginAds:skip', option);\n }\n function play() {\n if (isEnd) return;\n timer = setTimeout(()=>{\n time += 1;\n const playDuration = option.playDuration - time;\n if (playDuration >= 1) $close.innerHTML = getI18n(playDuration, option.i18n.canBeClosed);\n else {\n $close.innerHTML = option.i18n.close;\n if (!isCanClose) isCanClose = true;\n }\n $countdown.innerHTML = getI18n(option.totalDuration - time, option.i18n.countdown);\n if (time >= option.totalDuration) skip();\n else play();\n }, 1000);\n }\n function pause() {\n if (isEnd) return;\n clearTimeout(timer);\n }\n function show() {\n art.template.$ads = append($player, '<div class=\"artplayer-plugin-ads\"></div>');\n $ads = append(art.template.$ads, option.video ? `<video class=\"artplayer-plugin-ads-video\" src=\"${option.video}\" loop playsInline></video>` : `<div class=\"artplayer-plugin-ads-html\">${option.html}</div>`);\n $loading = append(art.template.$ads, '<div class=\"artplayer-plugin-ads-loading\"></div>');\n append($loading, loading);\n $timer = append(art.template.$ads, `<div class=\"artplayer-plugin-ads-timer\">\n <div class=\"artplayer-plugin-ads-close\">${option.playDuration <= 0 ? option.i18n.close : getI18n(option.playDuration, option.i18n.canBeClosed)}</div>\n <div class=\"artplayer-plugin-ads-countdown\">${getI18n(option.totalDuration, option.i18n.countdown)}</div>\n </div>`);\n $close = query('.artplayer-plugin-ads-close', $timer);\n $countdown = query('.artplayer-plugin-ads-countdown', $timer);\n if (option.playDuration >= option.totalDuration) setStyle($close, 'display', 'none');\n art.proxy($close, 'click', ()=>{\n if (isCanClose) skip();\n });\n $control = append(art.template.$ads, `<div class=\"artplayer-plugin-ads-control\">\n <div class=\"artplayer-plugin-ads-detail\">${option.i18n.detail}</div>\n <div class=\"artplayer-plugin-ads-muted\"></div>\n <div class=\"artplayer-plugin-ads-fullscreen\"></div>\n </div>`);\n const $detail = query('.artplayer-plugin-ads-detail', $control);\n const $muted = query('.artplayer-plugin-ads-muted', $control);\n const $fullscreen = query('.artplayer-plugin-ads-fullscreen', $control);\n if (option.url) art.proxy($detail, 'click', ()=>{\n window.open(option.url);\n art.emit('artplayerPluginAds:click', option);\n });\n else setStyle($detail, 'display', 'none');\n if (option.video) {\n const $volume = append($muted, volume);\n const $volumeClose = append($muted, volumeClose);\n setStyle($volumeClose, 'display', 'none');\n // If the ad was set to muted initially, match the icon\n if (option.muted) {\n $ads.muted = true;\n setStyle($volume, 'display', 'none');\n setStyle($volumeClose, 'display', 'inline-flex');\n }\n art.proxy($muted, 'click', ()=>{\n $ads.muted = !$ads.muted;\n if ($ads.muted) {\n setStyle($volume, 'display', 'none');\n setStyle($volumeClose, 'display', 'inline-flex');\n } else {\n setStyle($volume, 'display', 'inline-flex');\n setStyle($volumeClose, 'display', 'none');\n }\n });\n } else setStyle($muted, 'display', 'none');\n const $fullscreenOn = append($fullscreen, fullscreenOn);\n const $fullscreenOff = append($fullscreen, fullscreenOff);\n setStyle($fullscreenOff, 'display', 'none');\n art.proxy($fullscreen, 'click', ()=>{\n art.fullscreen = !art.fullscreen;\n if (art.fullscreen) {\n setStyle($fullscreenOn, 'display', 'inline-flex');\n setStyle($fullscreenOff, 'display', 'none');\n } else {\n setStyle($fullscreenOn, 'display', 'none');\n setStyle($fullscreenOff, 'display', 'inline-flex');\n }\n });\n art.proxy($ads, 'click', ()=>{\n if (option.url) window.open(option.url);\n art.emit('artplayerPluginAds:click', option);\n });\n }\n function init() {\n if (isInit) return;\n isInit = true;\n show();\n art.pause();\n if (option.video) {\n art.proxy($ads, 'error', skip);\n art.proxy($ads, 'loadedmetadata', ()=>{\n play();\n $ads.play();\n setStyle($timer, 'display', 'flex');\n setStyle($control, 'display', 'flex');\n setStyle($loading, 'display', 'none');\n });\n } else {\n play();\n setStyle($timer, 'display', 'flex');\n setStyle($control, 'display', 'flex');\n setStyle($loading, 'display', 'none');\n }\n art.on('document:visibilitychange', ()=>{\n if (document.hidden) pause();\n else play();\n });\n }\n art.on('ready', ()=>{\n art.once('play', init);\n art.once('video:playing', init);\n });\n return {\n name: 'artplayerPluginAds',\n skip,\n pause,\n play\n };\n };\n}\nif (typeof document !== 'undefined') {\n if (!document.getElementById('artplayer-plugin-ads')) {\n const $style = document.createElement('style');\n $style.id = 'artplayer-plugin-ads';\n $style.textContent = (0, _styleLessDefault.default);\n document.head.appendChild($style);\n }\n}\nif (typeof window !== 'undefined') window.artplayerPluginAds = artplayerPluginAds;\n\n},{\"bundle-text:./style.less\":\"1GXMH\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"1GXMH\":[function(require,module,exports,__globalThis) {\nmodule.exports = \".artplayer-plugin-ads{z-index:150;color:#fff;background-color:#000;width:100%;height:100%;font-size:13px;line-height:1;position:absolute;inset:0;overflow:hidden}.artplayer-plugin-ads .artplayer-plugin-ads-html{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.artplayer-plugin-ads .artplayer-plugin-ads-video{width:100%;height:100%}.artplayer-plugin-ads .artplayer-plugin-ads-timer{display:none;position:absolute;top:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-timer>div{cursor:pointer;background-color:#00000080;border-radius:15px;align-items:center;margin-left:5px;padding:5px 10px;display:flex}.artplayer-plugin-ads .artplayer-plugin-ads-control{display:none;position:absolute;bottom:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-control>div{cursor:pointer;background-color:#00000080;border-radius:15px;align-items:center;margin-left:5px;padding:5px 10px;display:flex}.artplayer-plugin-ads .artplayer-plugin-ads-control .art-icon svg{width:20px;height:20px}.artplayer-plugin-ads .artplayer-plugin-ads-loading{justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:absolute;inset:0}\";\n\n},{}],\"5lQoW\":[function(require,module,exports,__globalThis) {\nexports.interopDefault = function(a) {\n return a && a.__esModule ? a : {\n default: a\n };\n};\nexports.defineInteropFlag = function(a) {\n Object.defineProperty(a, '__esModule', {\n value: true\n });\n};\nexports.exportAll = function(source, dest) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) return;\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function() {\n return source[key];\n }\n });\n });\n return dest;\n};\nexports.export = function(dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get\n });\n};\n\n},{}]},[\"2Uydo\"], \"2Uydo\", \"parcelRequire4dc0\", {})\nlet {default: _default, } = parcelRequire4dc0(\"2Uydo\");\nexport {_default as default, };\n\n//# sourceMappingURL=index.js.map\n","import style from 'bundle-text:./style.less'\n\nfunction checkVersion(art) {\n const {\n version,\n utils: { errorHandle },\n } = art.constructor\n const arr = version.split('.').map(Number)\n const major = arr[0]\n const minor = arr[1] / 100\n errorHandle(\n major + minor >= 5,\n `Artplayer.js@${version} is not compatible the artplayerPluginAds@${artplayerPluginAds.version}. Please update it to version Artplayer.js@5.x.x`,\n )\n}\n\nexport default function artplayerPluginAds(option) {\n return (art) => {\n checkVersion(art)\n\n const {\n template: { $player },\n icons: { volume, volumeClose, fullscreenOn, fullscreenOff, loading },\n constructor: {\n validator,\n utils: { query, append, setStyle },\n },\n } = art\n\n option = validator(\n {\n html: '',\n video: '',\n url: '',\n playDuration: 5,\n totalDuration: 10,\n muted: false,\n i18n: {\n close: '关闭广告',\n countdown: '%s秒',\n detail: '查看详情',\n canBeClosed: '%s秒后可关闭广告',\n },\n ...option,\n },\n {\n html: '?string',\n video: '?string',\n url: '?string',\n playDuration: 'number',\n totalDuration: 'number',\n muted: '?boolean',\n i18n: {\n close: 'string',\n countdown: 'string',\n detail: 'string',\n canBeClosed: 'string',\n },\n },\n )\n\n let $ads = null\n let $timer = null\n let $close = null\n let $countdown = null\n let $control = null\n let $loading = null\n\n let time = 0\n let timer = null\n let isEnd = false\n let isInit = false\n let isCanClose = false\n\n function getI18n(val, str) {\n return str.replace('%s', val)\n }\n\n function skip() {\n isEnd = true\n art.play()\n if (option.video)\n $ads.pause()\n setStyle(art.template.$ads, 'display', 'none')\n art.emit('artplayerPluginAds:skip', option)\n }\n\n function play() {\n if (isEnd)\n return\n\n timer = setTimeout(() => {\n time += 1\n\n const playDuration = option.playDuration - time\n if (playDuration >= 1) {\n $close.innerHTML = getI18n(playDuration, option.i18n.canBeClosed)\n }\n else {\n $close.innerHTML = option.i18n.close\n if (!isCanClose) {\n isCanClose = true\n }\n }\n\n $countdown.innerHTML = getI18n(option.totalDuration - time, option.i18n.countdown)\n\n if (time >= option.totalDuration) {\n skip()\n }\n else {\n play()\n }\n }, 1000)\n }\n\n function pause() {\n if (isEnd)\n return\n clearTimeout(timer)\n }\n\n function show() {\n art.template.$ads = append($player, '<div class=\"artplayer-plugin-ads\"></div>')\n\n $ads = append(\n art.template.$ads,\n option.video\n ? `<video class=\"artplayer-plugin-ads-video\" src=\"${option.video}\" loop playsInline></video>`\n : `<div class=\"artplayer-plugin-ads-html\">${option.html}</div>`,\n )\n\n $loading = append(art.template.$ads, '<div class=\"artplayer-plugin-ads-loading\"></div>')\n append($loading, loading)\n\n $timer = append(\n art.template.$ads,\n `<div class=\"artplayer-plugin-ads-timer\">\n <div class=\"artplayer-plugin-ads-close\">${\n option.playDuration <= 0\n ? option.i18n.close\n : getI18n(option.playDuration, option.i18n.canBeClosed)\n }</div>\n <div class=\"artplayer-plugin-ads-countdown\">${getI18n(\n option.totalDuration,\n option.i18n.countdown,\n )}</div>\n </div>`,\n )\n\n $close = query('.artplayer-plugin-ads-close', $timer)\n $countdown = query('.artplayer-plugin-ads-countdown', $timer)\n\n if (option.playDuration >= option.totalDuration) {\n setStyle($close, 'display', 'none')\n }\n\n art.proxy($close, 'click', () => {\n if (isCanClose) {\n skip()\n }\n })\n\n $control = append(\n art.template.$ads,\n `<div class=\"artplayer-plugin-ads-control\">\n <div class=\"artplayer-plugin-ads-detail\">${option.i18n.detail}</div>\n <div class=\"artplayer-plugin-ads-muted\"></div>\n <div class=\"artplayer-plugin-ads-fullscreen\"></div>\n </div>`,\n )\n\n const $detail = query('.artplayer-plugin-ads-detail', $control)\n const $muted = query('.artplayer-plugin-ads-muted', $control)\n const $fullscreen = query('.artplayer-plugin-ads-fullscreen', $control)\n\n if (option.url) {\n art.proxy($detail, 'click', () => {\n window.open(option.url)\n art.emit('artplayerPluginAds:click', option)\n })\n }\n else {\n setStyle($detail, 'display', 'none')\n }\n\n if (option.video) {\n const $volume = append($muted, volume)\n const $volumeClose = append($muted, volumeClose)\n setStyle($volumeClose, 'display', 'none')\n\n // If the ad was set to muted initially, match the icon\n if (option.muted) {\n $ads.muted = true\n setStyle($volume, 'display', 'none')\n setStyle($volumeClose, 'display', 'inline-flex')\n }\n\n art.proxy($muted, 'click', () => {\n $ads.muted = !$ads.muted\n if ($ads.muted) {\n setStyle($volume, 'display', 'none')\n setStyle($volumeClose, 'display', 'inline-flex')\n }\n else {\n setStyle($volume, 'display', 'inline-flex')\n setStyle($volumeClose, 'display', 'none')\n }\n })\n }\n else {\n setStyle($muted, 'display', 'none')\n }\n\n const $fullscreenOn = append($fullscreen, fullscreenOn)\n const $fullscreenOff = append($fullscreen, fullscreenOff)\n setStyle($fullscreenOff, 'display', 'none')\n\n art.proxy($fullscreen, 'click', () => {\n art.fullscreen = !art.fullscreen\n if (art.fullscreen) {\n setStyle($fullscreenOn, 'display', 'inline-flex')\n setStyle($fullscreenOff, 'display', 'none')\n }\n else {\n setStyle($fullscreenOn, 'display', 'none')\n setStyle($fullscreenOff, 'display', 'inline-flex')\n }\n })\n\n art.proxy($ads, 'click', () => {\n if (option.url)\n window.open(option.url)\n art.emit('artplayerPluginAds:click', option)\n })\n }\n\n function init() {\n if (isInit)\n return\n isInit = true\n\n show()\n art.pause()\n\n if (option.video) {\n art.proxy($ads, 'error', skip)\n art.proxy($ads, 'loadedmetadata', () => {\n play()\n $ads.play()\n setStyle($timer, 'display', 'flex')\n setStyle($control, 'display', 'flex')\n setStyle($loading, 'display', 'none')\n })\n }\n else {\n play()\n setStyle($timer, 'display', 'flex')\n setStyle($control, 'display', 'flex')\n setStyle($loading, 'display', 'none')\n }\n\n art.on('document:visibilitychange', () => {\n if (document.hidden) {\n pause()\n }\n else {\n play()\n }\n })\n }\n\n art.on('ready', () => {\n art.once('play', init)\n art.once('video:playing', init)\n })\n\n return {\n name: 'artplayerPluginAds',\n skip,\n pause,\n play,\n }\n }\n}\n\nif (typeof document !== 'undefined') {\n if (!document.getElementById('artplayer-plugin-ads')) {\n const $style = document.createElement('style')\n $style.id = 'artplayer-plugin-ads'\n $style.textContent = style\n document.head.appendChild($style)\n }\n}\n\nif (typeof window !== 'undefined') {\n window.artplayerPluginAds = artplayerPluginAds\n}\n","module.exports = \"e140a0ba961ecae5\";","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n"],"names":["modules","entry","mainEntry","parcelRequireName","externals","distDir","publicUrl","devServer","globalObject","globalThis","self","window","global","previousRequire","importMap","i","cache","nodeRequire","module","require","bind","newRequire","name","jumped","currentRequire","err","Error","code","localRequire","resolve","x","id","Module","call","exports","res","isParcelRequire","moduleName","bundle","parent","register","Object","defineProperty","get","length","mainExports","define","amd","__globalThis","parcelHelpers","defineInteropFlag","export","artplayerPluginAds","_styleLess","_styleLessDefault","interopDefault","option","art","version","utils","errorHandle","arr","split","map","Number","major","template","$player","icons","volume","volumeClose","fullscreenOn","fullscreenOff","loading","validator","query","append","setStyle","html","video","url","playDuration","totalDuration","muted","i18n","close","countdown","detail","canBeClosed","$ads","$timer","$close","$countdown","$control","$loading","time","timer","isEnd","isInit","isCanClose","getI18n","val","str","replace","skip","play","pause","emit","setTimeout","innerHTML","clearTimeout","init","show","proxy","$detail","$muted","$fullscreen","open","$volume","$volumeClose","$fullscreenOn","$fullscreenOff","fullscreen","on","document","hidden","once","getElementById","$style","createElement","textContent","default","head","appendChild","a","__esModule","value","exportAll","source","dest","keys","forEach","key","prototype","hasOwnProperty","enumerable","destName","_default","parcelRequire4dc0"],"version":3,"file":"index.js.map"} |