Compare commits

...
Sign in to create a new pull request.

1 commit

Author SHA1 Message Date
buzz-lightsnack-2007
62d8e415e2 clean up code 2024-11-13 20:27:42 +08:00
4 changed files with 15 additions and 157 deletions

View file

@ -7,7 +7,6 @@
import {global} from "/scripts/secretariat.js"; import {global} from "/scripts/secretariat.js";
import Page from "/scripts/pages/page.js"; import Page from "/scripts/pages/page.js";
import texts from "/scripts/mapping/read.js"; import texts from "/scripts/mapping/read.js";
import nested from "/scripts/utils/nested.js";
class Page_MiniConfig extends Page { class Page_MiniConfig extends Page {
constructor () { constructor () {
@ -97,6 +96,7 @@ class Page_MiniConfig extends Page {
const set_classes = () => { const set_classes = () => {
Object.keys(ELEMENTS[STEP_NUMBER][`container`]).forEach((PART) => { Object.keys(ELEMENTS[STEP_NUMBER][`container`]).forEach((PART) => {
ELEMENTS[STEP_NUMBER][`container`][PART].classList.add(`card`.concat(([`container`].includes(PART)) ? `` : `-`.concat(PART))); ELEMENTS[STEP_NUMBER][`container`][PART].classList.add(`card`.concat(([`container`].includes(PART)) ? `` : `-`.concat(PART)));
[`container`].includes(PART) ? ELEMENTS[STEP_NUMBER][`container`][PART].classList.add(`horizontal`) : null;
}); });
} }

View file

@ -86,19 +86,19 @@ export default class scraper {
@param {Object} options the options @param {Object} options the options
@return {Object} the texts @return {Object} the texts
*/ */
getTexts(fields, options) { getTexts(FIELDS, OPTIONS) {
let CONTENT; let CONTENT;
/* Read for the particular fields. */ /* Read for the particular fields. */
function read(fields) { function read(FIELDS) {
let DATA = {}; // Store here the resulting data let DATA = {}; // Store here the resulting data
(Object.keys(fields)).forEach((NAME) => { (Object.keys(FIELDS)).forEach((NAME) => {
// Remove trailing spaces within the name. // Remove trailing spaces within the name.
NAME = (typeof NAME).includes(`str`) ? NAME.trim() : NAME; NAME = (typeof NAME).includes(`str`) ? NAME.trim() : NAME;
// Set the referring value. // Set the referring value.
let VALUE = fields[NAME]; let VALUE = FIELDS[NAME];
VALUE = (typeof VALUE).includes(`str`) ? VALUE.trim() : VALUE; VALUE = (typeof VALUE).includes(`str`) ? VALUE.trim() : VALUE;
if (VALUE && NAME) { if (VALUE && NAME) {
@ -132,158 +132,20 @@ export default class scraper {
}; };
// Determine and set the appropriate field source. // Determine and set the appropriate field source.
let FIELDS = (((typeof fields).includes(`obj`) && fields) ? Object.keys(fields).length : false) ? fields : this.fields; let CRITERIA = (((typeof FIELDS).includes(`obj`) && FIELDS) ? Object.keys(FIELDS).length : false) ? FIELDS : this.fields;
((((typeof options).includes(`obj`) && options) ? Object.hasOwn(`update`) : false) ? options[`update`] : true) ((((typeof OPTIONS).includes(`obj`) && OPTIONS) ? Object.hasOwn(`update`) : false) ? OPTIONS[`update`] : true)
? this.fields = FIELDS ? this.fields = CRITERIA
: null; : null;
// Read the fields. // Read the fields.
(FIELDS) (CRITERIA)
? CONTENT = read(FIELDS) ? CONTENT = read(CRITERIA)
: false; : false;
// Set the data if the options doesn't indicate otherwise. // Set the data if the options doesn't indicate otherwise.
(((((typeof options).includes(`obj`) && options) ? Object.hasOwn(`update`) : false) ? options[`update`] : true) && CONTENT) (((((typeof OPTIONS).includes(`obj`) && OPTIONS) ? Object.hasOwn(`update`) : false) ? OPTIONS[`update`] : true) && CONTENT)
? this.texts = CONTENT ? this.texts = CONTENT
: false; : false;
return (CONTENT); return (CONTENT);
}; };
/*
Scrape the images from a page.
It's temporarily disabled due to consequent flagging of the IP address. Also it's output is not yet implemented. This is a future point of expansion (Crit E).
@param {Object} fields the fields to scrape
@param {Object} options the options
@return {Object} the blob of the images
*/
async getImages(fields, options) {
let DISABLE = true // This is how to disable it
if (!DISABLE) {
let CONTENT;
/*
Get the blob of the image in an element.
@param {Element} element the element to get the blob from
@return {Blob} the blob of the image
*/
async function blobbify(element) {
/*
Get the URL of the image.
@param {Element} element the element to get the URL from
@return {String} the URL of the image
*/
function reference(element) {
let LOCATION;
// Get using standard attributes.
LOCATION = element.getAttribute(`src`);
if (!LOCATION) {
// Use the CSS background image.
(window.getComputedStyle(element).backgroundImage)
? LOCATION = window.getComputedStyle(element).backgroundImage.slice(4, -1).replace(/"/g, "")
: false;
}
// Return the location.
return LOCATION;
}
/*
Get the blob from the URL.
@param {String} URL the URL to get the blob from
@return {Blob} the blob of the image
*/
function getBlob(URL) {
return(net.download(URL, `blob`));
}
let LOCATION = reference(element);
let BLOB = await getBlob(LOCATION);
return ((BLOB.type.includes(`image`)) ? BLOB : null);
}
/* Read for the particular fields. */
async function read(fields) {
/*
Select all images from an element and get their blobs.
@param {Element} element the element to get the images from
@return {Array} the blobs of the images
*/
async function select(element) {
let IMAGES = [...element.querySelectorAll(`*`)];
let BLOBS = [];
if (IMAGES && IMAGES.length) {
for (let IMAGE of IMAGES) {
let BLOB = await blobbify(IMAGE);
(BLOB) ? BLOBS.push(BLOB) : false;
}
}
return BLOBS;
}
let DATA = []; // Store here the resulting data
for (let NAME of Object.keys(fields)) {
// Remove trailing spaces within the name.
NAME = (typeof NAME).includes(`str`) ? NAME.trim() : NAME;
let VALUE = fields[NAME];
if (VALUE && NAME) {
// Check if array.
if (Array.isArray(VALUE)) {
// Temporarily create an empty list.
for (let PARTICULAR of VALUE) {
if ((typeof PARTICULAR).includes(`obj`) && PARTICULAR && !Array.isArray(PARTICULAR)) {
DATA = [...DATA, ...(await read(PARTICULAR))];
} else {
let ELEMENTS = [...(document.querySelectorAll(PARTICULAR))];
if (ELEMENTS && ELEMENTS.length) {
for (let ELEMENT of ELEMENTS) {
let BLOBS = await select(ELEMENT);
if (BLOBS && BLOBS.length) DATA = [...DATA, ...BLOBS];
}
}
}
}
} else if ((typeof VALUE).includes(`obj`) && VALUE) {
DATA = [...DATA, ...(await read(VALUE))];
} else if (document.querySelector(VALUE)) {
let ELEMENTS = [...(document.querySelectorAll(VALUE))];
if (ELEMENTS && ELEMENTS.length) {
for (let ELEMENT of ELEMENTS) {
let BLOBS = await select(ELEMENT);
if (BLOBS && BLOBS.length) DATA = [...DATA, ...BLOBS];
}
}
}
}
}
return (DATA);
};
// Read the fields.
(((typeof fields).includes(`obj`) && fields) ? Object.keys(fields).length : false)
? CONTENT = await read(fields)
: false;
// Set the data if the options doesn't indicate otherwise.
(((((typeof options).includes(`obj`) && options) ? Object.hasOwn(`update`) : false) ? options[`update`] : true) && CONTENT)
? this.images = CONTENT
: false;
return (CONTENT);
}
}
} }

View file

@ -17,7 +17,6 @@ export default class watch {
if (FILTER_RESULT && Object.keys(FILTER_RESULT).length > 0) { if (FILTER_RESULT && Object.keys(FILTER_RESULT).length > 0) {
// Let user know that the website is supported, if ever they have opened the console. // Let user know that the website is supported, if ever they have opened the console.
new logging((new texts(`message_external_supported_title`)).localized, (new texts(`message_external_supported_body`)).localized); new logging((new texts(`message_external_supported_title`)).localized, (new texts(`message_external_supported_body`)).localized);
watch.process(FILTER_RESULT); watch.process(FILTER_RESULT);
} }
} }

View file

@ -79,16 +79,14 @@ nested.dictionary = class dictionary {
@param {object} options the options @param {object} options the options
@return {object} the results @return {object} the results
*/ */
static search(data, value, options) { static search(DATA, TERM, OPTIONS) {
// Set the default options. // Set the default options.
let OPTIONS = Object.assign({}, {"strictness": 0}, options); OPTIONS = Object.assign({}, {"strictness": 0}, OPTIONS);
let DATA = data;
let TERM = value;
let RESULTS; let RESULTS;
if (data && ((typeof data).includes(`obj`) && !Array.isArray(data))) { if (DATA && ((typeof DATA).includes(`obj`) && !Array.isArray(DATA))) {
if (!TERM || ((typeof TERM).includes(`str`) ? !TERM.trim() : false)) { if (!TERM || ((typeof TERM).includes(`str`) ? !TERM.trim() : false)) {
RESULTS = data; RESULTS = DATA;
} else { } else {
RESULTS = {}; RESULTS = {};
@ -124,7 +122,6 @@ nested.dictionary = class dictionary {
((OPTIONS[`strictness`] < 0.5) ((OPTIONS[`strictness`] < 0.5)
? (VALUE[`current`].includes(TERM)) ? (VALUE[`current`].includes(TERM))
: false) : false)
|| TERM.includes(VALUE[`current`])
|| (RegExManager.test(VALUE[`current`]) || (RegExManager.test(VALUE[`current`])
? (new RegExp(VALUE[`current`])).test(TERM) ? (new RegExp(VALUE[`current`])).test(TERM)
: false))) : false)))