X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/e711290d8b1ce06b38e0560248806e8de2077870..refs/pull/4727/head:/resources/js/components/code-editor.js diff --git a/resources/js/components/code-editor.js b/resources/js/components/code-editor.js index 0d8450314..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 = {}; @@ -43,9 +51,9 @@ export class CodeEditor extends Component { this.languageInputChange(language); }); - onEnterPress(this.languageInput, e => this.save()); - this.languageInput.addEventListener('input', e => this.languageInputChange(this.languageInput.value)); - onSelect(this.saveButton, e => this.save()); + onEnterPress(this.languageInput, () => this.save()); + this.languageInput.addEventListener('input', () => this.languageInputChange(this.languageInput.value)); + onSelect(this.saveButton, () => this.save()); onChildEvent(this.historyList, 'button', 'click', (event, elem) => { event.preventDefault(); @@ -74,7 +82,13 @@ export class CodeEditor extends Component { onChildEvent(button.parentElement, '.lang-option-favorite-toggle', 'click', () => { isFavorite = !isFavorite; - isFavorite ? this.favourites.add(language) : this.favourites.delete(language); + + if (isFavorite) { + this.favourites.add(language); + } else { + this.favourites.delete(language); + } + button.setAttribute('data-favourite', isFavorite ? 'true' : 'false'); window.$http.patch('/preferences/update-code-language-favourite', { @@ -109,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); @@ -135,6 +150,9 @@ export class CodeEditor extends Component { this.editor.focus(); }, () => { this.addHistory(); + if (this.cancelCallback) { + this.cancelCallback(); + } }); } @@ -173,7 +191,7 @@ export class CodeEditor extends Component { const historyKeys = Object.keys(this.history).reverse(); this.historyDropDown.classList.toggle('hidden', historyKeys.length === 0); this.historyList.innerHTML = historyKeys.map(key => { - const localTime = (new Date(parseInt(key))).toLocaleTimeString(); + const localTime = (new Date(parseInt(key, 10))).toLocaleTimeString(); return `
  • `; }).join(''); }