massive update, probably broken
[dotfiles/.git] / .config / chromium / Default / Extensions / lngfncacljheahfpahadgipefkbagpdl / 1.7.5_0 / js / UltraWide.js
diff --git a/.config/chromium/Default/Extensions/lngfncacljheahfpahadgipefkbagpdl/1.7.5_0/js/UltraWide.js b/.config/chromium/Default/Extensions/lngfncacljheahfpahadgipefkbagpdl/1.7.5_0/js/UltraWide.js
new file mode 100644 (file)
index 0000000..093f8b7
--- /dev/null
@@ -0,0 +1,99 @@
+"use strict";\r
+\r
+function addClass(v,c) {\r
+       for(let i=0,l=v.length,cl; i<l; i++) {\r
+               cl = v[i].classList; cl.add(c);\r
+               //console.log("[UltraWide] addClass",c,v[i]);\r
+       }\r
+}\r
+function remClass(v,c) {\r
+       for(let i=0,l=v.length,cl; i<l; i++) {\r
+               cl = v[i].classList; if(cl.contains(c)) {\r
+                       cl.remove(c); //console.log("[UltraWide] remClass",c,v[i]);\r
+               }\r
+       }\r
+}\r
+\r
+UltraWide.prototype.update = function() {\r
+       //Calculate scale factor:\r
+       if(this.mode == 3 || this.mode == 4) this.scale = 1.33; //Force Modes\r
+       else if(screen.width / screen.height > 1.8) this.scale = screen.width / 1920; //If UltraWide\r
+       else this.scale = 1; //Default\r
+       \r
+       //Update Styles:\r
+       this.styles.innerHTML = ".extraClassAspect { -webkit-transform:scaleX("+this.scale+")!important; }\\r
+       .extraClassCrop { -webkit-transform:scale("+this.scale+")!important; }";\r
+       \r
+       //Update Classes:\r
+       const fs = document.webkitIsFullScreen, v = document.getElementsByTagName('video');\r
+       //console.log("[UltraWide] Page Update", this.mode, this.scale, fs);\r
+       if(v.length) switch(this.mode) {\r
+       case 0: //Disabled\r
+               remClass(v,'extraClassAspect');\r
+               remClass(v,'extraClassCrop');\r
+       break; case 1: //Aspect\r
+               if(fs && this.scale > 1) {\r
+                       addClass(v,'extraClassAspect');\r
+                       remClass(v,'extraClassCrop');\r
+               } else {\r
+                       remClass(v,'extraClassAspect');\r
+                       remClass(v,'extraClassCrop');\r
+               }\r
+       break; case 2: //Crop\r
+               if(fs && this.scale > 1) {\r
+                       addClass(v,'extraClassCrop');\r
+                       remClass(v,'extraClassAspect');\r
+               } else {\r
+                       remClass(v,'extraClassAspect');\r
+                       remClass(v,'extraClassCrop');\r
+               }\r
+       break; case 3: //Force Crop\r
+               addClass(v,'extraClassCrop');\r
+               remClass(v,'extraClassAspect');\r
+       break; case 4: //Force Aspect\r
+               addClass(v,'extraClassAspect');\r
+               remClass(v,'extraClassCrop');\r
+       break;\r
+       }\r
+       \r
+       //Update every 12s in fullscreen mode:\r
+       if(fs && this.mode && v.length) {\r
+               if(this.timer != null) clearTimeout(this.timer);\r
+               this.timer = setTimeout(function() { this.timer = null; this.update(); }.bind(this), 12000);\r
+       }\r
+}\r
+\r
+function UltraWide() {\r
+       this.mode = 0;\r
+       document.addEventListener('fullscreenchange', function(e) {\r
+               this.update();\r
+       }.bind(this));\r
+       document.addEventListener('keydown', function(e) {\r
+               if(e.ctrlKey && e.altKey && e.key == 'c') {\r
+                       if(++this.mode > 2) this.mode = 0;\r
+                       //console.log("[UltraWide] Detected CTRL+ALT+C","Mode "+this.mode);\r
+                       chrome.storage.local.set({'extensionMode':this.mode}, function(){});\r
+               }\r
+       }.bind(this));\r
+       this.styles = document.createElement('style');\r
+       document.head.appendChild(this.styles);\r
+}\r
+\r
+function onLoad() {\r
+       if(!document.head) return;\r
+       const ultrawide = new UltraWide();\r
+       chrome.storage.local.get('extensionMode', function(status) {\r
+               ultrawide.mode = status.extensionMode;\r
+               if(status.extensionMode != 0) ultrawide.update();\r
+       });\r
+       chrome.storage.onChanged.addListener(function(changes) {\r
+               ultrawide.mode = changes.extensionMode.newValue;\r
+               ultrawide.update();\r
+       });\r
+       console.info("UltraWide Extension Loaded!");\r
+}\r
+\r
+\r
+\r
+if(document.readyState == 'complete') onLoad();\r
+else window.addEventListener('load', onLoad);
\ No newline at end of file