You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2015/05/29 08:57:12 UTC

[1/2] incubator-ignite git commit: # ignite-843 WIP.

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-843 33f3c9fd3 -> 6ce1c8aa5


# ignite-843 WIP.


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

Branch: refs/heads/ignite-843
Commit: 6c04de99f7f542fd0f5a5bab53f23d560147dc52
Parents: 33f3c9f
Author: Andrey <an...@gridgain.com>
Authored: Thu May 28 18:28:20 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Thu May 28 18:28:20 2015 +0700

----------------------------------------------------------------------
 .../public/javascripts/controllers/clusters.js  | 37 ++++++++++----------
 modules/webconfig/nodejs/views/clusters.jade    |  4 +--
 2 files changed, 20 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6c04de99/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js b/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
index 8a041da..d864033 100644
--- a/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
+++ b/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
@@ -1,9 +1,9 @@
 // Controller for clusters page.
 configuratorModule.controller('clustersController', ['$scope', '$modal', '$http',
     function($scope, $modal, $http) {
-        $scope.editColumn = {};
+        $scope.selectedItem = {};
 
-        $scope.editCluster = {};
+        $scope.backupItem = {};
 
         $scope.templates = [
             {value: {discovery: 'TcpDiscoveryVmIpFinder', addresses: ['127.0.0.1:47500..47510']}, label: 'Local'},
@@ -99,27 +99,26 @@ configuratorModule.controller('clustersController', ['$scope', '$modal', '$http'
             multicastModal.$promise.then(multicastModal.show);
         };
 
+        //function revertSelectedItem() {
+        //    if ($scope.selectedItem) {
+        //        //$scope.clusters[$scope.clusters.indexOf($scope.currentCluster)] = $scope.editCluster;
+        //        //
+        //        //$scope.currentCluster = undefined;
+        //        //
+        //        //$scope.editColumn = undefined;
+        //        //
+        //        //$scope.clustersTable.reload();
+        //    }
+        //};
 
-        $scope.beginEditCluster = function(column, cluster) {
-            $scope.revertCluster();
-
-            $scope.currentCluster = cluster;
-
-            $scope.editColumn = column;
-
-            $scope.editCluster = angular.copy(cluster);
-        };
-
-        $scope.revertCluster = function() {
-            if ($scope.editColumn && $scope.currentCluster) {
-                $scope.clusters[$scope.clusters.indexOf($scope.currentCluster)] = $scope.editCluster;
+        $scope.selectItem = function(item) {
+            console.log(item);
 
-                $scope.currentCluster = undefined;
+            //revertSelectedItem();
 
-                $scope.editColumn = undefined;
+            $scope.selectedItem = item;
 
-                $scope.clustersTable.reload();
-            }
+            //$scope.backupItem = angular.copy(item);
         };
 
         // Add new cluster.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6c04de99/modules/webconfig/nodejs/views/clusters.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/clusters.jade b/modules/webconfig/nodejs/views/clusters.jade
index f7c2fbc..0ffd5eb 100644
--- a/modules/webconfig/nodejs/views/clusters.jade
+++ b/modules/webconfig/nodejs/views/clusters.jade
@@ -32,7 +32,7 @@ block content
                     th(st-sort='name') Name
                     th.col-sm-1 Action
             tbody
-                tr(st-select-row='row' ng-click='cluster=row' st-select-mode='single' ng-repeat='row in rowCollection')
+                tr(st-select-row='row' ng-click='selectItem(row)' st-select-mode='single' ng-repeat='row in rowCollection')
                     td {{$index + 1}}
                     td {{row.name}}
                     td
@@ -53,4 +53,4 @@ block content
             .form-group
                 label.control-label.col-sm-2 Cluster name
                 .col-sm-10
-                    input.form-control(type="text" ng-model='cluster.name')
\ No newline at end of file
+                    input.form-control(type="text" ng-model='selectedItem.name')
\ No newline at end of file


[2/2] incubator-ignite git commit: # ignite-843 WIP.

Posted by an...@apache.org.
# ignite-843 WIP.


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

Branch: refs/heads/ignite-843
Commit: 6ce1c8aa5930cc69620936ec367df490ba53083b
Parents: 6c04de9
Author: Andrey <an...@gridgain.com>
Authored: Fri May 29 13:57:10 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Fri May 29 13:57:10 2015 +0700

----------------------------------------------------------------------
 modules/webconfig/nodejs/db.js                  | 10 +-
 .../public/javascripts/controllers/clusters.js  | 96 ++------------------
 .../nodejs/public/stylesheets/style.css         |  2 +-
 .../nodejs/public/stylesheets/style.less        | 11 ++-
 modules/webconfig/nodejs/views/clusters.jade    | 43 +++++++--
 .../webconfig/nodejs/views/layout-sidebar.jade  | 35 +++----
 modules/webconfig/nodejs/views/login.jade       | 16 ++++
 7 files changed, 91 insertions(+), 122 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ce1c8aa/modules/webconfig/nodejs/db.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/db.js b/modules/webconfig/nodejs/db.js
index 7b8e3a8..f6aa4c0 100644
--- a/modules/webconfig/nodejs/db.js
+++ b/modules/webconfig/nodejs/db.js
@@ -31,9 +31,13 @@ exports.Space =  mongoose.model('Space', new Schema({
 // Define cluster model.
 exports.Cluster =  mongoose.model('Cluster', new Schema({
     space: { type: ObjectId, ref: 'Space' },
-    name : String,
-    discovery : { type: String, enum: ['TcpDiscoveryVmIpFinder', 'TcpDiscoveryMulticastIpFinder'] },
-    addresses : [String]
+    name: String,
+    discovery: { type: String, enum: ['TcpDiscoveryVmIpFinder', 'TcpDiscoveryMulticastIpFinder'] },
+    addresses: [String],
+    pubPoolSize: Number,
+    sysPoolSize: Number,
+    mgmtPoolSize: Number,
+    p2pPoolSize: Number
 }));
 
 // Define cache model.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ce1c8aa/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js b/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
index d864033..b435e6e 100644
--- a/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
+++ b/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
@@ -1,10 +1,6 @@
 // Controller for clusters page.
 configuratorModule.controller('clustersController', ['$scope', '$modal', '$http',
     function($scope, $modal, $http) {
-        $scope.selectedItem = {};
-
-        $scope.backupItem = {};
-
         $scope.templates = [
             {value: {discovery: 'TcpDiscoveryVmIpFinder', addresses: ['127.0.0.1:47500..47510']}, label: 'Local'},
             {value: {discovery: 'TcpDiscoveryMulticastIpFinder'}, label: 'Basic'}
@@ -34,91 +30,10 @@ configuratorModule.controller('clustersController', ['$scope', '$modal', '$http'
             .success(function(data) {
                 $scope.spaces = data.spaces;
                 $scope.clusters = data.clusters;
-
-                //$scope.clustersTable = new ngTableParams({
-                //    page: 1,                    // Show first page.
-                //    count: Number.MAX_VALUE,    // Count per page.
-                //    sorting: {name: 'asc'}      // Initial sorting.
-                //}, {
-                //    total: $scope.clusters.length, // Length of data.
-                //    counts: [],
-                //    getData: function($defer, params) {
-                //        // Use build-in angular filter.
-                //        var orderedData = params.sorting() ?
-                //            $filter('orderBy')($scope.clusters, params.orderBy()) :
-                //            $scope.clusters;
-                //
-                //        var page = params.page();
-                //        var cnt = params.count();
-                //
-                //        $defer.resolve(orderedData.slice(page - 1 * cnt, page * cnt));
-                //    }
-                //});
             });
 
-        // Create popup for tcpDiscoveryVmIpFinder advanced settings.
-        var staticIpsModal = $modal({scope: $scope, template: '/staticIps', show: false});
-
-        //$scope.editStaticIps = function(cluster) {
-        //    $scope.staticIpsTable = new ngTableParams({
-        //        page: 1,                    // Show first page.
-        //        count: Number.MAX_VALUE     // Count per page.
-        //    }, {
-        //        total: cluster.addresses.length, // Length of data.
-        //        counts: [],
-        //        getData: function($defer, params) {
-        //            var addresses = cluster.addresses;
-        //
-        //            var page = params.page();
-        //            var cnt = params.count();
-        //
-        //            $defer.resolve(addresses.slice(page - 1 * cnt, page * cnt));
-        //        }
-        //    });
-        //
-        //    staticIpsModal.$promise.then(staticIpsModal.show);
-        //};
-
-        // Add new cluster.
-        $scope.addStaticIp = function(cluster) {
-            cluster.push({space: $scope.spaces[0]._id, discovery: 'TcpDiscoveryVmIpFinder'});
-
-            $scope.clustersTable.reload();
-        };
-
-        $scope.beginEditStaticIp = function(address) {
-            $scope.revertStaticIp();
-
-            $scope.editAddress = angular.copy(address);
-        };
-
-        // Create popup for tcpDiscoveryMulticastIpFinder advanced settings.
-        var multicastModal = $modal({scope: $scope, template: '/staticIps', show: false});
-
-        $scope.editMulticast = function(cluster) {
-            multicastModal.$promise.then(multicastModal.show);
-        };
-
-        //function revertSelectedItem() {
-        //    if ($scope.selectedItem) {
-        //        //$scope.clusters[$scope.clusters.indexOf($scope.currentCluster)] = $scope.editCluster;
-        //        //
-        //        //$scope.currentCluster = undefined;
-        //        //
-        //        //$scope.editColumn = undefined;
-        //        //
-        //        //$scope.clustersTable.reload();
-        //    }
-        //};
-
         $scope.selectItem = function(item) {
-            console.log(item);
-
-            //revertSelectedItem();
-
-            $scope.selectedItem = item;
-
-            //$scope.backupItem = angular.copy(item);
+            $scope.backupItem = item.isSelected ? angular.copy(item) : undefined;
         };
 
         // Add new cluster.
@@ -130,7 +45,7 @@ configuratorModule.controller('clustersController', ['$scope', '$modal', '$http'
 
             $scope.create = {};
 
-            saveCluster(item);
+            $scope.saveCluster(item);
         };
 
         // Remove new cluster.
@@ -139,8 +54,6 @@ configuratorModule.controller('clustersController', ['$scope', '$modal', '$http'
                 .success(function(data) {
                     $scope.spaces = data.spaces;
                     $scope.clusters = data.clusters;
-
-                    $scope.clustersTable.reload();
                 })
                 .error(function(errorMessage) {
                     console.log('Error: ' + errorMessage);
@@ -148,11 +61,14 @@ configuratorModule.controller('clustersController', ['$scope', '$modal', '$http'
         };
 
         // Save cluster in db.
-        function saveCluster(cluster) {
+        $scope.saveCluster = function (cluster) {
             $http.post('/rest/clusters/save', cluster)
                 .success(function(data) {
                     $scope.spaces = data.spaces;
+
                     $scope.clusters = data.clusters;
+
+                    $scope.backupItem = undefined;
                 })
                 .error(function(errorMessage) {
                     console.log('Error: ' + errorMessage);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ce1c8aa/modules/webconfig/nodejs/public/stylesheets/style.css
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/stylesheets/style.css b/modules/webconfig/nodejs/public/stylesheets/style.css
index ea51de3..cf9c71a 100644
--- a/modules/webconfig/nodejs/public/stylesheets/style.css
+++ b/modules/webconfig/nodejs/public/stylesheets/style.css
@@ -1 +1 @@
-.main-header .logo{height:auto}.main-sidebar{padding-top:60px}.navbar-default .navbar-brand,.navbar-default .navbar-brand:hover{position:absolute;width:100%;left:0;text-align:center}.modal-backdrop.am-fade{opacity:.5;transition:opacity .15s linear}.modal-backdrop.am-fade.ng-enter{opacity:0}.modal-backdrop.am-fade.ng-enter.ng-enter-active{opacity:.5}.modal-backdrop.am-fade.ng-leave{opacity:.5}.modal-backdrop.am-fade.ng-leave.ng-leave-active{opacity:0}.modal.center .modal-dialog{position:fixed;top:40%;left:50%;min-width:320px;max-width:630px;width:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.ng-table th.text-right{text-align:right}.ng-table th.text-left{text-align:left}.ng-table th.text-center{text-align:center}.fa.fa-remove{color:red}.border-left{-webkit-box-shadow:1px 0 0px 0px #eee inset;box-shadow:1px 0 0px 0px #eee inset}.border-right{-webkit-box-shadow:1px 0 0px 0px #eee;box-shadow:1px 0 0px 0px #eee}.theme-line{background-
 color:#f9f9f9}.theme-line header{background-color:#fff}.theme-line header .search-bar{width:90%;margin:30px auto 0;-webkit-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 0 0 5px rgba(0,0,0,0.1),0 0 0 1px rgba(0,0,0,0.1);box-shadow:0 0 0 5px rgba(0,0,0,0.1),0 0 0 1px rgba(0,0,0,0.1);position:relative}.theme-line header .search-bar.focus{-webkit-box-shadow:0 0 0 5px rgba(0,0,0,0.2),0 0 0 1px rgba(0,0,0,0.1);box-shadow:0 0 0 5px rgba(0,0,0,0.2),0 0 0 1px rgba(0,0,0,0.1)}.theme-line header .search-bar .fa{position:absolute;top:10px;left:14px;font-size:21px;color:#ccc;z-index:10}.theme-line header .search-bar .twitter-typeahead{width:100%}.theme-line header .search-bar input{-webkit-border-radius:5px;border-radius:5px;height:100%;border:0 none;-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.1) inset;box-shadow:0 2px 2px rgba(0,0,0,0.1) inset;color:#444;width:100%;padding:13px 13px 13px 50px;font-size:14px}.theme-line header .search-bar input.tt-hint{color:#bbb}.theme-line header .sea
 rch-bar input:active .theme-line header .search-bar input:focus{outline:0 none;-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.2) inset;box-shadow:0 2px 2px rgba(0,0,0,0.2) inset}.theme-line header .search-bar .tt-dropdown-menu,.theme-solid header .search-bar .tt-dropdown-menu{width:100%;text-align:left}.theme-line header .search-bar .tt-dropdown-menu h3{padding:0 45px;color:#ccc;font-weight:bold;font-size:12px;margin:10px 0 4px;text-transform:uppercase}.theme-line header .search-bar .tt-dropdown-menu .tt-suggestions{display:block}.theme-line header .search-bar .tt-dropdown-menu .tt-suggestions .tt-suggestion{cursor:pointer;font-size:14px;padding:4px 45px}.theme-line header .search-bar .tt-dropdown-menu .tt-suggestions .tt-suggestion p{color:#333;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line header .search-bar .tt-cursor{background-color:#eee}.theme-line header .search-bar .tt-cursor p{color:#fff}.theme-line header a.btn{border:0 none;padd
 ing:10px 25px;background-color:rgba(0,0,0,0.15)}.theme-line header a.btn:hover{background-color:rgba(0,0,0,0.25)}.theme-line header a.btn.btn-link{background:transparent;color:rgba(255,255,255,0.8)}.theme-line header a.btn.btn-link:hover{color:#fff;text-decoration:none}.theme-line .navbar-nav a{background-color:transparent}.theme-line .navbar-nav a:hover,.theme-line .navbar-nav a:active,.theme-line .navbar-nav a:focus{background-color:transparent}.theme-line .navbar-nav .active a{font-weight:bold}.theme-line .main-links{padding-top:50px}.theme-line .main-links h3{margin-top:0;font-size:17px}.theme-line .main-links .links a{color:#888}.theme-line .main-links .links a:hover{text-decoration:none}.theme-line #category-columns,.theme-solid #category-columns{margin:50px 30px 0}.theme-line #category-columns h4{text-transform:uppercase;font-weight:300;color:#999;font-size:14px}.theme-line #category-columns ul{list-style:none;padding:0;margin-bottom:15px}.theme-line #category-columns ul li a
 {padding:4px 0;display:block;font-size:16px}.theme-line #category-columns ul .view-all{font-size:0.85em}.theme-line .docs-header{color:#999;overflow:hidden}.theme-line .docs-header h1{color:#444;margin-top:0;font-size:25px}.theme-line .btn-primary{border:0 none}.theme-line .main-content .nav-horizontal a{-webkit-box-shadow:0 0;box-shadow:0 0;border:0 none;background-color:#fff;-webkit-border-radius:0;border-radius:0;color:#aaa;padding:6px;margin:0 14px}.theme-line .main-content .nav-horizontal a:hover{color:#999;border-bottom:4px solid #ddd}.theme-line .main-content .nav-horizontal a.active{border-bottom:4px solid #888}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:13px;margin:3px 0 0}.theme-line .sidebar-nav ul li a{padding:3px 0;display:block;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-nav ul li a:before{top:0;content
 :" ";display:block;width:6px;height:100%;position:absolute;left:-30px}.theme-line .sidebar-nav ul li a:hover{text-decoration:none}.theme-line .sidebar-nav ul li a.active{font-weight:bold}.theme-line .sidebar-nav ul li .subcategory{padding-left:15px}.theme-line .sidebar-nav h4{margin-top:2em;font-weight:normal;text-transform:uppercase;font-size:11px;margin-bottom:10px;color:#bbb}.theme-line .sidebar-nav h4:first-child{margin-top:0em}.theme-line .sidebar-nav .ask{width:100%;text-align:center;padding:10px}.theme-line .border-left .sidebar-nav{padding-left:15px}.theme-line .suggest{padding:4px;display:inline-block;font-size:12px}.header{padding:15px}.header .has-github{padding-right:136px}.header h1.navbar-brand{height:40px;width:200px;padding:0;margin:0;margin-top:5px;margin-right:15px}.header h1.navbar-brand a{text-indent:-99999px;background-position:center center;display:block;width:100%;height:100%;-webkit-background-size:contain;-moz-background-size:contain;background-size:contain;
 background-repeat:no-repeat}.header .nav.navbar-nav.pull-right{position:relative;right:-30px}.header .nav.navbar-nav .not-link{padding:15px;display:inline-block}.header .nav.navbar-nav .stable,.header .nav.navbar-nav .beta,.header .nav.navbar-nav .private{font-size:9px;padding:3px 5px;display:inline-block;line-height:8px;-webkit-border-radius:3px;border-radius:3px;margin-left:6px;color:#fff;top:-2px;position:relative;opacity:0.6;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)";filter:alpha(opacity=60)}.header .nav.navbar-nav a:hover>.stable,.header .nav.navbar-nav a:hover>.beta,.header .nav.navbar-nav a:hover>.private{opacity:1;-ms-filter:none;filter:none}.header .nav.navbar-nav .beta{background-color:#59c3d1}.header .nav.navbar-nav .stable{background-color:#41b841}.header .nav.navbar-nav .private{background-color:#333}.header #jumbotron{margin:55px 70px 50px;text-align:center}.header #jumbotron h2{margin-top:0;margin-bottom:20px}.header #jumbotron p{margin-bottom:0;
 line-height:1.6em;font-size:16px}.header #jumbotron .btn{margin-top:20px}.header .searchbox{position:relative;margin-right:15px;top:9px}.header .searchbox .fa-search{position:absolute;top:8px;right:10px;color:#777;pointer-events:none}.header .searchbox .typeahead{line-height:1.25em;-webkit-transition:.3s ease-out;-moz-transition:.3s ease-out;-o-transition:.3s ease-out;-ms-transition:.3s ease-out;transition:.3s ease-out;background-color:rgba(0,0,0,0.05);-webkit-border-radius:5px;border-radius:5px;width:95px}.header .searchbox .typeahead:focus,.header .searchbox .typeahead:active{outline:0 none}.header .searchbox .tt-dropdown-menu{max-width:350px;margin-left:-100px}.header .searchbox .tt-dropdown-menu h3{width:100px;float:left;margin:0;padding:8px 0 6px 15px;font-size:13px;color:#bbb}.header .searchbox .tt-dropdown-menu .tt-suggestions{display:block;float:left;width:250px}.header .searchbox .tt-dropdown-menu .tt-suggestions .tt-suggestion{font-size:14px}.header .searchbox .tt-dropdown
 -menu .tt-suggestions .tt-suggestion p{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.header .searchbox .tt-cursor{background-color:#eee}.header .searchbox .tt-cursor p{color:#fff}.header .searchbox input{border:0 none;display:inline-block;font-size:14px;padding:6px 32px 6px 12px;margin:0}.header .searchbox input.tt-hint{height:auto}.header .searchbox.focus input{width:250px}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header p{color:#666}.theme-line .navbar-nav{color:#888}.theme-line .navbar-nav a{color:#bbb}.theme-line.lumosity-light .searchbox .tt-cursor p{color:rgba(0,0,0,0.7)}.theme-line header{border-bottom-color:#ec1c24}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line .nav
 bar-nav .active a{font-weight:bold;color:#ec1c24}.theme-line .navbar-nav .active a:hover{color:#950d12}.theme-line .main-links .links a:hover{color:#ec1c24}.theme-line .main-content a{color:#ec1c24}.theme-line .main-content a:hover{color:#950d12}.theme-line .sidebar-nav ul li a.active:before{background-color:#ec1c24}.theme-line .sidebar-nav ul li a.active{color:#ec1c24}.theme-line .sidebar-nav ul li a:hover,.theme-line .sidebar-nav ul li a.active:hover{color:#950d12}.theme-line .btn-primary{background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .nav-horizontal a.active{border-color:#ec1c24;color:#ec1c24}.theme-line .main-content .nav-horizontal a:hover{color:#950d12}.theme-line .main-content .nav-horizontal a.active:hover{border-color:#950d12}.theme-line header .navbar-nav a.active,.theme-line #versions-list li a:hover strong,.theme-line #versions-list li a.active .current,.theme-line #versions-list li a:active .current{color:#ec1c
 24}.theme-line.body-threes .section-right .threes-nav .btn-default:hover,.theme-line.page-docs.body-threes .section-right .threes-nav .pull-right a:hover{color:#ec1c24;border-color:#ec1c24}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,0.1);box-shadow:0 0 0 1px rgba(0,0,0,0.1);background-color:#fff}body{font-weight:400;font-family:Roboto Slab, serif}h1,h2,h3,h4,h5,h6{font-weight:700;font-family:Roboto Slab, serif}.submit-vote.submit-vote-parent.voted a.submit-vote-button,.submit-vote.submit-vote-parent a.submit-vote-button:hover{background-color:#ec1c24}div.submit-vote.submit-vote-parent.voted a.submit-vote-button:hover{background-color:#950d12}a,.link .title{color:#ec1c24}a:hover,.link:hover .title{color:#950d12}.header h1.navbar-brand a{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.header h1.navbar-brand{width:96px}.block-edit-parameters{text-ali
 gn:right;padding-bottom:5px}.ng-table-pager{display:none}.container-footer{margin-top:20px}.vcenter{vertical-align:middle}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:24px;right:24px;float:none}.modal .modal-dialog{width:610px}.modal .modal-content{-webkit-border-radius:0;border-radius:0;background-color:#f7f7f7}.modal .modal-content .modal-header{background-color:#fff;text-align:center;color:#555;padding:24px;font-family:"myriad-pro",sans-serif}.modal .modal-content .modal-header h4{font-family:"myriad-pro",sans-serif;font-size:22px}.modal .modal-content .modal-header h4 .fa{display:block;font-size:41px;color:#ddd;margin-bottom:5px}.modal .modal-content .modal-header p{margin:0;color:#aaa;font-size:1em;margin-top:3px}.modal .modal-content .modal-spacer{padding:10px 10px 0 10px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:30px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.st-sor
 t-ascent:after{content:'\25B2'}.st-sort-descent:after{content:'\25BC'}.st-selected{background:#216eff;color:white}.docs-content table{width:100%;border-top:1px solid #ccc;border-left:1px solid #ccc;margin-bottom:30px}.docs-content th{text-align:center;border-right:1px solid #ccc;border-bottom:1px solid #ccc;background-color:#f7f7f7;padding:5px}.docs-content td{text-align:center;border-right:1px solid #ccc;border-bottom:1px solid #ccc;vertical-align:middle;padding:5px}.docs-content td>.input-group{display:block}.docs-content td>.input-group input{width:50%}.docs-content td>.input-group button{width:50%;border-left:0}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 230px)}
\ No newline at end of file
+.main-header .logo{height:auto}.main-sidebar{padding-top:60px}.navbar-default .navbar-brand,.navbar-default .navbar-brand:hover{position:absolute;width:100%;left:0;text-align:center}.modal-backdrop.am-fade{opacity:.5;transition:opacity .15s linear}.modal-backdrop.am-fade.ng-enter{opacity:0}.modal-backdrop.am-fade.ng-enter.ng-enter-active{opacity:.5}.modal-backdrop.am-fade.ng-leave{opacity:.5}.modal-backdrop.am-fade.ng-leave.ng-leave-active{opacity:0}.modal.center .modal-dialog{position:fixed;top:40%;left:50%;min-width:320px;max-width:630px;width:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.ng-table th.text-right{text-align:right}.ng-table th.text-left{text-align:left}.ng-table th.text-center{text-align:center}.fa.fa-remove{color:red}.border-left{-webkit-box-shadow:1px 0 0px 0px #eee inset;box-shadow:1px 0 0px 0px #eee inset}.border-right{-webkit-box-shadow:1px 0 0px 0px #eee;box-shadow:1px 0 0px 0px #eee}.theme-line{background-
 color:#f9f9f9}.theme-line header{background-color:#fff}.theme-line header .search-bar{width:90%;margin:30px auto 0;-webkit-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 0 0 5px rgba(0,0,0,0.1),0 0 0 1px rgba(0,0,0,0.1);box-shadow:0 0 0 5px rgba(0,0,0,0.1),0 0 0 1px rgba(0,0,0,0.1);position:relative}.theme-line header .search-bar.focus{-webkit-box-shadow:0 0 0 5px rgba(0,0,0,0.2),0 0 0 1px rgba(0,0,0,0.1);box-shadow:0 0 0 5px rgba(0,0,0,0.2),0 0 0 1px rgba(0,0,0,0.1)}.theme-line header .search-bar .fa{position:absolute;top:10px;left:14px;font-size:21px;color:#ccc;z-index:10}.theme-line header .search-bar .twitter-typeahead{width:100%}.theme-line header .search-bar input{-webkit-border-radius:5px;border-radius:5px;height:100%;border:0 none;-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.1) inset;box-shadow:0 2px 2px rgba(0,0,0,0.1) inset;color:#444;width:100%;padding:13px 13px 13px 50px;font-size:14px}.theme-line header .search-bar input.tt-hint{color:#bbb}.theme-line header .sea
 rch-bar input:active .theme-line header .search-bar input:focus{outline:0 none;-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.2) inset;box-shadow:0 2px 2px rgba(0,0,0,0.2) inset}.theme-line header .search-bar .tt-dropdown-menu,.theme-solid header .search-bar .tt-dropdown-menu{width:100%;text-align:left}.theme-line header .search-bar .tt-dropdown-menu h3{padding:0 45px;color:#ccc;font-weight:bold;font-size:12px;margin:10px 0 4px;text-transform:uppercase}.theme-line header .search-bar .tt-dropdown-menu .tt-suggestions{display:block}.theme-line header .search-bar .tt-dropdown-menu .tt-suggestions .tt-suggestion{cursor:pointer;font-size:14px;padding:4px 45px}.theme-line header .search-bar .tt-dropdown-menu .tt-suggestions .tt-suggestion p{color:#333;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line header .search-bar .tt-cursor{background-color:#eee}.theme-line header .search-bar .tt-cursor p{color:#fff}.theme-line header a.btn{border:0 none;padd
 ing:10px 25px;background-color:rgba(0,0,0,0.15)}.theme-line header a.btn:hover{background-color:rgba(0,0,0,0.25)}.theme-line header a.btn.btn-link{background:transparent;color:rgba(255,255,255,0.8)}.theme-line header a.btn.btn-link:hover{color:#fff;text-decoration:none}.theme-line .navbar-nav a{background-color:transparent}.theme-line .navbar-nav a:hover,.theme-line .navbar-nav a:active,.theme-line .navbar-nav a:focus{background-color:transparent}.theme-line .navbar-nav .active a{font-weight:bold}.theme-line .main-links{padding-top:50px}.theme-line .main-links h3{margin-top:0;font-size:17px}.theme-line .main-links .links a{color:#888}.theme-line .main-links .links a:hover{text-decoration:none}.theme-line #category-columns,.theme-solid #category-columns{margin:50px 30px 0}.theme-line #category-columns h4{text-transform:uppercase;font-weight:300;color:#999;font-size:14px}.theme-line #category-columns ul{list-style:none;padding:0;margin-bottom:15px}.theme-line #category-columns ul li a
 {padding:4px 0;display:block;font-size:16px}.theme-line #category-columns ul .view-all{font-size:0.85em}.theme-line .docs-header{color:#999;overflow:hidden}.theme-line .docs-header h1{color:#444;margin-top:0;font-size:25px}.theme-line .btn-primary{border:0 none}.theme-line .main-content .nav-horizontal a{-webkit-box-shadow:0 0;box-shadow:0 0;border:0 none;background-color:#fff;-webkit-border-radius:0;border-radius:0;color:#aaa;padding:6px;margin:0 14px}.theme-line .main-content .nav-horizontal a:hover{color:#999;border-bottom:4px solid #ddd}.theme-line .main-content .nav-horizontal a.active{border-bottom:4px solid #888}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:13px;margin:3px 0 0}.theme-line .sidebar-nav ul li a{padding:3px 0;display:block;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-nav ul li a:before{top:0;content
 :" ";display:block;width:6px;height:100%;position:absolute;left:-30px}.theme-line .sidebar-nav ul li a:hover{text-decoration:none}.theme-line .sidebar-nav ul li a.active{font-weight:bold}.theme-line .sidebar-nav ul li .subcategory{padding-left:15px}.theme-line .sidebar-nav h4{margin-top:2em;font-weight:normal;text-transform:uppercase;font-size:11px;margin-bottom:10px;color:#bbb}.theme-line .sidebar-nav h4:first-child{margin-top:0em}.theme-line .sidebar-nav .ask{width:100%;text-align:center;padding:10px}.theme-line .border-left .sidebar-nav{padding-left:15px}.theme-line .suggest{padding:4px;display:inline-block;font-size:12px}.header{padding:15px}.header .has-github{padding-right:136px}.header h1.navbar-brand{height:40px;width:200px;padding:0;margin:0;margin-top:5px;margin-right:15px}.header h1.navbar-brand a{text-indent:-99999px;background-position:center center;display:block;width:100%;height:100%;-webkit-background-size:contain;-moz-background-size:contain;background-size:contain;
 background-repeat:no-repeat}.header .nav.navbar-nav.pull-right{position:relative;right:-30px}.header .nav.navbar-nav .not-link{padding:15px;display:inline-block}.header .nav.navbar-nav .stable,.header .nav.navbar-nav .beta,.header .nav.navbar-nav .private{font-size:9px;padding:3px 5px;display:inline-block;line-height:8px;-webkit-border-radius:3px;border-radius:3px;margin-left:6px;color:#fff;top:-2px;position:relative;opacity:0.6;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)";filter:alpha(opacity=60)}.header .nav.navbar-nav a:hover>.stable,.header .nav.navbar-nav a:hover>.beta,.header .nav.navbar-nav a:hover>.private{opacity:1;-ms-filter:none;filter:none}.header .nav.navbar-nav .beta{background-color:#59c3d1}.header .nav.navbar-nav .stable{background-color:#41b841}.header .nav.navbar-nav .private{background-color:#333}.header #jumbotron{margin:55px 70px 50px;text-align:center}.header #jumbotron h2{margin-top:0;margin-bottom:20px}.header #jumbotron p{margin-bottom:0;
 line-height:1.6em;font-size:16px}.header #jumbotron .btn{margin-top:20px}.header .searchbox{position:relative;margin-right:15px;top:9px}.header .searchbox .fa-search{position:absolute;top:8px;right:10px;color:#777;pointer-events:none}.header .searchbox .typeahead{line-height:1.25em;-webkit-transition:.3s ease-out;-moz-transition:.3s ease-out;-o-transition:.3s ease-out;-ms-transition:.3s ease-out;transition:.3s ease-out;background-color:rgba(0,0,0,0.05);-webkit-border-radius:5px;border-radius:5px;width:95px}.header .searchbox .typeahead:focus,.header .searchbox .typeahead:active{outline:0 none}.header .searchbox .tt-dropdown-menu{max-width:350px;margin-left:-100px}.header .searchbox .tt-dropdown-menu h3{width:100px;float:left;margin:0;padding:8px 0 6px 15px;font-size:13px;color:#bbb}.header .searchbox .tt-dropdown-menu .tt-suggestions{display:block;float:left;width:250px}.header .searchbox .tt-dropdown-menu .tt-suggestions .tt-suggestion{font-size:14px}.header .searchbox .tt-dropdown
 -menu .tt-suggestions .tt-suggestion p{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.header .searchbox .tt-cursor{background-color:#eee}.header .searchbox .tt-cursor p{color:#fff}.header .searchbox input{border:0 none;display:inline-block;font-size:14px;padding:6px 32px 6px 12px;margin:0}.header .searchbox input.tt-hint{height:auto}.header .searchbox.focus input{width:250px}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header p{color:#666}.theme-line .navbar-nav{color:#888}.theme-line .navbar-nav a{color:#bbb}.theme-line.lumosity-light .searchbox .tt-cursor p{color:rgba(0,0,0,0.7)}.theme-line header{border-bottom-color:#ec1c24}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line .nav
 bar-nav .active a{font-weight:bold;color:#ec1c24}.theme-line .navbar-nav .active a:hover{color:#950d12}.theme-line .main-links .links a:hover{color:#ec1c24}.theme-line .main-content a{color:#ec1c24}.theme-line .main-content a:hover{color:#950d12}.theme-line .sidebar-nav ul li a.active:before{background-color:#ec1c24}.theme-line .sidebar-nav ul li a.active{color:#ec1c24}.theme-line .sidebar-nav ul li a:hover,.theme-line .sidebar-nav ul li a.active:hover{color:#950d12}.theme-line .btn-primary{background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .nav-horizontal a.active{border-color:#ec1c24;color:#ec1c24}.theme-line .main-content .nav-horizontal a:hover{color:#950d12}.theme-line .main-content .nav-horizontal a.active:hover{border-color:#950d12}.theme-line header .navbar-nav a.active,.theme-line #versions-list li a:hover strong,.theme-line #versions-list li a.active .current,.theme-line #versions-list li a:active .current{color:#ec1c
 24}.theme-line.body-threes .section-right .threes-nav .btn-default:hover,.theme-line.page-docs.body-threes .section-right .threes-nav .pull-right a:hover{color:#ec1c24;border-color:#ec1c24}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,0.1);box-shadow:0 0 0 1px rgba(0,0,0,0.1);background-color:#fff}body{font-weight:400;font-family:Roboto Slab, serif}h1,h2,h3,h4,h5,h6{font-weight:700;font-family:Roboto Slab, serif}.submit-vote.submit-vote-parent.voted a.submit-vote-button,.submit-vote.submit-vote-parent a.submit-vote-button:hover{background-color:#ec1c24}div.submit-vote.submit-vote-parent.voted a.submit-vote-button:hover{background-color:#950d12}a,.link .title{color:#ec1c24}a:hover,.link:hover .title{color:#950d12}.header h1.navbar-brand a{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.header h1.navbar-brand{width:96px}.block-edit-parameters{text-ali
 gn:right;padding-bottom:5px}.ng-table-pager{display:none}.container-footer{margin-top:20px}.vcenter{vertical-align:middle}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:24px;right:24px;float:none}.modal .modal-dialog{width:610px}.modal .modal-content{-webkit-border-radius:0;border-radius:0;background-color:#f7f7f7}.modal .modal-content .modal-header{background-color:#fff;text-align:center;color:#555;padding:24px;font-family:"myriad-pro",sans-serif}.modal .modal-content .modal-header h4{font-family:"myriad-pro",sans-serif;font-size:22px}.modal .modal-content .modal-header h4 .fa{display:block;font-size:41px;color:#ddd;margin-bottom:5px}.modal .modal-content .modal-header p{margin:0;color:#aaa;font-size:1em;margin-top:3px}.modal .modal-content .modal-spacer{padding:10px 10px 0 10px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:30px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.st-sor
 t-ascent:after{content:'\25B2'}.st-sort-descent:after{content:'\25BC'}.st-selected{background:#216eff;color:white}.docs-content table{width:100%;border-top:1px solid #ccc;border-left:1px solid #ccc;margin-bottom:30px}.docs-content th{text-align:center;border-right:1px solid #ccc;border-bottom:1px solid #ccc;background-color:#f7f7f7;padding:5px}.docs-content td{text-align:center;border-right:1px solid #ccc;border-bottom:1px solid #ccc;vertical-align:middle;padding:5px}.docs-content td>.input-group{display:block}.docs-content td>.input-group input{width:50%}.docs-content td>.input-group button{width:50%;border-left:0}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 230px)}.advanced{border-width:0 0 1px 0}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ce1c8aa/modules/webconfig/nodejs/public/stylesheets/style.less
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/stylesheets/style.less b/modules/webconfig/nodejs/public/stylesheets/style.less
index 35cb830..3aefbcb 100644
--- a/modules/webconfig/nodejs/public/stylesheets/style.less
+++ b/modules/webconfig/nodejs/public/stylesheets/style.less
@@ -154,7 +154,7 @@
   padding: 4px 45px;
 }
 
-.theme-line header .search-bar .tt-dropdown-menu .tt-suggestions .tt-suggestion p{
+.theme-line header .search-bar .tt-dropdown-menu .tt-suggestions .tt-suggestion p {
   color: #333;
   white-space: nowrap;
   overflow: hidden;
@@ -254,7 +254,7 @@
   overflow: hidden;
 }
 
-.theme-line .docs-header h1{
+.theme-line .docs-header h1 {
   color: #444;
   margin-top: 0;
   font-size: 25px;
@@ -798,7 +798,7 @@ h1.ignite-logo {
   content: '\25BC';
 }
 
-.st-selected{
+.st-selected {
   background: #216eff;
   color: white;
 }
@@ -839,7 +839,6 @@ h1.ignite-logo {
   display: block;
 }
 
-
 .block-display-image img {
   max-width: 100%;
   max-height: 450px;
@@ -850,4 +849,8 @@ h1.ignite-logo {
 .greedy {
   min-height: 200px;
   height: ~"calc(100vh - 230px)";
+}
+
+.advanced {
+  border-width: 0 0 1px 0;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ce1c8aa/modules/webconfig/nodejs/views/clusters.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/clusters.jade b/modules/webconfig/nodejs/views/clusters.jade
index 0ffd5eb..b579d94 100644
--- a/modules/webconfig/nodejs/views/clusters.jade
+++ b/modules/webconfig/nodejs/views/clusters.jade
@@ -20,11 +20,11 @@ append scripts
     script(src='/javascripts/controllers/clusters.js')
 
 block content
-    div.docs-header
+    .docs-header
         h1 Clusters
         p Create and configure Ignite clusters.
         hr
-    div.docs-body(ng-controller='clustersController')
+    .docs-body(ng-controller='clustersController')
         table(st-table='rowCollection' st-safe-src='clusters')
             thead
                 tr
@@ -42,15 +42,42 @@ block content
                 tr
                     td
                     td
-                        div(class=['input-group'])
+                        .input-group
                             input.form-control(type='text' name="name" ng-model='create.name' placeholder='Enter cluster name')
                             button(class=['btn-default', 'form-control'] ng-model='create.template' data-placement='bottom-center' data-template='/select' data-placeholder='Choose cluster template' bs-options='item.value as item.label for item in templates' bs-select)
                                 span.caret
                     td
                         button(ng-click='createItem()' class=['btn', 'btn-success', 'fa', 'fa-plus'] ng-disabled='!(create.name && create.template)') &nbspCreate
-        hr
-        form.form-horizontal
+        form.form-horizontal(name='editForm' ng-if='backupItem')
+            .form-group
+                label.control-label.col-sm-4 Name:
+                .col-sm-8
+                    input.form-control(type="text" ng-model='backupItem.name')
             .form-group
-                label.control-label.col-sm-2 Cluster name
-                .col-sm-10
-                    input.form-control(type="text" ng-model='selectedItem.name')
\ No newline at end of file
+                label.control-label.col-sm-4 Discovery:
+                .col-sm-8
+                    button(class=['btn-default', 'form-control'] ng-model='backupItem.discovery' data-placement='bottom-center' data-template='/select' data-placeholder='Choose discovery' bs-options='item.value as item.label for item in discoveries' bs-select)
+                        span.caret
+            .panel.advanced(bs-collapse data-start-collapsed='true')
+                .panel-collapse(bs-collapse-target)
+                    .form-group
+                        label.control-label.col-sm-4 Public thread pool size:
+                        .col-sm-8
+                            input.form-control(type="text" ng-model='backupItem.pubPoolSize')
+                    .form-group
+                        label.control-label.col-sm-4 System thread pool size:
+                        .col-sm-8
+                            input.form-control(type="text" ng-model='backupItem.sysPoolSize')
+                    .form-group
+                        label.control-label.col-sm-4 Management thread pool size:
+                        .col-sm-8
+                            input.form-control(type="text" ng-model='backupItem.mgmtPoolSize' placeholder='4')
+                    .form-group
+                        label.control-label.col-sm-4 Peer class loading thread pool size:
+                        .col-sm-8
+                            input.form-control(type="text" ng-model='backupItem.p2pPoolSize' placeholder='2')
+                .panel-heading
+                    .panel-title
+                        a(bs-collapse-toggle) Show advanced settings
+            center
+                button.btn.btn-primary(ng-click='saveCluster(backupItem)' ng-disabled='editForm.$invalid') Apply
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ce1c8aa/modules/webconfig/nodejs/views/layout-sidebar.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/layout-sidebar.jade b/modules/webconfig/nodejs/views/layout-sidebar.jade
index 777ec23..c11d77f 100644
--- a/modules/webconfig/nodejs/views/layout-sidebar.jade
+++ b/modules/webconfig/nodejs/views/layout-sidebar.jade
@@ -20,19 +20,22 @@ append scripts
 
 block container
     div.row
-       div(class=['col-sm-2', 'border-right', 'section-left', 'greedy'])
-          div.sidebar-nav
-             ul(ng-controller='activeLink' class="menu")
-                li
-                   a(ng-class="{active: isActive('/clusters')}" href='/clusters') Clusters
-                li
-                   a(ng-class="{active: isActive('/caches')}" href='/caches') Caches
-                li
-                   a(ng-class="{active: isActive('/persistence')}" href='/persistence') Persistence
-                li
-                   a(ng-class="{active: isActive('/sql')}" href='/sql') SQL
-                li
-                   a(ng-class="{active: isActive('/clients')}" href='/clients') Clients
-       div(class=['col-sm-10', 'border-left', 'section-right'])
-          div.docs-content
-             block content
\ No newline at end of file
+        div(class=['col-sm-2', 'border-right', 'section-left', 'greedy'])
+            div.sidebar-nav
+                ul(ng-controller='activeLink' class="menu")
+                    li
+                        a(ng-class="{active: isActive('/clusters')}" href='/clusters') Clusters
+                    li
+                        a(ng-class="{active: isActive('/caches')}" href='/caches') Caches
+                    li
+                        a(ng-class="{active: isActive('/persistence')}" href='/persistence') Persistence
+                    li
+                        a(ng-class="{active: isActive('/sql')}" href='/sql') SQL
+                    li
+                        a(ng-class="{active: isActive('/clients')}" href='/clients') Clients
+                    li
+                        hr
+                        a(ng-class="{active: isActive('/overview')}" href='/overview') Overview
+        div(class=['col-sm-10', 'border-left', 'section-right'])
+            div.docs-content
+                block content
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ce1c8aa/modules/webconfig/nodejs/views/login.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/login.jade b/modules/webconfig/nodejs/views/login.jade
index 9d5c5ff..35ad6f6 100644
--- a/modules/webconfig/nodejs/views/login.jade
+++ b/modules/webconfig/nodejs/views/login.jade
@@ -1,3 +1,19 @@
+//-
+    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.
+
 div(class=['modal', 'center'] tabindex='-1' role='dialog')
     .modal-dialog
         .modal-content