You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2016/02/08 11:13:54 UTC

[1/4] ignite git commit: IGNITE-843 changed case of dir

Repository: ignite
Updated Branches:
  refs/heads/ignite-843-rc2 f44371d90 -> 7612c2204


IGNITE-843 changed case of dir


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

Branch: refs/heads/ignite-843-rc2
Commit: e87421405072a3f24cf18769a0df227961b974cd
Parents: f44371d
Author: Andrey <an...@gridgain.com>
Authored: Mon Feb 8 17:10:14 2016 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Mon Feb 8 17:10:14 2016 +0700

----------------------------------------------------------------------
 .../main/js/app/modules/User/Auth.service.js    | 77 --------------------
 .../main/js/app/modules/User/User.service.js    | 58 ---------------
 .../src/main/js/app/modules/User/user.module.js | 28 -------
 .../main/js/app/modules/user/Auth.service.js    | 77 ++++++++++++++++++++
 .../main/js/app/modules/user/User.service.js    | 58 +++++++++++++++
 .../src/main/js/app/modules/user/user.module.js | 28 +++++++
 6 files changed, 163 insertions(+), 163 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/e8742140/modules/control-center-web/src/main/js/app/modules/User/Auth.service.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/User/Auth.service.js b/modules/control-center-web/src/main/js/app/modules/User/Auth.service.js
deleted file mode 100644
index 3e194e7..0000000
--- a/modules/control-center-web/src/main/js/app/modules/User/Auth.service.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['Auth', ['$http', '$rootScope', '$state', '$common', 'IgniteGettingStarted', 'User',
-    function($http, $root, $state, $common, gettingStarted, User) {
-    let _auth = false;
-
-    try {
-        _auth = localStorage.authorized === 'true';
-    }
-    catch (ignore) {
-        // No-op.
-    }
-
-    function _authorized(value) {
-        try {
-            return _auth = localStorage.authorized = !!value;
-        } catch (ignore) {
-            return _auth = !!value;
-        }
-    }
-
-    return {
-        get authorized() {
-            return _auth;
-        },
-        set authorized(auth) {
-            _authorized(auth);
-        },
-        auth(action, userInfo) {
-            $http.post('/api/v1/' + action, userInfo)
-                .then(User.read)
-                .then((user) => {
-                    if (action !== 'password/forgot') {
-                        _authorized(true);
-
-                        $root.$broadcast('user', user);
-
-                        $state.go('base.configuration.clusters');
-
-                        $root.gettingStarted.tryShow();
-                    } else
-                        $state.go('password.send');
-                })
-                .catch(function(errMsg) {
-                    $common.showPopoverMessage(null, null, 'user_email', errMsg.data);
-                });
-        },
-        logout() {
-            $http.post('/api/v1/logout')
-                .then(function() {
-                    User.clean();
-
-                    _authorized(false);
-
-                    $state.go('login');
-                })
-                .catch(function(errMsg) {
-                    $common.showError(errMsg);
-                });
-        }
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/e8742140/modules/control-center-web/src/main/js/app/modules/User/User.service.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/User/User.service.js b/modules/control-center-web/src/main/js/app/modules/User/User.service.js
deleted file mode 100644
index dc2117e..0000000
--- a/modules/control-center-web/src/main/js/app/modules/User/User.service.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['User', ['$q', '$injector', '$rootScope', '$state', '$http', function($q, $injector, $root, $state, $http) {
-    let _user;
-
-    try {
-        _user = JSON.parse(localStorage.user);
-
-        if (_user)
-            $root.user = _user;
-    }
-    catch (ignore) {
-        // No-op.
-    }
-
-    return {
-        read() {
-            return $http.post('/api/v1/user').then(({data}) => {
-                if (_.isEmpty(data)) {
-                    const Auth = $injector.get('Auth');
-
-                    Auth.authorized = false;
-
-                    $state.go('login');
-                }
-
-                try {
-                    localStorage.user = JSON.stringify(data);
-                }
-                catch (ignore) {
-                    // No-op.
-                }
-
-                return _user = $root.user = data;
-            });
-        },
-        clean() {
-            delete $root.user;
-
-            delete localStorage.user;
-        }
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/e8742140/modules/control-center-web/src/main/js/app/modules/User/user.module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/User/user.module.js b/modules/control-center-web/src/main/js/app/modules/User/user.module.js
deleted file mode 100644
index 2387f20..0000000
--- a/modules/control-center-web/src/main/js/app/modules/User/user.module.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import angular from 'angular';
-
-import Auth from './Auth.service';
-import User from './User.service';
-
-angular
-.module('ignite-console.user', [
-
-])
-.service(...Auth)
-.service(...User);

http://git-wip-us.apache.org/repos/asf/ignite/blob/e8742140/modules/control-center-web/src/main/js/app/modules/user/Auth.service.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/user/Auth.service.js b/modules/control-center-web/src/main/js/app/modules/user/Auth.service.js
new file mode 100644
index 0000000..3e194e7
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/user/Auth.service.js
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ */
+
+export default ['Auth', ['$http', '$rootScope', '$state', '$common', 'IgniteGettingStarted', 'User',
+    function($http, $root, $state, $common, gettingStarted, User) {
+    let _auth = false;
+
+    try {
+        _auth = localStorage.authorized === 'true';
+    }
+    catch (ignore) {
+        // No-op.
+    }
+
+    function _authorized(value) {
+        try {
+            return _auth = localStorage.authorized = !!value;
+        } catch (ignore) {
+            return _auth = !!value;
+        }
+    }
+
+    return {
+        get authorized() {
+            return _auth;
+        },
+        set authorized(auth) {
+            _authorized(auth);
+        },
+        auth(action, userInfo) {
+            $http.post('/api/v1/' + action, userInfo)
+                .then(User.read)
+                .then((user) => {
+                    if (action !== 'password/forgot') {
+                        _authorized(true);
+
+                        $root.$broadcast('user', user);
+
+                        $state.go('base.configuration.clusters');
+
+                        $root.gettingStarted.tryShow();
+                    } else
+                        $state.go('password.send');
+                })
+                .catch(function(errMsg) {
+                    $common.showPopoverMessage(null, null, 'user_email', errMsg.data);
+                });
+        },
+        logout() {
+            $http.post('/api/v1/logout')
+                .then(function() {
+                    User.clean();
+
+                    _authorized(false);
+
+                    $state.go('login');
+                })
+                .catch(function(errMsg) {
+                    $common.showError(errMsg);
+                });
+        }
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/e8742140/modules/control-center-web/src/main/js/app/modules/user/User.service.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/user/User.service.js b/modules/control-center-web/src/main/js/app/modules/user/User.service.js
new file mode 100644
index 0000000..dc2117e
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/user/User.service.js
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ */
+
+export default ['User', ['$q', '$injector', '$rootScope', '$state', '$http', function($q, $injector, $root, $state, $http) {
+    let _user;
+
+    try {
+        _user = JSON.parse(localStorage.user);
+
+        if (_user)
+            $root.user = _user;
+    }
+    catch (ignore) {
+        // No-op.
+    }
+
+    return {
+        read() {
+            return $http.post('/api/v1/user').then(({data}) => {
+                if (_.isEmpty(data)) {
+                    const Auth = $injector.get('Auth');
+
+                    Auth.authorized = false;
+
+                    $state.go('login');
+                }
+
+                try {
+                    localStorage.user = JSON.stringify(data);
+                }
+                catch (ignore) {
+                    // No-op.
+                }
+
+                return _user = $root.user = data;
+            });
+        },
+        clean() {
+            delete $root.user;
+
+            delete localStorage.user;
+        }
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/e8742140/modules/control-center-web/src/main/js/app/modules/user/user.module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/user/user.module.js b/modules/control-center-web/src/main/js/app/modules/user/user.module.js
new file mode 100644
index 0000000..2387f20
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/user/user.module.js
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import angular from 'angular';
+
+import Auth from './Auth.service';
+import User from './User.service';
+
+angular
+.module('ignite-console.user', [
+
+])
+.service(...Auth)
+.service(...User);


[3/4] ignite git commit: IGNITE-843 changed case of dir

Posted by an...@apache.org.
IGNITE-843 changed case of dir


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

Branch: refs/heads/ignite-843-rc2
Commit: a84f6b6a61539f8a588b5291b9d386b72f3e8f46
Parents: e874214
Author: Andrey <an...@gridgain.com>
Authored: Mon Feb 8 17:10:46 2016 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Mon Feb 8 17:10:46 2016 +0700

----------------------------------------------------------------------
 .../js/app/modules/Form/field/down.directive.js | 45 ----------
 .../modules/Form/field/dropdown.directive.js    | 64 --------------
 .../js/app/modules/Form/field/dropdown.jade     | 51 -----------
 .../main/js/app/modules/Form/field/field.css    |  6 --
 .../app/modules/Form/field/field.directive.js   | 43 ---------
 .../main/js/app/modules/Form/field/field.jade   | 26 ------
 .../field/form-control-feedback.directive.js    | 36 --------
 .../Form/field/input/autofocus.directive.js     | 30 -------
 .../Form/field/input/checkbox.directive.js      | 60 -------------
 .../app/modules/Form/field/input/checkbox.jade  | 28 ------
 .../Form/field/input/datalist.directive.js      | 57 ------------
 .../app/modules/Form/field/input/datalist.jade  | 33 -------
 .../Form/field/input/number.directive.js        | 61 -------------
 .../js/app/modules/Form/field/input/number.jade | 44 ----------
 .../js/app/modules/Form/field/input/text.css    | 24 -----
 .../modules/Form/field/input/text.directive.js  | 84 ------------------
 .../js/app/modules/Form/field/input/text.jade   | 38 --------
 .../app/modules/Form/field/label.directive.js   | 41 ---------
 .../app/modules/Form/field/tooltip.directive.js | 44 ----------
 .../js/app/modules/Form/field/up.directive.js   | 46 ----------
 .../src/main/js/app/modules/Form/form.module.js | 92 --------------------
 .../js/app/modules/Form/group/add.directive.js  | 40 ---------
 .../app/modules/Form/group/group.directive.js   | 72 ---------------
 .../main/js/app/modules/Form/group/group.jade   | 21 -----
 .../app/modules/Form/group/table.directive.js   | 29 ------
 .../main/js/app/modules/Form/group/table.jade   | 17 ----
 .../app/modules/Form/group/tooltip.directive.js | 40 ---------
 .../app/modules/Form/panel/chevron.directive.js | 53 -----------
 .../app/modules/Form/panel/panel.directive.js   | 37 --------
 .../app/modules/Form/panel/revert.directive.js  | 52 -----------
 .../validator/java-built-in-class.directive.js  | 31 -------
 .../Form/validator/java-identifier.directive.js | 31 -------
 .../Form/validator/java-keywords.directive.js   | 40 ---------
 .../validator/java-package-name.directive.js    | 31 -------
 .../java-package-specified.directive.js         | 33 -------
 .../modules/Form/validator/unique.directive.js  | 47 ----------
 .../js/app/modules/form/field/down.directive.js | 45 ++++++++++
 .../modules/form/field/dropdown.directive.js    | 64 ++++++++++++++
 .../js/app/modules/form/field/dropdown.jade     | 51 +++++++++++
 .../main/js/app/modules/form/field/field.css    |  6 ++
 .../app/modules/form/field/field.directive.js   | 43 +++++++++
 .../main/js/app/modules/form/field/field.jade   | 26 ++++++
 .../field/form-control-feedback.directive.js    | 36 ++++++++
 .../form/field/input/autofocus.directive.js     | 30 +++++++
 .../form/field/input/checkbox.directive.js      | 60 +++++++++++++
 .../app/modules/form/field/input/checkbox.jade  | 28 ++++++
 .../form/field/input/datalist.directive.js      | 57 ++++++++++++
 .../app/modules/form/field/input/datalist.jade  | 33 +++++++
 .../form/field/input/number.directive.js        | 61 +++++++++++++
 .../js/app/modules/form/field/input/number.jade | 44 ++++++++++
 .../js/app/modules/form/field/input/text.css    | 24 +++++
 .../modules/form/field/input/text.directive.js  | 84 ++++++++++++++++++
 .../js/app/modules/form/field/input/text.jade   | 38 ++++++++
 .../app/modules/form/field/label.directive.js   | 41 +++++++++
 .../app/modules/form/field/tooltip.directive.js | 44 ++++++++++
 .../js/app/modules/form/field/up.directive.js   | 46 ++++++++++
 .../src/main/js/app/modules/form/form.module.js | 92 ++++++++++++++++++++
 .../js/app/modules/form/group/add.directive.js  | 40 +++++++++
 .../app/modules/form/group/group.directive.js   | 72 +++++++++++++++
 .../main/js/app/modules/form/group/group.jade   | 21 +++++
 .../app/modules/form/group/table.directive.js   | 29 ++++++
 .../main/js/app/modules/form/group/table.jade   | 17 ++++
 .../app/modules/form/group/tooltip.directive.js | 40 +++++++++
 .../app/modules/form/panel/chevron.directive.js | 53 +++++++++++
 .../app/modules/form/panel/panel.directive.js   | 37 ++++++++
 .../app/modules/form/panel/revert.directive.js  | 52 +++++++++++
 .../validator/java-built-in-class.directive.js  | 31 +++++++
 .../form/validator/java-identifier.directive.js | 31 +++++++
 .../form/validator/java-keywords.directive.js   | 40 +++++++++
 .../validator/java-package-name.directive.js    | 31 +++++++
 .../java-package-specified.directive.js         | 33 +++++++
 .../modules/form/validator/unique.directive.js  | 47 ++++++++++
 72 files changed, 1527 insertions(+), 1527 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/down.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/down.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/down.directive.js
deleted file mode 100644
index 0f21af2..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/down.directive.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-const template = `<i class='tipField fa fa-arrow-down ng-scope' ng-click='down()'></i>`;
-
-export default ['igniteFormFieldDown', ['$tooltip', ($tooltip) => {
-    const link = (scope, $element) => {
-        $tooltip($element, { title: 'Move item down' });
-
-        scope.down = () => {
-            const i = scope.models.indexOf(scope.model);
-            scope.models.splice(i, 1);
-            scope.models.splice(i + 1, 0, scope.model);
-        };
-    };
-
-    return {
-        restrict: 'E',
-        scope: {
-            model: '=ngModel',
-            models: '=models'
-        },
-        template,
-        link,
-        replace: true,
-        transclude: true,
-        require: '^form'
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.directive.js
deleted file mode 100644
index 919da94..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.directive.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './dropdown.jade!';
-
-export default ['igniteFormFieldDropdown', ['IgniteFormGUID', (guid) => {
-    const controller = () => {};
-
-    const link = (scope, $element, attrs, [form]) => {
-        const {id, name} = scope;
-
-        scope.id = id || guid();
-
-        form.$defaults = form.$defaults || {};
-        form.$defaults[name] = _.cloneDeep(scope.value);
-
-        const setAsDefault = () => {
-            if (!form.$pristine) return;
-
-            form.$defaults = form.$defaults || {};
-            form.$defaults[name] = _.cloneDeep(scope.value);
-        };
-
-        scope.$watch(() => form.$pristine, setAsDefault);
-        scope.$watch('value', setAsDefault);
-    };
-
-    return {
-        restrict: 'E',
-        scope: {
-            id: '@',
-            name: '@',
-            value: '=ngModel'
-        },
-        bindToController: {
-            value: '=ngModel',
-            placeholder: '@',
-            options: '=',
-            ngDisabled: '=',
-            multiple: '='
-        },
-        link,
-        template,
-        controller,
-        controllerAs: 'dropdown',
-        replace: true,
-        transclude: true,
-        require: ['^form', '?^igniteFormField']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.jade
deleted file mode 100644
index 6d4dd82..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/dropdown.jade
+++ /dev/null
@@ -1,51 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-.input-tip
-    button.select-toggle.form-control(
-        ng-if='dropdown.multiple'
-        id='{{ id }}'
-        name='{{ name }}'
-        data-placeholder='{{ dropdown.placeholder }}' 
-
-        bs-select 
-        bs-options='item.value as item.label for item in dropdown.options' 
-        data-multiple='1'
-
-        ng-model='dropdown.value'
-        ng-class='{ placeholder: value === undefined || value === null || !value.length }'
-        ng-disabled='dropdown.ngDisabled'
-
-        tabindex='0'
-    )
-
-    button.select-toggle.form-control(
-        ng-if='!dropdown.multiple'
-        id='{{ id }}'
-        name='{{ name }}'
-        data-placeholder='{{ dropdown.placeholder }}' 
-
-        bs-select 
-        bs-options='item.value as item.label for item in dropdown.options' 
-
-        ng-model='dropdown.value'
-        ng-class='{ placeholder: value === undefined || value === null || !value.length }'
-        ng-disabled='dropdown.ngDisabled'
-
-        tabindex='0'
-    )
-
-    span(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/field.css
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/field.css b/modules/control-center-web/src/main/js/app/modules/Form/field/field.css
deleted file mode 100644
index 66ceb90..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/field.css
+++ /dev/null
@@ -1,6 +0,0 @@
-.indexField {
-	float: left;
-    line-height: 28px;
-    margin-right: 5px;
-    color: #ec1c24;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/field.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/field.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/field.directive.js
deleted file mode 100644
index e02bebe..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/field.directive.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './field.jade!';
-import './field.css!';
-
-export default ['igniteFormField', [() => {
-    const controller = [function() {
-        const ctrl = this;
-
-        ctrl.type = ctrl.type || 'external';
-    }];
-
-    return {
-        restrict: 'E',
-        scope: {},
-        bindToController: {
-            for: '@',
-            label: '@',
-            type: '@'
-        },
-        template,
-        controller,
-        controllerAs: 'field',
-        replace: true,
-        transclude: true,
-        require: '^form'
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/field.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/field.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/field.jade
deleted file mode 100644
index 6d7c04a..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/field.jade
+++ /dev/null
@@ -1,26 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-div
-    div(ng-if='field.type == "external"')
-        label.col-xs-4.col-sm-4.col-md-4(
-            for='{{::field.for}}'
-            class='{{ field.required ? "required" : "" }}'
-        ) 
-            span(ng-if='field.label') {{::field.label}}:
-        .col-xs-8.col-sm-8.col-md-8(ng-transclude='')
-    div(ng-if='field.type == "internal"')
-        label.col-xs-12.col-sm-12.col-md-12(ng-transclude)       

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/form-control-feedback.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/form-control-feedback.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/form-control-feedback.directive.js
deleted file mode 100644
index ba3e7fe..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/form-control-feedback.directive.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['formControlFeedback', [() => {
-    const link = ($scope, $element, $attrs, [form]) => {
-        const name = $scope.name;
-        const err = $attrs.igniteError;
-        const msg = $attrs.igniteErrorMessage;
-
-        if (name && err && msg) {
-            form.$errorMessages = form.$errorMessages || {};
-            form.$errorMessages[name] = form.$errorMessages[name] || {};
-            form.$errorMessages[name][err] = msg;
-        }
-    };
-
-    return {
-        restrict: 'C',
-        link,
-        require: ['^form']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/input/autofocus.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/autofocus.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/input/autofocus.directive.js
deleted file mode 100644
index eeccc3f..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/autofocus.directive.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['igniteFormFieldInputAutofocus', [() => {
-    const link = (scope, el, attrs) => {
-        if (typeof attrs.igniteFormFieldInputAutofocus === 'undefined' || !attrs.igniteFormFieldInputAutofocus)
-            return;
-
-        el.focus();
-    };
-
-    return {
-        restrict: 'A',
-        link
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.directive.js
deleted file mode 100644
index d259718..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.directive.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './checkbox.jade!';
-
-export default ['igniteFormFieldInputCheckbox', ['IgniteFormGUID', (guid) => {
-    const link = (scope, el, attrs, [form, label]) => {
-        const {id, name} = scope;
-        const field = form[name];
-
-        scope.field = field;
-        label.for = scope.id = id || guid();
-
-        label.type = 'internal';
-
-        form.$defaults = form.$defaults || {};
-        form.$defaults[name] = _.cloneDeep(scope.value);
-
-        const setAsDefault = () => {
-            if (!form.$pristine) return;
-
-            form.$defaults = form.$defaults || {};
-            form.$defaults[name] = _.cloneDeep(scope.value);
-        };
-
-        scope.$watch(() => form.$pristine, setAsDefault);
-        scope.$watch('value', setAsDefault);
-    };
-
-    return {
-        restrict: 'E',
-        scope: {
-            id: '@',
-            name: '@',
-            required: '=ngRequired',
-            disabled: '=ngDisabled',
-
-            value: '=ngModel'
-        },
-        link,
-        template,
-        replace: true,
-        transclude: true,
-        require: ['^form', '?^igniteFormField']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.jade
deleted file mode 100644
index c3cd283..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/checkbox.jade
+++ /dev/null
@@ -1,28 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-.input-tip
-    input(
-        id='{{ id }}'
-        name='{{ name }}'
-        type='checkbox'
-
-        data-ng-model='value'
-        data-ng-required='required || false'
-        data-ng-disabled='disabled || false'
-    )
-
-    span(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.directive.js
deleted file mode 100644
index 9627965..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.directive.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './datalist.jade!';
-
-export default ['igniteFormFieldInputDatalist', ['IgniteFormGUID', (guid) => {
-    const link = (scope, $element, attrs, [form]) => {
-        const {id, name} = scope;
-
-        scope.id = id || guid();
-
-        form.$defaults = form.$defaults || {};
-        form.$defaults[name] = _.cloneDeep(scope.value);
-
-        const setAsDefault = () => {
-            if (!form.$pristine) return;
-
-            form.$defaults = form.$defaults || {};
-            form.$defaults[name] = _.cloneDeep(scope.value);
-        };
-
-        scope.$watch(() => form.$pristine, setAsDefault);
-        scope.$watch('value', setAsDefault);
-    };
-
-    return {
-        restrict: 'E',
-        scope: {
-            id: '@',
-            name: '@',
-            placeholder: '@',
-            disabled: '=ngDisabled',
-
-            options: '=',
-            value: '=ngModel'
-        },
-        link,
-        template,
-        replace: true,
-        transclude: true,
-        require: ['^form', '?^igniteFormField']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.jade
deleted file mode 100644
index 1002d03..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/datalist.jade
+++ /dev/null
@@ -1,33 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-.input-tip
-    input.form-control(
-        id='{{ id }}'
-        name='{{ name }}'
-        placeholder='{{ placeholder }}' 
-        data-min-length='1'
-
-        bs-typeahead
-        bs-options='item for item in options' 
-        retain-selection
-        container='body'
-
-        data-ng-model='value'
-        data-ng-disabled='disabled || false'
-    )
-
-    span(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.directive.js
deleted file mode 100644
index b88425f..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.directive.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './number.jade!';
-
-export default ['igniteFormFieldInputNumber', ['IgniteFormGUID', (guid) => {
-    const link = (scope, el, attrs, [form, label]) => {
-        const {id, name} = scope;
-        const field = form[name];
-
-        scope.field = field;
-        label.for = scope.id = id || guid();
-
-        form.$defaults = form.$defaults || {};
-        form.$defaults[name] = _.cloneDeep(scope.value);
-
-        const setAsDefault = () => {
-            if (!form.$pristine) return;
-
-            form.$defaults = form.$defaults || {};
-            form.$defaults[name] = _.cloneDeep(scope.value);
-        };
-
-        scope.$watch(() => form.$pristine, setAsDefault);
-        scope.$watch('value', setAsDefault);
-    };
-
-    return {
-        restrict: 'E',
-        scope: {
-            id: '@',
-            name: '@',
-            placeholder: '@',
-            required: '=ngRequired',
-            disabled: '=ngDisabled',
-
-            min: '@',
-            max: '@',
-            value: '=ngModel'
-        },
-        link,
-        template,
-        replace: true,
-        transclude: true,
-        require: ['^form', '?^igniteFormField']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.jade
deleted file mode 100644
index b032c46..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/number.jade
+++ /dev/null
@@ -1,44 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-mixin feedback(error, message)
-    i.fa.fa-exclamation-triangle.form-control-feedback(
-        ng-show='field.$error.#{error}'
-        bs-tooltip='"#{message}"'
-        ignite-error='#{error}'
-        ignite-error-message='#{message}'
-    )
-
-.input-tip
-    input.form-control(
-        id='{{ id }}'
-        name='{{ name }}'
-        placeholder='{{ placeholder }}'
-        type='number'
-        min='{{ min || 0 }}'
-        max='{{ max || Number.MAX_VALUE }}'
-
-        data-ng-model='value'
-        data-ng-required='required || false'
-        data-ng-disabled='disabled || false'
-        data-ng-model-options='{debounce: 150}'
-    )
-
-    +feedback('min', 'Value is less than allowable minimum')
-    +feedback('max', 'Value is more than allowable maximum')
-    +feedback('number', 'Invalid value. Only numbers allowed')
-
-    span(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.css
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.css b/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.css
deleted file mode 100644
index 9efdb2c..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.css
+++ /dev/null
@@ -1,24 +0,0 @@
-label .input-tip {
-	position: initial;
-}
-
-.input-tip .fa-floppy-o {
-	position: absolute;
-    top: 0;
-    right: 0;
-    z-index: 2;
-
-    width: 34px;
-    height: 34px;
-
-    text-align: center;
-
-    display: inline-block;
-    line-height: 28px;
-    pointer-events: initial;
-}
-
-.input-tip .form-control-feedback {
-    height: auto;
-}
-

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.directive.js
deleted file mode 100644
index 1cb8e92..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.directive.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './text.jade!';
-import './text.css!';
-
-export default ['igniteFormFieldInputText', ['IgniteFormGUID', (guid) => {
-    const link = (scope, el, attrs, [ngModel, form, label]) => {
-        const {id, name} = scope;
-
-        label.for = scope.id = id || guid();
-
-        scope.label = label;
-        scope.ngModel = ngModel;
-        scope.$watch('required', (required) => {
-            label.required = required || false;
-        });
-
-        form.$defaults = form.$defaults || {};
-        form.$defaults[name] = _.cloneDeep(scope.value);
-
-        const setAsDefault = () => {
-            if (!form.$pristine) return;
-
-            form.$defaults = form.$defaults || {};
-            form.$defaults[name] = _.cloneDeep(scope.value);
-        };
-
-        scope.$watch(() => form.$pristine, setAsDefault);
-        scope.$watch('value', setAsDefault);
-
-        scope.ngChange = function() {
-            ngModel.$setViewValue(scope.value);
-
-            if (JSON.stringify(scope.value) !== JSON.stringify(form.$defaults[name]))
-                ngModel.$setDirty();
-            else
-                ngModel.$setPristine();
-
-            if (ngModel.$valid)
-                el.find('input').addClass('ng-valid').removeClass('ng-invalid');
-            else
-                el.find('input').removeClass('ng-valid').addClass('ng-invalid');
-        };
-
-        ngModel.$render = function() {
-            scope.value = ngModel.$modelValue;
-        };
-    };
-
-    return {
-        restrict: 'E',
-        scope: {
-            id: '@',
-            name: '@',
-            placeholder: '@',
-            required: '=ngRequired',
-            disabled: '=ngDisabled',
-
-            ngBlur: '&',
-
-            autofocus: '=igniteFormFieldInputAutofocus'
-        },
-        link,
-        template,
-        replace: true,
-        transclude: true,
-        require: ['ngModel', '^form', '?^igniteFormField']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.jade b/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.jade
deleted file mode 100644
index 28298ab..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/input/text.jade
+++ /dev/null
@@ -1,38 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-.input-tip
-    input.form-control(
-        id='{{ id }}'
-        placeholder='{{ placeholder }}' 
-        type='text' 
-
-        data-ng-model='value'
-        data-ng-blur='ngBlur()'
-        data-ng-change='ngChange()'
-        data-ng-required='required || false'
-        data-ng-disabled='disabled || false'
-        data-ng-model-options='{debounce: 150}'
-
-        data-ignite-form-field-input-autofocus='autofocus || false'
-    )
-
-    i.fa.fa-exclamation-triangle.form-control-feedback(
-        ng-if='!ngModel.$pristine && ngModel.$error.required'
-        bs-tooltip='"{{ label.name }} could not be empty!"'
-    )
-
-    span(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/label.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/label.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/label.directive.js
deleted file mode 100644
index d22df2c..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/label.directive.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['igniteFormFieldLabel', [() => {
-    return {
-        restrict: 'E',
-        compile() {
-            return {
-                post($scope, $element, $attrs, [form, field], $transclude) {
-                    $transclude($scope, function(clone) {
-                        const text = clone.text();
-
-                        if (/(.*):$/.test(text))
-                            field.name = /(.*):$/.exec(text)[1];
-
-                        const $label = $element.parent().parent().find('label');
-
-                        $label.append(clone);
-                    });
-                }
-            };
-        },
-        replace: true,
-        transclude: true,
-        require: ['^form', '?^igniteFormField']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/tooltip.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/tooltip.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/tooltip.directive.js
deleted file mode 100644
index 78aa8fd..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/tooltip.directive.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const template = `<i class='tipField fa fa-question-circle'></i>`;
-
-export default ['igniteFormFieldTooltip', ['$tooltip', ($tooltip) => {
-    const link = ($scope, $element, $attrs, $ctrls, $transclude) => {
-        const content = Array.prototype.slice.apply($transclude($scope))
-            .reduce((html, el) => html += el.outerHTML, '');
-
-        $tooltip($element, { title: content });
-
-        // TODO cleanup css styles.
-        if ($element.hasClass('tipLabel'))
-            $element.removeClass('tipField');
-
-        if ($element.parent('label').length)
-            $element.addClass('tipLabel').removeClass('tipField');
-    };
-
-    return {
-        restrict: 'E',
-        scope: {},
-        template,
-        link,
-        replace: true,
-        transclude: true,
-        require: '^form'
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/field/up.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/field/up.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/field/up.directive.js
deleted file mode 100644
index d591eac..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/field/up.directive.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-const template = `<i class='tipField fa fa-arrow-up ng-scope' ng-click='up()'></i>`;
-
-export default ['igniteFormFieldUp', ['$tooltip', ($tooltip) => {
-    const link = (scope, $element) => {
-        $tooltip($element, { title: 'Move item up' });
-
-        scope.up = () => {
-            const idx = scope.models.indexOf(scope.model);
-
-            scope.models.splice(idx, 1);
-            scope.models.splice(idx - 1, 0, scope.model);
-        };
-    };
-
-    return {
-        restrict: 'E',
-        scope: {
-            model: '=ngModel',
-            models: '=models'
-        },
-        template,
-        link,
-        replace: true,
-        transclude: true,
-        require: '^form'
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/form.module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/form.module.js b/modules/control-center-web/src/main/js/app/modules/Form/form.module.js
deleted file mode 100644
index aac831d..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/form.module.js
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import angular from 'angular';
-
-// Panel.
-import igniteFormPanel from './panel/panel.directive';
-import igniteFormPanelChevron from './panel/chevron.directive';
-import igniteFormRevert from './panel/revert.directive';
-
-// Field.
-import igniteFormField from './field/field.directive';
-import igniteFormFieldLabel from './field/label.directive';
-import igniteFormFieldTooltip from './field/tooltip.directive';
-import igniteFormFieldDropdown from './field/dropdown.directive';
-import igniteFormFieldInputNumber from './field/input/number.directive';
-import igniteFormFieldInputText from './field/input/text.directive';
-import igniteFormFieldInputCheckbox from './field/input/checkbox.directive';
-import igniteFormFieldInputDatalist from './field/input/datalist.directive';
-
-// Group.
-import igniteFormGroup from './group/group.directive';
-import igniteFormGroupAdd from './group/add.directive';
-import igniteFormGroupTooltip from './group/tooltip.directive';
-
-// Validators.
-import javaKeywords from './validator/java-keywords.directive';
-import javaPackageSpecified from './validator/java-package-specified.directive';
-import javaBuiltInClass from './validator/java-built-in-class.directive';
-import javaIdentifier from './validator/java-identifier.directive';
-import javaPackageName from './validator/java-package-name.directive';
-import unique from './validator/unique.directive';
-
-// Helpers.
-import igniteFormFieldInputAutofocus from './field/input/autofocus.directive';
-import igniteFormFieldUp from './field/up.directive';
-import igniteFormFieldDown from './field/down.directive';
-import igniteFormControlFeedback from './field/form-control-feedback.directive';
-
-angular
-.module('ignite-console.Form', [
-
-])
-// Panel.
-.directive(...igniteFormPanel)
-.directive(...igniteFormPanelChevron)
-.directive(...igniteFormRevert)
-// Field.
-.directive(...igniteFormField)
-.directive(...igniteFormFieldLabel)
-.directive(...igniteFormFieldTooltip)
-.directive(...igniteFormFieldDropdown)
-.directive(...igniteFormFieldInputNumber)
-.directive(...igniteFormFieldInputText)
-.directive(...igniteFormFieldInputCheckbox)
-.directive(...igniteFormFieldInputDatalist)
-// Group.
-.directive(...igniteFormGroup)
-.directive(...igniteFormGroupAdd)
-.directive(...igniteFormGroupTooltip)
-// Validators.
-.directive(...javaKeywords)
-.directive(...javaPackageSpecified)
-.directive(...javaBuiltInClass)
-.directive(...javaIdentifier)
-.directive(...javaPackageName)
-.directive(...unique)
-// Helpers.
-.directive(...igniteFormFieldInputAutofocus)
-.directive(...igniteFormFieldUp)
-.directive(...igniteFormFieldDown)
-.directive(...igniteFormControlFeedback)
-// Generator of globally unique identifier.
-.factory('IgniteFormGUID', [() => {
-    let guid = 0;
-
-    return () => `form-field-${guid++}`;
-}]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/group/add.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/add.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/group/add.directive.js
deleted file mode 100644
index 6d79026..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/group/add.directive.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const template = `<i class='group-legend-btn fa fa-plus'></i>`;
-
-export default ['igniteFormGroupAdd', ['$tooltip', ($tooltip) => {
-    const link = ($scope, $element, $attrs, $ctrls, $transclude) => {
-        const content = Array.prototype.slice
-        .apply($transclude($scope))
-        .reduce((html, el) => html += el.outerHTML, '');
-
-        $tooltip($element, { title: content });
-
-        $element.closest('.group').find('.group-legend').append($element);
-    };
-
-    return {
-        restrict: 'E',
-        scope: {},
-        template,
-        link,
-        replace: true,
-        transclude: true,
-        require: ['^form', '^igniteFormGroup']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/group/group.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/group.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/group/group.directive.js
deleted file mode 100644
index db03503..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/group/group.directive.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './group.jade!';
-
-export default ['igniteFormGroup', [() => {
-    const controller = [function() { }];
-
-    const link = (scope, el, attrs, [ngModelCtrl, ownFormCtrl, parentFormCtrl]) => {
-        const name = attrs.ngForm;
-        ngModelCtrl.$name = name;
-
-        parentFormCtrl.$addControl(ngModelCtrl);
-        parentFormCtrl.$removeControl(ownFormCtrl);
-
-        scope.value = scope.value || [];
-        parentFormCtrl.$defaults = parentFormCtrl.$defaults || {};
-        parentFormCtrl.$defaults[name] = _.cloneDeep(scope.value);
-
-        const setAsDefault = () => {
-            if (!parentFormCtrl.$pristine)
-                return;
-
-            scope.value = scope.value || [];
-            parentFormCtrl.$defaults = parentFormCtrl.$defaults || {};
-            parentFormCtrl.$defaults[name] = _.cloneDeep(scope.value);
-        };
-
-        const setAsDirty = () => {
-            if (JSON.stringify(scope.value) !== JSON.stringify(parentFormCtrl.$defaults[name]))
-                ngModelCtrl.$setDirty();
-            else
-                ngModelCtrl.$setPristine();
-        };
-
-        scope.$watch(() => parentFormCtrl.$pristine, setAsDefault);
-
-        scope.$watch('value', setAsDefault);
-        scope.$watch('value', setAsDirty, true);
-    };
-
-    return {
-        restrict: 'E',
-        scope: {
-            value: '=ngModel'
-        },
-        bindToController: {
-            label: '@'
-        },
-        link,
-        template,
-        controller,
-        controllerAs: 'group',
-        replace: true,
-        transclude: true,
-        require: ['ngModel', '?form', '^^form']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/group/group.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/group.jade b/modules/control-center-web/src/main/js/app/modules/Form/group/group.jade
deleted file mode 100644
index ba3a8f2..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/group/group.jade
+++ /dev/null
@@ -1,21 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-.group-section
-    .group
-        .group-legend
-            label {{::group.label}}
-        div(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/group/table.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/table.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/group/table.directive.js
deleted file mode 100644
index 520f8c2..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/group/table.directive.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './table.jade!';
-
-export default ['igniteFormGroupTable', [() => {
-    return {
-        restrict: 'E',
-        scope: {},
-        template,
-        replace: true,
-        transclude: true,
-        require: ['^form', '^igniteFormGroup']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/group/table.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/table.jade b/modules/control-center-web/src/main/js/app/modules/Form/group/table.jade
deleted file mode 100644
index 6f9486d..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/group/table.jade
+++ /dev/null
@@ -1,17 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-div
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/group/tooltip.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/group/tooltip.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/group/tooltip.directive.js
deleted file mode 100644
index 5af8fb1..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/group/tooltip.directive.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const template = `<i class='group-legend-btn fa fa-question-circle'></i>`;
-
-export default ['igniteFormGroupTooltip', ['$tooltip', ($tooltip) => {
-    const link = ($scope, $element, $attrs, $ctrls, $transclude) => {
-        const content = Array.prototype.slice
-        .apply($transclude($scope))
-        .reduce((html, el) => html += el.outerHTML, '');
-
-        $tooltip($element, { title: content });
-
-        $element.closest('.group').find('.group-legend').append($element);
-    };
-
-    return {
-        restrict: 'E',
-        scope: {},
-        template,
-        link,
-        replace: true,
-        transclude: true,
-        require: ['^form', '^igniteFormGroup']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/panel/chevron.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/panel/chevron.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/panel/chevron.directive.js
deleted file mode 100644
index 9f7e1d0..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/panel/chevron.directive.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const template = `<i class='fa' ng-class='isOpen ? "fa-chevron-circle-down" : "fa-chevron-circle-right"'></i>`;
-
-export default ['igniteFormPanelChevron', [() => {
-    const controller = [() => {}];
-
-    const link = ($scope, $element, $attrs, [bsCollapseCtrl]) => {
-        const $target = $element.parent().parent().find('.panel-collapse');
-
-        bsCollapseCtrl.$viewChangeListeners.push(function() {
-            const index = bsCollapseCtrl.$targets.reduce((acc, el, i) => {
-                if (el[0] === $target[0])
-                    acc.push(i);
-
-                return acc;
-            }, [])[0];
-
-            $scope.isOpen = false;
-
-            const active = bsCollapseCtrl.$activeIndexes();
-
-            if ((active instanceof Array) && active.indexOf(index) !== -1 || active === index)
-                $scope.isOpen = true;
-        });
-    };
-
-    return {
-        restrict: 'E',
-        scope: {},
-        link,
-        template,
-        controller,
-        replace: true,
-        transclude: true,
-        require: ['^bsCollapse']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/panel/panel.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/panel/panel.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/panel/panel.directive.js
deleted file mode 100644
index b8e7c25..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/panel/panel.directive.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['form', [() => {
-    const link = (scope, $element, $attrs, [form]) => {
-        const $form = $element.parent().closest('form');
-
-        scope.$watch(() => {
-            return $form.hasClass('ng-pristine');
-        }, (value) => {
-            if (!value)
-                return;
-
-            form.$setPristine();
-        });
-    };
-
-    return {
-        restrict: 'E',
-        link,
-        require: ['^form']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/panel/revert.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/panel/revert.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/panel/revert.directive.js
deleted file mode 100644
index 874b466..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/panel/revert.directive.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const template = `<i ng-show='form.$dirty' class='fa fa-undo pull-right' ng-click='revert($event)'></i>`;
-
-export default ['igniteFormRevert', ['$tooltip', ($tooltip) => {
-    const link = (scope, $element, $attrs, [form]) => {
-        $tooltip($element, { title: 'Undo unsaved changes' });
-
-        scope.form = form;
-
-        scope.revert = (e) => {
-            e.stopPropagation();
-
-            for (const name in form.$defaults) {
-                if ({}.hasOwnProperty.call(form.$defaults, name) && form[name]) {
-                    form[name].$setViewValue(form.$defaults[name]);
-                    form[name].$setPristine();
-                    form[name].$render();
-                }
-            }
-
-            form.$setPristine();
-        };
-    };
-
-    return {
-        restrict: 'E',
-        scope: {
-            model: '=ngModel',
-            models: '=models'
-        },
-        template,
-        link,
-        replace: true,
-        require: ['^form']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-built-in-class.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-built-in-class.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-built-in-class.directive.js
deleted file mode 100644
index caa268d..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-built-in-class.directive.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['javaBuiltInClass', ['JavaTypes', (JavaTypes) => {
-    const link = (scope, el, attrs, [ngModel]) => {
-        if (typeof attrs.javaBuiltInClass === 'undefined' || !attrs.javaBuiltInClass)
-            return;
-
-        ngModel.$validators.javaBuiltInClass = JavaTypes.nonBuiltInClass;
-    };
-
-    return {
-        restrict: 'A',
-        link,
-        require: ['ngModel']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-identifier.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-identifier.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-identifier.directive.js
deleted file mode 100644
index 81a48a3..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-identifier.directive.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['javaIdentifier', ['JavaTypes', (JavaTypes) => {
-    const link = (scope, el, attrs, [ngModel]) => {
-        if (typeof attrs.javaIdentifier === 'undefined' || !attrs.javaIdentifier)
-            return;
-
-        ngModel.$validators.javaIdentifier = JavaTypes.validIdentifier;
-    };
-
-    return {
-        restrict: 'A',
-        link,
-        require: ['ngModel']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js
deleted file mode 100644
index 8faae6d..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-keywords.directive.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['javaKeywords', ['JavaTypes', (JavaTypes) => {
-    const link = (scope, el, attrs, [ngModel]) => {
-        if (typeof attrs.javaKeywords === 'undefined' || !attrs.javaKeywords)
-            return;
-
-        ngModel.$validators.javaKeywords = (value) => {
-            if (value) {
-                for (const item of value.split('.')) {
-                    if (JavaTypes.isKeywords(item))
-                        return false;
-                }
-            }
-
-            return true;
-        };
-    };
-
-    return {
-        restrict: 'A',
-        link,
-        require: ['ngModel']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-name.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-name.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-name.directive.js
deleted file mode 100644
index 173e118..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-name.directive.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['javaPackageName', ['JavaTypes', (JavaTypes) => {
-    const link = (scope, el, attrs, [ngModel]) => {
-        if (typeof attrs.javaPackageName === 'undefined' || !attrs.javaPackageName)
-            return;
-
-        ngModel.$validators.javaPackageName = JavaTypes.validPackage;
-    };
-
-    return {
-        restrict: 'A',
-        link,
-        require: ['ngModel']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-specified.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-specified.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-specified.directive.js
deleted file mode 100644
index 9ba43f3..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/validator/java-package-specified.directive.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['javaPackageSpecified', [() => {
-    const link = (scope, el, attrs, [ngModel]) => {
-        if (typeof attrs.javaPackageSpecified === 'undefined' || !attrs.javaPackageSpecified)
-            return;
-
-        ngModel.$validators.javaPackageSpecified = (value) => {
-            return !value || !(value.split('.').length < 2);
-        };
-    };
-
-    return {
-        restrict: 'A',
-        link,
-        require: ['ngModel']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/Form/validator/unique.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/validator/unique.directive.js b/modules/control-center-web/src/main/js/app/modules/Form/validator/unique.directive.js
deleted file mode 100644
index 905a595..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/validator/unique.directive.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default ['igniteUnique', ['$parse', ($parse) => {
-    const link = (scope, el, attrs, [ngModel]) => {
-        if (typeof attrs.igniteUnique === 'undefined' || !attrs.igniteUnique)
-            return;
-
-        ngModel.$validators.igniteUnique = (value) => {
-            const arr = $parse(attrs.igniteUnique)(scope);
-
-            // Return true in case if array not exist, array empty.
-            if (!arr || !arr.length)
-                return true;
-
-            const name = attrs.name;
-            const idx = arr.indexOf(value);
-
-            // In case of new element check all items.
-            if (name === 'new')
-                return idx < 0;
-
-            // Check for $index in case of editing in-place.
-            return (_.isNumber(scope.$index) && (idx < 0 || scope.$index === idx));
-        };
-    };
-
-    return {
-        restrict: 'A',
-        link,
-        require: ['ngModel']
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/down.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/down.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/down.directive.js
new file mode 100644
index 0000000..0f21af2
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/down.directive.js
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+
+
+
+const template = `<i class='tipField fa fa-arrow-down ng-scope' ng-click='down()'></i>`;
+
+export default ['igniteFormFieldDown', ['$tooltip', ($tooltip) => {
+    const link = (scope, $element) => {
+        $tooltip($element, { title: 'Move item down' });
+
+        scope.down = () => {
+            const i = scope.models.indexOf(scope.model);
+            scope.models.splice(i, 1);
+            scope.models.splice(i + 1, 0, scope.model);
+        };
+    };
+
+    return {
+        restrict: 'E',
+        scope: {
+            model: '=ngModel',
+            models: '=models'
+        },
+        template,
+        link,
+        replace: true,
+        transclude: true,
+        require: '^form'
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/dropdown.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/dropdown.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/dropdown.directive.js
new file mode 100644
index 0000000..919da94
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/dropdown.directive.js
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './dropdown.jade!';
+
+export default ['igniteFormFieldDropdown', ['IgniteFormGUID', (guid) => {
+    const controller = () => {};
+
+    const link = (scope, $element, attrs, [form]) => {
+        const {id, name} = scope;
+
+        scope.id = id || guid();
+
+        form.$defaults = form.$defaults || {};
+        form.$defaults[name] = _.cloneDeep(scope.value);
+
+        const setAsDefault = () => {
+            if (!form.$pristine) return;
+
+            form.$defaults = form.$defaults || {};
+            form.$defaults[name] = _.cloneDeep(scope.value);
+        };
+
+        scope.$watch(() => form.$pristine, setAsDefault);
+        scope.$watch('value', setAsDefault);
+    };
+
+    return {
+        restrict: 'E',
+        scope: {
+            id: '@',
+            name: '@',
+            value: '=ngModel'
+        },
+        bindToController: {
+            value: '=ngModel',
+            placeholder: '@',
+            options: '=',
+            ngDisabled: '=',
+            multiple: '='
+        },
+        link,
+        template,
+        controller,
+        controllerAs: 'dropdown',
+        replace: true,
+        transclude: true,
+        require: ['^form', '?^igniteFormField']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/dropdown.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/dropdown.jade b/modules/control-center-web/src/main/js/app/modules/form/field/dropdown.jade
new file mode 100644
index 0000000..6d4dd82
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/dropdown.jade
@@ -0,0 +1,51 @@
+//-
+    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.
+
+.input-tip
+    button.select-toggle.form-control(
+        ng-if='dropdown.multiple'
+        id='{{ id }}'
+        name='{{ name }}'
+        data-placeholder='{{ dropdown.placeholder }}' 
+
+        bs-select 
+        bs-options='item.value as item.label for item in dropdown.options' 
+        data-multiple='1'
+
+        ng-model='dropdown.value'
+        ng-class='{ placeholder: value === undefined || value === null || !value.length }'
+        ng-disabled='dropdown.ngDisabled'
+
+        tabindex='0'
+    )
+
+    button.select-toggle.form-control(
+        ng-if='!dropdown.multiple'
+        id='{{ id }}'
+        name='{{ name }}'
+        data-placeholder='{{ dropdown.placeholder }}' 
+
+        bs-select 
+        bs-options='item.value as item.label for item in dropdown.options' 
+
+        ng-model='dropdown.value'
+        ng-class='{ placeholder: value === undefined || value === null || !value.length }'
+        ng-disabled='dropdown.ngDisabled'
+
+        tabindex='0'
+    )
+
+    span(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/field.css
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/field.css b/modules/control-center-web/src/main/js/app/modules/form/field/field.css
new file mode 100644
index 0000000..66ceb90
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/field.css
@@ -0,0 +1,6 @@
+.indexField {
+	float: left;
+    line-height: 28px;
+    margin-right: 5px;
+    color: #ec1c24;
+}
\ No newline at end of file


[4/4] ignite git commit: IGNITE-843 es6.

Posted by an...@apache.org.
IGNITE-843 es6.


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

Branch: refs/heads/ignite-843-rc2
Commit: 7612c220488a61a6ad48ea89b85bc64f450f267a
Parents: a84f6b6
Author: Andrey <an...@gridgain.com>
Authored: Mon Feb 8 17:13:46 2016 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Mon Feb 8 17:13:46 2016 +0700

----------------------------------------------------------------------
 .../main/js/app/modules/user/Auth.service.js    | 96 ++++++++++----------
 1 file changed, 46 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7612c220/modules/control-center-web/src/main/js/app/modules/user/Auth.service.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/user/Auth.service.js b/modules/control-center-web/src/main/js/app/modules/user/Auth.service.js
index 3e194e7..0690cfa 100644
--- a/modules/control-center-web/src/main/js/app/modules/user/Auth.service.js
+++ b/modules/control-center-web/src/main/js/app/modules/user/Auth.service.js
@@ -16,62 +16,58 @@
  */
 
 export default ['Auth', ['$http', '$rootScope', '$state', '$common', 'IgniteGettingStarted', 'User',
-    function($http, $root, $state, $common, gettingStarted, User) {
-    let _auth = false;
+    ($http, $root, $state, $common, gettingStarted, User) => {
+        let _auth = false;
 
-    try {
-        _auth = localStorage.authorized === 'true';
-    }
-    catch (ignore) {
-        // No-op.
-    }
-
-    function _authorized(value) {
         try {
-            return _auth = localStorage.authorized = !!value;
-        } catch (ignore) {
-            return _auth = !!value;
+            _auth = localStorage.authorized === 'true';
+        }
+        catch (ignore) {
+            // No-op.
         }
-    }
 
-    return {
-        get authorized() {
-            return _auth;
-        },
-        set authorized(auth) {
-            _authorized(auth);
-        },
-        auth(action, userInfo) {
-            $http.post('/api/v1/' + action, userInfo)
-                .then(User.read)
-                .then((user) => {
-                    if (action !== 'password/forgot') {
-                        _authorized(true);
+        function _authorized(value) {
+            try {
+                return _auth = localStorage.authorized = !!value;
+            } catch (ignore) {
+                return _auth = !!value;
+            }
+        }
 
-                        $root.$broadcast('user', user);
+        return {
+            get authorized() {
+                return _auth;
+            },
+            set authorized(auth) {
+                _authorized(auth);
+            },
+            auth(action, userInfo) {
+                $http.post('/api/v1/' + action, userInfo)
+                    .then(User.read)
+                    .then((user) => {
+                        if (action !== 'password/forgot') {
+                            _authorized(true);
 
-                        $state.go('base.configuration.clusters');
+                            $root.$broadcast('user', user);
 
-                        $root.gettingStarted.tryShow();
-                    } else
-                        $state.go('password.send');
-                })
-                .catch(function(errMsg) {
-                    $common.showPopoverMessage(null, null, 'user_email', errMsg.data);
-                });
-        },
-        logout() {
-            $http.post('/api/v1/logout')
-                .then(function() {
-                    User.clean();
+                            $state.go('base.configuration.clusters');
 
-                    _authorized(false);
+                            $root.gettingStarted.tryShow();
+                        } else
+                            $state.go('password.send');
+                    })
+                    .catch((errMsg) => $common.showPopoverMessage(null, null, 'user_email', errMsg.data));
+            },
+            logout() {
+                $http.post('/api/v1/logout')
+                    .then(() => {
+                        User.clean();
 
-                    $state.go('login');
-                })
-                .catch(function(errMsg) {
-                    $common.showError(errMsg);
-                });
-        }
-    };
-}]];
+                        _authorized(false);
+
+                        $state.go('login');
+                    })
+                    .catch((errMsg) => $common.showError(errMsg));
+            }
+        };
+    }]];


[2/4] ignite git commit: IGNITE-843 changed case of dir

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/field.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/field.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/field.directive.js
new file mode 100644
index 0000000..e02bebe
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/field.directive.js
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './field.jade!';
+import './field.css!';
+
+export default ['igniteFormField', [() => {
+    const controller = [function() {
+        const ctrl = this;
+
+        ctrl.type = ctrl.type || 'external';
+    }];
+
+    return {
+        restrict: 'E',
+        scope: {},
+        bindToController: {
+            for: '@',
+            label: '@',
+            type: '@'
+        },
+        template,
+        controller,
+        controllerAs: 'field',
+        replace: true,
+        transclude: true,
+        require: '^form'
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/field.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/field.jade b/modules/control-center-web/src/main/js/app/modules/form/field/field.jade
new file mode 100644
index 0000000..6d7c04a
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/field.jade
@@ -0,0 +1,26 @@
+//-
+    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
+    div(ng-if='field.type == "external"')
+        label.col-xs-4.col-sm-4.col-md-4(
+            for='{{::field.for}}'
+            class='{{ field.required ? "required" : "" }}'
+        ) 
+            span(ng-if='field.label') {{::field.label}}:
+        .col-xs-8.col-sm-8.col-md-8(ng-transclude='')
+    div(ng-if='field.type == "internal"')
+        label.col-xs-12.col-sm-12.col-md-12(ng-transclude)       

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/form-control-feedback.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/form-control-feedback.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/form-control-feedback.directive.js
new file mode 100644
index 0000000..ba3e7fe
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/form-control-feedback.directive.js
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+export default ['formControlFeedback', [() => {
+    const link = ($scope, $element, $attrs, [form]) => {
+        const name = $scope.name;
+        const err = $attrs.igniteError;
+        const msg = $attrs.igniteErrorMessage;
+
+        if (name && err && msg) {
+            form.$errorMessages = form.$errorMessages || {};
+            form.$errorMessages[name] = form.$errorMessages[name] || {};
+            form.$errorMessages[name][err] = msg;
+        }
+    };
+
+    return {
+        restrict: 'C',
+        link,
+        require: ['^form']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/input/autofocus.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/input/autofocus.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/input/autofocus.directive.js
new file mode 100644
index 0000000..eeccc3f
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/input/autofocus.directive.js
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+
+export default ['igniteFormFieldInputAutofocus', [() => {
+    const link = (scope, el, attrs) => {
+        if (typeof attrs.igniteFormFieldInputAutofocus === 'undefined' || !attrs.igniteFormFieldInputAutofocus)
+            return;
+
+        el.focus();
+    };
+
+    return {
+        restrict: 'A',
+        link
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/input/checkbox.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/input/checkbox.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/input/checkbox.directive.js
new file mode 100644
index 0000000..d259718
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/input/checkbox.directive.js
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './checkbox.jade!';
+
+export default ['igniteFormFieldInputCheckbox', ['IgniteFormGUID', (guid) => {
+    const link = (scope, el, attrs, [form, label]) => {
+        const {id, name} = scope;
+        const field = form[name];
+
+        scope.field = field;
+        label.for = scope.id = id || guid();
+
+        label.type = 'internal';
+
+        form.$defaults = form.$defaults || {};
+        form.$defaults[name] = _.cloneDeep(scope.value);
+
+        const setAsDefault = () => {
+            if (!form.$pristine) return;
+
+            form.$defaults = form.$defaults || {};
+            form.$defaults[name] = _.cloneDeep(scope.value);
+        };
+
+        scope.$watch(() => form.$pristine, setAsDefault);
+        scope.$watch('value', setAsDefault);
+    };
+
+    return {
+        restrict: 'E',
+        scope: {
+            id: '@',
+            name: '@',
+            required: '=ngRequired',
+            disabled: '=ngDisabled',
+
+            value: '=ngModel'
+        },
+        link,
+        template,
+        replace: true,
+        transclude: true,
+        require: ['^form', '?^igniteFormField']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/input/checkbox.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/input/checkbox.jade b/modules/control-center-web/src/main/js/app/modules/form/field/input/checkbox.jade
new file mode 100644
index 0000000..c3cd283
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/input/checkbox.jade
@@ -0,0 +1,28 @@
+//-
+    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.
+
+.input-tip
+    input(
+        id='{{ id }}'
+        name='{{ name }}'
+        type='checkbox'
+
+        data-ng-model='value'
+        data-ng-required='required || false'
+        data-ng-disabled='disabled || false'
+    )
+
+    span(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/input/datalist.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/input/datalist.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/input/datalist.directive.js
new file mode 100644
index 0000000..9627965
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/input/datalist.directive.js
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './datalist.jade!';
+
+export default ['igniteFormFieldInputDatalist', ['IgniteFormGUID', (guid) => {
+    const link = (scope, $element, attrs, [form]) => {
+        const {id, name} = scope;
+
+        scope.id = id || guid();
+
+        form.$defaults = form.$defaults || {};
+        form.$defaults[name] = _.cloneDeep(scope.value);
+
+        const setAsDefault = () => {
+            if (!form.$pristine) return;
+
+            form.$defaults = form.$defaults || {};
+            form.$defaults[name] = _.cloneDeep(scope.value);
+        };
+
+        scope.$watch(() => form.$pristine, setAsDefault);
+        scope.$watch('value', setAsDefault);
+    };
+
+    return {
+        restrict: 'E',
+        scope: {
+            id: '@',
+            name: '@',
+            placeholder: '@',
+            disabled: '=ngDisabled',
+
+            options: '=',
+            value: '=ngModel'
+        },
+        link,
+        template,
+        replace: true,
+        transclude: true,
+        require: ['^form', '?^igniteFormField']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/input/datalist.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/input/datalist.jade b/modules/control-center-web/src/main/js/app/modules/form/field/input/datalist.jade
new file mode 100644
index 0000000..1002d03
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/input/datalist.jade
@@ -0,0 +1,33 @@
+//-
+    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.
+
+.input-tip
+    input.form-control(
+        id='{{ id }}'
+        name='{{ name }}'
+        placeholder='{{ placeholder }}' 
+        data-min-length='1'
+
+        bs-typeahead
+        bs-options='item for item in options' 
+        retain-selection
+        container='body'
+
+        data-ng-model='value'
+        data-ng-disabled='disabled || false'
+    )
+
+    span(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/input/number.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/input/number.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/input/number.directive.js
new file mode 100644
index 0000000..b88425f
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/input/number.directive.js
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './number.jade!';
+
+export default ['igniteFormFieldInputNumber', ['IgniteFormGUID', (guid) => {
+    const link = (scope, el, attrs, [form, label]) => {
+        const {id, name} = scope;
+        const field = form[name];
+
+        scope.field = field;
+        label.for = scope.id = id || guid();
+
+        form.$defaults = form.$defaults || {};
+        form.$defaults[name] = _.cloneDeep(scope.value);
+
+        const setAsDefault = () => {
+            if (!form.$pristine) return;
+
+            form.$defaults = form.$defaults || {};
+            form.$defaults[name] = _.cloneDeep(scope.value);
+        };
+
+        scope.$watch(() => form.$pristine, setAsDefault);
+        scope.$watch('value', setAsDefault);
+    };
+
+    return {
+        restrict: 'E',
+        scope: {
+            id: '@',
+            name: '@',
+            placeholder: '@',
+            required: '=ngRequired',
+            disabled: '=ngDisabled',
+
+            min: '@',
+            max: '@',
+            value: '=ngModel'
+        },
+        link,
+        template,
+        replace: true,
+        transclude: true,
+        require: ['^form', '?^igniteFormField']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/input/number.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/input/number.jade b/modules/control-center-web/src/main/js/app/modules/form/field/input/number.jade
new file mode 100644
index 0000000..b032c46
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/input/number.jade
@@ -0,0 +1,44 @@
+//-
+    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.
+
+mixin feedback(error, message)
+    i.fa.fa-exclamation-triangle.form-control-feedback(
+        ng-show='field.$error.#{error}'
+        bs-tooltip='"#{message}"'
+        ignite-error='#{error}'
+        ignite-error-message='#{message}'
+    )
+
+.input-tip
+    input.form-control(
+        id='{{ id }}'
+        name='{{ name }}'
+        placeholder='{{ placeholder }}'
+        type='number'
+        min='{{ min || 0 }}'
+        max='{{ max || Number.MAX_VALUE }}'
+
+        data-ng-model='value'
+        data-ng-required='required || false'
+        data-ng-disabled='disabled || false'
+        data-ng-model-options='{debounce: 150}'
+    )
+
+    +feedback('min', 'Value is less than allowable minimum')
+    +feedback('max', 'Value is more than allowable maximum')
+    +feedback('number', 'Invalid value. Only numbers allowed')
+
+    span(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/input/text.css
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/input/text.css b/modules/control-center-web/src/main/js/app/modules/form/field/input/text.css
new file mode 100644
index 0000000..9efdb2c
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/input/text.css
@@ -0,0 +1,24 @@
+label .input-tip {
+	position: initial;
+}
+
+.input-tip .fa-floppy-o {
+	position: absolute;
+    top: 0;
+    right: 0;
+    z-index: 2;
+
+    width: 34px;
+    height: 34px;
+
+    text-align: center;
+
+    display: inline-block;
+    line-height: 28px;
+    pointer-events: initial;
+}
+
+.input-tip .form-control-feedback {
+    height: auto;
+}
+

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/input/text.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/input/text.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/input/text.directive.js
new file mode 100644
index 0000000..1cb8e92
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/input/text.directive.js
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './text.jade!';
+import './text.css!';
+
+export default ['igniteFormFieldInputText', ['IgniteFormGUID', (guid) => {
+    const link = (scope, el, attrs, [ngModel, form, label]) => {
+        const {id, name} = scope;
+
+        label.for = scope.id = id || guid();
+
+        scope.label = label;
+        scope.ngModel = ngModel;
+        scope.$watch('required', (required) => {
+            label.required = required || false;
+        });
+
+        form.$defaults = form.$defaults || {};
+        form.$defaults[name] = _.cloneDeep(scope.value);
+
+        const setAsDefault = () => {
+            if (!form.$pristine) return;
+
+            form.$defaults = form.$defaults || {};
+            form.$defaults[name] = _.cloneDeep(scope.value);
+        };
+
+        scope.$watch(() => form.$pristine, setAsDefault);
+        scope.$watch('value', setAsDefault);
+
+        scope.ngChange = function() {
+            ngModel.$setViewValue(scope.value);
+
+            if (JSON.stringify(scope.value) !== JSON.stringify(form.$defaults[name]))
+                ngModel.$setDirty();
+            else
+                ngModel.$setPristine();
+
+            if (ngModel.$valid)
+                el.find('input').addClass('ng-valid').removeClass('ng-invalid');
+            else
+                el.find('input').removeClass('ng-valid').addClass('ng-invalid');
+        };
+
+        ngModel.$render = function() {
+            scope.value = ngModel.$modelValue;
+        };
+    };
+
+    return {
+        restrict: 'E',
+        scope: {
+            id: '@',
+            name: '@',
+            placeholder: '@',
+            required: '=ngRequired',
+            disabled: '=ngDisabled',
+
+            ngBlur: '&',
+
+            autofocus: '=igniteFormFieldInputAutofocus'
+        },
+        link,
+        template,
+        replace: true,
+        transclude: true,
+        require: ['ngModel', '^form', '?^igniteFormField']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/input/text.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/input/text.jade b/modules/control-center-web/src/main/js/app/modules/form/field/input/text.jade
new file mode 100644
index 0000000..28298ab
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/input/text.jade
@@ -0,0 +1,38 @@
+//-
+    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.
+
+.input-tip
+    input.form-control(
+        id='{{ id }}'
+        placeholder='{{ placeholder }}' 
+        type='text' 
+
+        data-ng-model='value'
+        data-ng-blur='ngBlur()'
+        data-ng-change='ngChange()'
+        data-ng-required='required || false'
+        data-ng-disabled='disabled || false'
+        data-ng-model-options='{debounce: 150}'
+
+        data-ignite-form-field-input-autofocus='autofocus || false'
+    )
+
+    i.fa.fa-exclamation-triangle.form-control-feedback(
+        ng-if='!ngModel.$pristine && ngModel.$error.required'
+        bs-tooltip='"{{ label.name }} could not be empty!"'
+    )
+
+    span(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/label.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/label.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/label.directive.js
new file mode 100644
index 0000000..d22df2c
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/label.directive.js
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+export default ['igniteFormFieldLabel', [() => {
+    return {
+        restrict: 'E',
+        compile() {
+            return {
+                post($scope, $element, $attrs, [form, field], $transclude) {
+                    $transclude($scope, function(clone) {
+                        const text = clone.text();
+
+                        if (/(.*):$/.test(text))
+                            field.name = /(.*):$/.exec(text)[1];
+
+                        const $label = $element.parent().parent().find('label');
+
+                        $label.append(clone);
+                    });
+                }
+            };
+        },
+        replace: true,
+        transclude: true,
+        require: ['^form', '?^igniteFormField']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/tooltip.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/tooltip.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/tooltip.directive.js
new file mode 100644
index 0000000..78aa8fd
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/tooltip.directive.js
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+
+const template = `<i class='tipField fa fa-question-circle'></i>`;
+
+export default ['igniteFormFieldTooltip', ['$tooltip', ($tooltip) => {
+    const link = ($scope, $element, $attrs, $ctrls, $transclude) => {
+        const content = Array.prototype.slice.apply($transclude($scope))
+            .reduce((html, el) => html += el.outerHTML, '');
+
+        $tooltip($element, { title: content });
+
+        // TODO cleanup css styles.
+        if ($element.hasClass('tipLabel'))
+            $element.removeClass('tipField');
+
+        if ($element.parent('label').length)
+            $element.addClass('tipLabel').removeClass('tipField');
+    };
+
+    return {
+        restrict: 'E',
+        scope: {},
+        template,
+        link,
+        replace: true,
+        transclude: true,
+        require: '^form'
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/field/up.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/up.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/up.directive.js
new file mode 100644
index 0000000..d591eac
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/up.directive.js
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ */
+
+
+
+const template = `<i class='tipField fa fa-arrow-up ng-scope' ng-click='up()'></i>`;
+
+export default ['igniteFormFieldUp', ['$tooltip', ($tooltip) => {
+    const link = (scope, $element) => {
+        $tooltip($element, { title: 'Move item up' });
+
+        scope.up = () => {
+            const idx = scope.models.indexOf(scope.model);
+
+            scope.models.splice(idx, 1);
+            scope.models.splice(idx - 1, 0, scope.model);
+        };
+    };
+
+    return {
+        restrict: 'E',
+        scope: {
+            model: '=ngModel',
+            models: '=models'
+        },
+        template,
+        link,
+        replace: true,
+        transclude: true,
+        require: '^form'
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/form.module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/form.module.js b/modules/control-center-web/src/main/js/app/modules/form/form.module.js
new file mode 100644
index 0000000..aac831d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/form.module.js
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import angular from 'angular';
+
+// Panel.
+import igniteFormPanel from './panel/panel.directive';
+import igniteFormPanelChevron from './panel/chevron.directive';
+import igniteFormRevert from './panel/revert.directive';
+
+// Field.
+import igniteFormField from './field/field.directive';
+import igniteFormFieldLabel from './field/label.directive';
+import igniteFormFieldTooltip from './field/tooltip.directive';
+import igniteFormFieldDropdown from './field/dropdown.directive';
+import igniteFormFieldInputNumber from './field/input/number.directive';
+import igniteFormFieldInputText from './field/input/text.directive';
+import igniteFormFieldInputCheckbox from './field/input/checkbox.directive';
+import igniteFormFieldInputDatalist from './field/input/datalist.directive';
+
+// Group.
+import igniteFormGroup from './group/group.directive';
+import igniteFormGroupAdd from './group/add.directive';
+import igniteFormGroupTooltip from './group/tooltip.directive';
+
+// Validators.
+import javaKeywords from './validator/java-keywords.directive';
+import javaPackageSpecified from './validator/java-package-specified.directive';
+import javaBuiltInClass from './validator/java-built-in-class.directive';
+import javaIdentifier from './validator/java-identifier.directive';
+import javaPackageName from './validator/java-package-name.directive';
+import unique from './validator/unique.directive';
+
+// Helpers.
+import igniteFormFieldInputAutofocus from './field/input/autofocus.directive';
+import igniteFormFieldUp from './field/up.directive';
+import igniteFormFieldDown from './field/down.directive';
+import igniteFormControlFeedback from './field/form-control-feedback.directive';
+
+angular
+.module('ignite-console.Form', [
+
+])
+// Panel.
+.directive(...igniteFormPanel)
+.directive(...igniteFormPanelChevron)
+.directive(...igniteFormRevert)
+// Field.
+.directive(...igniteFormField)
+.directive(...igniteFormFieldLabel)
+.directive(...igniteFormFieldTooltip)
+.directive(...igniteFormFieldDropdown)
+.directive(...igniteFormFieldInputNumber)
+.directive(...igniteFormFieldInputText)
+.directive(...igniteFormFieldInputCheckbox)
+.directive(...igniteFormFieldInputDatalist)
+// Group.
+.directive(...igniteFormGroup)
+.directive(...igniteFormGroupAdd)
+.directive(...igniteFormGroupTooltip)
+// Validators.
+.directive(...javaKeywords)
+.directive(...javaPackageSpecified)
+.directive(...javaBuiltInClass)
+.directive(...javaIdentifier)
+.directive(...javaPackageName)
+.directive(...unique)
+// Helpers.
+.directive(...igniteFormFieldInputAutofocus)
+.directive(...igniteFormFieldUp)
+.directive(...igniteFormFieldDown)
+.directive(...igniteFormControlFeedback)
+// Generator of globally unique identifier.
+.factory('IgniteFormGUID', [() => {
+    let guid = 0;
+
+    return () => `form-field-${guid++}`;
+}]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/group/add.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/group/add.directive.js b/modules/control-center-web/src/main/js/app/modules/form/group/add.directive.js
new file mode 100644
index 0000000..6d79026
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/group/add.directive.js
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+const template = `<i class='group-legend-btn fa fa-plus'></i>`;
+
+export default ['igniteFormGroupAdd', ['$tooltip', ($tooltip) => {
+    const link = ($scope, $element, $attrs, $ctrls, $transclude) => {
+        const content = Array.prototype.slice
+        .apply($transclude($scope))
+        .reduce((html, el) => html += el.outerHTML, '');
+
+        $tooltip($element, { title: content });
+
+        $element.closest('.group').find('.group-legend').append($element);
+    };
+
+    return {
+        restrict: 'E',
+        scope: {},
+        template,
+        link,
+        replace: true,
+        transclude: true,
+        require: ['^form', '^igniteFormGroup']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/group/group.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/group/group.directive.js b/modules/control-center-web/src/main/js/app/modules/form/group/group.directive.js
new file mode 100644
index 0000000..db03503
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/group/group.directive.js
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './group.jade!';
+
+export default ['igniteFormGroup', [() => {
+    const controller = [function() { }];
+
+    const link = (scope, el, attrs, [ngModelCtrl, ownFormCtrl, parentFormCtrl]) => {
+        const name = attrs.ngForm;
+        ngModelCtrl.$name = name;
+
+        parentFormCtrl.$addControl(ngModelCtrl);
+        parentFormCtrl.$removeControl(ownFormCtrl);
+
+        scope.value = scope.value || [];
+        parentFormCtrl.$defaults = parentFormCtrl.$defaults || {};
+        parentFormCtrl.$defaults[name] = _.cloneDeep(scope.value);
+
+        const setAsDefault = () => {
+            if (!parentFormCtrl.$pristine)
+                return;
+
+            scope.value = scope.value || [];
+            parentFormCtrl.$defaults = parentFormCtrl.$defaults || {};
+            parentFormCtrl.$defaults[name] = _.cloneDeep(scope.value);
+        };
+
+        const setAsDirty = () => {
+            if (JSON.stringify(scope.value) !== JSON.stringify(parentFormCtrl.$defaults[name]))
+                ngModelCtrl.$setDirty();
+            else
+                ngModelCtrl.$setPristine();
+        };
+
+        scope.$watch(() => parentFormCtrl.$pristine, setAsDefault);
+
+        scope.$watch('value', setAsDefault);
+        scope.$watch('value', setAsDirty, true);
+    };
+
+    return {
+        restrict: 'E',
+        scope: {
+            value: '=ngModel'
+        },
+        bindToController: {
+            label: '@'
+        },
+        link,
+        template,
+        controller,
+        controllerAs: 'group',
+        replace: true,
+        transclude: true,
+        require: ['ngModel', '?form', '^^form']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/group/group.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/group/group.jade b/modules/control-center-web/src/main/js/app/modules/form/group/group.jade
new file mode 100644
index 0000000..ba3a8f2
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/group/group.jade
@@ -0,0 +1,21 @@
+//-
+    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.
+
+.group-section
+    .group
+        .group-legend
+            label {{::group.label}}
+        div(ng-transclude='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/group/table.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/group/table.directive.js b/modules/control-center-web/src/main/js/app/modules/form/group/table.directive.js
new file mode 100644
index 0000000..520f8c2
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/group/table.directive.js
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './table.jade!';
+
+export default ['igniteFormGroupTable', [() => {
+    return {
+        restrict: 'E',
+        scope: {},
+        template,
+        replace: true,
+        transclude: true,
+        require: ['^form', '^igniteFormGroup']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/group/table.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/group/table.jade b/modules/control-center-web/src/main/js/app/modules/form/group/table.jade
new file mode 100644
index 0000000..6f9486d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/group/table.jade
@@ -0,0 +1,17 @@
+//-
+    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
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/group/tooltip.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/group/tooltip.directive.js b/modules/control-center-web/src/main/js/app/modules/form/group/tooltip.directive.js
new file mode 100644
index 0000000..5af8fb1
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/group/tooltip.directive.js
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+const template = `<i class='group-legend-btn fa fa-question-circle'></i>`;
+
+export default ['igniteFormGroupTooltip', ['$tooltip', ($tooltip) => {
+    const link = ($scope, $element, $attrs, $ctrls, $transclude) => {
+        const content = Array.prototype.slice
+        .apply($transclude($scope))
+        .reduce((html, el) => html += el.outerHTML, '');
+
+        $tooltip($element, { title: content });
+
+        $element.closest('.group').find('.group-legend').append($element);
+    };
+
+    return {
+        restrict: 'E',
+        scope: {},
+        template,
+        link,
+        replace: true,
+        transclude: true,
+        require: ['^form', '^igniteFormGroup']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/panel/chevron.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/panel/chevron.directive.js b/modules/control-center-web/src/main/js/app/modules/form/panel/chevron.directive.js
new file mode 100644
index 0000000..9f7e1d0
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/panel/chevron.directive.js
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ */
+
+const template = `<i class='fa' ng-class='isOpen ? "fa-chevron-circle-down" : "fa-chevron-circle-right"'></i>`;
+
+export default ['igniteFormPanelChevron', [() => {
+    const controller = [() => {}];
+
+    const link = ($scope, $element, $attrs, [bsCollapseCtrl]) => {
+        const $target = $element.parent().parent().find('.panel-collapse');
+
+        bsCollapseCtrl.$viewChangeListeners.push(function() {
+            const index = bsCollapseCtrl.$targets.reduce((acc, el, i) => {
+                if (el[0] === $target[0])
+                    acc.push(i);
+
+                return acc;
+            }, [])[0];
+
+            $scope.isOpen = false;
+
+            const active = bsCollapseCtrl.$activeIndexes();
+
+            if ((active instanceof Array) && active.indexOf(index) !== -1 || active === index)
+                $scope.isOpen = true;
+        });
+    };
+
+    return {
+        restrict: 'E',
+        scope: {},
+        link,
+        template,
+        controller,
+        replace: true,
+        transclude: true,
+        require: ['^bsCollapse']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/panel/panel.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/panel/panel.directive.js b/modules/control-center-web/src/main/js/app/modules/form/panel/panel.directive.js
new file mode 100644
index 0000000..b8e7c25
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/panel/panel.directive.js
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+export default ['form', [() => {
+    const link = (scope, $element, $attrs, [form]) => {
+        const $form = $element.parent().closest('form');
+
+        scope.$watch(() => {
+            return $form.hasClass('ng-pristine');
+        }, (value) => {
+            if (!value)
+                return;
+
+            form.$setPristine();
+        });
+    };
+
+    return {
+        restrict: 'E',
+        link,
+        require: ['^form']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/panel/revert.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/panel/revert.directive.js b/modules/control-center-web/src/main/js/app/modules/form/panel/revert.directive.js
new file mode 100644
index 0000000..874b466
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/panel/revert.directive.js
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+
+const template = `<i ng-show='form.$dirty' class='fa fa-undo pull-right' ng-click='revert($event)'></i>`;
+
+export default ['igniteFormRevert', ['$tooltip', ($tooltip) => {
+    const link = (scope, $element, $attrs, [form]) => {
+        $tooltip($element, { title: 'Undo unsaved changes' });
+
+        scope.form = form;
+
+        scope.revert = (e) => {
+            e.stopPropagation();
+
+            for (const name in form.$defaults) {
+                if ({}.hasOwnProperty.call(form.$defaults, name) && form[name]) {
+                    form[name].$setViewValue(form.$defaults[name]);
+                    form[name].$setPristine();
+                    form[name].$render();
+                }
+            }
+
+            form.$setPristine();
+        };
+    };
+
+    return {
+        restrict: 'E',
+        scope: {
+            model: '=ngModel',
+            models: '=models'
+        },
+        template,
+        link,
+        replace: true,
+        require: ['^form']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/validator/java-built-in-class.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/validator/java-built-in-class.directive.js b/modules/control-center-web/src/main/js/app/modules/form/validator/java-built-in-class.directive.js
new file mode 100644
index 0000000..caa268d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/validator/java-built-in-class.directive.js
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+
+export default ['javaBuiltInClass', ['JavaTypes', (JavaTypes) => {
+    const link = (scope, el, attrs, [ngModel]) => {
+        if (typeof attrs.javaBuiltInClass === 'undefined' || !attrs.javaBuiltInClass)
+            return;
+
+        ngModel.$validators.javaBuiltInClass = JavaTypes.nonBuiltInClass;
+    };
+
+    return {
+        restrict: 'A',
+        link,
+        require: ['ngModel']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/validator/java-identifier.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/validator/java-identifier.directive.js b/modules/control-center-web/src/main/js/app/modules/form/validator/java-identifier.directive.js
new file mode 100644
index 0000000..81a48a3
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/validator/java-identifier.directive.js
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+
+export default ['javaIdentifier', ['JavaTypes', (JavaTypes) => {
+    const link = (scope, el, attrs, [ngModel]) => {
+        if (typeof attrs.javaIdentifier === 'undefined' || !attrs.javaIdentifier)
+            return;
+
+        ngModel.$validators.javaIdentifier = JavaTypes.validIdentifier;
+    };
+
+    return {
+        restrict: 'A',
+        link,
+        require: ['ngModel']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/validator/java-keywords.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/validator/java-keywords.directive.js b/modules/control-center-web/src/main/js/app/modules/form/validator/java-keywords.directive.js
new file mode 100644
index 0000000..8faae6d
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/validator/java-keywords.directive.js
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+export default ['javaKeywords', ['JavaTypes', (JavaTypes) => {
+    const link = (scope, el, attrs, [ngModel]) => {
+        if (typeof attrs.javaKeywords === 'undefined' || !attrs.javaKeywords)
+            return;
+
+        ngModel.$validators.javaKeywords = (value) => {
+            if (value) {
+                for (const item of value.split('.')) {
+                    if (JavaTypes.isKeywords(item))
+                        return false;
+                }
+            }
+
+            return true;
+        };
+    };
+
+    return {
+        restrict: 'A',
+        link,
+        require: ['ngModel']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/validator/java-package-name.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/validator/java-package-name.directive.js b/modules/control-center-web/src/main/js/app/modules/form/validator/java-package-name.directive.js
new file mode 100644
index 0000000..173e118
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/validator/java-package-name.directive.js
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+
+export default ['javaPackageName', ['JavaTypes', (JavaTypes) => {
+    const link = (scope, el, attrs, [ngModel]) => {
+        if (typeof attrs.javaPackageName === 'undefined' || !attrs.javaPackageName)
+            return;
+
+        ngModel.$validators.javaPackageName = JavaTypes.validPackage;
+    };
+
+    return {
+        restrict: 'A',
+        link,
+        require: ['ngModel']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/validator/java-package-specified.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/validator/java-package-specified.directive.js b/modules/control-center-web/src/main/js/app/modules/form/validator/java-package-specified.directive.js
new file mode 100644
index 0000000..9ba43f3
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/validator/java-package-specified.directive.js
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+export default ['javaPackageSpecified', [() => {
+    const link = (scope, el, attrs, [ngModel]) => {
+        if (typeof attrs.javaPackageSpecified === 'undefined' || !attrs.javaPackageSpecified)
+            return;
+
+        ngModel.$validators.javaPackageSpecified = (value) => {
+            return !value || !(value.split('.').length < 2);
+        };
+    };
+
+    return {
+        restrict: 'A',
+        link,
+        require: ['ngModel']
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/a84f6b6a/modules/control-center-web/src/main/js/app/modules/form/validator/unique.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/validator/unique.directive.js b/modules/control-center-web/src/main/js/app/modules/form/validator/unique.directive.js
new file mode 100644
index 0000000..905a595
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/form/validator/unique.directive.js
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+export default ['igniteUnique', ['$parse', ($parse) => {
+    const link = (scope, el, attrs, [ngModel]) => {
+        if (typeof attrs.igniteUnique === 'undefined' || !attrs.igniteUnique)
+            return;
+
+        ngModel.$validators.igniteUnique = (value) => {
+            const arr = $parse(attrs.igniteUnique)(scope);
+
+            // Return true in case if array not exist, array empty.
+            if (!arr || !arr.length)
+                return true;
+
+            const name = attrs.name;
+            const idx = arr.indexOf(value);
+
+            // In case of new element check all items.
+            if (name === 'new')
+                return idx < 0;
+
+            // Check for $index in case of editing in-place.
+            return (_.isNumber(scope.$index) && (idx < 0 || scope.$index === idx));
+        };
+    };
+
+    return {
+        restrict: 'A',
+        link,
+        require: ['ngModel']
+    };
+}]];