crash the window when the building is wrong

This commit is contained in:
buzzcode2007 2024-04-01 14:57:57 +08:00
parent 42d2278e6c
commit 493abd746a

View file

@ -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 };