crash the window when the building is wrong
This commit is contained in:
		
							parent
							
								
									42d2278e6c
								
							
						
					
					
						commit
						493abd746a
					
				
					 1 changed files with 299 additions and 273 deletions
				
			
		|  | @ -3,322 +3,348 @@ Window and window content management */ | ||||||
| 
 | 
 | ||||||
| import texts from "./read.js"; | import texts from "./read.js"; | ||||||
| 
 | 
 | ||||||
|  | // MAKE SURE TO TURN THIS OFF DURING BUILD.
 | ||||||
|  | let DEBUG = false; | ||||||
|  | 
 | ||||||
| class windowman { | class windowman { | ||||||
|   static new(URL, height, width) { | 	static new(URL, height, width) { | ||||||
|     this.window = chrome.windows.create({ | 		this.window = chrome.windows.create({ | ||||||
|       url: chrome.runtime.getURL(URL), | 			url: chrome.runtime.getURL(URL), | ||||||
|       type: "popup", | 			type: "popup", | ||||||
|       width: width ? parseInt(width) : 600, | 			width: width ? parseInt(width) : 600, | ||||||
|       height: height ? parseInt(height) : 600, | 			height: height ? parseInt(height) : 600, | ||||||
|     }); | 		}); | ||||||
|   } | 	} | ||||||
| 
 | 
 | ||||||
|   // Prepare the window with its metadata.
 | 	// Prepare the window with its metadata.
 | ||||||
|   constructor() { | 	constructor() { | ||||||
|     function headers() { | 		function headers() { | ||||||
|       let UI = { | 		let LOAD_STATE = true; | ||||||
|         library: [ | 			let UI = { | ||||||
|           chrome.runtime.getURL( | 				"CSS": [ | ||||||
|             "gui/styles/external/mdi/materialdesignicons.min.css", | 					chrome.runtime.getURL( | ||||||
|           ), | 						"gui/styles/external/fonts/materialdesignicons.min.css", | ||||||
|           chrome.runtime.getURL( | 					), | ||||||
|             "gui/styles/external/materialize/css/materialize.css", | 					chrome.runtime.getURL( | ||||||
|           ), | 						"gui/styles/external/materialize/css/materialize.css", | ||||||
|           chrome.runtime.getURL("gui/styles/ui.css"), | 					), | ||||||
|         ], | 					chrome.runtime.getURL("gui/styles/ui.css"), | ||||||
|       }; | 				], | ||||||
|  | 			}; | ||||||
| 
 | 
 | ||||||
|       UI.library.forEach((source) => { |  | ||||||
|         let metadata_element = document.createElement(`link`); |  | ||||||
|         metadata_element.setAttribute(`rel`, `stylesheet`); |  | ||||||
|         metadata_element.setAttribute(`type`, `text/css`); |  | ||||||
|         metadata_element.setAttribute(`href`, source); |  | ||||||
|         document.querySelector(`head`).appendChild(metadata_element); |  | ||||||
|       }); |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     // Get the window.
 | 			for (let index = 0; index < UI[`CSS`].length; index++) { | ||||||
|     this[`metadata`] = chrome.windows.getCurrent(); | 				const source = UI.CSS[index]; | ||||||
|  | 				 | ||||||
|  | 				(async () => { | ||||||
|  | 					const net = await import(chrome.runtime.getURL(`/scripts/net.js`)); | ||||||
|  | 			 | ||||||
|  | 					let resource = false; | ||||||
|  | 					try { | ||||||
|  | 						resource = await net.download(source, `text`, true); | ||||||
|  | 					} catch(err) {}; | ||||||
|  | 	 | ||||||
|  | 					if (resource) { | ||||||
|  | 						let metadata_element = document.createElement(`link`); | ||||||
|  | 						metadata_element.setAttribute(`rel`, `stylesheet`); | ||||||
|  | 						metadata_element.setAttribute(`type`, `text/css`); | ||||||
|  | 						metadata_element.setAttribute(`href`, source); | ||||||
|  | 						document.querySelector(`head`).appendChild(metadata_element); | ||||||
|  | 					} else { | ||||||
|  | 						const alerts = (await import(chrome.runtime.getURL(`/gui/scripts/alerts.js`))).default; | ||||||
|  | 						const reader = (await import(chrome.runtime.getURL(`/gui/scripts/read.js`))).default; | ||||||
|  | 	 | ||||||
|  | 						alerts.error(-1, reader.localized(`error_msg_fileNotFound`), true, [source]); | ||||||
| 
 | 
 | ||||||
|     /* | 						// Stop loading the page when an error has occured; it's not going to work! 
 | ||||||
|     window_metadata[`id`] = window.id; | 						if (!DEBUG) {window.close()}; | ||||||
|     window_metadata[`focused`] = window.focused; | 					} | ||||||
|     window_metadata[`state`] = window.state; | 				})(); | ||||||
|     window_metadata[`type`] = window.type; | 			} | ||||||
|     window_metadata[`incognito`] = window.incognito; | 		} | ||||||
|     window_metadata[`alwaysOnTop`] = window.alwaysOnTop; |  | ||||||
|     window_metadata[`sessionId`] = window.sessionId; |  | ||||||
|     window_metadata[`tabs`] = window.tabs;*/ |  | ||||||
| 
 | 
 | ||||||
|     /* Fill in data and events.  */ | 		// Get the window.
 | ||||||
|     function appearance() { | 		this[`metadata`] = chrome.windows.getCurrent(); | ||||||
|       function icons() { |  | ||||||
|         let target_elements = document.querySelectorAll(`[data-icon]`); |  | ||||||
| 
 | 
 | ||||||
|         target_elements.forEach((element) => { | 		/* | ||||||
|           // Get the content before removing it.
 | 		window_metadata[`id`] = window.id; | ||||||
|           let element_data = {}; | 		window_metadata[`focused`] = window.focused; | ||||||
|  | 		window_metadata[`state`] = window.state; | ||||||
|  | 		window_metadata[`type`] = window.type; | ||||||
|  | 		window_metadata[`incognito`] = window.incognito; | ||||||
|  | 		window_metadata[`alwaysOnTop`] = window.alwaysOnTop; | ||||||
|  | 		window_metadata[`sessionId`] = window.sessionId; | ||||||
|  | 		window_metadata[`tabs`] = window.tabs;*/ | ||||||
| 
 | 
 | ||||||
|           // Swap the placement of the existing content.
 | 		/* Fill in data and events.  */ | ||||||
|           function swap() { | 		function appearance() { | ||||||
|             element_data[`content`] = element.innerHTML; | 			function icons() { | ||||||
|             element.innerHTML = ``; | 				let target_elements = document.querySelectorAll(`[data-icon]`); | ||||||
| 
 | 
 | ||||||
|             let element_text = document.createElement(`span`); | 				target_elements.forEach((element) => { | ||||||
|             element_text.innerHTML = element_data[`content`]; | 					// Get the content before removing it.
 | ||||||
|  | 					let element_data = {}; | ||||||
| 
 | 
 | ||||||
|             element.appendChild(element_text); | 					// Swap the placement of the existing content.
 | ||||||
|           } | 					function swap() { | ||||||
|  | 						element_data[`content`] = element.innerHTML; | ||||||
|  | 						element.innerHTML = ``; | ||||||
| 
 | 
 | ||||||
|           // Add the icon.
 | 						let element_text = document.createElement(`span`); | ||||||
|           function iconify() { | 						element_text.innerHTML = element_data[`content`]; | ||||||
|             // Get the icon.
 |  | ||||||
|             element_data[`icon`] = element.getAttribute(`data-icon`); |  | ||||||
| 
 | 
 | ||||||
|             // Get the icon.
 | 						element.appendChild(element_text); | ||||||
|             let icon_element = document.createElement(`i`); | 					} | ||||||
|             icon_element.className = `mdi mdi-`.concat(element_data[`icon`]); |  | ||||||
|             element.prepend(icon_element); |  | ||||||
|           } |  | ||||||
| 
 | 
 | ||||||
|           swap(); | 					// Add the icon.
 | ||||||
|           iconify(); | 					function iconify() { | ||||||
|         }); | 						// Get the icon.
 | ||||||
|       } | 						element_data[`icon`] = element.getAttribute(`data-icon`); | ||||||
| 
 | 
 | ||||||
|       function text() { | 						// Get the icon.
 | ||||||
|         let text_elements = {}; | 						let icon_element = document.createElement(`i`); | ||||||
|         text_elements[`content`] = document.querySelectorAll("[for]"); | 						icon_element.className = `mdi mdi-`.concat(element_data[`icon`]); | ||||||
|         text_elements[`alt`] = document.querySelectorAll("[alt-for]"); | 						element.prepend(icon_element); | ||||||
|         text_elements[`title`] = document.querySelectorAll("[title-for]"); | 					} | ||||||
| 
 | 
 | ||||||
|         text_elements[`content`].forEach((text_element) => { | 					swap(); | ||||||
|           let text_inserted = texts.localized( | 					iconify(); | ||||||
|             text_element.getAttribute(`for`), | 				}); | ||||||
|             false, | 			} | ||||||
|             text_element.hasAttribute(`for-parameter`) |  | ||||||
|               ? text_element.getAttribute(`for-parameter`).split(",") |  | ||||||
|               : null, |  | ||||||
|           ); |  | ||||||
|           if (!text_inserted) { |  | ||||||
|             text_inserted = texts.localized( |  | ||||||
|               `term_`.concat(text_element.getAttribute(`for`)), |  | ||||||
|             ); |  | ||||||
|           } |  | ||||||
| 
 | 
 | ||||||
|           if (text_element.tagName.toLowerCase().includes(`input`)) { | 			function text() { | ||||||
|             text_element.setAttribute(`placholder`, text_inserted); | 				let text_elements = {}; | ||||||
|           } else { | 				text_elements[`content`] = document.querySelectorAll("[for]"); | ||||||
|             text_element.innerText = text_inserted; | 				text_elements[`alt`] = document.querySelectorAll("[alt-for]"); | ||||||
|           } | 				text_elements[`title`] = document.querySelectorAll("[title-for]"); | ||||||
|         }); |  | ||||||
| 
 | 
 | ||||||
|         delete text_elements[`content`]; | 				text_elements[`content`].forEach((text_element) => { | ||||||
|         Object.keys(text_elements).forEach((key) => { | 					let text_inserted = texts.localized( | ||||||
|           if (text_elements[key]) { | 						text_element.getAttribute(`for`), | ||||||
|             text_elements[key].forEach((text_element) => { | 						false, | ||||||
|               let text_inserted = texts.localized( | 						text_element.hasAttribute(`for-parameter`) | ||||||
|                 text_element.getAttribute(key.concat(`-for`)), | 							? text_element.getAttribute(`for-parameter`).split(",") | ||||||
|                 false, | 							: null, | ||||||
|                 text_element.hasAttribute(key.concat(`for-parameter`)) | 					); | ||||||
|                   ? text_element | 					if (!text_inserted) { | ||||||
|                       .getAttribute(key.concat(`for-parameter`)) | 						text_inserted = texts.localized( | ||||||
|                       .split(",") | 							`term_`.concat(text_element.getAttribute(`for`)), | ||||||
|                   : null, | 						); | ||||||
|               ); | 					} | ||||||
|               if (!text_inserted) { |  | ||||||
|                 text_inserted = texts.localized( |  | ||||||
|                   `term_`.concat(text_element.getAttribute(key.concat(`-for`))), |  | ||||||
|                 ); |  | ||||||
|               } |  | ||||||
| 
 | 
 | ||||||
|               text_element.setAttribute(key, text_inserted); | 					if (text_element.tagName.toLowerCase().includes(`input`)) { | ||||||
|             }); | 						text_element.setAttribute(`placholder`, text_inserted); | ||||||
|           } | 					} else { | ||||||
|         }); | 						text_element.innerText = text_inserted; | ||||||
|       } | 					} | ||||||
|  | 				}); | ||||||
| 
 | 
 | ||||||
|       async function storage() { | 				delete text_elements[`content`]; | ||||||
|         // Import the module.
 | 				Object.keys(text_elements).forEach((key) => { | ||||||
|         const secretariat = await import( | 					if (text_elements[key]) { | ||||||
|           chrome.runtime.getURL("scripts/secretariat.js") | 						text_elements[key].forEach((text_element) => { | ||||||
|         ); | 							let text_inserted = texts.localized( | ||||||
|  | 								text_element.getAttribute(key.concat(`-for`)), | ||||||
|  | 								false, | ||||||
|  | 								text_element.hasAttribute(key.concat(`for-parameter`)) | ||||||
|  | 									? text_element | ||||||
|  | 											.getAttribute(key.concat(`for-parameter`)) | ||||||
|  | 											.split(",") | ||||||
|  | 									: null, | ||||||
|  | 							); | ||||||
|  | 							if (!text_inserted) { | ||||||
|  | 								text_inserted = texts.localized( | ||||||
|  | 									`term_`.concat(text_element.getAttribute(key.concat(`-for`))), | ||||||
|  | 								); | ||||||
|  | 							} | ||||||
| 
 | 
 | ||||||
|         let input_elements = document.querySelectorAll("[data-store]"); | 							text_element.setAttribute(key, text_inserted); | ||||||
|  | 						}); | ||||||
|  | 					} | ||||||
|  | 				}); | ||||||
|  | 			} | ||||||
| 
 | 
 | ||||||
|         input_elements.forEach((input_element) => { | 			async function storage() { | ||||||
|           // Gather data about the element.
 | 				// Import the module.
 | ||||||
|           // Get the corresponding storage data.
 | 				const secretariat = await import( | ||||||
|           let data = {}; | 					chrome.runtime.getURL("scripts/secretariat.js") | ||||||
|           data[`source`] = input_element.getAttribute(`data-store`); | 				); | ||||||
|           data[`value`] = secretariat.read(data[`source`], -1); |  | ||||||
| 
 | 
 | ||||||
|           data[`value`].then((value) => { | 				let input_elements = document.querySelectorAll("[data-store]"); | ||||||
|             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_elements.forEach((input_element) => { | ||||||
|                 input_element.setAttribute(`value`, value); | 					// Gather data about the element.
 | ||||||
|                 input_element.setAttribute(`max`, 1); | 					// Get the corresponding storage data.
 | ||||||
|                 break; | 					let data = {}; | ||||||
|               default: | 					data[`source`] = input_element.getAttribute(`data-store`); | ||||||
|                 input_element.value = value ? value : ``; | 					data[`value`] = secretariat.read(data[`source`], -1); | ||||||
|                 break; |  | ||||||
|             } |  | ||||||
|           }); |  | ||||||
|         }); |  | ||||||
|       } |  | ||||||
| 
 | 
 | ||||||
|       text(); | 					data[`value`].then((value) => { | ||||||
|       icons(); | 						switch (input_element.getAttribute(`type`).toLowerCase()) { | ||||||
|       storage(); | 							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; | ||||||
|  | 								} | ||||||
| 
 | 
 | ||||||
|     // Adds events to the window.
 | 								// Set the attribute of the progress bar.
 | ||||||
|     function events() { | 								input_element.setAttribute(`value`, value); | ||||||
|       /* Add events related to storage. */ | 								input_element.setAttribute(`max`, 1); | ||||||
|       async function storage() { | 								break; | ||||||
|         // Import the module.
 | 							default: | ||||||
|         const secretariat = await import( | 								input_element.value = value ? value : ``; | ||||||
|           chrome.runtime.getURL("scripts/secretariat.js") | 								break; | ||||||
|         ); | 						} | ||||||
|  | 					}); | ||||||
|  | 				}); | ||||||
|  | 			} | ||||||
| 
 | 
 | ||||||
|         let input_elements = document.querySelectorAll("[data-store]"); | 			text(); | ||||||
|  | 			icons(); | ||||||
|  | 			storage(); | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
|         input_elements.forEach((input_element) => { | 		// Adds events to the window.
 | ||||||
|           // Gather data about the element.
 | 		function events() { | ||||||
|           // Get the corresponding storage data.
 | 			/* Add events related to storage. */ | ||||||
|  | 			async function storage() { | ||||||
|  | 				// Import the module.
 | ||||||
|  | 				const secretariat = await import( | ||||||
|  | 					chrome.runtime.getURL("scripts/secretariat.js") | ||||||
|  | 				); | ||||||
| 
 | 
 | ||||||
|           let element = {}; | 				let input_elements = document.querySelectorAll("[data-store]"); | ||||||
|           element[`type`] = input_element.getAttribute(`type`).toLowerCase(); |  | ||||||
|           element[`event`] = function () {}; |  | ||||||
| 
 | 
 | ||||||
|           switch (element[`type`]) { | 				input_elements.forEach((input_element) => { | ||||||
|             case `checkbox`: | 					// Gather data about the element.
 | ||||||
|               element[`event`] = function () { | 					// Get the corresponding storage data.
 | ||||||
|                 let UI_item = {}; |  | ||||||
|                 UI_item[`source`] = this.getAttribute(`data-store`); |  | ||||||
|                 UI_item[`value`] = this.checked; |  | ||||||
|                 secretariat.write(UI_item[`source`], UI_item[`value`]); |  | ||||||
|               }; |  | ||||||
|               break; |  | ||||||
|             default: |  | ||||||
|               element[`event`] = function () { |  | ||||||
|                 let UI_item = {}; |  | ||||||
|                 UI_item[`source`] = this.getAttribute(`data-store`); |  | ||||||
|                 UI_item[`value`] = element[`type`].includes(`num`) |  | ||||||
|                   ? parseFloat(this.value) % 1 != 0 |  | ||||||
|                     ? parseFloat(this.value) |  | ||||||
|                     : parseInt(this.value) |  | ||||||
|                   : this.value; |  | ||||||
|                 secretariat.write(UI_item[`source`], UI_item[`value`]); |  | ||||||
|               }; |  | ||||||
|               break; |  | ||||||
|           } |  | ||||||
| 
 | 
 | ||||||
|           input_element.addEventListener("change", element[`event`]); | 					let element = {}; | ||||||
|         }); | 					element[`type`] = input_element.getAttribute(`type`).toLowerCase(); | ||||||
|       } | 					element[`event`] = function () {}; | ||||||
| 
 | 
 | ||||||
|       /* Map buttons to their corresponding action buttons. */ | 					switch (element[`type`]) { | ||||||
|       function actions() { | 						case `checkbox`: | ||||||
|         function links() { | 							element[`event`] = function () { | ||||||
|           let buttons = document.querySelectorAll("button[href]"); | 								let UI_item = {}; | ||||||
|  | 								UI_item[`source`] = this.getAttribute(`data-store`); | ||||||
|  | 								UI_item[`value`] = this.checked; | ||||||
|  | 								secretariat.write(UI_item[`source`], UI_item[`value`]); | ||||||
|  | 							}; | ||||||
|  | 							break; | ||||||
|  | 						default: | ||||||
|  | 							element[`event`] = function () { | ||||||
|  | 								let UI_item = {}; | ||||||
|  | 								UI_item[`source`] = this.getAttribute(`data-store`); | ||||||
|  | 								UI_item[`value`] = element[`type`].includes(`num`) | ||||||
|  | 									? parseFloat(this.value) % 1 != 0 | ||||||
|  | 										? parseFloat(this.value) | ||||||
|  | 										: parseInt(this.value) | ||||||
|  | 									: this.value; | ||||||
|  | 								secretariat.write(UI_item[`source`], UI_item[`value`]); | ||||||
|  | 							}; | ||||||
|  | 							break; | ||||||
|  | 					} | ||||||
| 
 | 
 | ||||||
|           if (buttons) { | 					input_element.addEventListener("change", element[`event`]); | ||||||
|             buttons.forEach((button) => { | 				}); | ||||||
|               let event = function () { | 			} | ||||||
|                 // Get the data from the button.
 |  | ||||||
|                 let target = {}; |  | ||||||
|                 target[`source`] = this.getAttribute(`href`); |  | ||||||
| 
 | 
 | ||||||
|                 // Get the correct path.
 | 			/* Map buttons to their corresponding action buttons. */ | ||||||
|                 target[`path`] = ( | 			function actions() { | ||||||
|                   !target[`source`].includes(`://`) | 				function links() { | ||||||
|                     ? window.location.pathname | 					let buttons = document.querySelectorAll("button[href]"); | ||||||
|                         .split(`/`) |  | ||||||
|                         .slice(0, -1) |  | ||||||
|                         .join(`/`) |  | ||||||
|                         .concat(`/`) |  | ||||||
|                     : `` |  | ||||||
|                 ).concat(target[`source`]); |  | ||||||
| 
 | 
 | ||||||
|                 windowman.new( | 					if (buttons) { | ||||||
|                   target[`path`], | 						buttons.forEach((button) => { | ||||||
|                   this.getAttribute(`tab-height`) | 							let event = function () { | ||||||
|                     ? this.getAttribute(`tab-height`) | 								// Get the data from the button.
 | ||||||
|                     : null, | 								let target = {}; | ||||||
|                   this.getAttribute(`tab-width`) | 								target[`source`] = this.getAttribute(`href`); | ||||||
|                     ? this.getAttribute(`tab-width`) |  | ||||||
|                     : null, |  | ||||||
|                 ); |  | ||||||
|               }; |  | ||||||
|               button.addEventListener("click", event); |  | ||||||
|             }); |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         links(); | 								// Get the correct path.
 | ||||||
|       } | 								target[`path`] = ( | ||||||
|  | 									!target[`source`].includes(`://`) | ||||||
|  | 										? window.location.pathname | ||||||
|  | 												.split(`/`) | ||||||
|  | 												.slice(0, -1) | ||||||
|  | 												.join(`/`) | ||||||
|  | 												.concat(`/`) | ||||||
|  | 										: `` | ||||||
|  | 								).concat(target[`source`]); | ||||||
| 
 | 
 | ||||||
|       /* | 								windowman.new( | ||||||
|       Update the interface based on the storage data changes. | 									target[`path`], | ||||||
|       */ | 									this.getAttribute(`tab-height`) | ||||||
|       async function updates() { | 										? this.getAttribute(`tab-height`) | ||||||
|         // Import the module.
 | 										: null, | ||||||
|         const secretariat = await import( | 									this.getAttribute(`tab-width`) | ||||||
|           chrome.runtime.getURL("scripts/secretariat.js") | 										? this.getAttribute(`tab-width`) | ||||||
|         ); | 										: null, | ||||||
|  | 								); | ||||||
|  | 							}; | ||||||
|  | 							button.addEventListener("click", event); | ||||||
|  | 						}); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
| 
 | 
 | ||||||
|         // Get the storage data.
 | 				links(); | ||||||
|         let storage_data = await secretariat.read(); | 			} | ||||||
| 
 | 
 | ||||||
|         async function update_interface() { | 			/* | ||||||
|           let input_elements = document.querySelectorAll("[data-enable]"); | 			Update the interface based on the storage data changes. | ||||||
|  | 			*/ | ||||||
|  | 			async function updates() { | ||||||
|  | 				// Import the module.
 | ||||||
|  | 				const secretariat = await import( | ||||||
|  | 					chrome.runtime.getURL("scripts/secretariat.js") | ||||||
|  | 				); | ||||||
| 
 | 
 | ||||||
|           if (input_elements) { | 				// Get the storage data.
 | ||||||
|             input_elements.forEach((input_element) => { | 				let storage_data = await secretariat.read(); | ||||||
|               if (input_element.getAttribute("data-enable")) { |  | ||||||
|                 (async () => { |  | ||||||
|                   input_element.disabled = |  | ||||||
|                     (await secretariat.read( |  | ||||||
|                       input_element.getAttribute("data-enable"), |  | ||||||
|                     )) == null || |  | ||||||
|                     (await secretariat.read( |  | ||||||
|                       input_element.getAttribute("data-enable"), |  | ||||||
|                     )); |  | ||||||
|                 })(); |  | ||||||
|               } |  | ||||||
|             }); |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         // Update the input elements.
 | 				async function update_interface() { | ||||||
|         secretariat.observe((what) => { | 					let input_elements = document.querySelectorAll("[data-enable]"); | ||||||
|           update_interface(); |  | ||||||
|         }); |  | ||||||
| 
 | 
 | ||||||
|         update_interface(); | 					if (input_elements) { | ||||||
|       } | 						input_elements.forEach((input_element) => { | ||||||
|  | 							if (input_element.getAttribute("data-enable")) { | ||||||
|  | 								(async () => { | ||||||
|  | 									input_element.disabled = | ||||||
|  | 										(await secretariat.read( | ||||||
|  | 											input_element.getAttribute("data-enable"), | ||||||
|  | 										)) == null || | ||||||
|  | 										(await secretariat.read( | ||||||
|  | 											input_element.getAttribute("data-enable"), | ||||||
|  | 										)); | ||||||
|  | 								})(); | ||||||
|  | 							} | ||||||
|  | 						}); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
| 
 | 
 | ||||||
|       storage(); | 				// Update the input elements.
 | ||||||
|       actions(); | 				secretariat.observe((what) => { | ||||||
|       updates(); | 					update_interface(); | ||||||
|     } | 				}); | ||||||
| 
 | 
 | ||||||
|     headers(); | 				update_interface(); | ||||||
|     appearance(); | 			} | ||||||
|     events(); | 
 | ||||||
|   } | 			storage(); | ||||||
|  | 			actions(); | ||||||
|  | 			updates(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		headers(); | ||||||
|  | 		appearance(); | ||||||
|  | 		events(); | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export { windowman }; | export { windowman }; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue