summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/pages/shared/wikis/wikis.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/pages/shared/wikis/wikis.js')
-rw-r--r--app/assets/javascripts/pages/shared/wikis/wikis.js34
1 files changed, 25 insertions, 9 deletions
diff --git a/app/assets/javascripts/pages/shared/wikis/wikis.js b/app/assets/javascripts/pages/shared/wikis/wikis.js
index fe9caba351e..4b4d2f7d238 100644
--- a/app/assets/javascripts/pages/shared/wikis/wikis.js
+++ b/app/assets/javascripts/pages/shared/wikis/wikis.js
@@ -20,12 +20,13 @@ export default class Wikis {
const sidebarToggles = document.querySelectorAll('.js-sidebar-wiki-toggle');
for (let i = 0; i < sidebarToggles.length; i += 1) {
- sidebarToggles[i].addEventListener('click', e => this.handleToggleSidebar(e));
+ sidebarToggles[i].addEventListener('click', (e) => this.handleToggleSidebar(e));
}
this.isNewWikiPage = Boolean(document.querySelector('.js-new-wiki-page'));
this.editTitleInput = document.querySelector('form.wiki-form #wiki_title');
this.commitMessageInput = document.querySelector('form.wiki-form #wiki_message');
+ this.submitButton = document.querySelector('.js-wiki-btn-submit');
this.commitMessageI18n = this.isNewWikiPage
? s__('WikiPageCreate|Create %{pageTitle}')
: s__('WikiPageEdit|Update %{pageTitle}');
@@ -35,7 +36,7 @@ export default class Wikis {
if (this.editTitleInput.value) this.setWikiCommitMessage(this.editTitleInput.value);
// Set the commit message as the page title is changed
- this.editTitleInput.addEventListener('keyup', e => this.handleWikiTitleChange(e));
+ this.editTitleInput.addEventListener('keyup', (e) => this.handleWikiTitleChange(e));
}
window.addEventListener('resize', () => this.renderSidebar());
@@ -45,18 +46,16 @@ export default class Wikis {
const linkExample = document.querySelector('.js-markup-link-example');
if (changeFormatSelect) {
- changeFormatSelect.addEventListener('change', e => {
+ changeFormatSelect.addEventListener('change', (e) => {
linkExample.innerHTML = MARKDOWN_LINK_TEXT[e.target.value];
});
}
- const wikiTextarea = document.querySelector('form.wiki-form #wiki_content');
+ this.wikiTextarea = document.querySelector('form.wiki-form #wiki_content');
const wikiForm = document.querySelector('form.wiki-form');
- if (wikiTextarea) {
- wikiTextarea.addEventListener('input', () => {
- window.onbeforeunload = () => '';
- });
+ if (this.wikiTextarea) {
+ this.wikiTextarea.addEventListener('input', () => this.handleWikiContentChange());
wikiForm.addEventListener('submit', () => {
window.onbeforeunload = null;
@@ -65,12 +64,29 @@ export default class Wikis {
Wikis.trackPageView();
Wikis.showToasts();
+
+ this.updateSubmitButton();
+ }
+
+ handleWikiContentChange() {
+ this.updateSubmitButton();
+
+ window.onbeforeunload = () => '';
}
handleWikiTitleChange(e) {
+ this.updateSubmitButton();
this.setWikiCommitMessage(e.target.value);
}
+ updateSubmitButton() {
+ if (!this.wikiTextarea) return;
+
+ const isEnabled = Boolean(this.wikiTextarea.value.trim() && this.editTitleInput.value.trim());
+ if (isEnabled) this.submitButton.removeAttribute('disabled');
+ else this.submitButton.setAttribute('disabled', 'true');
+ }
+
setWikiCommitMessage(rawTitle) {
let title = rawTitle;
@@ -121,6 +137,6 @@ export default class Wikis {
static showToasts() {
const toasts = document.querySelectorAll('.js-toast-message');
- toasts.forEach(toast => showToast(toast.dataset.message));
+ toasts.forEach((toast) => showToast(toast.dataset.message));
}
}