]> BookStack Code Mirror - bookstack/commitdiff
Added WYSWIYG editor code editor cancel focus return
authorDan Brown <redacted>
Sun, 7 May 2023 18:36:10 +0000 (19:36 +0100)
committerDan Brown <redacted>
Sun, 7 May 2023 18:36:10 +0000 (19:36 +0100)
Focus now returns to the editor properly when you quit out the code
editor without saving.
This also sets the return location to be correct on normal saving (Would
sometimes jump to the end of the document).

For #4109.

resources/js/components/code-editor.js
resources/js/wysiwyg/plugin-codeeditor.js

index f9dc2b69ff9f8480b34f541a961b27bd17dbf786..1c68c2048d2b695544e336c7291cb2a46350f12c 100644 (file)
@@ -8,7 +8,15 @@ export class CodeEditor extends Component {
      */
     editor = null;
 
      */
     editor = null;
 
-    callback = null;
+    /**
+     * @type {?Function}
+     */
+    saveCallback = null;
+
+    /**
+     * @type {?Function}
+     */
+    cancelCallback = null;
 
     history = {};
 
 
     history = {};
 
@@ -115,15 +123,16 @@ export class CodeEditor extends Component {
     }
 
     save() {
     }
 
     save() {
-        if (this.callback) {
-            this.callback(this.editor.getContent(), this.languageInput.value);
+        if (this.saveCallback) {
+            this.saveCallback(this.editor.getContent(), this.languageInput.value);
         }
         this.hide();
     }
 
         }
         this.hide();
     }
 
-    async open(code, language, callback) {
+    async open(code, language, saveCallback, cancelCallback) {
         this.languageInput.value = language;
         this.languageInput.value = language;
-        this.callback = callback;
+        this.saveCallback = saveCallback;
+        this.cancelCallback = cancelCallback;
 
         await this.show();
         this.languageInputChange(language);
 
         await this.show();
         this.languageInputChange(language);
@@ -141,6 +150,9 @@ export class CodeEditor extends Component {
             this.editor.focus();
         }, () => {
             this.addHistory();
             this.editor.focus();
         }, () => {
             this.addHistory();
+            if (this.cancelCallback) {
+                this.cancelCallback();
+            }
         });
     }
 
         });
     }
 
index fa3804ea8368b8a8afd52631937de2023fe95606..25f774baabd18064642caae7b66abd24850c39fe 100644 (file)
@@ -9,9 +9,16 @@ function elemIsCodeBlock(elem) {
  * @param {function(string, string)} callback (Receives (code: string,language: string)
  */
 function showPopup(editor, code, language, callback) {
  * @param {function(string, string)} callback (Receives (code: string,language: string)
  */
 function showPopup(editor, code, language, callback) {
-    window.$components.first('code-editor').open(code, language, (newCode, newLang) => {
+    /** @var {CodeEditor} codeEditor * */
+    const codeEditor = window.$components.first('code-editor');
+    const bookMark = editor.selection.getBookmark();
+    codeEditor.open(code, language, (newCode, newLang) => {
         callback(newCode, newLang);
         editor.focus();
         callback(newCode, newLang);
         editor.focus();
+        editor.selection.moveToBookmark(bookMark);
+    }, () => {
+        editor.focus();
+        editor.selection.moveToBookmark(bookMark);
     });
 }
 
     });
 }