this.markdown.use(mdTasksLists, {label: true});
this.display = this.elem.querySelector('.markdown-display');
- this.displayDoc = this.display.contentDocument;
+
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);
- 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);
- }
+ this.display.addEventListener('load', () => {
+ this.displayDoc = this.display.contentDocument;
+ this.init();
+ });
}
init() {
this.codeMirrorSetup();
this.listenForBookStackEditorEvents();
+
+ // Scroll to text if needed.
+ const queryParams = (new URL(window.location)).searchParams;
+ const scrollText = queryParams.get('content-text');
+ if (scrollText) {
+ this.scrollToText(scrollText);
+ }
}
// Update the input content and render the display.
}
});
- // Handle images on drag-drop
+ // Handle image & content drag n drop
cm.on('drop', (cm, event) => {
- event.stopPropagation();
- event.preventDefault();
- let cursorPos = cm.coordsChar({left: event.pageX, top: event.pageY});
- cm.setCursor(cursorPos);
- if (!event.dataTransfer || !event.dataTransfer.files) return;
- for (let i = 0; i < event.dataTransfer.files.length; i++) {
- uploadImage(event.dataTransfer.files[i]);
+
+ const templateId = event.dataTransfer.getData('bookstack/template');
+ if (templateId) {
+ const cursorPos = cm.coordsChar({left: event.pageX, top: event.pageY});
+ cm.setCursor(cursorPos);
+ event.preventDefault();
+ window.$http.get(`/templates/${templateId}`).then(resp => {
+ const content = resp.data.markdown || resp.data.html;
+ cm.replaceSelection(content);
+ });
}
+
+ if (event.dataTransfer && event.dataTransfer.files && event.dataTransfer.files.length > 0) {
+ const cursorPos = cm.coordsChar({left: event.pageX, top: event.pageY});
+ cm.setCursor(cursorPos);
+ event.stopPropagation();
+ event.preventDefault();
+ for (let i = 0; i < event.dataTransfer.files.length; i++) {
+ uploadImage(event.dataTransfer.files[i]);
+ }
+ }
+
});
// Helper to replace editor content