/** * Invoice Ninja (https://invoiceninja.com) * * @link https://github.com/invoiceninja/invoiceninja source repository * * @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com) * * @license https://opensource.org/licenses/AAL */ class ActionSelectors { constructor() { this.parentElement = document.querySelector('.form-check-parent'); this.parentForm = document.getElementById('bulkActions'); } watchCheckboxes(parentElement) { document .querySelectorAll('.child-hidden-input') .forEach((element) => element.remove()); document.querySelectorAll('.form-check-child').forEach((child) => { if (parentElement.checked) { child.checked = parentElement.checked; this.processChildItem( child, document.getElementById('bulkActions') ); } else { child.checked = false; document .querySelectorAll('.child-hidden-input') .forEach((element) => element.remove()); } }); } processChildItem(element, parent, options = {}) { if (options.hasOwnProperty('single')) { document .querySelectorAll('.child-hidden-input') .forEach((element) => element.remove()); } if (element.checked === false) { let inputs = document.querySelectorAll('input.child-hidden-input'); for (let i of inputs) { if (i.value == element.dataset.value) i.remove(); } return; } let _temp = document.createElement('INPUT'); _temp.setAttribute('name', 'invoices[]'); _temp.setAttribute('value', element.dataset.value); _temp.setAttribute('class', 'child-hidden-input'); _temp.hidden = true; parent.append(_temp); } handle() { this.parentElement.addEventListener('click', () => { this.watchCheckboxes(this.parentElement); }); for (let child of document.querySelectorAll('.form-check-child')) { child.addEventListener('click', () => { this.processChildItem(child, this.parentForm); }); } } } /** @handle **/ new ActionSelectors().handle();