Files
ArtPlayer/docs/compiled/artplayer-tool-thumbnail.mjs.map
T
Harvey Zack c911928166 feat: add danmuku plugin documentation and i18n setup
- 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.
2025-08-17 12:09:50 +08:00

1 line
39 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,M,C,S,C,C,C,C,C,C,C,E,I,E,E,kD,E,iB,C,GCAA,IAAA,EAAA,EAAA,a,E,E,c,C,GACA,EAAA,EAAA,UAEe,OAAM,UAA+B,EAAA,OAAO,CACzD,YAAY,EAAS,CAAC,CAAC,CAAE,CACvB,KAAK,GACL,IAAI,CAAC,UAAU,CAAG,CAAA,EAClB,IAAI,CAAC,MAAM,CAAG,CAAC,EACf,IAAI,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC,EAAG,EAAuB,QAAQ,CAAE,IAC9D,IAAI,CAAC,KAAK,CAAG,EAAuB,UAAU,GAC9C,IAAI,CAAC,QAAQ,CAAG,EAChB,IAAI,CAAC,WAAW,CAAG,IAAI,CAAC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","sources":["<anon>","packages/artplayer-tool-thumbnail/src/index.js","packages/artplayer-tool-thumbnail/src/emitter.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer-tool-thumbnail/src/utils.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})({\"lHTNY\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nvar _emitter = require(\"./emitter\");\nvar _emitterDefault = parcelHelpers.interopDefault(_emitter);\nvar _utils = require(\"./utils\");\nclass ArtplayerToolThumbnail extends (0, _emitterDefault.default) {\n constructor(option = {}){\n super();\n this.processing = false;\n this.option = {};\n this.setup(Object.assign({}, ArtplayerToolThumbnail.DEFAULTS, option));\n this.video = ArtplayerToolThumbnail.creatVideo();\n this.duration = 0;\n this.inputChange = this.inputChange.bind(this);\n this.ondrop = this.ondrop.bind(this);\n this.option.fileInput.addEventListener('change', this.inputChange);\n this.option.fileInput.addEventListener('dragover', ArtplayerToolThumbnail.ondragover);\n this.option.fileInput.addEventListener('drop', ArtplayerToolThumbnail.ondrop);\n }\n static get DEFAULTS() {\n return {\n number: 60,\n width: 160,\n height: 90,\n column: 10,\n begin: 0,\n end: Number.NaN\n };\n }\n static ondragover(event) {\n event.preventDefault();\n }\n ondrop(event) {\n event.preventDefault();\n const file = event.dataTransfer.files[0];\n this.loadVideo(file);\n }\n setup(option = {}) {\n this.option = Object.assign({}, this.option, option);\n const { fileInput, number, width, column } = this.option;\n this.errorHandle(fileInput instanceof Element, 'The \\'fileInput\\' is not a Element');\n if (!(fileInput.tagName === 'INPUT' && fileInput.type === 'file')) {\n fileInput.style.position = 'relative';\n const newFileInput = document.createElement('input');\n newFileInput.type = 'file';\n newFileInput.style.position = 'absolute';\n newFileInput.style.width = '100%';\n newFileInput.style.height = '100%';\n newFileInput.style.left = '0';\n newFileInput.style.top = '0';\n newFileInput.style.right = '0';\n newFileInput.style.bottom = '0';\n newFileInput.style.opacity = '0';\n fileInput.appendChild(newFileInput);\n this.option.fileInput = newFileInput;\n }\n [\n 'number',\n 'width',\n 'column',\n 'begin',\n 'end'\n ].forEach((item)=>{\n this.errorHandle(typeof this.option[item] === 'number', `The '${item}' is not a number`);\n });\n this.option.number = (0, _utils.clamp)(number, 10, 1000);\n this.option.width = (0, _utils.clamp)(width, 10, 1000);\n this.option.column = (0, _utils.clamp)(column, 1, 1000);\n return this;\n }\n static creatVideo() {\n const video = document.createElement('video');\n video.style.position = 'absolute';\n video.style.top = '-9999px';\n video.style.left = '-9999px';\n video.muted = true;\n video.controls = true;\n document.body.appendChild(video);\n return video;\n }\n inputChange(event) {\n const file = this.option.fileInput.files[0];\n this.loadVideo(file);\n event.target.value = '';\n }\n loadVideo(file) {\n if (file) {\n const canPlayType = this.video.canPlayType(file.type);\n this.errorHandle(canPlayType === 'maybe' || canPlayType === 'probably', `Playback of this file format is not supported: ${file.type}`);\n const videoUrl = URL.createObjectURL(file);\n this.videoUrl = videoUrl;\n this.file = file;\n this.emit('file', this.file);\n this.video.src = videoUrl;\n this.emit('video', this.video);\n }\n }\n start() {\n if (!this.video.duration) return (0, _utils.sleep)(1000).then(()=>this.start());\n const { width, number, begin, end } = this.option;\n const height = this.video.videoHeight / this.video.videoWidth * width;\n this.option.height = height;\n this.option.begin = (0, _utils.clamp)(begin, 0, this.video.duration);\n this.option.end = (0, _utils.clamp)(end || this.video.duration, begin, this.video.duration);\n this.errorHandle(this.option.end > this.option.begin, `End time must be greater than the start time`);\n this.duration = this.option.end - this.option.begin;\n this.density = number / this.duration;\n this.errorHandle(this.file && this.video, 'Please select the video file first');\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...');\n this.errorHandle(this.density <= 1, `The preview density cannot be greater than 1, but got ${this.density}`);\n const screenshotDate = this.creatScreenshotDate();\n const canvas = this.creatCanvas();\n const context2D = canvas.getContext('2d');\n this.emit('canvas', canvas);\n const promiseList = screenshotDate.map((item, index)=>()=>{\n return new Promise((resolve)=>{\n this.video.oncanplay = ()=>{\n context2D.drawImage(this.video, item.x, item.y, width, height);\n canvas.toBlob((blob)=>{\n if (this.thumbnailUrl) URL.revokeObjectURL(this.thumbnailUrl);\n this.thumbnailUrl = URL.createObjectURL(blob);\n this.emit('update', this.thumbnailUrl, (index + 1) / number);\n this.video.oncanplay = null;\n resolve();\n });\n };\n this.video.currentTime = item.time;\n });\n });\n this.processing = true;\n return (0, _utils.runPromisesInSeries)(promiseList).then(()=>{\n this.processing = false;\n this.emit('done');\n }).catch((err)=>{\n this.processing = false;\n this.emit('error', err.message);\n throw err;\n });\n }\n creatScreenshotDate() {\n const { number, width, height, column, begin } = this.option;\n const timeGap = this.duration / number;\n const timePoints = [\n begin + timeGap\n ];\n while(timePoints.length < number){\n const last = timePoints[timePoints.length - 1];\n timePoints.push(last + timeGap);\n }\n return timePoints.map((item, index)=>({\n time: item - timeGap / 2,\n x: index % column * width,\n y: Math.floor(index / column) * height\n }));\n }\n creatCanvas() {\n const { number, width, height, column } = this.option;\n const canvas = document.createElement('canvas');\n const context2D = canvas.getContext('2d');\n canvas.width = width * column;\n canvas.height = Math.ceil(number / column) * height + 30;\n context2D.fillStyle = 'black';\n context2D.fillRect(0, 0, canvas.width, canvas.height);\n context2D.font = '14px Georgia';\n context2D.fillStyle = '#fff';\n context2D.fillText(`From: https://artplayer.org/, Number: ${number}, Width: ${width}, Height: ${height}, Column: ${column}`, 10, canvas.height - 11);\n return canvas;\n }\n download() {\n this.errorHandle(this.file && this.thumbnailUrl, 'Download does not seem to be ready, please create preview first');\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...');\n const elink = document.createElement('a');\n const name = `${(0, _utils.getFileName)(this.file.name)}.png`;\n elink.download = name;\n elink.href = this.thumbnailUrl;\n document.body.appendChild(elink);\n elink.click();\n document.body.removeChild(elink);\n this.emit('download', name);\n return this;\n }\n errorHandle(condition, msg) {\n if (!condition) {\n this.emit('error', msg);\n throw new Error(msg);\n }\n }\n destroy() {\n this.option.fileInput.removeEventListener('change', this.inputChange);\n this.option.fileInput.removeEventListener('dragover', ArtplayerToolThumbnail.ondragover);\n this.option.fileInput.removeEventListener('drop', ArtplayerToolThumbnail.ondrop);\n document.body.removeChild(this.video);\n if (this.videoUrl) URL.revokeObjectURL(this.videoUrl);\n if (this.thumbnailUrl) URL.revokeObjectURL(this.thumbnailUrl);\n this.emit('destroy');\n }\n}\nexports.default = ArtplayerToolThumbnail;\nwindow.ArtplayerToolThumbnail = ArtplayerToolThumbnail;\n\n},{\"./emitter\":\"ktFq8\",\"./utils\":\"lgZuY\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"ktFq8\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nclass Emitter {\n on(name, fn, ctx) {\n const e = this.e || (this.e = {});\n (e[name] || (e[name] = [])).push({\n fn,\n ctx\n });\n return this;\n }\n once(name, fn, ctx) {\n const self = this;\n function listener(...args) {\n self.off(name, listener);\n fn.apply(ctx, args);\n }\n listener._ = fn;\n return this.on(name, listener, ctx);\n }\n emit(name, ...data) {\n const evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n for(let i = 0; i < evtArr.length; i += 1)evtArr[i].fn.apply(evtArr[i].ctx, data);\n return this;\n }\n off(name, callback) {\n const e = this.e || (this.e = {});\n const evts = e[name];\n const liveEvents = [];\n if (evts && callback) {\n for(let i = 0, len = evts.length; i < len; i += 1)if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]);\n }\n if (liveEvents.length) e[name] = liveEvents;\n else delete e[name];\n return this;\n }\n}\nexports.default = Emitter;\n\n},{\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"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},{}],\"lgZuY\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"sleep\", ()=>sleep);\nparcelHelpers.export(exports, \"runPromisesInSeries\", ()=>runPromisesInSeries);\nparcelHelpers.export(exports, \"getFileName\", ()=>getFileName);\nparcelHelpers.export(exports, \"clamp\", ()=>clamp);\nfunction sleep(ms) {\n return new Promise((resolve)=>setTimeout(resolve, ms));\n}\nfunction runPromisesInSeries(ps) {\n return ps.reduce((p, next)=>p.then(next), Promise.resolve());\n}\nfunction getFileName(name) {\n const nameArray = name.split('.');\n nameArray.pop();\n return nameArray.join('.');\n}\nfunction clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n}\n\n},{\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}]},[\"lHTNY\"], \"lHTNY\", \"parcelRequire4dc0\", {})\nlet {default: _default, } = parcelRequire4dc0(\"lHTNY\");\nexport {_default as default, };\n\n//# sourceMappingURL=index.js.map\n","import Emitter from './emitter'\nimport { clamp, getFileName, runPromisesInSeries, sleep } from './utils'\n\nexport default class ArtplayerToolThumbnail extends Emitter {\n constructor(option = {}) {\n super()\n this.processing = false\n this.option = {}\n this.setup(Object.assign({}, ArtplayerToolThumbnail.DEFAULTS, option))\n this.video = ArtplayerToolThumbnail.creatVideo()\n this.duration = 0\n this.inputChange = this.inputChange.bind(this)\n this.ondrop = this.ondrop.bind(this)\n this.option.fileInput.addEventListener('change', this.inputChange)\n this.option.fileInput.addEventListener('dragover', ArtplayerToolThumbnail.ondragover)\n this.option.fileInput.addEventListener('drop', ArtplayerToolThumbnail.ondrop)\n }\n\n static get DEFAULTS() {\n return {\n number: 60,\n width: 160,\n height: 90,\n column: 10,\n begin: 0,\n end: Number.NaN,\n }\n }\n\n static ondragover(event) {\n event.preventDefault()\n }\n\n ondrop(event) {\n event.preventDefault()\n const file = event.dataTransfer.files[0]\n this.loadVideo(file)\n }\n\n setup(option = {}) {\n this.option = Object.assign({}, this.option, option)\n const { fileInput, number, width, column } = this.option\n\n this.errorHandle(fileInput instanceof Element, 'The \\'fileInput\\' is not a Element')\n\n if (!(fileInput.tagName === 'INPUT' && fileInput.type === 'file')) {\n fileInput.style.position = 'relative'\n const newFileInput = document.createElement('input')\n newFileInput.type = 'file'\n newFileInput.style.position = 'absolute'\n newFileInput.style.width = '100%'\n newFileInput.style.height = '100%'\n newFileInput.style.left = '0'\n newFileInput.style.top = '0'\n newFileInput.style.right = '0'\n newFileInput.style.bottom = '0'\n newFileInput.style.opacity = '0'\n fileInput.appendChild(newFileInput)\n this.option.fileInput = newFileInput\n }\n\n ['number', 'width', 'column', 'begin', 'end'].forEach((item) => {\n this.errorHandle(typeof this.option[item] === 'number', `The '${item}' is not a number`)\n })\n\n this.option.number = clamp(number, 10, 1000)\n this.option.width = clamp(width, 10, 1000)\n this.option.column = clamp(column, 1, 1000)\n return this\n }\n\n static creatVideo() {\n const video = document.createElement('video')\n video.style.position = 'absolute'\n video.style.top = '-9999px'\n video.style.left = '-9999px'\n video.muted = true\n video.controls = true\n document.body.appendChild(video)\n return video\n }\n\n inputChange(event) {\n const file = this.option.fileInput.files[0]\n this.loadVideo(file)\n event.target.value = ''\n }\n\n loadVideo(file) {\n if (file) {\n const canPlayType = this.video.canPlayType(file.type)\n this.errorHandle(\n canPlayType === 'maybe' || canPlayType === 'probably',\n `Playback of this file format is not supported: ${file.type}`,\n )\n const videoUrl = URL.createObjectURL(file)\n this.videoUrl = videoUrl\n this.file = file\n this.emit('file', this.file)\n this.video.src = videoUrl\n this.emit('video', this.video)\n }\n }\n\n start() {\n if (!this.video.duration)\n return sleep(1000).then(() => this.start())\n const { width, number, begin, end } = this.option\n const height = (this.video.videoHeight / this.video.videoWidth) * width\n this.option.height = height\n this.option.begin = clamp(begin, 0, this.video.duration)\n this.option.end = clamp(end || this.video.duration, begin, this.video.duration)\n this.errorHandle(this.option.end > this.option.begin, `End time must be greater than the start time`)\n this.duration = this.option.end - this.option.begin\n this.density = number / this.duration\n this.errorHandle(this.file && this.video, 'Please select the video file first')\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...')\n this.errorHandle(this.density <= 1, `The preview density cannot be greater than 1, but got ${this.density}`)\n const screenshotDate = this.creatScreenshotDate()\n const canvas = this.creatCanvas()\n const context2D = canvas.getContext('2d')\n this.emit('canvas', canvas)\n const promiseList = screenshotDate.map((item, index) => () => {\n return new Promise((resolve) => {\n this.video.oncanplay = () => {\n context2D.drawImage(this.video, item.x, item.y, width, height)\n canvas.toBlob((blob) => {\n if (this.thumbnailUrl) {\n URL.revokeObjectURL(this.thumbnailUrl)\n }\n this.thumbnailUrl = URL.createObjectURL(blob)\n this.emit('update', this.thumbnailUrl, (index + 1) / number)\n this.video.oncanplay = null\n resolve()\n })\n }\n this.video.currentTime = item.time\n })\n })\n this.processing = true\n return runPromisesInSeries(promiseList)\n .then(() => {\n this.processing = false\n this.emit('done')\n })\n .catch((err) => {\n this.processing = false\n this.emit('error', err.message)\n throw err\n })\n }\n\n creatScreenshotDate() {\n const { number, width, height, column, begin } = this.option\n const timeGap = this.duration / number\n const timePoints = [begin + timeGap]\n while (timePoints.length < number) {\n const last = timePoints[timePoints.length - 1]\n timePoints.push(last + timeGap)\n }\n return timePoints.map((item, index) => ({\n time: item - timeGap / 2,\n x: (index % column) * width,\n y: Math.floor(index / column) * height,\n }))\n }\n\n creatCanvas() {\n const { number, width, height, column } = this.option\n const canvas = document.createElement('canvas')\n const context2D = canvas.getContext('2d')\n canvas.width = width * column\n canvas.height = Math.ceil(number / column) * height + 30\n context2D.fillStyle = 'black'\n context2D.fillRect(0, 0, canvas.width, canvas.height)\n context2D.font = '14px Georgia'\n context2D.fillStyle = '#fff'\n context2D.fillText(\n `From: https://artplayer.org/, Number: ${number}, Width: ${width}, Height: ${height}, Column: ${column}`,\n 10,\n canvas.height - 11,\n )\n return canvas\n }\n\n download() {\n this.errorHandle(\n this.file && this.thumbnailUrl,\n 'Download does not seem to be ready, please create preview first',\n )\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...')\n const elink = document.createElement('a')\n const name = `${getFileName(this.file.name)}.png`\n elink.download = name\n elink.href = this.thumbnailUrl\n document.body.appendChild(elink)\n elink.click()\n document.body.removeChild(elink)\n this.emit('download', name)\n return this\n }\n\n errorHandle(condition, msg) {\n if (!condition) {\n this.emit('error', msg)\n throw new Error(msg)\n }\n }\n\n destroy() {\n this.option.fileInput.removeEventListener('change', this.inputChange)\n this.option.fileInput.removeEventListener('dragover', ArtplayerToolThumbnail.ondragover)\n this.option.fileInput.removeEventListener('drop', ArtplayerToolThumbnail.ondrop)\n document.body.removeChild(this.video)\n if (this.videoUrl) {\n URL.revokeObjectURL(this.videoUrl)\n }\n if (this.thumbnailUrl) {\n URL.revokeObjectURL(this.thumbnailUrl)\n }\n this.emit('destroy')\n }\n}\n\nwindow.ArtplayerToolThumbnail = ArtplayerToolThumbnail\n","export default class Emitter {\n on(name, fn, ctx) {\n const e = this.e || (this.e = {});\n (e[name] || (e[name] = [])).push({ fn, ctx })\n return this\n }\n\n once(name, fn, ctx) {\n const self = this\n function listener(...args) {\n self.off(name, listener)\n fn.apply(ctx, args)\n }\n listener._ = fn\n return this.on(name, listener, ctx)\n }\n\n emit(name, ...data) {\n const evtArr = ((this.e || (this.e = {}))[name] || []).slice()\n for (let i = 0; i < evtArr.length; i += 1) {\n evtArr[i].fn.apply(evtArr[i].ctx, data)\n }\n return this\n }\n\n off(name, callback) {\n const e = this.e || (this.e = {})\n const evts = e[name]\n const liveEvents = []\n if (evts && callback) {\n for (let i = 0, len = evts.length; i < len; i += 1) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i])\n }\n }\n if (liveEvents.length) {\n e[name] = liveEvents\n }\n else {\n delete e[name]\n }\n return this\n }\n}\n","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","export function sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nexport function runPromisesInSeries(ps) {\n return ps.reduce((p, next) => p.then(next), Promise.resolve())\n}\n\nexport function getFileName(name) {\n const nameArray = name.split('.')\n nameArray.pop()\n return nameArray.join('.')\n}\n\nexport function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b))\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","_emitter","_emitterDefault","interopDefault","_utils","ArtplayerToolThumbnail","default","option","processing","setup","assign","DEFAULTS","video","creatVideo","duration","inputChange","ondrop","fileInput","addEventListener","ondragover","number","width","height","column","begin","end","Number","event","preventDefault","file","dataTransfer","files","loadVideo","errorHandle","Element","tagName","type","style","position","newFileInput","document","createElement","left","top","right","bottom","opacity","appendChild","forEach","item","clamp","muted","controls","body","target","value","canPlayType","videoUrl","URL","createObjectURL","emit","src","start","sleep","then","videoHeight","videoWidth","density","screenshotDate","creatScreenshotDate","canvas","creatCanvas","context2D","getContext","promiseList","map","index","Promise","oncanplay","drawImage","y","toBlob","blob","thumbnailUrl","revokeObjectURL","currentTime","time","runPromisesInSeries","catch","message","timeGap","timePoints","last","push","Math","floor","ceil","fillStyle","fillRect","font","fillText","download","elink","getFileName","href","click","removeChild","condition","msg","destroy","removeEventListener","on","fn","ctx","e","once","listener","args","off","apply","_","data","evtArr","slice","callback","evts","liveEvents","len","a","__esModule","exportAll","source","dest","keys","key","prototype","hasOwnProperty","enumerable","export","destName","ms","setTimeout","ps","reduce","p","next","nameArray","split","pop","join","num","b","max","min","_default","parcelRequire4dc0"],"version":3,"file":"index.js.map"}