Skip to content

Commit fe544f9

Browse files
committed
Add optional debounce feature
1 parent 5586f77 commit fe544f9

1 file changed

Lines changed: 18 additions & 2 deletions

File tree

internal/LoadAndSave.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,23 @@
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";
1314
import * as CommonMessages from "../../MessageHandler/CommonMessages.js";
1415

1516
// import internal modules
1617
import * as Trigger from "./Trigger.js";
1718
import * as HtmlMod from "./HtmlModification.js";
1819
import * as OptionsModel from "./OptionsModel.js";
1920

21+
const DEFAULT_DEBOUNCE_TIME = 250; // 250 ms
22+
2023
// vars
2124
let 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

Comments
 (0)