From 06e7bc5a6d6e2e43c7ffdc0bb09d2d37322050aa Mon Sep 17 00:00:00 2001 From: Thiago Veronezi Date: Tue, 15 Nov 2016 11:08:15 -0500 Subject: [PATCH] #461 Remove md tags by using temporary div --- src/js/simplemde.js | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/js/simplemde.js b/src/js/simplemde.js index 016d693..f72df0c 100644 --- a/src/js/simplemde.js +++ b/src/js/simplemde.js @@ -999,25 +999,35 @@ function _toggleBlock(editor, type, start_chars, end_chars) { } function _cleanBlock(cm) { - if(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) + if(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className)) { return; - - var startPoint = cm.getCursor("start"); - var endPoint = cm.getCursor("end"); - var text; - - for(var line = startPoint.line; line <= endPoint.line; line++) { - text = cm.getLine(line); - text = text.replace(/^[ ]*([# ]+|\*|\-|[> ]+|[0-9]+(.|\)))[ ]*/, ""); - - cm.replaceRange(text, { - line: line, - ch: 0 - }, { - line: line, - ch: 99999999999999 - }); } + // split the selection in lines + var selections = cm.getSelection().split("\n"); + var removeTags = function(selection) { + var html = marked(selection); + // create a div... + var tmp = document.createElement("DIV"); + // .. with the new generated html code... + tmp.innerHTML = html; + // ... now read the text of the generated code. + // This way the browser does the job of removing the tags. + var result = selection; + if(tmp.textContent) { + result = tmp.textContent; + } else if(tmp.innerText) { + result = tmp.innerText; + } + // removing trailing "new line" + return result.split("\n").join(""); + }; + var result = []; + for(var i = 0; i < selections.length; i++) { + result.push(removeTags(selections[i])); + } + // Add removed "new lines" back to the resulting string. + // Replace the selection with the new clean selection. + cm.replaceSelection(result.join("\n")); } // Merge the properties of one object into another.