http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/memory.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/memory.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/memory.pug
index 06c8e0b..831adea 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/memory.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/memory.pug
@@ -20,175 +20,176 @@ include /app/helpers/jade/mixins
 -var model = '$ctrl.clonedCluster.memoryConfiguration'
 -var memoryPolicies = model + '.memoryPolicies'
 
-.pca-panel.pca-panel-default(ng-show='$ctrl.available(["2.0.0", "2.3.0"])' 
ng-form=form novalidate)
-    .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
-        ignite-form-panel-chevron
-        .pca-panel-heading-title Memory configuration
-        .pca-panel-heading-description
-            | Page memory is a manageable off-heap based memory architecture 
that is split into pages of fixed size. 
-            | 
#[a.link-success(href="https://apacheignite.readme.io/docs/durable-memory"; 
target="_blank") More info]
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body(ng-if=`$ctrl.available(["2.0.0", "2.3.0"]) && 
ui.isPanelLoaded('${form}')`).pca-form-row
-            .pca-form-column-6.pc-form-grid-row
+panel-collapsible(
+    ng-form=form
+    on-open=`ui.loadPanel('${form}')`
+    ng-show='$ctrl.available(["2.0.0", "2.3.0"])'
+)
+    panel-title Memory configuration
+    panel-description
+        | Page memory is a manageable off-heap based memory architecture that 
is split into pages of fixed size. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/durable-memory"; 
target="_blank") More info]
+    panel-content.pca-form-row(ng-if=`$ctrl.available(["2.0.0", "2.3.0"]) && 
ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +sane-ignite-form-field-dropdown({
+                    label: 'Page size:',
+                    model: `${model}.pageSize`,
+                    name: '"MemoryConfigurationPageSize"',
+                    options: 
`$ctrl.Clusters.memoryConfiguration.pageSize.values`,
+                    tip: 'Every memory region is split on pages of fixed size'
+                })
+            .pc-form-grid-col-60
+                +number('Concurrency level:', model + '.concurrencyLevel', 
'"MemoryConfigurationConcurrencyLevel"',
+                'true', 'availableProcessors', '2', 'The number of concurrent 
segments in Ignite internal page mapping tables')
+            .pc-form-grid-col-60.pc-form-group__text-title
+                span System cache
+            .pc-form-group.pc-form-grid-row
+                .pc-form-grid-col-30
+                    pc-form-field-size(
+                        label='Initial size:'
+                        ng-model=`${model}.systemCacheInitialSize`
+                        name='systemCacheInitialSize'
+                        placeholder='{{ 
$ctrl.Clusters.memoryConfiguration.systemCacheInitialSize.default / 
systemCacheInitialSizeScale.value }}'
+                        min='{{ 
::$ctrl.Clusters.memoryConfiguration.systemCacheInitialSize.min }}'
+                        tip='Initial size of a memory region reserved for 
system cache'
+                        on-scale-change='systemCacheInitialSizeScale = $event'
+                    )
+                .pc-form-grid-col-30
+                    pc-form-field-size(
+                        label='Max size:'
+                        ng-model=`${model}.systemCacheMaxSize`
+                        name='systemCacheMaxSize'
+                        placeholder='{{ 
$ctrl.Clusters.memoryConfiguration.systemCacheMaxSize.default / 
systemCacheMaxSizeScale.value }}'
+                        min='{{ 
$ctrl.Clusters.memoryConfiguration.systemCacheMaxSize.min($ctrl.clonedCluster) 
}}'
+                        tip='Maximum size of a memory region reserved for 
system cache'
+                        on-scale-change='systemCacheMaxSizeScale = $event'
+                    )
+            .pc-form-grid-col-60.pc-form-group__text-title
+                span Memory policies
+            .pc-form-group.pc-form-grid-row
                 .pc-form-grid-col-60
-                    +sane-ignite-form-field-dropdown({
-                        label: 'Page size:',
-                        model: `${model}.pageSize`,
-                        name: '"MemoryConfigurationPageSize"',
-                        options: 
`$ctrl.Clusters.memoryConfiguration.pageSize.values`,
-                        tip: 'Every memory region is split on pages of fixed 
size'
-                    })
+                    +sane-ignite-form-field-text({
+                        label: 'Default memory policy name:',
+                        model: `${model}.defaultMemoryPolicyName`,
+                        name: '"defaultMemoryPolicyName"',
+                        placeholder: '{{ 
::$ctrl.Clusters.memoryPolicy.name.default }}',
+                        tip: 'Name of a memory policy to be used as default 
one'
+                    })(
+                        
pc-not-in-collection='::$ctrl.Clusters.memoryPolicy.name.invalidValues'
+                        ui-validate=`{
+                            defaultMemoryPolicyExists: 
'$ctrl.Clusters.memoryPolicy.customValidators.defaultMemoryPolicyExists($value, 
${memoryPolicies})'
+                        }`
+                        ui-validate-watch=`"${memoryPolicies}"`
+                        ui-validate-watch-object-equality='true'
+                        ng-model-options='{allowInvalid: true}'
+                    )
+                        +form-field-feedback('"MemoryPolicyName"', 
'notInCollection', '{{::$ctrl.Clusters.memoryPolicy.name.invalidValues[0]}} is 
reserved for internal use')
+                        +form-field-feedback('"MemoryPolicyName"', 
'defaultMemoryPolicyExists', 'Memory policy with that name should be 
configured')
+                .pc-form-grid-col-60(ng-hide='(' + model + 
'.defaultMemoryPolicyName || "default") !== "default"')
+                    +number('Default memory policy size:', model + 
'.defaultMemoryPolicySize', '"defaultMemoryPolicySize"',
+                    'true', '0.8 * totalMemoryAvailable', '10485760',
+                    'Specify desired size of default memory policy without 
having to use more verbose syntax of MemoryPolicyConfiguration elements')
                 .pc-form-grid-col-60
-                    +number('Concurrency level:', model + '.concurrencyLevel', 
'"MemoryConfigurationConcurrencyLevel"',
-                    'true', 'availableProcessors', '2', 'The number of 
concurrent segments in Ignite internal page mapping tables')
-                .pc-form-grid-col-60.pc-form-group__text-title
-                    span System cache
-                .pc-form-group.pc-form-grid-row
-                    .pc-form-grid-col-30
-                        pc-form-field-size(
-                            label='Initial size:'
-                            ng-model=`${model}.systemCacheInitialSize`
-                            name='systemCacheInitialSize'
-                            placeholder='{{ 
$ctrl.Clusters.memoryConfiguration.systemCacheInitialSize.default / 
systemCacheInitialSizeScale.value }}'
-                            min='{{ 
::$ctrl.Clusters.memoryConfiguration.systemCacheInitialSize.min }}'
-                            tip='Initial size of a memory region reserved for 
system cache'
-                            on-scale-change='systemCacheInitialSizeScale = 
$event'
-                        )
-                    .pc-form-grid-col-30
-                        pc-form-field-size(
-                            label='Max size:'
-                            ng-model=`${model}.systemCacheMaxSize`
-                            name='systemCacheMaxSize'
-                            placeholder='{{ 
$ctrl.Clusters.memoryConfiguration.systemCacheMaxSize.default / 
systemCacheMaxSizeScale.value }}'
-                            min='{{ 
$ctrl.Clusters.memoryConfiguration.systemCacheMaxSize.min($ctrl.clonedCluster) 
}}'
-                            tip='Maximum size of a memory region reserved for 
system cache'
-                            on-scale-change='systemCacheMaxSizeScale = $event'
-                        )
-                .pc-form-grid-col-60.pc-form-group__text-title
-                    span Memory policies
-                .pc-form-group.pc-form-grid-row
-                    .pc-form-grid-col-60
-                        +sane-ignite-form-field-text({
-                            label: 'Default memory policy name:',
-                            model: `${model}.defaultMemoryPolicyName`,
-                            name: '"defaultMemoryPolicyName"',
-                            placeholder: '{{ 
::$ctrl.Clusters.memoryPolicy.name.default }}',
-                            tip: 'Name of a memory policy to be used as 
default one'
-                        })(
-                            
pc-not-in-collection='::$ctrl.Clusters.memoryPolicy.name.invalidValues'
-                            ui-validate=`{
-                                defaultMemoryPolicyExists: 
'$ctrl.Clusters.memoryPolicy.customValidators.defaultMemoryPolicyExists($value, 
${memoryPolicies})'
-                            }`
-                            ui-validate-watch=`"${memoryPolicies}"`
-                            ui-validate-watch-object-equality='true'
-                            ng-model-options='{allowInvalid: true}'
-                        )
-                            +form-field-feedback('"MemoryPolicyName"', 
'notInCollection', '{{::$ctrl.Clusters.memoryPolicy.name.invalidValues[0]}} is 
reserved for internal use')
-                            +form-field-feedback('"MemoryPolicyName"', 
'defaultMemoryPolicyExists', 'Memory policy with that name should be 
configured')
-                    .pc-form-grid-col-60(ng-hide='(' + model + 
'.defaultMemoryPolicyName || "default") !== "default"')
-                        +number('Default memory policy size:', model + 
'.defaultMemoryPolicySize', '"defaultMemoryPolicySize"',
-                        'true', '0.8 * totalMemoryAvailable', '10485760',
-                        'Specify desired size of default memory policy without 
having to use more verbose syntax of MemoryPolicyConfiguration elements')
-                    .pc-form-grid-col-60
-                        mixin clusters-memory-policies
-                            
.ignite-form-field(ng-init='memoryPoliciesTbl={type: "memoryPolicies", model: 
"memoryPolicies", focusId: "name", ui: "memory-policies-table"}')
-                                +ignite-form-field__label('Configured 
policies:', '"configuredPolicies"')
-                                    +tooltip(`List of configured policies`)
-                                .ignite-form-field__control
-                                    -let items = memoryPolicies
+                    mixin clusters-memory-policies
+                        .ignite-form-field(ng-init='memoryPoliciesTbl={type: 
"memoryPolicies", model: "memoryPolicies", focusId: "name", ui: 
"memory-policies-table"}')
+                            +ignite-form-field__label('Configured policies:', 
'"configuredPolicies"')
+                                +tooltip(`List of configured policies`)
+                            .ignite-form-field__control
+                                -let items = memoryPolicies
 
-                                    list-editable(ng-model=items 
name='memoryPolicies')
-                                        
list-editable-item-edit.pc-form-grid-row
-                                            - form = '$parent.form'
-                                            .pc-form-grid-col-60
-                                                +sane-ignite-form-field-text({
-                                                    label: 'Name:',
-                                                    model: '$item.name',
-                                                    name: '"MemoryPolicyName"',
-                                                    placeholder: '{{ 
::$ctrl.Clusters.memoryPolicy.name.default }}',
-                                                    tip: 'Memory policy name'
-                                                })(
-                                                    ui-validate=`{
-                                                        
uniqueMemoryPolicyName: 
'$ctrl.Clusters.memoryPolicy.customValidators.uniqueMemoryPolicyName($item, 
${items})'
-                                                    }`
-                                                    
ui-validate-watch=`"${items}"`
-                                                    
ui-validate-watch-object-equality='true'
-                                                    
pc-not-in-collection='::$ctrl.Clusters.memoryPolicy.name.invalidValues'
-                                                    
ng-model-options='{allowInvalid: true}'
-                                                )
-                                                    
+form-field-feedback('"MemoryPolicyName', 'uniqueMemoryPolicyName', 'Memory 
policy with that name is already configured')
-                                                    
+form-field-feedback('"MemoryPolicyName', 'notInCollection', 
'{{::$ctrl.Clusters.memoryPolicy.name.invalidValues[0]}} is reserved for 
internal use')
-                                            .pc-form-grid-col-60
-                                                pc-form-field-size(
-                                                    label='Initial size:'
-                                                    
ng-model='$item.initialSize'
-                                                    
ng-model-options='{allowInvalid: true}'
-                                                    
name='MemoryPolicyInitialSize'
-                                                    placeholder='{{ 
$ctrl.Clusters.memoryPolicy.initialSize.default / scale.value }}'
-                                                    min='{{ 
::$ctrl.Clusters.memoryPolicy.initialSize.min }}'
-                                                    tip='Initial memory region 
size defined by this memory policy'
-                                                    on-scale-change='scale = 
$event'
-                                                )
-                                            .pc-form-grid-col-60
-                                                pc-form-field-size(
-                                                    ng-model='$item.maxSize'
-                                                    
ng-model-options='{allowInvalid: true}'
-                                                    name='MemoryPolicyMaxSize'
-                                                    label='Maximum size:'
-                                                    placeholder='{{ 
::$ctrl.Clusters.memoryPolicy.maxSize.default }}'
-                                                    min='{{ 
$ctrl.Clusters.memoryPolicy.maxSize.min($item) }}'
-                                                    tip='Maximum memory region 
size defined by this memory policy'
-                                                )
-                                            .pc-form-grid-col-60
-                                                +text('Swap file path:', 
'$item.swapFilePath', '"MemoryPolicySwapFilePath"', 'false',
-                                                'Input swap file path', 'An 
optional path to a memory mapped file for this memory policy')
-                                            .pc-form-grid-col-60
-                                                +dropdown('Eviction mode:', 
'$item.pageEvictionMode', '"MemoryPolicyPageEvictionMode"', 'true', 'DISABLED',
-                                                '[\
-                                                    {value: "DISABLED", label: 
"DISABLED"},\
-                                                    {value: "RANDOM_LRU", 
label: "RANDOM_LRU"},\
-                                                    {value: "RANDOM_2_LRU", 
label: "RANDOM_2_LRU"}\
-                                                ]',
-                                                'An algorithm for memory pages 
eviction\
-                                                <ul>\
-                                                    <li>DISABLED - Eviction is 
disabled</li>\
-                                                    <li>RANDOM_LRU - Once a 
memory region defined by a memory policy is configured, an off - heap array is 
allocated to track last usage timestamp for every individual data page</li>\
-                                                    <li>RANDOM_2_LRU - Differs 
from Random - LRU only in a way that two latest access timestamps are stored 
for every data page</li>\
-                                                </ul>')
-                                            .pc-form-grid-col-30
-                                                +number-min-max-step('Eviction 
threshold:', '$item.evictionThreshold', '"MemoryPolicyEvictionThreshold"',
-                                                'true', '0.9', '0.5', '0.999', 
'0.05', 'A threshold for memory pages eviction initiation')
-                                            .pc-form-grid-col-30
-                                                
+sane-ignite-form-field-number({
-                                                    label: 'Empty pages pool 
size:',
-                                                    model: 
'$item.emptyPagesPoolSize',
-                                                    name: 
'"MemoryPolicyEmptyPagesPoolSize"',
-                                                    placeholder: '{{ 
::$ctrl.Clusters.memoryPolicy.emptyPagesPoolSize.default }}',
-                                                    min: '{{ 
::$ctrl.Clusters.memoryPolicy.emptyPagesPoolSize.min }}',
-                                                    max: '{{ 
$ctrl.Clusters.memoryPolicy.emptyPagesPoolSize.max($ctrl.clonedCluster, $item) 
}}',
-                                                    tip: 'The minimal number 
of empty pages to be present in reuse lists for this memory policy'
-                                                })
+                                list-editable(ng-model=items 
name='memoryPolicies')
+                                    list-editable-item-edit.pc-form-grid-row
+                                        - form = '$parent.form'
+                                        .pc-form-grid-col-60
+                                            +sane-ignite-form-field-text({
+                                                label: 'Name:',
+                                                model: '$item.name',
+                                                name: '"MemoryPolicyName"',
+                                                placeholder: '{{ 
::$ctrl.Clusters.memoryPolicy.name.default }}',
+                                                tip: 'Memory policy name'
+                                            })(
+                                                ui-validate=`{
+                                                    uniqueMemoryPolicyName: 
'$ctrl.Clusters.memoryPolicy.customValidators.uniqueMemoryPolicyName($item, 
${items})'
+                                                }`
+                                                ui-validate-watch=`"${items}"`
+                                                
ui-validate-watch-object-equality='true'
+                                                
pc-not-in-collection='::$ctrl.Clusters.memoryPolicy.name.invalidValues'
+                                                
ng-model-options='{allowInvalid: true}'
+                                            )
+                                                
+form-field-feedback('"MemoryPolicyName', 'uniqueMemoryPolicyName', 'Memory 
policy with that name is already configured')
+                                                
+form-field-feedback('"MemoryPolicyName', 'notInCollection', 
'{{::$ctrl.Clusters.memoryPolicy.name.invalidValues[0]}} is reserved for 
internal use')
+                                        .pc-form-grid-col-60
+                                            pc-form-field-size(
+                                                label='Initial size:'
+                                                ng-model='$item.initialSize'
+                                                
ng-model-options='{allowInvalid: true}'
+                                                name='MemoryPolicyInitialSize'
+                                                placeholder='{{ 
$ctrl.Clusters.memoryPolicy.initialSize.default / scale.value }}'
+                                                min='{{ 
::$ctrl.Clusters.memoryPolicy.initialSize.min }}'
+                                                tip='Initial memory region 
size defined by this memory policy'
+                                                on-scale-change='scale = 
$event'
+                                            )
+                                        .pc-form-grid-col-60
+                                            pc-form-field-size(
+                                                ng-model='$item.maxSize'
+                                                
ng-model-options='{allowInvalid: true}'
+                                                name='MemoryPolicyMaxSize'
+                                                label='Maximum size:'
+                                                placeholder='{{ 
::$ctrl.Clusters.memoryPolicy.maxSize.default }}'
+                                                min='{{ 
$ctrl.Clusters.memoryPolicy.maxSize.min($item) }}'
+                                                tip='Maximum memory region 
size defined by this memory policy'
+                                            )
+                                        .pc-form-grid-col-60
+                                            +text('Swap file path:', 
'$item.swapFilePath', '"MemoryPolicySwapFilePath"', 'false',
+                                            'Input swap file path', 'An 
optional path to a memory mapped file for this memory policy')
+                                        .pc-form-grid-col-60
+                                            +dropdown('Eviction mode:', 
'$item.pageEvictionMode', '"MemoryPolicyPageEvictionMode"', 'true', 'DISABLED',
+                                            '[\
+                                                {value: "DISABLED", label: 
"DISABLED"},\
+                                                {value: "RANDOM_LRU", label: 
"RANDOM_LRU"},\
+                                                {value: "RANDOM_2_LRU", label: 
"RANDOM_2_LRU"}\
+                                            ]',
+                                            'An algorithm for memory pages 
eviction\
+                                            <ul>\
+                                                <li>DISABLED - Eviction is 
disabled</li>\
+                                                <li>RANDOM_LRU - Once a memory 
region defined by a memory policy is configured, an off - heap array is 
allocated to track last usage timestamp for every individual data page</li>\
+                                                <li>RANDOM_2_LRU - Differs 
from Random - LRU only in a way that two latest access timestamps are stored 
for every data page</li>\
+                                            </ul>')
+                                        .pc-form-grid-col-30
+                                            +number-min-max-step('Eviction 
threshold:', '$item.evictionThreshold', '"MemoryPolicyEvictionThreshold"',
+                                            'true', '0.9', '0.5', '0.999', 
'0.05', 'A threshold for memory pages eviction initiation')
+                                        .pc-form-grid-col-30
+                                            +sane-ignite-form-field-number({
+                                                label: 'Empty pages pool 
size:',
+                                                model: 
'$item.emptyPagesPoolSize',
+                                                name: 
'"MemoryPolicyEmptyPagesPoolSize"',
+                                                placeholder: '{{ 
::$ctrl.Clusters.memoryPolicy.emptyPagesPoolSize.default }}',
+                                                min: '{{ 
::$ctrl.Clusters.memoryPolicy.emptyPagesPoolSize.min }}',
+                                                max: '{{ 
$ctrl.Clusters.memoryPolicy.emptyPagesPoolSize.max($ctrl.clonedCluster, $item) 
}}',
+                                                tip: 'The minimal number of 
empty pages to be present in reuse lists for this memory policy'
+                                            })
 
-                                            //- Since ignite 2.1
-                                            
.pc-form-grid-col-30(ng-if-start='$ctrl.available("2.1.0")')
-                                                +number('Sub intervals:', 
'$item.subIntervals', '"MemoryPolicySubIntervals"',
-                                                    'true', '5', '1', 'A 
number of sub-intervals the whole rate time interval will be split into to 
calculate allocation and eviction rates')
-                                            .pc-form-grid-col-30(ng-if-end)
-                                                +number('Rate time interval:', 
'$item.rateTimeInterval', '"MemoryPolicyRateTimeInterval"',
-                                                    'true', '60000', '1000', 
'Time interval for allocation rate and eviction rate monitoring purposes')
-                                                    
-                                            .pc-form-grid-col-60
-                                                +checkbox('Metrics enabled', 
'$item.metricsEnabled', '"MemoryPolicyMetricsEnabled"',
-                                                'Whether memory metrics are 
enabled by default on node startup')
+                                        //- Since ignite 2.1
+                                        
.pc-form-grid-col-30(ng-if-start='$ctrl.available("2.1.0")')
+                                            +number('Sub intervals:', 
'$item.subIntervals', '"MemoryPolicySubIntervals"',
+                                                'true', '5', '1', 'A number of 
sub-intervals the whole rate time interval will be split into to calculate 
allocation and eviction rates')
+                                        .pc-form-grid-col-30(ng-if-end)
+                                            +number('Rate time interval:', 
'$item.rateTimeInterval', '"MemoryPolicyRateTimeInterval"',
+                                                'true', '60000', '1000', 'Time 
interval for allocation rate and eviction rate monitoring purposes')
+                                                
+                                        .pc-form-grid-col-60
+                                            +checkbox('Metrics enabled', 
'$item.metricsEnabled', '"MemoryPolicyMetricsEnabled"',
+                                            'Whether memory metrics are 
enabled by default on node startup')
 
-                                        list-editable-no-items
-                                            list-editable-add-item-button(
-                                                
add-item=`$ctrl.Clusters.addMemoryPolicy($ctrl.clonedCluster)`
-                                                label-single='memory policy 
configuration'
-                                                label-multiple='memory policy 
configurations'
-                                            )
+                                    list-editable-no-items
+                                        list-editable-add-item-button(
+                                            
add-item=`$ctrl.Clusters.addMemoryPolicy($ctrl.clonedCluster)`
+                                            label-single='memory policy 
configuration'
+                                            label-multiple='memory policy 
configurations'
+                                        )
 
-                        +clusters-memory-policies
+                    +clusters-memory-policies
 
-            .pca-form-column-6
-                +preview-xml-java(model, 'clusterMemory')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterMemory')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.pug
index 2cfc59c..82994a9 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.pug
@@ -19,32 +19,28 @@ include /app/helpers/jade/mixins
 -var form = 'metrics'
 -var model = '$ctrl.clonedCluster'
 
-.pca-panel.pca-panel-default(ng-form=form novalidate)
-    .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
-        ignite-form-panel-chevron
-        .pca-panel-heading-title Metrics
-        .pca-panel-heading-description
-            | Cluster runtime metrics settings.
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row
-            .pca-form-column-6.pc-form-grid-row
-                .pc-form-grid-col-30
-                    +number('Elapsed time:', `${model}.metricsExpireTime`, 
'"metricsExpireTime"', 'true', 'Long.MAX_VALUE', '1',
-                        'Time in milliseconds after which a certain metric 
value is considered expired')
-                .pc-form-grid-col-30
-                    +number('History size:', `${model}.metricsHistorySize`, 
'"metricsHistorySize"', 'true', '10000', '1',
-                        'Number of metrics kept in history to compute totals 
and averages')
-                .pc-form-grid-col-30
-                    +number('Log frequency:', `${model}.metricsLogFrequency`, 
'"metricsLogFrequency"', 'true', '60000', '0',
-                        'Frequency of metrics log print out<br/>\ ' +
-                        'When <b>0</b> log print of metrics is disabled')
-                .pc-form-grid-col-30
-                    +number('Update frequency:', 
`${model}.metricsUpdateFrequency`, '"metricsUpdateFrequency"', 'true', '2000', 
'-1',
-                        'Job metrics update frequency in milliseconds\
-                        <ul>\
-                            <li>If set to -1 job metrics are never 
updated</li>\
-                            <li>If set to 0 job metrics are updated on each 
job start and finish</li>\
-                            <li>Positive value defines the actual update 
frequency</li>\
-                        </ul>')
-            .pca-form-column-6
-                +preview-xml-java(model, 'clusterMetrics')
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Metrics
+    panel-description Cluster runtime metrics settings.
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-30
+                +number('Elapsed time:', `${model}.metricsExpireTime`, 
'"metricsExpireTime"', 'true', 'Long.MAX_VALUE', '1',
+                    'Time in milliseconds after which a certain metric value 
is considered expired')
+            .pc-form-grid-col-30
+                +number('History size:', `${model}.metricsHistorySize`, 
'"metricsHistorySize"', 'true', '10000', '1',
+                    'Number of metrics kept in history to compute totals and 
averages')
+            .pc-form-grid-col-30
+                +number('Log frequency:', `${model}.metricsLogFrequency`, 
'"metricsLogFrequency"', 'true', '60000', '0',
+                    'Frequency of metrics log print out<br/>\ ' +
+                    'When <b>0</b> log print of metrics is disabled')
+            .pc-form-grid-col-30
+                +number('Update frequency:', 
`${model}.metricsUpdateFrequency`, '"metricsUpdateFrequency"', 'true', '2000', 
'-1',
+                    'Job metrics update frequency in milliseconds\
+                    <ul>\
+                        <li>If set to -1 job metrics are never updated</li>\
+                        <li>If set to 0 job metrics are updated on each job 
start and finish</li>\
+                        <li>Positive value defines the actual update 
frequency</li>\
+                    </ul>')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterMetrics')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/misc.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/misc.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/misc.pug
index 99f05f3..cdc7258 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/misc.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/misc.pug
@@ -19,44 +19,40 @@ include /app/helpers/jade/mixins
 -var form = 'misc'
 -var model = '$ctrl.clonedCluster'
 
-.pca-panel.pca-panel-default(ng-form=form novalidate)
-    .pca-panel-heading(bs-collapse-toggle)
-        ignite-form-panel-chevron
-        .pca-panel-heading-title Miscellaneous
-        .pca-panel-heading-description
-            | Various miscellaneous cluster settings.
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body.pca-form-row
-            .pca-form-column-6.pc-form-grid-row
-                .pc-form-grid-col-60
-                    +text('Work directory:', model + '.workDirectory', 
'"workDirectory"', 'false', 'Input work directory',
-                        'Ignite work directory.<br/>\
-                        If not provided, the method will use work directory 
under IGNITE_HOME specified by IgniteConfiguration#setIgniteHome(String)\
-                        or IGNITE_HOME environment variable or system 
property.')
-
-                //- Since ignite 2.0
-                .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.0.0")')
-                    +text('Consistent ID:', model + '.consistentId', 
'"ConsistentId"', 'false', 'Input consistent ID', 'Consistent globally unique 
node ID which survives node restarts')
-                .pc-form-grid-col-60
-                    +java-class('Warmup closure:', model + '.warmupClosure', 
'"warmupClosure"', 'true', 'false', 'This closure will be executed before 
actual grid instance start')
-                .pc-form-grid-col-60
-                    +checkbox('Active on start', model + '.activeOnStart', 
'"activeOnStart"',
-                        'If cluster is not active on start, there will be no 
cache partition map exchanges performed until the cluster is activated')
-                .pc-form-grid-col-60(ng-if-end)
-                    +checkbox('Cache sanity check enabled', model + 
'.cacheSanityCheckEnabled', '"cacheSanityCheckEnabled"',
-                        'If enabled, then Ignite will perform the following 
checks and throw an exception if check fails<br/>\
-                        <ul>\
-                        <li>Cache entry is not externally locked with lock or 
lockAsync methods when entry is enlisted to transaction</li>\
-                        <li>Each entry in affinity group - lock transaction 
has the same affinity key as was specified on affinity transaction start</li>\
-                        <li>Each entry in partition group - lock transaction 
belongs to the same partition as was specified on partition transaction 
start</li>\
-                        </ul>')
-
-                .pc-form-grid-col-60(ng-if='$ctrl.available(["1.0.0", 
"2.1.0"])')
-                    +checkbox('Late affinity assignment', model + 
'.lateAffinityAssignment', '"lateAffinityAssignment"',
-                        'With late affinity assignment mode if primary node 
was changed for some partition this nodes becomes primary only when rebalancing 
for all assigned primary partitions is finished')
-
-                .pc-form-grid-col-60(ng-if='$ctrl.available("2.1.0")')
-                    +number('Long query timeout:', 
`${model}.longQueryWarningTimeout`, '"LongQueryWarningTimeout"', 'true', 
'3000', '0',
-                    'Timeout in milliseconds after which long query warning 
will be printed')
-            .pca-form-column-6
-                +preview-xml-java(model, 'clusterMisc', 'caches')
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Miscellaneous
+    panel-description Various miscellaneous cluster settings.
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +text('Work directory:', model + '.workDirectory', 
'"workDirectory"', 'false', 'Input work directory',
+                    'Ignite work directory.<br/>\
+                    If not provided, the method will use work directory under 
IGNITE_HOME specified by IgniteConfiguration#setIgniteHome(String)\
+                    or IGNITE_HOME environment variable or system property.')
+
+            //- Since ignite 2.0
+            .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.0.0")')
+                +text('Consistent ID:', model + '.consistentId', 
'"ConsistentId"', 'false', 'Input consistent ID', 'Consistent globally unique 
node ID which survives node restarts')
+            .pc-form-grid-col-60
+                +java-class('Warmup closure:', model + '.warmupClosure', 
'"warmupClosure"', 'true', 'false', 'This closure will be executed before 
actual grid instance start')
+            .pc-form-grid-col-60
+                +checkbox('Active on start', model + '.activeOnStart', 
'"activeOnStart"',
+                    'If cluster is not active on start, there will be no cache 
partition map exchanges performed until the cluster is activated')
+            .pc-form-grid-col-60(ng-if-end)
+                +checkbox('Cache sanity check enabled', model + 
'.cacheSanityCheckEnabled', '"cacheSanityCheckEnabled"',
+                    'If enabled, then Ignite will perform the following checks 
and throw an exception if check fails<br/>\
+                    <ul>\
+                    <li>Cache entry is not externally locked with lock or 
lockAsync methods when entry is enlisted to transaction</li>\
+                    <li>Each entry in affinity group - lock transaction has 
the same affinity key as was specified on affinity transaction start</li>\
+                    <li>Each entry in partition group - lock transaction 
belongs to the same partition as was specified on partition transaction 
start</li>\
+                    </ul>')
+
+            .pc-form-grid-col-60(ng-if='$ctrl.available(["1.0.0", "2.1.0"])')
+                +checkbox('Late affinity assignment', model + 
'.lateAffinityAssignment', '"lateAffinityAssignment"',
+                    'With late affinity assignment mode if primary node was 
changed for some partition this nodes becomes primary only when rebalancing for 
all assigned primary partitions is finished')
+
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.1.0")')
+                +number('Long query timeout:', 
`${model}.longQueryWarningTimeout`, '"LongQueryWarningTimeout"', 'true', 
'3000', '0',
+                'Timeout in milliseconds after which long query warning will 
be printed')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterMisc', 'caches')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/odbc.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/odbc.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/odbc.pug
index b35b30c..74b1f02 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/odbc.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/odbc.pug
@@ -20,50 +20,51 @@ include /app/helpers/jade/mixins
 -var model = '$ctrl.clonedCluster.odbc'
 -var enabled = model + '.odbcEnabled'
 
-.pca-panel.pca-panel-default(ng-show='$ctrl.available(["1.0.0", "2.1.0"])' 
ng-form=form novalidate)
-    .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
-        ignite-form-panel-chevron
-        .pca-panel-heading-title ODBC configuration
-        .pca-panel-heading-description
-            | ODBC server configuration. 
-            | 
#[a.link-success(href="https://apacheignite.readme.io/docs/odbc-driver"; 
target="_blank") More info]
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body(ng-if=`$ctrl.available(["1.0.0", "2.1.0"]) && 
ui.isPanelLoaded('${form}')`).pca-form-row
-            .pca-form-column-6
-                .settings-row
-                    +sane-form-field-checkbox({
-                        label: 'Enabled',
-                        model: enabled,
-                        name: '"odbcEnabled"',
-                        tip: 'Flag indicating whether to configure ODBC 
configuration'
-                    })(
-                        ui-validate=`{
-                            correctMarshaller: 
'$ctrl.Clusters.odbc.odbcEnabled.correctMarshaller($ctrl.clonedCluster, $value)'
-                        }`
-                        
ui-validate-watch='$ctrl.Clusters.odbc.odbcEnabled.correctMarshallerWatch("$ctrl.clonedCluster")'
-                    )
-                        +form-field-feedback(null, 'correctMarshaller', 'ODBC 
can only be used with BinaryMarshaller')
-                .settings-row
-                    +text-ip-address-with-port-range('ODBC endpoint address:', 
`${model}.endpointAddress`, '"endpointAddress"', enabled, 
'0.0.0.0:10800..10810',
-                        'ODBC endpoint address. <br/>\
-                        The following address formats are permitted:\
-                        <ul>\
-                            <li>hostname - will use provided hostname and 
default port range</li>\
-                            <li>hostname:port - will use provided hostname and 
port</li>\
-                            <li>hostname:port_from..port_to - will use 
provided hostname and port range</li>\
-                        </ul>')
-                .settings-row
-                    +number('Send buffer size:', 
`${model}.socketSendBufferSize`, '"ODBCSocketSendBufferSize"', enabled, '0', 
'0',
-                        'Socket send buffer size.<br/>\
-                        When set to <b>0</b>, operation system default will be 
used')
-                .settings-row
-                    +number('Socket receive buffer size:', 
`${model}.socketReceiveBufferSize`, '"ODBCSocketReceiveBufferSize"', enabled, 
'0', '0',
-                        'Socket receive buffer size.<br/>\
-                        When set to <b>0</b>, operation system default will be 
used')
-                .settings-row
-                    +number('Maximum open cursors', `${model}.maxOpenCursors`, 
'"maxOpenCursors"', enabled, '128', '1', 'Maximum number of opened cursors per 
connection')
-                .settings-row
-                    +number('Pool size:', `${model}.threadPoolSize`, 
'"ODBCThreadPoolSize"', enabled, 'max(8, availableProcessors)', '1',
-                        'Size of thread pool that is in charge of processing 
ODBC tasks')
-            .pca-form-column-6
-                +preview-xml-java(model, 'clusterODBC')
+panel-collapsible(
+    ng-form=form
+    on-open=`ui.loadPanel('${form}')`
+    ng-show='$ctrl.available(["1.0.0", "2.1.0"])'
+)
+    panel-title ODBC configuration
+    panel-description
+        | ODBC server configuration. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/odbc-driver"; 
target="_blank") More info]
+    panel-content.pca-form-row(ng-if=`$ctrl.available(["1.0.0", "2.1.0"]) && 
ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6
+            .settings-row
+                +sane-form-field-checkbox({
+                    label: 'Enabled',
+                    model: enabled,
+                    name: '"odbcEnabled"',
+                    tip: 'Flag indicating whether to configure ODBC 
configuration'
+                })(
+                    ui-validate=`{
+                        correctMarshaller: 
'$ctrl.Clusters.odbc.odbcEnabled.correctMarshaller($ctrl.clonedCluster, $value)'
+                    }`
+                    
ui-validate-watch='$ctrl.Clusters.odbc.odbcEnabled.correctMarshallerWatch("$ctrl.clonedCluster")'
+                )
+                    +form-field-feedback(null, 'correctMarshaller', 'ODBC can 
only be used with BinaryMarshaller')
+            .settings-row
+                +text-ip-address-with-port-range('ODBC endpoint address:', 
`${model}.endpointAddress`, '"endpointAddress"', enabled, 
'0.0.0.0:10800..10810',
+                    'ODBC endpoint address. <br/>\
+                    The following address formats are permitted:\
+                    <ul>\
+                        <li>hostname - will use provided hostname and default 
port range</li>\
+                        <li>hostname:port - will use provided hostname and 
port</li>\
+                        <li>hostname:port_from..port_to - will use provided 
hostname and port range</li>\
+                    </ul>')
+            .settings-row
+                +number('Send buffer size:', `${model}.socketSendBufferSize`, 
'"ODBCSocketSendBufferSize"', enabled, '0', '0',
+                    'Socket send buffer size.<br/>\
+                    When set to <b>0</b>, operation system default will be 
used')
+            .settings-row
+                +number('Socket receive buffer size:', 
`${model}.socketReceiveBufferSize`, '"ODBCSocketReceiveBufferSize"', enabled, 
'0', '0',
+                    'Socket receive buffer size.<br/>\
+                    When set to <b>0</b>, operation system default will be 
used')
+            .settings-row
+                +number('Maximum open cursors', `${model}.maxOpenCursors`, 
'"maxOpenCursors"', enabled, '128', '1', 'Maximum number of opened cursors per 
connection')
+            .settings-row
+                +number('Pool size:', `${model}.threadPoolSize`, 
'"ODBCThreadPoolSize"', enabled, 'max(8, availableProcessors)', '1',
+                    'Size of thread pool that is in charge of processing ODBC 
tasks')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterODBC')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/persistence.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/persistence.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/persistence.pug
index edd1c32..2c8d10a 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/persistence.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/persistence.pug
@@ -20,62 +20,63 @@ include /app/helpers/jade/mixins
 -var model = '$ctrl.clonedCluster.persistenceStoreConfiguration'
 -var enabled = model + '.enabled'
 
-.pca-panel.pca-panel-default(ng-show='$ctrl.available(["2.1.0", "2.3.0"])' 
ng-form=form novalidate)
-    .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
-        ignite-form-panel-chevron
-        .pca-panel-heading-title Persistence store
-        .pca-panel-heading-description
-            | Configures Apache Ignite Native Persistence.
-            
a.link-success(href='https://apacheignite.readme.io/docs/distributed-persistent-store'
 target='_blank') More info
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body(ng-if=`$ctrl.available(["2.1.0", "2.3.0"]) && 
ui.isPanelLoaded('${form}')`).pca-form-row
-            .pca-form-column-6.pc-form-grid-row
-                .pc-form-grid-col-60
-                    +checkbox('Enabled', enabled, '"PersistenceEnabled"', 
'Flag indicating whether to configure persistent configuration')
-                .pc-form-grid-col-60
-                    +text-enabled('Store path:', 
`${model}.persistentStorePath`, '"PersistenceStorePath"', enabled, 'false', 
'Input store path',
-                    'A path the root directory where the Persistent Store will 
persist data and indexes')
-                .pc-form-grid-col-60
-                    +checkbox-enabled('Metrics enabled', 
`${model}.metricsEnabled`, '"PersistenceMetricsEnabled"', enabled, 'Flag 
indicating whether persistence metrics collection is enabled')
-                .pc-form-grid-col-60
-                    +checkbox-enabled('Always write full pages', 
`${model}.alwaysWriteFullPages`, '"PersistenceAlwaysWriteFullPages"', enabled, 
'Flag indicating whether always write full pages')
-                .pc-form-grid-col-60
-                    +number('Checkpointing frequency:', 
`${model}.checkpointingFrequency`, '"PersistenceCheckpointingFrequency"', 
enabled, '180000', '1',
-                    'Frequency which is a minimal interval when the dirty 
pages will be written to the Persistent Store')
-                .pc-form-grid-col-60
-                    +number('Checkpointing page buffer size:', 
`${model}.checkpointingPageBufferSize`, 
'"PersistenceCheckpointingPageBufferSize"', enabled, '268435456', '0',
-                    'Amount of memory allocated for a checkpointing temporary 
buffer')
-                .pc-form-grid-col-60
-                    +number('Checkpointing threads:', 
`${model}.checkpointingThreads`, '"PersistenceCheckpointingThreads"', enabled, 
'1', '1', 'A number of threads to use for the checkpointing purposes')
-                .pc-form-grid-col-60
-                    +text-enabled('WAL store path:', `${model}.walStorePath`, 
'"PersistenceWalStorePath"', enabled, 'false', 'Input store path', 'A path to 
the directory where WAL is stored')
-                .pc-form-grid-col-60
-                    +text-enabled('WAL archive path:', 
`${model}.walArchivePath`, '"PersistenceWalArchivePath"', enabled, 'false', 
'Input archive path', 'A path to the WAL archive directory')
-                .pc-form-grid-col-30
-                    +number('WAL segments:', `${model}.walSegments`, 
'"PersistenceWalSegments"', enabled, '10', '1', 'A number of WAL segments to 
work with')
-                .pc-form-grid-col-30
-                    +number('WAL segment size:', `${model}.walSegmentSize`, 
'"PersistenceWalSegmentSize"', enabled, '67108864', '0', 'Size of a WAL 
segment')
-                .pc-form-grid-col-30
-                    +number('WAL history size:', `${model}.walHistorySize`, 
'"PersistenceWalHistorySize"', enabled, '20', '1', 'A total number of 
checkpoints to keep in the WAL history')
-                .pc-form-grid-col-30
-                    +number('WAL flush frequency:', 
`${model}.walFlushFrequency`, '"PersistenceWalFlushFrequency"', enabled, 
'2000', '1',
-                    'How often will be fsync, in milliseconds. In background 
mode, exist thread which do fsync by timeout')
-                .pc-form-grid-col-30
-                    +number('WAL fsync delay:', `${model}.walFsyncDelayNanos`, 
'"PersistenceWalFsyncDelay"', enabled, '1000', '1', 'WAL fsync delay, in 
nanoseconds')
-                .pc-form-grid-col-30
-                    +number('WAL record iterator buffer size:', 
`${model}.walRecordIteratorBufferSize`, 
'"PersistenceWalRecordIteratorBufferSize"', enabled, '67108864', '1',
-                    'How many bytes iterator read from disk(for one reading), 
during go ahead WAL')
-                .pc-form-grid-col-30
-                    +number('Lock wait time:', `${model}.lockWaitTime`, 
'"PersistenceLockWaitTime"', enabled, '10000', '1',
-                    'Time out in second, while wait and try get file lock for 
start persist manager')
-                .pc-form-grid-col-30
-                    +number('Rate time interval:', 
`${model}.rateTimeInterval`, '"PersistenceRateTimeInterval"', enabled, '60000', 
'1000',
-                    'The length of the time interval for rate - based metrics. 
This interval defines a window over which hits will be tracked.')
-                .pc-form-grid-col-30
-                    +number('Thread local buffer size:', `${model}.tlbSize`, 
'"PersistenceTlbSize"', enabled, '131072', '1',
-                    'Define size thread local buffer. Each thread which write 
to WAL have thread local buffer for serialize recode before write in WAL')
-                .pc-form-grid-col-30
-                    +number('Sub intervals:', `${model}.subIntervals`, 
'"PersistenceSubIntervals"', enabled, '5', '1',
-                    'Number of sub - intervals the whole rate time interval 
will be split into to calculate rate - based metrics')
-            .pca-form-column-6
-                +preview-xml-java(model, 'clusterPersistence')
+panel-collapsible(
+    ng-form=form
+    on-open=`ui.loadPanel('${form}')`
+    ng-show='$ctrl.available(["2.1.0", "2.3.0"])'
+)
+    panel-title Persistence store
+    panel-description
+        | Configures Apache Ignite Native Persistence. 
+        
a.link-success(href='https://apacheignite.readme.io/docs/distributed-persistent-store'
 target='_blank') More info
+    panel-content.pca-form-row(ng-if=`$ctrl.available(["2.1.0", "2.3.0"]) && 
ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +checkbox('Enabled', enabled, '"PersistenceEnabled"', 'Flag 
indicating whether to configure persistent configuration')
+            .pc-form-grid-col-60
+                +text-enabled('Store path:', `${model}.persistentStorePath`, 
'"PersistenceStorePath"', enabled, 'false', 'Input store path',
+                'A path the root directory where the Persistent Store will 
persist data and indexes')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Metrics enabled', 
`${model}.metricsEnabled`, '"PersistenceMetricsEnabled"', enabled, 'Flag 
indicating whether persistence metrics collection is enabled')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Always write full pages', 
`${model}.alwaysWriteFullPages`, '"PersistenceAlwaysWriteFullPages"', enabled, 
'Flag indicating whether always write full pages')
+            .pc-form-grid-col-60
+                +number('Checkpointing frequency:', 
`${model}.checkpointingFrequency`, '"PersistenceCheckpointingFrequency"', 
enabled, '180000', '1',
+                'Frequency which is a minimal interval when the dirty pages 
will be written to the Persistent Store')
+            .pc-form-grid-col-60
+                +number('Checkpointing page buffer size:', 
`${model}.checkpointingPageBufferSize`, 
'"PersistenceCheckpointingPageBufferSize"', enabled, '268435456', '0',
+                'Amount of memory allocated for a checkpointing temporary 
buffer')
+            .pc-form-grid-col-60
+                +number('Checkpointing threads:', 
`${model}.checkpointingThreads`, '"PersistenceCheckpointingThreads"', enabled, 
'1', '1', 'A number of threads to use for the checkpointing purposes')
+            .pc-form-grid-col-60
+                +text-enabled('WAL store path:', `${model}.walStorePath`, 
'"PersistenceWalStorePath"', enabled, 'false', 'Input store path', 'A path to 
the directory where WAL is stored')
+            .pc-form-grid-col-60
+                +text-enabled('WAL archive path:', `${model}.walArchivePath`, 
'"PersistenceWalArchivePath"', enabled, 'false', 'Input archive path', 'A path 
to the WAL archive directory')
+            .pc-form-grid-col-30
+                +number('WAL segments:', `${model}.walSegments`, 
'"PersistenceWalSegments"', enabled, '10', '1', 'A number of WAL segments to 
work with')
+            .pc-form-grid-col-30
+                +number('WAL segment size:', `${model}.walSegmentSize`, 
'"PersistenceWalSegmentSize"', enabled, '67108864', '0', 'Size of a WAL 
segment')
+            .pc-form-grid-col-30
+                +number('WAL history size:', `${model}.walHistorySize`, 
'"PersistenceWalHistorySize"', enabled, '20', '1', 'A total number of 
checkpoints to keep in the WAL history')
+            .pc-form-grid-col-30
+                +number('WAL flush frequency:', `${model}.walFlushFrequency`, 
'"PersistenceWalFlushFrequency"', enabled, '2000', '1',
+                'How often will be fsync, in milliseconds. In background mode, 
exist thread which do fsync by timeout')
+            .pc-form-grid-col-30
+                +number('WAL fsync delay:', `${model}.walFsyncDelayNanos`, 
'"PersistenceWalFsyncDelay"', enabled, '1000', '1', 'WAL fsync delay, in 
nanoseconds')
+            .pc-form-grid-col-30
+                +number('WAL record iterator buffer size:', 
`${model}.walRecordIteratorBufferSize`, 
'"PersistenceWalRecordIteratorBufferSize"', enabled, '67108864', '1',
+                'How many bytes iterator read from disk(for one reading), 
during go ahead WAL')
+            .pc-form-grid-col-30
+                +number('Lock wait time:', `${model}.lockWaitTime`, 
'"PersistenceLockWaitTime"', enabled, '10000', '1',
+                'Time out in second, while wait and try get file lock for 
start persist manager')
+            .pc-form-grid-col-30
+                +number('Rate time interval:', `${model}.rateTimeInterval`, 
'"PersistenceRateTimeInterval"', enabled, '60000', '1000',
+                'The length of the time interval for rate - based metrics. 
This interval defines a window over which hits will be tracked.')
+            .pc-form-grid-col-30
+                +number('Thread local buffer size:', `${model}.tlbSize`, 
'"PersistenceTlbSize"', enabled, '131072', '1',
+                'Define size thread local buffer. Each thread which write to 
WAL have thread local buffer for serialize recode before write in WAL')
+            .pc-form-grid-col-30
+                +number('Sub intervals:', `${model}.subIntervals`, 
'"PersistenceSubIntervals"', enabled, '5', '1',
+                'Number of sub - intervals the whole rate time interval will 
be split into to calculate rate - based metrics')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterPersistence')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/service.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/service.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/service.pug
index 7f9d75f..a244602 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/service.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/service.pug
@@ -19,74 +19,71 @@ include /app/helpers/jade/mixins
 -var form = 'serviceConfiguration'
 -var model = '$ctrl.clonedCluster.serviceConfigurations'
 
-.pca-panel.pca-panel-default(ng-form=form novalidate)
-    .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
-        ignite-form-panel-chevron
-        .pca-panel-heading-title Service configuration
-        .pca-panel-heading-description
-            | Service Grid allows for deployments of arbitrary user-defined 
services on the cluster. 
-            | 
#[a.link-success(href="https://apacheignite.readme.io/docs/fault-tolerance"; 
target="_blank") More info]
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row
-            .pca-form-column-6
-                mixin clusters-service-configurations
-                    
.ignite-form-field(ng-init='serviceConfigurationsTbl={type: 
"serviceConfigurations", model: "serviceConfigurations", focusId: "kind", ui: 
"failover-table"}')
-                        +ignite-form-field__label('Service configurations:', 
'"serviceConfigurations"')
-                        .ignite-form-field__control
-                            -let items = model
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Service configuration
+    panel-description
+        | Service Grid allows for deployments of arbitrary user-defined 
services on the cluster. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/fault-tolerance"; 
target="_blank") More info]
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6
+            mixin clusters-service-configurations
+                .ignite-form-field(ng-init='serviceConfigurationsTbl={type: 
"serviceConfigurations", model: "serviceConfigurations", focusId: "kind", ui: 
"failover-table"}')
+                    +ignite-form-field__label('Service configurations:', 
'"serviceConfigurations"')
+                    .ignite-form-field__control
+                        -let items = model
 
-                            list-editable(ng-model=items 
name='serviceConfigurations')
-                                list-editable-item-edit
-                                    - form = '$parent.form'
-                        
-                                    -var nodeFilter = '$item.nodeFilter';
-                                    -var nodeFilterKind = nodeFilter + '.kind';
-                                    -var customFilter = nodeFilterKind + ' === 
"Custom"'
+                        list-editable(ng-model=items 
name='serviceConfigurations')
+                            list-editable-item-edit
+                                - form = '$parent.form'
+                    
+                                -var nodeFilter = '$item.nodeFilter';
+                                -var nodeFilterKind = nodeFilter + '.kind';
+                                -var customFilter = nodeFilterKind + ' === 
"Custom"'
 
-                                    .settings-row
-                                        +sane-ignite-form-field-text({
-                                            label: 'Name:',
-                                            model: '$item.name',
-                                            name: '"serviceName"',
-                                            required: true,
-                                            placeholder: 'Input service name'
-                                        })(
-                                            ui-validate=`{
-                                                uniqueName: 
'$ctrl.Clusters.serviceConfigurations.serviceConfiguration.name.customValidators.uniqueName($item,
 ${items})'
-                                            }`
-                                            ui-validate-watch=`"${items}"`
-                                            
ui-validate-watch-object-equality='true'
-                                            ng-model-options='{allowInvalid: 
true}'
-                                        )
-                                            
+form-field-feedback('"serviceName', 'uniqueName', 'Service with that name is 
already configured')
-                                    .settings-row
-                                        +java-class('Service class', 
'$item.service', '"serviceService"', 'true', 'true', 'Service implementation 
class name')
-                                    .settings-row
-                                        +number('Max per node count:', 
'$item.maxPerNodeCount', '"ServiceMaxPerNodeCount"', 'true', 'Unlimited', '0',
-                                            'Maximum number of deployed 
service instances on each node.<br/>' +
-                                            'Zero for unlimited')
-                                    .settings-row
-                                        +number('Total count:', 
'$item.totalCount', '"serviceTotalCount"', 'true', 'Unlimited', '0',
-                                            'Total number of deployed service 
instances in the cluster.<br/>' +
-                                            'Zero for unlimited')
-                                    .settings-row
-                                        +dropdown-required-empty('Cache:', 
'$item.cache', '"serviceCache"', 'true', 'false',
-                                            'Choose cache', 'No caches 
configured for current cluster', '$ctrl.cachesMenu', 'Cache name used for 
key-to-node affinity calculation')(
-                                            
pc-is-in-collection='$ctrl.clonedCluster.caches'
-                                        ).settings-row
-                                            +form-field-feedback(form, 
'isInCollection', `Cluster doesn't have such a cache`)
-                                    .settings-row
-                                        +text('Affinity key:', 
'$item.affinityKey', '"serviceAffinityKey"', 'false', 'Input affinity key',
-                                            'Affinity key used for key-to-node 
affinity calculation')
-
-                                list-editable-no-items
-                                    list-editable-add-item-button(
-                                        
add-item=`$ctrl.Clusters.addServiceConfiguration($ctrl.clonedCluster)`
-                                        label-single='service configuration'
-                                        label-multiple='service configurations'
+                                .settings-row
+                                    +sane-ignite-form-field-text({
+                                        label: 'Name:',
+                                        model: '$item.name',
+                                        name: '"serviceName"',
+                                        required: true,
+                                        placeholder: 'Input service name'
+                                    })(
+                                        ui-validate=`{
+                                            uniqueName: 
'$ctrl.Clusters.serviceConfigurations.serviceConfiguration.name.customValidators.uniqueName($item,
 ${items})'
+                                        }`
+                                        ui-validate-watch=`"${items}"`
+                                        
ui-validate-watch-object-equality='true'
+                                        ng-model-options='{allowInvalid: true}'
                                     )
+                                        +form-field-feedback('"serviceName', 
'uniqueName', 'Service with that name is already configured')
+                                .settings-row
+                                    +java-class('Service class', 
'$item.service', '"serviceService"', 'true', 'true', 'Service implementation 
class name')
+                                .settings-row
+                                    +number('Max per node count:', 
'$item.maxPerNodeCount', '"ServiceMaxPerNodeCount"', 'true', 'Unlimited', '0',
+                                        'Maximum number of deployed service 
instances on each node.<br/>' +
+                                        'Zero for unlimited')
+                                .settings-row
+                                    +number('Total count:', 
'$item.totalCount', '"serviceTotalCount"', 'true', 'Unlimited', '0',
+                                        'Total number of deployed service 
instances in the cluster.<br/>' +
+                                        'Zero for unlimited')
+                                .settings-row
+                                    +dropdown-required-empty('Cache:', 
'$item.cache', '"serviceCache"', 'true', 'false',
+                                        'Choose cache', 'No caches configured 
for current cluster', '$ctrl.cachesMenu', 'Cache name used for key-to-node 
affinity calculation')(
+                                        
pc-is-in-collection='$ctrl.clonedCluster.caches'
+                                    ).settings-row
+                                        +form-field-feedback(form, 
'isInCollection', `Cluster doesn't have such a cache`)
+                                .settings-row
+                                    +text('Affinity key:', 
'$item.affinityKey', '"serviceAffinityKey"', 'false', 'Input affinity key',
+                                        'Affinity key used for key-to-node 
affinity calculation')
+
+                            list-editable-no-items
+                                list-editable-add-item-button(
+                                    
add-item=`$ctrl.Clusters.addServiceConfiguration($ctrl.clonedCluster)`
+                                    label-single='service configuration'
+                                    label-multiple='service configurations'
+                                )
 
-                +clusters-service-configurations
+            +clusters-service-configurations
 
-            .pca-form-column-6
-                +preview-xml-java('$ctrl.clonedCluster', 
'clusterServiceConfiguration', '$ctrl.caches')
+        .pca-form-column-6
+            +preview-xml-java('$ctrl.clonedCluster', 
'clusterServiceConfiguration', '$ctrl.caches')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/sql-connector.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/sql-connector.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/sql-connector.pug
index b52b973..2e61fc2 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/sql-connector.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/sql-connector.pug
@@ -21,37 +21,38 @@ include /app/helpers/jade/mixins
 -var connectionModel = model + '.sqlConnectorConfiguration'
 -var connectionEnabled = connectionModel + '.enabled'
 
-.pca-panel.pca-panel-default(ng-show='$ctrl.available(["2.1.0", "2.3.0"])' 
ng-form=form novalidate)
-    .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
-        ignite-form-panel-chevron
-        .pca-panel-heading-title Query configuration
-        //- TODO IGNITE-5415 Add link to documentation.
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body(ng-if=`$ctrl.available(["2.1.0", "2.3.0"]) && 
ui.isPanelLoaded('${form}')`).pca-form-row
-            .pca-form-column-6.pc-form-grid-row
-                .pc-form-grid-col-60
-                    +checkbox('Enabled', connectionEnabled, 
'"SqlConnectorEnabled"', 'Flag indicating whether to configure SQL connector 
configuration')
-                .pc-form-grid-col-40
-                    +text-enabled('Host:', `${connectionModel}.host`, 
'"SqlConnectorHost"', connectionEnabled, 'false', 'localhost')
-                .pc-form-grid-col-20
-                    +number('Port:', `${connectionModel}.port`, 
'"SqlConnectorPort"', connectionEnabled, '10800', '1025')
-                .pc-form-grid-col-20
-                    +number('Port range:', `${connectionModel}.portRange`, 
'"SqlConnectorPortRange"', connectionEnabled, '100', '0')
-                .pc-form-grid-col-20
-                    +number('Socket send buffer size:', 
`${connectionModel}.socketSendBufferSize`, 
'"SqlConnectorSocketSendBufferSize"', connectionEnabled, '0', '0',
-                        'Socket send buffer size.<br/>\
-                        When set to <b>0</b>, operation system default will be 
used')
-                .pc-form-grid-col-20
-                    +number('Socket receive buffer size:', 
`${connectionModel}.socketReceiveBufferSize`, 
'"SqlConnectorSocketReceiveBufferSize"', connectionEnabled, '0', '0',
-                        'Socket receive buffer size.<br/>\
-                        When set to <b>0</b>, operation system default will be 
used')
-                .pc-form-grid-col-30
-                    +number('Max connection cursors:', 
`${connectionModel}.maxOpenCursorsPerConnection`, 
'"SqlConnectorMaxOpenCursorsPerConnection"', connectionEnabled, '128', '0',
-                        'Max number of opened cursors per connection')
-                .pc-form-grid-col-30
-                    +number('Pool size:', `${connectionModel}.threadPoolSize`, 
'"SqlConnectorThreadPoolSize"', connectionEnabled, 'max(8, 
availableProcessors)', '1',
-                        'Size of thread pool that is in charge of processing 
SQL requests')
-                .pc-form-grid-col-60
-                    +checkbox-enabled('TCP_NODELAY option', 
`${connectionModel}.tcpNoDelay`, '"SqlConnectorTcpNoDelay"', connectionEnabled)
-            .pca-form-column-6
-                +preview-xml-java(model, 'clusterQuery')
+panel-collapsible(
+    ng-form=form
+    on-open=`ui.loadPanel('${form}')`
+    ng-show='$ctrl.available(["2.1.0", "2.3.0"])'
+)
+    panel-title Query configuration
+    //- TODO IGNITE-5415 Add link to documentation.
+    panel-content.pca-form-row(ng-if=`$ctrl.available(["2.1.0", "2.3.0"]) && 
ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +checkbox('Enabled', connectionEnabled, 
'"SqlConnectorEnabled"', 'Flag indicating whether to configure SQL connector 
configuration')
+            .pc-form-grid-col-40
+                +text-enabled('Host:', `${connectionModel}.host`, 
'"SqlConnectorHost"', connectionEnabled, 'false', 'localhost')
+            .pc-form-grid-col-20
+                +number('Port:', `${connectionModel}.port`, 
'"SqlConnectorPort"', connectionEnabled, '10800', '1025')
+            .pc-form-grid-col-20
+                +number('Port range:', `${connectionModel}.portRange`, 
'"SqlConnectorPortRange"', connectionEnabled, '100', '0')
+            .pc-form-grid-col-20
+                +number('Socket send buffer size:', 
`${connectionModel}.socketSendBufferSize`, 
'"SqlConnectorSocketSendBufferSize"', connectionEnabled, '0', '0',
+                    'Socket send buffer size.<br/>\
+                    When set to <b>0</b>, operation system default will be 
used')
+            .pc-form-grid-col-20
+                +number('Socket receive buffer size:', 
`${connectionModel}.socketReceiveBufferSize`, 
'"SqlConnectorSocketReceiveBufferSize"', connectionEnabled, '0', '0',
+                    'Socket receive buffer size.<br/>\
+                    When set to <b>0</b>, operation system default will be 
used')
+            .pc-form-grid-col-30
+                +number('Max connection cursors:', 
`${connectionModel}.maxOpenCursorsPerConnection`, 
'"SqlConnectorMaxOpenCursorsPerConnection"', connectionEnabled, '128', '0',
+                    'Max number of opened cursors per connection')
+            .pc-form-grid-col-30
+                +number('Pool size:', `${connectionModel}.threadPoolSize`, 
'"SqlConnectorThreadPoolSize"', connectionEnabled, 'max(8, 
availableProcessors)', '1',
+                    'Size of thread pool that is in charge of processing SQL 
requests')
+            .pc-form-grid-col-60
+                +checkbox-enabled('TCP_NODELAY option', 
`${connectionModel}.tcpNoDelay`, '"SqlConnectorTcpNoDelay"', connectionEnabled)
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterQuery')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/ssl.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/ssl.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/ssl.pug
index f353e2e..2745f53 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/ssl.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/ssl.pug
@@ -22,72 +22,68 @@ include /app/helpers/jade/mixins
 -var model = cluster + '.sslContextFactory'
 -var trust = model + '.trustManagers'
 
-.pca-panel.pca-panel-default(ng-form=form novalidate)
-    .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
-        ignite-form-panel-chevron
-        .pca-panel-heading-title SSL configuration
-        .pca-panel-heading-description
-            | Settings for SSL configuration for creating a secure socket 
layer. 
-            | 
#[a.link-success(href="https://apacheignite.readme.io/docs/ssltls"; 
target="_blank") More info]
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row
-            .pca-form-column-6
-                .pc-form-grid-row
-                    .pc-form-grid-col-60
-                        +checkbox('Enabled', enabled, '"sslEnabled"', 'Flag 
indicating whether to configure SSL configuration')
-                    .pc-form-grid-col-60
-                        +text-options('Algorithm to create a key manager:', 
`${model}.keyAlgorithm`, '"keyAlgorithm"', '["SumX509", "X509"]', enabled, 
'false', 'SumX509',
-                            'Sets key manager algorithm that will be used to 
create a key manager<br/>\
-                            Notice that in most cased default value suites 
well, however, on Android platform this value need to be set to X509')
-                    .pc-form-grid-col-60
-                        +text-enabled('Key store file:', 
`${model}.keyStoreFilePath`, '"keyStoreFilePath"', enabled, enabled, 'Path to 
the key store file',
-                            'Path to the key store file<br/>\
-                            This is a mandatory parameter since ssl context 
could not be initialized without key manager')
-                    .pc-form-grid-col-30
-                        +text-options('Key store type:', 
`${model}.keyStoreType`, '"keyStoreType"', '["JKS", "PCKS11", "PCKS12"]', 
enabled, 'false', 'JKS',
-                            'Key store type used in context initialization')
-                    .pc-form-grid-col-30
-                        +text-options('Protocol:', `${model}.protocol`, 
'"protocol"', '["TSL", "SSL"]', enabled, 'false', 'TSL', 'Protocol for secure 
transport')
-                    .pc-form-grid-col-60
-                        .ignite-form-field
-                            .ignite-form-field__control
-                                list-editable(
-                                    ng-model=trust
-                                    name='trustManagers'
-                                    list-editable-cols=`::[{name: 
"Pre-configured trust managers:"}]`
-                                    ng-disabled=enabledToDisabled(enabled)
-                                    ng-required=`${enabled} && 
!${model}.trustStoreFilePath`
-                                )
-                                    list-editable-item-view {{ $item }}
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title SSL configuration
+    panel-description
+        | Settings for SSL configuration for creating a secure socket layer. 
+        | #[a.link-success(href="https://apacheignite.readme.io/docs/ssltls"; 
target="_blank") More info]
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +checkbox('Enabled', enabled, '"sslEnabled"', 'Flag indicating 
whether to configure SSL configuration')
+            .pc-form-grid-col-60
+                +text-options('Algorithm to create a key manager:', 
`${model}.keyAlgorithm`, '"keyAlgorithm"', '["SumX509", "X509"]', enabled, 
'false', 'SumX509',
+                    'Sets key manager algorithm that will be used to create a 
key manager<br/>\
+                    Notice that in most cased default value suites well, 
however, on Android platform this value need to be set to X509')
+            .pc-form-grid-col-60
+                +text-enabled('Key store file:', `${model}.keyStoreFilePath`, 
'"keyStoreFilePath"', enabled, enabled, 'Path to the key store file',
+                    'Path to the key store file<br/>\
+                    This is a mandatory parameter since ssl context could not 
be initialized without key manager')
+            .pc-form-grid-col-30
+                +text-options('Key store type:', `${model}.keyStoreType`, 
'"keyStoreType"', '["JKS", "PCKS11", "PCKS12"]', enabled, 'false', 'JKS',
+                    'Key store type used in context initialization')
+            .pc-form-grid-col-30
+                +text-options('Protocol:', `${model}.protocol`, '"protocol"', 
'["TSL", "SSL"]', enabled, 'false', 'TSL', 'Protocol for secure transport')
+            .pc-form-grid-col-60
+                .ignite-form-field
+                    .ignite-form-field__control
+                        list-editable(
+                            ng-model=trust
+                            name='trustManagers'
+                            list-editable-cols=`::[{name: "Pre-configured 
trust managers:"}]`
+                            ng-disabled=enabledToDisabled(enabled)
+                            ng-required=`${enabled} && 
!${model}.trustStoreFilePath`
+                        )
+                            list-editable-item-view {{ $item }}
 
-                                    list-editable-item-edit
-                                        +list-java-class-field('Trust 
manager', '$item', '"trustManager"', trust)
-                                            +unique-feedback('"trustManager"', 
'Such trust manager already exists!')
+                            list-editable-item-edit
+                                +list-java-class-field('Trust manager', 
'$item', '"trustManager"', trust)
+                                    +unique-feedback('"trustManager"', 'Such 
trust manager already exists!')
 
-                                    list-editable-no-items
-                                        list-editable-add-item-button(
-                                            add-item=`$editLast((${trust} = 
${trust} || []).push(''))`
-                                            label-single='trust manager'
-                                            label-multiple='trust managers'
-                                        )
-                            .ignite-form-field__errors(
-                                
ng-messages=`sslConfiguration.trustManagers.$error`
-                                
ng-show=`sslConfiguration.trustManagers.$invalid`
-                            )
-                                +form-field-feedback(_, 'required', 'Trust 
managers or trust store file should be configured')
+                            list-editable-no-items
+                                list-editable-add-item-button(
+                                    add-item=`$editLast((${trust} = ${trust} 
|| []).push(''))`
+                                    label-single='trust manager'
+                                    label-multiple='trust managers'
+                                )
+                    .ignite-form-field__errors(
+                        ng-messages=`sslConfiguration.trustManagers.$error`
+                        ng-show=`sslConfiguration.trustManagers.$invalid`
+                    )
+                        +form-field-feedback(_, 'required', 'Trust managers or 
trust store file should be configured')
 
-                    .pc-form-grid-col-30(ng-if-start=`!${trust}.length`)
-                        +sane-ignite-form-field-text({
-                            label: 'Trust store file:',
-                            model: `${model}.trustStoreFilePath`,
-                            name: '"trustStoreFilePath"',
-                            required: `${enabled} && !${trust}.length`,
-                            disabled: enabledToDisabled(enabled),
-                            placeholder: 'Path to the trust store file',
-                            tip: 'Path to the trust store file'
-                        })
-                            +form-field-feedback(_, 'required', 'Trust store 
file or trust managers should be configured')
-                    .pc-form-grid-col-30(ng-if-end)
-                        +text-options('Trust store type:', 
`${model}.trustStoreType`, '"trustStoreType"', '["JKS", "PCKS11", "PCKS12"]', 
enabled, 'false', 'JKS', 'Trust store type used in context initialization')
-            .pca-form-column-6
-                +preview-xml-java(cluster, 'clusterSsl')
+            .pc-form-grid-col-30(ng-if-start=`!${trust}.length`)
+                +sane-ignite-form-field-text({
+                    label: 'Trust store file:',
+                    model: `${model}.trustStoreFilePath`,
+                    name: '"trustStoreFilePath"',
+                    required: `${enabled} && !${trust}.length`,
+                    disabled: enabledToDisabled(enabled),
+                    placeholder: 'Path to the trust store file',
+                    tip: 'Path to the trust store file'
+                })
+                    +form-field-feedback(_, 'required', 'Trust store file or 
trust managers should be configured')
+            .pc-form-grid-col-30(ng-if-end)
+                +text-options('Trust store type:', `${model}.trustStoreType`, 
'"trustStoreType"', '["JKS", "PCKS11", "PCKS12"]', enabled, 'false', 'JKS', 
'Trust store type used in context initialization')
+        .pca-form-column-6
+            +preview-xml-java(cluster, 'clusterSsl')

Reply via email to