mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	feat: integrating basic client-side form validity checking in settings v1 and v2
This commit is contained in:
		| @@ -1,7 +1,7 @@ | |||||||
| 'use strict'; | 'use strict'; | ||||||
|  |  | ||||||
|  |  | ||||||
| define('admin/settings', ['uploader', 'mousetrap', 'hooks', 'alerts'], function (uploader, mousetrap, hooks, alerts) { | define('admin/settings', ['uploader', 'mousetrap', 'hooks', 'alerts', 'settings'], function (uploader, mousetrap, hooks, alerts, settings) { | ||||||
| 	const Settings = {}; | 	const Settings = {}; | ||||||
|  |  | ||||||
| 	Settings.populateTOC = function () { | 	Settings.populateTOC = function () { | ||||||
| @@ -66,6 +66,11 @@ define('admin/settings', ['uploader', 'mousetrap', 'hooks', 'alerts'], function | |||||||
| 		saveBtn.off('click').on('click', function (e) { | 		saveBtn.off('click').on('click', function (e) { | ||||||
| 			e.preventDefault(); | 			e.preventDefault(); | ||||||
|  |  | ||||||
|  | 			const ok = settings.check(document.querySelectorAll('#content [data-field][pattern]')); | ||||||
|  | 			if (!ok) { | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  |  | ||||||
| 			saveFields(fields, function onFieldsSaved(err) { | 			saveFields(fields, function onFieldsSaved(err) { | ||||||
| 				if (err) { | 				if (err) { | ||||||
| 					return alerts.alert({ | 					return alerts.alert({ | ||||||
|   | |||||||
| @@ -517,6 +517,12 @@ define('settings', ['hooks', 'alerts'], function (hooks, alerts) { | |||||||
| 		save: function (hash, formEl, callback) { | 		save: function (hash, formEl, callback) { | ||||||
| 			formEl = $(formEl); | 			formEl = $(formEl); | ||||||
|  |  | ||||||
|  | 			const controls = formEl.get(0).querySelectorAll('input[name][pattern]'); | ||||||
|  | 			const ok = Settings.check(controls); | ||||||
|  | 			if (!ok) { | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  |  | ||||||
| 			if (formEl.length) { | 			if (formEl.length) { | ||||||
| 				const values = helper.serializeForm(formEl); | 				const values = helper.serializeForm(formEl); | ||||||
|  |  | ||||||
| @@ -559,6 +565,26 @@ define('settings', ['hooks', 'alerts'], function (hooks, alerts) { | |||||||
| 				}); | 				}); | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		check: function (controls) { | ||||||
|  | 			const onTrigger = (e) => { | ||||||
|  | 				const wrapper = e.target.closest('.form-group'); | ||||||
|  | 				if (wrapper) { | ||||||
|  | 					wrapper.classList.add('has-error'); | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				e.target.removeEventListener('invalid', onTrigger); | ||||||
|  | 			}; | ||||||
|  |  | ||||||
|  | 			return Array.prototype.map.call(controls, (controlEl) => { | ||||||
|  | 				const wrapper = controlEl.closest('.form-group'); | ||||||
|  | 				if (wrapper) { | ||||||
|  | 					wrapper.classList.remove('has-error'); | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				controlEl.addEventListener('invalid', onTrigger); | ||||||
|  | 				return controlEl.reportValidity(); | ||||||
|  | 			}).every(Boolean); | ||||||
|  | 		}, | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -121,7 +121,7 @@ | |||||||
| 			</div> | 			</div> | ||||||
| 			<div class="form-group"> | 			<div class="form-group"> | ||||||
| 				<label for="hsts-maxage">[[admin/settings/advanced:hsts.maxAge]]</label> | 				<label for="hsts-maxage">[[admin/settings/advanced:hsts.maxAge]]</label> | ||||||
| 				<input class="form-control" id="hsts-maxage" type="number" placeholder="31536000" data-field="hsts-maxage" /><br /> | 				<input class="form-control" id="hsts-maxage" type="text" pattern="\d+" placeholder="31536000" data-field="hsts-maxage" /><br /> | ||||||
| 			</div> | 			</div> | ||||||
| 			<div class="checkbox"> | 			<div class="checkbox"> | ||||||
| 				<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect"> | 				<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect"> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user