Use less lines
due to the async method import
This commit is contained in:
		
							parent
							
								
									c038ed9812
								
							
						
					
					
						commit
						a621df9b87
					
				
					 1 changed files with 135 additions and 154 deletions
				
			
		|  | @ -2,169 +2,150 @@ | ||||||
| Manage the local cache. | Manage the local cache. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| export default class secretariat { | export function 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.
 |  | ||||||
| 		if (cloud) { |  | ||||||
| 			chrome.storage.sync.get(prefname, (items) => { |  | ||||||
| 				pref_data_set(items); |  | ||||||
| 			  }); |  | ||||||
| 		} else { |  | ||||||
| 			chrome.storage.local.get(prefname, (items) => { |  | ||||||
| 				pref_data_set(items); |  | ||||||
| 			  }); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		return(pref_data); |  | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	static specifics(WHERE, domain = window.location.href) { | 	// Retrieve the data.
 | ||||||
| 		/* List the matching rule or memory for a particular domain. | 	if (cloud) { | ||||||
| 
 | 		chrome.storage.sync.get(prefname, (items) => { | ||||||
| 		Parameters: | 			pref_data_set(items); | ||||||
| 			WHERE: the data source | 			}); | ||||||
| 			domain: the website to check, which --- by default --- is the current website | 	} else { | ||||||
| 		Returns: (dictionary) the rules | 		chrome.storage.local.get(prefname, (items) => { | ||||||
| 		*/ | 			pref_data_set(items); | ||||||
| 
 | 			}); | ||||||
| 		let result; |  | ||||||
| 
 |  | ||||||
| 		let pref_data = read(WHERE); |  | ||||||
| 		// Read the filters.
 |  | ||||||
| 		switch (domain) { |  | ||||||
| 			case `filters`: |  | ||||||
| 				let filters = pref_data; |  | ||||||
| 				if (filters) { |  | ||||||
| 					// Must only run when there stored value.
 |  | ||||||
| 					if (domain.trim()) { |  | ||||||
| 						// Loop through each filter
 |  | ||||||
| 						(Object.keys(filters)).forEach((article) => { |  | ||||||
| 							// Set the section in focus
 |  | ||||||
| 							let section = filters[article]; |  | ||||||
| 							let qualified = false; |  | ||||||
| 
 |  | ||||||
| 							// Determine validity
 |  | ||||||
| 							if (section) { |  | ||||||
| 								// The filter must have a matching URL
 |  | ||||||
| 								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; |  | ||||||
| 									}; |  | ||||||
| 								}; |  | ||||||
| 							}; |  | ||||||
| 						}); |  | ||||||
| 
 |  | ||||||
| 					} else { |  | ||||||
| 						// Get everything as instructed.
 |  | ||||||
| 						result = filters; |  | ||||||
| 					} |  | ||||||
| 				}; |  | ||||||
| 				break; |  | ||||||
| 			default: |  | ||||||
| 				// In the default mode, the keys refer to the product itself
 |  | ||||||
| 				if (pref_data) { |  | ||||||
| 					(Object.keys(pref_data)).forEach((product_URL) => { |  | ||||||
| 						// Get the first matching
 |  | ||||||
| 						if ((domain.trim()).includes(product_URL)) { |  | ||||||
| 							// Do not modify the data
 |  | ||||||
| 							result = pref_data[product_URL]; |  | ||||||
| 						}; |  | ||||||
| 					}); |  | ||||||
| 				}; |  | ||||||
| 				break; |  | ||||||
| 		}; |  | ||||||
| 
 |  | ||||||
| 		// Return the result.
 |  | ||||||
| 		return(result); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	static amend(WHERE, website, datas) { | 	return(pref_data); | ||||||
| 		/* Update the rules. |  | ||||||
| 
 |  | ||||||
| 		Parameters: |  | ||||||
| 			WHERE: the data set to update |  | ||||||
| 			website: RegEx pattern of the website or the domain |  | ||||||
| 			datas: the data in JSON |  | ||||||
| 		Returns: (boolean) the update status |  | ||||||
| 		*/ |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 	static write(prefname, data) { |  | ||||||
| 		/* Write the data on the selected prefname. |  | ||||||
| 
 |  | ||||||
| 		Parameters: |  | ||||||
| 			prefname: the preference name |  | ||||||
| 			data: the new data to be written |  | ||||||
| 		*/ |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 	static forget(domain) { |  | ||||||
| 		/* Dangerous: Resets all data or a domain's data. |  | ||||||
| 
 |  | ||||||
| 		Parameters: |  | ||||||
| 			domain: the external source of the filter |  | ||||||
| 		Returns: the user's confirmation |  | ||||||
| 		*/ |  | ||||||
| 
 |  | ||||||
| 		let forget_action = false; |  | ||||||
| 
 |  | ||||||
| 		(async () => { |  | ||||||
| 			// Import alerts module.
 |  | ||||||
| 			let alerts = await import(chrome.runtime.getURL("gui/scripts/alerts.js")); |  | ||||||
| 
 |  | ||||||
| 			// Confirm the action.
 |  | ||||||
| 			let forget_action = alerts.confirm_action(); |  | ||||||
| 
 |  | ||||||
| 			if (forget_action) { |  | ||||||
| 				if (domain) { |  | ||||||
| 
 |  | ||||||
| 				} else { |  | ||||||
| 						// Clear the data storage.
 |  | ||||||
| 						chrome.storage.local.clear(); |  | ||||||
| 						chrome.storage.sync.clear(); |  | ||||||
| 				}; |  | ||||||
| 			}; |  | ||||||
| 		})(); |  | ||||||
| 
 |  | ||||||
| 		return (forget_action); |  | ||||||
| 	}; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| export function read(prefname) { |  | ||||||
| 	return(secretariat.read(prefname)); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| export function specifics(WHERE, domain = window.location.href) { |  | ||||||
| 	return(secretariat.specifics(WHERE, domain)); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export function amend(website, rules) { | export function specifics(WHERE, domain = window.location.href) { | ||||||
| 	return (secretariat.amend(website, rules)); | 	/* List the matching rule or memory for a particular domain. | ||||||
| }; | 
 | ||||||
|  | 	Parameters: | ||||||
|  | 		WHERE: the data source | ||||||
|  | 		domain: the website to check, which --- by default --- is the current website | ||||||
|  | 	Returns: (dictionary) the rules | ||||||
|  | 	*/ | ||||||
|  | 
 | ||||||
|  | 	let result; | ||||||
|  | 
 | ||||||
|  | 	let pref_data = read(WHERE); | ||||||
|  | 	// Read the filters.
 | ||||||
|  | 	switch (domain) { | ||||||
|  | 		case `filters`: | ||||||
|  | 			let filters = pref_data; | ||||||
|  | 			if (filters) { | ||||||
|  | 				// Must only run when there stored value.
 | ||||||
|  | 				if (domain.trim()) { | ||||||
|  | 					// Loop through each filter
 | ||||||
|  | 					(Object.keys(filters)).forEach((article) => { | ||||||
|  | 						// Set the section in focus
 | ||||||
|  | 						let section = filters[article]; | ||||||
|  | 						let qualified = false; | ||||||
|  | 
 | ||||||
|  | 						// Determine validity
 | ||||||
|  | 						if (section) { | ||||||
|  | 							// The filter must have a matching URL
 | ||||||
|  | 							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; | ||||||
|  | 								}; | ||||||
|  | 							}; | ||||||
|  | 						}; | ||||||
|  | 					}); | ||||||
|  | 
 | ||||||
|  | 				} else { | ||||||
|  | 					// Get everything as instructed.
 | ||||||
|  | 					result = filters; | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 			break; | ||||||
|  | 		default: | ||||||
|  | 			// In the default mode, the keys refer to the product itself
 | ||||||
|  | 			if (pref_data) { | ||||||
|  | 				(Object.keys(pref_data)).forEach((product_URL) => { | ||||||
|  | 					// Get the first matching
 | ||||||
|  | 					if ((domain.trim()).includes(product_URL)) { | ||||||
|  | 						// Do not modify the data
 | ||||||
|  | 						result = pref_data[product_URL]; | ||||||
|  | 					}; | ||||||
|  | 				}); | ||||||
|  | 			}; | ||||||
|  | 			break; | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	// Return the result.
 | ||||||
|  | 	return(result); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function write(prefname, data) { | ||||||
|  | 	/* Write the data on the selected prefname. | ||||||
|  | 
 | ||||||
|  | 	Parameters: | ||||||
|  | 		prefname: the preference name | ||||||
|  | 		data: the new data to be written | ||||||
|  | 	*/ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function amend(WHERE, SITE, DATA) { | ||||||
|  | 	/* Update the rules. | ||||||
|  | 
 | ||||||
|  | 	Parameters: | ||||||
|  | 		WHERE: the data set to update | ||||||
|  | 		SITE: RegEx pattern of the website or the domain | ||||||
|  | 		DATA: the data in JSON | ||||||
|  | 	Returns: (boolean) the update status | ||||||
|  | 	*/ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| export function forget(domain) { | export function forget(domain) { | ||||||
| 	return (secretariat.forget(domain)); | 	/* Dangerous: Resets all data or a domain's data. | ||||||
|  | 
 | ||||||
|  | 	Parameters: | ||||||
|  | 		domain: the external source of the filter | ||||||
|  | 	Returns: the user's confirmation | ||||||
|  | 	*/ | ||||||
|  | 
 | ||||||
|  | 	let forget_action = false; | ||||||
|  | 
 | ||||||
|  | 	(async () => { | ||||||
|  | 		// Import alerts module.
 | ||||||
|  | 		let alerts = await import(chrome.runtime.getURL(`gui/scripts/alerts.js`)); | ||||||
|  | 
 | ||||||
|  | 		// Confirm the action.
 | ||||||
|  | 		let forget_action = alerts.confirm_action(); | ||||||
|  | 
 | ||||||
|  | 		if (forget_action) { | ||||||
|  | 			if (domain) { | ||||||
|  | 
 | ||||||
|  | 			} else { | ||||||
|  | 					// Clear the data storage.
 | ||||||
|  | 					chrome.storage.local.clear(); | ||||||
|  | 					chrome.storage.sync.clear(); | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  | 	})(); | ||||||
|  | 
 | ||||||
|  | 	return (forget_action); | ||||||
| }; | }; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue