Index: ui/accessibility/extensions/colorenhancer/src/cvd.js |
diff --git a/ui/accessibility/extensions/colorenhancer/src/cvd.js b/ui/accessibility/extensions/colorenhancer/src/cvd.js |
index 59a92db368f4c80793d0fd34ad72818198c1e643..6bbf47a116a0bc1ea2572c92f7ef8d167ee262bc 100644 |
--- a/ui/accessibility/extensions/colorenhancer/src/cvd.js |
+++ b/ui/accessibility/extensions/colorenhancer/src/cvd.js |
@@ -7,13 +7,43 @@ |
* Global exports. Used by popup to show effect of filter during setup. |
*/ |
(function(exports) { |
+ // TODO(wnwen): Replace var with let. |
var curDelta = 0; |
var curSeverity = 0; |
var curType = 'PROTANOMALY'; |
var curSimulate = false; |
var curEnable = false; |
var curFilter = 0; |
+ var cssTemplate = ` |
+html[cvd="0"] { |
+ -webkit-filter: url('#cvd_extension_0'); |
+} |
+html[cvd="1"] { |
+ -webkit-filter: url('#cvd_extension_1'); |
+} |
+`; |
+ /** @const {string} */ |
+ var SVG_DEFAULT_MATRIX = |
+ '1 0 0 0 0 ' + |
+ '0 1 0 0 0 ' + |
+ '0 0 1 0 0 ' + |
+ '0 0 0 1 0'; |
+ |
+ var svgContent = ` |
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> |
+ <defs> |
+ <filter x="0" y="0" width="99999" height="99999" id="cvd_extension_0"> |
+ <feColorMatrix id="cvd_matrix_0" type="matrix" values=" |
+ ${SVG_DEFAULT_MATRIX}"/> |
+ </filter> |
+ <filter x="0" y="0" width="99999" height="99999" id="cvd_extension_1"> |
+ <feColorMatrix id="cvd_matrix_1" type="matrix" values=" |
+ ${SVG_DEFAULT_MATRIX}"/> |
+ </filter> |
+ </defs> |
+</svg> |
+`; |
// ======= 3x3 matrix ops ======= |
@@ -302,35 +332,27 @@ |
// ======= Page linker ======= |
- /** @const {string} */ |
- var SVG_DEFAULT_MATRIX = |
- '1 0 0 0 0 ' + |
- '0 1 0 0 0 ' + |
- '0 0 1 0 0 ' + |
- '0 0 0 1 0'; |
- |
- var svgContent = |
- '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">' + |
- ' <defs>' + |
- ' <filter id="cvd_extension_0">' + |
- ' <feColorMatrix id="cvd_matrix_0" type="matrix" values="' + |
- SVG_DEFAULT_MATRIX + '"/>' + |
- ' </filter>' + |
- ' <filter id="cvd_extension_1">' + |
- ' <feColorMatrix id="cvd_matrix_1" type="matrix" values="' + |
- SVG_DEFAULT_MATRIX + '"/>' + |
- ' </filter>' + |
- ' </defs>' + |
- '</svg>'; |
+ const STYLE_ID = 'cvd_style'; |
+ const WRAP_ID = 'cvd_extension_svg_filter'; |
/** |
- * Checks for svg filter matrix presence and append to DOM if not present. |
+ * Checks for required elements, adding if missing. |
*/ |
- function addSvgIfMissing() { |
- var wrap = document.getElementById('cvd_extension_svg_filter'); |
+ function addElements() { |
+ var style = document.getElementById(STYLE_ID); |
+ if (!style) { |
+ var baseUrl = window.location.href.replace(window.location.hash, ''); |
+ style = document.createElement('style'); |
+ style.id = STYLE_ID; |
+ style.setAttribute('type', 'text/css'); |
+ style.innerHTML = cssTemplate.replace(/#/g, baseUrl + '#'); |
+ document.head.appendChild(style); |
+ } |
+ |
+ var wrap = document.getElementById(WRAP_ID); |
if (!wrap) { |
wrap = document.createElement('span'); |
- wrap.id = 'cvd_extension_svg_filter'; |
+ wrap.id = WRAP_ID; |
wrap.setAttribute('hidden', ''); |
wrap.innerHTML = svgContent; |
document.body.appendChild(wrap); |
@@ -342,7 +364,7 @@ |
* @param {!Object} matrix 3x3 RGB transformation matrix. |
*/ |
function setFilter(matrix) { |
- addSvgIfMissing(); |
+ addElements(); |
var next = 1 - curFilter; |
debugPrint('update: matrix#' + next + '=' + |