update window management
This commit is contained in:
		
							parent
							
								
									504d40ab03
								
							
						
					
					
						commit
						c784faecf3
					
				
					 1 changed files with 153 additions and 0 deletions
				
			
		|  | @ -45,7 +45,160 @@ class windowman { | ||||||
| 			}) | 			}) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		function storage() { | ||||||
|  | 			(async () => { | ||||||
|  | 				// Import the module.
 | ||||||
|  | 				const secretariat = await import(chrome.runtime.getURL("scripts/secretariat.js")); | ||||||
|  | 
 | ||||||
|  | 				let input_elements = document.querySelectorAll("[data-store]"); | ||||||
|  | 
 | ||||||
|  | 				input_elements.forEach((input_element) => { | ||||||
|  | 					// Gather data about the element.
 | ||||||
|  | 					// Get the corresponding storage data.
 | ||||||
|  | 					let data = {}; | ||||||
|  | 					data[`source`] = input_element.getAttribute(`data-store`); | ||||||
|  | 					data[`value`] = secretariat.read(data[`source`], -1); | ||||||
|  | 
 | ||||||
|  | 					data[`value`].then((value) => { | ||||||
|  | 						switch (input_element.getAttribute(`type`).toLowerCase()) { | ||||||
|  | 							case `checkbox`: | ||||||
|  | 								input_element.checked = value; | ||||||
|  | 								break; | ||||||
|  | 							case `progress`: | ||||||
|  | 							case `range`: | ||||||
|  | 								// Ensure that it is a positive floating-point number.
 | ||||||
|  | 								value = (!value) ? 0 : Math.abs(parseFloat(value)); | ||||||
|  | 								if (value > 100) {value = value / 100}; | ||||||
|  | 
 | ||||||
|  | 								// Set the attribute of the progress bar.
 | ||||||
|  | 								input_element.setAttribute(`value`, value); | ||||||
|  | 								input_element.setAttribute(`max`, 1); | ||||||
|  | 								break; | ||||||
|  | 							default: | ||||||
|  | 								input_element.value = value; | ||||||
|  | 								break; | ||||||
|  | 				    } | ||||||
|  | 				  }); | ||||||
|  | 
 | ||||||
|  | 				}); | ||||||
|  | 			})(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		text(); | 		text(); | ||||||
|  | 		storage(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* Add click events. */ | ||||||
|  | 	static events() { | ||||||
|  | 
 | ||||||
|  | 		/* Add events related to storage. */ | ||||||
|  | 		function storage() { | ||||||
|  | 			(async () => { | ||||||
|  | 				// Import the module.
 | ||||||
|  | 				const secretariat = await import(chrome.runtime.getURL("scripts/secretariat.js")); | ||||||
|  | 
 | ||||||
|  | 				let input_elements = document.querySelectorAll("[data-store]"); | ||||||
|  | 
 | ||||||
|  | 				input_elements.forEach((input_element) => { | ||||||
|  | 					// Gather data about the element.
 | ||||||
|  | 					// Get the corresponding storage data.
 | ||||||
|  | 
 | ||||||
|  | 					let element = {}; | ||||||
|  | 					element[`type`] = input_element.getAttribute(`type`).toLowerCase(); | ||||||
|  | 					element[`event`] = function() {}; | ||||||
|  | 
 | ||||||
|  | 					switch (element[`type`]) { | ||||||
|  | 						case `checkbox`: | ||||||
|  | 							element[`event`] = function() { | ||||||
|  | 								let UI_item = {}; | ||||||
|  | 								UI_item[`source`] = this.getAttribute(`data-store`); | ||||||
|  | 								UI_item[`value`] = this.checked; | ||||||
|  | 								secretariat.write(UI_item[`source`], UI_item[`value`]); | ||||||
|  | 							}; | ||||||
|  | 							break; | ||||||
|  | 						case `range`: | ||||||
|  | 							/*// Ensure that it is a positive floating-point number. | ||||||
|  | 							value = (!value) ? 0 : Math.abs(parseFloat(value)); | ||||||
|  | 							if (value > 100) {value = value / 100}; | ||||||
|  | 
 | ||||||
|  | 							// Set the attribute of the progress bar.
 | ||||||
|  | 							input_element.setAttribute(`value`, value); | ||||||
|  | 							input_element.setAttribute(`max`, 1);*/ | ||||||
|  | 						default: | ||||||
|  | 							element[`event`] = function() { | ||||||
|  | 								secretariat.write(data[`source`][`root`], data[`source`][`target`], this.value); | ||||||
|  | 							}; | ||||||
|  | 							break; | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
|  | 					input_element.addEventListener('change', element[`event`]); | ||||||
|  | 				}); | ||||||
|  | 			})(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		/* Make it feel more like a native window. */ | ||||||
|  | 		function functionality() { | ||||||
|  | 			/* Adjust the interface based on events. */ | ||||||
|  | 			function changeUI() { | ||||||
|  | 				function tabs() { | ||||||
|  | 					let menus = (document.querySelectorAll("menu[role=tablist]")) | ||||||
|  | 
 | ||||||
|  | 					if (menus) { | ||||||
|  | 						menus.forEach((menu) => { | ||||||
|  | 							let buttons = menu.querySelectorAll("button, a"); | ||||||
|  | 
 | ||||||
|  | 							if (buttons) { | ||||||
|  | 								buttons.forEach((button) => { | ||||||
|  | 									let event = function() { | ||||||
|  | 										// Prevent selection.
 | ||||||
|  | 										let MENU = this.parentElement; | ||||||
|  | 										let BUTTONS = MENU.querySelectorAll("button, a"); | ||||||
|  | 
 | ||||||
|  | 										BUTTONS.forEach((BUTTON) => { | ||||||
|  | 											BUTTON.setAttribute(`aria-selected`, String(BUTTON.getAttribute(`for`) == this.getAttribute(`for`))); | ||||||
|  | 										}); | ||||||
|  | 
 | ||||||
|  | 										let CONTAINER = document.getElementById(MENU.getAttribute(`for`)); | ||||||
|  | 										let SECTIONS = CONTAINER.querySelectorAll(`#${CONTAINER.id} > section`); | ||||||
|  | 
 | ||||||
|  | 										SECTIONS.forEach((SECTION) => { | ||||||
|  | 											// SECTION.setAttribute(`hidden`, true);
 | ||||||
|  | 
 | ||||||
|  | 											if (!(this.getAttribute(`for`)).includes(SECTION.id)) { | ||||||
|  | 												SECTION.setAttribute(`hidden`, ((this.getAttribute(`for`)).includes(SECTION.id))); | ||||||
|  | 											} else { | ||||||
|  | 												SECTION.removeAttribute(`hidden`); | ||||||
|  | 											} | ||||||
|  | 										}); | ||||||
|  | 
 | ||||||
|  | 										// Save.
 | ||||||
|  | 										(async () => { | ||||||
|  | 											const secretariat = await import(chrome.runtime.getURL("scripts/secretariat.js")); | ||||||
|  | 
 | ||||||
|  | 											// Write the data.
 | ||||||
|  | 											secretariat.write([`view`, window.location.href], this.getAttribute(`for`), 1); | ||||||
|  | 										})(); | ||||||
|  | 									}; | ||||||
|  | 
 | ||||||
|  | 									button.addEventListener('click', event); | ||||||
|  | 								}) | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				tabs(); | ||||||
|  | 			}; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 			document.addEventListener('contextmenu', event => event.preventDefault()); | ||||||
|  | 
 | ||||||
|  | 			changeUI(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		storage(); | ||||||
|  | 		functionality(); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue