X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/9884cca00c010215db60db092048cb667808ee88..refs/pull/2700/head:/resources/js/components/wysiwyg-editor.js diff --git a/resources/js/components/wysiwyg-editor.js b/resources/js/components/wysiwyg-editor.js index bae70ad14..a44ab1c62 100644 --- a/resources/js/components/wysiwyg-editor.js +++ b/resources/js/components/wysiwyg-editor.js @@ -152,8 +152,8 @@ function codePlugin() { return; } - let lang = selectedNode.hasAttribute('data-lang') ? selectedNode.getAttribute('data-lang') : ''; - let currentCode = selectedNode.querySelector('textarea').textContent; + const lang = selectedNode.hasAttribute('data-lang') ? selectedNode.getAttribute('data-lang') : ''; + const currentCode = selectedNode.querySelector('textarea').textContent; window.components.first('code-editor').open(currentCode, lang, (code, lang) => { const editorElem = selectedNode.querySelector('.CodeMirror'); @@ -212,7 +212,7 @@ function codePlugin() { showPopup(editor); }); - editor.on('SetContent', function () { + function parseCodeMirrorInstances() { // Recover broken codemirror instances $('.CodeMirrorContainer').filter((index ,elem) => { @@ -225,12 +225,24 @@ function codePlugin() { return elem.contentEditable !== "false"; }); - if (!codeSamples.length) return; + codeSamples.each((index, elem) => { + Code.wysiwygView(elem); + }); + } + + editor.on('init', function() { + // Parse code mirror instances on init, but delay a little so this runs after + // initial styles are fetched into the editor. editor.undoManager.transact(function () { - codeSamples.each((index, elem) => { - Code.wysiwygView(elem); - }); + parseCodeMirrorInstances(); }); + // Parsed code mirror blocks when content is set but wait before setting this handler + // to avoid any init 'SetContent' events. + setTimeout(() => { + editor.on('SetContent', () => { + setTimeout(parseCodeMirrorInstances, 100); + }); + }, 200); }); }); @@ -422,7 +434,7 @@ class WysiwygEditor { this.imageUploadErrorText = this.$opts.imageUploadErrorText; this.isDarkMode = document.documentElement.classList.contains('dark-mode'); - this.plugins = "image table textcolor paste link autolink fullscreen code customhr autosave lists codeeditor media"; + this.plugins = "image imagetools table textcolor paste link autolink fullscreen code customhr autosave lists codeeditor media"; this.loadPlugins(); this.tinyMceConfig = this.getTinyMceConfig();