fixed class referencing
This commit is contained in:
		
							parent
							
								
									6a1ea8eb7d
								
							
						
					
					
						commit
						543fe2f913
					
				
					 9 changed files with 383 additions and 377 deletions
				
			
		|  | @ -13,7 +13,9 @@ export default class logging { | ||||||
|   static error(ERROR_CODE, ERROR_MESSAGE, critical = true) { |   static error(ERROR_CODE, ERROR_MESSAGE, critical = true) { | ||||||
|     (async () => { |     (async () => { | ||||||
|       // Import the templating.
 |       // Import the templating.
 | ||||||
|       const texts = await import(chrome.runtime.getURL("gui/scripts/read.js")); |       const texts = ( | ||||||
|  |         await import(chrome.runtime.getURL("gui/scripts/read.js")) | ||||||
|  |       )[`texts`]; | ||||||
| 
 | 
 | ||||||
|       // Display the error message.
 |       // Display the error message.
 | ||||||
|       console.error(texts.read(`error_msg`, [ERROR_CODE, ERROR_MESSAGE])); |       console.error(texts.read(`error_msg`, [ERROR_CODE, ERROR_MESSAGE])); | ||||||
|  |  | ||||||
|  | @ -1,12 +1,11 @@ | ||||||
| import {windowman} from '../../windowman.JS'; | import { windowman } from "../../windowman.JS"; | ||||||
| 
 | 
 | ||||||
| function redirect() { | function redirect() { | ||||||
|   new windowman(`gui/pages/settings.htm`); |   windowman.new(`gui/pages/settings.htm`); | ||||||
| 
 | 
 | ||||||
|   window.close(); |   window.close(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| function main() { | function main() { | ||||||
|   redirect(); |   redirect(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,14 +1,13 @@ | ||||||
| // Open the settings in a pop-up window.
 | // Open the settings in a pop-up window.
 | ||||||
| 
 | 
 | ||||||
| import {windowman} from '../../windowman.JS'; | import { windowman } from "../../windowman.JS"; | ||||||
| 
 | 
 | ||||||
| function redirect() { | function redirect() { | ||||||
|   new windowman(`gui/pages/settings.htm`); |   windowman.new(`gui/pages/settings.htm`); | ||||||
| 
 | 
 | ||||||
|   window.close(); |   window.close(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| function main() { | function main() { | ||||||
|   redirect(); |   redirect(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -3,13 +3,23 @@ | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| // Import modules.
 | // Import modules.
 | ||||||
| import { windowman } from "../windowman.js"; | //import { windowman } from "../windowman.js";
 | ||||||
| let secretariat = await import(chrome.runtime.getURL("scripts/secretariat.js")); | 
 | ||||||
|  | async function build() { | ||||||
|  |   let secretariat = ( | ||||||
|  |     await import(chrome.runtime.getURL("scripts/secretariat.js")) | ||||||
|  |   ).secretariat; | ||||||
|  |   let windowman = ( | ||||||
|  |     await import(chrome.runtime.getURL("gui/scripts/windowman.js")) | ||||||
|  |   ).windowman; | ||||||
|  | 
 | ||||||
|  |   let window = new windowman(); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
|     Arrange the interface. |     Arrange the interface. | ||||||
|     */ |     */ | ||||||
| function arrange() { | /*function arrange() { | ||||||
|   async function openLast() { |   async function openLast() { | ||||||
|     let last_opened = ( |     let last_opened = ( | ||||||
|       await Promise.all([secretariat.read([`view`, window.location.href], 1)]) |       await Promise.all([secretariat.read([`view`, window.location.href], 1)]) | ||||||
|  | @ -26,17 +36,24 @@ function arrange() { | ||||||
|   openLast(); |   openLast(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | function main() { | ||||||
|  |   windowman.fill(); | ||||||
|  |   events(); | ||||||
|  |   arrange(); | ||||||
|  | }*/ | ||||||
|  | 
 | ||||||
| /* | /* | ||||||
|     Define the mapping of each button. |     Define the mapping of each button. | ||||||
|     */ |     */ | ||||||
| function events() { | function events() { | ||||||
|   windowman.events(); |  | ||||||
| 
 |  | ||||||
|   if (document.querySelector(`[data-action="filters,update"]`)) { |   if (document.querySelector(`[data-action="filters,update"]`)) { | ||||||
|     document |     document | ||||||
|       .querySelector(`[data-action="filters,update"]`) |       .querySelector(`[data-action="filters,update"]`) | ||||||
|       .addEventListener(`click`, async () => { |       .addEventListener(`click`, async () => { | ||||||
|         let filters = await import(chrome.runtime.getURL(`scripts/filters.js`)); |         let filters = ( | ||||||
|  |           await import(chrome.runtime.getURL(`scripts/filters.js`)) | ||||||
|  |         ).default; | ||||||
|         filters.update(); |         filters.update(); | ||||||
|       }); |       }); | ||||||
|   } |   } | ||||||
|  | @ -44,19 +61,22 @@ function events() { | ||||||
|     document |     document | ||||||
|       .querySelector(`[data-action="storage,clear"]`) |       .querySelector(`[data-action="storage,clear"]`) | ||||||
|       .addEventListener(`click`, async () => { |       .addEventListener(`click`, async () => { | ||||||
|         let storage = await import( |         let storage = ( | ||||||
|           chrome.runtime.getURL(`scripts/secretariat.js`) |           await import(chrome.runtime.getURL(`scripts/secretariat.js`)) | ||||||
|         ); |         )["secretariat"]; | ||||||
|         storage.forget(`sites`); |         storage.forget(`sites`); | ||||||
|       }); |       }); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function main() { | //main();
 | ||||||
|   windowman.prepare(); | function load() { | ||||||
|   windowman.fill(); |   document.addEventListener("DOMContentLoaded", function () { | ||||||
|  |     M.AutoInit(); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   build(); | ||||||
|   events(); |   events(); | ||||||
|   arrange(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| main(); | load(); | ||||||
|  |  | ||||||
|  | @ -1,63 +1,108 @@ | ||||||
| /* windowman | /* windowman | ||||||
| Window management */ | Window and window content management */ | ||||||
| 
 | 
 | ||||||
| import texts from "./read.js"; | import texts from "./read.js"; | ||||||
| 
 | 
 | ||||||
| class windowman { | class windowman { | ||||||
|   /* Initialize the window frame. */ |   static new(URL, height, width) { | ||||||
|   static prepare() { |  | ||||||
|     try { |  | ||||||
|       let UI = { |  | ||||||
|         library: [ |  | ||||||
|           chrome.runtime.getURL("gui/styles/interface.external.css"), |  | ||||||
|           chrome.runtime.getURL("gui/styles/ui.css"), |  | ||||||
|         ], |  | ||||||
|         script: chrome.runtime.getURL( |  | ||||||
|           "gui/scripts/external/interface.external.js", |  | ||||||
|         ), |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       UI.library.forEach((source) => { |  | ||||||
|         $(`head`).append( |  | ||||||
|           `<link rel="stylesheet" type="text/css" href="${source}">`, |  | ||||||
|         ); |  | ||||||
|       }); |  | ||||||
| 
 |  | ||||||
|       $(`head`).append(`<script type="module" src="${UI.script}"></script>`); |  | ||||||
|     } catch (error) { |  | ||||||
|       console.error(texts.localized(`error_fileNotFound`, [error])); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Prevent scaling, similar to a real window.
 |  | ||||||
|     $(`head`).append( |  | ||||||
|       `<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />`, |  | ||||||
|     ); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   constructor(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) : 400, |       width: width ? parseInt(width) : 600, | ||||||
|       height: height ? parseInt(height) : 600, |       height: height ? parseInt(height) : 600, | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static fill() { |   // Prepare the window with its metadata.
 | ||||||
|     function text() { |   constructor() { | ||||||
|       let text_elements = document.querySelectorAll("[data-text]"); |     function headers() { | ||||||
|  |       let UI = { | ||||||
|  |         library: [ | ||||||
|  |           chrome.runtime.getURL( | ||||||
|  |             "gui/styles/external/mdi/materialdesignicons.min.css", | ||||||
|  |           ), | ||||||
|  |           chrome.runtime.getURL( | ||||||
|  |             "gui/styles/external/materialize/css/materialize.css", | ||||||
|  |           ), | ||||||
|  |           chrome.runtime.getURL("gui/styles/ui.css"), | ||||||
|  |         ], | ||||||
|  |       }; | ||||||
| 
 | 
 | ||||||
|       text_elements.forEach((text_element) => { |       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.
 | ||||||
|  |     this[`metadata`] = chrome.windows.getCurrent(); | ||||||
|  | 
 | ||||||
|  |     /* | ||||||
|  |     window_metadata[`id`] = window.id; | ||||||
|  |     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.  */ | ||||||
|  |     function appearance() { | ||||||
|  |       function icons() { | ||||||
|  |         let target_elements = document.querySelectorAll(`[data-icon]`); | ||||||
|  | 
 | ||||||
|  |         target_elements.forEach((element) => { | ||||||
|  |           // Get the content before removing it.
 | ||||||
|  |           let element_data = {}; | ||||||
|  | 
 | ||||||
|  |           // Swap the placement of the existing content.
 | ||||||
|  |           function swap() { | ||||||
|  |             element_data[`content`] = element.innerHTML; | ||||||
|  |             element.innerHTML = ``; | ||||||
|  | 
 | ||||||
|  |             let element_text = document.createElement(`span`); | ||||||
|  |             element_text.innerHTML = element_data[`content`]; | ||||||
|  | 
 | ||||||
|  |             element.appendChild(element_text); | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|  |           // Add the icon.
 | ||||||
|  |           function iconify() { | ||||||
|  |             // Get the icon.
 | ||||||
|  |             element_data[`icon`] = element.getAttribute(`data-icon`); | ||||||
|  | 
 | ||||||
|  |             // Get the icon.
 | ||||||
|  |             let icon_element = document.createElement(`i`); | ||||||
|  |             icon_element.className = `mdi mdi-`.concat(element_data[`icon`]); | ||||||
|  |             element.prepend(icon_element); | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|  |           swap(); | ||||||
|  |           iconify(); | ||||||
|  |         }); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       function text() { | ||||||
|  |         let text_elements = {}; | ||||||
|  |         text_elements[`content`] = document.querySelectorAll("[for]"); | ||||||
|  |         text_elements[`alt`] = document.querySelectorAll("[alt-for]"); | ||||||
|  |         text_elements[`title`] = document.querySelectorAll("[title-for]"); | ||||||
|  | 
 | ||||||
|  |         text_elements[`content`].forEach((text_element) => { | ||||||
|           let text_inserted = texts.localized( |           let text_inserted = texts.localized( | ||||||
|           text_element.getAttribute(`data-text`), |             text_element.getAttribute(`for`), | ||||||
|             false, |             false, | ||||||
|           text_element.hasAttribute(`data-text-parameter`) |             text_element.hasAttribute(`for-parameter`) | ||||||
|             ? text_element.getAttribute(`data-text-parameter`).split(",") |               ? text_element.getAttribute(`for-parameter`).split(",") | ||||||
|               : null, |               : null, | ||||||
|           ); |           ); | ||||||
|           if (!text_inserted) { |           if (!text_inserted) { | ||||||
|             text_inserted = texts.localized( |             text_inserted = texts.localized( | ||||||
|             `term_`.concat(text_element.getAttribute(`data-text`)), |               `term_`.concat(text_element.getAttribute(`for`)), | ||||||
|             ); |             ); | ||||||
|           } |           } | ||||||
| 
 | 
 | ||||||
|  | @ -67,10 +112,33 @@ class windowman { | ||||||
|             text_element.innerText = text_inserted; |             text_element.innerText = text_inserted; | ||||||
|           } |           } | ||||||
|         }); |         }); | ||||||
|  | 
 | ||||||
|  |         delete text_elements[`content`]; | ||||||
|  |         Object.keys(text_elements).forEach((key) => { | ||||||
|  |           if (text_elements[key]) { | ||||||
|  |             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`))), | ||||||
|  |                 ); | ||||||
|               } |               } | ||||||
| 
 | 
 | ||||||
|     function storage() { |               text_element.setAttribute(key, text_inserted); | ||||||
|       (async () => { |             }); | ||||||
|  |           } | ||||||
|  |         }); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       async function storage() { | ||||||
|         // Import the module.
 |         // Import the module.
 | ||||||
|         const secretariat = await import( |         const secretariat = await import( | ||||||
|           chrome.runtime.getURL("scripts/secretariat.js") |           chrome.runtime.getURL("scripts/secretariat.js") | ||||||
|  | @ -108,18 +176,17 @@ class windowman { | ||||||
|             } |             } | ||||||
|           }); |           }); | ||||||
|         }); |         }); | ||||||
|       })(); |  | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       text(); |       text(); | ||||||
|  |       icons(); | ||||||
|       storage(); |       storage(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|   /* Add click events. */ |     // Adds events to the window.
 | ||||||
|   static events() { |     function events() { | ||||||
|       /* Add events related to storage. */ |       /* Add events related to storage. */ | ||||||
|     function storage() { |       async function storage() { | ||||||
|       (async () => { |  | ||||||
|         // Import the module.
 |         // Import the module.
 | ||||||
|         const secretariat = await import( |         const secretariat = await import( | ||||||
|           chrome.runtime.getURL("scripts/secretariat.js") |           chrome.runtime.getURL("scripts/secretariat.js") | ||||||
|  | @ -160,87 +227,6 @@ class windowman { | ||||||
| 
 | 
 | ||||||
|           input_element.addEventListener("change", element[`event`]); |           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], |  | ||||||
|                         parseInt(this.getAttribute(`tab`)), |  | ||||||
|                         1, |  | ||||||
|                       ); |  | ||||||
|                     })(); |  | ||||||
|                   }; |  | ||||||
| 
 |  | ||||||
|                   button.addEventListener("click", event); |  | ||||||
|                 }); |  | ||||||
|               } |  | ||||||
|             }); |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         tabs(); |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       document.addEventListener("contextmenu", (event) => |  | ||||||
|         event.preventDefault(), |  | ||||||
|       ); |  | ||||||
| 
 |  | ||||||
|       changeUI(); |  | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       /* Map buttons to their corresponding action buttons. */ |       /* Map buttons to their corresponding action buttons. */ | ||||||
|  | @ -252,46 +238,22 @@ class windowman { | ||||||
|             buttons.forEach((button) => { |             buttons.forEach((button) => { | ||||||
|               let event = function () { |               let event = function () { | ||||||
|                 // Get the data from the button.
 |                 // Get the data from the button.
 | ||||||
|               let file = {}; |                 let target = {}; | ||||||
|               file[`target`] = this.getAttribute(`href`); |                 target[`source`] = this.getAttribute(`href`); | ||||||
| 
 | 
 | ||||||
|               // Check if the file exists to only open it when it is the case.
 |                 // Get the correct path.
 | ||||||
|               function testUrl(URL) { |                 target[`path`] = ( | ||||||
|                 // Code from https://stackoverflow.com/questions/3646914/how-do-i-check-if-file-exists-in-jquery-or-pure-javascript
 |                   !target[`source`].includes(`://`) | ||||||
|                 const HTTP = new XMLHttpRequest(); |                     ? window.location.pathname | ||||||
|                 try { |                         .split(`/`) | ||||||
|                   HTTP.open(`HEAD`, URL, false); |                         .slice(0, -1) | ||||||
|                   HTTP.send(); |                         .join(`/`) | ||||||
|                   return HTTP.status != 404; |                         .concat(`/`) | ||||||
|                 } catch (error) { |                     : `` | ||||||
|                   return false; |                 ).concat(target[`source`]); | ||||||
|                 } |  | ||||||
|               } |  | ||||||
| 
 | 
 | ||||||
|               if (!file[`target`].includes(`://`)) { |                 windowman.new( | ||||||
|                 // Get the current path.
 |                   target[`path`], | ||||||
|                 file[`path`] = window.location.pathname.split(`/`); |  | ||||||
|                 file[`path`] = |  | ||||||
|                   file[`path`].slice(0, file[`path`].length - 1).join(`/`) + |  | ||||||
|                   `/`; |  | ||||||
|                 file[`location`] = file[`path`].concat(file[`target`]); |  | ||||||
|               } else { |  | ||||||
|                 file[`location`] = file[`target`]; |  | ||||||
|               } |  | ||||||
| 
 |  | ||||||
|               let open_combinations = [``, `.htm`, `.html`]; |  | ||||||
|               for ( |  | ||||||
|                 let open_combination = 0; |  | ||||||
|                 open_combination < open_combinations.length; |  | ||||||
|                 open_combination++ |  | ||||||
|               ) { |  | ||||||
|                 if ( |  | ||||||
|                   testUrl( |  | ||||||
|                     file[`location`] + open_combinations[open_combination], |  | ||||||
|                   ) |  | ||||||
|                 ) { |  | ||||||
|                   new windowman( |  | ||||||
|                     file[`location`] + open_combinations[open_combination], |  | ||||||
|                   this.getAttribute(`tab-height`) |                   this.getAttribute(`tab-height`) | ||||||
|                     ? this.getAttribute(`tab-height`) |                     ? this.getAttribute(`tab-height`) | ||||||
|                     : null, |                     : null, | ||||||
|  | @ -299,9 +261,6 @@ class windowman { | ||||||
|                     ? this.getAttribute(`tab-width`) |                     ? this.getAttribute(`tab-width`) | ||||||
|                     : null, |                     : null, | ||||||
|                 ); |                 ); | ||||||
|                   break; |  | ||||||
|                 } |  | ||||||
|               } |  | ||||||
|               }; |               }; | ||||||
|               button.addEventListener("click", event); |               button.addEventListener("click", event); | ||||||
|             }); |             }); | ||||||
|  | @ -352,10 +311,14 @@ class windowman { | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       storage(); |       storage(); | ||||||
|     functionality(); |  | ||||||
|       actions(); |       actions(); | ||||||
|       updates(); |       updates(); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     headers(); | ||||||
|  |     appearance(); | ||||||
|  |     events(); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export { windowman }; | export { windowman }; | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| This does not stand for "FamiCom" but instead on Finalization and Completion. This script provides installation run scripts. | This does not stand for "FamiCom" but instead on Finalization and Completion. This script provides installation run scripts. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| import { read, write, init } from "./secretariat.js"; | import { init } from "./secretariat.js"; | ||||||
| 
 | 
 | ||||||
| let config = chrome.runtime.getURL("config/config.json"); | let config = chrome.runtime.getURL("config/config.json"); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,24 +2,36 @@ | ||||||
| Manage filters. | Manage filters. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
|  | export default class filters { | ||||||
|  |   constructor() { | ||||||
|  |     this.all = {}; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   /* Select the most appropriate filter based on a URL. |   /* Select the most appropriate filter based on a URL. | ||||||
| 
 | 
 | ||||||
|   @param {string} URL the current URL |   @param {string} URL the current URL | ||||||
|   */ |   */ | ||||||
| export async function select(URL = window.location.href) {} |   static select(URL = window.location.href) { | ||||||
|  |     this.one = {}; | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
|   /* Update all filters or just one. |   /* Update all filters or just one. | ||||||
| 
 | 
 | ||||||
|   @param {string} URL the URL to update |   @param {string} URL the URL to update | ||||||
|   @return {boolean} the state |   @return {boolean} the state | ||||||
|   */ |   */ | ||||||
| export async function update(URL) { |   static update(URL) { | ||||||
|  |     (async () => { | ||||||
|       // Import the updater.
 |       // Import the updater.
 | ||||||
|       const secretariat = await import( |       const secretariat = await import( | ||||||
|         chrome.runtime.getURL("scripts/secretariat.js") |         chrome.runtime.getURL("scripts/secretariat.js") | ||||||
|       ); |       ); | ||||||
|       const net = await import(chrome.runtime.getURL("scripts/net.js")); |       const net = await import(chrome.runtime.getURL("scripts/net.js")); | ||||||
|   const texts = await import(chrome.runtime.getURL("gui/scripts/read.js")); |       const texts = (await import(chrome.runtime.getURL("gui/scripts/read.js"))) | ||||||
|  |         .default; | ||||||
|  |       const alerts = ( | ||||||
|  |         await import(chrome.runtime.getURL("gui/scripts/alerts.js")) | ||||||
|  |       ).default; | ||||||
| 
 | 
 | ||||||
|       // Apparently, JS doesn't have a native queueing system, but it might best work here.
 |       // Apparently, JS doesn't have a native queueing system, but it might best work here.
 | ||||||
|       class Queue { |       class Queue { | ||||||
|  | @ -67,8 +79,10 @@ export async function update(URL) { | ||||||
|           let filter_URL = filters.dequeue(); |           let filter_URL = filters.dequeue(); | ||||||
| 
 | 
 | ||||||
|           // Inform the user of download state.
 |           // Inform the user of download state.
 | ||||||
|       console.log( |           alerts.log( | ||||||
|         texts.read(`settings_filters_update_status`, null, [filter_URL]), |             texts.localized(`settings_filters_update_status`, null, [ | ||||||
|  |               filter_URL, | ||||||
|  |             ]), | ||||||
|           ); |           ); | ||||||
| 
 | 
 | ||||||
|           // Create promise of downloading.
 |           // Create promise of downloading.
 | ||||||
|  | @ -80,24 +94,29 @@ export async function update(URL) { | ||||||
|                 // Write the filter to storage.
 |                 // Write the filter to storage.
 | ||||||
|                 secretariat.write(["filters", filter_URL], result, -1); |                 secretariat.write(["filters", filter_URL], result, -1); | ||||||
|                 console.log( |                 console.log( | ||||||
|               texts.read(`settings_filters_update_status_complete`, null, [ |                   texts.localized( | ||||||
|                 filter_URL, |                     `settings_filters_update_status_complete`, | ||||||
|               ]), |                     null, | ||||||
|  |                     [filter_URL], | ||||||
|  |                   ), | ||||||
|                 ); |                 ); | ||||||
|               } |               } | ||||||
|             }) |             }) | ||||||
|             .catch((error) => { |             .catch((error) => { | ||||||
|               // Inform the user of the download failure.
 |               // Inform the user of the download failure.
 | ||||||
|               console.log( |               console.log( | ||||||
|             texts.read(`settings_filters_update_status_failure`, null, [ |                 texts.localized( | ||||||
|               error, |                   `settings_filters_update_status_failure`, | ||||||
|               filter_URL, |                   null, | ||||||
|             ]), |                   [error, filter_URL], | ||||||
|  |                 ), | ||||||
|               ); |               ); | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
|       } else { |       } else { | ||||||
|         // Inform the user of the download being unnecessary.
 |         // Inform the user of the download being unnecessary.
 | ||||||
|     console.log(texts.read(`settings_filters_update_stop`)); |         alerts.warn(texts.localized(`settings_filters_update_stop`)); | ||||||
|  |       } | ||||||
|  |     })(); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -27,11 +27,11 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /* |   /* | ||||||
| 		Find the data now. |       Get all dataset. | ||||||
| 
 | 
 | ||||||
|       @param {number} SOURCE the data source |       @param {number} SOURCE the data source | ||||||
|   */ |   */ | ||||||
|   function read_database(SOURCE = -1) { |   async function read_database(SOURCE = -1) { | ||||||
|     let data = {}; |     let data = {}; | ||||||
|     let data_returned; |     let data_returned; | ||||||
| 
 | 
 | ||||||
|  | @ -263,7 +263,9 @@ export function forget(preference, subpreference, CLOUD = 0) { | ||||||
| 
 | 
 | ||||||
|   (async () => { |   (async () => { | ||||||
|     // Import alerts module.
 |     // Import alerts module.
 | ||||||
|     let alerts = await import(chrome.runtime.getURL(`gui/scripts/alerts.js`)); |     let alerts = (await import(chrome.runtime.getURL(`gui/scripts/alerts.js`)))[ | ||||||
|  |       `alerts` | ||||||
|  |     ]; | ||||||
| 
 | 
 | ||||||
|     // Confirm the action.
 |     // Confirm the action.
 | ||||||
|     let forget_action = alerts.confirm_action(); |     let forget_action = alerts.confirm_action(); | ||||||
|  | @ -388,7 +390,7 @@ Run a script when the browser storage has been changed. | ||||||
| 
 | 
 | ||||||
| @param {object} reaction the function to run | @param {object} reaction the function to run | ||||||
| */ | */ | ||||||
| export async function observe(reaction) { | export function observe(reaction) { | ||||||
|   chrome.storage.onChanged.addListener((changes, namespace) => { |   chrome.storage.onChanged.addListener((changes, namespace) => { | ||||||
|     reaction(changes, namespace); |     reaction(changes, namespace); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|  | @ -7,8 +7,10 @@ Be sensitive to changes and update the state. | ||||||
|   let secretariat = await import( |   let secretariat = await import( | ||||||
|     chrome.runtime.getURL("scripts/secretariat.js") |     chrome.runtime.getURL("scripts/secretariat.js") | ||||||
|   ); |   ); | ||||||
|   let filters = await import(chrome.runtime.getURL("scripts/filters.js")); |   let filters = (await import(chrome.runtime.getURL("scripts/filters.js")))[ | ||||||
|   let reader = await import(chrome.runtime.getURL("scripts/reader.js")); |     `filters` | ||||||
|  |   ]; | ||||||
|  |   // let reader = await import(chrome.runtime.getURL("scripts/reader.js"));
 | ||||||
| 
 | 
 | ||||||
|   class watchman { |   class watchman { | ||||||
|     /* Check the current URL. |     /* Check the current URL. | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue