massive update, probably broken
[dotfiles/.git] / .config / chromium / Default / Extensions / lngfncacljheahfpahadgipefkbagpdl / 1.7.5_0 / js / UltraWide.js
1 "use strict";\r
2 \r
3 function addClass(v,c) {\r
4         for(let i=0,l=v.length,cl; i<l; i++) {\r
5                 cl = v[i].classList; cl.add(c);\r
6                 //console.log("[UltraWide] addClass",c,v[i]);\r
7         }\r
8 }\r
9 function remClass(v,c) {\r
10         for(let i=0,l=v.length,cl; i<l; i++) {\r
11                 cl = v[i].classList; if(cl.contains(c)) {\r
12                         cl.remove(c); //console.log("[UltraWide] remClass",c,v[i]);\r
13                 }\r
14         }\r
15 }\r
16 \r
17 UltraWide.prototype.update = function() {\r
18         //Calculate scale factor:\r
19         if(this.mode == 3 || this.mode == 4) this.scale = 1.33; //Force Modes\r
20         else if(screen.width / screen.height > 1.8) this.scale = screen.width / 1920; //If UltraWide\r
21         else this.scale = 1; //Default\r
22         \r
23         //Update Styles:\r
24         this.styles.innerHTML = ".extraClassAspect { -webkit-transform:scaleX("+this.scale+")!important; }\\r
25         .extraClassCrop { -webkit-transform:scale("+this.scale+")!important; }";\r
26         \r
27         //Update Classes:\r
28         const fs = document.webkitIsFullScreen, v = document.getElementsByTagName('video');\r
29         //console.log("[UltraWide] Page Update", this.mode, this.scale, fs);\r
30         if(v.length) switch(this.mode) {\r
31         case 0: //Disabled\r
32                 remClass(v,'extraClassAspect');\r
33                 remClass(v,'extraClassCrop');\r
34         break; case 1: //Aspect\r
35                 if(fs && this.scale > 1) {\r
36                         addClass(v,'extraClassAspect');\r
37                         remClass(v,'extraClassCrop');\r
38                 } else {\r
39                         remClass(v,'extraClassAspect');\r
40                         remClass(v,'extraClassCrop');\r
41                 }\r
42         break; case 2: //Crop\r
43                 if(fs && this.scale > 1) {\r
44                         addClass(v,'extraClassCrop');\r
45                         remClass(v,'extraClassAspect');\r
46                 } else {\r
47                         remClass(v,'extraClassAspect');\r
48                         remClass(v,'extraClassCrop');\r
49                 }\r
50         break; case 3: //Force Crop\r
51                 addClass(v,'extraClassCrop');\r
52                 remClass(v,'extraClassAspect');\r
53         break; case 4: //Force Aspect\r
54                 addClass(v,'extraClassAspect');\r
55                 remClass(v,'extraClassCrop');\r
56         break;\r
57         }\r
58         \r
59         //Update every 12s in fullscreen mode:\r
60         if(fs && this.mode && v.length) {\r
61                 if(this.timer != null) clearTimeout(this.timer);\r
62                 this.timer = setTimeout(function() { this.timer = null; this.update(); }.bind(this), 12000);\r
63         }\r
64 }\r
65 \r
66 function UltraWide() {\r
67         this.mode = 0;\r
68         document.addEventListener('fullscreenchange', function(e) {\r
69                 this.update();\r
70         }.bind(this));\r
71         document.addEventListener('keydown', function(e) {\r
72                 if(e.ctrlKey && e.altKey && e.key == 'c') {\r
73                         if(++this.mode > 2) this.mode = 0;\r
74                         //console.log("[UltraWide] Detected CTRL+ALT+C","Mode "+this.mode);\r
75                         chrome.storage.local.set({'extensionMode':this.mode}, function(){});\r
76                 }\r
77         }.bind(this));\r
78         this.styles = document.createElement('style');\r
79         document.head.appendChild(this.styles);\r
80 }\r
81 \r
82 function onLoad() {\r
83         if(!document.head) return;\r
84         const ultrawide = new UltraWide();\r
85         chrome.storage.local.get('extensionMode', function(status) {\r
86                 ultrawide.mode = status.extensionMode;\r
87                 if(status.extensionMode != 0) ultrawide.update();\r
88         });\r
89         chrome.storage.onChanged.addListener(function(changes) {\r
90                 ultrawide.mode = changes.extensionMode.newValue;\r
91                 ultrawide.update();\r
92         });\r
93         console.info("UltraWide Extension Loaded!");\r
94 }\r
95 \r
96 \r
97 \r
98 if(document.readyState == 'complete') onLoad();\r
99 else window.addEventListener('load', onLoad);