From 8aaa532f41c2fa5b1d5c403a2d48e55eb9a3d1c2 Mon Sep 17 00:00:00 2001 From: saturn Date: Wed, 12 Apr 2023 03:20:37 -0500 Subject: [PATCH] Convert HTML to Markdown in a paste listener, and remove other conversions. --- www/script.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/www/script.js b/www/script.js index 58abd872..ffeda1ed 100644 --- a/www/script.js +++ b/www/script.js @@ -475,7 +475,18 @@ Element.prototype.addTextareaFeatures = function() { beginAutocompletion(textarea, start, end); } }); - + + textarea.addEventListener("paste", (event) => { + let html = event.clipboardData.getData("text/html"); + if(html) { + html = html.replace(/\n|\r/gm, ""); + let isQuoted = textarea.selectionStart >= 2 && + textarea.value.substring(textarea.selectionStart - 2, textarea.selectionStart) == "> "; + document.execCommand("insertText", false, MarkdownFromHTML(html, (isQuoted ? "> " : null))); + event.preventDefault(); + } + }); + textarea.addEventListener("keyup", (event) => { event.stopPropagation(); }); textarea.addEventListener("keypress", (event) => { event.stopPropagation(); }); textarea.addEventListener("keydown", (event) => { @@ -489,7 +500,6 @@ Element.prototype.addTextareaFeatures = function() { }); let form = textarea.closest("form"); - if(form) form.addEventListener("submit", event => { textarea.value = MarkdownFromHTML(textarea.value)}); textarea.insertAdjacentHTML("beforebegin", "
"); let textareaContainer = textarea.closest(".textarea-container"); @@ -617,7 +627,6 @@ Element.prototype.injectReplyForm = function(editMarkdownSource) { } } let textarea = commentControls.query("textarea"); - textarea.value = MarkdownFromHTML(editMarkdownSource || ""); textarea.addTextareaFeatures(); textarea.focus(); } @@ -4646,12 +4655,10 @@ function mainInitializer() { } // On edit post pages and conversation pages, add GUIEdit buttons to the - // textarea, expand it, and markdownify the existing text, if any (this is - // needed if a post was last edited on LW). + // textarea and expand it. queryAll(".with-markdown-editor textarea").forEach(textarea => { textarea.addTextareaFeatures(); expandTextarea(textarea); - textarea.value = MarkdownFromHTML(textarea.value); }); // Focus the textarea. queryAll(((getQueryVariable("post-id")) ? "#edit-post-form textarea" : "#edit-post-form input[name='title']") + (GW.isMobile ? "" : ", .conversation-page textarea")).forEach(field => { field.focus(); }); -- 2.11.4.GIT