/
options.js
150 lines (124 loc) · 4.32 KB
/
options.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/**
* JS for the option controls. This is most likely an atrocious bastardization of MVC,
* and/or a bad reimplementation of innumerable excellent JS frameworks.
* */
// fill the select widget ("view") with the current filters
function populate() {
var selector = document.getElementById("filterSelector");
while (selector.options.length > 0) {
selector.remove(0);
}
var allFilters = chrome.extension.getBackgroundPage().allFilters;
for (var i in allFilters) {
var option = document.createElement("option");
option.text = allFilters[i];
option.value = allFilters[i];
selector.add(option, null);
}
var webRTCBox = document.getElementById("webRTCBox");
webRTCBox.checked = chrome.extension.getBackgroundPage().webRTCPrivacy;
}
// save and activate changes made in the view
function applyChanges() {
var allFilters = [];
var selector = document.getElementById("filterSelector");
for (var i = 0; i < selector.options.length; i++) {
allFilters[i] = selector.options[i].value;
}
var bgPage = chrome.extension.getBackgroundPage();
// make the changes, persist them to localStorage
bgPage.setFilters(allFilters);
// remove and re-add all listeners
bgPage.refreshFilters();
}
// add a new filter to the view
function addNew() {
var editBox = document.getElementById("newFilter");
var newFilter = editBox.value;
if (!newFilter) {
return;
}
var selector = document.getElementById("filterSelector");
var option = document.createElement("option");
option.text = editBox.value;
option.value = editBox.value;
selector.add(option, null);
editBox.value = null;
applyChanges();
}
// remove a filter, put it in the textbox for editing
function removeOrEdit() {
var selector = document.getElementById("filterSelector");
var index = selector.selectedIndex;
if (index == -1) {
return;
}
var removedOption = selector.options[index];
selector.remove(index);
var editBox = document.getElementById("newFilter");
editBox.value = removedOption.value;
applyChanges();
}
// put the filters from default_filters.js into the view
function restoreDefaults() {
// TODO clean this up after https://bugs.chromium.org/p/chromium/issues/detail?id=476350
if (!chrome.extension.getBackgroundPage().confirm("This will erase your custom filters. Are you sure?")) {
return;
}
var bgPage = chrome.extension.getBackgroundPage();
bgPage.setFilters(bgPage.defaultFilters);
bgPage.refreshFilters();
populate();
}
function exportFilters() {
var allFilters = chrome.extension.getBackgroundPage().allFilters;
document.getElementById("importExportFilters").value = JSON.stringify(allFilters);
}
function importFilters() {
var jsonFilters = document.getElementById("importExportFilters").value;
if (!jsonFilters) {
return;
}
try {
var filters = JSON.parse(jsonFilters);
var filtersLength = filters.length;
} catch (e) {
alert(e);
return;
}
if (!chrome.extension.getBackgroundPage().confirm("Your filters will be replaced by these " + filtersLength + " new filters. Are you sure?")) {
return;
}
var bgPage = chrome.extension.getBackgroundPage();
bgPage.setFilters(filters);
bgPage.refreshFilters();
populate();
}
function sortFilters() {
var bgPage = chrome.extension.getBackgroundPage();
var allFilters = bgPage.allFilters;
allFilters.sort();
// persist back to localStorage:
bgPage.setFilters(allFilters);
populate();
}
function init() {
populate();
document.getElementById("addNewButton").addEventListener('click', addNew);
document.getElementById("restoreDefaultsButton").addEventListener('click', restoreDefaults);
document.getElementById("roeButton").addEventListener('click', removeOrEdit);
document.getElementById("exportButton").addEventListener('click', exportFilters);
document.getElementById("importButton").addEventListener('click', importFilters);
document.getElementById("enableButton").addEventListener('click', function() {
chrome.extension.getBackgroundPage().enable();
})
document.getElementById("disableButton").addEventListener('click', function() {
chrome.extension.getBackgroundPage().disable();
})
document.getElementById("sortButton").addEventListener('click', sortFilters);
var webRTCBox = document.getElementById("webRTCBox")
webRTCBox.addEventListener('click', function() {
chrome.extension.getBackgroundPage().setWebRTCPrivacy(webRTCBox.checked);
});
}
document.addEventListener('DOMContentLoaded', init);