创高项目初始化
This commit is contained in:
69
client/node_modules/quill/modules/uploader.js
generated
vendored
Normal file
69
client/node_modules/quill/modules/uploader.js
generated
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
import Delta from 'quill-delta';
|
||||
import Emitter from '../core/emitter.js';
|
||||
import Module from '../core/module.js';
|
||||
class Uploader extends Module {
|
||||
constructor(quill, options) {
|
||||
super(quill, options);
|
||||
quill.root.addEventListener('drop', e => {
|
||||
e.preventDefault();
|
||||
let native = null;
|
||||
if (document.caretRangeFromPoint) {
|
||||
native = document.caretRangeFromPoint(e.clientX, e.clientY);
|
||||
// @ts-expect-error
|
||||
} else if (document.caretPositionFromPoint) {
|
||||
// @ts-expect-error
|
||||
const position = document.caretPositionFromPoint(e.clientX, e.clientY);
|
||||
native = document.createRange();
|
||||
native.setStart(position.offsetNode, position.offset);
|
||||
native.setEnd(position.offsetNode, position.offset);
|
||||
}
|
||||
const normalized = native && quill.selection.normalizeNative(native);
|
||||
if (normalized) {
|
||||
const range = quill.selection.normalizedToRange(normalized);
|
||||
if (e.dataTransfer?.files) {
|
||||
this.upload(range, e.dataTransfer.files);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
upload(range, files) {
|
||||
const uploads = [];
|
||||
Array.from(files).forEach(file => {
|
||||
if (file && this.options.mimetypes?.includes(file.type)) {
|
||||
uploads.push(file);
|
||||
}
|
||||
});
|
||||
if (uploads.length > 0) {
|
||||
// @ts-expect-error Fix me later
|
||||
this.options.handler.call(this, range, uploads);
|
||||
}
|
||||
}
|
||||
}
|
||||
Uploader.DEFAULTS = {
|
||||
mimetypes: ['image/png', 'image/jpeg'],
|
||||
handler(range, files) {
|
||||
if (!this.quill.scroll.query('image')) {
|
||||
return;
|
||||
}
|
||||
const promises = files.map(file => {
|
||||
return new Promise(resolve => {
|
||||
const reader = new FileReader();
|
||||
reader.onload = () => {
|
||||
resolve(reader.result);
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
});
|
||||
});
|
||||
Promise.all(promises).then(images => {
|
||||
const update = images.reduce((delta, image) => {
|
||||
return delta.insert({
|
||||
image
|
||||
});
|
||||
}, new Delta().retain(range.index).delete(range.length));
|
||||
this.quill.updateContents(update, Emitter.sources.USER);
|
||||
this.quill.setSelection(range.index + images.length, Emitter.sources.SILENT);
|
||||
});
|
||||
}
|
||||
};
|
||||
export default Uploader;
|
||||
//# sourceMappingURL=uploader.js.map
|
||||
Reference in New Issue
Block a user