--- /dev/null
+"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