]> BookStack Code Mirror - bookstack/blob - resources/js/components/permissions-table.js
Cleaned up old permission JS code
[bookstack] / resources / js / components / permissions-table.js
1
2 class PermissionsTable {
3
4     setup() {
5         this.container = this.$el;
6
7         // Handle toggle all event
8         for (const toggleAllElem of (this.$manyRefs.toggleAll || [])) {
9             toggleAllElem.addEventListener('click', this.toggleAllClick.bind(this));
10         }
11
12         // Handle toggle row event
13         for (const toggleRowElem of (this.$manyRefs.toggleRow || [])) {
14             toggleRowElem.addEventListener('click', this.toggleRowClick.bind(this));
15         }
16
17         // Handle toggle column event
18         for (const toggleColElem of (this.$manyRefs.toggleColumn || [])) {
19             toggleColElem.addEventListener('click', this.toggleColumnClick.bind(this));
20         }
21     }
22
23     toggleAllClick(event) {
24         event.preventDefault();
25         this.toggleAllInElement(this.container);
26     }
27
28     toggleRowClick(event) {
29         event.preventDefault();
30         this.toggleAllInElement(event.target.closest('tr'));
31     }
32
33     toggleColumnClick(event) {
34         event.preventDefault();
35
36         const tableCell = event.target.closest('th,td');
37         const colIndex = Array.from(tableCell.parentElement.children).indexOf(tableCell);
38         const tableRows = tableCell.closest('table').querySelectorAll('tr');
39         const inputsToToggle = [];
40
41         for (let row of tableRows) {
42             const targetCell = row.children[colIndex];
43             if (targetCell) {
44                 inputsToToggle.push(...targetCell.querySelectorAll('input[type=checkbox]'));
45             }
46         }
47         this.toggleAllInputs(inputsToToggle);
48     }
49
50     toggleAllInElement(domElem) {
51         const inputsToToggle = domElem.querySelectorAll('input[type=checkbox]');
52         this.toggleAllInputs(inputsToToggle);
53     }
54
55     toggleAllInputs(inputsToToggle) {
56         const currentState = inputsToToggle.length > 0 ? inputsToToggle[0].checked : false;
57         for (let checkbox of inputsToToggle) {
58             checkbox.checked = !currentState;
59             checkbox.dispatchEvent(new Event('change'));
60         }
61     }
62
63 }
64
65 export default PermissionsTable;