forked from proEndreeper/RSWikiRedirector
-
Notifications
You must be signed in to change notification settings - Fork 2
/
background.js
71 lines (61 loc) · 3.91 KB
/
background.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Simple extension to redirect all requests to Elder Scrolls Wikia/Fandom to the Unofficial Elder Scrolls Pages
(function(){
'use strict';
let isPluginDisabled = false; // Variable storing whether or not the plugin is disabled.
let storage = (typeof chrome.storage === "undefined") ? browser.storage : chrome.storage; // Check to see if using Chrome or Firefox
const WIKIA_REGEX = /^(elderscrolls|skyrim)\.(wikia|fandom)\.com$/i; // Used to match the domain of the old wikia/fandom to make sure we are redirecting the correct domain.
// Used to match what game is in the title. This will be used to redirect to the appropriate page. For example, on Wikia it might be Diseases (Skyrim) while on UESP it has to be formated to Skyrim:Diseases
const GAMES_REGEX = /\(Blades\)|\(Legends\)|\(Online\)|\(Skyrim\)|\(Dawnguard\)|\(Hearthfire\)|\(Dragonborn\)|\(Oblivion\)|\(Knights of the Nine\)|\(Morrowind\)|\(Tribunal\)|\(Bloodmoon\)|\(Daggerfall\)|\(Arena\)/
// Listen to before anytime the browser attempts to navigate to the old Wikia/Fandom sites.
chrome.webNavigation.onBeforeNavigate.addListener(
function(info) {
if(isPluginDisabled) { // Ignore all navigation requests when the extension is disabled.
console.log("Elder Scrolls Wikia intercepted, ignoring because plugin is disabled.");
return;
}
// Create a native URL object to more easily determine the path of the url and the domain.
const url = new URL(info.url);
const isWikia = WIKIA_REGEX.test(url.host); // Check to ensure the redirect is occurring on either the fandom/wikia domain.
// If domain isn't subdomain of wikia.com, ignore, also if it's not in the redirect filter
if (!isWikia) return;
var urlChange = url.pathname.replace('/wiki/', '').replace(/_/g, '+'); // Change URL from underscores to plus symbols so that it can search the wiki. Also removes /wiki/ from the URL.
var game = url.pathname.match(GAMES_REGEX); // Find if skyrim
if (game) { // Check if game exists (is not null)
game = String(game); // Cast to a string so we can manipulate it
urlChange = game.replace(/[()]/g,'') + ':' + urlChange.replace(game, ''); // Remove the parathensis, add : and then the game. This will format as i.e. Oblivion:Spells
}
// Generate new url
const host = 'en.uesp.net/?search=';
const redirectUrl = `https://${host}${urlChange}`; // Create the redirect URL
console.log(`Elder Scrolls Wikia intercepted: ${info.url}\nRedirecting to ${redirectUrl}`);
// Redirect the old wikia request to new wiki
chrome.tabs.update(info.tabId,{url:redirectUrl});
});
function updateIcon(){
// Change the icon to match the state of the plugin.
if(typeof chrome.action === "undefined")
{
chrome.browserAction.setIcon({ path: isPluginDisabled?"icon32_black.png":"icon32.png" }); // This is what manifest v2 (Firefox) uses
}
else
{
chrome.action.setIcon({ path: isPluginDisabled?"icon32_black.png":"icon32.png" }); // This is what Chrome with manifest v3 uses
}
}
storage.local.get(['isDisabled'],(result)=>{
// Get the initial condition of whether or not the extension is disabled
isPluginDisabled= result ? result.isDisabled : false;
updateIcon(); // Update icon to match new state
});
// Anytime the state of the plugin changes, update the internal state of the background script.
storage.onChanged.addListener(
function(changes, areaName) {
// If isDisabled changed, update isPluginDisabled
if(changes["isDisabled"]!==undefined && changes["isDisabled"].newValue!=changes["isDisabled"].oldValue) {
console.log(`UESP Redirector is now ${changes["isDisabled"].newValue?'disabled':'enabled'}`);
isPluginDisabled=changes["isDisabled"].newValue;
updateIcon();
}
}
);
})();