101 lines
2.7 KiB
JavaScript
101 lines
2.7 KiB
JavaScript
'use strict';
|
|
if (window.browser === undefined) {
|
|
window.browser = window.chrome;
|
|
}
|
|
|
|
function errorLogger(action) {
|
|
function log(error) {
|
|
console.log(`Error: ${action}:`, error);
|
|
}
|
|
return log;
|
|
}
|
|
|
|
function createRedirect(id, from, transform) {
|
|
return {
|
|
id: id,
|
|
action: {
|
|
type: "redirect",
|
|
redirect: { transform: transform },
|
|
},
|
|
condition: {
|
|
urlFilter: from,
|
|
resourceTypes: ["main_frame", "sub_frame"],
|
|
},
|
|
};
|
|
}
|
|
|
|
function createRegexRedirect(id, regex, substitution) {
|
|
return {
|
|
id: id,
|
|
action: {
|
|
type: "redirect",
|
|
redirect: { regexSubstitution: substitution },
|
|
},
|
|
condition: {
|
|
regexFilter: regex,
|
|
resourceTypes: ["main_frame", "sub_frame"],
|
|
},
|
|
};
|
|
}
|
|
|
|
function updateRedirects(settings) {
|
|
const redirects = [];
|
|
if (settings.enabled && settings.instance !== '') {
|
|
const transform = {
|
|
host: settings.instance,
|
|
};
|
|
redirects.push(createRedirect(1, '||twitter.com', transform));
|
|
redirects.push(createRedirect(2, '||x.com', transform));
|
|
}
|
|
if (settings.anartiaEnabled && settings.anartiaInstance !== '') {
|
|
if (settings.anartiaInstance.includes('\\')) {
|
|
console.log('anartiaInstance has some funny business going on with backslashes');
|
|
} else {
|
|
redirects.push(createRegexRedirect(3,
|
|
'^https?://bsky\.app/profile/([^/]+)$',
|
|
`https://${settings.anartiaInstance}/\\1`
|
|
));
|
|
redirects.push(createRegexRedirect(4,
|
|
'^https?://bsky\.app/profile/([^/]+)/post/(.+)$',
|
|
`https://${settings.anartiaInstance}/\\1/\\2`
|
|
));
|
|
}
|
|
}
|
|
return browser.declarativeNetRequest.updateDynamicRules({
|
|
addRules: redirects,
|
|
removeRuleIds: [1, 2, 3, 4],
|
|
});
|
|
}
|
|
|
|
function setupSettingsForm(settings) {
|
|
const enabled = document.getElementById('enabled');
|
|
const instance = document.getElementById('instance');
|
|
const anartiaEnabled = document.getElementById('anartiaEnabled');
|
|
const anartiaInstance = document.getElementById('anartiaInstance');
|
|
|
|
enabled.checked = settings.enabled;
|
|
instance.value = settings.instance;
|
|
anartiaEnabled.checked = settings.anartiaEnabled;
|
|
anartiaInstance.value = settings.anartiaInstance;
|
|
|
|
for (let element of document.getElementsByClassName('control')) {
|
|
element.addEventListener('change', () => {
|
|
settings.enabled = enabled.checked;
|
|
settings.instance = instance.value;
|
|
settings.anartiaEnabled = anartiaEnabled.checked;
|
|
settings.anartiaInstance = anartiaInstance.value;
|
|
browser.storage.local.set(settings)
|
|
.then(
|
|
() => updateRedirects(settings),
|
|
errorLogger('browser.storage.local.set')
|
|
).catch(errorLogger('updateRedirects'));
|
|
});
|
|
}
|
|
}
|
|
|
|
browser.storage.local.get({
|
|
enabled: false,
|
|
instance: '',
|
|
anartiaEnabled: false,
|
|
anartiaInstance: '',
|
|
}).then(setupSettingsForm, errorLogger('browser.storage.local.get'));
|