Skip to content

Commit 531311f

Browse files
committed
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: sparksuite/simplemde-markdown-editor#324 Signed-off-by: David Jimenez <[email protected]>
1 parent 6c49517 commit 531311f

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

templates/repo/wiki/new.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
</div>
1212
{{end}}
1313
</div>
14-
<form class="ui form" action="{{.Link}}" method="post">
14+
<form id="edit_form" class="ui form" action="{{.Link}}" method="post">
1515
{{.CsrfTokenHtml}}
1616
<div class="field {{if .Err_Title}}error{{end}}">
1717
<input name="title" value="{{.title}}" autofocus required>
@@ -22,7 +22,7 @@
2222
</div>
2323
<div class="field content" data-loading="{{.i18n.Tr "loading"}}">
2424
<div class="ui bottom active tab" data-tab="write">
25-
<textarea class="js-quick-submit" id="edit_area" name="content" data-id="wiki-{{.title}}" data-url="{{.Repository.APIURL}}/markdown" data-context="{{.RepoLink}}" required>{{if .PageIsUncycloEdit}}{{.content}}{{else}}{{.i18n.Tr "repo.wiki.welcome"}}{{end}}</textarea>
25+
<textarea class="js-quick-submit" id="edit_area" name="content" data-id="wiki-{{.title}}" data-url="{{.Repository.APIURL}}/markdown" data-context="{{.RepoLink}}">{{if .PageIsUncycloEdit}}{{.content}}{{else}}{{.i18n.Tr "repo.wiki.welcome"}}{{end}}</textarea>
2626
</div>
2727
</div>
2828
<div class="field">

web_src/js/features/repo-wiki.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,22 @@ export function initRepoUncycloForm() {
116116
},
117117
]
118118
});
119+
120+
$('#edit_form').on('submit', (e) => {
121+
// The original edit area HTML element is hidden and replaced by the
122+
// SimpleMDE editor, breaking HTML5 input validation if the text area is empty.
123+
// This is a workaround for this upstream bug.
124+
// See https://github.com/sparksuite/simplemde-markdown-editor/issues/324
125+
const input = $editArea.val()
126+
if (!input.length) {
127+
$(simplemde.codemirror.getInputField()).attr('required', true);
128+
document.querySelector('#edit_form').reportValidity();
129+
e.preventDefault()
130+
} else {
131+
$(simplemde.codemirror.getInputField()).attr('required', false);
132+
}
133+
});
134+
119135
$(simplemde.codemirror.getInputField()).addClass('js-quick-submit');
120136

121137
setTimeout(() => {

0 commit comments

Comments
 (0)