You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/07/02 10:26:59 UTC

[4/9] incubator-ignite git commit: # ignite-843 Cleanup module.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/public/javascripts/controllers/caches.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/controllers/caches.js b/modules/webconfig/nodejs/public/javascripts/controllers/caches.js
deleted file mode 100644
index 006f065..0000000
--- a/modules/webconfig/nodejs/public/javascripts/controllers/caches.js
+++ /dev/null
@@ -1,237 +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.
- */
-
-configuratorModule.controller('cachesController', ['$scope', '$alert', '$http', 'commonFunctions', function ($scope, $alert, $http, commonFunctions) {
-        $scope.swapSimpleItems = commonFunctions.swapSimpleItems;
-        $scope.joinTip = commonFunctions.joinTip;
-        $scope.getModel = commonFunctions.getModel;
-
-        $scope.atomicities = [
-            {value: 'ATOMIC', label: 'ATOMIC'},
-            {value: 'TRANSACTIONAL', label: 'TRANSACTIONAL'}
-        ];
-
-        $scope.modes = [
-            {value: 'PARTITIONED', label: 'PARTITIONED'},
-            {value: 'REPLICATED', label: 'REPLICATED'},
-            {value: 'LOCAL', label: 'LOCAL'}
-        ];
-
-        $scope.atomicWriteOrderModes = [
-            {value: 'CLOCK', label: 'CLOCK'},
-            {value: 'PRIMARY', label: 'PRIMARY'}
-        ];
-
-        $scope.memoryModes = [
-            {value: 'ONHEAP_TIERED', label: 'ONHEAP_TIERED'},
-            {value: 'OFFHEAP_TIERED', label: 'OFFHEAP_TIERED'},
-            {value: 'OFFHEAP_VALUES', label: 'OFFHEAP_VALUES'}
-        ];
-
-        $scope.evictionPolicies = [
-            {value: 'LRU', label: 'Least Recently Used'},
-            {value: 'RND', label: 'Random'},
-            {value: 'FIFO', label: 'FIFO'},
-            {value: 'SORTED', label: 'Sorted'},
-            {value: undefined, label: 'Not set'}
-        ];
-
-        $scope.rebalanceModes = [
-            {value: 'SYNC', label: 'SYNC'},
-            {value: 'ASYNC', label: 'ASYNC'},
-            {value: 'NONE', label: 'NONE'}
-        ];
-
-        $scope.cacheStoreFactories = [
-            {value: 'CacheJdbcPojoStoreFactory', label: 'JDBC POJO store factory'},
-            {value: 'CacheJdbcBlobStoreFactory', label: 'JDBC BLOB store factory'},
-            {value: 'CacheHibernateBlobStoreFactory', label: 'Hibernate BLOB store factory'},
-            {value: undefined, label: 'Not set'}
-        ];
-
-        $scope.cacheStoreJdbcDialects = [
-            {value: 'BasicJdbcDialect', label: 'Generic JDBC dialect'},
-            {value: 'OracleDialect', label: 'Oracle'},
-            {value: 'DB2Dialect', label: 'IBM DB2'},
-            {value: 'SQLServerDialect', label: 'Microsoft SQL Server'},
-            {value: 'MySQLDialect', label: 'My SQL'},
-            {value: 'H2Dialect', label: 'H2 database'}
-        ];
-
-        $scope.general = [];
-        $scope.advanced = [];
-
-        $http.get('/form-models/caches.json')
-            .success(function (data) {
-                $scope.general = data.general;
-                $scope.advanced = data.advanced;
-            });
-
-        $scope.caches = [];
-
-        // When landing on the page, get caches and show them.
-        $http.get('/rest/caches')
-            .success(function (data) {
-                $scope.spaces = data.spaces;
-                $scope.caches = data.caches;
-
-                var restoredItem = angular.fromJson(sessionStorage.cacheBackupItem);
-
-                if (restoredItem) {
-                    var idx = _.findIndex($scope.caches, function (cache) {
-                        return cache._id == restoredItem._id;
-                    });
-
-                    if (idx >= 0)
-                        $scope.selectedItem = $scope.caches[idx];
-
-                    $scope.backupItem = restoredItem;
-                }
-
-                $scope.$watch('backupItem', function (val) {
-                    if (val)
-                        sessionStorage.cacheBackupItem = angular.toJson(val);
-                }, true);
-            });
-
-        $scope.selectItem = function (item) {
-            $scope.selectedItem = item;
-
-            $scope.backupItem = angular.copy(item);
-        };
-
-        // Add new cache.
-        $scope.createItem = function () {
-            $scope.backupItem = {mode: 'PARTITIONED', atomicityMode: 'ATOMIC'};
-            $scope.backupItem.space = $scope.spaces[0]._id;
-        };
-
-        // Save cache in db.
-        $scope.saveItem = function () {
-            var item = $scope.backupItem;
-
-            console.log(item);
-
-            if (item.cacheStoreFactory && !item.readThrough && !item.writeThrough) {
-                $alert({position: 'top', title: 'Store is configured but read/write through are not enabled!'});
-
-                return;
-            }
-
-            if ((item.readThrough || item.writeThrough) && (!item.cacheStoreFactory || !item.cacheStoreFactory.kind)) {
-                $alert({position: 'top', title: 'Read / write through are enabled but strore is not configured!'});
-
-                return;
-            }
-
-            $http.post('/rest/caches/save', item)
-                .success(function (_id) {
-                    var idx = _.findIndex($scope.caches, function (cache) {
-                        return cache._id == _id;
-                    });
-
-                    if (idx >= 0)
-                        angular.extend($scope.caches[idx], item);
-                    else {
-                        item._id = _id;
-
-                        $scope.caches.push(item);
-                    }
-
-                    $scope.selectItem(item);
-
-                    $alert({
-                        type: 'success',
-                        title: 'Cache "' + item.name + '" saved.',
-                        duration: 2,
-                        container: '#save-btn'
-                    });
-                })
-                .error(function (errorMessage) {
-                    $alert({title: errorMessage});
-                });
-        };
-
-        $scope.removeItem = function () {
-            var _id = $scope.selectedItem._id;
-
-            $http.post('/rest/caches/remove', {_id: _id})
-                .success(function () {
-                    var i = _.findIndex($scope.caches, function (cache) {
-                        return cache._id == _id;
-                    });
-
-                    if (i >= 0) {
-                        $scope.caches.splice(i, 1);
-
-                        $scope.selectedItem = undefined;
-                        $scope.backupItem = undefined;
-                    }
-                })
-                .error(function (errorMessage) {
-                    $alert({title: errorMessage});
-                });
-        };
-
-        $scope.addIndexedTypes = function (keyCls, valCls) {
-            var idxTypes = $scope.backupItem.indexedTypes;
-
-            var newItem = {keyClass: keyCls, valueClass: valCls};
-
-            if (idxTypes)
-                idxTypes.push(newItem);
-            else
-                $scope.backupItem.indexedTypes = [newItem];
-        };
-
-        $scope.editIndexedTypes = function (idx) {
-            $scope.indexedTypeIdx = idx;
-
-            if (idx < 0) {
-                $scope.currKeyCls = '';
-                $scope.currValCls = '';
-            }
-            else {
-                var idxType = $scope.backupItem.indexedTypes[idx];
-
-                $scope.currKeyCls = idxType.keyClass;
-                $scope.currValCls = idxType.valueClass;
-            }
-        };
-
-        $scope.saveIndexedType = function (k, v) {
-            var idxTypes = $scope.backupItem.indexedTypes;
-
-            var idx = $scope.indexedTypeIdx;
-
-            if (idx < 0) {
-                var newItem = {keyClass: k, valueClass: v};
-
-                if (idxTypes)
-                    idxTypes.push(newItem);
-                else
-                    $scope.backupItem.indexedTypes = [newItem];
-            }
-            else {
-                var idxType = idxTypes[idx];
-
-                idxType.keyClass = k;
-                idxType.valueClass = v;
-            }
-        };
-    }]
-);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js b/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
deleted file mode 100644
index ce38381..0000000
--- a/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
+++ /dev/null
@@ -1,207 +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.
- */
-
-configuratorModule.controller('clustersController', ['$scope', '$alert', '$http', 'commonFunctions', function ($scope, $alert, $http, commonFunctions) {
-        $scope.swapSimpleItems = commonFunctions.swapSimpleItems;
-        $scope.joinTip = commonFunctions.joinTip;
-        $scope.getModel = commonFunctions.getModel;
-
-        $scope.templates = [
-            {value: {}, label: 'blank'},
-            {value: {discovery: {kind: 'Vm', Vm: {addresses: ['127.0.0.1:47500..47510']}}}, label: 'local'},
-            {value: {discovery: {kind: 'Multicast', Multicast: {}}}, label: 'multicast'}
-        ];
-
-        $scope.discoveries = [
-            {value: 'Vm', label: 'static IPs'},
-            {value: 'Multicast', label: 'multicast'},
-            {value: 'S3', label: 'AWS S3'},
-            {value: 'Cloud', label: 'apache jclouds'},
-            {value: 'GoogleStorage', label: 'google cloud storage'},
-            {value: 'Jdbc', label: 'JDBC'},
-            {value: 'SharedFs', label: 'shared filesystem'}
-        ];
-
-        $scope.swapSpaceSpis = [
-            {value: 'FileSwapSpaceSpi', label: 'File-based swap'},
-            {value: undefined, label: 'Not set'}
-        ];
-
-        $scope.events = [];
-
-        for (var eventGroupName in eventGroups) {
-            if (eventGroups.hasOwnProperty(eventGroupName)) {
-                $scope.events.push({value: eventGroupName, label: eventGroupName});
-            }
-        }
-
-        $scope.cacheModes = [
-            {value: 'LOCAL', label: 'LOCAL'},
-            {value: 'REPLICATED', label: 'REPLICATED'},
-            {value: 'PARTITIONED', label: 'PARTITIONED'}
-        ];
-
-        $scope.deploymentModes = [
-            {value: 'PRIVATE', label: 'PRIVATE'},
-            {value: 'ISOLATED', label: 'ISOLATED'},
-            {value: 'SHARED', label: 'SHARED'},
-            {value: 'CONTINUOUS', label: 'CONTINUOUS'}
-        ];
-
-        $scope.transactionConcurrency = [
-            {value: 'OPTIMISTIC', label: 'OPTIMISTIC'},
-            {value: 'PESSIMISTIC', label: 'PESSIMISTIC'}
-        ];
-
-        $scope.transactionIsolation = [
-            {value: 'READ_COMMITTED', label: 'READ_COMMITTED'},
-            {value: 'REPEATABLE_READ', label: 'REPEATABLE_READ'},
-            {value: 'SERIALIZABLE', label: 'SERIALIZABLE'}
-        ];
-
-        $scope.segmentationPolicy = [
-            {value: 'RESTART_JVM', label: 'RESTART_JVM'},
-            {value: 'STOP', label: 'STOP'},
-            {value: 'NOOP', label: 'NOOP'}
-        ];
-
-        $scope.marshallers = [
-            {value: 'JdkMarshaller', label: 'JdkMarshaller'},
-            {value: 'OptimizedMarshaller', label: 'OptimizedMarshaller'}
-        ];
-
-        $scope.clusters = [];
-
-        $http.get('/form-models/clusters.json')
-            .success(function (data) {
-                $scope.templateTip = data.templateTip;
-
-                $scope.general = data.general;
-                $scope.advanced = data.advanced;
-            });
-
-        // When landing on the page, get clusters and show them.
-        $http.get('/rest/clusters')
-            .success(function (data) {
-                $scope.caches = data.caches;
-                $scope.spaces = data.spaces;
-                $scope.clusters = data.clusters;
-
-                var restoredItem = angular.fromJson(sessionStorage.clusterBackupItem);
-
-                if (restoredItem) {
-                    var idx = _.findIndex($scope.clusters, function (cluster) {
-                        return cluster._id == restoredItem._id;
-                    });
-
-                    if (idx >= 0)
-                        $scope.selectedItem = $scope.clusters[idx];
-
-                    $scope.backupItem = restoredItem;
-                }
-
-                $scope.$watch('backupItem', function (val) {
-                    if (val)
-                        sessionStorage.clusterBackupItem = angular.toJson(val);
-                }, true);
-            });
-
-        $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;
-        };
-
-        // Save cluster in db.
-        $scope.saveItem = function () {
-            var item = $scope.backupItem;
-
-            if (!item.swapSpaceSpi || !item.swapSpaceSpi.kind) {
-                for (var cacheId in item.caches) {
-                    var idx = _.findIndex($scope.caches, function (cache) {
-                        return cache._id == cacheId.value;
-                    });
-
-                    if (idx >= 0) {
-                        var cache = $scope.caches[idx];
-
-                        if (cache.swapEnabled) {
-                            $alert({title: 'Swap space SPI is not configured, but cache "' + cache.label + '" configured to use swap!'});
-
-                            return;
-                        }
-                    }
-                }
-            }
-
-            $http.post('/rest/clusters/save', item)
-                .success(function (_id) {
-                    var idx = _.findIndex($scope.clusters, function (cluster) {
-                        return cluster._id == _id;
-                    });
-
-                    if (idx >= 0)
-                        angular.extend($scope.clusters[idx], item);
-                    else {
-                        item._id = _id;
-
-                        $scope.clusters.push(item);
-                    }
-
-                    $scope.selectItem(item);
-
-                    $alert({
-                        type: 'success',
-                        title: 'Cluster "' + item.name + '" saved.',
-                        duration: 2,
-                        container: '#save-btn'
-                    });
-                })
-                .error(function (errorMessage) {
-                    $alert({title: errorMessage});
-                });
-        };
-
-        $scope.removeItem = function () {
-            var _id = $scope.selectedItem._id;
-
-            $http.post('/rest/clusters/remove', {_id: _id})
-                .success(function () {
-                    var i = _.findIndex($scope.clusters, function (cluster) {
-                        return cluster._id == _id;
-                    });
-
-                    if (i >= 0) {
-                        $scope.clusters.splice(i, 1);
-
-                        $scope.selectedItem = undefined;
-                        $scope.backupItem = undefined;
-                    }
-                })
-                .error(function (errorMessage) {
-                    $alert({title: errorMessage});
-                });
-        };
-    }]
-);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/public/javascripts/controllers/common.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/controllers/common.js b/modules/webconfig/nodejs/public/javascripts/controllers/common.js
deleted file mode 100644
index 4d1e411..0000000
--- a/modules/webconfig/nodejs/public/javascripts/controllers/common.js
+++ /dev/null
@@ -1,169 +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 configuratorModule = angular.module('ignite-web-configurator', ['smart-table', 'mgcrea.ngStrap', 'ngSanitize']);
-
-configuratorModule.service('commonFunctions', function () {
-    return {
-        getModel: function(obj, path) {
-            if (!path)
-                return obj;
-
-            path = path.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
-            path = path.replace(/^\./, '');           // strip a leading dot
-
-            var segs = path.split('.');
-            var root = obj;
-
-            while (segs.length > 0) {
-                var pathStep = segs.shift();
-
-                if (typeof root[pathStep] === 'undefined')
-                    root[pathStep] = {};
-
-                root = root[pathStep];
-            }
-
-            return root;
-        },
-        swapSimpleItems: function (a, ix1, ix2) {
-            var tmp = a[ix1];
-
-            a[ix1] = a[ix2];
-            a[ix2] = tmp;
-        },
-        joinTip: function(arr) {
-            if (!arr) {
-                return arr;
-            }
-
-            var lines = arr.map(function (line) {
-                var rtrimmed = line.replace(/\s+$/g, '');
-
-                if (rtrimmed.indexOf('>', this.length - 1) == -1) {
-                    rtrimmed = rtrimmed + '<br/>';
-                }
-
-                return rtrimmed;
-            });
-
-            return lines.join("");
-        }
-    }
-});
-
-configuratorModule.config(function ($tooltipProvider) {
-    angular.extend($tooltipProvider.defaults, {
-        container: 'body',
-        placement: 'right',
-        html: 'true',
-        trigger: 'click hover'
-        //,delay: { hide: 600 }
-    });
-});
-
-configuratorModule.config(function ($selectProvider) {
-    angular.extend($selectProvider.defaults, {
-        maxLength: '1',
-        allText: 'Select All',
-        noneText: 'Clear All',
-        template: '/select'
-    });
-});
-
-// Alert settings
-configuratorModule.config(function ($alertProvider) {
-    angular.extend($alertProvider.defaults, {
-        container: 'body',
-        placement: 'top-right',
-        duration: '5',
-        type: 'danger'
-    });
-});
-
-// Decode name using map(value, label).
-configuratorModule.filter('displayValue', function () {
-    return function (v, m, dflt) {
-        var i = _.findIndex(m, function (item) {
-            return item.value == v;
-        });
-
-        if (i >= 0) {
-            return m[i].label;
-        }
-
-        if (dflt) {
-            return dflt;
-        }
-
-        return 'Unknown value';
-    }
-});
-
-/**
- * Replaces all occurrences of {@code org.apache.ignite.} with {@code o.a.i.},
- * {@code org.apache.ignite.internal.} with {@code o.a.i.i.},
- * {@code org.apache.ignite.internal.visor.} with {@code o.a.i.i.v.} and
- * {@code org.apache.ignite.scalar.} with {@code o.a.i.s.}.
- *
- * @param s String to replace in.
- * @return Replaces string.
- */
-configuratorModule.filter('compact', function () {
-    return function (s) {
-        return s.replace("org.apache.ignite.internal.visor.", "o.a.i.i.v.").
-            replace("org.apache.ignite.internal.", "o.a.i.i.").
-            replace("org.apache.ignite.scalar.", "o.a.i.s.").
-            replace("org.apache.ignite.", "o.a.i.");
-    }
-});
-
-configuratorModule.controller('activeLink', ['$scope', function ($scope) {
-    $scope.isActive = function (path) {
-        return window.location.pathname.substr(0, path.length) == path;
-    };
-}]);
-
-configuratorModule.controller('auth', ['$scope', '$modal', '$alert', '$http', '$window', function ($scope, $modal, $alert, $http, $window) {
-    $scope.action = 'login';
-
-    $scope.errorMessage = '';
-
-    $scope.valid = false;
-
-    // Pre-fetch an external template populated with a custom scope
-    var authModal = $modal({scope: $scope, template: '/login', show: false});
-
-    $scope.login = function () {
-        // Show when some event occurs (use $promise property to ensure the template has been loaded)
-        authModal.$promise.then(authModal.show);
-    };
-
-    $scope.auth = function (action, user_info) {
-        $http.post('/rest/auth/' + action, user_info)
-            .success(function (data) {
-                authModal.hide();
-
-                $window.location = '/clusters';
-            })
-            .error(function (data) {
-                console.log(data);
-
-                $alert({placement: 'top', container: '#errors-container', title: data});
-            });
-    };
-}]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/public/javascripts/controllers/persistences.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/controllers/persistences.js b/modules/webconfig/nodejs/public/javascripts/controllers/persistences.js
deleted file mode 100644
index 10e3f8f..0000000
--- a/modules/webconfig/nodejs/public/javascripts/controllers/persistences.js
+++ /dev/null
@@ -1,202 +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.
- */
-
-configuratorModule.controller('persistenceController', ['$scope', '$alert', '$http', 'commonFunctions', function ($scope, $alert, $http, commonFunctions) {
-        $scope.joinTip = commonFunctions.joinTip;
-        $scope.getModel = commonFunctions.getModel;
-
-        $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.connection = [];
-
-        $http.get('/form-models/persistence.json')
-            .success(function (data) {
-                $scope.connection = data.connection;
-            });
-
-        $scope.persistences = [];
-
-        // When landing on the page, get persistences and show them.
-        $http.get('/rest/persistences')
-            .success(function (data) {
-                $scope.spaces = data.spaces;
-                $scope.persistences = data.persistences;
-
-                var restoredItem = angular.fromJson(sessionStorage.persistenceBackupItem);
-
-                if (restoredItem) {
-                    var idx = _.findIndex($scope.persistences, function (persistence) {
-                        return persistence._id == restoredItem._id;
-                    });
-
-                    if (idx >= 0)
-                        $scope.selectedItem = $scope.persistences[idx];
-
-                    $scope.backupItem = restoredItem;
-                }
-
-                $scope.$watch('backupItem', function (val) {
-                    if (val)
-                        sessionStorage.persistenceBackupItem = angular.toJson(val);
-                }, true);
-            });
-
-        $scope.selectItem = function (item) {
-            $scope.selectedItem = item;
-            $scope.backupItem = angular.copy(item);
-        };
-
-        // Add new persistence.
-        $scope.createItem = function () {
-            $scope.backupItem = {database: 'oracle'};
-            $scope.backupItem.space = $scope.spaces[0]._id;
-        };
-
-        // Save persistence in db.
-        $scope.saveItem = function () {
-            var item = $scope.backupItem;
-
-            $http.post('/rest/persistences/save', item)
-                .success(function (_id) {
-                    var i = _.findIndex($scope.persistences, function (persistence) {
-                        return persistence._id == _id;
-                    });
-
-                    if (i >= 0)
-                        angular.extend($scope.persistences[i], item);
-                    else {
-                        item._id = _id;
-
-                        $scope.persistences.push(item);
-                    }
-
-                    $scope.selectItem(item);
-                })
-                .error(function (errorMessage) {
-                    $alert({title: errorMessage});
-                });
-        };
-
-        $scope.removeItem = function () {
-            var _id = $scope.selectedItem._id;
-
-            $http.post('/rest/persistences/remove', {_id: _id})
-                .success(function () {
-                    var i = _.findIndex($scope.persistences, function (persistence) {
-                        return persistence._id == _id;
-                    });
-
-                    if (i >= 0) {
-                        $scope.persistences.splice(i, 1);
-
-                        $scope.selectedItem = undefined;
-                        $scope.backupItem = undefined;
-                    }
-                })
-                .error(function (errorMessage) {
-                    $alert({title: errorMessage});
-                });
-        };
-
-        $scope.data = {
-            curTableIdx: -1,
-            curFieldIdx: -1,
-            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.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;
-            }
-        };
-    }]
-);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/public/javascripts/controllers/summary.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/controllers/summary.js b/modules/webconfig/nodejs/public/javascripts/controllers/summary.js
deleted file mode 100644
index 53cac48..0000000
--- a/modules/webconfig/nodejs/public/javascripts/controllers/summary.js
+++ /dev/null
@@ -1,137 +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.
- */
-
-configuratorModule.controller('summaryController', ['$scope', '$http', function ($scope, $http) {
-    $http.get('/rest/clusters').success(function (data) {
-        $scope.caches = data.caches;
-        $scope.spaces = data.spaces;
-        $scope.clusters = data.clusters;
-    });
-
-    $scope.selectItem = function (item) {
-        $scope.selectedItem = item;
-
-        $scope.generateConfig()
-    };
-
-    $scope.generateConfig = function() {
-        var lang = $scope.cfgLang;
-
-        if (lang == 'docker')
-            return;
-
-        var cluster = $scope.selectedItem;
-        
-        if (!cluster)
-            return;
-        
-        $scope.loading = true;
-
-        $http.get('/rest/configGenerator', {params: 
-        {name: cluster.name, lang: lang, generateJavaClass: $scope.generateJavaClass}})
-            .success(
-            function (data) {
-                if (lang == 'java') {
-                    $("<pre class='brush:java' />").text(data).appendTo($('#javaResultDiv').empty());
-                }
-                else if (lang == 'xml') {
-                    $("<pre class='brush:xml' />").text(data).appendTo($('#xmlResultDiv').empty());
-                }
-
-                SyntaxHighlighter.highlight();
-
-                $scope.loading = false;
-            }).error(function (data) {
-                $scope.generateError = "Failed to generate config: " + data;
-
-                $scope.loading = false;
-            });
-    };
-
-    $scope.cfgLang = 'xml';
-
-    $scope.$watch('cfgLang', $scope.generateConfig);
-    $scope.$watch('generateJavaClass', $scope.generateConfig);
-
-    $scope.dockerArg = {};
-    
-    $scope.downloadDocker = function() {
-        var dockerText = $scope.dockerFile();
-        
-        if (dockerText.length == 0)
-            return;
-        
-        var pom = document.createElement('a');
-        pom.setAttribute('href', 'data:application/octet-stream;charset=utf-8,' + encodeURIComponent(dockerText));
-        pom.setAttribute('download', 'Dockerfile');
-
-        pom.style.display = 'none';
-        document.body.appendChild(pom);
-
-        pom.click();
-
-        document.body.removeChild(pom);
-    };
-    
-    $scope.dockerFile = function() {
-        if (!$scope.selectedItem || !$scope.dockerArg) {
-            return '';
-        }
-        
-        var os = $scope.dockerArg.os;
-        if (!os) {
-            os = 'debian:8'
-        }
-        
-        return "" +
-            "# Start from a Debian image.\n"+
-            "FROM " + os + "\n"+
-            "\n"+
-            "# Install tools.\n"+
-            "RUN apt-get update && apt-get install -y --fix-missing \\\n"+
-            "  wget \\\n"+
-            "  dstat \\\n"+
-            "  maven \\\n"+
-            "  git\n"+
-            "\n"+
-            "# Intasll Oracle JDK.\n"+
-            "RUN mkdir /opt/jdk\n"+
-            "\n"+
-            "RUN wget --header \"Cookie: oraclelicense=accept-securebackup-cookie\" \\\n"+
-            "  http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz\n"+
-            "\n"+
-            "RUN tar -zxf jdk-7u79-linux-x64.tar.gz -C /opt/jdk\n"+
-            "\n"+
-            "RUN rm jdk-7u79-linux-x64.tar.gz\n"+
-            "\n"+
-            "RUN update-alternatives --install /usr/bin/java java /opt/jdk/jdk1.7.0_79/bin/java 100\n"+
-            "\n"+
-            "RUN update-alternatives --install /usr/bin/javac javac /opt/jdk/jdk1.7.0_79/bin/javac 100\n"+
-            "\n"+
-            "# Sets java variables.\n"+
-            "ENV JAVA_HOME /opt/jdk/jdk1.7.0_79/\n"+
-            "\n"+
-            "# Create working directory\n"+
-            "WORKDIR /home\n"+
-            "\n"+
-            "RUN wget -O ignite.zip http://tiny.cc/updater/download_ignite.php && unzip ignite.zip && rm ignite.zip\n"+
-            "\n"+
-            "COPY *.xml /tmp/\n"+
-            "\n"+
-            "RUN mv /tmp/*.xml /home/$(ls)/config";
-    };
-}]);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/public/javascripts/dataStructures.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/dataStructures.js b/modules/webconfig/nodejs/public/javascripts/dataStructures.js
deleted file mode 100644
index 2462708..0000000
--- a/modules/webconfig/nodejs/public/javascripts/dataStructures.js
+++ /dev/null
@@ -1,84 +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.
- */
-
-eventGroups = {
-    EVTS_CHECKPOINT: ['EVT_CHECKPOINT_SAVED', 'EVT_CHECKPOINT_LOADED', 'EVT_CHECKPOINT_REMOVED'],
-    EVTS_DEPLOYMENT: ['EVT_CLASS_DEPLOYED', 'EVT_CLASS_UNDEPLOYED', 'EVT_CLASS_DEPLOY_FAILED', 'EVT_TASK_DEPLOYED',
-        'EVT_TASK_UNDEPLOYED', 'EVT_TASK_DEPLOY_FAILED'],
-    EVTS_ERROR: ['EVT_JOB_TIMEDOUT', 'EVT_JOB_FAILED', 'EVT_JOB_FAILED_OVER', 'EVT_JOB_REJECTED', 'EVT_JOB_CANCELLED',
-        'EVT_TASK_TIMEDOUT', 'EVT_TASK_FAILED', 'EVT_CLASS_DEPLOY_FAILED', 'EVT_TASK_DEPLOY_FAILED',
-        'EVT_TASK_DEPLOYED', 'EVT_TASK_UNDEPLOYED', 'EVT_CACHE_REBALANCE_STARTED', 'EVT_CACHE_REBALANCE_STOPPED'],
-    EVTS_DISCOVERY: ['EVT_NODE_JOINED', 'EVT_NODE_LEFT', 'EVT_NODE_FAILED', 'EVT_NODE_SEGMENTED',
-        'EVT_CLIENT_NODE_DISCONNECTED', 'EVT_CLIENT_NODE_RECONNECTED'],
-    EVTS_JOB_EXECUTION: ['EVT_JOB_MAPPED', 'EVT_JOB_RESULTED', 'EVT_JOB_FAILED_OVER', 'EVT_JOB_STARTED',
-        'EVT_JOB_FINISHED', 'EVT_JOB_TIMEDOUT', 'EVT_JOB_REJECTED', 'EVT_JOB_FAILED', 'EVT_JOB_QUEUED',
-        'EVT_JOB_CANCELLED'],
-    EVTS_TASK_EXECUTION: ['EVT_TASK_STARTED', 'EVT_TASK_FINISHED', 'EVT_TASK_FAILED', 'EVT_TASK_TIMEDOUT',
-        'EVT_TASK_SESSION_ATTR_SET', 'EVT_TASK_REDUCED'],
-    EVTS_CACHE: ['EVT_CACHE_ENTRY_CREATED', 'EVT_CACHE_ENTRY_DESTROYED', 'EVT_CACHE_OBJECT_PUT',
-        'EVT_CACHE_OBJECT_READ', 'EVT_CACHE_OBJECT_REMOVED', 'EVT_CACHE_OBJECT_LOCKED', 'EVT_CACHE_OBJECT_UNLOCKED',
-        'EVT_CACHE_OBJECT_SWAPPED', 'EVT_CACHE_OBJECT_UNSWAPPED', 'EVT_CACHE_OBJECT_EXPIRED'],
-    EVTS_CACHE_REBALANCE: ['EVT_CACHE_REBALANCE_STARTED', 'EVT_CACHE_REBALANCE_STOPPED',
-        'EVT_CACHE_REBALANCE_PART_LOADED', 'EVT_CACHE_REBALANCE_PART_UNLOADED', 'EVT_CACHE_REBALANCE_OBJECT_LOADED',
-        'EVT_CACHE_REBALANCE_OBJECT_UNLOADED', 'EVT_CACHE_REBALANCE_PART_DATA_LOST'],
-    EVTS_CACHE_LIFECYCLE: ['EVT_CACHE_STARTED', 'EVT_CACHE_STOPPED', 'EVT_CACHE_NODES_LEFT'],
-    EVTS_CACHE_QUERY: ['EVT_CACHE_QUERY_EXECUTED', 'EVT_CACHE_QUERY_OBJECT_READ'],
-    EVTS_SWAPSPACE: ['EVT_SWAP_SPACE_CLEARED', 'EVT_SWAP_SPACE_DATA_REMOVED', 'EVT_SWAP_SPACE_DATA_READ',
-        'EVT_SWAP_SPACE_DATA_STORED', 'EVT_SWAP_SPACE_DATA_EVICTED'],
-    EVTS_IGFS: ['EVT_IGFS_FILE_CREATED', 'EVT_IGFS_FILE_RENAMED', 'EVT_IGFS_FILE_DELETED', 'EVT_IGFS_FILE_OPENED_READ',
-        'EVT_IGFS_FILE_OPENED_WRITE', 'EVT_IGFS_FILE_CLOSED_WRITE', 'EVT_IGFS_FILE_CLOSED_READ', 'EVT_IGFS_FILE_PURGED',
-        'EVT_IGFS_META_UPDATED', 'EVT_IGFS_DIR_CREATED', 'EVT_IGFS_DIR_RENAMED', 'EVT_IGFS_DIR_DELETED']
-};
-
-jdbcTypes = {
-    BIT: {value: "BIT", code: -7, label: "BIT"},
-    TINYINT: {value: "TINYINT", code: -6, label: "TINYINT"},
-    SMALLINT: {value: "SMALLINT", code: 5, label: "SMALLINT"},
-    INTEGER: {value: "INTEGER", code: 4, label: "INTEGER"},
-    BIGINT: {value: "BIGINT", code: -5, label: "BIGINT"},
-    FLOAT: {value: "FLOAT", code: 6, label: "FLOAT"},
-    REAL: {value: "REAL", code: 7, label: "REAL"},
-    DOUBLE: {value: "DOUBLE", code: 8, label: "DOUBLE"},
-    NUMERIC: {value: "NUMERIC", code: 2, label: "NUMERIC"},
-    DECIMAL: {value: "DECIMAL", code: 3, label: "DECIMAL"},
-    CHAR: {value: "CHAR", code: 1, label: "CHAR"},
-    VARCHAR: {value: "VARCHAR", code: 12, label: "VARCHAR"},
-    DATE: {value: "DATE", code: 91, label: "DATE"},
-    TIME: {value: "TIME", code: 92, label: "TIME"},
-    TIMESTAMP: {value: "TIMESTAMP", code: 93, label: "TIMESTAMP"},
-    BINARY: {value: "BINARY", code: -2, label: "BINARY"}
-};
-
-javaTypes = {
-    INTEGER: {value: "java.lang.Integer", label: "Integer"},
-    LONG: {value: "java.lang.Long", label: "Long"},
-    BIGDECIMAL: {value: "java.math.BigDecimal", label: "BigDecimal"},
-    FLOAT: {value: "java.lang.Float", label: "Float"},
-    DOUBLE: {value: "java.lang.Double", label: "Double"},
-    STRING: {value: "java.lang.String", label: "String"},
-    BOOLEAN: {value: "java.lang.Boolean", label: "Boolean"},
-    BYTE_ARRAY: {value: "byte[]", label: "byte[]"},
-    DATE: {value: "java.sql.Date", label: "Date"},
-    TIME: {value: "java.sql.Time", label: "Time"},
-    TIMESTAMP: {value: "java.sql.Timestamp", label: "Timestamp"}
-};
-
-if (typeof window === 'undefined') {
-    exports.eventGroups = eventGroups;
-    exports.jdbcTypes = jdbcTypes;
-    exports.javaTypes = javaTypes;
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/public/stylesheets/style.css
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/stylesheets/style.css b/modules/webconfig/nodejs/public/stylesheets/style.css
deleted file mode 100644
index fb21a65..0000000
--- a/modules/webconfig/nodejs/public/stylesheets/style.css
+++ /dev/null
@@ -1 +0,0 @@
-.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:25px}.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 .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:13px;margin:3px 0 0}.theme-line .sidebar-nav ul li a{padding:3px 0;display:block;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-nav ul li a:before{top:0;content:" ";display:block;width:6px;height:100%;position:absolute;left:-30px}.theme-line .sidebar-nav ul li a:hover{text-decoration:none}.theme-line .select li a{color:#666}.theme-line .select li a:hover,.theme-line
  .select .active{color:#ec1c24;background-color:white}.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-na
 v .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 .n
 avbar-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.body-threes .section-rig
 ht .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}.ng-table-p
 ager{display:none}.container-footer{margin-top:20px}.vcenter{display:inline-block;vertical-align:middle;float:none}.vcenter2{position:relative;top:50%;transform:translateY(-50%)}.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:30px}h1.ignite-logo{background-image:url(
 "https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.st-sort-ascent:after{font-family:FontAwesome, serif;content:'\f077'}.st-sort-descent:after{font-family:FontAwesome, serif;content:'\f078'}.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:20px;padding-bottom:10px}}.details-row{padding-left:1.3em}.details-table-row{padding:0}.details-row,.settings-row{display:block;margin:0.65em 0;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:normal;line-heig
 ht:1}h3{color:black;font-size:1.2em;margin-top:0;margin-bottom:1.5em}table tr:hover{cursor:pointer}.input-group{display:inline-block}.input-group .form-control{width:auto;margin-left:0;margin-right:0}.form-control{display:inline-block;text-align:left;padding:3px 3px;height:28px}.form-control button{text-align:left}.table-form-control{width:auto}.form-horizontal .control-label{padding-top:4px}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;cursor:pointer}.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{color:#ec1c24;cursor:pointer}.theme-line .panel-collapse{margin:0}.theme-line .links table,.theme-line table.links-edit,.theme-line table.links-edit-small-padding{display:table;table-layout:fixed;margin-bottom:10px}.
 theme-line .links table td,.theme-line table.links-edit 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-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-small-padding a:hover{color:#950d12}.theme-line .links table a,.theme-line table.links-edit a,.theme-line table.links-edit-small-padding a{color:#666}.theme-line table.links-edit label{line-height:28px;color:#666}.btn{padding:3px 6px}.panel-title a{font-size:14px}.panel-details{margin-top:1.3em;margin-bottom:0.65em;padding:0.65em;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;line-height:14px;margin-bottom:0}.form-horizontal .checkbox{padding-top:0}.
 input-tip{display:block;overflow:hidden;padding-right:4px}.labelField{float:left;margin-right:4px}.tipField{float:right;line-height:28px;margin-right:5px}.tipLabel{font-size:14px;margin-left:4px}.fieldButton{float:right;margin-left:4px;margin-right:0}.table-nowrap{table-layout:fixed}.td-overflow{max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fa-edit{cursor:pointer}.fa-remove{color:#ec1c24;margin-left:5px;margin-right:5px;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-invalid{border-color:#ec1c24}input.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:4px}.theme-line table.links-edit-small-padding .checkbox label{li
 ne-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}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/public/stylesheets/style.less
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/stylesheets/style.less b/modules/webconfig/nodejs/public/stylesheets/style.less
deleted file mode 100644
index 3a41467..0000000
--- a/modules/webconfig/nodejs/public/stylesheets/style.less
+++ /dev/null
@@ -1,997 +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.
- */
-
-@logo-path: "https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli";
-@input-height: 28px;
-
-.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;
-  &.ng-enter {
-    opacity: 0;
-    &.ng-enter-active {
-      opacity: .5;
-    }
-  }
-  &.ng-leave {
-    opacity: .5;
-    &.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, 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: 25px;
-}
-
-.theme-line .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 .sidebar-nav {
-  color: #474a54;
-  padding-bottom: 30px;
-}
-
-.theme-line .sidebar-nav ul {
-  padding: 0;
-  list-style: none;
-  font-size: 13px;
-  margin: 3px 0 0;
-}
-
-.theme-line .sidebar-nav ul li a {
-  padding: 3px 0;
-  display: block;
-  color: #666;
-  position: relative;
-  white-space: nowrap;
-  overflow: hidden;
-  -o-text-overflow: ellipsis;
-  text-overflow: ellipsis;
-}
-
-.theme-line .sidebar-nav ul li a:before {
-  top: 0;
-  content: " ";
-  display: block;
-  width: 6px;
-  height: 100%;
-  position: absolute;
-  left: -30px;
-}
-
-.theme-line .sidebar-nav ul li a:hover {
-  text-decoration: none;
-}
-
-.theme-line .select li a {
-  color: #666;
-}
-
-.theme-line .select  {
-  li a:hover, .active {
-    color: #ec1c24;
-    background-color: white;
-  }
-}
-
-.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-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 {
-  //font-weight: bold;
-  color: #ec1c24;
-}
-
-.theme-line .navbar-nav .active a:hover {
-  color: #950d12;
-}
-
-.theme-line .main-links .links a:hover {
-  color: #ec1c24;
-}
-
-.theme-line .main-content a {
-  color: #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.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("@{logo-path}");
-}
-
-.header h1.navbar-brand {
-  width: 96px;
-}
-
-.block-edit-parameters {
-  text-align: right;
-  padding-bottom: 5px;
-}
-
-.ng-table-pager {
-  display: none;
-}
-
-.container-footer {
-  margin-top: 20px;
-}
-
-.vcenter {
-  display: inline-block;
-  vertical-align: middle;
-  float: none;
-}
-
-.vcenter2 {
-  position: relative;
-  top: 50%;
-  transform: translateY(-50%);
-}
-
-.border-right-remove {
-
-}
-
-/* Modal */
-.modal {
-  display: block;
-  overflow: hidden;
-}
-
-.modal .close {
-  position: absolute;
-  top: 0.65em;
-  right: 0.65em;
-  float: none;
-}
-
-// Close icon
-.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: 30px;
-}
-
-h1.ignite-logo {
-  background-image: url("@{logo-path}");
-}
-
-.st-sort-ascent:after {
-  font-family: FontAwesome, serif;
-  content: '\f077';
-}
-
-.st-sort-descent:after {
-  font-family: FontAwesome, serif;
-  content: '\f078';
-}
-
-.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: 20px;
-    padding-bottom: 10px;
-  }
-}
-
-.details-row {
-  padding-left: 1.3em;
-}
-
-.details-table-row  {
-  padding: 0;
-}
-
-.details-row, .settings-row {
-  display: block;
-  margin: 0.65em 0;
-  line-height: @input-height;
-
-  [class*="col-"] {
-    display: inline-block;
-    vertical-align: middle;
-    float: none;
-
-    padding-left: 0 !important;
-    padding-right: 0 !important;
-  }
-
-  input[type="checkbox"] {
-    line-height: 20px;
-    margin-right: 4px;
-  }
-
-  .checkbox label {
-    line-height: 20px;
-    vertical-align: middle;
-  }
-}
-
-button {
-  margin-right: 4px;
-}
-
-h1,
-h2,
-h3 {
-  user-select: none;
-  font-weight: normal;
-  /* Makes the vertical size of the text the same for all fonts. */
-  line-height: 1;
-}
-
-h3 {
-  color: black;
-  font-size: 1.2em;
-  margin-top: 0;
-  margin-bottom: 1.5em;
-}
-
-table tr:hover{ cursor:pointer; }
-
-.input-group {
-  display: inline-block;
-}
-
-.input-group .form-control {
-  width: auto;
-  margin-left: 0;
-  margin-right: 0;
-}
-
-.form-control {
-  display: inline-block;
-  text-align: left;
-  padding: 3px 3px;
-  height: @input-height;
-
-  button {
-    text-align: left;
-  }
-}
-
-.table-form-control {
-  width: auto;
-}
-
-.form-horizontal .control-label {
-  padding-top: 4px;
-}
-
-button .caret {
-  float: right;
-  margin-left: 0;
-  margin-top: 7px;
-}
-
-.theme-line .panel-heading {
-  padding: 10px 10px;
-  margin: 0;
-
-  h3 {
-    margin-bottom: 0;
-  }
-
-  h3 > a {
-    color: black;
-    cursor: pointer;
-  }
-}
-
-.theme-line .panel-title {
-  a {
-    color: #ec1c24;
-  }
-
-  h3 {
-    margin-bottom: 1.3em;
-  }
-}
-
-.theme-line .panel-body {
-  padding: 0.65em 1.3em;
-}
-
-.theme-line .main-content a.customize {
-  //margin-left: 10px;
-  color: #ec1c24;
-  cursor: pointer;
-}
-
-.theme-line .panel-collapse {
-  margin: 0;
-}
-
-.theme-line .links table {
-  display: table;
-  table-layout: fixed;
-  margin-bottom: 10px;
-
-  td {
-    padding-left: 18px;
-  }
-
-  .active a {
-    color: #ec1c24;
-    font-weight: bold;
-  }
-
-  a:hover {
-    color: #950d12;
-  }
-
-  a {
-    color: #666;
-  }
-}
-
-.theme-line table.links-edit:extend(.theme-line .links table all) {
-  label {
-    line-height: @input-height;
-    color: #666;
-  }
-}
-
-.btn {
-  padding: 3px 6px;
-}
-
-.panel-title a {
-  font-size: 14px;
-}
-
-.panel-details {
-  margin-top: 1.3em;
-  margin-bottom: 0.65em;
-  padding: 0.65em;
-
-  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;
-  line-height: 14px;
-  margin-bottom: 0;
-}
-
-.form-horizontal .checkbox {
-  padding-top: 0;
-}
-
-.input-tip {
-  display: block;
-  overflow: hidden;
-  padding-right:4px;
-}
-
-.labelField {
-  float: left;
-  margin-right: 4px;
-}
-
-.tipField {
-  float: right;
-  line-height: @input-height;
-  margin-right: 5px;
-}
-
-.tipLabel {
-  font-size: 14px;
-  margin-left: 4px;
-}
-
-.fieldButton {
-  float: right;
-  margin-left: 4px;
-  margin-right: 0;
-}
-
-.table-nowrap {
-  table-layout:fixed;
-}
-
-.td-overflow {
-  max-width: 100px;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.fa-edit {
-  cursor: pointer;
-}
-
-.fa-remove {
-  color: #ec1c24;
-  margin-left: 5px;
-  margin-right: 5px;
-  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
-}
-
-//  Summary page
-#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-invalid {
-  border-color: #ec1c24;
-
-  :focus {
-    border-color: #ec1c24;
-  }
-}
-
-.form-control-feedback {
-  display: inline-block;
-  color: #ec1c24;
-  right: 18px;
-  line-height: @input-height;
-  pointer-events: initial;
-}
-
-.syntaxhighlighter {
-  padding: 10px 5px;
-  border-radius: 6px;
-}
-
-.theme-line table.links-edit-small-padding:extend(.theme-line .links table all) {
-  label {
-    line-height: @input-height;
-    color: #666;
-  }
-
-  a {
-    line-height: @input-height;
-  }
-
-  input[type="checkbox"] {
-    line-height: 20px;
-    margin-right: 4px;
-  }
-
-  .checkbox label {
-    line-height: 20px;
-    vertical-align: middle;
-  }
-
-  th {
-    text-align: center;
-  }
-
-  td {
-    padding-left: 10px;
-  }
-
-  margin-top: 10px;
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/routes/auth.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/auth.js b/modules/webconfig/nodejs/routes/auth.js
deleted file mode 100644
index 5ed7278..0000000
--- a/modules/webconfig/nodejs/routes/auth.js
+++ /dev/null
@@ -1,74 +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 passport = require('passport');
-var router = require('express').Router();
-
-var db = require('../db');
-
-/**
- * Register new account.
- */
-router.post('/register', function(req, res, next) {
-    db.Account.register(new db.Account(req.body), req.body.password, function(err, account) {
-        if (err)
-            return res.status(401).send(err.message);
-
-        if (!account)
-            return res.status(500).send('Failed to create account.');
-
-        new db.Space({name: 'Personal space', owner: account._id}).save();
-
-        req.logIn(account, {}, function(err) {
-            if (err)
-                return res.status(401).send(err.message);
-
-            return res.redirect('/clusters');
-        });
-    });
-});
-
-/**
- * Login in exist account.
- */
-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) {
-            if (err)
-                return res.status(401).send(err.message);
-
-            res.redirect('/clusters');
-        });
-    })(req, res, next);
-});
-
-/**
- * Logout.
- */
-router.get('/logout', function(req, res) {
-    req.logout();
-
-    res.redirect('/');
-});
-
-module.exports = router;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/routes/caches.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/caches.js b/modules/webconfig/nodejs/routes/caches.js
deleted file mode 100644
index 7de5d57..0000000
--- a/modules/webconfig/nodejs/routes/caches.js
+++ /dev/null
@@ -1,91 +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 router = require('express').Router();
-var db = require('../db');
-
-/**
- * Send spaces and caches accessed for user account.
- *
- * @param req Request.
- * @param res Response.
- */
-function selectAll(req, res) {
-    var user_id = req.user._id;
-
-    // Get owned space and all accessed space.
-    db.Space.find({$or: [{owner: user_id}, {usedBy: {$elemMatch: {account: user_id}}}]}, function (err, spaces) {
-        if (err)
-            return res.status(500).send(err.message);
-
-        var space_ids = spaces.map(function(value) {
-            return value._id;
-        });
-
-        // Get all caches for spaces.
-        db.Cache.find({space: {$in: space_ids}}, function (err, caches) {
-            if (err)
-                return res.status(500).send(err.message);
-
-            res.json({spaces: spaces, caches: caches});
-        });
-    });
-}
-
-/**
- * Get spaces and caches accessed for user account.
- */
-router.get('/', function(req, res) {
-    selectAll(req, res);
-});
-
-/**
- * Save cache.
- */
-router.post('/save', function(req, res) {
-    if (req.body._id)
-        db.Cache.update({_id: req.body._id}, req.body, {upsert: true}, function(err) {
-            if (err)
-                return res.status(500).send(err.message);
-
-            res.send(req.body._id);
-        });
-    else {
-        var cache = new db.Cache(req.body);
-
-        cache.save(function(err, cache) {
-            if (err)
-                return res.status(500).send(err.message);
-
-            res.send(cache._id);
-        });
-    }
-});
-
-/**
- * Remove cache by ._id.
- */
-router.post('/remove', function(req, res) {
-    db.Cache.remove(req.body, function (err) {
-        if (err)
-            return res.status(500).send(err.message);
-
-        res.sendStatus(200);
-    })
-});
-
-module.exports = router;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/routes/clusters.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/clusters.js b/modules/webconfig/nodejs/routes/clusters.js
deleted file mode 100644
index 91ac50a..0000000
--- a/modules/webconfig/nodejs/routes/clusters.js
+++ /dev/null
@@ -1,100 +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 router = require('express').Router();
-var db = require('../db');
-
-/**
- * Send spaces and clusters accessed for user account.
- *
- * @param req Request.
- * @param res Response.
- */
-function selectAll(req, res) {
-    var user_id = req.user._id;
-
-    // Get owned space and all accessed space.
-    db.Space.find({$or: [{owner: user_id}, {usedBy: {$elemMatch: {account: user_id}}}]}, function (err, spaces) {
-        if (err)
-            return res.status(500).send(err.message);
-
-        var space_ids = spaces.map(function(value) {
-            return value._id;
-        });
-
-        db.Cache.find({space: {$in: space_ids}}, '_id name swapEnabled', function (err, caches) {
-            if (err)
-                return res.status(500).send(err);
-
-            // Get all clusters for spaces.
-            db.Cluster.find({space: {$in: space_ids}}, function (err, clusters) {
-                if (err)
-                    return res.status(500).send(err.message);
-
-                var cachesJson = caches.map(function(cache) {
-                    return {value: cache._id, label: cache.name, swapEnabled: cache.swapEnabled};
-                });
-
-                res.json({spaces: spaces, caches: cachesJson, clusters: clusters});
-            });
-        });
-    });
-}
-
-/**
- * Get spaces and clusters accessed for user account.
- */
-router.get('/', function(req, res) {
-    selectAll(req, res);
-});
-
-/**
- * Save cluster.
- */
-router.post('/save', function(req, res) {
-    if (req.body._id)
-        db.Cluster.update({_id: req.body._id}, req.body, {upsert: true}, function(err) {
-            if (err)
-                return res.status(500).send(err.message);
-
-            res.send(req.body._id);
-        });
-    else {
-        var cluster = new db.Cluster(req.body);
-
-        cluster.save(function(err, cluster) {
-            if (err)
-                return res.status(500).send(err.message);
-
-            res.send(cluster._id);
-        });
-    }
-});
-
-/**
- * Remove cluster by ._id.
- */
-router.post('/remove', function(req, res) {
-    db.Cluster.remove(req.body, function (err) {
-        if (err)
-            return res.status(500).send(err.message);
-
-        res.sendStatus(200);
-    })
-});
-
-module.exports = router;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/routes/configGenerator.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/configGenerator.js b/modules/webconfig/nodejs/routes/configGenerator.js
deleted file mode 100644
index 407514a..0000000
--- a/modules/webconfig/nodejs/routes/configGenerator.js
+++ /dev/null
@@ -1,69 +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 db = require('../db');
-
-var router = require('express').Router();
-
-var generatorXml = require('./../utils/generatorXml');
-var generatorJava = require('./../utils/generatorJava');
-
-router.get('/', function(req, res) {
-    var lang = req.query.lang;
-    var name = req.query.name;
-
-    var user_id = req.user._id;
-    
-    db.Space.find({$or: [{owner: user_id}, {usedBy: {$elemMatch: {account: user_id}}}]}, function (err, spaces) {
-        if (err)
-            return res.status(500).send(err.message);
-
-        var space_ids = spaces.map(function(value) {
-            return value._id;
-        });
-
-        // Get all clusters for spaces.
-        db.Cluster.find({name: name, space: {$in: space_ids}}).populate('caches').exec(function (err, clusters) {
-            if (err)
-                return res.status(500).send(err.message);
-
-            if (clusters.length == 0) {
-                res.sendStatus(404);
-
-                return
-            }
-
-            var cluster = clusters[0];
-
-            switch (lang) {
-                case 'xml':
-                    res.send(generatorXml.generateClusterConfiguration(cluster));
-                    break;
-
-                case 'java':
-                    res.send(generatorJava.generateClusterConfiguration(cluster, req.query.generateJavaClass == 'true'));
-                    break;
-
-                default:
-                    res.status(404).send("Unknown language: " + lang);
-                    break;
-            }
-        });
-    });
-});
-
-module.exports = router;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8e792605/modules/webconfig/nodejs/routes/pages.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/pages.js b/modules/webconfig/nodejs/routes/pages.js
deleted file mode 100644
index 7b6c24e..0000000
--- a/modules/webconfig/nodejs/routes/pages.js
+++ /dev/null
@@ -1,68 +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 router = require('express').Router();
-
-// GET dropdown-menu template.
-router.get('/select', function(req, res) {
-    res.render('templates/select', { });
-});
-
-/* GET login page. */
-router.get('/login', function(req, res) {
-    res.render('login');
-});
-
-/* GET home page. */
-router.get('/', function(req, res) {
-    if (req.isAuthenticated())
-        res.redirect('/clusters');
-    else
-        res.render('index', { user: req.user });
-});
-
-/* GET clusters page. */
-router.get('/clusters', function(req, res) {
-    res.render('clusters', { user: req.user });
-});
-
-/* GET caches page. */
-router.get('/caches', function(req, res) {
-    res.render('caches', { user: req.user });
-});
-
-/* GET persistence page. */
-router.get('/persistence', function(req, res) {
-    res.render('persistence', { user: req.user });
-});
-
-/* GET sql page. */
-router.get('/sql', function(req, res) {
-    res.render('sql', { user: req.user });
-});
-
-/* GET clients page. */
-router.get('/clients', function(req, res) {
-    res.render('clients', { user: req.user });
-});
-
-/* GET summary page. */
-router.get('/summary', function(req, res) {
-    res.render('summary', { user: req.user });
-});
-
-module.exports = router;