mirror of
				https://github.com/BookStackApp/BookStack.git
				synced 2025-10-31 03:50:27 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
 | |
| class PermissionsTable {
 | |
| 
 | |
|     constructor(elem) {
 | |
|         this.container = elem;
 | |
| 
 | |
|         // Handle toggle all event
 | |
|         const toggleAll = elem.querySelector('[permissions-table-toggle-all]');
 | |
|         toggleAll.addEventListener('click', this.toggleAllClick.bind(this));
 | |
| 
 | |
|         // Handle toggle row event
 | |
|         const toggleRowElems = elem.querySelectorAll('[permissions-table-toggle-all-in-row]');
 | |
|         for (let toggleRowElem of toggleRowElems) {
 | |
|             toggleRowElem.addEventListener('click', this.toggleRowClick.bind(this));
 | |
|         }
 | |
| 
 | |
|         // Handle toggle column event
 | |
|         const toggleColumnElems = elem.querySelectorAll('[permissions-table-toggle-all-in-column]');
 | |
|         for (let toggleColElem of toggleColumnElems) {
 | |
|             toggleColElem.addEventListener('click', this.toggleColumnClick.bind(this));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     toggleAllClick(event) {
 | |
|         event.preventDefault();
 | |
|         this.toggleAllInElement(this.container);
 | |
|     }
 | |
| 
 | |
|     toggleRowClick(event) {
 | |
|         event.preventDefault();
 | |
|         this.toggleAllInElement(event.target.closest('tr'));
 | |
|     }
 | |
| 
 | |
|     toggleColumnClick(event) {
 | |
|         event.preventDefault();
 | |
| 
 | |
|         const tableCell = event.target.closest('th,td');
 | |
|         const colIndex = Array.from(tableCell.parentElement.children).indexOf(tableCell);
 | |
|         const tableRows = tableCell.closest('table').querySelectorAll('tr');
 | |
|         const inputsToToggle = [];
 | |
| 
 | |
|         for (let row of tableRows) {
 | |
|             const targetCell = row.children[colIndex];
 | |
|             if (targetCell) {
 | |
|                 inputsToToggle.push(...targetCell.querySelectorAll('input[type=checkbox]'));
 | |
|             }
 | |
|         }
 | |
|         this.toggleAllInputs(inputsToToggle);
 | |
|     }
 | |
| 
 | |
|     toggleAllInElement(domElem) {
 | |
|         const inputsToToggle = domElem.querySelectorAll('input[type=checkbox]');
 | |
|         this.toggleAllInputs(inputsToToggle);
 | |
|     }
 | |
| 
 | |
|     toggleAllInputs(inputsToToggle) {
 | |
|         const currentState = inputsToToggle.length > 0 ? inputsToToggle[0].checked : false;
 | |
|         for (let checkbox of inputsToToggle) {
 | |
|             checkbox.checked = !currentState;
 | |
|             checkbox.dispatchEvent(new Event('change'));
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| export default PermissionsTable; |