From: Dan Brown Date: Sun, 7 May 2023 18:36:10 +0000 (+0100) Subject: Added WYSWIYG editor code editor cancel focus return X-Git-Tag: v23.05.1~1^2~8 X-Git-Url: http://source.bookstackapp.com/bookstack/commitdiff_plain/3bcbf6b9c55c9988b04835473053d514a1cb5df3 Added WYSWIYG editor code editor cancel focus return 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. --- diff --git a/resources/js/components/code-editor.js b/resources/js/components/code-editor.js index f9dc2b69f..1c68c2048 100644 --- a/resources/js/components/code-editor.js +++ b/resources/js/components/code-editor.js @@ -8,7 +8,15 @@ export class CodeEditor extends Component { */ editor = null; - callback = null; + /** + * @type {?Function} + */ + saveCallback = null; + + /** + * @type {?Function} + */ + cancelCallback = null; history = {}; @@ -115,15 +123,16 @@ export class CodeEditor extends Component { } 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(); } - async open(code, language, callback) { + async open(code, language, saveCallback, cancelCallback) { this.languageInput.value = language; - this.callback = callback; + this.saveCallback = saveCallback; + this.cancelCallback = cancelCallback; await this.show(); this.languageInputChange(language); @@ -141,6 +150,9 @@ export class CodeEditor extends Component { this.editor.focus(); }, () => { this.addHistory(); + if (this.cancelCallback) { + this.cancelCallback(); + } }); } diff --git a/resources/js/wysiwyg/plugin-codeeditor.js b/resources/js/wysiwyg/plugin-codeeditor.js index fa3804ea8..25f774baa 100644 --- a/resources/js/wysiwyg/plugin-codeeditor.js +++ b/resources/js/wysiwyg/plugin-codeeditor.js @@ -9,9 +9,16 @@ function elemIsCodeBlock(elem) { * @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(); + editor.selection.moveToBookmark(bookMark); + }, () => { + editor.focus(); + editor.selection.moveToBookmark(bookMark); }); }