* Generate toggle * @param {string} label block title * @param {string} value category/service * @param {import('../global').Category} sCurrentCategoryObject * @param {boolean} [isService] * @param {string} categoryName
(label, value, sCurrentCategoryObject, isService, categoryName)
| 499 | * @param {string} categoryName |
| 500 | */ |
| 501 | function createToggleLabel(label, value, sCurrentCategoryObject, isService, categoryName) { |
| 502 | const state = globalObj._state; |
| 503 | const dom = globalObj._dom; |
| 504 | |
| 505 | /** @type {HTMLLabelElement} */ const toggleLabel = createNode('label'); |
| 506 | /** @type {HTMLInputElement} */ const toggle = createNode('input'); |
| 507 | /** @type {HTMLSpanElement} */ const toggleIcon = createNode('span'); |
| 508 | /** @type {HTMLSpanElement} */ const toggleIconCircle = createNode('span'); |
| 509 | /** @type {HTMLSpanElement} */ const toggleLabelSpan = createNode('span'); |
| 510 | |
| 511 | // each will contain 2 pseudo-elements to generate 'tick' and 'x' icons |
| 512 | /** @type {HTMLSpanElement} */ const toggleOnIcon = createNode('span'); |
| 513 | /** @type {HTMLSpanElement} */ const toggleOffIcon = createNode('span'); |
| 514 | |
| 515 | toggleOnIcon.innerHTML = getSvgIcon(1, 3); |
| 516 | toggleOffIcon.innerHTML = getSvgIcon(0, 3); |
| 517 | |
| 518 | toggle.type = 'checkbox'; |
| 519 | |
| 520 | addClass(toggleLabel, 'section__toggle-wrapper'); |
| 521 | addClass(toggle, 'section__toggle'); |
| 522 | addClass(toggleOnIcon, 'toggle__icon-on'); |
| 523 | addClass(toggleOffIcon, 'toggle__icon-off'); |
| 524 | addClass(toggleIcon, 'toggle__icon'); |
| 525 | addClass(toggleIconCircle, 'toggle__icon-circle'); |
| 526 | addClass(toggleLabelSpan, 'toggle__label'); |
| 527 | |
| 528 | setAttribute(toggleIcon, ARIA_HIDDEN, 'true'); |
| 529 | |
| 530 | if (isService) { |
| 531 | addClass(toggleLabel, 'toggle-service'); |
| 532 | setAttribute(toggle, SCRIPT_TAG_SELECTOR, categoryName); |
| 533 | |
| 534 | // Save reference to toggles to avoid using document.querySelector later on |
| 535 | dom._serviceCheckboxInputs[categoryName][value] = toggle; |
| 536 | } else { |
| 537 | dom._categoryCheckboxInputs[value] = toggle; |
| 538 | } |
| 539 | |
| 540 | if (!isService) { |
| 541 | ((value)=> { |
| 542 | addEvent(toggle, CLICK_EVENT, () => { |
| 543 | const categoryServicesToggles = dom._serviceCheckboxInputs[value]; |
| 544 | const checked = toggle.checked; |
| 545 | state._enabledServices[value] = []; |
| 546 | |
| 547 | /** |
| 548 | * Enable/disable all services |
| 549 | */ |
| 550 | for (let serviceName in categoryServicesToggles) { |
| 551 | categoryServicesToggles[serviceName].checked = checked; |
| 552 | checked && state._enabledServices[value].push(serviceName); |
| 553 | } |
| 554 | }); |
| 555 | })(value); |
| 556 | } else { |
| 557 | ((categoryName) => { |
| 558 | addEvent(toggle, 'change', () => { |
no test coverage detected
searching dependent graphs…