JS components: migrate app-custom-field-options-toggle, app-color-default-toggle, and app-settings-telemetry to shared conditional-controls factory/utility, removing duplicated syncControlState logic and init boilerplate. grid.php: extract gridQueryCsvInput() to DRY up 3 CSV parsers, simplify multi_csv handler via gridNormalizeLabelList, delegate order type to gridQueryEnum. Tests: add 23 SearchQueryNormalizer tests (LIKE escaping, wildcards, Unicode) and 7 additional Crypto edge-case tests (empty input, missing fields, special chars, binary content, truncation). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
37 lines
1.4 KiB
JavaScript
37 lines
1.4 KiB
JavaScript
/**
|
|
* Tracks settings page interactions for telemetry.
|
|
*/
|
|
import { resolveHost } from '../core/app-dom.js';
|
|
import { syncControlState } from '../core/app-conditional-controls.js';
|
|
|
|
export const initTelemetrySettings = (root = document, options = {}) => {
|
|
const host = resolveHost(root);
|
|
const toggleSelector = String(options.toggleSelector || '[data-telemetry-enabled-toggle]').trim() || '[data-telemetry-enabled-toggle]';
|
|
const samplingFieldsetSelector = String(options.samplingFieldsetSelector || '[data-telemetry-sampling-fieldset]').trim() || '[data-telemetry-sampling-fieldset]';
|
|
const samplingRowSelector = String(options.samplingRowSelector || '[data-telemetry-sampling-row]').trim() || '[data-telemetry-sampling-row]';
|
|
|
|
const toggle = host.querySelector(toggleSelector);
|
|
const samplingFieldset = host.querySelector(samplingFieldsetSelector);
|
|
const samplingRow = host.querySelector(samplingRowSelector);
|
|
|
|
if (!toggle || !samplingFieldset) {
|
|
return { destroy: () => {} };
|
|
}
|
|
|
|
const syncSamplingVisibility = () => {
|
|
const active = Boolean(toggle.checked);
|
|
syncControlState(samplingFieldset, active);
|
|
if (samplingRow instanceof HTMLElement) {
|
|
samplingRow.hidden = !active;
|
|
}
|
|
};
|
|
|
|
toggle.addEventListener('change', syncSamplingVisibility);
|
|
syncSamplingVisibility();
|
|
return {
|
|
destroy: () => {
|
|
toggle.removeEventListener('change', syncSamplingVisibility);
|
|
},
|
|
};
|
|
};
|