fixed class referencing

This commit is contained in:
buzz-lightsnack-2007 2024-03-31 15:43:28 +08:00
parent 6a1ea8eb7d
commit 543fe2f913
9 changed files with 383 additions and 377 deletions

View file

@ -2,7 +2,7 @@
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");

View file

@ -2,102 +2,121 @@
Manage filters.
*/
/* Select the most appropriate filter based on a URL.
@param {string} URL the current URL
*/
export async function select(URL = window.location.href) {}
/* Update all filters or just one.
@param {string} URL the URL to update
@return {boolean} the state
*/
export async function update(URL) {
// Import the updater.
const secretariat = await import(
chrome.runtime.getURL("scripts/secretariat.js")
);
const net = await import(chrome.runtime.getURL("scripts/net.js"));
const texts = await import(chrome.runtime.getURL("gui/scripts/read.js"));
// Apparently, JS doesn't have a native queueing system, but it might best work here.
class Queue {
constructor() {
this.elements = [];
}
enqueue(element) {
this.elements.push(element);
}
dequeue() {
return this.elements.shift();
}
isEmpty() {
return this.elements.length <= 0;
}
export default class filters {
constructor() {
this.all = {};
}
// Create a queue of the filters.
let filters = new Queue();
/* Select the most appropriate filter based on a URL.
if (URL) {
// Check if the URL is in a valid protocol
if (URL.includes(`://`)) {
// Append that to the queue.
filters.enqueue(URL);
}
} else {
// Add every item to the queue based on what was loaded first.
if ((await Promise.all([secretariat.read(`filters`, -1)]))[0]) {
Object.keys(
(await Promise.all([secretariat.read(`filters`, -1)]))[0],
).every((filter_URL) => {
if (filter_URL.includes(`://`)) {
filters.enqueue(filter_URL);
}
});
}
@param {string} URL the current URL
*/
static select(URL = window.location.href) {
this.one = {};
}
if (!filters.isEmpty()) {
while (!filters.isEmpty()) {
let filter_URL = filters.dequeue();
/* Update all filters or just one.
// Inform the user of download state.
console.log(
texts.read(`settings_filters_update_status`, null, [filter_URL]),
@param {string} URL the URL to update
@return {boolean} the state
*/
static update(URL) {
(async () => {
// Import the updater.
const secretariat = await import(
chrome.runtime.getURL("scripts/secretariat.js")
);
const net = await import(chrome.runtime.getURL("scripts/net.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;
// Create promise of downloading.
let filter_download = net.download(filter_URL);
filter_download
.then((result) => {
// Only work when the filter is valid.
if (result) {
// Write the filter to storage.
secretariat.write(["filters", filter_URL], result, -1);
console.log(
texts.read(`settings_filters_update_status_complete`, null, [
filter_URL,
]),
);
}
})
.catch((error) => {
// Inform the user of the download failure.
console.log(
texts.read(`settings_filters_update_status_failure`, null, [
error,
// Apparently, JS doesn't have a native queueing system, but it might best work here.
class Queue {
constructor() {
this.elements = [];
}
enqueue(element) {
this.elements.push(element);
}
dequeue() {
return this.elements.shift();
}
isEmpty() {
return this.elements.length <= 0;
}
}
// Create a queue of the filters.
let filters = new Queue();
if (URL) {
// Check if the URL is in a valid protocol
if (URL.includes(`://`)) {
// Append that to the queue.
filters.enqueue(URL);
}
} else {
// Add every item to the queue based on what was loaded first.
if ((await Promise.all([secretariat.read(`filters`, -1)]))[0]) {
Object.keys(
(await Promise.all([secretariat.read(`filters`, -1)]))[0],
).every((filter_URL) => {
if (filter_URL.includes(`://`)) {
filters.enqueue(filter_URL);
}
});
}
}
if (!filters.isEmpty()) {
while (!filters.isEmpty()) {
let filter_URL = filters.dequeue();
// Inform the user of download state.
alerts.log(
texts.localized(`settings_filters_update_status`, null, [
filter_URL,
]),
);
});
}
} else {
// Inform the user of the download being unnecessary.
console.log(texts.read(`settings_filters_update_stop`));
// Create promise of downloading.
let filter_download = net.download(filter_URL);
filter_download
.then((result) => {
// Only work when the filter is valid.
if (result) {
// Write the filter to storage.
secretariat.write(["filters", filter_URL], result, -1);
console.log(
texts.localized(
`settings_filters_update_status_complete`,
null,
[filter_URL],
),
);
}
})
.catch((error) => {
// Inform the user of the download failure.
console.log(
texts.localized(
`settings_filters_update_status_failure`,
null,
[error, filter_URL],
),
);
});
}
} else {
// Inform the user of the download being unnecessary.
alerts.warn(texts.localized(`settings_filters_update_stop`));
}
})();
}
}

View file

@ -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
*/
function read_database(SOURCE = -1) {
@param {number} SOURCE the data source
*/
async function read_database(SOURCE = -1) {
let data = {};
let data_returned;
@ -75,10 +75,10 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) {
/* Recursively find through each data, returning either that value or null when the object is not found.
@param {dictionary} DATA_ALL the data
@param {object} DATA_PATH the path of the data
@return {object} the data
*/
@param {dictionary} DATA_ALL the data
@param {object} DATA_PATH the path of the data
@return {object} the data
*/
function find_data(DATA_ALL, DATA_PATH, PARAMETER_TEST) {
// Pull the data out.
let DATA_PATH_SELECTED = String(DATA_PATH.shift()).trim();
@ -185,9 +185,9 @@ export function write(PATH, DATA, CLOUD = -1) {
/* Forcibly write the data to chrome database
@param {object} DATA the data
@param {number} CLOUD the storage
*/
@param {object} DATA the data
@param {number} CLOUD the storage
*/
function write_database(DATA, CLOUD = 0) {
// If CLOUD is set to 0, it should automatically determine where the previous source of data was taken from.
@ -200,11 +200,11 @@ export function write(PATH, DATA, CLOUD = -1) {
/* Appropriately nest and merge the data.
@param {object} EXISTING the original data
@param {object} PATH the subpath
@param {object} VALUE the value
@return {object} the updated data
*/
@param {object} EXISTING the original data
@param {object} PATH the subpath
@param {object} VALUE the value
@return {object} the updated data
*/
function nest(EXISTING, SUBPATH, VALUE) {
let DATABASE = EXISTING;
@ -263,7 +263,9 @@ export function forget(preference, subpreference, CLOUD = 0) {
(async () => {
// 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.
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
*/
export async function observe(reaction) {
export function observe(reaction) {
chrome.storage.onChanged.addListener((changes, namespace) => {
reaction(changes, namespace);
});

View file

@ -7,8 +7,10 @@ Be sensitive to changes and update the state.
let secretariat = await import(
chrome.runtime.getURL("scripts/secretariat.js")
);
let filters = await import(chrome.runtime.getURL("scripts/filters.js"));
let reader = await import(chrome.runtime.getURL("scripts/reader.js"));
let filters = (await import(chrome.runtime.getURL("scripts/filters.js")))[
`filters`
];
// let reader = await import(chrome.runtime.getURL("scripts/reader.js"));
class watchman {
/* Check the current URL.