1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- document.addEventListener('click', (event) => {
- const wrapper = event.target.closest('.checkboxes.indeterminate');
- if (wrapper) {
- event.preventDefault();
- const checkbox = wrapper.querySelector('input[type="checkbox"]:not([disabled])');
- const checkStatus = wrapper.dataset._checkStatus;
- wrapper.classList.remove('status-checked', 'status-unchecked', 'status-indeterminate');
- switch (checkStatus) {
- // checked, going indeterminate
- case '1':
- wrapper.dataset._checkStatus = '2';
- checkbox.indeterminate = true;
- checkbox.checked = false;
- checkbox.value = 0;
- wrapper.classList.add('status-indeterminate');
- break;
- // indeterminate, going unchecked
- case '2':
- wrapper.dataset._checkStatus = '0';
- checkbox.indeterminate = false;
- checkbox.checked = false;
- checkbox.value = '';
- wrapper.classList.add('status-unchecked');
- break;
- // unchecked, going checked
- case '0':
- default:
- wrapper.dataset._checkStatus = '1';
- checkbox.indeterminate = false;
- checkbox.checked = true;
- checkbox.value = 1;
- wrapper.classList.add('status-checked');
- break;
- }
- const input = new CustomEvent('input', { detail: { target: checkbox }});
- document.dispatchEvent(input);
- }
- });
- (document.querySelectorAll('input[type="checkbox"][indeterminate="true"]') || []).forEach((input) => { input.indeterminate = true; });
|