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.
This commit is contained in:
Dan Brown 2023-05-07 19:36:10 +01:00
parent 573bc3ec45
commit 3bcbf6b9c5
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
2 changed files with 25 additions and 6 deletions

View 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) { if (this.saveCallback) {
this.callback(this.editor.getContent(), this.languageInput.value); 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(); await this.show();
this.languageInputChange(language); this.languageInputChange(language);
@ -141,6 +150,9 @@ export class CodeEditor extends Component {
this.editor.focus(); this.editor.focus();
}, () => { }, () => {
this.addHistory(); this.addHistory();
if (this.cancelCallback) {
this.cancelCallback();
}
}); });
} }

View File

@ -9,9 +9,16 @@ function elemIsCodeBlock(elem) {
* @param {function(string, string)} callback (Receives (code: string,language: string) * @param {function(string, string)} callback (Receives (code: string,language: string)
*/ */
function showPopup(editor, code, language, callback) { 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); callback(newCode, newLang);
editor.focus(); editor.focus();
editor.selection.moveToBookmark(bookMark);
}, () => {
editor.focus();
editor.selection.moveToBookmark(bookMark);
}); });
} }