-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathpopup.js
More file actions
121 lines (112 loc) · 2.95 KB
/
Copy pathpopup.js
File metadata and controls
121 lines (112 loc) · 2.95 KB
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
function each(arr, act){
var i;
for(i=0; i<arr.length; ++i)
act(arr[i], i);
}
function rgb2hsv(_rgb){
var rgb = [];
var M = 0;
var m = 1;
var i;
for(i=0; i<3; ++i){
rgb[i] = _rgb[i] / 255;
if( rgb[i] < m ) m = rgb[i];
if( rgb[i] > M ) M = rgb[i];
}
var c = M - m;
var h, hh;
if( c == 0 )
hh = 0;
else if( M == rgb[0] )
hh = (rgb[1]-rgb[2]) / c % 6;
else if( M == rgb[1] )
hh = (rgb[2]-rgb[0]) / c + 2;
else
hh = (rgb[0]-rgb[1]) / c + 4;
h = hh / 6;
var v = M;
var s;
if( v == 0 )
s = 0;
else
s = c / v;
return [h, s, v];
};
function protect_eyes(hsv, threshold){
if( hsv[1] * hsv[2] > threshold ){
var factor = Math.sqrt(threshold/(hsv[1]*hsv[2]));
return [hsv[0], factor*hsv[1], factor*hsv[2]];
}
return hsv;
}
function hsv2rgb(h, s, v){
var c = v * s;
var m = v - c;
var hh = h*6;
var x = c * (1 - Math.abs(hh % 2 - 1));
var r, g, b;
if( hh < 1 )
r=c, g=x, b=0;
else if( hh < 2 )
r=x, g=c, b=0;
else if( hh < 3 )
r=0, g=c, b=x;
else if( hh < 4 )
r=0, g=x, b=c;
else if( hh < 5 )
r=x, g=0, b=c;
else
r=c, g=0, b=x;
r += m;
g += m;
b += m;
return [r*255|0,g*255|0,b*255|0];
};
function preview(bright_threshold, color_shift){
each(document.querySelectorAll('tr'), function(tr){
var match = tr.firstChild.style.getPropertyValue('background-color').match(/rgba?\s*\(\s*(\d+\.?\d*)\s*,\s*(\d+\.?\d*)\s*,\s*(\d+\.?\d*)/);
match.shift();
var hsv = protect_eyes(rgb2hsv(match), bright_threshold/1000);
var hue = hsv[0] - color_shift/1000;
if( hue < 0 )
hue += 1;
var rgb = hsv2rgb(hue, hsv[1], hsv[2]);
tr.lastChild.style.setProperty('background-color', 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')');
});
}
var bright_slider = document.querySelector('#bright');
var color_slider = document.querySelector('#color');
bright_slider.oninput = color_slider.oninput = function(){
preview(bright_slider.value, color_slider.value);
};
document.querySelector('#default_btn').onclick = function(){
bright_slider.value = 450;
color_slider.value = 300;
preview(bright_slider.value, color_slider.value);
};
document.querySelector('#commit_btn').onclick = function(){
chrome.storage.sync.set({bright: bright_slider.value, color: color_slider.value}, function(){
chrome.runtime.sendMessage({act: 'reload'});
chrome.tabs.query({}, function(tabs){
var waiting = tabs.length;
each(tabs, function(tab){
chrome.tabs.sendMessage(tab.id, {act: 'reload'}, function(e){
--waiting;
if( waiting==0 )
window.close();
});
});
});
});
};
chrome.storage.sync.get(['bright','color'], function(items){
if( 'bright' in items )
bright_slider.value = items.bright;
else
bright_slider.value = 450;
if( 'color' in items )
color_slider.value = items.color;
else
color_slider.value = 300;
preview(bright_slider.value, color_slider.value);
});