]> BookStack Code Mirror - bookstack/blobdiff - resources/js/wysiwyg/index.ts
ZIP Imports: Added API examples, finished testing
[bookstack] / resources / js / wysiwyg / index.ts
index 8f6c41c1ac4f118b9103cc32c03130e9e06177f0..f572f9de5ec9da58fc890b93b8efced42de8ab7d 100644 (file)
@@ -123,6 +123,8 @@ export function createBasicEditorInstance(container: HTMLElement, htmlContent: s
 
 export class SimpleWysiwygEditorInterface {
     protected context: EditorUiContext;
+    protected onChangeListeners: (() => void)[] = [];
+    protected editorListenerTeardown: (() => void)|null = null;
 
     constructor(context: EditorUiContext) {
         this.context = context;
@@ -132,12 +134,32 @@ export class SimpleWysiwygEditorInterface {
         return await getEditorContentAsHtml(this.context.editor);
     }
 
+    onChange(listener: () => void) {
+        this.onChangeListeners.push(listener);
+        this.startListeningToChanges();
+    }
+
     focus(): void {
         focusEditor(this.context.editor);
     }
 
     remove() {
-        this.context.editorDOM.remove();
         this.context.manager.teardown();
+        this.context.containerDOM.remove();
+        if (this.editorListenerTeardown) {
+            this.editorListenerTeardown();
+        }
+    }
+
+    protected startListeningToChanges(): void {
+        if (this.editorListenerTeardown) {
+            return;
+        }
+
+        this.editorListenerTeardown = this.context.editor.registerUpdateListener(() => {
+             for (const listener of this.onChangeListeners) {
+                 listener();
+             }
+        });
     }
 }
\ No newline at end of file