read filters

can identify an appropriate filter for a website
This commit is contained in:
buzzcode2007 2024-03-21 23:08:34 +08:00
parent a55b0af151
commit 1505ca7fb2
2 changed files with 120 additions and 65 deletions

View file

@ -1,25 +1,25 @@
/* secretriat.js /* secretriat.js
Manage the local cache. Manage the local cache.
*/ */
export default class secretariat { export default class secretariat {
static read(prefname, cloud = false) { static read(prefname, cloud = false) {
/* Read all storeed data in the browser cache. /* Read all storeed data in the browser cache.
Parameters: Parameters:
prefname: (string) the preference name prefname: (string) the preference name
cloud: (bool) determine cloud reading, which is otherwise disabled cloud: (bool) determine cloud reading, which is otherwise disabled
Returns: (Object) the preferences Returns: (Object) the preferences
*/ */
// Initialize the selected pref data. // Initialize the selected pref data.
let pref_data; let pref_data;
function pref_data_set(database) { function pref_data_set(database) {
pref_data = database[prefname]; pref_data = database[prefname];
}; };
// Retrieve the data. // Retrieve the data.
if (cloud) { if (cloud) {
chrome.storage.sync.get(prefname, (items) => { chrome.storage.sync.get(prefname, (items) => {
pref_data_set(items); pref_data_set(items);
@ -33,34 +33,63 @@ export default class secretariat {
return(pref_data); return(pref_data);
}; };
static rules(domain = ``) { static rules(domain = window.location.href) {
/* Load all of the rules or a rule from a particular domain. /* List the matching rule for a particular domain.
Parameters: Parameters:
domain: the RegEx of the domain domain: the website to check, which --- by default --- is the current website
Returns: (dictionary) the rules Returns: (dictionary) the rules
*/ */
let result; let result;
// Read the filters.
let filters = read(`filters`);
if (filters) {
// Must only run when there stored value.
if (domain.trim()) {
// Function to loop through each object defined by their URL
function reference(article) {
/* Skim through each one and set a matching find.
Parameters:
// Load the data. section: the URL to check
*/
/*
if (domain) { // Set the section in focus
let section = filters[article];
} else { let qualified = false;
}*/ // Determine validity
if (section) {
// The filter must have a matching URL
console.log(`Rules are being loaded...`); if (section[`URL`]) {
// Now it's time to test it.
qualified = (new RegExp(section[`URL`])).test(domain);
if (qualified && section[`filters`]) {
// Read that out.
result = section;
};
};
};
};
// The keys
(Object.keys(filters)).forEach(reference);
} else {
// Get everything as instructed.
result = filters;
}
};
// Return the result.
return(result);
} }
static amend(website, rules) { static amend(website, rules) {
/* Update the rules. /* Update the rules.
Parameters: Parameters:
website: RegEx pattern of the website or the domain website: RegEx pattern of the website or the domain
rules: the rules in JSON rules: the rules in JSON
@ -68,52 +97,59 @@ export default class secretariat {
*/ */
}; };
static write(prefname, data) { static write(prefname, data) {
/* Write the data on the selected prefname. /* Write the data on the selected prefname.
Parameters: Parameters:
prefname: the preference name prefname: the preference name
data: the new data to be written data: the new data to be written
*/ */
}; };
static forget(domain) { static forget(domain) {
/* Dangerous: Resets all data or a domain's data. /* Dangerous: Resets all data or a domain's data.
Parameters:
domain: the external source of the filter
Returns: the user's confirmation Returns: the user's confirmation
*/ */
let forget_action = false; let forget_action = false;
(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"));
// Confirm the action. // Confirm the action.
let forget_action = alerts.confirm_action(); let forget_action = alerts.confirm_action();
if (forget_action) { if (forget_action) {
// Clear the data storage. if (domain) {
chrome.storage.local.clear();
} else {
// Clear the data storage.
chrome.storage.local.clear();
chrome.storage.sync.clear();
};
}; };
})(); })();
return (forget_action); return (forget_action);
}; };
}; };
export function read(prefname) { export function read(prefname) {
return(secretariat.read(prefname)); return(secretariat.read(prefname));
}; };
export function rules(domain = ``) { export function rules(domain = window.location.href) {
return(secretariat.rules(domain)); return(secretariat.rules(domain));
}; }
export function amend(website, rules) { export function amend(website, rules) {
return (secretariat.amend(website, rules)); return (secretariat.amend(website, rules));
@ -122,4 +158,3 @@ export function amend(website, rules) {
export function forget(domain) { export function forget(domain) {
return (secretariat.forget(domain)); return (secretariat.forget(domain));
}; };

View file

@ -1,34 +1,54 @@
/* Watchman.js /* Watchman.js
Be sensitive to changes and update the state. Be sensitive to changes and update the state.
*/ */
(async () => { (async () => {
// Import modules. // Import modules.
let secretariat = await import(chrome.runtime.getURL("scripts/secretariat.js")); let secretariat = await import(chrome.runtime.getURL("scripts/secretariat.js"));
let reader = await import(chrome.runtime.getURL("scripts/reader.js")); let reader = await import(chrome.runtime.getURL("scripts/reader.js"));
class watchman { class watchman {
static observe(URL = window.location.href) { static observe(URL = window.location.href) {
/* Check the current URL. /* Check the current URL.
Parameters: Parameters:
URL: the page URL; default value is the current webpage URL: the page URL; default value is the current webpage
Returns: (boolean) status Returns: (dictionary) the filter to follow
*/ */
// Create the variable to determine the corresponding key. // Create the variable to determine the corresponding key.
let key; let activity = false;
let filters = secretariat.rules(URL);
secretariat.rules(URL); // Check if the filters exist.
activity = (filters);
return (key); return (activity);
}; };
static act() { static act(filters) {
/* Act on the page.
Parameters:
filters: the filter to work with
Returns: the state
*/
console.log("ShopAI works here! Click on the button in the toolbar or website to start.");
// TODO // TODO
}; }
};
static job() {
watchman.observe(); /* The main action. */
watchman.act(); let job_task = watchman.observe();
if (job_task) {
watchman.act(job_task);
} else {
console.log("ShopAI doesn't work here (yet). Expecting something? Try checking your filters. If you know what you're doing, feel free to create a filter yourself.");
}
}
}
watchman.job();
})(); })();