8dc5b8a4b0
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
// @ts-nocheck
|
|
import { Extension, Plugin } from "tiptap";
|
|
|
|
export default class MaxSize extends Extension {
|
|
// eslint-disable-next-line class-methods-use-this
|
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
get name() {
|
|
return "maxSize";
|
|
}
|
|
|
|
// eslint-disable-next-line class-methods-use-this
|
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
get defaultOptions() {
|
|
return {
|
|
maxSize: null,
|
|
};
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
get plugins() {
|
|
return [
|
|
new Plugin({
|
|
appendTransaction: (transactions, oldState, newState) => {
|
|
const max = this.options.maxSize;
|
|
const oldLength = oldState.doc.content.size;
|
|
const newLength = newState.doc.content.size;
|
|
|
|
if (newLength > max && newLength > oldLength) {
|
|
const newTr = newState.tr;
|
|
newTr.insertText("", max + 1, newLength);
|
|
|
|
return newTr;
|
|
}
|
|
},
|
|
}),
|
|
];
|
|
}
|
|
}
|