/* globals document:true*/ (function() { 'use strict'; angular .module('dialoga') .run(runAccessibility) .run(runAuth) .run(runCaptcha) // .run(runColorUtils) .run(runHistory) .run(runOutdated) .run(runPath) .run(runSocialAuth) .run(runScroll) .run(runUtils) .run(runBlock); /** @ngInject */ function runAccessibility($rootScope, $timeout, $interval, $cookies, $state, $log) { var contrast = $cookies.get('dialoga_contraste') === 'true'; adjustContrast(contrast); function adjustContrast(state) { var bodyEl = angular.element(document).find('body'); angular.element(bodyEl).toggleClass('contraste', !!state); } $rootScope.actionContrast = function() { // toggle contrast contrast = !contrast; $cookies.put('dialoga_contraste', contrast); adjustContrast(contrast); }; $rootScope.focusOn = function(elId, $event) { var el = angular.element(elId); $rootScope.scrollTo(el, $event); el.attr('tabIndex', -1).focus(); }; $rootScope.focusMainContent = function($event) { var mainContentArea = document.querySelector('[role="main"]'); if (mainContentArea) { $timeout(function() { $rootScope.scrollTo(angular.element(mainContentArea), $event); }, 90); // force queue } else { $log.info('role="main" not found.'); } }; $rootScope.focusOnSearch = function($event) { // prevent skip link from redirecting if ($event) { $event.preventDefault(); } // find a input search var $searchEl = angular.element('input[type="search"]:visible'); if($searchEl && $searchEl.length > 0){ // scroll angular.element('html,body').animate({scrollTop: $searchEl.offset().top}, 'fast'); // focus $searchEl.focus(); } else { // input search not found // 1. redirect to home var promise = $state.go('inicio', { reload: true}); // 2. focus on input search at home. promise.then(function(){ $rootScope.findElAsyncAndFocus('input[type="search"]:visible'); }); } }; $rootScope.findElAsyncAndFocus = function (query, delay, max_exec) { return $rootScope.findElAsync(query, function($el){ // scroll angular.element('html,body').animate({scrollTop: $el.offset().top}, 'fast'); // focus $el.focus(); }, delay, max_exec); }; $rootScope.findElAsync = function (query, cb, delay, max_exec) { // use jQuery and $interval to find element async. delay = delay || 200; max_exec = max_exec || 20; var count_exec = 0; var stop = null; stop = $interval(function() { var $el = angular.element(query); if ($el && $el.length > 0) { cb($el); count_exec = max_exec; // exit. }else { $log.debug('[findElAsync] element not found.'); } count_exec++; if (count_exec >= max_exec){ $interval.cancel(stop); stop = undefined; } }, delay); }; $rootScope.scrollTo = function(target, $event) { // prevent skip link from redirecting if ($event) { $event.preventDefault(); } if (angular.isString(target)) { target = angular.element(target); } angular.element('html,body').animate({scrollTop: target.offset().top}, 'fast'); }; $log.debug('[RUN] Accessibility end.'); } /** @ngInject */ function runAuth($rootScope, $localStorage, USER_ROLES, AUTH_EVENTS, AuthService, $log) { // Listner url/state changes, and check permission $rootScope.$on('$stateChangeStart', function(event, next) { if (!next.data || !next.data.authorizedRoles) { $log.debug('[RUN] Auth: public url/state'); return; } var authorizedRoles = next.data.authorizedRoles; if (!AuthService.isAuthorized(authorizedRoles)) { event.preventDefault(); if (AuthService.isAuthenticated()) { // user is not allowed $log.debug('user is not allowed'); $rootScope.$broadcast(AUTH_EVENTS.notAuthorized); } else { // user is not logged in $log.debug('user is not logged in'); $rootScope.$broadcast(AUTH_EVENTS.notAuthenticated); } } }); $rootScope.currentUser = $localStorage.currentUser; $rootScope.temporaryToken = $localStorage.temporaryToken; $log.debug('[RUN] Auth end.'); } /** @ngInject */ function runCaptcha($window, $log, GUID) { var serpro_captcha_clienteId = 'fdbcdc7a0b754ee7ae9d865fda740f17'; $window.initCaptcha = function(element) { var $element = angular.element(element); // already have a started captcha if ($element.data('captcha')) { $log.info('Captcha already initialized. Abort.'); return; } // Create a new instance of Captcha var oCaptcha_serpro_gov_br = new $window.captcha_serpro_gov_br(); // Set the initial data $element.val(''); $element.data('captcha', oCaptcha_serpro_gov_br); oCaptcha_serpro_gov_br.clienteId = serpro_captcha_clienteId; // oCaptcha_serpro_gov_br.url = "/serprocaptcha"; oCaptcha_serpro_gov_br.criarUI(element, 'css', 'serpro_captcha_component_', GUID.generate()); }; $window.reloadCaptcha = function(element) { var $element = angular.element(element); if ($element.data('captcha')) { $element.data('captcha').recarregar(); } }; $log.debug('runCaptcha'); } // /** @ngInject */ // function runColorUtils($window) { // $window.ColorLuminance = function(hex, lum) { // // validate hex string // hex = String(hex).replace(/[^0-9a-f]/gi, ''); // if (hex.length < 6) { // hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; // } // lum = lum || 0; // // convert to decimal and change luminosity // var rgb = '#'; // var c; // var i; // for (i = 0; i < 3; i++) { // c = parseInt(hex.substr(i * 2, 2), 16); // c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16); // rgb += ('00' + c).substr(c.length); // } // return rgb; // }; // } /** @ngInject */ function runHistory($rootScope) { var MAX_HISTORY = 20; $rootScope.$previousState = $rootScope.$previousState || []; $rootScope.$on('$stateChangeSuccess', function(event, toState, toStateParams, fromState, fromStateParams) { $rootScope.$previousState.push({ state: fromState, params: fromStateParams}); $rootScope.$previousState.splice(-MAX_HISTORY, MAX_HISTORY); }); $rootScope.goBack = $rootScope.goBack || function() { return $rootScope.$previousState.pop(); }; } /** @ngInject */ function runOutdated(outdatedBrowser, jQuery) { jQuery(document).ready(function(){ // Options to 'lowerThan': // // "IE11","borderImage" // "IE10", "transform" (Default property) // "IE9", "boxShadow" // "IE8", "borderSpacing" outdatedBrowser({ bgColor: '#f25648', color: '#ffffff', lowerThan: 'boxShadow', languagePath: '' }); }); } /** @ngInject */ function runPath($rootScope, PATH, $window, $log) { $rootScope.basePath = PATH.host; $log.debug('[RUN] Path end.'); } /** @ngInject */ function runSocialAuth($window, $rootScope, $interval) { $window.oauthClientAction = function(url) { var child = $window.open(url, '_blank'); var interval = $interval(function() { try { if (!child.closed) { child.postMessage({ message: 'requestOauthClientPluginResult' }, '*'); } } catch (e) { // we're here when the child window has been navigated away or closed if (child.closed) { $interval.cancel(interval); interval = undefined; } } }, 300); }; $window.addEventListener('message', function(eventMessage) { if (eventMessage.data.message === 'oauthClientPluginResult') { $rootScope.$broadcast('oauthClientPluginResult', eventMessage); eventMessage.source.close(); } }); } /** @ngInject */ function runScroll($rootScope, jQuery) { $rootScope.$on('change-selectedCategory', function(){ var $resultEl = jQuery('.section--articles .header'); if($resultEl && $resultEl.length > 0){ $rootScope.scrollTo($resultEl); // angular.element('html,body').animate({scrollTop: $resultEl.offset().top}, 'fast'); } }); } /** @ngInject */ function runUtils($rootScope) { $rootScope.stripHtml = function(text) { return String(text).replace(/<[^>]+>/gm, ''); }; } /** @ngInject */ function runBlock($log) { $log.debug('[RUN] Block end.'); } })();