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/05/29 12:50:50 UTC

[1/2] incubator-ignite git commit: # IGNITE-843 Added apache headers.

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-843 619c1c8d1 -> db79305fb


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/includes/header.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/includes/header.jade b/modules/webconfig/nodejs/views/includes/header.jade
index f999e4d..6d5df06 100644
--- a/modules/webconfig/nodejs/views/includes/header.jade
+++ b/modules/webconfig/nodejs/views/includes/header.jade
@@ -1,3 +1,19 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 header.header(id='header')
     div.container
         h1.navbar-brand

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/index.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/index.jade b/modules/webconfig/nodejs/views/index.jade
index e300cc5..4e485e8 100644
--- a/modules/webconfig/nodejs/views/index.jade
+++ b/modules/webconfig/nodejs/views/index.jade
@@ -1,3 +1,19 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 extends layout
 block container
     div.row

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/layout.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/layout.jade b/modules/webconfig/nodejs/views/layout.jade
index 098c831..d25ec95 100644
--- a/modules/webconfig/nodejs/views/layout.jade
+++ b/modules/webconfig/nodejs/views/layout.jade
@@ -38,7 +38,6 @@ html(ng-app='ignite-web-configurator')
             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='/javascripts/ng-table.js')
             script(src='https://cdnjs.cloudflare.com/ajax/libs/angular-smart-table/2.0.3/smart-table.js')
 
             script(src='/javascripts/controllers/common.js')

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/persistence.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/persistence.jade b/modules/webconfig/nodejs/views/persistence.jade
index c45264d..87caebf 100644
--- a/modules/webconfig/nodejs/views/persistence.jade
+++ b/modules/webconfig/nodejs/views/persistence.jade
@@ -1,3 +1,19 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 extends layout-sidebar
 block head
 block content

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/register.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/register.jade b/modules/webconfig/nodejs/views/register.jade
index 972c8f6..17d97ea 100644
--- a/modules/webconfig/nodejs/views/register.jade
+++ b/modules/webconfig/nodejs/views/register.jade
@@ -1,3 +1,19 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 h4 Register your account
 form(action='/register' method='post')
    fieldset

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/sql.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/sql.jade b/modules/webconfig/nodejs/views/sql.jade
index f1295d8..0fb6eed 100644
--- a/modules/webconfig/nodejs/views/sql.jade
+++ b/modules/webconfig/nodejs/views/sql.jade
@@ -1,3 +1,19 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 extends layout-sidebar
 block head
 block content

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/templates/select.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/templates/select.jade b/modules/webconfig/nodejs/views/templates/select.jade
index eb12d6d..fea1d5c 100644
--- a/modules/webconfig/nodejs/views/templates/select.jade
+++ b/modules/webconfig/nodejs/views/templates/select.jade
@@ -1,3 +1,19 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 ul.select.dropdown-menu(tabindex='-1', ng-show='$isVisible()', role='select')
     li(ng-if='$showAllNoneButtons')
         .btn-group(style='margin-bottom: 5px; margin-left: 5px')


[2/2] incubator-ignite git commit: # IGNITE-843 Added apache headers.

Posted by ak...@apache.org.
# IGNITE-843 Added apache headers.


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

Branch: refs/heads/ignite-843
Commit: db79305fb568e597fc23bd7e68c7464fa13361aa
Parents: 619c1c8
Author: AKuznetsov <ak...@gridgain.com>
Authored: Fri May 29 17:50:46 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Fri May 29 17:50:46 2015 +0700

----------------------------------------------------------------------
 modules/webconfig/nodejs/app.js                 |  17 +
 modules/webconfig/nodejs/configuration.js       |  17 +
 modules/webconfig/nodejs/db.js                  |  17 +
 .../nodejs/public/javascripts/bundle.js         |  18 +
 .../public/javascripts/controllers/caches.js    |  18 +-
 .../public/javascripts/controllers/clusters.js  |  18 +-
 .../public/javascripts/controllers/common.js    |  17 +
 .../nodejs/public/javascripts/ng-table.js       | 972 -------------------
 .../nodejs/public/javascripts/ng-table.min.js   |   4 -
 .../nodejs/public/stylesheets/ng-table.css      | 136 ---
 .../nodejs/public/stylesheets/ng-table.min.css  |   3 -
 .../nodejs/public/stylesheets/style.less        |  17 +
 modules/webconfig/nodejs/routes/auth.js         |  17 +
 modules/webconfig/nodejs/routes/caches.js       |  17 +
 modules/webconfig/nodejs/routes/clusters.js     |  17 +
 modules/webconfig/nodejs/routes/pages.js        |  17 +
 modules/webconfig/nodejs/views/caches.jade      |  19 +-
 modules/webconfig/nodejs/views/clients.jade     |  16 +
 modules/webconfig/nodejs/views/clusterEdit.jade |  20 -
 modules/webconfig/nodejs/views/discovery.jade   |  16 +
 modules/webconfig/nodejs/views/error.jade       |  16 +
 .../webconfig/nodejs/views/includes/footer.jade |  16 +
 .../webconfig/nodejs/views/includes/header.jade |  16 +
 modules/webconfig/nodejs/views/index.jade       |  16 +
 modules/webconfig/nodejs/views/layout.jade      |   1 -
 modules/webconfig/nodejs/views/persistence.jade |  16 +
 modules/webconfig/nodejs/views/register.jade    |  16 +
 modules/webconfig/nodejs/views/sql.jade         |  16 +
 .../nodejs/views/templates/select.jade          |  16 +
 29 files changed, 381 insertions(+), 1141 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/app.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/app.js b/modules/webconfig/nodejs/app.js
index 5fb4b4f..33b2292 100644
--- a/modules/webconfig/nodejs/app.js
+++ b/modules/webconfig/nodejs/app.js
@@ -1,3 +1,20 @@
+/*
+ * 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 flash = require('connect-flash');
 var express = require('express');
 var path = require('path');

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/configuration.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/configuration.js b/modules/webconfig/nodejs/configuration.js
index b0b8388..6dbb577 100644
--- a/modules/webconfig/nodejs/configuration.js
+++ b/modules/webconfig/nodejs/configuration.js
@@ -1,3 +1,20 @@
+/*
+ * 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 config = require('nconf');
 
 config.file({'file': 'config/default.json'});

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/db.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/db.js b/modules/webconfig/nodejs/db.js
index f6aa4c0..70b9bac 100644
--- a/modules/webconfig/nodejs/db.js
+++ b/modules/webconfig/nodejs/db.js
@@ -1,3 +1,20 @@
+/*
+ * 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 config = require('./configuration.js');
 
 // Mongoose for mongodb.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/public/javascripts/bundle.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/bundle.js b/modules/webconfig/nodejs/public/javascripts/bundle.js
index e69de29..840da56 100644
--- a/modules/webconfig/nodejs/public/javascripts/bundle.js
+++ b/modules/webconfig/nodejs/public/javascripts/bundle.js
@@ -0,0 +1,18 @@
+/*
+ * 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.
+ */
+
+// Place here all common utility functions that will be available on each page.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/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
index 482eae7..1bb33fd 100644
--- a/modules/webconfig/nodejs/public/javascripts/controllers/caches.js
+++ b/modules/webconfig/nodejs/public/javascripts/controllers/caches.js
@@ -1,4 +1,20 @@
-// Controller for caches page.
+/*
+ * 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', '$modal', '$http', '$filter', 'ngTableParams',
     function($scope, $modal, $http, $filter, ngTableParams) {
         $scope.editColumn = {};

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js b/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
index 5992971..b65c689 100644
--- a/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
+++ b/modules/webconfig/nodejs/public/javascripts/controllers/clusters.js
@@ -1,4 +1,20 @@
-// Controller for clusters page.
+/*
+ * 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', '$modal', '$http',
     function($scope, $modal, $http) {
         $scope.templates = [

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/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
index 09226ba..e75be82 100644
--- a/modules/webconfig/nodejs/public/javascripts/controllers/common.js
+++ b/modules/webconfig/nodejs/public/javascripts/controllers/common.js
@@ -1,3 +1,20 @@
+/*
+ * 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']);
 
 configuratorModule.controller('activeLink', ['$scope', function($scope) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/public/javascripts/ng-table.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/ng-table.js b/modules/webconfig/nodejs/public/javascripts/ng-table.js
deleted file mode 100755
index 64df1a6..0000000
--- a/modules/webconfig/nodejs/public/javascripts/ng-table.js
+++ /dev/null
@@ -1,972 +0,0 @@
-(function(angular, factory) {
-    'use strict';
-
-    if (typeof define === 'function' && define.amd) {
-        define(['angular'], function(angular) {
-            return factory(angular);
-        });
-    } else {
-        return factory(angular);
-    }
-}(angular || null, function(angular) {
-    'use strict';
-/**
- * ngTable: Table + Angular JS
- *
- * @author Vitalii Savchuk <es...@gmail.com>
- * @url https://github.com/esvit/ng-table/
- * @license New BSD License <http://creativecommons.org/licenses/BSD/>
- */
-
-/**
- * @ngdoc module
- * @name ngTable
- * @description ngTable: Table + Angular JS
- * @example
- <doc:example>
- <doc:source>
- <script>
- var app = angular.module('myApp', ['ngTable']);
- app.controller('MyCtrl', function($scope) {
-                    $scope.users = [
-                        {name: "Moroni", age: 50},
-                        {name: "Tiancum", age: 43},
-                        {name: "Jacob", age: 27},
-                        {name: "Nephi", age: 29},
-                        {name: "Enos", age: 34}
-                    ];
-                });
- </script>
- <table ng-table class="table">
- <tr ng-repeat="user in users">
- <td data-title="'Name'">{{user.name}}</td>
- <td data-title="'Age'">{{user.age}}</td>
- </tr>
- </table>
- </doc:source>
- </doc:example>
- */
-var app = angular.module('ngTable', []);
-/**
- * ngTable: Table + Angular JS
- *
- * @author Vitalii Savchuk <es...@gmail.com>
- * @url https://github.com/esvit/ng-table/
- * @license New BSD License <http://creativecommons.org/licenses/BSD/>
- */
-
-/**
- * @ngdoc value
- * @name ngTable.value:ngTableDefaultParams
- * @description Default Parameters for ngTable
- */
-app.value('ngTableDefaults', {
-    params: {},
-    settings: {}
-});
-
-/**
- * @ngdoc service
- * @name ngTable.factory:NgTableParams
- * @description Parameters manager for ngTable
- */
-
-app.factory('NgTableParams', ['$q', '$log', 'ngTableDefaults', function($q, $log, ngTableDefaults) {
-    var isNumber = function(n) {
-        return !isNaN(parseFloat(n)) && isFinite(n);
-    };
-    var NgTableParams = function(baseParameters, baseSettings) {
-        var self = this,
-            log = function() {
-                if (settings.debugMode && $log.debug) {
-                    $log.debug.apply(this, arguments);
-                }
-            };
-
-        this.data = [];
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#parameters
-         * @methodOf ngTable.factory:NgTableParams
-         * @description Set new parameters or get current parameters
-         *
-         * @param {string} newParameters      New parameters
-         * @param {string} parseParamsFromUrl Flag if parse parameters like in url
-         * @returns {Object} Current parameters or `this`
-         */
-        this.parameters = function(newParameters, parseParamsFromUrl) {
-            parseParamsFromUrl = parseParamsFromUrl || false;
-            if (angular.isDefined(newParameters)) {
-                for (var key in newParameters) {
-                    var value = newParameters[key];
-                    if (parseParamsFromUrl && key.indexOf('[') >= 0) {
-                        var keys = key.split(/\[(.*)\]/).reverse()
-                        var lastKey = '';
-                        for (var i = 0, len = keys.length; i < len; i++) {
-                            var name = keys[i];
-                            if (name !== '') {
-                                var v = value;
-                                value = {};
-                                value[lastKey = name] = (isNumber(v) ? parseFloat(v) : v);
-                            }
-                        }
-                        if (lastKey === 'sorting') {
-                            params[lastKey] = {};
-                        }
-                        params[lastKey] = angular.extend(params[lastKey] || {}, value[lastKey]);
-                    } else {
-                        params[key] = (isNumber(newParameters[key]) ? parseFloat(newParameters[key]) : newParameters[key]);
-                    }
-                }
-                log('ngTable: set parameters', params);
-                return this;
-            }
-            return params;
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#settings
-         * @methodOf ngTable.factory:NgTableParams
-         * @description Set new settings for table
-         *
-         * @param {string} newSettings New settings or undefined
-         * @returns {Object} Current settings or `this`
-         */
-        this.settings = function(newSettings) {
-            if (angular.isDefined(newSettings)) {
-                if (angular.isArray(newSettings.data)) {
-                    //auto-set the total from passed in data
-                    newSettings.total = newSettings.data.length;
-                }
-                settings = angular.extend(settings, newSettings);
-                log('ngTable: set settings', settings);
-                return this;
-            }
-            return settings;
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#page
-         * @methodOf ngTable.factory:NgTableParams
-         * @description If parameter page not set return current page else set current page
-         *
-         * @param {string} page Page number
-         * @returns {Object|Number} Current page or `this`
-         */
-        this.page = function(page) {
-            return angular.isDefined(page) ? this.parameters({
-                'page': page
-            }) : params.page;
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#total
-         * @methodOf ngTable.factory:NgTableParams
-         * @description If parameter total not set return current quantity else set quantity
-         *
-         * @param {string} total Total quantity of items
-         * @returns {Object|Number} Current page or `this`
-         */
-        this.total = function(total) {
-            return angular.isDefined(total) ? this.settings({
-                'total': total
-            }) : settings.total;
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#count
-         * @methodOf ngTable.factory:NgTableParams
-         * @description If parameter count not set return current count per page else set count per page
-         *
-         * @param {string} count Count per number
-         * @returns {Object|Number} Count per page or `this`
-         */
-        this.count = function(count) {
-            // reset to first page because can be blank page
-            return angular.isDefined(count) ? this.parameters({
-                'count': count,
-                'page': 1
-            }) : params.count;
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#filter
-         * @methodOf ngTable.factory:NgTableParams
-         * @description If parameter page not set return current filter else set current filter
-         *
-         * @param {string} filter New filter
-         * @returns {Object} Current filter or `this`
-         */
-        this.filter = function(filter) {
-            return angular.isDefined(filter) ? this.parameters({
-                'filter': filter,
-                'page': 1
-            }) : params.filter;
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#sorting
-         * @methodOf ngTable.factory:NgTableParams
-         * @description If 'sorting' parameter is not set, return current sorting. Otherwise set current sorting.
-         *
-         * @param {string} sorting New sorting
-         * @returns {Object} Current sorting or `this`
-         */
-        this.sorting = function(sorting) {
-            if (arguments.length == 2) {
-                var sortArray = {};
-                sortArray[sorting] = arguments[1];
-                this.parameters({
-                    'sorting': sortArray
-                });
-                return this;
-            }
-            return angular.isDefined(sorting) ? this.parameters({
-                'sorting': sorting
-            }) : params.sorting;
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#isSortBy
-         * @methodOf ngTable.factory:NgTableParams
-         * @description Checks sort field
-         *
-         * @param {string} field     Field name
-         * @param {string} direction Direction of sorting 'asc' or 'desc'
-         * @returns {Array} Return true if field sorted by direction
-         */
-        this.isSortBy = function(field, direction) {
-            return angular.isDefined(params.sorting[field]) && angular.equals(params.sorting[field], direction);
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#orderBy
-         * @methodOf ngTable.factory:NgTableParams
-         * @description Return object of sorting parameters for angular filter
-         *
-         * @returns {Array} Array like: [ '-name', '+age' ]
-         */
-        this.orderBy = function() {
-            var sorting = [];
-            for (var column in params.sorting) {
-                sorting.push((params.sorting[column] === "asc" ? "+" : "-") + column);
-            }
-            return sorting;
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#getData
-         * @methodOf ngTable.factory:NgTableParams
-         * @description Called when updated some of parameters for get new data
-         *
-         * @param {Object} $defer promise object
-         * @param {Object} params New parameters
-         */
-        this.getData = function($defer, params) {
-            if (angular.isArray(this.data) && angular.isObject(params)) {
-                $defer.resolve(this.data.slice((params.page() - 1) * params.count(), params.page() * params.count()));
-            } else {
-                $defer.resolve([]);
-            }
-            return $defer.promise;
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#getGroups
-         * @methodOf ngTable.factory:NgTableParams
-         * @description Return groups for table grouping
-         */
-        this.getGroups = function($defer, column) {
-            var defer = $q.defer();
-
-            defer.promise.then(function(data) {
-                var groups = {};
-                angular.forEach(data, function(item) {
-                    var groupName = angular.isFunction(column) ? column(item) : item[column];
-
-                    groups[groupName] = groups[groupName] || {
-                        data: []
-                    };
-                    groups[groupName]['value'] = groupName;
-                    groups[groupName].data.push(item);
-                });
-                var result = [];
-                for (var i in groups) {
-                    result.push(groups[i]);
-                }
-                log('ngTable: refresh groups', result);
-                $defer.resolve(result);
-            });
-            return this.getData(defer, self);
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#generatePagesArray
-         * @methodOf ngTable.factory:NgTableParams
-         * @description Generate array of pages
-         *
-         * @param {boolean} currentPage which page must be active
-         * @param {boolean} totalItems  Total quantity of items
-         * @param {boolean} pageSize    Quantity of items on page
-         * @returns {Array} Array of pages
-         */
-        this.generatePagesArray = function(currentPage, totalItems, pageSize) {
-            var maxBlocks, maxPage, maxPivotPages, minPage, numPages, pages;
-            maxBlocks = 11;
-            pages = [];
-            numPages = Math.ceil(totalItems / pageSize);
-            if (numPages > 1) {
-                pages.push({
-                    type: 'prev',
-                    number: Math.max(1, currentPage - 1),
-                    active: currentPage > 1
-                });
-                pages.push({
-                    type: 'first',
-                    number: 1,
-                    active: currentPage > 1,
-                    current: currentPage === 1
-                });
-                maxPivotPages = Math.round((maxBlocks - 5) / 2);
-                minPage = Math.max(2, currentPage - maxPivotPages);
-                maxPage = Math.min(numPages - 1, currentPage + maxPivotPages * 2 - (currentPage - minPage));
-                minPage = Math.max(2, minPage - (maxPivotPages * 2 - (maxPage - minPage)));
-                var i = minPage;
-                while (i <= maxPage) {
-                    if ((i === minPage && i !== 2) || (i === maxPage && i !== numPages - 1)) {
-                        pages.push({
-                            type: 'more',
-                            active: false
-                        });
-                    } else {
-                        pages.push({
-                            type: 'page',
-                            number: i,
-                            active: currentPage !== i,
-                            current: currentPage === i
-                        });
-                    }
-                    i++;
-                }
-                pages.push({
-                    type: 'last',
-                    number: numPages,
-                    active: currentPage !== numPages,
-                    current: currentPage === numPages
-                });
-                pages.push({
-                    type: 'next',
-                    number: Math.min(numPages, currentPage + 1),
-                    active: currentPage < numPages
-                });
-            }
-            return pages;
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#url
-         * @methodOf ngTable.factory:NgTableParams
-         * @description Return groups for table grouping
-         *
-         * @param {boolean} asString flag indicates return array of string or object
-         * @returns {Array} If asString = true will be return array of url string parameters else key-value object
-         */
-        this.url = function(asString) {
-            asString = asString || false;
-            var pairs = (asString ? [] : {});
-            for (var key in params) {
-                if (params.hasOwnProperty(key)) {
-                    var item = params[key],
-                        name = encodeURIComponent(key);
-                    if (typeof item === "object") {
-                        for (var subkey in item) {
-                            if (!angular.isUndefined(item[subkey]) && item[subkey] !== "") {
-                                var pname = name + "[" + encodeURIComponent(subkey) + "]";
-                                if (asString) {
-                                    pairs.push(pname + "=" + item[subkey]);
-                                } else {
-                                    pairs[pname] = item[subkey];
-                                }
-                            }
-                        }
-                    } else if (!angular.isFunction(item) && !angular.isUndefined(item) && item !== "") {
-                        if (asString) {
-                            pairs.push(name + "=" + encodeURIComponent(item));
-                        } else {
-                            pairs[name] = encodeURIComponent(item);
-                        }
-                    }
-                }
-            }
-            return pairs;
-        };
-
-        /**
-         * @ngdoc method
-         * @name ngTable.factory:NgTableParams#reload
-         * @methodOf ngTable.factory:NgTableParams
-         * @description Reload table data
-         */
-        this.reload = function() {
-            var $defer = $q.defer(),
-                self = this,
-                pData = null;
-
-            if (!settings.$scope) {
-                return;
-            }
-
-            settings.$loading = true;
-            if (settings.groupBy) {
-                pData = settings.getGroups($defer, settings.groupBy, this);
-            } else {
-                pData = settings.getData($defer, this);
-            }
-            log('ngTable: reload data');
-
-            if (!pData) {
-                // If getData resolved the $defer, and didn't promise us data,
-                //   create a promise from the $defer. We need to return a promise.
-                pData = $defer.promise;
-            }
-            return pData.then(function(data) {
-                settings.$loading = false;
-                log('ngTable: current scope', settings.$scope);
-                if (settings.groupBy) {
-                    self.data = data;
-                    if (settings.$scope) settings.$scope.$groups = data;
-                } else {
-                    self.data = data;
-                    if (settings.$scope) settings.$scope.$data = data;
-                }
-                if (settings.$scope) settings.$scope.pages = self.generatePagesArray(self.page(), self.total(), self.count());
-                settings.$scope.$emit('ngTableAfterReloadData');
-                return data;
-            });
-        };
-
-        this.reloadPages = function() {
-            var self = this;
-            settings.$scope.pages = self.generatePagesArray(self.page(), self.total(), self.count());
-        };
-
-        var params = this.$params = {
-            page: 1,
-            count: 1,
-            filter: {},
-            sorting: {},
-            group: {},
-            groupBy: null
-        };
-        angular.extend(params, ngTableDefaults.params);
-
-        var settings = {
-            $scope: null, // set by ngTable controller
-            $loading: false,
-            data: null, //allows data to be set when table is initialized
-            total: 0,
-            defaultSort: 'desc',
-            filterDelay: 750,
-            counts: [10, 25, 50, 100],
-            sortingIndicator: 'span',
-            getGroups: this.getGroups,
-            getData: this.getData
-        };
-        angular.extend(settings, ngTableDefaults.settings);
-
-        this.settings(baseSettings);
-        this.parameters(baseParameters, true);
-        return this;
-    };
-    return NgTableParams;
-}]);
-
-/**
- * @ngdoc service
- * @name ngTable.factory:ngTableParams
- * @description Backwards compatible shim for lowercase 'n' in NgTableParams
- */
-app.factory('ngTableParams', ['NgTableParams', function(NgTableParams) {
-    return NgTableParams;
-}]);
-
-/**
- * ngTable: Table + Angular JS
- *
- * @author Vitalii Savchuk <es...@gmail.com>
- * @url https://github.com/esvit/ng-table/
- * @license New BSD License <http://creativecommons.org/licenses/BSD/>
- */
-
-/**
- * @ngdoc object
- * @name ngTable.directive:ngTable.ngTableController
- *
- * @description
- * Each {@link ngTable.directive:ngTable ngTable} directive creates an instance of `ngTableController`
- */
-app.controller('ngTableController', ['$scope', 'NgTableParams', '$timeout', '$parse', '$compile', '$attrs', '$element',
-    'ngTableColumn',
-function($scope, NgTableParams, $timeout, $parse, $compile, $attrs, $element, ngTableColumn) {
-    var isFirstTimeLoad = true;
-    $scope.$filterRow = {};
-    $scope.$loading = false;
-
-    // until such times as the directive uses an isolated scope, we need to ensure that the check for
-    // the params field only consults the "own properties" of the $scope. This is to avoid seeing the params
-    // field on a $scope higher up in the prototype chain
-    if (!$scope.hasOwnProperty("params")) {
-        $scope.params = new NgTableParams();
-        $scope.params.isNullInstance = true;
-    }
-    $scope.params.settings().$scope = $scope;
-
-    var delayFilter = (function() {
-        var timer = 0;
-        return function(callback, ms) {
-            $timeout.cancel(timer);
-            timer = $timeout(callback, ms);
-        };
-    })();
-
-    function resetPage() {
-        $scope.params.$params.page = 1;
-    }
-
-    $scope.$watch('params.$params', function(newParams, oldParams) {
-
-        if (newParams === oldParams) {
-            return;
-        }
-
-        $scope.params.settings().$scope = $scope;
-
-        if (!angular.equals(newParams.filter, oldParams.filter)) {
-            var maybeResetPage = isFirstTimeLoad ? angular.noop : resetPage;
-            delayFilter(function() {
-                maybeResetPage();
-                $scope.params.reload();
-            }, $scope.params.settings().filterDelay);
-        } else {
-            $scope.params.reload();
-        }
-
-        if (!$scope.params.isNullInstance) {
-            isFirstTimeLoad = false;
-        }
-
-    }, true);
-
-    this.compileDirectiveTemplates = function () {
-        if (!$element.hasClass('ng-table')) {
-            $scope.templates = {
-                header: ($attrs.templateHeader ? $attrs.templateHeader : 'ng-table/header.html'),
-                pagination: ($attrs.templatePagination ? $attrs.templatePagination : 'ng-table/pager.html')
-            };
-            $element.addClass('ng-table');
-            var headerTemplate = null;
-            if ($element.find('> thead').length === 0) {
-                headerTemplate = angular.element(document.createElement('thead')).attr('ng-include', 'templates.header');
-                $element.prepend(headerTemplate);
-            }
-            var paginationTemplate = angular.element(document.createElement('div')).attr({
-                'ng-table-pagination': 'params',
-                'template-url': 'templates.pagination'
-            });
-            $element.after(paginationTemplate);
-            if (headerTemplate) {
-                $compile(headerTemplate)($scope);
-            }
-            $compile(paginationTemplate)($scope);
-        }
-    };
-
-    this.loadFilterData = function ($columns) {
-        angular.forEach($columns, function ($column) {
-            var def;
-            def = $column.filterData($scope, {
-                $column: $column
-            });
-            if (!def) {
-                delete $column.filterData;
-                return;
-            }
-
-            // if we're working with a deferred object, let's wait for the promise
-            if ((angular.isObject(def) && angular.isObject(def.promise))) {
-                delete $column.filterData;
-                return def.promise.then(function(data) {
-                    // our deferred can eventually return arrays, functions and objects
-                    if (!angular.isArray(data) && !angular.isFunction(data) && !angular.isObject(data)) {
-                        // if none of the above was found - we just want an empty array
-                        data = [];
-                    } else if (angular.isArray(data)) {
-                        data.unshift({
-                            title: '-',
-                            id: ''
-                        });
-                    }
-                    $column.data = data;
-                });
-            }
-            // otherwise, we just return what the user gave us. It could be a function, array, object, whatever
-            else {
-                return $column.data = def;
-            }
-        });
-    };
-
-    this.buildColumns = function (columns) {
-        return columns.map(function(col){
-            return ngTableColumn.buildColumn(col, $scope)
-        })
-    };
-
-    this.setupBindingsToInternalScope = function(tableParamsExpr){
-
-        // note: this we're setting up watches to simulate angular's isolated scope bindings
-
-        // note: is REALLY important to watch for a change to the ngTableParams *reference* rather than
-        // $watch for value equivalence. This is because ngTableParams references the current page of data as
-        // a field and it's important not to watch this
-        var tableParamsGetter = $parse(tableParamsExpr);
-        $scope.$watch(tableParamsGetter, (function (params) {
-            if (angular.isUndefined(params)) {
-                return;
-            }
-            $scope.paramsModel = tableParamsGetter;
-            $scope.params = params;
-        }), false);
-
-        if ($attrs.showFilter) {
-            $scope.$parent.$watch($attrs.showFilter, function(value) {
-                $scope.show_filter = value;
-            });
-        }
-        if ($attrs.disableFilter) {
-            $scope.$parent.$watch($attrs.disableFilter, function(value) {
-                $scope.$filterRow.disabled = value;
-            });
-        }
-    };
-
-    $scope.sortBy = function($column, event) {
-        var parsedSortable = $column.sortable && $column.sortable();
-        if (!parsedSortable) {
-            return;
-        }
-        var defaultSort = $scope.params.settings().defaultSort;
-        var inverseSort = (defaultSort === 'asc' ? 'desc' : 'asc');
-        var sorting = $scope.params.sorting() && $scope.params.sorting()[parsedSortable] && ($scope.params.sorting()[parsedSortable] === defaultSort);
-        var sortingParams = (event.ctrlKey || event.metaKey) ? $scope.params.sorting() : {};
-        sortingParams[parsedSortable] = (sorting ? inverseSort : defaultSort);
-        $scope.params.parameters({
-            sorting: sortingParams
-        });
-    };
-}]);
-
-
-/**
- * @ngdoc service
- * @name ngTable.factory:ngTableColumn
- *
- * @description
- * Service to construct a $column definition used by {@link ngTable.directive:ngTable ngTable} directive
- */
-app.factory('ngTableColumn', [function () {
-
-    var defaults = {
-        'class': function(){ return ''; },
-        filter: function(){ return false; },
-        filterData: angular.noop,
-        headerTemplateURL: function(){ return false; },
-        headerTitle: function(){ return ' '; },
-        sortable: function(){ return false; },
-        show: function(){ return true; },
-        title: function(){ return ' '; },
-        titleAlt: function(){ return ''; }
-    };
-
-    /**
-     * @ngdoc method
-     * @name ngTable.factory:ngTableColumn#buildColumn
-     * @methodOf ngTable.factory:ngTableColumn
-     * @description Creates a $column for use within a header template
-     *
-     * @param {Object} column an existing $column or simple column data object
-     * @param {Scope} defaultScope the $scope to supply to the $column getter methods when not supplied by caller
-     * @returns {Object} a $column object
-     */
-    function buildColumn(column, defaultScope){
-        // note: we're not modifying the original column object. This helps to avoid unintended side affects
-        var extendedCol = Object.create(column);
-        for (var prop in defaults) {
-            if (extendedCol[prop] === undefined) {
-                extendedCol[prop] = defaults[prop];
-            }
-            if(!angular.isFunction(extendedCol[prop])){
-                // wrap raw field values with "getter" functions
-                // - this is to ensure consistency with how ngTable.compile builds columns
-                // - note that the original column object is being "proxied"; this is important
-                //   as it ensure that any changes to the original object will be returned by the "getter"
-                (function(prop1){
-                    extendedCol[prop1] = function(){
-                        return column[prop1];
-                    };
-                })(prop);
-            }
-            (function(prop1){
-                // satisfy the arguments expected by the function returned by parsedAttribute in the ngTable directive
-                var getterFn = extendedCol[prop1];
-                extendedCol[prop1] = function(){
-                    if (arguments.length === 0){
-                        return getterFn.call(column, defaultScope);
-                    } else {
-                        return getterFn.apply(column, arguments);
-                    }
-                };
-            })(prop);
-        }
-        return extendedCol;
-    }
-
-    return {
-        buildColumn: buildColumn
-    };
-}]);
-
-/**
- * ngTable: Table + Angular JS
- *
- * @author Vitalii Savchuk <es...@gmail.com>
- * @url https://github.com/esvit/ng-table/
- * @license New BSD License <http://creativecommons.org/licenses/BSD/>
- */
-
-/**
- * @ngdoc directive
- * @name ngTable.directive:ngTable
- * @restrict A
- *
- * @description
- * Directive that instantiates {@link ngTable.directive:ngTable.ngTableController ngTableController}.
- */
-app.directive('ngTable', ['$q', '$parse',
-    function($q, $parse) {
-        'use strict';
-
-        return {
-            restrict: 'A',
-            priority: 1001,
-            scope: true,
-            controller: 'ngTableController',
-            compile: function(element) {
-                var columns = [],
-                    i = 0,
-                    row = null;
-
-                // IE 8 fix :not(.ng-table-group) selector
-                angular.forEach(angular.element(element.find('tr')), function(tr) {
-                    tr = angular.element(tr);
-                    if (!tr.hasClass('ng-table-group') && !row) {
-                        row = tr;
-                    }
-                });
-                if (!row) {
-                    return;
-                }
-                angular.forEach(row.find('td'), function(item) {
-                    var el = angular.element(item);
-                    if (el.attr('ignore-cell') && 'true' === el.attr('ignore-cell')) {
-                        return;
-                    }
-
-                    var getAttrValue = function(attr){
-                        return el.attr('x-data-' + attr) || el.attr('data-' + attr) || el.attr(attr);
-                    };
-
-                    var parsedAttribute = function(attr) {
-                        var expr = getAttrValue(attr);
-                        if (!expr){
-                            return undefined;
-                        }
-                        return function(scope, locals) {
-                            return $parse(expr)(scope, angular.extend(locals || {}, {
-                                $columns: columns
-                            }));
-                        };
-                    };
-
-                    var titleExpr = getAttrValue('title-alt') || getAttrValue('title');
-                    if (titleExpr){
-                        el.attr('data-title-text', '{{' + titleExpr + '}}'); // this used in responsive table
-                    }
-                    // NOTE TO MAINTAINERS: if you add extra fields to a $column be sure to extend ngTableColumn with
-                    // a corresponding "safe" default
-                    columns.push({
-                        id: i++,
-                        title: parsedAttribute('title'),
-                        titleAlt: parsedAttribute('title-alt'),
-                        headerTitle: parsedAttribute('header-title'),
-                        sortable: parsedAttribute('sortable'),
-                        'class': parsedAttribute('header-class'),
-                        filter: parsedAttribute('filter'),
-                        headerTemplateURL: parsedAttribute('header'),
-                        filterData: parsedAttribute('filter-data'),
-                        show: (el.attr("ng-show") ? function (scope) {
-                            return $parse(el.attr("ng-show"))(scope);
-                        } : undefined)
-                    });
-                });
-                return function(scope, element, attrs, controller) {
-                    scope.$columns = columns = controller.buildColumns(columns);
-
-                    controller.setupBindingsToInternalScope(attrs.ngTable);
-                    controller.loadFilterData(columns);
-                    controller.compileDirectiveTemplates();
-                };
-            }
-        }
-    }
-]);
-
-/**
- * @ngdoc directive
- * @name ngTable.directive:ngTableDynamic
- * @restrict A
- *
- * @description
- * A dynamic version of the {@link ngTable.directive:ngTable ngTable} directive that accepts a dynamic list of columns
- * definitions to render
- */
-app.directive('ngTableDynamic', ['$parse', function ($parse){
-
-    function parseDirectiveExpression(attr) {
-        if (!attr || attr.indexOf(" with ") > -1) {
-            var parts = attr.split(/\s+with\s+/);
-            return {
-                tableParams: parts[0],
-                columns: parts[1]
-            };
-        } else {
-            throw new Error('Parse error (expected example: ng-table-dynamic=\'tableParams with cols\')');
-        }
-    }
-
-    return {
-        restrict: 'A',
-        priority: 1001,
-        scope: true,
-        controller: 'ngTableController',
-        compile: function(tElement) {
-            var row;
-
-            // IE 8 fix :not(.ng-table-group) selector
-            angular.forEach(angular.element(tElement.find('tr')), function(tr) {
-                tr = angular.element(tr);
-                if (!tr.hasClass('ng-table-group') && !row) {
-                    row = tr;
-                }
-            });
-            if (!row) {
-                return;
-            }
-
-            angular.forEach(row.find('td'), function(item) {
-                var el = angular.element(item);
-                var getAttrValue = function(attr){
-                    return el.attr('x-data-' + attr) || el.attr('data-' + attr) || el.attr(attr);
-                };
-
-                // this used in responsive table
-                var titleExpr = getAttrValue('title');
-                if (!titleExpr){
-                    el.attr('data-title-text', '{{$columns[$index].titleAlt(this) || $columns[$index].title(this)}}');
-                }
-                var showExpr = el.attr('ng-show');
-                if (!showExpr){
-                    el.attr('ng-show', '$columns[$index].show(this)');
-                }
-            });
-
-            return function(scope, element, attrs, controller) {
-                var expr = parseDirectiveExpression(attrs.ngTableDynamic);
-                var columns = $parse(expr.columns)(scope) || [];
-                scope.$columns = controller.buildColumns(columns);
-
-                controller.setupBindingsToInternalScope(expr.tableParams);
-                controller.loadFilterData(scope.$columns);
-                controller.compileDirectiveTemplates();
-            };
-        }
-    };
-}]);
-
-/**
- * ngTable: Table + Angular JS
- *
- * @author Vitalii Savchuk <es...@gmail.com>
- * @url https://github.com/esvit/ng-table/
- * @license New BSD License <http://creativecommons.org/licenses/BSD/>
- */
-
-/**
- * @ngdoc directive
- * @name ngTable.directive:ngTablePagination
- * @restrict A
- */
-app.directive('ngTablePagination', ['$compile',
-    function($compile) {
-        'use strict';
-
-        return {
-            restrict: 'A',
-            scope: {
-                'params': '=ngTablePagination',
-                'templateUrl': '='
-            },
-            replace: false,
-            link: function(scope, element, attrs) {
-
-                scope.params.settings().$scope.$on('ngTableAfterReloadData', function() {
-                    scope.pages = scope.params.generatePagesArray(scope.params.page(), scope.params.total(), scope.params.count());
-                }, true);
-
-                scope.$watch('templateUrl', function(templateUrl) {
-                    if (angular.isUndefined(templateUrl)) {
-                        return;
-                    }
-                    var template = angular.element(document.createElement('div'))
-                    template.attr({
-                        'ng-include': 'templateUrl'
-                    });
-                    element.append(template);
-                    $compile(template)(scope);
-                });
-            }
-        };
-    }
-]);
-angular.module('ngTable').run(['$templateCache', function ($templateCache) {
-	$templateCache.put('ng-table/filters/select-multiple.html', '<select ng-options="data.id as data.title for data in $column.data" ng-disabled="$filterRow.disabled" multiple ng-multiple="true" ng-model="params.filter()[name]" ng-show="filter==\'select-multiple\'" class="filter filter-select-multiple form-control" name="{{name}}"> </select>');
-	$templateCache.put('ng-table/filters/select.html', '<select ng-options="data.id as data.title for data in $column.data" ng-disabled="$filterRow.disabled" ng-model="params.filter()[name]" ng-show="filter==\'select\'" class="filter filter-select form-control" name="{{name}}"> </select>');
-	$templateCache.put('ng-table/filters/text.html', '<input type="text" name="{{name}}" ng-disabled="$filterRow.disabled" ng-model="params.filter()[name]" ng-if="filter==\'text\'" class="input-filter form-control"/>');
-	$templateCache.put('ng-table/header.html', '<tr> <th title="{{$column.headerTitle(this)}}" ng-repeat="$column in $columns" ng-class="{ \'sortable\': $column.sortable(this), \'sort-asc\': params.sorting()[$column.sortable(this)]==\'asc\', \'sort-desc\': params.sorting()[$column.sortable(this)]==\'desc\' }" ng-click="sortBy($column, $event)" ng-show="$column.show(this)" ng-init="template=$column.headerTemplateURL(this)" class="header {{$column.class(this)}}"> <div ng-if="!template" ng-show="!template" class="ng-table-header" ng-class="{\'sort-indicator\': params.settings().sortingIndicator==\'div\'}"> <span ng-bind="$column.title(this)" ng-class="{\'sort-indicator\': params.settings().sortingIndicator==\'span\'}"></span> </div> <div ng-if="template" ng-show="template" ng-include="template"></div> </th> </tr> <tr ng-show="show_filter" class="ng-table-filters"> <th data-title-text="{{$column.titleAlt(this) || $column.title(this)}}" ng-repeat="$column in $columns" ng-show="$column.show(
 this)" class="filter"> <div ng-repeat="(name, filter) in $column.filter(this)"> <div ng-if="filter.indexOf(\'/\') !==-1" ng-include="filter"></div> <div ng-if="filter.indexOf(\'/\')===-1" ng-include="\'ng-table/filters/\' + filter + \'.html\'"></div> </div> </th> </tr> ');
-	$templateCache.put('ng-table/pager.html', '<div class="ng-cloak ng-table-pager" ng-if="params.data.length"> <div ng-if="params.settings().counts.length" class="ng-table-counts btn-group pull-right"> <button ng-repeat="count in params.settings().counts" type="button" ng-class="{\'active\':params.count()==count}" ng-click="params.count(count)" class="btn btn-default"> <span ng-bind="count"></span> </button> </div> <ul class="pagination ng-table-pagination"> <li ng-class="{\'disabled\': !page.active && !page.current, \'active\': page.current}" ng-repeat="page in pages" ng-switch="page.type"> <a ng-switch-when="prev" ng-click="params.page(page.number)" href="">&laquo;</a> <a ng-switch-when="first" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="page" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="more" ng-click="params.page(page.number)" href="">&#8230;</a> <a ng-switch-when="
 last" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="next" ng-click="params.page(page.number)" href="">&raquo;</a> </li> </ul> </div> ');
-}]);
-    return app;
-}));
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/public/javascripts/ng-table.min.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/ng-table.min.js b/modules/webconfig/nodejs/public/javascripts/ng-table.min.js
deleted file mode 100755
index 6de3320..0000000
--- a/modules/webconfig/nodejs/public/javascripts/ng-table.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! ngTable v0.5.3 by Vitalii Savchuk(esvit666@gmail.com) - https://github.com/esvit/ng-table - New BSD License */
-
-!function(a,b){"use strict";return"function"==typeof define&&define.amd?void define(["angular"],function(a){return b(a)}):b(a)}(angular||null,function(a){"use strict";var b=a.module("ngTable",[]);return b.value("ngTableDefaults",{params:{},settings:{}}),b.factory("NgTableParams",["$q","$log","ngTableDefaults",function(b,c,d){var e=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},f=function(f,g){var h=this,i=function(){k.debugMode&&c.debug&&c.debug.apply(this,arguments)};this.data=[],this.parameters=function(b,c){if(c=c||!1,a.isDefined(b)){for(var d in b){var f=b[d];if(c&&d.indexOf("[")>=0){for(var g=d.split(/\[(.*)\]/).reverse(),h="",k=0,l=g.length;l>k;k++){var m=g[k];if(""!==m){var n=f;f={},f[h=m]=e(n)?parseFloat(n):n}}"sorting"===h&&(j[h]={}),j[h]=a.extend(j[h]||{},f[h])}else j[d]=e(b[d])?parseFloat(b[d]):b[d]}return i("ngTable: set parameters",j),this}return j},this.settings=function(b){return a.isDefined(b)?(a.isArray(b.data)&&(b.total=b.data.length),k=a.extend(k,b),i("ngTa
 ble: set settings",k),this):k},this.page=function(b){return a.isDefined(b)?this.parameters({page:b}):j.page},this.total=function(b){return a.isDefined(b)?this.settings({total:b}):k.total},this.count=function(b){return a.isDefined(b)?this.parameters({count:b,page:1}):j.count},this.filter=function(b){return a.isDefined(b)?this.parameters({filter:b,page:1}):j.filter},this.sorting=function(b){if(2==arguments.length){var c={};return c[b]=arguments[1],this.parameters({sorting:c}),this}return a.isDefined(b)?this.parameters({sorting:b}):j.sorting},this.isSortBy=function(b,c){return a.isDefined(j.sorting[b])&&a.equals(j.sorting[b],c)},this.orderBy=function(){var a=[];for(var b in j.sorting)a.push(("asc"===j.sorting[b]?"+":"-")+b);return a},this.getData=function(b,c){return b.resolve(a.isArray(this.data)&&a.isObject(c)?this.data.slice((c.page()-1)*c.count(),c.page()*c.count()):[]),b.promise},this.getGroups=function(c,d){var e=b.defer();return e.promise.then(function(b){var e={};a.forEach(b,fu
 nction(b){var c=a.isFunction(d)?d(b):b[d];e[c]=e[c]||{data:[]},e[c].value=c,e[c].data.push(b)});var f=[];for(var g in e)f.push(e[g]);i("ngTable: refresh groups",f),c.resolve(f)}),this.getData(e,h)},this.generatePagesArray=function(a,b,c){var d,e,f,g,h,i;if(d=11,i=[],h=Math.ceil(b/c),h>1){i.push({type:"prev",number:Math.max(1,a-1),active:a>1}),i.push({type:"first",number:1,active:a>1,current:1===a}),f=Math.round((d-5)/2),g=Math.max(2,a-f),e=Math.min(h-1,a+2*f-(a-g)),g=Math.max(2,g-(2*f-(e-g)));for(var j=g;e>=j;)i.push(j===g&&2!==j||j===e&&j!==h-1?{type:"more",active:!1}:{type:"page",number:j,active:a!==j,current:a===j}),j++;i.push({type:"last",number:h,active:a!==h,current:a===h}),i.push({type:"next",number:Math.min(h,a+1),active:h>a})}return i},this.url=function(b){b=b||!1;var c=b?[]:{};for(var d in j)if(j.hasOwnProperty(d)){var e=j[d],f=encodeURIComponent(d);if("object"==typeof e){for(var g in e)if(!a.isUndefined(e[g])&&""!==e[g]){var h=f+"["+encodeURIComponent(g)+"]";b?c.push(h+"=
 "+e[g]):c[h]=e[g]}}else a.isFunction(e)||a.isUndefined(e)||""===e||(b?c.push(f+"="+encodeURIComponent(e)):c[f]=encodeURIComponent(e))}return c},this.reload=function(){var a=b.defer(),c=this,d=null;if(k.$scope)return k.$loading=!0,d=k.groupBy?k.getGroups(a,k.groupBy,this):k.getData(a,this),i("ngTable: reload data"),d||(d=a.promise),d.then(function(a){return k.$loading=!1,i("ngTable: current scope",k.$scope),k.groupBy?(c.data=a,k.$scope&&(k.$scope.$groups=a)):(c.data=a,k.$scope&&(k.$scope.$data=a)),k.$scope&&(k.$scope.pages=c.generatePagesArray(c.page(),c.total(),c.count())),k.$scope.$emit("ngTableAfterReloadData"),a})},this.reloadPages=function(){var a=this;k.$scope.pages=a.generatePagesArray(a.page(),a.total(),a.count())};var j=this.$params={page:1,count:1,filter:{},sorting:{},group:{},groupBy:null};a.extend(j,d.params);var k={$scope:null,$loading:!1,data:null,total:0,defaultSort:"desc",filterDelay:750,counts:[10,25,50,100],sortingIndicator:"span",getGroups:this.getGroups,getData:th
 is.getData};return a.extend(k,d.settings),this.settings(g),this.parameters(f,!0),this};return f}]),b.factory("ngTableParams",["NgTableParams",function(a){return a}]),b.controller("ngTableController",["$scope","NgTableParams","$timeout","$parse","$compile","$attrs","$element","ngTableColumn",function(b,c,d,e,f,g,h,i){function j(){b.params.$params.page=1}var k=!0;b.$filterRow={},b.$loading=!1,b.hasOwnProperty("params")||(b.params=new c,b.params.isNullInstance=!0),b.params.settings().$scope=b;var l=function(){var a=0;return function(b,c){d.cancel(a),a=d(b,c)}}();b.$watch("params.$params",function(c,d){if(c!==d){if(b.params.settings().$scope=b,a.equals(c.filter,d.filter))b.params.reload();else{var e=k?a.noop:j;l(function(){e(),b.params.reload()},b.params.settings().filterDelay)}b.params.isNullInstance||(k=!1)}},!0),this.compileDirectiveTemplates=function(){if(!h.hasClass("ng-table")){b.templates={header:g.templateHeader?g.templateHeader:"ng-table/header.html",pagination:g.templatePagina
 tion?g.templatePagination:"ng-table/pager.html"},h.addClass("ng-table");var c=null;0===h.find("> thead").length&&(c=a.element(document.createElement("thead")).attr("ng-include","templates.header"),h.prepend(c));var d=a.element(document.createElement("div")).attr({"ng-table-pagination":"params","template-url":"templates.pagination"});h.after(d),c&&f(c)(b),f(d)(b)}},this.loadFilterData=function(c){a.forEach(c,function(c){var d;return d=c.filterData(b,{$column:c}),d?a.isObject(d)&&a.isObject(d.promise)?(delete c.filterData,d.promise.then(function(b){a.isArray(b)||a.isFunction(b)||a.isObject(b)?a.isArray(b)&&b.unshift({title:"-",id:""}):b=[],c.data=b})):c.data=d:void delete c.filterData})},this.buildColumns=function(a){return a.map(function(a){return i.buildColumn(a,b)})},this.setupBindingsToInternalScope=function(c){var d=e(c);b.$watch(d,function(c){a.isUndefined(c)||(b.paramsModel=d,b.params=c)},!1),g.showFilter&&b.$parent.$watch(g.showFilter,function(a){b.show_filter=a}),g.disableFil
 ter&&b.$parent.$watch(g.disableFilter,function(a){b.$filterRow.disabled=a})},b.sortBy=function(a,c){var d=a.sortable&&a.sortable();if(d){var e=b.params.settings().defaultSort,f="asc"===e?"desc":"asc",g=b.params.sorting()&&b.params.sorting()[d]&&b.params.sorting()[d]===e,h=c.ctrlKey||c.metaKey?b.params.sorting():{};h[d]=g?f:e,b.params.parameters({sorting:h})}}}]),b.factory("ngTableColumn",[function(){function b(b,d){var e=Object.create(b);for(var f in c)void 0===e[f]&&(e[f]=c[f]),a.isFunction(e[f])||!function(a){e[a]=function(){return b[a]}}(f),function(a){var c=e[a];e[a]=function(){return 0===arguments.length?c.call(b,d):c.apply(b,arguments)}}(f);return e}var c={"class":function(){return""},filter:function(){return!1},filterData:a.noop,headerTemplateURL:function(){return!1},headerTitle:function(){return" "},sortable:function(){return!1},show:function(){return!0},title:function(){return" "},titleAlt:function(){return""}};return{buildColumn:b}}]),b.directive("ngTable",["$q","$parse",f
 unction(b,c){return{restrict:"A",priority:1001,scope:!0,controller:"ngTableController",compile:function(b){var d=[],e=0,f=null;return a.forEach(a.element(b.find("tr")),function(b){b=a.element(b),b.hasClass("ng-table-group")||f||(f=b)}),f?(a.forEach(f.find("td"),function(b){var f=a.element(b);if(!f.attr("ignore-cell")||"true"!==f.attr("ignore-cell")){var g=function(a){return f.attr("x-data-"+a)||f.attr("data-"+a)||f.attr(a)},h=function(b){var e=g(b);return e?function(b,f){return c(e)(b,a.extend(f||{},{$columns:d}))}:void 0},i=g("title-alt")||g("title");i&&f.attr("data-title-text","{{"+i+"}}"),d.push({id:e++,title:h("title"),titleAlt:h("title-alt"),headerTitle:h("header-title"),sortable:h("sortable"),"class":h("header-class"),filter:h("filter"),headerTemplateURL:h("header"),filterData:h("filter-data"),show:f.attr("ng-show")?function(a){return c(f.attr("ng-show"))(a)}:void 0})}}),function(a,b,c,e){a.$columns=d=e.buildColumns(d),e.setupBindingsToInternalScope(c.ngTable),e.loadFilterData
 (d),e.compileDirectiveTemplates()}):void 0}}}]),b.directive("ngTableDynamic",["$parse",function(b){function c(a){if(!a||a.indexOf(" with ")>-1){var b=a.split(/\s+with\s+/);return{tableParams:b[0],columns:b[1]}}throw new Error("Parse error (expected example: ng-table-dynamic='tableParams with cols')")}return{restrict:"A",priority:1001,scope:!0,controller:"ngTableController",compile:function(d){var e;return a.forEach(a.element(d.find("tr")),function(b){b=a.element(b),b.hasClass("ng-table-group")||e||(e=b)}),e?(a.forEach(e.find("td"),function(b){var c=a.element(b),d=function(a){return c.attr("x-data-"+a)||c.attr("data-"+a)||c.attr(a)},e=d("title");e||c.attr("data-title-text","{{$columns[$index].titleAlt(this) || $columns[$index].title(this)}}");var f=c.attr("ng-show");f||c.attr("ng-show","$columns[$index].show(this)")}),function(a,d,e,f){var g=c(e.ngTableDynamic),h=b(g.columns)(a)||[];a.$columns=f.buildColumns(h),f.setupBindingsToInternalScope(g.tableParams),f.loadFilterData(a.$columns
 ),f.compileDirectiveTemplates()}):void 0}}}]),b.directive("ngTablePagination",["$compile",function(b){return{restrict:"A",scope:{params:"=ngTablePagination",templateUrl:"="},replace:!1,link:function(c,d){c.params.settings().$scope.$on("ngTableAfterReloadData",function(){c.pages=c.params.generatePagesArray(c.params.page(),c.params.total(),c.params.count())},!0),c.$watch("templateUrl",function(e){if(!a.isUndefined(e)){var f=a.element(document.createElement("div"));f.attr({"ng-include":"templateUrl"}),d.append(f),b(f)(c)}})}}}]),a.module("ngTable").run(["$templateCache",function(a){a.put("ng-table/filters/select-multiple.html",'<select ng-options="data.id as data.title for data in $column.data" ng-disabled="$filterRow.disabled" multiple ng-multiple="true" ng-model="params.filter()[name]" ng-show="filter==\'select-multiple\'" class="filter filter-select-multiple form-control" name="{{name}}"> </select>'),a.put("ng-table/filters/select.html",'<select ng-options="data.id as data.title for
  data in $column.data" ng-disabled="$filterRow.disabled" ng-model="params.filter()[name]" ng-show="filter==\'select\'" class="filter filter-select form-control" name="{{name}}"> </select>'),a.put("ng-table/filters/text.html",'<input type="text" name="{{name}}" ng-disabled="$filterRow.disabled" ng-model="params.filter()[name]" ng-if="filter==\'text\'" class="input-filter form-control"/>'),a.put("ng-table/header.html",'<tr> <th title="{{$column.headerTitle(this)}}" ng-repeat="$column in $columns" ng-class="{ \'sortable\': $column.sortable(this), \'sort-asc\': params.sorting()[$column.sortable(this)]==\'asc\', \'sort-desc\': params.sorting()[$column.sortable(this)]==\'desc\' }" ng-click="sortBy($column, $event)" ng-show="$column.show(this)" ng-init="template=$column.headerTemplateURL(this)" class="header {{$column.class(this)}}"> <div ng-if="!template" ng-show="!template" class="ng-table-header" ng-class="{\'sort-indicator\': params.settings().sortingIndicator==\'div\'}"> <span ng-bind
 ="$column.title(this)" ng-class="{\'sort-indicator\': params.settings().sortingIndicator==\'span\'}"></span> </div> <div ng-if="template" ng-show="template" ng-include="template"></div> </th> </tr> <tr ng-show="show_filter" class="ng-table-filters"> <th data-title-text="{{$column.titleAlt(this) || $column.title(this)}}" ng-repeat="$column in $columns" ng-show="$column.show(this)" class="filter"> <div ng-repeat="(name, filter) in $column.filter(this)"> <div ng-if="filter.indexOf(\'/\') !==-1" ng-include="filter"></div> <div ng-if="filter.indexOf(\'/\')===-1" ng-include="\'ng-table/filters/\' + filter + \'.html\'"></div> </div> </th> </tr> '),a.put("ng-table/pager.html",'<div class="ng-cloak ng-table-pager" ng-if="params.data.length"> <div ng-if="params.settings().counts.length" class="ng-table-counts btn-group pull-right"> <button ng-repeat="count in params.settings().counts" type="button" ng-class="{\'active\':params.count()==count}" ng-click="params.count(count)" class="btn btn-def
 ault"> <span ng-bind="count"></span> </button> </div> <ul class="pagination ng-table-pagination"> <li ng-class="{\'disabled\': !page.active && !page.current, \'active\': page.current}" ng-repeat="page in pages" ng-switch="page.type"> <a ng-switch-when="prev" ng-click="params.page(page.number)" href="">&laquo;</a> <a ng-switch-when="first" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="page" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="more" ng-click="params.page(page.number)" href="">&#8230;</a> <a ng-switch-when="last" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="next" ng-click="params.page(page.number)" href="">&raquo;</a> </li> </ul> </div> ')}]),b});
-//# sourceMappingURL=ng-table.min.js.map
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/public/stylesheets/ng-table.css
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/stylesheets/ng-table.css b/modules/webconfig/nodejs/public/stylesheets/ng-table.css
deleted file mode 100755
index 8a5207b..0000000
--- a/modules/webconfig/nodejs/public/stylesheets/ng-table.css
+++ /dev/null
@@ -1,136 +0,0 @@
-.ng-table th {
-  text-align: center;
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-  -khtml-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-.ng-table th.sortable {
-  cursor: pointer;
-}
-.ng-table th.sortable .sort-indicator {
-  padding-right: 18px;
-  position: relative;
-}
-.ng-table th.sortable .sort-indicator:after,
-.ng-table th.sortable .sort-indicator:before {
-  content: "";
-  border-width: 0 4px 4px;
-  border-style: solid;
-  border-color: #000 transparent;
-  visibility: visible;
-  right: 5px;
-  top: 50%;
-  position: absolute;
-  opacity: .3;
-  margin-top: -4px;
-}
-.ng-table th.sortable .sort-indicator:before {
-  margin-top: 2px;
-  border-bottom: none;
-  border-left: 4px solid transparent;
-  border-right: 4px solid transparent;
-  border-top: 4px solid #000;
-}
-.ng-table th.sortable .sort-indicator:hover:after,
-.ng-table th.sortable .sort-indicator:hover:before {
-  opacity: 1;
-  visibility: visible;
-}
-.ng-table th.sortable.sort-desc,
-.ng-table th.sortable.sort-asc {
-  background-color: rgba(141, 192, 219, 0.25);
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-}
-.ng-table th.sortable.sort-desc .sort-indicator:after,
-.ng-table th.sortable.sort-asc .sort-indicator:after {
-  margin-top: -2px;
-}
-.ng-table th.sortable.sort-desc .sort-indicator:before,
-.ng-table th.sortable.sort-asc .sort-indicator:before {
-  visibility: hidden;
-}
-.ng-table th.sortable.sort-asc .sort-indicator:after,
-.ng-table th.sortable.sort-asc .sort-indicator:hover:after {
-  visibility: visible;
-  filter: alpha(opacity=60);
-  -khtml-opacity: 0.6;
-  -moz-opacity: 0.6;
-  opacity: 0.6;
-}
-.ng-table th.sortable.sort-desc .sort-indicator:after {
-  border-bottom: none;
-  border-left: 4px solid transparent;
-  border-right: 4px solid transparent;
-  border-top: 4px solid #000;
-  visibility: visible;
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-  filter: alpha(opacity=60);
-  -khtml-opacity: 0.6;
-  -moz-opacity: 0.6;
-  opacity: 0.6;
-}
-.ng-table th.filter .input-filter {
-  margin: 0;
-  display: block;
-  width: 100%;
-  min-height: 30px;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.ng-table + .pagination {
-  margin-top: 0;
-}
-@media only screen and (max-width: 800px) {
-  .ng-table-responsive {
-    border-bottom: 1px solid #999999;
-  }
-  .ng-table-responsive tr {
-    border-top: 1px solid #999999;
-    border-left: 1px solid #999999;
-    border-right: 1px solid #999999;
-  }
-  .ng-table-responsive td:before {
-    position: absolute;
-    padding: 8px;
-    left: 0;
-    top: 0;
-    width: 50%;
-    white-space: nowrap;
-    text-align: left;
-    font-weight: bold;
-  }
-  .ng-table-responsive thead tr th {
-    text-align: left;
-  }
-  .ng-table-responsive thead tr.ng-table-filters th {
-    padding: 0;
-  }
-  .ng-table-responsive thead tr.ng-table-filters th form > div {
-    padding: 8px;
-  }
-  .ng-table-responsive td {
-    border: none;
-    border-bottom: 1px solid #eeeeee;
-    position: relative;
-    padding-left: 50%;
-    white-space: normal;
-    text-align: left;
-  }
-  .ng-table-responsive td:before {
-    content: attr(data-title-text);
-  }
-  .ng-table-responsive,
-  .ng-table-responsive thead,
-  .ng-table-responsive tbody,
-  .ng-table-responsive th,
-  .ng-table-responsive td,
-  .ng-table-responsive tr {
-    display: block;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/public/stylesheets/ng-table.min.css
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/stylesheets/ng-table.min.css b/modules/webconfig/nodejs/public/stylesheets/ng-table.min.css
deleted file mode 100755
index 878f866..0000000
--- a/modules/webconfig/nodejs/public/stylesheets/ng-table.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! ngTable v0.5.3 by Vitalii Savchuk(esvit666@gmail.com) - https://github.com/esvit/ng-table - New BSD License */
-
-.ng-table th{text-align:center;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ng-table th.sortable{cursor:pointer}.ng-table th.sortable .sort-indicator{padding-right:18px;position:relative}.ng-table th.sortable .sort-indicator:after,.ng-table th.sortable .sort-indicator:before{content:"";border-width:0 4px 4px;border-style:solid;border-color:#000 transparent;visibility:visible;right:5px;top:50%;position:absolute;opacity:.3;margin-top:-4px}.ng-table th.sortable .sort-indicator:before{margin-top:2px;border-bottom:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000}.ng-table th.sortable .sort-indicator:hover:after,.ng-table th.sortable .sort-indicator:hover:before{opacity:1;visibility:visible}.ng-table th.sortable.sort-desc,.ng-table th.sortable.sort-asc{background-color:rgba(141,192,219,.25);text-shadow:0 1px 1px rgba(255,255,255,.75)}.ng-table th.sort
 able.sort-desc .sort-indicator:after,.ng-table th.sortable.sort-asc .sort-indicator:after{margin-top:-2px}.ng-table th.sortable.sort-desc .sort-indicator:before,.ng-table th.sortable.sort-asc .sort-indicator:before{visibility:hidden}.ng-table th.sortable.sort-asc .sort-indicator:after,.ng-table th.sortable.sort-asc .sort-indicator:hover:after{visibility:visible;filter:alpha(opacity=60);-khtml-opacity:.6;-moz-opacity:.6;opacity:.6}.ng-table th.sortable.sort-desc .sort-indicator:after{border-bottom:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;visibility:visible;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:alpha(opacity=60);-khtml-opacity:.6;-moz-opacity:.6;opacity:.6}.ng-table th.filter .input-filter{margin:0;display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ng-table+.pagination{margin-top:0}@media only screen and (max-width:800px){.ng-table
 -responsive{border-bottom:1px solid #999}.ng-table-responsive tr{border-top:1px solid #999;border-left:1px solid #999;border-right:1px solid #999}.ng-table-responsive td:before{position:absolute;padding:8px;left:0;top:0;width:50%;white-space:nowrap;text-align:left;font-weight:700}.ng-table-responsive thead tr th{text-align:left}.ng-table-responsive thead tr.ng-table-filters th{padding:0}.ng-table-responsive thead tr.ng-table-filters th form>div{padding:8px}.ng-table-responsive td{border:0;border-bottom:1px solid #eee;position:relative;padding-left:50%;white-space:normal;text-align:left}.ng-table-responsive td:before{content:attr(data-title-text)}.ng-table-responsive,.ng-table-responsive thead,.ng-table-responsive tbody,.ng-table-responsive th,.ng-table-responsive td,.ng-table-responsive tr{display:block}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/public/stylesheets/style.less
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/stylesheets/style.less b/modules/webconfig/nodejs/public/stylesheets/style.less
index 663e6ba..4da5ea8 100644
--- a/modules/webconfig/nodejs/public/stylesheets/style.less
+++ b/modules/webconfig/nodejs/public/stylesheets/style.less
@@ -1,3 +1,20 @@
+/*
+ * 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";
 
 .main-header .logo {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/routes/auth.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/auth.js b/modules/webconfig/nodejs/routes/auth.js
index 332be80..06240bf 100644
--- a/modules/webconfig/nodejs/routes/auth.js
+++ b/modules/webconfig/nodejs/routes/auth.js
@@ -1,3 +1,20 @@
+/*
+ * 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();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/routes/caches.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/caches.js b/modules/webconfig/nodejs/routes/caches.js
index c4ca8df..d559e9f 100644
--- a/modules/webconfig/nodejs/routes/caches.js
+++ b/modules/webconfig/nodejs/routes/caches.js
@@ -1,3 +1,20 @@
+/*
+ * 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');
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/routes/clusters.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/clusters.js b/modules/webconfig/nodejs/routes/clusters.js
index d82fbea..4d947a6 100644
--- a/modules/webconfig/nodejs/routes/clusters.js
+++ b/modules/webconfig/nodejs/routes/clusters.js
@@ -1,3 +1,20 @@
+/*
+ * 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');
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/routes/pages.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/pages.js b/modules/webconfig/nodejs/routes/pages.js
index 7f19c4b..d111042 100644
--- a/modules/webconfig/nodejs/routes/pages.js
+++ b/modules/webconfig/nodejs/routes/pages.js
@@ -1,3 +1,20 @@
+/*
+ * 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.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/caches.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/caches.jade b/modules/webconfig/nodejs/views/caches.jade
index beedfd1..f026538 100644
--- a/modules/webconfig/nodejs/views/caches.jade
+++ b/modules/webconfig/nodejs/views/caches.jade
@@ -1,7 +1,20 @@
-// Page with caches configuration.
+//-
+    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.
+
 extends layout-sidebar
-append css
-    link(rel='stylesheet', href='/stylesheets/ng-table.css')
 append scripts
     script(src='/javascripts/controllers/caches.js')
 block content

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/clients.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/clients.jade b/modules/webconfig/nodejs/views/clients.jade
index 1643b4a..f321936 100644
--- a/modules/webconfig/nodejs/views/clients.jade
+++ b/modules/webconfig/nodejs/views/clients.jade
@@ -1,3 +1,19 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 extends layout-sidebar
 block head
 block content

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/clusterEdit.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/clusterEdit.jade b/modules/webconfig/nodejs/views/clusterEdit.jade
deleted file mode 100644
index 2592929..0000000
--- a/modules/webconfig/nodejs/views/clusterEdit.jade
+++ /dev/null
@@ -1,20 +0,0 @@
-div(class=['modal', 'center'] tabindex='-1' role='dialog')
-   div.modal-dialog
-      div.modal-content
-         form(class=['form-horizontal'] ng-submit='submit()')
-            div.modal-header(ng-show='title')
-            div.modal-body
-               div.row
-                  div.form-group
-                     label(class=['col-sm-3', 'control-label']) Cluster name:
-                     div.col-sm-8
-                        input.form-control(type='text' ng-model='cluster.name')
-               div.row
-                  div.form-group
-                     label(class=['col-sm-3', 'control-label']) Discovery:
-                     div.col-sm-8
-                        select(class=['btn', 'btn-default'] ng-model='cluster.discovery' data-template='/select' data-placeholder='Choose discovery' bs-options='discovery.value as discovery.label for discovery in discoveries' bs-select)
-                            span.caret
-            div.modal-footer
-               input(type='submit' class=['btn', 'btn-primary'] value='Save changes')
-               button(type="button" class=['btn', 'btn-default'] data-dismiss="modal" ng-click="$hide()") Close

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/discovery.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/discovery.jade b/modules/webconfig/nodejs/views/discovery.jade
index 46a4241..94c0461 100644
--- a/modules/webconfig/nodejs/views/discovery.jade
+++ b/modules/webconfig/nodejs/views/discovery.jade
@@ -1,3 +1,19 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 div(class=['modal', 'center'] tabindex='-1' role='dialog')
     .modal-dialog
         .modal-content

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/error.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/error.jade b/modules/webconfig/nodejs/views/error.jade
index c524855..cfa2ad1 100644
--- a/modules/webconfig/nodejs/views/error.jade
+++ b/modules/webconfig/nodejs/views/error.jade
@@ -1,3 +1,19 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 extends layout
 
 block container

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/db79305f/modules/webconfig/nodejs/views/includes/footer.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/includes/footer.jade b/modules/webconfig/nodejs/views/includes/footer.jade
index 5816240..5042443 100644
--- a/modules/webconfig/nodejs/views/includes/footer.jade
+++ b/modules/webconfig/nodejs/views/includes/footer.jade
@@ -1,3 +1,19 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
 div(class=['container', 'container-footer'])
     footer
         center