/
syncOptions.js
69 lines (61 loc) · 1.77 KB
/
syncOptions.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
import { onMessage, sendToBg, sendToTab } from 'crossmessaging';
let options;
const save = (key, value) => {
let obj = {};
obj[key] = value;
chrome.storage.sync.set(obj);
options[key] = value;
if (window.store.id) sendToTab(window.store.id, { options: options });
};
const get = callback => {
if (options) callback(options);
else {
chrome.storage.sync.get({
leftMonitor: 'LogMonitor',
rightMonitor: 'LogMonitor',
bottomMonitor: 'SliderMonitor',
limit: 50,
filter: false,
whitelist: '',
blacklist: '',
serialize: true,
notifyErrors: true,
inject: true,
urls: '^https?://localhost|0\\.0\\.0\\.0:\\d+\n^https?://.+\\.github\\.io'
}, function(items) {
options = items;
callback(items);
});
}
};
const toArray = str => (
str !== '' ? str.split('\n') : null
);
const injectOptions = newOptions => {
if (!newOptions) return;
if (newOptions.filter) {
newOptions.whitelist = toArray(newOptions.whitelist);
newOptions.blacklist = toArray(newOptions.blacklist);
}
options = newOptions;
let s = document.createElement('script');
s.type = 'text/javascript';
s.appendChild(document.createTextNode('window.devToolsOptions=' + JSON.stringify(options)));
s.onload = function() {
this.parentNode.removeChild(this);
};
(document.head || document.documentElement).appendChild(s);
};
export const getOptionsFromBg = () => {
sendToBg({ type: 'GET_OPTIONS' }, response => {
injectOptions(response.options);
});
onMessage(message => { injectOptions(message.options); });
};
export const isAllowed = (localOptions = options) => (
!localOptions || localOptions.inject || location.href.match(localOptions.urls.split('\n').join('|'))
);
export default {
save: save,
get: get
};