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

[13/51] [abbrv] ignite git commit: IGNITE-843 Refactored modules.

IGNITE-843 Refactored modules.


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

Branch: refs/heads/ignite-843-rc3
Commit: 0fc9726635cb832ec2a2fdad0d6ce17d5e12f6b2
Parents: 61fe0f7
Author: Andrey <an...@gridgain.com>
Authored: Mon Feb 8 16:03:43 2016 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Mon Feb 8 16:03:43 2016 +0700

----------------------------------------------------------------------
 .../control-center-web/src/main/js/app/index.js |  43 ++++---
 .../src/main/js/app/modules/Auth/index.js       |  84 --------------
 .../src/main/js/app/modules/Form/form.module.js |  92 +++++++++++++++
 .../src/main/js/app/modules/Form/index.js       |  92 ---------------
 .../app/modules/JavaTypes/JavaTypes.provider.js |  67 +++++++++++
 .../src/main/js/app/modules/JavaTypes/index.js  |  67 -----------
 .../QueryNotebooks/QueryNotebooks.provider.js   | 115 +++++++++++++++++++
 .../main/js/app/modules/QueryNotebooks/index.js | 115 -------------------
 .../main/js/app/modules/User/Auth.service.js    |  76 ++++++++++++
 .../main/js/app/modules/User/User.service.js    |  58 ++++++++++
 .../src/main/js/app/modules/User/index.js       |  66 -----------
 .../src/main/js/app/modules/User/user.module.js |  28 +++++
 .../js/app/modules/Version/Version.provider.js  |  32 ++++++
 .../src/main/js/app/modules/Version/main.js     |  32 ------
 .../js/app/modules/branding/branding.module.js  |  38 ++++++
 .../js/app/modules/branding/logo.directive.js   |  34 ++++++
 .../src/main/js/app/modules/branding/logo.jade  |  18 +++
 .../js/app/modules/branding/logo.provider.js    |  42 +++++++
 .../branding/powered-by-apache.directive.js     |  35 ++++++
 .../app/modules/branding/powered-by-apache.jade |  18 +++
 .../js/app/modules/branding/terms.directive.js  |  31 +++++
 .../js/app/modules/branding/terms.provider.js   |  41 +++++++
 .../js/app/modules/branding/title.directive.js  |  35 ++++++
 .../configuration/EventGroups.provider.js       |  30 +++++
 .../modules/configuration/Sidebar.provider.js   |  39 +++++++
 .../configuration/configuration.module.js       |  32 ++++++
 .../configuration/include-event-types/main.js   |  36 ------
 .../modules/configuration/sidebar.directive.js  |  30 +++++
 .../app/modules/configuration/sidebar/main.js   |  56 ---------
 .../main/js/app/modules/dialog/dialog.module.js |  32 ++++++
 .../src/main/js/app/modules/dialog/index.js     |  31 -----
 .../getting-started/GettingStarted.provider.js  | 112 ++++++++++++++++++
 .../main/js/app/modules/getting-started/main.js | 112 ------------------
 .../src/main/js/app/modules/logo/logo.jade      |  18 ---
 .../src/main/js/app/modules/logo/main.js        |  98 ----------------
 .../js/app/modules/logo/powered-by-apache.jade  |  18 ---
 .../js/app/modules/navbar/Navbar.provider.js    |  28 +++++
 .../js/app/modules/navbar/Userbar.directive.js  |  48 ++++++++
 .../js/app/modules/navbar/Userbar.provider.js   |  28 +++++
 .../src/main/js/app/modules/navbar/main.js      |  47 --------
 .../js/app/modules/navbar/navbar.directive.js   |  30 +++++
 .../main/js/app/modules/navbar/navbar.module.js |  33 ++++++
 .../src/main/js/app/modules/settings/main.js    |  65 -----------
 .../main/js/app/modules/states/login/index.js   |   6 +-
 .../src/main/js/app/modules/terms/main.js       |  61 ----------
 .../app/services/Countries/Countries.service.js |  23 ++++
 .../src/main/js/app/services/Countries/index.js |  23 ----
 .../main/js/controllers/clusters-controller.js  |   4 +-
 .../src/main/js/controllers/common-module.js    |   5 -
 .../main/js/helpers/generator/generator-java.js |   2 +-
 .../main/js/helpers/generator/generator-xml.js  |   2 +-
 .../main/js/views/configuration/sidebar.jade    |   2 +-
 .../src/main/js/views/includes/header.jade      |   6 +-
 53 files changed, 1256 insertions(+), 1060 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/index.js b/modules/control-center-web/src/main/js/app/index.js
index 3f4bd04..ac45b73 100644
--- a/modules/control-center-web/src/main/js/app/index.js
+++ b/modules/control-center-web/src/main/js/app/index.js
@@ -56,11 +56,9 @@ import 'angular-ui-grid/ui-grid.css!';
 import 'angular-loading/angular-loading.css!';
 import 'angular-motion/dist/angular-motion.css!';
 
-import './modules/User/index';
-import './modules/Auth/index';
-import './modules/Form/index';
-import './modules/JavaTypes/index';
-import './modules/QueryNotebooks/index';
+import './modules/Form/form.module';
+import './modules/JavaTypes/JavaTypes.provider';
+import './modules/QueryNotebooks/QueryNotebooks.provider';
 
 import './modules/states/login/index';
 import './modules/states/logout/index';
@@ -71,15 +69,13 @@ import './modules/states/profile/index';
 import './modules/states/admin/index';
 
 // ignite:modules
-import './modules/dialog/index';
-import './modules/navbar/main';
-import './modules/settings/main';
-import './modules/configuration/sidebar/main';
-import './modules/configuration/include-event-types/main';
-import './modules/terms/main';
-import './modules/logo/main';
-import './modules/getting-started/main';
-import './modules/Version/main';
+import './modules/user/user.module';
+import './modules/branding/branding.module';
+import './modules/navbar/navbar.module';
+import './modules/configuration/configuration.module';
+import './modules/getting-started/GettingStarted.provider';
+import './modules/dialog/dialog.module';
+import './modules/Version/Version.provider';
 // endignite
 
 // Directives.
@@ -97,7 +93,7 @@ import igniteFormFieldJavaClass from './directives/form-field-java-class/form-fi
 import cleanup from './services/cleanup/cleanup.service';
 import GeneratorXml from './services/Generator/Xml.service';
 import GeneratorJava from './services/Generator/Java.service';
-import IgniteCountries from './services/Countries/index';
+import IgniteCountries from './services/Countries/Countries.service';
 
 // Providers
 
@@ -110,8 +106,8 @@ angular
     'ui.router.title',
     'ngRetina',
     // Base modules.
-    'ignite-console.Auth',
-    'ignite-console.User',
+    'ignite-console.user',
+    'ignite-console.branding',
     'ignite-console.Form',
     'ignite-console.JavaTypes',
     'ignite-console.QueryNotebooks',
@@ -126,11 +122,7 @@ angular
     // Common modules.
     'ignite-console.dialog',
     'ignite-console.navbar',
-    'ignite-console.userbar',
-    'ignite-console.configuration.sidebar',
-    'ignite-console.configuration.include-event-types',
-    'ignite-console.terms',
-    'ignite-console.logo',
+    'ignite-console.configuration',
     'ignite-console.getting-started',
     'ignite-console.version'
 ])
@@ -170,6 +162,11 @@ angular
 
     $locationProvider.html5Mode(true);
 }])
-.run(['$rootScope', '$state', ($root, $state) => {
+.run(['$rootScope', '$state', 'Auth', 'User', ($root, $state, Auth, User) => {
     $root.$state = $state;
+
+    if (Auth.authorized) {
+        User.read()
+            .then((user) => $root.$broadcast('user', user));
+    }
 }]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/Auth/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Auth/index.js b/modules/control-center-web/src/main/js/app/modules/Auth/index.js
deleted file mode 100644
index 31a2d94..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Auth/index.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 angular from 'angular';
-
-angular
-.module('ignite-console.Auth', [
-
-])
-.provider('Auth', function() {
-    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;
-        }
-    }
-
-    this.$get = ['$http', '$rootScope', '$state', '$common', 'IgniteGettingStarted', 'User', function($http, $root, $state, $common, gettingStarted, 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);
-
-                            $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/0fc97266/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/0fc97266/modules/control-center-web/src/main/js/app/modules/Form/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Form/index.js b/modules/control-center-web/src/main/js/app/modules/Form/index.js
deleted file mode 100644
index aac831d..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Form/index.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/0fc97266/modules/control-center-web/src/main/js/app/modules/JavaTypes/JavaTypes.provider.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/JavaTypes/JavaTypes.provider.js b/modules/control-center-web/src/main/js/app/modules/JavaTypes/JavaTypes.provider.js
new file mode 100644
index 0000000..7b87ba7
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/JavaTypes/JavaTypes.provider.js
@@ -0,0 +1,67 @@
+/*
+ * 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';
+
+// Java built-in short class names.
+import JAVA_CLASSES from 'app/data/java-classes.json!';
+
+// Java built-in full class names.
+import JAVA_FULLNAME_CLASSES from 'app/data/java-fullname-classes.json!';
+
+import JAVA_KEYWORDS from 'app/data/java-keywords.json!';
+
+angular
+    .module('ignite-console.JavaTypes', [])
+    .provider('JavaTypes', function() {
+        this.$get = [function() {
+            return {
+                /**
+                 * @param cls Class name to check.
+                 * @returns boolean 'true' if given class name non a Java built-in type.
+                 */
+                nonBuiltInClass(cls) {
+                    return !(_.contains(JAVA_CLASSES, cls) || _.contains(JAVA_FULLNAME_CLASSES, cls));
+                },
+                /**
+                 * @param value text to check.
+                 * @returns boolean 'true' if given text is valid Java identifier.
+                 */
+                validIdentifier(value) {
+                    const regexp = /^(([a-zA-Z_$][a-zA-Z0-9_$]*)\.)*([a-zA-Z_$][a-zA-Z0-9_$]*)$/igm;
+
+                    return value === '' || regexp.test(value);
+                },
+                /**
+                 * @param value text to check.
+                 * @returns boolean 'true' if given text is valid Java package.
+                 */
+                validPackage(value) {
+                    const regexp = /^(([a-zA-Z_$][a-zA-Z0-9_$]*)\.)*([a-zA-Z_$][a-zA-Z0-9_$]*(\.?\*)?)$/igm;
+
+                    return value === '' || regexp.test(value);
+                },
+                /**
+                 * @param value text to check.
+                 * @returns boolean 'true' if given text non Java keyword.
+                 */
+                isKeywords(value) {
+                    return _.contains(JAVA_KEYWORDS, value);
+                }
+            };
+        }];
+    });

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js b/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js
deleted file mode 100644
index 7b87ba7..0000000
--- a/modules/control-center-web/src/main/js/app/modules/JavaTypes/index.js
+++ /dev/null
@@ -1,67 +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';
-
-// Java built-in short class names.
-import JAVA_CLASSES from 'app/data/java-classes.json!';
-
-// Java built-in full class names.
-import JAVA_FULLNAME_CLASSES from 'app/data/java-fullname-classes.json!';
-
-import JAVA_KEYWORDS from 'app/data/java-keywords.json!';
-
-angular
-    .module('ignite-console.JavaTypes', [])
-    .provider('JavaTypes', function() {
-        this.$get = [function() {
-            return {
-                /**
-                 * @param cls Class name to check.
-                 * @returns boolean 'true' if given class name non a Java built-in type.
-                 */
-                nonBuiltInClass(cls) {
-                    return !(_.contains(JAVA_CLASSES, cls) || _.contains(JAVA_FULLNAME_CLASSES, cls));
-                },
-                /**
-                 * @param value text to check.
-                 * @returns boolean 'true' if given text is valid Java identifier.
-                 */
-                validIdentifier(value) {
-                    const regexp = /^(([a-zA-Z_$][a-zA-Z0-9_$]*)\.)*([a-zA-Z_$][a-zA-Z0-9_$]*)$/igm;
-
-                    return value === '' || regexp.test(value);
-                },
-                /**
-                 * @param value text to check.
-                 * @returns boolean 'true' if given text is valid Java package.
-                 */
-                validPackage(value) {
-                    const regexp = /^(([a-zA-Z_$][a-zA-Z0-9_$]*)\.)*([a-zA-Z_$][a-zA-Z0-9_$]*(\.?\*)?)$/igm;
-
-                    return value === '' || regexp.test(value);
-                },
-                /**
-                 * @param value text to check.
-                 * @returns boolean 'true' if given text non Java keyword.
-                 */
-                isKeywords(value) {
-                    return _.contains(JAVA_KEYWORDS, value);
-                }
-            };
-        }];
-    });

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/QueryNotebooks/QueryNotebooks.provider.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/QueryNotebooks/QueryNotebooks.provider.js b/modules/control-center-web/src/main/js/app/modules/QueryNotebooks/QueryNotebooks.provider.js
new file mode 100644
index 0000000..b9c1d4b
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/QueryNotebooks/QueryNotebooks.provider.js
@@ -0,0 +1,115 @@
+/*
+ * 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';
+
+angular
+    .module('ignite-console.QueryNotebooks', [
+
+    ])
+    .provider('QueryNotebooks', function() {
+        const _demoNotebook = {
+            name: 'SQL demo',
+            paragraphs: [
+                {
+                    name: 'Query with refresh rate',
+                    cacheName: 'CarCache',
+                    pageSize: 50,
+                    query: 'SELECT count(*)\nFROM "CarCache".Car',
+                    result: 'bar',
+                    timeLineSpan: '1',
+                    rate: {
+                        value: 3,
+                        unit: 1000,
+                        installed: true
+                    }
+                },
+                {
+                    name: 'Simple query',
+                    cacheName: 'CarCache',
+                    pageSize: 50,
+                    query: 'SELECT * FROM "CarCache".Car',
+                    result: 'table',
+                    timeLineSpan: '1',
+                    rate: {
+                        value: 30,
+                        unit: 1000,
+                        installed: false
+                    }
+                },
+                {
+                    name: 'Query with aggregates',
+                    cacheName: 'CarCache',
+                    pageSize: 50,
+                    query: 'SELECT p.name, count(*) AS cnt\nFROM "ParkingCache".Parking p\nINNER JOIN "CarCache".Car c\n  ON (p.id) = (c.parkingId)\nGROUP BY P.NAME',
+                    result: 'table',
+                    timeLineSpan: '1',
+                    rate: {
+                        value: 30,
+                        unit: 1000,
+                        installed: false
+                    }
+                }
+            ],
+            expandedParagraphs: [0, 1, 2]
+        };
+
+        this.$get = ['$q', '$http', '$rootScope', ($q, $http, $rootScope) => {
+            return {
+                read(demo, noteId) {
+                    if (demo)
+                        return $q.when(angular.copy(_demoNotebook));
+
+                    return $http.post('/api/v1/notebooks/get', {noteId})
+                        .then(({data}) => {
+                            return data;
+                        });
+                },
+                save(demo, notebook) {
+                    if (demo)
+                        return $q.when();
+
+                    return $http.post('/api/v1/notebooks/save', notebook).then(({data}) => {
+                        return data;
+                    });
+                },
+                remove(demo, nodeId) {
+                    if (demo)
+                        return $q.reject('Removing "SQL demo" notebook is not supported.');
+
+                    return $http.post('/api/v1/notebooks/remove', {_id: nodeId})
+                        .then(() => {
+                            const idx = _.findIndex($rootScope.notebooks, (item) => {
+                                return item._id === nodeId;
+                            });
+
+                            if (idx >= 0) {
+                                $rootScope.notebooks.splice(idx, 1);
+
+                                $rootScope.rebuildDropdown();
+
+                                if (idx < $rootScope.notebooks.length)
+                                    return $rootScope.notebooks[idx];
+                            }
+
+                            if ($rootScope.notebooks.length > 0)
+                                return $rootScope.notebooks[$rootScope.notebooks.length - 1];
+                        });
+                }
+            };
+        }];
+    });

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/QueryNotebooks/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/QueryNotebooks/index.js b/modules/control-center-web/src/main/js/app/modules/QueryNotebooks/index.js
deleted file mode 100644
index b9c1d4b..0000000
--- a/modules/control-center-web/src/main/js/app/modules/QueryNotebooks/index.js
+++ /dev/null
@@ -1,115 +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';
-
-angular
-    .module('ignite-console.QueryNotebooks', [
-
-    ])
-    .provider('QueryNotebooks', function() {
-        const _demoNotebook = {
-            name: 'SQL demo',
-            paragraphs: [
-                {
-                    name: 'Query with refresh rate',
-                    cacheName: 'CarCache',
-                    pageSize: 50,
-                    query: 'SELECT count(*)\nFROM "CarCache".Car',
-                    result: 'bar',
-                    timeLineSpan: '1',
-                    rate: {
-                        value: 3,
-                        unit: 1000,
-                        installed: true
-                    }
-                },
-                {
-                    name: 'Simple query',
-                    cacheName: 'CarCache',
-                    pageSize: 50,
-                    query: 'SELECT * FROM "CarCache".Car',
-                    result: 'table',
-                    timeLineSpan: '1',
-                    rate: {
-                        value: 30,
-                        unit: 1000,
-                        installed: false
-                    }
-                },
-                {
-                    name: 'Query with aggregates',
-                    cacheName: 'CarCache',
-                    pageSize: 50,
-                    query: 'SELECT p.name, count(*) AS cnt\nFROM "ParkingCache".Parking p\nINNER JOIN "CarCache".Car c\n  ON (p.id) = (c.parkingId)\nGROUP BY P.NAME',
-                    result: 'table',
-                    timeLineSpan: '1',
-                    rate: {
-                        value: 30,
-                        unit: 1000,
-                        installed: false
-                    }
-                }
-            ],
-            expandedParagraphs: [0, 1, 2]
-        };
-
-        this.$get = ['$q', '$http', '$rootScope', ($q, $http, $rootScope) => {
-            return {
-                read(demo, noteId) {
-                    if (demo)
-                        return $q.when(angular.copy(_demoNotebook));
-
-                    return $http.post('/api/v1/notebooks/get', {noteId})
-                        .then(({data}) => {
-                            return data;
-                        });
-                },
-                save(demo, notebook) {
-                    if (demo)
-                        return $q.when();
-
-                    return $http.post('/api/v1/notebooks/save', notebook).then(({data}) => {
-                        return data;
-                    });
-                },
-                remove(demo, nodeId) {
-                    if (demo)
-                        return $q.reject('Removing "SQL demo" notebook is not supported.');
-
-                    return $http.post('/api/v1/notebooks/remove', {_id: nodeId})
-                        .then(() => {
-                            const idx = _.findIndex($rootScope.notebooks, (item) => {
-                                return item._id === nodeId;
-                            });
-
-                            if (idx >= 0) {
-                                $rootScope.notebooks.splice(idx, 1);
-
-                                $rootScope.rebuildDropdown();
-
-                                if (idx < $rootScope.notebooks.length)
-                                    return $rootScope.notebooks[idx];
-                            }
-
-                            if ($rootScope.notebooks.length > 0)
-                                return $rootScope.notebooks[$rootScope.notebooks.length - 1];
-                        });
-                }
-            };
-        }];
-    });

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/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..175c22c
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/User/Auth.service.js
@@ -0,0 +1,76 @@
+/*
+ * 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/0fc97266/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/0fc97266/modules/control-center-web/src/main/js/app/modules/User/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/User/index.js b/modules/control-center-web/src/main/js/app/modules/User/index.js
deleted file mode 100644
index 6d81b65..0000000
--- a/modules/control-center-web/src/main/js/app/modules/User/index.js
+++ /dev/null
@@ -1,66 +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';
-
-angular
-.module('ignite-console.User', [
-
-])
-.provider('User', function() {
-    let _user;
-
-    try {
-        _user = JSON.parse(localStorage.user);
-    }
-    catch (ignore) {
-        // No-op.
-    }
-
-    this.$get = ['$q', '$injector', '$rootScope', '$state', '$http', ($q, $injector, $root, $state, $http) => {
-        if (_user)
-            $root.user = _user;
-
-        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/0fc97266/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);

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/Version/Version.provider.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Version/Version.provider.js b/modules/control-center-web/src/main/js/app/modules/Version/Version.provider.js
new file mode 100644
index 0000000..4aa008e
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/Version/Version.provider.js
@@ -0,0 +1,32 @@
+/*
+ * 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';
+
+angular
+    .module('ignite-console.version', [])
+    .provider('IgniteVersion', function() {
+        const version = {
+            version: '1.5.0-final'
+        };
+
+        this.update = (newVersion) => {
+            version.version = newVersion;
+        };
+
+        this.$get = [() => version];
+    });

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/Version/main.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/Version/main.js b/modules/control-center-web/src/main/js/app/modules/Version/main.js
deleted file mode 100644
index 4aa008e..0000000
--- a/modules/control-center-web/src/main/js/app/modules/Version/main.js
+++ /dev/null
@@ -1,32 +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';
-
-angular
-    .module('ignite-console.version', [])
-    .provider('IgniteVersion', function() {
-        const version = {
-            version: '1.5.0-final'
-        };
-
-        this.update = (newVersion) => {
-            version.version = newVersion;
-        };
-
-        this.$get = [() => version];
-    });

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/branding/branding.module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/branding/branding.module.js b/modules/control-center-web/src/main/js/app/modules/branding/branding.module.js
new file mode 100644
index 0000000..dc65efc
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/branding/branding.module.js
@@ -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.
+ */
+
+import angular from 'angular';
+
+import IgniteLogo from './Logo.provider';
+import IgniteTerms from './Terms.provider';
+
+import ignitePoweredByApache from './powered-by-apache.directive';
+import igniteLogo from './logo.directive';
+import igniteTitle from './title.directive';
+import igniteTerms from './terms.directive';
+
+angular
+.module('ignite-console.branding', [
+
+])
+.provider(...IgniteLogo)
+.provider(...IgniteTerms)
+.directive(...ignitePoweredByApache)
+.directive(...igniteLogo)
+.directive(...igniteTitle)
+.directive(...igniteTerms);
+

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/branding/logo.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/branding/logo.directive.js b/modules/control-center-web/src/main/js/app/modules/branding/logo.directive.js
new file mode 100644
index 0000000..ff46945
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/branding/logo.directive.js
@@ -0,0 +1,34 @@
+/*
+ * 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 templateLogo from './logo.jade!';
+
+export default ['igniteLogo', ['IgniteLogo', (IgniteLogo) => {
+    function controller() {
+        const ctrl = this;
+
+        ctrl.url = IgniteLogo.url;
+    }
+
+    return {
+        restrict: 'E',
+        template: templateLogo,
+        controller,
+        controllerAs: 'logo',
+        replace: true
+    };
+}]];

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

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/branding/logo.provider.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/branding/logo.provider.js b/modules/control-center-web/src/main/js/app/modules/branding/logo.provider.js
new file mode 100644
index 0000000..fcefc7c
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/branding/logo.provider.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default ['IgniteLogo', [function() {
+    let poweredBy = false;
+
+    let url = '/images/ignite-logo.png';
+
+    let title = 'Management console for Apache Ignite';
+
+    this.url = (_url) => {
+        url = _url;
+
+        poweredBy = true;
+    };
+
+    this.title = (_title) => {
+        title = _title;
+    };
+
+    this.$get = [() => {
+        return {
+            url,
+            poweredBy,
+            title
+        };
+    }];
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/branding/powered-by-apache.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/branding/powered-by-apache.directive.js b/modules/control-center-web/src/main/js/app/modules/branding/powered-by-apache.directive.js
new file mode 100644
index 0000000..fd2ab98
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/branding/powered-by-apache.directive.js
@@ -0,0 +1,35 @@
+/*
+ * 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 templatePoweredByApache from './powered-by-apache.jade!';
+
+export default ['ignitePoweredByApache', ['IgniteLogo', (IgniteLogo) => {
+    function controller() {
+        const ctrl = this;
+
+        ctrl.show = IgniteLogo.poweredBy;
+    }
+
+    return {
+        restrict: 'E',
+        template: templatePoweredByApache,
+        controller,
+        controllerAs: 'poweredBy',
+        replace: true
+    };
+}]];
+

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/branding/powered-by-apache.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/branding/powered-by-apache.jade b/modules/control-center-web/src/main/js/app/modules/branding/powered-by-apache.jade
new file mode 100644
index 0000000..af9aadf
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/branding/powered-by-apache.jade
@@ -0,0 +1,18 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+a(ng-if='poweredBy.show' href='//ignite.apache.org' target='_blank')
+    img(ng-src='/images/pb-ignite.png' height='65')

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/branding/terms.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/branding/terms.directive.js b/modules/control-center-web/src/main/js/app/modules/branding/terms.directive.js
new file mode 100644
index 0000000..22f2977
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/branding/terms.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 ['igniteTerms', ['IgniteTerms', (IgniteTerms) => {
+    function controller() {
+        const ctrl = this;
+
+        ctrl.footerRows = IgniteTerms.footerRows;
+        ctrl.termsState = IgniteTerms.termsState;
+    }
+
+    return {
+        restrict: 'A',
+        controller,
+        controllerAs: 'terms'
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/branding/terms.provider.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/branding/terms.provider.js b/modules/control-center-web/src/main/js/app/modules/branding/terms.provider.js
new file mode 100644
index 0000000..c9c6009
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/branding/terms.provider.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 ['IgniteTerms', [function() {
+    let _rows = [
+        'Apache Ignite Web Console',
+        '© 2016 The Apache Software Foundation.',
+        'Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are trademarks of The Apache Software Foundation.'
+    ];
+
+    let _state;
+
+    this.footerRows = function(rows) {
+        _rows = rows;
+    };
+
+    this.termsState = function(state) {
+        _state = state;
+    };
+
+    this.$get = [function() {
+        return {
+            footerRows: _rows,
+            termsState: _state
+        };
+    }];
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/branding/title.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/branding/title.directive.js b/modules/control-center-web/src/main/js/app/modules/branding/title.directive.js
new file mode 100644
index 0000000..83b8a7b
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/branding/title.directive.js
@@ -0,0 +1,35 @@
+/*
+ * 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 templateTitle = `<label class= 'title'>{{::title.text}}</label>`;
+
+export default ['igniteTitle', ['IgniteLogo', (IgniteLogo) => {
+    function controller() {
+        const ctrl = this;
+
+        ctrl.text = IgniteLogo.title;
+    }
+
+    return {
+        restrict: 'E',
+        template: templateTitle,
+        controller,
+        controllerAs: 'title',
+        replace: true
+    };
+}]];
+

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/configuration/EventGroups.provider.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/configuration/EventGroups.provider.js b/modules/control-center-web/src/main/js/app/modules/configuration/EventGroups.provider.js
new file mode 100644
index 0000000..2bbf11f
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/configuration/EventGroups.provider.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.
+ */
+
+// Events groups.
+import GROUPS from 'app/data/event-types.json!';
+
+export default ['igniteEventGroups', function() {
+    const groups = GROUPS;
+
+    this.push = (data) => groups.push(data);
+
+    this.$get = [() => {
+        return groups;
+    }];
+}];
+

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/configuration/Sidebar.provider.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/configuration/Sidebar.provider.js b/modules/control-center-web/src/main/js/app/modules/configuration/Sidebar.provider.js
new file mode 100644
index 0000000..8bd5ba3
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/configuration/Sidebar.provider.js
@@ -0,0 +1,39 @@
+/*
+ * 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';
+
+export default ['igniteSidebar', function() {
+    const items = [
+        { text: 'Clusters', sref: 'base.configuration.clusters' },
+        { text: 'Model', sref: 'base.configuration.domains' },
+        { text: 'Caches', sref: 'base.configuration.caches' },
+        { text: 'IGFS', sref: 'base.configuration.igfs' }
+    ];
+
+    this.push = function(data) {
+        items.push(data);
+    };
+
+    this.$get = [function() {
+        const r = angular.copy(items);
+
+        r.push({ text: 'Summary', sref: 'base.configuration.summary' });
+
+        return r;
+    }];
+}];

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/configuration/configuration.module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/configuration/configuration.module.js b/modules/control-center-web/src/main/js/app/modules/configuration/configuration.module.js
new file mode 100644
index 0000000..94bdeb8
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/configuration/configuration.module.js
@@ -0,0 +1,32 @@
+/*
+ * 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 igniteEventGroups from './EventGroups.provider';
+import igniteSidebar from './Sidebar.provider';
+
+import igniteSidebarDirective from './sidebar.directive';
+
+// Ignite events groups.
+angular
+.module('ignite-console.configuration', [
+
+])
+.provider(...igniteEventGroups)
+.provider(...igniteSidebar)
+.directive(...igniteSidebarDirective);

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/configuration/include-event-types/main.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/configuration/include-event-types/main.js b/modules/control-center-web/src/main/js/app/modules/configuration/include-event-types/main.js
deleted file mode 100644
index c75e0ae..0000000
--- a/modules/control-center-web/src/main/js/app/modules/configuration/include-event-types/main.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.
- */
-
-// Events groups.
-import GROUPS from 'app/data/event-types.json!';
-
-import angular from 'angular';
-
-// Ignite events groups.
-angular
-    .module('ignite-console.configuration.include-event-types', [
-
-    ])
-.provider('igniteIncludeEventGroups', function() {
-    const groups = GROUPS;
-
-    this.push = (data) => groups.push(data);
-
-    this.$get = [() => {
-        return groups;
-    }];
-});

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/configuration/sidebar.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/configuration/sidebar.directive.js b/modules/control-center-web/src/main/js/app/modules/configuration/sidebar.directive.js
new file mode 100644
index 0000000..e51553b
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/configuration/sidebar.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 ['igniteSidebar', ['igniteSidebar', (igniteSidebar) => {
+    function controller() {
+        const ctrl = this;
+
+        ctrl.items = igniteSidebar;
+    }
+
+    return {
+        restrict: 'A',
+        controller,
+        controllerAs: 'sidebar'
+    };
+}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/configuration/sidebar/main.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/configuration/sidebar/main.js b/modules/control-center-web/src/main/js/app/modules/configuration/sidebar/main.js
deleted file mode 100644
index 4e2c39c..0000000
--- a/modules/control-center-web/src/main/js/app/modules/configuration/sidebar/main.js
+++ /dev/null
@@ -1,56 +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';
-
-angular
-.module('ignite-console.configuration.sidebar', [
-
-])
-.provider('igniteConfigurationSidebar', function() {
-    const items = [
-        { text: 'Clusters', sref: 'base.configuration.clusters' },
-        { text: 'Model', sref: 'base.configuration.domains' },
-        { text: 'Caches', sref: 'base.configuration.caches' },
-        { text: 'IGFS', sref: 'base.configuration.igfs' }
-    ];
-
-    this.push = function(data) {
-        items.push(data);
-    };
-
-    this.$get = [function() {
-        const r = angular.copy(items);
-
-        r.push({ text: 'Summary', sref: 'base.configuration.summary' });
-
-        return r;
-    }];
-})
-.directive('igniteConfigurationSidebar', ['igniteConfigurationSidebar', function(igniteConfigurationSidebar) {
-    function controller() {
-        const ctrl = this;
-
-        ctrl.items = igniteConfigurationSidebar;
-    }
-
-    return {
-        restrict: 'A',
-        controller,
-        controllerAs: 'sidebar'
-    };
-}]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/dialog/dialog.module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/dialog/dialog.module.js b/modules/control-center-web/src/main/js/app/modules/dialog/dialog.module.js
new file mode 100644
index 0000000..c9ba9f9
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/dialog/dialog.module.js
@@ -0,0 +1,32 @@
+/*
+ * 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 igniteDialog from './dialog.directive';
+import igniteDialogTitle from './dialog-title.directive';
+import igniteDialogContent from './dialog-content.directive';
+import IgniteDialog from './dialog.factory';
+
+angular
+.module('ignite-console.dialog', [
+
+])
+.factory(...IgniteDialog)
+.directive(...igniteDialog)
+.directive(...igniteDialogTitle)
+.directive(...igniteDialogContent);

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/dialog/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/dialog/index.js b/modules/control-center-web/src/main/js/app/modules/dialog/index.js
deleted file mode 100644
index 2ca51ba..0000000
--- a/modules/control-center-web/src/main/js/app/modules/dialog/index.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.
- */
-
-import angular from 'angular';
-import igniteDialog from './dialog.directive';
-import igniteDialogTitle from './dialog-title.directive';
-import igniteDialogContent from './dialog-content.directive';
-import IgniteDialog from './dialog.factory';
-
-angular
-.module('ignite-console.dialog', [
-
-])
-.factory(...IgniteDialog)
-.directive(...igniteDialog)
-.directive(...igniteDialogTitle)
-.directive(...igniteDialogContent);

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/getting-started/GettingStarted.provider.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/getting-started/GettingStarted.provider.js b/modules/control-center-web/src/main/js/app/modules/getting-started/GettingStarted.provider.js
new file mode 100644
index 0000000..d3379a0
--- /dev/null
+++ b/modules/control-center-web/src/main/js/app/modules/getting-started/GettingStarted.provider.js
@@ -0,0 +1,112 @@
+/*
+ * 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';
+
+// Getting started pages.
+import PAGES from 'app/data/getting-started.json!';
+
+angular
+    .module('ignite-console.getting-started', [])
+    .provider('igniteGettingStarted', function() {
+        const items = PAGES;
+
+        this.push = (before, data) => {
+            const idx = _.findIndex(items, {title: before});
+
+            if (idx < 0)
+                items.push(data);
+            else
+                items.splice(idx, 0, data);
+        };
+
+        this.update = (before, data) => {
+            const idx = _.findIndex(items, {title: before});
+
+            if (idx >= 0)
+                items[idx] = data;
+        };
+
+        this.$get = [function() {
+            return items;
+        }];
+    })
+    .service('IgniteGettingStarted', ['$rootScope', '$modal', 'igniteGettingStarted', function($root, $modal, igniteGettingStarted) {
+        const _model = igniteGettingStarted;
+
+        let _page = 0;
+
+        const scope = $root.$new();
+
+        scope.ui = {
+            showGettingStarted: false
+        };
+
+        function _fillPage() {
+            scope.title = _model[_page].title;
+            scope.message = _model[_page].message.join(' ');
+        }
+
+        scope.isFirst = () => _page === 0;
+
+        scope.isLast = () => _page === _model.length - 1;
+
+        scope.next = () => {
+            _page += 1;
+
+            _fillPage();
+        };
+
+        scope.prev = () => {
+            _page -= 1;
+
+            _fillPage();
+        };
+
+        const dialog = $modal({templateUrl: '/templates/getting-started.html', scope, placement: 'center', show: false, backdrop: 'static'});
+
+        scope.close = () => {
+            try {
+                localStorage.showGettingStarted = scope.ui.showGettingStarted;
+            }
+            catch (ignore) {
+                // No-op.
+            }
+
+            dialog.hide();
+        };
+
+        return {
+            tryShow: (force) => {
+                try {
+                    scope.ui.showGettingStarted = typeof localStorage.showGettingStarted === 'undefined'
+                        || localStorage.showGettingStarted === 'true';
+                }
+                catch (ignore) {
+                    // No-op.
+                }
+
+                if (force || scope.ui.showGettingStarted) {
+                    _page = 0;
+
+                    _fillPage();
+
+                    dialog.show();
+                }
+            }
+        };
+    }]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/getting-started/main.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/getting-started/main.js b/modules/control-center-web/src/main/js/app/modules/getting-started/main.js
deleted file mode 100644
index d3379a0..0000000
--- a/modules/control-center-web/src/main/js/app/modules/getting-started/main.js
+++ /dev/null
@@ -1,112 +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';
-
-// Getting started pages.
-import PAGES from 'app/data/getting-started.json!';
-
-angular
-    .module('ignite-console.getting-started', [])
-    .provider('igniteGettingStarted', function() {
-        const items = PAGES;
-
-        this.push = (before, data) => {
-            const idx = _.findIndex(items, {title: before});
-
-            if (idx < 0)
-                items.push(data);
-            else
-                items.splice(idx, 0, data);
-        };
-
-        this.update = (before, data) => {
-            const idx = _.findIndex(items, {title: before});
-
-            if (idx >= 0)
-                items[idx] = data;
-        };
-
-        this.$get = [function() {
-            return items;
-        }];
-    })
-    .service('IgniteGettingStarted', ['$rootScope', '$modal', 'igniteGettingStarted', function($root, $modal, igniteGettingStarted) {
-        const _model = igniteGettingStarted;
-
-        let _page = 0;
-
-        const scope = $root.$new();
-
-        scope.ui = {
-            showGettingStarted: false
-        };
-
-        function _fillPage() {
-            scope.title = _model[_page].title;
-            scope.message = _model[_page].message.join(' ');
-        }
-
-        scope.isFirst = () => _page === 0;
-
-        scope.isLast = () => _page === _model.length - 1;
-
-        scope.next = () => {
-            _page += 1;
-
-            _fillPage();
-        };
-
-        scope.prev = () => {
-            _page -= 1;
-
-            _fillPage();
-        };
-
-        const dialog = $modal({templateUrl: '/templates/getting-started.html', scope, placement: 'center', show: false, backdrop: 'static'});
-
-        scope.close = () => {
-            try {
-                localStorage.showGettingStarted = scope.ui.showGettingStarted;
-            }
-            catch (ignore) {
-                // No-op.
-            }
-
-            dialog.hide();
-        };
-
-        return {
-            tryShow: (force) => {
-                try {
-                    scope.ui.showGettingStarted = typeof localStorage.showGettingStarted === 'undefined'
-                        || localStorage.showGettingStarted === 'true';
-                }
-                catch (ignore) {
-                    // No-op.
-                }
-
-                if (force || scope.ui.showGettingStarted) {
-                    _page = 0;
-
-                    _fillPage();
-
-                    dialog.show();
-                }
-            }
-        };
-    }]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/0fc97266/modules/control-center-web/src/main/js/app/modules/logo/logo.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/logo/logo.jade b/modules/control-center-web/src/main/js/app/modules/logo/logo.jade
deleted file mode 100644
index b807921..0000000
--- a/modules/control-center-web/src/main/js/app/modules/logo/logo.jade
+++ /dev/null
@@ -1,18 +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.
-
-a(href='/')
-    img.navbar-brand(ng-src='{{logo.url}}' height='40')