├── .jshintrc ├── doc ├── api.json └── CHANGELOG.md ├── .gitignore ├── .npmignore ├── gulpfile.js ├── .editorconfig ├── src ├── resources │ ├── en-US.js │ └── bg-BG.js ├── index.js ├── loading-mask │ ├── loading-mask.js │ └── loading-mask.css ├── logger.js ├── config.js ├── authorize-steps.js ├── locale.js ├── session.js └── http.js ├── dist ├── es6 │ ├── resources │ │ ├── en-US.js │ │ └── bg-BG.js │ ├── index.js │ ├── loading-mask │ │ ├── loading-mask.js │ │ └── loading-mask.css │ ├── logger.js │ ├── config.js │ ├── authorize-steps.js │ ├── locale.js │ ├── session.js │ └── http.js ├── commonjs │ ├── resources │ │ ├── en-US.js │ │ └── bg-BG.js │ ├── index.js │ ├── loading-mask │ │ ├── loading-mask.js │ │ └── loading-mask.css │ ├── logger.js │ ├── locale.js │ ├── config.js │ ├── session.js │ └── authorize-steps.js ├── amd │ ├── resources │ │ ├── en-US.js │ │ └── bg-BG.js │ ├── index.js │ ├── loading-mask │ │ ├── loading-mask.css │ │ └── loading-mask.js │ ├── logger.js │ ├── config.js │ ├── locale.js │ ├── authorize-steps.js │ └── session.js └── system │ ├── resources │ ├── en-US.js │ └── bg-BG.js │ ├── index.js │ ├── loading-mask │ ├── loading-mask.css │ └── loading-mask.js │ ├── logger.js │ ├── config.js │ ├── locale.js │ └── authorize-steps.js ├── aurelia-auth-session.iml ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── karma.conf.js ├── package.json └── config.js /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esnext": true 3 | } 4 | -------------------------------------------------------------------------------- /doc/api.json: -------------------------------------------------------------------------------- 1 | {"classes":[],"methods":[],"properties":[],"events":[]} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | jspm_packages 3 | bower_components 4 | .idea 5 | .DS_STORE 6 | *.swp 7 | npm-debug.log -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | jspm_packages 3 | bower_components 4 | .idea 5 | .DS_STORE 6 | test 7 | npm-debug.log -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | // all gulp tasks are located in the ./build/tasks directory 2 | // gulp configuration is in files in ./build directory 3 | require('require-dir')('build/tasks'); 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | end_of_line = lf 9 | insert_final_newline = true 10 | 11 | # 2 space indentation 12 | [**.*] 13 | indent_style = space 14 | indent_size = 2 -------------------------------------------------------------------------------- /src/resources/en-US.js: -------------------------------------------------------------------------------- 1 | export let data = { 2 | messages: { 3 | sessionTimedOut: 'Your session has timedout!', 4 | accessDenied: 'Access Denied!', 5 | internalServerError: 'Internal Server Error!', 6 | requestTimeout: 'Request Timeout!', 7 | notAuthorized: 'You are not authorized!', 8 | pleaseLogin: 'Please login!', 9 | errorHappend: 'Upss... Error!', 10 | loading: 'Loading' 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /dist/es6/resources/en-US.js: -------------------------------------------------------------------------------- 1 | export let data = { 2 | messages: { 3 | sessionTimedOut: 'Your session has timedout!', 4 | accessDenied: 'Access Denied!', 5 | internalServerError: 'Internal Server Error!', 6 | requestTimeout: 'Request Timeout!', 7 | notAuthorized: 'You are not authorized!', 8 | pleaseLogin: 'Please login!', 9 | errorHappend: 'Upss... Error!', 10 | loading: 'Loading' 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /src/resources/bg-BG.js: -------------------------------------------------------------------------------- 1 | export let data = { 2 | messages: { 3 | sessionTimedOut: 'Сесията Ви е изтекла!', 4 | accessDenied: 'Отказан достъп!', 5 | internalServerError: 'Грешка на сървъра!', 6 | requestTimeout: 'Времето за заявката изтече!', 7 | notAuthorized: 'Отказан достъп!', 8 | pleaseLogin: 'Моля влезте в системата!', 9 | errorHappend: 'Опа...Възникна грешка!', 10 | loading: 'Зареждане' 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /dist/es6/resources/bg-BG.js: -------------------------------------------------------------------------------- 1 | export let data = { 2 | messages: { 3 | sessionTimedOut: 'Сесията Ви е изтекла!', 4 | accessDenied: 'Отказан достъп!', 5 | internalServerError: 'Грешка на сървъра!', 6 | requestTimeout: 'Времето за заявката изтече!', 7 | notAuthorized: 'Отказан достъп!', 8 | pleaseLogin: 'Моля влезте в системата!', 9 | errorHappend: 'Опа...Възникна грешка!', 10 | loading: 'Зареждане' 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /aurelia-auth-session.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import {Config} from './config'; 2 | 3 | export {Logger} from './logger'; 4 | export {Session} from './session'; 5 | export {Http} from './http'; 6 | export {AccessRightsAuthorizeStep, RolesAuthorizeStep} from './authorize-steps'; 7 | 8 | export function configure(aurelia, configCallback) { 9 | const config = new Config(); 10 | 11 | if(configCallback !== undefined && typeof(configCallback) === 'function') 12 | { 13 | configCallback(config); 14 | } 15 | 16 | return config.locale(); 17 | } 18 | -------------------------------------------------------------------------------- /dist/es6/index.js: -------------------------------------------------------------------------------- 1 | import {Config} from './config'; 2 | 3 | export {Logger} from './logger'; 4 | export {Session} from './session'; 5 | export {Http} from './http'; 6 | export {AccessRightsAuthorizeStep, RolesAuthorizeStep} from './authorize-steps'; 7 | 8 | export function configure(aurelia, configCallback) { 9 | const config = new Config(); 10 | 11 | if(configCallback !== undefined && typeof(configCallback) === 'function') 12 | { 13 | configCallback(config); 14 | } 15 | 16 | return config.locale(); 17 | } 18 | -------------------------------------------------------------------------------- /dist/commonjs/resources/en-US.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | var data = { 7 | messages: { 8 | sessionTimedOut: 'Your session has timedout!', 9 | accessDenied: 'Access Denied!', 10 | internalServerError: 'Internal Server Error!', 11 | requestTimeout: 'Request Timeout!', 12 | notAuthorized: 'You are not authorized!', 13 | pleaseLogin: 'Please login!', 14 | errorHappend: 'Upss... Error!', 15 | loading: 'Loading' 16 | } 17 | }; 18 | exports.data = data; -------------------------------------------------------------------------------- /dist/commonjs/resources/bg-BG.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | var data = { 7 | messages: { 8 | sessionTimedOut: 'Сесията Ви е изтекла!', 9 | accessDenied: 'Отказан достъп!', 10 | internalServerError: 'Грешка на сървъра!', 11 | requestTimeout: 'Времето за заявката изтече!', 12 | notAuthorized: 'Отказан достъп!', 13 | pleaseLogin: 'Моля влезте в системата!', 14 | errorHappend: 'Опа...Възникна грешка!', 15 | loading: 'Зареждане' 16 | } 17 | }; 18 | exports.data = data; -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | We'd love for you to contribute and to make this project even better than it is today! If this interests you, please begin by reading [our contributing guidelines](https://github.com/DurandalProject/about/blob/master/CONTRIBUTING.md). The contributing document will provide you with all the information you need to get started. Once you have read that, you will need to also [sign our CLA](http://goo.gl/forms/dI8QDDSyKR) before we can accept a Pull Request from you. More information on the process is included in the [contributor's guide](https://github.com/DurandalProject/about/blob/master/CONTRIBUTING.md). 4 | -------------------------------------------------------------------------------- /doc/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 0.3.0 (2015-08-14) 2 | 3 | 4 | #### Bug Fixes 5 | 6 | * **index:** update to latest configuration api ([44f7a015](http://github.com/aurelia/skeleton-plugin/commit/44f7a015c0f15251bd07b327e42c875eaccbb735)) 7 | 8 | 9 | ### 0.2.1 (2015-07-07) 10 | 11 | 12 | ## 0.2.0 (2015-06-08) 13 | 14 | 15 | #### Bug Fixes 16 | 17 | * **all:** 18 | * update to latest plugin api ([a050d736](http://github.com/aurelia/skeleton-plugin/commit/a050d736d32811066ffa902615cc73e1a5cbb6e3)) 19 | * update compiler ([faf51acc](http://github.com/aurelia/skeleton-plugin/commit/faf51accc1514c6767eaed60df16dd3d586b5cc5)) 20 | 21 | 22 | #### Features 23 | 24 | * **all:** initial commit of skeleton ([51a036d1](http://github.com/aurelia/skeleton-plugin/commit/51a036d146750a0bafd443dbc3def51ef7f89f6e)) 25 | 26 | -------------------------------------------------------------------------------- /src/loading-mask/loading-mask.js: -------------------------------------------------------------------------------- 1 | import $ from 'jquery'; 2 | import {Locale} from '../locale'; 3 | 4 | export class LoadingMask { 5 | constructor(resources) { 6 | this.loadingMask = undefined; 7 | this.dimScreen = undefined; 8 | this.dialog = undefined; 9 | this.loadingTitle = undefined; 10 | this.title = undefined; 11 | this.locale = Locale.Repository.default; 12 | this._createLoadingMask(); 13 | } 14 | 15 | _createLoadingMask() { 16 | this.title = this.locale.translate('loading'); 17 | this.dimScreen = '
' + this.title +'
'; 18 | $('body').append(this.dimScreen); 19 | this.loadingMask = $('#loadingMask'); 20 | this.loadingTitle = $('.loadingTitle').css({ 21 | color: '#ffffff', 22 | opacity: 1, 23 | fontSize: '2.5em' 24 | //fontFamily: 'Roboto' 25 | }); 26 | } 27 | 28 | show() { 29 | this.loadingMask.show(); 30 | } 31 | 32 | hide() { 33 | this.loadingMask.hide(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /dist/es6/loading-mask/loading-mask.js: -------------------------------------------------------------------------------- 1 | import $ from 'jquery'; 2 | import {Locale} from '../locale'; 3 | 4 | export class LoadingMask { 5 | constructor(resources) { 6 | this.loadingMask = undefined; 7 | this.dimScreen = undefined; 8 | this.dialog = undefined; 9 | this.loadingTitle = undefined; 10 | this.title = undefined; 11 | this.locale = Locale.Repository.default; 12 | this._createLoadingMask(); 13 | } 14 | 15 | _createLoadingMask() { 16 | this.title = this.locale.translate('loading'); 17 | this.dimScreen = '
' + this.title +'
'; 18 | $('body').append(this.dimScreen); 19 | this.loadingMask = $('#loadingMask'); 20 | this.loadingTitle = $('.loadingTitle').css({ 21 | color: '#ffffff', 22 | opacity: 1, 23 | fontSize: '2.5em' 24 | //fontFamily: 'Roboto' 25 | }); 26 | } 27 | 28 | show() { 29 | this.loadingMask.show(); 30 | } 31 | 32 | hide() { 33 | this.loadingMask.hide(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Durandal Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /dist/commonjs/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | exports.configure = configure; 7 | 8 | var _config = require('./config'); 9 | 10 | var _logger = require('./logger'); 11 | 12 | Object.defineProperty(exports, 'Logger', { 13 | enumerable: true, 14 | get: function get() { 15 | return _logger.Logger; 16 | } 17 | }); 18 | 19 | var _session = require('./session'); 20 | 21 | Object.defineProperty(exports, 'Session', { 22 | enumerable: true, 23 | get: function get() { 24 | return _session.Session; 25 | } 26 | }); 27 | 28 | var _http = require('./http'); 29 | 30 | Object.defineProperty(exports, 'Http', { 31 | enumerable: true, 32 | get: function get() { 33 | return _http.Http; 34 | } 35 | }); 36 | 37 | var _authorizeSteps = require('./authorize-steps'); 38 | 39 | Object.defineProperty(exports, 'AccessRightsAuthorizeStep', { 40 | enumerable: true, 41 | get: function get() { 42 | return _authorizeSteps.AccessRightsAuthorizeStep; 43 | } 44 | }); 45 | Object.defineProperty(exports, 'RolesAuthorizeStep', { 46 | enumerable: true, 47 | get: function get() { 48 | return _authorizeSteps.RolesAuthorizeStep; 49 | } 50 | }); 51 | 52 | function configure(aurelia, configCallback) { 53 | var config = new _config.Config(); 54 | 55 | if (configCallback !== undefined && typeof configCallback === 'function') { 56 | configCallback(config); 57 | } 58 | 59 | return config.locale(); 60 | } -------------------------------------------------------------------------------- /src/logger.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/16/15. 3 | */ 4 | import toastr from 'CodeSeven/toastr'; 5 | import {Config} from './config'; 6 | 7 | const defaults = { 8 | source: 'app', 9 | title: '', 10 | message: 'no message provided', 11 | data: '', 12 | showToast: true, 13 | type: 'info' 14 | }; 15 | 16 | function log(options) { 17 | var opts = Object.assign({}, defaults, options); 18 | //system.log(opns.source + ', ' + opns.type + ', ' + opns.message + ', ' + opns.data + ' '); 19 | 20 | if (opts.showToast) { 21 | toastr[opts.type](opts.message, opts.title); 22 | } 23 | } 24 | 25 | function sanitize(options, messageType) { 26 | if (typeof options === 'string' || options instanceof String) { 27 | return { 28 | message: options, 29 | type: messageType 30 | }; 31 | } 32 | 33 | options.type = messageType; 34 | return options; 35 | } 36 | 37 | export class Logger { 38 | constructor() { 39 | let defOpts = { 40 | closeButton: true, 41 | positionClass: 'toast-bottom-right', 42 | fadeOut: 1000 43 | }; 44 | 45 | let configOptions = Config.loggerOpts || {}; 46 | let options = Object.assign(toastr.options, defOpts, configOptions); 47 | toastr.options = options; 48 | } 49 | 50 | warn(options) { 51 | log(sanitize(options, 'warning')); 52 | } 53 | 54 | info(options) { 55 | log(sanitize(options, 'info')); 56 | } 57 | 58 | error(options) { 59 | log(sanitize(options, 'error')); 60 | } 61 | 62 | success(options) { 63 | log(sanitize(options, 'success')); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /dist/es6/logger.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/16/15. 3 | */ 4 | import toastr from 'CodeSeven/toastr'; 5 | import {Config} from './config'; 6 | 7 | const defaults = { 8 | source: 'app', 9 | title: '', 10 | message: 'no message provided', 11 | data: '', 12 | showToast: true, 13 | type: 'info' 14 | }; 15 | 16 | function log(options) { 17 | var opts = Object.assign({}, defaults, options); 18 | //system.log(opns.source + ', ' + opns.type + ', ' + opns.message + ', ' + opns.data + ' '); 19 | 20 | if (opts.showToast) { 21 | toastr[opts.type](opts.message, opts.title); 22 | } 23 | } 24 | 25 | function sanitize(options, messageType) { 26 | if (typeof options === 'string' || options instanceof String) { 27 | return { 28 | message: options, 29 | type: messageType 30 | }; 31 | } 32 | 33 | options.type = messageType; 34 | return options; 35 | } 36 | 37 | export class Logger { 38 | constructor() { 39 | let defOpts = { 40 | closeButton: true, 41 | positionClass: 'toast-bottom-right', 42 | fadeOut: 1000 43 | }; 44 | 45 | let configOptions = Config.loggerOpts || {}; 46 | let options = Object.assign(toastr.options, defOpts, configOptions); 47 | toastr.options = options; 48 | } 49 | 50 | warn(options) { 51 | log(sanitize(options, 'warning')); 52 | } 53 | 54 | info(options) { 55 | log(sanitize(options, 'info')); 56 | } 57 | 58 | error(options) { 59 | log(sanitize(options, 'error')); 60 | } 61 | 62 | success(options) { 63 | log(sanitize(options, 'success')); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /dist/amd/resources/en-US.js: -------------------------------------------------------------------------------- 1 | define(['exports'], function (exports) { 2 | 'use strict'; 3 | 4 | Object.defineProperty(exports, '__esModule', { 5 | value: true 6 | }); 7 | var data = { 8 | messages: { 9 | sessionTimedOut: 'Your session has timedout!', 10 | accessDenied: 'Access Denied!', 11 | internalServerError: 'Internal Server Error!', 12 | requestTimeout: 'Request Timeout!', 13 | notAuthorized: 'You are not authorized!', 14 | pleaseLogin: 'Please login!', 15 | errorHappend: 'Upss... Error!', 16 | loading: 'Loading' 17 | } 18 | }; 19 | exports.data = data; 20 | }); 21 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlc291cmNlcy9lbi1VUy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBTyxNQUFJLElBQUksR0FBRztBQUNoQixZQUFRLEVBQUU7QUFDUixxQkFBZSxFQUFFLDRCQUE0QjtBQUM3QyxrQkFBWSxFQUFFLGdCQUFnQjtBQUM5Qix5QkFBbUIsRUFBRSx3QkFBd0I7QUFDN0Msb0JBQWMsRUFBRSxrQkFBa0I7QUFDbEMsbUJBQWEsRUFBRSx5QkFBeUI7QUFDeEMsaUJBQVcsRUFBRSxlQUFlO0FBQzVCLGtCQUFZLEVBQUUsZ0JBQWdCO0FBQzlCLGFBQU8sRUFBRSxTQUFTO0tBQ25CO0dBQ0YsQ0FBQyIsImZpbGUiOiJyZXNvdXJjZXMvZW4tVVMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgbGV0IGRhdGEgPSB7XG4gIG1lc3NhZ2VzOiB7XG4gICAgc2Vzc2lvblRpbWVkT3V0OiAnWW91ciBzZXNzaW9uIGhhcyB0aW1lZG91dCEnLFxuICAgIGFjY2Vzc0RlbmllZDogJ0FjY2VzcyBEZW5pZWQhJyxcbiAgICBpbnRlcm5hbFNlcnZlckVycm9yOiAnSW50ZXJuYWwgU2VydmVyIEVycm9yIScsXG4gICAgcmVxdWVzdFRpbWVvdXQ6ICdSZXF1ZXN0IFRpbWVvdXQhJyxcbiAgICBub3RBdXRob3JpemVkOiAnWW91IGFyZSBub3QgYXV0aG9yaXplZCEnLFxuICAgIHBsZWFzZUxvZ2luOiAnUGxlYXNlIGxvZ2luIScsXG4gICAgZXJyb3JIYXBwZW5kOiAnVXBzcy4uLiBFcnJvciEnLFxuICAgIGxvYWRpbmc6ICdMb2FkaW5nJ1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 -------------------------------------------------------------------------------- /dist/system/resources/en-US.js: -------------------------------------------------------------------------------- 1 | System.register([], function (_export) { 2 | 'use strict'; 3 | 4 | var data; 5 | return { 6 | setters: [], 7 | execute: function () { 8 | data = { 9 | messages: { 10 | sessionTimedOut: 'Your session has timedout!', 11 | accessDenied: 'Access Denied!', 12 | internalServerError: 'Internal Server Error!', 13 | requestTimeout: 'Request Timeout!', 14 | notAuthorized: 'You are not authorized!', 15 | pleaseLogin: 'Please login!', 16 | errorHappend: 'Upss... Error!', 17 | loading: 'Loading' 18 | } 19 | }; 20 | 21 | _export('data', data); 22 | } 23 | }; 24 | }); 25 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlc291cmNlcy9lbi1VUy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7TUFBVyxJQUFJOzs7O0FBQUosVUFBSSxHQUFHO0FBQ2hCLGdCQUFRLEVBQUU7QUFDUix5QkFBZSxFQUFFLDRCQUE0QjtBQUM3QyxzQkFBWSxFQUFFLGdCQUFnQjtBQUM5Qiw2QkFBbUIsRUFBRSx3QkFBd0I7QUFDN0Msd0JBQWMsRUFBRSxrQkFBa0I7QUFDbEMsdUJBQWEsRUFBRSx5QkFBeUI7QUFDeEMscUJBQVcsRUFBRSxlQUFlO0FBQzVCLHNCQUFZLEVBQUUsZ0JBQWdCO0FBQzlCLGlCQUFPLEVBQUUsU0FBUztTQUNuQjtPQUNGIiwiZmlsZSI6InJlc291cmNlcy9lbi1VUy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBsZXQgZGF0YSA9IHtcbiAgbWVzc2FnZXM6IHtcbiAgICBzZXNzaW9uVGltZWRPdXQ6ICdZb3VyIHNlc3Npb24gaGFzIHRpbWVkb3V0IScsXG4gICAgYWNjZXNzRGVuaWVkOiAnQWNjZXNzIERlbmllZCEnLFxuICAgIGludGVybmFsU2VydmVyRXJyb3I6ICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IhJyxcbiAgICByZXF1ZXN0VGltZW91dDogJ1JlcXVlc3QgVGltZW91dCEnLFxuICAgIG5vdEF1dGhvcml6ZWQ6ICdZb3UgYXJlIG5vdCBhdXRob3JpemVkIScsXG4gICAgcGxlYXNlTG9naW46ICdQbGVhc2UgbG9naW4hJyxcbiAgICBlcnJvckhhcHBlbmQ6ICdVcHNzLi4uIEVycm9yIScsXG4gICAgbG9hZGluZzogJ0xvYWRpbmcnXG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # aurelia-auth-session 2 | 3 | This plugin is for the [Aurelia](http://www.aurelia.io/) platform. It sets up authentication, authorization and user session. 4 | 5 | 6 | ## How to install this plugin? 7 | 8 | 1. In your project install the plugin via `jspm` with following command 9 | 10 | ```shell 11 | jspm install bootstrap 12 | jspm install font-awesome 13 | jspm install github:CodeSeven/toastr 14 | jspm install service=github:moshensky/aurelia-auth-session 15 | ``` 16 | 17 | 2. Include css files somewhere (for example app.html) 18 | 19 | ```html 20 | 33 | ``` 34 | 35 | 3. Add plugin configuration in main.js 36 | 37 | ```javascript 38 | 39 | export function configure(aurelia) { 40 | aurelia.use 41 | .plugin('service', (config) => { 42 | config.useLocale('bg-BG'); 43 | config.setHttpService({ 44 | authHost: 'http://localhost:9000', 45 | serviceHost: 'http://localhost:9000', 46 | serviceApiPrefix: '/', 47 | requestTimeout: 30000, // milliseconds 48 | hosts: { 49 | "hostName": 'host address' 50 | } 51 | }); 52 | config.routerAuthStep({ 53 | loginRoute: 'login' 54 | }); 55 | }); 56 | 57 | aurelia.start().then(a => a.setRoot()); 58 | } 59 | ``` 60 | -------------------------------------------------------------------------------- /dist/amd/resources/bg-BG.js: -------------------------------------------------------------------------------- 1 | define(['exports'], function (exports) { 2 | 'use strict'; 3 | 4 | Object.defineProperty(exports, '__esModule', { 5 | value: true 6 | }); 7 | var data = { 8 | messages: { 9 | sessionTimedOut: 'Сесията Ви е изтекла!', 10 | accessDenied: 'Отказан достъп!', 11 | internalServerError: 'Грешка на сървъра!', 12 | requestTimeout: 'Времето за заявката изтече!', 13 | notAuthorized: 'Отказан достъп!', 14 | pleaseLogin: 'Моля влезте в системата!', 15 | errorHappend: 'Опа...Възникна грешка!', 16 | loading: 'Зареждане' 17 | } 18 | }; 19 | exports.data = data; 20 | }); 21 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlc291cmNlcy9iZy1CRy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBTyxNQUFJLElBQUksR0FBRztBQUNoQixZQUFRLEVBQUU7QUFDUixxQkFBZSxFQUFFLHVCQUF1QjtBQUN4QyxrQkFBWSxFQUFFLGlCQUFpQjtBQUMvQix5QkFBbUIsRUFBRSxvQkFBb0I7QUFDekMsb0JBQWMsRUFBRSw2QkFBNkI7QUFDN0MsbUJBQWEsRUFBRSxpQkFBaUI7QUFDaEMsaUJBQVcsRUFBRSwwQkFBMEI7QUFDdkMsa0JBQVksRUFBRSx3QkFBd0I7QUFDdEMsYUFBTyxFQUFFLFdBQVc7S0FDckI7R0FDRixDQUFDIiwiZmlsZSI6InJlc291cmNlcy9iZy1CRy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBsZXQgZGF0YSA9IHtcbiAgbWVzc2FnZXM6IHtcbiAgICBzZXNzaW9uVGltZWRPdXQ6ICfQodC10YHQuNGP0YLQsCDQktC4INC1INC40LfRgtC10LrQu9CwIScsXG4gICAgYWNjZXNzRGVuaWVkOiAn0J7RgtC60LDQt9Cw0L0g0LTQvtGB0YLRitC/IScsXG4gICAgaW50ZXJuYWxTZXJ2ZXJFcnJvcjogJ9CT0YDQtdGI0LrQsCDQvdCwINGB0YrRgNCy0YrRgNCwIScsXG4gICAgcmVxdWVzdFRpbWVvdXQ6ICfQktGA0LXQvNC10YLQviDQt9CwINC30LDRj9Cy0LrQsNGC0LAg0LjQt9GC0LXRh9C1IScsXG4gICAgbm90QXV0aG9yaXplZDogJ9Ce0YLQutCw0LfQsNC9INC00L7RgdGC0YrQvyEnLFxuICAgIHBsZWFzZUxvZ2luOiAn0JzQvtC70Y8g0LLQu9C10LfRgtC1INCyINGB0LjRgdGC0LXQvNCw0YLQsCEnLFxuICAgIGVycm9ySGFwcGVuZDogJ9Ce0L/QsC4uLtCS0YrQt9C90LjQutC90LAg0LPRgNC10YjQutCwIScsXG4gICAgbG9hZGluZzogJ9CX0LDRgNC10LbQtNCw0L3QtSdcbiAgfVxufTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== -------------------------------------------------------------------------------- /dist/system/resources/bg-BG.js: -------------------------------------------------------------------------------- 1 | System.register([], function (_export) { 2 | 'use strict'; 3 | 4 | var data; 5 | return { 6 | setters: [], 7 | execute: function () { 8 | data = { 9 | messages: { 10 | sessionTimedOut: 'Сесията Ви е изтекла!', 11 | accessDenied: 'Отказан достъп!', 12 | internalServerError: 'Грешка на сървъра!', 13 | requestTimeout: 'Времето за заявката изтече!', 14 | notAuthorized: 'Отказан достъп!', 15 | pleaseLogin: 'Моля влезте в системата!', 16 | errorHappend: 'Опа...Възникна грешка!', 17 | loading: 'Зареждане' 18 | } 19 | }; 20 | 21 | _export('data', data); 22 | } 23 | }; 24 | }); 25 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlc291cmNlcy9iZy1CRy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7TUFBVyxJQUFJOzs7O0FBQUosVUFBSSxHQUFHO0FBQ2hCLGdCQUFRLEVBQUU7QUFDUix5QkFBZSxFQUFFLHVCQUF1QjtBQUN4QyxzQkFBWSxFQUFFLGlCQUFpQjtBQUMvQiw2QkFBbUIsRUFBRSxvQkFBb0I7QUFDekMsd0JBQWMsRUFBRSw2QkFBNkI7QUFDN0MsdUJBQWEsRUFBRSxpQkFBaUI7QUFDaEMscUJBQVcsRUFBRSwwQkFBMEI7QUFDdkMsc0JBQVksRUFBRSx3QkFBd0I7QUFDdEMsaUJBQU8sRUFBRSxXQUFXO1NBQ3JCO09BQ0YiLCJmaWxlIjoicmVzb3VyY2VzL2JnLUJHLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGxldCBkYXRhID0ge1xuICBtZXNzYWdlczoge1xuICAgIHNlc3Npb25UaW1lZE91dDogJ9Ch0LXRgdC40Y/RgtCwINCS0Lgg0LUg0LjQt9GC0LXQutC70LAhJyxcbiAgICBhY2Nlc3NEZW5pZWQ6ICfQntGC0LrQsNC30LDQvSDQtNC+0YHRgtGK0L8hJyxcbiAgICBpbnRlcm5hbFNlcnZlckVycm9yOiAn0JPRgNC10YjQutCwINC90LAg0YHRitGA0LLRitGA0LAhJyxcbiAgICByZXF1ZXN0VGltZW91dDogJ9CS0YDQtdC80LXRgtC+INC30LAg0LfQsNGP0LLQutCw0YLQsCDQuNC30YLQtdGH0LUhJyxcbiAgICBub3RBdXRob3JpemVkOiAn0J7RgtC60LDQt9Cw0L0g0LTQvtGB0YLRitC/IScsXG4gICAgcGxlYXNlTG9naW46ICfQnNC+0LvRjyDQstC70LXQt9GC0LUg0LIg0YHQuNGB0YLQtdC80LDRgtCwIScsXG4gICAgZXJyb3JIYXBwZW5kOiAn0J7Qv9CwLi4u0JLRitC30L3QuNC60L3QsCDQs9GA0LXRiNC60LAhJyxcbiAgICBsb2FkaW5nOiAn0JfQsNGA0LXQttC00LDQvdC1J1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 -------------------------------------------------------------------------------- /dist/system/index.js: -------------------------------------------------------------------------------- 1 | System.register(['./config', './logger', './session', './http', './authorize-steps'], function (_export) { 2 | 'use strict'; 3 | 4 | var Config; 5 | 6 | _export('configure', configure); 7 | 8 | function configure(aurelia, configCallback) { 9 | var config = new Config(); 10 | 11 | if (configCallback !== undefined && typeof configCallback === 'function') { 12 | configCallback(config); 13 | } 14 | 15 | return config.locale(); 16 | } 17 | 18 | return { 19 | setters: [function (_config) { 20 | Config = _config.Config; 21 | }, function (_logger) { 22 | _export('Logger', _logger.Logger); 23 | }, function (_session) { 24 | _export('Session', _session.Session); 25 | }, function (_http) { 26 | _export('Http', _http.Http); 27 | }, function (_authorizeSteps) { 28 | _export('AccessRightsAuthorizeStep', _authorizeSteps.AccessRightsAuthorizeStep); 29 | 30 | _export('RolesAuthorizeStep', _authorizeSteps.RolesAuthorizeStep); 31 | }], 32 | execute: function () {} 33 | }; 34 | }); 35 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFPTyxXQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFO0FBQ2pELFFBQU0sTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7O0FBRTVCLFFBQUcsY0FBYyxLQUFLLFNBQVMsSUFBSSxPQUFPLGNBQWMsQUFBQyxLQUFLLFVBQVUsRUFDeEU7QUFDRSxvQkFBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hCOztBQUVELFdBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0dBQ3hCOzs7O3VCQWhCTyxNQUFNOztnQ0FFTixNQUFNOztrQ0FDTixPQUFPOzs0QkFDUCxJQUFJOzsyREFDSix5QkFBeUI7O29EQUFFLGtCQUFrQiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tICcuL2NvbmZpZyc7XG5cbmV4cG9ydCB7TG9nZ2VyfSBmcm9tICcuL2xvZ2dlcic7XG5leHBvcnQge1Nlc3Npb259IGZyb20gJy4vc2Vzc2lvbic7XG5leHBvcnQge0h0dHB9IGZyb20gJy4vaHR0cCc7XG5leHBvcnQge0FjY2Vzc1JpZ2h0c0F1dGhvcml6ZVN0ZXAsIFJvbGVzQXV0aG9yaXplU3RlcH0gZnJvbSAnLi9hdXRob3JpemUtc3RlcHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlKGF1cmVsaWEsIGNvbmZpZ0NhbGxiYWNrKSB7XG4gIGNvbnN0IGNvbmZpZyA9IG5ldyBDb25maWcoKTtcblxuICBpZihjb25maWdDYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZihjb25maWdDYWxsYmFjaykgPT09ICdmdW5jdGlvbicpXG4gIHtcbiAgICBjb25maWdDYWxsYmFjayhjb25maWcpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5sb2NhbGUoKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // Generated on Fri Dec 05 2014 16:49:29 GMT-0500 (EST) 3 | 4 | module.exports = function(config) { 5 | config.set({ 6 | 7 | // base path that will be used to resolve all patterns (eg. files, exclude) 8 | basePath: '', 9 | 10 | 11 | // frameworks to use 12 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 13 | frameworks: ['jspm', 'jasmine'], 14 | 15 | jspm: { 16 | // Edit this to your needs 17 | loadFiles: ['src/**/*.js', 'test/unit/**/*.js'] 18 | }, 19 | 20 | 21 | // list of files / patterns to load in the browser 22 | files: [], 23 | 24 | 25 | // list of files to exclude 26 | exclude: [ 27 | ], 28 | 29 | 30 | // preprocess matching files before serving them to the browser 31 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 32 | preprocessors: { 33 | 'test/**/*.js': ['babel'], 34 | 'src/**/*.js': ['babel'] 35 | }, 36 | 'babelPreprocessor': { 37 | options: { 38 | sourceMap: 'inline', 39 | modules: 'system', 40 | moduleIds: false, 41 | optional: [ 42 | "es7.decorators", 43 | "es7.classProperties" 44 | ] 45 | } 46 | }, 47 | 48 | // test results reporter to use 49 | // possible values: 'dots', 'progress' 50 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter 51 | reporters: ['progress'], 52 | 53 | 54 | // web server port 55 | port: 9876, 56 | 57 | 58 | // enable / disable colors in the output (reporters and logs) 59 | colors: true, 60 | 61 | 62 | // level of logging 63 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 64 | logLevel: config.LOG_INFO, 65 | 66 | 67 | // enable / disable watching file and executing tests whenever any file changes 68 | autoWatch: true, 69 | 70 | 71 | // start these browsers 72 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 73 | browsers: ['Chrome'], 74 | 75 | 76 | // Continuous Integration mode 77 | // if true, Karma captures browsers, runs the tests and exits 78 | singleRun: false 79 | }); 80 | }; 81 | -------------------------------------------------------------------------------- /src/config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/17/15. 3 | */ 4 | import {Locale} from './locale'; 5 | 6 | export class ConfigDefaults { 7 | } 8 | 9 | ConfigDefaults._defaults = { 10 | locale: 'en-US', 11 | localeResources: 'service/resources/' 12 | }; 13 | 14 | ConfigDefaults.defaults = function () { 15 | var defaults = {}; 16 | Object.assign(defaults, ConfigDefaults._defaults); 17 | return defaults; 18 | }; 19 | 20 | export class Config { 21 | constructor(innerConfig) { 22 | this.innerConfig = innerConfig; 23 | this.values = this.innerConfig ? {} : ConfigDefaults.defaults(); 24 | this.changedHandlers = new Map(); 25 | } 26 | 27 | getValue(identifier) { 28 | if (this.values.hasOwnProperty(identifier) !== null && this.values[identifier] !== undefined) { 29 | return this.values[identifier]; 30 | } 31 | if (this.innerConfig !== null) { 32 | return this.innerConfig.getValue(identifier); 33 | } 34 | throw Error('Config not found: ' + identifier); 35 | } 36 | 37 | setValue(identifier, value) { 38 | this.values[identifier] = value; 39 | return this; //fluent API 40 | } 41 | 42 | onLocaleChanged(callback) { 43 | if (this.innerConfig !== undefined) { 44 | return this.innerConfig.onLocaleChanged(callback); 45 | } else { 46 | let id = ++ValidationConfig.uniqueListenerId; 47 | this.changedHandlers.set(id, callback); 48 | return () => { 49 | this.changedHandlers.delete(id); 50 | }; 51 | } 52 | } 53 | 54 | getDependencies() { 55 | return this.getValue('dependencies'); 56 | } 57 | 58 | setHttpService(httpOpts) { 59 | Config.httpOpts = httpOpts; 60 | } 61 | 62 | setLoggerService(loggerOpts) { 63 | Config.loggerOpts = loggerOpts; 64 | } 65 | 66 | routerAuthStep(opts) { 67 | Config.routerAuthStepOpts = opts; 68 | } 69 | 70 | useLocale(localeIdentifier) { 71 | this.setValue('locale', localeIdentifier); 72 | var callbacks = Array.from(this.changedHandlers.values()); 73 | for (let i = 0; i < callbacks.length; i++) { 74 | callbacks[i](); 75 | } 76 | return this; 77 | } 78 | 79 | locale() { 80 | return Locale.Repository 81 | .load(this.getValue('locale'), this.getValue('localeResources')); 82 | } 83 | } 84 | 85 | Config.uniqueListenerId = 0; 86 | -------------------------------------------------------------------------------- /dist/es6/config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/17/15. 3 | */ 4 | import {Locale} from './locale'; 5 | 6 | export class ConfigDefaults { 7 | } 8 | 9 | ConfigDefaults._defaults = { 10 | locale: 'en-US', 11 | localeResources: 'service/resources/' 12 | }; 13 | 14 | ConfigDefaults.defaults = function () { 15 | var defaults = {}; 16 | Object.assign(defaults, ConfigDefaults._defaults); 17 | return defaults; 18 | }; 19 | 20 | export class Config { 21 | constructor(innerConfig) { 22 | this.innerConfig = innerConfig; 23 | this.values = this.innerConfig ? {} : ConfigDefaults.defaults(); 24 | this.changedHandlers = new Map(); 25 | } 26 | 27 | getValue(identifier) { 28 | if (this.values.hasOwnProperty(identifier) !== null && this.values[identifier] !== undefined) { 29 | return this.values[identifier]; 30 | } 31 | if (this.innerConfig !== null) { 32 | return this.innerConfig.getValue(identifier); 33 | } 34 | throw Error('Config not found: ' + identifier); 35 | } 36 | 37 | setValue(identifier, value) { 38 | this.values[identifier] = value; 39 | return this; //fluent API 40 | } 41 | 42 | onLocaleChanged(callback) { 43 | if (this.innerConfig !== undefined) { 44 | return this.innerConfig.onLocaleChanged(callback); 45 | } else { 46 | let id = ++ValidationConfig.uniqueListenerId; 47 | this.changedHandlers.set(id, callback); 48 | return () => { 49 | this.changedHandlers.delete(id); 50 | }; 51 | } 52 | } 53 | 54 | getDependencies() { 55 | return this.getValue('dependencies'); 56 | } 57 | 58 | setHttpService(httpOpts) { 59 | Config.httpOpts = httpOpts; 60 | } 61 | 62 | setLoggerService(loggerOpts) { 63 | Config.loggerOpts = loggerOpts; 64 | } 65 | 66 | routerAuthStep(opts) { 67 | Config.routerAuthStepOpts = opts; 68 | } 69 | 70 | useLocale(localeIdentifier) { 71 | this.setValue('locale', localeIdentifier); 72 | var callbacks = Array.from(this.changedHandlers.values()); 73 | for (let i = 0; i < callbacks.length; i++) { 74 | callbacks[i](); 75 | } 76 | return this; 77 | } 78 | 79 | locale() { 80 | return Locale.Repository 81 | .load(this.getValue('locale'), this.getValue('localeResources')); 82 | } 83 | } 84 | 85 | Config.uniqueListenerId = 0; 86 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aurelia-auth-session", 3 | "version": "0.0.1", 4 | "description": "common files and config for an aurelia app using auth and webtoken", 5 | "keywords": [ 6 | "aurelia", 7 | "authorization", 8 | "plugin" 9 | ], 10 | "homepage": "http://github.com/moshensky/aurelia-auth-session", 11 | "license": "MIT", 12 | "author": "Nikita Moshensky (http://moshensky.com/)", 13 | "main": "dist/commonjs/index.js", 14 | "repository": { 15 | "type": "git", 16 | "url": "http://github.com/moshensky/aurelia-auth-session" 17 | }, 18 | "devDependencies": { 19 | "aurelia-tools": "^0.1.3", 20 | "browser-sync": "^2.9.6", 21 | "colors": "^1.1.2", 22 | "conventional-changelog": "0.0.11", 23 | "del": "^1.1.0", 24 | "gulp": "^3.8.10", 25 | "gulp-babel": "^5.1.0", 26 | "gulp-bump": "^0.1.11", 27 | "gulp-jade": "^1.1.0", 28 | "gulp-jshint": "^1.9.0", 29 | "gulp-less": "^3.0.3", 30 | "gulp-sourcemaps": "^1.5.2", 31 | "gulp-yuidoc": "^0.1.2", 32 | "jasmine-core": "^2.1.3", 33 | "jshint-stylish": "^1.0.0", 34 | "karma": "^0.12.28", 35 | "karma-babel-preprocessor": "^5.2.1", 36 | "karma-chrome-launcher": "^0.1.7", 37 | "karma-coverage": "^0.3.1", 38 | "karma-jasmine": "^0.3.5", 39 | "karma-jspm": "^1.1.5", 40 | "moment": "^2.10.6", 41 | "object.assign": "^1.0.3", 42 | "require-dir": "^0.1.0", 43 | "run-sequence": "^1.0.2", 44 | "vinyl-paths": "^1.0.0", 45 | "yargs": "^2.1.1" 46 | }, 47 | "jspm": { 48 | "main": "index", 49 | "format": "amd", 50 | "directories": { 51 | "lib": "dist/amd" 52 | }, 53 | "dependencies": { 54 | "CodeSeven/toastr": "github:CodeSeven/toastr@^2.1.2", 55 | "aurelia-dependency-injection": "npm:aurelia-dependency-injection@^1.0.0-beta.1", 56 | "aurelia-http-client": "npm:aurelia-http-client@^1.0.0-beta.1", 57 | "aurelia-router": "npm:aurelia-router@^1.0.0-beta.1", 58 | "babel": "npm:babel-core@5.8.34", 59 | "jquery": "github:components/jquery@^2.1.4" 60 | }, 61 | "devDependencies": { 62 | "babel-runtime": "npm:babel-runtime@5.8.34", 63 | "core-js": "npm:core-js@^1.0.0", 64 | "traceur": "github:jmcriffey/bower-traceur@0.0.91", 65 | "traceur-runtime": "github:jmcriffey/bower-traceur-runtime@0.0.91" 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/authorize-steps.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/17/15. 3 | */ 4 | import {inject} from 'aurelia-dependency-injection'; 5 | import {Session} from './session'; 6 | import {Logger} from './logger'; 7 | import {Locale} from './locale'; 8 | import {Config} from './config'; 9 | import {Redirect} from 'aurelia-router'; 10 | 11 | 12 | class BaseAuthorizeStep { 13 | constructor(session, logger) { 14 | this.session = session; 15 | this.logger = logger; 16 | this.locale = Locale.Repository.default; 17 | this.loginRoute = Config.routerAuthStepOpts.loginRoute; 18 | } 19 | 20 | run(navigationInstruction, next) { 21 | if (!this.session.isUserLoggedIn() && navigationInstruction.config.route !== this.loginRoute) { 22 | this.logger.warn(this.locale.translate('pleaseLogin')); 23 | return next.cancel(new Redirect(this.loginRoute)); 24 | } 25 | 26 | let canAccess = this.authorize(navigationInstruction); 27 | if (canAccess === false) { 28 | this.logger.error(this.locale.translate('notAuthorized')); 29 | return next.cancel(); 30 | } 31 | 32 | return next(); 33 | } 34 | 35 | authorize(navigationInstruction) { 36 | if (navigationInstruction.parentInstruction === null) { 37 | return this.canAccess(navigationInstruction); 38 | } else { 39 | let canAccess = this.canAccess(navigationInstruction); 40 | if (hasRole){ 41 | return this.authorize(navigationInstruction.parentInstruction) 42 | } else { 43 | return false; 44 | } 45 | } 46 | } 47 | 48 | canAccess() { 49 | 50 | } 51 | } 52 | 53 | 54 | @inject(Session, Logger) 55 | export class RolesAuthorizeStep extends BaseAuthorizeStep { 56 | constructor(session, logger) { 57 | super(session, logger); 58 | } 59 | 60 | canAccess(navigationInstruction) { 61 | if (navigationInstruction.config.roles) { 62 | return this.session.userHasAtLeastOneRole(navigationInstruction.config.roles); 63 | } 64 | 65 | return true; 66 | } 67 | } 68 | 69 | 70 | @inject(Session, Logger) 71 | export class AccessRightsAuthorizeStep extends BaseAuthorizeStep { 72 | constructor(session, logger) { 73 | super(session, logger); 74 | } 75 | 76 | canAccess(navigationInstruction) { 77 | if (navigationInstruction.config.accessRight) { 78 | return this.session.userHasAccessRight(navigationInstruction.config.accessRight); 79 | } 80 | 81 | return true; 82 | } 83 | } 84 | 85 | -------------------------------------------------------------------------------- /dist/es6/authorize-steps.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/17/15. 3 | */ 4 | import {inject} from 'aurelia-dependency-injection'; 5 | import {Session} from './session'; 6 | import {Logger} from './logger'; 7 | import {Locale} from './locale'; 8 | import {Config} from './config'; 9 | import {Redirect} from 'aurelia-router'; 10 | 11 | 12 | class BaseAuthorizeStep { 13 | constructor(session, logger) { 14 | this.session = session; 15 | this.logger = logger; 16 | this.locale = Locale.Repository.default; 17 | this.loginRoute = Config.routerAuthStepOpts.loginRoute; 18 | } 19 | 20 | run(navigationInstruction, next) { 21 | if (!this.session.isUserLoggedIn() && navigationInstruction.config.route !== this.loginRoute) { 22 | this.logger.warn(this.locale.translate('pleaseLogin')); 23 | return next.cancel(new Redirect(this.loginRoute)); 24 | } 25 | 26 | let canAccess = this.authorize(navigationInstruction); 27 | if (canAccess === false) { 28 | this.logger.error(this.locale.translate('notAuthorized')); 29 | return next.cancel(); 30 | } 31 | 32 | return next(); 33 | } 34 | 35 | authorize(navigationInstruction) { 36 | if (navigationInstruction.parentInstruction === null) { 37 | return this.canAccess(navigationInstruction); 38 | } else { 39 | let canAccess = this.canAccess(navigationInstruction); 40 | if (hasRole){ 41 | return this.authorize(navigationInstruction.parentInstruction) 42 | } else { 43 | return false; 44 | } 45 | } 46 | } 47 | 48 | canAccess() { 49 | 50 | } 51 | } 52 | 53 | 54 | @inject(Session, Logger) 55 | export class RolesAuthorizeStep extends BaseAuthorizeStep { 56 | constructor(session, logger) { 57 | super(session, logger); 58 | } 59 | 60 | canAccess(navigationInstruction) { 61 | if (navigationInstruction.config.roles) { 62 | return this.session.userHasAtLeastOneRole(navigationInstruction.config.roles); 63 | } 64 | 65 | return true; 66 | } 67 | } 68 | 69 | 70 | @inject(Session, Logger) 71 | export class AccessRightsAuthorizeStep extends BaseAuthorizeStep { 72 | constructor(session, logger) { 73 | super(session, logger); 74 | } 75 | 76 | canAccess(navigationInstruction) { 77 | if (navigationInstruction.config.accessRight) { 78 | return this.session.userHasAccessRight(navigationInstruction.config.accessRight); 79 | } 80 | 81 | return true; 82 | } 83 | } 84 | 85 | -------------------------------------------------------------------------------- /dist/commonjs/loading-mask/loading-mask.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | 7 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 8 | 9 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } 10 | 11 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 12 | 13 | var _jquery = require('jquery'); 14 | 15 | var _jquery2 = _interopRequireDefault(_jquery); 16 | 17 | var _locale = require('../locale'); 18 | 19 | var LoadingMask = (function () { 20 | function LoadingMask(resources) { 21 | _classCallCheck(this, LoadingMask); 22 | 23 | this.loadingMask = undefined; 24 | this.dimScreen = undefined; 25 | this.dialog = undefined; 26 | this.loadingTitle = undefined; 27 | this.title = undefined; 28 | this.locale = _locale.Locale.Repository['default']; 29 | this._createLoadingMask(); 30 | } 31 | 32 | _createClass(LoadingMask, [{ 33 | key: '_createLoadingMask', 34 | value: function _createLoadingMask() { 35 | this.title = this.locale.translate('loading'); 36 | this.dimScreen = '
' + this.title + '
'; 37 | (0, _jquery2['default'])('body').append(this.dimScreen); 38 | this.loadingMask = (0, _jquery2['default'])('#loadingMask'); 39 | this.loadingTitle = (0, _jquery2['default'])('.loadingTitle').css({ 40 | color: '#ffffff', 41 | opacity: 1, 42 | fontSize: '2.5em' 43 | }); 44 | } 45 | }, { 46 | key: 'show', 47 | value: function show() { 48 | this.loadingMask.show(); 49 | } 50 | }, { 51 | key: 'hide', 52 | value: function hide() { 53 | this.loadingMask.hide(); 54 | } 55 | }]); 56 | 57 | return LoadingMask; 58 | })(); 59 | 60 | exports.LoadingMask = LoadingMask; -------------------------------------------------------------------------------- /src/locale.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/17/15. 3 | */ 4 | export class Locale{ 5 | constructor(defaults, data) 6 | { 7 | this.defaults = defaults; 8 | this.currentLocale = data; 9 | } 10 | 11 | getValueFor(identifier, category) { 12 | if (this.currentLocale && this.currentLocale[category]) { 13 | var currentLocaleSetting = this.currentLocale[category][identifier]; 14 | if (currentLocaleSetting !== undefined && currentLocaleSetting !== null) 15 | return currentLocaleSetting; 16 | } 17 | if (this.defaults[category]) { 18 | var defaultSetting = this.defaults[category][identifier]; 19 | if (defaultSetting !== undefined && defaultSetting !== null) 20 | return defaultSetting; 21 | } 22 | throw 'validation: I18N: Could not find: ' + identifier + ' in category: ' + category; 23 | } 24 | 25 | setting(settingIdentifier) { 26 | return this.getValueFor(settingIdentifier, 'settings'); 27 | } 28 | 29 | translate(translationIdentifier, newValue, threshold) { 30 | var translation = this.getValueFor(translationIdentifier, 'messages'); 31 | if (typeof translation === 'function') { 32 | return translation(newValue, threshold); 33 | } 34 | if (typeof translation === 'string') { 35 | return translation; 36 | } 37 | throw 'Validation message for ' + translationIdentifier + 'was in an unsupported format'; 38 | } 39 | } 40 | 41 | class LocaleRepository { 42 | constructor(){ 43 | this.default = null; 44 | this.instances = new Map(); 45 | this.defaults = { 46 | settings: {}, 47 | messages: {} 48 | }; 49 | } 50 | 51 | load(localeIdentifier, basePath) { 52 | if(!basePath) basePath = 'aurelia-custom-app-common-files/resources/'; 53 | 54 | return new Promise((resolve, reject) => { 55 | if(this.instances.has(localeIdentifier)) { 56 | let locale = this.instances.get(localeIdentifier); 57 | resolve(locale); 58 | } else { 59 | System.import(basePath + localeIdentifier).then((resource) => { 60 | let locale = this.addLocale(localeIdentifier, resource.data); 61 | resolve(locale); 62 | }); 63 | } 64 | }); 65 | } 66 | 67 | addLocale(localeIdentifier, data) 68 | { 69 | var instance = new Locale(this.defaults, data); 70 | this.instances.set(localeIdentifier, instance); 71 | if(this.default === null) 72 | this.default = instance; 73 | return instance; 74 | } 75 | } 76 | 77 | Locale.Repository = new LocaleRepository(); 78 | -------------------------------------------------------------------------------- /dist/es6/locale.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/17/15. 3 | */ 4 | export class Locale{ 5 | constructor(defaults, data) 6 | { 7 | this.defaults = defaults; 8 | this.currentLocale = data; 9 | } 10 | 11 | getValueFor(identifier, category) { 12 | if (this.currentLocale && this.currentLocale[category]) { 13 | var currentLocaleSetting = this.currentLocale[category][identifier]; 14 | if (currentLocaleSetting !== undefined && currentLocaleSetting !== null) 15 | return currentLocaleSetting; 16 | } 17 | if (this.defaults[category]) { 18 | var defaultSetting = this.defaults[category][identifier]; 19 | if (defaultSetting !== undefined && defaultSetting !== null) 20 | return defaultSetting; 21 | } 22 | throw 'validation: I18N: Could not find: ' + identifier + ' in category: ' + category; 23 | } 24 | 25 | setting(settingIdentifier) { 26 | return this.getValueFor(settingIdentifier, 'settings'); 27 | } 28 | 29 | translate(translationIdentifier, newValue, threshold) { 30 | var translation = this.getValueFor(translationIdentifier, 'messages'); 31 | if (typeof translation === 'function') { 32 | return translation(newValue, threshold); 33 | } 34 | if (typeof translation === 'string') { 35 | return translation; 36 | } 37 | throw 'Validation message for ' + translationIdentifier + 'was in an unsupported format'; 38 | } 39 | } 40 | 41 | class LocaleRepository { 42 | constructor(){ 43 | this.default = null; 44 | this.instances = new Map(); 45 | this.defaults = { 46 | settings: {}, 47 | messages: {} 48 | }; 49 | } 50 | 51 | load(localeIdentifier, basePath) { 52 | if(!basePath) basePath = 'aurelia-custom-app-common-files/resources/'; 53 | 54 | return new Promise((resolve, reject) => { 55 | if(this.instances.has(localeIdentifier)) { 56 | let locale = this.instances.get(localeIdentifier); 57 | resolve(locale); 58 | } else { 59 | System.import(basePath + localeIdentifier).then((resource) => { 60 | let locale = this.addLocale(localeIdentifier, resource.data); 61 | resolve(locale); 62 | }); 63 | } 64 | }); 65 | } 66 | 67 | addLocale(localeIdentifier, data) 68 | { 69 | var instance = new Locale(this.defaults, data); 70 | this.instances.set(localeIdentifier, instance); 71 | if(this.default === null) 72 | this.default = instance; 73 | return instance; 74 | } 75 | } 76 | 77 | Locale.Repository = new LocaleRepository(); 78 | -------------------------------------------------------------------------------- /dist/amd/index.js: -------------------------------------------------------------------------------- 1 | define(['exports', './config', './logger', './session', './http', './authorize-steps'], function (exports, _config, _logger, _session, _http, _authorizeSteps) { 2 | 'use strict'; 3 | 4 | Object.defineProperty(exports, '__esModule', { 5 | value: true 6 | }); 7 | exports.configure = configure; 8 | Object.defineProperty(exports, 'Logger', { 9 | enumerable: true, 10 | get: function get() { 11 | return _logger.Logger; 12 | } 13 | }); 14 | Object.defineProperty(exports, 'Session', { 15 | enumerable: true, 16 | get: function get() { 17 | return _session.Session; 18 | } 19 | }); 20 | Object.defineProperty(exports, 'Http', { 21 | enumerable: true, 22 | get: function get() { 23 | return _http.Http; 24 | } 25 | }); 26 | Object.defineProperty(exports, 'AccessRightsAuthorizeStep', { 27 | enumerable: true, 28 | get: function get() { 29 | return _authorizeSteps.AccessRightsAuthorizeStep; 30 | } 31 | }); 32 | Object.defineProperty(exports, 'RolesAuthorizeStep', { 33 | enumerable: true, 34 | get: function get() { 35 | return _authorizeSteps.RolesAuthorizeStep; 36 | } 37 | }); 38 | 39 | function configure(aurelia, configCallback) { 40 | var config = new _config.Config(); 41 | 42 | if (configCallback !== undefined && typeof configCallback === 'function') { 43 | configCallback(config); 44 | } 45 | 46 | return config.locale(); 47 | } 48 | }); 49 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7cUJBRVEsTUFBTTs7Ozs7O3NCQUNOLE9BQU87Ozs7OzttQkFDUCxJQUFJOzs7Ozs7NkJBQ0oseUJBQXlCOzs7Ozs7NkJBQUUsa0JBQWtCOzs7O0FBRTlDLFdBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUU7QUFDakQsUUFBTSxNQUFNLEdBQUcsWUFSVCxNQUFNLEVBUWUsQ0FBQzs7QUFFNUIsUUFBRyxjQUFjLEtBQUssU0FBUyxJQUFJLE9BQU8sY0FBYyxBQUFDLEtBQUssVUFBVSxFQUN4RTtBQUNFLG9CQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEI7O0FBRUQsV0FBTyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7R0FDeEIiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbmZpZ30gZnJvbSAnLi9jb25maWcnO1xuXG5leHBvcnQge0xvZ2dlcn0gZnJvbSAnLi9sb2dnZXInO1xuZXhwb3J0IHtTZXNzaW9ufSBmcm9tICcuL3Nlc3Npb24nO1xuZXhwb3J0IHtIdHRwfSBmcm9tICcuL2h0dHAnO1xuZXhwb3J0IHtBY2Nlc3NSaWdodHNBdXRob3JpemVTdGVwLCBSb2xlc0F1dGhvcml6ZVN0ZXB9IGZyb20gJy4vYXV0aG9yaXplLXN0ZXBzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZShhdXJlbGlhLCBjb25maWdDYWxsYmFjaykge1xuICBjb25zdCBjb25maWcgPSBuZXcgQ29uZmlnKCk7XG5cbiAgaWYoY29uZmlnQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YoY29uZmlnQ2FsbGJhY2spID09PSAnZnVuY3Rpb24nKVxuICB7XG4gICAgY29uZmlnQ2FsbGJhY2soY29uZmlnKTtcbiAgfVxuXG4gIHJldHVybiBjb25maWcubG9jYWxlKCk7XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= -------------------------------------------------------------------------------- /dist/commonjs/logger.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | 7 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 8 | 9 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } 10 | 11 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 12 | 13 | var _CodeSevenToastr = require('CodeSeven/toastr'); 14 | 15 | var _CodeSevenToastr2 = _interopRequireDefault(_CodeSevenToastr); 16 | 17 | var _config = require('./config'); 18 | 19 | var defaults = { 20 | source: 'app', 21 | title: '', 22 | message: 'no message provided', 23 | data: '', 24 | showToast: true, 25 | type: 'info' 26 | }; 27 | 28 | function log(options) { 29 | var opts = Object.assign({}, defaults, options); 30 | 31 | if (opts.showToast) { 32 | _CodeSevenToastr2['default'][opts.type](opts.message, opts.title); 33 | } 34 | } 35 | 36 | function sanitize(options, messageType) { 37 | if (typeof options === 'string' || options instanceof String) { 38 | return { 39 | message: options, 40 | type: messageType 41 | }; 42 | } 43 | 44 | options.type = messageType; 45 | return options; 46 | } 47 | 48 | var Logger = (function () { 49 | function Logger() { 50 | _classCallCheck(this, Logger); 51 | 52 | var defOpts = { 53 | closeButton: true, 54 | positionClass: 'toast-bottom-right', 55 | fadeOut: 1000 56 | }; 57 | 58 | var configOptions = _config.Config.loggerOpts || {}; 59 | var options = Object.assign(_CodeSevenToastr2['default'].options, defOpts, configOptions); 60 | _CodeSevenToastr2['default'].options = options; 61 | } 62 | 63 | _createClass(Logger, [{ 64 | key: 'warn', 65 | value: function warn(options) { 66 | log(sanitize(options, 'warning')); 67 | } 68 | }, { 69 | key: 'info', 70 | value: function info(options) { 71 | log(sanitize(options, 'info')); 72 | } 73 | }, { 74 | key: 'error', 75 | value: function error(options) { 76 | log(sanitize(options, 'error')); 77 | } 78 | }, { 79 | key: 'success', 80 | value: function success(options) { 81 | log(sanitize(options, 'success')); 82 | } 83 | }]); 84 | 85 | return Logger; 86 | })(); 87 | 88 | exports.Logger = Logger; -------------------------------------------------------------------------------- /src/session.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/16/15. 3 | */ 4 | import {inject} from 'aurelia-dependency-injection'; 5 | import {Router} from 'aurelia-router'; 6 | import {Logger} from './logger'; 7 | 8 | const constant = { 9 | appData: 'appData' 10 | }; 11 | 12 | @inject(Router, Logger) 13 | export class Session { 14 | 15 | constructor(router, logger) { 16 | this.router = router; 17 | this.log = logger; 18 | 19 | this.initUserData(); 20 | 21 | if (this.userRemembered()) { 22 | this.restoreData(); 23 | } 24 | } 25 | 26 | initUserData() { 27 | this.userName = null; 28 | this.userClaims = []; 29 | this.userRoles = []; 30 | this.userAccessRights = []; 31 | 32 | this.isLoggedIn = false; 33 | this.isBusy = false; 34 | } 35 | 36 | setUser(data) { 37 | if (data) { 38 | localStorage[constant.appData] = JSON.stringify(data); 39 | this.restoreData(); 40 | } 41 | } 42 | 43 | clearUser() { 44 | localStorage.clear(); 45 | this.initUserData(); 46 | } 47 | 48 | userHasAccessRight(requiredAccessRight) { 49 | return this.userAccessRights[requiredAccessRight] === true; 50 | } 51 | 52 | userHasAllAccessRights(requiredAccessRights) { 53 | return requiredAccessRights.every(accessRight => { 54 | return this.userHasAccessRight(accessRight); 55 | }) 56 | } 57 | 58 | userHasRole(requredRole) { 59 | return this.userRoles[requredRole] === true; 60 | } 61 | 62 | userHasAtLeastOneRole(requiredRoles) { 63 | return requiredRoles.some(requiredRole => { 64 | return this.userHasRole(requiredRole); 65 | }); 66 | } 67 | 68 | getUserClaim(claimType) { 69 | return this.userClaims[claimType]; 70 | } 71 | 72 | isUserLoggedIn() { 73 | return this.isLoggedIn === true; 74 | } 75 | 76 | userRemembered() { 77 | let isInLocalStorage = localStorage[constant.appData] !== undefined; 78 | return isInLocalStorage; 79 | } 80 | 81 | restoreData() { 82 | const data = JSON.parse(localStorage[constant.appData]); 83 | 84 | this.userName = data.userName; 85 | this.userClaims = data.userClaims.reduce(function (hash, userClaim) { 86 | hash[userClaim.type] = userClaim.value; 87 | return hash; 88 | }, {}); 89 | this.userRoles = data.userRoles.reduce((hash, userRole) => { 90 | hash[userRole] = true; 91 | return hash; 92 | }, {}); 93 | this.userAccessRights = data.userAccessRights.reduce((hash, accessRight) => { 94 | hash[accessRight] = true; 95 | return hash; 96 | }, {}); 97 | 98 | // todo: delete 99 | this.userAccessRights['access'] = true; 100 | 101 | this.isLoggedIn = true; 102 | this.router.navigate(''); 103 | } 104 | 105 | rememberedToken() { 106 | const token = JSON.parse(localStorage[constant.appData]).token; 107 | return token; 108 | } 109 | 110 | getUserName() { 111 | return this.userName; 112 | } 113 | } 114 | 115 | -------------------------------------------------------------------------------- /dist/es6/session.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/16/15. 3 | */ 4 | import {inject} from 'aurelia-dependency-injection'; 5 | import {Router} from 'aurelia-router'; 6 | import {Logger} from './logger'; 7 | 8 | const constant = { 9 | appData: 'appData' 10 | }; 11 | 12 | @inject(Router, Logger) 13 | export class Session { 14 | 15 | constructor(router, logger) { 16 | this.router = router; 17 | this.log = logger; 18 | 19 | this.initUserData(); 20 | 21 | if (this.userRemembered()) { 22 | this.restoreData(); 23 | } 24 | } 25 | 26 | initUserData() { 27 | this.userName = null; 28 | this.userClaims = []; 29 | this.userRoles = []; 30 | this.userAccessRights = []; 31 | 32 | this.isLoggedIn = false; 33 | this.isBusy = false; 34 | } 35 | 36 | setUser(data) { 37 | if (data) { 38 | localStorage[constant.appData] = JSON.stringify(data); 39 | this.restoreData(); 40 | } 41 | } 42 | 43 | clearUser() { 44 | localStorage.clear(); 45 | this.initUserData(); 46 | } 47 | 48 | userHasAccessRight(requiredAccessRight) { 49 | return this.userAccessRights[requiredAccessRight] === true; 50 | } 51 | 52 | userHasAllAccessRights(requiredAccessRights) { 53 | return requiredAccessRights.every(accessRight => { 54 | return this.userHasAccessRight(accessRight); 55 | }) 56 | } 57 | 58 | userHasRole(requredRole) { 59 | return this.userRoles[requredRole] === true; 60 | } 61 | 62 | userHasAtLeastOneRole(requiredRoles) { 63 | return requiredRoles.some(requiredRole => { 64 | return this.userHasRole(requiredRole); 65 | }); 66 | } 67 | 68 | getUserClaim(claimType) { 69 | return this.userClaims[claimType]; 70 | } 71 | 72 | isUserLoggedIn() { 73 | return this.isLoggedIn === true; 74 | } 75 | 76 | userRemembered() { 77 | let isInLocalStorage = localStorage[constant.appData] !== undefined; 78 | return isInLocalStorage; 79 | } 80 | 81 | restoreData() { 82 | const data = JSON.parse(localStorage[constant.appData]); 83 | 84 | this.userName = data.userName; 85 | this.userClaims = data.userClaims.reduce(function (hash, userClaim) { 86 | hash[userClaim.type] = userClaim.value; 87 | return hash; 88 | }, {}); 89 | this.userRoles = data.userRoles.reduce((hash, userRole) => { 90 | hash[userRole] = true; 91 | return hash; 92 | }, {}); 93 | this.userAccessRights = data.userAccessRights.reduce((hash, accessRight) => { 94 | hash[accessRight] = true; 95 | return hash; 96 | }, {}); 97 | 98 | // todo: delete 99 | this.userAccessRights['access'] = true; 100 | 101 | this.isLoggedIn = true; 102 | this.router.navigate(''); 103 | } 104 | 105 | rememberedToken() { 106 | const token = JSON.parse(localStorage[constant.appData]).token; 107 | return token; 108 | } 109 | 110 | getUserName() { 111 | return this.userName; 112 | } 113 | } 114 | 115 | -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | System.config({ 2 | defaultJSExtensions: true, 3 | transpiler: "babel", 4 | babelOptions: { 5 | "optional": [ 6 | "es7.decorators", 7 | "es7.classProperties", 8 | "runtime" 9 | ] 10 | }, 11 | paths: { 12 | "*": "dist/*", 13 | "github:*": "jspm_packages/github/*", 14 | "npm:*": "jspm_packages/npm/*" 15 | }, 16 | 17 | map: { 18 | "CodeSeven/toastr": "github:CodeSeven/toastr@2.1.2", 19 | "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.0.0-beta.1", 20 | "aurelia-http-client": "npm:aurelia-http-client@1.0.0-beta.1", 21 | "aurelia-router": "npm:aurelia-router@1.0.0-beta.1", 22 | "babel": "npm:babel-core@5.8.34", 23 | "babel-runtime": "npm:babel-runtime@5.8.34", 24 | "core-js": "npm:core-js@1.2.6", 25 | "jquery": "github:components/jquery@2.1.4", 26 | "github:jspm/nodelibs-assert@0.1.0": { 27 | "assert": "npm:assert@1.3.0" 28 | }, 29 | "github:jspm/nodelibs-path@0.1.0": { 30 | "path-browserify": "npm:path-browserify@0.0.0" 31 | }, 32 | "github:jspm/nodelibs-process@0.1.2": { 33 | "process": "npm:process@0.11.2" 34 | }, 35 | "github:jspm/nodelibs-util@0.1.0": { 36 | "util": "npm:util@0.10.3" 37 | }, 38 | "npm:assert@1.3.0": { 39 | "util": "npm:util@0.10.3" 40 | }, 41 | "npm:aurelia-dependency-injection@1.0.0-beta.1": { 42 | "aurelia-logging": "npm:aurelia-logging@1.0.0-beta.1", 43 | "aurelia-metadata": "npm:aurelia-metadata@1.0.0-beta.1", 44 | "aurelia-pal": "npm:aurelia-pal@1.0.0-beta.1", 45 | "core-js": "npm:core-js@1.2.6" 46 | }, 47 | "npm:aurelia-event-aggregator@1.0.0-beta.1": { 48 | "aurelia-logging": "npm:aurelia-logging@1.0.0-beta.1" 49 | }, 50 | "npm:aurelia-http-client@1.0.0-beta.1": { 51 | "aurelia-pal": "npm:aurelia-pal@1.0.0-beta.1", 52 | "aurelia-path": "npm:aurelia-path@1.0.0-beta.1", 53 | "core-js": "npm:core-js@1.2.6" 54 | }, 55 | "npm:aurelia-metadata@1.0.0-beta.1": { 56 | "aurelia-pal": "npm:aurelia-pal@1.0.0-beta.1", 57 | "core-js": "npm:core-js@1.2.6" 58 | }, 59 | "npm:aurelia-route-recognizer@1.0.0-beta.1": { 60 | "aurelia-path": "npm:aurelia-path@1.0.0-beta.1", 61 | "core-js": "npm:core-js@1.2.6" 62 | }, 63 | "npm:aurelia-router@1.0.0-beta.1": { 64 | "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.0.0-beta.1", 65 | "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.0-beta.1", 66 | "aurelia-history": "npm:aurelia-history@1.0.0-beta.1", 67 | "aurelia-logging": "npm:aurelia-logging@1.0.0-beta.1", 68 | "aurelia-path": "npm:aurelia-path@1.0.0-beta.1", 69 | "aurelia-route-recognizer": "npm:aurelia-route-recognizer@1.0.0-beta.1", 70 | "core-js": "npm:core-js@1.2.6" 71 | }, 72 | "npm:babel-runtime@5.8.34": { 73 | "process": "github:jspm/nodelibs-process@0.1.2" 74 | }, 75 | "npm:core-js@1.2.6": { 76 | "fs": "github:jspm/nodelibs-fs@0.1.2", 77 | "path": "github:jspm/nodelibs-path@0.1.0", 78 | "process": "github:jspm/nodelibs-process@0.1.2", 79 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 80 | }, 81 | "npm:inherits@2.0.1": { 82 | "util": "github:jspm/nodelibs-util@0.1.0" 83 | }, 84 | "npm:path-browserify@0.0.0": { 85 | "process": "github:jspm/nodelibs-process@0.1.2" 86 | }, 87 | "npm:process@0.11.2": { 88 | "assert": "github:jspm/nodelibs-assert@0.1.0" 89 | }, 90 | "npm:util@0.10.3": { 91 | "inherits": "npm:inherits@2.0.1", 92 | "process": "github:jspm/nodelibs-process@0.1.2" 93 | } 94 | } 95 | }); 96 | -------------------------------------------------------------------------------- /dist/commonjs/locale.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | 7 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 8 | 9 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 10 | 11 | var Locale = (function () { 12 | function Locale(defaults, data) { 13 | _classCallCheck(this, Locale); 14 | 15 | this.defaults = defaults; 16 | this.currentLocale = data; 17 | } 18 | 19 | _createClass(Locale, [{ 20 | key: 'getValueFor', 21 | value: function getValueFor(identifier, category) { 22 | if (this.currentLocale && this.currentLocale[category]) { 23 | var currentLocaleSetting = this.currentLocale[category][identifier]; 24 | if (currentLocaleSetting !== undefined && currentLocaleSetting !== null) return currentLocaleSetting; 25 | } 26 | if (this.defaults[category]) { 27 | var defaultSetting = this.defaults[category][identifier]; 28 | if (defaultSetting !== undefined && defaultSetting !== null) return defaultSetting; 29 | } 30 | throw 'validation: I18N: Could not find: ' + identifier + ' in category: ' + category; 31 | } 32 | }, { 33 | key: 'setting', 34 | value: function setting(settingIdentifier) { 35 | return this.getValueFor(settingIdentifier, 'settings'); 36 | } 37 | }, { 38 | key: 'translate', 39 | value: function translate(translationIdentifier, newValue, threshold) { 40 | var translation = this.getValueFor(translationIdentifier, 'messages'); 41 | if (typeof translation === 'function') { 42 | return translation(newValue, threshold); 43 | } 44 | if (typeof translation === 'string') { 45 | return translation; 46 | } 47 | throw 'Validation message for ' + translationIdentifier + 'was in an unsupported format'; 48 | } 49 | }]); 50 | 51 | return Locale; 52 | })(); 53 | 54 | exports.Locale = Locale; 55 | 56 | var LocaleRepository = (function () { 57 | function LocaleRepository() { 58 | _classCallCheck(this, LocaleRepository); 59 | 60 | this['default'] = null; 61 | this.instances = new Map(); 62 | this.defaults = { 63 | settings: {}, 64 | messages: {} 65 | }; 66 | } 67 | 68 | _createClass(LocaleRepository, [{ 69 | key: 'load', 70 | value: function load(localeIdentifier, basePath) { 71 | var _this = this; 72 | 73 | if (!basePath) basePath = 'aurelia-custom-app-common-files/resources/'; 74 | 75 | return new Promise(function (resolve, reject) { 76 | if (_this.instances.has(localeIdentifier)) { 77 | var locale = _this.instances.get(localeIdentifier); 78 | resolve(locale); 79 | } else { 80 | System['import'](basePath + localeIdentifier).then(function (resource) { 81 | var locale = _this.addLocale(localeIdentifier, resource.data); 82 | resolve(locale); 83 | }); 84 | } 85 | }); 86 | } 87 | }, { 88 | key: 'addLocale', 89 | value: function addLocale(localeIdentifier, data) { 90 | var instance = new Locale(this.defaults, data); 91 | this.instances.set(localeIdentifier, instance); 92 | if (this['default'] === null) this['default'] = instance; 93 | return instance; 94 | } 95 | }]); 96 | 97 | return LocaleRepository; 98 | })(); 99 | 100 | Locale.Repository = new LocaleRepository(); -------------------------------------------------------------------------------- /dist/commonjs/config.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | 7 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 8 | 9 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 10 | 11 | var _locale = require('./locale'); 12 | 13 | var ConfigDefaults = function ConfigDefaults() { 14 | _classCallCheck(this, ConfigDefaults); 15 | }; 16 | 17 | exports.ConfigDefaults = ConfigDefaults; 18 | 19 | ConfigDefaults._defaults = { 20 | locale: 'en-US', 21 | localeResources: 'service/resources/' 22 | }; 23 | 24 | ConfigDefaults.defaults = function () { 25 | var defaults = {}; 26 | Object.assign(defaults, ConfigDefaults._defaults); 27 | return defaults; 28 | }; 29 | 30 | var Config = (function () { 31 | function Config(innerConfig) { 32 | _classCallCheck(this, Config); 33 | 34 | this.innerConfig = innerConfig; 35 | this.values = this.innerConfig ? {} : ConfigDefaults.defaults(); 36 | this.changedHandlers = new Map(); 37 | } 38 | 39 | _createClass(Config, [{ 40 | key: 'getValue', 41 | value: function getValue(identifier) { 42 | if (this.values.hasOwnProperty(identifier) !== null && this.values[identifier] !== undefined) { 43 | return this.values[identifier]; 44 | } 45 | if (this.innerConfig !== null) { 46 | return this.innerConfig.getValue(identifier); 47 | } 48 | throw Error('Config not found: ' + identifier); 49 | } 50 | }, { 51 | key: 'setValue', 52 | value: function setValue(identifier, value) { 53 | this.values[identifier] = value; 54 | return this; 55 | } 56 | }, { 57 | key: 'onLocaleChanged', 58 | value: function onLocaleChanged(callback) { 59 | var _this = this; 60 | 61 | if (this.innerConfig !== undefined) { 62 | return this.innerConfig.onLocaleChanged(callback); 63 | } else { 64 | var _ret = (function () { 65 | var id = ++ValidationConfig.uniqueListenerId; 66 | _this.changedHandlers.set(id, callback); 67 | return { 68 | v: function () { 69 | _this.changedHandlers['delete'](id); 70 | } 71 | }; 72 | })(); 73 | 74 | if (typeof _ret === 'object') return _ret.v; 75 | } 76 | } 77 | }, { 78 | key: 'getDependencies', 79 | value: function getDependencies() { 80 | return this.getValue('dependencies'); 81 | } 82 | }, { 83 | key: 'setHttpService', 84 | value: function setHttpService(httpOpts) { 85 | Config.httpOpts = httpOpts; 86 | } 87 | }, { 88 | key: 'setLoggerService', 89 | value: function setLoggerService(loggerOpts) { 90 | Config.loggerOpts = loggerOpts; 91 | } 92 | }, { 93 | key: 'routerAuthStep', 94 | value: function routerAuthStep(opts) { 95 | Config.routerAuthStepOpts = opts; 96 | } 97 | }, { 98 | key: 'useLocale', 99 | value: function useLocale(localeIdentifier) { 100 | this.setValue('locale', localeIdentifier); 101 | var callbacks = Array.from(this.changedHandlers.values()); 102 | for (var i = 0; i < callbacks.length; i++) { 103 | callbacks[i](); 104 | } 105 | return this; 106 | } 107 | }, { 108 | key: 'locale', 109 | value: function locale() { 110 | return _locale.Locale.Repository.load(this.getValue('locale'), this.getValue('localeResources')); 111 | } 112 | }]); 113 | 114 | return Config; 115 | })(); 116 | 117 | exports.Config = Config; 118 | 119 | Config.uniqueListenerId = 0; -------------------------------------------------------------------------------- /dist/commonjs/session.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | 7 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 8 | 9 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 10 | 11 | var _aureliaDependencyInjection = require('aurelia-dependency-injection'); 12 | 13 | var _aureliaRouter = require('aurelia-router'); 14 | 15 | var _logger = require('./logger'); 16 | 17 | var constant = { 18 | appData: 'appData' 19 | }; 20 | 21 | var Session = (function () { 22 | function Session(router, logger) { 23 | _classCallCheck(this, _Session); 24 | 25 | this.router = router; 26 | this.log = logger; 27 | 28 | this.initUserData(); 29 | 30 | if (this.userRemembered()) { 31 | this.restoreData(); 32 | } 33 | } 34 | 35 | _createClass(Session, [{ 36 | key: 'initUserData', 37 | value: function initUserData() { 38 | this.userName = null; 39 | this.userClaims = []; 40 | this.userRoles = []; 41 | this.userAccessRights = []; 42 | 43 | this.isLoggedIn = false; 44 | this.isBusy = false; 45 | } 46 | }, { 47 | key: 'setUser', 48 | value: function setUser(data) { 49 | if (data) { 50 | localStorage[constant.appData] = JSON.stringify(data); 51 | this.restoreData(); 52 | } 53 | } 54 | }, { 55 | key: 'clearUser', 56 | value: function clearUser() { 57 | localStorage.clear(); 58 | this.initUserData(); 59 | } 60 | }, { 61 | key: 'userHasAccessRight', 62 | value: function userHasAccessRight(requiredAccessRight) { 63 | return this.userAccessRights[requiredAccessRight] === true; 64 | } 65 | }, { 66 | key: 'userHasAllAccessRights', 67 | value: function userHasAllAccessRights(requiredAccessRights) { 68 | var _this = this; 69 | 70 | return requiredAccessRights.every(function (accessRight) { 71 | return _this.userHasAccessRight(accessRight); 72 | }); 73 | } 74 | }, { 75 | key: 'userHasRole', 76 | value: function userHasRole(requredRole) { 77 | return this.userRoles[requredRole] === true; 78 | } 79 | }, { 80 | key: 'userHasAtLeastOneRole', 81 | value: function userHasAtLeastOneRole(requiredRoles) { 82 | var _this2 = this; 83 | 84 | return requiredRoles.some(function (requiredRole) { 85 | return _this2.userHasRole(requiredRole); 86 | }); 87 | } 88 | }, { 89 | key: 'getUserClaim', 90 | value: function getUserClaim(claimType) { 91 | return this.userClaims[claimType]; 92 | } 93 | }, { 94 | key: 'isUserLoggedIn', 95 | value: function isUserLoggedIn() { 96 | return this.isLoggedIn === true; 97 | } 98 | }, { 99 | key: 'userRemembered', 100 | value: function userRemembered() { 101 | var isInLocalStorage = localStorage[constant.appData] !== undefined; 102 | return isInLocalStorage; 103 | } 104 | }, { 105 | key: 'restoreData', 106 | value: function restoreData() { 107 | var data = JSON.parse(localStorage[constant.appData]); 108 | 109 | this.userName = data.userName; 110 | this.userClaims = data.userClaims.reduce(function (hash, userClaim) { 111 | hash[userClaim.type] = userClaim.value; 112 | return hash; 113 | }, {}); 114 | this.userRoles = data.userRoles.reduce(function (hash, userRole) { 115 | hash[userRole] = true; 116 | return hash; 117 | }, {}); 118 | this.userAccessRights = data.userAccessRights.reduce(function (hash, accessRight) { 119 | hash[accessRight] = true; 120 | return hash; 121 | }, {}); 122 | 123 | this.userAccessRights['access'] = true; 124 | 125 | this.isLoggedIn = true; 126 | this.router.navigate(''); 127 | } 128 | }, { 129 | key: 'rememberedToken', 130 | value: function rememberedToken() { 131 | var token = JSON.parse(localStorage[constant.appData]).token; 132 | return token; 133 | } 134 | }, { 135 | key: 'getUserName', 136 | value: function getUserName() { 137 | return this.userName; 138 | } 139 | }]); 140 | 141 | var _Session = Session; 142 | Session = (0, _aureliaDependencyInjection.inject)(_aureliaRouter.Router, _logger.Logger)(Session) || Session; 143 | return Session; 144 | })(); 145 | 146 | exports.Session = Session; -------------------------------------------------------------------------------- /src/loading-mask/loading-mask.css: -------------------------------------------------------------------------------- 1 | 2 | /* ==================================================================================== */ 3 | /* LOADING MASK CUSTOM CSS */ 4 | /* ==================================================================================== */ 5 | 6 | .mask { 7 | font-size: 20px; 8 | margin: 100px auto; 9 | width: 1em; 10 | height: 1em; 11 | border-radius: 50%; 12 | position: relative; 13 | text-indent: -9999em; 14 | -webkit-animation: spinner 1.3s infinite linear; 15 | animation: spinner 1.3s infinite linear; 16 | -webkit-transform: translateZ(0); 17 | -ms-transform: translateZ(0); 18 | transform: translateZ(0); 19 | } 20 | 21 | .spinner { 22 | position: absolute; 23 | width: 100%; 24 | height: 100%; 25 | opacity: 0.5; 26 | background-color: #000; 27 | display: none; 28 | top: 0; 29 | z-index: 2000; 30 | text-align: center; 31 | padding-top: 20%; 32 | font-size: 25px; 33 | } 34 | 35 | .loadingTitle { 36 | color: #ffffff; 37 | opacity: 1; 38 | font-size: 2.5em; 39 | } 40 | 41 | @-webkit-keyframes spinner { 42 | 0%, 43 | 100% { 44 | box-shadow: 0 -3em 0 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 0 #ffffff; 45 | } 46 | 12.5% { 47 | box-shadow: 0 -3em 0 0 #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0 0 0 #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 48 | } 49 | 25% { 50 | box-shadow: 0 -3em 0 -0.5em #ffffff, 2em -2em 0 0 #ffffff, 3em 0 0 0.2em #ffffff, 2em 2em 0 0 #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 51 | } 52 | 37.5% { 53 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 0 #ffffff, 2em 2em 0 0.2em #ffffff, 0 3em 0 0em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 54 | } 55 | 50% { 56 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 0em #ffffff, 0 3em 0 0.2em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 57 | } 58 | 62.5% { 59 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 0 #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0 0 0 #ffffff, -2em -2em 0 -1em #ffffff; 60 | } 61 | 75% { 62 | box-shadow: 0em -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0 #ffffff; 63 | } 64 | 87.5% { 65 | box-shadow: 0em -3em 0 0 #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0 #ffffff, -2em -2em 0 0.2em #ffffff; 66 | } 67 | } 68 | @keyframes spinner { 69 | 0%, 70 | 100% { 71 | box-shadow: 0 -3em 0 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 0 #ffffff; 72 | } 73 | 12.5% { 74 | box-shadow: 0 -3em 0 0 #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0 0 0 #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 75 | } 76 | 25% { 77 | box-shadow: 0 -3em 0 -0.5em #ffffff, 2em -2em 0 0 #ffffff, 3em 0 0 0.2em #ffffff, 2em 2em 0 0 #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 78 | } 79 | 37.5% { 80 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 0 #ffffff, 2em 2em 0 0.2em #ffffff, 0 3em 0 0em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 81 | } 82 | 50% { 83 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 0em #ffffff, 0 3em 0 0.2em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 84 | } 85 | 62.5% { 86 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 0 #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0 0 0 #ffffff, -2em -2em 0 -1em #ffffff; 87 | } 88 | 75% { 89 | box-shadow: 0em -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0 #ffffff; 90 | } 91 | 87.5% { 92 | box-shadow: 0em -3em 0 0 #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0 #ffffff, -2em -2em 0 0.2em #ffffff; 93 | } 94 | } 95 | 96 | /* ==================================================================================== */ 97 | /* LOADING MASK CUSTOM CSS END */ 98 | /* ==================================================================================== */ 99 | -------------------------------------------------------------------------------- /dist/amd/loading-mask/loading-mask.css: -------------------------------------------------------------------------------- 1 | 2 | /* ==================================================================================== */ 3 | /* LOADING MASK CUSTOM CSS */ 4 | /* ==================================================================================== */ 5 | 6 | .mask { 7 | font-size: 20px; 8 | margin: 100px auto; 9 | width: 1em; 10 | height: 1em; 11 | border-radius: 50%; 12 | position: relative; 13 | text-indent: -9999em; 14 | -webkit-animation: spinner 1.3s infinite linear; 15 | animation: spinner 1.3s infinite linear; 16 | -webkit-transform: translateZ(0); 17 | -ms-transform: translateZ(0); 18 | transform: translateZ(0); 19 | } 20 | 21 | .spinner { 22 | position: absolute; 23 | width: 100%; 24 | height: 100%; 25 | opacity: 0.5; 26 | background-color: #000; 27 | display: none; 28 | top: 0; 29 | z-index: 2000; 30 | text-align: center; 31 | padding-top: 20%; 32 | font-size: 25px; 33 | } 34 | 35 | .loadingTitle { 36 | color: #ffffff; 37 | opacity: 1; 38 | font-size: 2.5em; 39 | } 40 | 41 | @-webkit-keyframes spinner { 42 | 0%, 43 | 100% { 44 | box-shadow: 0 -3em 0 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 0 #ffffff; 45 | } 46 | 12.5% { 47 | box-shadow: 0 -3em 0 0 #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0 0 0 #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 48 | } 49 | 25% { 50 | box-shadow: 0 -3em 0 -0.5em #ffffff, 2em -2em 0 0 #ffffff, 3em 0 0 0.2em #ffffff, 2em 2em 0 0 #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 51 | } 52 | 37.5% { 53 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 0 #ffffff, 2em 2em 0 0.2em #ffffff, 0 3em 0 0em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 54 | } 55 | 50% { 56 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 0em #ffffff, 0 3em 0 0.2em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 57 | } 58 | 62.5% { 59 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 0 #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0 0 0 #ffffff, -2em -2em 0 -1em #ffffff; 60 | } 61 | 75% { 62 | box-shadow: 0em -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0 #ffffff; 63 | } 64 | 87.5% { 65 | box-shadow: 0em -3em 0 0 #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0 #ffffff, -2em -2em 0 0.2em #ffffff; 66 | } 67 | } 68 | @keyframes spinner { 69 | 0%, 70 | 100% { 71 | box-shadow: 0 -3em 0 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 0 #ffffff; 72 | } 73 | 12.5% { 74 | box-shadow: 0 -3em 0 0 #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0 0 0 #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 75 | } 76 | 25% { 77 | box-shadow: 0 -3em 0 -0.5em #ffffff, 2em -2em 0 0 #ffffff, 3em 0 0 0.2em #ffffff, 2em 2em 0 0 #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 78 | } 79 | 37.5% { 80 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 0 #ffffff, 2em 2em 0 0.2em #ffffff, 0 3em 0 0em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 81 | } 82 | 50% { 83 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 0em #ffffff, 0 3em 0 0.2em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 84 | } 85 | 62.5% { 86 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 0 #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0 0 0 #ffffff, -2em -2em 0 -1em #ffffff; 87 | } 88 | 75% { 89 | box-shadow: 0em -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0 #ffffff; 90 | } 91 | 87.5% { 92 | box-shadow: 0em -3em 0 0 #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0 #ffffff, -2em -2em 0 0.2em #ffffff; 93 | } 94 | } 95 | 96 | /* ==================================================================================== */ 97 | /* LOADING MASK CUSTOM CSS END */ 98 | /* ==================================================================================== */ 99 | -------------------------------------------------------------------------------- /dist/es6/loading-mask/loading-mask.css: -------------------------------------------------------------------------------- 1 | 2 | /* ==================================================================================== */ 3 | /* LOADING MASK CUSTOM CSS */ 4 | /* ==================================================================================== */ 5 | 6 | .mask { 7 | font-size: 20px; 8 | margin: 100px auto; 9 | width: 1em; 10 | height: 1em; 11 | border-radius: 50%; 12 | position: relative; 13 | text-indent: -9999em; 14 | -webkit-animation: spinner 1.3s infinite linear; 15 | animation: spinner 1.3s infinite linear; 16 | -webkit-transform: translateZ(0); 17 | -ms-transform: translateZ(0); 18 | transform: translateZ(0); 19 | } 20 | 21 | .spinner { 22 | position: absolute; 23 | width: 100%; 24 | height: 100%; 25 | opacity: 0.5; 26 | background-color: #000; 27 | display: none; 28 | top: 0; 29 | z-index: 2000; 30 | text-align: center; 31 | padding-top: 20%; 32 | font-size: 25px; 33 | } 34 | 35 | .loadingTitle { 36 | color: #ffffff; 37 | opacity: 1; 38 | font-size: 2.5em; 39 | } 40 | 41 | @-webkit-keyframes spinner { 42 | 0%, 43 | 100% { 44 | box-shadow: 0 -3em 0 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 0 #ffffff; 45 | } 46 | 12.5% { 47 | box-shadow: 0 -3em 0 0 #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0 0 0 #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 48 | } 49 | 25% { 50 | box-shadow: 0 -3em 0 -0.5em #ffffff, 2em -2em 0 0 #ffffff, 3em 0 0 0.2em #ffffff, 2em 2em 0 0 #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 51 | } 52 | 37.5% { 53 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 0 #ffffff, 2em 2em 0 0.2em #ffffff, 0 3em 0 0em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 54 | } 55 | 50% { 56 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 0em #ffffff, 0 3em 0 0.2em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 57 | } 58 | 62.5% { 59 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 0 #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0 0 0 #ffffff, -2em -2em 0 -1em #ffffff; 60 | } 61 | 75% { 62 | box-shadow: 0em -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0 #ffffff; 63 | } 64 | 87.5% { 65 | box-shadow: 0em -3em 0 0 #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0 #ffffff, -2em -2em 0 0.2em #ffffff; 66 | } 67 | } 68 | @keyframes spinner { 69 | 0%, 70 | 100% { 71 | box-shadow: 0 -3em 0 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 0 #ffffff; 72 | } 73 | 12.5% { 74 | box-shadow: 0 -3em 0 0 #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0 0 0 #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 75 | } 76 | 25% { 77 | box-shadow: 0 -3em 0 -0.5em #ffffff, 2em -2em 0 0 #ffffff, 3em 0 0 0.2em #ffffff, 2em 2em 0 0 #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 78 | } 79 | 37.5% { 80 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 0 #ffffff, 2em 2em 0 0.2em #ffffff, 0 3em 0 0em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 81 | } 82 | 50% { 83 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 0em #ffffff, 0 3em 0 0.2em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 84 | } 85 | 62.5% { 86 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 0 #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0 0 0 #ffffff, -2em -2em 0 -1em #ffffff; 87 | } 88 | 75% { 89 | box-shadow: 0em -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0 #ffffff; 90 | } 91 | 87.5% { 92 | box-shadow: 0em -3em 0 0 #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0 #ffffff, -2em -2em 0 0.2em #ffffff; 93 | } 94 | } 95 | 96 | /* ==================================================================================== */ 97 | /* LOADING MASK CUSTOM CSS END */ 98 | /* ==================================================================================== */ 99 | -------------------------------------------------------------------------------- /dist/system/loading-mask/loading-mask.css: -------------------------------------------------------------------------------- 1 | 2 | /* ==================================================================================== */ 3 | /* LOADING MASK CUSTOM CSS */ 4 | /* ==================================================================================== */ 5 | 6 | .mask { 7 | font-size: 20px; 8 | margin: 100px auto; 9 | width: 1em; 10 | height: 1em; 11 | border-radius: 50%; 12 | position: relative; 13 | text-indent: -9999em; 14 | -webkit-animation: spinner 1.3s infinite linear; 15 | animation: spinner 1.3s infinite linear; 16 | -webkit-transform: translateZ(0); 17 | -ms-transform: translateZ(0); 18 | transform: translateZ(0); 19 | } 20 | 21 | .spinner { 22 | position: absolute; 23 | width: 100%; 24 | height: 100%; 25 | opacity: 0.5; 26 | background-color: #000; 27 | display: none; 28 | top: 0; 29 | z-index: 2000; 30 | text-align: center; 31 | padding-top: 20%; 32 | font-size: 25px; 33 | } 34 | 35 | .loadingTitle { 36 | color: #ffffff; 37 | opacity: 1; 38 | font-size: 2.5em; 39 | } 40 | 41 | @-webkit-keyframes spinner { 42 | 0%, 43 | 100% { 44 | box-shadow: 0 -3em 0 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 0 #ffffff; 45 | } 46 | 12.5% { 47 | box-shadow: 0 -3em 0 0 #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0 0 0 #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 48 | } 49 | 25% { 50 | box-shadow: 0 -3em 0 -0.5em #ffffff, 2em -2em 0 0 #ffffff, 3em 0 0 0.2em #ffffff, 2em 2em 0 0 #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 51 | } 52 | 37.5% { 53 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 0 #ffffff, 2em 2em 0 0.2em #ffffff, 0 3em 0 0em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 54 | } 55 | 50% { 56 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 0em #ffffff, 0 3em 0 0.2em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 57 | } 58 | 62.5% { 59 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 0 #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0 0 0 #ffffff, -2em -2em 0 -1em #ffffff; 60 | } 61 | 75% { 62 | box-shadow: 0em -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0 #ffffff; 63 | } 64 | 87.5% { 65 | box-shadow: 0em -3em 0 0 #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0 #ffffff, -2em -2em 0 0.2em #ffffff; 66 | } 67 | } 68 | @keyframes spinner { 69 | 0%, 70 | 100% { 71 | box-shadow: 0 -3em 0 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 0 #ffffff; 72 | } 73 | 12.5% { 74 | box-shadow: 0 -3em 0 0 #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0 0 0 #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 75 | } 76 | 25% { 77 | box-shadow: 0 -3em 0 -0.5em #ffffff, 2em -2em 0 0 #ffffff, 3em 0 0 0.2em #ffffff, 2em 2em 0 0 #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 78 | } 79 | 37.5% { 80 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 0 #ffffff, 2em 2em 0 0.2em #ffffff, 0 3em 0 0em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 81 | } 82 | 50% { 83 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 0em #ffffff, 0 3em 0 0.2em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 84 | } 85 | 62.5% { 86 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 0 #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0 0 0 #ffffff, -2em -2em 0 -1em #ffffff; 87 | } 88 | 75% { 89 | box-shadow: 0em -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0 #ffffff; 90 | } 91 | 87.5% { 92 | box-shadow: 0em -3em 0 0 #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0 #ffffff, -2em -2em 0 0.2em #ffffff; 93 | } 94 | } 95 | 96 | /* ==================================================================================== */ 97 | /* LOADING MASK CUSTOM CSS END */ 98 | /* ==================================================================================== */ 99 | -------------------------------------------------------------------------------- /dist/commonjs/loading-mask/loading-mask.css: -------------------------------------------------------------------------------- 1 | 2 | /* ==================================================================================== */ 3 | /* LOADING MASK CUSTOM CSS */ 4 | /* ==================================================================================== */ 5 | 6 | .mask { 7 | font-size: 20px; 8 | margin: 100px auto; 9 | width: 1em; 10 | height: 1em; 11 | border-radius: 50%; 12 | position: relative; 13 | text-indent: -9999em; 14 | -webkit-animation: spinner 1.3s infinite linear; 15 | animation: spinner 1.3s infinite linear; 16 | -webkit-transform: translateZ(0); 17 | -ms-transform: translateZ(0); 18 | transform: translateZ(0); 19 | } 20 | 21 | .spinner { 22 | position: absolute; 23 | width: 100%; 24 | height: 100%; 25 | opacity: 0.5; 26 | background-color: #000; 27 | display: none; 28 | top: 0; 29 | z-index: 2000; 30 | text-align: center; 31 | padding-top: 20%; 32 | font-size: 25px; 33 | } 34 | 35 | .loadingTitle { 36 | color: #ffffff; 37 | opacity: 1; 38 | font-size: 2.5em; 39 | } 40 | 41 | @-webkit-keyframes spinner { 42 | 0%, 43 | 100% { 44 | box-shadow: 0 -3em 0 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 0 #ffffff; 45 | } 46 | 12.5% { 47 | box-shadow: 0 -3em 0 0 #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0 0 0 #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 48 | } 49 | 25% { 50 | box-shadow: 0 -3em 0 -0.5em #ffffff, 2em -2em 0 0 #ffffff, 3em 0 0 0.2em #ffffff, 2em 2em 0 0 #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 51 | } 52 | 37.5% { 53 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 0 #ffffff, 2em 2em 0 0.2em #ffffff, 0 3em 0 0em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 54 | } 55 | 50% { 56 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 0em #ffffff, 0 3em 0 0.2em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 57 | } 58 | 62.5% { 59 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 0 #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0 0 0 #ffffff, -2em -2em 0 -1em #ffffff; 60 | } 61 | 75% { 62 | box-shadow: 0em -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0 #ffffff; 63 | } 64 | 87.5% { 65 | box-shadow: 0em -3em 0 0 #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0 #ffffff, -2em -2em 0 0.2em #ffffff; 66 | } 67 | } 68 | @keyframes spinner { 69 | 0%, 70 | 100% { 71 | box-shadow: 0 -3em 0 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 0 #ffffff; 72 | } 73 | 12.5% { 74 | box-shadow: 0 -3em 0 0 #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0 0 0 #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 75 | } 76 | 25% { 77 | box-shadow: 0 -3em 0 -0.5em #ffffff, 2em -2em 0 0 #ffffff, 3em 0 0 0.2em #ffffff, 2em 2em 0 0 #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 78 | } 79 | 37.5% { 80 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 0 #ffffff, 2em 2em 0 0.2em #ffffff, 0 3em 0 0em #ffffff, -2em 2em 0 -1em #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 81 | } 82 | 50% { 83 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 0em #ffffff, 0 3em 0 0.2em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 -1em #ffffff, -2em -2em 0 -1em #ffffff; 84 | } 85 | 62.5% { 86 | box-shadow: 0 -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 0 #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0 0 0 #ffffff, -2em -2em 0 -1em #ffffff; 87 | } 88 | 75% { 89 | box-shadow: 0em -3em 0 -1em #ffffff, 2em -2em 0 -1em #ffffff, 3em 0em 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0 #ffffff; 90 | } 91 | 87.5% { 92 | box-shadow: 0em -3em 0 0 #ffffff, 2em -2em 0 -1em #ffffff, 3em 0 0 -1em #ffffff, 2em 2em 0 -1em #ffffff, 0 3em 0 -1em #ffffff, -2em 2em 0 0 #ffffff, -3em 0em 0 0 #ffffff, -2em -2em 0 0.2em #ffffff; 93 | } 94 | } 95 | 96 | /* ==================================================================================== */ 97 | /* LOADING MASK CUSTOM CSS END */ 98 | /* ==================================================================================== */ 99 | -------------------------------------------------------------------------------- /dist/amd/loading-mask/loading-mask.js: -------------------------------------------------------------------------------- 1 | define(['exports', 'jquery', '../locale'], function (exports, _jquery, _locale) { 2 | 'use strict'; 3 | 4 | Object.defineProperty(exports, '__esModule', { 5 | value: true 6 | }); 7 | 8 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } 11 | 12 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 13 | 14 | var _$ = _interopRequireDefault(_jquery); 15 | 16 | var LoadingMask = (function () { 17 | function LoadingMask(resources) { 18 | _classCallCheck(this, LoadingMask); 19 | 20 | this.loadingMask = undefined; 21 | this.dimScreen = undefined; 22 | this.dialog = undefined; 23 | this.loadingTitle = undefined; 24 | this.title = undefined; 25 | this.locale = _locale.Locale.Repository['default']; 26 | this._createLoadingMask(); 27 | } 28 | 29 | _createClass(LoadingMask, [{ 30 | key: '_createLoadingMask', 31 | value: function _createLoadingMask() { 32 | this.title = this.locale.translate('loading'); 33 | this.dimScreen = '
' + this.title + '
'; 34 | (0, _$['default'])('body').append(this.dimScreen); 35 | this.loadingMask = (0, _$['default'])('#loadingMask'); 36 | this.loadingTitle = (0, _$['default'])('.loadingTitle').css({ 37 | color: '#ffffff', 38 | opacity: 1, 39 | fontSize: '2.5em' 40 | }); 41 | } 42 | }, { 43 | key: 'show', 44 | value: function show() { 45 | this.loadingMask.show(); 46 | } 47 | }, { 48 | key: 'hide', 49 | value: function hide() { 50 | this.loadingMask.hide(); 51 | } 52 | }]); 53 | 54 | return LoadingMask; 55 | })(); 56 | 57 | exports.LoadingMask = LoadingMask; 58 | }); 59 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxvYWRpbmctbWFzay9sb2FkaW5nLW1hc2suanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O01BR2EsV0FBVztBQUNYLGFBREEsV0FBVyxDQUNWLFNBQVMsRUFBRTs0QkFEWixXQUFXOztBQUVwQixVQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUM3QixVQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUMzQixVQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUN4QixVQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUM5QixVQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUN2QixVQUFJLENBQUMsTUFBTSxHQUFHLFFBVFYsTUFBTSxDQVNXLFVBQVUsV0FBUSxDQUFDO0FBQ3hDLFVBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0tBQzNCOztpQkFUVSxXQUFXOzthQVdKLDhCQUFHO0FBQ25CLFlBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUMsWUFBSSxDQUFDLFNBQVMsR0FBRyxrRUFBa0UsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFFLHNDQUFzQyxDQUFDO0FBQ3pJLDJCQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakMsWUFBSSxDQUFDLFdBQVcsR0FBRyxtQkFBRSxjQUFjLENBQUMsQ0FBQztBQUNyQyxZQUFJLENBQUMsWUFBWSxHQUFHLG1CQUFFLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6QyxlQUFLLEVBQUUsU0FBUztBQUNoQixpQkFBTyxFQUFFLENBQUM7QUFDVixrQkFBUSxFQUFFLE9BQU87U0FFbEIsQ0FBQyxDQUFDO09BQ0o7OzthQUVHLGdCQUFHO0FBQ0wsWUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztPQUN6Qjs7O2FBRUcsZ0JBQUc7QUFDTCxZQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO09BQ3pCOzs7V0E5QlUsV0FBVyIsImZpbGUiOiJsb2FkaW5nLW1hc2svbG9hZGluZy1tYXNrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCB7TG9jYWxlfSBmcm9tICcuLi9sb2NhbGUnO1xuXG5leHBvcnQgY2xhc3MgTG9hZGluZ01hc2sge1xuICBjb25zdHJ1Y3RvcihyZXNvdXJjZXMpIHtcbiAgICB0aGlzLmxvYWRpbmdNYXNrID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGltU2NyZWVuID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGlhbG9nID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubG9hZGluZ1RpdGxlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5sb2NhbGUgPSBMb2NhbGUuUmVwb3NpdG9yeS5kZWZhdWx0O1xuICAgIHRoaXMuX2NyZWF0ZUxvYWRpbmdNYXNrKCk7XG4gIH1cblxuICBfY3JlYXRlTG9hZGluZ01hc2soKSB7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMubG9jYWxlLnRyYW5zbGF0ZSgnbG9hZGluZycpO1xuICAgIHRoaXMuZGltU2NyZWVuID0gJzxkaXYgaWQ9XCJsb2FkaW5nTWFza1wiIGNsYXNzPVwic3Bpbm5lclwiPjxkaXYgY2xhc3M9XCJsb2FkaW5nVGl0bGVcIj4nICsgdGhpcy50aXRsZSArJzwvZGl2PjxkaXYgY2xhc3M9XCJtYXNrXCI+PC9kaXY+PC9kaXY+JztcbiAgICAkKCdib2R5JykuYXBwZW5kKHRoaXMuZGltU2NyZWVuKTtcbiAgICB0aGlzLmxvYWRpbmdNYXNrID0gJCgnI2xvYWRpbmdNYXNrJyk7XG4gICAgdGhpcy5sb2FkaW5nVGl0bGUgPSAkKCcubG9hZGluZ1RpdGxlJykuY3NzKHtcbiAgICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICBvcGFjaXR5OiAxLFxuICAgICAgZm9udFNpemU6ICcyLjVlbSdcbiAgICAgIC8vZm9udEZhbWlseTogJ1JvYm90bydcbiAgICB9KTtcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgdGhpcy5sb2FkaW5nTWFzay5zaG93KCk7XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHRoaXMubG9hZGluZ01hc2suaGlkZSgpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= -------------------------------------------------------------------------------- /dist/system/loading-mask/loading-mask.js: -------------------------------------------------------------------------------- 1 | System.register(['jquery', '../locale'], function (_export) { 2 | 'use strict'; 3 | 4 | var $, Locale, LoadingMask; 5 | 6 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 7 | 8 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 9 | 10 | return { 11 | setters: [function (_jquery) { 12 | $ = _jquery['default']; 13 | }, function (_locale) { 14 | Locale = _locale.Locale; 15 | }], 16 | execute: function () { 17 | LoadingMask = (function () { 18 | function LoadingMask(resources) { 19 | _classCallCheck(this, LoadingMask); 20 | 21 | this.loadingMask = undefined; 22 | this.dimScreen = undefined; 23 | this.dialog = undefined; 24 | this.loadingTitle = undefined; 25 | this.title = undefined; 26 | this.locale = Locale.Repository['default']; 27 | this._createLoadingMask(); 28 | } 29 | 30 | _createClass(LoadingMask, [{ 31 | key: '_createLoadingMask', 32 | value: function _createLoadingMask() { 33 | this.title = this.locale.translate('loading'); 34 | this.dimScreen = '
' + this.title + '
'; 35 | $('body').append(this.dimScreen); 36 | this.loadingMask = $('#loadingMask'); 37 | this.loadingTitle = $('.loadingTitle').css({ 38 | color: '#ffffff', 39 | opacity: 1, 40 | fontSize: '2.5em' 41 | }); 42 | } 43 | }, { 44 | key: 'show', 45 | value: function show() { 46 | this.loadingMask.show(); 47 | } 48 | }, { 49 | key: 'hide', 50 | value: function hide() { 51 | this.loadingMask.hide(); 52 | } 53 | }]); 54 | 55 | return LoadingMask; 56 | })(); 57 | 58 | _export('LoadingMask', LoadingMask); 59 | } 60 | }; 61 | }); 62 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxvYWRpbmctbWFzay9sb2FkaW5nLW1hc2suanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O2lCQUdhLFdBQVc7Ozs7Ozs7Ozs7dUJBRmhCLE1BQU07OztBQUVELGlCQUFXO0FBQ1gsaUJBREEsV0FBVyxDQUNWLFNBQVMsRUFBRTtnQ0FEWixXQUFXOztBQUVwQixjQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUM3QixjQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUMzQixjQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUN4QixjQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUM5QixjQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUN2QixjQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLFdBQVEsQ0FBQztBQUN4QyxjQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjs7cUJBVFUsV0FBVzs7aUJBV0osOEJBQUc7QUFDbkIsZ0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUMsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsa0VBQWtFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRSxzQ0FBc0MsQ0FBQztBQUN6SSxhQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNqQyxnQkFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckMsZ0JBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6QyxtQkFBSyxFQUFFLFNBQVM7QUFDaEIscUJBQU8sRUFBRSxDQUFDO0FBQ1Ysc0JBQVEsRUFBRSxPQUFPO2FBRWxCLENBQUMsQ0FBQztXQUNKOzs7aUJBRUcsZ0JBQUc7QUFDTCxnQkFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztXQUN6Qjs7O2lCQUVHLGdCQUFHO0FBQ0wsZ0JBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7V0FDekI7OztlQTlCVSxXQUFXIiwiZmlsZSI6ImxvYWRpbmctbWFzay9sb2FkaW5nLW1hc2suanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHtMb2NhbGV9IGZyb20gJy4uL2xvY2FsZSc7XG5cbmV4cG9ydCBjbGFzcyBMb2FkaW5nTWFzayB7XG4gIGNvbnN0cnVjdG9yKHJlc291cmNlcykge1xuICAgIHRoaXMubG9hZGluZ01hc2sgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kaW1TY3JlZW4gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kaWFsb2cgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5sb2FkaW5nVGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50aXRsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxvY2FsZSA9IExvY2FsZS5SZXBvc2l0b3J5LmRlZmF1bHQ7XG4gICAgdGhpcy5fY3JlYXRlTG9hZGluZ01hc2soKTtcbiAgfVxuXG4gIF9jcmVhdGVMb2FkaW5nTWFzaygpIHtcbiAgICB0aGlzLnRpdGxlID0gdGhpcy5sb2NhbGUudHJhbnNsYXRlKCdsb2FkaW5nJyk7XG4gICAgdGhpcy5kaW1TY3JlZW4gPSAnPGRpdiBpZD1cImxvYWRpbmdNYXNrXCIgY2xhc3M9XCJzcGlubmVyXCI+PGRpdiBjbGFzcz1cImxvYWRpbmdUaXRsZVwiPicgKyB0aGlzLnRpdGxlICsnPC9kaXY+PGRpdiBjbGFzcz1cIm1hc2tcIj48L2Rpdj48L2Rpdj4nO1xuICAgICQoJ2JvZHknKS5hcHBlbmQodGhpcy5kaW1TY3JlZW4pO1xuICAgIHRoaXMubG9hZGluZ01hc2sgPSAkKCcjbG9hZGluZ01hc2snKTtcbiAgICB0aGlzLmxvYWRpbmdUaXRsZSA9ICQoJy5sb2FkaW5nVGl0bGUnKS5jc3Moe1xuICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgIG9wYWNpdHk6IDEsXG4gICAgICBmb250U2l6ZTogJzIuNWVtJ1xuICAgICAgLy9mb250RmFtaWx5OiAnUm9ib3RvJ1xuICAgIH0pO1xuICB9XG5cbiAgc2hvdygpIHtcbiAgICB0aGlzLmxvYWRpbmdNYXNrLnNob3coKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5sb2FkaW5nTWFzay5oaWRlKCk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== -------------------------------------------------------------------------------- /dist/commonjs/authorize-steps.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, '__esModule', { 4 | value: true 5 | }); 6 | 7 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 8 | 9 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 10 | 11 | function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 12 | 13 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 14 | 15 | var _aureliaDependencyInjection = require('aurelia-dependency-injection'); 16 | 17 | var _session = require('./session'); 18 | 19 | var _logger = require('./logger'); 20 | 21 | var _locale = require('./locale'); 22 | 23 | var _config = require('./config'); 24 | 25 | var _aureliaRouter = require('aurelia-router'); 26 | 27 | var BaseAuthorizeStep = (function () { 28 | function BaseAuthorizeStep(session, logger) { 29 | _classCallCheck(this, BaseAuthorizeStep); 30 | 31 | this.session = session; 32 | this.logger = logger; 33 | this.locale = _locale.Locale.Repository['default']; 34 | this.loginRoute = _config.Config.routerAuthStepOpts.loginRoute; 35 | } 36 | 37 | _createClass(BaseAuthorizeStep, [{ 38 | key: 'run', 39 | value: function run(navigationInstruction, next) { 40 | if (!this.session.isUserLoggedIn() && navigationInstruction.config.route !== this.loginRoute) { 41 | this.logger.warn(this.locale.translate('pleaseLogin')); 42 | return next.cancel(new _aureliaRouter.Redirect(this.loginRoute)); 43 | } 44 | 45 | var canAccess = this.authorize(navigationInstruction); 46 | if (canAccess === false) { 47 | this.logger.error(this.locale.translate('notAuthorized')); 48 | return next.cancel(); 49 | } 50 | 51 | return next(); 52 | } 53 | }, { 54 | key: 'authorize', 55 | value: function authorize(navigationInstruction) { 56 | if (navigationInstruction.parentInstruction === null) { 57 | return this.canAccess(navigationInstruction); 58 | } else { 59 | var canAccess = this.canAccess(navigationInstruction); 60 | if (hasRole) { 61 | return this.authorize(navigationInstruction.parentInstruction); 62 | } else { 63 | return false; 64 | } 65 | } 66 | } 67 | }, { 68 | key: 'canAccess', 69 | value: function canAccess() {} 70 | }]); 71 | 72 | return BaseAuthorizeStep; 73 | })(); 74 | 75 | var RolesAuthorizeStep = (function (_BaseAuthorizeStep) { 76 | _inherits(RolesAuthorizeStep, _BaseAuthorizeStep); 77 | 78 | function RolesAuthorizeStep(session, logger) { 79 | _classCallCheck(this, _RolesAuthorizeStep); 80 | 81 | _get(Object.getPrototypeOf(_RolesAuthorizeStep.prototype), 'constructor', this).call(this, session, logger); 82 | } 83 | 84 | _createClass(RolesAuthorizeStep, [{ 85 | key: 'canAccess', 86 | value: function canAccess(navigationInstruction) { 87 | if (navigationInstruction.config.roles) { 88 | return this.session.userHasAtLeastOneRole(navigationInstruction.config.roles); 89 | } 90 | 91 | return true; 92 | } 93 | }]); 94 | 95 | var _RolesAuthorizeStep = RolesAuthorizeStep; 96 | RolesAuthorizeStep = (0, _aureliaDependencyInjection.inject)(_session.Session, _logger.Logger)(RolesAuthorizeStep) || RolesAuthorizeStep; 97 | return RolesAuthorizeStep; 98 | })(BaseAuthorizeStep); 99 | 100 | exports.RolesAuthorizeStep = RolesAuthorizeStep; 101 | 102 | var AccessRightsAuthorizeStep = (function (_BaseAuthorizeStep2) { 103 | _inherits(AccessRightsAuthorizeStep, _BaseAuthorizeStep2); 104 | 105 | function AccessRightsAuthorizeStep(session, logger) { 106 | _classCallCheck(this, _AccessRightsAuthorizeStep); 107 | 108 | _get(Object.getPrototypeOf(_AccessRightsAuthorizeStep.prototype), 'constructor', this).call(this, session, logger); 109 | } 110 | 111 | _createClass(AccessRightsAuthorizeStep, [{ 112 | key: 'canAccess', 113 | value: function canAccess(navigationInstruction) { 114 | if (navigationInstruction.config.accessRight) { 115 | return this.session.userHasAccessRight(navigationInstruction.config.accessRight); 116 | } 117 | 118 | return true; 119 | } 120 | }]); 121 | 122 | var _AccessRightsAuthorizeStep = AccessRightsAuthorizeStep; 123 | AccessRightsAuthorizeStep = (0, _aureliaDependencyInjection.inject)(_session.Session, _logger.Logger)(AccessRightsAuthorizeStep) || AccessRightsAuthorizeStep; 124 | return AccessRightsAuthorizeStep; 125 | })(BaseAuthorizeStep); 126 | 127 | exports.AccessRightsAuthorizeStep = AccessRightsAuthorizeStep; -------------------------------------------------------------------------------- /dist/amd/logger.js: -------------------------------------------------------------------------------- 1 | define(['exports', 'CodeSeven/toastr', './config'], function (exports, _CodeSevenToastr, _config) { 2 | 'use strict'; 3 | 4 | Object.defineProperty(exports, '__esModule', { 5 | value: true 6 | }); 7 | 8 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } 11 | 12 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 13 | 14 | var _toastr = _interopRequireDefault(_CodeSevenToastr); 15 | 16 | var defaults = { 17 | source: 'app', 18 | title: '', 19 | message: 'no message provided', 20 | data: '', 21 | showToast: true, 22 | type: 'info' 23 | }; 24 | 25 | function log(options) { 26 | var opts = Object.assign({}, defaults, options); 27 | 28 | if (opts.showToast) { 29 | _toastr['default'][opts.type](opts.message, opts.title); 30 | } 31 | } 32 | 33 | function sanitize(options, messageType) { 34 | if (typeof options === 'string' || options instanceof String) { 35 | return { 36 | message: options, 37 | type: messageType 38 | }; 39 | } 40 | 41 | options.type = messageType; 42 | return options; 43 | } 44 | 45 | var Logger = (function () { 46 | function Logger() { 47 | _classCallCheck(this, Logger); 48 | 49 | var defOpts = { 50 | closeButton: true, 51 | positionClass: 'toast-bottom-right', 52 | fadeOut: 1000 53 | }; 54 | 55 | var configOptions = _config.Config.loggerOpts || {}; 56 | var options = Object.assign(_toastr['default'].options, defOpts, configOptions); 57 | _toastr['default'].options = options; 58 | } 59 | 60 | _createClass(Logger, [{ 61 | key: 'warn', 62 | value: function warn(options) { 63 | log(sanitize(options, 'warning')); 64 | } 65 | }, { 66 | key: 'info', 67 | value: function info(options) { 68 | log(sanitize(options, 'info')); 69 | } 70 | }, { 71 | key: 'error', 72 | value: function error(options) { 73 | log(sanitize(options, 'error')); 74 | } 75 | }, { 76 | key: 'success', 77 | value: function success(options) { 78 | log(sanitize(options, 'success')); 79 | } 80 | }]); 81 | 82 | return Logger; 83 | })(); 84 | 85 | exports.Logger = Logger; 86 | }); 87 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFNQSxNQUFNLFFBQVEsR0FBRztBQUNmLFVBQU0sRUFBRSxLQUFLO0FBQ2IsU0FBSyxFQUFFLEVBQUU7QUFDVCxXQUFPLEVBQUUscUJBQXFCO0FBQzlCLFFBQUksRUFBRSxFQUFFO0FBQ1IsYUFBUyxFQUFFLElBQUk7QUFDZixRQUFJLEVBQUUsTUFBTTtHQUNiLENBQUM7O0FBRUYsV0FBUyxHQUFHLENBQUMsT0FBTyxFQUFFO0FBQ3BCLFFBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFHaEQsUUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2xCLHlCQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3QztHQUNGOztBQUVELFdBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUU7QUFDdEMsUUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxZQUFZLE1BQU0sRUFBRTtBQUM1RCxhQUFPO0FBQ0wsZUFBTyxFQUFFLE9BQU87QUFDaEIsWUFBSSxFQUFFLFdBQVc7T0FDbEIsQ0FBQztLQUNIOztBQUVELFdBQU8sQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0FBQzNCLFdBQU8sT0FBTyxDQUFDO0dBQ2hCOztNQUVZLE1BQU07QUFDTixhQURBLE1BQU0sR0FDSDs0QkFESCxNQUFNOztBQUVmLFVBQUksT0FBTyxHQUFHO0FBQ1osbUJBQVcsRUFBRSxJQUFJO0FBQ2pCLHFCQUFhLEVBQUUsb0JBQW9CO0FBQ25DLGVBQU8sRUFBRSxJQUFJO09BQ2QsQ0FBQzs7QUFFRixVQUFJLGFBQWEsR0FBRyxRQXhDaEIsTUFBTSxDQXdDaUIsVUFBVSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxVQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFPLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDcEUseUJBQU8sT0FBTyxHQUFHLE9BQU8sQ0FBQztLQUMxQjs7aUJBWFUsTUFBTTs7YUFhYixjQUFDLE9BQU8sRUFBRTtBQUNaLFdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7T0FDbkM7OzthQUVHLGNBQUMsT0FBTyxFQUFFO0FBQ1osV0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztPQUNoQzs7O2FBRUksZUFBQyxPQUFPLEVBQUU7QUFDYixXQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO09BQ2pDOzs7YUFFTSxpQkFBQyxPQUFPLEVBQUU7QUFDZixXQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO09BQ25DOzs7V0EzQlUsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZWQgYnkgbW9zaGVuc2t5IG9uIDYvMTYvMTUuXG4gKi9cbmltcG9ydCB0b2FzdHIgZnJvbSAnQ29kZVNldmVuL3RvYXN0cic7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi9jb25maWcnO1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgc291cmNlOiAnYXBwJyxcbiAgdGl0bGU6ICcnLFxuICBtZXNzYWdlOiAnbm8gbWVzc2FnZSBwcm92aWRlZCcsXG4gIGRhdGE6ICcnLFxuICBzaG93VG9hc3Q6IHRydWUsXG4gIHR5cGU6ICdpbmZvJ1xufTtcblxuZnVuY3Rpb24gbG9nKG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgb3B0aW9ucyk7XG4gIC8vc3lzdGVtLmxvZyhvcG5zLnNvdXJjZSArICcsICcgKyBvcG5zLnR5cGUgKyAnLCAnICsgb3Bucy5tZXNzYWdlICsgJywgJyArIG9wbnMuZGF0YSArICcgJyk7XG5cbiAgaWYgKG9wdHMuc2hvd1RvYXN0KSB7XG4gICAgdG9hc3RyW29wdHMudHlwZV0ob3B0cy5tZXNzYWdlLCBvcHRzLnRpdGxlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZShvcHRpb25zLCBtZXNzYWdlVHlwZSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnIHx8IG9wdGlvbnMgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogb3B0aW9ucyxcbiAgICAgIHR5cGU6IG1lc3NhZ2VUeXBlXG4gICAgfTtcbiAgfVxuXG4gIG9wdGlvbnMudHlwZSA9IG1lc3NhZ2VUeXBlO1xuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGxldCBkZWZPcHRzID0ge1xuICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICBwb3NpdGlvbkNsYXNzOiAndG9hc3QtYm90dG9tLXJpZ2h0JyxcbiAgICAgIGZhZGVPdXQ6IDEwMDBcbiAgICB9O1xuXG4gICAgbGV0IGNvbmZpZ09wdGlvbnMgPSBDb25maWcubG9nZ2VyT3B0cyB8fCB7fTtcbiAgICBsZXQgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odG9hc3RyLm9wdGlvbnMsIGRlZk9wdHMsIGNvbmZpZ09wdGlvbnMpO1xuICAgIHRvYXN0ci5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHdhcm4ob3B0aW9ucykge1xuICAgIGxvZyhzYW5pdGl6ZShvcHRpb25zLCAnd2FybmluZycpKTtcbiAgfVxuXG4gIGluZm8ob3B0aW9ucykge1xuICAgIGxvZyhzYW5pdGl6ZShvcHRpb25zLCAnaW5mbycpKTtcbiAgfVxuXG4gIGVycm9yKG9wdGlvbnMpIHtcbiAgICBsb2coc2FuaXRpemUob3B0aW9ucywgJ2Vycm9yJykpO1xuICB9XG5cbiAgc3VjY2VzcyhvcHRpb25zKSB7XG4gICAgbG9nKHNhbml0aXplKG9wdGlvbnMsICdzdWNjZXNzJykpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= -------------------------------------------------------------------------------- /dist/system/logger.js: -------------------------------------------------------------------------------- 1 | System.register(['CodeSeven/toastr', './config'], function (_export) { 2 | 'use strict'; 3 | 4 | var toastr, Config, defaults, Logger; 5 | 6 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 7 | 8 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 9 | 10 | function log(options) { 11 | var opts = Object.assign({}, defaults, options); 12 | 13 | if (opts.showToast) { 14 | toastr[opts.type](opts.message, opts.title); 15 | } 16 | } 17 | 18 | function sanitize(options, messageType) { 19 | if (typeof options === 'string' || options instanceof String) { 20 | return { 21 | message: options, 22 | type: messageType 23 | }; 24 | } 25 | 26 | options.type = messageType; 27 | return options; 28 | } 29 | 30 | return { 31 | setters: [function (_CodeSevenToastr) { 32 | toastr = _CodeSevenToastr['default']; 33 | }, function (_config) { 34 | Config = _config.Config; 35 | }], 36 | execute: function () { 37 | defaults = { 38 | source: 'app', 39 | title: '', 40 | message: 'no message provided', 41 | data: '', 42 | showToast: true, 43 | type: 'info' 44 | }; 45 | 46 | Logger = (function () { 47 | function Logger() { 48 | _classCallCheck(this, Logger); 49 | 50 | var defOpts = { 51 | closeButton: true, 52 | positionClass: 'toast-bottom-right', 53 | fadeOut: 1000 54 | }; 55 | 56 | var configOptions = Config.loggerOpts || {}; 57 | var options = Object.assign(toastr.options, defOpts, configOptions); 58 | toastr.options = options; 59 | } 60 | 61 | _createClass(Logger, [{ 62 | key: 'warn', 63 | value: function warn(options) { 64 | log(sanitize(options, 'warning')); 65 | } 66 | }, { 67 | key: 'info', 68 | value: function info(options) { 69 | log(sanitize(options, 'info')); 70 | } 71 | }, { 72 | key: 'error', 73 | value: function error(options) { 74 | log(sanitize(options, 'error')); 75 | } 76 | }, { 77 | key: 'success', 78 | value: function success(options) { 79 | log(sanitize(options, 'success')); 80 | } 81 | }]); 82 | 83 | return Logger; 84 | })(); 85 | 86 | _export('Logger', Logger); 87 | } 88 | }; 89 | }); 90 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7c0JBTU0sUUFBUSxFQThCRCxNQUFNOzs7Ozs7QUFyQm5CLFdBQVMsR0FBRyxDQUFDLE9BQU8sRUFBRTtBQUNwQixRQUFJLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBR2hELFFBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNsQixZQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzdDO0dBQ0Y7O0FBRUQsV0FBUyxRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRTtBQUN0QyxRQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLFlBQVksTUFBTSxFQUFFO0FBQzVELGFBQU87QUFDTCxlQUFPLEVBQUUsT0FBTztBQUNoQixZQUFJLEVBQUUsV0FBVztPQUNsQixDQUFDO0tBQ0g7O0FBRUQsV0FBTyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7QUFDM0IsV0FBTyxPQUFPLENBQUM7R0FDaEI7Ozs7Ozt1QkE5Qk8sTUFBTTs7O0FBRVIsY0FBUSxHQUFHO0FBQ2YsY0FBTSxFQUFFLEtBQUs7QUFDYixhQUFLLEVBQUUsRUFBRTtBQUNULGVBQU8sRUFBRSxxQkFBcUI7QUFDOUIsWUFBSSxFQUFFLEVBQUU7QUFDUixpQkFBUyxFQUFFLElBQUk7QUFDZixZQUFJLEVBQUUsTUFBTTtPQUNiOztBQXVCWSxZQUFNO0FBQ04saUJBREEsTUFBTSxHQUNIO2dDQURILE1BQU07O0FBRWYsY0FBSSxPQUFPLEdBQUc7QUFDWix1QkFBVyxFQUFFLElBQUk7QUFDakIseUJBQWEsRUFBRSxvQkFBb0I7QUFDbkMsbUJBQU8sRUFBRSxJQUFJO1dBQ2QsQ0FBQzs7QUFFRixjQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztBQUM1QyxjQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3BFLGdCQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUMxQjs7cUJBWFUsTUFBTTs7aUJBYWIsY0FBQyxPQUFPLEVBQUU7QUFDWixlQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1dBQ25DOzs7aUJBRUcsY0FBQyxPQUFPLEVBQUU7QUFDWixlQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1dBQ2hDOzs7aUJBRUksZUFBQyxPQUFPLEVBQUU7QUFDYixlQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1dBQ2pDOzs7aUJBRU0saUJBQUMsT0FBTyxFQUFFO0FBQ2YsZUFBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztXQUNuQzs7O2VBM0JVLE1BQU0iLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDcmVhdGVkIGJ5IG1vc2hlbnNreSBvbiA2LzE2LzE1LlxuICovXG5pbXBvcnQgdG9hc3RyIGZyb20gJ0NvZGVTZXZlbi90b2FzdHInO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4vY29uZmlnJztcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gIHNvdXJjZTogJ2FwcCcsXG4gIHRpdGxlOiAnJyxcbiAgbWVzc2FnZTogJ25vIG1lc3NhZ2UgcHJvdmlkZWQnLFxuICBkYXRhOiAnJyxcbiAgc2hvd1RvYXN0OiB0cnVlLFxuICB0eXBlOiAnaW5mbydcbn07XG5cbmZ1bmN0aW9uIGxvZyhvcHRpb25zKSB7XG4gIHZhciBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIG9wdGlvbnMpO1xuICAvL3N5c3RlbS5sb2cob3Bucy5zb3VyY2UgKyAnLCAnICsgb3Bucy50eXBlICsgJywgJyArIG9wbnMubWVzc2FnZSArICcsICcgKyBvcG5zLmRhdGEgKyAnICcpO1xuXG4gIGlmIChvcHRzLnNob3dUb2FzdCkge1xuICAgIHRvYXN0cltvcHRzLnR5cGVdKG9wdHMubWVzc2FnZSwgb3B0cy50aXRsZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FuaXRpemUob3B0aW9ucywgbWVzc2FnZVR5cGUpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJyB8fCBvcHRpb25zIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IG9wdGlvbnMsXG4gICAgICB0eXBlOiBtZXNzYWdlVHlwZVxuICAgIH07XG4gIH1cblxuICBvcHRpb25zLnR5cGUgPSBtZXNzYWdlVHlwZTtcbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBsZXQgZGVmT3B0cyA9IHtcbiAgICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgcG9zaXRpb25DbGFzczogJ3RvYXN0LWJvdHRvbS1yaWdodCcsXG4gICAgICBmYWRlT3V0OiAxMDAwXG4gICAgfTtcblxuICAgIGxldCBjb25maWdPcHRpb25zID0gQ29uZmlnLmxvZ2dlck9wdHMgfHwge307XG4gICAgbGV0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHRvYXN0ci5vcHRpb25zLCBkZWZPcHRzLCBjb25maWdPcHRpb25zKTtcbiAgICB0b2FzdHIub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICB3YXJuKG9wdGlvbnMpIHtcbiAgICBsb2coc2FuaXRpemUob3B0aW9ucywgJ3dhcm5pbmcnKSk7XG4gIH1cblxuICBpbmZvKG9wdGlvbnMpIHtcbiAgICBsb2coc2FuaXRpemUob3B0aW9ucywgJ2luZm8nKSk7XG4gIH1cblxuICBlcnJvcihvcHRpb25zKSB7XG4gICAgbG9nKHNhbml0aXplKG9wdGlvbnMsICdlcnJvcicpKTtcbiAgfVxuXG4gIHN1Y2Nlc3Mob3B0aW9ucykge1xuICAgIGxvZyhzYW5pdGl6ZShvcHRpb25zLCAnc3VjY2VzcycpKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 -------------------------------------------------------------------------------- /dist/amd/config.js: -------------------------------------------------------------------------------- 1 | define(['exports', './locale'], function (exports, _locale) { 2 | 'use strict'; 3 | 4 | Object.defineProperty(exports, '__esModule', { 5 | value: true 6 | }); 7 | 8 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 9 | 10 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 11 | 12 | var ConfigDefaults = function ConfigDefaults() { 13 | _classCallCheck(this, ConfigDefaults); 14 | }; 15 | 16 | exports.ConfigDefaults = ConfigDefaults; 17 | 18 | ConfigDefaults._defaults = { 19 | locale: 'en-US', 20 | localeResources: 'service/resources/' 21 | }; 22 | 23 | ConfigDefaults.defaults = function () { 24 | var defaults = {}; 25 | Object.assign(defaults, ConfigDefaults._defaults); 26 | return defaults; 27 | }; 28 | 29 | var Config = (function () { 30 | function Config(innerConfig) { 31 | _classCallCheck(this, Config); 32 | 33 | this.innerConfig = innerConfig; 34 | this.values = this.innerConfig ? {} : ConfigDefaults.defaults(); 35 | this.changedHandlers = new Map(); 36 | } 37 | 38 | _createClass(Config, [{ 39 | key: 'getValue', 40 | value: function getValue(identifier) { 41 | if (this.values.hasOwnProperty(identifier) !== null && this.values[identifier] !== undefined) { 42 | return this.values[identifier]; 43 | } 44 | if (this.innerConfig !== null) { 45 | return this.innerConfig.getValue(identifier); 46 | } 47 | throw Error('Config not found: ' + identifier); 48 | } 49 | }, { 50 | key: 'setValue', 51 | value: function setValue(identifier, value) { 52 | this.values[identifier] = value; 53 | return this; 54 | } 55 | }, { 56 | key: 'onLocaleChanged', 57 | value: function onLocaleChanged(callback) { 58 | var _this = this; 59 | 60 | if (this.innerConfig !== undefined) { 61 | return this.innerConfig.onLocaleChanged(callback); 62 | } else { 63 | var _ret = (function () { 64 | var id = ++ValidationConfig.uniqueListenerId; 65 | _this.changedHandlers.set(id, callback); 66 | return { 67 | v: function () { 68 | _this.changedHandlers['delete'](id); 69 | } 70 | }; 71 | })(); 72 | 73 | if (typeof _ret === 'object') return _ret.v; 74 | } 75 | } 76 | }, { 77 | key: 'getDependencies', 78 | value: function getDependencies() { 79 | return this.getValue('dependencies'); 80 | } 81 | }, { 82 | key: 'setHttpService', 83 | value: function setHttpService(httpOpts) { 84 | Config.httpOpts = httpOpts; 85 | } 86 | }, { 87 | key: 'setLoggerService', 88 | value: function setLoggerService(loggerOpts) { 89 | Config.loggerOpts = loggerOpts; 90 | } 91 | }, { 92 | key: 'routerAuthStep', 93 | value: function routerAuthStep(opts) { 94 | Config.routerAuthStepOpts = opts; 95 | } 96 | }, { 97 | key: 'useLocale', 98 | value: function useLocale(localeIdentifier) { 99 | this.setValue('locale', localeIdentifier); 100 | var callbacks = Array.from(this.changedHandlers.values()); 101 | for (var i = 0; i < callbacks.length; i++) { 102 | callbacks[i](); 103 | } 104 | return this; 105 | } 106 | }, { 107 | key: 'locale', 108 | value: function locale() { 109 | return _locale.Locale.Repository.load(this.getValue('locale'), this.getValue('localeResources')); 110 | } 111 | }]); 112 | 113 | return Config; 114 | })(); 115 | 116 | exports.Config = Config; 117 | 118 | Config.uniqueListenerId = 0; 119 | }); 120 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbmZpZy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztNQUthLGNBQWMsWUFBZCxjQUFjOzBCQUFkLGNBQWM7Ozs7O0FBRzNCLGdCQUFjLENBQUMsU0FBUyxHQUFHO0FBQ3pCLFVBQU0sRUFBRSxPQUFPO0FBQ2YsbUJBQWUsRUFBRSxvQkFBb0I7R0FDdEMsQ0FBQzs7QUFFRixnQkFBYyxDQUFDLFFBQVEsR0FBRyxZQUFZO0FBQ3BDLFFBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNsQixVQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEQsV0FBTyxRQUFRLENBQUM7R0FDakIsQ0FBQzs7TUFFVyxNQUFNO0FBQ04sYUFEQSxNQUFNLENBQ0wsV0FBVyxFQUFFOzRCQURkLE1BQU07O0FBRWYsVUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDL0IsVUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEUsVUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBQ2xDOztpQkFMVSxNQUFNOzthQU9ULGtCQUFDLFVBQVUsRUFBRTtBQUNuQixZQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUM1RixpQkFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2hDO0FBQ0QsWUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtBQUM3QixpQkFBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM5QztBQUNELGNBQU0sS0FBSyxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxDQUFDO09BQ2hEOzs7YUFFTyxrQkFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFO0FBQzFCLFlBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLGVBQU8sSUFBSSxDQUFDO09BQ2I7OzthQUVjLHlCQUFDLFFBQVEsRUFBRTs7O0FBQ3hCLFlBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7QUFDbEMsaUJBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkQsTUFBTTs7QUFDTCxnQkFBSSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztBQUM3QyxrQkFBSyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN2QztpQkFBTyxZQUFNO0FBQ1gsc0JBQUssZUFBZSxVQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7ZUFDakM7Y0FBQzs7OztTQUNIO09BQ0Y7OzthQUVjLDJCQUFHO0FBQ2hCLGVBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztPQUN0Qzs7O2FBRWEsd0JBQUMsUUFBUSxFQUFFO0FBQ3ZCLGNBQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO09BQzVCOzs7YUFFZSwwQkFBQyxVQUFVLEVBQUU7QUFDM0IsY0FBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7T0FDaEM7OzthQUVhLHdCQUFDLElBQUksRUFBRTtBQUNuQixjQUFNLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO09BQ2xDOzs7YUFFUSxtQkFBQyxnQkFBZ0IsRUFBRTtBQUMxQixZQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFDLFlBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzFELGFBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLG1CQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNoQjtBQUNELGVBQU8sSUFBSSxDQUFDO09BQ2I7OzthQUVLLGtCQUFHO0FBQ1AsZUFBTyxRQTVFSCxNQUFNLENBNEVJLFVBQVUsQ0FDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7T0FDcEU7OztXQTlEVSxNQUFNOzs7OztBQWlFbkIsUUFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyIsImZpbGUiOiJjb25maWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZWQgYnkgbW9zaGVuc2t5IG9uIDYvMTcvMTUuXG4gKi9cbmltcG9ydCB7TG9jYWxlfSBmcm9tICcuL2xvY2FsZSc7XG5cbmV4cG9ydCBjbGFzcyBDb25maWdEZWZhdWx0cyB7XG59XG5cbkNvbmZpZ0RlZmF1bHRzLl9kZWZhdWx0cyA9IHtcbiAgbG9jYWxlOiAnZW4tVVMnLFxuICBsb2NhbGVSZXNvdXJjZXM6ICdzZXJ2aWNlL3Jlc291cmNlcy8nXG59O1xuXG5Db25maWdEZWZhdWx0cy5kZWZhdWx0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGRlZmF1bHRzID0ge307XG4gIE9iamVjdC5hc3NpZ24oZGVmYXVsdHMsIENvbmZpZ0RlZmF1bHRzLl9kZWZhdWx0cyk7XG4gIHJldHVybiBkZWZhdWx0cztcbn07XG5cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihpbm5lckNvbmZpZykge1xuICAgIHRoaXMuaW5uZXJDb25maWcgPSBpbm5lckNvbmZpZztcbiAgICB0aGlzLnZhbHVlcyA9IHRoaXMuaW5uZXJDb25maWcgPyB7fSA6IENvbmZpZ0RlZmF1bHRzLmRlZmF1bHRzKCk7XG4gICAgdGhpcy5jaGFuZ2VkSGFuZGxlcnMgPSBuZXcgTWFwKCk7XG4gIH1cblxuICBnZXRWYWx1ZShpZGVudGlmaWVyKSB7XG4gICAgaWYgKHRoaXMudmFsdWVzLmhhc093blByb3BlcnR5KGlkZW50aWZpZXIpICE9PSBudWxsICYmIHRoaXMudmFsdWVzW2lkZW50aWZpZXJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpZGVudGlmaWVyXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW5uZXJDb25maWcgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlubmVyQ29uZmlnLmdldFZhbHVlKGlkZW50aWZpZXIpO1xuICAgIH1cbiAgICB0aHJvdyBFcnJvcignQ29uZmlnIG5vdCBmb3VuZDogJyArIGlkZW50aWZpZXIpO1xuICB9XG5cbiAgc2V0VmFsdWUoaWRlbnRpZmllciwgdmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlc1tpZGVudGlmaWVyXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzOyAvL2ZsdWVudCBBUElcbiAgfVxuXG4gIG9uTG9jYWxlQ2hhbmdlZChjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLmlubmVyQ29uZmlnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmlubmVyQ29uZmlnLm9uTG9jYWxlQ2hhbmdlZChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpZCA9ICsrVmFsaWRhdGlvbkNvbmZpZy51bmlxdWVMaXN0ZW5lcklkO1xuICAgICAgdGhpcy5jaGFuZ2VkSGFuZGxlcnMuc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB0aGlzLmNoYW5nZWRIYW5kbGVycy5kZWxldGUoaWQpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBnZXREZXBlbmRlbmNpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoJ2RlcGVuZGVuY2llcycpO1xuICB9XG5cbiAgc2V0SHR0cFNlcnZpY2UoaHR0cE9wdHMpIHtcbiAgICBDb25maWcuaHR0cE9wdHMgPSBodHRwT3B0cztcbiAgfVxuXG4gIHNldExvZ2dlclNlcnZpY2UobG9nZ2VyT3B0cykge1xuICAgIENvbmZpZy5sb2dnZXJPcHRzID0gbG9nZ2VyT3B0cztcbiAgfVxuXG4gIHJvdXRlckF1dGhTdGVwKG9wdHMpIHtcbiAgICBDb25maWcucm91dGVyQXV0aFN0ZXBPcHRzID0gb3B0cztcbiAgfVxuXG4gIHVzZUxvY2FsZShsb2NhbGVJZGVudGlmaWVyKSB7XG4gICAgdGhpcy5zZXRWYWx1ZSgnbG9jYWxlJywgbG9jYWxlSWRlbnRpZmllcik7XG4gICAgdmFyIGNhbGxiYWNrcyA9IEFycmF5LmZyb20odGhpcy5jaGFuZ2VkSGFuZGxlcnMudmFsdWVzKCkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYWxsYmFja3NbaV0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIExvY2FsZS5SZXBvc2l0b3J5XG4gICAgICAubG9hZCh0aGlzLmdldFZhbHVlKCdsb2NhbGUnKSwgdGhpcy5nZXRWYWx1ZSgnbG9jYWxlUmVzb3VyY2VzJykpO1xuICB9XG59XG5cbkNvbmZpZy51bmlxdWVMaXN0ZW5lcklkID0gMDtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== -------------------------------------------------------------------------------- /src/http.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/16/15. 3 | */ 4 | import {HttpClient} from 'aurelia-http-client'; 5 | import $ from 'jquery'; 6 | import {inject} from 'aurelia-dependency-injection'; 7 | import {Session} from './session'; 8 | import {Logger} from './logger'; 9 | import {Locale} from './locale'; 10 | import {Config} from './config'; 11 | import {LoadingMask} from './loading-mask/loading-mask'; 12 | 13 | @inject(Session, Logger, LoadingMask) 14 | export class Http { 15 | constructor(session, logger, loadingMask) { 16 | this.session = session; 17 | this.logger = logger; 18 | this.loadingMask = loadingMask; 19 | this.authHttp = undefined; 20 | this.locale = Locale.Repository.default; 21 | 22 | this.requestsCount = 0; 23 | this.host = Config.httpOpts.serviceHost; 24 | this.origin = this.host + Config.httpOpts.serviceApiPrefix; 25 | this.authOrigin = Config.httpOpts.authHost; 26 | this.hosts = Config.httpOpts.hosts || {}; 27 | this.loadingMaskDelay = Config.httpOpts.loadingMaskDelay || 1000; 28 | this.requestTimeout = Config.httpOpts.requestTimeout; 29 | 30 | if (this.session.userRemembered()) { 31 | this.initAuthHttp(this.session.rememberedToken()); 32 | } 33 | } 34 | 35 | _showLoadingMask() { 36 | this.requestsCount += 1; 37 | if (this.requestsCount === 1) { 38 | if (this.loadingMaskDelay > 0) { 39 | this._queryTimeout = window.setTimeout(() => { 40 | this.loadingMask.show() 41 | }, this.loadingMaskDelay); 42 | } else { 43 | this.loadingMask.show(); 44 | } 45 | } 46 | } 47 | 48 | _hideLoadingMask() { 49 | this.requestsCount -= 1; 50 | if (this.requestsCount <= 0) { 51 | if (this._queryTimeout) { 52 | window.clearTimeout(this._queryTimeout); 53 | } 54 | 55 | this.loadingMask.hide(); 56 | this.requestsCount = 0; 57 | } 58 | } 59 | 60 | get(url, data) { 61 | this._showLoadingMask(); 62 | let urlWithProps = url; 63 | if (data !== undefined) { 64 | let props = Object.keys(data).map(function (key) { 65 | let d = data[key]; 66 | if (Array.isArray(d)) { 67 | return d.map(value => { 68 | return '' + key + '=' + value 69 | }).join('&'); 70 | } else { 71 | return '' + key + '=' + data[key]; 72 | } 73 | }).join('&'); 74 | 75 | urlWithProps += '?' + props; 76 | } 77 | const promise = this.authHttp.get(urlWithProps).then(response => { 78 | this._hideLoadingMask(); 79 | return JSON.parse(response.response) 80 | }); 81 | promise.catch(this.errorHandler.bind(this)); 82 | return promise; 83 | } 84 | 85 | post(url, content = {}) { 86 | this._showLoadingMask(); 87 | const promise = this.authHttp.post(url, content).then(response => { 88 | this._hideLoadingMask(); 89 | if (response.response !== "") { 90 | return JSON.parse(response.response); 91 | } 92 | }); 93 | promise.catch(this.errorHandler.bind(this)); 94 | 95 | return promise; 96 | } 97 | 98 | 99 | put(url, content = {}) { 100 | this._showLoadingMask(); 101 | const promise = this.authHttp.put(url, content).then(response => this._hideLoadingMask()); 102 | promise.catch(this.errorHandler.bind(this)); 103 | return promise; 104 | } 105 | 106 | delete(url) { 107 | const promise = this.authHttp.delete(url).then(response => this._hideLoadingMask()); 108 | promise.catch(this.errorHandler.bind(this)); 109 | return promise; 110 | } 111 | 112 | multipartFormPost(url, data) { 113 | var requestUrl = this.origin + url; 114 | return this.multipartForm(requestUrl, data, 'POST'); 115 | } 116 | 117 | multipartFormPut(url, data) { 118 | var requestUrl = this.origin + url; 119 | return this.multipartForm(requestUrl, data, 'PUT'); 120 | } 121 | 122 | multipartForm(url, data, method) { 123 | this._showLoadingMask(); 124 | var self = this; 125 | var req = $.ajax({ 126 | url: url, 127 | data: data, 128 | processData: false, 129 | contentType: false, 130 | type: method, 131 | headers: { 132 | 'Authorization': 'Bearer ' + this.token 133 | } 134 | }); 135 | 136 | return new Promise(function (resolve, reject) { 137 | req.done(resolve); 138 | req.fail(reject); 139 | self._hideLoadingMask(); 140 | }).catch(this.errorHandler.bind(this)); 141 | } 142 | 143 | postDownloadFile(url, data) { 144 | return this.downloadFile(url, 'POST', data); 145 | } 146 | 147 | getDownloadFile(url) { 148 | return this.downloadFile(url, 'GET'); 149 | } 150 | 151 | downloadFile(url, method, data) { 152 | this._showLoadingMask(); 153 | const urlAddress = this.origin + url; 154 | const authHeaderValue = `Bearer ${this.token}`; 155 | const promise = new Promise((resolve, reject) => { 156 | const xmlhttp = new XMLHttpRequest(); 157 | xmlhttp.open(method, urlAddress, true); 158 | xmlhttp.timeout = this.requestTimeout; 159 | xmlhttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); 160 | xmlhttp.setRequestHeader('Authorization', authHeaderValue); 161 | xmlhttp.responseType = "blob"; 162 | 163 | xmlhttp.onload = function (oEvent) { 164 | if (this.status !== 200) { 165 | reject({statusCode: this.status}); 166 | return; 167 | } 168 | 169 | const blob = xmlhttp.response; 170 | const windowUrl = window.URL || window.webkitURL; 171 | const url = windowUrl.createObjectURL(blob); 172 | const filename = this.getResponseHeader('Content-Disposition').match(/^attachment; filename=(.+)/)[1]; 173 | 174 | const anchor = $(''); 175 | anchor.prop('href', url); 176 | anchor.prop('download', filename); 177 | $('body').append(anchor); 178 | anchor.get(0).click(); 179 | windowUrl.revokeObjectURL(url); 180 | anchor.remove(); 181 | }; 182 | 183 | xmlhttp.ontimeout = function () { 184 | reject({timeout: true}) 185 | }; 186 | 187 | xmlhttp.addEventListener("error", () => { 188 | reject(); 189 | }); 190 | xmlhttp.addEventListener("load", () => { 191 | resolve(); 192 | this._hideLoadingMask(); 193 | }); 194 | if (method === 'GET') { 195 | xmlhttp.send(); 196 | } else if (method === 'POST') { 197 | xmlhttp.send(JSON.stringify(data)); 198 | } else { 199 | throw new Error("Unsuported method call!"); 200 | } 201 | }); 202 | 203 | promise.catch(this.errorHandler.bind(this)); 204 | return promise; 205 | } 206 | 207 | loginBasicAuth(email, pass) { 208 | let client = new HttpClient(); 209 | let encodedData = window.btoa(email + ':' + pass); 210 | let promise = client.createRequest('token') 211 | .asGet() 212 | .withBaseUrl(this.authOrigin) 213 | .withHeader('Authorization', 'Basic ' + encodedData) 214 | .send(); 215 | promise.then(this.loginHandle.bind(this)) 216 | promise.catch(this.errorHandler.bind(this)); 217 | 218 | return promise; 219 | } 220 | 221 | loginResourceOwner(email, pass, clientId) { 222 | this._showLoadingMask(); 223 | let data = { 224 | grant_type: 'password', 225 | client_id: clientId, 226 | username: email, 227 | password: pass 228 | }; 229 | 230 | let client = new HttpClient() 231 | .configure(x => { 232 | x.withBaseUrl(this.authOrigin); 233 | x.withHeader("Content-Type", "application/x-www-form-urlencoded"); 234 | }); 235 | 236 | const promise = client.post('token', $.param(data)); 237 | promise.then(this.loginHandle.bind(this)) 238 | promise.catch(this.errorHandler.bind(this)); 239 | 240 | return promise; 241 | } 242 | 243 | initAuthHttp(token) { 244 | this.token = token; 245 | this.authHttp = new HttpClient().configure(x => { 246 | x.withBaseUrl(this.origin); 247 | x.withHeader('Authorization', `Bearer ${this.token}`); 248 | x.withHeader("Content-Type", "application/json"); 249 | }); 250 | } 251 | 252 | getAuthHttpFor(hostName) { 253 | let authHttp = new HttpClient().configure(x => { 254 | x.withBaseUrl(this.hosts[hostName]); 255 | x.withHeader('Authorization', `Bearer ${this.token}`); 256 | x.withHeader("Content-Type", "application/json"); 257 | }); 258 | 259 | return authHttp; 260 | } 261 | 262 | _convertToArray(value) { 263 | let result = value || []; 264 | if (typeof result === 'string') { 265 | return result.split(','); 266 | } 267 | 268 | return result; 269 | } 270 | 271 | loginHandle(response) { 272 | this._hideLoadingMask(); 273 | const data = JSON.parse(response.response); 274 | let token = data.access_token; 275 | this.initAuthHttp(token); 276 | 277 | let claims = data.userClaims || []; 278 | if (typeof claims === 'string') { 279 | claims = JSON.parse(claims); 280 | } 281 | 282 | this.session.setUser({ 283 | token: token, 284 | userName: data.userName || 'please give me a name!', 285 | userClaims: claims, 286 | userRoles: this._convertToArray(data.userRoles), 287 | userAccessRights: this._convertToArray(data.userAccessRights) 288 | }); 289 | } 290 | 291 | // TODO: use as in aurelia-validation 292 | errorHandler(response) { 293 | this._hideLoadingMask(); 294 | if (response.statusCode === 401) { 295 | this.logger.warn(this.locale.translate('sessionTimedOut')); 296 | } else if (response.statusCode === 403) { 297 | this.logger.warn(this.locale.translate('accessDenied')); 298 | } else if (response.statusCode === 500) { 299 | this.logger.error(this.locale.translate('internalServerError')); 300 | } else if (response.timeout === true) { 301 | this.logger.error(this.locale.translate('requestTimeout')); 302 | } else { 303 | this.logger.error(this.locale.translate('errorHappend')); 304 | } 305 | } 306 | } 307 | -------------------------------------------------------------------------------- /dist/es6/http.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by moshensky on 6/16/15. 3 | */ 4 | import {HttpClient} from 'aurelia-http-client'; 5 | import $ from 'jquery'; 6 | import {inject} from 'aurelia-dependency-injection'; 7 | import {Session} from './session'; 8 | import {Logger} from './logger'; 9 | import {Locale} from './locale'; 10 | import {Config} from './config'; 11 | import {LoadingMask} from './loading-mask/loading-mask'; 12 | 13 | @inject(Session, Logger, LoadingMask) 14 | export class Http { 15 | constructor(session, logger, loadingMask) { 16 | this.session = session; 17 | this.logger = logger; 18 | this.loadingMask = loadingMask; 19 | this.authHttp = undefined; 20 | this.locale = Locale.Repository.default; 21 | 22 | this.requestsCount = 0; 23 | this.host = Config.httpOpts.serviceHost; 24 | this.origin = this.host + Config.httpOpts.serviceApiPrefix; 25 | this.authOrigin = Config.httpOpts.authHost; 26 | this.hosts = Config.httpOpts.hosts || {}; 27 | this.loadingMaskDelay = Config.httpOpts.loadingMaskDelay || 1000; 28 | this.requestTimeout = Config.httpOpts.requestTimeout; 29 | 30 | if (this.session.userRemembered()) { 31 | this.initAuthHttp(this.session.rememberedToken()); 32 | } 33 | } 34 | 35 | _showLoadingMask() { 36 | this.requestsCount += 1; 37 | if (this.requestsCount === 1) { 38 | if (this.loadingMaskDelay > 0) { 39 | this._queryTimeout = window.setTimeout(() => { 40 | this.loadingMask.show() 41 | }, this.loadingMaskDelay); 42 | } else { 43 | this.loadingMask.show(); 44 | } 45 | } 46 | } 47 | 48 | _hideLoadingMask() { 49 | this.requestsCount -= 1; 50 | if (this.requestsCount <= 0) { 51 | if (this._queryTimeout) { 52 | window.clearTimeout(this._queryTimeout); 53 | } 54 | 55 | this.loadingMask.hide(); 56 | this.requestsCount = 0; 57 | } 58 | } 59 | 60 | get(url, data) { 61 | this._showLoadingMask(); 62 | let urlWithProps = url; 63 | if (data !== undefined) { 64 | let props = Object.keys(data).map(function (key) { 65 | let d = data[key]; 66 | if (Array.isArray(d)) { 67 | return d.map(value => { 68 | return '' + key + '=' + value 69 | }).join('&'); 70 | } else { 71 | return '' + key + '=' + data[key]; 72 | } 73 | }).join('&'); 74 | 75 | urlWithProps += '?' + props; 76 | } 77 | const promise = this.authHttp.get(urlWithProps).then(response => { 78 | this._hideLoadingMask(); 79 | return JSON.parse(response.response) 80 | }); 81 | promise.catch(this.errorHandler.bind(this)); 82 | return promise; 83 | } 84 | 85 | post(url, content = {}) { 86 | this._showLoadingMask(); 87 | const promise = this.authHttp.post(url, content).then(response => { 88 | this._hideLoadingMask(); 89 | if (response.response !== "") { 90 | return JSON.parse(response.response); 91 | } 92 | }); 93 | promise.catch(this.errorHandler.bind(this)); 94 | 95 | return promise; 96 | } 97 | 98 | 99 | put(url, content = {}) { 100 | this._showLoadingMask(); 101 | const promise = this.authHttp.put(url, content).then(response => this._hideLoadingMask()); 102 | promise.catch(this.errorHandler.bind(this)); 103 | return promise; 104 | } 105 | 106 | delete(url) { 107 | const promise = this.authHttp.delete(url).then(response => this._hideLoadingMask()); 108 | promise.catch(this.errorHandler.bind(this)); 109 | return promise; 110 | } 111 | 112 | multipartFormPost(url, data) { 113 | var requestUrl = this.origin + url; 114 | return this.multipartForm(requestUrl, data, 'POST'); 115 | } 116 | 117 | multipartFormPut(url, data) { 118 | var requestUrl = this.origin + url; 119 | return this.multipartForm(requestUrl, data, 'PUT'); 120 | } 121 | 122 | multipartForm(url, data, method) { 123 | this._showLoadingMask(); 124 | var self = this; 125 | var req = $.ajax({ 126 | url: url, 127 | data: data, 128 | processData: false, 129 | contentType: false, 130 | type: method, 131 | headers: { 132 | 'Authorization': 'Bearer ' + this.token 133 | } 134 | }); 135 | 136 | return new Promise(function (resolve, reject) { 137 | req.done(resolve); 138 | req.fail(reject); 139 | self._hideLoadingMask(); 140 | }).catch(this.errorHandler.bind(this)); 141 | } 142 | 143 | postDownloadFile(url, data) { 144 | return this.downloadFile(url, 'POST', data); 145 | } 146 | 147 | getDownloadFile(url) { 148 | return this.downloadFile(url, 'GET'); 149 | } 150 | 151 | downloadFile(url, method, data) { 152 | this._showLoadingMask(); 153 | const urlAddress = this.origin + url; 154 | const authHeaderValue = `Bearer ${this.token}`; 155 | const promise = new Promise((resolve, reject) => { 156 | const xmlhttp = new XMLHttpRequest(); 157 | xmlhttp.open(method, urlAddress, true); 158 | xmlhttp.timeout = this.requestTimeout; 159 | xmlhttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); 160 | xmlhttp.setRequestHeader('Authorization', authHeaderValue); 161 | xmlhttp.responseType = "blob"; 162 | 163 | xmlhttp.onload = function (oEvent) { 164 | if (this.status !== 200) { 165 | reject({statusCode: this.status}); 166 | return; 167 | } 168 | 169 | const blob = xmlhttp.response; 170 | const windowUrl = window.URL || window.webkitURL; 171 | const url = windowUrl.createObjectURL(blob); 172 | const filename = this.getResponseHeader('Content-Disposition').match(/^attachment; filename=(.+)/)[1]; 173 | 174 | const anchor = $(''); 175 | anchor.prop('href', url); 176 | anchor.prop('download', filename); 177 | $('body').append(anchor); 178 | anchor.get(0).click(); 179 | windowUrl.revokeObjectURL(url); 180 | anchor.remove(); 181 | }; 182 | 183 | xmlhttp.ontimeout = function () { 184 | reject({timeout: true}) 185 | }; 186 | 187 | xmlhttp.addEventListener("error", () => { 188 | reject(); 189 | }); 190 | xmlhttp.addEventListener("load", () => { 191 | resolve(); 192 | this._hideLoadingMask(); 193 | }); 194 | if (method === 'GET') { 195 | xmlhttp.send(); 196 | } else if (method === 'POST') { 197 | xmlhttp.send(JSON.stringify(data)); 198 | } else { 199 | throw new Error("Unsuported method call!"); 200 | } 201 | }); 202 | 203 | promise.catch(this.errorHandler.bind(this)); 204 | return promise; 205 | } 206 | 207 | loginBasicAuth(email, pass) { 208 | let client = new HttpClient(); 209 | let encodedData = window.btoa(email + ':' + pass); 210 | let promise = client.createRequest('token') 211 | .asGet() 212 | .withBaseUrl(this.authOrigin) 213 | .withHeader('Authorization', 'Basic ' + encodedData) 214 | .send(); 215 | promise.then(this.loginHandle.bind(this)) 216 | promise.catch(this.errorHandler.bind(this)); 217 | 218 | return promise; 219 | } 220 | 221 | loginResourceOwner(email, pass, clientId) { 222 | this._showLoadingMask(); 223 | let data = { 224 | grant_type: 'password', 225 | client_id: clientId, 226 | username: email, 227 | password: pass 228 | }; 229 | 230 | let client = new HttpClient() 231 | .configure(x => { 232 | x.withBaseUrl(this.authOrigin); 233 | x.withHeader("Content-Type", "application/x-www-form-urlencoded"); 234 | }); 235 | 236 | const promise = client.post('token', $.param(data)); 237 | promise.then(this.loginHandle.bind(this)) 238 | promise.catch(this.errorHandler.bind(this)); 239 | 240 | return promise; 241 | } 242 | 243 | initAuthHttp(token) { 244 | this.token = token; 245 | this.authHttp = new HttpClient().configure(x => { 246 | x.withBaseUrl(this.origin); 247 | x.withHeader('Authorization', `Bearer ${this.token}`); 248 | x.withHeader("Content-Type", "application/json"); 249 | }); 250 | } 251 | 252 | getAuthHttpFor(hostName) { 253 | let authHttp = new HttpClient().configure(x => { 254 | x.withBaseUrl(this.hosts[hostName]); 255 | x.withHeader('Authorization', `Bearer ${this.token}`); 256 | x.withHeader("Content-Type", "application/json"); 257 | }); 258 | 259 | return authHttp; 260 | } 261 | 262 | _convertToArray(value) { 263 | let result = value || []; 264 | if (typeof result === 'string') { 265 | return result.split(','); 266 | } 267 | 268 | return result; 269 | } 270 | 271 | loginHandle(response) { 272 | this._hideLoadingMask(); 273 | const data = JSON.parse(response.response); 274 | let token = data.access_token; 275 | this.initAuthHttp(token); 276 | 277 | let claims = data.userClaims || []; 278 | if (typeof claims === 'string') { 279 | claims = JSON.parse(claims); 280 | } 281 | 282 | this.session.setUser({ 283 | token: token, 284 | userName: data.userName || 'please give me a name!', 285 | userClaims: claims, 286 | userRoles: this._convertToArray(data.userRoles), 287 | userAccessRights: this._convertToArray(data.userAccessRights) 288 | }); 289 | } 290 | 291 | // TODO: use as in aurelia-validation 292 | errorHandler(response) { 293 | this._hideLoadingMask(); 294 | if (response.statusCode === 401) { 295 | this.logger.warn(this.locale.translate('sessionTimedOut')); 296 | } else if (response.statusCode === 403) { 297 | this.logger.warn(this.locale.translate('accessDenied')); 298 | } else if (response.statusCode === 500) { 299 | this.logger.error(this.locale.translate('internalServerError')); 300 | } else if (response.timeout === true) { 301 | this.logger.error(this.locale.translate('requestTimeout')); 302 | } else { 303 | this.logger.error(this.locale.translate('errorHappend')); 304 | } 305 | } 306 | } 307 | -------------------------------------------------------------------------------- /dist/amd/locale.js: -------------------------------------------------------------------------------- 1 | define(['exports'], function (exports) { 2 | 'use strict'; 3 | 4 | Object.defineProperty(exports, '__esModule', { 5 | value: true 6 | }); 7 | 8 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 9 | 10 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 11 | 12 | var Locale = (function () { 13 | function Locale(defaults, data) { 14 | _classCallCheck(this, Locale); 15 | 16 | this.defaults = defaults; 17 | this.currentLocale = data; 18 | } 19 | 20 | _createClass(Locale, [{ 21 | key: 'getValueFor', 22 | value: function getValueFor(identifier, category) { 23 | if (this.currentLocale && this.currentLocale[category]) { 24 | var currentLocaleSetting = this.currentLocale[category][identifier]; 25 | if (currentLocaleSetting !== undefined && currentLocaleSetting !== null) return currentLocaleSetting; 26 | } 27 | if (this.defaults[category]) { 28 | var defaultSetting = this.defaults[category][identifier]; 29 | if (defaultSetting !== undefined && defaultSetting !== null) return defaultSetting; 30 | } 31 | throw 'validation: I18N: Could not find: ' + identifier + ' in category: ' + category; 32 | } 33 | }, { 34 | key: 'setting', 35 | value: function setting(settingIdentifier) { 36 | return this.getValueFor(settingIdentifier, 'settings'); 37 | } 38 | }, { 39 | key: 'translate', 40 | value: function translate(translationIdentifier, newValue, threshold) { 41 | var translation = this.getValueFor(translationIdentifier, 'messages'); 42 | if (typeof translation === 'function') { 43 | return translation(newValue, threshold); 44 | } 45 | if (typeof translation === 'string') { 46 | return translation; 47 | } 48 | throw 'Validation message for ' + translationIdentifier + 'was in an unsupported format'; 49 | } 50 | }]); 51 | 52 | return Locale; 53 | })(); 54 | 55 | exports.Locale = Locale; 56 | 57 | var LocaleRepository = (function () { 58 | function LocaleRepository() { 59 | _classCallCheck(this, LocaleRepository); 60 | 61 | this['default'] = null; 62 | this.instances = new Map(); 63 | this.defaults = { 64 | settings: {}, 65 | messages: {} 66 | }; 67 | } 68 | 69 | _createClass(LocaleRepository, [{ 70 | key: 'load', 71 | value: function load(localeIdentifier, basePath) { 72 | var _this = this; 73 | 74 | if (!basePath) basePath = 'aurelia-custom-app-common-files/resources/'; 75 | 76 | return new Promise(function (resolve, reject) { 77 | if (_this.instances.has(localeIdentifier)) { 78 | var locale = _this.instances.get(localeIdentifier); 79 | resolve(locale); 80 | } else { 81 | System['import'](basePath + localeIdentifier).then(function (resource) { 82 | var locale = _this.addLocale(localeIdentifier, resource.data); 83 | resolve(locale); 84 | }); 85 | } 86 | }); 87 | } 88 | }, { 89 | key: 'addLocale', 90 | value: function addLocale(localeIdentifier, data) { 91 | var instance = new Locale(this.defaults, data); 92 | this.instances.set(localeIdentifier, instance); 93 | if (this['default'] === null) this['default'] = instance; 94 | return instance; 95 | } 96 | }]); 97 | 98 | return LocaleRepository; 99 | })(); 100 | 101 | Locale.Repository = new LocaleRepository(); 102 | }); 103 | //# sourceMappingURL=data:application/json;base64,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LENBQUMsQ0FBQztBQUM3RCxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2pCLENBQUMsQ0FBQztXQUNKO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7OzthQUVRLG1CQUFDLGdCQUFnQixFQUFFLElBQUksRUFDaEM7QUFDRSxZQUFJLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9DLFlBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLFlBQUcsSUFBSSxXQUFRLEtBQUssSUFBSSxFQUN0QixJQUFJLFdBQVEsR0FBRyxRQUFRLENBQUM7QUFDMUIsZUFBTyxRQUFRLENBQUM7T0FDakI7OztXQWpDRyxnQkFBZ0I7OztBQW9DdEIsUUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUMiLCJmaWxlIjoibG9jYWxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDcmVhdGVkIGJ5IG1vc2hlbnNreSBvbiA2LzE3LzE1LlxuICovXG5leHBvcnQgY2xhc3MgTG9jYWxle1xuICBjb25zdHJ1Y3RvcihkZWZhdWx0cywgZGF0YSlcbiAge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICB0aGlzLmN1cnJlbnRMb2NhbGUgPSBkYXRhO1xuICB9XG5cbiAgZ2V0VmFsdWVGb3IoaWRlbnRpZmllciwgY2F0ZWdvcnkpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50TG9jYWxlICYmIHRoaXMuY3VycmVudExvY2FsZVtjYXRlZ29yeV0pIHtcbiAgICAgIHZhciBjdXJyZW50TG9jYWxlU2V0dGluZyA9IHRoaXMuY3VycmVudExvY2FsZVtjYXRlZ29yeV1baWRlbnRpZmllcl07XG4gICAgICBpZiAoY3VycmVudExvY2FsZVNldHRpbmcgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50TG9jYWxlU2V0dGluZyAhPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRMb2NhbGVTZXR0aW5nO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWZhdWx0c1tjYXRlZ29yeV0pIHtcbiAgICAgIHZhciBkZWZhdWx0U2V0dGluZyA9IHRoaXMuZGVmYXVsdHNbY2F0ZWdvcnldW2lkZW50aWZpZXJdO1xuICAgICAgaWYgKGRlZmF1bHRTZXR0aW5nICE9PSB1bmRlZmluZWQgJiYgZGVmYXVsdFNldHRpbmcgIT09IG51bGwpXG4gICAgICAgIHJldHVybiBkZWZhdWx0U2V0dGluZztcbiAgICB9XG4gICAgdGhyb3cgJ3ZhbGlkYXRpb246IEkxOE46IENvdWxkIG5vdCBmaW5kOiAnICsgaWRlbnRpZmllciArICcgaW4gY2F0ZWdvcnk6ICcgKyBjYXRlZ29yeTtcbiAgfVxuXG4gIHNldHRpbmcoc2V0dGluZ0lkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUZvcihzZXR0aW5nSWRlbnRpZmllciwgJ3NldHRpbmdzJyk7XG4gIH1cblxuICB0cmFuc2xhdGUodHJhbnNsYXRpb25JZGVudGlmaWVyLCBuZXdWYWx1ZSwgdGhyZXNob2xkKSB7XG4gICAgdmFyIHRyYW5zbGF0aW9uID0gdGhpcy5nZXRWYWx1ZUZvcih0cmFuc2xhdGlvbklkZW50aWZpZXIsICdtZXNzYWdlcycpO1xuICAgIGlmICh0eXBlb2YgdHJhbnNsYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbihuZXdWYWx1ZSwgdGhyZXNob2xkKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0cmFuc2xhdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbjtcbiAgICB9XG4gICAgdGhyb3cgJ1ZhbGlkYXRpb24gbWVzc2FnZSBmb3IgJyArIHRyYW5zbGF0aW9uSWRlbnRpZmllciArICd3YXMgaW4gYW4gdW5zdXBwb3J0ZWQgZm9ybWF0JztcbiAgfVxufVxuXG5jbGFzcyBMb2NhbGVSZXBvc2l0b3J5ICB7XG4gIGNvbnN0cnVjdG9yKCl7XG4gICAgdGhpcy5kZWZhdWx0ID0gbnVsbDtcbiAgICB0aGlzLmluc3RhbmNlcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgc2V0dGluZ3M6IHt9LFxuICAgICAgbWVzc2FnZXM6IHt9XG4gICAgfTtcbiAgfVxuXG4gIGxvYWQobG9jYWxlSWRlbnRpZmllciwgYmFzZVBhdGgpIHtcbiAgICBpZighYmFzZVBhdGgpIGJhc2VQYXRoID0gJ2F1cmVsaWEtY3VzdG9tLWFwcC1jb21tb24tZmlsZXMvcmVzb3VyY2VzLyc7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYodGhpcy5pbnN0YW5jZXMuaGFzKGxvY2FsZUlkZW50aWZpZXIpKSB7XG4gICAgICAgIGxldCBsb2NhbGUgPSB0aGlzLmluc3RhbmNlcy5nZXQobG9jYWxlSWRlbnRpZmllcik7XG4gICAgICAgIHJlc29sdmUobG9jYWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFN5c3RlbS5pbXBvcnQoYmFzZVBhdGggKyBsb2NhbGVJZGVudGlmaWVyKS50aGVuKChyZXNvdXJjZSkgPT4ge1xuICAgICAgICAgIGxldCBsb2NhbGUgPSB0aGlzLmFkZExvY2FsZShsb2NhbGVJZGVudGlmaWVyLCByZXNvdXJjZS5kYXRhKTtcbiAgICAgICAgICByZXNvbHZlKGxvY2FsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkTG9jYWxlKGxvY2FsZUlkZW50aWZpZXIsIGRhdGEpXG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgTG9jYWxlKHRoaXMuZGVmYXVsdHMsIGRhdGEpO1xuICAgIHRoaXMuaW5zdGFuY2VzLnNldChsb2NhbGVJZGVudGlmaWVyLCBpbnN0YW5jZSk7XG4gICAgaWYodGhpcy5kZWZhdWx0ID09PSBudWxsKVxuICAgICAgdGhpcy5kZWZhdWx0ID0gaW5zdGFuY2U7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG59XG5cbkxvY2FsZS5SZXBvc2l0b3J5ID0gbmV3IExvY2FsZVJlcG9zaXRvcnkoKTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== -------------------------------------------------------------------------------- /dist/system/config.js: -------------------------------------------------------------------------------- 1 | System.register(['./locale'], function (_export) { 2 | 'use strict'; 3 | 4 | var Locale, ConfigDefaults, Config; 5 | 6 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 7 | 8 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 9 | 10 | return { 11 | setters: [function (_locale) { 12 | Locale = _locale.Locale; 13 | }], 14 | execute: function () { 15 | ConfigDefaults = function ConfigDefaults() { 16 | _classCallCheck(this, ConfigDefaults); 17 | }; 18 | 19 | _export('ConfigDefaults', ConfigDefaults); 20 | 21 | ConfigDefaults._defaults = { 22 | locale: 'en-US', 23 | localeResources: 'service/resources/' 24 | }; 25 | 26 | ConfigDefaults.defaults = function () { 27 | var defaults = {}; 28 | Object.assign(defaults, ConfigDefaults._defaults); 29 | return defaults; 30 | }; 31 | 32 | Config = (function () { 33 | function Config(innerConfig) { 34 | _classCallCheck(this, Config); 35 | 36 | this.innerConfig = innerConfig; 37 | this.values = this.innerConfig ? {} : ConfigDefaults.defaults(); 38 | this.changedHandlers = new Map(); 39 | } 40 | 41 | _createClass(Config, [{ 42 | key: 'getValue', 43 | value: function getValue(identifier) { 44 | if (this.values.hasOwnProperty(identifier) !== null && this.values[identifier] !== undefined) { 45 | return this.values[identifier]; 46 | } 47 | if (this.innerConfig !== null) { 48 | return this.innerConfig.getValue(identifier); 49 | } 50 | throw Error('Config not found: ' + identifier); 51 | } 52 | }, { 53 | key: 'setValue', 54 | value: function setValue(identifier, value) { 55 | this.values[identifier] = value; 56 | return this; 57 | } 58 | }, { 59 | key: 'onLocaleChanged', 60 | value: function onLocaleChanged(callback) { 61 | var _this = this; 62 | 63 | if (this.innerConfig !== undefined) { 64 | return this.innerConfig.onLocaleChanged(callback); 65 | } else { 66 | var _ret = (function () { 67 | var id = ++ValidationConfig.uniqueListenerId; 68 | _this.changedHandlers.set(id, callback); 69 | return { 70 | v: function () { 71 | _this.changedHandlers['delete'](id); 72 | } 73 | }; 74 | })(); 75 | 76 | if (typeof _ret === 'object') return _ret.v; 77 | } 78 | } 79 | }, { 80 | key: 'getDependencies', 81 | value: function getDependencies() { 82 | return this.getValue('dependencies'); 83 | } 84 | }, { 85 | key: 'setHttpService', 86 | value: function setHttpService(httpOpts) { 87 | Config.httpOpts = httpOpts; 88 | } 89 | }, { 90 | key: 'setLoggerService', 91 | value: function setLoggerService(loggerOpts) { 92 | Config.loggerOpts = loggerOpts; 93 | } 94 | }, { 95 | key: 'routerAuthStep', 96 | value: function routerAuthStep(opts) { 97 | Config.routerAuthStepOpts = opts; 98 | } 99 | }, { 100 | key: 'useLocale', 101 | value: function useLocale(localeIdentifier) { 102 | this.setValue('locale', localeIdentifier); 103 | var callbacks = Array.from(this.changedHandlers.values()); 104 | for (var i = 0; i < callbacks.length; i++) { 105 | callbacks[i](); 106 | } 107 | return this; 108 | } 109 | }, { 110 | key: 'locale', 111 | value: function locale() { 112 | return Locale.Repository.load(this.getValue('locale'), this.getValue('localeResources')); 113 | } 114 | }]); 115 | 116 | return Config; 117 | })(); 118 | 119 | _export('Config', Config); 120 | 121 | Config.uniqueListenerId = 0; 122 | } 123 | }; 124 | }); 125 | //# sourceMappingURL=data:application/json;base64,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LGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzFELGlCQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6Qyx1QkFBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDaEI7QUFDRCxtQkFBTyxJQUFJLENBQUM7V0FDYjs7O2lCQUVLLGtCQUFHO0FBQ1AsbUJBQU8sTUFBTSxDQUFDLFVBQVUsQ0FDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7V0FDcEU7OztlQTlEVSxNQUFNOzs7OztBQWlFbkIsWUFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyIsImZpbGUiOiJjb25maWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZWQgYnkgbW9zaGVuc2t5IG9uIDYvMTcvMTUuXG4gKi9cbmltcG9ydCB7TG9jYWxlfSBmcm9tICcuL2xvY2FsZSc7XG5cbmV4cG9ydCBjbGFzcyBDb25maWdEZWZhdWx0cyB7XG59XG5cbkNvbmZpZ0RlZmF1bHRzLl9kZWZhdWx0cyA9IHtcbiAgbG9jYWxlOiAnZW4tVVMnLFxuICBsb2NhbGVSZXNvdXJjZXM6ICdzZXJ2aWNlL3Jlc291cmNlcy8nXG59O1xuXG5Db25maWdEZWZhdWx0cy5kZWZhdWx0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGRlZmF1bHRzID0ge307XG4gIE9iamVjdC5hc3NpZ24oZGVmYXVsdHMsIENvbmZpZ0RlZmF1bHRzLl9kZWZhdWx0cyk7XG4gIHJldHVybiBkZWZhdWx0cztcbn07XG5cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihpbm5lckNvbmZpZykge1xuICAgIHRoaXMuaW5uZXJDb25maWcgPSBpbm5lckNvbmZpZztcbiAgICB0aGlzLnZhbHVlcyA9IHRoaXMuaW5uZXJDb25maWcgPyB7fSA6IENvbmZpZ0RlZmF1bHRzLmRlZmF1bHRzKCk7XG4gICAgdGhpcy5jaGFuZ2VkSGFuZGxlcnMgPSBuZXcgTWFwKCk7XG4gIH1cblxuICBnZXRWYWx1ZShpZGVudGlmaWVyKSB7XG4gICAgaWYgKHRoaXMudmFsdWVzLmhhc093blByb3BlcnR5KGlkZW50aWZpZXIpICE9PSBudWxsICYmIHRoaXMudmFsdWVzW2lkZW50aWZpZXJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpZGVudGlmaWVyXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW5uZXJDb25maWcgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlubmVyQ29uZmlnLmdldFZhbHVlKGlkZW50aWZpZXIpO1xuICAgIH1cbiAgICB0aHJvdyBFcnJvcignQ29uZmlnIG5vdCBmb3VuZDogJyArIGlkZW50aWZpZXIpO1xuICB9XG5cbiAgc2V0VmFsdWUoaWRlbnRpZmllciwgdmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlc1tpZGVudGlmaWVyXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzOyAvL2ZsdWVudCBBUElcbiAgfVxuXG4gIG9uTG9jYWxlQ2hhbmdlZChjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLmlubmVyQ29uZmlnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmlubmVyQ29uZmlnLm9uTG9jYWxlQ2hhbmdlZChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpZCA9ICsrVmFsaWRhdGlvbkNvbmZpZy51bmlxdWVMaXN0ZW5lcklkO1xuICAgICAgdGhpcy5jaGFuZ2VkSGFuZGxlcnMuc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB0aGlzLmNoYW5nZWRIYW5kbGVycy5kZWxldGUoaWQpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBnZXREZXBlbmRlbmNpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoJ2RlcGVuZGVuY2llcycpO1xuICB9XG5cbiAgc2V0SHR0cFNlcnZpY2UoaHR0cE9wdHMpIHtcbiAgICBDb25maWcuaHR0cE9wdHMgPSBodHRwT3B0cztcbiAgfVxuXG4gIHNldExvZ2dlclNlcnZpY2UobG9nZ2VyT3B0cykge1xuICAgIENvbmZpZy5sb2dnZXJPcHRzID0gbG9nZ2VyT3B0cztcbiAgfVxuXG4gIHJvdXRlckF1dGhTdGVwKG9wdHMpIHtcbiAgICBDb25maWcucm91dGVyQXV0aFN0ZXBPcHRzID0gb3B0cztcbiAgfVxuXG4gIHVzZUxvY2FsZShsb2NhbGVJZGVudGlmaWVyKSB7XG4gICAgdGhpcy5zZXRWYWx1ZSgnbG9jYWxlJywgbG9jYWxlSWRlbnRpZmllcik7XG4gICAgdmFyIGNhbGxiYWNrcyA9IEFycmF5LmZyb20odGhpcy5jaGFuZ2VkSGFuZGxlcnMudmFsdWVzKCkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYWxsYmFja3NbaV0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIExvY2FsZS5SZXBvc2l0b3J5XG4gICAgICAubG9hZCh0aGlzLmdldFZhbHVlKCdsb2NhbGUnKSwgdGhpcy5nZXRWYWx1ZSgnbG9jYWxlUmVzb3VyY2VzJykpO1xuICB9XG59XG5cbkNvbmZpZy51bmlxdWVMaXN0ZW5lcklkID0gMDtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== -------------------------------------------------------------------------------- /dist/system/locale.js: -------------------------------------------------------------------------------- 1 | System.register([], function (_export) { 2 | 'use strict'; 3 | 4 | var Locale, LocaleRepository; 5 | 6 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 7 | 8 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 9 | 10 | return { 11 | setters: [], 12 | execute: function () { 13 | Locale = (function () { 14 | function Locale(defaults, data) { 15 | _classCallCheck(this, Locale); 16 | 17 | this.defaults = defaults; 18 | this.currentLocale = data; 19 | } 20 | 21 | _createClass(Locale, [{ 22 | key: 'getValueFor', 23 | value: function getValueFor(identifier, category) { 24 | if (this.currentLocale && this.currentLocale[category]) { 25 | var currentLocaleSetting = this.currentLocale[category][identifier]; 26 | if (currentLocaleSetting !== undefined && currentLocaleSetting !== null) return currentLocaleSetting; 27 | } 28 | if (this.defaults[category]) { 29 | var defaultSetting = this.defaults[category][identifier]; 30 | if (defaultSetting !== undefined && defaultSetting !== null) return defaultSetting; 31 | } 32 | throw 'validation: I18N: Could not find: ' + identifier + ' in category: ' + category; 33 | } 34 | }, { 35 | key: 'setting', 36 | value: function setting(settingIdentifier) { 37 | return this.getValueFor(settingIdentifier, 'settings'); 38 | } 39 | }, { 40 | key: 'translate', 41 | value: function translate(translationIdentifier, newValue, threshold) { 42 | var translation = this.getValueFor(translationIdentifier, 'messages'); 43 | if (typeof translation === 'function') { 44 | return translation(newValue, threshold); 45 | } 46 | if (typeof translation === 'string') { 47 | return translation; 48 | } 49 | throw 'Validation message for ' + translationIdentifier + 'was in an unsupported format'; 50 | } 51 | }]); 52 | 53 | return Locale; 54 | })(); 55 | 56 | _export('Locale', Locale); 57 | 58 | LocaleRepository = (function () { 59 | function LocaleRepository() { 60 | _classCallCheck(this, LocaleRepository); 61 | 62 | this['default'] = null; 63 | this.instances = new Map(); 64 | this.defaults = { 65 | settings: {}, 66 | messages: {} 67 | }; 68 | } 69 | 70 | _createClass(LocaleRepository, [{ 71 | key: 'load', 72 | value: function load(localeIdentifier, basePath) { 73 | var _this = this; 74 | 75 | if (!basePath) basePath = 'aurelia-custom-app-common-files/resources/'; 76 | 77 | return new Promise(function (resolve, reject) { 78 | if (_this.instances.has(localeIdentifier)) { 79 | var locale = _this.instances.get(localeIdentifier); 80 | resolve(locale); 81 | } else { 82 | System['import'](basePath + localeIdentifier).then(function (resource) { 83 | var locale = _this.addLocale(localeIdentifier, resource.data); 84 | resolve(locale); 85 | }); 86 | } 87 | }); 88 | } 89 | }, { 90 | key: 'addLocale', 91 | value: function addLocale(localeIdentifier, data) { 92 | var instance = new Locale(this.defaults, data); 93 | this.instances.set(localeIdentifier, instance); 94 | if (this['default'] === null) this['default'] = instance; 95 | return instance; 96 | } 97 | }]); 98 | 99 | return LocaleRepository; 100 | })(); 101 | 102 | Locale.Repository = new LocaleRepository(); 103 | } 104 | }; 105 | }); 106 | //# sourceMappingURL=data:application/json;base64,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QUFHLE1BQUssU0FBUyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RCx5QkFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNqQixDQUFDLENBQUM7ZUFDSjthQUNGLENBQUMsQ0FBQztXQUNKOzs7aUJBRVEsbUJBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUNoQztBQUNFLGdCQUFJLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9DLGdCQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvQyxnQkFBRyxJQUFJLFdBQVEsS0FBSyxJQUFJLEVBQ3RCLElBQUksV0FBUSxHQUFHLFFBQVEsQ0FBQztBQUMxQixtQkFBTyxRQUFRLENBQUM7V0FDakI7OztlQWpDRyxnQkFBZ0I7OztBQW9DdEIsWUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUMiLCJmaWxlIjoibG9jYWxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDcmVhdGVkIGJ5IG1vc2hlbnNreSBvbiA2LzE3LzE1LlxuICovXG5leHBvcnQgY2xhc3MgTG9jYWxle1xuICBjb25zdHJ1Y3RvcihkZWZhdWx0cywgZGF0YSlcbiAge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICB0aGlzLmN1cnJlbnRMb2NhbGUgPSBkYXRhO1xuICB9XG5cbiAgZ2V0VmFsdWVGb3IoaWRlbnRpZmllciwgY2F0ZWdvcnkpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50TG9jYWxlICYmIHRoaXMuY3VycmVudExvY2FsZVtjYXRlZ29yeV0pIHtcbiAgICAgIHZhciBjdXJyZW50TG9jYWxlU2V0dGluZyA9IHRoaXMuY3VycmVudExvY2FsZVtjYXRlZ29yeV1baWRlbnRpZmllcl07XG4gICAgICBpZiAoY3VycmVudExvY2FsZVNldHRpbmcgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50TG9jYWxlU2V0dGluZyAhPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRMb2NhbGVTZXR0aW5nO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWZhdWx0c1tjYXRlZ29yeV0pIHtcbiAgICAgIHZhciBkZWZhdWx0U2V0dGluZyA9IHRoaXMuZGVmYXVsdHNbY2F0ZWdvcnldW2lkZW50aWZpZXJdO1xuICAgICAgaWYgKGRlZmF1bHRTZXR0aW5nICE9PSB1bmRlZmluZWQgJiYgZGVmYXVsdFNldHRpbmcgIT09IG51bGwpXG4gICAgICAgIHJldHVybiBkZWZhdWx0U2V0dGluZztcbiAgICB9XG4gICAgdGhyb3cgJ3ZhbGlkYXRpb246IEkxOE46IENvdWxkIG5vdCBmaW5kOiAnICsgaWRlbnRpZmllciArICcgaW4gY2F0ZWdvcnk6ICcgKyBjYXRlZ29yeTtcbiAgfVxuXG4gIHNldHRpbmcoc2V0dGluZ0lkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUZvcihzZXR0aW5nSWRlbnRpZmllciwgJ3NldHRpbmdzJyk7XG4gIH1cblxuICB0cmFuc2xhdGUodHJhbnNsYXRpb25JZGVudGlmaWVyLCBuZXdWYWx1ZSwgdGhyZXNob2xkKSB7XG4gICAgdmFyIHRyYW5zbGF0aW9uID0gdGhpcy5nZXRWYWx1ZUZvcih0cmFuc2xhdGlvbklkZW50aWZpZXIsICdtZXNzYWdlcycpO1xuICAgIGlmICh0eXBlb2YgdHJhbnNsYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbihuZXdWYWx1ZSwgdGhyZXNob2xkKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0cmFuc2xhdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbjtcbiAgICB9XG4gICAgdGhyb3cgJ1ZhbGlkYXRpb24gbWVzc2FnZSBmb3IgJyArIHRyYW5zbGF0aW9uSWRlbnRpZmllciArICd3YXMgaW4gYW4gdW5zdXBwb3J0ZWQgZm9ybWF0JztcbiAgfVxufVxuXG5jbGFzcyBMb2NhbGVSZXBvc2l0b3J5ICB7XG4gIGNvbnN0cnVjdG9yKCl7XG4gICAgdGhpcy5kZWZhdWx0ID0gbnVsbDtcbiAgICB0aGlzLmluc3RhbmNlcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgc2V0dGluZ3M6IHt9LFxuICAgICAgbWVzc2FnZXM6IHt9XG4gICAgfTtcbiAgfVxuXG4gIGxvYWQobG9jYWxlSWRlbnRpZmllciwgYmFzZVBhdGgpIHtcbiAgICBpZighYmFzZVBhdGgpIGJhc2VQYXRoID0gJ2F1cmVsaWEtY3VzdG9tLWFwcC1jb21tb24tZmlsZXMvcmVzb3VyY2VzLyc7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYodGhpcy5pbnN0YW5jZXMuaGFzKGxvY2FsZUlkZW50aWZpZXIpKSB7XG4gICAgICAgIGxldCBsb2NhbGUgPSB0aGlzLmluc3RhbmNlcy5nZXQobG9jYWxlSWRlbnRpZmllcik7XG4gICAgICAgIHJlc29sdmUobG9jYWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFN5c3RlbS5pbXBvcnQoYmFzZVBhdGggKyBsb2NhbGVJZGVudGlmaWVyKS50aGVuKChyZXNvdXJjZSkgPT4ge1xuICAgICAgICAgIGxldCBsb2NhbGUgPSB0aGlzLmFkZExvY2FsZShsb2NhbGVJZGVudGlmaWVyLCByZXNvdXJjZS5kYXRhKTtcbiAgICAgICAgICByZXNvbHZlKGxvY2FsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkTG9jYWxlKGxvY2FsZUlkZW50aWZpZXIsIGRhdGEpXG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgTG9jYWxlKHRoaXMuZGVmYXVsdHMsIGRhdGEpO1xuICAgIHRoaXMuaW5zdGFuY2VzLnNldChsb2NhbGVJZGVudGlmaWVyLCBpbnN0YW5jZSk7XG4gICAgaWYodGhpcy5kZWZhdWx0ID09PSBudWxsKVxuICAgICAgdGhpcy5kZWZhdWx0ID0gaW5zdGFuY2U7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG59XG5cbkxvY2FsZS5SZXBvc2l0b3J5ID0gbmV3IExvY2FsZVJlcG9zaXRvcnkoKTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== -------------------------------------------------------------------------------- /dist/amd/authorize-steps.js: -------------------------------------------------------------------------------- 1 | define(['exports', 'aurelia-dependency-injection', './session', './logger', './locale', './config', 'aurelia-router'], function (exports, _aureliaDependencyInjection, _session, _logger, _locale, _config, _aureliaRouter) { 2 | 'use strict'; 3 | 4 | Object.defineProperty(exports, '__esModule', { 5 | value: true 6 | }); 7 | 8 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 9 | 10 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 11 | 12 | function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 13 | 14 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 15 | 16 | var BaseAuthorizeStep = (function () { 17 | function BaseAuthorizeStep(session, logger) { 18 | _classCallCheck(this, BaseAuthorizeStep); 19 | 20 | this.session = session; 21 | this.logger = logger; 22 | this.locale = _locale.Locale.Repository['default']; 23 | this.loginRoute = _config.Config.routerAuthStepOpts.loginRoute; 24 | } 25 | 26 | _createClass(BaseAuthorizeStep, [{ 27 | key: 'run', 28 | value: function run(navigationInstruction, next) { 29 | if (!this.session.isUserLoggedIn() && navigationInstruction.config.route !== this.loginRoute) { 30 | this.logger.warn(this.locale.translate('pleaseLogin')); 31 | return next.cancel(new _aureliaRouter.Redirect(this.loginRoute)); 32 | } 33 | 34 | var canAccess = this.authorize(navigationInstruction); 35 | if (canAccess === false) { 36 | this.logger.error(this.locale.translate('notAuthorized')); 37 | return next.cancel(); 38 | } 39 | 40 | return next(); 41 | } 42 | }, { 43 | key: 'authorize', 44 | value: function authorize(navigationInstruction) { 45 | if (navigationInstruction.parentInstruction === null) { 46 | return this.canAccess(navigationInstruction); 47 | } else { 48 | var canAccess = this.canAccess(navigationInstruction); 49 | if (hasRole) { 50 | return this.authorize(navigationInstruction.parentInstruction); 51 | } else { 52 | return false; 53 | } 54 | } 55 | } 56 | }, { 57 | key: 'canAccess', 58 | value: function canAccess() {} 59 | }]); 60 | 61 | return BaseAuthorizeStep; 62 | })(); 63 | 64 | var RolesAuthorizeStep = (function (_BaseAuthorizeStep) { 65 | _inherits(RolesAuthorizeStep, _BaseAuthorizeStep); 66 | 67 | function RolesAuthorizeStep(session, logger) { 68 | _classCallCheck(this, _RolesAuthorizeStep); 69 | 70 | _get(Object.getPrototypeOf(_RolesAuthorizeStep.prototype), 'constructor', this).call(this, session, logger); 71 | } 72 | 73 | _createClass(RolesAuthorizeStep, [{ 74 | key: 'canAccess', 75 | value: function canAccess(navigationInstruction) { 76 | if (navigationInstruction.config.roles) { 77 | return this.session.userHasAtLeastOneRole(navigationInstruction.config.roles); 78 | } 79 | 80 | return true; 81 | } 82 | }]); 83 | 84 | var _RolesAuthorizeStep = RolesAuthorizeStep; 85 | RolesAuthorizeStep = (0, _aureliaDependencyInjection.inject)(_session.Session, _logger.Logger)(RolesAuthorizeStep) || RolesAuthorizeStep; 86 | return RolesAuthorizeStep; 87 | })(BaseAuthorizeStep); 88 | 89 | exports.RolesAuthorizeStep = RolesAuthorizeStep; 90 | 91 | var AccessRightsAuthorizeStep = (function (_BaseAuthorizeStep2) { 92 | _inherits(AccessRightsAuthorizeStep, _BaseAuthorizeStep2); 93 | 94 | function AccessRightsAuthorizeStep(session, logger) { 95 | _classCallCheck(this, _AccessRightsAuthorizeStep); 96 | 97 | _get(Object.getPrototypeOf(_AccessRightsAuthorizeStep.prototype), 'constructor', this).call(this, session, logger); 98 | } 99 | 100 | _createClass(AccessRightsAuthorizeStep, [{ 101 | key: 'canAccess', 102 | value: function canAccess(navigationInstruction) { 103 | if (navigationInstruction.config.accessRight) { 104 | return this.session.userHasAccessRight(navigationInstruction.config.accessRight); 105 | } 106 | 107 | return true; 108 | } 109 | }]); 110 | 111 | var _AccessRightsAuthorizeStep = AccessRightsAuthorizeStep; 112 | AccessRightsAuthorizeStep = (0, _aureliaDependencyInjection.inject)(_session.Session, _logger.Logger)(AccessRightsAuthorizeStep) || AccessRightsAuthorizeStep; 113 | return AccessRightsAuthorizeStep; 114 | })(BaseAuthorizeStep); 115 | 116 | exports.AccessRightsAuthorizeStep = AccessRightsAuthorizeStep; 117 | }); 118 | //# sourceMappingURL=data:application/json;base64,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QUFNLEVBQUU7S0FDeEI7O2lCQUhVLHlCQUF5Qjs7YUFLM0IsbUJBQUMscUJBQXFCLEVBQUU7QUFDL0IsWUFBSSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO0FBQzVDLGlCQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2xGOztBQUVELGVBQU8sSUFBSSxDQUFDO09BQ2I7OztxQ0FYVSx5QkFBeUI7QUFBekIsNkJBQXlCLEdBRHJDLGdDQWxFTyxNQUFNLFdBQ04sT0FBTyxVQUNQLE1BQU0sQ0FnRVUsQ0FDWCx5QkFBeUIsS0FBekIseUJBQXlCO1dBQXpCLHlCQUF5QjtLQUFTLGlCQUFpQiIsImZpbGUiOiJhdXRob3JpemUtc3RlcHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZWQgYnkgbW9zaGVuc2t5IG9uIDYvMTcvMTUuXG4gKi9cbmltcG9ydCB7aW5qZWN0fSBmcm9tICdhdXJlbGlhLWRlcGVuZGVuY3ktaW5qZWN0aW9uJztcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSAnLi9zZXNzaW9uJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQge0xvY2FsZX0gZnJvbSAnLi9sb2NhbGUnO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7UmVkaXJlY3R9IGZyb20gJ2F1cmVsaWEtcm91dGVyJztcblxuXG5jbGFzcyBCYXNlQXV0aG9yaXplU3RlcCB7XG4gIGNvbnN0cnVjdG9yKHNlc3Npb24sIGxvZ2dlcikge1xuICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy5sb2NhbGUgPSBMb2NhbGUuUmVwb3NpdG9yeS5kZWZhdWx0O1xuICAgIHRoaXMubG9naW5Sb3V0ZSA9IENvbmZpZy5yb3V0ZXJBdXRoU3RlcE9wdHMubG9naW5Sb3V0ZTtcbiAgfVxuXG4gIHJ1bihuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIG5leHQpIHtcbiAgICBpZiAoIXRoaXMuc2Vzc2lvbi5pc1VzZXJMb2dnZWRJbigpICYmIG5hdmlnYXRpb25JbnN0cnVjdGlvbi5jb25maWcucm91dGUgIT09IHRoaXMubG9naW5Sb3V0ZSkge1xuICAgICAgdGhpcy5sb2dnZXIud2Fybih0aGlzLmxvY2FsZS50cmFuc2xhdGUoJ3BsZWFzZUxvZ2luJykpO1xuICAgICAgcmV0dXJuIG5leHQuY2FuY2VsKG5ldyBSZWRpcmVjdCh0aGlzLmxvZ2luUm91dGUpKTtcbiAgICB9XG5cbiAgICBsZXQgY2FuQWNjZXNzID0gdGhpcy5hdXRob3JpemUobmF2aWdhdGlvbkluc3RydWN0aW9uKTtcbiAgICBpZiAoY2FuQWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IodGhpcy5sb2NhbGUudHJhbnNsYXRlKCdub3RBdXRob3JpemVkJykpO1xuICAgICAgcmV0dXJuIG5leHQuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQoKTtcbiAgfVxuXG4gIGF1dGhvcml6ZShuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pIHtcbiAgICBpZiAobmF2aWdhdGlvbkluc3RydWN0aW9uLnBhcmVudEluc3RydWN0aW9uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYW5BY2Nlc3MobmF2aWdhdGlvbkluc3RydWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNhbkFjY2VzcyA9IHRoaXMuY2FuQWNjZXNzKG5hdmlnYXRpb25JbnN0cnVjdGlvbik7XG4gICAgICBpZiAoaGFzUm9sZSl7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhvcml6ZShuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucGFyZW50SW5zdHJ1Y3Rpb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuQWNjZXNzKCkge1xuXG4gIH1cbn1cblxuXG5AaW5qZWN0KFNlc3Npb24sIExvZ2dlcilcbmV4cG9ydCBjbGFzcyBSb2xlc0F1dGhvcml6ZVN0ZXAgZXh0ZW5kcyBCYXNlQXV0aG9yaXplU3RlcCB7XG4gIGNvbnN0cnVjdG9yKHNlc3Npb24sIGxvZ2dlcikge1xuICAgIHN1cGVyKHNlc3Npb24sIGxvZ2dlcik7XG4gIH1cblxuICBjYW5BY2Nlc3MobmF2aWdhdGlvbkluc3RydWN0aW9uKSB7XG4gICAgaWYgKG5hdmlnYXRpb25JbnN0cnVjdGlvbi5jb25maWcucm9sZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb24udXNlckhhc0F0TGVhc3RPbmVSb2xlKG5hdmlnYXRpb25JbnN0cnVjdGlvbi5jb25maWcucm9sZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cblxuQGluamVjdChTZXNzaW9uLCBMb2dnZXIpXG5leHBvcnQgY2xhc3MgQWNjZXNzUmlnaHRzQXV0aG9yaXplU3RlcCBleHRlbmRzIEJhc2VBdXRob3JpemVTdGVwIHtcbiAgY29uc3RydWN0b3Ioc2Vzc2lvbiwgbG9nZ2VyKSB7XG4gICAgc3VwZXIoc2Vzc2lvbiwgbG9nZ2VyKTtcbiAgfVxuXG4gIGNhbkFjY2VzcyhuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pIHtcbiAgICBpZiAobmF2aWdhdGlvbkluc3RydWN0aW9uLmNvbmZpZy5hY2Nlc3NSaWdodCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi51c2VySGFzQWNjZXNzUmlnaHQobmF2aWdhdGlvbkluc3RydWN0aW9uLmNvbmZpZy5hY2Nlc3NSaWdodCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 -------------------------------------------------------------------------------- /dist/amd/session.js: -------------------------------------------------------------------------------- 1 | define(['exports', 'aurelia-dependency-injection', 'aurelia-router', './logger'], function (exports, _aureliaDependencyInjection, _aureliaRouter, _logger) { 2 | 'use strict'; 3 | 4 | Object.defineProperty(exports, '__esModule', { 5 | value: true 6 | }); 7 | 8 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 9 | 10 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 11 | 12 | var constant = { 13 | appData: 'appData' 14 | }; 15 | 16 | var Session = (function () { 17 | function Session(router, logger) { 18 | _classCallCheck(this, _Session); 19 | 20 | this.router = router; 21 | this.log = logger; 22 | 23 | this.initUserData(); 24 | 25 | if (this.userRemembered()) { 26 | this.restoreData(); 27 | } 28 | } 29 | 30 | _createClass(Session, [{ 31 | key: 'initUserData', 32 | value: function initUserData() { 33 | this.userName = null; 34 | this.userClaims = []; 35 | this.userRoles = []; 36 | this.userAccessRights = []; 37 | 38 | this.isLoggedIn = false; 39 | this.isBusy = false; 40 | } 41 | }, { 42 | key: 'setUser', 43 | value: function setUser(data) { 44 | if (data) { 45 | localStorage[constant.appData] = JSON.stringify(data); 46 | this.restoreData(); 47 | } 48 | } 49 | }, { 50 | key: 'clearUser', 51 | value: function clearUser() { 52 | localStorage.clear(); 53 | this.initUserData(); 54 | } 55 | }, { 56 | key: 'userHasAccessRight', 57 | value: function userHasAccessRight(requiredAccessRight) { 58 | return this.userAccessRights[requiredAccessRight] === true; 59 | } 60 | }, { 61 | key: 'userHasAllAccessRights', 62 | value: function userHasAllAccessRights(requiredAccessRights) { 63 | var _this = this; 64 | 65 | return requiredAccessRights.every(function (accessRight) { 66 | return _this.userHasAccessRight(accessRight); 67 | }); 68 | } 69 | }, { 70 | key: 'userHasRole', 71 | value: function userHasRole(requredRole) { 72 | return this.userRoles[requredRole] === true; 73 | } 74 | }, { 75 | key: 'userHasAtLeastOneRole', 76 | value: function userHasAtLeastOneRole(requiredRoles) { 77 | var _this2 = this; 78 | 79 | return requiredRoles.some(function (requiredRole) { 80 | return _this2.userHasRole(requiredRole); 81 | }); 82 | } 83 | }, { 84 | key: 'getUserClaim', 85 | value: function getUserClaim(claimType) { 86 | return this.userClaims[claimType]; 87 | } 88 | }, { 89 | key: 'isUserLoggedIn', 90 | value: function isUserLoggedIn() { 91 | return this.isLoggedIn === true; 92 | } 93 | }, { 94 | key: 'userRemembered', 95 | value: function userRemembered() { 96 | var isInLocalStorage = localStorage[constant.appData] !== undefined; 97 | return isInLocalStorage; 98 | } 99 | }, { 100 | key: 'restoreData', 101 | value: function restoreData() { 102 | var data = JSON.parse(localStorage[constant.appData]); 103 | 104 | this.userName = data.userName; 105 | this.userClaims = data.userClaims.reduce(function (hash, userClaim) { 106 | hash[userClaim.type] = userClaim.value; 107 | return hash; 108 | }, {}); 109 | this.userRoles = data.userRoles.reduce(function (hash, userRole) { 110 | hash[userRole] = true; 111 | return hash; 112 | }, {}); 113 | this.userAccessRights = data.userAccessRights.reduce(function (hash, accessRight) { 114 | hash[accessRight] = true; 115 | return hash; 116 | }, {}); 117 | 118 | this.userAccessRights['access'] = true; 119 | 120 | this.isLoggedIn = true; 121 | this.router.navigate(''); 122 | } 123 | }, { 124 | key: 'rememberedToken', 125 | value: function rememberedToken() { 126 | var token = JSON.parse(localStorage[constant.appData]).token; 127 | return token; 128 | } 129 | }, { 130 | key: 'getUserName', 131 | value: function getUserName() { 132 | return this.userName; 133 | } 134 | }]); 135 | 136 | var _Session = Session; 137 | Session = (0, _aureliaDependencyInjection.inject)(_aureliaRouter.Router, _logger.Logger)(Session) || Session; 138 | return Session; 139 | })(); 140 | 141 | exports.Session = Session; 142 | }); 143 | //# sourceMappingURL=data:application/json;base64,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ZW5za3kgb24gNi8xNi8xNS5cbiAqL1xuaW1wb3J0IHtpbmplY3R9IGZyb20gJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ2F1cmVsaWEtcm91dGVyJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuL2xvZ2dlcic7XG5cbmNvbnN0IGNvbnN0YW50ID0ge1xuICBhcHBEYXRhOiAnYXBwRGF0YSdcbn07XG5cbkBpbmplY3QoUm91dGVyLCBMb2dnZXIpXG5leHBvcnQgY2xhc3MgU2Vzc2lvbiB7XG5cbiAgY29uc3RydWN0b3Iocm91dGVyLCBsb2dnZXIpIHtcbiAgICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcbiAgICB0aGlzLmxvZyA9IGxvZ2dlcjtcblxuICAgIHRoaXMuaW5pdFVzZXJEYXRhKCk7XG5cbiAgICBpZiAodGhpcy51c2VyUmVtZW1iZXJlZCgpKSB7XG4gICAgICB0aGlzLnJlc3RvcmVEYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgaW5pdFVzZXJEYXRhKCkge1xuICAgIHRoaXMudXNlck5hbWUgPSBudWxsO1xuICAgIHRoaXMudXNlckNsYWltcyA9IFtdO1xuICAgIHRoaXMudXNlclJvbGVzID0gW107XG4gICAgdGhpcy51c2VyQWNjZXNzUmlnaHRzID0gW107XG5cbiAgICB0aGlzLmlzTG9nZ2VkSW4gPSBmYWxzZTtcbiAgICB0aGlzLmlzQnVzeSA9IGZhbHNlO1xuICB9XG5cbiAgc2V0VXNlcihkYXRhKSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGxvY2FsU3RvcmFnZVtjb25zdGFudC5hcHBEYXRhXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgdGhpcy5yZXN0b3JlRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyVXNlcigpIHtcbiAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgICB0aGlzLmluaXRVc2VyRGF0YSgpO1xuICB9XG5cbiAgdXNlckhhc0FjY2Vzc1JpZ2h0KHJlcXVpcmVkQWNjZXNzUmlnaHQpIHtcbiAgICByZXR1cm4gdGhpcy51c2VyQWNjZXNzUmlnaHRzW3JlcXVpcmVkQWNjZXNzUmlnaHRdID09PSB0cnVlO1xuICB9XG5cbiAgdXNlckhhc0FsbEFjY2Vzc1JpZ2h0cyhyZXF1aXJlZEFjY2Vzc1JpZ2h0cykge1xuICAgIHJldHVybiByZXF1aXJlZEFjY2Vzc1JpZ2h0cy5ldmVyeShhY2Nlc3NSaWdodCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51c2VySGFzQWNjZXNzUmlnaHQoYWNjZXNzUmlnaHQpO1xuICAgIH0pXG4gIH1cblxuICB1c2VySGFzUm9sZShyZXF1cmVkUm9sZSkge1xuICAgIHJldHVybiB0aGlzLnVzZXJSb2xlc1tyZXF1cmVkUm9sZV0gPT09IHRydWU7XG4gIH1cblxuICB1c2VySGFzQXRMZWFzdE9uZVJvbGUocmVxdWlyZWRSb2xlcykge1xuICAgIHJldHVybiByZXF1aXJlZFJvbGVzLnNvbWUocmVxdWlyZWRSb2xlID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVzZXJIYXNSb2xlKHJlcXVpcmVkUm9sZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VyQ2xhaW0oY2xhaW1UeXBlKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlckNsYWltc1tjbGFpbVR5cGVdO1xuICB9XG5cbiAgaXNVc2VyTG9nZ2VkSW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2dnZWRJbiA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHVzZXJSZW1lbWJlcmVkKCkge1xuICAgIGxldCBpc0luTG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlW2NvbnN0YW50LmFwcERhdGFdICE9PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGlzSW5Mb2NhbFN0b3JhZ2U7XG4gIH1cblxuICByZXN0b3JlRGF0YSgpIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VbY29uc3RhbnQuYXBwRGF0YV0pO1xuXG4gICAgdGhpcy51c2VyTmFtZSA9IGRhdGEudXNlck5hbWU7XG4gICAgdGhpcy51c2VyQ2xhaW1zID0gZGF0YS51c2VyQ2xhaW1zLnJlZHVjZShmdW5jdGlvbiAoaGFzaCwgdXNlckNsYWltKSB7XG4gICAgICBoYXNoW3VzZXJDbGFpbS50eXBlXSA9IHVzZXJDbGFpbS52YWx1ZTtcbiAgICAgIHJldHVybiBoYXNoO1xuICAgIH0sIHt9KTtcbiAgICB0aGlzLnVzZXJSb2xlcyA9IGRhdGEudXNlclJvbGVzLnJlZHVjZSgoaGFzaCwgdXNlclJvbGUpID0+IHtcbiAgICAgIGhhc2hbdXNlclJvbGVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBoYXNoO1xuICAgIH0sIHt9KTtcbiAgICB0aGlzLnVzZXJBY2Nlc3NSaWdodHMgPSBkYXRhLnVzZXJBY2Nlc3NSaWdodHMucmVkdWNlKChoYXNoLCBhY2Nlc3NSaWdodCkgPT4ge1xuICAgICAgaGFzaFthY2Nlc3NSaWdodF0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGhhc2g7XG4gICAgfSwge30pO1xuXG4gICAgLy8gdG9kbzogZGVsZXRlXG4gICAgdGhpcy51c2VyQWNjZXNzUmlnaHRzWydhY2Nlc3MnXSA9IHRydWU7XG5cbiAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0cnVlO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKCcnKTtcbiAgfVxuXG4gIHJlbWVtYmVyZWRUb2tlbigpIHtcbiAgICBjb25zdCB0b2tlbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlW2NvbnN0YW50LmFwcERhdGFdKS50b2tlbjtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbiAgXG4gIGdldFVzZXJOYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXNlck5hbWU7XG4gIH1cbn1cblxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 -------------------------------------------------------------------------------- /dist/system/authorize-steps.js: -------------------------------------------------------------------------------- 1 | System.register(['aurelia-dependency-injection', './session', './logger', './locale', './config', 'aurelia-router'], function (_export) { 2 | 'use strict'; 3 | 4 | var inject, Session, Logger, Locale, Config, Redirect, BaseAuthorizeStep, RolesAuthorizeStep, AccessRightsAuthorizeStep; 5 | 6 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 7 | 8 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 9 | 10 | function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 11 | 12 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } 13 | 14 | return { 15 | setters: [function (_aureliaDependencyInjection) { 16 | inject = _aureliaDependencyInjection.inject; 17 | }, function (_session) { 18 | Session = _session.Session; 19 | }, function (_logger) { 20 | Logger = _logger.Logger; 21 | }, function (_locale) { 22 | Locale = _locale.Locale; 23 | }, function (_config) { 24 | Config = _config.Config; 25 | }, function (_aureliaRouter) { 26 | Redirect = _aureliaRouter.Redirect; 27 | }], 28 | execute: function () { 29 | BaseAuthorizeStep = (function () { 30 | function BaseAuthorizeStep(session, logger) { 31 | _classCallCheck(this, BaseAuthorizeStep); 32 | 33 | this.session = session; 34 | this.logger = logger; 35 | this.locale = Locale.Repository['default']; 36 | this.loginRoute = Config.routerAuthStepOpts.loginRoute; 37 | } 38 | 39 | _createClass(BaseAuthorizeStep, [{ 40 | key: 'run', 41 | value: function run(navigationInstruction, next) { 42 | if (!this.session.isUserLoggedIn() && navigationInstruction.config.route !== this.loginRoute) { 43 | this.logger.warn(this.locale.translate('pleaseLogin')); 44 | return next.cancel(new Redirect(this.loginRoute)); 45 | } 46 | 47 | var canAccess = this.authorize(navigationInstruction); 48 | if (canAccess === false) { 49 | this.logger.error(this.locale.translate('notAuthorized')); 50 | return next.cancel(); 51 | } 52 | 53 | return next(); 54 | } 55 | }, { 56 | key: 'authorize', 57 | value: function authorize(navigationInstruction) { 58 | if (navigationInstruction.parentInstruction === null) { 59 | return this.canAccess(navigationInstruction); 60 | } else { 61 | var canAccess = this.canAccess(navigationInstruction); 62 | if (hasRole) { 63 | return this.authorize(navigationInstruction.parentInstruction); 64 | } else { 65 | return false; 66 | } 67 | } 68 | } 69 | }, { 70 | key: 'canAccess', 71 | value: function canAccess() {} 72 | }]); 73 | 74 | return BaseAuthorizeStep; 75 | })(); 76 | 77 | RolesAuthorizeStep = (function (_BaseAuthorizeStep) { 78 | _inherits(RolesAuthorizeStep, _BaseAuthorizeStep); 79 | 80 | function RolesAuthorizeStep(session, logger) { 81 | _classCallCheck(this, _RolesAuthorizeStep); 82 | 83 | _get(Object.getPrototypeOf(_RolesAuthorizeStep.prototype), 'constructor', this).call(this, session, logger); 84 | } 85 | 86 | _createClass(RolesAuthorizeStep, [{ 87 | key: 'canAccess', 88 | value: function canAccess(navigationInstruction) { 89 | if (navigationInstruction.config.roles) { 90 | return this.session.userHasAtLeastOneRole(navigationInstruction.config.roles); 91 | } 92 | 93 | return true; 94 | } 95 | }]); 96 | 97 | var _RolesAuthorizeStep = RolesAuthorizeStep; 98 | RolesAuthorizeStep = inject(Session, Logger)(RolesAuthorizeStep) || RolesAuthorizeStep; 99 | return RolesAuthorizeStep; 100 | })(BaseAuthorizeStep); 101 | 102 | _export('RolesAuthorizeStep', RolesAuthorizeStep); 103 | 104 | AccessRightsAuthorizeStep = (function (_BaseAuthorizeStep2) { 105 | _inherits(AccessRightsAuthorizeStep, _BaseAuthorizeStep2); 106 | 107 | function AccessRightsAuthorizeStep(session, logger) { 108 | _classCallCheck(this, _AccessRightsAuthorizeStep); 109 | 110 | _get(Object.getPrototypeOf(_AccessRightsAuthorizeStep.prototype), 'constructor', this).call(this, session, logger); 111 | } 112 | 113 | _createClass(AccessRightsAuthorizeStep, [{ 114 | key: 'canAccess', 115 | value: function canAccess(navigationInstruction) { 116 | if (navigationInstruction.config.accessRight) { 117 | return this.session.userHasAccessRight(navigationInstruction.config.accessRight); 118 | } 119 | 120 | return true; 121 | } 122 | }]); 123 | 124 | var _AccessRightsAuthorizeStep = AccessRightsAuthorizeStep; 125 | AccessRightsAuthorizeStep = inject(Session, Logger)(AccessRightsAuthorizeStep) || AccessRightsAuthorizeStep; 126 | return AccessRightsAuthorizeStep; 127 | })(BaseAuthorizeStep); 128 | 129 | _export('AccessRightsAuthorizeStep', AccessRightsAuthorizeStep); 130 | } 131 | }; 132 | }); 133 | //# sourceMappingURL=data:application/json;base64,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QUFTLGlCQUFpQjs7OztBQWdCNUMsK0JBQXlCO2tCQUF6Qix5QkFBeUI7O0FBQ3pCLGlCQURBLHlCQUF5QixDQUN4QixPQUFPLEVBQUUsTUFBTSxFQUFFOzs7QUFDM0IsNEdBQU0sT0FBTyxFQUFFLE1BQU0sRUFBRTtTQUN4Qjs7cUJBSFUseUJBQXlCOztpQkFLM0IsbUJBQUMscUJBQXFCLEVBQUU7QUFDL0IsZ0JBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtBQUM1QyxxQkFBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNsRjs7QUFFRCxtQkFBTyxJQUFJLENBQUM7V0FDYjs7O3lDQVhVLHlCQUF5QjtBQUF6QixpQ0FBeUIsR0FEckMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FDWCx5QkFBeUIsS0FBekIseUJBQXlCO2VBQXpCLHlCQUF5QjtTQUFTLGlCQUFpQiIsImZpbGUiOiJhdXRob3JpemUtc3RlcHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZWQgYnkgbW9zaGVuc2t5IG9uIDYvMTcvMTUuXG4gKi9cbmltcG9ydCB7aW5qZWN0fSBmcm9tICdhdXJlbGlhLWRlcGVuZGVuY3ktaW5qZWN0aW9uJztcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSAnLi9zZXNzaW9uJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQge0xvY2FsZX0gZnJvbSAnLi9sb2NhbGUnO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7UmVkaXJlY3R9IGZyb20gJ2F1cmVsaWEtcm91dGVyJztcblxuXG5jbGFzcyBCYXNlQXV0aG9yaXplU3RlcCB7XG4gIGNvbnN0cnVjdG9yKHNlc3Npb24sIGxvZ2dlcikge1xuICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy5sb2NhbGUgPSBMb2NhbGUuUmVwb3NpdG9yeS5kZWZhdWx0O1xuICAgIHRoaXMubG9naW5Sb3V0ZSA9IENvbmZpZy5yb3V0ZXJBdXRoU3RlcE9wdHMubG9naW5Sb3V0ZTtcbiAgfVxuXG4gIHJ1bihuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24sIG5leHQpIHtcbiAgICBpZiAoIXRoaXMuc2Vzc2lvbi5pc1VzZXJMb2dnZWRJbigpICYmIG5hdmlnYXRpb25JbnN0cnVjdGlvbi5jb25maWcucm91dGUgIT09IHRoaXMubG9naW5Sb3V0ZSkge1xuICAgICAgdGhpcy5sb2dnZXIud2Fybih0aGlzLmxvY2FsZS50cmFuc2xhdGUoJ3BsZWFzZUxvZ2luJykpO1xuICAgICAgcmV0dXJuIG5leHQuY2FuY2VsKG5ldyBSZWRpcmVjdCh0aGlzLmxvZ2luUm91dGUpKTtcbiAgICB9XG5cbiAgICBsZXQgY2FuQWNjZXNzID0gdGhpcy5hdXRob3JpemUobmF2aWdhdGlvbkluc3RydWN0aW9uKTtcbiAgICBpZiAoY2FuQWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IodGhpcy5sb2NhbGUudHJhbnNsYXRlKCdub3RBdXRob3JpemVkJykpO1xuICAgICAgcmV0dXJuIG5leHQuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQoKTtcbiAgfVxuXG4gIGF1dGhvcml6ZShuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pIHtcbiAgICBpZiAobmF2aWdhdGlvbkluc3RydWN0aW9uLnBhcmVudEluc3RydWN0aW9uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYW5BY2Nlc3MobmF2aWdhdGlvbkluc3RydWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNhbkFjY2VzcyA9IHRoaXMuY2FuQWNjZXNzKG5hdmlnYXRpb25JbnN0cnVjdGlvbik7XG4gICAgICBpZiAoaGFzUm9sZSl7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhvcml6ZShuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24ucGFyZW50SW5zdHJ1Y3Rpb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuQWNjZXNzKCkge1xuXG4gIH1cbn1cblxuXG5AaW5qZWN0KFNlc3Npb24sIExvZ2dlcilcbmV4cG9ydCBjbGFzcyBSb2xlc0F1dGhvcml6ZVN0ZXAgZXh0ZW5kcyBCYXNlQXV0aG9yaXplU3RlcCB7XG4gIGNvbnN0cnVjdG9yKHNlc3Npb24sIGxvZ2dlcikge1xuICAgIHN1cGVyKHNlc3Npb24sIGxvZ2dlcik7XG4gIH1cblxuICBjYW5BY2Nlc3MobmF2aWdhdGlvbkluc3RydWN0aW9uKSB7XG4gICAgaWYgKG5hdmlnYXRpb25JbnN0cnVjdGlvbi5jb25maWcucm9sZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb24udXNlckhhc0F0TGVhc3RPbmVSb2xlKG5hdmlnYXRpb25JbnN0cnVjdGlvbi5jb25maWcucm9sZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cblxuQGluamVjdChTZXNzaW9uLCBMb2dnZXIpXG5leHBvcnQgY2xhc3MgQWNjZXNzUmlnaHRzQXV0aG9yaXplU3RlcCBleHRlbmRzIEJhc2VBdXRob3JpemVTdGVwIHtcbiAgY29uc3RydWN0b3Ioc2Vzc2lvbiwgbG9nZ2VyKSB7XG4gICAgc3VwZXIoc2Vzc2lvbiwgbG9nZ2VyKTtcbiAgfVxuXG4gIGNhbkFjY2VzcyhuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pIHtcbiAgICBpZiAobmF2aWdhdGlvbkluc3RydWN0aW9uLmNvbmZpZy5hY2Nlc3NSaWdodCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi51c2VySGFzQWNjZXNzUmlnaHQobmF2aWdhdGlvbkluc3RydWN0aW9uLmNvbmZpZy5hY2Nlc3NSaWdodCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 --------------------------------------------------------------------------------