From 5e0d4bb8e4b07c6ef7a0b217b6928bf0df4fc2e6 Mon Sep 17 00:00:00 2001 From: buzz-lightsnack-2007 <73412182+buzz-lightsnack-2007@users.noreply.github.com> Date: Mon, 15 Apr 2024 22:22:30 +0800 Subject: [PATCH] properly test for matching website, including via RegEx --- scripts/filters.js | 2 +- scripts/secretariat.js | 24 +++++++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/scripts/filters.js b/scripts/filters.js index fc3c9a4..0d8ae0b 100644 --- a/scripts/filters.js +++ b/scripts/filters.js @@ -31,7 +31,7 @@ export default class filters { return filter; })(); - if ((SELECTED && SELECTED != null && (typeof SELECTED).includes(`obj`)) ? Object.keys(SELECTED) : false) { + if ((SELECTED && SELECTED != null && (typeof SELECTED).includes(`obj`)) ? (Object.keys(SELECTED)).length > 0 : false) { this.one = (Object.entries(SELECTED))[0][1]; return (this.one); }; diff --git a/scripts/secretariat.js b/scripts/secretariat.js index c0586f8..0ef5bdc 100644 --- a/scripts/secretariat.js +++ b/scripts/secretariat.js @@ -151,17 +151,31 @@ export async function search(SOURCE, TERM, ADDITIONAL_PLACES, STRICT = 0, OPTION for (let DICTIONARY_INDEX = 0; DICTIONARY_INDEX < (Object.keys(DATA)).length; DICTIONARY_INDEX++) { VALUE[`parent`] = DATA[(Object.keys(DATA))[DICTIONARY_INDEX]]; - if (((typeof VALUE[`parent`]).includes(`obj`) && !Array.isArray(VALUE[`parent`]) && VALUE[`parent`] != null) ? (Object.keys(VALUE[`parent`])).length > 0 : false ) { + /* Test for a valid RegEx. + + @param {string} item the item to test + */ + function isRegEx(item) { + let RESULT = {}; + RESULT[`state`] = false; + try { + RESULT[`expression`] = new RegExp(item); + RESULT[`state`] = true; + } catch(err) {}; + + return (RESULT[`state`]); + }; + + if (((typeof VALUE[`parent`]).includes(`obj`) && !Array.isArray(VALUE[`parent`]) && VALUE[`parent`] != null) ? (Object.keys(VALUE[`parent`])).length > 0 : false) { VALUE[`current`] = VALUE[`parent`][ADDITIONAL_PLACES]; } - - if (VALUE[`current`]) { + + if (VALUE[`current`] ? ((STRICT >= 1) ? VALUE[`current`] == TERM : (((STRICT < 0.5) ? (VALUE[`current`].includes(TERM)) : false) || TERM.includes(VALUE[`current`]) || (isRegEx(VALUE[`current`]) ? (new RegExp(VALUE[`current`])).test(TERM) : false))) : false) { // Add the data. RESULTS[(Object.keys(DATA))[DICTIONARY_INDEX]] = (Object.entries(DATA))[DICTIONARY_INDEX][1]; - } + }; }; } else { - console.log(DATA); for (let ELEMENT_INDEX = 0; ELEMENT_INDEX < DATA.length; ELEMENT_INDEX++) { if ( ((STRICT || (typeof DATA[ELEMENT_INDEX]).includes(`num`)) && DATA[ELEMENT_INDEX] == TERM) ||