// ==UserScript== // @name Fix input fields // @namespace snake66 // @description Fix input fields with unreadable text // @include http://*/* // @include https://*/* // @version 2 // @grant none // ==/UserScript== // // Greasemonkey userscript to fix invisible input fields on websites with bad css. // Copyright (C) 2019 Harald Eilertsen // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . function normalizedColor(color) { let argstart = color.indexOf("(") + 1; let arglen = color.lastIndexOf(")") - argstart; let type = color.substr(0, argstart - 1); let args = color.substr(argstart, arglen).split(", ").map(function(v) { return parseInt(v); }); return {type: type, val: args} } function isBright(color) { if (!color || color == "") return false; let c = normalizedColor(color); if (c.type != "rgb") return false; let avg = (c.val[0] + c.val[1] + c.val[2]) / 3; return avg > 90; } function fixInputFields() { let inputs = document.getElementsByTagName("input"); console.log("Fix input fields found " + inputs.length + " inputs..."); for (let i = 0; i < inputs.length; i++) { let input = inputs[i]; let style = getComputedStyle(input); let fg = style.getPropertyValue("color"); let bg = style.getPropertyValue("background-color"); let image = style.getPropertyValue("background-image"); if (image) { input.style.backgroundImage = "none"; } if (isBright(bg)) { if (isBright(fg)) { input.style.color = "darkslategray"; } } else if (!isBright(fg)) { input.style.color = "lightgray"; } } console.log("Fix input fields end..."); } fixInputFields();