diff --git a/docs/assets/css/style.css b/docs/assets/css/style.css
index 8f721e60c..426d189f0 100644
--- a/docs/assets/css/style.css
+++ b/docs/assets/css/style.css
@@ -160,4 +160,7 @@ img {
background: #2b2b2b;
border-radius: 3px;
padding: 20px;
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-size: contain;
}
\ No newline at end of file
diff --git a/docs/assets/example/thumbnail.js b/docs/assets/example/thumbnail.js
index ff01395e0..53cf4d5ca 100644
--- a/docs/assets/example/thumbnail.js
+++ b/docs/assets/example/thumbnail.js
@@ -1 +1,79 @@
-console.log('thumbnail');
\ No newline at end of file
+var url = 'https://zhw2590582.github.io/assets-cdn';
+var art = new Artplayer({
+ container: '.artplayer-app',
+ url: url + '/video/one-more-time-one-more-chance-480p.mp4',
+ title: '【新海诚动画】『秒速5センチメートル』',
+ autoSize: true,
+ moreVideoAttr: {
+ crossOrigin: 'anonymous',
+ },
+ controls: [
+ {
+ name: 'thumbnail',
+ position: 'right',
+ html: '创建预览图',
+ mounted: $file => {
+ console.warn('暂时只支持本地视频,请点击创建预览图');
+
+ var thumbnail = new ArtplayerToolThumbnail({
+ fileInput: $file,
+ delay: 300,
+ number: 60,
+ width: 160,
+ height: 90,
+ column: 10,
+ });
+
+ thumbnail.on('file', function(file) {
+ console.log('Read video successfully: ' + file.name);
+ });
+
+ thumbnail.on('video', function(video) {
+ console.log('Video size: ' + video.videoWidth + ' x ' + video.videoHeight);
+ console.log('Video duration: ' + video.duration + 's');
+ thumbnail.start();
+ });
+
+ thumbnail.on('canvas', function(canvas) {
+ console.log('Build canvas successfully');
+ console.log('Canvas size: ' + canvas.width + ' x ' + canvas.height);
+ console.log('Preview density: ' + thumbnail.density + ' p/s');
+ });
+
+ thumbnail.on('update', function(url, percentage) {
+ console.log('Processing: ' + Math.floor(percentage.toFixed(2) * 100) + '%');
+ var $popups = document.querySelector('.popups');
+ var $popinner = document.querySelector('.popinner');
+ $popups.style.display = 'flex';
+ $popinner.style.backgroundImage = 'url(' + url + ')';
+ });
+
+ thumbnail.on('download', function(name) {
+ console.log('Start download preview: ' + name);
+ });
+
+ thumbnail.on('done', function() {
+ $popups.style.display = 'none';
+ thumbnail.download();
+ console.log('Build preview image complete');
+ Artplayer.instances.forEach(function(art) {
+ art.destroy(true);
+ });
+
+ new Artplayer({
+ container: '.artplayer-app',
+ url: thumbnail.videoUrl,
+ thumbnails: {
+ url: thumbnail.thumbnailUrl,
+ number: thumbnail.option.number,
+ width: thumbnail.option.width,
+ height: thumbnail.option.height,
+ column: thumbnail.option.column,
+ },
+ });
+ console.log('Build player complete');
+ });
+ },
+ },
+ ],
+});
diff --git a/docs/uncompiled/artplayer-tool-thumbnail.js b/docs/uncompiled/artplayer-tool-thumbnail.js
index e0f6bb36e..9f5e4dd96 100644
--- a/docs/uncompiled/artplayer-tool-thumbnail.js
+++ b/docs/uncompiled/artplayer-tool-thumbnail.js
@@ -1,8 +1,8 @@
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
- (factory((global['artplayer-tool-thumbnail'] = {})));
-}(this, (function (exports) { 'use strict';
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, global['artplayer-tool-thumbnail'] = factory());
+}(this, function () { 'use strict';
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
@@ -115,30 +115,34 @@
var inherits = _inherits;
- function E() {// Keep this empty so it's easier to inherit from
+ 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 on(name, callback, ctx) {
+ on: function (name, callback, ctx) {
var e = this.e || (this.e = {});
+
(e[name] || (e[name] = [])).push({
fn: callback,
ctx: ctx
});
+
return this;
},
- once: function once(name, callback, ctx) {
- var self = this;
- function listener() {
+ 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 emit(name) {
+
+ emit: function (name) {
var data = [].slice.call(arguments, 1);
var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
var i = 0;
@@ -150,25 +154,34 @@
return this;
},
- off: function off(name, callback) {
+
+ 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]);
+ if (evts[i].fn !== callback && evts[i].fn._ !== callback)
+ liveEvents.push(evts[i]);
}
- } // Remove event from queue to prevent memory leak
+ }
+
+ // 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];
- liveEvents.length ? e[name] = liveEvents : delete e[name];
return this;
}
};
+
var tinyEmitter = E;
+ var TinyEmitter = E;
+ tinyEmitter.TinyEmitter = TinyEmitter;
function sleep(ms) {
return new Promise(function (resolve) {
@@ -208,8 +221,8 @@
_this.setup(Object.assign({}, ArtplayerToolThumbnail.DEFAULTS, option));
_this.video = ArtplayerToolThumbnail.creatVideo();
- _this.inputChange = _this.inputChange.bind(assertThisInitialized(assertThisInitialized(_this)));
- _this.ondrop = _this.ondrop.bind(assertThisInitialized(assertThisInitialized(_this)));
+ _this.inputChange = _this.inputChange.bind(assertThisInitialized(_this));
+ _this.ondrop = _this.ondrop.bind(assertThisInitialized(_this));
_this.option.fileInput.addEventListener('change', _this.inputChange);
@@ -241,7 +254,24 @@
width = _this$option.width,
height = _this$option.height,
column = _this$option.column;
- this.errorHandle(fileInput.tagName === 'INPUT' && fileInput.type === 'file', 'The \'fileInput\' is not a usable file input like: ');
+ this.errorHandle(fileInput instanceof Element, "The 'fileInput' is not a Element");
+
+ if (!(fileInput.tagName === 'INPUT' && fileInput.type === 'file')) {
+ fileInput.style.position = 'relative';
+ var 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;
+ }
+
['delay', 'number', 'width', 'height', 'column'].forEach(function (item) {
_this2.errorHandle(typeof _this2.option[item] === 'number', "The '".concat(item, "' is not a number"));
});
@@ -275,7 +305,7 @@
this.video.src = videoUrl;
sleep(delay).then(function () {
_this3.emit('video', _this3.video);
- }).catch(function (err) {
+ })["catch"](function (err) {
_this3.emit('error', err.message);
console.error(err);
@@ -317,7 +347,7 @@
resolve();
});
- }).catch(function (err) {
+ })["catch"](function (err) {
console.error(err);
});
});
@@ -329,14 +359,14 @@
_this4.processing = false;
_this4.emit('done');
- }).catch(function (err) {
+ })["catch"](function (err) {
_this4.processing = false;
_this4.emit('error', err.message);
console.error(err);
});
- }).catch(function (err) {
+ })["catch"](function (err) {
_this4.processing = false;
_this4.emit('error', err.message);
@@ -464,9 +494,7 @@
window.ArtplayerToolThumbnail = ArtplayerToolThumbnail;
- exports.default = ArtplayerToolThumbnail;
+ return ArtplayerToolThumbnail;
- Object.defineProperty(exports, '__esModule', { value: true });
-
-})));
+}));
//# sourceMappingURL=artplayer-tool-thumbnail.js.map
diff --git a/docs/uncompiled/artplayer-tool-thumbnail.js.map b/docs/uncompiled/artplayer-tool-thumbnail.js.map
index 91312d569..c8a052287 100644
--- a/docs/uncompiled/artplayer-tool-thumbnail.js.map
+++ b/docs/uncompiled/artplayer-tool-thumbnail.js.map
@@ -1 +1 @@
-{"version":3,"file":"artplayer-tool-thumbnail.js","sources":["../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/typeof.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../packages/artplayer-tool-thumbnail/node_modules/tiny-emitter/index.js","../../packages/artplayer-tool-thumbnail/src/utils.js","../../packages/artplayer-tool-thumbnail/src/index.js"],"sourcesContent":["function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","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;\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}","import Emitter from 'tiny-emitter';\nimport { runPromisesInSeries, sleep, getFileName, clamp } from './utils';\n\nclass 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.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 delay: 300,\n number: 60,\n width: 160,\n height: 90,\n column: 10,\n };\n }\n\n static ondragover(e) {\n e.preventDefault();\n }\n\n ondrop(e) {\n e.preventDefault();\n const file = e.dataTransfer.files[0];\n this.loadVideo(file);\n }\n\n setup(option = {}) {\n this.option = Object.assign({}, this.option, option);\n const { fileInput, delay, number, width, height, column } = this.option;\n\n this.errorHandle(\n fileInput.tagName === 'INPUT' && fileInput.type === 'file',\n 'The \\'fileInput\\' is not a usable file input like: ',\n );\n\n ['delay', 'number', 'width', 'height', 'column'].forEach(item => {\n this.errorHandle(typeof this.option[item] === 'number', `The '${item}' is not a number`);\n });\n\n this.option.delay = clamp(delay, 10, 1000);\n this.option.number = clamp(number, 10, 1000);\n this.option.width = clamp(width, 10, 1000);\n this.option.height = clamp(height, 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() {\n const file = this.option.fileInput.files[0];\n this.loadVideo(file);\n }\n\n loadVideo(file) {\n const { delay } = this.option;\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 sleep(delay)\n .then(() => {\n this.emit('video', this.video);\n })\n .catch(err => {\n this.emit('error', err.message);\n console.error(err);\n });\n }\n }\n\n start() {\n const { width, height, number, delay } = this.option;\n this.density = number / this.video.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 this.video.currentTime = item.time;\n return new Promise(resolve => {\n sleep(delay)\n .then(() => {\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 resolve();\n });\n })\n .catch(err => {\n console.error(err);\n });\n });\n });\n this.processing = true;\n return runPromisesInSeries(promiseList)\n .then(() =>\n sleep(delay * 2)\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 console.error(err);\n }),\n )\n .catch(err => {\n this.processing = false;\n this.emit('error', err.message);\n console.error(err);\n });\n }\n\n creatScreenshotDate() {\n const { number, width, height, column } = this.option;\n const { duration } = this.video;\n const timeGap = duration / number;\n const timePoints = [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/thumbnail, 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;\nexport default ArtplayerToolThumbnail;\n"],"names":["_typeof","E","prototype","on","name","callback","ctx","e","push","fn","once","self","listener","off","apply","arguments","_","emit","data","slice","call","evtArr","i","len","length","evts","liveEvents","sleep","ms","Promise","resolve","setTimeout","runPromisesInSeries","ps","reduce","p","next","then","getFileName","nameArray","split","pop","join","clamp","num","a","b","Math","max","min","ArtplayerToolThumbnail","option","processing","setup","Object","assign","DEFAULTS","video","creatVideo","inputChange","bind","ondrop","fileInput","addEventListener","ondragover","preventDefault","file","dataTransfer","files","loadVideo","delay","number","width","height","column","errorHandle","tagName","type","forEach","item","canPlayType","videoUrl","URL","createObjectURL","src","catch","err","message","console","error","density","duration","screenshotDate","creatScreenshotDate","canvas","creatCanvas","context2D","getContext","promiseList","map","index","currentTime","time","drawImage","x","y","toBlob","blob","thumbnailUrl","revokeObjectURL","timeGap","timePoints","last","floor","document","createElement","ceil","fillStyle","fillRect","font","fillText","elink","download","href","body","appendChild","click","removeChild","condition","msg","Error","removeEventListener","style","position","top","left","muted","controls","Emitter","window"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"artplayer-tool-thumbnail.js","sources":["../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/typeof.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../packages/artplayer-tool-thumbnail/node_modules/tiny-emitter/index.js","../../packages/artplayer-tool-thumbnail/src/utils.js","../../packages/artplayer-tool-thumbnail/src/index.js"],"sourcesContent":["function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","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}","import Emitter from 'tiny-emitter';\nimport { runPromisesInSeries, sleep, getFileName, clamp } from './utils';\n\nclass 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.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 delay: 300,\n number: 60,\n width: 160,\n height: 90,\n column: 10,\n };\n }\n\n static ondragover(e) {\n e.preventDefault();\n }\n\n ondrop(e) {\n e.preventDefault();\n const file = e.dataTransfer.files[0];\n this.loadVideo(file);\n }\n\n setup(option = {}) {\n this.option = Object.assign({}, this.option, option);\n const { fileInput, delay, number, width, height, 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 ['delay', 'number', 'width', 'height', 'column'].forEach(item => {\n this.errorHandle(typeof this.option[item] === 'number', `The '${item}' is not a number`);\n });\n\n this.option.delay = clamp(delay, 10, 1000);\n this.option.number = clamp(number, 10, 1000);\n this.option.width = clamp(width, 10, 1000);\n this.option.height = clamp(height, 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() {\n const file = this.option.fileInput.files[0];\n this.loadVideo(file);\n }\n\n loadVideo(file) {\n const { delay } = this.option;\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 sleep(delay)\n .then(() => {\n this.emit('video', this.video);\n })\n .catch(err => {\n this.emit('error', err.message);\n console.error(err);\n });\n }\n }\n\n start() {\n const { width, height, number, delay } = this.option;\n this.density = number / this.video.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 this.video.currentTime = item.time;\n return new Promise(resolve => {\n sleep(delay)\n .then(() => {\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 resolve();\n });\n })\n .catch(err => {\n console.error(err);\n });\n });\n });\n this.processing = true;\n return runPromisesInSeries(promiseList)\n .then(() =>\n sleep(delay * 2)\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 console.error(err);\n }),\n )\n .catch(err => {\n this.processing = false;\n this.emit('error', err.message);\n console.error(err);\n });\n }\n\n creatScreenshotDate() {\n const { number, width, height, column } = this.option;\n const { duration } = this.video;\n const timeGap = duration / number;\n const timePoints = [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/thumbnail, 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;\nexport default ArtplayerToolThumbnail;\n"],"names":["_typeof","sleep","ms","Promise","resolve","setTimeout","runPromisesInSeries","ps","reduce","p","next","then","getFileName","name","nameArray","split","pop","join","clamp","num","a","b","Math","max","min","ArtplayerToolThumbnail","option","processing","setup","Object","assign","DEFAULTS","video","creatVideo","inputChange","bind","ondrop","fileInput","addEventListener","ondragover","e","preventDefault","file","dataTransfer","files","loadVideo","delay","number","width","height","column","errorHandle","Element","tagName","type","style","position","newFileInput","document","createElement","left","top","right","bottom","opacity","appendChild","forEach","item","canPlayType","videoUrl","URL","createObjectURL","emit","src","err","message","console","error","density","duration","screenshotDate","creatScreenshotDate","canvas","creatCanvas","context2D","getContext","promiseList","map","index","currentTime","time","drawImage","x","y","toBlob","blob","thumbnailUrl","revokeObjectURL","timeGap","timePoints","length","last","push","floor","ceil","fillStyle","fillRect","font","fillText","elink","download","href","body","click","removeChild","condition","msg","Error","removeEventListener","muted","controls","Emitter","window"],"mappings":"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"}
\ No newline at end of file
diff --git a/packages/artplayer-tool-thumbnail/src/index.js b/packages/artplayer-tool-thumbnail/src/index.js
index 34da4ff74..3be010b97 100644
--- a/packages/artplayer-tool-thumbnail/src/index.js
+++ b/packages/artplayer-tool-thumbnail/src/index.js
@@ -39,10 +39,23 @@ class ArtplayerToolThumbnail extends Emitter {
this.option = Object.assign({}, this.option, option);
const { fileInput, delay, number, width, height, column } = this.option;
- this.errorHandle(
- fileInput.tagName === 'INPUT' && fileInput.type === 'file',
- 'The \'fileInput\' is not a usable file input like: ',
- );
+ 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';
+ fileInput.appendChild(newFileInput);
+ this.option.fileInput = newFileInput;
+ }
['delay', 'number', 'width', 'height', 'column'].forEach(item => {
this.errorHandle(typeof this.option[item] === 'number', `The '${item}' is not a number`);