aboutsummaryrefslogtreecommitdiff
path: root/guidelines/accessibility/guideline-2.js
blob: 7dcf28d31fdb75f56a2b14e06491af2c218e60fa (plain)
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
exports.name        = "colorDifference";
exports.description = "Elements should provide sufficient color difference";
exports.rule        = function(report) {

  /* Checkpoint 2.1 ***********************************************************/

  // TODO: not sure about the best way to test that information isn't hidden
  // when colors go away.


  /* Checkpoint 2.2 ***********************************************************/

  var fc = fiveui.color;
  var MIN_COLOR_DIFF = 500; // http://www.w3.org/TR/2000/WD-AERT-20000426#color

  /**
   * Return the absolute "color difference" between two * given RGB color
   * objects.
   * Input is two RGB color objects.
   */
  var colorDiff = function (c1, c2) {
    return Math.abs(c1.r - c2.r) +
           Math.abs(c1.g - c2.g) +
           Math.abs(c1.b - c2.b);
  };

  fiveui.query('*')
    .filter(function () {  // filter for lowest level elts having non-empty text
      var $this = $(this);
      return $this.children().length == 0 && $.trim($this.text()).length > 0;
    })
    .each(function (i) {
      // TODO take into account fg alpha values
      var fg = fc.colorToRGB($(this).css('color'));
      var bg = fc.findBGColor($(this));
      if (fg && bg) {
        var diff = colorDiff(fg, bg);
        if (diff < MIN_COLOR_DIFF) {
          report.error('Element has poor color difference: ' + diff, this);
        }
      }
  });
};