diff options
Diffstat (limited to 'app/assets/javascripts/pages/shared/wikis/wikis.js')
-rw-r--r-- | app/assets/javascripts/pages/shared/wikis/wikis.js | 34 |
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)); } } |