nitter-anartia-redirector/dialog.js
2025-02-16 17:19:01 +02:00

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'));