Commit bd02f0f66a2c2347166c7fdaa09ba36afab338f6

Authored by Leonardo Merlin
1 parent 3e7217e8

Fixes #1

src/app/components/a11y-bar/a11y-bar.html
... ... @@ -16,7 +16,7 @@
16 16 </a>
17 17 </li>
18 18 <li>
19   - <a class="color-theme-common-fg" accesskey="3" id="skip-to-search" ui-sref="inicio({scroll:'lista-de-programas'})" ui-sref-opts="{reload: true}">
  19 + <a class="color-theme-common-fg" accesskey="3" id="skip-to-search" href="#search" ng-click="focusOnSearch($event)">
20 20 Ir para a busca
21 21 <span class="color-theme-common-bg">3</span>
22 22 </a>
... ...
src/app/index.run.js
... ... @@ -7,7 +7,7 @@
7 7 .run(runAccessibility)
8 8 .run(runAuth)
9 9 .run(runCaptcha)
10   - .run(runColorUtils)
  10 + // .run(runColorUtils)
11 11 .run(runHistory)
12 12 .run(runPath)
13 13 .run(runSocialAuth)
... ... @@ -16,6 +16,118 @@
16 16 .run(runBlock);
17 17  
18 18 /** @ngInject */
  19 + function runAccessibility($rootScope, $timeout, $interval, $cookies, $state, $log) {
  20 +
  21 + var contrast = $cookies.get('dialoga_contraste') === 'true';
  22 + adjustContrast(contrast);
  23 +
  24 + function adjustContrast(state) {
  25 + var bodyEl = angular.element(document).find('body');
  26 + angular.element(bodyEl).toggleClass('contraste', !!state);
  27 + }
  28 +
  29 + $rootScope.actionContrast = function() {
  30 + // toggle contrast
  31 + contrast = !contrast;
  32 + $cookies.put('dialoga_contraste', contrast);
  33 + adjustContrast(contrast);
  34 + };
  35 +
  36 + $rootScope.focusOn = function(elId, $event) {
  37 + var el = angular.element(elId);
  38 + $rootScope.scrollTo(el, $event);
  39 + el.attr('tabIndex', -1).focus();
  40 + };
  41 +
  42 + $rootScope.focusMainContent = function($event) {
  43 +
  44 + var mainContentArea = document.querySelector('[role="main"]');
  45 +
  46 + if (mainContentArea) {
  47 + $timeout(function() {
  48 + $rootScope.scrollTo(angular.element(mainContentArea), $event);
  49 + }, 90); // force queue
  50 + } else {
  51 + $log.info('role="main" not found.');
  52 + }
  53 + };
  54 +
  55 + $rootScope.focusOnSearch = function($event) {
  56 +
  57 + // prevent skip link from redirecting
  58 + if ($event) { $event.preventDefault(); }
  59 +
  60 + // find a input search
  61 + var $searchEl = angular.element('input[type="search"]:visible');
  62 +
  63 + if($searchEl && $searchEl.length > 0){
  64 + // scroll
  65 + angular.element('html,body').animate({scrollTop: $searchEl.offset().top}, 'fast');
  66 + // focus
  67 + $searchEl.focus();
  68 + } else {
  69 + // input search not found
  70 +
  71 + // 1. redirect to home
  72 + var promise = $state.go('inicio', { reload: true});
  73 +
  74 + // 2. focus on input search at home.
  75 + promise.then(function(){
  76 +
  77 + findElAsync('input[type="search"]:visible', function ($el) {
  78 + // scroll
  79 + angular.element('html,body').animate({scrollTop: $el.offset().top}, 'fast');
  80 + // focus
  81 + $el.focus();
  82 + });
  83 + });
  84 + }
  85 +
  86 + // use jQuery and $interval to find element async.
  87 + function findElAsync(query, cb, delay, max_exec) {
  88 + delay = delay || 200;
  89 + max_exec = max_exec || 20;
  90 + var count_exec = 0;
  91 +
  92 + var stop = null;
  93 + stop = $interval(function() {
  94 + var $el = angular.element(query);
  95 +
  96 + if ($el && $el.length > 0) {
  97 + cb($el);
  98 + }else {
  99 + $log.debug('[findElAsync] element not found.');
  100 + }
  101 +
  102 + count_exec++;
  103 +
  104 + if (count_exec >= max_exec){
  105 + $interval.cancel(stop);
  106 + stop = undefined;
  107 + }
  108 +
  109 + }, delay);
  110 + }
  111 +
  112 + $log.debug('TODO: focusOnSearch');
  113 + };
  114 +
  115 + $rootScope.scrollTo = function(target, $event) {
  116 +
  117 + // prevent skip link from redirecting
  118 + if ($event) { $event.preventDefault(); }
  119 +
  120 + if (angular.isString(target)) {
  121 + target = angular.element(target);
  122 + }
  123 +
  124 + angular.element('html,body').animate({scrollTop: target.offset().top}, 'fast');
  125 + };
  126 +
  127 + $log.debug('[RUN] Accessibility end.');
  128 + }
  129 +
  130 + /** @ngInject */
19 131 function runAuth($rootScope, $localStorage, USER_ROLES, AUTH_EVENTS, AuthService, $log) {
20 132  
21 133 // Listner url/state changes, and check permission
... ... @@ -82,89 +194,32 @@
82 194 $log.debug('runCaptcha');
83 195 }
84 196  
85   - /** @ngInject */
86   - function runSocialAuth($window, $rootScope, $interval) {
  197 + // /** @ngInject */
  198 + // function runColorUtils($window) {
87 199  
88   - $window.oauthClientAction = function(url) {
89   - var child = $window.open(url, '_blank');
90   - var interval = $interval(function() {
91   - try {
92   - if (!child.closed) {
93   - child.postMessage({
94   - message: 'requestOauthClientPluginResult'
95   - }, '*');
96   - }
97   - } catch (e) {
98   - // we're here when the child window has been navigated away or closed
99   - if (child.closed) {
100   - $interval.cancel(interval);
101   - interval = undefined;
102   - }
103   - }
104   - }, 300);
105   - };
  200 + // $window.ColorLuminance = function(hex, lum) {
106 201  
107   - $window.addEventListener('message', function(eventMessage) {
108   - // $log.debug('eventMessage', eventMessage);
  202 + // // validate hex string
  203 + // hex = String(hex).replace(/[^0-9a-f]/gi, '');
  204 + // if (hex.length < 6) {
  205 + // hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
  206 + // }
  207 + // lum = lum || 0;
109 208  
110   - if (eventMessage.data.message === 'oauthClientPluginResult') {
111   - $rootScope.$broadcast('oauthClientPluginResult', eventMessage);
112   - // eventMessage.source.close();
113   - }
114   - });
115   - }
  209 + // // convert to decimal and change luminosity
  210 + // var rgb = '#';
  211 + // var c;
  212 + // var i;
116 213  
117   - /** @ngInject */
118   - function runAccessibility($rootScope, $timeout, $cookies, $log) {
119   -
120   - var contrast = $cookies.get('dialoga_contraste') === 'true';
121   - adjustContrast(contrast);
  214 + // for (i = 0; i < 3; i++) {
  215 + // c = parseInt(hex.substr(i * 2, 2), 16);
  216 + // c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);
  217 + // rgb += ('00' + c).substr(c.length);
  218 + // }
122 219  
123   - function adjustContrast(state) {
124   - var bodyEl = angular.element(document).find('body');
125   - angular.element(bodyEl).toggleClass('contraste', !!state);
126   - }
127   -
128   - $rootScope.actionContrast = function() {
129   - // toggle contrast
130   - contrast = !contrast;
131   - $cookies.put('dialoga_contraste', contrast);
132   - adjustContrast(contrast);
133   - };
134   -
135   - $rootScope.focusOn = function(elId, $event) {
136   - var el = angular.element(elId);
137   - $rootScope.scrollTo(el, $event);
138   - el.attr('tabIndex', -1).focus();
139   - };
140   -
141   - $rootScope.focusMainContent = function($event) {
142   -
143   - var mainContentArea = document.querySelector('[role="main"]');
144   -
145   - if (mainContentArea) {
146   - $timeout(function() {
147   - $rootScope.scrollTo(angular.element(mainContentArea), $event);
148   - }, 90); // force queue
149   - } else {
150   - $log.info('role="main" not found.');
151   - }
152   - };
153   -
154   - $rootScope.scrollTo = function(target, $event) {
155   -
156   - // prevent skip link from redirecting
157   - if ($event) { $event.preventDefault(); }
158   -
159   - if (angular.isString(target)) {
160   - target = angular.element(target);
161   - }
162   -
163   - angular.element('body').animate({scrollTop: target.offset().top}, 'fast');
164   - };
165   -
166   - $log.debug('[RUN] Accessibility end.');
167   - }
  220 + // return rgb;
  221 + // };
  222 + // }
168 223  
169 224 /** @ngInject */
170 225 function runHistory($rootScope) {
... ... @@ -188,30 +243,35 @@
188 243 }
189 244  
190 245 /** @ngInject */
191   - function runColorUtils($window) {
192   -
193   - $window.ColorLuminance = function(hex, lum) {
  246 + function runSocialAuth($window, $rootScope, $interval) {
194 247  
195   - // validate hex string
196   - hex = String(hex).replace(/[^0-9a-f]/gi, '');
197   - if (hex.length < 6) {
198   - hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
199   - }
200   - lum = lum || 0;
  248 + $window.oauthClientAction = function(url) {
  249 + var child = $window.open(url, '_blank');
  250 + var interval = $interval(function() {
  251 + try {
  252 + if (!child.closed) {
  253 + child.postMessage({
  254 + message: 'requestOauthClientPluginResult'
  255 + }, '*');
  256 + }
  257 + } catch (e) {
  258 + // we're here when the child window has been navigated away or closed
  259 + if (child.closed) {
  260 + $interval.cancel(interval);
  261 + interval = undefined;
  262 + }
  263 + }
  264 + }, 300);
  265 + };
201 266  
202   - // convert to decimal and change luminosity
203   - var rgb = '#';
204   - var c;
205   - var i;
  267 + $window.addEventListener('message', function(eventMessage) {
  268 + // $log.debug('eventMessage', eventMessage);
206 269  
207   - for (i = 0; i < 3; i++) {
208   - c = parseInt(hex.substr(i * 2, 2), 16);
209   - c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);
210   - rgb += ('00' + c).substr(c.length);
  270 + if (eventMessage.data.message === 'oauthClientPluginResult') {
  271 + $rootScope.$broadcast('oauthClientPluginResult', eventMessage);
  272 + // eventMessage.source.close();
211 273 }
212   -
213   - return rgb;
214   - };
  274 + });
215 275 }
216 276  
217 277 /** @ngInject */
... ... @@ -221,7 +281,7 @@
221 281  
222 282 if($resultEl && $resultEl.length > 0){
223 283 $rootScope.scrollTo($resultEl);
224   - // angular.element('body').animate({scrollTop: $resultEl.offset().top}, 'fast');
  284 + // angular.element('html,body').animate({scrollTop: $resultEl.offset().top}, 'fast');
225 285 }
226 286 });
227 287 }
... ...