From 9b84b071d2c3fe4e1a49330a3ccec8ce77a265f3 Mon Sep 17 00:00:00 2001 From: Devine Lu Linvega Date: Sat, 15 Sep 2018 11:24:21 +1200 Subject: Minor cleanup --- benchmark/index.html | 114 ++--------------------------------------- benchmark/scripts/benchmark.js | 99 +++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 110 deletions(-) create mode 100644 benchmark/scripts/benchmark.js diff --git a/benchmark/index.html b/benchmark/index.html index ffd435e..680eec4 100644 --- a/benchmark/index.html +++ b/benchmark/index.html @@ -1,6 +1,7 @@ + @@ -8,7 +9,7 @@ Theme Benchmark -
+
@@ -18,117 +19,10 @@

diff --git a/benchmark/scripts/benchmark.js b/benchmark/scripts/benchmark.js
new file mode 100644
index 0000000..36c67a9
--- /dev/null
+++ b/benchmark/scripts/benchmark.js
@@ -0,0 +1,99 @@
+function Benchmark()
+{
+  function hex_to_rgb(c)
+  {
+    let rgb
+
+    if(c.length === 4 || c.length === 7){ c = c.slice(1) }
+
+    if(c.length === 3){
+      rgb = [ parseInt(c.slice(0, 1), 16) * 17, parseInt(c.slice(1, 2), 16) * 17, parseInt(c.slice(2, 3), 16) * 17 ]
+    }
+    else if(c.length === 6){
+      rgb = [ parseInt(c.slice(0, 2), 16), parseInt(c.slice(2, 4), 16), parseInt(c.slice(4, 6), 16) ]
+    }
+    return (!rgb || isNaN(rgb[0]) || isNaN(rgb[1]) || isNaN(rgb[2])) ? null : rgb
+  }
+
+  function wcag_contrast(c0, c1)
+  {
+    function _relative_luminance(rgb)
+    {
+      let r = _linear(rgb[0] / 256)
+      let g = _linear(rgb[1] / 256)
+      let b = _linear(rgb[2] / 256)
+      return 0.2126 * r + 0.7152 * g + 0.0722 * b
+    }
+
+    function _linear(v)
+    {
+      return (v <= 0.03928) ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4) 
+    }
+
+    function _contrast(c0, c1)
+    {
+      let l0 = _relative_luminance(c0)
+      let l1 = _relative_luminance(c1)
+      return l0 > l1 ? (l0 + 0.05) / (l1 + 0.05) : (l1 + 0.05) / (l0 + 0.05)
+    }
+
+    let ratio = _contrast(c0, c1)
+
+    return { 
+      ratio, 
+      aa: ratio > 4.5, 
+      aaa: ratio > 7.0,
+      large: {
+        aa: ratio > 3.0,
+        aaa: ratio > 4.5
+      }
+    }
+  }
+
+  this.refresh = function()
+  {
+    let el = document.getElementById('print')
+    let html = ""
+    let count = 0
+    for(let fid in theme.active){
+      if(fid.substr(0,1) != "f" || fid.indexOf("_inv") > -1){ continue; }
+      let fc = theme.active[fid]
+      for(let bid in theme.active){
+        if(bid.substr(0,1) != "b" || bid.indexOf("_inv") > -1){ continue; }
+        let bc = theme.active[bid]
+        if(fc != bc){
+          let frgb = hex_to_rgb(fc)
+          let brgb = hex_to_rgb(bc)
+          if(frgb && brgb){
+            let c = wcag_contrast(frgb, brgb)
+            document.querySelector(`.${fid}.${bid === 'background' ? 'bg' : bid}`).innerHTML += ` (${c.ratio.toFixed(1)} ${c.aaa ? '✓✓✓' : c.aa ? '✓✓' : c.large.aa ? '✓' : '✗'})`
+          }
+          else{
+            console.warn(`Unable to evaluate against WCAG 2.0: ${frgb} ${brgb}`)
+          }
+          
+          continue; 
+        }
+        html += `${fid} ${bid} ${bc}\n`
+        count += 1
+      }
+    }
+    if(theme.active.f_inv == theme.active.b_inv){
+      html += `f_inv b_inv ${theme.active.f_inv}\n`
+      count += 1
+    }
+    else
+    {
+      let frgb = hex_to_rgb(theme.active.f_inv)
+      let brgb = hex_to_rgb(theme.active.b_inv)
+      if(frgb && brgb){
+        let c = wcag_contrast(frgb, brgb)
+        document.querySelector(`.f_inv.b_inv`).innerHTML += ` (${c.ratio.toFixed(1)} ${c.aaa ? '✓✓✓' : c.aa ? '✓✓' : c.large.aa ? '✓' : '✗'})`
+      }
+      else{
+        console.warn(`Unable to evaluate against WCAG 2.0: ${frgb} ${brgb}`)
+      }
+    }
+    el.innerHTML = count > 0 ? html+`\n${count} conflicts` : '';
+  }
+}
\ No newline at end of file
-- 
cgit v1.2.3

bg f_highb_low f_highb_med f_highb_high f_high
bg f_med b_low f_med b_med f_med b_high f_med