From ced90c23db5b13bd374ad4e64cd262c7eea16fdd Mon Sep 17 00:00:00 2001 From: tleb Date: Tue, 15 Oct 2019 09:53:44 +0200 Subject: [PATCH 1/5] More JS-like, callback as last argument --- core/templates/core/markdown_textarea.jinja | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/core/templates/core/markdown_textarea.jinja b/core/templates/core/markdown_textarea.jinja index 2f2b69c9..eb5b021c 100644 --- a/core/templates/core/markdown_textarea.jinja +++ b/core/templates/core/markdown_textarea.jinja @@ -14,14 +14,12 @@ } // Custom markdown parser - function customMarkdownParser(plainText, preview) { + function customMarkdownParser(plainText, cb) { $.ajax({ url: "{{ markdown_api_url }}", method: "POST", data: { text: plainText, csrfmiddlewaretoken: getCSRFToken() }, - }).done(function (msg) { - preview.innerHTML = msg; - }); + }).done(cb); } // Pretty markdown input @@ -31,9 +29,9 @@ autoDownloadFontAwesome: false, previewRender: function(plainText, preview){ // Async method clearTimeout(lastAPICall); - lastAPICall = setTimeout(function (plainText, preview){ - customMarkdownParser(plainText, preview); - }, 300, plainText, preview); + lastAPICall = setTimeout(() => { + customMarkdownParser(plainText, (msg) => preview.innerHTML = msg); + }, 300); return preview.innerHTML; }, forceSync: true, // Avoid validation error on generic create view @@ -169,4 +167,4 @@ ] }); - \ No newline at end of file + From 13312e98799fdcbdb4b8fa09e96ebf65dc614faf Mon Sep 17 00:00:00 2001 From: tleb Date: Tue, 15 Oct 2019 09:54:10 +0200 Subject: [PATCH 2/5] Highlight a markdown input in red if required and submit is pressed Kind of copy the behaviour of a Firefox input Once the submit button has been pressed, highlight in red the text input if it's required but empty --- core/templates/core/markdown_textarea.jinja | 31 +++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/core/templates/core/markdown_textarea.jinja b/core/templates/core/markdown_textarea.jinja index eb5b021c..c83497b2 100644 --- a/core/templates/core/markdown_textarea.jinja +++ b/core/templates/core/markdown_textarea.jinja @@ -166,5 +166,36 @@ }, ] }); + + $(function() { + let textarea = document.getElementById('{{ widget.attrs.id }}') + let submit = textarea + .closest('form') + .querySelector('input[type="submit"]') + let parentDiv = textarea.parentElement + let submitPressed = false + + function checkMarkdownInput() { + // an attribute is null if it does not exist, else a string + let required = textarea.getAttribute('required') != null + let length = textarea.value.trim().length + + if (required && length == 0) { + parentDiv.style.boxShadow = 'red 0px 0px 1.5px 1px' + } else { + parentDiv.style.boxShadow = '' + } + } + + submit.addEventListener('click', () => { + submitPressed = true + checkMarkdownInput() + }) + easymde.codemirror.on('change', () => { + if (submitPressed) { + checkMarkdownInput() + } + }) + }) From 0011f4c7b0b97eebb0a2c23091f54706ba773504 Mon Sep 17 00:00:00 2001 From: tleb Date: Tue, 15 Oct 2019 10:23:15 +0200 Subject: [PATCH 3/5] Only register onchange once the submit button has been pressed --- core/templates/core/markdown_textarea.jinja | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/core/templates/core/markdown_textarea.jinja b/core/templates/core/markdown_textarea.jinja index c83497b2..733aed97 100644 --- a/core/templates/core/markdown_textarea.jinja +++ b/core/templates/core/markdown_textarea.jinja @@ -188,14 +188,12 @@ } submit.addEventListener('click', () => { + if (!submitPressed) { + easymde.codemirror.on('change', checkMarkdownInput) + } submitPressed = true checkMarkdownInput() }) - easymde.codemirror.on('change', () => { - if (submitPressed) { - checkMarkdownInput() - } - }) }) From e932abfa74b4b97f3bed470ba7052317ce84f31e Mon Sep 17 00:00:00 2001 From: tleb Date: Tue, 15 Oct 2019 10:41:10 +0200 Subject: [PATCH 4/5] Prevent pressing submit if the Markdown widget is empty --- core/templates/core/markdown_textarea.jinja | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/templates/core/markdown_textarea.jinja b/core/templates/core/markdown_textarea.jinja index 733aed97..f23b41c3 100644 --- a/core/templates/core/markdown_textarea.jinja +++ b/core/templates/core/markdown_textarea.jinja @@ -175,24 +175,25 @@ let parentDiv = textarea.parentElement let submitPressed = false - function checkMarkdownInput() { + function checkMarkdownInput(e) { // an attribute is null if it does not exist, else a string let required = textarea.getAttribute('required') != null let length = textarea.value.trim().length if (required && length == 0) { parentDiv.style.boxShadow = 'red 0px 0px 1.5px 1px' + e.preventDefault() } else { parentDiv.style.boxShadow = '' } } - submit.addEventListener('click', () => { + submit.addEventListener('click', (e) => { if (!submitPressed) { easymde.codemirror.on('change', checkMarkdownInput) } submitPressed = true - checkMarkdownInput() + checkMarkdownInput(e) }) }) From 7ecb057b68923b274114c6c180618a6e4c90ae2c Mon Sep 17 00:00:00 2001 From: tleb Date: Wed, 16 Oct 2019 12:18:23 +0200 Subject: [PATCH 5/5] Isolate easymde instances so that they can be referenced --- core/templates/core/markdown_textarea.jinja | 355 ++++++++++---------- 1 file changed, 179 insertions(+), 176 deletions(-) diff --git a/core/templates/core/markdown_textarea.jinja b/core/templates/core/markdown_textarea.jinja index f23b41c3..5d769011 100644 --- a/core/templates/core/markdown_textarea.jinja +++ b/core/templates/core/markdown_textarea.jinja @@ -5,195 +5,198 @@ {# The easymde script can be included twice, it's safe in the code #}