X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/6b84a76af1917ff8e53c4636cb5fe08d1b40ccdd..be4f3d62cd37c7b83eb86bbf5fffa00d20acf2ec:/resources/assets/js/components/markdown-editor.js diff --git a/resources/assets/js/components/markdown-editor.js b/resources/assets/js/components/markdown-editor.js index 06426bf34..a555376e8 100644 --- a/resources/assets/js/components/markdown-editor.js +++ b/resources/assets/js/components/markdown-editor.js @@ -8,6 +8,7 @@ class MarkdownEditor { constructor(elem) { this.elem = elem; + this.textDirection = document.getElementById('page-editor').getAttribute('text-direction'); this.markdown = new MarkdownIt({html: true}); this.markdown.use(mdTasksLists, {label: true}); @@ -18,6 +19,13 @@ class MarkdownEditor { this.onMarkdownScroll = this.onMarkdownScroll.bind(this); this.init(); + + // Scroll to text if needed. + const queryParams = (new URL(window.location)).searchParams; + const scrollText = queryParams.get('content-text'); + if (scrollText) { + this.scrollToText(scrollText); + } } init() { @@ -91,6 +99,9 @@ class MarkdownEditor { codeMirrorSetup() { let cm = this.cm; + // Text direction + // cm.setOption('direction', this.textDirection); + cm.setOption('direction', 'ltr'); // Will force to remain as ltr for now due to issues when HTML is in editor. // Custom key commands let metaKey = code.getMetaKey(); const extraKeys = {}; @@ -387,6 +398,33 @@ class MarkdownEditor { }); } + // Scroll to a specified text + scrollToText(searchText) { + if (!searchText) { + return; + } + + const content = this.cm.getValue(); + const lines = content.split(/\r?\n/); + let lineNumber = lines.findIndex(line => { + return line && line.indexOf(searchText) !== -1; + }); + + if (lineNumber === -1) { + return; + } + + this.cm.scrollIntoView({ + line: lineNumber, + }, 200); + this.cm.focus(); + // set the cursor location. + this.cm.setCursor({ + line: lineNumber, + char: lines[lineNumber].length + }) + } + } module.exports = MarkdownEditor ; \ No newline at end of file