This repository was archived by the owner on Jan 7, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoptions.js
81 lines (66 loc) · 3.08 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
/*
Copyright 2018 Victor Engmark
This file is part of Insecure Links Highlighter.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
function saveOptions(event) {
event.preventDefault();
let borderColorElement = document.querySelector('#borderColor'),
borderColor = borderColorElement.value,
borderColorMessageElementId = 'borderColorMessage',
messageElement = document.querySelector('#' + borderColorMessageElementId);
if (messageElement !== null) {
messageElement.remove();
}
if (!isValidColorString(borderColor)) {
let messageElement = document.createElement('p'),
message = browser.i18n.getMessage('invalidBorderColorMessage', borderColor),
messageTextNode = document.createTextNode(message);
messageElement.id = borderColorMessageElementId;
messageElement.classList.add('error');
messageElement.appendChild(messageTextNode);
borderColorElement.parentElement.parentElement.insertAdjacentElement('afterend', messageElement);
return;
}
browser.storage.local.set({
borderColor: borderColor,
elementsWithEventHandlersAreInsecure: document.querySelector('#elementsWithEventHandlersAreInsecure').checked,
});
}
function restoreOptions() {
browser.storage.local
.get(defaultOptions)
.then(setOptions, onError);
function setOptions(options) {
document.querySelector('#borderColor').value = options.borderColor;
if (options.elementsWithEventHandlersAreInsecure) {
document.querySelector('#elementsWithEventHandlersAreInsecure').setAttribute('checked', 'checked');
}
}
function onError(error) {
throw error;
}
}
function setDefaultsAndRestoreOptions() {
browser.storage.local.set(defaultOptions);
restoreOptions();
}
function isValidColorString(color) {
if (['', 'inherit', 'transparent'].includes(color)) {
return false;
}
let imageElement = document.createElement('img');
imageElement.style.color = 'rgb(0, 0, 0)';
imageElement.style.color = color;
if (imageElement.style.color !== 'rgb(0, 0, 0)') {
return true;
}
imageElement.style.color = 'rgb(255, 255, 255)';
imageElement.style.color = color;
return imageElement.style.color !== 'rgb(255, 255, 255)';
}
document.addEventListener('DOMContentLoaded', restoreOptions);
document.querySelector('form').addEventListener('submit', saveOptions);
document.querySelector('form').addEventListener('reset', setDefaultsAndRestoreOptions);