You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2017/03/13 08:45:34 UTC

[13/50] [abbrv] ignite git commit: IGNITE-4659 Migration to Webpack 2. Upgrade template engine from jade to pug.

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/domains-import.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/domains-import.jade b/modules/web-console/frontend/views/configuration/domains-import.jade
deleted file mode 100644
index bbcb391..0000000
--- a/modules/web-console/frontend/views/configuration/domains-import.jade
+++ /dev/null
@@ -1,170 +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.
-
-include /app/helpers/jade/mixins.jade
-
-mixin chk(mdl, change, tip)
-    input(type='checkbox' ng-model=mdl ng-change=change bs-tooltip='' data-title=tip data-trigger='hover' data-placement='top')
-
-mixin td-ellipses-lbl(w, lbl)
-    td.td-ellipsis(width='#{w}' style='min-width: #{w}; max-width: #{w}')
-        label #{lbl}
-
-.modal.modal-domain-import.center(role='dialog')
-    .modal-dialog.domains-import-dialog
-        .modal-content(ignite-loading='importDomainFromDb' ignite-loading-text='{{importDomain.loadingOptions.text}}')
-            #errors-container.modal-header.header
-                button.close(ng-click='$hide()' aria-hidden='true') ×
-                h4.modal-title() 
-                    i.fa.fa-database
-                    span(ng-if='!importDomain.demo') Import domain models from database
-                    span(ng-if='importDomain.demo') Import domain models from demo database
-            .modal-body
-                .import-domain-model-wizard-page(ng-if='importDomain.action == "drivers" && !importDomain.jdbcDriversNotFound')
-                .import-domain-model-wizard-page(ng-if='importDomain.action == "drivers" && importDomain.jdbcDriversNotFound')
-                    | Domain model could not be imported
-                    ul
-                        li Agent failed to find JDBC drivers
-                        li Copy required JDBC drivers into agent 'jdbc-drivers' folder and try again
-                        li Refer to agent README.txt for more information
-                .import-domain-model-wizard-page(ng-if='importDomain.action == "connect" && importDomain.demo')
-                    div(ng-if='demoConnection.db == "H2"')
-                        label Demo description:
-                        ul
-                            li In-memory H2 database server will be started inside agent
-                            li Database will be populated with sample tables
-                            li You could test domain model generation with this demo database
-                            li Click "Next" to continue
-                    div(ng-if='demoConnection.db != "H2"')
-                        label Demo could not be started
-                            ul
-                                li Agent failed to resolve H2 database jar
-                                li Copy h2-x.x.x.jar into agent 'jdbc-drivers' folder and try again
-                                li Refer to agent README.txt for more information
-                .import-domain-model-wizard-page(ng-if='importDomain.action == "connect" && !importDomain.demo')
-                    -var form = 'connectForm'
-
-                    form.form-horizontal(name=form novalidate)
-                        .settings-row.settings-row_small-label
-                            +ignite-form-field-dropdown('Driver JAR:', 'ui.selectedJdbcDriverJar', '"jdbcDriverJar"', false, true, false,
-                                'Choose JDBC driver', '', 'jdbcDriverJars',
-                                'Select appropriate JAR with JDBC driver<br> To add another driver you need to place it into "/jdbc-drivers" folder of Ignite Web Agent<br> Refer to Ignite Web Agent README.txt for for more information'
-                            )(
-                                data-container='.modal-domain-import'
-                                data-ignite-form-field-input-autofocus='true'
-                            )
-                        .settings-row.settings-row_small-label
-                            +java-class('JDBC driver:', 'selectedPreset.jdbcDriverClass', '"jdbcDriverClass"', true, true, 'Fully qualified class name of JDBC driver that will be used to connect to database')
-                        .settings-row.settings-row_small-label
-                            +text('JDBC URL:', 'selectedPreset.jdbcUrl', '"jdbcUrl"', true, 'JDBC URL', 'JDBC URL for connecting to database<br>Refer to your database documentation for details')
-                        .settings-row.settings-row_small-label
-                            +text('User:', 'selectedPreset.user', '"jdbdUser"', false, '', 'User name for connecting to database')
-                        .settings-row.settings-row_small-label
-                            +password('Password:', 'selectedPreset.password', '"jdbcPassword"', false, '', 'Password for connecting to database<br>Note, password would not be saved in preferences for security reasons')(ignite-on-enter='importDomainNext()')
-                        .settings-row
-                            +checkbox('Tables only', 'selectedPreset.tablesOnly', '"tablesOnly"', 'If selected, then only tables metadata will be parsed<br>Otherwise table and view metadata will be parsed')
-                .import-domain-model-wizard-page(ng-show='importDomain.action == "schemas"')
-                    table.table.metadata(st-table='importDomain.displayedSchemas' st-safe-src='importDomain.schemas')
-                        thead
-                            tr
-                                th.header(colspan='2')
-                                    .col-sm-4.pull-right(style='margin-bottom: 5px')
-                                        input.form-control(type='text' st-search='name' placeholder='Filter schemas...' ng-model='importDomain.displayedSchemasFilter' )
-                            tr
-                                th(width='30px')
-                                    +chk('importDomain.allSchemasSelected',  'selectAllSchemas()', 'Select all schemas')
-                                th
-                                    label Schema
-                            tbody
-                                tr
-                                    td(colspan='2')
-                                        .scrollable-y(style='height: 213px')
-                                            table.table-modal-striped(id='importSchemasData')
-                                                tbody
-                                                    tr(ng-repeat='schema in importDomain.displayedSchemas')
-                                                        td(width='30px')
-                                                            input(type='checkbox' ng-model='schema.use' ng-change='selectSchema()')
-                                                        td
-                                                            label {{schema.name}}
-                .import-domain-model-wizard-page(ng-show='importDomain.action == "tables"')
-                    table.table.metadata(st-table='importDomain.displayedTables' st-safe-src='importDomain.tables')
-                        thead
-                            tr
-                                th.header(colspan='6')
-                                    .col-sm-4.pull-right(style='margin-bottom: 8px')
-                                        input.form-control(type='text' st-search='label' placeholder='Filter tables...' ng-model='importDomain.displayedTablesFilter' ng-change='selectTable()')
-                            tr
-                                th(width='30px')
-                                    +chk('importDomain.allTablesSelected',  'selectAllTables()', 'Select all tables')
-                                th(width='130px')
-                                    label Schema
-                                th(width='160px')
-                                    label Table name
-                                th(colspan=2 width='288px')
-                                    label Cache
-                                th
-                        tbody
-                            tr
-                                td(colspan='6')
-                                    .scrollable-y(style='height: 143px')
-                                        table.table-modal-striped(id='importTableData')
-                                            tbody
-                                                tr(ng-repeat='table in importDomain.displayedTables track by $index')
-                                                    td(width='30px' style='min-width: 30px; max-width: 30px')
-                                                        input(type='checkbox' ng-model='table.use' ng-change='selectTable()')
-                                                    +td-ellipses-lbl('130px', '{{table.schema}}')
-                                                    +td-ellipses-lbl('160px', '{{table.tbl}}')
-                                                    td(colspan='2' width='288px' style='min-width: 160px; max-width: 160px')
-                                                        div.td-ellipsis
-                                                            a(ng-if='!table.edit' ng-click='startEditDbTableCache(table)') {{tableActionView(table)}}
-                                                            div(style='display: flex' ng-if='table.edit')
-                                                                button.select-toggle.form-control(style='width: 35%; margin-right: 5px' bs-select ng-model='table.action' data-container='.modal-domain-import' bs-options='item.value as item.shortLabel for item in importActions')
-                                                                button.select-toggle.form-control(style='width: 65%; margin-right: 0' bs-select ng-model='table.cacheOrTemplate' data-container='.modal-domain-import' bs-options='item.value as item.label for item in table.cachesOrTemplates')
-                                                    td
-                    .settings-row
-                        label Defaults to be applied for filtered tables
-                        i.tipLabel.icon-help(bs-tooltip='' data-title='Select and apply options for caches generation')
-                    .settings-row
-                        .col-sm-11
-                            .col-sm-6(style='padding-right: 5px')
-                                button.select-toggle.form-control(bs-select ng-model='importCommon.action' data-container='.modal-domain-import' bs-options='item.value as item.label for item in importActions')
-                            .col-sm-6(style='padding-left: 5px; padding-right: 5px')
-                                button.select-toggle.form-control(bs-select ng-model='importCommon.cacheOrTemplate' data-container='.modal-domain-import' bs-options='item.value as item.label for item in importCommon.cachesOrTemplates')
-                        .col-sm-1(style='padding-left: 5px')
-                            button.btn.btn-primary(ng-click='applyDefaults()') Apply
-                .import-domain-model-wizard-page(ng-show='importDomain.action == "options"')
-                    -var form = 'optionsForm'
-
-                    form.form-horizontal(name=form novalidate)
-                        .settings-row
-                            +checkbox('Use Java built-in types for keys', 'ui.builtinKeys', '"domainBuiltinKeys"', 'Use Java built-in types like "Integer", "Long", "String" instead of POJO generation in case when table primary key contains only one field')
-                        .settings-row
-                            +checkbox('Use primitive types for NOT NULL table columns', 'ui.usePrimitives', '"domainUsePrimitives"', 'Use primitive types like "int", "long", "double" for POJOs fields generation in case of NOT NULL columns')
-                        .settings-row
-                            +checkbox('Generate aliases for query fields', 'ui.generateAliases', '"domainGenerateAliases"', 'Generate aliases for query fields with database field names when database field name differ from Java field name')
-                        .settings-row
-                            +checkbox('Generate POJO classes', 'ui.generatePojo', '"domainGeneratePojo"', 'If selected then POJO classes will be generated from database tables')
-                        .settings-row.settings-row_small-label(ng-show='ui.generatePojo')
-                            +java-package('Package:', 'ui.packageName', '"domainPackageName"', true, true, 'Package that will be used for POJOs generation')(data-container='.modal-domain-import')
-                        .settings-row.settings-row_small-label
-                            +ignite-form-field-dropdown('Clusters:', 'ui.generatedCachesClusters', '"generatedCachesClusters"', false, false, true,
-                                'Choose clusters for generated caches', '', 'clusters',
-                                'Choose clusters that will be associated with generated caches'
-                            )(data-container='.modal-domain-import')
-            .modal-footer
-                label(ng-hide='importDomain.action == "drivers" || (importDomain.action == "connect" && importDomain.demo)').labelField {{importDomain.info}}
-                a.btn.btn-primary(ng-hide='importDomain.action == "drivers" || importDomain.action == "connect"' ng-click='importDomainPrev()' bs-tooltip='' data-title='{{prevTooltipText()}}' data-placement='bottom') Prev
-                a.btn.btn-primary(ng-click='importDomainNext(optionsForm)' ng-disabled='!importDomainNextAvailable()' bs-tooltip='' data-title='{{nextTooltipText()}}' data-placement='bottom') {{importDomain.button}}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/domains-import.tpl.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/domains-import.tpl.pug b/modules/web-console/frontend/views/configuration/domains-import.tpl.pug
new file mode 100644
index 0000000..baaa2d3
--- /dev/null
+++ b/modules/web-console/frontend/views/configuration/domains-import.tpl.pug
@@ -0,0 +1,170 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+include /app/helpers/jade/mixins
+
+mixin chk(mdl, change, tip)
+    input(type='checkbox' ng-model=mdl ng-change=change bs-tooltip='' data-title=tip data-trigger='hover' data-placement='top')
+
+mixin td-ellipses-lbl(w, lbl)
+    td.td-ellipsis(width=`${w}` style=`min-width: ${w}; max-width: ${w}`)
+        label #{lbl}
+
+.modal.modal-domain-import.center(role='dialog')
+    .modal-dialog.domains-import-dialog
+        .modal-content(ignite-loading='importDomainFromDb' ignite-loading-text='{{importDomain.loadingOptions.text}}')
+            #errors-container.modal-header.header
+                button.close(ng-click='$hide()' aria-hidden='true') &times;
+                h4.modal-title() 
+                    i.fa.fa-database
+                    span(ng-if='!importDomain.demo') Import domain models from database
+                    span(ng-if='importDomain.demo') Import domain models from demo database
+            .modal-body
+                .import-domain-model-wizard-page(ng-if='importDomain.action == "drivers" && !importDomain.jdbcDriversNotFound')
+                .import-domain-model-wizard-page(ng-if='importDomain.action == "drivers" && importDomain.jdbcDriversNotFound')
+                    | Domain model could not be imported
+                    ul
+                        li Agent failed to find JDBC drivers
+                        li Copy required JDBC drivers into agent 'jdbc-drivers' folder and try again
+                        li Refer to agent README.txt for more information
+                .import-domain-model-wizard-page(ng-if='importDomain.action == "connect" && importDomain.demo')
+                    div(ng-if='demoConnection.db == "H2"')
+                        label Demo description:
+                        ul
+                            li In-memory H2 database server will be started inside agent
+                            li Database will be populated with sample tables
+                            li You could test domain model generation with this demo database
+                            li Click "Next" to continue
+                    div(ng-if='demoConnection.db != "H2"')
+                        label Demo could not be started
+                            ul
+                                li Agent failed to resolve H2 database jar
+                                li Copy h2-x.x.x.jar into agent 'jdbc-drivers' folder and try again
+                                li Refer to agent README.txt for more information
+                .import-domain-model-wizard-page(ng-if='importDomain.action == "connect" && !importDomain.demo')
+                    -var form = 'connectForm'
+
+                    form.form-horizontal(name=form novalidate)
+                        .settings-row.settings-row_small-label
+                            +ignite-form-field-dropdown('Driver JAR:', 'ui.selectedJdbcDriverJar', '"jdbcDriverJar"', false, true, false,
+                                'Choose JDBC driver', '', 'jdbcDriverJars',
+                                'Select appropriate JAR with JDBC driver<br> To add another driver you need to place it into "/jdbc-drivers" folder of Ignite Web Agent<br> Refer to Ignite Web Agent README.txt for for more information'
+                            )(
+                                data-container='.modal-domain-import'
+                                data-ignite-form-field-input-autofocus='true'
+                            )
+                        .settings-row.settings-row_small-label
+                            +java-class('JDBC driver:', 'selectedPreset.jdbcDriverClass', '"jdbcDriverClass"', true, true, 'Fully qualified class name of JDBC driver that will be used to connect to database')
+                        .settings-row.settings-row_small-label
+                            +text('JDBC URL:', 'selectedPreset.jdbcUrl', '"jdbcUrl"', true, 'JDBC URL', 'JDBC URL for connecting to database<br>Refer to your database documentation for details')
+                        .settings-row.settings-row_small-label
+                            +text('User:', 'selectedPreset.user', '"jdbdUser"', false, '', 'User name for connecting to database')
+                        .settings-row.settings-row_small-label
+                            +password('Password:', 'selectedPreset.password', '"jdbcPassword"', false, '', 'Password for connecting to database<br>Note, password would not be saved in preferences for security reasons')(ignite-on-enter='importDomainNext()')
+                        .settings-row
+                            +checkbox('Tables only', 'selectedPreset.tablesOnly', '"tablesOnly"', 'If selected, then only tables metadata will be parsed<br>Otherwise table and view metadata will be parsed')
+                .import-domain-model-wizard-page(ng-show='importDomain.action == "schemas"')
+                    table.table.metadata(st-table='importDomain.displayedSchemas' st-safe-src='importDomain.schemas')
+                        thead
+                            tr
+                                th.header(colspan='2')
+                                    .col-sm-4.pull-right(style='margin-bottom: 5px')
+                                        input.form-control(type='text' st-search='name' placeholder='Filter schemas...' ng-model='importDomain.displayedSchemasFilter' )
+                            tr
+                                th(width='30px')
+                                    +chk('importDomain.allSchemasSelected',  'selectAllSchemas()', 'Select all schemas')
+                                th
+                                    label Schema
+                            tbody
+                                tr
+                                    td(colspan='2')
+                                        .scrollable-y(style='height: 213px')
+                                            table.table-modal-striped(id='importSchemasData')
+                                                tbody
+                                                    tr(ng-repeat='schema in importDomain.displayedSchemas')
+                                                        td(width='30px')
+                                                            input(type='checkbox' ng-model='schema.use' ng-change='selectSchema()')
+                                                        td
+                                                            label {{schema.name}}
+                .import-domain-model-wizard-page(ng-show='importDomain.action == "tables"')
+                    table.table.metadata(st-table='importDomain.displayedTables' st-safe-src='importDomain.tables')
+                        thead
+                            tr
+                                th.header(colspan='6')
+                                    .col-sm-4.pull-right(style='margin-bottom: 8px')
+                                        input.form-control(type='text' st-search='label' placeholder='Filter tables...' ng-model='importDomain.displayedTablesFilter' ng-change='selectTable()')
+                            tr
+                                th(width='30px')
+                                    +chk('importDomain.allTablesSelected',  'selectAllTables()', 'Select all tables')
+                                th(width='130px')
+                                    label Schema
+                                th(width='160px')
+                                    label Table name
+                                th(colspan=2 width='288px')
+                                    label Cache
+                                th
+                        tbody
+                            tr
+                                td(colspan='6')
+                                    .scrollable-y(style='height: 143px')
+                                        table.table-modal-striped(id='importTableData')
+                                            tbody
+                                                tr(ng-repeat='table in importDomain.displayedTables track by $index')
+                                                    td(width='30px' style='min-width: 30px; max-width: 30px')
+                                                        input(type='checkbox' ng-model='table.use' ng-change='selectTable()')
+                                                    +td-ellipses-lbl('130px', '{{table.schema}}')
+                                                    +td-ellipses-lbl('160px', '{{table.tbl}}')
+                                                    td(colspan='2' width='288px' style='min-width: 160px; max-width: 160px')
+                                                        div.td-ellipsis
+                                                            a(ng-if='!table.edit' ng-click='startEditDbTableCache(table)') {{tableActionView(table)}}
+                                                            div(style='display: flex' ng-if='table.edit')
+                                                                button.select-toggle.form-control(style='width: 35%; margin-right: 5px' bs-select ng-model='table.action' data-container='.modal-domain-import' bs-options='item.value as item.shortLabel for item in importActions')
+                                                                button.select-toggle.form-control(style='width: 65%; margin-right: 0' bs-select ng-model='table.cacheOrTemplate' data-container='.modal-domain-import' bs-options='item.value as item.label for item in table.cachesOrTemplates')
+                                                    td
+                    .settings-row
+                        label Defaults to be applied for filtered tables
+                        i.tipLabel.icon-help(bs-tooltip='' data-title='Select and apply options for caches generation')
+                    .settings-row
+                        .col-sm-11
+                            .col-sm-6(style='padding-right: 5px')
+                                button.select-toggle.form-control(bs-select ng-model='importCommon.action' data-container='.modal-domain-import' bs-options='item.value as item.label for item in importActions')
+                            .col-sm-6(style='padding-left: 5px; padding-right: 5px')
+                                button.select-toggle.form-control(bs-select ng-model='importCommon.cacheOrTemplate' data-container='.modal-domain-import' bs-options='item.value as item.label for item in importCommon.cachesOrTemplates')
+                        .col-sm-1(style='padding-left: 5px')
+                            button.btn.btn-primary(ng-click='applyDefaults()') Apply
+                .import-domain-model-wizard-page(ng-show='importDomain.action == "options"')
+                    -var form = 'optionsForm'
+
+                    form.form-horizontal(name=form novalidate)
+                        .settings-row
+                            +checkbox('Use Java built-in types for keys', 'ui.builtinKeys', '"domainBuiltinKeys"', 'Use Java built-in types like "Integer", "Long", "String" instead of POJO generation in case when table primary key contains only one field')
+                        .settings-row
+                            +checkbox('Use primitive types for NOT NULL table columns', 'ui.usePrimitives', '"domainUsePrimitives"', 'Use primitive types like "int", "long", "double" for POJOs fields generation in case of NOT NULL columns')
+                        .settings-row
+                            +checkbox('Generate aliases for query fields', 'ui.generateAliases', '"domainGenerateAliases"', 'Generate aliases for query fields with database field names when database field name differ from Java field name')
+                        .settings-row
+                            +checkbox('Generate POJO classes', 'ui.generatePojo', '"domainGeneratePojo"', 'If selected then POJO classes will be generated from database tables')
+                        .settings-row.settings-row_small-label(ng-show='ui.generatePojo')
+                            +java-package('Package:', 'ui.packageName', '"domainPackageName"', true, true, 'Package that will be used for POJOs generation')(data-container='.modal-domain-import')
+                        .settings-row.settings-row_small-label
+                            +ignite-form-field-dropdown('Clusters:', 'ui.generatedCachesClusters', '"generatedCachesClusters"', false, false, true,
+                                'Choose clusters for generated caches', '', 'clusters',
+                                'Choose clusters that will be associated with generated caches'
+                            )(data-container='.modal-domain-import')
+            .modal-footer
+                label(ng-hide='importDomain.action == "drivers" || (importDomain.action == "connect" && importDomain.demo)').labelField {{importDomain.info}}
+                a.btn.btn-primary(ng-hide='importDomain.action == "drivers" || importDomain.action == "connect"' ng-click='importDomainPrev()' bs-tooltip='' data-title='{{prevTooltipText()}}' data-placement='bottom') Prev
+                a.btn.btn-primary(ng-click='importDomainNext(optionsForm)' ng-disabled='!importDomainNextAvailable()' bs-tooltip='' data-title='{{nextTooltipText()}}' data-placement='bottom') {{importDomain.button}}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/domains.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/domains.jade b/modules/web-console/frontend/views/configuration/domains.jade
deleted file mode 100644
index 14e9ca5..0000000
--- a/modules/web-console/frontend/views/configuration/domains.jade
+++ /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.
-
-include /app/helpers/jade/mixins.jade
-
-.docs-header
-    h1 Configure Domain Model And SQL Queries
-.docs-body(ng-controller='domainsController')
-    ignite-information
-        ul: li Import database schemas
-            li Configure indexed types
-    div(ignite-loading='loadingDomainModelsScreen' ignite-loading-text='Loading domain models...' ignite-loading-position='top')
-        div(ng-show='ui.ready')
-            hr
-            .padding-bottom-dflt(ng-show='domains && domains.length > 0')
-                table.links(st-table='displayedRows' st-safe-src='domains')
-                    thead
-                        tr
-                            th
-                                .col-sm-9
-                                    .col-sm-6
-                                        lable.labelHeader.labelFormField {{domainModelTitle()}}
-                                    .col-sm-6
-                                        .pull-right.labelLogin.additional-filter(ng-if='(domains | domainsValidation:false:true).length > 0')
-                                            a.labelFormField(ng-if='ui.showValid' ng-click='toggleValid()' bs-tooltip='' data-title='{{::ui.invalidKeyFieldsTooltip}}') Key fields should be configured: {{(displayedRows | domainsValidation:false:true).length}}&nbsp
-                                            a.labelFormField(ng-if='!ui.showValid' ng-click='toggleValid()') Show all domain models: {{displayedRows.length}}&nbsp
-                                .col-sm-3
-                                    input.form-control.pull-right(type='text' st-search='valueType' placeholder='Filter domain models...')
-                        tbody
-                            tr
-                                td
-                                    .scrollable-y(ng-show='(displayedRows | domainsValidation:ui.showValid:true).length > 0' style='max-height: 200px')
-                                        table
-                                            tbody
-                                                tr(ng-repeat='row in (displayedRows | domainsValidation:ui.showValid:true) track by row._id' ignite-bs-affix-update)
-                                                    td
-                                                        a(ng-class='{active: row._id == selectedItem._id}' ng-click='selectItem(row)') {{$index + 1}}) {{row.valueType}}
-                                    label.placeholder(ng-show='(displayedRows | domainsValidation:ui.showValid:true).length == 0') No domain models found
-            .padding-top-dflt(bs-affix)
-                .panel-tip-container(data-placement='bottom' bs-tooltip='' data-title='Create new domain model')
-                    button.btn.btn-primary(id='new-item' ng-click='createItem()') Add domain model
-                .panel-tip-container(bs-tooltip='' data-title='Import domain models from database' data-placement='bottom')
-                    button.btn.btn-primary(ng-click='showImportDomainModal()') Import from database
-                +save-remove-clone-undo-buttons('domain model')
-                .btn-group.panel-tip-container.pull-right(bs-tooltip='' data-title='Import domain models from demo database' data-placement='bottom')
-                hr
-            .bs-affix-fix
-            div(bs-collapse='' data-allow-multiple='true' ng-model='ui.activePanels')
-                form.form-horizontal(name='ui.inputForm' novalidate ng-if='contentVisible()')
-                    .panel-group
-                        include /app/modules/states/configuration/domains/general.jade
-                        include /app/modules/states/configuration/domains/query.jade
-                        include /app/modules/states/configuration/domains/store.jade

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/domains.tpl.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/domains.tpl.pug b/modules/web-console/frontend/views/configuration/domains.tpl.pug
new file mode 100644
index 0000000..33528c7
--- /dev/null
+++ b/modules/web-console/frontend/views/configuration/domains.tpl.pug
@@ -0,0 +1,66 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+.docs-header
+    h1 Configure Domain Model And SQL Queries
+.docs-body(ng-controller='domainsController')
+    ignite-information
+        ul: li Import database schemas
+            li Configure indexed types
+    div(ignite-loading='loadingDomainModelsScreen' ignite-loading-text='Loading domain models...' ignite-loading-position='top')
+        div(ng-show='ui.ready')
+            hr
+            .padding-bottom-dflt(ng-show='domains && domains.length > 0')
+                table.links(st-table='displayedRows' st-safe-src='domains')
+                    thead
+                        tr
+                            th
+                                .col-sm-9
+                                    .col-sm-6
+                                        lable.labelHeader.labelFormField {{domainModelTitle()}}
+                                    .col-sm-6
+                                        .pull-right.labelLogin.additional-filter(ng-if='(domains | domainsValidation:false:true).length > 0')
+                                            a.labelFormField(ng-if='ui.showValid' ng-click='toggleValid()' bs-tooltip='' data-title='{{::ui.invalidKeyFieldsTooltip}}') Key fields should be configured: {{(displayedRows | domainsValidation:false:true).length}}&nbsp
+                                            a.labelFormField(ng-if='!ui.showValid' ng-click='toggleValid()') Show all domain models: {{displayedRows.length}}&nbsp
+                                .col-sm-3
+                                    input.form-control.pull-right(type='text' st-search='valueType' placeholder='Filter domain models...')
+                        tbody
+                            tr
+                                td
+                                    .scrollable-y(ng-show='(displayedRows | domainsValidation:ui.showValid:true).length > 0' style='max-height: 200px')
+                                        table
+                                            tbody
+                                                tr(ng-repeat='row in (displayedRows | domainsValidation:ui.showValid:true) track by row._id' ignite-bs-affix-update)
+                                                    td
+                                                        a(ng-class='{active: row._id == selectedItem._id}' ng-click='selectItem(row)') {{$index + 1}}) {{row.valueType}}
+                                    label.placeholder(ng-show='(displayedRows | domainsValidation:ui.showValid:true).length == 0') No domain models found
+            .padding-top-dflt(bs-affix)
+                .panel-tip-container(data-placement='bottom' bs-tooltip='' data-title='Create new domain model')
+                    button.btn.btn-primary(id='new-item' ng-click='createItem()') Add domain model
+                .panel-tip-container(bs-tooltip='' data-title='Import domain models from database' data-placement='bottom')
+                    button.btn.btn-primary(ng-click='showImportDomainModal()') Import from database
+                +save-remove-clone-undo-buttons('domain model')
+                .btn-group.panel-tip-container.pull-right(bs-tooltip='' data-title='Import domain models from demo database' data-placement='bottom')
+                hr
+            .bs-affix-fix
+            div(bs-collapse='' data-allow-multiple='true' ng-model='ui.activePanels')
+                form.form-horizontal(name='ui.inputForm' novalidate ng-if='contentVisible()')
+                    .panel-group
+                        include /app/modules/states/configuration/domains/general
+                        include /app/modules/states/configuration/domains/query
+                        include /app/modules/states/configuration/domains/store

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/igfs.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/igfs.jade b/modules/web-console/frontend/views/configuration/igfs.jade
deleted file mode 100644
index 10c902b..0000000
--- a/modules/web-console/frontend/views/configuration/igfs.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.
-
-include /app/helpers/jade/mixins.jade
-
-.docs-header
-    h1 Configure Ignite In-memory File Systems
-.docs-body(ng-controller='igfsController')
-    ignite-information(data-title='Configure IGFS only if you are going to use In-memory File System')
-        ul
-            li Ignite File System (#[a(href='https://apacheignite-fs.readme.io/docs/in-memory-file-system' target='_blank') IGFS]) is an in-memory file system allowing work with files and directories over existing cache infrastructure
-            li IGFS can either work as purely in-memory file system, or delegate to another file system (e.g. various Hadoop file system implementations) acting as a caching layer (see #[a(href='https://apacheignite-fs.readme.io/docs/secondary-file-system' target='_blank') secondary file system]  for more detail)
-            li In addition IGFS provides API to execute map-reduce tasks over file system data
-    div(ignite-loading='loadingIgfsScreen' ignite-loading-text='Loading IGFS screen...' ignite-loading-position='top')
-        div(ng-show='ui.ready')
-            hr
-            +main-table('IGFS', 'igfss', 'igfsName', 'selectItem(row)', '{{$index + 1}}) {{row.name}}', 'name')
-            .padding-top-dflt(bs-affix)
-                .panel-tip-container(data-placement='bottom' bs-tooltip='' data-title='Create new IGFS')
-                    button.btn.btn-primary(id='new-item' ng-click='createItem()') Add IGFS
-                +save-remove-clone-undo-buttons('IGFS')
-                hr
-            .bs-affix-fix
-            div(bs-collapse='' data-allow-multiple='true' ng-model='ui.activePanels')
-                form.form-horizontal(name='ui.inputForm' novalidate ng-if='contentVisible()')
-                    .panel-group
-                        include /app/modules/states/configuration/igfs/general.jade
-
-                        +advanced-options-toggle-default
-
-                        div(ng-show='ui.expanded')
-                            include /app/modules/states/configuration/igfs/secondary.jade
-                            include /app/modules/states/configuration/igfs/ipc.jade
-                            include /app/modules/states/configuration/igfs/fragmentizer.jade
-                            include /app/modules/states/configuration/igfs/dual.jade
-                            include /app/modules/states/configuration/igfs/misc.jade
-
-                            +advanced-options-toggle-default

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/igfs.tpl.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/igfs.tpl.pug b/modules/web-console/frontend/views/configuration/igfs.tpl.pug
new file mode 100644
index 0000000..89e0920
--- /dev/null
+++ b/modules/web-console/frontend/views/configuration/igfs.tpl.pug
@@ -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.
+
+include /app/helpers/jade/mixins
+
+.docs-header
+    h1 Configure Ignite In-memory File Systems
+.docs-body(ng-controller='igfsController')
+    ignite-information(data-title='Configure IGFS only if you are going to use In-memory File System')
+        ul
+            li Ignite File System (#[a(href='https://apacheignite-fs.readme.io/docs/in-memory-file-system' target='_blank') IGFS]) is an in-memory file system allowing work with files and directories over existing cache infrastructure
+            li IGFS can either work as purely in-memory file system, or delegate to another file system (e.g. various Hadoop file system implementations) acting as a caching layer (see #[a(href='https://apacheignite-fs.readme.io/docs/secondary-file-system' target='_blank') secondary file system]  for more detail)
+            li In addition IGFS provides API to execute map-reduce tasks over file system data
+    div(ignite-loading='loadingIgfsScreen' ignite-loading-text='Loading IGFS screen...' ignite-loading-position='top')
+        div(ng-show='ui.ready')
+            hr
+            +main-table('IGFS', 'igfss', 'igfsName', 'selectItem(row)', '{{$index + 1}}) {{row.name}}', 'name')
+            .padding-top-dflt(bs-affix)
+                .panel-tip-container(data-placement='bottom' bs-tooltip='' data-title='Create new IGFS')
+                    button.btn.btn-primary(id='new-item' ng-click='createItem()') Add IGFS
+                +save-remove-clone-undo-buttons('IGFS')
+                hr
+            .bs-affix-fix
+            div(bs-collapse='' data-allow-multiple='true' ng-model='ui.activePanels')
+                form.form-horizontal(name='ui.inputForm' novalidate ng-if='contentVisible()')
+                    .panel-group
+                        include /app/modules/states/configuration/igfs/general
+
+                        +advanced-options-toggle-default
+
+                        div(ng-show='ui.expanded')
+                            include /app/modules/states/configuration/igfs/secondary
+                            include /app/modules/states/configuration/igfs/ipc
+                            include /app/modules/states/configuration/igfs/fragmentizer
+                            include /app/modules/states/configuration/igfs/dual
+                            include /app/modules/states/configuration/igfs/misc
+
+                            +advanced-options-toggle-default

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/sidebar.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/sidebar.jade b/modules/web-console/frontend/views/configuration/sidebar.jade
deleted file mode 100644
index bba6b25..0000000
--- a/modules/web-console/frontend/views/configuration/sidebar.jade
+++ /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.
-
-.row
-    .col-xs-3.col-sm-3.col-md-2.border-right.section-left.greedy
-        .sidebar-nav(bs-affix)
-            ul.menu(ignite-sidebar)
-                li(ng-repeat='item in sidebar.items')
-                    a(ui-sref-active='active' ui-sref='{{::item.sref}}')
-                        span.fa-stack
-                            i.fa.fa-circle-thin.fa-stack-2x
-                            i.fa.fa-stack-1x {{::$index + 1}}
-                        | {{::item.text}}
-
-    .col-xs-9.col-sm-9.col-md-10.border-left.section-right
-        .docs-content(ui-view='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/sidebar.tpl.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/sidebar.tpl.pug b/modules/web-console/frontend/views/configuration/sidebar.tpl.pug
new file mode 100644
index 0000000..bba6b25
--- /dev/null
+++ b/modules/web-console/frontend/views/configuration/sidebar.tpl.pug
@@ -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.
+
+.row
+    .col-xs-3.col-sm-3.col-md-2.border-right.section-left.greedy
+        .sidebar-nav(bs-affix)
+            ul.menu(ignite-sidebar)
+                li(ng-repeat='item in sidebar.items')
+                    a(ui-sref-active='active' ui-sref='{{::item.sref}}')
+                        span.fa-stack
+                            i.fa.fa-circle-thin.fa-stack-2x
+                            i.fa.fa-stack-1x {{::$index + 1}}
+                        | {{::item.text}}
+
+    .col-xs-9.col-sm-9.col-md-10.border-left.section-right
+        .docs-content(ui-view='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/summary-project-structure.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/summary-project-structure.jade b/modules/web-console/frontend/views/configuration/summary-project-structure.jade
deleted file mode 100644
index 29d4538..0000000
--- a/modules/web-console/frontend/views/configuration/summary-project-structure.jade
+++ /dev/null
@@ -1,27 +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.
-.popover.summary-project-structure
-    h3.popover-title
-        label.labelField Project structure
-        button.close(id='summary-project-structure-close' ng-click='$hide()') &times;
-    .popover-content
-        treecontrol.tree-classic(tree-model='projectStructure' options='projectStructureOptions' expanded-nodes='projectStructureExpanded')
-            span(ng-switch='node.type')
-                span(ng-switch-when='folder')
-                    label {{node.name}}
-                span(ng-switch-when='file')
-                    i.fa.fa-file-text-o
-                    label {{node.name}}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/summary-project-structure.tpl.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/summary-project-structure.tpl.pug b/modules/web-console/frontend/views/configuration/summary-project-structure.tpl.pug
new file mode 100644
index 0000000..31a557f
--- /dev/null
+++ b/modules/web-console/frontend/views/configuration/summary-project-structure.tpl.pug
@@ -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.
+
+.popover.summary-project-structure
+    h3.popover-title
+        label.labelField Project structure
+        button.close(id='summary-project-structure-close' ng-click='$hide()') &times;
+    .popover-content
+        treecontrol.tree-classic(tree-model='projectStructure' options='projectStructureOptions' expanded-nodes='projectStructureExpanded')
+            span(ng-switch='node.type')
+                span(ng-switch-when='folder')
+                    label {{node.name}}
+                span(ng-switch-when='file')
+                    i.fa.fa-file-text-o
+                    label {{node.name}}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/summary-tabs.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/summary-tabs.jade b/modules/web-console/frontend/views/configuration/summary-tabs.jade
deleted file mode 100644
index 847b42f..0000000
--- a/modules/web-console/frontend/views/configuration/summary-tabs.jade
+++ /dev/null
@@ -1,25 +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.
-
-ul.nav(ng-class='$navClass', role='tablist')
-    li(role='presentation' ng-repeat='$pane in $panes track by $index' ng-class='[ $isActive($pane, $index) ? $activeClass : "", $pane.disabled ? "disabled" : "" ]')
-        a.summary-tab(ng-show='$pane.title != "POJO" || (cluster | hasPojo)' ng-switch='$pane.title' role='tab' data-toggle='tab' ng-click='!$pane.disabled && $setActive($pane.name || $index)' data-index='{{ $index }}' aria-controls='$pane.title') {{$pane.title}}
-            img(ng-switch-when='XML' src='/images/xml.png')
-            img(ng-switch-when='Java' src='/images/java.png')
-            img(ng-switch-when='POM' src='/images/xml.png')
-            img(ng-switch-when='POJO' src='/images/java.png')
-            img(ng-switch-when='Dockerfile' src='/images/docker.png')
-.tab-content(ng-transclude style='fontSize: 12px; min-height: 25em')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/summary-tabs.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/summary-tabs.pug b/modules/web-console/frontend/views/configuration/summary-tabs.pug
new file mode 100644
index 0000000..d05e3a9
--- /dev/null
+++ b/modules/web-console/frontend/views/configuration/summary-tabs.pug
@@ -0,0 +1,25 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+ul.nav(ng-class='$navClass' role='tablist')
+    li(role='presentation' ng-repeat='$pane in $panes track by $index' ng-class='[ $isActive($pane, $index) ? $activeClass : "", $pane.disabled ? "disabled" : "" ]')
+        a.summary-tab(ng-show='$pane.title != "POJO" || (cluster | hasPojo)' ng-switch='$pane.title' role='tab' data-toggle='tab' ng-click='!$pane.disabled && $setActive($pane.name || $index)' data-index='{{ $index }}' aria-controls='$pane.title') {{$pane.title}}
+            img(ng-switch-when='XML' src='/images/xml.png')
+            img(ng-switch-when='Java' src='/images/java.png')
+            img(ng-switch-when='POM' src='/images/xml.png')
+            img(ng-switch-when='POJO' src='/images/java.png')
+            img(ng-switch-when='Dockerfile' src='/images/docker.png')
+.tab-content(ng-transclude style='fontSize: 12px; min-height: 25em')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/summary.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/summary.jade b/modules/web-console/frontend/views/configuration/summary.jade
deleted file mode 100644
index a04f0db..0000000
--- a/modules/web-console/frontend/views/configuration/summary.jade
+++ /dev/null
@@ -1,90 +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.
-
-include /app/helpers/jade/mixins.jade
-
-mixin hard-link(ref, txt)
-    a(style='color:#ec1c24' href=ref target='_blank') #{txt}
-
-.docs-header
-    h1 Configurations Summary
-.docs-body.summary
-    ignite-information
-        ul
-            li Preview XML configurations for #[a(href='https://apacheignite.readme.io/docs/clients-vs-servers' target='_blank') server and client] nodes
-            li Preview code configuration
-            li Preview #[a(href='https://apacheignite.readme.io/docs/docker-deployment' target='_blank') Docker file]
-            li Preview POM dependencies
-            li Download ready-to-use Maven project
-    hr
-    .padding-dflt(ng-if='ui.ready && (!clusters || clusters.length == 0)')
-        | You have no clusters configured. Please configure them #[a(ui-sref='base.configuration.clusters') here].
-
-    div(ng-show='clusters && clusters.length > 0' ignite-loading='summaryPage' ignite-loading-text='Loading summary screen...' ignite-loading-position='top')
-        +main-table('clusters', 'clustersView', 'clusterName', 'selectItem(row)', '{{$index + 1}}) {{row.name}}', 'name')
-        div(ng-show='selectedItem && contentVisible(displayedRows, selectedItem)')
-            .actions.padding-top-dflt(bs-affix)
-                div
-                    button.btn.btn-primary(id='download' ng-click='downloadConfiguration()' bs-tooltip='' data-title='Download project' data-placement='bottom' ng-disabled='isPrepareDownloading')
-                        div
-                            i.fa.fa-fw.fa-download(ng-hide='isPrepareDownloading')
-                            i.fa.fa-fw.fa-refresh.fa-spin(ng-show='isPrepareDownloading')
-                            span.tipLabel Download project
-                    button.btn.btn-primary(bs-tooltip='' data-title='Preview generated project structure' data-placement='bottom')
-                        div(bs-popover data-template-url='/configuration/summary-project-structure.html', data-placement='bottom', data-trigger='click' data-auto-close='true')
-                            i.fa.fa-sitemap
-                            label.tipLabel Project structure
-                    button.btn.btn-primary(id='proprietary-jdbc-drivers' ng-if='downloadJdbcDriversVisible()' ng-click='downloadJdbcDrivers()' bs-tooltip='' data-title='Open proprietary JDBC drivers download pages' data-placement='bottom') Download JDBC drivers
-                .actions-note(ng-show='ui.isSafari')
-                    i.icon-note
-                    label "Download project" is not fully supported in Safari. Please rename downloaded file from "Unknown" to "&lt;project-name&gt;.zip"
-                hr
-            .bs-affix-fix
-            .panel-group(bs-collapse ng-init='ui.activePanels=[0,1]' ng-model='ui.activePanels' data-allow-multiple='true')
-                .panel.panel-default
-                    .panel-heading(role='tab' bs-collapse-toggle)
-                        ignite-form-panel-chevron
-                        label Server
-
-                    .panel-collapse(id='server' role='tabpanel' bs-collapse-target)
-                        .summary-tabs(ignite-ui-ace-tabs)
-                            div(bs-tabs data-bs-active-pane="tabsServer.activeTab" template='configuration/summary-tabs.html')
-                                div(bs-pane title='XML')
-                                    ignite-ui-ace-spring(ng-if='tabsServer.activeTab == 0 || tabsServer.init[0]' ng-init='tabsServer.init[0] = true' data-master='cluster' data-generator='igniteConfiguration' data-no-deep-watch)
-                                div(bs-pane title='Java')
-                                    ignite-ui-ace-java(ng-if='tabsServer.activeTab == 1 || tabsServer.init[1]' ng-init='tabsServer.init[1] = true' data-master='cluster' data-generator='igniteConfiguration' data-no-deep-watch)
-                                div(bs-pane title='POM')
-                                    ignite-ui-ace-pom(ng-if='tabsServer.activeTab == 2 || tabsServer.init[2]' ng-init='tabsServer.init[2] = true' data-cluster='cluster' data-generator='igniteConfiguration' data-no-deep-watch)
-                                div(bs-pane title='Dockerfile')
-                                    ignite-ui-ace-docker(ng-if='tabsServer.activeTab == 3 || tabsServer.init[3]' ng-init='tabsServer.init[3] = true' data-cluster='cluster' data-generator='igniteConfiguration' data-no-deep-watch ng-model='ctrl.data.docker')
-
-                .panel.panel-default
-                    .panel-heading(role='tab' bs-collapse-toggle)
-                        ignite-form-panel-chevron
-                        label Client
-
-                    .panel-collapse(id='client' role='tabpanel' bs-collapse-target)
-                        .summary-tabs(ignite-ui-ace-tabs)
-                            div(bs-tabs data-bs-active-pane="tabsClient.activeTab" template='configuration/summary-tabs.html')
-                                div(bs-pane title='XML')
-                                    ignite-ui-ace-spring(ng-if='tabsClient.activeTab == 0 || tabsClient.init[0]' ng-init='tabsClient.init[0] = true' data-master='cluster' data-generator='igniteConfiguration' data-client='true' data-no-deep-watch)
-                                div(bs-pane title='Java')
-                                    ignite-ui-ace-java(ng-if='tabsClient.activeTab == 1 || tabsClient.init[1]' ng-init='tabsClient.init[1] = true' data-master='cluster' data-generator='igniteConfiguration' data-client='true' data-no-deep-watch)
-                                div(bs-pane title='POM')
-                                    ignite-ui-ace-pom(ng-if='tabsClient.activeTab == 2 || tabsClient.init[2]' ng-init='tabsClient.init[2] = true' data-cluster='cluster' data-generator='igniteConfiguration' data-client='true' data-no-deep-watch)
-                                div(bs-pane title='POJO' ng-if='cluster | hasPojo')
-                                    ignite-ui-ace-pojos(ng-if='tabsClient.activeTab == 3 || tabsClient.init[3]' ng-init='tabsClient.init[3] = true' data-cluster='cluster' data-no-deep-watch ng-model='ctrl.data.pojos')
-                        

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/configuration/summary.tpl.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/summary.tpl.pug b/modules/web-console/frontend/views/configuration/summary.tpl.pug
new file mode 100644
index 0000000..9fdd0de
--- /dev/null
+++ b/modules/web-console/frontend/views/configuration/summary.tpl.pug
@@ -0,0 +1,90 @@
+//-
+    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.
+
+include /app/helpers/jade/mixins
+
+mixin hard-link(ref, txt)
+    a(style='color:#ec1c24' href=ref target='_blank') #{txt}
+
+.docs-header
+    h1 Configurations Summary
+.docs-body.summary
+    ignite-information
+        ul
+            li Preview XML configurations for #[a(href='https://apacheignite.readme.io/docs/clients-vs-servers' target='_blank') server and client] nodes
+            li Preview code configuration
+            li Preview #[a(href='https://apacheignite.readme.io/docs/docker-deployment' target='_blank') Docker file]
+            li Preview POM dependencies
+            li Download ready-to-use Maven project
+    hr
+    .padding-dflt(ng-if='ui.ready && (!clusters || clusters.length == 0)')
+        | You have no clusters configured. Please configure them #[a(ui-sref='base.configuration.clusters') here].
+
+    div(ng-show='clusters && clusters.length > 0' ignite-loading='summaryPage' ignite-loading-text='Loading summary screen...' ignite-loading-position='top')
+        +main-table('clusters', 'clustersView', 'clusterName', 'selectItem(row)', '{{$index + 1}}) {{row.name}}', 'name')
+        div(ng-show='selectedItem && contentVisible(displayedRows, selectedItem)')
+            .actions.padding-top-dflt(bs-affix)
+                div
+                    button.btn.btn-primary(id='download' ng-click='downloadConfiguration()' bs-tooltip='' data-title='Download project' data-placement='bottom' ng-disabled='isPrepareDownloading')
+                        div
+                            i.fa.fa-fw.fa-download(ng-hide='isPrepareDownloading')
+                            i.fa.fa-fw.fa-refresh.fa-spin(ng-show='isPrepareDownloading')
+                            span.tipLabel Download project
+                    button.btn.btn-primary(bs-tooltip='' data-title='Preview generated project structure' data-placement='bottom')
+                        div(bs-popover data-template-url='{{ ctrl.summaryProjectStructureTemplateUrl }}', data-placement='bottom', data-trigger='click' data-auto-close='true')
+                            i.fa.fa-sitemap
+                            label.tipLabel Project structure
+                    button.btn.btn-primary(id='proprietary-jdbc-drivers' ng-if='downloadJdbcDriversVisible()' ng-click='downloadJdbcDrivers()' bs-tooltip='' data-title='Open proprietary JDBC drivers download pages' data-placement='bottom') Download JDBC drivers
+                .actions-note(ng-show='ui.isSafari')
+                    i.icon-note
+                    label "Download project" is not fully supported in Safari. Please rename downloaded file from "Unknown" to "&lt;project-name&gt;.zip"
+                hr
+            .bs-affix-fix
+            .panel-group(bs-collapse ng-init='ui.activePanels=[0,1]' ng-model='ui.activePanels' data-allow-multiple='true')
+                .panel.panel-default
+                    .panel-heading(role='tab' bs-collapse-toggle)
+                        ignite-form-panel-chevron
+                        label Server
+
+                    .panel-collapse(id='server' role='tabpanel' bs-collapse-target)
+                        .summary-tabs(ignite-ui-ace-tabs)
+                            div(bs-tabs data-bs-active-pane='tabsServer.activeTab' data-template='summary-tabs.html')
+                                div(bs-pane title='XML')
+                                    ignite-ui-ace-spring(ng-if='tabsServer.activeTab == 0 || tabsServer.init[0]' ng-init='tabsServer.init[0] = true' data-master='cluster' data-generator='igniteConfiguration' data-no-deep-watch)
+                                div(bs-pane title='Java')
+                                    ignite-ui-ace-java(ng-if='tabsServer.activeTab == 1 || tabsServer.init[1]' ng-init='tabsServer.init[1] = true' data-master='cluster' data-generator='igniteConfiguration' data-no-deep-watch)
+                                div(bs-pane title='POM')
+                                    ignite-ui-ace-pom(ng-if='tabsServer.activeTab == 2 || tabsServer.init[2]' ng-init='tabsServer.init[2] = true' data-cluster='cluster' data-generator='igniteConfiguration' data-no-deep-watch)
+                                div(bs-pane title='Dockerfile')
+                                    ignite-ui-ace-docker(ng-if='tabsServer.activeTab == 3 || tabsServer.init[3]' ng-init='tabsServer.init[3] = true' data-cluster='cluster' data-generator='igniteConfiguration' data-no-deep-watch ng-model='ctrl.data.docker')
+
+                .panel.panel-default
+                    .panel-heading(role='tab' bs-collapse-toggle)
+                        ignite-form-panel-chevron
+                        label Client
+
+                    .panel-collapse(id='client' role='tabpanel' bs-collapse-target)
+                        .summary-tabs(ignite-ui-ace-tabs)
+                            div(bs-tabs data-bs-active-pane='tabsClient.activeTab' data-template='summary-tabs.html')
+                                div(bs-pane title='XML')
+                                    ignite-ui-ace-spring(ng-if='tabsClient.activeTab == 0 || tabsClient.init[0]' ng-init='tabsClient.init[0] = true' data-master='cluster' data-generator='igniteConfiguration' data-client='true' data-no-deep-watch)
+                                div(bs-pane title='Java')
+                                    ignite-ui-ace-java(ng-if='tabsClient.activeTab == 1 || tabsClient.init[1]' ng-init='tabsClient.init[1] = true' data-master='cluster' data-generator='igniteConfiguration' data-client='true' data-no-deep-watch)
+                                div(bs-pane title='POM')
+                                    ignite-ui-ace-pom(ng-if='tabsClient.activeTab == 2 || tabsClient.init[2]' ng-init='tabsClient.init[2] = true' data-cluster='cluster' data-generator='igniteConfiguration' data-client='true' data-no-deep-watch)
+                                div(bs-pane title='POJO' ng-if='cluster | hasPojo')
+                                    ignite-ui-ace-pojos(ng-if='tabsClient.activeTab == 3 || tabsClient.init[3]' ng-init='tabsClient.init[3] = true' data-cluster='cluster' data-no-deep-watch ng-model='ctrl.data.pojos')
+                        

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/includes/footer.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/includes/footer.jade b/modules/web-console/frontend/views/includes/footer.jade
deleted file mode 100644
index 4ef3bf6..0000000
--- a/modules/web-console/frontend/views/includes/footer.jade
+++ /dev/null
@@ -1,23 +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.
-
-.container.container-footer
-    footer
-        .col-md-offset-1.col-md-10
-            ignite-footer
-        .col-md-1
-            .pull-right
-                ignite-powered-by-apache

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/includes/footer.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/includes/footer.pug b/modules/web-console/frontend/views/includes/footer.pug
new file mode 100644
index 0000000..4ef3bf6
--- /dev/null
+++ b/modules/web-console/frontend/views/includes/footer.pug
@@ -0,0 +1,23 @@
+//-
+    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.
+
+.container.container-footer
+    footer
+        .col-md-offset-1.col-md-10
+            ignite-footer
+        .col-md-1
+            .pull-right
+                ignite-powered-by-apache

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/includes/header.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/includes/header.jade b/modules/web-console/frontend/views/includes/header.jade
deleted file mode 100644
index 99bcea9..0000000
--- a/modules/web-console/frontend/views/includes/header.jade
+++ /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.
-
-header#header.header
-    .viewedUser(ng-show='$root.user.becomeUsed')
-        | Currently assuming #[strong {{$root.user.firstName}} {{$root.user.lastName}}], #[a(ng-click='$root.revertIdentity()') revert to your identity].
-    table.container
-        tr
-            td.col-xs-3.col-sm-3.col-md-2
-                ignite-header-logo
-            td(ng-if='$root.user' style='padding-top: 20px')
-                ul.nav.navbar-nav(ignite-sidebar ignite-navbar)
-                    li(ng-class='{active: $state.includes("base.configuration")}' bs-dropdown='sidebar.items' data-placement='bottom-right' data-trigger='hover focus' data-container='self' data-animation='' ng-click='$event.stopPropagation()')
-                        a.dropdown-toggle Configure
-                            span.caret
-
-                ul.nav.navbar-nav(ng-controller='notebookController')
-                    li.sql-notebooks(ng-if='IgniteDemoMode' ng-class='{active: $state.includes("base.sql")}')
-                        a(ui-sref='base.sql.demo') Queries
-
-                    li.sql-notebooks(ng-if='!IgniteDemoMode && !notebooks.length' ng-class='{active: $state.includes("base.sql")}')
-                        a(ng-click='createNotebook()') Queries
-
-                    li.sql-notebooks(ng-if='!IgniteDemoMode && notebooks.length' ng-class='{active: $state.includes("base.sql")}' bs-dropdown='notebooks' data-placement='bottom-left' data-trigger='hover focus' data-container='self' data-animation='' ng-click='$event.stopPropagation()' aria-haspopup='true' aria-expanded='false')
-                        a.dropdown-toggle Queries
-                            span.caret
-
-                    li(ui-sref-active='active' ng-repeat='item in navbar.items' ng-class='{active: $state.includes("base.monitoring")}' bs-dropdown='item.children' data-placement='bottom-left' data-trigger='hover focus' data-container='self' data-animation='' ng-click='$event.stopPropagation()' aria-haspopup='true' aria-expanded='false')
-                        a.dropdown-toggle {{::item.text}}
-                            span.caret
-
-                a(ng-controller='demoController')
-                    button.btn.btn-info(ng-if='IgniteDemoMode' ng-click='closeDemo()') Close demo
-                    button.btn.btn-info(ng-if='!IgniteDemoMode' ng-click='startDemo()') Start demo
-
-                ul.nav.navbar-nav.pull-right(ignite-userbar)
-                    li(bs-dropdown='userbar.items' data-placement='bottom-right' data-trigger='hover focus' data-container='self' data-animation='' ng-class='{active: $state.includes("settings")}' ng-click='$event.stopPropagation()')
-                        a.dropdown-toggle {{user.firstName}} {{user.lastName}}
-                            span.caret

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/includes/header.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/includes/header.pug b/modules/web-console/frontend/views/includes/header.pug
new file mode 100644
index 0000000..99bcea9
--- /dev/null
+++ b/modules/web-console/frontend/views/includes/header.pug
@@ -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.
+
+header#header.header
+    .viewedUser(ng-show='$root.user.becomeUsed')
+        | Currently assuming #[strong {{$root.user.firstName}} {{$root.user.lastName}}], #[a(ng-click='$root.revertIdentity()') revert to your identity].
+    table.container
+        tr
+            td.col-xs-3.col-sm-3.col-md-2
+                ignite-header-logo
+            td(ng-if='$root.user' style='padding-top: 20px')
+                ul.nav.navbar-nav(ignite-sidebar ignite-navbar)
+                    li(ng-class='{active: $state.includes("base.configuration")}' bs-dropdown='sidebar.items' data-placement='bottom-right' data-trigger='hover focus' data-container='self' data-animation='' ng-click='$event.stopPropagation()')
+                        a.dropdown-toggle Configure
+                            span.caret
+
+                ul.nav.navbar-nav(ng-controller='notebookController')
+                    li.sql-notebooks(ng-if='IgniteDemoMode' ng-class='{active: $state.includes("base.sql")}')
+                        a(ui-sref='base.sql.demo') Queries
+
+                    li.sql-notebooks(ng-if='!IgniteDemoMode && !notebooks.length' ng-class='{active: $state.includes("base.sql")}')
+                        a(ng-click='createNotebook()') Queries
+
+                    li.sql-notebooks(ng-if='!IgniteDemoMode && notebooks.length' ng-class='{active: $state.includes("base.sql")}' bs-dropdown='notebooks' data-placement='bottom-left' data-trigger='hover focus' data-container='self' data-animation='' ng-click='$event.stopPropagation()' aria-haspopup='true' aria-expanded='false')
+                        a.dropdown-toggle Queries
+                            span.caret
+
+                    li(ui-sref-active='active' ng-repeat='item in navbar.items' ng-class='{active: $state.includes("base.monitoring")}' bs-dropdown='item.children' data-placement='bottom-left' data-trigger='hover focus' data-container='self' data-animation='' ng-click='$event.stopPropagation()' aria-haspopup='true' aria-expanded='false')
+                        a.dropdown-toggle {{::item.text}}
+                            span.caret
+
+                a(ng-controller='demoController')
+                    button.btn.btn-info(ng-if='IgniteDemoMode' ng-click='closeDemo()') Close demo
+                    button.btn.btn-info(ng-if='!IgniteDemoMode' ng-click='startDemo()') Start demo
+
+                ul.nav.navbar-nav.pull-right(ignite-userbar)
+                    li(bs-dropdown='userbar.items' data-placement='bottom-right' data-trigger='hover focus' data-container='self' data-animation='' ng-class='{active: $state.includes("settings")}' ng-click='$event.stopPropagation()')
+                        a.dropdown-toggle {{user.firstName}} {{user.lastName}}
+                            span.caret

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/index.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/index.jade b/modules/web-console/frontend/views/index.jade
deleted file mode 100644
index c561c3e..0000000
--- a/modules/web-console/frontend/views/index.jade
+++ /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.
-
-doctype html
-html(ng-app='ignite-console' id='app' ng-strict-di)
-    head
-        base(href='/')
-
-        meta(http-equiv='content-type' content='text/html; charset=UTF8')
-        meta(http-equiv='content-language' content='en')
-
-        title(ng-bind='$meta.title')
-
-        meta(name='fragment' content='!')
-        meta(name='description' content='{{$meta.description}}')
-        meta(name='keywords' content='{{$meta.keywords}}')
-        meta(ng-repeat='(key, value) in $meta.properties' name='{{::key}}' content='{{::value}}')
-
-    body.theme-line.body-overlap.greedy
-
-        .splash.splash-max-foreground(hide-on-state-change)
-            .splash-wrapper
-                .spinner
-                    .bounce1
-                    .bounce2
-                    .bounce3
-
-                .splash-wellcome Loading...
-
-        .ribbon-wrapper.right(ng-cloak)
-            .ribbon(ng-style='IgniteDemoMode && {"background": "#1b6d88"}')
-                label {{IgniteDemoMode ? "Demo" : "Beta" }}
-
-        .wrapper(ui-view='')

http://git-wip-us.apache.org/repos/asf/ignite/blob/1080e686/modules/web-console/frontend/views/index.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/index.pug b/modules/web-console/frontend/views/index.pug
new file mode 100644
index 0000000..c561c3e
--- /dev/null
+++ b/modules/web-console/frontend/views/index.pug
@@ -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.
+
+doctype html
+html(ng-app='ignite-console' id='app' ng-strict-di)
+    head
+        base(href='/')
+
+        meta(http-equiv='content-type' content='text/html; charset=UTF8')
+        meta(http-equiv='content-language' content='en')
+
+        title(ng-bind='$meta.title')
+
+        meta(name='fragment' content='!')
+        meta(name='description' content='{{$meta.description}}')
+        meta(name='keywords' content='{{$meta.keywords}}')
+        meta(ng-repeat='(key, value) in $meta.properties' name='{{::key}}' content='{{::value}}')
+
+    body.theme-line.body-overlap.greedy
+
+        .splash.splash-max-foreground(hide-on-state-change)
+            .splash-wrapper
+                .spinner
+                    .bounce1
+                    .bounce2
+                    .bounce3
+
+                .splash-wellcome Loading...
+
+        .ribbon-wrapper.right(ng-cloak)
+            .ribbon(ng-style='IgniteDemoMode && {"background": "#1b6d88"}')
+                label {{IgniteDemoMode ? "Demo" : "Beta" }}
+
+        .wrapper(ui-view='')