From 5dcefab1836f2733d03abc367d56a59ad0f29d60 Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 6 May 2020 00:08:24 +0200 Subject: [PATCH] md-editor jump to src line by clicking in preview --- copyparty/web/mde.js | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/copyparty/web/mde.js b/copyparty/web/mde.js index 51482c2d..71b9e752 100644 --- a/copyparty/web/mde.js +++ b/copyparty/web/mde.js @@ -18,7 +18,7 @@ var dom_md = document.getElementById('mt'); dom_nav.innerHTML = nav.join(''); })(); -(function () { +var mde = (function () { var tbar = [ { name: "light", @@ -53,7 +53,8 @@ var dom_md = document.getElementById('mt'); insertTexts: ["[](", ")"], tabSize: 4, toolbar: tbar, - previewClass: 'mdo' + previewClass: 'mdo', + onToggleFullScreen: set_jumpto, }); md_changed(mde, true); mde.codemirror.on("change", function () { @@ -61,8 +62,28 @@ var dom_md = document.getElementById('mt'); }); var loader = document.getElementById('ml'); loader.parentNode.removeChild(loader); + return mde; })(); +function set_jumpto() { + document.querySelector('.editor-preview-side').onclick = jumpto; +} + +function jumpto(ev) { + var tgt = ev.target || ev.srcElement; + var ln = null; + while (tgt && !ln) { + ln = tgt.getAttribute('data-ln'); + tgt = tgt.parentElement; + } + var ln = parseInt(ln); + console.log(ln); + var cm = mde.codemirror; + var y = cm.heightAtLine(ln - 1, 'local'); + var y2 = cm.heightAtLine(ln, 'local'); + cm.scrollTo(null, y + (y2 - y) - cm.getScrollInfo().clientHeight / 2); +} + function md_changed(mde, on_srv) { if (on_srv) window.md_saved = mde.value(); @@ -74,6 +95,8 @@ function md_changed(mde, on_srv) { save_btn.classList.add('disabled'); else save_btn.classList.remove('disabled'); + + set_jumpto(); } function save(mde) { @@ -169,8 +192,8 @@ function save_chk() { return; } - var doc1 = this.txt.replace(/\r/g, ""); - var doc2 = this.responseText.replace(/\r/g, ""); + var doc1 = this.txt.replace(/\r\n/g, "\n"); + var doc2 = this.responseText.replace(/\r\n/g, "\n"); if (doc1 != doc2) { alert( 'Error! The document on the server does not appear to have saved correctly (your editor contents and the server copy is not identical). Place the document on your clipboard for now and check the server logs for hints\n\n' +