]> BookStack Code Mirror - bookstack/blobdiff - resources/js/components/markdown-editor.js
Converted md settings to localstorage, added preview resize
[bookstack] / resources / js / components / markdown-editor.js
index 671aa4e65fc6e78351d8c51934b7b224d6227837..4c3de91f68cafff30c947edb4085a4898109cf9d 100644 (file)
@@ -14,6 +14,11 @@ export class MarkdownEditor extends Component {
 
         this.display = this.$refs.display;
         this.input = this.$refs.input;
+        this.divider = this.$refs.divider;
+        this.displayWrap = this.$refs.displayWrap;
+
+        const settingContainer = this.$refs.settingContainer;
+        const settingInputs = settingContainer.querySelectorAll('input[type="checkbox"]');
 
         this.editor = null;
         initEditor({
@@ -22,10 +27,11 @@ export class MarkdownEditor extends Component {
             displayEl: this.display,
             inputEl: this.input,
             drawioUrl: this.getDrawioUrl(),
+            settingInputs: Array.from(settingInputs),
             text: {
                 serverUploadLimit: this.serverUploadLimitText,
                 imageUploadError: this.imageUploadErrorText,
-            }
+            },
         }).then(editor => {
             this.editor = editor;
             this.setupListeners();
@@ -78,6 +84,36 @@ export class MarkdownEditor extends Component {
         const resizeDebounced = debounce(() => this.editor.cm.refresh(), 100, false);
         const observer = new ResizeObserver(resizeDebounced);
         observer.observe(this.elem);
+
+        this.handleDividerDrag();
+    }
+
+    handleDividerDrag() {
+        this.divider.addEventListener('pointerdown', event => {
+            const wrapRect = this.elem.getBoundingClientRect();
+            const moveListener = (event) => {
+                const xRel = event.pageX - wrapRect.left;
+                const xPct = Math.min(Math.max(20, Math.floor((xRel / wrapRect.width) * 100)), 80);
+                this.displayWrap.style.flexBasis = `${100-xPct}%`;
+                this.editor.settings.set('editorWidth', xPct);
+            };
+            const upListener = (event) => {
+                window.removeEventListener('pointermove', moveListener);
+                window.removeEventListener('pointerup', upListener);
+                this.display.style.pointerEvents = null;
+                document.body.style.userSelect = null;
+                this.editor.cm.refresh();
+            };
+
+            this.display.style.pointerEvents = 'none';
+            document.body.style.userSelect = 'none';
+            window.addEventListener('pointermove', moveListener);
+            window.addEventListener('pointerup', upListener);
+        });
+        const widthSetting = this.editor.settings.get('editorWidth');
+        if (widthSetting) {
+            this.displayWrap.style.flexBasis = `${100-widthSetting}%`;
+        }
     }
 
     scrollToTextIfNeeded() {