Query param handling fixes + other cleanup

pull/433/head
Kevin Payravi 2024-01-11 02:53:30 -06:00
parent 5959f7d233
commit 9992d2ccf1
4 changed files with 23 additions and 34 deletions

View File

@ -77,8 +77,9 @@ function redirectToBreezeWiki(storage, tabId, url) {
function processRedirect(host) { function processRedirect(host) {
// Extract article from URL // Extract article from URL
const urlFormatted = new URL(url); const urlFormatted = new URL(url);
urlFormatted.search = '';
const subdomain = urlFormatted.hostname.split(".")[0]; const subdomain = urlFormatted.hostname.split(".")[0];
const article = url.split('fandom.com/wiki/')[1].replaceAll('%20', '_'); const article = String(urlFormatted).split('fandom.com/wiki/')[1].replaceAll('%20', '_');
// Perform redirect // Perform redirect
if (article) { if (article) {
@ -158,30 +159,22 @@ async function main(url, tabId) {
this[prop] = value; this[prop] = value;
} }
// Check if tab is actually available
// This is mainly to prevent background processes from triggering an event
let sites = [];
chrome.storage.local.get((localStorage) => { chrome.storage.local.get((localStorage) => {
chrome.storage.sync.get(async (syncStorage) => { chrome.storage.sync.get(async (syncStorage) => {
const storage = { ...syncStorage, ...localStorage }; const storage = { ...syncStorage, ...localStorage };
if ((storage.power ?? 'on') === 'on') { if ((storage.power ?? 'on') === 'on') {
let crossLanguageSetting = storage.crossLanguage || 'off'; let crossLanguageSetting = storage.crossLanguage || 'off';
let matchingSite = await commonFunctionFindMatchingSite(url, crossLanguageSetting); let matchingSite = await commonFunctionFindMatchingSite(url, crossLanguageSetting);
if (matchingSite) { if (matchingSite) {
// Get user's settings for the wiki // Get user's settings for the wiki
let settings = storage.wikiSettings || {}; let settings = storage.wikiSettings || {};
let id = matchingSite['id']; let id = matchingSite['id'];
let siteSetting = settings[id] || storage.defaultWikiAction || 'alert'; let siteSetting = settings[id] || storage.defaultWikiAction || 'alert';
// Remove query paramters
let urlObj = new URL(url);
urlObj.search = '';
url = String(decodeURIComponent(urlObj.toString()));
// Check if redirects are enabled for the site // Check if redirects are enabled for the site
if (siteSetting === 'redirect') { if (siteSetting === 'redirect') {
let newURL = getNewURL(url, matchingSite); let newURL = commonFunctionGetNewURL(url, matchingSite);
// Perform redirect // Perform redirect
chrome.tabs.update(tabId, { url: newURL }); chrome.tabs.update(tabId, { url: newURL });

View File

@ -76,20 +76,25 @@ async function commonFunctionFindMatchingSite(site, crossLanguageSetting) {
return matchingSite; return matchingSite;
} }
function getOriginArticle(originURL, matchingSite) { function commonFunctionGetOriginArticle(originURL, matchingSite) {
return decodeURIComponent(originURL.split(matchingSite['origin_base_url'] + matchingSite['origin_content_path'])[1] || ''); return decodeURIComponent(originURL.split(matchingSite['origin_base_url'] + matchingSite['origin_content_path'])[1] || '');
} }
function getDestinationArticle(matchingSite, article) { function commonFunctionGetDestinationArticle(matchingSite, article) {
return matchingSite['destination_content_prefix'] + article; return matchingSite['destination_content_prefix'] + article;
} }
function getNewURL(originURL, matchingSite) { function commonFunctionGetNewURL(originURL, matchingSite) {
// Remove query paramters
let urlObj = new URL(originURL);
urlObj.search = '';
originURL = String(decodeURIComponent(urlObj.toString()));
// Get article name from the end of the URL; // Get article name from the end of the URL;
// We can't just take the last part of the path due to subpages; // We can't just take the last part of the path due to subpages;
// Instead, we take everything after the wiki's base URL + content path // Instead, we take everything after the wiki's base URL + content path
let originArticle = getOriginArticle(originURL, matchingSite); let originArticle = commonFunctionGetOriginArticle(originURL, matchingSite);
let destinationArticle = getDestinationArticle(matchingSite, originArticle); let destinationArticle = commonFunctionGetDestinationArticle(matchingSite, originArticle);
// Set up URL to redirect user to based on wiki platform // Set up URL to redirect user to based on wiki platform
let newURL = ''; let newURL = '';
if (originArticle) { if (originArticle) {

View File

@ -343,11 +343,6 @@ function main() {
} }
} }
// Remove query paramters
let urlObj = new URL(origin);
urlObj.search = '';
origin = String(decodeURIComponent(urlObj.toString()));
commonFunctionGetSiteDataByOrigin().then(async sites => { commonFunctionGetSiteDataByOrigin().then(async sites => {
let crossLanguageSetting = storage.crossLanguage || 'off'; let crossLanguageSetting = storage.crossLanguage || 'off';
let matchingSite = await commonFunctionFindMatchingSite(origin, crossLanguageSetting); let matchingSite = await commonFunctionFindMatchingSite(origin, crossLanguageSetting);
@ -363,7 +358,7 @@ function main() {
// Notify if enabled for the wiki: // Notify if enabled for the wiki:
if (siteSetting === 'alert') { if (siteSetting === 'alert') {
let newURL = getNewURL(origin, matchingSite); let newURL = commonFunctionGetNewURL(origin, matchingSite);
// When head elem is loaded, notify that another wiki is available // When head elem is loaded, notify that another wiki is available
const docObserver = new MutationObserver((mutations, mutationInstance) => { const docObserver = new MutationObserver((mutations, mutationInstance) => {

View File

@ -159,9 +159,9 @@ function escapeRegex(string) {
} }
function replaceSearchResults(searchResultContainer, site, link) { function replaceSearchResults(searchResultContainer, site, link) {
let originArticle = getOriginArticle(link, site); let originArticle = commonFunctionGetOriginArticle(link, site);
let destinationArticle = getDestinationArticle(site, originArticle); let destinationArticle = commonFunctionGetDestinationArticle(site, originArticle);
let newURL = getNewURL(link, site); let newURL = commonFunctionGetNewURL(link, site);
if (searchResultContainer && !searchResultContainer.querySelector('.iwb-new-link')) { if (searchResultContainer && !searchResultContainer.querySelector('.iwb-new-link')) {
if (!searchResultContainer.classList.contains('iwb-detected')) { if (!searchResultContainer.classList.contains('iwb-detected')) {
@ -186,9 +186,9 @@ function replaceSearchResults(searchResultContainer, site, link) {
if (originArticle && originArticle !== site['origin_main_page']) { if (originArticle && originArticle !== site['origin_main_page']) {
destinationArticleTitle = destinationArticle.replace(site['destination_content_prefix'], '').replaceAll('_', ' '); destinationArticleTitle = destinationArticle.replace(site['destination_content_prefix'], '').replaceAll('_', ' ');
if (site['language'] === 'EN' && link.match(/fandom\.com\/[a-z]{2}\/wiki\//)) { if (site['language'] === 'EN' && link.match(/fandom\.com\/[a-z]{2}\/wiki\//)) {
indieResultText.innerText = 'Look up "' + decodeURIComponent(decodeURIComponent(destinationArticleTitle)) + '" on ' + site.destination + ' (EN)'; indieResultText.innerText = 'Look up "' + decodeURIComponent(destinationArticleTitle) + '" on ' + site.destination + ' (EN)';
} else { } else {
indieResultText.innerText = 'Look up "' + decodeURIComponent(decodeURIComponent(destinationArticleTitle)) + '" on ' + site.destination; indieResultText.innerText = 'Look up "' + decodeURIComponent(destinationArticleTitle) + '" on ' + site.destination;
} }
} else { } else {
if (site['language'] === 'EN' && link.match(/fandom\.com\/[a-z]{2}\/wiki\//)) { if (site['language'] === 'EN' && link.match(/fandom\.com\/[a-z]{2}\/wiki\//)) {
@ -352,19 +352,15 @@ function filterSearchResults(searchResults, searchEngine, storage) {
searchResultLink = searchResult.closest('a[href]').href; searchResultLink = searchResult.closest('a[href]').href;
} }
let urlObj = new URL(searchResultLink);
urlObj.search = '';
let link = String(decodeURIComponent(urlObj.toString()));
if (searchEngine === 'google') { if (searchEngine === 'google') {
// Break if image result: // Break if image result:
if (link.includes('imgurl=')) { if (searchResultLink.includes('imgurl=')) {
break; break;
} }
} }
let crossLanguageSetting = storage.crossLanguage || 'off'; let crossLanguageSetting = storage.crossLanguage || 'off';
let matchingSite = await commonFunctionFindMatchingSite(link, crossLanguageSetting); let matchingSite = await commonFunctionFindMatchingSite(searchResultLink, crossLanguageSetting);
if (matchingSite) { if (matchingSite) {
// Get user's settings for the wiki // Get user's settings for the wiki
let id = matchingSite['id']; let id = matchingSite['id'];
@ -427,7 +423,7 @@ function filterSearchResults(searchResults, searchEngine, storage) {
if (searchFilterSetting === 'hide') { if (searchFilterSetting === 'hide') {
countFiltered += hideSearchResults(searchResultContainer, searchEngine, matchingSite, storage['hiddenResultsBanner']); countFiltered += hideSearchResults(searchResultContainer, searchEngine, matchingSite, storage['hiddenResultsBanner']);
} else { } else {
countFiltered += replaceSearchResults(searchResultContainer, matchingSite, link); countFiltered += replaceSearchResults(searchResultContainer, matchingSite, searchResultLink);
} }
} }
} }