This commit is contained in:
2025-04-03 19:29:57 +08:00
parent 521255c1af
commit 9add82dc7e
28 changed files with 749 additions and 267 deletions

View File

@@ -20,6 +20,7 @@ type BaseEditorOpts = {
open?: boolean;
overrideList?: Completion[];
};
onChange?: (value: string) => void;
};
export class BaseEditor {
editor?: EditorView;
@@ -32,7 +33,7 @@ export class BaseEditor {
open?: boolean;
overrideList?: Completion[];
};
onChange?: (value: string) => void;
constructor(opts?: BaseEditorOpts) {
this.filename = opts?.filename || '';
this.language = opts?.language || 'typescript';
@@ -43,6 +44,7 @@ export class BaseEditor {
}
this.autoComplete = opts?.autoComplete || { open: true, overrideList: [] };
this.onChangeCompartment = new Compartment(); // 创建一个用于 onChange 的独立扩展
this.onChange = opts?.onChange;
}
onEditorChange(view: EditorView) {
console.log('onChange', view);
@@ -54,6 +56,7 @@ export class BaseEditor {
this.el = el;
const onChangeCompartment = this.onChangeCompartment!;
const language = this.language;
const onChange = this.onChange;
const extensions: Extension[] = [
vscodeLight,
formatKeymap,
@@ -91,7 +94,15 @@ export class BaseEditor {
parent: el,
extensions: [
...extensions, //
onChangeCompartment.of([]),
onChangeCompartment.of([
[
EditorView.updateListener.of((update) => {
if (update.changes.length > 0) {
onChange?.(update.state.doc.toString());
}
}),
],
]),
],
});
}