+ // 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
+ })
+ }
+
+ listenForBookStackEditorEvents() {
+
+ function getContentToInsert({html, markdown}) {
+ return markdown || html;
+ }
+
+ // Replace editor content
+ window.$events.listen('editor::replace', (eventContent) => {
+ const markdown = getContentToInsert(eventContent);
+ this.cm.setValue(markdown);
+ });
+
+ // Append editor content
+ window.$events.listen('editor::append', (eventContent) => {
+ const cursorPos = this.cm.getCursor('from');
+ const markdown = getContentToInsert(eventContent);
+ const content = this.cm.getValue() + '\n' + markdown;
+ this.cm.setValue(content);
+ this.cm.setCursor(cursorPos.line, cursorPos.ch);
+ });
+
+ // Prepend editor content
+ window.$events.listen('editor::prepend', (eventContent) => {
+ const cursorPos = this.cm.getCursor('from');
+ const markdown = getContentToInsert(eventContent);
+ const content = markdown + '\n' + this.cm.getValue();
+ this.cm.setValue(content);
+ const prependLineCount = markdown.split('\n').length;
+ this.cm.setCursor(cursorPos.line + prependLineCount, cursorPos.ch);
+ });
+ }