notes/.config/BraveSoftware/Brave-Browser/Default/Extensions/djflhoibgkdhkhhcedjiklpkjnoahfmg/1.1.0_0/options.js

590 lines
19 KiB
JavaScript

var preset_options = [];
$(window).load(function() {
restoreOptions();
$('#menu_ua').click(function() {
restoreOptions();
menuItemChange($('#custom_ua_table'), $(this));
});
$('#menu_spoof').click(function() {
restoreOptions();
menuItemChange($('#permanent_spoof_table'), $(this));
});
$('#menu_other').click(function() {
menuItemChange($('#other_settings_table'), $(this));
});
$('#menu_about').click(function() {
menuItemChange($('#about_table'), $(this));
});
getIsOtherSettingsManaged(function(managed){
if (managed) {
$('#menu_import').hide();
$('#menu_other').hide();
} else {
$('#menu_import').show();
$('#menu_other').show();
}
});
$('#menu_import').click(function() {
menuItemChange($('#import_table'), $(this));
});
$('#report_errors').change(function() {
saveReportErrorsCheckbox();
});
$('#sync').change(function() {
saveUseSyncCheckbox();
});
$('#permanent_override').change(function() {
savePermanentOverrideCheckbox();
});
$('#resetter').click(function() {
resetHardcodedUserAgents();
});
$('#spoof_per_tab').change(function() {
saveSpoofPerTabCheckbox();
});
menuItemChange($('.menu_controlled:first'), $('.menuitem:first'));
});
function saveReportErrorsCheckbox() {
setReportErrors($("#report_errors").prop("checked"));
getReportErrors(function(report) {
if (report)
setStatus("Now sending anonymous error reports.");
else
setStatus("Now no longer sending anonymous error reports.");
});
}
function saveSpoofPerTabCheckbox() {
setSpoofPerTab($("#spoof_per_tab").prop("checked"));
getSpoofPerTab(function(spoof) {
setStatus((spoof ? "Spoofs set in the menu bar will now only affect the current tab." :
"Spoofs set in the menu bar will now affect all tabs."));
});
}
function saveUseSyncCheckbox() {
if($("#sync").prop("checked")) {
// Was not using Sync, but decided to use it now.
_syncDataAcrossStorageLocations(chrome.storage.local, chrome.storage.sync, function () {
setUseSync(true);
restoreOptions();
});
} else {
// Was using Sync, but decided to stop.
_syncDataAcrossStorageLocations(chrome.storage.sync, chrome.storage.local, function () {
setUseSync(false);
restoreOptions();
});
}
}
function refreshSpoofPerTabCheckbox() {
getSpoofPerTab(function(spoof) {
$("#spoof_per_tab").prop("checked", spoof);
});
getSpoofPerTabManaged(function(managed) {
if (managed != null) {
$("#spoof_per_tab").prop("disabled", true);
}
});
}
function refreshReportErrorsCheckbox() {
getReportErrors(function(report) {
$("#report_errors").prop("checked", report);
});
getSendErrorsManaged(function(managed) {
if (managed != null) {
$("#report_errors").prop("disabled", true);
}
});
}
function refreshUseSyncCheckbox() {
$("#sync").prop("checked", getUseSync());
}
function savePermanentOverrideCheckbox() {
setPermanentSpoofOverride($("#permanent_override").prop("checked"));
getPermanentSpoofOverride(function(override) {
setStatus((override ? "Permanent spoofs now always override fast-switch." :
"Permanent spoofs now do not override the fast-switch."));
});
}
function refreshPermanentOverrideCheckbox() {
getPermanentSpoofOverride(function(override) {
$("#permanent_override").prop("checked", override);
});
getSpoofOverrideManaged(function(managed) {
if (managed != null) {
$("#permanent_override").prop("disabled", true);
}
});
}
function refreshStorageUsed() {
getPercentOfStorageUsed(function(percent) {
$("#menu_storage_used").empty();
$("#menu_storage_used").toggleClass("error", (percent > 0.99));
var meter = document.createElement("meter");
meter.setAttribute("value", percent);
meter.appendChild(document.createTextNode(""+Math.ceil(percent * 100)+"% of storage used"));
$("#menu_storage_used").append(document.createTextNode("Storage Space"));
$("#menu_storage_used").append(document.createElement("br"));
$("#menu_storage_used").append(meter);
});
}
function resetHardcodedUserAgents() {
getIsUserAgentManaged(function(managed) {
if (!managed) {
setUseSync(false);
resetEverything(function() {
getBaseOptionsList(true, function() {restoreOptions();});
menuItemChange($('.menu_controlled:first'), $('.menuitem:first'));
});
}
});
}
function guessGroup() {
if ($("#add_ua_group").val() == "") {
var guess = guessUserAgentGroup($("#add_ua_user_agent").val());
if (guess != "")
$("#add_ua_group").attr("value", guess);
else {
guess = guessUserAgentGroup($("#add_ua_name").val())
if (guess != "")
$("#add_ua_group").attr("value", guess);
}
}
}
function setStatus(status) {
$("#status").text(status);
}
function addOption() {
if ($("#add_domain").val() == "") {
setStatus("All fields are required.");
$("#add_domain").toggleClass("error", true);
$("#add_ua").toggleClass("error", true);
return;
}
_addOption(document.getElementById("add_domain").value,
$("#options").val(),
function() {
restoreOptions();
setStatus("Blacklist entry added.");
$("#add_domain").attr("value", "");
$("#add_ua").attr("value", "");
});
}
// Adds the option currently entered into the input fields to the list of
// custom user-agents.
function addUAOption() {
if ($("#add_ua_name").val() == "" ||
$("#add_ua_user_agent").val() == "" ||
$("#add_ua_indicator").val() == "") {
setStatus("All fields are required.");
$("#add_ua_name").toggleClass("error", true);
$("#add_ua_user_agent").toggleClass("error", true);
$("#add_ua_indicator").toggleClass("error", true);
return;
}
addCustomUAOption($("#add_ua_name").val(),
$("#add_ua_user_agent").val(),
($("#add_ua_is_append").val() == "true"),
$("#add_ua_indicator").val(),
$("#add_ua_group").val(),
function() {
restoreOptions();
});
}
function populateTextFromDropdown() {
$("#add_ua").attr("value", $('#options option:selected').val());
}
function refreshUserAgentDropDown() {
_getUserAgentList(function(preset_options) {
var select = $("#options");
if (select) {
while (select.children().length > 1) {
select.removeChild(select.lastChild);
}
for (var i = 0; i < preset_options.length; i++) {
if (preset_options[i].ua_string != "") {
var option = document.createElement("option");
option.setAttribute("value", preset_options[i].key);
option.appendChild(document.createTextNode(preset_options[i].title));
select.append(option);
}
}
}
});
}
function refreshUserAgentOptions(managed) {
getOptionsByGroup(function(options_map) {
var table = $("#ua_list_table");
table.empty();
var group_index = 0;
for (group in options_map) {
group_index = group_index + 1;
table.append(getUATitleRow( (group == "" ? "[No group]" : group) ));
var list = options_map[group];
var sub_table = document.createElement("table");
var tr = document.createElement("tr");
var td = document.createElement("td");
td.appendChild(sub_table);
tr.appendChild(td);
table.append(tr);
sub_table.setAttribute("id", "ua_list_sub_table_" + group);
sub_table.setAttribute("class", "ua_list_sub_table");
for (var i = 0; i < list.length; i++) {
var deletebutton = document.createElement("div");
// If the user cannot modify this row, do not give any editable elements.
if (managed || list[i].is_managed || !isRemovable(list[i])) {
sub_table.appendChild(_newRow([document.createTextNode(list[i].title),
document.createTextNode(getDisplayUserAgentString(list[i])),
document.createTextNode(getDisplayAppendOrReplaceString(list[i])),
document.createTextNode(list[i].badge),
( isRemovable(list[i]) ? deletebutton : document.createTextNode(""))]));
} else {
sub_table.appendChild(_newRow([_getHidingTextBox(list[i].title, "text_ua_title_" + list[i].key, list[i].key),
_getHidingTextBox(getDisplayUserAgentString(list[i]), "text_ua_string_" + list[i].key, list[i].key),
document.createTextNode(getDisplayAppendOrReplaceString(list[i])),
document.createTextNode(list[i].badge),
( isRemovable(list[i]) ? deletebutton : document.createTextNode(""))]));
$('#' + "text_ua_title_" + list[i].key).blur( (function(key, field) { return function() { _editUserAgentTitle(key, field); }})(list[i].key, "text_ua_title_" + list[i].key));
$('#' + "text_ua_string_" + list[i].key).blur( (function(key, field) { return function() { _editUserAgentString(key, field); }})(list[i].key, "text_ua_string_" + list[i].key));
}
if (!list[i].is_managed && !managed) {
deletebutton.setAttribute("class", "deletebutton");
deletebutton.setAttribute("border", "0");
deletebutton.setAttribute("alt", "delete");
deletebutton.setAttribute("id", "delete_preset_" + group_index + "_" + i);
$('#delete_preset_' + group_index + '_' + i).click((function(index, is_preset) {
return function() {
deleteUAOption(index);
}
})(list[i].title, list[i].is_preset));
}
}
}
});
}
function _getHidingTextBox(text, id, key, on_edit_function) {
var box = document.createElement("input");
box.setAttribute("class", "hidingbox");
box.setAttribute("id", id);
box.setAttribute("value", text);
box.setAttribute("key", key);
return box;
}
function _editUserAgentTitle(key, field) {
console.log("editing field " + field);
_getUserAgentByKey(key, function(user_agent) {
if (user_agent) {
user_agent.title = $('#' + field).attr("value");
}
_editUserAgent(user_agent, function() { setStatus("User-agent edited.");});
});
}
function _editUserAgentString(key, field) {
console.log("editing field " + field);
_getUserAgentByKey(key, function(user_agent) {
if (user_agent) {
user_agent.ua_string = $('#' + field).attr("value");
}
_editUserAgent(user_agent, function() { setStatus("User-agent edited.");});
});
}
function getUATitleRow(group_name) {
var tr = document.createElement("tr");
var td = document.createElement("td");
td.setAttribute("class", "ua_title_row");
td.appendChild(document.createTextNode(group_name));
tr.appendChild(td);
return tr;
}
function _getOptionsDropdown() {
var select = document.createElement("select");
select.setAttribute("id", "options");
var option = document.createElement("option");
option.setAttribute("value", "");
option.appendChild(document.createTextNode("[Default]"));
select.appendChild(option);
return select;
}
function _newRow(nodes) {
var tr = document.createElement("tr");
for (var i = 0; i < nodes.length; i++) {
if (!nodes[i])
continue;
var td = document.createElement("td");
td.appendChild(nodes[i]);
tr.appendChild(td);
}
return tr;
}
function addTitleRow() {
var row = _newRow([document.createTextNode("Domain"),
document.createTextNode("User-Agent String"),
document.createTextNode(""),
document.createTextNode("")]);
row.setAttribute("class", "title");
return row;
}
function addUATitleRow() {
var row = _newRow([document.createTextNode("New User-agent name"),
document.createTextNode("New User-Agent String"),
document.createTextNode("Group"),
document.createTextNode("Append?"),
document.createTextNode("Indicator Flag"),
document.createTextNode("")]);
row.setAttribute("class", "title");
return row;
}
function addNewEntryRow() {
var add_ua = document.createElement("input");
var add_vendor = document.createTextNode("");
var add_domain = document.createElement("input")
add_ua.setAttribute("id", "add_ua");
add_ua.setAttribute("type", "hidden"); // This is here for testing.
add_domain.setAttribute("id", "add_domain");
var addbutton = document.createElement("input");
addbutton.type = "button";
addbutton.setAttribute("id", "add_entry_button");
addbutton.value = "Add";
var span = document.createElement("span");
span.appendChild(add_ua);
span.appendChild(_getOptionsDropdown());
return _newRow([add_domain, span, add_vendor, addbutton]);
}
function addNewUAEntryRow() {
var add_ua_name = document.createElement("input");
var add_ua_indicator = document.createElement("input");
var add_ua_is_append = document.createElement("select");
var add_ua_user_agent = document.createElement("input");
var add_ua_group = document.createElement("input");
add_ua_name.setAttribute("id", "add_ua_name");
add_ua_indicator.setAttribute("id", "add_ua_indicator");
add_ua_user_agent.setAttribute("id", "add_ua_user_agent");
add_ua_indicator.setAttribute("maxlength", "3");
add_ua_indicator.setAttribute("size", "3");
add_ua_is_append.setAttribute("id", "add_ua_is_append");
add_ua_group.setAttribute("id", "add_ua_group");
var add_ua_is_append_replace_option = document.createElement("option");
add_ua_is_append_replace_option.setAttribute("value", "false");
add_ua_is_append_replace_option.appendChild(document.createTextNode("Replace"));
add_ua_is_append.appendChild(add_ua_is_append_replace_option);
var add_ua_is_append_append_option = document.createElement("option");
add_ua_is_append_append_option.setAttribute("value", "true");
add_ua_is_append_append_option.appendChild(document.createTextNode("Append"));
add_ua_is_append.appendChild(add_ua_is_append_append_option);
var addbutton = document.createElement("input");
addbutton.type = "button";
addbutton.setAttribute("id", "add_ua_button");
addbutton.value = "Add";
return _newRow([add_ua_name,
add_ua_user_agent,
add_ua_group,
add_ua_is_append,
add_ua_indicator,
addbutton]);
}
function deleteOption(domain) {
_getSpoofList(function(list) {
for (var i = 0; i < list.length; i++) {
if (list[i].domain == domain) {
_deleteSpoofByKey(list[i].key, function() {restoreOptions();});
setStatus("Spooflist entry deleted.");
//chrome.extension.sendRequest({action: "update"}, function(response) {});
}
}
});
}
function deleteUAOption(name, is_base_option) {
deleteCustomUAOption(name, function() {restoreOptions()});
}
// Regenerates the current view from the saved state.
function restoreOptions() {
_getSpoofList(function(list) {
var table = $("#list_table");
table.replaceWith(document.createElement("table"));
table = $("#tablecontainer table");
table.prop("id", "list_table");
table.append(addTitleRow());
getIsSpoofManaged(function(managed) {
if (!managed) {
table.append(addNewEntryRow());
$('#add_entry_button').click(function() {
addOption();
});
$('#options').change(function() {
populateTextFromDropdown();
});
}
for (var i = 0; i < list.length; i++) {
var entry = list[i];
var deletebutton = document.createElement("div");
var testbox = $("<div id='spoof_" + entry.key + "'>" + entry.domain + "</div>");
$(testbox).hover(function(event) {
$(testbox).toggleClass("invisible");
}, function(event) {
$(testbox).toggleClass("invisible");
});
var tr = _newRow([document.createTextNode(entry.domain),
document.createTextNode(( (!entry.user_agent || !entry.user_agent.ua_string) ? "[Default]" : entry.user_agent.ua_string)),
document.createTextNode(""),
null,
deletebutton]);
table.append(tr);
if (list[i] && !list[i].is_managed && !managed) {
deletebutton.setAttribute("alt", "delete");
deletebutton.setAttribute("id", "delete_" + i);
deletebutton.setAttribute("border", "0");
deletebutton.setAttribute("class", "deletebutton");
$('#delete_' + i).click((function(index){
return function() {
deleteOption(index);
}
})(entry.domain)
);
}
}
getIsUserAgentManaged(function(managed) {
table = $("#ua_add_table");
table.empty();
var extra_row = addUATitleRow();
extra_row.setAttribute("class", "ua_list_sub_table");
table.append(extra_row);
if (!managed) {
extra_row = addNewUAEntryRow();
extra_row.setAttribute("class", "ua_list_sub_table");
table.append(extra_row);
$('#add_ua_button').click(function() {
addUAOption();
});
$('#add_ua_user_agent').change(function() {
guessGroup();
});
$('#add_ua_name').change(function() {
guessGroup();
});
}
refreshUserAgentOptions(managed);
refreshUserAgentDropDown();
refreshReportErrorsCheckbox();
refreshSpoofPerTabCheckbox();
refreshUseSyncCheckbox();
refreshPermanentOverrideCheckbox();
refreshStorageUsed();
$("#local_file_import").change(handleFileSelect);
exportJson(function(text) {
$("#export_button").prop("href", 'data:text/csv;charset=utf-8,' + encodeURIComponent(text));
});
});
});
});
}
function _makeTable(id) {
var table = document.createElement("table");
table.setAttribute("id", id);
return table;
}
function menuItemChange(item_to_show, item_to_highlight) {
$('.menu_controlled').addClass("invisible");
item_to_show.removeClass("invisible");
$('.menuitem').removeClass("selected");
item_to_highlight.addClass("selected")
}
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
for (var i = 0, f; f = files[i]; i++) {
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
// Guess file format based on file name.
if(theFile.name.endsWith("json")) {
importJson(e.target.result, function() {
$("#import_result").empty();
$("#import_result").append(document.createTextNode("JSON configuration file loaded."));
setStatus("JSON file import complete.");
restoreOptions();
});
} else if (theFile.name.endsWith("xml") ) {
// Not valid JSON. try the XML import instead.
importUserAgentData(e.target.result, function(result) {
$("#import_result").empty();
if (result["import_count"] == 0 && result["duplicates"] == 0)
$("#import_result").append("No user-agent strings found. Please be sure this is the correct XML format mentioned above.");
else
$("#import_result").append(document.createTextNode("Result: " + result["import_count"] + " imported successfully, " + result["duplicates"] + " duplicates removed."));
restoreOptions();
});
} else {
$("#import_result").empty();
$("#import_result").append("The file provided does not end in '.xml' or '.json'. Please rename the file and try again.");
setStatus("Did not import.");
}
};
})(f);
reader.readAsText(f);
}
}