X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a6633642232efd164d4708967ab59e498fbff896..refs/pull/3245/head:/resources/js/components/markdown-editor.js diff --git a/resources/js/components/markdown-editor.js b/resources/js/components/markdown-editor.js index bd107f2bf..a14047d2f 100644 --- a/resources/js/components/markdown-editor.js +++ b/resources/js/components/markdown-editor.js @@ -14,6 +14,7 @@ class MarkdownEditor { this.pageId = this.$opts.pageId; this.textDirection = this.$opts.textDirection; this.imageUploadErrorText = this.$opts.imageUploadErrorText; + this.serverUploadLimitText = this.$opts.serverUploadLimitText; this.markdown = new MarkdownIt({html: true}); this.markdown.use(mdTasksLists, {label: true}); @@ -22,7 +23,6 @@ class MarkdownEditor { this.displayStylesLoaded = false; this.input = this.elem.querySelector('textarea'); - this.htmlInput = this.elem.querySelector('input[name=html]'); this.cm = code.markdownEditor(this.input); this.onMarkdownScroll = this.onMarkdownScroll.bind(this); @@ -112,6 +112,11 @@ class MarkdownEditor { if (scrollText) { this.scrollToText(scrollText); } + + // Refresh CodeMirror on container resize + const resizeDebounced = debounce(() => code.updateLayout(this.cm), 100, false); + const observer = new ResizeObserver(resizeDebounced); + observer.observe(this.elem); } // Update the input content and render the display. @@ -125,7 +130,6 @@ class MarkdownEditor { // Set body content this.displayDoc.body.className = 'page-content'; this.displayDoc.body.innerHTML = html; - this.htmlInput.value = html; // Copy styles from page head and set custom styles for editor this.loadStylesIntoDisplay(); @@ -396,8 +400,9 @@ class MarkdownEditor { actionInsertImage() { const cursorPos = this.cm.getCursor('from'); window.ImageManager.show(image => { + const imageUrl = image.thumbs.display || image.url; let selectedText = this.cm.getSelection(); - let newText = "[![" + (selectedText || image.name) + "](" + image.thumbs.display + ")](" + image.url + ")"; + let newText = "[![" + (selectedText || image.name) + "](" + imageUrl + ")](" + image.url + ")"; this.cm.focus(); this.cm.replaceSelection(newText); this.cm.setCursor(cursorPos.line, cursorPos.ch + newText.length); @@ -448,8 +453,7 @@ class MarkdownEditor { this.insertDrawing(resp.data, cursorPos); DrawIO.close(); }).catch(err => { - window.$events.emit('error', trans('errors.image_upload_error')); - console.log(err); + this.handleDrawingUploadError(err); }); }); } @@ -493,12 +497,20 @@ class MarkdownEditor { this.cm.focus(); DrawIO.close(); }).catch(err => { - window.$events.emit('error', this.imageUploadErrorText); - console.log(err); + this.handleDrawingUploadError(err); }); }); } + handleDrawingUploadError(error) { + if (error.status === 413) { + window.$events.emit('error', this.serverUploadLimitText); + } else { + window.$events.emit('error', this.imageUploadErrorText); + } + console.log(error); + } + // Make the editor full screen actionFullScreen() { const alreadyFullscreen = this.elem.classList.contains('fullscreen');