aboutsummaryrefslogtreecommitdiffstats
path: root/fix-input-fields.js
blob: 2c7c83ec815146bd273249df00cb1d37e5f2dbbf (plain) (blame)
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
77
78
// ==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 <https://www.gnu.org/licenses/>.

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();