UNPKG

bootstrap-italia

Version:

Bootstrap Italia è un tema Bootstrap 5 per la creazione di applicazioni web nel pieno rispetto delle linee guida di design per i siti internet e i servizi digitali della PA

89 lines (73 loc) 2.44 kB
/** * -------------------------------------------------------------------------- * Bootstrap Italia (https://italia.github.io/bootstrap-italia/) * Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS * Licensed under BSD-3-Clause license (https://github.com/italia/bootstrap-italia/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import BaseComponent from './base-component.js' import SelectorEngine from './dom/selector-engine' import EventHandler from './dom/event-handler' const NAME = 'list' const DATA_KEY = 'bs.list' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' const EVENT_CLICK = `click${EVENT_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const CLASS_NAME_ACTIVE = 'active' const SELECTOR_LIST = '[data-bs-list-checkbox]' //'.it-list' const SELECTOR_ITEM_CHECKBOX = 'input[type=checkbox]' class List extends BaseComponent { constructor(element) { super(element) this._init() } // Getters static get NAME() { return NAME } // Public toggleCheckbox(item) { const input = SelectorEngine.findOne('input', item) if (input) { if (input.checked) { input.checked = false item.classList.remove(CLASS_NAME_ACTIVE) } else { input.checked = true item.classList.add(CLASS_NAME_ACTIVE) } } } // Private _init() { this._initCheckbox() } _initCheckbox() { SelectorEngine.find(SELECTOR_ITEM_CHECKBOX, this._element).forEach((item) => { EventHandler.on(item.closest('a'), EVENT_CLICK, (evt) => { evt.preventDefault() this.toggleCheckbox(item.closest('a')) }) }) } } /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ if (typeof window !== 'undefined' && typeof document !== 'undefined') { SelectorEngine.find(SELECTOR_LIST).forEach((list) => { SelectorEngine.find(SELECTOR_ITEM_CHECKBOX, list).forEach((checkbox) => { EventHandler.one(checkbox.closest('a'), EVENT_CLICK_DATA_API, (evt) => { if (!List.getInstance(list)) { evt.preventDefault() const listObj = List.getOrCreateInstance(list) listObj.toggleCheckbox(evt.currentTarget) } }) }) }) } export default List