You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by se...@apache.org on 2015/07/15 21:16:49 UTC

[01/45] incubator-ignite git commit: IGNITE-843 Added support for conditional required.

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-1121 9ab35ffb7 -> dd27f3c00


IGNITE-843 Added support for conditional required.


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

Branch: refs/heads/ignite-1121
Commit: 14bb9dcd191c43c40e4a1002cb5f2e8d498b56f1
Parents: d660f93
Author: AKuznetsov <ak...@gridgain.com>
Authored: Mon Jul 13 15:55:03 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Mon Jul 13 15:55:03 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/caches-controller.js              | 11 +++++++++++
 .../nodejs/controllers/common-module.js                  |  3 +++
 .../nodejs/views/includes/controls.jade                  |  4 ++--
 3 files changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/14bb9dcd/modules/web-control-center/nodejs/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/caches-controller.js b/modules/web-control-center/nodejs/controllers/caches-controller.js
index 4a840d8..d76e80f 100644
--- a/modules/web-control-center/nodejs/controllers/caches-controller.js
+++ b/modules/web-control-center/nodejs/controllers/caches-controller.js
@@ -86,6 +86,17 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
 
         $scope.caches = [];
 
+        $scope.required = function (field) {
+            if (field.label == 'Eviction policy') {
+                var backupItem = $scope.backupItem;
+
+                return backupItem.swapEnabled ||
+                    (commonFunctions.isDefined(backupItem.offHeapMaxMemory) && backupItem.offHeapMaxMemory >= 0);
+            }
+
+            return false;
+        };
+
         // When landing on the page, get caches and show them.
         $http.post('caches/list')
             .success(function (data) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/14bb9dcd/modules/web-control-center/nodejs/controllers/common-module.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/common-module.js b/modules/web-control-center/nodejs/controllers/common-module.js
index fa230db..0200223 100644
--- a/modules/web-control-center/nodejs/controllers/common-module.js
+++ b/modules/web-control-center/nodejs/controllers/common-module.js
@@ -70,6 +70,9 @@ controlCenterModule.service('commonFunctions', ['$alert', function ($alert) {
 
             return lines.join("");
         },
+        isDefined: function (v) {
+            return !(v === undefined || v === null);
+        },
         errorMessage: errorMessage,
         showError: function (msg) {
             if (msgModal)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/14bb9dcd/modules/web-control-center/nodejs/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/controls.jade b/modules/web-control-center/nodejs/views/includes/controls.jade
index de2b76f..8231a58 100644
--- a/modules/web-control-center/nodejs/views/includes/controls.jade
+++ b/modules/web-control-center/nodejs/views/includes/controls.jade
@@ -95,7 +95,7 @@ mixin form-row
     - var lblClasses = ['col-sm-2']
 
     - var fieldMdl = 'getModel(backupItem, field.path)[field.model]';
-    - var fieldCommon = {'ng-model': fieldMdl, 'ng-required': 'field.required'};
+    - var fieldCommon = {'ng-model': fieldMdl, 'ng-required': 'field.required || required(field)'};
 
     div(ng-switch='field.type')
         div.checkbox.col-sm-6(ng-switch-when='check')
@@ -140,7 +140,7 @@ mixin form-row
         div(ng-switch-when='dropdown-details' ng-hide='{{field.hide}}')
             - var expanded = 'field.details[' + fieldMdl + '].expanded'
 
-            label(class=lblClasses ng-class='{required: field.required}') {{field.label}}:
+            label(class=lblClasses ng-class='{true: "required"}[field.required || required(field)]') {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
                 .input-tip


[02/45] incubator-ignite git commit: # ignite-843 Refactor admin panel.

Posted by se...@apache.org.
# ignite-843 Refactor admin panel.


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

Branch: refs/heads/ignite-1121
Commit: 6acfa141b9b619663441ac340590f55621af3b2a
Parents: d660f93
Author: Andrey <an...@gridgain.com>
Authored: Mon Jul 13 16:26:25 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Mon Jul 13 16:26:25 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/admin-controller.js      | 42 ++++++++---------
 .../nodejs/controllers/clusters-controller.js   |  2 +
 .../nodejs/controllers/common-module.js         | 36 +++++++++++++++
 .../nodejs/public/stylesheets/style.css         |  2 +-
 .../nodejs/public/stylesheets/style.less        | 47 +++++++++++++++-----
 .../web-control-center/nodejs/routes/public.js  |  5 +++
 .../nodejs/views/includes/controls.jade         | 10 ++---
 .../nodejs/views/settings/admin.jade            | 31 ++++++-------
 .../nodejs/views/templates/confirm.jade         | 27 +++++++++++
 9 files changed, 150 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6acfa141/modules/web-control-center/nodejs/controllers/admin-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/admin-controller.js b/modules/web-control-center/nodejs/controllers/admin-controller.js
index 2d85208..e6065c0 100644
--- a/modules/web-control-center/nodejs/controllers/admin-controller.js
+++ b/modules/web-control-center/nodejs/controllers/admin-controller.js
@@ -15,13 +15,13 @@
  * limitations under the License.
  */
 
-controlCenterModule.controller('adminController', ['$scope', '$http', 'commonFunctions', function ($scope, $http, commonFunctions) {
-        $scope.userList = null;
+controlCenterModule.controller('adminController', ['$scope', '$http', '$confirm', 'commonFunctions', function ($scope, $http, $confirm, commonFunctions) {
+        $scope.users = null;
 
         function reload() {
             $http.post('admin/list')
                 .success(function (data) {
-                    $scope.userList = data;
+                    $scope.users = data;
                 })
                 .error(function (errMsg) {
                     commonFunctions.showError(commonFunctions.errorMessage(errMsg));
@@ -31,19 +31,21 @@ controlCenterModule.controller('adminController', ['$scope', '$http', 'commonFun
         reload();
 
         $scope.removeUser = function (user) {
-            if (!confirm("Are you sure you want to delete user " + user.username + "?"))
-                return false;
+            $confirm.show("Are you sure you want to delete user: '" + user.username + "'?").then(function() {
+                $http.post('admin/remove', {userId: user._id}).success(
+                    function () {
+                        var i = _.findIndex($scope.users, function (u) {
+                            return u._id == user._id;
+                        });
 
-            $http.post('admin/remove', {userId: user._id}).success(
-                function (data) {
-                    reload();
+                        if (i >= 0)
+                            $scope.users.splice(i, 1);
 
-                    commonFunctions.showInfo("User has been removed: " + user.username);
-                }).error(function (errMsg) {
-                    commonFunctions.showError("Failed to remove user: " + commonFunctions.errorMessage(errMsg));
-                });
-
-            return false;
+                        commonFunctions.showInfo("User has been removed: '" + user.username + "'");
+                    }).error(function (errMsg) {
+                        commonFunctions.showError("Failed to remove user: " + commonFunctions.errorMessage(errMsg));
+                    });
+            });
         };
 
         $scope.toggleAdmin = function (user) {
@@ -52,15 +54,15 @@ controlCenterModule.controller('adminController', ['$scope', '$http', 'commonFun
 
             user.adminChanging = true;
 
-            $http.post('admin/save', {userId: user._id, adminFlag: user.admin}).success(
-                function (data) {
-                    reload();
+            $http.post('admin/save', {userId: user._id, adminFlag: !user.admin}).success(
+                function () {
+                    commonFunctions.showInfo("Admin right was successfully toggled for user: '" + user.username + "'");
 
-                    adminChanging = false;
+                    user.adminChanging = false;
                 }).error(function (errMsg) {
-                    commonFunctions.showError("Failed to remove user: " + commonFunctions.errorMessage(errMsg));
+                    commonFunctions.showError("Failed to toggle admin right for user: " + commonFunctions.errorMessage(errMsg));
 
-                    adminChanging = false;
+                    user.adminChanging = false;
                 });
         }
     }]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6acfa141/modules/web-control-center/nodejs/controllers/clusters-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/clusters-controller.js b/modules/web-control-center/nodejs/controllers/clusters-controller.js
index 10e0135..a983602 100644
--- a/modules/web-control-center/nodejs/controllers/clusters-controller.js
+++ b/modules/web-control-center/nodejs/controllers/clusters-controller.js
@@ -204,6 +204,8 @@ controlCenterModule.controller('clustersController', ['$scope', '$http', 'common
                         $scope.selectedItem = undefined;
                         $scope.backupItem = undefined;
                     }
+
+                    commonFunctions.showInfo("Cluster has been removed: " + $scope.selectedItem.label);
                 })
                 .error(function (errMsg) {
                     commonFunctions.showError(errMsg);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6acfa141/modules/web-control-center/nodejs/controllers/common-module.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/common-module.js b/modules/web-control-center/nodejs/controllers/common-module.js
index fa230db..94ec8db 100644
--- a/modules/web-control-center/nodejs/controllers/common-module.js
+++ b/modules/web-control-center/nodejs/controllers/common-module.js
@@ -90,6 +90,42 @@ controlCenterModule.service('commonFunctions', ['$alert', function ($alert) {
     }
 }]);
 
+controlCenterModule.config(function($modalProvider) {
+    angular.extend($modalProvider.defaults, {
+        html: true
+    });
+});
+
+controlCenterModule.service('$confirm', function($modal, $rootScope, $q) {
+    var scope = $rootScope.$new();
+
+    var deferred;
+
+    scope.title = 'Confirmation';
+
+    scope.ok = function() {
+        deferred.resolve();
+
+        confirm.hide();
+    };
+
+    var confirm = $modal({template: '/confirm', scope: scope, placement: 'center', show: false});
+
+    var parentShow = confirm.show;
+
+    confirm.show = function(content) {
+        scope.content = content || 'Confirm deletion?';
+
+        deferred = $q.defer();
+
+        parentShow();
+
+        return deferred.promise;
+    };
+
+    return confirm;
+});
+
 controlCenterModule.config(function ($tooltipProvider) {
     angular.extend($tooltipProvider.defaults, {
         container: 'body',

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6acfa141/modules/web-control-center/nodejs/public/stylesheets/style.css
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/public/stylesheets/style.css b/modules/web-control-center/nodejs/public/stylesheets/style.css
index 6220387..dbee424 100644
--- a/modules/web-control-center/nodejs/public/stylesheets/style.css
+++ b/modules/web-control-center/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%;transform:translateX(-50%) translateY(-50%)}.border-left{box-shadow:1px 0 0 0 #eee inset}.border-right{box-shadow:1px 0 0 0 #eee}.theme-line{background-color:#f9f9f9}.theme-line header{background-color:#fff}.theme-line header a.btn{border:0 none;padding: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,25
 5,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 .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:22px}.theme-line .btn-pr
 imary{border:0 none;background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .nav-horizontal a{box-shadow:0 0;border:0 none;background-color:#fff;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 ul li>a.active{cursor:default;pointer-events:none}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:14px;margin:3px 0 0}.theme-line .sidebar-nav ul li{color:#666;line-height:28px}.theme-line .sidebar-nav ul li span.fa-stack{margin-right:5px;font-size:12px;height:26px}.theme-line .sidebar-nav ul li a{font-size:18px;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-nav ul li a:hover{text-decoration:none}.the
 me-line .select li a,.theme-line .typeahead li a{color:#666;background-color:transparent}.theme-line .select li a:hover,.theme-line .typeahead li a:hover{color:#ec1c24;background-color:transparent}.theme-line .select .active,.theme-line .typeahead .active{background-color:#eee}.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:0}.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:5px 15px 0 0}.header h1.navbar-brand a{text-indent:-99999px;background:no-repeat center center;display:block;width:100%;height:100%;background-size:c
 ontain}.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;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}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header p{color:#666}.theme-line header{border-bottom-color:#ec1c24}.theme-line .navbar-nav{color:#888}.theme-
 line .navbar-nav a{color:#bbb}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line .navbar-nav .active a{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:#666}.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 .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:#ec1c24}.theme-line header .navbar-nav a{font-size:18px}.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}.theme-line .section-right{padding-left:30px}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;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-align:right;padding-bottom:5px}.container-footer{margin-top:20px}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:0.65em;right:0.65em;float:none}.modal-header .close{margin-right:-2px}.modal .modal-dialog{width:610px}.modal .modal-content{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{color:#aaa;font-size:1em;margin:3px 0 0}.modal .modal-content .modal-spacer{padding:10px 10px 0 10
 px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:15px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 230px)}@media (min-width:768px){.navbar-nav>li>a{padding-top:18px;padding-bottom:10px}}.details-row{padding:0 0.65em}.details-row,.settings-row{display:block;margin:0.65em 0}.details-row label.table-header,.settings-row label.table-header{line-height:28px}.details-row [class*="col-"],.settings-row [class*="col-"]{display:inline-block;vertical-align:middle;float:none;padding-left:0 !important;padding-right:0 !important}.details-row input[type="checkbox"],.settings-row input[type="checkbox"]{line-height:20px;margin-right:4px}.details-row .checkbox label,.settings-row .checkbox label{line-height:20px;vertical-align:middle}button{margin-right:4px}h1,h2,h3{user-select:none;font-weight:norm
 al;line-height:1}h3{color:black;font-size:1.2em;margin-top:0;margin-bottom:1.5em}table tr:hover{cursor:pointer}.form-control{display:inline-block;text-align:left;padding:3px 3px;height:28px}.form-control button{text-align:left}.table-form-control{width:auto}button .caret{float:right;margin-left:0;margin-top:7px}.theme-line .panel-heading{padding:10px 10px;margin:0}.theme-line .panel-heading h3{margin-bottom:0}.theme-line .panel-heading h3>a{color:black}.theme-line .panel-title a{color:#ec1c24}.theme-line .panel-title h3{margin-bottom:1.3em}.theme-line .panel-body{padding:0.65em 1.3em}.theme-line .main-content a.customize{margin-left:5px;color:#ec1c24}.theme-line .panel-collapse{margin:0}.theme-line .links table,.theme-line table.links-edit,.theme-line table.links-edit-details,.theme-line table.links-edit-small-padding{display:table;table-layout:fixed;margin-bottom:20px}.theme-line .links table td,.theme-line table.links-edit td,.theme-line table.links-edit-details td,.theme-line tab
 le.links-edit-small-padding td{padding-left:18px}.theme-line .links table .active a,.theme-line table.links-edit .active a,.theme-line table.links-edit-details .active a,.theme-line table.links-edit-small-padding .active a{color:#ec1c24;font-weight:bold}.theme-line .links table a:hover,.theme-line table.links-edit a:hover,.theme-line table.links-edit-details a:hover,.theme-line table.links-edit-small-padding a:hover{color:#950d12}.theme-line .links table a,.theme-line table.links-edit a,.theme-line table.links-edit-details a,.theme-line table.links-edit-small-padding a{color:#666}.theme-line table.links-edit{margin-bottom:10px}.theme-line table.links-edit label{line-height:28px;color:#666}.theme-line table.links-edit-details{margin-bottom:10px}.theme-line table.links-edit-details label{line-height:28px;color:#666}.theme-line table.links-edit-details td{padding:0}.theme-line table.links-edit-details td .input-tip{padding:0}.btn{padding:3px 6px}.panel-title a{font-size:14px}.panel-det
 ails{margin-top:0.65em;padding:0;border-radius:4px;border:thin dotted lightgrey}.tooltip.right .tooltip-arrow{border-right-color:#ec1c24}.tooltip>.tooltip-inner{max-width:400px;text-align:left;background-color:#ec1c24}label{font-weight:normal;margin-bottom:0}.form-horizontal .checkbox{padding-top:0}.input-tip{display:block;overflow:hidden}.labelField{float:left;margin-right:4px}.labelFormField{float:left;line-height:28px}.stackTipField{float:right;line-height:28px;margin-left:5px}.form-horizontal .form-group{margin:0}.form-horizontal .has-feedback .form-control-feedback{right:0}.tipField{float:right;line-height:28px;margin-left:5px}.tipLabel{font-size:14px;margin-left:5px}.fieldButton{float:right;margin-left:5px;margin-right:0}.fa-remove{color:#ec1c24;cursor:pointer}label.required:after{color:#ec1c24;content:' *';display:inline}.blank{visibility:hidden}.alert{outline:0}.alert.bottom,.alert.bottom-left,.alert.bottom-right,.alert.top,.alert.top-left,.alert.top-right{position:fixed;z-i
 ndex:1050;margin:20px}.alert.top,.alert.top-left,.alert.top-right{top:50px}.alert.top{right:0;left:0}.alert.top-right{right:0}.alert.top-right .close{padding-left:10px}.alert.top-left{left:0}.alert.top-left .close{padding-right:10px}.alert.bottom,.alert.bottom-left,.alert.bottom-right{bottom:0}.alert.bottom{right:0;left:0}.alert.bottom-right{right:0}.alert.bottom-right .close{padding-left:10px}.alert.bottom-left{left:0}.alert.bottom-left .close{padding-right:10px}#cfgResult textarea{font-family:monospace;font-size:12px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type="number"]{-moz-appearance:textfield}input.ng-dirty.ng-invalid,button.ng-dirty.ng-invalid{border-color:#ec1c24}input.ng-dirty.ng-invalid :focus,button.ng-dirty.ng-invalid :focus{border-color:#ec1c24}.form-control-feedback{display:inline-block;color:#ec1c24;right:18px;line-height:28px;pointer-events:initial}.syntaxhighlighter{paddin
 g:10px 5px;border-radius:6px}.theme-line table.links-edit-small-padding{margin-top:10px}.theme-line table.links-edit-small-padding label{line-height:28px;color:#666}.theme-line table.links-edit-small-padding a{line-height:28px}.theme-line table.links-edit-small-padding input[type="checkbox"]{line-height:20px;margin-right:5px}.theme-line table.links-edit-small-padding .checkbox label{line-height:20px;vertical-align:middle}.theme-line table.links-edit-small-padding th{text-align:center}.theme-line table.links-edit-small-padding td{padding-left:10px}.configBox .nav>li>a{padding:5px 5px}.viewedUser{display:inline;padding:6px;margin:7px;border-radius:4px;background-color:#f8d5d8}a{cursor:pointer}
\ 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:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.border-left{box-shadow:1px 0 0 0 #eee inset}.border-right{box-shadow:1px 0 0 0 #eee}.theme-line{background-color:#f9f9f9}.theme-line header{background-color:#fff}.theme-line header a.btn{border:0 none;padding: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 .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:22px}.theme-li
 ne .btn-primary{border:0 none;background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .nav-horizontal a{box-shadow:0 0;border:0 none;background-color:#fff;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 ul li>a.active{cursor:default;pointer-events:none}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:14px;margin:3px 0 0}.theme-line .sidebar-nav ul li{color:#666;line-height:28px}.theme-line .sidebar-nav ul li span.fa-stack{margin-right:5px;font-size:12px;height:26px}.theme-line .sidebar-nav ul li a{font-size:18px;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-nav ul li a:hover{text-decoration
 :none}.theme-line .select li a,.theme-line .typeahead li a{color:#666;background-color:transparent}.theme-line .select li a:hover,.theme-line .typeahead li a:hover{color:#ec1c24;background-color:transparent}.theme-line .select .active,.theme-line .typeahead .active{background-color:#eee}.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:0}.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:5px 15px 0 0}.header h1.navbar-brand a{text-indent:-99999px;background:no-repeat center center;display:block;width:100%;height:100%;backgro
 und-size:contain}.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;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}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header p{color:#666}.theme-line header{border-bottom-color:#ec1c24}.theme-line .navbar-nav{color:#8
 88}.theme-line .navbar-nav a{color:#bbb}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line .navbar-nav .active a{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:#666}.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 .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:#950d
 12}.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:#ec1c24}.theme-line header .navbar-nav a{font-size:18px}.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}.theme-line .section-right{padding-left:30px}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;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-align:right;padding-bottom:5px}.container-footer{margin-top:20px}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:0.65em;right:0.65em;float:none}.modal-header .close{margin-right:-2px}.modal .modal-dialog{width:610px}.modal .modal-content{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{color:#aaa;font-size:1em;margin:3px 0 0}.modal .modal-content .modal-spacer{padding:10px
  10px 0 10px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:15px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 290px)}@media (min-width:768px){.navbar-nav>li>a{padding-top:18px;padding-bottom:10px}}.details-row{padding:0 0.65em}.details-row,.settings-row{display:block;margin:0.65em 0}.details-row label.table-header,.settings-row label.table-header{line-height:28px}.details-row [class*="col-"],.settings-row [class*="col-"]{display:inline-block;vertical-align:middle;float:none;padding-left:0 !important;padding-right:0 !important}.details-row input[type="checkbox"],.settings-row input[type="checkbox"]{line-height:20px;margin-right:4px}.details-row .checkbox label,.settings-row .checkbox label{line-height:20px;vertical-align:middle}button{margin-right:4px}h1,h2,h3{user-select:none;font-w
 eight:normal;line-height:1}h3{color:black;font-size:1.2em;margin-top:0;margin-bottom:1.5em}table tr:hover{cursor:pointer}.form-control{display:inline-block;text-align:left;padding:3px 3px;height:28px}.form-control button{text-align:left}.table-form-control{width:auto}button .caret{float:right;margin-left:0;margin-top:7px}.theme-line .panel-heading{padding:10px 10px;margin:0}.theme-line .panel-heading h3{margin-bottom:0}.theme-line .panel-heading h3>a{color:black}.theme-line .panel-title a{color:#ec1c24}.theme-line .panel-title h3{margin-bottom:1.3em}.theme-line .panel-body{padding:0.65em 1.3em}.theme-line .main-content a.customize{margin-left:5px;color:#ec1c24}.theme-line .panel-collapse{margin:0}.theme-line .links table,.theme-line table.links-edit,.theme-line table.links-edit-details,.theme-line table.links-edit-small-padding{display:table;table-layout:fixed;margin-bottom:20px}.theme-line .links table td,.theme-line table.links-edit td,.theme-line table.links-edit-details td,.them
 e-line table.links-edit-small-padding td{padding-left:18px}.theme-line .links table .active a,.theme-line table.links-edit .active a,.theme-line table.links-edit-details .active a,.theme-line table.links-edit-small-padding .active a{color:#ec1c24;font-weight:bold}.theme-line .links table a:hover,.theme-line table.links-edit a:hover,.theme-line table.links-edit-details a:hover,.theme-line table.links-edit-small-padding a:hover{color:#950d12}.theme-line .links table a,.theme-line table.links-edit a,.theme-line table.links-edit-details a,.theme-line table.links-edit-small-padding a{color:#666}.theme-line table.links-edit{margin-bottom:10px}.theme-line table.links-edit label{line-height:28px;color:#666}.theme-line table.links-edit-details{margin-bottom:10px}.theme-line table.links-edit-details label{line-height:28px;color:#666}.theme-line table.links-edit-details td{padding:0}.theme-line table.links-edit-details td .input-tip{padding:0}.theme-line table.admin{margin-bottom:10px}.theme-l
 ine table.admin thead>tr th.header{padding:0 0 0.65em}.theme-line table.admin thead>tr th.header div{padding:0}.theme-line table.admin label{line-height:28px;color:#666}.theme-line table.admin thead>tr th,.theme-line table.admin td{padding:0.65em 0.65em}.theme-line table.admin thead>tr th .input-tip,.theme-line table.admin td .input-tip{padding:0}.btn{padding:3px 6px}.panel-title a{font-size:14px}.panel-details{margin-top:0.65em;padding:0;border-radius:4px;border:thin dotted lightgrey}.tooltip.right .tooltip-arrow{border-right-color:#ec1c24}.tooltip>.tooltip-inner{max-width:400px;text-align:left;background-color:#ec1c24}label{font-weight:normal;margin-bottom:0}.form-horizontal .checkbox{padding-top:0}.input-tip{display:block;overflow:hidden}.labelField{float:left;margin-right:4px}.labelFormField{float:left;line-height:28px}.form-horizontal .form-group{margin:0}.form-horizontal .has-feedback .form-control-feedback{right:0}.tipField{float:right;line-height:28px;margin-left:5px}.tipLab
 el{font-size:14px;margin-left:5px}.fieldButton{float:right;margin-left:5px;margin-right:0}.fa-remove{color:#ec1c24;cursor:pointer}label.required:after{color:#ec1c24;content:' *';display:inline}.blank{visibility:hidden}.alert{outline:0}.alert.bottom,.alert.bottom-left,.alert.bottom-right,.alert.top,.alert.top-left,.alert.top-right{position:fixed;z-index:1050;margin:20px}.alert.top,.alert.top-left,.alert.top-right{top:50px}.alert.top{right:0;left:0}.alert.top-right{right:0}.alert.top-right .close{padding-left:10px}.alert.top-left{left:0}.alert.top-left .close{padding-right:10px}.alert.bottom,.alert.bottom-left,.alert.bottom-right{bottom:0}.alert.bottom{right:0;left:0}.alert.bottom-right{right:0}.alert.bottom-right .close{padding-left:10px}.alert.bottom-left{left:0}.alert.bottom-left .close{padding-right:10px}#cfgResult textarea{font-family:monospace;font-size:12px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{-webkit-appearance:none;ma
 rgin:0}input[type="number"]{-moz-appearance:textfield}input.ng-dirty.ng-invalid,button.ng-dirty.ng-invalid{border-color:#ec1c24}input.ng-dirty.ng-invalid :focus,button.ng-dirty.ng-invalid :focus{border-color:#ec1c24}.form-control-feedback{display:inline-block;color:#ec1c24;right:18px;line-height:28px;pointer-events:initial}.syntaxhighlighter{padding:10px 5px;border-radius:6px}.theme-line table.links-edit-small-padding{margin-top:10px}.theme-line table.links-edit-small-padding label{line-height:28px;color:#666}.theme-line table.links-edit-small-padding a{line-height:28px}.theme-line table.links-edit-small-padding input[type="checkbox"]{line-height:20px;margin-right:5px}.theme-line table.links-edit-small-padding .checkbox label{line-height:20px;vertical-align:middle}.theme-line table.links-edit-small-padding th{text-align:center}.theme-line table.links-edit-small-padding td{padding-left:10px}.configBox .nav>li>a{padding:5px 5px}.viewedUser{display:inline;padding:6px;margin:7px;border-
 radius:4px;background-color:#f8d5d8}a{cursor:pointer}.st-sort-ascent:after{content:'\25B2'}.st-sort-descent:after{content:'\25BC'}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6acfa141/modules/web-control-center/nodejs/public/stylesheets/style.less
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/public/stylesheets/style.less b/modules/web-control-center/nodejs/public/stylesheets/style.less
index 21e7a3d..30a97c9 100644
--- a/modules/web-control-center/nodejs/public/stylesheets/style.less
+++ b/modules/web-control-center/nodejs/public/stylesheets/style.less
@@ -53,11 +53,9 @@
 
 .modal.center .modal-dialog {
   position: fixed;
-  top: 40%;
+  top: 50%;
   left: 50%;
-  min-width: 320px;
-  max-width: 630px;
-  width: 50%;
+  -webkit-transform:translateX(-50%) translateY(-50%);
   transform: translateX(-50%) translateY(-50%);
 }
 
@@ -588,7 +586,7 @@ h1.ignite-logo {
 
 .greedy {
   min-height: 200px;
-  height: ~"calc(100vh - 230px)";
+  height: ~"calc(100vh - 290px)";
 }
 
 @media (min-width: 768px) {
@@ -760,6 +758,31 @@ button .caret {
   }
 }
 
+.theme-line table.admin {
+  thead > tr th.header {
+    padding: 0 0 0.65em;
+
+    div {
+      padding: 0
+    }
+  }
+
+  margin-bottom: 10px;
+
+  label {
+    line-height: @input-height;
+    color: #666;
+  }
+
+  thead > tr th, td {
+    padding: 0.65em 0.65em;
+
+    .input-tip {
+      padding: 0;
+    }
+  }
+}
+
 .btn {
   padding: 3px 6px;
 }
@@ -811,12 +834,6 @@ label {
   line-height: @input-height;
 }
 
-.stackTipField {
-  float: right;
-  line-height: @input-height;
-  margin-left: 5px;
-}
-
 .form-horizontal .form-group {
   margin: 0;
 }
@@ -1003,4 +1020,12 @@ input.ng-dirty.ng-invalid, button.ng-dirty.ng-invalid {
 
 a {
   cursor: pointer;
+}
+
+.st-sort-ascent:after{
+  content: '\25B2';
+}
+
+.st-sort-descent:after{
+  content: '\25BC';
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6acfa141/modules/web-control-center/nodejs/routes/public.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/public.js b/modules/web-control-center/nodejs/routes/public.js
index af4c74f..e7f342b 100644
--- a/modules/web-control-center/nodejs/routes/public.js
+++ b/modules/web-control-center/nodejs/routes/public.js
@@ -24,6 +24,11 @@ router.get('/select', function(req, res) {
     res.render('templates/select', { });
 });
 
+// GET dropdown-menu template.
+router.get('/confirm', function(req, res) {
+    res.render('templates/confirm', { });
+});
+
 /* GET login page. */
 router.get('/login', function(req, res) {
     res.render('login');

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6acfa141/modules/web-control-center/nodejs/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/controls.jade b/modules/web-control-center/nodejs/views/includes/controls.jade
index de2b76f..31324fe 100644
--- a/modules/web-control-center/nodejs/views/includes/controls.jade
+++ b/modules/web-control-center/nodejs/views/includes/controls.jade
@@ -74,14 +74,14 @@ mixin details-row
                     tr(ng-repeat='item in #{detailMdl} track by $index')
                         td
                             div(ng-show='detail.editIdx != {{$index}}')
-                                i.stackTipField.fa.fa-remove(ng-click='detail.editIdx = -1; #{detailMdl}.splice($index, 1)')
-                                i.stackTipField.fa.fa-arrow-down(ng-if='detail.reordering' ng-show='$index < #{detailMdl}.length - 1' ng-click='swapSimpleItems(#{detailMdl}, $index, $index + 1); detail.editIdx = -1;')
-                                i.stackTipField.fa.fa-arrow-up(ng-if='detail.reordering' ng-show='$index > 0' ng-click='swapSimpleItems(#{detailMdl}, $index, $index - 1); detail.editIdx = -1;')
+                                i.tipField.fa.fa-remove(ng-click='detail.editIdx = -1; #{detailMdl}.splice($index, 1)')
+                                i.tipField.fa.fa-arrow-down(ng-if='detail.reordering' ng-show='$index < #{detailMdl}.length - 1' ng-click='swapSimpleItems(#{detailMdl}, $index, $index + 1); detail.editIdx = -1;')
+                                i.tipField.fa.fa-arrow-up(ng-if='detail.reordering' ng-show='$index > 0' ng-click='swapSimpleItems(#{detailMdl}, $index, $index - 1); detail.editIdx = -1;')
                                 .input-tip
                                     a(ng-click='detail.editIdx = $index; curValue = #{detailMdl}[$index]') {{$index + 1}}) {{item}}
                             div(ng-show='detail.editIdx == {{$index}}')
                                 label.labelField {{$index + 1}})
-                                i.stackTipField.fa.fa-floppy-o(ng-click='#{detailMdl}[$index] = curValue ? curValue : #{detailMdl}[$index]; detail.editIdx = curValue ? -1 : detail.editIdx')
+                                i.tipField.fa.fa-floppy-o(ng-click='#{detailMdl}[$index] = curValue ? curValue : #{detailMdl}[$index]; detail.editIdx = curValue ? -1 : detail.editIdx')
                                 .input-tip.form-group.has-feedback
                                     input.form-control(name='{{detail.model}}.edit' type='text' ng-model='curValue' placeholder='{{detail.placeholder}}')&attributes(customValidators)
                                     +exclamation('{{detail.model}}.edit', 'ipaddress', 'Invalid address, see help for format description.')
@@ -162,7 +162,7 @@ mixin form-row
                                 i.tipField.fa.fa-remove(ng-click='field.editIdx = -1; #{fieldMdl}.splice($index, 1)')
                             div(ng-show='field.editIdx == {{$index}}')
                                 label.labelField {{$index + 1}})
-                                i.stackTipField.fa.fa-floppy-o(ng-click='#{fieldMdl}[$index] = curValue ? curValue : #{fieldMdl}[$index]; field.editIdx = curValue ? -1 : field.editIdx')
+                                i.tipField.fa.fa-floppy-o(ng-click='#{fieldMdl}[$index] = curValue ? curValue : #{fieldMdl}[$index]; field.editIdx = curValue ? -1 : field.editIdx')
                                 .input-tip
                                     input.form-control(type='text' ng-model='curValue' placeholder='{{field.placeholder}}')
                         td.col-sm-1(ng-if='field.reordering')

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6acfa141/modules/web-control-center/nodejs/views/settings/admin.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/settings/admin.jade b/modules/web-control-center/nodejs/views/settings/admin.jade
index 1986ca2..2bceab5 100644
--- a/modules/web-control-center/nodejs/views/settings/admin.jade
+++ b/modules/web-control-center/nodejs/views/settings/admin.jade
@@ -11,6 +11,7 @@
     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.
+
 extends ../templates/layout
 
 append scripts
@@ -23,30 +24,30 @@ block container
                 h1 List of registered users
                 hr
             .docs-body
-                table.table.table-striped(st-table='userListDisplay' st-safe-src='userList')
+                table.table.table-striped.admin(st-table='displayedUsers' st-safe-src='users')
                     thead
                         tr
-                            th(colspan='5')
-                                input.form-control(type='text' st-search='' class='' placeholder='Search ...')
+                            th.header(colspan='5')
+                                .col-sm-2.pull-right
+                                    input.form-control(type='text' st-search='' placeholder='Filter users...')
                         tr
                             th(st-sort='username') User name
                             th(st-sort='email') Email
-                            th(st-sort='lastLogin') Last login
-                            th(st-sort='lastLogin') Admin
-                            th(colspan='2') Actions
+                            th.col-sm-2(st-sort='lastLogin') Last login
+                            th(width='1%'  st-sort='admin') Admin
+                            th(width='1%') Actions
                     tbody
-                        tr(ng-repeat='user in userListDisplay')
+                        tr(ng-repeat='user in displayedUsers')
                             td {{user.username}}
                             td
                                 a(ng-href='mailto:{{user.email}}') {{user.email}}
                             td
-                                span.small {{user.lastLogin | date:'medium'}}
-                            td
+                                span {{user.lastLogin | date:'medium'}}
+                            td(style='text-align: center;')
                                 input(type='checkbox' ng-disabled='user.adminChanging || user._id == loggedInUser._id'
-                                ng-model='user.admin' ng-change='toggleAdmin(user)')
-                            td(width='1%')
+                                    ng-model='user.admin' ng-change='toggleAdmin(user)')
+                            td(style='text-align: center;')
                                 a(ng-click='removeUser(user)' ng-show='user._id != loggedInUser._id' title='Remove user')
-                                    span.glyphicon.glyphicon-remove(style='color: red')
-                            td(width='1%')
-                                a(ng-href='admin/become?viewedUserId={{user._id}}' ng-show='user._id != loggedInUser._id' title='View user\'s configurations')
-                                    span.glyphicon.glyphicon-eye-open
+                                    i.fa.fa-remove
+                                a(style='margin-left: 5px' ng-href='admin/become?viewedUserId={{user._id}}' ng-show='user._id != loggedInUser._id' title='View user\'s configurations')
+                                    i.fa.fa-eye

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6acfa141/modules/web-control-center/nodejs/views/templates/confirm.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/templates/confirm.jade b/modules/web-control-center/nodejs/views/templates/confirm.jade
new file mode 100644
index 0000000..7b338ad
--- /dev/null
+++ b/modules/web-control-center/nodejs/views/templates/confirm.jade
@@ -0,0 +1,27 @@
+//-
+    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.
+
+.modal(tabindex='-1' role='dialog')
+    .modal-dialog
+        .modal-content
+            .modal-header(ng-show='title')
+                button.close(type="button" ng-click="$hide()") &times;
+                h4.modal-title(ng-bind-html='title')
+            .modal-body(ng-show='content')
+                p(ng-bind-html='content' style='text-align: center;')
+            .modal-footer
+                button.btn.btn-default(type="button" ng-click="$hide()") Cancel
+                button.btn.btn-primary(type="button" ng-click="ok()") Confirm
\ No newline at end of file



[31/45] incubator-ignite git commit: Merge remote-tracking branch 'origin/ignite-843' into ignite-843

Posted by se...@apache.org.
Merge remote-tracking branch 'origin/ignite-843' into ignite-843


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

Branch: refs/heads/ignite-1121
Commit: 5c648aff9f31ae4c6b229a57ee341694322e9ed9
Parents: ce971e7 6ee8f34
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 13:01:29 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 13:01:29 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/models/summary.json      | 145 +++++++++++++++++++
 .../nodejs/controllers/summary-controller.js    |  94 +++++++++---
 .../nodejs/routes/generator/java.js             |  56 ++++---
 .../nodejs/routes/generator/xml.js              |  20 ++-
 .../web-control-center/nodejs/routes/summary.js |  33 +++--
 .../nodejs/views/configuration/summary.jade     | 129 +++++++++++------
 .../nodejs/views/settings/admin.jade            |   2 +-
 7 files changed, 379 insertions(+), 100 deletions(-)
----------------------------------------------------------------------



[33/45] incubator-ignite git commit: # ignite-843 Fixed download for summary page.

Posted by se...@apache.org.
# ignite-843 Fixed download for summary page.


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

Branch: refs/heads/ignite-1121
Commit: a1668d09087afb271b58fcc7eba78a3bd9d7d361
Parents: 6ee8f34
Author: Andrey <an...@gridgain.com>
Authored: Wed Jul 15 15:24:26 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Wed Jul 15 15:24:26 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/summary-controller.js    |  22 +--
 .../web-control-center/nodejs/routes/summary.js |  16 +-
 .../nodejs/views/configuration/summary.jade     | 178 ++++++++++---------
 .../nodejs/views/templates/layout.jade          |   8 +-
 4 files changed, 114 insertions(+), 110 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a1668d09/modules/web-control-center/nodejs/controllers/summary-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/summary-controller.js b/modules/web-control-center/nodejs/controllers/summary-controller.js
index c38a84f..9da6f59 100644
--- a/modules/web-control-center/nodejs/controllers/summary-controller.js
+++ b/modules/web-control-center/nodejs/controllers/summary-controller.js
@@ -157,25 +157,27 @@ controlCenterModule.controller('summaryController', ['$scope', '$http', 'commonF
         $scope.clusters = data.clusters;
 
         if ($scope.clusters.length > 0) {
-            var restoredItem = angular.fromJson(sessionStorage.summaryBackupItem);
+            var restoredId = sessionStorage.summarySelectedId;
 
             var selectIdx = 0;
 
-            if (restoredItem && restoredItem._id) {
-                var idx = _.findIndex($scope.clusters, function (clusters) {
-                    return clusters._id == restoredItem._id;
+            if (restoredId) {
+                var idx = _.findIndex($scope.clusters, function (cluster) {
+                    return cluster._id == restoredId;
                 });
 
                 if (idx >= 0)
                     selectIdx = idx;
+                else
+                    delete sessionStorage.summarySelectedId;
             }
 
-            $scope.generate($scope.clusters[selectIdx]);
-        }
+            $scope.selectItem($scope.clusters[selectIdx]);
 
-        $scope.$watch('selectedItem', function (val) {
-            if (val)
-                sessionStorage.summaryBackupItem = angular.toJson(val);
-        }, true);
+            $scope.$watch('selectedItem', function (val) {
+                if (val)
+                    sessionStorage.summarySelectedId = val._id;
+            }, true);
+        }
     });
 }]);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a1668d09/modules/web-control-center/nodejs/routes/summary.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/summary.js b/modules/web-control-center/nodejs/routes/summary.js
index 8e56c81..1cb36c0 100644
--- a/modules/web-control-center/nodejs/routes/summary.js
+++ b/modules/web-control-center/nodejs/routes/summary.js
@@ -63,7 +63,7 @@ router.post('/download', function (req, res) {
         if (!cluster)
             return res.sendStatus(404);
 
-        var client = req.body.type == 'client';
+        var clientCache = req.body.clientTemplate;
 
         var archiver = require('archiver');
 
@@ -82,26 +82,26 @@ router.post('/download', function (req, res) {
         });
 
         //set the archive name
-        res.attachment(cluster.name + '-configuration.zip');
+        res.attachment(cluster.name + (clientCache ? '-client' : '') + '-configuration.zip');
 
         var generatorCommon = require('./generator/common');
 
-        var javaClass = req.body.javaClass;
-
         // Send the file to the page output.
         zip.pipe(res);
 
-        if (!client) {
+        var javaClass = req.body.javaClass;
+
+        if (!clientCache) {
             zip.append(generatorDocker.generateClusterConfiguration(cluster, req.body.os), {name: "Dockerfile"});
 
-            var props = generatorCommon.generateProperties(cluster, client);
+            var props = generatorCommon.generateProperties(cluster);
 
             if (props)
                 zip.append(props, {name: "secret.properties"});
         }
 
-        zip.append(generatorXml.generateClusterConfiguration(cluster, client), {name: cluster.name + ".xml"})
-            .append(generatorJava.generateClusterConfiguration(cluster, client, req.body.javaClass),
+        zip.append(generatorXml.generateClusterConfiguration(cluster, clientCache), {name: cluster.name + ".xml"})
+            .append(generatorJava.generateClusterConfiguration(cluster, javaClass, clientCache),
                 {name: javaClass ? 'ConfigurationFactory.java' : cluster.name + '.snipplet.java'})
             .finalize();
     });

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a1668d09/modules/web-control-center/nodejs/views/configuration/summary.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/summary.jade b/modules/web-control-center/nodejs/views/configuration/summary.jade
index 8e43441..6875110 100644
--- a/modules/web-control-center/nodejs/views/configuration/summary.jade
+++ b/modules/web-control-center/nodejs/views/configuration/summary.jade
@@ -37,13 +37,14 @@ block content
         h1 Configurations summary
         hr
     .docs-body(ng-controller='summaryController')
-        .block-callout
-            p(ng-bind-html='joinTip(screenTip)')
-        div(ng-show='clusters.length == 0')
+        div
+            .block-callout
+                p(ng-bind-html='joinTip(screenTip)')
+        div(ng-if='clusters.length == 0')
             | No cluster configured. You can&nbsp;
             a(href='clusters') configure
             | &nbsp;it.
-        div(ng-show='clusters.length > 0')
+        div(ng-if='clusters.length > 0')
             p Following cluster configurations were created, you can download them as XML, java code or as docker file.
             .links
                 table.col-sm-12(st-table='clusters')
@@ -51,88 +52,89 @@ block content
                         tr(ng-repeat='row in clusters track by row._id')
                             td.col-sm-6(ng-class='{active: row._id == selectedItem._id}')
                                 a(ng-click='selectItem(row)') {{$index + 1}}) {{row.name}}
-        hr
-        panel-group(bs-collapse ng-show='selectedItem && !generateError' data-allow-multiple="true")
-            .panel.panel-default
-                form.panel-heading(role="tab")(method='post' action='summary/download')
-                    input(type="hidden" name="_id" value="{{selectedItem._id}}")
-                    input(type="hidden" name="javaClassServer" value="{{javaClassServer}}")
-                    input(type="hidden" name="os" value="{{os}}")
-
-                    h3
-                        a(bs-collapse-toggle) Server
-                        button.btn.btn-primary.pull-right(type='submit' style='margin-top: -5px') Download
-                .panel-collapse(role="tabpanel" bs-collapse-target)
-                    .panel-body
-                        .configBox(ng-show='selectedItem && !generateError')
-                            ul.nav.nav-tabs
-                                li(ng-class='{active: cfgLangServer == "xml"}')
-                                    a(href, ng-click='cfgLangServer = "xml"')
-                                        img(src='/images/xml.png', width='16px' height='16px')
-                                        |  XML
-                                li(ng-class='{active: cfgLangServer =="java"}')
-                                    a(href, ng-click='cfgLangServer = "java"')
-                                        img(src='/images/java.png', width='16px' height='16px')
-                                        |  Java
-                                li(ng-class="{active: cfgLangServer =='docker'}")
-                                    a(href, ng-click='cfgLangServer = "docker"')
-                                        img(src='/images/docker.png', width='16px' height='16px')
-                                        |  Dockerfile
-                            .settings-row
-                                div(ng-show="cfgLangServer == 'xml'")
-                                    #xmlServer
-                                div(ng-show="cfgLangServer == 'java'")
-                                    .col-sm-1
-                                        label Generate:
-                                    .col-sm-3
-                                        button.form-control(type='button' ng-model='javaClassServer' bs-select data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in javaClassItems' data-sort='false')
-                                    #javaServer
-                                div(ng-show="cfgLangServer == 'docker'")
-                                    p
-                                        a(style='color:#ec1c24' href='https://docs.docker.com/reference/builder' target="_blank") Docker
-                                        | &nbsp;file is a text file with instructions to create Docker image.<br/>
-                                        | To build image you have to store following Docker file with your Ignite XML configuration to the same directory.<br>
-                                        | Also you could use predefined&nbsp;
-                                        a(style='color:#ec1c24' href='https://ignite.incubator.apache.org/download.html#docker' target="_blank") Apache Ignite docker image
-                                        | . For more information about using Ignite with Docker please read&nbsp;
-                                        a(style='color:#ec1c24' href='http://apacheignite.readme.io/docs/docker-deployment' target="_blank") documentation
-                                        |.
-                                    .col-sm-2
-                                        label(for='os') Operation System:
-                                    .col-sm-4
-                                        input#os.form-control(type='text', ng-model='os' placeholder='debian:8' data-min-length="0" data-html="1" data-auto-select="true" data-animation="am-flip-x" bs-typeahead bs-options='os for os in oss')
-                                    .settings-row#docker(style='margin-top: 15px')
-                                div(ng-show='generateError') {{generateError}}
-            .panel.panel-default
-                form.panel-heading(role="tab")
-                    input(type="hidden" name="_id" value="{{selectedItem._id}}")
-                    input(type="hidden" name="javaClassClient" value="{{javaClassClient}}")
-                    input(type="hidden" name="clientSettings" value="{{backupItem}}")
+        br
+        br
+        br
+        div(ng-show='selectedItem && generated' role="tab" method='post' action='summary/download')
+            div(bs-collapse data-start-collapsed='false')
+                .panel.panel-default
+                    form.panel-heading(role='tab' method='post' action='summary/download')
+                        input(type="hidden" name="_id" value="{{selectedItem._id}}")
+                        input(type="hidden" name="os" value="{{os}}")
+                        input(type="hidden" name="javaClass" value="{{javaClassServer}}")
+                        h3
+                            a(bs-collapse-toggle) Server
+                            button.btn.btn-primary.pull-right(type='submit' style='margin-top: -5px') Download
+                    .panel-collapse(role="tabpanel" bs-collapse-target)
+                        .panel-body
+                            .configBox(ng-show='selectedItem && !generateError')
+                                ul.nav.nav-tabs
+                                    li(ng-class='{active: cfgLangServer == "xml"}')
+                                        a(href, ng-click='cfgLangServer = "xml"')
+                                            img(src='/images/xml.png', width='16px' height='16px')
+                                            |  XML
+                                    li(ng-class='{active: cfgLangServer =="java"}')
+                                        a(href, ng-click='cfgLangServer = "java"')
+                                            img(src='/images/java.png', width='16px' height='16px')
+                                            |  Java
+                                    li(ng-class="{active: cfgLangServer =='docker'}")
+                                        a(href, ng-click='cfgLangServer = "docker"')
+                                            img(src='/images/docker.png', width='16px' height='16px')
+                                            |  Dockerfile
+                                .settings-row
+                                    div(ng-show="cfgLangServer == 'xml'")
+                                        #xmlServer
+                                    div(ng-show="cfgLangServer == 'java'")
+                                        .col-sm-1
+                                            label Generate:
+                                        .col-sm-3
+                                            button.form-control(type='button' ng-model='javaClassServer' bs-select data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in javaClassItems' data-sort='false')
+                                        #javaServer
+                                    div(ng-show="cfgLangServer == 'docker'")
+                                        p
+                                            a(style='color:#ec1c24' href='https://docs.docker.com/reference/builder' target="_blank") Docker
+                                            | &nbsp;file is a text file with instructions to create Docker image.<br/>
+                                            | To build image you have to store following Docker file with your Ignite XML configuration to the same directory.<br>
+                                            | Also you could use predefined&nbsp;
+                                            a(style='color:#ec1c24' href='https://ignite.incubator.apache.org/download.html#docker' target="_blank") Apache Ignite docker image
+                                            | . For more information about using Ignite with Docker please read&nbsp;
+                                            a(style='color:#ec1c24' href='http://apacheignite.readme.io/docs/docker-deployment' target="_blank") documentation
+                                            |.
+                                        .col-sm-2
+                                            label(for='os') Operation System:
+                                        .col-sm-4
+                                            input#os.form-control(type='text', ng-model='os' placeholder='debian:8' data-min-length="0" data-html="1" data-auto-select="true" data-animation="am-flip-x" bs-typeahead bs-options='os for os in oss')
+                                        .settings-row#docker(style='margin-top: 15px')
+            div(bs-collapse data-start-collapsed='false')
+                .panel.panel-default
+                    form.panel-heading(role='tab' method='post' action='summary/download')
+                        input(type="hidden" name="_id" value="{{selectedItem._id}}")
+                        input(type="hidden" name="javaClass" value="{{javaClassClient}}")
+                        input(type="hidden" name="clientTemplate" value="{{backupItem}}")
 
-                    h3
-                        a(bs-collapse-toggle) Client
-                        button.btn.btn-primary.pull-right(type='submit' style='margin-top: -5px') Download
-                .panel-collapse(role="tabpanel" bs-collapse-target)
-                    .panel-body
-                        .configBox(ng-show='selectedItem && !generateError')
-                            .settings-row(ng-repeat='field in clientFields')
-                                +form-row
-                            ul.nav.nav-tabs
-                                li(ng-class='{active: cfgLangClient == "xml"}')
-                                    a(href, ng-click='cfgLangClient = "xml"')
-                                        img(src='/images/xml.png', width='16px' height='16px')
-                                        |  XML
-                                li(ng-class='{active: cfgLangClient =="java"}')
-                                    a(href, ng-click='cfgLangClient = "java"')
-                                        img(src='/images/java.png', width='16px' height='16px')
-                                        |  Java
-                            .settings-row
-                                div(ng-show="cfgLangClient == 'xml'")
-                                    #xmlClient
-                                div(ng-show="cfgLangClient == 'java'")
-                                    .col-sm-1
-                                        label Generate:
-                                    .col-sm-4
-                                        button.form-control(type='button' ng-model='javaClassClient' bs-select data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in javaClassItems' data-sort='false')
-                                    #javaClient
-                            div(ng-show='generateError') {{generateError}}
\ No newline at end of file
+                        h3
+                            a(bs-collapse-toggle) Client
+                            button.btn.btn-primary.pull-right(type='submit' style='margin-top: -5px') Download
+                    .panel-collapse(role="tabpanel" bs-collapse-target)
+                        .panel-body
+                            .configBox(ng-show='selectedItem && !generateError')
+                                .settings-row(ng-repeat='field in clientFields')
+                                    +form-row
+                                ul.nav.nav-tabs
+                                    li(ng-class='{active: cfgLangClient == "xml"}')
+                                        a(href, ng-click='cfgLangClient = "xml"')
+                                            img(src='/images/xml.png', width='16px' height='16px')
+                                            |  XML
+                                    li(ng-class='{active: cfgLangClient =="java"}')
+                                        a(href, ng-click='cfgLangClient = "java"')
+                                            img(src='/images/java.png', width='16px' height='16px')
+                                            |  Java
+                                .settings-row
+                                    div(ng-show="cfgLangClient == 'xml'")
+                                        #xmlClient
+                                    div(ng-show="cfgLangClient == 'java'")
+                                        .col-sm-1
+                                            label Generate:
+                                        .col-sm-4
+                                            button.form-control(type='button' ng-model='javaClassClient' bs-select data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in javaClassItems' data-sort='false')
+                                        #javaClient

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a1668d09/modules/web-control-center/nodejs/views/templates/layout.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/templates/layout.jade b/modules/web-control-center/nodejs/views/templates/layout.jade
index f9ec5d6..1bcaff7 100644
--- a/modules/web-control-center/nodejs/views/templates/layout.jade
+++ b/modules/web-control-center/nodejs/views/templates/layout.jade
@@ -36,10 +36,10 @@ html(ng-app='ignite-web-control-center', ng-init='user = #{JSON.stringify(user)}
 
             script(src='//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.min.js')
 
-            script(src='//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js')
-            script(src='//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-sanitize.js')
-            script(src='//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.js')
-            script(src='//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.tpl.min.js')
+            script(src='//ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular.js')
+            script(src='//cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular-sanitize.js')
+            script(src='//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.3.0/angular-strap.js')
+            script(src='//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.3.0/angular-strap.tpl.min.js')
 
             script(src='https://cdnjs.cloudflare.com/ajax/libs/angular-smart-table/2.0.3/smart-table.js')
 


[27/45] incubator-ignite git commit: IGNITE-843 Added note about AWS credentials.

Posted by se...@apache.org.
IGNITE-843 Added note about AWS credentials.


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

Branch: refs/heads/ignite-1121
Commit: 3e59cb1df73c2d23926225c4ebc264a1e80df864
Parents: 056e25a
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 10:49:15 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 10:49:15 2015 +0700

----------------------------------------------------------------------
 .../web-control-center/nodejs/controllers/models/clusters.json   | 4 ++++
 modules/web-control-center/nodejs/views/includes/controls.jade   | 4 ++++
 2 files changed, 8 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3e59cb1d/modules/web-control-center/nodejs/controllers/models/clusters.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/clusters.json b/modules/web-control-center/nodejs/controllers/models/clusters.json
index e480e9d..87cb526 100644
--- a/modules/web-control-center/nodejs/controllers/models/clusters.json
+++ b/modules/web-control-center/nodejs/controllers/models/clusters.json
@@ -145,6 +145,10 @@
               "tip": [
                 "Bucket name for IP finder."
               ]
+            },
+            {
+              "label": "Note, AWS credentials will be generated as stubs.",
+              "type": "label"
             }
           ]
         },

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3e59cb1d/modules/web-control-center/nodejs/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/controls.jade b/modules/web-control-center/nodejs/views/includes/controls.jade
index 0fcf78a..6edb16a 100644
--- a/modules/web-control-center/nodejs/views/includes/controls.jade
+++ b/modules/web-control-center/nodejs/views/includes/controls.jade
@@ -34,6 +34,8 @@ mixin details-row
     - var customValidators = {'ng-attr-ipaddress': '{{detail.ipaddress}}'}
 
     div(ng-switch='detail.type')
+        div(ng-switch-when='label')
+            label {{detail.label}}
         div.checkbox(ng-switch-when='check')
             label
                 input(type='checkbox')&attributes(detailCommon)
@@ -100,6 +102,8 @@ mixin form-row
     - var fieldHide = '{{field.hide}}'
 
     div(ng-switch='field.type')
+        div.col-sm-6(ng-switch-when='label')
+            label {{field.label}}
         div.checkbox.col-sm-6(ng-switch-when='check' ng-hide=fieldHide)
             label
                 input(type='checkbox' ng-checked='field.placeholder')&attributes(fieldCommon)


[06/45] incubator-ignite git commit: IGNITE-843: Fixed cache memory required settings and code generation.

Posted by se...@apache.org.
IGNITE-843: Fixed cache memory required settings and code generation.


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

Branch: refs/heads/ignite-1121
Commit: 777ec16f3fb2e28f45811a935f1e3e2d52de43fa
Parents: 88cfa4e
Author: AKuznetsov <ak...@gridgain.com>
Authored: Mon Jul 13 22:46:34 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Mon Jul 13 22:46:34 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/caches-controller.js       | 18 +++++++-----------
 .../nodejs/routes/generator/common.js             |  4 ++++
 .../nodejs/routes/generator/java.js               |  2 +-
 .../nodejs/routes/generator/xml.js                |  8 +++-----
 4 files changed, 15 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/777ec16f/modules/web-control-center/nodejs/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/caches-controller.js b/modules/web-control-center/nodejs/controllers/caches-controller.js
index 29564c7..52fdcf9 100644
--- a/modules/web-control-center/nodejs/controllers/caches-controller.js
+++ b/modules/web-control-center/nodejs/controllers/caches-controller.js
@@ -92,21 +92,17 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
             var backupItem = $scope.backupItem;
 
             var memoryMode = backupItem.memoryMode;
-            var offHeapMaxMemory = backupItem.offHeapMaxMemory;
 
-            if (model == 'offHeapMaxMemory') {
-                var oft = memoryMode == 'OFFHEAP_TIERED';
+            var onHeapTired = memoryMode == 'ONHEAP_TIERED';
+            var offHeapTired = memoryMode == 'OFFHEAP_TIERED';
 
-                if (oft && !commonFunctions.isDefined(offHeapMaxMemory))
-                    backupItem.offHeapMaxMemory = 0;
+            var offHeapMaxMemory = backupItem.offHeapMaxMemory;
 
-                return oft;
-            }
+            if (model == 'offHeapMaxMemory' && offHeapTired)
+                return true;
 
-            if (model == 'evictionPolicy.kind') {
-                return memoryMode == 'ONHEAP_TIERED' &&  backupItem.swapEnabled ||
-                    (commonFunctions.isDefined(offHeapMaxMemory) && offHeapMaxMemory >= 0);
-            }
+            if (model == 'evictionPolicy.kind' && onHeapTired)
+                return backupItem.swapEnabled || (commonFunctions.isDefined(offHeapMaxMemory) && offHeapMaxMemory >= 0);
 
             return false;
         };

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/777ec16f/modules/web-control-center/nodejs/routes/generator/common.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/generator/common.js b/modules/web-control-center/nodejs/routes/generator/common.js
index f4f10d4..ed65d6b 100644
--- a/modules/web-control-center/nodejs/routes/generator/common.js
+++ b/modules/web-control-center/nodejs/routes/generator/common.js
@@ -17,6 +17,10 @@
 
 var _ = require('lodash');
 
+exports.isDefined = function (v) {
+    return !(v === undefined || v === null);
+};
+
 exports.mainComment = mainComment;
 
 function mainComment() {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/777ec16f/modules/web-control-center/nodejs/routes/generator/java.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/generator/java.js b/modules/web-control-center/nodejs/routes/generator/java.js
index 80d3d02..b79ba66 100644
--- a/modules/web-control-center/nodejs/routes/generator/java.js
+++ b/modules/web-control-center/nodejs/routes/generator/java.js
@@ -490,7 +490,7 @@ function toJavaCode(val, type) {
 function addProperty(res, obj, objVariableName, propName, enumType, setterName) {
     var val = obj[propName];
     
-    if (val) {
+    if (generatorUtils.isDefined(val)) {
         res.emptyLineIfNeeded();
 
         res.line(objVariableName + '.' + getSetterName(setterName ? setterName : propName)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/777ec16f/modules/web-control-center/nodejs/routes/generator/xml.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/generator/xml.js b/modules/web-control-center/nodejs/routes/generator/xml.js
index 24657e4..07988ac 100644
--- a/modules/web-control-center/nodejs/routes/generator/xml.js
+++ b/modules/web-control-center/nodejs/routes/generator/xml.js
@@ -454,7 +454,7 @@ exports.generateCacheConfiguration = generateCacheConfiguration;
 function addProperty(res, obj, propName, setterName) {
     var val = obj[propName];
 
-    if (val) {
+    if (generatorUtils.isDefined(val)) {
         res.emptyLineIfNeeded();
 
         res.line('<property name="' + (setterName ? setterName : propName) + '" value="' + escapeAttr(val) + '"/>');
@@ -503,13 +503,11 @@ function addBeanWithProperties(res, bean, beanPropName, beanClass, props, create
                             res.endBlock('</property>');
                         }
                     }
-                    else {
+                    else
                         addProperty(res, bean, propName, descr.setterName);
-                    }
                 }
-                else {
+                else
                     addProperty(res, bean, propName);
-                }
             }
         }
 


[12/45] incubator-ignite git commit: Merge remote-tracking branch 'origin/ignite-843' into ignite-843

Posted by se...@apache.org.
Merge remote-tracking branch 'origin/ignite-843' into ignite-843

Conflicts:
	modules/web-control-center/nodejs/routes/admin.js


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

Branch: refs/heads/ignite-1121
Commit: 5a0ae67e76aef1cb4f163d17bfac6962ccfc0993
Parents: 2265fe4 a7efd5d
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Jul 14 11:58:20 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Jul 14 11:58:20 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/profile-controller.js    | 12 ++++----
 modules/web-control-center/nodejs/db.js         |  3 +-
 .../nodejs/helpers/ui-utils.js                  | 29 --------------------
 .../web-control-center/nodejs/routes/admin.js   |  4 +--
 .../web-control-center/nodejs/routes/profile.js |  9 +++---
 .../nodejs/views/templates/layout.jade          |  2 +-
 6 files changed, 15 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5a0ae67e/modules/web-control-center/nodejs/db.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5a0ae67e/modules/web-control-center/nodejs/routes/admin.js
----------------------------------------------------------------------


[44/45] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/ignite-843' into ignite-1121

Posted by se...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-843' into ignite-1121


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

Branch: refs/heads/ignite-1121
Commit: 3e9c9d8bcd1894787bc51bdb72738f806d5fc09d
Parents: 9ab35ff 3abac23
Author: sevdokimov <se...@jetbrains.com>
Authored: Wed Jul 15 19:32:38 2015 +0300
Committer: sevdokimov <se...@jetbrains.com>
Committed: Wed Jul 15 19:32:38 2015 +0300

----------------------------------------------------------------------
 modules/web-control-center/nodejs/DEVNOTES.txt  |   4 +-
 modules/web-control-center/nodejs/app.js        |  25 +--
 .../nodejs/controllers/admin-controller.js      |  42 ++---
 .../nodejs/controllers/caches-controller.js     | 108 ++++++++++--
 .../nodejs/controllers/clusters-controller.js   |  35 ++--
 .../nodejs/controllers/common-module.js         |  59 ++++++-
 .../nodejs/controllers/metadata-controller.js   | 123 ++++++++++----
 .../nodejs/controllers/models/caches.json       |  34 ++--
 .../nodejs/controllers/models/clusters.json     |  66 ++++----
 .../nodejs/controllers/models/metadata.json     | 169 ++++++++++++++++++-
 .../nodejs/controllers/models/summary.json      | 150 ++++++++++++++++
 .../nodejs/controllers/profile-controller.js    |  12 +-
 .../nodejs/controllers/summary-controller.js    | 137 ++++++++++++---
 modules/web-control-center/nodejs/db.js         |  30 +++-
 .../nodejs/helpers/ui-utils.js                  |  29 ----
 .../nodejs/public/stylesheets/style.css         |   2 +-
 .../nodejs/public/stylesheets/style.less        |  84 +++++++--
 .../web-control-center/nodejs/routes/admin.js   |  47 +++---
 .../web-control-center/nodejs/routes/caches.js  |  14 +-
 .../nodejs/routes/clusters.js                   |  16 +-
 .../nodejs/routes/generator/common.js           |   4 +
 .../nodejs/routes/generator/java.js             |  62 ++++---
 .../nodejs/routes/generator/xml.js              |  32 ++--
 .../nodejs/routes/metadata.js                   |  14 +-
 .../nodejs/routes/persistence.js                | 147 ++++++++--------
 .../web-control-center/nodejs/routes/profile.js |  11 +-
 .../web-control-center/nodejs/routes/public.js  |  27 +--
 modules/web-control-center/nodejs/routes/sql.js |   2 -
 .../web-control-center/nodejs/routes/summary.js |  47 ++++--
 .../nodejs/views/configuration/caches.jade      |   6 +-
 .../nodejs/views/configuration/clusters.jade    |   6 +-
 .../nodejs/views/configuration/metadata.jade    |  95 ++++++++++-
 .../nodejs/views/configuration/persistence.jade |   2 +-
 .../nodejs/views/configuration/sidebar.jade     |  14 +-
 .../nodejs/views/configuration/summary.jade     | 140 +++++++++------
 .../nodejs/views/includes/controls.jade         |  99 ++++++++---
 .../nodejs/views/includes/header.jade           |  27 +--
 .../nodejs/views/settings/admin.jade            |  39 ++---
 .../nodejs/views/templates/confirm.jade         |  27 +++
 .../nodejs/views/templates/headers.jade         |  55 ------
 .../nodejs/views/templates/layout.jade          |  46 ++++-
 .../nodejs/views/templates/select.jade          |   4 +-
 42 files changed, 1475 insertions(+), 617 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3e9c9d8b/modules/web-control-center/nodejs/app.js
----------------------------------------------------------------------
diff --cc modules/web-control-center/nodejs/app.js
index 8d05810,c9b79ab..a08ad17
--- a/modules/web-control-center/nodejs/app.js
+++ b/modules/web-control-center/nodejs/app.js
@@@ -34,10 -34,7 +34,8 @@@ var summary = require('./routes/summary
  var adminRouter = require('./routes/admin');
  var profileRouter = require('./routes/profile');
  var sqlRouter = require('./routes/sql');
 +var bridge = require('./bridge/bridge');
  
- var uiUtils = require('./helpers/ui-utils');
- 
  var passport = require('passport');
  
  var db = require('./db');


[45/45] incubator-ignite git commit: # IGNITE-1121 Allow to execute remote REST queries with callback.

Posted by se...@apache.org.
# IGNITE-1121 Allow to execute remote REST queries with callback.


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

Branch: refs/heads/ignite-1121
Commit: dd27f3c00784ba608bd4d48a48a6517b34dd0683
Parents: 3e9c9d8
Author: sevdokimov <se...@jetbrains.com>
Authored: Wed Jul 15 22:16:32 2015 +0300
Committer: sevdokimov <se...@jetbrains.com>
Committed: Wed Jul 15 22:16:32 2015 +0300

----------------------------------------------------------------------
 .../java/org/apache/ignite/agent/Agent.java     |   8 +-
 .../org/apache/ignite/agent/AgentSocket.java    |  22 ++-
 .../ignite/agent/messages/ExecuteRest.java      |  57 -------
 .../ignite/agent/messages/RestRequest.java      |  74 ++++++++
 .../ignite/agent/messages/RestResult.java       |  34 ++++
 .../nodejs/agents/agentManager.js               | 170 +++++++++++++++++++
 modules/web-control-center/nodejs/app.js        |   4 +-
 .../web-control-center/nodejs/bridge/bridge.js  | 118 -------------
 .../web-control-center/nodejs/routes/test.js    |  42 +++++
 9 files changed, 339 insertions(+), 190 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd27f3c0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Agent.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Agent.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Agent.java
index f232e2f..c420fa9 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Agent.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Agent.java
@@ -66,10 +66,6 @@ public class Agent {
 
         CloseableHttpResponse resp = httpclient.execute(get);
 
-        RestResult res = new RestResult();
-
-        res.setCode(resp.getStatusLine().getStatusCode());
-
         ByteArrayOutputStream out = new ByteArrayOutputStream();
 
         resp.getEntity().writeTo(out);
@@ -84,6 +80,10 @@ public class Agent {
             charset = Charsets.toCharset(encoding);
         }
 
+        RestResult res = new RestResult();
+
+        res.setCode(resp.getStatusLine().getStatusCode());
+        res.setExecuted(true);
         res.setMessage(new String(out.toByteArray(), charset));
 
         return res;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd27f3c0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
index 789fd12..9e6e14a 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
@@ -96,27 +96,31 @@ public class AgentSocket {
         if (m instanceof AuthResult) {
             if (((AuthResult)m).isSuccess())
                 System.out.println("Authentication success");
-            else
+            else {
                 System.out.println("Authentication failed: " + ((AuthResult)m).getMessage());
 
-            ses.close();
+                ses.close();
+            }
         }
-        else if (m instanceof ExecuteRest) {
-            ExecuteRest execRest = (ExecuteRest)m;
+        else if (m instanceof RestRequest) {
+            RestRequest restReq = (RestRequest)m;
 
-            RestResult res;
+            RestResult restRes;
 
             try {
-                res = agent.executeRest(execRest.getUrl());
+                restRes = agent.executeRest(restReq.getUrl());
             }
             catch (IOException e) {
-                res = new RestResult();
+                restRes = new RestResult();
 
-                res.setCode(500);
+                restRes.setCode(500);
+                restRes.setMessage(e.getMessage());
             }
 
+            restRes.setRequestId(((RestRequest)m).getId());
+
             try {
-                ses.getRemote().sendString(MessageFactory.toString(res));
+                ses.getRemote().sendString(MessageFactory.toString(restRes));
             }
             catch (IOException e) {
                 e.printStackTrace();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd27f3c0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/ExecuteRest.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/ExecuteRest.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/ExecuteRest.java
deleted file mode 100644
index 217852f..0000000
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/ExecuteRest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.apache.ignite.agent.messages;/*
- * 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 java.util.*;
-
-/**
- *
- */
-public class ExecuteRest extends AbstractMessage {
-    /** */
-    private String url;
-
-    /** */
-    private Map<String, String> params;
-
-    /**
-     *
-     */
-    public String getUrl() {
-        return url;
-    }
-
-    /**
-     * @param url Url.
-     */
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    /**
-     *
-     */
-    public Map<String, String> getParams() {
-        return params;
-    }
-
-    /**
-     * @param params Params.
-     */
-    public void setParams(Map<String, String> params) {
-        this.params = params;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd27f3c0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/RestRequest.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/RestRequest.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/RestRequest.java
new file mode 100644
index 0000000..9d5181d
--- /dev/null
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/RestRequest.java
@@ -0,0 +1,74 @@
+package org.apache.ignite.agent.messages;/*
+ * 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 java.util.*;
+
+/**
+ *
+ */
+public class RestRequest extends AbstractMessage {
+    /** */
+    private int id;
+
+    /** */
+    private String url;
+
+    /** */
+    private Map<String, String> params;
+
+    /**
+     *
+     */
+    public int getId() {
+        return id;
+    }
+
+    /**
+     * @param id Id.
+     */
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    /**
+     *
+     */
+    public String getUrl() {
+        return url;
+    }
+
+    /**
+     * @param url Url.
+     */
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    /**
+     *
+     */
+    public Map<String, String> getParams() {
+        return params;
+    }
+
+    /**
+     * @param params Params.
+     */
+    public void setParams(Map<String, String> params) {
+        this.params = params;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd27f3c0/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/RestResult.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/RestResult.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/RestResult.java
index b23a203..d337384 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/RestResult.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/RestResult.java
@@ -20,6 +20,12 @@ package org.apache.ignite.agent.messages;/*
  */
 public class RestResult extends AbstractMessage {
     /** */
+    private int requestId;
+
+    /** */
+    private boolean executed;
+
+    /** */
     private int code;
 
     /** */
@@ -28,6 +34,20 @@ public class RestResult extends AbstractMessage {
     /**
      *
      */
+    public int getRequestId() {
+        return requestId;
+    }
+
+    /**
+     * @param reqId Request id.
+     */
+    public void setRequestId(int reqId) {
+        this.requestId = reqId;
+    }
+
+    /**
+     *
+     */
     public int getCode() {
         return code;
     }
@@ -52,4 +72,18 @@ public class RestResult extends AbstractMessage {
     public void setMessage(String msg) {
         this.message = msg;
     }
+
+    /**
+     *
+     */
+    public boolean isExecuted() {
+        return executed;
+    }
+
+    /**
+     * @param executed Executed.
+     */
+    public void setExecuted(boolean executed) {
+        this.executed = executed;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd27f3c0/modules/web-control-center/nodejs/agents/agentManager.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/agents/agentManager.js b/modules/web-control-center/nodejs/agents/agentManager.js
new file mode 100644
index 0000000..aa2506a
--- /dev/null
+++ b/modules/web-control-center/nodejs/agents/agentManager.js
@@ -0,0 +1,170 @@
+/*
+ * 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.
+ */
+
+var WebSocketServer = require('ws').Server;
+
+var config = require('../helpers/configuration-loader.js');
+
+var https = require('https');
+
+var db = require('../db');
+
+var fs = require('fs');
+
+var srv;
+
+var clients = {};
+
+function Client(ws) {
+    var self = this;
+
+    this.ws = ws;
+
+    ws.on('close', function() {
+        if (self.userId) {
+            var connections = clients[self.userId];
+
+            if (connections) {
+                removeFromArray(connections, self);
+            }
+        }
+    });
+
+    ws.on('message', function (msg) {
+        var m = JSON.parse(msg);
+
+        switch (m.type) {
+            case 'AuthMessage':
+                var account = db.Account.findByUsername(m.login, function(err, account) {
+                    if (err) {
+                        ws.send("{type: 'AuthResult', success: false}");
+                    }
+                    else {
+                        account.authenticate(m.password, function(err, user, res) {
+                            if (!user) {
+                                ws.send(JSON.stringify({type: 'AuthResult', success: false, message: res.message}));
+                            }
+                            else {
+                                ws.send("{type: 'AuthResult', success: true}");
+
+                                self.userId = account._id;
+
+                                var existingConnections = clients[account._id];
+
+                                if (!existingConnections) {
+                                    existingConnections = [];
+
+                                    clients[account._id] = existingConnections;
+                                }
+
+                                existingConnections.push(self);
+                            }
+                        });
+                    }
+                });
+
+                break;
+
+            case 'RestResult':
+                var cb = self.cbMap[m.requestId];
+
+                if (!cb)
+                    break;
+
+                delete self.cbMap[m.requestId];
+
+                if (!m.executed) {
+                    cb("Failed to execute RESQ query: " + m.message)
+                }
+                else {
+                    cb(null, m.code, m.message)
+                }
+
+                break;
+
+            default:
+                ws.close()
+        }
+    });
+
+    this.sendMessage = function(msg, cb) {
+        if (typeof(msg) == 'object') {
+            msg = JSON.stringify(msg);
+        }
+
+        ws.send(msg, cb);
+    };
+
+    this.restCounter = 0;
+
+    this.cbMap = {};
+
+    this.restQuery = function(url, cb) {
+        var reqId = this.restCounter++;
+
+        this.cbMap[reqId] = cb;
+
+        this.sendMessage({
+            id: reqId,
+            type: 'RestRequest',
+            url: url
+        }, function(err) {
+            if (err) {
+                delete this.cbMap[reqId];
+
+                cb(err)
+            }
+        })
+    }
+}
+
+function Server() {
+    var server = https.createServer({
+        key: fs.readFileSync(config.get('monitor:server:key')),
+        cert: fs.readFileSync(config.get('monitor:server:cert')),
+        passphrase: config.get('monitor:server:keyPassphrase')
+    });
+
+    server.listen(config.get('monitor:server:port'));
+
+    var wss = new WebSocketServer({ server: server });
+
+    wss.on('connection', function(ws) {
+        var client = new Client(ws);
+    })
+}
+
+function removeFromArray(arr, val) {
+    var idx;
+
+    while ((idx = arr.indexOf(val)) !== -1) {
+        arr.splice(idx, 1);
+    }
+}
+
+exports.startServer = function() {
+    srv = new Server();
+};
+
+exports.findClient = function(userId) {
+    var clientsList = clients[userId];
+
+    if (!clientsList)
+        return null;
+
+    return clientsList[0];
+};

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd27f3c0/modules/web-control-center/nodejs/app.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/app.js b/modules/web-control-center/nodejs/app.js
index a08ad17..d1a4121 100644
--- a/modules/web-control-center/nodejs/app.js
+++ b/modules/web-control-center/nodejs/app.js
@@ -34,7 +34,7 @@ var summary = require('./routes/summary');
 var adminRouter = require('./routes/admin');
 var profileRouter = require('./routes/profile');
 var sqlRouter = require('./routes/sql');
-var bridge = require('./bridge/bridge');
+var agentManager = require('./agents/agentManager');
 
 var passport = require('passport');
 
@@ -154,6 +154,6 @@ app.use(function (err, req, res) {
     });
 });
 
-bridge.startServer();
+agentManager.startServer();
 
 module.exports = app;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd27f3c0/modules/web-control-center/nodejs/bridge/bridge.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/bridge/bridge.js b/modules/web-control-center/nodejs/bridge/bridge.js
deleted file mode 100644
index d850098..0000000
--- a/modules/web-control-center/nodejs/bridge/bridge.js
+++ /dev/null
@@ -1,118 +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.
- */
-
-var WebSocketServer = require('ws').Server;
-
-var config = require('../helpers/configuration-loader.js');
-
-var https = require('https');
-
-var db = require('../db');
-
-var fs = require('fs');
-
-var srv;
-
-var clients = {};
-
-function Client(ws) {
-    var self = this;
-
-    this.ws = ws;
-
-    ws.on('close', function() {
-        if (self.userId) {
-            var connections = clients[self.userId];
-
-            if (connections) {
-                removeFromArray(connections, self);
-            }
-        }
-    });
-
-    ws.on('message', function (msg) {
-        var m = JSON.parse(msg);
-
-        switch (m.type) {
-            case 'AuthMessage':
-                var account = db.Account.findByUsername(m.login, function(err, account) {
-                    if (err) {
-                        ws.send("{type: 'AuthResult', success: false}");
-                    }
-                    else {
-                        account.authenticate(m.password, function(err, user, res) {
-                            if (!user) {
-                                ws.send(JSON.stringify({type: 'AuthResult', success: false, message: res.message}));
-                            }
-                            else {
-                                ws.send("{type: 'AuthResult', success: true}");
-
-                                self.userId = account._id;
-
-                                var existingConnections = clients[account._id];
-
-                                if (!existingConnections) {
-                                    existingConnections = [];
-
-                                    clients[account._id] = existingConnections;
-                                }
-
-                                existingConnections.push(self);
-                            }
-                        });
-                    }
-                });
-
-                break;
-
-            default:
-                ws.close()
-        }
-    });
-}
-
-function Server() {
-    var server = https.createServer({
-        key: fs.readFileSync(config.get('monitor:server:key')),
-        cert: fs.readFileSync(config.get('monitor:server:cert')),
-        passphrase: config.get('monitor:server:keyPassphrase')
-    });
-
-    server.listen(config.get('monitor:server:port'));
-
-    var wss = new WebSocketServer({ server: server });
-
-    wss.on('connection', function(ws) {
-        var client = new Client(ws);
-    })
-}
-
-function removeFromArray(arr, val) {
-    var idx;
-
-    while ((idx = arr.indexOf(val)) !== -1) {
-        arr.splice(idx, 1);
-    }
-}
-
-exports.startServer = function() {
-    srv = new Server();
-};
-
-exports.findClient = function(userId) {
-    return clients[userId];
-};

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd27f3c0/modules/web-control-center/nodejs/routes/test.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/test.js b/modules/web-control-center/nodejs/routes/test.js
new file mode 100644
index 0000000..5bfd954
--- /dev/null
+++ b/modules/web-control-center/nodejs/routes/test.js
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ */
+
+var router = require('express').Router();
+var bridge = require('../agents/agentManager');
+
+
+
+/* GET summary page. */
+router.get('/', function(req, res) {
+    var c = bridge.findClient("55a2ca51eef88f6c775ed9d0");
+
+    if (!c) {
+        return res.send("Client not found");
+    }
+
+    c.restQuery("http://ya.ru/", function(error, code, message) {
+        if (error) {
+            res.send("Failed to execute REST query: " + error);
+
+            return
+        }
+
+        res.send("code: " + code + '<br>message: ' + message);
+    });
+});
+
+module.exports = router;


[37/45] incubator-ignite git commit: IGNITE-843 WIP on metadata.

Posted by se...@apache.org.
IGNITE-843 WIP on metadata.


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

Branch: refs/heads/ignite-1121
Commit: 9c8550692c532abf6a1876f10c5f4119d5ee98f4
Parents: fca9ac9
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 16:24:18 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 16:24:18 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/metadata-controller.js   |  6 ++++
 .../nodejs/controllers/models/metadata.json     |  3 +-
 .../nodejs/views/configuration/metadata.jade    | 36 ++++++++++++++------
 3 files changed, 32 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9c855069/modules/web-control-center/nodejs/controllers/metadata-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/metadata-controller.js b/modules/web-control-center/nodejs/controllers/metadata-controller.js
index a826e04..194a993 100644
--- a/modules/web-control-center/nodejs/controllers/metadata-controller.js
+++ b/modules/web-control-center/nodejs/controllers/metadata-controller.js
@@ -26,6 +26,12 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
             {value: {kind: 'both'}, label: 'both'}
         ];
 
+        $scope.kinds = [
+            {value: 'query', label: 'query'},
+            {value: 'store', label: 'store'},
+            {value: 'both', label: 'both'}
+        ];
+
         $scope.template = $scope.templates[0].value;
 
         $scope.metadata = [];

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9c855069/modules/web-control-center/nodejs/controllers/models/metadata.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/metadata.json b/modules/web-control-center/nodejs/controllers/models/metadata.json
index a3e2cf1..ce206b4 100644
--- a/modules/web-control-center/nodejs/controllers/models/metadata.json
+++ b/modules/web-control-center/nodejs/controllers/models/metadata.json
@@ -24,8 +24,7 @@
       "label": "Metadata for",
       "type": "dropdown",
       "model": "kind",
-      "items": "templates",
-      "placeholder": "Select kind",
+      "items": "kinds",
       "tip": ["TODO."]
     },
     {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9c855069/modules/web-control-center/nodejs/views/configuration/metadata.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/metadata.jade b/modules/web-control-center/nodejs/views/configuration/metadata.jade
index 8c213c6..526edb4 100644
--- a/modules/web-control-center/nodejs/views/configuration/metadata.jade
+++ b/modules/web-control-center/nodejs/views/configuration/metadata.jade
@@ -34,14 +34,28 @@ block content
                     tr(ng-repeat='row in metadata track by row._id')
                         td.col-sm-6(ng-class='{active: row._id == selectedItem._id}')
                             a(ng-click='selectItem(row)') {{$index + 1}}) {{row.name}}
-        button.btn.btn-primary(ng-click='createItem()') &nbspAdd metadata
-        label(style='margin-left: 15px; margin-right: 10px') for:
-        button.btn.btn-default(ng-model='template' data-template='/select' data-placeholder='Choose metadata type' bs-options='item.value as item.label for item in templates' bs-select)
-        i.tiplabel.fa.fa-question-circle(bs-tooltip data-title='{{joinTip(templateTip)}}' type='button')
-        hr
-        form.form-horizontal(name='inputForm' ng-if='backupItem' novalidate)
-            .panel-body
-                .settings-row(ng-repeat='field in general')
-                    +form-row
-            button#save-btn.btn.btn-primary(ng-disabled='inputForm.$invalid' ng-click='saveItem()') Save
-            button.btn.btn-primary.btn-second(ng-show='backupItem._id' ng-click='removeItem()') Remove
+        panel-group(bs-collapse data-allow-multiple="false")
+            .panel.panel-default
+                .panel-heading
+                    h3
+                        a(bs-collapse-toggle) Manual
+                .panel-collapse(role="tabpanel" bs-collapse-target)
+                    .panel-body
+                        button.btn.btn-primary(ng-click='createItem()') &nbspAdd metadata
+                        label(style='margin-left: 15px; margin-right: 10px') for:
+                        button.btn.btn-default(ng-model='template' data-template='/select' data-placeholder='Choose metadata type' bs-options='item.value as item.label for item in templates' bs-select)
+                        i.tiplabel.fa.fa-question-circle(bs-tooltip data-title='{{joinTip(templateTip)}}' type='button')
+                        hr
+                        form.form-horizontal(name='inputForm' ng-if='backupItem' novalidate)
+                            .panel-body
+                                .settings-row(ng-repeat='field in general')
+                                    +form-row
+                            button#save-btn.btn.btn-primary(ng-disabled='inputForm.$invalid' ng-click='saveItem()') Save
+                            button.btn.btn-primary.btn-second(ng-show='backupItem._id' ng-click='removeItem()') Remove
+            .panel.panel-default
+                .panel-heading
+                    h3
+                        a(bs-collapse-toggle) Load from database
+                .panel-collapse(role="tabpanel" bs-collapse-target)
+                    .panel-body
+                        p TODO 2


[25/45] incubator-ignite git commit: IGNITE-843 Remember selected cluster on summary screen.

Posted by se...@apache.org.
IGNITE-843 Remember selected cluster on summary screen.


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

Branch: refs/heads/ignite-1121
Commit: dbc6b5bc54a87ffd9de1f025c1c4dcc15df48fec
Parents: 9b6c242
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 10:39:24 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 10:39:24 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/summary-controller.js    | 23 ++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dbc6b5bc/modules/web-control-center/nodejs/controllers/summary-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/summary-controller.js b/modules/web-control-center/nodejs/controllers/summary-controller.js
index a5b5a68..e4f5039 100644
--- a/modules/web-control-center/nodejs/controllers/summary-controller.js
+++ b/modules/web-control-center/nodejs/controllers/summary-controller.js
@@ -100,7 +100,26 @@ controlCenterModule.controller('summaryController', ['$scope', '$http', 'commonF
     $http.post('clusters/list').success(function (data) {
         $scope.clusters = data.clusters;
 
-        if ($scope.clusters.length > 0)
-            $scope.generate($scope.clusters[0]);
+        if ($scope.clusters.length > 0) {
+            var restoredItem = angular.fromJson(sessionStorage.summaryBackupItem);
+
+            var selectIdx = 0;
+
+            if (restoredItem && restoredItem._id) {
+                var idx = _.findIndex($scope.clusters, function (clusters) {
+                    return clusters._id == restoredItem._id;
+                });
+
+                if (idx >= 0)
+                    selectIdx = idx;
+            }
+
+            $scope.generate($scope.clusters[selectIdx]);
+        }
+
+        $scope.$watch('selectedItem', function (val) {
+            if (val)
+                sessionStorage.summaryBackupItem = angular.toJson(val);
+        }, true);
     });
 }]);


[29/45] incubator-ignite git commit: IGNITE-843 Hide server near cache settings if not enabled.

Posted by se...@apache.org.
IGNITE-843 Hide server near cache settings if not enabled.


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

Branch: refs/heads/ignite-1121
Commit: a1a85a52ff430566d2ac4ea94b9a4afbfea271ea
Parents: 3e59cb1
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 12:59:41 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 12:59:41 2015 +0700

----------------------------------------------------------------------
 modules/web-control-center/nodejs/controllers/models/caches.json | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a1a85a52/modules/web-control-center/nodejs/controllers/models/caches.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/caches.json b/modules/web-control-center/nodejs/controllers/models/caches.json
index c8fb9cd..d54c5eb 100644
--- a/modules/web-control-center/nodejs/controllers/models/caches.json
+++ b/modules/web-control-center/nodejs/controllers/models/caches.json
@@ -476,6 +476,7 @@
           "type": "number",
           "path": "nearConfiguration",
           "model": "nearStartSize",
+          "hide": "!backupItem.nearCacheEnabled",
           "placeholder": 375000,
           "tip": [
             "Initial cache size for near cache which will be used to pre-create internal hash table after start."
@@ -488,6 +489,7 @@
           "model": "kind",
           "placeholder": "Choose eviction policy",
           "items": "evictionPolicies",
+          "hide": "!backupItem.nearCacheEnabled",
           "tip": [
             "Cache expiration policy."
           ],


[32/45] incubator-ignite git commit: IGNITE-843 Fixed devnotes.

Posted by se...@apache.org.
IGNITE-843 Fixed devnotes.


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

Branch: refs/heads/ignite-1121
Commit: bf14daf5aa992e41b5defca5b1fe596a296c8487
Parents: 5c648af
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 15:17:58 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 15:17:58 2015 +0700

----------------------------------------------------------------------
 modules/web-control-center/nodejs/DEVNOTES.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/bf14daf5/modules/web-control-center/nodejs/DEVNOTES.txt
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/DEVNOTES.txt b/modules/web-control-center/nodejs/DEVNOTES.txt
index 6954fae..aa56011 100644
--- a/modules/web-control-center/nodejs/DEVNOTES.txt
+++ b/modules/web-control-center/nodejs/DEVNOTES.txt
@@ -6,7 +6,7 @@ How to deploy:
 1. Install locally NodeJS using installer from site https://nodejs.org for your OS.
 2. Install locally MongoDB folow instructions from site http://docs.mongodb.org/manual/installation
 3. Checkout ignite-843 branch.
-4. Change directory '$IGNITE_HOME/modules/webconfig/nodejs'.
+4. Change directory '$IGNITE_HOME/modules/web-control-center/nodejs'.
 5. Run "npm install" in terminal for download all dependencies.
 
 Steps 1 - 5 should be executed once.
@@ -16,6 +16,6 @@ How to run:
 1. Run MongoDB.
  1.1 In terminal change dir to $MONGO_ISNTALL_DIR/server/3.0/bin.
  1.2 Run "mongod".
-2. In new terminal change directory '$IGNITE_HOME/modules/webconfig/nodejs'.
+2. In new terminal change directory '$IGNITE_HOME/modules/web-control-center/nodejs'.
 3. Start application by executing "npm start".
 4. In browser open: http://localhost:3000
\ No newline at end of file


[43/45] incubator-ignite git commit: Merge remote-tracking branch 'origin/ignite-843' into ignite-843

Posted by se...@apache.org.
Merge remote-tracking branch 'origin/ignite-843' into ignite-843


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

Branch: refs/heads/ignite-1121
Commit: 3abac23da0f7f2aeeb709da05cd3d5ffbd37cd86
Parents: a77ec46 24112a7
Author: Andrey <an...@gridgain.com>
Authored: Wed Jul 15 18:07:26 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Wed Jul 15 18:07:26 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/metadata-controller.js   | 97 +++++++++++++++++++-
 .../nodejs/controllers/models/metadata.json     | 66 ++++++++++++-
 .../nodejs/views/configuration/metadata.jade    | 68 +++++++++++++-
 3 files changed, 220 insertions(+), 11 deletions(-)
----------------------------------------------------------------------



[41/45] incubator-ignite git commit: IGNITE-843 WIP metadata.

Posted by se...@apache.org.
IGNITE-843 WIP metadata.


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

Branch: refs/heads/ignite-1121
Commit: 24112a74f4dc7d6f33b81153c1872d1677d7ed9e
Parents: ecf4e20
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 17:43:20 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 17:43:20 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/metadata-controller.js   | 97 +++++++++++++++++++-
 .../nodejs/controllers/models/metadata.json     | 66 ++++++++++++-
 .../nodejs/views/configuration/metadata.jade    | 68 +++++++++++++-
 3 files changed, 220 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/24112a74/modules/web-control-center/nodejs/controllers/metadata-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/metadata-controller.js b/modules/web-control-center/nodejs/controllers/metadata-controller.js
index 194a993..a4b54cc 100644
--- a/modules/web-control-center/nodejs/controllers/metadata-controller.js
+++ b/modules/web-control-center/nodejs/controllers/metadata-controller.js
@@ -26,13 +26,56 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
             {value: {kind: 'both'}, label: 'both'}
         ];
 
+        $scope.template = $scope.templates[0].value;
+
         $scope.kinds = [
             {value: 'query', label: 'query'},
             {value: 'store', label: 'store'},
             {value: 'both', label: 'both'}
         ];
 
-        $scope.template = $scope.templates[0].value;
+        $scope.databases = [
+            {value: 'oracle', label: 'Oracle database'},
+            {value: 'db2', label: 'IBM DB2'},
+            {value: 'mssql', label: 'MS SQL Server'},
+            {value: 'postgre', label: 'PostgreSQL'},
+            {value: 'mysql', label: 'MySQL'},
+            {value: 'h2', label: 'H2 database'}
+        ];
+
+        $scope.data = {
+            curTableIdx: 0,
+            curFieldIdx: 0,
+            curKeyClass: '',
+            curValueClass: '',
+            curJavaName: '',
+            curJavaType: '',
+            tables: [
+                {schemaName: 'Schema1', use: true},
+                {schemaName: 'Schema1', use: true, tableName: 'Table1', keyClass: 'KeyClass1', valueClass: 'ValueClass1',
+                    fields: [
+                        {use: true, key: true, ak: true, dbName: 'name1', dbType: 'dbType1', javaName: 'javaName1', javaType: 'javaType1'},
+                        {use: true, key: false, ak: false, dbName: 'name2', dbType: 'dbType2', javaName: 'javaName2', javaType: 'javaType2'},
+                        {use: false, key: false, ak: false, dbName: 'name3', dbType: 'dbType3', javaName: 'javaName3', javaType: 'javaType3'}
+                    ]
+                },
+                {schemaName: 'Schema2 with very long name', use: false},
+                {schemaName: 'Schema2', use: false, tableName: 'Table2', keyClass: 'KeyClass2', valueClass: 'ValueClass2',
+                    fields: [
+                        {use: true, key: true, ak: true, dbName: 'name4', dbType: 'dbType4', javaName: 'javaName4', javaType: 'javaType4'},
+                        {use: true, key: false, ak: false, dbName: 'name5', dbType: 'dbType5', javaName: 'javaName5', javaType: 'javaType5'},
+                        {use: false, key: false, ak: false, dbName: 'name6', dbType: 'dbType6', javaName: 'javaName6', javaType: 'javaType6'}
+                    ]},
+                {schemaName: 'Schema2', use: false, tableName: 'Table3', keyClass: 'KeyClass3', valueClass: 'ValueClass3',
+                    fields: [
+                        {use: true, key: true, ak: true, dbName: 'name7', dbType: 'dbType7', javaName: 'javaName7', javaType: 'javaType7'},
+                        {use: true, key: false, ak: false, dbName: 'name8', dbType: 'dbType8', javaName: 'javaName8', javaType: 'javaType8'},
+                        {use: false, key: false, ak: false, dbName: 'name9', dbType: 'dbType9', javaName: 'javaName9', javaType: 'javaType9'},
+                        {use: false, key: false, ak: false, dbName: 'name10', dbType: 'dbType10', javaName: 'javaName10', javaType: 'javaType10'},
+                        {use: false, key: false, ak: false, dbName: 'name11', dbType: 'dbType11', javaName: 'javaName11', javaType: 'javaType11'},
+                        {use: false, key: false, ak: false, dbName: 'name12', dbType: 'dbType12', javaName: 'javaName12', javaType: 'javaType12'}
+                    ]}]
+        };
 
         $scope.metadata = [];
 
@@ -40,14 +83,13 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
             .success(function (data) {
                 $scope.screenTip = data.screenTip;
                 $scope.templateTip = data.templateTip;
-                $scope.general = data.general;
+                $scope.metadataManual = data.metadataManual;
+                $scope.metadataDb = data.metadataDb;
             })
             .error(function (errMsg) {
                 commonFunctions.showError(errMsg);
             });
 
-        $scope.metadatas = [];
-
         // When landing on the page, get metadatas and show them.
         $http.post('metadata/list')
             .success(function (data) {
@@ -83,7 +125,6 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
 
         $scope.selectItem = function (item) {
             $scope.selectedItem = item;
-
             $scope.backupItem = angular.copy(item);
         };
 
@@ -140,5 +181,51 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
                     commonFunctions.showError(errMsg);
                 });
         };
+
+        $scope.selectSchema = function (idx) {
+            var data = $scope.data;
+            var tables = data.tables;
+            var schemaName = tables[idx].schemaName;
+            var use = tables[idx].use;
+
+            for (var i = idx + 1; i < tables.length; i++) {
+                var item = tables[i];
+
+                if (item.schemaName == schemaName && item.tableName)
+                    item.use = use;
+                else
+                    break;
+            }
+
+            data.curTableIdx = -1;
+            data.curFieldIdx = -1;
+        };
+
+        $scope.selectTable = function (idx) {
+            var data = $scope.data;
+
+            data.curTableIdx = idx;
+            data.curFieldIdx = -1;
+
+            if (idx >= 0) {
+                var tbl = data.tables[idx];
+
+                data.curKeyClass = tbl.keyClass;
+                data.curValueClass = tbl.valueClass;
+            }
+        };
+
+        $scope.selectField = function (idx) {
+            var data = $scope.data;
+
+            data.curFieldIdx = idx;
+
+            if (idx >= 0) {
+                var fld = data.tables[data.curTableIdx].fields[idx];
+
+                data.curJavaName = fld.javaName;
+                data.curJavaType = fld.javaType;
+            }
+        };
     }]
 );
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/24112a74/modules/web-control-center/nodejs/controllers/models/metadata.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/metadata.json b/modules/web-control-center/nodejs/controllers/models/metadata.json
index ce206b4..753f643 100644
--- a/modules/web-control-center/nodejs/controllers/models/metadata.json
+++ b/modules/web-control-center/nodejs/controllers/models/metadata.json
@@ -12,7 +12,7 @@
     "  <li>both - Create cache type metadata to use with query and store.</li>",
     "</ul>"
   ],
-  "general": [
+  "metadataManual": [
     {
       "label": "Name",
       "type": "text",
@@ -110,5 +110,69 @@
       "hide": "backupItem.kind != 'query'",
       "tip": ["TODO."]
     }
+  ],
+  "metadataDb": [
+    {
+      "label": "Name",
+      "type": "text",
+      "model": "name",
+      "required": true
+    },
+    {
+      "label": "Database type",
+      "type": "dropdown",
+      "model": "dbType",
+      "placeholder": "Choose database",
+      "items": "databases",
+      "tip": [
+        "Select database type to connect for loading tables metadata."
+      ]
+    },
+    {
+      "label": "Database name",
+      "type": "text",
+      "model": "dbName",
+      "tip": [
+        "Database name to connect for loading tables metadata."
+      ]
+    },
+    {
+      "label": "Host",
+      "type": "text",
+      "model": "host",
+      "placeholder": "IP address or host",
+      "tip": [
+        "IP address or host name where database server deployed."
+      ]
+    },
+    {
+      "label": "Port",
+      "type": "number",
+      "model": "port",
+      "max": 65535,
+      "placeholder": "",
+      "tip": [
+        "Port number for connecting to database."
+      ]
+    },
+    {
+      "label": "User",
+      "type": "text",
+      "model": "user",
+      "placeholder": "",
+      "tip": [
+        "User name for connecting to database."
+      ]
+    },
+    {
+      "label": "Password",
+      "type": "password",
+      "model": "password",
+      "placeholder": "",
+      "tip": [
+        "Password for connecting to database.",
+        "Note, password would not be saved."
+      ]
+    }
   ]
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/24112a74/modules/web-control-center/nodejs/views/configuration/metadata.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/metadata.jade b/modules/web-control-center/nodejs/views/configuration/metadata.jade
index 526edb4..1e4c986 100644
--- a/modules/web-control-center/nodejs/views/configuration/metadata.jade
+++ b/modules/web-control-center/nodejs/views/configuration/metadata.jade
@@ -46,16 +46,74 @@ block content
                         button.btn.btn-default(ng-model='template' data-template='/select' data-placeholder='Choose metadata type' bs-options='item.value as item.label for item in templates' bs-select)
                         i.tiplabel.fa.fa-question-circle(bs-tooltip data-title='{{joinTip(templateTip)}}' type='button')
                         hr
-                        form.form-horizontal(name='inputForm' ng-if='backupItem' novalidate)
+                        form.form-horizontal(name='manualForm' ng-if='backupItem' novalidate)
                             .panel-body
-                                .settings-row(ng-repeat='field in general')
+                                .settings-row(ng-repeat='field in metadataManual')
                                     +form-row
-                            button#save-btn.btn.btn-primary(ng-disabled='inputForm.$invalid' ng-click='saveItem()') Save
+                            button#save-btn.btn.btn-primary(ng-disabled='manualForm.$invalid' ng-click='saveItem()') Save
                             button.btn.btn-primary.btn-second(ng-show='backupItem._id' ng-click='removeItem()') Remove
             .panel.panel-default
                 .panel-heading
                     h3
                         a(bs-collapse-toggle) Load from database
-                .panel-collapse(role="tabpanel" bs-collapse-target)
+                .panel-collapse(bs-collapse-target)
                     .panel-body
-                        p TODO 2
+                        form.form-horizontal(name='dbForm' novalidate)
+                            .settings-row(ng-repeat='field in metadataDb')
+                                +form-row
+                        div(ng-hide='data.tables.length == 0')
+                            table.table-bordered.table-condensed.links-edit-small-padding.col-sm-12(st-table='data.tables')
+                                thead
+                                    tr
+                                        th.col-sm-3 Schema/Table
+                                        th Key class
+                                        th Value class
+                                tbody
+                                    tr(ng-repeat='row in data.tables')
+                                        td(colspan='{{row.tableName ? 1 : 3}}')
+                                            div.checkbox(ng-if='!row.tableName')
+                                                label(ng-click='selectSchema($index)')
+                                                    input(type='checkbox' ng-checked='row.use')
+                                                    | {{row.schemaName}}
+                                            div.checkbox(ng-if='row.tableName')
+                                                label(style='padding-left: 30px' ng-click='selectTable($index)')
+                                                    input(type='checkbox' ng-checked = 'row.use')
+                                                    | {{row.tableName}}
+                                        td(ng-if='row.tableName')
+                                            a(ng-show='data.curTableIdx != $index' ng-click='selectTable($index)') {{row.keyClass}}
+                                            input.form-control(type='text' ng-show='data.curTableIdx == $index' ng-model='data.curKeyClass' placeholder='Key class full name')
+                                        td(ng-if='row.tableName')
+                                            a(ng-show='data.curTableIdx != $index' ng-click='selectTable($index)') {{row.valueClass}}
+                                            input.form-control(type='text' ng-show='data.curTableIdx == $index' ng-model='data.curValueClass' placeholder='Value class full name')
+                        //div(ng-hide='data.curTableIdx < 0')
+                        //    table.table-bordered.table-condensed.links-edit-small-padding.col-sm-12(st-table='data.tables[data.curTableIdx].fields')
+                        //        thead
+                        //            tr
+                        //                th(style='width:45px') Use
+                        //                th(style='width:45px') Key
+                        //                th(style='width:45px') Ak
+                        //                th DB Name
+                        //                th DB Type
+                        //                th Java Name
+                        //                th Java Type
+                        //        tbody
+                        //            tr(ng-repeat='row in data.tables[data.curTableIdx].fields')
+                        //                td
+                        //                    +dbcheck('row.use')
+                        //                td
+                        //                    +dbcheck('row.key')
+                        //                td
+                        //                    +dbcheck('row.ak')
+                        //                td
+                        //                    label {{row.dbName}}
+                        //                td
+                        //                    label {{row.dbType}}
+                        //                td
+                        //                    a(ng-show='data.curFieldIdx != $index' ng-click='selectField($index)') {{row.javaName}}
+                        //                    input.form-control(type='text' ng-show='data.curFieldIdx == $index' ng-model='data.curJavaName' placeholder='Field Java name')
+                        //                td
+                        //                    a(ng-show='data.curFieldIdx != $index' ng-click='selectField($index)') {{row.javaType}}
+                        //                    input.form-control(type='text' ng-show='data.curFieldIdx == $index' ng-model='data.curJavaType' placeholder='Field Java type')
+                        button.btn.btn-primary(ng-disabled='dbForm.$invalid' ng-click='saveItem()') Save
+                        button.btn.btn-primary.btn-second(ng-show='backupItem._id' ng-click='removeItem()') Remove
+                        button.btn.btn-primary.btn-second(ng-click='reloadMetadata()') Reload
\ No newline at end of file


[24/45] incubator-ignite git commit: IGNITE-843 Removed "none" template.

Posted by se...@apache.org.
IGNITE-843 Removed "none" template.


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

Branch: refs/heads/ignite-1121
Commit: 9b6c2420a40004e4d87c72879955ccdf2849de31
Parents: 974b408
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 10:16:54 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 10:16:54 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/clusters-controller.js               | 5 ++---
 .../nodejs/controllers/models/clusters.json                 | 9 ++++-----
 2 files changed, 6 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9b6c2420/modules/web-control-center/nodejs/controllers/clusters-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/clusters-controller.js b/modules/web-control-center/nodejs/controllers/clusters-controller.js
index 8485de1..54a5a27 100644
--- a/modules/web-control-center/nodejs/controllers/clusters-controller.js
+++ b/modules/web-control-center/nodejs/controllers/clusters-controller.js
@@ -21,9 +21,8 @@ controlCenterModule.controller('clustersController', ['$scope', '$http', 'common
         $scope.getModel = commonFunctions.getModel;
 
         $scope.templates = [
-            {value: {discovery: {Vm: {addresses: ['127.0.0.1:47500..47510']}}}, label: 'none'},
-            {value: {discovery: {kind: 'Vm', Vm: {addresses: ['127.0.0.1:47500..47510']}}}, label: 'local'},
-            {value: {discovery: {kind: 'Multicast', Vm: {addresses: ['127.0.0.1:47500..47510']}, Multicast: {}}}, label: 'multicast'}
+            {value: {discovery: {kind: 'Multicast', Vm: {addresses: ['127.0.0.1:47500..47510']}, Multicast: {}}}, label: 'multicast'},
+            {value: {discovery: {kind: 'Vm', Vm: {addresses: ['127.0.0.1:47500..47510']}}}, label: 'local'}
         ];
 
         $scope.discoveries = [

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9b6c2420/modules/web-control-center/nodejs/controllers/models/clusters.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/clusters.json b/modules/web-control-center/nodejs/controllers/models/clusters.json
index 2a2253c..e480e9d 100644
--- a/modules/web-control-center/nodejs/controllers/models/clusters.json
+++ b/modules/web-control-center/nodejs/controllers/models/clusters.json
@@ -3,11 +3,10 @@
     "Configure cluster, link caches to them and go to Summary for configuration generation."
   ],
   "templateTip": [
-    "Use following template for add cluster:",
+    "Use following template to add a new cluster:",
     "<ul>",
-    "  <li>none - Empty configuration.</li>",
-    "  <li>local - Configuration with static ips discovery and pre-configured list of IP addresses.</li>",
-    "  <li>multicast - Configuration with multicast discovery.</li>",
+    "  <li>multicast - cluster with multicast discovery.</li>",
+    "  <li>local - cluster with static ips discovery and pre-configured list of IP addresses.</li>",
     "</ul>"
   ],
   "general": [
@@ -25,7 +24,7 @@
       "placeholder": "Choose caches",
       "items": "caches",
       "tip": [
-        "Select caches to start in cluster."
+        "Select caches to start in cluster or add a new cache."
       ],
       "addLink": {
         "label": "Add cache(s)",


[11/45] incubator-ignite git commit: IGNITE-843 WIP on metadata.

Posted by se...@apache.org.
IGNITE-843 WIP on metadata.


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

Branch: refs/heads/ignite-1121
Commit: 2265fe4fe0dd0fdc3d1cd7cd532926b807b9f02d
Parents: 8424670
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Jul 14 11:57:41 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Jul 14 11:57:41 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/models/metadata.json     | 67 +++++++++-----------
 modules/web-control-center/nodejs/db.js         | 15 ++++-
 .../nodejs/views/includes/controls.jade         | 48 ++++++++++++++
 3 files changed, 92 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2265fe4f/modules/web-control-center/nodejs/controllers/models/metadata.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/metadata.json b/modules/web-control-center/nodejs/controllers/models/metadata.json
index 02b9809..1f540ae 100644
--- a/modules/web-control-center/nodejs/controllers/models/metadata.json
+++ b/modules/web-control-center/nodejs/controllers/models/metadata.json
@@ -24,81 +24,74 @@
       "placeholder": "Select kind"
     },
     {
-      "label": "dbSchema",
+      "label": "Database schema",
       "type": "text",
-      "model": "dbSchema",
+      "model": "databaseSchema",
       "required": true,
       "placeholder": "Input DB schema name"
     },
     {
-      "label": "dbTbl",
+      "label": "Database table",
       "type": "text",
-      "model": "dbTbl",
+      "model": "databaseTable",
       "required": true,
       "placeholder": "Input DB table name"
     },
     {
-      "label": "keyType",
+      "label": "Key type",
       "type": "text",
       "model": "keyType",
       "required": true,
       "placeholder": "Full class name for Key"
     },
     {
-      "label": "valType",
+      "label": "Value type",
       "type": "text",
-      "model": "valType",
+      "model": "value Type",
       "required": true,
       "placeholder": "Full class name for Value"
     },
     {
-      "label": "keyFields",
-      "type": "text",
+      "label": "Key fields",
+      "type": "fieldsMetadata",
       "model": "keyFields",
-      "required": true,
-      "placeholder": "TODO"
+      "tip": ["Collection of key fields descriptions."]
     },
     {
       "label": "valFields",
-      "type": "text",
-      "model": "valFields",
-      "required": true,
-      "placeholder": "TODO"
+      "type": "fieldsMetadata",
+      "model": "valueFields",
+      "tip": ["Collection of value fields descriptions."]
     },
     {
-      "label": "qryFlds",
+      "label": "Query fields",
       "type": "text",
-      "model": "qryFlds",
-      "required": true,
-      "placeholder": "TODO"
+      "model": "queryFields",
+      "tip": ["TODO."]
     },
     {
-      "label": "ascFlds",
+      "label": "Ascending fields",
       "type": "text",
-      "model": "ascFlds",
-      "required": true,
-      "placeholder": "TODO"
+      "model": "ascendingFields",
+      "tip": ["TODO."]
     },
     {
-      "label": "descFlds",
+      "label": "Descending fields",
       "type": "text",
-      "model": "descFlds",
-      "required": true,
-      "placeholder": "TODO"
+      "model": "descendingFields",
+      "tip": ["TODO."]
     },
     {
-      "label": "txtFlds",
-      "type": "text",
-      "model": "txtFlds",
-      "required": true,
-      "placeholder": "TODO"
+      "label": "Text fields",
+      "type": "table-simple",
+      "model": "textFields",
+      "tip": ["TODO."]
     },
     {
-      "label": "grps",
-      "type": "text",
-      "model": "grps",
-      "required": true,
-      "placeholder": "TODO"
+      "label": "Groups",
+      "type": "groupsMetadata",
+      "model": "groups",
+      "tip": ["TODO."]
     }
   ]
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2265fe4f/modules/web-control-center/nodejs/db.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/db.js b/modules/web-control-center/nodejs/db.js
index 101d4ae..b931f78 100644
--- a/modules/web-control-center/nodejs/db.js
+++ b/modules/web-control-center/nodejs/db.js
@@ -51,7 +51,20 @@ exports.Space = mongoose.model('Space', new Schema({
 // Define cache type metadata model.
 var CacheTypeMetadataSchema = new Schema({
     space: {type: ObjectId, ref: 'Space'},
-    name: String
+    name: String,
+    kind: {type: String, enum: ['query', 'store', 'both']},
+    databaseSchema: String,
+    databaseTable: String,
+    keyType: String,
+    valueType: String,
+    valType: String,
+    keyFields: [{dbName: String, dbType: Number, javaName: String, javaType: String}],
+    valueFields: [{dbName: String, dbType: Number, javaName: String, javaType: String}],
+    queryFields: [{name: String, className: String}],
+    ascendingFields: [{name: String, className: String}],
+    descendingFields:  [{name: String, className: String}],
+    textFields: [String],
+    groups: [{name: String, fields: [{field: String, direction: String}]}]
 });
 
 exports.CacheTypeMetadata = mongoose.model('CacheTypeMetadata', CacheTypeMetadataSchema);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2265fe4f/modules/web-control-center/nodejs/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/controls.jade b/modules/web-control-center/nodejs/views/includes/controls.jade
index 7fbe11e..3256f57 100644
--- a/modules/web-control-center/nodejs/views/includes/controls.jade
+++ b/modules/web-control-center/nodejs/views/includes/controls.jade
@@ -174,6 +174,54 @@ mixin form-row
                 +tipField('field.tip')
                 .input-tip
                     input.form-control(type='text' ng-model='newValue' ng-focus='field.editIdx = -1'  placeholder='{{field.placeholder}}')
+        div(ng-switch-when='fieldsMetadata')&attributes(fieldCommon)
+            div
+                label.table-header {{field.label}}:
+                +tipLabel('field.tableTip')
+            table.links-edit.col-sm-12(st-table='#{fieldMdl}' ng-show='#{fieldMdl}.length > 0')
+                tbody
+                    tr.col-sm-12(ng-repeat='item in #{fieldMdl} track by $index')
+                        td.col-sm-6
+                            div(ng-show='field.editIdx != {{$index}}')
+                                a(ng-click='field.editIdx = $index; curValue = #{fieldMdl}[$index]') {{$index + 1}}) {{item | compact}}
+                                i.tipField.fa.fa-remove(ng-click='field.editIdx = -1; #{fieldMdl}.splice($index, 1)')
+                            div(ng-show='field.editIdx == {{$index}}')
+                                label.labelField {{$index + 1}})
+                                i.tipField.fa.fa-floppy-o(ng-click='#{fieldMdl}[$index] = curValue ? curValue : #{fieldMdl}[$index]; field.editIdx = curValue ? -1 : field.editIdx')
+                                .input-tip
+                                    input.form-control(type='text' ng-model='curValue' placeholder='{{field.placeholder}}')
+                        td.col-sm-1(ng-if='field.reordering')
+                            i.fa.fa-arrow-up(ng-show='$index > 0' ng-click='swapSimpleItems(#{fieldMdl}, $index, $index - 1); field.editIdx = -1;')
+                            i.fa.fa-arrow-down(ng-show='$index < #{fieldMdl}.length - 1' ng-click='swapSimpleItems(#{fieldMdl}, $index, $index + 1); field.editIdx = -1;')
+            .col-sm-6
+                button.btn.btn-primary.fieldButton(ng-disabled='!newValue || #{fieldMdl}.indexOf(newValue) >= 0' ng-click='field.editIdx = -1; #{fieldMdl} ? #{fieldMdl}.push(newValue) : #{fieldMdl} = [newValue];') Add
+                +tipField('field.tip')
+                .input-tip
+                    input.form-control(type='text' ng-model='newValue' ng-focus='field.editIdx = -1'  placeholder='{{field.placeholder}}')
+        div(ng-switch-when='groupsMetadata')&attributes(fieldCommon)
+            div
+                label.table-header {{field.label}}:
+                +tipLabel('field.tableTip')
+            table.links-edit.col-sm-12(st-table='#{fieldMdl}' ng-show='#{fieldMdl}.length > 0')
+                tbody
+                    tr.col-sm-12(ng-repeat='item in #{fieldMdl} track by $index')
+                        td.col-sm-6
+                            div(ng-show='field.editIdx != {{$index}}')
+                                a(ng-click='field.editIdx = $index; curValue = #{fieldMdl}[$index]') {{$index + 1}}) {{item | compact}}
+                                i.tipField.fa.fa-remove(ng-click='field.editIdx = -1; #{fieldMdl}.splice($index, 1)')
+                            div(ng-show='field.editIdx == {{$index}}')
+                                label.labelField {{$index + 1}})
+                                i.tipField.fa.fa-floppy-o(ng-click='#{fieldMdl}[$index] = curValue ? curValue : #{fieldMdl}[$index]; field.editIdx = curValue ? -1 : field.editIdx')
+                                .input-tip
+                                    input.form-control(type='text' ng-model='curValue' placeholder='{{field.placeholder}}')
+                        td.col-sm-1(ng-if='field.reordering')
+                            i.fa.fa-arrow-up(ng-show='$index > 0' ng-click='swapSimpleItems(#{fieldMdl}, $index, $index - 1); field.editIdx = -1;')
+                            i.fa.fa-arrow-down(ng-show='$index < #{fieldMdl}.length - 1' ng-click='swapSimpleItems(#{fieldMdl}, $index, $index + 1); field.editIdx = -1;')
+            .col-sm-6
+                button.btn.btn-primary.fieldButton(ng-disabled='!newValue || #{fieldMdl}.indexOf(newValue) >= 0' ng-click='field.editIdx = -1; #{fieldMdl} ? #{fieldMdl}.push(newValue) : #{fieldMdl} = [newValue];') Add
+                +tipField('field.tip')
+                .input-tip
+                    input.form-control(type='text' ng-model='newValue' ng-focus='field.editIdx = -1'  placeholder='{{field.placeholder}}')
         div(ng-switch-when='indexedTypes')
             - var tblMdl = 'backupItem.indexedTypes'
             div


[30/45] incubator-ignite git commit: IGNITE-843 Use numbers as placeholders.

Posted by se...@apache.org.
IGNITE-843 Use numbers as placeholders.


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

Branch: refs/heads/ignite-1121
Commit: ce971e75dd99572a7aa63ee37235feb9ab085e84
Parents: a1a85a5
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 13:01:15 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 13:01:15 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/models/clusters.json     | 50 ++++++++++----------
 1 file changed, 25 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ce971e75/modules/web-control-center/nodejs/controllers/models/clusters.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/clusters.json b/modules/web-control-center/nodejs/controllers/models/clusters.json
index 87cb526..fbafc59 100644
--- a/modules/web-control-center/nodejs/controllers/models/clusters.json
+++ b/modules/web-control-center/nodejs/controllers/models/clusters.json
@@ -93,7 +93,7 @@
               "path": "discovery.Multicast",
               "model": "multicastPort",
               "max": 65535,
-              "placeholder": "47400",
+              "placeholder": 47400,
               "tip": [
                 "Port number which multicast messages are sent to."
               ]
@@ -103,7 +103,7 @@
               "type": "number",
               "path": "discovery.Multicast",
               "model": "responseWaitTime",
-              "placeholder": "500",
+              "placeholder": 500,
               "tip": [
                 "Time in milliseconds IP finder waits for reply to multicast address request."
               ]
@@ -113,7 +113,7 @@
               "type": "number",
               "path": "discovery.Multicast",
               "model": "addressRequestAttempts",
-              "placeholder": "2",
+              "placeholder": 2,
               "tip": [
                 "Number of attempts to send multicast address request.",
                 "IP finder re-sends request only in case if no reply for previous request is received."
@@ -328,7 +328,7 @@
           "type": "number",
           "path": "atomicConfiguration",
           "model": "backups",
-          "placeholder": "0",
+          "placeholder": 0,
           "tip": [
             "Number of backup nodes."
           ]
@@ -354,7 +354,7 @@
           "type": "number",
           "path": "atomicConfiguration",
           "model": "atomicSequenceReserveSize",
-          "placeholder": "1,000",
+          "placeholder": 1000,
           "tip": [
             "Default number of sequence values reserved for IgniteAtomicSequence instances.",
             "After a certain number has been reserved, consequent increments of sequence will happen locally, without communication with other nodes, until the next reservation has to be made."
@@ -372,7 +372,7 @@
           "label": "Timeout",
           "type": "number",
           "model": "networkTimeout",
-          "placeholder": "5,000",
+          "placeholder": 5000,
           "tip": [
             "Maximum timeout in milliseconds for network requests."
           ]
@@ -381,7 +381,7 @@
           "label": "Send retry delay",
           "type": "number",
           "model": "networkSendRetryDelay",
-          "placeholder": "1,000",
+          "placeholder": 1000,
           "tip": [
             "Interval in milliseconds between message send retries."
           ]
@@ -390,7 +390,7 @@
           "label": "Send retry count",
           "type": "number",
           "model": "networkSendRetryCount",
-          "placeholder": "3",
+          "placeholder": 3,
           "tip": [
             "Message send retries count."
           ]
@@ -399,7 +399,7 @@
           "label": "Segment check frequency",
           "type": "number",
           "model": "segmentCheckFrequency",
-          "placeholder": "10,000",
+          "placeholder": 10000,
           "tip": [
             "Network segment check frequency in milliseconds.",
             "If 0, periodic segment check is disabled and segment is checked only on topology changes (if segmentation resolvers are configured)."
@@ -422,7 +422,7 @@
           "label": "Discovery startup delay",
           "type": "number",
           "model": "discoveryStartupDelay",
-          "placeholder": "600,000",
+          "placeholder": 600000,
           "tip": [
             "This value is used to expire messages from waiting list whenever node discovery discrepancies happen."
           ]
@@ -492,7 +492,7 @@
                   "type": "number",
                   "path": "marshaller.OptimizedMarshaller",
                   "model": "poolSize",
-                  "placeholder": "0",
+                  "placeholder": 0,
                   "tip": [
                     "Specifies size of cached object streams used by marshaller.",
                     "Object streams are cached for performance reason to avoid costly recreation for every serialization routine.",
@@ -528,7 +528,7 @@
           "label": "Keep alive time",
           "type": "number",
           "model": "marshallerCacheKeepAliveTime",
-          "placeholder": "10,000",
+          "placeholder": 10000,
           "tip": [
             "Keep alive time of thread pool that is in charge of processing marshaller messages."
           ]
@@ -562,7 +562,7 @@
           "label": "History size",
           "type": "number",
           "model": "metricsHistorySize",
-          "placeholder": "10,000",
+          "placeholder": 10000,
           "min": 1,
           "tip": [
             "Number of metrics kept in history to compute totals and averages."
@@ -572,7 +572,7 @@
           "label": "Log frequency",
           "type": "number",
           "model": "metricsLogFrequency",
-          "placeholder": "60,000",
+          "placeholder": 60000,
           "tip": [
             "Frequency of metrics log print out. To disable set to 0"
           ]
@@ -581,7 +581,7 @@
           "label": "Update frequency",
           "type": "number",
           "model": "metricsUpdateFrequency",
-          "placeholder": "60,000",
+          "placeholder": 60000,
           "tip": [
             "Job metrics update frequency in milliseconds.",
             "<ul>",
@@ -619,7 +619,7 @@
           "label": "Missed resources cache size",
           "type": "number",
           "model": "peerClassLoadingMissedResourcesCacheSize",
-          "placeholder": "100",
+          "placeholder": 100,
           "tip": [
             "If size greater than 0, missed resources will be cached and next resource request ignored.",
             "If size is 0, then request for the resource will be sent to the remote node every time this resource is requested."
@@ -679,7 +679,7 @@
                   "type": "number",
                   "path": "swapSpaceSpi.FileSwapSpaceSpi",
                   "model": "maximumSparsity",
-                  "placeholder": "0.5",
+                  "placeholder": 0.5,
                   "tip": [
                     "This property defines maximum acceptable wasted file space to whole file size ratio.",
                     "When this ratio becomes higher than specified number compacting thread starts working."
@@ -721,7 +721,7 @@
           "label": "Samples size",
           "type": "number",
           "model": "clockSyncSamples",
-          "placeholder": "8",
+          "placeholder": 8,
           "tip": [
             "Number of samples used to synchronize clocks between different nodes.",
             "Clock synchronization is used for cache version assignment in CLOCK order mode."
@@ -731,7 +731,7 @@
           "label": "Frequency",
           "type": "number",
           "model": "clockSyncFrequency",
-          "placeholder": "120,000",
+          "placeholder": 120000,
           "tip": [
             "Frequency at which clock is synchronized between nodes, in milliseconds.",
             "Clock synchronization is used for cache version assignment in CLOCK order mode."
@@ -742,7 +742,7 @@
           "type": "number",
           "model": "timeServerPortBase",
           "max": 65535,
-          "placeholder": "31100",
+          "placeholder": 31100,
           "tip": [
             "Time server provides clock synchronization between nodes.",
             "Base UPD port number for grid time server. Time server will be started on one of free ports in range."
@@ -752,7 +752,7 @@
           "label": "Port range",
           "type": "number",
           "model": "timeServerPortRange",
-          "placeholder": "100",
+          "placeholder": 100,
           "tip": [
             "Time server port range."
           ]
@@ -785,7 +785,7 @@
           "label": "Management",
           "type": "number",
           "model": "managementThreadPoolSize",
-          "placeholder": "4",
+          "placeholder": 4,
           "tip": [
             "Thread pool that is in charge of processing internal and Visor ComputeJob, GridJobs."
           ]
@@ -832,7 +832,7 @@
           "type": "number",
           "path": "transactionConfiguration",
           "model": "defaultTxTimeout",
-          "placeholder": "0",
+          "placeholder": 0,
           "tip": [
             "Default transaction timeout."
           ]
@@ -842,7 +842,7 @@
           "type": "number",
           "path": "transactionConfiguration",
           "model": "pessimisticTxLogLinger",
-          "placeholder": "10,000",
+          "placeholder": 10000,
           "tip": [
             "Delay, in milliseconds, after which pessimistic recovery entries will be cleaned up for failed node."
           ]
@@ -852,7 +852,7 @@
           "type": "number",
           "path": "transactionConfiguration",
           "model": "pessimisticTxLogSize",
-          "placeholder": "0",
+          "placeholder": 0,
           "tip": [
             "Size of pessimistic transactions log stored on node in order to recover transaction commit if originating node has left grid before it has sent all messages to transaction nodes."
           ]


[05/45] incubator-ignite git commit: # ignite-843 Refactor become this user.

Posted by se...@apache.org.
# ignite-843 Refactor become this user.


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

Branch: refs/heads/ignite-1121
Commit: 88cfa4eaa71c7a0031944e9e45ad719bc1f29e6b
Parents: bd49a5e
Author: Andrey <an...@gridgain.com>
Authored: Mon Jul 13 17:34:43 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Mon Jul 13 17:34:43 2015 +0700

----------------------------------------------------------------------
 modules/web-control-center/nodejs/app.js        | 17 +++---
 .../web-control-center/nodejs/routes/admin.js   | 29 ++++-------
 .../web-control-center/nodejs/routes/profile.js |  6 +--
 .../nodejs/views/includes/header.jade           | 21 ++++----
 .../nodejs/views/settings/admin.jade            | 16 +++---
 .../nodejs/views/templates/headers.jade         | 55 --------------------
 .../nodejs/views/templates/layout.jade          | 46 ++++++++++++++--
 7 files changed, 79 insertions(+), 111 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88cfa4ea/modules/web-control-center/nodejs/app.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/app.js b/modules/web-control-center/nodejs/app.js
index 79e51c7..9fb4398 100644
--- a/modules/web-control-center/nodejs/app.js
+++ b/modules/web-control-center/nodejs/app.js
@@ -103,27 +103,22 @@ for (var p in uiUtils) {
 }
 
 app.all('*', function(req, res, next) {
-    res.locals.user = req.user;
+    var becomeUsed = req.session.viewedUser && req.user.admin;
 
-    res.locals.viewedUser = req.session.viewedUser;
+    res.locals.user = becomeUsed ? req.session.viewedUser : req.user;
+    res.locals.becomeUsed = becomeUsed;
 
     req.currentUserId = function() {
         if (!req.user)
             return null;
 
-        if (req.session.viewedUser) {
-            if (req.user.admin)
-                return req.session.viewedUser._id;
-
-            req.session.viewedUser = null;
-        }
+        if (req.session.viewedUser && req.user.admin)
+            return req.session.viewedUser._id;
 
         return req.user._id;
     };
 
-    res.locals.currentUserId = req.currentUserId;
-
-    next()
+    next();
 });
 
 app.use('/', publicRoutes);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88cfa4ea/modules/web-control-center/nodejs/routes/admin.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/admin.js b/modules/web-control-center/nodejs/routes/admin.js
index 422f08b..86ea58f 100644
--- a/modules/web-control-center/nodejs/routes/admin.js
+++ b/modules/web-control-center/nodejs/routes/admin.js
@@ -17,7 +17,6 @@
 
 var router = require('express').Router();
 var db = require('../db');
-var uiUtils = require('../helpers/ui-utils');
 
 router.get('/', function(req, res) {
     res.render('settings/admin');
@@ -27,17 +26,11 @@ router.get('/', function(req, res) {
  * Get list of user accounts.
  */
 router.post('/list', function(req, res) {
-    db.Account.find({}, function (err, users) {
+    db.Account.find({}).select('_id username email lastLogin admin').exec(function (err, users) {
         if (err)
             return res.status(500).send(err.message);
 
-        var uiUsers = [];
-
-        for (var i = 0; i < users.length; i++) {
-            uiUsers.push(uiUtils.filterUser(users[i]))
-        }
-
-        res.json(uiUsers);
+        res.json(users);
     });
 });
 
@@ -45,10 +38,10 @@ router.post('/remove', function(req, res) {
     var userId = req.body.userId;
 
     db.Account.findByIdAndRemove(userId, function(err) {
-        if (!err)
-            res.sendStatus(200);
-        else
-            res.status(500).send(err);
+        if (err)
+            return res.status(500).send(err);
+
+        res.sendStatus(200);
     });
 });
 
@@ -57,10 +50,10 @@ router.post('/save', function(req, res) {
     var adminFlag = req.body.adminFlag;
 
     db.Account.findByIdAndUpdate(userId, {admin: adminFlag}, function(err) {
-        if (!err)
-            res.sendStatus(200);
-        else
-            res.status(500).send(err);
+        if (err)
+            return res.status(500).send(err.message);
+
+        res.sendStatus(200);
     });
 });
 
@@ -79,7 +72,7 @@ router.get('/become', function(req, res) {
         if (err)
             return res.sendStatus(404);
 
-        req.session.viewedUser = {_id: viewedUser._id, username: viewedUser.username};
+        req.session.viewedUser = viewedUser;
 
         res.redirect('/');
     })

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88cfa4ea/modules/web-control-center/nodejs/routes/profile.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/profile.js b/modules/web-control-center/nodejs/routes/profile.js
index 015b07c..5caae0b 100644
--- a/modules/web-control-center/nodejs/routes/profile.js
+++ b/modules/web-control-center/nodejs/routes/profile.js
@@ -60,7 +60,7 @@ router.post('/saveUser', function (req, res) {
 
             user.setPassword(newPassword, function (err, updatedUser) {
                 if (err)
-                    return res.status(500).send(err);
+                    return res.status(500).send(err.message);
 
                 if (params.userName)
                     updatedUser.username = params.userName;
@@ -70,7 +70,7 @@ router.post('/saveUser', function (req, res) {
 
                 updatedUser.save(function (err) {
                     if (err)
-                        return res.status(500).send(err);
+                        return res.status(500).send(err.message);
 
                     res.json(uiUtils.filterUser(user));
                 });
@@ -88,7 +88,7 @@ router.post('/saveUser', function (req, res) {
 
         db.Account.findByIdAndUpdate(params._id, upd, {new: true}, function (err, val) {
             if (err)
-                return res.status(500).send(err);
+                return res.status(500).send(err.message);
 
             res.json(uiUtils.filterUser(val));
         })

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88cfa4ea/modules/web-control-center/nodejs/views/includes/header.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/header.jade b/modules/web-control-center/nodejs/views/includes/header.jade
index 1a6c1ad..5f29415 100644
--- a/modules/web-control-center/nodejs/views/includes/header.jade
+++ b/modules/web-control-center/nodejs/views/includes/header.jade
@@ -18,31 +18,30 @@ mixin header-item(active, ref, txt)
         a(ng-class='{active: isActive("#{active}")}' href='#{ref}') #{txt}
 
 header.header(id='header')
+    div.viewedUser(ng-show='becomeUsed') You're working as&nbsp;
+        strong {{user.username}}&nbsp;
+        a(href='/admin/become')
+            span.fa.fa-remove(title='Unlogin')
     .container
         h1.navbar-brand
             a(href='/') Apache Ignite Web Configurator
         .navbar-collapse.collapse(ng-controller='auth')
-            ul.nav.navbar-nav(ng-controller='activeLink' ng-show='loggedInUser')
+            ul.nav.navbar-nav(ng-controller='activeLink')
                 +header-item('/configuration', '/configuration/clusters', 'Configuration')
                 //+header-item('/monitoring', '/monitoring', 'Monitoring')
                 //+header-item('/sql', '/sql', 'SQL')
                 //+header-item('/deploy', '/deploy', 'Deploy')
             ul.nav.navbar-nav.pull-right
-                li(ng-show='loggedInUser')
-                    a.dropdown-toggle(data-toggle='dropdown' aria-expanded='true' bs-dropdown data-template='user-dropdown' data-placement='bottom-right') {{loggedInUser.username}}
+                li(ng-show='user')
+                    a.dropdown-toggle(data-toggle='dropdown' aria-expanded='true' bs-dropdown data-template='user-dropdown' data-placement='bottom-right') {{user.username}}
                         span.caret
                     script#user-dropdown(type='text/ng-template')
                         ul.dropdown-menu
                             li
                                 a(href='/profile') Profile
-                            li(ng-if='loggedInUser && loggedInUser.admin')
+                            li(ng-if='user.admin')
                                 a(href='/admin') Admin Panel
                             li
                                 a(href='/logout') Log Out
-                li.nav-login(ng-show='!loggedInUser')
-                    a(ng-click='login()' href='#') Log In
-
-        div(class='viewedUser' ng-show='viewedUser') You're working as&nbsp;
-            strong {{viewedUser.username}}&nbsp;
-            a(href='/admin/become')
-                span(class="glyphicon glyphicon-remove" title='Unlogin')
+                li.nav-login(ng-show='!user')
+                    a(ng-click='login()' href='#') Log In
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88cfa4ea/modules/web-control-center/nodejs/views/settings/admin.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/settings/admin.jade b/modules/web-control-center/nodejs/views/settings/admin.jade
index 2bceab5..3205c8f 100644
--- a/modules/web-control-center/nodejs/views/settings/admin.jade
+++ b/modules/web-control-center/nodejs/views/settings/admin.jade
@@ -37,17 +37,17 @@ block container
                             th(width='1%'  st-sort='admin') Admin
                             th(width='1%') Actions
                     tbody
-                        tr(ng-repeat='user in displayedUsers')
-                            td {{user.username}}
+                        tr(ng-repeat='row in displayedUsers')
+                            td {{row.username}}
                             td
-                                a(ng-href='mailto:{{user.email}}') {{user.email}}
+                                a(ng-href='mailto:{{row.email}}') {{row.email}}
                             td
-                                span {{user.lastLogin | date:'medium'}}
+                                span {{row.lastLogin | date:'medium'}}
                             td(style='text-align: center;')
-                                input(type='checkbox' ng-disabled='user.adminChanging || user._id == loggedInUser._id'
-                                    ng-model='user.admin' ng-change='toggleAdmin(user)')
+                                input(type='checkbox' ng-disabled='row.adminChanging || row._id == user._id'
+                                    ng-model='row.admin' ng-change='toggleAdmin(user)')
                             td(style='text-align: center;')
-                                a(ng-click='removeUser(user)' ng-show='user._id != loggedInUser._id' title='Remove user')
+                                a(ng-click='removeUser(row)' ng-show='row._id != user._id' title='Remove user')
                                     i.fa.fa-remove
-                                a(style='margin-left: 5px' ng-href='admin/become?viewedUserId={{user._id}}' ng-show='user._id != loggedInUser._id' title='View user\'s configurations')
+                                a(style='margin-left: 5px' ng-href='admin/become?viewedUserId={{row._id}}' ng-show='row._id != user._id' title='View user\'s configurations')
                                     i.fa.fa-eye

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88cfa4ea/modules/web-control-center/nodejs/views/templates/headers.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/templates/headers.jade b/modules/web-control-center/nodejs/views/templates/headers.jade
deleted file mode 100644
index c70f9d1..0000000
--- a/modules/web-control-center/nodejs/views/templates/headers.jade
+++ /dev/null
@@ -1,55 +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.
-
-doctype html
-html(ng-app='ignite-web-control-center', ng-init='loggedInUser = #{JSON.stringify(filterUser(user))}; viewedUser = #{JSON.stringify(viewedUser)}')
-    head
-        title= title
-
-        block css
-            // Bootstrap
-            link(rel='stylesheet', href='//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.css')
-
-            // Font Awesome Icons
-            link(rel='stylesheet', href='//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.css')
-
-            // Font
-            link(rel='stylesheet', href='//fonts.googleapis.com/css?family=Roboto+Slab:700:serif|Roboto+Slab:400:serif')
-
-            link(rel='stylesheet', href='/stylesheets/style.css')
-
-        block scripts
-            script(src='//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js')
-
-            script(src='//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.min.js')
-
-            script(src='//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js')
-            script(src='//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-sanitize.js')
-            script(src='//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.js')
-            script(src='//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.tpl.min.js')
-
-            script(src='https://cdnjs.cloudflare.com/ajax/libs/angular-smart-table/2.0.3/smart-table.js')
-
-            script(src='/common-module.js')
-            script(src='/data-structures.js')
-
-    body.theme-line.body-overlap
-        .wrapper
-            include ../includes/header
-
-            block main-container
-
-            include ../includes/footer

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88cfa4ea/modules/web-control-center/nodejs/views/templates/layout.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/templates/layout.jade b/modules/web-control-center/nodejs/views/templates/layout.jade
index 17f8da1..e7adc8c 100644
--- a/modules/web-control-center/nodejs/views/templates/layout.jade
+++ b/modules/web-control-center/nodejs/views/templates/layout.jade
@@ -14,9 +14,45 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 
-extends headers
+doctype html
+html(ng-app='ignite-web-control-center', ng-init='user = #{JSON.stringify(filterUser(user))}; becomeUsed = #{becomeUsed}')
+    head
+        title= title
 
-block main-container
-    .container.body-container
-        .main-content
-            block container
+        block css
+            // Bootstrap
+            link(rel='stylesheet', href='//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.css')
+
+            // Font Awesome Icons
+            link(rel='stylesheet', href='//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.css')
+
+            // Font
+            link(rel='stylesheet', href='//fonts.googleapis.com/css?family=Roboto+Slab:700:serif|Roboto+Slab:400:serif')
+
+            link(rel='stylesheet', href='/stylesheets/style.css')
+
+        block scripts
+            script(src='//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js')
+
+            script(src='//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.min.js')
+
+            script(src='//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js')
+            script(src='//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-sanitize.js')
+            script(src='//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.js')
+            script(src='//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.tpl.min.js')
+
+            script(src='https://cdnjs.cloudflare.com/ajax/libs/angular-smart-table/2.0.3/smart-table.js')
+
+            script(src='/common-module.js')
+            script(src='/data-structures.js')
+
+    body.theme-line.body-overlap
+        .wrapper
+            include ../includes/header
+
+            block main-container
+                .container.body-container
+                    .main-content
+                        block container
+
+            include ../includes/footer


[23/45] incubator-ignite git commit: IGNITE-843 Implemented selection of first item.

Posted by se...@apache.org.
IGNITE-843 Implemented selection of first item.


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

Branch: refs/heads/ignite-1121
Commit: 974b408becf958732bb481445a0cb40b269db7b2
Parents: c64b19e
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 10:08:06 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 10:08:06 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/caches-controller.js     | 21 ++++----------
 .../nodejs/controllers/clusters-controller.js   | 29 ++++++++++----------
 .../nodejs/controllers/summary-controller.js    | 12 +++++---
 3 files changed, 28 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/974b408b/modules/web-control-center/nodejs/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/caches-controller.js b/modules/web-control-center/nodejs/controllers/caches-controller.js
index 714ab43..fa308da 100644
--- a/modules/web-control-center/nodejs/controllers/caches-controller.js
+++ b/modules/web-control-center/nodejs/controllers/caches-controller.js
@@ -85,7 +85,6 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
                 commonFunctions.showError(errMsg);
             });
 
-        $scope.firstTime = true;
         $scope.caches = [];
 
         $scope.required = function (field) {
@@ -115,21 +114,10 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
                 $scope.spaces = data.spaces;
                 $scope.caches = data.caches;
 
-                if ($scope.firstTime) {
-                    console.log("firstTime");
-                    $scope.firstTime = false;
+                var restoredItem = angular.fromJson(sessionStorage.cacheBackupItem);
 
-                    if ($scope.caches.length > 0)
-                        $scope.selectItem($scope.caches[0]);
-
-                    sessionStorage.removeItem('cacheBackupItem');
-                }
-                else {
-                    console.log("not firstTime");
-
-                    var restoredItem = angular.fromJson(sessionStorage.cacheBackupItem);
-
-                    if (restoredItem && restoredItem._id) {
+                if (restoredItem) {
+                    if (restoredItem._id) {
                         var idx = _.findIndex($scope.caches, function (cache) {
                             return cache._id == restoredItem._id;
                         });
@@ -143,8 +131,9 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
                     }
                     else
                         $scope.backupItem = restoredItem;
-
                 }
+                else if ($scope.caches.length > 0)
+                    $scope.selectItem($scope.caches[0]);
 
                 $scope.$watch('backupItem', function (val) {
                     if (val)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/974b408b/modules/web-control-center/nodejs/controllers/clusters-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/clusters-controller.js b/modules/web-control-center/nodejs/controllers/clusters-controller.js
index c8d3181..8485de1 100644
--- a/modules/web-control-center/nodejs/controllers/clusters-controller.js
+++ b/modules/web-control-center/nodejs/controllers/clusters-controller.js
@@ -107,21 +107,24 @@ controlCenterModule.controller('clustersController', ['$scope', '$http', 'common
 
                 var restoredItem = angular.fromJson(sessionStorage.clusterBackupItem);
 
-                if (restoredItem && restoredItem._id) {
-                    var idx = _.findIndex($scope.clusters, function (cluster) {
-                        return cluster._id == restoredItem._id;
-                    });
-
-                    if (idx >= 0) {
-                        $scope.selectedItem = $scope.clusters[idx];
-
-                        $scope.backupItem = restoredItem;
+                if (restoredItem) {
+                    if (restoredItem._id) {
+                        var idx = _.findIndex($scope.clusters, function (cluster) {
+                            return cluster._id == restoredItem._id;
+                        });
+
+                        if (idx >= 0) {
+                            $scope.selectedItem = $scope.clusters[idx];
+                            $scope.backupItem = restoredItem;
+                        }
+                        else
+                            sessionStorage.removeItem('clusterBackupItem');
                     }
                     else
-                        sessionStorage.removeItem('clusterBackupItem');
+                        $scope.backupItem = restoredItem;
                 }
-                else
-                    $scope.backupItem = restoredItem;
+                else if ($scope.clusters.length > 0)
+                    $scope.selectItem($scope.clusters[0]);
 
                 $scope.$watch('backupItem', function (val) {
                     if (val)
@@ -134,14 +137,12 @@ controlCenterModule.controller('clustersController', ['$scope', '$http', 'common
 
         $scope.selectItem = function (item) {
             $scope.selectedItem = item;
-
             $scope.backupItem = angular.copy(item);
         };
 
         // Add new cluster.
         $scope.createItem = function () {
             $scope.backupItem = angular.copy($scope.create.template);
-
             $scope.backupItem.space = $scope.spaces[0]._id;
         };
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/974b408b/modules/web-control-center/nodejs/controllers/summary-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/summary-controller.js b/modules/web-control-center/nodejs/controllers/summary-controller.js
index 6a5443e..a5b5a68 100644
--- a/modules/web-control-center/nodejs/controllers/summary-controller.js
+++ b/modules/web-control-center/nodejs/controllers/summary-controller.js
@@ -39,10 +39,7 @@ controlCenterModule.controller('summaryController', ['$scope', '$http', 'commonF
     $scope.os = undefined;
 
     $scope.generated = undefined;
-
-    $http.post('clusters/list').success(function (data) {
-        $scope.clusters = data.clusters;
-    });
+    $scope.clusters = [];
 
     $scope.reload = function() {
         $("<pre class='brush:java' />").text($scope.javaClass ? $scope.generated.javaClass : $scope.generated.javaSnippet).appendTo($('#javaResultDiv').empty());
@@ -99,4 +96,11 @@ controlCenterModule.controller('summaryController', ['$scope', '$http', 'commonF
                 $scope.generateError = "Failed to generate zip: " + data;
             });
     };
+
+    $http.post('clusters/list').success(function (data) {
+        $scope.clusters = data.clusters;
+
+        if ($scope.clusters.length > 0)
+            $scope.generate($scope.clusters[0]);
+    });
 }]);


[26/45] incubator-ignite git commit: IGNITE-843 Rename checked to placeholder + typo fix.

Posted by se...@apache.org.
IGNITE-843 Rename checked to placeholder + typo fix.


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

Branch: refs/heads/ignite-1121
Commit: 056e25ad729f6041f432ef73894e5ad5f7ad87a3
Parents: dbc6b5b
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 10:43:06 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 10:43:06 2015 +0700

----------------------------------------------------------------------
 modules/web-control-center/nodejs/controllers/models/caches.json | 4 ++--
 modules/web-control-center/nodejs/views/includes/controls.jade   | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/056e25ad/modules/web-control-center/nodejs/controllers/models/caches.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/caches.json b/modules/web-control-center/nodejs/controllers/models/caches.json
index 0b1d57a..c8fb9cd 100644
--- a/modules/web-control-center/nodejs/controllers/models/caches.json
+++ b/modules/web-control-center/nodejs/controllers/models/caches.json
@@ -54,7 +54,7 @@
       "label": "Read from backup",
       "type": "check",
       "model": "readFromBackup",
-      "checked": true,
+      "placeholder": true,
       "hide": "!backupItem.backups || backupItem.mode == 'LOCAL'",
       "tip": [
         "Flag indicating whether data can be read from backup.",
@@ -65,7 +65,7 @@
       "label": "Copy on read",
       "type": "check",
       "model": "copyOnRead",
-      "checked": true,
+      "placeholder": true,
       "tip": [
         "Flag indicating whether copy of of the value stored in cache should be created for cache operation implying return value.",
         "Also if this flag is set copies are created for values passed to CacheInterceptor and to CacheEntryProcessor."

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/056e25ad/modules/web-control-center/nodejs/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/controls.jade b/modules/web-control-center/nodejs/views/includes/controls.jade
index 2b79208..0fcf78a 100644
--- a/modules/web-control-center/nodejs/views/includes/controls.jade
+++ b/modules/web-control-center/nodejs/views/includes/controls.jade
@@ -102,7 +102,7 @@ mixin form-row
     div(ng-switch='field.type')
         div.checkbox.col-sm-6(ng-switch-when='check' ng-hide=fieldHide)
             label
-                input(type='checkbox' ng-checked='#{fieldMdl} = field.checked')&attributes(fieldCommon)
+                input(type='checkbox' ng-checked='field.placeholder')&attributes(fieldCommon)
                 | {{field.label}}
                 +tipLabel('field.tip')
         div(ng-switch-when='text' ng-hide=fieldHide)


[40/45] incubator-ignite git commit: Merge remote-tracking branch 'origin/ignite-843' into ignite-843

Posted by se...@apache.org.
Merge remote-tracking branch 'origin/ignite-843' into ignite-843


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

Branch: refs/heads/ignite-1121
Commit: ecf4e20ad95313f7581c09f3f2630a8de9f36edd
Parents: 1d07c2a 34d54d3
Author: Andrey <an...@gridgain.com>
Authored: Wed Jul 15 17:26:15 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Wed Jul 15 17:26:15 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/caches-controller.js     | 14 ++++++--
 .../nodejs/controllers/metadata-controller.js   |  6 ++++
 .../nodejs/controllers/models/caches.json       |  6 +++-
 .../nodejs/controllers/models/metadata.json     |  3 +-
 .../nodejs/routes/generator/java.js             |  4 ++-
 .../nodejs/routes/generator/xml.js              |  4 +--
 .../nodejs/views/configuration/metadata.jade    | 36 ++++++++++++++------
 7 files changed, 53 insertions(+), 20 deletions(-)
----------------------------------------------------------------------



[03/45] incubator-ignite git commit: Merge remote-tracking branch 'origin/ignite-843' into ignite-843

Posted by se...@apache.org.
Merge remote-tracking branch 'origin/ignite-843' into ignite-843


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

Branch: refs/heads/ignite-1121
Commit: f0701d3fd71ed4c202e3f74af790486b40868624
Parents: 6acfa14 14bb9dc
Author: Andrey <an...@gridgain.com>
Authored: Mon Jul 13 16:26:46 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Mon Jul 13 16:26:46 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/caches-controller.js              | 11 +++++++++++
 .../nodejs/controllers/common-module.js                  |  3 +++
 .../nodejs/views/includes/controls.jade                  |  4 ++--
 3 files changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f0701d3f/modules/web-control-center/nodejs/controllers/common-module.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f0701d3f/modules/web-control-center/nodejs/views/includes/controls.jade
----------------------------------------------------------------------


[20/45] incubator-ignite git commit: IGNITE-843 Fixed broken indexed types save.

Posted by se...@apache.org.
IGNITE-843 Fixed broken indexed types save.


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

Branch: refs/heads/ignite-1121
Commit: 27c33697057a778c4fe93b18b8fd97def54315ab
Parents: c1eb007
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Jul 14 17:53:15 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Jul 14 17:53:15 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/caches-controller.js     | 42 ++++++++++++++++++++
 .../nodejs/controllers/metadata-controller.js   | 42 --------------------
 2 files changed, 42 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/27c33697/modules/web-control-center/nodejs/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/caches-controller.js b/modules/web-control-center/nodejs/controllers/caches-controller.js
index 8fdbc70..4564596 100644
--- a/modules/web-control-center/nodejs/controllers/caches-controller.js
+++ b/modules/web-control-center/nodejs/controllers/caches-controller.js
@@ -212,5 +212,47 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
                     commonFunctions.showError(errMsg);
                 });
         };
+
+        $scope.checkIndexedTypes = function (keyCls, valCls) {
+            if (!keyCls) {
+                commonFunctions.showError('Key class name should be non empty!');
+
+                return false;
+            }
+
+            if (!valCls) {
+                commonFunctions.showError('Value class name should be non empty!');
+
+                return false;
+            }
+
+            return true;
+        };
+
+        $scope.addIndexedTypes = function (keyCls, valCls) {
+            if (!$scope.checkIndexedTypes(keyCls, valCls))
+                return;
+
+            var idxTypes = $scope.backupItem.indexedTypes;
+
+            var newItem = {keyClass: keyCls, valueClass: valCls};
+
+            if (idxTypes)
+                idxTypes.push(newItem);
+            else
+                $scope.backupItem.indexedTypes = [newItem];
+        };
+
+        $scope.saveIndexedType = function (idx, keyCls, valCls) {
+            if (!$scope.checkIndexedTypes(keyCls, valCls))
+                return idx;
+
+            var idxType = $scope.backupItem.indexedTypes[idx];
+
+            idxType.keyClass = keyCls;
+            idxType.valueClass = valCls;
+
+            return -1;
+        };
     }]
 );
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/27c33697/modules/web-control-center/nodejs/controllers/metadata-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/metadata-controller.js b/modules/web-control-center/nodejs/controllers/metadata-controller.js
index c8a923c..a826e04 100644
--- a/modules/web-control-center/nodejs/controllers/metadata-controller.js
+++ b/modules/web-control-center/nodejs/controllers/metadata-controller.js
@@ -134,47 +134,5 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
                     commonFunctions.showError(errMsg);
                 });
         };
-
-        $scope.checkIndexedTypes = function (keyCls, valCls) {
-            if (!keyCls) {
-                commonFunctions.showError('Key class name should be non empty!');
-
-                return false;
-            }
-
-            if (!valCls) {
-                commonFunctions.showError('Value class name should be non empty!');
-
-                return false;
-            }
-
-            return true;
-        };
-
-        $scope.addIndexedTypes = function (keyCls, valCls) {
-            if (!$scope.checkIndexedTypes(keyCls, valCls))
-                return;
-
-            var idxTypes = $scope.backupItem.indexedTypes;
-
-            var newItem = {keyClass: keyCls, valueClass: valCls};
-
-            if (idxTypes)
-                idxTypes.push(newItem);
-            else
-                $scope.backupItem.indexedTypes = [newItem];
-        };
-
-        $scope.saveIndexedType = function (idx, keyCls, valCls) {
-            if (!$scope.checkIndexedTypes(keyCls, valCls))
-                return idx;
-
-            var idxType = $scope.backupItem.indexedTypes[idx];
-
-            idxType.keyClass = keyCls;
-            idxType.valueClass = valCls;
-
-            return -1;
-        };
     }]
 );
\ No newline at end of file


[07/45] incubator-ignite git commit: IGNITE-843: WIP on cache type metadata.

Posted by se...@apache.org.
IGNITE-843: WIP on cache type metadata.


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

Branch: refs/heads/ignite-1121
Commit: 010a2a3246f047f888de04e5b48095fd06c961e4
Parents: 777ec16
Author: AKuznetsov <ak...@gridgain.com>
Authored: Mon Jul 13 23:17:52 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Mon Jul 13 23:17:52 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/metadata-controller.js   |  7 ++
 .../nodejs/controllers/models/clusters.json     |  2 +-
 .../nodejs/controllers/models/metadata.json     | 93 ++++++++++++++++++++
 .../nodejs/views/configuration/metadata.jade    |  5 +-
 4 files changed, 105 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/010a2a32/modules/web-control-center/nodejs/controllers/metadata-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/metadata-controller.js b/modules/web-control-center/nodejs/controllers/metadata-controller.js
index 0a0e18c..93074cd 100644
--- a/modules/web-control-center/nodejs/controllers/metadata-controller.js
+++ b/modules/web-control-center/nodejs/controllers/metadata-controller.js
@@ -20,10 +20,17 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
         $scope.joinTip = commonFunctions.joinTip;
         $scope.getModel = commonFunctions.getModel;
 
+        $scope.templates = [
+            {value: 'query', label: 'query'},
+            {value: 'store', label: 'store'},
+            {value: 'both', label: 'both'}
+        ];
+
         $scope.metadata = [];
 
         $http.get('/models/metadata.json')
             .success(function (data) {
+                $scope.templateTip = data.templateTip;
                 $scope.general = data.general;
             })
             .error(function (errMsg) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/010a2a32/modules/web-control-center/nodejs/controllers/models/clusters.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/clusters.json b/modules/web-control-center/nodejs/controllers/models/clusters.json
index 76926e5..8c4f828 100644
--- a/modules/web-control-center/nodejs/controllers/models/clusters.json
+++ b/modules/web-control-center/nodejs/controllers/models/clusters.json
@@ -2,7 +2,7 @@
   "templateTip": [
     "Use following template for add cluster:",
     "<ul>",
-    "  <li>blank - Empty configuration.</li>",
+    "  <li>none - Empty configuration.</li>",
     "  <li>local - Configuration with static ips discovery and pre-configured list of IP addresses.</li>",
     "  <li>multicast - Configuration with multicast discovery.</li>",
     "</ul>"

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/010a2a32/modules/web-control-center/nodejs/controllers/models/metadata.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/metadata.json b/modules/web-control-center/nodejs/controllers/models/metadata.json
index 5a125d5..02b9809 100644
--- a/modules/web-control-center/nodejs/controllers/models/metadata.json
+++ b/modules/web-control-center/nodejs/controllers/models/metadata.json
@@ -1,4 +1,12 @@
 {
+  "templateTip": [
+    "Use following template for metadata:",
+    "<ul>",
+    "  <li>query - Create cache type metadata to use with queries only.</li>",
+    "  <li>store - Create cache type metadata to use with JDBC POJO store only.</li>",
+    "  <li>both - Create cache type metadata to use with query and store.</li>",
+    "</ul>"
+  ],
   "general": [
     {
       "label": "Name",
@@ -6,6 +14,91 @@
       "model": "name",
       "required": true,
       "placeholder": "Input name"
+    },
+    {
+      "label": "kind",
+      "type": "dropdown",
+      "model": "kind",
+      "required": true,
+      "items": "templates",
+      "placeholder": "Select kind"
+    },
+    {
+      "label": "dbSchema",
+      "type": "text",
+      "model": "dbSchema",
+      "required": true,
+      "placeholder": "Input DB schema name"
+    },
+    {
+      "label": "dbTbl",
+      "type": "text",
+      "model": "dbTbl",
+      "required": true,
+      "placeholder": "Input DB table name"
+    },
+    {
+      "label": "keyType",
+      "type": "text",
+      "model": "keyType",
+      "required": true,
+      "placeholder": "Full class name for Key"
+    },
+    {
+      "label": "valType",
+      "type": "text",
+      "model": "valType",
+      "required": true,
+      "placeholder": "Full class name for Value"
+    },
+    {
+      "label": "keyFields",
+      "type": "text",
+      "model": "keyFields",
+      "required": true,
+      "placeholder": "TODO"
+    },
+    {
+      "label": "valFields",
+      "type": "text",
+      "model": "valFields",
+      "required": true,
+      "placeholder": "TODO"
+    },
+    {
+      "label": "qryFlds",
+      "type": "text",
+      "model": "qryFlds",
+      "required": true,
+      "placeholder": "TODO"
+    },
+    {
+      "label": "ascFlds",
+      "type": "text",
+      "model": "ascFlds",
+      "required": true,
+      "placeholder": "TODO"
+    },
+    {
+      "label": "descFlds",
+      "type": "text",
+      "model": "descFlds",
+      "required": true,
+      "placeholder": "TODO"
+    },
+    {
+      "label": "txtFlds",
+      "type": "text",
+      "model": "txtFlds",
+      "required": true,
+      "placeholder": "TODO"
+    },
+    {
+      "label": "grps",
+      "type": "text",
+      "model": "grps",
+      "required": true,
+      "placeholder": "TODO"
     }
   ]
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/010a2a32/modules/web-control-center/nodejs/views/configuration/metadata.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/metadata.jade b/modules/web-control-center/nodejs/views/configuration/metadata.jade
index 5c21c2b..b3469f2 100644
--- a/modules/web-control-center/nodejs/views/configuration/metadata.jade
+++ b/modules/web-control-center/nodejs/views/configuration/metadata.jade
@@ -32,7 +32,10 @@ block content
                     tr(ng-repeat='row in metadata track by row._id')
                         td.col-sm-6(ng-class='{active: row._id == selectedItem._id}')
                             a(ng-click='selectItem(row)') {{$index + 1}}) {{row.name}}
-        button.btn.btn-primary(ng-click='createItem()') Add metadata
+        button.btn.btn-primary(ng-click='createItem()' ng-disabled='!create.template') &nbspAdd metadata
+        label(style='margin-left: 15px; margin-right: 10px') for:
+        button.btn.btn-default(ng-init='create.template = templates[0].value' ng-model='create.template' data-template='/select' data-placeholder='Choose metadata type' bs-options='item.value as item.label for item in templates' bs-select)
+        i.tiplabel.fa.fa-question-circle(bs-tooltip data-title='{{joinTip(templateTip)}}' type='button')
         hr
         form.form-horizontal(name='inputForm' ng-if='backupItem' novalidate)
             .panel-body


[36/45] incubator-ignite git commit: IGNITE-843 Added check for write-behind & store. Hide write-behind settings. Fix escape all label text. Fixed indexed types xml generation.

Posted by se...@apache.org.
IGNITE-843 Added check for write-behind & store. Hide write-behind settings. Fix escape all label text. Fixed indexed types xml generation.


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

Branch: refs/heads/ignite-1121
Commit: fca9ac999777b5c02494d06f2fd96daec76c076f
Parents: 55f7e07
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 16:23:57 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 16:23:57 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/caches-controller.js           | 14 +++++++++++---
 .../nodejs/controllers/models/caches.json             |  6 +++++-
 .../web-control-center/nodejs/routes/generator/xml.js |  4 ++--
 3 files changed, 18 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fca9ac99/modules/web-control-center/nodejs/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/caches-controller.js b/modules/web-control-center/nodejs/controllers/caches-controller.js
index fa308da..5c9a793 100644
--- a/modules/web-control-center/nodejs/controllers/caches-controller.js
+++ b/modules/web-control-center/nodejs/controllers/caches-controller.js
@@ -159,14 +159,22 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
         $scope.saveItem = function () {
             var item = $scope.backupItem;
 
-            if (item.cacheStoreFactory && item.cacheStoreFactory.kind && !(item.readThrough || item.writeThrough)) {
+            var cacheStoreFactorySelected = item.cacheStoreFactory && item.cacheStoreFactory.kind;
+
+            if (cacheStoreFactorySelected && !(item.readThrough || item.writeThrough)) {
                 commonFunctions.showError('Store is configured but read/write through are not enabled!');
 
                 return;
             }
 
-            if ((item.readThrough || item.writeThrough) && (!item.cacheStoreFactory || !item.cacheStoreFactory.kind)) {
-                commonFunctions.showError('Read / write through are enabled but strore is not configured!');
+            if ((item.readThrough || item.writeThrough) && !cacheStoreFactorySelected) {
+                commonFunctions.showError('Read / write through are enabled but store is not configured!');
+
+                return;
+            }
+
+            if (item.writeBehindEnabled && !cacheStoreFactorySelected) {
+                commonFunctions.showError('Write behind enabled but store is not configured!');
 
                 return;
             }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fca9ac99/modules/web-control-center/nodejs/controllers/models/caches.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/caches.json b/modules/web-control-center/nodejs/controllers/models/caches.json
index d54c5eb..7becbdd 100644
--- a/modules/web-control-center/nodejs/controllers/models/caches.json
+++ b/modules/web-control-center/nodejs/controllers/models/caches.json
@@ -328,7 +328,7 @@
       ],
       "fields": [
         {
-          "label": "Escape all",
+          "label": "Escape table and filed names",
           "type": "check",
           "model": "sqlEscapeAll",
           "tip": [
@@ -859,6 +859,7 @@
           "label": "Batch size",
           "type": "number",
           "model": "writeBehindBatchSize",
+          "hide": "!backupItem.writeBehindEnabled",
           "placeholder": 512,
           "tip": [
             "Maximum batch size for write-behind cache store operations.",
@@ -869,6 +870,7 @@
           "label": "Flush size",
           "type": "number",
           "model": "writeBehindFlushSize",
+          "hide": "!backupItem.writeBehindEnabled",
           "placeholder": 10240,
           "tip": [
             "Maximum size of the write-behind cache.<br>",
@@ -879,6 +881,7 @@
           "label": "Flush frequency",
           "type": "number",
           "model": "writeBehindFlushFrequency",
+          "hide": "!backupItem.writeBehindEnabled",
           "placeholder": 5000,
           "tip": [
             "Frequency with which write-behind cache is flushed to the cache store in milliseconds."
@@ -888,6 +891,7 @@
           "label": "Flush threads count",
           "type": "number",
           "model": "writeBehindFlushThreadCount",
+          "hide": "!backupItem.writeBehindEnabled",
           "placeholder": 1,
           "tip": [
             "Number of threads that will perform cache flushing."

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fca9ac99/modules/web-control-center/nodejs/routes/generator/xml.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/generator/xml.js b/modules/web-control-center/nodejs/routes/generator/xml.js
index f01d136..9e45111 100644
--- a/modules/web-control-center/nodejs/routes/generator/xml.js
+++ b/modules/web-control-center/nodejs/routes/generator/xml.js
@@ -380,7 +380,7 @@ function generateCacheConfiguration(cacheCfg, res) {
 
     if (cacheCfg.indexedTypes && cacheCfg.indexedTypes.length > 0) {
         res.startBlock('<property name="indexedTypes">');
-        res.startBlock('<array>');
+        res.startBlock('<list>');
 
         for (var i = 0; i < cacheCfg.indexedTypes.length; i++) {
             var pair = cacheCfg.indexedTypes[i];
@@ -389,7 +389,7 @@ function generateCacheConfiguration(cacheCfg, res) {
             res.line('<value>' + escape(pair.valueClass) + '</value>');
         }
 
-        res.endBlock('</array>');
+        res.endBlock('</list>');
         res.endBlock('</property>');
     }
 


[13/45] incubator-ignite git commit: IGNITE-843 Code format.

Posted by se...@apache.org.
IGNITE-843 Code format.


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

Branch: refs/heads/ignite-1121
Commit: 9c93dcc4e3bf2013a9d1f72f967d0ff7912c7037
Parents: 5a0ae67
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Jul 14 11:58:48 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Jul 14 11:58:48 2015 +0700

----------------------------------------------------------------------
 modules/web-control-center/nodejs/routes/admin.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9c93dcc4/modules/web-control-center/nodejs/routes/admin.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/admin.js b/modules/web-control-center/nodejs/routes/admin.js
index 59749c7..9731603 100644
--- a/modules/web-control-center/nodejs/routes/admin.js
+++ b/modules/web-control-center/nodejs/routes/admin.js
@@ -25,7 +25,7 @@ router.get('/', function (req, res) {
 /**
  * Get list of user accounts.
  */
-router.post('/list', function(req, res) {
+router.post('/list', function (req, res) {
     db.Account.find({}).select('-attempts -hash -salt').exec(function (err, users) {
         if (err)
             return res.status(500).send(err.message);


[38/45] incubator-ignite git commit: IGNITE-843 Added import for cache modes.

Posted by se...@apache.org.
IGNITE-843 Added import for cache modes.


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

Branch: refs/heads/ignite-1121
Commit: 34d54d341efeed7f510f1e273a2f2a058a9f62b5
Parents: 9c85506
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 17:18:19 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 17:18:19 2015 +0700

----------------------------------------------------------------------
 modules/web-control-center/nodejs/routes/generator/java.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34d54d34/modules/web-control-center/nodejs/routes/generator/java.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/generator/java.js b/modules/web-control-center/nodejs/routes/generator/java.js
index 47d7921..75f6052 100644
--- a/modules/web-control-center/nodejs/routes/generator/java.js
+++ b/modules/web-control-center/nodejs/routes/generator/java.js
@@ -339,8 +339,10 @@ function generateCacheConfiguration(cacheCfg, varName, res) {
 
     res.emptyLineIfNeeded();
 
+    res.importClass('org.apache.ignite.cache.CacheAtomicityMode');
+    res.importClass('org.apache.ignite.cache.CacheMode');
     res.importClass('org.apache.ignite.configuration.CacheConfiguration');
-    
+
     res.line('CacheConfiguration ' + varName + ' = new CacheConfiguration();');
 
     res.needEmptyLine = true;


[28/45] incubator-ignite git commit: # ignite-843 Added client configuration generation.

Posted by se...@apache.org.
# ignite-843 Added client configuration generation.


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

Branch: refs/heads/ignite-1121
Commit: 6ee8f3486954310a773a71f6800784104f601730
Parents: 3e59cb1
Author: Andrey <an...@gridgain.com>
Authored: Wed Jul 15 10:56:04 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Wed Jul 15 10:56:04 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/models/summary.json      | 145 +++++++++++++++++++
 .../nodejs/controllers/summary-controller.js    |  94 +++++++++---
 .../nodejs/routes/generator/java.js             |  56 ++++---
 .../nodejs/routes/generator/xml.js              |  20 ++-
 .../web-control-center/nodejs/routes/summary.js |  33 +++--
 .../nodejs/views/configuration/summary.jade     | 129 +++++++++++------
 .../nodejs/views/settings/admin.jade            |   2 +-
 7 files changed, 379 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ee8f348/modules/web-control-center/nodejs/controllers/models/summary.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/summary.json b/modules/web-control-center/nodejs/controllers/models/summary.json
index 63cc4a6..d0a2db1 100644
--- a/modules/web-control-center/nodejs/controllers/models/summary.json
+++ b/modules/web-control-center/nodejs/controllers/models/summary.json
@@ -1,5 +1,150 @@
 {
   "screenTip": [
     "Overview and download XML and java code for cluster configurations."
+  ],
+  "clientFields": [
+    {
+      "label": "Start size",
+      "type": "number",
+      "path": "nearConfiguration",
+      "model": "nearStartSize",
+      "placeholder": 375000,
+      "tip": [
+        "Initial cache size for near cache which will be used to pre-create internal hash table after start."
+      ]
+    },
+    {
+      "label": "Eviction policy",
+      "type": "dropdown-details",
+      "path": "nearConfiguration.nearEvictionPolicy",
+      "model": "kind",
+      "placeholder": "Choose eviction policy",
+      "items": "evictionPolicies",
+      "tip": [
+        "Cache expiration policy."
+      ],
+      "details": {
+        "LRU": {
+          "expanded": false,
+          "fields": [
+            {
+              "label": "Batch size",
+              "type": "number",
+              "path": "nearConfiguration.nearEvictionPolicy.LRU",
+              "model": "batchSize",
+              "placeholder": 1,
+              "tip": [
+                "Number of entries to remove on shrink."
+              ]
+            },
+            {
+              "label": "Max memory size",
+              "type": "number",
+              "path": "nearConfiguration.nearEvictionPolicy.LRU",
+              "model": "maxMemorySize",
+              "placeholder": 0,
+              "tip": [
+                "Maximum allowed cache size in bytes."
+              ]
+            },
+            {
+              "label": "Max size",
+              "type": "number",
+              "path": "nearConfiguration.nearEvictionPolicy.LRU",
+              "model": "maxSize",
+              "placeholder": 100000,
+              "tip": [
+                "Maximum allowed size of cache before entry will start getting evicted."
+              ]
+            }
+          ]
+        },
+        "RND": {
+          "expanded": false,
+          "fields": [
+            {
+              "label": "Max size",
+              "type": "number",
+              "path": "nearConfiguration.nearEvictionPolicy.RND",
+              "model": "maxSize",
+              "placeholder": 100000,
+              "tip": [
+                "Maximum allowed size of cache before entry will start getting evicted."
+              ]
+            }
+          ]
+        },
+        "FIFO": {
+          "expanded": false,
+          "fields": [
+            {
+              "label": "Batch size",
+              "type": "number",
+              "path": "nearConfiguration.nearEvictionPolicy.FIFO",
+              "model": "batchSize",
+              "placeholder": 1,
+              "tip": [
+                "Number of entries to remove on shrink."
+              ]
+            },
+            {
+              "label": "Max memory size",
+              "type": "number",
+              "path": "nearConfiguration.nearEvictionPolicy.FIFO",
+              "model": "maxMemorySize",
+              "placeholder": 0,
+              "tip": [
+                "Maximum allowed cache size in bytes."
+              ]
+            },
+            {
+              "label": "Max size",
+              "type": "number",
+              "path": "nearConfiguration.nearEvictionPolicy.FIFO",
+              "model": "maxSize",
+              "placeholder": 100000,
+              "tip": [
+                "Maximum allowed size of cache before entry will start getting evicted."
+              ]
+            }
+          ]
+        },
+        "SORTED": {
+          "expanded": false,
+          "fields": [
+            {
+              "label": "Batch size",
+              "type": "number",
+              "path": "nearConfiguration.nearEvictionPolicy.SORTED",
+              "model": "batchSize",
+              "placeholder": 1,
+              "tip": [
+                "Number of entries to remove on shrink."
+              ]
+            },
+            {
+              "label": "Max memory size",
+              "type": "number",
+              "path": "nearConfiguration.nearEvictionPolicy.SORTED",
+              "model": "maxMemorySize",
+              "placeholder": 0,
+              "tip": [
+                "Maximum allowed cache size in bytes."
+              ]
+            },
+            {
+              "label": "Max size",
+              "type": "number",
+              "path": "nearConfiguration.nearEvictionPolicy.SORTED",
+              "model": "maxSize",
+              "placeholder": 100000,
+              "tip": [
+                "Maximum allowed size of cache before entry will start getting evicted."
+              ]
+            }
+          ]
+        }
+      }
+    }
   ]
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ee8f348/modules/web-control-center/nodejs/controllers/summary-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/summary-controller.js b/modules/web-control-center/nodejs/controllers/summary-controller.js
index e4f5039..c38a84f 100644
--- a/modules/web-control-center/nodejs/controllers/summary-controller.js
+++ b/modules/web-control-center/nodejs/controllers/summary-controller.js
@@ -17,14 +17,27 @@
 
 controlCenterModule.controller('summaryController', ['$scope', '$http', 'commonFunctions', function ($scope, $http, commonFunctions) {
     $scope.joinTip = commonFunctions.joinTip;
+    $scope.getModel = commonFunctions.getModel;
 
     $scope.javaClassItems = [
         { label: 'snippet',value: false},
         { label: 'factory class',value: true}
     ];
 
+    $scope.evictionPolicies = [
+        {value: 'LRU', label: 'LRU'},
+        {value: 'RND', label: 'Random'},
+        {value: 'FIFO', label: 'FIFO'},
+        {value: 'SORTED', label: 'Sorted'},
+        {value: undefined, label: 'Not set'}
+    ];
+
+    $scope.backupItem = {nearCacheEnabled: true};
+
     $http.get('/models/summary.json')
         .success(function (data) {
+            $scope.clientFields = data.clientFields;
+
             $scope.screenTip = data.screenTip;
         })
         .error(function (errMsg) {
@@ -33,46 +46,89 @@ controlCenterModule.controller('summaryController', ['$scope', '$http', 'commonF
 
     $scope.oss = ['debian:8', 'ubuntu:14.10'];
 
-    $scope.cfgLang = 'xml';
+    $scope.cfgLangServer = 'xml';
+    $scope.cfgLangClient = 'xml';
+
+    $scope.javaClassServer = false;
+    $scope.javaClassClient = false;
 
-    $scope.javaClass = false;
     $scope.os = undefined;
 
     $scope.generated = undefined;
     $scope.clusters = [];
 
-    $scope.reload = function() {
-        $("<pre class='brush:java' />").text($scope.javaClass ? $scope.generated.javaClass : $scope.generated.javaSnippet).appendTo($('#javaResultDiv').empty());
+    $scope.reloadServer = function() {
+        if (!$scope.generated)
+            return;
+
+        $("<pre class='brush:xml'/>").text($scope.generated.xmlServer).appendTo($('#xmlServer').empty());
+        $("<pre class='brush:java'/>").text($scope.javaClassServer ? $scope.generated.javaClassServer : $scope.generated.javaSnippetServer).appendTo($('#javaServer').empty());
+
+        var os = $scope.os ? $scope.os : $scope.oss[0];
+
+        $("<pre class='brush:plain'/>").text($scope.generated.docker.replace(new RegExp('\%OS\%', 'g'), os)).appendTo($('#docker').empty());
+
+
+        $("<pre class='brush:xml'/>").text($scope.generated.xmlClient).appendTo($('#xmlClient').empty());
+        $("<pre class='brush:java'/>").text($scope.javaClassClient ? $scope.generated.javaClassClient : $scope.generated.javaSnippetClient).appendTo($('#javaClient').empty());
+
+        SyntaxHighlighter.highlight();
+    };
+
+    $scope.reloadServer = function() {
+        if (!$scope.generated)
+            return;
 
-        $("<pre class='brush:xml' />").text($scope.generated.xml).appendTo($('#xmlResultDiv').empty());
+        $("<pre class='brush:xml'/>").text($scope.generated.xmlServer).appendTo($('#xmlServer').empty());
+        $("<pre class='brush:java'/>").text($scope.javaClassServer ? $scope.generated.javaClassServer : $scope.generated.javaSnippetServer).appendTo($('#javaServer').empty());
 
         var os = $scope.os ? $scope.os : $scope.oss[0];
 
-        $("<pre class='brush:plain' />").text($scope.generated.docker.replace(new RegExp('\%OS\%', 'g'), os)).appendTo($('#dockerResultDiv').empty());
+        $("<pre class='brush:plain'/>").text($scope.generated.docker.replace(new RegExp('\%OS\%', 'g'), os)).appendTo($('#docker').empty());
 
         SyntaxHighlighter.highlight();
     };
 
-    $scope.generate = function(item) {
-        if (!item)
+    $scope.selectItem = function(cluster) {
+        if (!cluster)
             return;
 
-        $scope.selectedItem = item;
+        $scope.selectedItem = cluster;
 
-        $scope.loading = true;
+        $scope.$watch('javaClassServer', $scope.reloadServer);
+        $scope.$watch('os', $scope.reloadServer);
 
-        $http.post('summary/generator', {_id: $scope.selectedItem._id})
+        $scope.generateServer(cluster);
+
+        $scope.reloadServer();
+
+        $scope.$watch('backupItem', function() {
+            $scope.generateClient();
+        }, true);
+
+        $scope.$watch('javaClassClient', $scope.generateClient);
+    };
+
+    $scope.generateServer = function(cluster) {
+        $http.post('summary/generator', {_id: cluster._id})
             .success(function (data) {
                 $scope.generated = data;
 
-                $scope.$watch('javaClass', $scope.reload);
-                $scope.$watch('os', $scope.reload);
+                $scope.reloadServer();
+            }).error(function (errMsg) {
+                commonFunctions.showError('Failed to generate config: ' + errMsg);
+            });
+    };
 
-                $scope.loading = false;
-            }).error(function (data) {
-                $scope.generateError = "Failed to generate config: " + data;
+    $scope.generateClient = function() {
+        $http.post('summary/generator', {_id: $scope.selectedItem._id, javaClass: $scope.javaClassClient, clientTemplate: $scope.backupItem})
+            .success(function (data) {
+                $("<pre class='brush:xml'/>").text(data.xmlClient).appendTo($('#xmlClient').empty());
+                $("<pre class='brush:java'/>").text(data.javaClient).appendTo($('#javaClient').empty());
 
-                $scope.loading = false;
+                SyntaxHighlighter.highlight();
+            }).error(function (errMsg) {
+                commonFunctions.showError('Failed to generate config: ' + errMsg);
             });
     };
 
@@ -92,8 +148,8 @@ controlCenterModule.controller('summaryController', ['$scope', '$http', 'commonF
 
                 document.body.removeChild(file);
             })
-            .error(function (data) {
-                $scope.generateError = "Failed to generate zip: " + data;
+            .error(function (errMsg) {
+                commonFunctions.showError('Failed to generate zip: ' + errMsg);
             });
     };
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ee8f348/modules/web-control-center/nodejs/routes/generator/java.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/generator/java.js b/modules/web-control-center/nodejs/routes/generator/java.js
index b79ba66..47d7921 100644
--- a/modules/web-control-center/nodejs/routes/generator/java.js
+++ b/modules/web-control-center/nodejs/routes/generator/java.js
@@ -19,7 +19,7 @@ var _ = require('lodash');
 
 var generatorUtils = require("./common");
 
-exports.generateClusterConfiguration = function(cluster, javaClass) {
+exports.generateClusterConfiguration = function(cluster, javaClass, clientCache) {
     var res = generatorUtils.builder();
 
     res.datasourceBeans = [];
@@ -40,6 +40,12 @@ exports.generateClusterConfiguration = function(cluster, javaClass) {
     res.line('IgniteConfiguration cfg = new IgniteConfiguration();');
     res.line();
 
+    if (clientCache) {
+        res.line('cfg.setClientMode(true);');
+
+        res.line();
+    }
+
     if (cluster.discovery) {
         var d = cluster.discovery;
 
@@ -48,8 +54,10 @@ exports.generateClusterConfiguration = function(cluster, javaClass) {
 
         switch (d.kind) {
             case 'Multicast':
+                res.importClass('org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder');
+
                 addBeanWithProperties(res, d.Multicast, 'discovery', 'ipFinder', 'ipFinder',
-                    'org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder', {
+                    'TcpDiscoveryMulticastIpFinder', {
                         multicastGroup: null,
                         multicastPort: null,
                         responseWaitTime: null,
@@ -60,30 +68,29 @@ exports.generateClusterConfiguration = function(cluster, javaClass) {
                 break;
 
             case 'Vm':
-                addBeanWithProperties(res, d.Vm, 'discovery', 'ipFinder', 'ipFinder',
-                    'org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder', {
+                res.importClass('org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder');
+
+                addBeanWithProperties(res, d.Vm, 'discovery', 'ipFinder', 'ipFinder', 'TcpDiscoveryVmIpFinder', {
                         addresses: {type: 'list'}
                     }, true);
 
                 break;
 
             case 'S3':
-                if (d.S3) {
-                    addBeanWithProperties(res, d.S3, 'discovery', 'ipFinder', 'ipFinder',
-                        'org.apache.ignite.spi.discovery.tcp.ipfinder.s3.TcpDiscoveryS3IpFinder', {bucketName: null}, 
-                        true);
-                }
-                else {
-                    res.importClass('org.apache.ignite.spi.discovery.tcp.ipfinder.s3.TcpDiscoveryS3IpFinder');
-                    
+                res.importClass('org.apache.ignite.spi.discovery.tcp.ipfinder.s3.TcpDiscoveryS3IpFinder');
+
+                if (d.S3)
+                    addBeanWithProperties(res, d.S3, 'discovery', 'ipFinder', 'ipFinder', 'TcpDiscoveryS3IpFinder',
+                        {bucketName: null}, true);
+                else
                     res.line('discovery.setIpFinder(new TcpDiscoveryS3IpFinder());');
-                }
 
                 break;
 
             case 'Cloud':
-                addBeanWithProperties(res, d.Cloud, 'discovery', 'ipFinder', 'ipFinder',
-                    'org.apache.ignite.spi.discovery.tcp.ipfinder.cloud.TcpDiscoveryCloudIpFinder', {
+                res.importClass('org.apache.ignite.spi.discovery.tcp.ipfinder.cloud.TcpDiscoveryCloudIpFinder');
+
+                addBeanWithProperties(res, d.Cloud, 'discovery', 'ipFinder', 'ipFinder', 'TcpDiscoveryCloudIpFinder', {
                         credential: null,
                         credentialPath: null,
                         identity: null,
@@ -95,8 +102,10 @@ exports.generateClusterConfiguration = function(cluster, javaClass) {
                 break;
 
             case 'GoogleStorage':
+                res.importClass('org.apache.ignite.spi.discovery.tcp.ipfinder.gce.TcpDiscoveryGoogleStorageIpFinder');
+
                 addBeanWithProperties(res, d.GoogleStorage, 'discovery', 'ipFinder', 'ipFinder',
-                    'org.apache.ignite.spi.discovery.tcp.ipfinder.gce.TcpDiscoveryGoogleStorageIpFinder', {
+                    'TcpDiscoveryGoogleStorageIpFinder', {
                         projectName: null,
                         bucketName: null,
                         serviceAccountP12FilePath: null
@@ -119,9 +128,10 @@ exports.generateClusterConfiguration = function(cluster, javaClass) {
                 break;
 
             case 'SharedFs':
+                res.importClass('org.apache.ignite.spi.discovery.tcp.ipfinder.sharedfs.TcpDiscoverySharedFsIpFinder');
+
                 addBeanWithProperties(res, d.SharedFs, 'discovery', 'ipFinder', 'ipFinder',
-                    'org.apache.ignite.spi.discovery.tcp.ipfinder.sharedfs.TcpDiscoverySharedFsIpFinder', {path: null}, 
-                    true);
+                    'TcpDiscoverySharedFsIpFinder', {path: null}, true);
 
                 break;
 
@@ -150,6 +160,9 @@ exports.generateClusterConfiguration = function(cluster, javaClass) {
 
             names.push(cacheName);
 
+            if (clientCache)
+                _.merge(cache, clientCache);
+
             generateCacheConfiguration(cache, cacheName, res);
 
             res.needEmptyLine = true;
@@ -352,12 +365,13 @@ function generateCacheConfiguration(cacheCfg, varName, res) {
 
     createEvictionPolicy(res, cacheCfg.evictionPolicy, varName, 'evictionPolicy');
 
-    if (cacheCfg.nearConfiguration && (cacheCfg.nearConfiguration.nearStartSize || cacheCfg.nearConfiguration.nearEvictionPolicy.kind)) {
+    if (cacheCfg.nearCacheEnabled) {
         res.needEmptyLine = true;
 
+        res.importClass('org.apache.ignite.configuration.NearCacheConfiguration');
+
         addBeanWithProperties(res, cacheCfg.nearConfiguration, varName, 'nearConfiguration', 'nearConfiguration',
-            'org.apache.ignite.configuration.NearCacheConfiguration',
-            {nearStartSize: null, atomicSequenceReserveSize: null}, true);
+            'NearCacheConfiguration', {nearStartSize: null}, true);
 
         if (cacheCfg.nearConfiguration && cacheCfg.nearConfiguration.nearEvictionPolicy && cacheCfg.nearConfiguration.nearEvictionPolicy.kind) {
             createEvictionPolicy(res, cacheCfg.nearConfiguration.nearEvictionPolicy, 'nearConfiguration', 'nearEvictionPolicy');

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ee8f348/modules/web-control-center/nodejs/routes/generator/xml.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/generator/xml.js b/modules/web-control-center/nodejs/routes/generator/xml.js
index 07988ac..f01d136 100644
--- a/modules/web-control-center/nodejs/routes/generator/xml.js
+++ b/modules/web-control-center/nodejs/routes/generator/xml.js
@@ -20,7 +20,7 @@ var _ = require('lodash');
 var generatorUtils = require("./common");
 var dataStructures = require("../../helpers/data-structures.js");
 
-exports.generateClusterConfiguration = function(cluster) {
+exports.generateClusterConfiguration = function(cluster, clientCache) {
     var res = generatorUtils.builder();
 
     res.datasources = [];
@@ -29,6 +29,12 @@ exports.generateClusterConfiguration = function(cluster) {
     // Generate Ignite Configuration.
     res.startBlock('<bean class="org.apache.ignite.configuration.IgniteConfiguration">');
 
+    if (clientCache) {
+        res.line('<property name="clientMode" value="true" />');
+
+        res.line();
+    }
+
     // Generate discovery.
     if (cluster.discovery) {
         res.startBlock('<property name="discoverySpi">');
@@ -157,9 +163,8 @@ exports.generateClusterConfiguration = function(cluster) {
         
         res.startBlock('<property name="includeEventTypes">');
         
-        if (cluster.includeEventTypes.length == 1) {
-            res.line('<util:constant static-field="org.apache.ignite.events.EventType.' + cluster.includeEventTypes[0] + '"/>')
-        }
+        if (cluster.includeEventTypes.length == 1)
+            res.line('<util:constant static-field="org.apache.ignite.events.EventType.' + cluster.includeEventTypes[0] + '"/>');
         else {
             res.startBlock('<array>');
 
@@ -253,7 +258,12 @@ exports.generateClusterConfiguration = function(cluster) {
             if (i > 0)
                 res.line();
 
-            generateCacheConfiguration(cluster.caches[i], res);
+            var cache = cluster.caches[i];
+
+            if (clientCache)
+                _.merge(cache, clientCache);
+
+            generateCacheConfiguration(cache, res);
         }
 
         res.endBlock('</list>');

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ee8f348/modules/web-control-center/nodejs/routes/summary.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/summary.js b/modules/web-control-center/nodejs/routes/summary.js
index a4554f0..8e56c81 100644
--- a/modules/web-control-center/nodejs/routes/summary.js
+++ b/modules/web-control-center/nodejs/routes/summary.js
@@ -37,10 +37,18 @@ router.post('/generator', function (req, res) {
         if (!cluster)
             return res.sendStatus(404);
 
+        var clientTemplate = req.body.clientTemplate;
+
+        if (clientTemplate)
+            return res.send({
+                xmlClient: generatorXml.generateClusterConfiguration(cluster, clientTemplate),
+                javaClient: generatorJava.generateClusterConfiguration(cluster, req.body.javaClass, clientTemplate)
+            });
+
         return res.send({
-            xml: generatorXml.generateClusterConfiguration(cluster),
-            javaSnippet: generatorJava.generateClusterConfiguration(cluster, false),
-            javaClass: generatorJava.generateClusterConfiguration(cluster, true),
+            xmlServer: generatorXml.generateClusterConfiguration(cluster),
+            javaSnippetServer: generatorJava.generateClusterConfiguration(cluster, false),
+            javaClassServer: generatorJava.generateClusterConfiguration(cluster, true),
             docker: generatorDocker.generateClusterConfiguration(cluster, '%OS%')
         });
     });
@@ -55,6 +63,8 @@ router.post('/download', function (req, res) {
         if (!cluster)
             return res.sendStatus(404);
 
+        var client = req.body.type == 'client';
+
         var archiver = require('archiver');
 
         // creating archives
@@ -81,15 +91,18 @@ router.post('/download', function (req, res) {
         // Send the file to the page output.
         zip.pipe(res);
 
-        var props = generatorCommon.generateProperties(cluster);
+        if (!client) {
+            zip.append(generatorDocker.generateClusterConfiguration(cluster, req.body.os), {name: "Dockerfile"});
+
+            var props = generatorCommon.generateProperties(cluster, client);
 
-        if (props)
-            zip.append(props, {name: "secret.properties"});
+            if (props)
+                zip.append(props, {name: "secret.properties"});
+        }
 
-        zip.append(generatorXml.generateClusterConfiguration(cluster), {name: cluster.name + ".xml"})
-            .append(generatorJava.generateClusterConfiguration(cluster, req.body.javaClass),
-            {name: javaClass ? 'ConfigurationFactory.java' : cluster.name + '.snipplet.java'})
-            .append(generatorDocker.generateClusterConfiguration(cluster, req.body.os), {name: "Dockerfile"})
+        zip.append(generatorXml.generateClusterConfiguration(cluster, client), {name: cluster.name + ".xml"})
+            .append(generatorJava.generateClusterConfiguration(cluster, client, req.body.javaClass),
+                {name: javaClass ? 'ConfigurationFactory.java' : cluster.name + '.snipplet.java'})
             .finalize();
     });
 });

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ee8f348/modules/web-control-center/nodejs/views/configuration/summary.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/summary.jade b/modules/web-control-center/nodejs/views/configuration/summary.jade
index a827511..8e43441 100644
--- a/modules/web-control-center/nodejs/views/configuration/summary.jade
+++ b/modules/web-control-center/nodejs/views/configuration/summary.jade
@@ -30,6 +30,8 @@ append css
     link(rel='stylesheet', href='//cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/styles/shCore.css')
     link(rel='stylesheet', href='//cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/styles/shThemeDefault.css')
 
+include ../includes/controls
+
 block content
     .docs-header
         h1 Configurations summary
@@ -48,50 +50,89 @@ block content
                     tbody
                         tr(ng-repeat='row in clusters track by row._id')
                             td.col-sm-6(ng-class='{active: row._id == selectedItem._id}')
-                                a(ng-click='generate(row)') {{$index + 1}}) {{row.name}}
-            #cfgResult.configBox(ng-show='selectedItem && !generateError && !loading', style='margin-top: 20px')
-                ul.nav.nav-tabs
-                    li(ng-class='{active: cfgLang == "xml"}')
-                        a(href, ng-click='cfgLang = "xml"')
-                            img(src='/images/xml.png', width='16px' height='16px')
-                            |  XML
-                    li(ng-class='{active: cfgLang=="java"}')
-                        a(href, ng-click='cfgLang = "java"')
-                            img(src='/images/java.png', width='16px' height='16px')
-                            |  Java
-                    li(ng-class="{active: cfgLang=='docker'}")
-                        a(href, ng-click='cfgLang = "docker"')
-                            img(src='/images/docker.png', width='16px' height='16px')
-                            |  Dockerfile
-                form.settings-row(method='post' action='summary/download')
+                                a(ng-click='selectItem(row)') {{$index + 1}}) {{row.name}}
+        hr
+        panel-group(bs-collapse ng-show='selectedItem && !generateError' data-allow-multiple="true")
+            .panel.panel-default
+                form.panel-heading(role="tab")(method='post' action='summary/download')
                     input(type="hidden" name="_id" value="{{selectedItem._id}}")
-                    input(type="hidden" name="javaClass" value="{{javaClass}}")
+                    input(type="hidden" name="javaClassServer" value="{{javaClassServer}}")
                     input(type="hidden" name="os" value="{{os}}")
 
-                    #xmlResult(ng-show="cfgLang == 'xml'")
-                        button.btn.btn-primary.pull-right(style='margin-right: 0px;margin-top: -45px' type='submit') Download
-                        #xmlResultDiv
-                    #javaResult(ng-show="cfgLang == 'java'")
-                        .col-sm-1
-                            label Generate:
-                        .col-sm-3
-                            button.form-control(type='button' ng-model='javaClass' bs-select data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in javaClassItems' data-sort='false')
-                        button.btn.btn-primary.pull-right(style='margin-right: 0px;margin-top: -40px' type='submit') Download
-                        #javaResultDiv
-                    #dockerResult(ng-show="cfgLang == 'docker'")
-                        button.btn.btn-primary.pull-right(style='margin-right: 0px;margin-top: -40px' type='submit') Download
-                        p
-                            a(style='color:#ec1c24' href='https://docs.docker.com/reference/builder' target="_blank") Docker
-                            | &nbsp;file is a text file with instructions to create Docker image.<br/>
-                            | To build image you have to store following Docker file with your Ignite XML configuration to the same directory.<br>
-                            | Also you could use predefined&nbsp;
-                            a(style='color:#ec1c24' href='https://ignite.incubator.apache.org/download.html#docker' target="_blank") Apache Ignite docker image
-                            | . For more information about using Ignite with Docker please read&nbsp;
-                            a(style='color:#ec1c24' href='http://apacheignite.readme.io/docs/docker-deployment' target="_blank") documentation
-                            |.
-                        .col-sm-2
-                            label(for='os') Operation System:
-                        .col-sm-4
-                            input#os.form-control(type='text', ng-model='os' placeholder='debian:8' data-min-length="0" data-html="1" data-auto-select="true" data-animation="am-flip-x" bs-typeahead bs-options='os for os in oss')
-                        .settings-row#dockerResultDiv(style='margin-top: 15px')
-                div(ng-show='generateError') {{generateError}}
+                    h3
+                        a(bs-collapse-toggle) Server
+                        button.btn.btn-primary.pull-right(type='submit' style='margin-top: -5px') Download
+                .panel-collapse(role="tabpanel" bs-collapse-target)
+                    .panel-body
+                        .configBox(ng-show='selectedItem && !generateError')
+                            ul.nav.nav-tabs
+                                li(ng-class='{active: cfgLangServer == "xml"}')
+                                    a(href, ng-click='cfgLangServer = "xml"')
+                                        img(src='/images/xml.png', width='16px' height='16px')
+                                        |  XML
+                                li(ng-class='{active: cfgLangServer =="java"}')
+                                    a(href, ng-click='cfgLangServer = "java"')
+                                        img(src='/images/java.png', width='16px' height='16px')
+                                        |  Java
+                                li(ng-class="{active: cfgLangServer =='docker'}")
+                                    a(href, ng-click='cfgLangServer = "docker"')
+                                        img(src='/images/docker.png', width='16px' height='16px')
+                                        |  Dockerfile
+                            .settings-row
+                                div(ng-show="cfgLangServer == 'xml'")
+                                    #xmlServer
+                                div(ng-show="cfgLangServer == 'java'")
+                                    .col-sm-1
+                                        label Generate:
+                                    .col-sm-3
+                                        button.form-control(type='button' ng-model='javaClassServer' bs-select data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in javaClassItems' data-sort='false')
+                                    #javaServer
+                                div(ng-show="cfgLangServer == 'docker'")
+                                    p
+                                        a(style='color:#ec1c24' href='https://docs.docker.com/reference/builder' target="_blank") Docker
+                                        | &nbsp;file is a text file with instructions to create Docker image.<br/>
+                                        | To build image you have to store following Docker file with your Ignite XML configuration to the same directory.<br>
+                                        | Also you could use predefined&nbsp;
+                                        a(style='color:#ec1c24' href='https://ignite.incubator.apache.org/download.html#docker' target="_blank") Apache Ignite docker image
+                                        | . For more information about using Ignite with Docker please read&nbsp;
+                                        a(style='color:#ec1c24' href='http://apacheignite.readme.io/docs/docker-deployment' target="_blank") documentation
+                                        |.
+                                    .col-sm-2
+                                        label(for='os') Operation System:
+                                    .col-sm-4
+                                        input#os.form-control(type='text', ng-model='os' placeholder='debian:8' data-min-length="0" data-html="1" data-auto-select="true" data-animation="am-flip-x" bs-typeahead bs-options='os for os in oss')
+                                    .settings-row#docker(style='margin-top: 15px')
+                                div(ng-show='generateError') {{generateError}}
+            .panel.panel-default
+                form.panel-heading(role="tab")
+                    input(type="hidden" name="_id" value="{{selectedItem._id}}")
+                    input(type="hidden" name="javaClassClient" value="{{javaClassClient}}")
+                    input(type="hidden" name="clientSettings" value="{{backupItem}}")
+
+                    h3
+                        a(bs-collapse-toggle) Client
+                        button.btn.btn-primary.pull-right(type='submit' style='margin-top: -5px') Download
+                .panel-collapse(role="tabpanel" bs-collapse-target)
+                    .panel-body
+                        .configBox(ng-show='selectedItem && !generateError')
+                            .settings-row(ng-repeat='field in clientFields')
+                                +form-row
+                            ul.nav.nav-tabs
+                                li(ng-class='{active: cfgLangClient == "xml"}')
+                                    a(href, ng-click='cfgLangClient = "xml"')
+                                        img(src='/images/xml.png', width='16px' height='16px')
+                                        |  XML
+                                li(ng-class='{active: cfgLangClient =="java"}')
+                                    a(href, ng-click='cfgLangClient = "java"')
+                                        img(src='/images/java.png', width='16px' height='16px')
+                                        |  Java
+                            .settings-row
+                                div(ng-show="cfgLangClient == 'xml'")
+                                    #xmlClient
+                                div(ng-show="cfgLangClient == 'java'")
+                                    .col-sm-1
+                                        label Generate:
+                                    .col-sm-4
+                                        button.form-control(type='button' ng-model='javaClassClient' bs-select data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in javaClassItems' data-sort='false')
+                                    #javaClient
+                            div(ng-show='generateError') {{generateError}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6ee8f348/modules/web-control-center/nodejs/views/settings/admin.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/settings/admin.jade b/modules/web-control-center/nodejs/views/settings/admin.jade
index 608634b..f8ced1c 100644
--- a/modules/web-control-center/nodejs/views/settings/admin.jade
+++ b/modules/web-control-center/nodejs/views/settings/admin.jade
@@ -49,5 +49,5 @@ block container
                             td(style='text-align: center;')
                                 a(ng-click='removeUser(row)' ng-show='row._id != user._id' title='Remove user')
                                     i.fa.fa-remove
-                                a(style='margin-left: 5px' ng-href='admin/become?viewedUserId={{row._id}}' ng-show='row._id != user._id' title='View user\'s configurations')
+                                a(style='margin-left: 5px' ng-href='admin/become?viewedUserId={{row._id}}' ng-show='row._id != user._id' title='Become this user')
                                     i.fa.fa-eye


[35/45] incubator-ignite git commit: # ignite-843 Fixed summary page.

Posted by se...@apache.org.
# ignite-843 Fixed summary page.


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

Branch: refs/heads/ignite-1121
Commit: 55f7e077b646b68cc0ad55e0433e44981585c25d
Parents: d07bb11
Author: Andrey <an...@gridgain.com>
Authored: Wed Jul 15 15:41:59 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Wed Jul 15 15:41:59 2015 +0700

----------------------------------------------------------------------
 .../web-control-center/nodejs/views/configuration/caches.jade   | 2 +-
 .../web-control-center/nodejs/views/configuration/clusters.jade | 2 +-
 .../web-control-center/nodejs/views/configuration/metadata.jade | 2 +-
 .../nodejs/views/configuration/persistence.jade                 | 2 +-
 .../web-control-center/nodejs/views/configuration/summary.jade  | 5 +----
 5 files changed, 5 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55f7e077/modules/web-control-center/nodejs/views/configuration/caches.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/caches.jade b/modules/web-control-center/nodejs/views/configuration/caches.jade
index ae4b2d4..d0803ca 100644
--- a/modules/web-control-center/nodejs/views/configuration/caches.jade
+++ b/modules/web-control-center/nodejs/views/configuration/caches.jade
@@ -29,7 +29,7 @@ block content
         .block-callout
             p(ng-bind-html='joinTip(screenTip)')
         .links(ng-hide='caches.length == 0')
-            table.col-sm-12(st-table='caches')
+            table(st-table='caches')
                 tbody
                     tr(ng-repeat='row in caches track by row._id')
                         td.col-sm-6(ng-class='{active: row._id == selectedItem._id}')

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55f7e077/modules/web-control-center/nodejs/views/configuration/clusters.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/clusters.jade b/modules/web-control-center/nodejs/views/configuration/clusters.jade
index aa22784..f5915f1 100644
--- a/modules/web-control-center/nodejs/views/configuration/clusters.jade
+++ b/modules/web-control-center/nodejs/views/configuration/clusters.jade
@@ -29,7 +29,7 @@ block content
         .block-callout
             p(ng-bind-html='joinTip(screenTip)')
         .links(ng-hide='clusters.length == 0')
-            table.col-sm-12(st-table='clusters')
+            table(st-table='clusters')
                 tbody
                     tr(ng-repeat='row in clusters track by row._id')
                         td.col-sm-6(ng-class='{active: row._id == selectedItem._id}')

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55f7e077/modules/web-control-center/nodejs/views/configuration/metadata.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/metadata.jade b/modules/web-control-center/nodejs/views/configuration/metadata.jade
index ff64692..8c213c6 100644
--- a/modules/web-control-center/nodejs/views/configuration/metadata.jade
+++ b/modules/web-control-center/nodejs/views/configuration/metadata.jade
@@ -29,7 +29,7 @@ block content
         .block-callout
             p(ng-bind-html='joinTip(screenTip)')
         .links(ng-hide='metadata.length == 0')
-            table.col-sm-12(st-table='metadata')
+            table(st-table='metadata')
                 tbody
                     tr(ng-repeat='row in metadata track by row._id')
                         td.col-sm-6(ng-class='{active: row._id == selectedItem._id}')

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55f7e077/modules/web-control-center/nodejs/views/configuration/persistence.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/persistence.jade b/modules/web-control-center/nodejs/views/configuration/persistence.jade
index 3a276f8..b8973d7 100644
--- a/modules/web-control-center/nodejs/views/configuration/persistence.jade
+++ b/modules/web-control-center/nodejs/views/configuration/persistence.jade
@@ -30,7 +30,7 @@ block content
         hr
     .docs-body(ng-controller='persistenceController')
         .links(ng-hide='persistences.length == 0')
-            table.col-sm-12(st-table='persistences')
+            table(st-table='persistences')
                 tbody
                     tr(ng-repeat='row in persistences track by row._id')
                         td.col-sm-6(ng-class='{active: row._id == selectedItem._id}')

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55f7e077/modules/web-control-center/nodejs/views/configuration/summary.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/summary.jade b/modules/web-control-center/nodejs/views/configuration/summary.jade
index 6875110..1281783 100644
--- a/modules/web-control-center/nodejs/views/configuration/summary.jade
+++ b/modules/web-control-center/nodejs/views/configuration/summary.jade
@@ -47,14 +47,11 @@ block content
         div(ng-if='clusters.length > 0')
             p Following cluster configurations were created, you can download them as XML, java code or as docker file.
             .links
-                table.col-sm-12(st-table='clusters')
+                table(st-table='clusters')
                     tbody
                         tr(ng-repeat='row in clusters track by row._id')
                             td.col-sm-6(ng-class='{active: row._id == selectedItem._id}')
                                 a(ng-click='selectItem(row)') {{$index + 1}}) {{row.name}}
-        br
-        br
-        br
         div(ng-show='selectedItem && generated' role="tab" method='post' action='summary/download')
             div(bs-collapse data-start-collapsed='false')
                 .panel.panel-default


[34/45] incubator-ignite git commit: Merge remote-tracking branch 'origin/ignite-843' into ignite-843

Posted by se...@apache.org.
Merge remote-tracking branch 'origin/ignite-843' into ignite-843


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

Branch: refs/heads/ignite-1121
Commit: d07bb11d28311dc78f24101d8f57ef29a95aeb0c
Parents: a1668d0 bf14daf
Author: Andrey <an...@gridgain.com>
Authored: Wed Jul 15 15:24:44 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Wed Jul 15 15:24:44 2015 +0700

----------------------------------------------------------------------
 modules/web-control-center/nodejs/DEVNOTES.txt  |  4 +-
 .../nodejs/controllers/models/caches.json       |  2 +
 .../nodejs/controllers/models/clusters.json     | 50 ++++++++++----------
 3 files changed, 29 insertions(+), 27 deletions(-)
----------------------------------------------------------------------



[19/45] incubator-ignite git commit: IGNITE-843 Hide backup settings for LOCAL cache.

Posted by se...@apache.org.
IGNITE-843 Hide backup settings for LOCAL cache.


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

Branch: refs/heads/ignite-1121
Commit: c1eb007c838c23e9b9a51e1d5263d0417b5d874d
Parents: 1f2d370
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Jul 14 17:41:27 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Jul 14 17:41:27 2015 +0700

----------------------------------------------------------------------
 modules/web-control-center/nodejs/controllers/models/caches.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c1eb007c/modules/web-control-center/nodejs/controllers/models/caches.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/caches.json b/modules/web-control-center/nodejs/controllers/models/caches.json
index a83085d..0b1d57a 100644
--- a/modules/web-control-center/nodejs/controllers/models/caches.json
+++ b/modules/web-control-center/nodejs/controllers/models/caches.json
@@ -44,6 +44,7 @@
       "label": "Backups",
       "type": "number",
       "model": "backups",
+      "hide": "backupItem.mode == 'LOCAL'",
       "placeholder": 0,
       "tip": [
         "Number of nodes used to back up single partition for partitioned cache."
@@ -54,7 +55,7 @@
       "type": "check",
       "model": "readFromBackup",
       "checked": true,
-      "hide": "!backupItem.backups",
+      "hide": "!backupItem.backups || backupItem.mode == 'LOCAL'",
       "tip": [
         "Flag indicating whether data can be read from backup.",
         "If not set then always get data from primary node (never from backup)."


[17/45] incubator-ignite git commit: IGNITE-843 Tip for summary screen.

Posted by se...@apache.org.
IGNITE-843 Tip for summary screen.


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

Branch: refs/heads/ignite-1121
Commit: 5b960ed232e776e8a29d41ebb1a5ea240ad285e9
Parents: e70a715
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Jul 14 16:52:26 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Jul 14 16:52:26 2015 +0700

----------------------------------------------------------------------
 modules/web-control-center/nodejs/controllers/models/summary.json | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5b960ed2/modules/web-control-center/nodejs/controllers/models/summary.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/summary.json b/modules/web-control-center/nodejs/controllers/models/summary.json
index 4abad2e..63cc4a6 100644
--- a/modules/web-control-center/nodejs/controllers/models/summary.json
+++ b/modules/web-control-center/nodejs/controllers/models/summary.json
@@ -1,6 +1,5 @@
 {
   "screenTip": [
-    "Optional cache configuration.",
-    "Configure caches, link them to clusters and go to Summary page for configuration generation."
+    "Overview and download XML and java code for cluster configurations."
   ]
 }


[22/45] incubator-ignite git commit: IGNITE-843 WIP on select first.

Posted by se...@apache.org.
IGNITE-843 WIP on select first.


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

Branch: refs/heads/ignite-1121
Commit: c64b19e281b45385faf8aa2a75a816ec63276cd7
Parents: 78ce2a9
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Jul 14 18:13:20 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Jul 14 18:13:20 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/caches-controller.js     | 39 +++++++++++++-------
 1 file changed, 26 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c64b19e2/modules/web-control-center/nodejs/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/caches-controller.js b/modules/web-control-center/nodejs/controllers/caches-controller.js
index 4564596..714ab43 100644
--- a/modules/web-control-center/nodejs/controllers/caches-controller.js
+++ b/modules/web-control-center/nodejs/controllers/caches-controller.js
@@ -85,6 +85,7 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
                 commonFunctions.showError(errMsg);
             });
 
+        $scope.firstTime = true;
         $scope.caches = [];
 
         $scope.required = function (field) {
@@ -114,23 +115,36 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
                 $scope.spaces = data.spaces;
                 $scope.caches = data.caches;
 
-                var restoredItem = angular.fromJson(sessionStorage.cacheBackupItem);
+                if ($scope.firstTime) {
+                    console.log("firstTime");
+                    $scope.firstTime = false;
 
-                if (restoredItem && restoredItem._id) {
-                    var idx = _.findIndex($scope.caches, function (cache) {
-                        return cache._id == restoredItem._id;
-                    });
+                    if ($scope.caches.length > 0)
+                        $scope.selectItem($scope.caches[0]);
 
-                    if (idx >= 0) {
-                        $scope.selectedItem = $scope.caches[idx];
-
-                        $scope.backupItem = restoredItem;
+                    sessionStorage.removeItem('cacheBackupItem');
+                }
+                else {
+                    console.log("not firstTime");
+
+                    var restoredItem = angular.fromJson(sessionStorage.cacheBackupItem);
+
+                    if (restoredItem && restoredItem._id) {
+                        var idx = _.findIndex($scope.caches, function (cache) {
+                            return cache._id == restoredItem._id;
+                        });
+
+                        if (idx >= 0) {
+                            $scope.selectedItem = $scope.caches[idx];
+                            $scope.backupItem = restoredItem;
+                        }
+                        else
+                            sessionStorage.removeItem('cacheBackupItem');
                     }
                     else
-                        sessionStorage.removeItem('cacheBackupItem');
+                        $scope.backupItem = restoredItem;
+
                 }
-                else
-                    $scope.backupItem = restoredItem;
 
                 $scope.$watch('backupItem', function (val) {
                     if (val)
@@ -143,7 +157,6 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
 
         $scope.selectItem = function (item) {
             $scope.selectedItem = item;
-
             $scope.backupItem = angular.copy(item);
         };
 


[39/45] incubator-ignite git commit: # ignite-843 Fixed dropdown, modal.

Posted by se...@apache.org.
# ignite-843 Fixed dropdown, modal.


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

Branch: refs/heads/ignite-1121
Commit: 1d07c2a6fe033d4e27636f5091dc5f3ecf469796
Parents: 55f7e07
Author: Andrey <an...@gridgain.com>
Authored: Wed Jul 15 17:25:49 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Wed Jul 15 17:25:49 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/common-module.js            | 17 +++++++++++++----
 .../nodejs/controllers/models/summary.json         |  4 ++--
 modules/web-control-center/nodejs/db.js            | 12 ++++++++++++
 modules/web-control-center/nodejs/routes/admin.js  |  4 ++--
 .../web-control-center/nodejs/routes/profile.js    |  4 ++--
 .../nodejs/views/includes/header.jade              | 14 +++-----------
 6 files changed, 34 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d07c2a6/modules/web-control-center/nodejs/controllers/common-module.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/common-module.js b/modules/web-control-center/nodejs/controllers/common-module.js
index 39b89db..9388802 100644
--- a/modules/web-control-center/nodejs/controllers/common-module.js
+++ b/modules/web-control-center/nodejs/controllers/common-module.js
@@ -114,7 +114,7 @@ controlCenterModule.service('$confirm', function($modal, $rootScope, $q) {
         confirm.hide();
     };
 
-    var confirm = $modal({template: '/confirm', scope: scope, placement: 'center', show: false});
+    var confirm = $modal({templateUrl: '/confirm', scope: scope, placement: 'center', show: false});
 
     var parentShow = confirm.show;
 
@@ -145,7 +145,7 @@ controlCenterModule.config(function ($selectProvider) {
         maxLength: '1',
         allText: 'Select All',
         noneText: 'Clear All',
-        template: '/select'
+        templateUrl: '/select'
     });
 });
 
@@ -244,8 +244,17 @@ controlCenterModule.controller('auth', [
 
         $scope.valid = false;
 
+        $scope.userDropdown = [{"text": "Profile", "href": "/profile"}];
+
+        if (!$scope.becomeUsed) {
+            if ($scope.user.admin)
+                $scope.userDropdown.push({"text": "Admin Panel", "href": "/admin"});
+
+            $scope.userDropdown.push({"text": "Log Out", "href": "/logout"});
+        }
+
         // Pre-fetch an external template populated with a custom scope
-        var authModal = $modal({scope: $scope, template: '/login', show: false});
+        var authModal = $modal({scope: $scope, templateUrl: '/login', show: false});
 
         $scope.login = function () {
             // Show when some event occurs (use $promise property to ensure the template has been loaded)
@@ -254,7 +263,7 @@ controlCenterModule.controller('auth', [
 
         $scope.auth = function (action, user_info) {
             $http.post('/' + action, user_info)
-                .success(function (data) {
+                .success(function () {
                     authModal.hide();
 
                     $window.location = '/configuration/clusters';

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d07c2a6/modules/web-control-center/nodejs/controllers/models/summary.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/summary.json b/modules/web-control-center/nodejs/controllers/models/summary.json
index d0a2db1..245448c 100644
--- a/modules/web-control-center/nodejs/controllers/models/summary.json
+++ b/modules/web-control-center/nodejs/controllers/models/summary.json
@@ -4,7 +4,7 @@
   ],
   "clientFields": [
     {
-      "label": "Start size",
+      "label": "Near cache start size",
       "type": "number",
       "path": "nearConfiguration",
       "model": "nearStartSize",
@@ -14,7 +14,7 @@
       ]
     },
     {
-      "label": "Eviction policy",
+      "label": "Near cache eviction policy",
       "type": "dropdown-details",
       "path": "nearConfiguration.nearEvictionPolicy",
       "model": "kind",

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d07c2a6/modules/web-control-center/nodejs/db.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/db.js b/modules/web-control-center/nodejs/db.js
index a03ae1b..8629f09 100644
--- a/modules/web-control-center/nodejs/db.js
+++ b/modules/web-control-center/nodejs/db.js
@@ -37,6 +37,18 @@ var AccountSchema = new Schema({
 AccountSchema.plugin(passportLocalMongoose, {usernameField: 'email', limitAttempts: true, lastLoginField: 'lastLogin',
     usernameLowerCase: true});
 
+AccountSchema.set('toJSON', {
+    transform: function(doc, ret) {
+        return {
+            _id: ret._id,
+            email: ret.email,
+            username: ret.username,
+            admin: ret.admin,
+            lastLogin: ret.lastLogin
+        };
+    }
+});
+
 exports.Account = mongoose.model('Account', AccountSchema);
 
 // Define space model.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d07c2a6/modules/web-control-center/nodejs/routes/admin.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/admin.js b/modules/web-control-center/nodejs/routes/admin.js
index 9731603..51d6892 100644
--- a/modules/web-control-center/nodejs/routes/admin.js
+++ b/modules/web-control-center/nodejs/routes/admin.js
@@ -26,7 +26,7 @@ router.get('/', function (req, res) {
  * Get list of user accounts.
  */
 router.post('/list', function (req, res) {
-    db.Account.find({}).select('-attempts -hash -salt').exec(function (err, users) {
+    db.Account.find({}, function (err, users) {
         if (err)
             return res.status(500).send(err.message);
 
@@ -66,7 +66,7 @@ router.get('/become', function (req, res) {
         return res.redirect('/admin');
     }
 
-    db.Account.findById(viewedUserId, function (err, viewedUser) {
+    db.Account.findById(viewedUserId).exec(function (err, viewedUser) {
         if (err)
             return res.sendStatus(404);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d07c2a6/modules/web-control-center/nodejs/routes/profile.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/profile.js b/modules/web-control-center/nodejs/routes/profile.js
index 7051eb6..0269e7d 100644
--- a/modules/web-control-center/nodejs/routes/profile.js
+++ b/modules/web-control-center/nodejs/routes/profile.js
@@ -53,7 +53,7 @@ router.post('/saveUser', function (req, res) {
         if (!newPassword || newPassword.length == 0)
             return res.status(500).send('Wrong value for new password');
 
-        db.Account.findById(params._id).select('-attempts -hash -salt').exec(function (err, user) {
+        db.Account.findById(params._id, function (err, user) {
             if (err)
                 return res.status(500).send(err);
 
@@ -85,7 +85,7 @@ router.post('/saveUser', function (req, res) {
         if (params.email)
             upd.email = params.email;
 
-        db.Account.findByIdAndUpdate(params._id, upd, {new: true}).select('-attempts -hash -salt').exec(function (err, val) {
+        db.Account.findByIdAndUpdate(params._id, upd, {new: true}, function (err, val) {
             if (err)
                 return res.status(500).send(err.message);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1d07c2a6/modules/web-control-center/nodejs/views/includes/header.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/header.jade b/modules/web-control-center/nodejs/views/includes/header.jade
index 071c996..ab2d31e 100644
--- a/modules/web-control-center/nodejs/views/includes/header.jade
+++ b/modules/web-control-center/nodejs/views/includes/header.jade
@@ -32,16 +32,8 @@ header.header(id='header')
                 //+header-item('/sql', '/sql', 'SQL')
                 //+header-item('/deploy', '/deploy', 'Deploy')
             ul.nav.navbar-nav.pull-right
-                li(ng-show='user')
-                    a.dropdown-toggle(data-toggle='dropdown' aria-expanded='true' bs-dropdown data-template='user-dropdown' data-placement='bottom-right') {{user.username}}
+                li(ng-if='user')
+                    a.dropdown-toggle(data-toggle='dropdown' bs-dropdown='userDropdown' data-placement='bottom-right') {{user.username}}
                         span.caret
-                    script#user-dropdown(type='text/ng-template')
-                        ul.dropdown-menu
-                            li
-                                a(href='/profile') Profile
-                            li(ng-if='!becomeUsed && user.admin')
-                                a(href='/admin') Admin Panel
-                            li(ng-if='!becomeUsed')
-                                a(href='/logout') Log Out
-                li.nav-login(ng-show='!user')
+                li.nav-login(ng-if='!user')
                     a(ng-click='login()' href='#') Log In
\ No newline at end of file


[08/45] incubator-ignite git commit: # ignite-843 Refactor revert identity.

Posted by se...@apache.org.
# ignite-843 Refactor revert identity.


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

Branch: refs/heads/ignite-1121
Commit: f7d1aa8263f91754e032021f56e5e14ad750fa41
Parents: 010a2a3
Author: Andrey <an...@gridgain.com>
Authored: Tue Jul 14 10:59:55 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Tue Jul 14 10:59:55 2015 +0700

----------------------------------------------------------------------
 .../nodejs/public/stylesheets/style.css              |  2 +-
 .../nodejs/public/stylesheets/style.less             | 15 ++++++++++-----
 modules/web-control-center/nodejs/routes/admin.js    |  4 +---
 .../nodejs/views/includes/header.jade                | 12 ++++++------
 .../nodejs/views/settings/admin.jade                 |  2 +-
 5 files changed, 19 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f7d1aa82/modules/web-control-center/nodejs/public/stylesheets/style.css
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/public/stylesheets/style.css b/modules/web-control-center/nodejs/public/stylesheets/style.css
index dbee424..54263e8 100644
--- a/modules/web-control-center/nodejs/public/stylesheets/style.css
+++ b/modules/web-control-center/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:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.border-left{box-shadow:1px 0 0 0 #eee inset}.border-right{box-shadow:1px 0 0 0 #eee}.theme-line{background-color:#f9f9f9}.theme-line header{background-color:#fff}.theme-line header a.btn{border:0 none;padding: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 .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:22px}.theme-li
 ne .btn-primary{border:0 none;background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .nav-horizontal a{box-shadow:0 0;border:0 none;background-color:#fff;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 ul li>a.active{cursor:default;pointer-events:none}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:14px;margin:3px 0 0}.theme-line .sidebar-nav ul li{color:#666;line-height:28px}.theme-line .sidebar-nav ul li span.fa-stack{margin-right:5px;font-size:12px;height:26px}.theme-line .sidebar-nav ul li a{font-size:18px;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-nav ul li a:hover{text-decoration
 :none}.theme-line .select li a,.theme-line .typeahead li a{color:#666;background-color:transparent}.theme-line .select li a:hover,.theme-line .typeahead li a:hover{color:#ec1c24;background-color:transparent}.theme-line .select .active,.theme-line .typeahead .active{background-color:#eee}.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:0}.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:5px 15px 0 0}.header h1.navbar-brand a{text-indent:-99999px;background:no-repeat center center;display:block;width:100%;height:100%;backgro
 und-size:contain}.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;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}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header p{color:#666}.theme-line header{border-bottom-color:#ec1c24}.theme-line .navbar-nav{color:#8
 88}.theme-line .navbar-nav a{color:#bbb}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line .navbar-nav .active a{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:#666}.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 .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:#950d
 12}.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:#ec1c24}.theme-line header .navbar-nav a{font-size:18px}.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}.theme-line .section-right{padding-left:30px}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;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-align:right;padding-bottom:5px}.container-footer{margin-top:20px}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:0.65em;right:0.65em;float:none}.modal-header .close{margin-right:-2px}.modal .modal-dialog{width:610px}.modal .modal-content{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{color:#aaa;font-size:1em;margin:3px 0 0}.modal .modal-content .modal-spacer{padding:10px
  10px 0 10px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:15px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 290px)}@media (min-width:768px){.navbar-nav>li>a{padding-top:18px;padding-bottom:10px}}.details-row{padding:0 0.65em}.details-row,.settings-row{display:block;margin:0.65em 0}.details-row label.table-header,.settings-row label.table-header{line-height:28px}.details-row [class*="col-"],.settings-row [class*="col-"]{display:inline-block;vertical-align:middle;float:none;padding-left:0 !important;padding-right:0 !important}.details-row input[type="checkbox"],.settings-row input[type="checkbox"]{line-height:20px;margin-right:4px}.details-row .checkbox label,.settings-row .checkbox label{line-height:20px;vertical-align:middle}button{margin-right:4px}h1,h2,h3{user-select:none;font-w
 eight:normal;line-height:1}h3{color:black;font-size:1.2em;margin-top:0;margin-bottom:1.5em}table tr:hover{cursor:pointer}.form-control{display:inline-block;text-align:left;padding:3px 3px;height:28px}.form-control button{text-align:left}.table-form-control{width:auto}button .caret{float:right;margin-left:0;margin-top:7px}.theme-line .panel-heading{padding:10px 10px;margin:0}.theme-line .panel-heading h3{margin-bottom:0}.theme-line .panel-heading h3>a{color:black}.theme-line .panel-title a{color:#ec1c24}.theme-line .panel-title h3{margin-bottom:1.3em}.theme-line .panel-body{padding:0.65em 1.3em}.theme-line .main-content a.customize{margin-left:5px;color:#ec1c24}.theme-line .panel-collapse{margin:0}.theme-line .links table,.theme-line table.links-edit,.theme-line table.links-edit-details,.theme-line table.links-edit-small-padding{display:table;table-layout:fixed;margin-bottom:20px}.theme-line .links table td,.theme-line table.links-edit td,.theme-line table.links-edit-details td,.them
 e-line table.links-edit-small-padding td{padding-left:18px}.theme-line .links table .active a,.theme-line table.links-edit .active a,.theme-line table.links-edit-details .active a,.theme-line table.links-edit-small-padding .active a{color:#ec1c24;font-weight:bold}.theme-line .links table a:hover,.theme-line table.links-edit a:hover,.theme-line table.links-edit-details a:hover,.theme-line table.links-edit-small-padding a:hover{color:#950d12}.theme-line .links table a,.theme-line table.links-edit a,.theme-line table.links-edit-details a,.theme-line table.links-edit-small-padding a{color:#666}.theme-line table.links-edit{margin-bottom:10px}.theme-line table.links-edit label{line-height:28px;color:#666}.theme-line table.links-edit-details{margin-bottom:10px}.theme-line table.links-edit-details label{line-height:28px;color:#666}.theme-line table.links-edit-details td{padding:0}.theme-line table.links-edit-details td .input-tip{padding:0}.theme-line table.admin{margin-bottom:10px}.theme-l
 ine table.admin thead>tr th.header{padding:0 0 0.65em}.theme-line table.admin thead>tr th.header div{padding:0}.theme-line table.admin label{line-height:28px;color:#666}.theme-line table.admin thead>tr th,.theme-line table.admin td{padding:0.65em 0.65em}.theme-line table.admin thead>tr th .input-tip,.theme-line table.admin td .input-tip{padding:0}.btn{padding:3px 6px}.panel-title a{font-size:14px}.panel-details{margin-top:0.65em;padding:0;border-radius:4px;border:thin dotted lightgrey}.tooltip.right .tooltip-arrow{border-right-color:#ec1c24}.tooltip>.tooltip-inner{max-width:400px;text-align:left;background-color:#ec1c24}label{font-weight:normal;margin-bottom:0}.form-horizontal .checkbox{padding-top:0}.input-tip{display:block;overflow:hidden}.labelField{float:left;margin-right:4px}.labelFormField{float:left;line-height:28px}.form-horizontal .form-group{margin:0}.form-horizontal .has-feedback .form-control-feedback{right:0}.tipField{float:right;line-height:28px;margin-left:5px}.tipLab
 el{font-size:14px;margin-left:5px}.fieldButton{float:right;margin-left:5px;margin-right:0}.fa-remove{color:#ec1c24;cursor:pointer}label.required:after{color:#ec1c24;content:' *';display:inline}.blank{visibility:hidden}.alert{outline:0}.alert.bottom,.alert.bottom-left,.alert.bottom-right,.alert.top,.alert.top-left,.alert.top-right{position:fixed;z-index:1050;margin:20px}.alert.top,.alert.top-left,.alert.top-right{top:50px}.alert.top{right:0;left:0}.alert.top-right{right:0}.alert.top-right .close{padding-left:10px}.alert.top-left{left:0}.alert.top-left .close{padding-right:10px}.alert.bottom,.alert.bottom-left,.alert.bottom-right{bottom:0}.alert.bottom{right:0;left:0}.alert.bottom-right{right:0}.alert.bottom-right .close{padding-left:10px}.alert.bottom-left{left:0}.alert.bottom-left .close{padding-right:10px}#cfgResult textarea{font-family:monospace;font-size:12px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{-webkit-appearance:none;ma
 rgin:0}input[type="number"]{-moz-appearance:textfield}input.ng-dirty.ng-invalid,button.ng-dirty.ng-invalid{border-color:#ec1c24}input.ng-dirty.ng-invalid :focus,button.ng-dirty.ng-invalid :focus{border-color:#ec1c24}.form-control-feedback{display:inline-block;color:#ec1c24;right:18px;line-height:28px;pointer-events:initial}.syntaxhighlighter{padding:10px 5px;border-radius:6px}.theme-line table.links-edit-small-padding{margin-top:10px}.theme-line table.links-edit-small-padding label{line-height:28px;color:#666}.theme-line table.links-edit-small-padding a{line-height:28px}.theme-line table.links-edit-small-padding input[type="checkbox"]{line-height:20px;margin-right:5px}.theme-line table.links-edit-small-padding .checkbox label{line-height:20px;vertical-align:middle}.theme-line table.links-edit-small-padding th{text-align:center}.theme-line table.links-edit-small-padding td{padding-left:10px}.configBox .nav>li>a{padding:5px 5px}.viewedUser{display:inline;padding:6px;margin:7px;border-
 radius:4px;background-color:#f8d5d8}a{cursor:pointer}.st-sort-ascent:after{content:'\25B2'}.st-sort-descent:after{content:'\25BC'}
\ 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:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.border-left{box-shadow:1px 0 0 0 #eee inset}.border-right{box-shadow:1px 0 0 0 #eee}.theme-line{background-color:#f9f9f9}.theme-line header{background-color:#fff}.theme-line header a.btn{border:0 none;padding: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 .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:22px}.theme-li
 ne .btn-primary{border:0 none;background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .nav-horizontal a{box-shadow:0 0;border:0 none;background-color:#fff;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 ul li>a.active{cursor:default;pointer-events:none}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:14px;margin:3px 0 0}.theme-line .sidebar-nav ul li{color:#666;line-height:28px}.theme-line .sidebar-nav ul li span.fa-stack{margin-right:5px;font-size:12px;height:26px}.theme-line .sidebar-nav ul li a{font-size:18px;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-nav ul li a:hover{text-decoration
 :none}.theme-line .select li a,.theme-line .typeahead li a{color:#666;background-color:transparent}.theme-line .select li a:hover,.theme-line .typeahead li a:hover{color:#ec1c24;background-color:transparent}.theme-line .select .active,.theme-line .typeahead .active{background-color:#eee}.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:0}.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:5px 15px 0 0}.header h1.navbar-brand a{text-indent:-99999px;background:no-repeat center center;display:block;width:100%;height:100%;backgro
 und-size:contain}.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;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}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header p{color:#666}.theme-line header{border-bottom-color:#ec1c24}.theme-line .navbar-nav{color:#8
 88}.theme-line .navbar-nav a{color:#bbb}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line .navbar-nav .active a{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:#666}.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 .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:#950d
 12}.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:#ec1c24}.theme-line header .navbar-nav a{font-size:18px}.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}.theme-line .section-right{padding-left:30px}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;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-align:right;padding-bottom:5px}.container-footer{margin-top:20px}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:0.65em;right:0.65em;float:none}.modal-header .close{margin-right:-2px}.modal .modal-dialog{width:610px}.modal .modal-content{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{color:#aaa;font-size:1em;margin:3px 0 0}.modal .modal-content .modal-spacer{padding:10px
  10px 0 10px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:15px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 290px)}@media (min-width:768px){.navbar-nav>li>a{padding-top:18px;padding-bottom:10px}}.details-row{padding:0 0.65em}.details-row,.settings-row{display:block;margin:0.65em 0}.details-row label.table-header,.settings-row label.table-header{line-height:28px}.details-row [class*="col-"],.settings-row [class*="col-"]{display:inline-block;vertical-align:middle;float:none;padding-left:0 !important;padding-right:0 !important}.details-row input[type="checkbox"],.settings-row input[type="checkbox"]{line-height:20px;margin-right:4px}.details-row .checkbox label,.settings-row .checkbox label{line-height:20px;vertical-align:middle}button{margin-right:4px}h1,h2,h3{user-select:none;font-w
 eight:normal;line-height:1}h3{color:black;font-size:1.2em;margin-top:0;margin-bottom:1.5em}table tr:hover{cursor:pointer}.form-control{display:inline-block;text-align:left;padding:3px 3px;height:28px}.form-control button{text-align:left}.table-form-control{width:auto}button .caret{float:right;margin-left:0;margin-top:7px}.theme-line .panel-heading{padding:10px 10px;margin:0}.theme-line .panel-heading h3{margin-bottom:0}.theme-line .panel-heading h3>a{color:black}.theme-line .panel-title a{color:#ec1c24}.theme-line .panel-title h3{margin-bottom:1.3em}.theme-line .panel-body{padding:0.65em 1.3em}.theme-line .main-content a.customize{margin-left:5px;color:#ec1c24}.theme-line .panel-collapse{margin:0}.theme-line .links table,.theme-line table.links-edit,.theme-line table.links-edit-details,.theme-line table.links-edit-small-padding{display:table;table-layout:fixed;margin-bottom:20px}.theme-line .links table td,.theme-line table.links-edit td,.theme-line table.links-edit-details td,.them
 e-line table.links-edit-small-padding td{padding-left:18px}.theme-line .links table .active a,.theme-line table.links-edit .active a,.theme-line table.links-edit-details .active a,.theme-line table.links-edit-small-padding .active a{color:#ec1c24;font-weight:bold}.theme-line .links table a:hover,.theme-line table.links-edit a:hover,.theme-line table.links-edit-details a:hover,.theme-line table.links-edit-small-padding a:hover{color:#950d12}.theme-line .links table a,.theme-line table.links-edit a,.theme-line table.links-edit-details a,.theme-line table.links-edit-small-padding a{color:#666}.theme-line table.links-edit{margin-bottom:10px}.theme-line table.links-edit label{line-height:28px;color:#666}.theme-line table.links-edit-details{margin-bottom:10px}.theme-line table.links-edit-details label{line-height:28px;color:#666}.theme-line table.links-edit-details td{padding:0}.theme-line table.links-edit-details td .input-tip{padding:0}.theme-line table.admin{margin-bottom:10px}.theme-l
 ine table.admin tr:hover{cursor:default}.theme-line table.admin thead>tr th.header{padding:0 0 0.65em}.theme-line table.admin thead>tr th.header div{padding:0}.theme-line table.admin label{line-height:28px;color:#666}.theme-line table.admin thead>tr th,.theme-line table.admin td{padding:0.65em 0.65em}.theme-line table.admin thead>tr th .input-tip,.theme-line table.admin td .input-tip{padding:0}.btn{padding:3px 6px}.panel-title a{font-size:14px}.panel-details{margin-top:0.65em;padding:0;border-radius:4px;border:thin dotted lightgrey}.tooltip.right .tooltip-arrow{border-right-color:#ec1c24}.tooltip>.tooltip-inner{max-width:400px;text-align:left;background-color:#ec1c24}label{font-weight:normal;margin-bottom:0}.form-horizontal .checkbox{padding-top:0}.input-tip{display:block;overflow:hidden}.labelField{float:left;margin-right:4px}.labelFormField{float:left;line-height:28px}.form-horizontal .form-group{margin:0}.form-horizontal .has-feedback .form-control-feedback{right:0}.tipField{floa
 t:right;line-height:28px;margin-left:5px}.tipLabel{font-size:14px;margin-left:5px}.fieldButton{float:right;margin-left:5px;margin-right:0}.fa-remove{color:#ec1c24;cursor:pointer}label.required:after{color:#ec1c24;content:' *';display:inline}.blank{visibility:hidden}.alert{outline:0}.alert.bottom,.alert.bottom-left,.alert.bottom-right,.alert.top,.alert.top-left,.alert.top-right{position:fixed;z-index:1050;margin:20px}.alert.top,.alert.top-left,.alert.top-right{top:50px}.alert.top{right:0;left:0}.alert.top-right{right:0}.alert.top-right .close{padding-left:10px}.alert.top-left{left:0}.alert.top-left .close{padding-right:10px}.alert.bottom,.alert.bottom-left,.alert.bottom-right{bottom:0}.alert.bottom{right:0;left:0}.alert.bottom-right{right:0}.alert.bottom-right .close{padding-left:10px}.alert.bottom-left{left:0}.alert.bottom-left .close{padding-right:10px}#cfgResult textarea{font-family:monospace;font-size:12px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-web
 kit-inner-spin-button{-webkit-appearance:none;margin:0}input[type="number"]{-moz-appearance:textfield}input.ng-dirty.ng-invalid,button.ng-dirty.ng-invalid{border-color:#ec1c24}input.ng-dirty.ng-invalid :focus,button.ng-dirty.ng-invalid :focus{border-color:#ec1c24}.form-control-feedback{display:inline-block;color:#ec1c24;right:18px;line-height:28px;pointer-events:initial}.syntaxhighlighter{padding:10px 5px;border-radius:6px}.theme-line table.links-edit-small-padding{margin-top:10px}.theme-line table.links-edit-small-padding label{line-height:28px;color:#666}.theme-line table.links-edit-small-padding a{line-height:28px}.theme-line table.links-edit-small-padding input[type="checkbox"]{line-height:20px;margin-right:5px}.theme-line table.links-edit-small-padding .checkbox label{line-height:20px;vertical-align:middle}.theme-line table.links-edit-small-padding th{text-align:center}.theme-line table.links-edit-small-padding td{padding-left:10px}.configBox .nav>li>a{padding:5px 5px}.viewedUs
 er{position:absolute;width:100%;left:0;text-align:center;margin-top:-15px;background-color:#f8d5d8}a{cursor:pointer}.st-sort-ascent:after{content:'\25B2'}.st-sort-descent:after{content:'\25BC'}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f7d1aa82/modules/web-control-center/nodejs/public/stylesheets/style.less
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/public/stylesheets/style.less b/modules/web-control-center/nodejs/public/stylesheets/style.less
index 30a97c9..7fc9990 100644
--- a/modules/web-control-center/nodejs/public/stylesheets/style.less
+++ b/modules/web-control-center/nodejs/public/stylesheets/style.less
@@ -759,6 +759,10 @@ button .caret {
 }
 
 .theme-line table.admin {
+  tr:hover {
+    cursor: default;
+  }
+
   thead > tr th.header {
     padding: 0 0 0.65em;
 
@@ -1008,12 +1012,13 @@ input.ng-dirty.ng-invalid, button.ng-dirty.ng-invalid {
 }
 
 .viewedUser {
-  display: inline;
+  position: absolute;
+  width: 100%;
+  left: 0;
 
-  padding: 6px;
-  margin: 7px;
+  text-align: center;
 
-  border-radius: 4px;
+  margin-top: -15px;
 
   background-color: #f8d5d8;
 }
@@ -1028,4 +1033,4 @@ a {
 
 .st-sort-descent:after{
   content: '\25BC';
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f7d1aa82/modules/web-control-center/nodejs/routes/admin.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/admin.js b/modules/web-control-center/nodejs/routes/admin.js
index 86ea58f..f1625e3 100644
--- a/modules/web-control-center/nodejs/routes/admin.js
+++ b/modules/web-control-center/nodejs/routes/admin.js
@@ -63,9 +63,7 @@ router.get('/become', function(req, res) {
     if (!viewedUserId) {
         req.session.viewedUser = null;
 
-        res.redirect('/');
-
-        return
+        return res.redirect('/admin');
     }
 
     db.Account.findById(viewedUserId, function(err, viewedUser) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f7d1aa82/modules/web-control-center/nodejs/views/includes/header.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/header.jade b/modules/web-control-center/nodejs/views/includes/header.jade
index 5f29415..47b9cfb 100644
--- a/modules/web-control-center/nodejs/views/includes/header.jade
+++ b/modules/web-control-center/nodejs/views/includes/header.jade
@@ -18,10 +18,10 @@ mixin header-item(active, ref, txt)
         a(ng-class='{active: isActive("#{active}")}' href='#{ref}') #{txt}
 
 header.header(id='header')
-    div.viewedUser(ng-show='becomeUsed') You're working as&nbsp;
-        strong {{user.username}}&nbsp;
-        a(href='/admin/become')
-            span.fa.fa-remove(title='Unlogin')
+    .viewedUser(ng-show='becomeUsed') Currently assuming "
+        strong {{user.username}}
+        | ",&nbsp;&nbsp;
+        a(href='/admin/become') revert to your identity.
     .container
         h1.navbar-brand
             a(href='/') Apache Ignite Web Configurator
@@ -39,9 +39,9 @@ header.header(id='header')
                         ul.dropdown-menu
                             li
                                 a(href='/profile') Profile
-                            li(ng-if='user.admin')
+                            li(ng-if='!becomeUsed && user.admin')
                                 a(href='/admin') Admin Panel
-                            li
+                            li(ng-if='!becomeUsed')
                                 a(href='/logout') Log Out
                 li.nav-login(ng-show='!user')
                     a(ng-click='login()' href='#') Log In
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f7d1aa82/modules/web-control-center/nodejs/views/settings/admin.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/settings/admin.jade b/modules/web-control-center/nodejs/views/settings/admin.jade
index 3205c8f..608634b 100644
--- a/modules/web-control-center/nodejs/views/settings/admin.jade
+++ b/modules/web-control-center/nodejs/views/settings/admin.jade
@@ -45,7 +45,7 @@ block container
                                 span {{row.lastLogin | date:'medium'}}
                             td(style='text-align: center;')
                                 input(type='checkbox' ng-disabled='row.adminChanging || row._id == user._id'
-                                    ng-model='row.admin' ng-change='toggleAdmin(user)')
+                                    ng-model='row.admin' ng-change='toggleAdmin(row)')
                             td(style='text-align: center;')
                                 a(ng-click='removeUser(row)' ng-show='row._id != user._id' title='Remove user')
                                     i.fa.fa-remove


[14/45] incubator-ignite git commit: # ignite-843 Minor fix.

Posted by se...@apache.org.
# ignite-843 Minor fix.


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

Branch: refs/heads/ignite-1121
Commit: 31ff6149285e44dd55a0a61f4d02022ecb0d7df5
Parents: a7efd5d
Author: Andrey <an...@gridgain.com>
Authored: Tue Jul 14 12:02:22 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Tue Jul 14 12:02:22 2015 +0700

----------------------------------------------------------------------
 modules/web-control-center/nodejs/app.js        | 8 --------
 modules/web-control-center/nodejs/routes/sql.js | 2 --
 2 files changed, 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/31ff6149/modules/web-control-center/nodejs/app.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/app.js b/modules/web-control-center/nodejs/app.js
index 9fb4398..c9b79ab 100644
--- a/modules/web-control-center/nodejs/app.js
+++ b/modules/web-control-center/nodejs/app.js
@@ -35,8 +35,6 @@ var adminRouter = require('./routes/admin');
 var profileRouter = require('./routes/profile');
 var sqlRouter = require('./routes/sql');
 
-var uiUtils = require('./helpers/ui-utils');
-
 var passport = require('passport');
 
 var db = require('./db');
@@ -96,12 +94,6 @@ var adminOnly = function(req, res, next) {
 
 app.all('/configuration/*', mustAuthenticated);
 
-for (var p in uiUtils) {
-    if (uiUtils.hasOwnProperty(p)) {
-        app.locals[p] = uiUtils[p];
-    }
-}
-
 app.all('*', function(req, res, next) {
     var becomeUsed = req.session.viewedUser && req.user.admin;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/31ff6149/modules/web-control-center/nodejs/routes/sql.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/sql.js b/modules/web-control-center/nodejs/routes/sql.js
index ea3465c..ce4565d 100644
--- a/modules/web-control-center/nodejs/routes/sql.js
+++ b/modules/web-control-center/nodejs/routes/sql.js
@@ -17,8 +17,6 @@
 
 var router = require('express').Router();
 var db = require('../db');
-var uiUtils = require('../helpers/ui-utils');
-
 router.get('/', function(req, res) {
     res.render('sql/sql');
 });


[21/45] incubator-ignite git commit: IGNITE-843 Fixed navbar visibility when not logged.

Posted by se...@apache.org.
IGNITE-843 Fixed navbar visibility when not logged.


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

Branch: refs/heads/ignite-1121
Commit: 78ce2a90c54e1802e1f64e6232b6995f36a1701c
Parents: 27c3369
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Jul 14 17:58:02 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Jul 14 17:58:02 2015 +0700

----------------------------------------------------------------------
 modules/web-control-center/nodejs/views/includes/header.jade | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/78ce2a90/modules/web-control-center/nodejs/views/includes/header.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/header.jade b/modules/web-control-center/nodejs/views/includes/header.jade
index 47b9cfb..071c996 100644
--- a/modules/web-control-center/nodejs/views/includes/header.jade
+++ b/modules/web-control-center/nodejs/views/includes/header.jade
@@ -26,7 +26,7 @@ header.header(id='header')
         h1.navbar-brand
             a(href='/') Apache Ignite Web Configurator
         .navbar-collapse.collapse(ng-controller='auth')
-            ul.nav.navbar-nav(ng-controller='activeLink')
+            ul.nav.navbar-nav(ng-controller='activeLink' ng-show='user')
                 +header-item('/configuration', '/configuration/clusters', 'Configuration')
                 //+header-item('/monitoring', '/monitoring', 'Monitoring')
                 //+header-item('/sql', '/sql', 'SQL')


[16/45] incubator-ignite git commit: IGNITE-843 Added tips for screens and WIP on metadata page.

Posted by se...@apache.org.
IGNITE-843 Added tips for screens and WIP on metadata page.


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

Branch: refs/heads/ignite-1121
Commit: e70a7154cb78b19f71158fb90a34e704b90d0b65
Parents: 37c975f
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Jul 14 16:50:13 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Jul 14 16:50:13 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/caches-controller.js     |  1 +
 .../nodejs/controllers/clusters-controller.js   |  1 +
 .../nodejs/controllers/common-module.js         | 10 +++---
 .../nodejs/controllers/metadata-controller.js   | 11 ++++---
 .../nodejs/controllers/models/caches.json       |  4 +++
 .../nodejs/controllers/models/clusters.json     |  3 ++
 .../nodejs/controllers/models/metadata.json     | 34 +++++++++++++++-----
 .../nodejs/controllers/models/summary.json      |  6 ++++
 .../nodejs/controllers/summary-controller.js    | 12 ++++++-
 .../nodejs/public/stylesheets/style.css         |  2 +-
 .../nodejs/public/stylesheets/style.less        | 19 +++++++++++
 .../nodejs/views/configuration/caches.jade      |  2 ++
 .../nodejs/views/configuration/clusters.jade    |  4 ++-
 .../nodejs/views/configuration/metadata.jade    |  6 ++--
 .../nodejs/views/configuration/sidebar.jade     | 14 ++------
 .../nodejs/views/configuration/summary.jade     |  2 ++
 .../nodejs/views/includes/controls.jade         | 21 ++++++------
 17 files changed, 110 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/caches-controller.js b/modules/web-control-center/nodejs/controllers/caches-controller.js
index 52fdcf9..a17557e 100644
--- a/modules/web-control-center/nodejs/controllers/caches-controller.js
+++ b/modules/web-control-center/nodejs/controllers/caches-controller.js
@@ -77,6 +77,7 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
 
         $http.get('/models/caches.json')
             .success(function (data) {
+                $scope.screenTip = data.screenTip;
                 $scope.general = data.general;
                 $scope.advanced = data.advanced;
             })

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/controllers/clusters-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/clusters-controller.js b/modules/web-control-center/nodejs/controllers/clusters-controller.js
index a983602..c8d3181 100644
--- a/modules/web-control-center/nodejs/controllers/clusters-controller.js
+++ b/modules/web-control-center/nodejs/controllers/clusters-controller.js
@@ -88,6 +88,7 @@ controlCenterModule.controller('clustersController', ['$scope', '$http', 'common
 
         $http.get('/models/clusters.json')
             .success(function (data) {
+                $scope.screenTip = data.screenTip;
                 $scope.templateTip = data.templateTip;
 
                 $scope.general = data.general;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/controllers/common-module.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/common-module.js b/modules/web-control-center/nodejs/controllers/common-module.js
index 3edcf4e..39b89db 100644
--- a/modules/web-control-center/nodejs/controllers/common-module.js
+++ b/modules/web-control-center/nodejs/controllers/common-module.js
@@ -25,9 +25,13 @@ controlCenterModule.service('commonFunctions', ['$alert', function ($alert) {
         return errMsg ? errMsg : 'Internal server error.';
     }
 
+    function isDefined(v) {
+        return !(v === undefined || v === null);
+    }
+
     return {
         getModel: function (obj, path) {
-            if (!path)
+            if (!isDefined(path))
                 return obj;
 
             path = path.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
@@ -70,9 +74,7 @@ controlCenterModule.service('commonFunctions', ['$alert', function ($alert) {
 
             return lines.join("");
         },
-        isDefined: function (v) {
-            return !(v === undefined || v === null);
-        },
+        isDefined: isDefined,
         errorMessage: errorMessage,
         showError: function (msg) {
             if (msgModal)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/controllers/metadata-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/metadata-controller.js b/modules/web-control-center/nodejs/controllers/metadata-controller.js
index 93074cd..c8a923c 100644
--- a/modules/web-control-center/nodejs/controllers/metadata-controller.js
+++ b/modules/web-control-center/nodejs/controllers/metadata-controller.js
@@ -21,15 +21,18 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
         $scope.getModel = commonFunctions.getModel;
 
         $scope.templates = [
-            {value: 'query', label: 'query'},
-            {value: 'store', label: 'store'},
-            {value: 'both', label: 'both'}
+            {value: {kind: 'query'}, label: 'query'},
+            {value: {kind: 'store'}, label: 'store'},
+            {value: {kind: 'both'}, label: 'both'}
         ];
 
+        $scope.template = $scope.templates[0].value;
+
         $scope.metadata = [];
 
         $http.get('/models/metadata.json')
             .success(function (data) {
+                $scope.screenTip = data.screenTip;
                 $scope.templateTip = data.templateTip;
                 $scope.general = data.general;
             })
@@ -80,7 +83,7 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
 
         // Add new metadata.
         $scope.createItem = function () {
-            $scope.backupItem = {mode: 'PARTITIONED', atomicityMode: 'ATOMIC', readFromBackup: true};
+            $scope.backupItem = angular.copy($scope.template);
             $scope.backupItem.space = $scope.spaces[0]._id;
         };
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/controllers/models/caches.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/caches.json b/modules/web-control-center/nodejs/controllers/models/caches.json
index b51067b..251c431 100644
--- a/modules/web-control-center/nodejs/controllers/models/caches.json
+++ b/modules/web-control-center/nodejs/controllers/models/caches.json
@@ -1,4 +1,8 @@
 {
+  "screenTip": [
+    "Optional cache configuration.",
+    "Configure caches, link them to clusters and go to Summary page for configuration generation."
+  ],
   "general": [
     {
       "label": "Name",

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/controllers/models/clusters.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/clusters.json b/modules/web-control-center/nodejs/controllers/models/clusters.json
index 8c4f828..2a2253c 100644
--- a/modules/web-control-center/nodejs/controllers/models/clusters.json
+++ b/modules/web-control-center/nodejs/controllers/models/clusters.json
@@ -1,4 +1,7 @@
 {
+  "screenTip": [
+    "Configure cluster, link caches to them and go to Summary for configuration generation."
+  ],
   "templateTip": [
     "Use following template for add cluster:",
     "<ul>",

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/controllers/models/metadata.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/metadata.json b/modules/web-control-center/nodejs/controllers/models/metadata.json
index 1f540ae..a3e2cf1 100644
--- a/modules/web-control-center/nodejs/controllers/models/metadata.json
+++ b/modules/web-control-center/nodejs/controllers/models/metadata.json
@@ -1,4 +1,9 @@
 {
+  "screenTip": [
+    "Optional cache type metadata configuration.",
+    "Enter metadata manually or load from database.",
+    "Generate cache for metadata if needed."
+  ],
   "templateTip": [
     "Use following template for metadata:",
     "<ul>",
@@ -16,81 +21,94 @@
       "placeholder": "Input name"
     },
     {
-      "label": "kind",
+      "label": "Metadata for",
       "type": "dropdown",
       "model": "kind",
-      "required": true,
       "items": "templates",
-      "placeholder": "Select kind"
+      "placeholder": "Select kind",
+      "tip": ["TODO."]
     },
     {
       "label": "Database schema",
       "type": "text",
       "model": "databaseSchema",
       "required": true,
-      "placeholder": "Input DB schema name"
+      "hide": "backupItem.kind == 'query'",
+      "placeholder": "Input DB schema name",
+      "tip": ["TODO."]
     },
     {
       "label": "Database table",
       "type": "text",
       "model": "databaseTable",
       "required": true,
-      "placeholder": "Input DB table name"
+      "hide": "backupItem.kind == 'query'",
+      "placeholder": "Input DB table name",
+      "tip": ["TODO."]
     },
     {
       "label": "Key type",
       "type": "text",
       "model": "keyType",
       "required": true,
-      "placeholder": "Full class name for Key"
+      "placeholder": "Full class name for Key",
+      "tip": ["TODO."]
     },
     {
       "label": "Value type",
       "type": "text",
       "model": "value Type",
       "required": true,
-      "placeholder": "Full class name for Value"
+      "placeholder": "Full class name for Value",
+      "tip": ["TODO."]
     },
     {
       "label": "Key fields",
       "type": "fieldsMetadata",
       "model": "keyFields",
+      "hide": "backupItem.kind == 'query'",
       "tip": ["Collection of key fields descriptions."]
     },
     {
-      "label": "valFields",
+      "label": "Value fields",
       "type": "fieldsMetadata",
       "model": "valueFields",
+      "hide": "backupItem.kind == 'query'",
       "tip": ["Collection of value fields descriptions."]
     },
     {
       "label": "Query fields",
       "type": "text",
       "model": "queryFields",
+      "hide": "backupItem.kind != 'query'",
       "tip": ["TODO."]
     },
     {
       "label": "Ascending fields",
       "type": "text",
       "model": "ascendingFields",
+      "hide": "backupItem.kind != 'query'",
       "tip": ["TODO."]
     },
     {
       "label": "Descending fields",
       "type": "text",
       "model": "descendingFields",
+      "hide": "backupItem.kind != 'query'",
       "tip": ["TODO."]
     },
     {
       "label": "Text fields",
       "type": "table-simple",
       "model": "textFields",
+      "hide": "backupItem.kind != 'query'",
       "tip": ["TODO."]
     },
     {
       "label": "Groups",
       "type": "groupsMetadata",
       "model": "groups",
+      "hide": "backupItem.kind != 'query'",
       "tip": ["TODO."]
     }
   ]

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/controllers/models/summary.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/summary.json b/modules/web-control-center/nodejs/controllers/models/summary.json
new file mode 100644
index 0000000..4abad2e
--- /dev/null
+++ b/modules/web-control-center/nodejs/controllers/models/summary.json
@@ -0,0 +1,6 @@
+{
+  "screenTip": [
+    "Optional cache configuration.",
+    "Configure caches, link them to clusters and go to Summary page for configuration generation."
+  ]
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/controllers/summary-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/summary-controller.js b/modules/web-control-center/nodejs/controllers/summary-controller.js
index 1935739..6a5443e 100644
--- a/modules/web-control-center/nodejs/controllers/summary-controller.js
+++ b/modules/web-control-center/nodejs/controllers/summary-controller.js
@@ -15,12 +15,22 @@
  * limitations under the License.
  */
 
-controlCenterModule.controller('summaryController', ['$scope', '$http', function ($scope, $http) {
+controlCenterModule.controller('summaryController', ['$scope', '$http', 'commonFunctions', function ($scope, $http, commonFunctions) {
+    $scope.joinTip = commonFunctions.joinTip;
+
     $scope.javaClassItems = [
         { label: 'snippet',value: false},
         { label: 'factory class',value: true}
     ];
 
+    $http.get('/models/summary.json')
+        .success(function (data) {
+            $scope.screenTip = data.screenTip;
+        })
+        .error(function (errMsg) {
+            commonFunctions.showError(errMsg);
+        });
+
     $scope.oss = ['debian:8', 'ubuntu:14.10'];
 
     $scope.cfgLang = 'xml';

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/public/stylesheets/style.css
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/public/stylesheets/style.css b/modules/web-control-center/nodejs/public/stylesheets/style.css
index 54263e8..a923c15 100644
--- a/modules/web-control-center/nodejs/public/stylesheets/style.css
+++ b/modules/web-control-center/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:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.border-left{box-shadow:1px 0 0 0 #eee inset}.border-right{box-shadow:1px 0 0 0 #eee}.theme-line{background-color:#f9f9f9}.theme-line header{background-color:#fff}.theme-line header a.btn{border:0 none;padding: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 .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:22px}.theme-li
 ne .btn-primary{border:0 none;background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .nav-horizontal a{box-shadow:0 0;border:0 none;background-color:#fff;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 ul li>a.active{cursor:default;pointer-events:none}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:14px;margin:3px 0 0}.theme-line .sidebar-nav ul li{color:#666;line-height:28px}.theme-line .sidebar-nav ul li span.fa-stack{margin-right:5px;font-size:12px;height:26px}.theme-line .sidebar-nav ul li a{font-size:18px;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-nav ul li a:hover{text-decoration
 :none}.theme-line .select li a,.theme-line .typeahead li a{color:#666;background-color:transparent}.theme-line .select li a:hover,.theme-line .typeahead li a:hover{color:#ec1c24;background-color:transparent}.theme-line .select .active,.theme-line .typeahead .active{background-color:#eee}.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:0}.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:5px 15px 0 0}.header h1.navbar-brand a{text-indent:-99999px;background:no-repeat center center;display:block;width:100%;height:100%;backgro
 und-size:contain}.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;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}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header p{color:#666}.theme-line header{border-bottom-color:#ec1c24}.theme-line .navbar-nav{color:#8
 88}.theme-line .navbar-nav a{color:#bbb}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line .navbar-nav .active a{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:#666}.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 .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:#950d
 12}.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:#ec1c24}.theme-line header .navbar-nav a{font-size:18px}.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}.theme-line .section-right{padding-left:30px}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;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-align:right;padding-bottom:5px}.container-footer{margin-top:20px}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:0.65em;right:0.65em;float:none}.modal-header .close{margin-right:-2px}.modal .modal-dialog{width:610px}.modal .modal-content{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{color:#aaa;font-size:1em;margin:3px 0 0}.modal .modal-content .modal-spacer{padding:10px
  10px 0 10px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:15px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 290px)}@media (min-width:768px){.navbar-nav>li>a{padding-top:18px;padding-bottom:10px}}.details-row{padding:0 0.65em}.details-row,.settings-row{display:block;margin:0.65em 0}.details-row label.table-header,.settings-row label.table-header{line-height:28px}.details-row [class*="col-"],.settings-row [class*="col-"]{display:inline-block;vertical-align:middle;float:none;padding-left:0 !important;padding-right:0 !important}.details-row input[type="checkbox"],.settings-row input[type="checkbox"]{line-height:20px;margin-right:4px}.details-row .checkbox label,.settings-row .checkbox label{line-height:20px;vertical-align:middle}button{margin-right:4px}h1,h2,h3{user-select:none;font-w
 eight:normal;line-height:1}h3{color:black;font-size:1.2em;margin-top:0;margin-bottom:1.5em}table tr:hover{cursor:pointer}.form-control{display:inline-block;text-align:left;padding:3px 3px;height:28px}.form-control button{text-align:left}.table-form-control{width:auto}button .caret{float:right;margin-left:0;margin-top:7px}.theme-line .panel-heading{padding:10px 10px;margin:0}.theme-line .panel-heading h3{margin-bottom:0}.theme-line .panel-heading h3>a{color:black}.theme-line .panel-title a{color:#ec1c24}.theme-line .panel-title h3{margin-bottom:1.3em}.theme-line .panel-body{padding:0.65em 1.3em}.theme-line .main-content a.customize{margin-left:5px;color:#ec1c24}.theme-line .panel-collapse{margin:0}.theme-line .links table,.theme-line table.links-edit,.theme-line table.links-edit-details,.theme-line table.links-edit-small-padding{display:table;table-layout:fixed;margin-bottom:20px}.theme-line .links table td,.theme-line table.links-edit td,.theme-line table.links-edit-details td,.them
 e-line table.links-edit-small-padding td{padding-left:18px}.theme-line .links table .active a,.theme-line table.links-edit .active a,.theme-line table.links-edit-details .active a,.theme-line table.links-edit-small-padding .active a{color:#ec1c24;font-weight:bold}.theme-line .links table a:hover,.theme-line table.links-edit a:hover,.theme-line table.links-edit-details a:hover,.theme-line table.links-edit-small-padding a:hover{color:#950d12}.theme-line .links table a,.theme-line table.links-edit a,.theme-line table.links-edit-details a,.theme-line table.links-edit-small-padding a{color:#666}.theme-line table.links-edit{margin-bottom:10px}.theme-line table.links-edit label{line-height:28px;color:#666}.theme-line table.links-edit-details{margin-bottom:10px}.theme-line table.links-edit-details label{line-height:28px;color:#666}.theme-line table.links-edit-details td{padding:0}.theme-line table.links-edit-details td .input-tip{padding:0}.theme-line table.admin{margin-bottom:10px}.theme-l
 ine table.admin tr:hover{cursor:default}.theme-line table.admin thead>tr th.header{padding:0 0 0.65em}.theme-line table.admin thead>tr th.header div{padding:0}.theme-line table.admin label{line-height:28px;color:#666}.theme-line table.admin thead>tr th,.theme-line table.admin td{padding:0.65em 0.65em}.theme-line table.admin thead>tr th .input-tip,.theme-line table.admin td .input-tip{padding:0}.btn{padding:3px 6px}.panel-title a{font-size:14px}.panel-details{margin-top:0.65em;padding:0;border-radius:4px;border:thin dotted lightgrey}.tooltip.right .tooltip-arrow{border-right-color:#ec1c24}.tooltip>.tooltip-inner{max-width:400px;text-align:left;background-color:#ec1c24}label{font-weight:normal;margin-bottom:0}.form-horizontal .checkbox{padding-top:0}.input-tip{display:block;overflow:hidden}.labelField{float:left;margin-right:4px}.labelFormField{float:left;line-height:28px}.form-horizontal .form-group{margin:0}.form-horizontal .has-feedback .form-control-feedback{right:0}.tipField{floa
 t:right;line-height:28px;margin-left:5px}.tipLabel{font-size:14px;margin-left:5px}.fieldButton{float:right;margin-left:5px;margin-right:0}.fa-remove{color:#ec1c24;cursor:pointer}label.required:after{color:#ec1c24;content:' *';display:inline}.blank{visibility:hidden}.alert{outline:0}.alert.bottom,.alert.bottom-left,.alert.bottom-right,.alert.top,.alert.top-left,.alert.top-right{position:fixed;z-index:1050;margin:20px}.alert.top,.alert.top-left,.alert.top-right{top:50px}.alert.top{right:0;left:0}.alert.top-right{right:0}.alert.top-right .close{padding-left:10px}.alert.top-left{left:0}.alert.top-left .close{padding-right:10px}.alert.bottom,.alert.bottom-left,.alert.bottom-right{bottom:0}.alert.bottom{right:0;left:0}.alert.bottom-right{right:0}.alert.bottom-right .close{padding-left:10px}.alert.bottom-left{left:0}.alert.bottom-left .close{padding-right:10px}#cfgResult textarea{font-family:monospace;font-size:12px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-web
 kit-inner-spin-button{-webkit-appearance:none;margin:0}input[type="number"]{-moz-appearance:textfield}input.ng-dirty.ng-invalid,button.ng-dirty.ng-invalid{border-color:#ec1c24}input.ng-dirty.ng-invalid :focus,button.ng-dirty.ng-invalid :focus{border-color:#ec1c24}.form-control-feedback{display:inline-block;color:#ec1c24;right:18px;line-height:28px;pointer-events:initial}.syntaxhighlighter{padding:10px 5px;border-radius:6px}.theme-line table.links-edit-small-padding{margin-top:10px}.theme-line table.links-edit-small-padding label{line-height:28px;color:#666}.theme-line table.links-edit-small-padding a{line-height:28px}.theme-line table.links-edit-small-padding input[type="checkbox"]{line-height:20px;margin-right:5px}.theme-line table.links-edit-small-padding .checkbox label{line-height:20px;vertical-align:middle}.theme-line table.links-edit-small-padding th{text-align:center}.theme-line table.links-edit-small-padding td{padding-left:10px}.configBox .nav>li>a{padding:5px 5px}.viewedUs
 er{position:absolute;width:100%;left:0;text-align:center;margin-top:-15px;background-color:#f8d5d8}a{cursor:pointer}.st-sort-ascent:after{content:'\25B2'}.st-sort-descent:after{content:'\25BC'}
\ 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:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.border-left{box-shadow:1px 0 0 0 #eee inset}.border-right{box-shadow:1px 0 0 0 #eee}.theme-line{background-color:#f9f9f9}.theme-line header{background-color:#fff}.theme-line header a.btn{border:0 none;padding: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 .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:22px}.theme-li
 ne .btn-primary{border:0 none;background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .nav-horizontal a{box-shadow:0 0;border:0 none;background-color:#fff;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 ul li>a.active{cursor:default;pointer-events:none}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:14px;margin:3px 0 0}.theme-line .sidebar-nav ul li{color:#666;line-height:28px}.theme-line .sidebar-nav ul li span.fa-stack{margin-right:5px;font-size:12px;height:26px}.theme-line .sidebar-nav ul li a{font-size:18px;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-nav ul li a:hover{text-decoration
 :none}.theme-line .select li a,.theme-line .typeahead li a{color:#666;background-color:transparent}.theme-line .select li a:hover,.theme-line .typeahead li a:hover{color:#ec1c24;background-color:transparent}.theme-line .select .active,.theme-line .typeahead .active{background-color:#eee}.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:0}.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:5px 15px 0 0}.header h1.navbar-brand a{text-indent:-99999px;background:no-repeat center center;display:block;width:100%;height:100%;backgro
 und-size:contain}.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;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}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header p{color:#666}.theme-line header{border-bottom-color:#ec1c24}.theme-line .navbar-nav{color:#8
 88}.theme-line .navbar-nav a{color:#bbb}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line .navbar-nav .active a{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:#666}.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 .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:#950d
 12}.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:#ec1c24}.theme-line header .navbar-nav a{font-size:18px}.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}.theme-line .section-right{padding-left:30px}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;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-align:right;padding-bottom:5px}.container-footer{margin-top:20px}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:0.65em;right:0.65em;float:none}.modal-header .close{margin-right:-2px}.modal .modal-dialog{width:610px}.modal .modal-content{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{color:#aaa;font-size:1em;margin:3px 0 0}.modal .modal-content .modal-spacer{padding:10px
  10px 0 10px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:15px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 290px)}@media (min-width:768px){.navbar-nav>li>a{padding-top:18px;padding-bottom:10px}}.details-row{padding:0 0.65em}.details-row,.settings-row{display:block;margin:0.65em 0}.details-row label.table-header,.settings-row label.table-header{line-height:28px}.details-row [class*="col-"],.settings-row [class*="col-"]{display:inline-block;vertical-align:middle;float:none;padding-left:0 !important;padding-right:0 !important}.details-row input[type="checkbox"],.settings-row input[type="checkbox"]{line-height:20px;margin-right:4px}.details-row .checkbox label,.settings-row .checkbox label{line-height:20px;vertical-align:middle}button{margin-right:4px}h1,h2,h3{user-select:none;font-w
 eight:normal;line-height:1}h3{color:black;font-size:1.2em;margin-top:0;margin-bottom:1.5em}table tr:hover{cursor:pointer}.form-control{display:inline-block;text-align:left;padding:3px 3px;height:28px}.form-control button{text-align:left}.table-form-control{width:auto}button .caret{float:right;margin-left:0;margin-top:7px}.theme-line .panel-heading{padding:10px 10px;margin:0}.theme-line .panel-heading h3{margin-bottom:0}.theme-line .panel-heading h3>a{color:black}.theme-line .panel-title a{color:#ec1c24}.theme-line .panel-title h3{margin-bottom:1.3em}.theme-line .panel-body{padding:0.65em 1.3em}.theme-line .main-content a.customize{margin-left:5px;color:#ec1c24}.theme-line .panel-collapse{margin:0}.theme-line .links table,.theme-line table.links-edit,.theme-line table.links-edit-details,.theme-line table.links-edit-small-padding{display:table;table-layout:fixed;margin-bottom:20px}.theme-line .links table td,.theme-line table.links-edit td,.theme-line table.links-edit-details td,.them
 e-line table.links-edit-small-padding td{padding-left:18px}.theme-line .links table .active a,.theme-line table.links-edit .active a,.theme-line table.links-edit-details .active a,.theme-line table.links-edit-small-padding .active a{color:#ec1c24;font-weight:bold}.theme-line .links table a:hover,.theme-line table.links-edit a:hover,.theme-line table.links-edit-details a:hover,.theme-line table.links-edit-small-padding a:hover{color:#950d12}.theme-line .links table a,.theme-line table.links-edit a,.theme-line table.links-edit-details a,.theme-line table.links-edit-small-padding a{color:#666}.theme-line table.links-edit{margin-bottom:10px}.theme-line table.links-edit label{line-height:28px;color:#666}.theme-line table.links-edit-details{margin-bottom:10px}.theme-line table.links-edit-details label{line-height:28px;color:#666}.theme-line table.links-edit-details td{padding:0}.theme-line table.links-edit-details td .input-tip{padding:0}.theme-line table.admin{margin-bottom:10px}.theme-l
 ine table.admin tr:hover{cursor:default}.theme-line table.admin thead>tr th.header{padding:0 0 0.65em}.theme-line table.admin thead>tr th.header div{padding:0}.theme-line table.admin label{line-height:28px;color:#666}.theme-line table.admin thead>tr th,.theme-line table.admin td{padding:0.65em 0.65em}.theme-line table.admin thead>tr th .input-tip,.theme-line table.admin td .input-tip{padding:0}.btn{padding:3px 6px}.panel-title a{font-size:14px}.panel-details{margin-top:0.65em;padding:0;border-radius:4px;border:thin dotted lightgrey}.tooltip.right .tooltip-arrow{border-right-color:#ec1c24}.tooltip>.tooltip-inner{max-width:400px;text-align:left;background-color:#ec1c24}label{font-weight:normal;margin-bottom:0}.form-horizontal .checkbox{padding-top:0}.input-tip{display:block;overflow:hidden}.labelField{float:left;margin-right:4px}.labelFormField{float:left;line-height:28px}.form-horizontal .form-group{margin:0}.form-horizontal .has-feedback .form-control-feedback{right:0}.tipField{floa
 t:right;line-height:28px;margin-left:5px}.tipLabel{font-size:14px;margin-left:5px}.fieldButton{float:right;margin-left:5px;margin-right:0}.fa-remove{color:#ec1c24;cursor:pointer}label.required:after{color:#ec1c24;content:' *';display:inline}.blank{visibility:hidden}.alert{outline:0}.alert.bottom,.alert.bottom-left,.alert.bottom-right,.alert.top,.alert.top-left,.alert.top-right{position:fixed;z-index:1050;margin:20px}.alert.top,.alert.top-left,.alert.top-right{top:50px}.alert.top{right:0;left:0}.alert.top-right{right:0}.alert.top-right .close{padding-left:10px}.alert.top-left{left:0}.alert.top-left .close{padding-right:10px}.alert.bottom,.alert.bottom-left,.alert.bottom-right{bottom:0}.alert.bottom{right:0;left:0}.alert.bottom-right{right:0}.alert.bottom-right .close{padding-left:10px}.alert.bottom-left{left:0}.alert.bottom-left .close{padding-right:10px}#cfgResult textarea{font-family:monospace;font-size:12px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-web
 kit-inner-spin-button{-webkit-appearance:none;margin:0}input[type="number"]{-moz-appearance:textfield}input.ng-dirty.ng-invalid,button.ng-dirty.ng-invalid{border-color:#ec1c24}input.ng-dirty.ng-invalid :focus,button.ng-dirty.ng-invalid :focus{border-color:#ec1c24}.form-control-feedback{display:inline-block;color:#ec1c24;right:18px;line-height:28px;pointer-events:initial}.syntaxhighlighter{padding:10px 5px;border-radius:6px}.theme-line table.links-edit-small-padding{margin-top:10px}.theme-line table.links-edit-small-padding label{line-height:28px;color:#666}.theme-line table.links-edit-small-padding a{line-height:28px}.theme-line table.links-edit-small-padding input[type="checkbox"]{line-height:20px;margin-right:5px}.theme-line table.links-edit-small-padding .checkbox label{line-height:20px;vertical-align:middle}.theme-line table.links-edit-small-padding th{text-align:center}.theme-line table.links-edit-small-padding td{padding-left:10px}.configBox .nav>li>a{padding:5px 5px}.viewedUs
 er{position:absolute;width:100%;left:0;text-align:center;margin-top:-15px;background-color:#f8d5d8}a{cursor:pointer}.st-sort-ascent:after{content:'\25B2'}.st-sort-descent:after{content:'\25BC'}.block-callout{background-color:#f3f8f3;border-left-width:4px;border-left-style:solid;border-color:#50af51;margin-bottom:20px}.block-callout p{padding:10px 0 10px 10px}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/public/stylesheets/style.less
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/public/stylesheets/style.less b/modules/web-control-center/nodejs/public/stylesheets/style.less
index 7fc9990..14f95fa 100644
--- a/modules/web-control-center/nodejs/public/stylesheets/style.less
+++ b/modules/web-control-center/nodejs/public/stylesheets/style.less
@@ -18,6 +18,9 @@
 @logo-path: "https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli";
 @input-height: 28px;
 @ignite-red: #ec1c24;
+@ignite-block-callout-background: #f3f8f3;
+@ignite-block-callout-border: #50af51;
+
 
 .main-header .logo {
   height: auto;
@@ -1034,3 +1037,19 @@ a {
 .st-sort-descent:after{
   content: '\25BC';
 }
+
+.block-callout {
+  background-color: @ignite-block-callout-background;
+  border-left-width: 4px;
+  border-left-style: solid;
+  border-color: @ignite-block-callout-border;
+
+  margin-bottom: 20px;
+
+  p {
+    padding: 10px 0 10px 10px;
+  }
+}
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/views/configuration/caches.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/caches.jade b/modules/web-control-center/nodejs/views/configuration/caches.jade
index 42d12e4..ae4b2d4 100644
--- a/modules/web-control-center/nodejs/views/configuration/caches.jade
+++ b/modules/web-control-center/nodejs/views/configuration/caches.jade
@@ -26,6 +26,8 @@ block content
         h1 Create and configure Ignite caches
         hr
     .docs-body(ng-controller='cachesController')
+        .block-callout
+            p(ng-bind-html='joinTip(screenTip)')
         .links(ng-hide='caches.length == 0')
             table.col-sm-12(st-table='caches')
                 tbody

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/views/configuration/clusters.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/clusters.jade b/modules/web-control-center/nodejs/views/configuration/clusters.jade
index 0fcdb29..aa22784 100644
--- a/modules/web-control-center/nodejs/views/configuration/clusters.jade
+++ b/modules/web-control-center/nodejs/views/configuration/clusters.jade
@@ -26,13 +26,15 @@ block content
         h1 Create and configure Ignite clusters
         hr
     .docs-body(ng-controller='clustersController')
+        .block-callout
+            p(ng-bind-html='joinTip(screenTip)')
         .links(ng-hide='clusters.length == 0')
             table.col-sm-12(st-table='clusters')
                 tbody
                     tr(ng-repeat='row in clusters track by row._id')
                         td.col-sm-6(ng-class='{active: row._id == selectedItem._id}')
                             a(ng-click='selectItem(row)') {{$index + 1}}) {{row.name}}, {{row.discovery.kind | displayValue:discoveries:'Discovery not set'}}
-        button.btn.btn-primary(ng-click='createItem()' ng-disabled='!create.template') &nbspAdd cluster
+        button.btn.btn-primary(ng-click='createItem()') &nbspAdd cluster
         label(style='margin-left: 15px; margin-right: 10px') Use template:
         button.btn.btn-default(ng-init='create.template = templates[0].value' ng-model='create.template' data-template='/select' data-placeholder='Choose cluster template' bs-options='item.value as item.label for item in templates' bs-select)
         i.tiplabel.fa.fa-question-circle(bs-tooltip data-title='{{joinTip(templateTip)}}' type='button')

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/views/configuration/metadata.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/metadata.jade b/modules/web-control-center/nodejs/views/configuration/metadata.jade
index b3469f2..ff64692 100644
--- a/modules/web-control-center/nodejs/views/configuration/metadata.jade
+++ b/modules/web-control-center/nodejs/views/configuration/metadata.jade
@@ -26,15 +26,17 @@ block content
         h1 Create and configure cache type metadata
         hr
     .docs-body(ng-controller='metadataController')
+        .block-callout
+            p(ng-bind-html='joinTip(screenTip)')
         .links(ng-hide='metadata.length == 0')
             table.col-sm-12(st-table='metadata')
                 tbody
                     tr(ng-repeat='row in metadata track by row._id')
                         td.col-sm-6(ng-class='{active: row._id == selectedItem._id}')
                             a(ng-click='selectItem(row)') {{$index + 1}}) {{row.name}}
-        button.btn.btn-primary(ng-click='createItem()' ng-disabled='!create.template') &nbspAdd metadata
+        button.btn.btn-primary(ng-click='createItem()') &nbspAdd metadata
         label(style='margin-left: 15px; margin-right: 10px') for:
-        button.btn.btn-default(ng-init='create.template = templates[0].value' ng-model='create.template' data-template='/select' data-placeholder='Choose metadata type' bs-options='item.value as item.label for item in templates' bs-select)
+        button.btn.btn-default(ng-model='template' data-template='/select' data-placeholder='Choose metadata type' bs-options='item.value as item.label for item in templates' bs-select)
         i.tiplabel.fa.fa-question-circle(bs-tooltip data-title='{{joinTip(templateTip)}}' type='button')
         hr
         form.form-horizontal(name='inputForm' ng-if='backupItem' novalidate)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/views/configuration/sidebar.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/sidebar.jade b/modules/web-control-center/nodejs/views/configuration/sidebar.jade
index a1aa1e0..83362ed 100644
--- a/modules/web-control-center/nodejs/views/configuration/sidebar.jade
+++ b/modules/web-control-center/nodejs/views/configuration/sidebar.jade
@@ -24,23 +24,15 @@ mixin sidebar-item(ref, num, txt)
                 i.fa.fa-stack-1x #{num}
             | #{txt}
 
-mixin sidebar-subitem(ref, txt)
-    li
-        a(style='font-size: 16px' ng-class='{active: isActive("#{ref}")}' href='#{ref}')
-            span.fa-stack
-                i.fa.fa-stack-2x
-            | #{txt}
-
 block container
     .row
         .col-sm-2.border-right.section-left.greedy
             .sidebar-nav
                 ul.menu(ng-controller='activeLink')
                     +sidebar-item('/configuration/clusters', 1, 'Clusters')
-                    +sidebar-item('/configuration/caches', 2, 'Caches')
-                    //+sidebar-subitem('/configuration/metadata', 'Metadata')
-                    //+sidebar-subitem('/configuration/persistence', 'Persistence')
-                    +sidebar-item('/configuration/summary', 3, 'Summary')
+                    +sidebar-item('/configuration/metadata', 2, 'Metadata')
+                    +sidebar-item('/configuration/caches', 3, 'Caches')
+                    +sidebar-item('/configuration/summary', 4, 'Summary')
 
         .col-sm-10.border-left.section-right
             .docs-content

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/views/configuration/summary.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/summary.jade b/modules/web-control-center/nodejs/views/configuration/summary.jade
index bbb1331..a827511 100644
--- a/modules/web-control-center/nodejs/views/configuration/summary.jade
+++ b/modules/web-control-center/nodejs/views/configuration/summary.jade
@@ -35,6 +35,8 @@ block content
         h1 Configurations summary
         hr
     .docs-body(ng-controller='summaryController')
+        .block-callout
+            p(ng-bind-html='joinTip(screenTip)')
         div(ng-show='clusters.length == 0')
             | No cluster configured. You can&nbsp;
             a(href='clusters') configure

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e70a7154/modules/web-control-center/nodejs/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/controls.jade b/modules/web-control-center/nodejs/views/includes/controls.jade
index 3256f57..409f52f 100644
--- a/modules/web-control-center/nodejs/views/includes/controls.jade
+++ b/modules/web-control-center/nodejs/views/includes/controls.jade
@@ -97,26 +97,27 @@ mixin form-row
     - var fieldMdl = 'getModel(backupItem, field.path)[field.model]';
     - var fieldCommon = {'ng-model': fieldMdl, 'ng-required': 'field.required || required(field)'};
     - var fieldRequiredClass = '{true: "required"}[field.required || required(field)]'
+    - var fieldHide = '{{field.hide}}'
 
     div(ng-switch='field.type')
-        div.checkbox.col-sm-6(ng-switch-when='check')
+        div.checkbox.col-sm-6(ng-switch-when='check' ng-hide=fieldHide)
             label
                 input(type='checkbox')&attributes(fieldCommon)
                 | {{field.label}}
                 +tipLabel('field.tip')
-        div(ng-switch-when='text')
+        div(ng-switch-when='text' ng-hide=fieldHide)
             label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
                 .input-tip
                     input.form-control(type='text' placeholder='{{field.placeholder}}')&attributes(fieldCommon)
-        div(ng-switch-when='password')
+        div(ng-switch-when='password' ng-hide=fieldHide)
             label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
                 .input-tip
                     input.form-control(type='password' placeholder='{{field.placeholder}}')&attributes(fieldCommon)
-        div(ng-switch-when='number' ng-hide='{{field.hide}}')
+        div(ng-switch-when='number' ng-hide=fieldHide)
             label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
@@ -125,20 +126,20 @@ mixin form-row
                     +exclamation('{{field.model}}', 'min', 'Value is less than allowable minimum.')
                     +exclamation('{{field.model}}', 'max', 'Value is more than allowable maximum.')
                     +exclamation('{{field.model}}', 'number', 'Invalid value. Only numbers allowed.')
-        div(ng-switch-when='dropdown' ng-hide='{{field.hide}}')
+        div(ng-switch-when='dropdown' ng-hide=fieldHide)
             label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
                 .input-tip
                     button.form-control(bs-select data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')&attributes(fieldCommon)
-        div(ng-switch-when='dropdown-multiple' ng-hide='{{field.hide}}')
+        div(ng-switch-when='dropdown-multiple' ng-hide=fieldHide)
             label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
                 .input-tip
                     button.form-control(bs-select ng-disabled='{{field.items}}.length == 0' data-multiple='1' data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')&attributes(fieldCommon)
             a.customize(ng-show='field.addLink' ng-href='{{field.addLink.ref}}') {{field.addLink.label}}
-        div(ng-switch-when='dropdown-details' ng-hide='{{field.hide}}')
+        div(ng-switch-when='dropdown-details' ng-hide=fieldHide)
             - var expanded = 'field.details[' + fieldMdl + '].expanded'
 
             label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
@@ -150,7 +151,7 @@ mixin form-row
             .col-sm-6.panel-details(ng-show='#{expanded} && #{fieldMdl}')
                 .details-row(ng-repeat='detail in field.details[#{fieldMdl}].fields')
                     +details-row
-        div(ng-switch-when='table-simple')&attributes(fieldCommon)
+        div(ng-switch-when='table-simple' ng-hide=fieldHide)&attributes(fieldCommon)
             div
                 label.table-header {{field.label}}:
                 +tipLabel('field.tableTip')
@@ -174,7 +175,7 @@ mixin form-row
                 +tipField('field.tip')
                 .input-tip
                     input.form-control(type='text' ng-model='newValue' ng-focus='field.editIdx = -1'  placeholder='{{field.placeholder}}')
-        div(ng-switch-when='fieldsMetadata')&attributes(fieldCommon)
+        div(ng-switch-when='fieldsMetadata' ng-hide=fieldHide)&attributes(fieldCommon)
             div
                 label.table-header {{field.label}}:
                 +tipLabel('field.tableTip')
@@ -198,7 +199,7 @@ mixin form-row
                 +tipField('field.tip')
                 .input-tip
                     input.form-control(type='text' ng-model='newValue' ng-focus='field.editIdx = -1'  placeholder='{{field.placeholder}}')
-        div(ng-switch-when='groupsMetadata')&attributes(fieldCommon)
+        div(ng-switch-when='groupsMetadata' ng-hide=fieldHide)&attributes(fieldCommon)
             div
                 label.table-header {{field.label}}:
                 +tipLabel('field.tableTip')


[15/45] incubator-ignite git commit: Merge remote-tracking branch 'origin/ignite-843' into ignite-843

Posted by se...@apache.org.
Merge remote-tracking branch 'origin/ignite-843' into ignite-843

# Conflicts:
#	modules/web-control-center/nodejs/routes/sql.js


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

Branch: refs/heads/ignite-1121
Commit: 37c975f1fa26b7cf36f672c15779416cb93e1bf1
Parents: 31ff614 9c93dcc
Author: Andrey <an...@gridgain.com>
Authored: Tue Jul 14 12:03:05 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Tue Jul 14 12:03:05 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/models/metadata.json     |  67 ++++-----
 modules/web-control-center/nodejs/db.js         |  15 +-
 .../web-control-center/nodejs/routes/admin.js   |  16 +-
 .../web-control-center/nodejs/routes/caches.js  |  14 +-
 .../nodejs/routes/clusters.js                   |  16 +-
 .../nodejs/routes/metadata.js                   |  14 +-
 .../nodejs/routes/persistence.js                | 147 ++++++++++---------
 .../web-control-center/nodejs/routes/public.js  |  26 ++--
 .../web-control-center/nodejs/routes/summary.js |  12 +-
 .../nodejs/views/includes/controls.jade         |  48 ++++++
 10 files changed, 216 insertions(+), 159 deletions(-)
----------------------------------------------------------------------



[18/45] incubator-ignite git commit: IGNITE-843 Fixed initial state for readFromBackup and copyOnRead.

Posted by se...@apache.org.
IGNITE-843 Fixed initial state for readFromBackup and copyOnRead.


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

Branch: refs/heads/ignite-1121
Commit: 1f2d370e7309ab18eeab8d186b090c70908d9e2f
Parents: 5b960ed
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Jul 14 17:16:12 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Jul 14 17:16:12 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/caches-controller.js     |  2 +-
 .../nodejs/controllers/models/caches.json       | 21 +++++++++++---------
 .../nodejs/views/includes/controls.jade         |  2 +-
 3 files changed, 14 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1f2d370e/modules/web-control-center/nodejs/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/caches-controller.js b/modules/web-control-center/nodejs/controllers/caches-controller.js
index a17557e..8fdbc70 100644
--- a/modules/web-control-center/nodejs/controllers/caches-controller.js
+++ b/modules/web-control-center/nodejs/controllers/caches-controller.js
@@ -149,7 +149,7 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
 
         // Add new cache.
         $scope.createItem = function () {
-            $scope.backupItem = {mode: 'PARTITIONED', atomicityMode: 'ATOMIC', readFromBackup: true};
+            $scope.backupItem = {mode: 'PARTITIONED', atomicityMode: 'ATOMIC'};
             $scope.backupItem.space = $scope.spaces[0]._id;
         };
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1f2d370e/modules/web-control-center/nodejs/controllers/models/caches.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/models/caches.json b/modules/web-control-center/nodejs/controllers/models/caches.json
index 251c431..a83085d 100644
--- a/modules/web-control-center/nodejs/controllers/models/caches.json
+++ b/modules/web-control-center/nodejs/controllers/models/caches.json
@@ -53,12 +53,24 @@
       "label": "Read from backup",
       "type": "check",
       "model": "readFromBackup",
+      "checked": true,
+      "hide": "!backupItem.backups",
       "tip": [
         "Flag indicating whether data can be read from backup.",
         "If not set then always get data from primary node (never from backup)."
       ]
     },
     {
+      "label": "Copy on read",
+      "type": "check",
+      "model": "copyOnRead",
+      "checked": true,
+      "tip": [
+        "Flag indicating whether copy of of the value stored in cache should be created for cache operation implying return value.",
+        "Also if this flag is set copies are created for values passed to CacheInterceptor and to CacheEntryProcessor."
+      ]
+    },
+    {
       "label": "Invalidate near cache",
       "type": "check",
       "model": "invalidate",
@@ -305,15 +317,6 @@
           "tip": [
             "Flag indicating whether swap storage is enabled or not for this cache."
           ]
-        },
-        {
-          "label": "Copy on read",
-          "type": "check",
-          "model": "copyOnRead",
-          "tip": [
-            "Flag indicating whether copy of of the value stored in cache should be created for cache operation implying return value.",
-            "Also if this flag is set copies are created for values passed to CacheInterceptor and to CacheEntryProcessor."
-          ]
         }
       ]
     },

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1f2d370e/modules/web-control-center/nodejs/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/controls.jade b/modules/web-control-center/nodejs/views/includes/controls.jade
index 409f52f..2b79208 100644
--- a/modules/web-control-center/nodejs/views/includes/controls.jade
+++ b/modules/web-control-center/nodejs/views/includes/controls.jade
@@ -102,7 +102,7 @@ mixin form-row
     div(ng-switch='field.type')
         div.checkbox.col-sm-6(ng-switch-when='check' ng-hide=fieldHide)
             label
-                input(type='checkbox')&attributes(fieldCommon)
+                input(type='checkbox' ng-checked='#{fieldMdl} = field.checked')&attributes(fieldCommon)
                 | {{field.label}}
                 +tipLabel('field.tip')
         div(ng-switch-when='text' ng-hide=fieldHide)


[04/45] incubator-ignite git commit: IGNITE-843 WIP on offheap checks.

Posted by se...@apache.org.
IGNITE-843 WIP on offheap checks.


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

Branch: refs/heads/ignite-1121
Commit: bd49a5e144dd11f667bbe98f0de76ab88080e1d0
Parents: f0701d3
Author: AKuznetsov <ak...@gridgain.com>
Authored: Mon Jul 13 16:47:47 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Mon Jul 13 16:47:47 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/caches-controller.js     | 22 ++++++++++++++++----
 .../nodejs/views/includes/controls.jade         | 13 ++++++------
 2 files changed, 25 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/bd49a5e1/modules/web-control-center/nodejs/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/caches-controller.js b/modules/web-control-center/nodejs/controllers/caches-controller.js
index d76e80f..29564c7 100644
--- a/modules/web-control-center/nodejs/controllers/caches-controller.js
+++ b/modules/web-control-center/nodejs/controllers/caches-controller.js
@@ -87,11 +87,25 @@ controlCenterModule.controller('cachesController', ['$scope', '$http', 'commonFu
         $scope.caches = [];
 
         $scope.required = function (field) {
-            if (field.label == 'Eviction policy') {
-                var backupItem = $scope.backupItem;
+            var model = commonFunctions.isDefined(field.path) ? field.path + '.' + field.model : field.model;
 
-                return backupItem.swapEnabled ||
-                    (commonFunctions.isDefined(backupItem.offHeapMaxMemory) && backupItem.offHeapMaxMemory >= 0);
+            var backupItem = $scope.backupItem;
+
+            var memoryMode = backupItem.memoryMode;
+            var offHeapMaxMemory = backupItem.offHeapMaxMemory;
+
+            if (model == 'offHeapMaxMemory') {
+                var oft = memoryMode == 'OFFHEAP_TIERED';
+
+                if (oft && !commonFunctions.isDefined(offHeapMaxMemory))
+                    backupItem.offHeapMaxMemory = 0;
+
+                return oft;
+            }
+
+            if (model == 'evictionPolicy.kind') {
+                return memoryMode == 'ONHEAP_TIERED' &&  backupItem.swapEnabled ||
+                    (commonFunctions.isDefined(offHeapMaxMemory) && offHeapMaxMemory >= 0);
             }
 
             return false;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/bd49a5e1/modules/web-control-center/nodejs/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/controls.jade b/modules/web-control-center/nodejs/views/includes/controls.jade
index 6f55394..7fbe11e 100644
--- a/modules/web-control-center/nodejs/views/includes/controls.jade
+++ b/modules/web-control-center/nodejs/views/includes/controls.jade
@@ -96,6 +96,7 @@ mixin form-row
 
     - var fieldMdl = 'getModel(backupItem, field.path)[field.model]';
     - var fieldCommon = {'ng-model': fieldMdl, 'ng-required': 'field.required || required(field)'};
+    - var fieldRequiredClass = '{true: "required"}[field.required || required(field)]'
 
     div(ng-switch='field.type')
         div.checkbox.col-sm-6(ng-switch-when='check')
@@ -104,19 +105,19 @@ mixin form-row
                 | {{field.label}}
                 +tipLabel('field.tip')
         div(ng-switch-when='text')
-            label(class=lblClasses ng-class='{required: field.required}') {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
                 .input-tip
                     input.form-control(type='text' placeholder='{{field.placeholder}}')&attributes(fieldCommon)
         div(ng-switch-when='password')
-            label(class=lblClasses ng-class='{required: field.required}') {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
                 .input-tip
                     input.form-control(type='password' placeholder='{{field.placeholder}}')&attributes(fieldCommon)
         div(ng-switch-when='number' ng-hide='{{field.hide}}')
-            label(class=lblClasses ng-class='{required: field.required}') {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
                 .input-tip
@@ -125,13 +126,13 @@ mixin form-row
                     +exclamation('{{field.model}}', 'max', 'Value is more than allowable maximum.')
                     +exclamation('{{field.model}}', 'number', 'Invalid value. Only numbers allowed.')
         div(ng-switch-when='dropdown' ng-hide='{{field.hide}}')
-            label(class=lblClasses ng-class='{required: field.required}') {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
                 .input-tip
                     button.form-control(bs-select data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')&attributes(fieldCommon)
         div(ng-switch-when='dropdown-multiple' ng-hide='{{field.hide}}')
-            label(class=lblClasses ng-class='{required: field.required}') {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
                 .input-tip
@@ -140,7 +141,7 @@ mixin form-row
         div(ng-switch-when='dropdown-details' ng-hide='{{field.hide}}')
             - var expanded = 'field.details[' + fieldMdl + '].expanded'
 
-            label(class=lblClasses ng-class='{true: "required"}[field.required || required(field)]') {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
             .col-sm-4
                 +tipField('field.tip')
                 .input-tip


[42/45] incubator-ignite git commit: # ignite-843 Fixed dropdown, modal.

Posted by se...@apache.org.
# ignite-843 Fixed dropdown, modal.


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

Branch: refs/heads/ignite-1121
Commit: a77ec46cfc06fb19c2dde55e99bd7bc66380d092
Parents: ecf4e20
Author: Andrey <an...@gridgain.com>
Authored: Wed Jul 15 18:07:08 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Wed Jul 15 18:07:08 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/common-module.js                |  5 +++--
 .../nodejs/public/stylesheets/style.css                |  2 +-
 .../nodejs/public/stylesheets/style.less               | 13 ++++++-------
 .../nodejs/views/configuration/caches.jade             |  2 +-
 .../nodejs/views/configuration/summary.jade            |  2 +-
 .../nodejs/views/includes/controls.jade                |  3 ++-
 .../nodejs/views/templates/select.jade                 |  4 ++--
 7 files changed, 16 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a77ec46c/modules/web-control-center/nodejs/controllers/common-module.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/common-module.js b/modules/web-control-center/nodejs/controllers/common-module.js
index 9388802..e1c5e0a 100644
--- a/modules/web-control-center/nodejs/controllers/common-module.js
+++ b/modules/web-control-center/nodejs/controllers/common-module.js
@@ -145,7 +145,8 @@ controlCenterModule.config(function ($selectProvider) {
         maxLength: '1',
         allText: 'Select All',
         noneText: 'Clear All',
-        templateUrl: '/select'
+        templateUrl: '/select',
+        iconCheckmark: 'fa fa-check'
     });
 });
 
@@ -247,7 +248,7 @@ controlCenterModule.controller('auth', [
         $scope.userDropdown = [{"text": "Profile", "href": "/profile"}];
 
         if (!$scope.becomeUsed) {
-            if ($scope.user.admin)
+            if ($scope.user && $scope.user.admin)
                 $scope.userDropdown.push({"text": "Admin Panel", "href": "/admin"});
 
             $scope.userDropdown.push({"text": "Log Out", "href": "/logout"});

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a77ec46c/modules/web-control-center/nodejs/public/stylesheets/style.css
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/public/stylesheets/style.css b/modules/web-control-center/nodejs/public/stylesheets/style.css
index a923c15..a9f3a0e 100644
--- a/modules/web-control-center/nodejs/public/stylesheets/style.css
+++ b/modules/web-control-center/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:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.border-left{box-shadow:1px 0 0 0 #eee inset}.border-right{box-shadow:1px 0 0 0 #eee}.theme-line{background-color:#f9f9f9}.theme-line header{background-color:#fff}.theme-line header a.btn{border:0 none;padding: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 .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:22px}.theme-li
 ne .btn-primary{border:0 none;background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .nav-horizontal a{box-shadow:0 0;border:0 none;background-color:#fff;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 ul li>a.active{cursor:default;pointer-events:none}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:14px;margin:3px 0 0}.theme-line .sidebar-nav ul li{color:#666;line-height:28px}.theme-line .sidebar-nav ul li span.fa-stack{margin-right:5px;font-size:12px;height:26px}.theme-line .sidebar-nav ul li a{font-size:18px;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-nav ul li a:hover{text-decoration
 :none}.theme-line .select li a,.theme-line .typeahead li a{color:#666;background-color:transparent}.theme-line .select li a:hover,.theme-line .typeahead li a:hover{color:#ec1c24;background-color:transparent}.theme-line .select .active,.theme-line .typeahead .active{background-color:#eee}.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:0}.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:5px 15px 0 0}.header h1.navbar-brand a{text-indent:-99999px;background:no-repeat center center;display:block;width:100%;height:100%;backgro
 und-size:contain}.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;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}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header p{color:#666}.theme-line header{border-bottom-color:#ec1c24}.theme-line .navbar-nav{color:#8
 88}.theme-line .navbar-nav a{color:#bbb}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line .navbar-nav .active a{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:#666}.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 .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:#950d
 12}.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:#ec1c24}.theme-line header .navbar-nav a{font-size:18px}.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}.theme-line .section-right{padding-left:30px}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;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-align:right;padding-bottom:5px}.container-footer{margin-top:20px}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:0.65em;right:0.65em;float:none}.modal-header .close{margin-right:-2px}.modal .modal-dialog{width:610px}.modal .modal-content{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{color:#aaa;font-size:1em;margin:3px 0 0}.modal .modal-content .modal-spacer{padding:10px
  10px 0 10px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:15px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 290px)}@media (min-width:768px){.navbar-nav>li>a{padding-top:18px;padding-bottom:10px}}.details-row{padding:0 0.65em}.details-row,.settings-row{display:block;margin:0.65em 0}.details-row label.table-header,.settings-row label.table-header{line-height:28px}.details-row [class*="col-"],.settings-row [class*="col-"]{display:inline-block;vertical-align:middle;float:none;padding-left:0 !important;padding-right:0 !important}.details-row input[type="checkbox"],.settings-row input[type="checkbox"]{line-height:20px;margin-right:4px}.details-row .checkbox label,.settings-row .checkbox label{line-height:20px;vertical-align:middle}button{margin-right:4px}h1,h2,h3{user-select:none;font-w
 eight:normal;line-height:1}h3{color:black;font-size:1.2em;margin-top:0;margin-bottom:1.5em}table tr:hover{cursor:pointer}.form-control{display:inline-block;text-align:left;padding:3px 3px;height:28px}.form-control button{text-align:left}.table-form-control{width:auto}button .caret{float:right;margin-left:0;margin-top:7px}.theme-line .panel-heading{padding:10px 10px;margin:0}.theme-line .panel-heading h3{margin-bottom:0}.theme-line .panel-heading h3>a{color:black}.theme-line .panel-title a{color:#ec1c24}.theme-line .panel-title h3{margin-bottom:1.3em}.theme-line .panel-body{padding:0.65em 1.3em}.theme-line .main-content a.customize{margin-left:5px;color:#ec1c24}.theme-line .panel-collapse{margin:0}.theme-line .links table,.theme-line table.links-edit,.theme-line table.links-edit-details,.theme-line table.links-edit-small-padding{display:table;table-layout:fixed;margin-bottom:20px}.theme-line .links table td,.theme-line table.links-edit td,.theme-line table.links-edit-details td,.them
 e-line table.links-edit-small-padding td{padding-left:18px}.theme-line .links table .active a,.theme-line table.links-edit .active a,.theme-line table.links-edit-details .active a,.theme-line table.links-edit-small-padding .active a{color:#ec1c24;font-weight:bold}.theme-line .links table a:hover,.theme-line table.links-edit a:hover,.theme-line table.links-edit-details a:hover,.theme-line table.links-edit-small-padding a:hover{color:#950d12}.theme-line .links table a,.theme-line table.links-edit a,.theme-line table.links-edit-details a,.theme-line table.links-edit-small-padding a{color:#666}.theme-line table.links-edit{margin-bottom:10px}.theme-line table.links-edit label{line-height:28px;color:#666}.theme-line table.links-edit-details{margin-bottom:10px}.theme-line table.links-edit-details label{line-height:28px;color:#666}.theme-line table.links-edit-details td{padding:0}.theme-line table.links-edit-details td .input-tip{padding:0}.theme-line table.admin{margin-bottom:10px}.theme-l
 ine table.admin tr:hover{cursor:default}.theme-line table.admin thead>tr th.header{padding:0 0 0.65em}.theme-line table.admin thead>tr th.header div{padding:0}.theme-line table.admin label{line-height:28px;color:#666}.theme-line table.admin thead>tr th,.theme-line table.admin td{padding:0.65em 0.65em}.theme-line table.admin thead>tr th .input-tip,.theme-line table.admin td .input-tip{padding:0}.btn{padding:3px 6px}.panel-title a{font-size:14px}.panel-details{margin-top:0.65em;padding:0;border-radius:4px;border:thin dotted lightgrey}.tooltip.right .tooltip-arrow{border-right-color:#ec1c24}.tooltip>.tooltip-inner{max-width:400px;text-align:left;background-color:#ec1c24}label{font-weight:normal;margin-bottom:0}.form-horizontal .checkbox{padding-top:0}.input-tip{display:block;overflow:hidden}.labelField{float:left;margin-right:4px}.labelFormField{float:left;line-height:28px}.form-horizontal .form-group{margin:0}.form-horizontal .has-feedback .form-control-feedback{right:0}.tipField{floa
 t:right;line-height:28px;margin-left:5px}.tipLabel{font-size:14px;margin-left:5px}.fieldButton{float:right;margin-left:5px;margin-right:0}.fa-remove{color:#ec1c24;cursor:pointer}label.required:after{color:#ec1c24;content:' *';display:inline}.blank{visibility:hidden}.alert{outline:0}.alert.bottom,.alert.bottom-left,.alert.bottom-right,.alert.top,.alert.top-left,.alert.top-right{position:fixed;z-index:1050;margin:20px}.alert.top,.alert.top-left,.alert.top-right{top:50px}.alert.top{right:0;left:0}.alert.top-right{right:0}.alert.top-right .close{padding-left:10px}.alert.top-left{left:0}.alert.top-left .close{padding-right:10px}.alert.bottom,.alert.bottom-left,.alert.bottom-right{bottom:0}.alert.bottom{right:0;left:0}.alert.bottom-right{right:0}.alert.bottom-right .close{padding-left:10px}.alert.bottom-left{left:0}.alert.bottom-left .close{padding-right:10px}#cfgResult textarea{font-family:monospace;font-size:12px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-web
 kit-inner-spin-button{-webkit-appearance:none;margin:0}input[type="number"]{-moz-appearance:textfield}input.ng-dirty.ng-invalid,button.ng-dirty.ng-invalid{border-color:#ec1c24}input.ng-dirty.ng-invalid :focus,button.ng-dirty.ng-invalid :focus{border-color:#ec1c24}.form-control-feedback{display:inline-block;color:#ec1c24;right:18px;line-height:28px;pointer-events:initial}.syntaxhighlighter{padding:10px 5px;border-radius:6px}.theme-line table.links-edit-small-padding{margin-top:10px}.theme-line table.links-edit-small-padding label{line-height:28px;color:#666}.theme-line table.links-edit-small-padding a{line-height:28px}.theme-line table.links-edit-small-padding input[type="checkbox"]{line-height:20px;margin-right:5px}.theme-line table.links-edit-small-padding .checkbox label{line-height:20px;vertical-align:middle}.theme-line table.links-edit-small-padding th{text-align:center}.theme-line table.links-edit-small-padding td{padding-left:10px}.configBox .nav>li>a{padding:5px 5px}.viewedUs
 er{position:absolute;width:100%;left:0;text-align:center;margin-top:-15px;background-color:#f8d5d8}a{cursor:pointer}.st-sort-ascent:after{content:'\25B2'}.st-sort-descent:after{content:'\25BC'}.block-callout{background-color:#f3f8f3;border-left-width:4px;border-left-style:solid;border-color:#50af51;margin-bottom:20px}.block-callout p{padding:10px 0 10px 10px}
\ 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:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.border-left{box-shadow:1px 0 0 0 #eee inset}.border-right{box-shadow:1px 0 0 0 #eee}.theme-line{background-color:#f9f9f9}.theme-line header{background-color:#fff}.theme-line header a.btn{border:0 none;padding: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 .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:22px}.theme-li
 ne .btn-primary{border:0 none;background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .nav-horizontal a{box-shadow:0 0;border:0 none;background-color:#fff;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 .navbar-nav ul li>a.active,.theme-line .sidebar-nav ul li>a.active{cursor:default;pointer-events:none}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:14px;margin:3px 0 0}.theme-line .sidebar-nav ul li{color:#666;line-height:28px}.theme-line .sidebar-nav ul li span.fa-stack{margin-right:5px;font-size:12px;height:26px}.theme-line .sidebar-nav ul li a{font-size:18px;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.t
 heme-line .sidebar-nav ul li a:hover{text-decoration:none}.theme-line .select li a,.theme-line .typeahead li a{color:#666;background-color:transparent}.theme-line .select li a:hover,.theme-line .typeahead li a:hover{color:#ec1c24;background-color:transparent}.theme-line .select .active,.theme-line .typeahead .active{background-color:#eee}.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:0}.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:5px 15px 0 0}.header h1.navbar-brand a{text-indent:-99999px;background:no-repeat center
  center;display:block;width:100%;height:100%;background-size:contain}.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;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}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header p{color:#666}.theme-line header{border-b
 ottom-color:#ec1c24}.theme-line .navbar-nav{color:#888}.theme-line .navbar-nav a{color:#bbb}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line .navbar-nav .active a{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:#666}.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 .main-content .nav-horizontal a.active{border-color:#ec1c24;color:#ec1c24}.theme-line .main-content .nav-horizontal a:hover{color:#950d12}.theme-line .main-conte
 nt .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:#ec1c24}.theme-line header .navbar-nav a{font-size:18px}.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}.theme-line .section-right{padding-left:30px}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;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-align:right;padding-bottom:5px}.container-footer{margin-top:20px}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:0.65em;right:0.65em;float:none}.modal-header .close{margin-right:-2px}.modal .modal-dialog{width:610px}.modal .modal-content{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{color:#aaa;font-size:1em;margin:3px 
 0 0}.modal .modal-content .modal-spacer{padding:10px 10px 0 10px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:15px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 290px)}@media (min-width:768px){.navbar-nav>li>a{padding-top:18px;padding-bottom:10px}}.details-row{padding:0 0.65em}.details-row,.settings-row{display:block;margin:0.65em 0}.details-row label.table-header,.settings-row label.table-header{line-height:28px}.details-row [class*="col-"],.settings-row [class*="col-"]{display:inline-block;vertical-align:middle;float:none;padding-left:0 !important;padding-right:0 !important}.details-row input[type="checkbox"],.settings-row input[type="checkbox"]{line-height:20px;margin-right:4px}.details-row .checkbox label,.settings-row .checkbox label{line-height:20px;vertical-align:middle}butt
 on{margin-right:4px}h1,h2,h3{user-select:none;font-weight:normal;line-height:1}h3{color:black;font-size:1.2em;margin-top:0;margin-bottom:1.5em}table tr:hover{cursor:pointer}.form-control{display:inline-block;text-align:left;padding:3px 3px;height:28px}.form-control button{text-align:left}.table-form-control{width:auto}button .caret{float:right;margin-left:0;margin-top:7px}.theme-line .panel-heading{padding:10px 10px;margin:0}.theme-line .panel-heading h3{margin-bottom:0}.theme-line .panel-heading h3>a{color:black}.theme-line .panel-title a{color:#ec1c24}.theme-line .panel-title h3{margin-bottom:1.3em}.theme-line .panel-body{padding:0.65em 1.3em}.theme-line .main-content a.customize{margin-left:5px;color:#ec1c24}.theme-line .panel-collapse{margin:0}.theme-line .links table,.theme-line table.links-edit,.theme-line table.links-edit-details,.theme-line table.links-edit-small-padding{display:table;table-layout:fixed;margin-bottom:20px}.theme-line .links table td,.theme-line table.links-e
 dit td,.theme-line table.links-edit-details td,.theme-line table.links-edit-small-padding td{padding-left:18px}.theme-line .links table .active a,.theme-line table.links-edit .active a,.theme-line table.links-edit-details .active a,.theme-line table.links-edit-small-padding .active a{color:#ec1c24;font-weight:bold}.theme-line .links table a:hover,.theme-line table.links-edit a:hover,.theme-line table.links-edit-details a:hover,.theme-line table.links-edit-small-padding a:hover{color:#950d12}.theme-line .links table a,.theme-line table.links-edit a,.theme-line table.links-edit-details a,.theme-line table.links-edit-small-padding a{color:#666}.theme-line table.links-edit{margin-bottom:10px}.theme-line table.links-edit label{line-height:28px;color:#666}.theme-line table.links-edit-details{margin-bottom:10px}.theme-line table.links-edit-details label{line-height:28px;color:#666}.theme-line table.links-edit-details td{padding:0}.theme-line table.links-edit-details td .input-tip{padding:0
 }.theme-line table.admin{margin-bottom:10px}.theme-line table.admin tr:hover{cursor:default}.theme-line table.admin thead>tr th.header{padding:0 0 0.65em}.theme-line table.admin thead>tr th.header div{padding:0}.theme-line table.admin label{line-height:28px;color:#666}.theme-line table.admin thead>tr th,.theme-line table.admin td{padding:0.65em 0.65em}.theme-line table.admin thead>tr th .input-tip,.theme-line table.admin td .input-tip{padding:0}.btn{padding:3px 6px}.panel-title a{font-size:14px}.panel-details{margin-top:0.65em;padding:0;border-radius:4px;border:thin dotted lightgrey}.tooltip.right .tooltip-arrow{border-right-color:#ec1c24}.tooltip>.tooltip-inner{max-width:400px;text-align:left;background-color:#ec1c24}label{font-weight:normal;margin-bottom:0}.form-horizontal .checkbox{padding-top:0}.input-tip{display:block;overflow:hidden}.labelField{float:left;margin-right:4px}.labelFormField{float:left;line-height:28px}.form-horizontal .form-group{margin:0}.form-horizontal .has-fe
 edback .form-control-feedback{right:0}.tipField{float:right;line-height:28px;margin-left:5px}.tipLabel{font-size:14px;margin-left:5px}.fieldButton{float:right;margin-left:5px;margin-right:0}.fa-remove{color:#ec1c24;cursor:pointer}label.required:after{color:#ec1c24;content:' *';display:inline}.blank{visibility:hidden}.alert{outline:0}.alert.bottom,.alert.bottom-left,.alert.bottom-right,.alert.top,.alert.top-left,.alert.top-right{position:fixed;z-index:1050;margin:20px}.alert.top,.alert.top-left,.alert.top-right{top:50px}.alert.top{right:0;left:0}.alert.top-right{right:0}.alert.top-right .close{padding-left:10px}.alert.top-left{left:0}.alert.top-left .close{padding-right:10px}.alert.bottom,.alert.bottom-left,.alert.bottom-right{bottom:0}.alert.bottom{right:0;left:0}.alert.bottom-right{right:0}.alert.bottom-right .close{padding-left:10px}.alert.bottom-left{left:0}.alert.bottom-left .close{padding-right:10px}#cfgResult textarea{font-family:monospace;font-size:12px}input[type="number"]::
 -webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type="number"]{-moz-appearance:textfield}input.ng-dirty.ng-invalid,button.ng-dirty.ng-invalid{border-color:#ec1c24}input.ng-dirty.ng-invalid :focus,button.ng-dirty.ng-invalid :focus{border-color:#ec1c24}.form-control-feedback{display:inline-block;color:#ec1c24;right:18px;line-height:28px;pointer-events:initial}.syntaxhighlighter{padding:10px 5px;border-radius:6px}.theme-line table.links-edit-small-padding{margin-top:10px}.theme-line table.links-edit-small-padding label{line-height:28px;color:#666}.theme-line table.links-edit-small-padding a{line-height:28px}.theme-line table.links-edit-small-padding input[type="checkbox"]{line-height:20px;margin-right:5px}.theme-line table.links-edit-small-padding .checkbox label{line-height:20px;vertical-align:middle}.theme-line table.links-edit-small-padding th{text-align:center}.theme-line table.links-edit-small-padding td{padding-left
 :10px}.configBox .nav>li>a{padding:5px 5px}.viewedUser{position:absolute;width:100%;left:0;text-align:center;margin-top:-15px;background-color:#f8d5d8}a{cursor:pointer}.st-sort-ascent:after{content:'\25B2'}.st-sort-descent:after{content:'\25BC'}.block-callout{background-color:#f3f8f3;border-left-width:4px;border-left-style:solid;border-color:#50af51;margin-bottom:20px}.block-callout p{padding:10px 0 10px 10px}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a77ec46c/modules/web-control-center/nodejs/public/stylesheets/style.less
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/public/stylesheets/style.less b/modules/web-control-center/nodejs/public/stylesheets/style.less
index 14f95fa..9da4e57 100644
--- a/modules/web-control-center/nodejs/public/stylesheets/style.less
+++ b/modules/web-control-center/nodejs/public/stylesheets/style.less
@@ -192,9 +192,11 @@
   border-bottom: 4px solid #888;
 }
 
-.theme-line ul li > a.active {
-  cursor: default;
-  pointer-events: none;
+.theme-line .navbar-nav, .theme-line  .sidebar-nav {
+  ul li > a.active {
+    cursor: default;
+    pointer-events: none;
+  }
 }
 
 .theme-line .sidebar-nav {
@@ -1049,7 +1051,4 @@ a {
   p {
     padding: 10px 0 10px 10px;
   }
-}
-
-
-
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a77ec46c/modules/web-control-center/nodejs/views/configuration/caches.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/caches.jade b/modules/web-control-center/nodejs/views/configuration/caches.jade
index d0803ca..678ad7b 100644
--- a/modules/web-control-center/nodejs/views/configuration/caches.jade
+++ b/modules/web-control-center/nodejs/views/configuration/caches.jade
@@ -45,7 +45,7 @@ block content
                     .panel-collapse(bs-collapse-target)
                         .panel-body
                             .settings-row(ng-repeat='field in general')
-                                +form-row
+                                +form-row(['col-sm-3'], ['col-sm-3'])
             div(bs-collapse data-start-collapsed='true')
                 .panel-title(ng-show='expanded')
                     h3

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a77ec46c/modules/web-control-center/nodejs/views/configuration/summary.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/summary.jade b/modules/web-control-center/nodejs/views/configuration/summary.jade
index 1281783..f8128a7 100644
--- a/modules/web-control-center/nodejs/views/configuration/summary.jade
+++ b/modules/web-control-center/nodejs/views/configuration/summary.jade
@@ -116,7 +116,7 @@ block content
                         .panel-body
                             .configBox(ng-show='selectedItem && !generateError')
                                 .settings-row(ng-repeat='field in clientFields')
-                                    +form-row
+                                    +form-row-custom(['col-sm-3'], ['col-sm-3'])
                                 ul.nav.nav-tabs
                                     li(ng-class='{active: cfgLangClient == "xml"}')
                                         a(href, ng-click='cfgLangClient = "xml"')

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a77ec46c/modules/web-control-center/nodejs/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/includes/controls.jade b/modules/web-control-center/nodejs/views/includes/controls.jade
index 6edb16a..406d63e 100644
--- a/modules/web-control-center/nodejs/views/includes/controls.jade
+++ b/modules/web-control-center/nodejs/views/includes/controls.jade
@@ -94,8 +94,9 @@ mixin details-row
                 +exclamation('{{detail.model}}', 'ipaddress', 'Invalid address, see help for format description.')
 
 mixin form-row
-    - var lblClasses = ['col-sm-2']
+    +form-row-custom(['col-sm-2'], ['col-sm-4'])
 
+mixin form-row-custom(lblClasses, fieldClasses)
     - var fieldMdl = 'getModel(backupItem, field.path)[field.model]';
     - var fieldCommon = {'ng-model': fieldMdl, 'ng-required': 'field.required || required(field)'};
     - var fieldRequiredClass = '{true: "required"}[field.required || required(field)]'

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a77ec46c/modules/web-control-center/nodejs/views/templates/select.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/templates/select.jade b/modules/web-control-center/nodejs/views/templates/select.jade
index 83a1731..9bebac0 100644
--- a/modules/web-control-center/nodejs/views/templates/select.jade
+++ b/modules/web-control-center/nodejs/views/templates/select.jade
@@ -17,8 +17,8 @@
 ul.select.dropdown-menu(tabindex='-1', ng-show='$isVisible()', role='select')
     li(role='presentation', ng-repeat='match in $matches')
         hr(ng-if='match.value == undefined' style='margin: 5px 0')
-        a(style='cursor: default;', role='menuitem', tabindex='-1', ng-class='{active: $isActive($index)}' ng-click='$select($index, $event)')
-            i.pull-right(class='{{$iconCheckmark}}', ng-if='$isMultiple && $isActive($index)' ng-class='{active: $isActive($index)}' style='margin-left: 15px')
+        a(style='cursor: default; padding: 3px 6px;', role='menuitem', tabindex='-1', ng-class='{active: $isActive($index)}' ng-click='$select($index, $event)')
+            i(class='{{$iconCheckmark}}', ng-if='$isMultiple && $isActive($index)' ng-class='{active: $isActive($index)}' style='color: #ec1c24; margin-left: 15px; line-height: 20px; float: right;background-color: transparent;')
             span(ng-bind='match.label')
     li(ng-if='$showAllNoneButtons || ($isMultiple && $matches.length > 5)')
         hr(style='margin: 5px 0')


[09/45] incubator-ignite git commit: # ignite-843 Cleanup user on client side, fixed profile.

Posted by se...@apache.org.
# ignite-843 Cleanup user on client side, fixed profile.


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

Branch: refs/heads/ignite-1121
Commit: a7efd5d7c7a42b4a4566ca0be8def27afc29f766
Parents: f7d1aa8
Author: Andrey <an...@gridgain.com>
Authored: Tue Jul 14 11:36:43 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Tue Jul 14 11:36:43 2015 +0700

----------------------------------------------------------------------
 .../nodejs/controllers/profile-controller.js    | 12 ++++----
 modules/web-control-center/nodejs/db.js         |  3 +-
 .../nodejs/helpers/ui-utils.js                  | 29 --------------------
 .../web-control-center/nodejs/routes/admin.js   |  2 +-
 .../web-control-center/nodejs/routes/profile.js |  9 +++---
 .../nodejs/views/templates/layout.jade          |  2 +-
 6 files changed, 14 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a7efd5d7/modules/web-control-center/nodejs/controllers/profile-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/controllers/profile-controller.js b/modules/web-control-center/nodejs/controllers/profile-controller.js
index 6579d8d..ccb2b01 100644
--- a/modules/web-control-center/nodejs/controllers/profile-controller.js
+++ b/modules/web-control-center/nodejs/controllers/profile-controller.js
@@ -16,17 +16,17 @@
  */
 
 controlCenterModule.controller('profileController', ['$scope', '$http', 'commonFunctions', function ($scope, $http, commonFunctions) {
-    $scope.profileUser = angular.copy($scope.loggedInUser);
+    $scope.profileUser = angular.copy($scope.user);
 
     $scope.saveUser = function() {
         var profile = $scope.profileUser;
 
         if (profile) {
             var userName = profile.username;
-            var changeUsername = userName != $scope.loggedInUser.username;
+            var changeUsername = userName != $scope.user.username;
 
             var email = profile.email;
-            var changeEmail = email != $scope.loggedInUser.email;
+            var changeEmail = email != $scope.user.email;
 
             if (changeUsername || changeEmail || profile.changePassword) {
                 $http.post('/profile/saveUser', {
@@ -34,14 +34,14 @@ controlCenterModule.controller('profileController', ['$scope', '$http', 'commonF
                     userName: changeUsername ? userName : undefined,
                     email: changeEmail ? email : undefined,
                     newPassword: profile.changePassword ? profile.newPassword : undefined
-                }).success(function () {
+                }).success(function (user) {
                     commonFunctions.showInfo('Profile saved.');
 
                     if (changeUsername)
-                        $scope.loggedInUser.username = userName;
+                        $scope.user.username = userName;
 
                     if (changeEmail)
-                        $scope.loggedInUser.email = email;
+                        $scope.user.email = email;
                 }).error(function (err) {
                     commonFunctions.showError('Failed to save profile: ' + commonFunctions.errorMessage(err));
                 });

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a7efd5d7/modules/web-control-center/nodejs/db.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/db.js b/modules/web-control-center/nodejs/db.js
index 101d4ae..2b64daf 100644
--- a/modules/web-control-center/nodejs/db.js
+++ b/modules/web-control-center/nodejs/db.js
@@ -34,7 +34,8 @@ var AccountSchema = new Schema({
     admin: Boolean
 });
 
-AccountSchema.plugin(passportLocalMongoose, {usernameField: 'email', limitAttempts: true, lastLoginField: 'lastLogin', usernameLowerCase: true});
+AccountSchema.plugin(passportLocalMongoose, {usernameField: 'email', limitAttempts: true, lastLoginField: 'lastLogin',
+    usernameLowerCase: true});
 
 exports.Account = mongoose.model('Account', AccountSchema);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a7efd5d7/modules/web-control-center/nodejs/helpers/ui-utils.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/helpers/ui-utils.js b/modules/web-control-center/nodejs/helpers/ui-utils.js
deleted file mode 100644
index e9e680b..0000000
--- a/modules/web-control-center/nodejs/helpers/ui-utils.js
+++ /dev/null
@@ -1,29 +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.
- */
-
-exports.filterUser = function (user) {
-    if (!user)
-        return null;
-
-    return {
-        _id: user._id,
-        username: user.username,
-        lastLogin: user.lastLogin,
-        admin: user.admin,
-        email: user.email
-    }
-};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a7efd5d7/modules/web-control-center/nodejs/routes/admin.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/admin.js b/modules/web-control-center/nodejs/routes/admin.js
index f1625e3..57c8e6f 100644
--- a/modules/web-control-center/nodejs/routes/admin.js
+++ b/modules/web-control-center/nodejs/routes/admin.js
@@ -26,7 +26,7 @@ router.get('/', function(req, res) {
  * Get list of user accounts.
  */
 router.post('/list', function(req, res) {
-    db.Account.find({}).select('_id username email lastLogin admin').exec(function (err, users) {
+    db.Account.find({}).select('-attempts -hash -salt').exec(function (err, users) {
         if (err)
             return res.status(500).send(err.message);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a7efd5d7/modules/web-control-center/nodejs/routes/profile.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/profile.js b/modules/web-control-center/nodejs/routes/profile.js
index 5caae0b..7051eb6 100644
--- a/modules/web-control-center/nodejs/routes/profile.js
+++ b/modules/web-control-center/nodejs/routes/profile.js
@@ -17,7 +17,6 @@
 
 var router = require('express').Router();
 var db = require('../db');
-var uiUtils = require('../helpers/ui-utils');
 
 router.all('/profile/*', function (req, res, next) {
     var userId = req.body._id;
@@ -54,7 +53,7 @@ router.post('/saveUser', function (req, res) {
         if (!newPassword || newPassword.length == 0)
             return res.status(500).send('Wrong value for new password');
 
-        db.Account.findById(params._id, function (err, user) {
+        db.Account.findById(params._id).select('-attempts -hash -salt').exec(function (err, user) {
             if (err)
                 return res.status(500).send(err);
 
@@ -72,7 +71,7 @@ router.post('/saveUser', function (req, res) {
                     if (err)
                         return res.status(500).send(err.message);
 
-                    res.json(uiUtils.filterUser(user));
+                    res.json(user);
                 });
             });
         });
@@ -86,11 +85,11 @@ router.post('/saveUser', function (req, res) {
         if (params.email)
             upd.email = params.email;
 
-        db.Account.findByIdAndUpdate(params._id, upd, {new: true}, function (err, val) {
+        db.Account.findByIdAndUpdate(params._id, upd, {new: true}).select('-attempts -hash -salt').exec(function (err, val) {
             if (err)
                 return res.status(500).send(err.message);
 
-            res.json(uiUtils.filterUser(val));
+            res.json(val);
         })
     }
 });

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a7efd5d7/modules/web-control-center/nodejs/views/templates/layout.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/templates/layout.jade b/modules/web-control-center/nodejs/views/templates/layout.jade
index e7adc8c..f9ec5d6 100644
--- a/modules/web-control-center/nodejs/views/templates/layout.jade
+++ b/modules/web-control-center/nodejs/views/templates/layout.jade
@@ -15,7 +15,7 @@
     limitations under the License.
 
 doctype html
-html(ng-app='ignite-web-control-center', ng-init='user = #{JSON.stringify(filterUser(user))}; becomeUsed = #{becomeUsed}')
+html(ng-app='ignite-web-control-center', ng-init='user = #{JSON.stringify(user)}; becomeUsed = #{becomeUsed}')
     head
         title= title
 


[10/45] incubator-ignite git commit: IGNITE-843 Code format.

Posted by se...@apache.org.
IGNITE-843 Code format.


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

Branch: refs/heads/ignite-1121
Commit: 8424670b3d6579df2f5d2480a9adbf9ff73b14c4
Parents: f7d1aa8
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Jul 14 11:56:28 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Jul 14 11:56:28 2015 +0700

----------------------------------------------------------------------
 .../web-control-center/nodejs/routes/admin.js   |  16 +-
 .../web-control-center/nodejs/routes/caches.js  |  14 +-
 .../nodejs/routes/clusters.js                   |  16 +-
 .../nodejs/routes/metadata.js                   |  14 +-
 .../nodejs/routes/persistence.js                | 147 ++++++++++---------
 .../web-control-center/nodejs/routes/public.js  |  26 ++--
 modules/web-control-center/nodejs/routes/sql.js |   2 +-
 .../web-control-center/nodejs/routes/summary.js |  12 +-
 8 files changed, 125 insertions(+), 122 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8424670b/modules/web-control-center/nodejs/routes/admin.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/admin.js b/modules/web-control-center/nodejs/routes/admin.js
index f1625e3..ba6bf94 100644
--- a/modules/web-control-center/nodejs/routes/admin.js
+++ b/modules/web-control-center/nodejs/routes/admin.js
@@ -18,14 +18,14 @@
 var router = require('express').Router();
 var db = require('../db');
 
-router.get('/', function(req, res) {
+router.get('/', function (req, res) {
     res.render('settings/admin');
 });
 
 /**
  * Get list of user accounts.
  */
-router.post('/list', function(req, res) {
+router.post('/list', function (req, res) {
     db.Account.find({}).select('_id username email lastLogin admin').exec(function (err, users) {
         if (err)
             return res.status(500).send(err.message);
@@ -34,10 +34,10 @@ router.post('/list', function(req, res) {
     });
 });
 
-router.post('/remove', function(req, res) {
+router.post('/remove', function (req, res) {
     var userId = req.body.userId;
 
-    db.Account.findByIdAndRemove(userId, function(err) {
+    db.Account.findByIdAndRemove(userId, function (err) {
         if (err)
             return res.status(500).send(err);
 
@@ -45,11 +45,11 @@ router.post('/remove', function(req, res) {
     });
 });
 
-router.post('/save', function(req, res) {
+router.post('/save', function (req, res) {
     var userId = req.body.userId;
     var adminFlag = req.body.adminFlag;
 
-    db.Account.findByIdAndUpdate(userId, {admin: adminFlag}, function(err) {
+    db.Account.findByIdAndUpdate(userId, {admin: adminFlag}, function (err) {
         if (err)
             return res.status(500).send(err.message);
 
@@ -57,7 +57,7 @@ router.post('/save', function(req, res) {
     });
 });
 
-router.get('/become', function(req, res) {
+router.get('/become', function (req, res) {
     var viewedUserId = req.query.viewedUserId;
 
     if (!viewedUserId) {
@@ -66,7 +66,7 @@ router.get('/become', function(req, res) {
         return res.redirect('/admin');
     }
 
-    db.Account.findById(viewedUserId, function(err, viewedUser) {
+    db.Account.findById(viewedUserId, function (err, viewedUser) {
         if (err)
             return res.sendStatus(404);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8424670b/modules/web-control-center/nodejs/routes/caches.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/caches.js b/modules/web-control-center/nodejs/routes/caches.js
index 6a90ebe..3a20303 100644
--- a/modules/web-control-center/nodejs/routes/caches.js
+++ b/modules/web-control-center/nodejs/routes/caches.js
@@ -19,7 +19,7 @@ var router = require('express').Router();
 var db = require('../db');
 
 /* GET caches page. */
-router.get('/', function(req, res) {
+router.get('/', function (req, res) {
     res.render('configuration/caches');
 });
 
@@ -29,7 +29,7 @@ router.get('/', function(req, res) {
  * @param req Request.
  * @param res Response.
  */
-router.post('/list', function(req, res) {
+router.post('/list', function (req, res) {
     var user_id = req.currentUserId();
 
     // Get owned space and all accessed space.
@@ -37,7 +37,7 @@ router.post('/list', function(req, res) {
         if (err)
             return res.status(500).send(err.message);
 
-        var space_ids = spaces.map(function(value) {
+        var space_ids = spaces.map(function (value) {
             return value._id;
         });
 
@@ -54,9 +54,9 @@ router.post('/list', function(req, res) {
 /**
  * Save cache.
  */
-router.post('/save', function(req, res) {
+router.post('/save', function (req, res) {
     if (req.body._id)
-        db.Cache.update({_id: req.body._id}, req.body, {upsert: true}, function(err) {
+        db.Cache.update({_id: req.body._id}, req.body, {upsert: true}, function (err) {
             if (err)
                 return res.status(500).send(err.message);
 
@@ -65,7 +65,7 @@ router.post('/save', function(req, res) {
     else {
         var cache = new db.Cache(req.body);
 
-        cache.save(function(err, cache) {
+        cache.save(function (err, cache) {
             if (err)
                 return res.status(500).send(err.message);
 
@@ -77,7 +77,7 @@ router.post('/save', function(req, res) {
 /**
  * Remove cache by ._id.
  */
-router.post('/remove', function(req, res) {
+router.post('/remove', function (req, res) {
     db.Cache.remove(req.body, function (err) {
         if (err)
             return res.status(500).send(err.message);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8424670b/modules/web-control-center/nodejs/routes/clusters.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/clusters.js b/modules/web-control-center/nodejs/routes/clusters.js
index fa3abf2..5088156 100644
--- a/modules/web-control-center/nodejs/routes/clusters.js
+++ b/modules/web-control-center/nodejs/routes/clusters.js
@@ -19,7 +19,7 @@ var router = require('express').Router();
 var db = require('../db');
 
 /* GET clusters page. */
-router.get('/', function(req, res) {
+router.get('/', function (req, res) {
     res.render('configuration/clusters');
 });
 
@@ -29,7 +29,7 @@ router.get('/', function(req, res) {
  * @param req Request.
  * @param res Response.
  */
-router.post('/list', function(req, res) {
+router.post('/list', function (req, res) {
     var user_id = req.currentUserId();
 
     // Get owned space and all accessed space.
@@ -37,7 +37,7 @@ router.post('/list', function(req, res) {
         if (err)
             return res.status(500).send(err.message);
 
-        var space_ids = spaces.map(function(value) {
+        var space_ids = spaces.map(function (value) {
             return value._id;
         });
 
@@ -50,7 +50,7 @@ router.post('/list', function(req, res) {
                 if (err)
                     return res.status(500).send(err.message);
 
-                var cachesJson = caches.map(function(cache) {
+                var cachesJson = caches.map(function (cache) {
                     return {value: cache._id, label: cache.name, swapEnabled: cache.swapEnabled};
                 });
 
@@ -63,9 +63,9 @@ router.post('/list', function(req, res) {
 /**
  * Save cluster.
  */
-router.post('/save', function(req, res) {
+router.post('/save', function (req, res) {
     if (req.body._id)
-        db.Cluster.update({_id: req.body._id}, req.body, {upsert: true}, function(err) {
+        db.Cluster.update({_id: req.body._id}, req.body, {upsert: true}, function (err) {
             if (err)
                 return res.status(500).send(err.message);
 
@@ -74,7 +74,7 @@ router.post('/save', function(req, res) {
     else {
         var cluster = new db.Cluster(req.body);
 
-        cluster.save(function(err, cluster) {
+        cluster.save(function (err, cluster) {
             if (err)
                 return res.status(500).send(err.message);
 
@@ -86,7 +86,7 @@ router.post('/save', function(req, res) {
 /**
  * Remove cluster by ._id.
  */
-router.post('/remove', function(req, res) {
+router.post('/remove', function (req, res) {
     db.Cluster.remove(req.body, function (err) {
         if (err)
             return res.status(500).send(err.message);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8424670b/modules/web-control-center/nodejs/routes/metadata.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/metadata.js b/modules/web-control-center/nodejs/routes/metadata.js
index fbafbfa..f1b7e83 100644
--- a/modules/web-control-center/nodejs/routes/metadata.js
+++ b/modules/web-control-center/nodejs/routes/metadata.js
@@ -19,7 +19,7 @@ var router = require('express').Router();
 var db = require('../db');
 
 /* GET metadata page. */
-router.get('/', function(req, res) {
+router.get('/', function (req, res) {
     res.render('configuration/metadata');
 });
 
@@ -29,7 +29,7 @@ router.get('/', function(req, res) {
  * @param req Request.
  * @param res Response.
  */
-router.post('/list', function(req, res) {
+router.post('/list', function (req, res) {
     var user_id = req.currentUserId();
 
     // Get owned space and all accessed space.
@@ -37,7 +37,7 @@ router.post('/list', function(req, res) {
         if (err)
             return res.status(500).send(err.message);
 
-        var space_ids = spaces.map(function(value) {
+        var space_ids = spaces.map(function (value) {
             return value._id;
         });
 
@@ -54,9 +54,9 @@ router.post('/list', function(req, res) {
 /**
  * Save metadata.
  */
-router.post('/save', function(req, res) {
+router.post('/save', function (req, res) {
     if (req.body._id)
-        db.CacheTypeMetadata.update({_id: req.body._id}, req.body, {upsert: true}, function(err) {
+        db.CacheTypeMetadata.update({_id: req.body._id}, req.body, {upsert: true}, function (err) {
             if (err)
                 return res.status(500).send(err.message);
 
@@ -65,7 +65,7 @@ router.post('/save', function(req, res) {
     else {
         var metadata = new db.CacheTypeMetadata(req.body);
 
-        metadata.save(function(err, metadata) {
+        metadata.save(function (err, metadata) {
             if (err)
                 return res.status(500).send(err.message);
 
@@ -77,7 +77,7 @@ router.post('/save', function(req, res) {
 /**
  * Remove metadata by ._id.
  */
-router.post('/remove', function(req, res) {
+router.post('/remove', function (req, res) {
     db.CacheTypeMetadata.remove(req.body, function (err) {
         if (err)
             return res.status(500).send(err.message);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8424670b/modules/web-control-center/nodejs/routes/persistence.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/persistence.js b/modules/web-control-center/nodejs/routes/persistence.js
index 5b33f9b..3e188bb 100644
--- a/modules/web-control-center/nodejs/routes/persistence.js
+++ b/modules/web-control-center/nodejs/routes/persistence.js
@@ -20,7 +20,7 @@ var db = require('../db');
 var ds = require('../helpers/data-structures.js'), jdbcTypes = ds.jdbcTypes, javaTypes = ds.javaTypes;
 
 /* GET persistence page. */
-router.get('/', function(req, res) {
+router.get('/', function (req, res) {
     res.render('configuration/persistence');
 });
 
@@ -30,7 +30,7 @@ router.get('/', function(req, res) {
  * @param req Request.
  * @param res Response.
  */
-router.post('/list', function(req, res) {
+router.post('/list', function (req, res) {
     var user_id = req.currentUserId();
 
     // Get owned space and all accessed space.
@@ -38,7 +38,7 @@ router.post('/list', function(req, res) {
         if (err)
             return res.status(500).send(err.message);
 
-        var space_ids = spaces.map(function(value) {
+        var space_ids = spaces.map(function (value) {
             return value._id;
         });
 
@@ -55,9 +55,9 @@ router.post('/list', function(req, res) {
 /**
  * Save persistence.
  */
-router.post('/save', function(req, res) {
+router.post('/save', function (req, res) {
     if (req.body._id)
-        db.Persistence.update({_id: req.body._id}, req.body, {upsert: true}, function(err) {
+        db.Persistence.update({_id: req.body._id}, req.body, {upsert: true}, function (err) {
             if (err)
                 return res.status(500).send(err.message);
 
@@ -66,7 +66,7 @@ router.post('/save', function(req, res) {
     else {
         var persistence = new db.Persistence(req.body);
 
-        persistence.save(function(err, persistence) {
+        persistence.save(function (err, persistence) {
             if (err)
                 return res.status(500).send(err.message);
 
@@ -78,7 +78,7 @@ router.post('/save', function(req, res) {
 /**
  * Remove persistence by ._id.
  */
-router.post('/remove', function(req, res) {
+router.post('/remove', function (req, res) {
     db.Persistence.remove(req.body, function (err) {
         if (err)
             return res.status(500).send(err.message);
@@ -89,8 +89,8 @@ router.post('/remove', function(req, res) {
 
 // simple countdown latch
 function CDL(countdown, completion) {
-    this.countDown = function() {
-        if(--countdown < 1) completion();
+    this.countDown = function () {
+        if (--countdown < 1) completion();
     };
 }
 
@@ -134,7 +134,7 @@ function toJavaFieldName(name) {
 
 
 //
-router.post('/pg', function(req, res) {
+router.post('/pg', function (req, res) {
     var pg = require('pg');
     var util = require('util');
 
@@ -148,14 +148,14 @@ router.post('/pg', function(req, res) {
 
     var connectionString = util.format('postgres://%s:%s@%s:%d/%s', username, password, host, port, dbName);
 
-    pg.connect(connectionString, function(err, client, done) {
+    pg.connect(connectionString, function (err, client, done) {
         var sendError = function (err) {
             done();
 
             res.status(500).send(err.message);
         };
 
-        if(err)
+        if (err)
             return sendError(err);
 
         var sendResponse = function () {
@@ -244,67 +244,70 @@ router.post('/pg', function(req, res) {
             'SELECT table_schema, table_name ' +
             'FROM information_schema.tables ' +
             'WHERE table_schema = ANY (current_schemas(false)) ' +
-            'ORDER BY table_schema, table_name', function(err, result) {
-
-            if(err)
-                return sendError(err);
-
-            if (result.rows.length > 0) {
-                // usage
-                var latch = new CDL(result.rows.length, sendResponse);
-
-                result.rows.forEach(function (table) {
-
-                    var indisprimary = client.query(
-                        "SELECT a.attname " +
-                        "FROM pg_index i " +
-                        "JOIN pg_attribute a " +
-                        "  ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey) " +
-                        "WHERE  i.indrelid = $1::regclass AND i.indisprimary", [table.table_schema + '.' + table.table_name],
-                        function (err, result) {
-                            if (err)
-                                return sendError(err);
-
-                            var pks = result.rows.map(function(row) {
-                                return row.attname;
+            'ORDER BY table_schema, table_name', function (err, result) {
+
+                if (err)
+                    return sendError(err);
+
+                if (result.rows.length > 0) {
+                    // usage
+                    var latch = new CDL(result.rows.length, sendResponse);
+
+                    result.rows.forEach(function (table) {
+
+                        var indisprimary = client.query(
+                            "SELECT a.attname " +
+                            "FROM pg_index i " +
+                            "JOIN pg_attribute a " +
+                            "  ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey) " +
+                            "WHERE  i.indrelid = $1::regclass AND i.indisprimary", [table.table_schema + '.' + table.table_name],
+                            function (err, result) {
+                                if (err)
+                                    return sendError(err);
+
+                                var pks = result.rows.map(function (row) {
+                                    return row.attname;
+                                });
+
+                                client.query(
+                                    'SELECT column_name, udt_name, is_nullable ' +
+                                    'FROM information_schema.columns ' +
+                                    'WHERE table_schema = $1 AND table_name = $2', [table.table_schema, table.table_name],
+                                    function (err, result) {
+                                        if (err)
+                                            return sendError(err);
+
+                                        var cols = [];
+
+                                        result.rows.forEach(function (column) {
+                                            var dataType = jdbcType(column.udt_name);
+
+                                            cols.push({
+                                                pk: pks.indexOf(column.column_name) >= 0,
+                                                use: true,
+                                                notNull: column.is_nullable == 'NO',
+                                                dbName: column.column_name,
+                                                dbType: dataType,
+                                                javaName: toJavaFieldName(column.column_name),
+                                                javaType: javaType(dataType)
+                                            });
+                                        });
+
+                                        var valClsName = toJavaClassName(table.table_name);
+
+                                        tables.push({
+                                            use: pks.length > 0,
+                                            schemaName: table.table_schema, tableName: table.table_name,
+                                            keyClass: valClsName + 'Key', valueClass: valClsName,
+                                            columns: cols
+                                        });
+
+                                        latch.countDown();
+                                    })
                             });
-
-                            client.query(
-                                'SELECT column_name, udt_name, is_nullable ' +
-                                'FROM information_schema.columns ' +
-                                'WHERE table_schema = $1 AND table_name = $2', [table.table_schema, table.table_name],
-                                function (err, result) {
-                                    if (err)
-                                        return sendError(err);
-
-                                    var cols = [];
-
-                                    result.rows.forEach(function (column) {
-                                        var dataType = jdbcType(column.udt_name);
-
-                                        cols.push({
-                                            pk: pks.indexOf(column.column_name) >= 0,
-                                            use: true,
-                                            notNull: column.is_nullable == 'NO',
-                                            dbName: column.column_name, dbType: dataType,
-                                            javaName: toJavaFieldName(column.column_name), javaType: javaType(dataType) });
-                                    });
-
-                                    var valClsName = toJavaClassName(table.table_name);
-
-                                    tables.push({
-                                        use: pks.length > 0,
-                                        schemaName: table.table_schema, tableName: table.table_name,
-                                        keyClass: valClsName + 'Key', valueClass: valClsName,
-                                        columns: cols
-                                    });
-
-                                    latch.countDown();
-                                })
-                        });
-                });
-            }
-        });
+                    });
+                }
+            });
     });
 });
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8424670b/modules/web-control-center/nodejs/routes/public.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/public.js b/modules/web-control-center/nodejs/routes/public.js
index e7f342b..fd25aed 100644
--- a/modules/web-control-center/nodejs/routes/public.js
+++ b/modules/web-control-center/nodejs/routes/public.js
@@ -20,31 +20,31 @@ var passport = require('passport');
 var db = require('../db');
 
 // GET dropdown-menu template.
-router.get('/select', function(req, res) {
-    res.render('templates/select', { });
+router.get('/select', function (req, res) {
+    res.render('templates/select', {});
 });
 
 // GET dropdown-menu template.
-router.get('/confirm', function(req, res) {
-    res.render('templates/confirm', { });
+router.get('/confirm', function (req, res) {
+    res.render('templates/confirm', {});
 });
 
 /* GET login page. */
-router.get('/login', function(req, res) {
+router.get('/login', function (req, res) {
     res.render('login');
 });
 
 /**
  * Register new account.
  */
-router.post('/register', function(req, res, next) {
+router.post('/register', function (req, res, next) {
     db.Account.count(function (err, cnt) {
         if (err)
             return res.status(401).send(err.message);
 
         req.body.admin = cnt == 0;
 
-        db.Account.register(new db.Account(req.body), req.body.password, function(err, account) {
+        db.Account.register(new db.Account(req.body), req.body.password, function (err, account) {
             if (err)
                 return res.status(401).send(err.message);
 
@@ -53,7 +53,7 @@ router.post('/register', function(req, res, next) {
 
             new db.Space({name: 'Personal space', owner: account._id}).save();
 
-            req.logIn(account, {}, function(err) {
+            req.logIn(account, {}, function (err) {
                 if (err)
                     return res.status(401).send(err.message);
 
@@ -66,15 +66,15 @@ router.post('/register', function(req, res, next) {
 /**
  * Login in exist account.
  */
-router.post('/login', function(req, res, next) {
-    passport.authenticate('local', function(err, user) {
+router.post('/login', function (req, res, next) {
+    passport.authenticate('local', function (err, user) {
         if (err)
             return res.status(401).send(err.message);
 
         if (!user)
             return res.status(401).send('Invalid email or password');
 
-        req.logIn(user, {}, function(err) {
+        req.logIn(user, {}, function (err) {
             if (err)
                 return res.status(401).send(err.message);
 
@@ -86,14 +86,14 @@ router.post('/login', function(req, res, next) {
 /**
  * Logout.
  */
-router.get('/logout', function(req, res) {
+router.get('/logout', function (req, res) {
     req.logout();
 
     res.redirect('/');
 });
 
 /* GET home page. */
-router.get('/', function(req, res) {
+router.get('/', function (req, res) {
     if (req.isAuthenticated())
         res.redirect('/configuration/clusters');
     else

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8424670b/modules/web-control-center/nodejs/routes/sql.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/sql.js b/modules/web-control-center/nodejs/routes/sql.js
index ea3465c..f6017ba 100644
--- a/modules/web-control-center/nodejs/routes/sql.js
+++ b/modules/web-control-center/nodejs/routes/sql.js
@@ -19,7 +19,7 @@ var router = require('express').Router();
 var db = require('../db');
 var uiUtils = require('../helpers/ui-utils');
 
-router.get('/', function(req, res) {
+router.get('/', function (req, res) {
     res.render('sql/sql');
 });
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8424670b/modules/web-control-center/nodejs/routes/summary.js
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/routes/summary.js b/modules/web-control-center/nodejs/routes/summary.js
index 0578f45..a4554f0 100644
--- a/modules/web-control-center/nodejs/routes/summary.js
+++ b/modules/web-control-center/nodejs/routes/summary.js
@@ -24,11 +24,11 @@ var generatorJava = require('./generator/java');
 var generatorDocker = require('./generator/docker');
 
 /* GET summary page. */
-router.get('/', function(req, res) {
+router.get('/', function (req, res) {
     res.render('configuration/summary');
 });
 
-router.post('/generator', function(req, res) {
+router.post('/generator', function (req, res) {
     // Get cluster.
     db.Cluster.findById(req.body._id).populate('caches').exec(function (err, cluster) {
         if (err)
@@ -46,7 +46,7 @@ router.post('/generator', function(req, res) {
     });
 });
 
-router.post('/download', function(req, res) {
+router.post('/download', function (req, res) {
     // Get cluster.
     db.Cluster.findById(req.body._id).populate('caches').exec(function (err, cluster) {
         if (err)
@@ -60,12 +60,12 @@ router.post('/download', function(req, res) {
         // creating archives
         var zip = archiver('zip');
 
-        zip.on('error', function(err) {
+        zip.on('error', function (err) {
             res.status(500).send({error: err.message});
         });
 
         //on stream closed we can end the request
-        res.on('close', function() {
+        res.on('close', function () {
             console.log('Archive wrote %d bytes', archive.pointer());
 
             return res.status(200).send('OK').end();
@@ -88,7 +88,7 @@ router.post('/download', function(req, res) {
 
         zip.append(generatorXml.generateClusterConfiguration(cluster), {name: cluster.name + ".xml"})
             .append(generatorJava.generateClusterConfiguration(cluster, req.body.javaClass),
-                {name: javaClass ? 'ConfigurationFactory.java' : cluster.name + '.snipplet.java'})
+            {name: javaClass ? 'ConfigurationFactory.java' : cluster.name + '.snipplet.java'})
             .append(generatorDocker.generateClusterConfiguration(cluster, req.body.os), {name: "Dockerfile"})
             .finalize();
     });