80 lines
2 KiB
JavaScript
80 lines
2 KiB
JavaScript
|
/*! DSFR v1.11.2 | SPDX-License-Identifier: MIT | License-Filename: LICENSE.md | restricted use (see terms and conditions) */
|
||
|
|
||
|
const config = {
|
||
|
prefix: 'fr',
|
||
|
namespace: 'dsfr',
|
||
|
organisation: '@gouvfr',
|
||
|
version: '1.11.2'
|
||
|
};
|
||
|
|
||
|
const api = window[config.namespace];
|
||
|
|
||
|
const DisplaySelector = {
|
||
|
DISPLAY: api.internals.ns.selector('display'),
|
||
|
RADIO_BUTTONS: `input[name="${api.internals.ns('radios-theme')}"]`,
|
||
|
FIELDSET: api.internals.ns.selector('fieldset')
|
||
|
};
|
||
|
|
||
|
class Display extends api.core.Instance {
|
||
|
static get instanceClassName () {
|
||
|
return 'Display';
|
||
|
}
|
||
|
|
||
|
init () {
|
||
|
this.radios = this.querySelectorAll(DisplaySelector.RADIO_BUTTONS);
|
||
|
|
||
|
if (api.scheme) {
|
||
|
this.changing = this.change.bind(this);
|
||
|
for (const radio of this.radios) radio.addEventListener('change', this.changing);
|
||
|
this.addDescent(api.scheme.SchemeEmission.SCHEME, this.apply.bind(this));
|
||
|
this.ascend(api.scheme.SchemeEmission.ASK);
|
||
|
} else {
|
||
|
this.querySelector(DisplaySelector.FIELDSET).setAttribute('disabled', '');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
get scheme () {
|
||
|
return this._scheme;
|
||
|
}
|
||
|
|
||
|
set scheme (value) {
|
||
|
if (this._scheme === value || !api.scheme) return;
|
||
|
switch (value) {
|
||
|
case api.scheme.SchemeValue.SYSTEM:
|
||
|
case api.scheme.SchemeValue.LIGHT:
|
||
|
case api.scheme.SchemeValue.DARK:
|
||
|
this._scheme = value;
|
||
|
for (const radio of this.radios) {
|
||
|
radio.checked = radio.value === value;
|
||
|
}
|
||
|
this.ascend(api.scheme.SchemeEmission.SCHEME, value);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
change () {
|
||
|
for (const radio of this.radios) {
|
||
|
if (radio.checked) {
|
||
|
this.scheme = radio.value;
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
apply (value) {
|
||
|
this.scheme = value;
|
||
|
}
|
||
|
|
||
|
dispose () {
|
||
|
for (const radio of this.radios) radio.removeEventListener('change', this.changing);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
api.display = {
|
||
|
Display: Display,
|
||
|
DisplaySelector: DisplaySelector
|
||
|
};
|
||
|
|
||
|
api.internals.register(api.display.DisplaySelector.DISPLAY, api.display.Display);
|
||
|
//# sourceMappingURL=display.module.js.map
|