X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/6b84a76af1917ff8e53c4636cb5fe08d1b40ccdd..6ca8ccd330bc858aa6b8fa6e3ecd23fab013ffba:/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..9e2bb3915 100644 --- a/resources/assets/js/components/markdown-editor.js +++ b/resources/assets/js/components/markdown-editor.js @@ -18,6 +18,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() { @@ -387,6 +394,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