33 *
44 * @public
55 * @module AutomaticSettings
6+ * @requires lodash/debounce
67 * @requires ../data/MessageLevel
78 * @requires AutomaticSettings/Trigger
89 * @requires AutomaticSettings/HtmlModification
910 */
1011
1112// common modules
12-
13+ import debounce from "/common/modules/lodash/debounce.js" ;
1314import * as CommonMessages from "../../MessageHandler/CommonMessages.js" ;
1415
1516// import internal modules
1617import * as Trigger from "./Trigger.js" ;
1718import * as HtmlMod from "./HtmlModification.js" ;
1819import * as OptionsModel from "./OptionsModel.js" ;
1920
21+ const DEFAULT_DEBOUNCE_TIME = 250 ; // 250 ms
22+
2023// vars
2124let managedInfoIsShown = false ;
2225
@@ -340,9 +343,13 @@ async function resetOptions(event) {
340343 *
341344 * @public
342345 * @function
346+ * @param {Object } [options]
347+ * @param {number } [options.debounceTime] {@link https://lodash.com/docs#debounce}
343348 * @returns {Promise }
344349 */
345- export function init ( ) {
350+ export function init ( options = {
351+ debounceTime : DEFAULT_DEBOUNCE_TIME
352+ } ) {
346353 // check requirements
347354 OptionsModel . verifyItIsReady ( ) ;
348355
@@ -362,6 +369,15 @@ export function init() {
362369 currentElem . addEventListener ( "change" , saveOption ) ;
363370 } ) ;
364371
372+ // debounced versions
373+ const saveOptionDebounced = debounce ( saveOption , options . debounceTime ) ;
374+ document . querySelectorAll ( ".save-on-input-debounce" ) . forEach ( ( currentElem ) => {
375+ currentElem . addEventListener ( "input" , saveOptionDebounced ) ;
376+ } ) ;
377+ document . querySelectorAll ( ".save-on-change-debounce" ) . forEach ( ( currentElem ) => {
378+ currentElem . addEventListener ( "change" , saveOptionDebounced ) ;
379+ } ) ;
380+
365381 document . querySelectorAll ( ".trigger-on-update" ) . forEach ( ( currentElem ) => {
366382 currentElem . addEventListener ( "input" , Trigger . runHtmlEventTrigger ) ;
367383 } ) ;
0 commit comments