-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackground.js
76 lines (59 loc) · 2.94 KB
/
background.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
const shadeBlendConvert = function (p, from, to) {
if(typeof(p)!="number"||p<-1||p>1||typeof(from)!="string"||(from[0]!='r'&&from[0]!='#')||(to&&typeof(to)!="string"))return null; //ErrorCheck
if(!this.sbcRip)this.sbcRip=(d)=>{
let l=d.length,RGB={};
if(l>9){
d=d.split(",");
if(d.length<3||d.length>4)return null;//ErrorCheck
RGB[0]=i(d[0].split("(")[1]),RGB[1]=i(d[1]),RGB[2]=i(d[2]),RGB[3]=d[3]?parseFloat(d[3]):-1;
}else{
if(l==8||l==6||l<4)return null; //ErrorCheck
if(l<6)d="#"+d[1]+d[1]+d[2]+d[2]+d[3]+d[3]+(l>4?d[4]+""+d[4]:""); //3 or 4 digit
d=i(d.slice(1),16),RGB[0]=d>>16&255,RGB[1]=d>>8&255,RGB[2]=d&255,RGB[3]=-1;
if(l==9||l==5)RGB[3]=r((RGB[2]/255)*10000)/10000,RGB[2]=RGB[1],RGB[1]=RGB[0],RGB[0]=d>>24&255;
}
return RGB;}
var i=parseInt,r=Math.round,h=from.length>9,h=typeof(to)=="string"?to.length>9?true:to=="c"?!h:false:h,b=p<0,p=b?p*-1:p,to=to&&to!="c"?to:b?"#000000":"#FFFFFF",f=this.sbcRip(from),t=this.sbcRip(to);
if(!f||!t)return null; //ErrorCheck
if(h)return "rgb"+(f[3]>-1||t[3]>-1?"a(":"(")+r((t[0]-f[0])*p+f[0])+","+r((t[1]-f[1])*p+f[1])+","+r((t[2]-f[2])*p+f[2])+(f[3]<0&&t[3]<0?")":","+(f[3]>-1&&t[3]>-1?r(((t[3]-f[3])*p+f[3])*10000)/10000:t[3]<0?f[3]:t[3])+")");
else return "#"+(0x100000000+r((t[0]-f[0])*p+f[0])*0x1000000+r((t[1]-f[1])*p+f[1])*0x10000+r((t[2]-f[2])*p+f[2])*0x100+(f[3]>-1&&t[3]>-1?r(((t[3]-f[3])*p+f[3])*255):t[3]>-1?r(t[3]*255):f[3]>-1?r(f[3]*255):255)).toString(16).slice(1,f[3]>-1||t[3]>-1?undefined:-2);
}
let theme = null;
class containersTheme {
constructor() {
browser.tabs.onActivated.addListener((activeInfo) => {
this.updateTabContainerTheme(activeInfo.tabId, activeInfo.windowId);
});
}
isUnpaintedTheme(currentCookieStore) {
return (currentCookieStore == "firefox-default" ||
currentCookieStore == "firefox-private");
}
async updateTabContainerTheme(tabId, windowId) {
if (theme == null) {
theme = await browser.theme.getCurrent();
} else {
var newTheme = await browser.theme.getCurrent();
if (newTheme.colors.frame != theme.colors.frame){
theme = JSON.parse(JSON.stringify(newTheme));
}
}
if (theme.colors == null) { return; }
let extensionSettings = await browser.storage.sync.get();
var tab = await browser.tabs.get(tabId);
if (!this.isUnpaintedTheme(tab.cookieStoreId)) {
var themeInfo = JSON.parse(JSON.stringify(theme));
var container = await browser.contextualIdentities.get(tab.cookieStoreId);
var toolbarColor = shadeBlendConvert(-0.6, container.colorCode);
themeInfo.colors.toolbar = toolbarColor;
themeInfo.colors.tab_line = toolbarColor;
if(extensionSettings.urlBox) {
themeInfo.colors.toolbar_field = toolbarColor;
}
browser.theme.update(windowId, themeInfo);
} else {
browser.theme.update(windowId, theme);
}
}
}
new containersTheme();