Files
2025-06-13 21:16:12 +08:00

32 lines
1.2 KiB
JavaScript

export default function CustomClipboard (Quill) {
const Delta = Quill.import('delta')
const Clipboard = Quill.import('modules/clipboard')
class CustomClipboard extends Clipboard {
onPaste(e) {
const top = window.pageYOffset;
const left = window.pageXOffset;
if (e.defaultPrevented || !this.quill.isEnabled()) return;
let range = this.quill.getSelection();
let delta = new Delta().retain(range.index);
this.container.style.top = (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0).toString() + 'px';
this.container.focus();
setTimeout(() => {
this.quill.selection.update(Quill.sources.SILENT);
delta = delta.concat(this.convert()).delete(range.length);
this.quill.updateContents(delta, Quill.sources.USER);
this.quill.setSelection(delta.length() - range.length, Quill.sources.SILENT);
let bounds = this.quill.getBounds(delta.length() - range.length, Quill.sources.SILENT);
this.quill.scrollingContainer.scrollTop = bounds.top;
// scroll window to previous position after paste
window.scrollTo({top, left});
}, 1);
}
}
return {
'modules/clipboard': CustomClipboard
}
}