Commit d4f5cd96b6297c1b5c67fc9f057ef594fc3dcbcd
Exists in
master
and in
8 other branches
Merge branch 'a11y'
Showing
7 changed files
with
55 additions
and
41 deletions
Show diff stats
src/app/index.run.js
1 | +/* globals document:true*/ | ||
1 | (function() { | 2 | (function() { |
2 | 'use strict'; | 3 | 'use strict'; |
3 | 4 | ||
4 | angular | 5 | angular |
5 | .module('dialoga') | 6 | .module('dialoga') |
7 | + .run(handleAccessibility) | ||
6 | .run(runBlock); | 8 | .run(runBlock); |
7 | 9 | ||
8 | /** @ngInject */ | 10 | /** @ngInject */ |
9 | - function runBlock($log) { | 11 | + function handleAccessibility($rootScope, $timeout, $cookies, $log) { |
12 | + $log.debug('handleAccessibility'); | ||
13 | + | ||
14 | + var contrast = $cookies.get('dialoga_contraste'); | ||
15 | + adjustContrast(contrast); | ||
16 | + | ||
17 | + function adjustContrast(state){ | ||
18 | + var bodyEl = angular.element(document).find('body'); | ||
19 | + angular.element(bodyEl).toggleClass('contraste', !!state); | ||
20 | + } | ||
21 | + | ||
22 | + $rootScope.toggleContrast = function () { | ||
23 | + contrast = !contrast; | ||
24 | + $cookies.put('dialoga_contraste', contrast); | ||
25 | + adjustContrast(contrast); | ||
26 | + }; | ||
27 | + | ||
28 | + $rootScope.focusMainContent = function ($event) { | ||
29 | + | ||
30 | + // prevent skip link from redirecting | ||
31 | + if ($event) { $event.preventDefault(); } | ||
10 | 32 | ||
11 | - $log.debug('runBlock end'); | 33 | + var mainContentArea = document.querySelector('[role="main"]'); |
34 | + | ||
35 | + if ( mainContentArea ) { | ||
36 | + $timeout(function(){ | ||
37 | + mainContentArea.focus(); | ||
38 | + },90); | ||
39 | + }else{ | ||
40 | + $log.warn('role="main" not found.'); | ||
41 | + } | ||
42 | + }; | ||
43 | + } | ||
44 | + | ||
45 | + /** @ngInject */ | ||
46 | + function runBlock($log) { | ||
47 | + $log.debug('runBlock'); | ||
12 | } | 48 | } |
13 | 49 | ||
14 | })(); | 50 | })(); |
src/app/index.scss
@@ -12,6 +12,12 @@ $icon-font-path: "../../bower_components/bootstrap-sass-official/assets/fonts/bo | @@ -12,6 +12,12 @@ $icon-font-path: "../../bower_components/bootstrap-sass-official/assets/fonts/bo | ||
12 | // bower:scss | 12 | // bower:scss |
13 | // endbower | 13 | // endbower |
14 | 14 | ||
15 | +.skip-links a:focus { | ||
16 | + background-color: #fff !important; | ||
17 | + opacity: 1; | ||
18 | + z-index: 2; | ||
19 | +} | ||
20 | + | ||
15 | .browsehappy { | 21 | .browsehappy { |
16 | margin: 0.2em 0; | 22 | margin: 0.2em 0; |
17 | background: #ccc; | 23 | background: #ccc; |
src/app/partials/header/header.controller.js
1 | -/* globals document:true*/ | ||
2 | (function() { | 1 | (function() { |
3 | 'use strict'; | 2 | 'use strict'; |
4 | 3 | ||
@@ -7,34 +6,11 @@ | @@ -7,34 +6,11 @@ | ||
7 | .controller('HeaderController', HeaderController); | 6 | .controller('HeaderController', HeaderController); |
8 | 7 | ||
9 | /** @ngInject */ | 8 | /** @ngInject */ |
10 | - function HeaderController($timeout, $log) { | ||
11 | - $log.debug('HeaderController'); | 9 | + function HeaderController($log) { |
10 | + var vm = this; | ||
12 | 11 | ||
13 | - this.$timeout = $timeout; | ||
14 | - this.$log = $log; | ||
15 | - | ||
16 | - this.contrast = false; | 12 | + vm.$log = $log; |
13 | + vm.$log.debug('HeaderController'); | ||
17 | } | 14 | } |
18 | 15 | ||
19 | - HeaderController.prototype.toggleContrast = function () { | ||
20 | - this.contrast = !this.contrast; | ||
21 | - this.$log.debug('contrast', this.contrast); | ||
22 | - }; | ||
23 | - | ||
24 | - HeaderController.prototype.focusMainContent = function ($event) { | ||
25 | - | ||
26 | - // prevent skip link from redirecting | ||
27 | - if ($event) { $event.preventDefault(); } | ||
28 | - | ||
29 | - var mainContentArea = document.querySelector("[role='main']"); | ||
30 | - | ||
31 | - if ( mainContentArea ) { | ||
32 | - this.$timeout(function(){ | ||
33 | - mainContentArea.focus(); | ||
34 | - },90); | ||
35 | - }else{ | ||
36 | - this.$log.warn('role="main" not found.'); | ||
37 | - } | ||
38 | - }; | ||
39 | - | ||
40 | })(); | 16 | })(); |
src/app/partials/header/header.html
1 | <header class="container" ng-controller="HeaderController as header"> | 1 | <header class="container" ng-controller="HeaderController as header"> |
2 | 2 | ||
3 | - <div class="skip-links"> | ||
4 | - <a href="#content" class="sr-only sr-only-focusable" tabindex="0" ng-click="header.focusMainContent($event)">Ir para o conteúdo principal</a> | ||
5 | - </div> | ||
6 | - | ||
7 | <div class="row"> | 3 | <div class="row"> |
8 | <div class="accessibility-wrapper"> | 4 | <div class="accessibility-wrapper"> |
9 | - <button type="button" id="display-contrast" class="btn btn-link" ng-click="header.toggleContrast()"> | 5 | + <button type="button" id="display-contrast" class="btn btn-link" ng-click="toggleContrast()"> |
10 | <span class="glyphicon glyphicon-adjust" aria-hidden="true"></span> Alto Contraste | 6 | <span class="glyphicon glyphicon-adjust" aria-hidden="true"></span> Alto Contraste |
11 | </button> | 7 | </button> |
12 | </div> | 8 | </div> |
src/app/partials/header/header.scss
src/app/partials/inicio/inicio.html
1 | -<section class="container video-wrapper"> | 1 | +<section class="container video-wrapper" role="main"> |
2 | <div class="video-player js-youtube"> | 2 | <div class="video-player js-youtube"> |
3 | <div class="embed-responsive embed-responsive-16by9"> | 3 | <div class="embed-responsive embed-responsive-16by9"> |
4 | <div class="js-iframe" ng-show="inicio.content" ng-bind-html="inicio.content"></div> | 4 | <div class="js-iframe" ng-show="inicio.content" ng-bind-html="inicio.content"></div> |
src/index.html
@@ -23,6 +23,11 @@ | @@ -23,6 +23,11 @@ | ||
23 | <!-- endbuild --> | 23 | <!-- endbuild --> |
24 | </head> | 24 | </head> |
25 | <body ng-cloak> | 25 | <body ng-cloak> |
26 | + | ||
27 | + <div class="skip-links"> | ||
28 | + <a href="#content" class="sr-only sr-only-focusable" tabindex="0" ng-click="focusMainContent($event)">Ir para o conteúdo principal</a> | ||
29 | + </div> | ||
30 | + | ||
26 | <div id="barra-brasil" style="background:#7F7F7F; height: 20px; padding:0 0 0 10px;display:block;"> | 31 | <div id="barra-brasil" style="background:#7F7F7F; height: 20px; padding:0 0 0 10px;display:block;"> |
27 | <ul id="menu-barra-temp" style="list-style:none;"> | 32 | <ul id="menu-barra-temp" style="list-style:none;"> |
28 | <li style="display:inline; float:left;padding-right:10px; margin-right:10px; border-right:1px solid #EDEDED"><a href="http://brasil.gov.br" style="font-family:sans,sans-serif; text-decoration:none; color:white;">Portal do Governo Brasileiro</a></li> | 33 | <li style="display:inline; float:left;padding-right:10px; margin-right:10px; border-right:1px solid #EDEDED"><a href="http://brasil.gov.br" style="font-family:sans,sans-serif; text-decoration:none; color:white;">Portal do Governo Brasileiro</a></li> |