From feac8bb8f41c0db37427792c5b2f9d8244d3072b Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Wed, 14 Oct 2015 09:58:32 -0400 Subject: [PATCH] (js) Compute contrast color for background color --- .../js/Common/sgFolderStylesheet.directive.js | 82 +++++++++++++++++-- .../scss/views/SchedulerUI.scss | 2 +- 2 files changed, 75 insertions(+), 9 deletions(-) diff --git a/UI/WebServerResources/js/Common/sgFolderStylesheet.directive.js b/UI/WebServerResources/js/Common/sgFolderStylesheet.directive.js index e6888e015..f4a30a887 100644 --- a/UI/WebServerResources/js/Common/sgFolderStylesheet.directive.js +++ b/UI/WebServerResources/js/Common/sgFolderStylesheet.directive.js @@ -1,6 +1,7 @@ /* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ (function() { + /* jshint validthis: true */ 'use strict'; /* @@ -22,23 +23,88 @@ scope: { ngModel: '=' }, + bindToController: true, + controller: sgFolderStylesheetController, + controllerAs: 'cssCtrl', template: [ '' ].join('') }; + + function sgFolderStylesheetController() { + var vm = this; + + vm.contrast = contrast; + + function hexToRgb(hex) { + var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result ? { + r: parseInt(result[1], 16), + g: parseInt(result[2], 16), + b: parseInt(result[3], 16) + } : null; + } + + // Respect contrast ratio recommendation from W3C: + // http://www.w3.org/TR/WCAG20/#contrast-ratiodef + function contrast(hex) { + var color, c, l; + + color = hexToRgb(hex); + c = [color.r / 255, color.g / 255, color.b / 255]; + + for (var i = 0; i < c.length; ++i) { + if (c[i] <= 0.03928) { + c[i] = c[i] / 12.92; + } + else { + c[i] = Math.pow((c[i] + 0.055) / 1.055, 2.4); + } + } + + l = 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2]; + + if (l > 0.179) { + return 'black'; + } + else { + return 'white'; + } + } + } } angular diff --git a/UI/WebServerResources/scss/views/SchedulerUI.scss b/UI/WebServerResources/scss/views/SchedulerUI.scss index 0ad9b2c00..a85b86de5 100644 --- a/UI/WebServerResources/scss/views/SchedulerUI.scss +++ b/UI/WebServerResources/scss/views/SchedulerUI.scss @@ -163,7 +163,7 @@ $scrollbar_width: 16px; .sg-event { font-size: $sg-font-size-2; &, md-icon { - color: #fff !important; // Overwrite dynamic CSS theme + //color: #fff !important; // Overwrite dynamic CSS theme } .material-icons { font-size: $sg-font-size-2;