FediAct/src/popup.js

92 wiersze
3.2 KiB
JavaScript

// required settings keys with defauls
var settings = {
fedifollow_homeinstance: null,
fedifollow_alert: false,
fedifollow_mode: "blacklist",
fedifollow_whitelist: null,
fedifollow_blacklist: null,
fedifollow_target: "_self",
fedifollow_autoaction: true,
fedifollow_showfollows: true,
fedifollow_redirects: true
}
// fix for cross-browser storage api compatibility
var browser, chrome;
function onError(error){
console.error(`[FediFollow] Error: ${error}`);
}
// this performs loading the settings into the popup, reacting to changes and saving changes
function popupTasks(settings) {
function showConfirmation() {
$("span#indicator").show();
setTimeout(function() {
$("span#indicator").hide();
}, 1500);
}
function updateSettings(){
// update settings values
settings.fedifollow_homeinstance = $("input#homeinstance").val().trim();
settings.fedifollow_alert = $("input#alert").is(':checked');
settings.fedifollow_mode = $("select#mode").val();
settings.fedifollow_whitelist = $("textarea#whitelist_content").val();
settings.fedifollow_blacklist = $("textarea#blacklist_content").val();
settings.fedifollow_target = $("select#target").val();
settings.fedifollow_autoaction = $("input#autoaction").is(':checked');
settings.fedifollow_showfollows = $("input#showfollows").is(':checked');
settings.fedifollow_redirects = $("input#redirects").is(':checked');
// write to storage
const waitForSaved = (browser || chrome).storage.local.set(settings);
// show saved indicator after successful save
waitForSaved.then(showConfirmation(), onError);
}
function restoreForm() {
// set all default/configured values and show fields accordingly
$("input#homeinstance").val(settings.fedifollow_homeinstance);
$("textarea#blacklist_content").val(settings.fedifollow_blacklist);
$("textarea#whitelist_content").val(settings.fedifollow_whitelist);
$("select#mode").val(settings.fedifollow_mode);
$("select#target").val(settings.fedifollow_target);
$("input#alert").prop('checked', settings.fedifollow_alert);
$("input#autoaction").prop('checked', settings.fedifollow_autoaction);
$("input#showfollows").prop('checked', settings.fedifollow_showfollows);
$("input#redirects").prop('checked', settings.fedifollow_redirects);
// both containers are hidden by default
if ($("select#mode").val() == "whitelist") {
$("div#whitelist_input").show();
} else {
$("div#blacklist_input").show();
}
// check changes of the select to update whitelist/blacklist input
$("select#mode").change(function() {
if ($("select#mode").val() == "whitelist") {
$("div#blacklist_input").hide();
$("div#whitelist_input").show();
} else {
$("div#whitelist_input").hide();
$("div#blacklist_input").show();
}
});
}
$(document).ready(function() {
// restore the form values
restoreForm();
// perform storage actions on form submit
$("form#fedifollow-settings").on('submit', function(e){
// prevent default
e.preventDefault();
// update settings
updateSettings();
});
});
}
(browser || chrome).storage.local.get(settings).then(popupTasks, onError);