diff options
author | David Jimenez <dvejmz@users.noreply.github.com> | 2021-10-27 05:33:22 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-27 12:33:22 +0800 |
commit | a462fcaac8825e992c99e3298a28c649682c0c92 (patch) | |
tree | 3d32e1762dbca27486c602f144164eb094aeda90 /web_src | |
parent | 8f9ac439cae544a7bad3acfba2fdd08f84c75ba8 (diff) | |
download | gitea-a462fcaac8825e992c99e3298a28c649682c0c92.tar.gz gitea-a462fcaac8825e992c99e3298a28c649682c0c92.zip |
Show client-side error if wiki page is empty (#17415)
* fix: show client-side error if wiki page is empty
Implement a JS, client-side validation workaround for a bug in the upstream
editor library SimpleMDE which breaks HTML5 client-side validation when
a wiki page is submitted.
This allows native, client-side errors to appear if
the text editor contents are empty.
See upstream bugfix report: https://github.com/sparksuite/simplemde-markdown-editor/issues/324
Signed-off-by: David Jimenez <dvejmz@sgfault.com>
Co-authored-by: Lauris BH <lauris@nix.lv>
Diffstat (limited to 'web_src')
-rw-r--r-- | web_src/js/features/repo-wiki.js | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/web_src/js/features/repo-wiki.js b/web_src/js/features/repo-wiki.js index ddd4e30a8a..1acdb4da48 100644 --- a/web_src/js/features/repo-wiki.js +++ b/web_src/js/features/repo-wiki.js @@ -8,7 +8,9 @@ export function initRepoWikiForm() { let sideBySideChanges = 0; let sideBySideTimeout = null; let hasSimpleMDE = true; + if ($editArea.length > 0) { + const $form = $('.repository.wiki.new .ui.form'); const simplemde = new SimpleMDE({ autoDownloadFontAwesome: false, element: $editArea[0], @@ -105,7 +107,6 @@ export function initRepoWikiForm() { action(e) { e.toTextArea(); hasSimpleMDE = false; - const $form = $('.repository.wiki.new .ui.form'); const $root = $form.find('.field.content'); const loading = $root.data('loading'); $root.append(`<div class="ui bottom tab markup" data-tab="preview">${loading}</div>`); @@ -116,7 +117,24 @@ export function initRepoWikiForm() { }, ] }); - $(simplemde.codemirror.getInputField()).addClass('js-quick-submit'); + + const $markdownEditorTextArea = $(simplemde.codemirror.getInputField()); + $markdownEditorTextArea.addClass('js-quick-submit'); + + $form.on('submit', function (e) { + // The original edit area HTML element is hidden and replaced by the + // SimpleMDE editor, breaking HTML5 input validation if the text area is empty. + // This is a workaround for this upstream bug. + // See https://github.com/sparksuite/simplemde-markdown-editor/issues/324 + const input = $editArea.val(); + if (!input.length) { + e.preventDefault(); + $markdownEditorTextArea.prop('required', true); + this.reportValidity(); + } else { + $markdownEditorTextArea.prop('required', false); + } + }); setTimeout(() => { const $bEdit = $('.repository.wiki.new .previewtabs a[data-tab="write"]'); |