From bb21e129b817d1ca7a6167d5da11615b6a047baf Mon Sep 17 00:00:00 2001 From: Harvey Date: Thu, 27 Oct 2022 17:12:59 +0800 Subject: [PATCH] update artplayer-tool-thumbnail --- .../artplayer-tool-thumbnail/index.js | 271 ++++++++---------- .../artplayer-tool-thumbnail/index.js.map | 2 +- .../artplayer-tool-thumbnail/package.json | 7 +- .../artplayer-tool-thumbnail/src/emitter.js | 42 +++ .../artplayer-tool-thumbnail/src/index.js | 2 +- 5 files changed, 173 insertions(+), 151 deletions(-) create mode 100644 packages/artplayer-tool-thumbnail/src/emitter.js diff --git a/docs/uncompiled/artplayer-tool-thumbnail/index.js b/docs/uncompiled/artplayer-tool-thumbnail/index.js index a53820127..1b36c93ae 100644 --- a/docs/uncompiled/artplayer-tool-thumbnail/index.js +++ b/docs/uncompiled/artplayer-tool-thumbnail/index.js @@ -142,13 +142,13 @@ this[globalName] = mainExports; } } -})({"d19bT":[function(require,module,exports) { +})({"gEVO5":[function(require,module,exports) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); -var _tinyEmitter = require("tiny-emitter"); -var _tinyEmitterDefault = parcelHelpers.interopDefault(_tinyEmitter); +var _emitter = require("./emitter"); +var _emitterDefault = parcelHelpers.interopDefault(_emitter); var _utils = require("./utils"); -class ArtplayerToolThumbnail extends _tinyEmitterDefault.default { +class ArtplayerToolThumbnail extends (0, _emitterDefault.default) { constructor(option = {}){ super(); this.processing = false; @@ -158,9 +158,9 @@ class ArtplayerToolThumbnail extends _tinyEmitterDefault.default { this.duration = 0; this.inputChange = this.inputChange.bind(this); this.ondrop = this.ondrop.bind(this); - this.option.fileInput.addEventListener('change', this.inputChange); - this.option.fileInput.addEventListener('dragover', ArtplayerToolThumbnail.ondragover); - this.option.fileInput.addEventListener('drop', ArtplayerToolThumbnail.ondrop); + this.option.fileInput.addEventListener("change", this.inputChange); + this.option.fileInput.addEventListener("dragover", ArtplayerToolThumbnail.ondragover); + this.option.fileInput.addEventListener("drop", ArtplayerToolThumbnail.ondrop); } static get DEFAULTS() { return { @@ -184,40 +184,40 @@ class ArtplayerToolThumbnail extends _tinyEmitterDefault.default { this.option = Object.assign({}, this.option, option); const { fileInput , number , width , column } = this.option; this.errorHandle(fileInput instanceof Element, "The 'fileInput' is not a Element"); - if (!(fileInput.tagName === 'INPUT' && fileInput.type === 'file')) { - fileInput.style.position = 'relative'; - const newFileInput = document.createElement('input'); - newFileInput.type = 'file'; - newFileInput.style.position = 'absolute'; - newFileInput.style.width = '100%'; - newFileInput.style.height = '100%'; - newFileInput.style.left = '0'; - newFileInput.style.top = '0'; - newFileInput.style.right = '0'; - newFileInput.style.bottom = '0'; - newFileInput.style.opacity = '0'; + if (!(fileInput.tagName === "INPUT" && fileInput.type === "file")) { + fileInput.style.position = "relative"; + const newFileInput = document.createElement("input"); + newFileInput.type = "file"; + newFileInput.style.position = "absolute"; + newFileInput.style.width = "100%"; + newFileInput.style.height = "100%"; + newFileInput.style.left = "0"; + newFileInput.style.top = "0"; + newFileInput.style.right = "0"; + newFileInput.style.bottom = "0"; + newFileInput.style.opacity = "0"; fileInput.appendChild(newFileInput); this.option.fileInput = newFileInput; } [ - 'number', - 'width', - 'column', - 'begin', - 'end' + "number", + "width", + "column", + "begin", + "end" ].forEach((item)=>{ - this.errorHandle(typeof this.option[item] === 'number', `The '${item}' is not a number`); + this.errorHandle(typeof this.option[item] === "number", `The '${item}' is not a number`); }); - this.option.number = _utils.clamp(number, 10, 1000); - this.option.width = _utils.clamp(width, 10, 1000); - this.option.column = _utils.clamp(column, 1, 1000); + this.option.number = (0, _utils.clamp)(number, 10, 1000); + this.option.width = (0, _utils.clamp)(width, 10, 1000); + this.option.column = (0, _utils.clamp)(column, 1, 1000); return this; } static creatVideo() { - const video = document.createElement('video'); - video.style.position = 'absolute'; - video.style.top = '-9999px'; - video.style.left = '-9999px'; + const video = document.createElement("video"); + video.style.position = "absolute"; + video.style.top = "-9999px"; + video.style.left = "-9999px"; video.muted = true; video.controls = true; document.body.appendChild(video); @@ -226,38 +226,37 @@ class ArtplayerToolThumbnail extends _tinyEmitterDefault.default { inputChange(event) { const file = this.option.fileInput.files[0]; this.loadVideo(file); - event.target.value = ''; + event.target.value = ""; } loadVideo(file) { if (file) { const canPlayType = this.video.canPlayType(file.type); - this.errorHandle(canPlayType === 'maybe' || canPlayType === 'probably', `Playback of this file format is not supported: ${file.type}`); + this.errorHandle(canPlayType === "maybe" || canPlayType === "probably", `Playback of this file format is not supported: ${file.type}`); const videoUrl = URL.createObjectURL(file); this.videoUrl = videoUrl; this.file = file; - this.emit('file', this.file); + this.emit("file", this.file); this.video.src = videoUrl; - this.emit('video', this.video); + this.emit("video", this.video); } } start() { - if (!this.video.duration) return _utils.sleep(1000).then(()=>this.start() - ); + if (!this.video.duration) return (0, _utils.sleep)(1000).then(()=>this.start()); const { width , number , begin , end } = this.option; const height = this.video.videoHeight / this.video.videoWidth * width; this.option.height = height; - this.option.begin = _utils.clamp(begin, 0, this.video.duration); - this.option.end = _utils.clamp(end || this.video.duration, begin, this.video.duration); + this.option.begin = (0, _utils.clamp)(begin, 0, this.video.duration); + this.option.end = (0, _utils.clamp)(end || this.video.duration, begin, this.video.duration); this.errorHandle(this.option.end > this.option.begin, `End time must be greater than the start time`); this.duration = this.option.end - this.option.begin; this.density = number / this.duration; - this.errorHandle(this.file && this.video, 'Please select the video file first'); - this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...'); + this.errorHandle(this.file && this.video, "Please select the video file first"); + this.errorHandle(!this.processing, "There is currently a task in progress, please wait a moment..."); this.errorHandle(this.density <= 1, `The preview density cannot be greater than 1, but got ${this.density}`); const screenshotDate = this.creatScreenshotDate(); const canvas = this.creatCanvas(); - const context2D = canvas.getContext('2d'); - this.emit('canvas', canvas); + const context2D = canvas.getContext("2d"); + this.emit("canvas", canvas); const promiseList = screenshotDate.map((item, index)=>()=>{ return new Promise((resolve)=>{ this.video.oncanplay = ()=>{ @@ -265,22 +264,21 @@ class ArtplayerToolThumbnail extends _tinyEmitterDefault.default { canvas.toBlob((blob)=>{ if (this.thumbnailUrl) URL.revokeObjectURL(this.thumbnailUrl); this.thumbnailUrl = URL.createObjectURL(blob); - this.emit('update', this.thumbnailUrl, (index + 1) / number); + this.emit("update", this.thumbnailUrl, (index + 1) / number); this.video.oncanplay = null; resolve(); }); }; this.video.currentTime = item.time; }); - } - ); + }); this.processing = true; - return _utils.runPromisesInSeries(promiseList).then(()=>{ + return (0, _utils.runPromisesInSeries)(promiseList).then(()=>{ this.processing = false; - this.emit('done'); + this.emit("done"); }).catch((err)=>{ this.processing = false; - this.emit('error', err.message); + this.emit("error", err.message); throw err; }); } @@ -298,144 +296,107 @@ class ArtplayerToolThumbnail extends _tinyEmitterDefault.default { time: item - timeGap / 2, x: index % column * width, y: Math.floor(index / column) * height - }) - ); + })); } creatCanvas() { const { number , width , height , column } = this.option; - const canvas = document.createElement('canvas'); - const context2D = canvas.getContext('2d'); + const canvas = document.createElement("canvas"); + const context2D = canvas.getContext("2d"); canvas.width = width * column; canvas.height = Math.ceil(number / column) * height + 30; - context2D.fillStyle = 'black'; + context2D.fillStyle = "black"; context2D.fillRect(0, 0, canvas.width, canvas.height); - context2D.font = '14px Georgia'; - context2D.fillStyle = '#fff'; + context2D.font = "14px Georgia"; + context2D.fillStyle = "#fff"; context2D.fillText(`From: https://artplayer.org/, Number: ${number}, Width: ${width}, Height: ${height}, Column: ${column}`, 10, canvas.height - 11); return canvas; } download() { - this.errorHandle(this.file && this.thumbnailUrl, 'Download does not seem to be ready, please create preview first'); - this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...'); - const elink = document.createElement('a'); - const name = `${_utils.getFileName(this.file.name)}.png`; + this.errorHandle(this.file && this.thumbnailUrl, "Download does not seem to be ready, please create preview first"); + this.errorHandle(!this.processing, "There is currently a task in progress, please wait a moment..."); + const elink = document.createElement("a"); + const name = `${(0, _utils.getFileName)(this.file.name)}.png`; elink.download = name; elink.href = this.thumbnailUrl; document.body.appendChild(elink); elink.click(); document.body.removeChild(elink); - this.emit('download', name); + this.emit("download", name); return this; } errorHandle(condition, msg) { if (!condition) { - this.emit('error', msg); + this.emit("error", msg); throw new Error(msg); } } destroy() { - this.option.fileInput.removeEventListener('change', this.inputChange); - this.option.fileInput.removeEventListener('dragover', ArtplayerToolThumbnail.ondragover); - this.option.fileInput.removeEventListener('drop', ArtplayerToolThumbnail.ondrop); + this.option.fileInput.removeEventListener("change", this.inputChange); + this.option.fileInput.removeEventListener("dragover", ArtplayerToolThumbnail.ondragover); + this.option.fileInput.removeEventListener("drop", ArtplayerToolThumbnail.ondrop); document.body.removeChild(this.video); if (this.videoUrl) URL.revokeObjectURL(this.videoUrl); if (this.thumbnailUrl) URL.revokeObjectURL(this.thumbnailUrl); - this.emit('destroy'); + this.emit("destroy"); } } exports.default = ArtplayerToolThumbnail; -window['ArtplayerToolThumbnail'] = ArtplayerToolThumbnail; +window["ArtplayerToolThumbnail"] = ArtplayerToolThumbnail; -},{"tiny-emitter":"ltU3o","./utils":"OYkYn","@parcel/transformer-js/src/esmodule-helpers.js":"5dUr6"}],"ltU3o":[function(require,module,exports) { -function E() { -// Keep this empty so it's easier to inherit from -// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) -} -E.prototype = { - on: function(name, callback, ctx) { - var e = this.e || (this.e = {}); - (e[name] || (e[name] = [])).push({ - fn: callback, - ctx: ctx - }); - return this; - }, - once: function(name, callback, ctx) { - var self = this; - function listener() { - self.off(name, listener); - callback.apply(ctx, arguments); - } - listener._ = callback; - return this.on(name, listener, ctx); - }, - emit: function(name) { - var data = [].slice.call(arguments, 1); - var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); - var i = 0; - var len = evtArr.length; - for(; i < len; i++)evtArr[i].fn.apply(evtArr[i].ctx, data); - return this; - }, - off: function(name, callback) { - var e = this.e || (this.e = {}); - var evts = e[name]; - var liveEvents = []; - if (evts && callback) { - for(var i = 0, len = evts.length; i < len; i++)if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]); - } - // Remove event from queue to prevent memory leak - // Suggested by https://github.com/lazd - // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 - liveEvents.length ? e[name] = liveEvents : delete e[name]; - return this; - } -}; -module.exports = E; -module.exports.TinyEmitter = E; - -},{}],"OYkYn":[function(require,module,exports) { +},{"./emitter":"2ZQK0","./utils":"5vF3n","@parcel/transformer-js/src/esmodule-helpers.js":"8MjWm"}],"2ZQK0":[function(require,module,exports) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "sleep", ()=>sleep -); -parcelHelpers.export(exports, "runPromisesInSeries", ()=>runPromisesInSeries -); -parcelHelpers.export(exports, "getFileName", ()=>getFileName -); -parcelHelpers.export(exports, "clamp", ()=>clamp -); -function sleep(ms) { - return new Promise((resolve)=>setTimeout(resolve, ms) - ); -} -function runPromisesInSeries(ps) { - return ps.reduce((p, next)=>p.then(next) - , Promise.resolve()); -} -function getFileName(name) { - const nameArray = name.split('.'); - nameArray.pop(); - return nameArray.join('.'); -} -function clamp(num, a, b) { - return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b)); +class Emitter { + on(name, fn, ctx) { + const e = this.e || (this.e = {}); + (e[name] || (e[name] = [])).push({ + fn, + ctx + }); + return this; + } + once(name, fn, ctx) { + const self = this; + function listener(...args) { + self.off(name, listener); + fn.apply(ctx, args); + } + listener._ = fn; + return this.on(name, listener, ctx); + } + emit(name, ...data) { + const evtArr = ((this.e || (this.e = {}))[name] || []).slice(); + for(let i = 0; i < evtArr.length; i += 1)evtArr[i].fn.apply(evtArr[i].ctx, data); + return this; + } + off(name, callback) { + const e = this.e || (this.e = {}); + const evts = e[name]; + const liveEvents = []; + if (evts && callback) { + for(let i = 0, len = evts.length; i < len; i += 1)if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]); + } + if (liveEvents.length) e[name] = liveEvents; + else delete e[name]; + return this; + } } +exports.default = Emitter; -},{"@parcel/transformer-js/src/esmodule-helpers.js":"5dUr6"}],"5dUr6":[function(require,module,exports) { +},{"@parcel/transformer-js/src/esmodule-helpers.js":"8MjWm"}],"8MjWm":[function(require,module,exports) { exports.interopDefault = function(a) { return a && a.__esModule ? a : { default: a }; }; exports.defineInteropFlag = function(a) { - Object.defineProperty(a, '__esModule', { + Object.defineProperty(a, "__esModule", { value: true }); }; exports.exportAll = function(source, dest) { Object.keys(source).forEach(function(key) { - if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) return; + if (key === "default" || key === "__esModule" || dest.hasOwnProperty(key)) return; Object.defineProperty(dest, key, { enumerable: true, get: function() { @@ -452,6 +413,28 @@ exports.export = function(dest, destName, get) { }); }; -},{}]},["d19bT"], "d19bT", "parcelRequire4dc0") +},{}],"5vF3n":[function(require,module,exports) { +var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); +parcelHelpers.defineInteropFlag(exports); +parcelHelpers.export(exports, "sleep", ()=>sleep); +parcelHelpers.export(exports, "runPromisesInSeries", ()=>runPromisesInSeries); +parcelHelpers.export(exports, "getFileName", ()=>getFileName); +parcelHelpers.export(exports, "clamp", ()=>clamp); +function sleep(ms) { + return new Promise((resolve)=>setTimeout(resolve, ms)); +} +function runPromisesInSeries(ps) { + return ps.reduce((p, next)=>p.then(next), Promise.resolve()); +} +function getFileName(name) { + const nameArray = name.split("."); + nameArray.pop(); + return nameArray.join("."); +} +function clamp(num, a, b) { + return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b)); +} + +},{"@parcel/transformer-js/src/esmodule-helpers.js":"8MjWm"}]},["gEVO5"], "gEVO5", "parcelRequire7b4c") //# sourceMappingURL=index.js.map diff --git a/docs/uncompiled/artplayer-tool-thumbnail/index.js.map b/docs/uncompiled/artplayer-tool-thumbnail/index.js.map index 18e20618c..89b7be28d 100644 --- a/docs/uncompiled/artplayer-tool-thumbnail/index.js.map +++ b/docs/uncompiled/artplayer-tool-thumbnail/index.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["packages/artplayer-tool-thumbnail/src/index.js","packages/artplayer-tool-thumbnail/node_modules/tiny-emitter/index.js","packages/artplayer-tool-thumbnail/src/utils.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js"],"sourcesContent":["import Emitter from 'tiny-emitter';\nimport { runPromisesInSeries, sleep, getFileName, clamp } 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: 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) 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","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\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}","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 (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {\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":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"} \ No newline at end of file +{"mappings":"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","sources":["src/index.js","src/emitter.js","../../node_modules/@parcel/transformer-js/src/esmodule-helpers.js","src/utils.js"],"sourcesContent":["import Emitter from './emitter';\nimport { runPromisesInSeries, sleep, getFileName, clamp } 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: 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) 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) liveEvents.push(evts[i]);\n }\n }\n if (liveEvents.length) {\n e[name] = liveEvents;\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 (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {\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}"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../packages/artplayer-tool-thumbnail/"} \ No newline at end of file diff --git a/packages/artplayer-tool-thumbnail/package.json b/packages/artplayer-tool-thumbnail/package.json index 4c5f04fb5..060ed00fc 100644 --- a/packages/artplayer-tool-thumbnail/package.json +++ b/packages/artplayer-tool-thumbnail/package.json @@ -19,8 +19,5 @@ "html5", "video", "player" - ], - "dependencies": { - "tiny-emitter": "^2.1.0" - } -} + ] +} \ No newline at end of file diff --git a/packages/artplayer-tool-thumbnail/src/emitter.js b/packages/artplayer-tool-thumbnail/src/emitter.js new file mode 100644 index 000000000..e7be0bfdd --- /dev/null +++ b/packages/artplayer-tool-thumbnail/src/emitter.js @@ -0,0 +1,42 @@ +export default class Emitter { + on(name, fn, ctx) { + const e = this.e || (this.e = {}); + (e[name] || (e[name] = [])).push({ fn, ctx }); + return this; + } + + once(name, fn, ctx) { + const self = this; + function listener(...args) { + self.off(name, listener); + fn.apply(ctx, args); + } + listener._ = fn; + return this.on(name, listener, ctx); + } + + emit(name, ...data) { + const evtArr = ((this.e || (this.e = {}))[name] || []).slice(); + for (let i = 0; i < evtArr.length; i += 1) { + evtArr[i].fn.apply(evtArr[i].ctx, data); + } + return this; + } + + off(name, callback) { + const e = this.e || (this.e = {}); + const evts = e[name]; + const liveEvents = []; + if (evts && callback) { + for (let i = 0, len = evts.length; i < len; i += 1) { + if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]); + } + } + if (liveEvents.length) { + e[name] = liveEvents; + } else { + delete e[name]; + } + return this; + } +} diff --git a/packages/artplayer-tool-thumbnail/src/index.js b/packages/artplayer-tool-thumbnail/src/index.js index 48da91f92..84bb5a0be 100644 --- a/packages/artplayer-tool-thumbnail/src/index.js +++ b/packages/artplayer-tool-thumbnail/src/index.js @@ -1,4 +1,4 @@ -import Emitter from 'tiny-emitter'; +import Emitter from './emitter'; import { runPromisesInSeries, sleep, getFileName, clamp } from './utils'; export default class ArtplayerToolThumbnail extends Emitter {