You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/07/25 10:18:00 UTC

[09/11] ignite git commit: IGNITE-5697 Web Console: Upgrade dependencies.

IGNITE-5697 Web Console: Upgrade dependencies.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f277530a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f277530a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f277530a

Branch: refs/heads/master
Commit: f277530ab6a9a6f03fd66f95a7a4d91a3506dcf5
Parents: 39fa8fa
Author: Andrey Novikov <an...@gridgain.com>
Authored: Tue Jul 25 15:24:13 2017 +0700
Committer: Andrey Novikov <an...@gridgain.com>
Committed: Tue Jul 25 15:24:13 2017 +0700

----------------------------------------------------------------------
 modules/web-console/backend/.eslintrc           | 39 ++++++------
 modules/web-console/backend/package.json        | 27 ++++----
 modules/web-console/frontend/.eslintrc          | 40 +++++-------
 modules/web-console/frontend/app/app.js         | 37 ++++++-----
 .../components/activities-user-dialog/index.js  | 28 ++++-----
 .../page-configure-advanced/controller.js       |  9 +--
 .../components/page-configure-basic/service.js  |  8 +--
 .../app/components/page-configure/controller.js | 12 +---
 .../page-configure/controller.spec.js           | 48 --------------
 .../page-configure/services/PageConfigure.js    | 18 +++---
 .../components/web-console-header/component.js  | 12 ++--
 .../app/components/web-console-header/index.js  |  4 +-
 .../frontend/app/modules/ace.module.js          |  6 +-
 .../app/modules/branding/branding.module.js     | 16 +++--
 .../generator/ConfigurationGenerator.js         |  2 +-
 .../generator/PlatformGenerator.js              |  4 +-
 .../frontend/app/modules/demo/Demo.module.js    | 10 +--
 .../app/modules/dialog/dialog.controller.js     |  4 --
 .../app/modules/form/field/label.directive.js   |  4 +-
 .../app/modules/form/field/tooltip.directive.js |  4 +-
 .../frontend/app/modules/sql/sql.controller.js  |  2 +-
 .../frontend/app/modules/sql/sql.module.js      | 66 ++++++++++----------
 .../frontend/app/modules/states/admin.state.js  |  6 +-
 .../app/modules/states/configuration.state.js   | 35 ++++++-----
 .../summary/summary-zipper.service.js           |  2 +-
 .../frontend/app/modules/states/errors.state.js |  4 +-
 .../frontend/app/modules/states/logout.state.js | 12 ++--
 .../app/modules/states/password.state.js        |  4 +-
 .../app/modules/states/profile.state.js         |  9 ++-
 .../frontend/app/modules/states/signin.state.js | 32 +++++-----
 .../app/modules/user/AclRoute.provider.js       |  6 +-
 .../frontend/app/modules/user/user.module.js    | 30 ++++++++-
 .../app/services/CopyToClipboard.service.js     |  4 +-
 .../app/services/LegacyTable.service.js         |  2 +-
 modules/web-console/frontend/app/vendor.js      |  8 ++-
 modules/web-console/frontend/package.json       | 57 ++++++++---------
 modules/web-console/frontend/views/index.pug    | 14 +----
 37 files changed, 292 insertions(+), 333 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/backend/.eslintrc
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/.eslintrc b/modules/web-console/backend/.eslintrc
index 7eb04b7..1915518 100644
--- a/modules/web-console/backend/.eslintrc
+++ b/modules/web-console/backend/.eslintrc
@@ -3,19 +3,21 @@ env:
     node: true
     mocha: true
 
-ecmaFeatures:
-    arrowFunctions: true
-    blockBindings: true
-    classes: true
-    defaultParams: true
-    destructuring: true
-    module: true
-    objectLiteralComputedProperties: true
-    objectLiteralShorthandMethods: true
-    objectLiteralShorthandProperties: true
-    spread: true
-    templateStrings: true
-    experimentalObjectRestSpread: true
+parserOptions:
+    sourceType: module
+    ecmaFeatures:
+        arrowFunctions: true
+        blockBindings: true
+        classes: true
+        defaultParams: true
+        destructuring: true
+        module: true
+        objectLiteralComputedProperties: true
+        objectLiteralShorthandMethods: true
+        objectLiteralShorthandProperties: true
+        spread: true
+        templateStrings: true
+        experimentalObjectRestSpread: true
 
 globals:
     _: true
@@ -47,7 +49,7 @@ rules:
     guard-for-in: 1
     handle-callback-err: 0
     id-length: [2, {"min": 1, "max": 60}]
-    indent: [2, 4, {"SwitchCase": 1}]
+    indent: [2, 4, {"SwitchCase": 1, "MemberExpression": "off", "CallExpression": {"arguments": "off"}}]
     key-spacing: [2, { "beforeColon": false, "afterColon": true }]
     lines-around-comment: 0
     linebreak-style: [0, "unix"]
@@ -104,7 +106,7 @@ rules:
     no-loop-func: 2
     no-mixed-requires: [0, false]
     no-mixed-spaces-and-tabs: [2, true]
-    no-multi-spaces: 2
+    no-multi-spaces: ["error", {"exceptions": { "VariableDeclarator": true }}]
     no-multi-str: 2
     no-multiple-empty-lines: [0, {"max": 2}]
     no-native-reassign: 2
@@ -130,7 +132,7 @@ rules:
     no-script-url: 0
     no-self-compare: 2
     no-sequences: 2
-    no-shadow: 2
+    no-shadow: 0
     no-shadow-restricted-names: 2
     no-spaced-func: 2
     no-sparse-arrays: 1
@@ -162,7 +164,7 @@ rules:
     prefer-const: 1
     prefer-spread: 2
     quote-props: [2, "as-needed"]
-    quotes: [2, "single"]
+    quotes: [2, "single", {"allowTemplateLiterals": true}]
     radix: 1
     semi: [2, "always"]
     semi-spacing: [2, {"before": false, "after": true}]
@@ -181,6 +183,3 @@ rules:
     wrap-iife: 0
     wrap-regex: 0
     yoda: [2, "never"]
-
-parserOptions:
-    sourceType: module

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/backend/package.json
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/package.json b/modules/web-console/backend/package.json
index 2af7787..837f41c 100644
--- a/modules/web-console/backend/package.json
+++ b/modules/web-console/backend/package.json
@@ -29,19 +29,19 @@
     "win32"
   ],
   "dependencies": {
-    "body-parser": "1.17.1",
+    "body-parser": "1.17.2",
     "connect-mongo": "1.3.2",
-    "cookie-parser": "~1.4.0",
-    "express": "4.15.2",
-    "express-session": "1.15.2",
+    "cookie-parser": "1.4.3",
+    "express": "4.15.3",
+    "express-session": "1.15.4",
     "fire-up": "1.0.0",
-    "glob": "7.1.1",
+    "glob": "7.1.2",
     "jszip": "3.1.3",
     "lodash": "4.17.4",
-    "mongoose": "4.9.4",
-    "morgan": "1.8.1",
+    "mongoose": "4.11.4",
+    "morgan": "1.8.2",
     "nconf": "0.8.4",
-    "nodemailer": "3.1.4",
+    "nodemailer": "4.0.1",
     "passport": "0.3.2",
     "passport-local": "1.0.0",
     "passport-local-mongoose": "4.0.0",
@@ -49,12 +49,11 @@
     "socket.io": "1.7.3"
   },
   "devDependencies": {
-    "chai": "3.5.0",
-    "cross-env": "4.0.0",
-    "eslint": "3.19.0",
-    "eslint-friendly-formatter": "2.0.7",
-    "jasmine-core": "2.5.2",
-    "mocha": "3.2.0",
+    "chai": "4.1.0",
+    "cross-env": "5.0.1",
+    "eslint": "4.3.0",
+    "eslint-friendly-formatter": "3.0.0",
+    "mocha": "3.4.2",
     "mocha-teamcity-reporter": "1.1.1",
     "mockgoose": "6.0.8",
     "supertest": "3.0.0"

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/.eslintrc
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/.eslintrc b/modules/web-console/frontend/.eslintrc
index d88fb97..4e24d0b 100644
--- a/modules/web-console/frontend/.eslintrc
+++ b/modules/web-console/frontend/.eslintrc
@@ -6,20 +6,21 @@ plugins:
 env:
     es6: true
     browser: true
-
-ecmaFeatures:
-    arrowFunctions: true
-    blockBindings: true
-    classes: true
-    defaultParams: true
-    destructuring: true
-    module: true
-    objectLiteralComputedProperties: true
-    objectLiteralShorthandMethods: true
-    objectLiteralShorthandProperties: true
-    spread: true
-    templateStrings: true
-    experimentalObjectRestSpread: true
+parserOptions:
+    sourceType: module
+    ecmaFeatures:
+        arrowFunctions: true
+        blockBindings: true
+        classes: true
+        defaultParams: true
+        destructuring: true
+        module: true
+        objectLiteralComputedProperties: true
+        objectLiteralShorthandMethods: true
+        objectLiteralShorthandProperties: true
+        spread: true
+        templateStrings: true
+        experimentalObjectRestSpread: true
 
 globals:
     _: true
@@ -29,10 +30,6 @@ globals:
     window: true
     global: true
     angular: true
-    $generatorCommon: true
-    $generatorSpring: true
-    $generatorJava: true
-    $generatorOptional: true
     saveAs: true
     process: true
     require: true
@@ -63,7 +60,7 @@ rules:
     guard-for-in: 1
     handle-callback-err: 0
     id-length: [2, {"min": 1, "max": 60}]
-    indent: [2, 4, {"SwitchCase": 1}]
+    indent: [2, 4, {"SwitchCase": 1, "MemberExpression": "off", "CallExpression": {"arguments": "off"}}]
     key-spacing: [2, { "beforeColon": false, "afterColon": true }]
     lines-around-comment: 0
     linebreak-style: [0, "unix"]
@@ -138,7 +135,7 @@ rules:
     no-path-concat: 0
     no-plusplus: 0
     no-process-env: 0
-    no-process-exit: 1
+    no-process-exit: 0
     no-proto: 2
     no-redeclare: 2
     no-regex-spaces: 1
@@ -198,6 +195,3 @@ rules:
     wrap-regex: 0
     yoda: [2, "never"]
     babel/semi: 2
-
-parserOptions:
-    sourceType: module

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/app.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/app.js b/modules/web-console/frontend/app/app.js
index 0667e8f..e2d609a 100644
--- a/modules/web-console/frontend/app/app.js
+++ b/modules/web-console/frontend/app/app.js
@@ -133,8 +133,7 @@ import IgniteModules from 'IgniteModules/index';
 
 import baseTemplate from 'views/base.pug';
 
-angular
-.module('ignite-console', [
+angular.module('ignite-console', [
     // Optional AngularJS modules.
     'ngAnimate',
     'ngSanitize',
@@ -143,6 +142,7 @@ angular
     'btford.socket-io',
     'mgcrea.ngStrap',
     'ui.router',
+    'ui.router.state.events',
     'gridster',
     'dndLists',
     'nvd3',
@@ -278,33 +278,32 @@ angular
     $urlRouterProvider.otherwise('/404');
     $locationProvider.html5Mode(true);
 }])
-.run(['$rootScope', '$state', 'MetaTags', 'gettingStarted', ($root, $state, $meta, gettingStarted) => {
+.run(['$rootScope', '$state', 'gettingStarted', ($root, $state, gettingStarted) => {
     $root._ = _;
     $root.$state = $state;
-    $root.$meta = $meta;
     $root.gettingStarted = gettingStarted;
 }])
 .run(['$rootScope', 'AgentManager', ($root, agentMgr) => {
     $root.$on('user', () => agentMgr.connect());
 }])
-.run(['$rootScope', ($root) => {
-    $root.$on('$stateChangeStart', () => {
+.run(['$transitions', ($transitions) => {
+    $transitions.onStart({ }, () => {
         _.forEach(angular.element('.modal'), (m) => angular.element(m).scope().$hide());
     });
 
-    if (!$root.IgniteDemoMode) {
-        $root.$on('$stateChangeSuccess', (event, {name, unsaved}, params) => {
-            try {
-                if (unsaved)
-                    localStorage.removeItem('lastStateChangeSuccess');
-                else
-                    localStorage.setItem('lastStateChangeSuccess', JSON.stringify({name, params}));
-            }
-            catch (ignored) {
-                // No-op.
-            }
-        });
-    }
+    $transitions.onSuccess({ }, (trans) => {
+        try {
+            const {name, params, unsaved} = trans.$to();
+
+            if (unsaved)
+                localStorage.removeItem('lastStateChangeSuccess');
+            else
+                localStorage.setItem('lastStateChangeSuccess', JSON.stringify({name, params}));
+        }
+        catch (ignored) {
+            // No-op.
+        }
+    });
 }])
 .run(['$rootScope', '$http', '$state', 'IgniteMessages', 'User', 'IgniteNotebookData',
     ($root, $http, $state, Messages, User, Notebook) => { // eslint-disable-line no-shadow

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/components/activities-user-dialog/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/activities-user-dialog/index.js b/modules/web-console/frontend/app/components/activities-user-dialog/index.js
index 02c7c1e..13c1d95 100644
--- a/modules/web-console/frontend/app/components/activities-user-dialog/index.js
+++ b/modules/web-console/frontend/app/components/activities-user-dialog/index.js
@@ -15,20 +15,20 @@
  * limitations under the License.
  */
 
- import controller from './activities-user-dialog.controller';
- import templateUrl from './activities-user-dialog.tpl.pug';
+import controller from './activities-user-dialog.controller';
+import templateUrl from './activities-user-dialog.tpl.pug';
 
- export default ['$modal', ($modal) => ({ show = true, user }) => {
-     const ActivitiesUserDialog = $modal({
-         templateUrl,
-         show,
-         resolve: {
-             user: () => user
-         },
-         controller,
-         controllerAs: 'ctrl'
-     });
+export default ['$modal', ($modal) => ({ show = true, user }) => {
+    const ActivitiesUserDialog = $modal({
+        templateUrl,
+        show,
+        resolve: {
+            user: () => user
+        },
+        controller,
+        controllerAs: 'ctrl'
+    });
 
-     return ActivitiesUserDialog.$promise
+    return ActivitiesUserDialog.$promise
          .then(() => ActivitiesUserDialog);
- }];
+}];

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/components/page-configure-advanced/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/controller.js b/modules/web-console/frontend/app/components/page-configure-advanced/controller.js
index 0e73ae3..da20527 100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/controller.js
@@ -16,7 +16,7 @@
  */
 
 export default class PageConfigureAdvancedController {
-    static $inject = ['PageConfigureAdvanced', '$scope'];
+    static $inject = ['$scope'];
 
     static menuItems = [
         { text: 'Clusters', sref: 'base.configuration.tabs.advanced.clusters' },
@@ -26,14 +26,11 @@ export default class PageConfigureAdvancedController {
         { text: 'Summary', sref: 'base.configuration.tabs.advanced.summary' }
     ];
 
-    constructor(PageConfigureAdvanced, $scope) {
-        Object.assign(this, {PageConfigureAdvanced, $scope});
+    constructor($scope) {
+        Object.assign(this, {$scope});
     }
 
     $onInit() {
         this.menuItems = this.constructor.menuItems;
-        this.$scope.$on('$stateChangeSuccess', (e, toState) => {
-            this.PageConfigureAdvanced.onStateEnterRedirect(toState);
-        });
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/components/page-configure-basic/service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-basic/service.js b/modules/web-console/frontend/app/components/page-configure-basic/service.js
index 4db61ea..0032106 100644
--- a/modules/web-console/frontend/app/components/page-configure-basic/service.js
+++ b/modules/web-console/frontend/app/components/page-configure-basic/service.js
@@ -50,7 +50,7 @@ export default class PageConfigureBasic {
         const noFakeIDCaches = caches.map(stripFakeID);
         cluster = cloneDeep(stripFakeID(cluster));
         return this.$q.all(noFakeIDCaches.map((cache) => (
-                this.caches.saveCache(cache)
+            this.caches.saveCache(cache)
                 .then(
                     ({data}) => data,
                     (e) => {
@@ -58,7 +58,7 @@ export default class PageConfigureBasic {
                         return this.$q.resolve(null);
                     }
                 )
-            )))
+        )))
         .then((cacheIDs) => {
             // Make sure we don't loose new IDs even if some requests fail
             this.pageConfigure.upsertCaches(
@@ -115,8 +115,8 @@ export default class PageConfigureBasic {
     setCluster(_id) {
         this.ConfigureState.dispatchAction(
             isNewItem({_id})
-            ? {type: SET_CLUSTER, _id, cluster: this.clusters.getBlankCluster()}
-            : {type: SET_CLUSTER, _id}
+                ? {type: SET_CLUSTER, _id, cluster: this.clusters.getBlankCluster()}
+                : {type: SET_CLUSTER, _id}
         );
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/components/page-configure/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/controller.js b/modules/web-console/frontend/app/components/page-configure/controller.js
index 3dcd14e..5ead0bb 100644
--- a/modules/web-console/frontend/app/components/page-configure/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure/controller.js
@@ -16,15 +16,9 @@
  */
 
 export default class PageConfigureController {
-    static $inject = ['$scope', 'PageConfigure'];
+    static $inject = ['$scope'];
 
-    constructor($scope, PageConfigure) {
-        Object.assign(this, {$scope, PageConfigure});
-    }
-
-    $onInit() {
-        this.$scope.$on('$stateChangeSuccess', (e, toState) => {
-            this.PageConfigure.onStateEnterRedirect(toState);
-        });
+    constructor($scope) {
+        Object.assign(this, {$scope});
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/components/page-configure/controller.spec.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/controller.spec.js b/modules/web-console/frontend/app/components/page-configure/controller.spec.js
deleted file mode 100644
index e30eb65..0000000
--- a/modules/web-console/frontend/app/components/page-configure/controller.spec.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import {suite, test} from 'mocha';
-import {assert} from 'chai';
-import {spy} from 'sinon';
-
-import Controller from './controller';
-
-const mocks = () => new Map([
-    ['$scope', {
-        $on: spy()
-    }],
-    ['PageConfigure', {
-        onStateEnterRedirect: spy()
-    }]
-]);
-
-suite('page-configure component controller', () => {
-    test('State change success redirect', () => {
-        const c = new Controller(...mocks().values());
-        c.$onInit();
-        c.$scope.$on.getCall(0).args[1](null, {name: 'base.items'});
-        assert.isOk(
-            c.PageConfigure.onStateEnterRedirect.calledOnce,
-            'calls PageConfigure.onStateEnterRedirect every $stateChangeSuccess'
-        );
-        assert.deepEqual(
-            c.PageConfigure.onStateEnterRedirect.getCall(0).args,
-            [{name: 'base.items'}],
-            'calls PageConfigure.onStateEnterRedirect with correct arguments'
-        );
-    });
-});

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.js b/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.js
index a712aca..34a292a 100644
--- a/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.js
+++ b/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.js
@@ -31,15 +31,17 @@ export default class PageConfigure {
     }
 
     onStateEnterRedirect(toState) {
-        if (toState.name !== 'base.configuration.tabs') return this.$q.resolve();
+        if (toState.name !== 'base.configuration.tabs')
+            return this.$q.resolve();
+
         return this.configuration.read()
-        .then((data) => {
-            this.loadList(data);
-            const nextState = data.clusters.length
-                ? 'base.configuration.tabs.advanced'
-                : 'base.configuration.tabs.basic';
-            return this.$state.go(nextState, null, {location: 'replace'});
-        });
+            .then((data) => {
+                this.loadList(data);
+
+                return this.$q.resolve(data.clusters.length
+                    ? 'base.configuration.tabs.advanced'
+                    : 'base.configuration.tabs.basic');
+            });
     }
 
     loadList(list) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/components/web-console-header/component.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/component.js b/modules/web-console/frontend/app/components/web-console-header/component.js
index d4c5c4b..66f09e9 100644
--- a/modules/web-console/frontend/app/components/web-console-header/component.js
+++ b/modules/web-console/frontend/app/components/web-console-header/component.js
@@ -33,11 +33,15 @@ export default {
             Object.assign(this, {$rootScope, $scope, $state, branding, UserNotifications});
         }
 
+        setWebAgentDownloadVisible() {
+            this.isWebAgentDownloadVisible =
+                this.constructor.webAgentDownloadVisibleStates.some((state) => this.$state.includes(state));
+        }
+
         $onInit() {
-            this.$scope.$on('$stateChangeSuccess', () => {
-                this.isWebAgentDownloadVisible =
-                    this.constructor.webAgentDownloadVisibleStates.some((state) => this.$state.includes(state));
-            });
+            this.setWebAgentDownloadVisible();
+
+            this.$scope.$on('$stateChangeSuccess', () => this.setWebAgentDownloadVisible());
         }
     },
     transclude: {

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/components/web-console-header/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/index.js b/modules/web-console/frontend/app/components/web-console-header/index.js
index 36caa3d..e41e1cc 100644
--- a/modules/web-console/frontend/app/components/web-console-header/index.js
+++ b/modules/web-console/frontend/app/components/web-console-header/index.js
@@ -19,5 +19,5 @@ import angular from 'angular';
 import component from './component';
 
 export default angular
-	.module('ignite-console.web-console-header', [])
-	.component('webConsoleHeader', component);
+    .module('ignite-console.web-console-header', [])
+    .component('webConsoleHeader', component);

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/ace.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/ace.module.js b/modules/web-console/frontend/app/modules/ace.module.js
index 4920a6f..a28536a 100644
--- a/modules/web-console/frontend/app/modules/ace.module.js
+++ b/modules/web-console/frontend/app/modules/ace.module.js
@@ -184,10 +184,10 @@ angular
                     return (e) => {
                         const newValue = session.getValue();
 
+                        // HACK make sure to only trigger the apply outside of the
+                        // digest loop 'cause ACE is actually using this callback
+                        // for any text transformation !
                         if (ngModel && newValue !== ngModel.$viewValue &&
-                                // HACK make sure to only trigger the apply outside of the
-                                // digest loop 'cause ACE is actually using this callback
-                                // for any text transformation !
                             !scope.$$phase && !scope.$root.$$phase)
                             scope.$eval(() => ngModel.$setViewValue(newValue));
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/branding/branding.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/branding/branding.module.js b/modules/web-console/frontend/app/modules/branding/branding.module.js
index cae7c91..9c4a5e5 100644
--- a/modules/web-console/frontend/app/modules/branding/branding.module.js
+++ b/modules/web-console/frontend/app/modules/branding/branding.module.js
@@ -28,14 +28,18 @@ import ignitePoweredByApache from './powered-by-apache.directive';
 
 angular
 .module('ignite-console.branding', [
-    'ui.router.metatags'
+    'tf.metatags'
 ])
 .provider(...IgniteBranding)
-.config(['UIRouterMetatagsProvider', (UIRouterMetatagsProvider) => {
-    UIRouterMetatagsProvider
-        .setDefaultTitle('Apache Ignite - Management Tool and Configuration Wizard')
-        .setTitleSuffix(' – Apache Ignite Web Console')
-        .setDefaultDescription('The Apache Ignite Web Console is an interactive management tool and configuration wizard which walks you through the creation of config files. Try it now.');
+.config(['tfMetaTagsProvider', (tfMetaTagsProvider) => {
+    tfMetaTagsProvider.setDefaults({
+        title: 'Apache Ignite - Management Tool and Configuration Wizard',
+        properties: {
+            description: 'The Apache Ignite Web Console is an interactive management tool and configuration wizard which walks you through the creation of config files. Try it now.'
+        }
+    });
+
+    tfMetaTagsProvider.setTitleSuffix(' – Apache Ignite Web Console');
 }])
 .directive(...ignitePoweredByApache)
 .directive(...igniteHeaderLogo)

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
index 8299b9b..a14bfd3 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
@@ -887,7 +887,7 @@ export default class IgniteConfigurationGenerator {
             cfg.intProperty('peerClassLoadingMissedResourcesCacheSize')
                 .intProperty('peerClassLoadingThreadPoolSize')
                 .varArgProperty('p2pLocClsPathExcl', 'peerClassLoadingLocalClassPathExclude',
-                   cluster.peerClassLoadingLocalClassPathExclude);
+                    cluster.peerClassLoadingLocalClassPathExclude);
         }
 
         // Since ignite 2.0

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js b/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
index b076193..234c7ec 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
@@ -168,7 +168,7 @@ export default ['JavaTypes', 'igniteClusterPlatformDefaults', 'igniteCachePlatfo
                 .intProperty('unacknowledgedMessagesBufferSize')
                 // .intProperty('socketWriteTimeout')
                 .intProperty('selectorsCount');
-                // .emptyBeanProperty('addressResolver');
+            // .emptyBeanProperty('addressResolver');
 
             if (commSpi.nonEmpty())
                 cfg.beanProperty('CommunicationSpi', commSpi);
@@ -176,7 +176,7 @@ export default ['JavaTypes', 'igniteClusterPlatformDefaults', 'igniteCachePlatfo
             cfg.intProperty('networkTimeout', 'NetworkTimeout')
                 .intProperty('networkSendRetryDelay')
                 .intProperty('networkSendRetryCount');
-                // .intProperty('discoveryStartupDelay');
+            // .intProperty('discoveryStartupDelay');
 
             return cfg;
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/demo/Demo.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/demo/Demo.module.js b/modules/web-console/frontend/app/modules/demo/Demo.module.js
index d75beda..2445461 100644
--- a/modules/web-console/frontend/app/modules/demo/Demo.module.js
+++ b/modules/web-console/frontend/app/modules/demo/Demo.module.js
@@ -24,7 +24,7 @@ angular
 .module('ignite-console.demo', [
     'ignite-console.socket'
 ])
-.config(['$stateProvider', 'AclRouteProvider', ($stateProvider, AclRoute) => {
+.config(['$stateProvider', ($stateProvider) => {
     $stateProvider
         .state('demo', {
             abstract: true,
@@ -33,17 +33,17 @@ angular
         })
         .state('demo.resume', {
             url: '/resume',
-            onEnter: AclRoute.checkAccess('demo'),
+            permission: 'demo',
             controller: ['$state', ($state) => {
                 $state.go('base.configuration.tabs.advanced.clusters');
             }],
-            metaTags: {
+            tfMetaTags: {
                 title: 'Demo resume'
             }
         })
         .state('demo.reset', {
             url: '/reset',
-            onEnter: AclRoute.checkAccess('demo'),
+            permission: 'demo',
             controller: ['$state', '$http', 'IgniteMessages', ($state, $http, Messages) => {
                 $http.post('/api/v1/demo/reset')
                     .then(() => $state.go('base.configuration.tabs.advanced.clusters'))
@@ -53,7 +53,7 @@ angular
                         Messages.showError(res);
                     });
             }],
-            metaTags: {
+            tfMetaTags: {
                 title: 'Demo reset'
             }
         });

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/dialog/dialog.controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/dialog/dialog.controller.js b/modules/web-console/frontend/app/modules/dialog/dialog.controller.js
index 05518d3..0256b84 100644
--- a/modules/web-console/frontend/app/modules/dialog/dialog.controller.js
+++ b/modules/web-console/frontend/app/modules/dialog/dialog.controller.js
@@ -33,8 +33,4 @@ export default ['$rootScope', '$scope', 'IgniteDialog', function($root, $scope,
     $scope.$watch(() => ctrl.content, () => {
         $scope.content = ctrl.content;
     });
-
-    $root.$on('$stateChangeStart', () => {
-        dialog.hide();
-    });
 }];

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/form/field/label.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/field/label.directive.js b/modules/web-console/frontend/app/modules/form/field/label.directive.js
index 97ba598..94f7889 100644
--- a/modules/web-console/frontend/app/modules/form/field/label.directive.js
+++ b/modules/web-console/frontend/app/modules/form/field/label.directive.js
@@ -20,7 +20,7 @@ export default ['igniteFormFieldLabel', [() => {
         restrict: 'E',
         compile() {
             return {
-                post($scope, $element, $attrs, [form, field], $transclude) {
+                post($scope, $element, $attrs, [field], $transclude) {
                     $transclude($scope, function(clone) {
                         const text = clone.text();
 
@@ -42,6 +42,6 @@ export default ['igniteFormFieldLabel', [() => {
         },
         replace: true,
         transclude: true,
-        require: ['^form', '?^igniteFormField']
+        require: ['?^igniteFormField']
     };
 }]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/form/field/tooltip.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/field/tooltip.directive.js b/modules/web-console/frontend/app/modules/form/field/tooltip.directive.js
index 4f440a1..9e764bc 100644
--- a/modules/web-console/frontend/app/modules/form/field/tooltip.directive.js
+++ b/modules/web-console/frontend/app/modules/form/field/tooltip.directive.js
@@ -18,7 +18,7 @@
 const template = '<i class="tipField icon-help"></i>';
 
 export default ['igniteFormFieldTooltip', ['$tooltip', ($tooltip) => {
-    const link = ($scope, $element, $attrs, [form, field], $transclude) => {
+    const link = ($scope, $element, $attrs, [field], $transclude) => {
         const content = Array.prototype.slice
             .apply($transclude($scope))
             .reduce((html, el) => html += el.outerHTML || el.textContent || el, '');
@@ -44,6 +44,6 @@ export default ['igniteFormFieldTooltip', ['$tooltip', ($tooltip) => {
         link,
         replace: true,
         transclude: true,
-        require: ['^form', '?^igniteFormField']
+        require: ['?^igniteFormField']
     };
 }]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/sql/sql.controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/sql/sql.controller.js b/modules/web-console/frontend/app/modules/sql/sql.controller.js
index 633f167..3d38634 100644
--- a/modules/web-console/frontend/app/modules/sql/sql.controller.js
+++ b/modules/web-console/frontend/app/modules/sql/sql.controller.js
@@ -1247,7 +1247,7 @@ export default ['$rootScope', '$scope', '$http', '$q', '$timeout', '$interval',
 
             const chartHistory = paragraph.chartHistory;
 
-                // Clear history on query change.
+            // Clear history on query change.
             if (clearChart) {
                 chartHistory.length = 0;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/sql/sql.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/sql/sql.module.js b/modules/web-console/frontend/app/modules/sql/sql.module.js
index 79614c2..da9955c 100644
--- a/modules/web-console/frontend/app/modules/sql/sql.module.js
+++ b/modules/web-console/frontend/app/modules/sql/sql.module.js
@@ -27,37 +27,35 @@ import sqlTplUrl from 'app/../views/sql/sql.tpl.pug';
 angular.module('ignite-console.sql', [
     'ui.router'
 ])
-    .config(['$stateProvider', 'AclRouteProvider',
-        ($stateProvider, AclRoute) => {
-            // set up the states
-            $stateProvider
-                .state('base.sql', {
-                    url: '/queries',
-                    abstract: true,
-                    template: '<ui-view></ui-view>'
-                })
-                .state('base.sql.notebook', {
-                    url: '/notebook/{noteId}',
-                    templateUrl: sqlTplUrl,
-                    onEnter: AclRoute.checkAccess('query'),
-                    metaTags: {
-                        title: 'Query notebook'
-                    },
-                    controller,
-                    controllerAs: '$ctrl'
-                })
-                .state('base.sql.demo', {
-                    url: '/demo',
-                    templateUrl: sqlTplUrl,
-                    onEnter: AclRoute.checkAccess('query'),
-                    metaTags: {
-                        title: 'SQL demo'
-                    },
-                    controller,
-                    controllerAs: '$ctrl'
-                });
-        }]
-    )
-    .service('IgniteNotebookData', NotebookData)
-    .service('IgniteNotebook', Notebook)
-    .controller('notebookController', notebook);
+.config(['$stateProvider', ($stateProvider) => {
+    // set up the states
+    $stateProvider
+        .state('base.sql', {
+            url: '/queries',
+            abstract: true,
+            template: '<ui-view></ui-view>'
+        })
+        .state('base.sql.notebook', {
+            url: '/notebook/{noteId}',
+            templateUrl: sqlTplUrl,
+            permission: 'query',
+            tfMetaTags: {
+                title: 'Query notebook'
+            },
+            controller,
+            controllerAs: '$ctrl'
+        })
+        .state('base.sql.demo', {
+            url: '/demo',
+            templateUrl: sqlTplUrl,
+            permission: 'query',
+            tfMetaTags: {
+                title: 'SQL demo'
+            },
+            controller,
+            controllerAs: '$ctrl'
+        });
+}])
+.service('IgniteNotebookData', NotebookData)
+.service('IgniteNotebook', Notebook)
+.controller('notebookController', notebook);

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/states/admin.state.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/admin.state.js b/modules/web-console/frontend/app/modules/states/admin.state.js
index 7189508..65e13aa 100644
--- a/modules/web-console/frontend/app/modules/states/admin.state.js
+++ b/modules/web-console/frontend/app/modules/states/admin.state.js
@@ -24,7 +24,7 @@ angular
 .module('ignite-console.states.admin', [
     'ui.router'
 ])
-.config(['$stateProvider', 'AclRouteProvider', function($stateProvider, AclRoute) {
+.config(['$stateProvider', function($stateProvider) {
     // set up the states
     $stateProvider
     .state('base.settings.admin', {
@@ -50,8 +50,8 @@ angular
             }
         },
         // templateUrl,
-        onEnter: AclRoute.checkAccess('admin_page'),
-        metaTags: {
+        permission: 'admin_page',
+        tfMetaTags: {
             title: 'Admin panel'
         }
     });

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/states/configuration.state.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration.state.js b/modules/web-console/frontend/app/modules/states/configuration.state.js
index faf9315..d2c1410 100644
--- a/modules/web-console/frontend/app/modules/states/configuration.state.js
+++ b/modules/web-console/frontend/app/modules/states/configuration.state.js
@@ -51,7 +51,7 @@ angular.module('ignite-console.states.configuration', ['ui.router'])
         $templateCache.put('summary-tabs.html', summaryTabsTemplateUrl);
     }])
     // Configure state provider.
-    .config(['$stateProvider', 'AclRouteProvider', ($stateProvider, AclRoute) => {
+    .config(['$stateProvider', ($stateProvider) => {
         // Setup the states.
         $stateProvider
             .state('base.configuration', {
@@ -64,15 +64,21 @@ angular.module('ignite-console.states.configuration', ['ui.router'])
             })
             .state('base.configuration.tabs', {
                 url: '/configuration',
+                permission: 'configuration',
                 template: '<page-configure></page-configure>',
-                metaTags: {
+                redirectTo: (trans) => {
+                    const PageConfigure = trans.injector().get('PageConfigure');
+
+                    return PageConfigure.onStateEnterRedirect(trans.to());
+                },
+                tfMetaTags: {
                     title: 'Configuration'
                 }
             })
             .state('base.configuration.tabs.basic', {
                 url: '/basic',
                 template: '<page-configure-basic></page-configure-basic>',
-                metaTags: {
+                tfMetaTags: {
                     title: 'Basic Configuration'
                 },
                 resolve: {
@@ -88,13 +94,14 @@ angular.module('ignite-console.states.configuration', ['ui.router'])
             })
             .state('base.configuration.tabs.advanced', {
                 url: '/advanced',
-                template: '<page-configure-advanced></page-configure-advanced>'
+                template: '<page-configure-advanced></page-configure-advanced>',
+                redirectTo: 'base.configuration.tabs.advanced.clusters'
             })
             .state('base.configuration.tabs.advanced.clusters', {
                 url: '/clusters',
                 templateUrl: clustersTpl,
-                onEnter: AclRoute.checkAccess('configuration'),
-                metaTags: {
+                permission: 'configuration',
+                tfMetaTags: {
                     title: 'Configure Clusters'
                 },
                 controller: clustersCtrl,
@@ -103,8 +110,8 @@ angular.module('ignite-console.states.configuration', ['ui.router'])
             .state('base.configuration.tabs.advanced.caches', {
                 url: '/caches',
                 templateUrl: cachesTpl,
-                onEnter: AclRoute.checkAccess('configuration'),
-                metaTags: {
+                permission: 'configuration',
+                tfMetaTags: {
                     title: 'Configure Caches'
                 },
                 controller: cachesCtrl,
@@ -113,8 +120,8 @@ angular.module('ignite-console.states.configuration', ['ui.router'])
             .state('base.configuration.tabs.advanced.domains', {
                 url: '/domains',
                 templateUrl: domainsTpl,
-                onEnter: AclRoute.checkAccess('configuration'),
-                metaTags: {
+                permission: 'configuration',
+                tfMetaTags: {
                     title: 'Configure Domain Model'
                 },
                 controller: domainsCtrl,
@@ -123,8 +130,8 @@ angular.module('ignite-console.states.configuration', ['ui.router'])
             .state('base.configuration.tabs.advanced.igfs', {
                 url: '/igfs',
                 templateUrl: igfsTpl,
-                onEnter: AclRoute.checkAccess('configuration'),
-                metaTags: {
+                permission: 'configuration',
+                tfMetaTags: {
                     title: 'Configure IGFS'
                 },
                 controller: igfsCtrl,
@@ -133,10 +140,10 @@ angular.module('ignite-console.states.configuration', ['ui.router'])
             .state('base.configuration.tabs.advanced.summary', {
                 url: '/summary',
                 templateUrl: summaryTpl,
-                onEnter: AclRoute.checkAccess('configuration'),
+                permission: 'configuration',
                 controller: ConfigurationSummaryCtrl,
                 controllerAs: 'ctrl',
-                metaTags: {
+                tfMetaTags: {
                     title: 'Configurations Summary'
                 }
             });

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/states/configuration/summary/summary-zipper.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/summary/summary-zipper.service.js b/modules/web-console/frontend/app/modules/states/configuration/summary/summary-zipper.service.js
index 0259d39..47ce9ad 100644
--- a/modules/web-console/frontend/app/modules/states/configuration/summary/summary-zipper.service.js
+++ b/modules/web-console/frontend/app/modules/states/configuration/summary/summary-zipper.service.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import Worker from 'worker?inline=true!./summary.worker';
+import Worker from 'worker!./summary.worker';
 
 export default ['$q', function($q) {
     return function(message) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/states/errors.state.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/errors.state.js b/modules/web-console/frontend/app/modules/states/errors.state.js
index e3d4d41..3cc03be 100644
--- a/modules/web-console/frontend/app/modules/states/errors.state.js
+++ b/modules/web-console/frontend/app/modules/states/errors.state.js
@@ -29,7 +29,7 @@ angular
             .state('404', {
                 url: '/404',
                 templateUrl: templateNotFoundPage,
-                metaTags: {
+                tfMetaTags: {
                     title: 'Page not found'
                 },
                 unsaved: true
@@ -37,7 +37,7 @@ angular
             .state('403', {
                 url: '/403',
                 templateUrl: templateNotAuthorizedPage,
-                metaTags: {
+                tfMetaTags: {
                     title: 'Not authorized'
                 },
                 unsaved: true

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/states/logout.state.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/logout.state.js b/modules/web-console/frontend/app/modules/states/logout.state.js
index 42795ea..9f9c7c6 100644
--- a/modules/web-console/frontend/app/modules/states/logout.state.js
+++ b/modules/web-console/frontend/app/modules/states/logout.state.js
@@ -17,18 +17,16 @@
 
 import angular from 'angular';
 
-angular
-.module('ignite-console.states.logout', [
+angular.module('ignite-console.states.logout', [
     'ui.router'
 ])
-.config(['$stateProvider', 'AclRouteProvider', function($stateProvider, AclRoute) {
+.config(['$stateProvider', function($stateProvider) {
     // set up the states
-    $stateProvider
-    .state('logout', {
+    $stateProvider.state('logout', {
         url: '/logout',
-        onEnter: AclRoute.checkAccess('logout'),
+        permission: 'logout',
         controller: ['Auth', (Auth) => Auth.logout()],
-        metaTags: {
+        tfMetaTags: {
             title: 'Logout'
         }
     });

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/states/password.state.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/password.state.js b/modules/web-console/frontend/app/modules/states/password.state.js
index 587f83d..8e326bf 100644
--- a/modules/web-console/frontend/app/modules/states/password.state.js
+++ b/modules/web-console/frontend/app/modules/states/password.state.js
@@ -34,14 +34,14 @@ angular
     .state('password.reset', {
         url: '/reset?{token}',
         templateUrl,
-        metaTags: {
+        tfMetaTags: {
             title: 'Reset password'
         }
     })
     .state('password.send', {
         url: '/send',
         templateUrl,
-        metaTags: {
+        tfMetaTags: {
             title: 'Password Send'
         }
     });

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/states/profile.state.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/profile.state.js b/modules/web-console/frontend/app/modules/states/profile.state.js
index 3298bdc..87d1d02 100644
--- a/modules/web-console/frontend/app/modules/states/profile.state.js
+++ b/modules/web-console/frontend/app/modules/states/profile.state.js
@@ -23,14 +23,13 @@ angular
 .module('ignite-console.states.profile', [
     'ui.router'
 ])
-.config(['$stateProvider', 'AclRouteProvider', function($stateProvider, AclRoute) {
+.config(['$stateProvider', 'AclRouteProvider', function($stateProvider) {
     // set up the states
-    $stateProvider
-    .state('base.settings.profile', {
+    $stateProvider.state('base.settings.profile', {
         url: '/profile',
         templateUrl,
-        onEnter: AclRoute.checkAccess('profile'),
-        metaTags: {
+        permission: 'profile',
+        tfMetaTags: {
             title: 'User profile'
         }
     });

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/states/signin.state.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/signin.state.js b/modules/web-console/frontend/app/modules/states/signin.state.js
index b7be51d..f5a4964 100644
--- a/modules/web-console/frontend/app/modules/states/signin.state.js
+++ b/modules/web-console/frontend/app/modules/states/signin.state.js
@@ -24,30 +24,26 @@ angular
     // services
     'ignite-console.user'
 ])
-.config(['$stateProvider', 'AclRouteProvider', function($stateProvider) {
+.config(['$stateProvider', function($stateProvider) {
     // set up the states
     $stateProvider
     .state('signin', {
         url: '/',
         templateUrl,
-        resolve: {
-            user: ['$state', 'User', ($state, User) => {
-                return User.read()
-                    .then(() => {
-                        try {
-                            const {name, params} = JSON.parse(localStorage.getItem('lastStateChangeSuccess'));
+        redirectTo: (trans) => {
+            return trans.injector().get('User').read()
+                .then(() => {
+                    try {
+                        const {name, params} = JSON.parse(localStorage.getItem('lastStateChangeSuccess'));
 
-                            $state.go(name, params);
-                        } catch (ignored) {
-                            $state.go('base.configuration.tabs');
-                        }
-                    })
-                    .catch(() => {});
-            }]
-        },
-        controllerAs: '$ctrl',
-        controller() {},
-        metaTags: {
+                        const restored = trans.router.stateService.target(name, params);
+
+                        return restored.valid() ? restored : 'base.configuration.tabs';
+                    } catch (ignored) {
+                        return 'base.configuration.tabs';
+                    }
+                })
+                .catch(() => true);
         }
     });
 }]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/user/AclRoute.provider.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/user/AclRoute.provider.js b/modules/web-console/frontend/app/modules/user/AclRoute.provider.js
index 4225bc4..f5556ff 100644
--- a/modules/web-console/frontend/app/modules/user/AclRoute.provider.js
+++ b/modules/web-console/frontend/app/modules/user/AclRoute.provider.js
@@ -17,11 +17,9 @@
 
 export default [() => {
     class AclRoute {
-        static checkAccess(permissions, failState) {
-            failState = failState || '403';
-
+        static checkAccess(permissions, failState = '403') {
             return ['$q', '$state', 'AclService', 'User', 'IgniteActivitiesData', function($q, $state, AclService, User, Activities) {
-                const action = this.name ? $state.href(this.name) : null;
+                const action = '';
 
                 return User.read()
                     .catch(() => {

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/modules/user/user.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/user/user.module.js b/modules/web-console/frontend/app/modules/user/user.module.js
index b86a62e..721d07f 100644
--- a/modules/web-console/frontend/app/modules/user/user.module.js
+++ b/modules/web-console/frontend/app/modules/user/user.module.js
@@ -50,7 +50,7 @@ angular.module('ignite-console.user', [
 .service(...Auth)
 .service(...User)
 .provider('AclRoute', AclRouteProvider)
-.run(['$rootScope', 'AclService', ($root, AclService) => {
+.run(['$rootScope', '$transitions', 'AclService', 'User', 'IgniteActivitiesData', ($root, $transitions, AclService, User, Activities) => {
     AclService.setAbilities(aclData);
     AclService.attachRole('guest');
 
@@ -70,4 +70,32 @@ angular.module('ignite-console.user', [
 
         AclService.attachRole(role);
     });
+
+    $transitions.onBefore({}, (t) => {
+        const $state = t.router.stateService;
+        const {name, permission} = t.to();
+
+        return User.read()
+            .catch(() => {
+                User.clean();
+
+                if (name !== 'signin')
+                    return $state.target('signin');
+
+                return true;
+            })
+            .then(() => {
+                if (_.isEmpty(permission))
+                    return true;
+
+                if (AclService.can(permission)) {
+                    Activities.post({action: $state.href(name, t.params('to'))});
+
+                    return true;
+                }
+
+                return $state.target(t.to().failState || '403');
+            });
+
+    });
 }]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/services/CopyToClipboard.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/CopyToClipboard.service.js b/modules/web-console/frontend/app/services/CopyToClipboard.service.js
index 74c4764..df0bb8a 100644
--- a/modules/web-console/frontend/app/services/CopyToClipboard.service.js
+++ b/modules/web-console/frontend/app/services/CopyToClipboard.service.js
@@ -38,10 +38,10 @@ export default ['IgniteCopyToClipboard', ['$window', 'IgniteMessages', ($window,
                 if (document.execCommand('copy'))
                     Messages.showInfo('Value copied to clipboard');
                 else
-                    window.prompt('Copy to clipboard: Ctrl+C, Enter', toCopy);  // eslint-disable-line no-alert
+                    window.prompt('Copy to clipboard: Ctrl+C, Enter', toCopy); // eslint-disable-line no-alert
             }
             catch (err) {
-                window.prompt('Copy to clipboard: Ctrl+C, Enter', toCopy);  // eslint-disable-line no-alert
+                window.prompt('Copy to clipboard: Ctrl+C, Enter', toCopy); // eslint-disable-line no-alert
             }
 
             textArea.remove();

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/services/LegacyTable.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/LegacyTable.service.js b/modules/web-console/frontend/app/services/LegacyTable.service.js
index a024a3b..ab95164 100644
--- a/modules/web-console/frontend/app/services/LegacyTable.service.js
+++ b/modules/web-console/frontend/app/services/LegacyTable.service.js
@@ -25,7 +25,7 @@ export default ['IgniteLegacyTable',
                 return item;
 
             path = path.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
-            path = path.replace(/^\./, '');           // strip a leading dot
+            path = path.replace(/^\./, ''); // strip a leading dot
 
             const segs = path.split('.');
             let root = item;

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/app/vendor.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/vendor.js b/modules/web-console/frontend/app/vendor.js
index 3bbb322..ea0f63c 100644
--- a/modules/web-console/frontend/app/vendor.js
+++ b/modules/web-console/frontend/app/vendor.js
@@ -24,9 +24,12 @@ import 'angular-strap';
 import 'angular-strap/dist/angular-strap.tpl';
 import 'angular-socket-io';
 import 'angular-retina';
-import 'angular-ui-router';
+
+import '@uirouter/angularjs';
+import '@uirouter/angularjs/lib/legacy/stateEvents';
+
+import 'tf-metatags';
 import 'angular-translate';
-import 'ui-router-metatags/dist/ui-router-metatags';
 import 'angular-smart-table';
 import 'angular-ui-grid/ui-grid';
 import 'angular-drag-and-drop-lists';
@@ -49,6 +52,7 @@ import 'file-saver';
 import 'jszip';
 import 'nvd3';
 import 'lodash';
+
 import 'angular-gridster/dist/angular-gridster.min.css';
 import 'angular-tree-control/css/tree-control-attribute.css';
 import 'angular-tree-control/css/tree-control.css';

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/package.json
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/package.json b/modules/web-console/frontend/package.json
index 05c6eec..6b049ff 100644
--- a/modules/web-console/frontend/package.json
+++ b/modules/web-console/frontend/package.json
@@ -8,7 +8,7 @@
     "dev": "npm start",
     "build": "webpack --config ./webpack/webpack.prod.babel.js",
     "test": "karma start ./test/karma.conf.js",
-    "eslint": "eslint --format node_modules/eslint-friendly-formatter gulpfile.babel.js/ app/ controllers/ ignite_modules/ -- --eff-by-issue"
+    "eslint": "eslint --format node_modules/eslint-friendly-formatter app/ controllers/ ignite_modules/ -- --eff-by-issue"
   },
   "author": "",
   "contributors": [
@@ -45,13 +45,13 @@
     "angular-socket-io": "0.7.0",
     "angular-strap": "2.3.12",
     "angular-touch": "1.5.11",
-    "angular-translate": "2.15.1",
+    "angular-translate": "2.15.2",
     "angular-tree-control": "0.2.28",
-    "angular-ui-grid": "4.0.4",
-    "angular-ui-router": "0.4.2",
-    "babel-core": "6.24.1",
+    "angular-ui-grid": "4.0.6",
+    "@uirouter/angularjs": "1.0.5",
+    "babel-core": "6.25.0",
     "babel-eslint": "7.2.3",
-    "babel-loader": "7.0.0",
+    "babel-loader": "7.1.1",
     "babel-plugin-add-module-exports": "0.2.1",
     "babel-plugin-transform-runtime": "6.23.0",
     "babel-polyfill": "6.23.0",
@@ -61,45 +61,46 @@
     "bootstrap-sass": "3.3.7",
     "brace": "0.10.0",
     "copy-webpack-plugin": "4.0.1",
-    "css-loader": "0.28.3",
-    "eslint": "3.19.0",
+    "css-loader": "0.28.4",
+    "eslint": "4.3.0",
     "eslint-friendly-formatter": "3.0.0",
-    "eslint-loader": "1.7.1",
-    "eslint-plugin-babel": "^4.1.1",
+    "eslint-loader": "1.9.0",
+    "eslint-plugin-babel": "4.1.1",
     "expose-loader": "0.7.3",
-    "extract-text-webpack-plugin": "2.1.0",
-    "file-loader": "0.11.1",
+    "extract-text-webpack-plugin": "3.0.0",
+    "file-loader": "0.11.2",
     "file-saver": "1.3.3",
     "font-awesome": "4.7.0",
     "glob": "7.1.2",
     "html-loader": "0.4.5",
-    "html-webpack-plugin": "2.28.0",
+    "html-webpack-plugin": "2.29.0",
     "jquery": "3.2.1",
-    "json-loader": "0.5.4",
+    "json-loader": "0.5.7",
     "jszip": "3.1.3",
     "lodash": "4.17.4",
     "node-sass": "4.5.3",
     "nvd3": "1.8.4",
-    "progress-bar-webpack-plugin": "1.9.3",
+    "progress-bar-webpack-plugin": "1.10.0",
     "pug-html-loader": "1.1.0",
     "pug-loader": "2.3.0",
     "raleway-webfont": "3.0.1",
-    "resolve-url-loader": "2.0.2",
+    "resolve-url-loader": "2.1.0",
     "roboto-font": "0.1.0",
-    "rxjs": "5.4.0",
-    "sass-loader": "6.0.5",
+    "rxjs": "5.4.2",
+    "sass-loader": "6.0.6",
     "socket.io-client": "1.7.3",
-    "style-loader": "0.18.1",
-    "svg-sprite-loader": "^3.0.5",
-    "ui-router-metatags": "1.0.3",
-    "webpack": "2.6.1",
-    "webpack-dev-server": "2.4.5",
+    "style-loader": "0.18.2",
+    "svg-sprite-loader": "3.0.7",
+    "tf-metatags": "2.0.0",
+    "webpack": "3.3.0",
+    "webpack-dev-server": "2.6.1",
     "webpack-merge": "4.1.0",
-    "worker-loader": "0.8.0"
+    "worker-loader": "0.8.1"
   },
   "devDependencies": {
-    "chai": "4.0.2",
-    "jasmine-core": "2.6.2",
+    "chai": "4.1.0",
+    "type-detect": "4.0.3",
+    "jasmine-core": "2.6.4",
     "karma": "1.7.0",
     "karma-babel-preprocessor": "6.0.1",
     "karma-jasmine": "1.1.0",
@@ -107,10 +108,10 @@
     "karma-mocha-reporter": "2.2.3",
     "karma-phantomjs-launcher": "1.0.4",
     "karma-teamcity-reporter": "1.0.0",
-    "karma-webpack": "2.0.3",
+    "karma-webpack": "2.0.4",
     "mocha": "3.4.2",
     "mocha-teamcity-reporter": "1.1.1",
     "phantomjs-prebuilt": "2.1.14",
-    "sinon": "2.3.4"
+    "sinon": "2.3.8"
   }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f277530a/modules/web-console/frontend/views/index.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/index.pug b/modules/web-console/frontend/views/index.pug
index f8f13dd..1881b38 100644
--- a/modules/web-console/frontend/views/index.pug
+++ b/modules/web-console/frontend/views/index.pug
@@ -23,23 +23,13 @@ html(ng-app='ignite-console' id='app' ng-strict-di)
         meta(http-equiv='content-language' content='en')
         meta(http-equiv='X-UA-Compatible' content='IE=Edge')
 
-        title(ng-bind='$meta.title')
+        title(ng-bind='tfMetaTags.title')
+        meta(ng-repeat='(key, value) in tfMetaTags.properties' name='{{::key}}' content='{{::value}}')
 
         meta(name='fragment' content='!')
-        meta(name='description' content='{{$meta.description}}')
-        meta(name='keywords' content='{{$meta.keywords}}')
-        meta(ng-repeat='(key, value) in $meta.properties' name='{{::key}}' content='{{::value}}')
 
     body.theme-line.body-overlap
 
-        .splash.splash-max-foreground(hide-on-state-change)
-            .splash-wrapper
-                .spinner
-                    .bounce1
-                    .bounce2
-                    .bounce3
-
-                .splash-wellcome Loading...
 
         .ribbon-wrapper.right(ng-cloak)
             .ribbon(ng-style='IgniteDemoMode && {"background": "#1b6d88"}')