upd: notes
add validation feedback if user doesn't fill out all required fields.
This commit is contained in:
		| @@ -95,6 +95,13 @@ function saveNote(event) { | ||||
|         event.preventDefault(); | ||||
|     } | ||||
|  | ||||
|     document.querySelector('#noteTitle').classList.remove('input-error'); | ||||
|     document.querySelector('#noteDate').classList.remove('input-error'); | ||||
|     document.querySelector('#speaker').classList.remove('input-error'); | ||||
|     document.querySelector('#series').classList.remove('input-error'); | ||||
|     document.querySelector('#passage').classList.remove('input-error'); | ||||
|     document.querySelector('#notes').classList.remove('input-error'); | ||||
|  | ||||
|     if (!textDirty || !validateNote()) { | ||||
|         clearTimeout(to); | ||||
|         to = setTimeout(saveNote, saveInterval); | ||||
| @@ -174,14 +181,20 @@ function validateNote() { | ||||
|     const title = document.querySelector('#noteTitle'); | ||||
|     const psg = document.querySelector('#passage'); | ||||
|  | ||||
|     if (!title.value.length) { return false; } | ||||
|     if (!date.value) { return false; } | ||||
|     if (!parseInt(speaker.value)) { return false; } | ||||
|     if (!parseInt(series.value)) { return false; } | ||||
|     if (!psg.value) { return false; } | ||||
|     if (!note.value.length) { return false; } | ||||
|     let ret = true; | ||||
|  | ||||
|     return true; | ||||
|     if (!title.value.length) { title.classList.add('input-error'); ret = false; } | ||||
|     if (!date.value) { date.classList.add('input-error'); ret = false; } | ||||
|     if (!parseInt(speaker.value)) { speaker.classList.add('input-error'); ret = false; } | ||||
|     if (!parseInt(series.value)) { series.classList.add('input-error'); ret = false; } | ||||
|     if (!psg.value) { psg.classList.add('input-error'); ret = false; } | ||||
|     if (!note.value.length) { note.classList.add('input-error'); ret = false; } | ||||
|  | ||||
|     if (!ret) { | ||||
|         toggleFields(true); | ||||
|     } | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -506,20 +519,21 @@ function removeActiveRef() { | ||||
| /** | ||||
|  * Toggles the visibility of the fields container and updates the active state of the show/hide button. | ||||
|  * | ||||
|  * @param boolean show | ||||
|  * @return {void} | ||||
|  */ | ||||
| function toggleFields() { | ||||
| function toggleFields(show = false) { | ||||
|     const fieldsContainer = document.getElementById('fields-container'); | ||||
|     const showHideBtn = document.getElementById('show-hide-btn'); | ||||
|  | ||||
|     if (fieldsContainer.classList.contains('show')) { | ||||
|         fieldsContainer.classList.remove('show'); | ||||
|         fieldsContainer.style.display = 'none'; | ||||
|         showHideBtn.classList.remove('active'); | ||||
|     } else { | ||||
|     if (show || !fieldsContainer.classList.contains('show')) { | ||||
|         fieldsContainer.classList.add('show'); | ||||
|         fieldsContainer.style.display = 'block'; | ||||
|         showHideBtn.classList.add('active'); | ||||
|     } else { | ||||
|         fieldsContainer.classList.remove('show'); | ||||
|         fieldsContainer.style.display = 'none'; | ||||
|         showHideBtn.classList.remove('active');     | ||||
|     } | ||||
|  | ||||
|     setHeight(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user