Repository: syncope Updated Branches: refs/heads/2_0_X 0e73508a2 -> 3285cc036
[SYNCOPE-1367] Added some accessibility features to Enduser Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/3285cc03 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/3285cc03 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/3285cc03 Branch: refs/heads/2_0_X Commit: 3285cc036e94028fd7219d16d1ca35f25ab5e322 Parents: 0e73508 Author: skylark17 <matteo.alessandr...@tirasa.net> Authored: Mon Oct 1 16:56:13 2018 +0200 Committer: skylark17 <matteo.alessandr...@tirasa.net> Committed: Mon Oct 1 16:56:13 2018 +0200 ---------------------------------------------------------------------- client/enduser/pom.xml | 4 + .../resources/app/css/accessibility.css | 44 ++++++ .../app/css/accessibility/accessibilityFont.css | 78 ++++++++++ .../app/css/accessibility/accessibilityHC.css | 150 +++++++++++++++++++ .../META-INF/resources/app/css/editUser.css | 8 +- .../META-INF/resources/app/css/init.css | 22 +++ .../resources/META-INF/resources/app/index.html | 34 ++++- .../resources/META-INF/resources/app/js/app.js | 11 +- .../js/controllers/AccessibilityController.js | 89 +++++++++++ .../js/directives/navigationButtonsPartial.js | 5 +- .../resources/app/js/directives/ngEnter.js | 39 +++++ .../resources/app/js/util/assetsManager.js | 16 +- .../app/views/navigationButtonsPartial.html | 9 +- .../app/views/templates/editUserTemplate.html | 5 +- .../views/templates/passwordresetTemplate.html | 9 +- .../resources/app/views/user-credentials.html | 5 +- .../app/views/user-derived-schemas.html | 5 +- .../resources/app/views/user-form-finish.html | 6 +- .../resources/app/views/user-groups.html | 5 +- .../resources/app/views/user-plain-schemas.html | 5 +- .../resources/app/views/user-resources.html | 5 +- .../app/views/user-virtual-schemas.html | 5 +- .../src/main/resources/customTemplate.json | 3 +- .../src/test/resources/customTemplate.json | 3 +- .../src/main/resources/customTemplate.json | 3 +- .../src/test/resources/customTemplate.json | 3 +- pom.xml | 7 +- 27 files changed, 530 insertions(+), 48 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/pom.xml ---------------------------------------------------------------------- diff --git a/client/enduser/pom.xml b/client/enduser/pom.xml index 78be32c..8f92084 100644 --- a/client/enduser/pom.xml +++ b/client/enduser/pom.xml @@ -118,6 +118,10 @@ under the License. <groupId>org.webjars</groupId> <artifactId>kendo-ui-core</artifactId> </dependency> + <dependency> + <groupId>org.webjars.bowergithub.angular</groupId> + <artifactId>bower-angular-aria</artifactId> + </dependency> <!--Bootstrap--> <dependency> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility.css ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility.css b/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility.css new file mode 100644 index 0000000..04c57a5 --- /dev/null +++ b/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility.css @@ -0,0 +1,44 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +#accessibility { + display: block; +} + +.btn-accessibility { + position: absolute; + right: 0; + font-size: 12px; + padding: 15px 15px 0 0; +} + +.btn-accessibility i { + font-size: 30px; +} + +.btn-accessibility:hover { + cursor:pointer; +} + +#change_contrast { + top: 0; +} +#change_fontSize { + top: 40px; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility/accessibilityFont.css ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility/accessibilityFont.css b/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility/accessibilityFont.css new file mode 100644 index 0000000..fa4310c --- /dev/null +++ b/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility/accessibilityFont.css @@ -0,0 +1,78 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +body { + font-size: 400%; +} + +.nav-button, +#login-btn, +#resetpassword, +#status-buttons a, +#login-container a, +.form-group input, +.form-group select, +.panel-title, +#questionCaptcha, +#refresh, +.suggestions, +.k-notification-wrap, +.btn-secondary, + .card-body #attribute .fa { + font-size: 20px; +} + +.k-picker-wrap { + font-size: 17px; +} + +#finish { + margin-right: 0; +} +#navButtons { + padding-right: 20px; +} + +.k-notification-wrap { + padding: .1em .2em; + line-height: 1.5; +} + +.select2-choices li { + line-height: 1 !important; +} + +.select2-choices li .ui-select-match-close { + -ms-transform: scale(1.5); /* IE */ + -moz-transform: scale(1.5); /* FF */ + -webkit-transform: scale(1.5); /* Safari and Chrome */ + -o-transform: scale(1.5); /* Opera */ +} + +input[type=checkbox] { + -ms-transform: scale(2); /* IE */ + -moz-transform: scale(2); /* FF */ + -webkit-transform: scale(2); /* Safari and Chrome */ + -o-transform: scale(2); /* Opera */ +} + +/* Workaround - to avoid nav buttons not to be vertically aligned */ +#navButtons .float-right { + font-size: 1px; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility/accessibilityHC.css ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility/accessibilityHC.css b/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility/accessibilityHC.css new file mode 100644 index 0000000..235daaf --- /dev/null +++ b/client/enduser/src/main/resources/META-INF/resources/app/css/accessibility/accessibilityHC.css @@ -0,0 +1,150 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +.btn-accessibility { + color: #ffffff; +} + + +/* EditUser +============================================================================= */ +html, +body { + height: 100%; +} +body { + background: #464646; +} + +#form-container .page-header, +#previous, +#next, +#save, +#finish, +#resetpassword { + background: #464646; + color: #ffffff; +} + +#previous:hover, +#next:hover, +#save:hover, +#finish:hover, +#resetpassword:hover { + background: #6d6d6d; +} + +#form-container .btn-danger { + background-color: #a93f3c; + border-color: #ffffff; +} + + +#form-container, +#form-container .panel { + background-color: #151515; + color: #ffffff; +} + +#form-container input, +#form-container select, +#form-container select option, +#form-container label, +.k-icon, +.card-header h5 a { + color: #ffffff; +} + +#form-container input:disabled { + background: #6d6d6d; +} + +#form-container input, +#form-container select, +#form-container select option, +span.k-datepicker, +span.k-timepicker, +span.k-datetimepicker, +span.k-colorpicker, +span.k-numerictextbox, +span.k-combobox, +span.k-dropdown, +.k-toolbar .k-split-button, +.k-autocomplete.k-state-default, +.k-picker-wrap.k-state-default, +.k-numeric-wrap.k-state-default, +.k-dropdown-wrap.k-state-default { + background: #313131; +} + +.card-header, +.ui-select-choices-row:hover { + background-color: #6d6d6d; +} + +.select2-choices, +.select2-drop-active { + background-color: #3e3e3e; + color: #ffffff; +} + + +/* Login +============================================================================= */ +#login-container .card { + background-color: #151515; + color: #ffffff; +} + +#login-container .login-logo { + background-color: rgba(255, 255, 255, 0.15); + border-radius: 10px; + + margin: 0px auto 20px auto; +} + +#login-container input, +#login-container select, +#login-container select option { + color: #ffffff; + background: #313131; +} + +#login-container input:disabled { + background: #6d6d6d; +} + +#login-container .btn-link { + color: #ffffff; +} +#login-container .btn-link:focus, +#login-container .btn-link:hover { + color: #b5dcff; +} + +#login-container .login-btn { + color: #ffffff; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#6a9647), color-stop(100%,#48543d)); + + background: #464646; +} + +#login-container .form-group { + margin-bottom: 20px; +} http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/css/editUser.css ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/css/editUser.css b/client/enduser/src/main/resources/META-INF/resources/app/css/editUser.css index 41ba63c..536b41a 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/css/editUser.css +++ b/client/enduser/src/main/resources/META-INF/resources/app/css/editUser.css @@ -32,13 +32,13 @@ under the License. background-color: #F7F7F7; } -#form-container .breadcrumb-header{ +#form-container .breadcrumb-header { margin: auto; width: 80%; padding:10px; } -#form-container .page-header { +#form-container .page-header { background: -moz-linear-gradient(top, #a9db80 0%, #96c56f 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#a9db80), color-stop(100%,#96c56f)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #a9db80 0%,#96c56f 100%); /* Chrome10+,Safari5.1+ */ @@ -196,7 +196,7 @@ span.k-datetimepicker{ /** Button breadcrumb **/ .btn-breadcrumb .btn:not(:last-child):after { - border-left: 10px solid white; + border-left: 10px solid #ffffff; } .btn-breadcrumb .btn:not(:last-child):before { margin-left: 1px; @@ -380,7 +380,7 @@ div[role="tablist"] { input[type=file] { display: block; - color: white !important; + color: #ffffff !important; } #form-container { http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/css/init.css ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/css/init.css b/client/enduser/src/main/resources/META-INF/resources/app/css/init.css new file mode 100644 index 0000000..21555b4 --- /dev/null +++ b/client/enduser/src/main/resources/META-INF/resources/app/css/init.css @@ -0,0 +1,22 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +#accessibility { + display: none; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/index.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/index.html b/client/enduser/src/main/resources/META-INF/resources/app/index.html index 6ef3c4d..4a13796 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/index.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/index.html @@ -44,20 +44,39 @@ under the License. <link href="../webjars/ng-password-strength/${ng-password-strength.version}/dist/styles/main.css" rel="stylesheet" type="text/css"> <link href="../webjars/select2/${select2.version}/select2.css" rel="stylesheet"/> + <link href="css/init.css" rel="stylesheet" type="text/css"/> <link href="css/customSpinner.css" rel="stylesheet" type="text/css"/> </head> <body ng-cloak > - <!--[if lt IE 7]> - <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> - <![endif]--> + <!--[if lt IE 7]> + <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> + <![endif]--> - <span id="notifications"></span> + <span id="notifications"></span> <treasure-overlay-spinner active='spinner.active'> - <div ui-view ng-cloak ng-controller="ApplicationController" ng-init="initApplication()"> + <div ng-cloak ng-controller="ApplicationController" ng-init="initApplication()"> + <div id="accessibility" ng-controller="AccessibilityController"> + <div id="change_contrast" class="btn-accessibility" + ng-init="checkPref(HC_THEME_PREF)"> + <i ng-click="switchTheme()" + aria-label="Toggle high contrast colors mode" tabindex="0" accesskey="H" + class="fa fa-adjust"> + </i> + </div> + <div id="change_fontSize" class="btn-accessibility" + ng-init="checkPref(FONT_SIZE_PREF)"> + <i ng-click="switchIncreasedFont()" + aria-label="Toggle font size increment" tabindex="0" accesskey="F" + class="fa fa-font"> + </i> + </div> + </div> - </div> + <!-- Dynamic view --> + <div ui-view></div> + </div> </treasure-overlay-spinner> <script src="../webjars/jquery/${jquery.version}/jquery.js"></script> @@ -86,6 +105,7 @@ under the License. <script src="../webjars/angular-translate-loader-partial/${angular-translate-loader-partial.version}/angular-translate-loader-partial.js"></script> <script src="../webjars/angular-translate-storage-cookie/${angular-translate.version}/angular-translate-storage-cookie.js"></script> <script src="../webjars/bootstrap-fileinput/${bootstrap-fileinput.version}/js/fileinput.js"></script> + <script src="../webjars/angular-aria/angular-aria.min.js" ></script> <!--main angular application--> <script src="js/app.js"></script> @@ -110,6 +130,7 @@ under the License. <script src="js/controllers/SAML2SPController.js"></script> <script src="js/controllers/OIDCClientController.js"></script> <script src="js/controllers/UserController.js"></script> + <script src="js/controllers/AccessibilityController.js"></script> <!--directives--> <script src="js/directives/dynamicPlainAttribute.js"></script> <script src="js/directives/dynamicDerivedAttribute.js"></script> @@ -128,6 +149,7 @@ under the License. <script src="js/directives/validateDropdown.js"></script> <script src="js/directives/fileInput.js"></script> <script src="js/directives/dynamicTemplateItem.js"></script> + <script src="js/directives/ngEnter.js"></script> <!--validator--> <script src="js/validator/validationRules.js"></script> <script src="js/validator/validationExecutor.js"></script> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/js/app.js ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/app.js b/client/enduser/src/main/resources/META-INF/resources/app/js/app.js index 0ed272a..1714467 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/js/app.js +++ b/client/enduser/src/main/resources/META-INF/resources/app/js/app.js @@ -42,7 +42,8 @@ var app = angular.module('SyncopeEnduserApp', [ 'self', 'info', 'ngCookies', - 'pascalprecht.translate' + 'pascalprecht.translate', + 'ngAria' ]); app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider', '$translateProvider', '$translatePartialLoaderProvider', @@ -262,7 +263,7 @@ app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider', '$translate * SYNCOPE-780 */ $httpProvider.defaults.headers.common["If-Modified-Since"] = "0"; - $httpProvider.interceptors.push(function ($q, $rootScope, $location) { + $httpProvider.interceptors.push(function ($q, $rootScope) { return { 'request': function (config, a, b) { //if the url is an html, we're changing page @@ -297,8 +298,8 @@ app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider', '$translate }; }); }]); -app.run(['$rootScope', '$location', '$state', 'AuthService', '$transitions', - function ($rootScope, $location, $state, AuthService, $transitions) { +app.run(['$rootScope', '$state', 'AuthService', '$transitions', + function ($rootScope, $state, AuthService, $transitions) { /* |-------------------------------------------------------------------------- | Main of Syncope Enduser application @@ -465,7 +466,7 @@ app.controller('ApplicationController', ['$scope', '$rootScope', 'InfoService', }; $rootScope.getWizardFirstStep = function () { - return ($scope.wizardFirstStep ? ('.' + $scope.wizardFirstStep) : ''); + return $scope.wizardFirstStep ? ('.' + $scope.wizardFirstStep) : ''; }; InfoService.getInfo().then( http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/AccessibilityController.js ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/AccessibilityController.js b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/AccessibilityController.js new file mode 100644 index 0000000..1d9e799 --- /dev/null +++ b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/AccessibilityController.js @@ -0,0 +1,89 @@ +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + **/ + +'use strict'; +angular.module("home").controller("AccessibilityController", ['$scope', 'AssetsManager', '$window', + function ($scope, AssetsManager, $window) { + + var darkThemeFiles = [ + 'css/accessibility/accessibilityHC.css' + ]; + + var fontSizeFiles = [ + 'css/accessibility/accessibilityFont.css' + ]; + + $scope.FONT_SIZE_PREF = "font_size_pref"; + $scope.HC_THEME_PREF = "hc_theme_pref"; + + var doSwitch = function (check, files) { + if (!check) { + for (var i = 0; i < files.length; i++) { + AssetsManager.remove(files[i], "css"); + } + } else { + for (var i = 0; i < files.length; i++) { + AssetsManager.inject(AssetsManager.accessibilityCssId + "_" + i, files[i], "css"); + } + } + }; + + var savePreference = function (key, value) { + $window.localStorage.setItem(key, value); + }; + + var getPreference = function (key) { + var storageValue = $window.localStorage.getItem(key); + if (storageValue === null) { + savePreference(key, "false"); + } + return storageValue === 'true'; + }; + + $scope.isHighContrast = getPreference($scope.HC_THEME_PREF); + $scope.isIncreasedFont = getPreference($scope.FONT_SIZE_PREF); + + $scope.checkPref = function (pref) { + switch (pref) { + case $scope.FONT_SIZE_PREF: + doSwitch($scope.isIncreasedFont, fontSizeFiles); + break; + + case $scope.HC_THEME_PREF: + doSwitch($scope.isHighContrast, darkThemeFiles); + break; + + default: + break; + } + }; + + $scope.switchTheme = function () { + $scope.isHighContrast = !$scope.isHighContrast; + doSwitch($scope.isHighContrast, darkThemeFiles); + savePreference($scope.HC_THEME_PREF, $scope.isHighContrast); + }; + + $scope.switchIncreasedFont = function () { + $scope.isIncreasedFont = !$scope.isIncreasedFont; + doSwitch($scope.isIncreasedFont, fontSizeFiles); + savePreference($scope.FONT_SIZE_PREF, $scope.isIncreasedFont); + }; + + }]); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/js/directives/navigationButtonsPartial.js ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/directives/navigationButtonsPartial.js b/client/enduser/src/main/resources/META-INF/resources/app/js/directives/navigationButtonsPartial.js index 6d0d81d..67a70d5 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/js/directives/navigationButtonsPartial.js +++ b/client/enduser/src/main/resources/META-INF/resources/app/js/directives/navigationButtonsPartial.js @@ -41,9 +41,9 @@ angular.module('self') } }, controller: function ($scope) { - $scope.validateAndNext = function (event, state) { + $scope.validateAndNext = function ($event, state) { //getting the enclosing form in order to access to its name - var currentForm = GenericUtil.getEnclosingForm(event.target); + var currentForm = GenericUtil.getEnclosingForm($event.target); if (currentForm !== null) { if (ValidationExecutor.validate(currentForm, $scope.$parent)) { if (state) { @@ -53,7 +53,6 @@ angular.module('self') } } } - }; $scope.nextTab = function (state) { http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/js/directives/ngEnter.js ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/directives/ngEnter.js b/client/enduser/src/main/resources/META-INF/resources/app/js/directives/ngEnter.js new file mode 100644 index 0000000..4f7e5a9 --- /dev/null +++ b/client/enduser/src/main/resources/META-INF/resources/app/js/directives/ngEnter.js @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +'use strict'; + +angular.module('self') + .directive('ngEnter', function ($parse) { + + return function (scope, element, attrs) { + element.bind("keydown keypress", function (event) { + // check enter key pressed + if (event.which === 13) { + scope.$apply(function () { + $parse(attrs.ngEnter)(scope, { + $event: event + }); + }); + + event.preventDefault(); + } + }); + }; + + }); http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/js/util/assetsManager.js ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/util/assetsManager.js b/client/enduser/src/main/resources/META-INF/resources/app/js/util/assetsManager.js index 48ec119..6402f84 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/js/util/assetsManager.js +++ b/client/enduser/src/main/resources/META-INF/resources/app/js/util/assetsManager.js @@ -23,20 +23,30 @@ angular.module('SyncopeEnduserApp') .factory("AssetsManager", ['$q', function ($q) { var assetsManager = {}; + assetsManager.accessibilityCssId = "access_css"; + var createLink = function (id, url, deferred) { - if (!angular.element('link#' + id).length && !angular.element('link[href="' + url + '"').length) { + if (!angular.element('link[href="' + url + '"').length) { var link = document.createElement('link'); + link.id = id; link.rel = 'stylesheet'; link.href = url; link.onload = deferred.resolve; link.onerror = deferred.reject; - angular.element('head').append(link); + + var themeElems = angular.element('[id*="' + assetsManager.accessibilityCssId + '"]'); + if (themeElems.length) { + angular.element(themeElems[0]).before(link); + } else { + angular.element('head').append(link); + } } }; var createScript = function (id, url, deferred) { - if (!angular.element('script#' + id).length && !angular.element('script[src="' + url + '"').length) { + if (!angular.element('script[src="' + url + '"').length) { var script = document.createElement('script'); + script.id = id; script.src = url; script.onload = deferred.resolve; script.onerror = deferred.reject; http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/views/navigationButtonsPartial.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/navigationButtonsPartial.html b/client/enduser/src/main/resources/META-INF/resources/app/views/navigationButtonsPartial.html index cd2f907..1676b73 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/views/navigationButtonsPartial.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/views/navigationButtonsPartial.html @@ -17,12 +17,15 @@ specific language governing permissions and limitations under the License. --> <div class="float-right"> - <a ng-show="next !== 'none'" id="next" class="btn btn-secondary btn-default" ng-click="validateAndNext($event)"> + <a ng-show="next !== 'none'" id="next" ng-click="validateAndNext($event)" + class="btn btn-secondary btn-default" + ng-enter="validateAndNext($event)" tabindex="0"> {{'NEXT'| translate}} <span class="fa fa-arrow-circle-right"></span> </a> - <a ng-show="previous !== 'none'" id="previous" - ng-click="previousTab()" class="btn btn-secondary btn-default float-left"> + <a ng-show="previous !== 'none'" id="previous" ng-click="previousTab()" + class="btn btn-secondary btn-default float-left" + tabindex="0" ng-enter="previousTab()"> <span class="fa fa-arrow-circle-left"></span> {{'PREVIOUS'| translate}} </a> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/views/templates/editUserTemplate.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/templates/editUserTemplate.html b/client/enduser/src/main/resources/META-INF/resources/app/views/templates/editUserTemplate.html index a309f71..396bfe7 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/views/templates/editUserTemplate.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/views/templates/editUserTemplate.html @@ -31,11 +31,12 @@ under the License. <div growl reference="2" inline="true"></div> <div id="status-buttons" class="btn-group btn-breadcrumb"> <a class="btn btn-secondary btn-default breadcrumb-btn-elem breadcrumb-home" - ng-show="createMode" ng-click="logout()"> + tabindex="0" ng-enter="logout()" ng-show="createMode" ng-click="logout()"> <i class="fa fa-home"></i> </a> + <a id="logout" class="btn btn-secondary btn-default breadcrumb-btn-elem" - ng-show="!createMode" ng-click="logout()"> + tabindex="0" ng-enter="logout()" ng-show="!createMode" ng-click="logout()"> <i class="fa fa-power-off" style="color:red"></i> </a> <!-- add class breadcrumb-disabled-link to buttons to prevent click --> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/views/templates/passwordresetTemplate.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/templates/passwordresetTemplate.html b/client/enduser/src/main/resources/META-INF/resources/app/views/templates/passwordresetTemplate.html index b2d6a3b..12be2a8 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/views/templates/passwordresetTemplate.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/views/templates/passwordresetTemplate.html @@ -25,11 +25,13 @@ under the License. </div> <div class="breadcrumb-header text-center"> <div id="status-buttons" class="btn-group btn-breadcrumb"> - <a class="btn btn-default breadcrumb-btn-elem breadcrumb-home" ng-click="logout()"> + <a class="btn btn-default breadcrumb-btn-elem breadcrumb-home" ng-click="logout()" + tabindex="0" ng-enter="logout()"> <i class="fa fa-home"></i> </a> <!--add class breadcrumb-disabled-link to buttons to prevent click--> - <a ui-sref-active="active" class="btn btn-secondary btn-default active">{{'USERDETAILS'| translate}}</a> + <a ui-sref-active="active" tabindex="0" + class="btn btn-secondary btn-default active">{{'USERDETAILS'| translate}}</a> </div> </div> <form class="signup-form" name="passwordResetForm" ng-submit="resetPassword(user)" novalidate> @@ -61,7 +63,8 @@ under the License. </div> </div> <div class="col-xs-6"> - <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" ng-click="logout()"> + <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" ng-click="logout()" + tabindex="0" ng-enter="logout()"> {{'CANCEL'| translate}} </a> </div> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/views/user-credentials.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-credentials.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-credentials.html index 6a3524e..68d442c 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-credentials.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-credentials.html @@ -68,7 +68,8 @@ under the License. <div id="attribute" class="form-group row justify-content-between p-0"> <div class="col-xs-3"> - <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" ng-click="logout()"> + <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" + ng-enter="logout()" ng-click="logout()"> {{'CANCEL'| translate}} </a> </div> @@ -85,7 +86,7 @@ under the License. ng-show="!createMode || (createMode && endReached)"> <button id="finish" type="button" tabindex="0" class="btn btn-secondary btn-default float-right nav-button" - ng-click="finish()"> + ng-enter="logout()" ng-click="finish()"> {{'FINISH'| translate}} </button> </div> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/views/user-derived-schemas.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-derived-schemas.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-derived-schemas.html index 8146e44..1464f7c 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-derived-schemas.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-derived-schemas.html @@ -22,7 +22,8 @@ under the License. <div id="attribute" class="form-group row justify-content-between p-0"> <div class="col-xs-3"> - <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" ng-click="logout()"> + <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" + ng-enter="logout()" ng-click="logout()"> {{'CANCEL'| translate}} </a> </div> @@ -39,7 +40,7 @@ under the License. ng-show="!createMode || (createMode && endReached)"> <button id="finish" type="button" tabindex="0" class="btn btn-secondary btn-default float-right nav-button" - ng-click="finish()"> + ng-enter="finish()" ng-click="finish()"> {{'FINISH'| translate}} </button> </div> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/views/user-form-finish.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-form-finish.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-form-finish.html index ad3485b..9f01174 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-form-finish.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-form-finish.html @@ -24,7 +24,8 @@ under the License. <!--navigation buttons--> <div class="col-xs-3"> - <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" ng-click="logout()"> + <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" + ng-enter="logout()" ng-click="logout()"> {{'CANCEL'| translate}} </a> </div> @@ -36,7 +37,8 @@ under the License. </navigation-buttons-partial> </div> <div class="col-xs-2 float-right p-0"> - <button id="save" type="submit" tabindex="0" class="btn btn-secondary btn-default float-right nav-button"> + <button id="save" type="submit" tabindex="0" + class="btn btn-secondary btn-default float-right nav-button"> {{'SAVE'| translate}} </button> </div> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/views/user-groups.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-groups.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-groups.html index dbec0ac..7784cfb 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-groups.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-groups.html @@ -35,7 +35,8 @@ under the License. <div id="attribute" class="form-group row justify-content-between p-0"> <div class="col-xs-3"> - <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" ng-click="logout()"> + <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" + ng-enter="logout()" ng-click="logout()"> {{'CANCEL'| translate}} </a> </div> @@ -52,7 +53,7 @@ under the License. ng-show="!createMode || (createMode && endReached)"> <button id="finish" type="button" tabindex="0" class="btn btn-secondary btn-default float-right nav-button" - ng-click="finish()"> + ng-enter="finish()" ng-click="finish()"> {{'FINISH'| translate}} </button> </div> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/views/user-plain-schemas.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-plain-schemas.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-plain-schemas.html index d04c466..860e2e2 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-plain-schemas.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-plain-schemas.html @@ -22,7 +22,8 @@ under the License. <div id="attribute" class="form-group row justify-content-between p-0"> <div class="col-xs-3"> - <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" ng-click="logout()"> + <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" + ng-enter="logout()" ng-click="logout()"> {{'CANCEL'| translate}} </a> </div> @@ -39,7 +40,7 @@ under the License. ng-show="!createMode || (createMode && endReached)"> <button id="finish" type="button" tabindex="0" class="btn btn-secondary btn-default float-right nav-button" - ng-click="finish()"> + ng-enter="finish()" ng-click="finish()"> {{'FINISH'| translate}} </button> </div> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/views/user-resources.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-resources.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-resources.html index a8cde79..9d09da1 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-resources.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-resources.html @@ -22,7 +22,8 @@ under the License. <div id="attribute" class="form-group row justify-content-between p-0"> <div class="col-xs-3"> - <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" ng-click="logout()"> + <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" + ng-enter="logout()" ng-click="logout()"> {{'CANCEL'| translate}} </a> </div> @@ -39,7 +40,7 @@ under the License. ng-show="!createMode || (createMode && endReached)"> <button id="finish" type="button" tabindex="0" class="btn btn-secondary btn-default float-right nav-button" - ng-click="finish()"> + ng-enter="finish()" ng-click="finish()"> {{'FINISH'| translate}} </button> </div> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/META-INF/resources/app/views/user-virtual-schemas.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-virtual-schemas.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-virtual-schemas.html index 216d624..fd7e27c 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-virtual-schemas.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-virtual-schemas.html @@ -22,7 +22,8 @@ under the License. <div id="attribute" class="form-group row justify-content-between p-0"> <div class="col-xs-3"> - <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" ng-click="logout()"> + <a id="cancel" class="btn btn-danger float-left nav-button" tabindex="0" + ng-enter="logout()" ng-click="logout()"> {{'CANCEL'| translate}} </a> </div> @@ -39,7 +40,7 @@ under the License. ng-show="!createMode || (createMode && endReached)"> <button id="finish" type="button" tabindex="0" class="btn btn-secondary btn-default float-right nav-button" - ng-click="finish()"> + ng-enter="finish()" ng-click="finish()"> {{'FINISH'| translate}} </button> </div> http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/main/resources/customTemplate.json ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/customTemplate.json b/client/enduser/src/main/resources/customTemplate.json index 6b0efc1..9b760b9 100644 --- a/client/enduser/src/main/resources/customTemplate.json +++ b/client/enduser/src/main/resources/customTemplate.json @@ -31,7 +31,8 @@ { "css": [ "css/notification.css", - "css/app.css" + "css/app.css", + "css/accessibility.css" ] }, http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/client/enduser/src/test/resources/customTemplate.json ---------------------------------------------------------------------- diff --git a/client/enduser/src/test/resources/customTemplate.json b/client/enduser/src/test/resources/customTemplate.json index 0636b31..3fcb140 100644 --- a/client/enduser/src/test/resources/customTemplate.json +++ b/client/enduser/src/test/resources/customTemplate.json @@ -34,7 +34,8 @@ { "css": [ "css/app.css", - "css/notification.css" + "css/notification.css", + "css/accessibility.css" ] }, http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/fit/enduser-reference/src/main/resources/customTemplate.json ---------------------------------------------------------------------- diff --git a/fit/enduser-reference/src/main/resources/customTemplate.json b/fit/enduser-reference/src/main/resources/customTemplate.json index 6b0efc1..9b760b9 100644 --- a/fit/enduser-reference/src/main/resources/customTemplate.json +++ b/fit/enduser-reference/src/main/resources/customTemplate.json @@ -31,7 +31,8 @@ { "css": [ "css/notification.css", - "css/app.css" + "css/app.css", + "css/accessibility.css" ] }, http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/fit/enduser-reference/src/test/resources/customTemplate.json ---------------------------------------------------------------------- diff --git a/fit/enduser-reference/src/test/resources/customTemplate.json b/fit/enduser-reference/src/test/resources/customTemplate.json index 6b0efc1..9b760b9 100644 --- a/fit/enduser-reference/src/test/resources/customTemplate.json +++ b/fit/enduser-reference/src/test/resources/customTemplate.json @@ -31,7 +31,8 @@ { "css": [ "css/notification.css", - "css/app.css" + "css/app.css", + "css/accessibility.css" ] }, http://git-wip-us.apache.org/repos/asf/syncope/blob/3285cc03/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index a387059..8db8281 100644 --- a/pom.xml +++ b/pom.xml @@ -1563,7 +1563,12 @@ under the License. <groupId>org.webjars.bower</groupId> <artifactId>angular-translate-storage-cookie</artifactId> <version>${angular-translate.version}</version> - </dependency> + </dependency> + <dependency> + <groupId>org.webjars.bowergithub.angular</groupId> + <artifactId>bower-angular-aria</artifactId> + <version>${angular.version}</version> + </dependency> <dependency> <groupId>org.webjars.bower</groupId>