]> BookStack Code Mirror - bookstack/blob - resources/assets/js/components/permissions-table.js
96d95bb3d2a8e9421d695ae06d7386759e8a615b
[bookstack] / resources / assets / js / components / permissions-table.js
1
2 class PermissionsTable {
3
4     constructor(elem) {
5         this.container = elem;
6
7         // Handle toggle all event
8         const toggleAll = elem.querySelector('[permissions-table-toggle-all]');
9         toggleAll.addEventListener('click', this.toggleAllClick.bind(this));
10
11         // Handle toggle row event
12         const toggleRowElems = elem.querySelectorAll('[permissions-table-toggle-all-in-row]');
13         for (let toggleRowElem of toggleRowElems) {
14             toggleRowElem.addEventListener('click', this.toggleRowClick.bind(this));
15         }
16     }
17
18     toggleAllClick(event) {
19         event.preventDefault();
20         this.toggleAllInElement(this.container);
21     }
22
23     toggleRowClick(event) {
24         event.preventDefault();
25         this.toggleAllInElement(event.target.closest('tr'));
26     }
27
28     toggleAllInElement(domElem) {
29         const inputsToSelect = domElem.querySelectorAll('input[type=checkbox]');
30         const currentState = inputsToSelect.length > 0 ? inputsToSelect[0].checked : false;
31         for (let checkbox of inputsToSelect) {
32             checkbox.checked = !currentState;
33             checkbox.dispatchEvent(new Event('change'));
34         }
35     }
36
37 }
38
39 export default PermissionsTable;