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> |