http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.pug
index be07cfd..c315af1 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.pug
@@ -20,42 +20,39 @@ include /app/helpers/jade/mixins
 -var model = '$ctrl.clonedCluster.collision'
 -var modelCollisionKind = model + '.kind';
 
-.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 Collision configuration
-        .pca-panel-heading-description
-            | Configuration Collision SPI allows to regulate how grid jobs get 
executed when they arrive on a destination node for execution. 
-            | 
#[a.link-success(href="https://apacheignite.readme.io/docs/job-scheduling"; 
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
-                    +dropdown('CollisionSpi:', modelCollisionKind, 
'"collisionKind"', 'true', '',
-                        '[\
-                            {value: "JobStealing", label: "Job stealing"},\
-                            {value: "FifoQueue", label: "FIFO queue"},\
-                            {value: "PriorityQueue", label: "Priority queue"},\
-                            {value: "Custom", label: "Custom"},\
-                            {value: "Noop", label: "Default"}\
-                        ]',
-                        'Regulate how grid jobs get executed when they arrive 
on a destination node for execution\
-                        <ul>\
-                            <li>Job stealing - supports job stealing from 
over-utilized nodes to under-utilized nodes</li>\
-                            <li>FIFO queue - jobs are ordered as they 
arrived</li>\
-                            <li>Priority queue - jobs are first ordered by 
their priority</li>\
-                            <li>Custom - custom CollisionSpi 
implementation</li>\
-                            <li>Default - jobs are activated immediately on 
arrival to mapped node</li>\
-                        </ul>')
-                .pc-form-group(ng-show=`${modelCollisionKind} !== 'Noop'`)
-                    .pc-form-grid-row(ng-show=`${modelCollisionKind} === 
'JobStealing'`)
-                        include ./collision/job-stealing
-                    .pc-form-grid-row(ng-show=`${modelCollisionKind} === 
'FifoQueue'`)
-                        include ./collision/fifo-queue
-                    .pc-form-grid-row(ng-show=`${modelCollisionKind} === 
'PriorityQueue'`)
-                        include ./collision/priority-queue
-                    .pc-form-grid-row(ng-show=`${modelCollisionKind} === 
'Custom'`)
-                        include ./collision/custom
-            .pca-form-column-6
-                -var model = '$ctrl.clonedCluster.collision'
-                +preview-xml-java(model, 'clusterCollision')
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Collision configuration
+    panel-description
+        | Configuration Collision SPI allows to regulate how grid jobs get 
executed when they arrive on a destination node for execution. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/job-scheduling"; 
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
+                +dropdown('CollisionSpi:', modelCollisionKind, 
'"collisionKind"', 'true', '',
+                    '[\
+                        {value: "JobStealing", label: "Job stealing"},\
+                        {value: "FifoQueue", label: "FIFO queue"},\
+                        {value: "PriorityQueue", label: "Priority queue"},\
+                        {value: "Custom", label: "Custom"},\
+                        {value: "Noop", label: "Default"}\
+                    ]',
+                    'Regulate how grid jobs get executed when they arrive on a 
destination node for execution\
+                    <ul>\
+                        <li>Job stealing - supports job stealing from 
over-utilized nodes to under-utilized nodes</li>\
+                        <li>FIFO queue - jobs are ordered as they arrived</li>\
+                        <li>Priority queue - jobs are first ordered by their 
priority</li>\
+                        <li>Custom - custom CollisionSpi implementation</li>\
+                        <li>Default - jobs are activated immediately on 
arrival to mapped node</li>\
+                    </ul>')
+            .pc-form-group(ng-show=`${modelCollisionKind} !== 'Noop'`)
+                .pc-form-grid-row(ng-show=`${modelCollisionKind} === 
'JobStealing'`)
+                    include ./collision/job-stealing
+                .pc-form-grid-row(ng-show=`${modelCollisionKind} === 
'FifoQueue'`)
+                    include ./collision/fifo-queue
+                .pc-form-grid-row(ng-show=`${modelCollisionKind} === 
'PriorityQueue'`)
+                    include ./collision/priority-queue
+                .pc-form-grid-row(ng-show=`${modelCollisionKind} === 'Custom'`)
+                    include ./collision/custom
+        .pca-form-column-6
+            -var model = '$ctrl.clonedCluster.collision'
+            +preview-xml-java(model, 'clusterCollision')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.pug
index 7fa92e1..bd8971a 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.pug
@@ -20,118 +20,115 @@ include /app/helpers/jade/mixins
 -var model = '$ctrl.clonedCluster'
 -var communication = model + '.communication'
 
-.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 Communication
-        .pca-panel-heading-description
-            | Configuration of communication with other nodes by TCP/IP.
-            | Provide basic plumbing to send and receive grid messages and is 
utilized for all distributed grid operations. 
-            | 
#[a.link-success(href="https://apacheignite.readme.io/docs/network-config"; 
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-30
-                    +number('Timeout:', `${model}.networkTimeout`, 
'"commNetworkTimeout"', 'true', '5000', '1', 'Maximum timeout in milliseconds 
for network requests')
-                .pc-form-grid-col-30
-                    +number('Send retry delay:', 
`${model}.networkSendRetryDelay`, '"networkSendRetryDelay"', 'true', '1000', 
'1', 'Interval in milliseconds between message send retries')
-                .pc-form-grid-col-30
-                    +number('Send retry count:', 
`${model}.networkSendRetryCount`, '"networkSendRetryCount"', 'true', '3', '1', 
'Message send retries count')
-                .pc-form-grid-col-30(ng-if='$ctrl.available(["1.0.0", 
"2.3.0"])')
-                    +number('Discovery startup delay:', 
`${model}.discoveryStartupDelay`, '"discoveryStartupDelay"', 'true', '60000', 
'1', 'This value is used to expire messages from waiting list whenever node 
discovery discrepancies happen')
-                .pc-form-grid-col-60
-                    +java-class('Communication listener:', 
`${communication}.listener`, '"comListener"', 'true', 'false', 'Listener of 
communication events')
-                .pc-form-grid-col-30
-                    +text-ip-address('Local IP address:', 
`${communication}.localAddress`, '"comLocalAddress"', 'true', '0.0.0.0',
-                        'Local host address for socket binding<br/>\
-                        If not specified use all available addres on local 
host')
-                .pc-form-grid-col-30
-                    +number-min-max('Local port:', 
`${communication}.localPort`, '"comLocalPort"', 'true', '47100', '1024', 
'65535', 'Local port for socket binding')
-                .pc-form-grid-col-30
-                    +number('Local port range:', 
`${communication}.localPortRange`, '"comLocalPortRange"', 'true', '100', '1', 
'Local port range for local host ports')
-                .pc-form-grid-col-30
-                    +sane-ignite-form-field-number({
-                        label: 'Shared memory port:',
-                        model: `${communication}.sharedMemoryPort`,
-                        name: '"sharedMemoryPort"',
-                        placeholder: '{{ 
::$ctrl.Clusters.sharedMemoryPort.default }}',
-                        min: '{{ ::$ctrl.Clusters.sharedMemoryPort.min }}',
-                        max: '{{ ::$ctrl.Clusters.sharedMemoryPort.max }}',
-                        tip: `Local port to accept shared memory 
connections<br/>If set to <b>-1</b> shared memory communication will be 
disabled`
-                    })(
-                        
pc-not-in-collection='::$ctrl.Clusters.sharedMemoryPort.invalidValues'
-                    )
-                        +form-field-feedback('"sharedMemoryPort"', 
'notInCollection', 'Shared memory port should be more than "{{ 
::$ctrl.Clusters.sharedMemoryPort.invalidValues[0] }}" or equal to "{{ 
::$ctrl.Clusters.sharedMemoryPort.min }}"')
-                .pc-form-grid-col-30
-                    +number('Idle connection timeout:', 
`${communication}.idleConnectionTimeout`, '"idleConnectionTimeout"', 'true', 
'30000', '1',
-                        'Maximum idle connection timeout upon which a 
connection to client will be closed')
-                .pc-form-grid-col-30
-                    +number('Connect timeout:', 
`${communication}.connectTimeout`, '"connectTimeout"', 'true', '5000', '0', 
'Connect timeout used when establishing connection with remote nodes')
-                .pc-form-grid-col-30
-                    +number('Max. connect timeout:', 
`${communication}.maxConnectTimeout`, '"maxConnectTimeout"', 'true', '600000', 
'0', 'Maximum connect timeout')
-                .pc-form-grid-col-30
-                    +number('Reconnect count:', 
`${communication}.reconnectCount`, '"comReconnectCount"', 'true', '10', '1',
-                        'Maximum number of reconnect attempts used when 
establishing connection with remote nodes')
-                .pc-form-grid-col-30
-                    +number('Socket send buffer:', 
`${communication}.socketSendBuffer`, '"socketSendBuffer"', 'true', '32768', 
'0', 'Send buffer size for sockets created or accepted by this SPI')
-                .pc-form-grid-col-30
-                    +number('Socket receive buffer:', 
`${communication}.socketReceiveBuffer`, '"socketReceiveBuffer"', 'true', 
'32768', '0', 'Receive buffer size for sockets created or accepted by this SPI')
-                .pc-form-grid-col-30
-                    +number('Slow client queue limit:', 
`${communication}.slowClientQueueLimit`, '"slowClientQueueLimit"', 'true', '0', 
'0', 'Slow client queue limit')
-                .pc-form-grid-col-30
-                    +sane-ignite-form-field-number({
-                        label: 'Ack send threshold:',
-                        model: `${communication}.ackSendThreshold`,
-                        name: '"ackSendThreshold"',
-                        placeholder: '{{ 
::$ctrl.Clusters.ackSendThreshold.default }}',
-                        min: '{{ ::$ctrl.Clusters.ackSendThreshold.min }}',
-                        tip: 'Number of received messages per connection to 
node after which acknowledgment message is sent'
-                    })
-                .pc-form-grid-col-30
-                    +sane-ignite-form-field-number({
-                        label: 'Message queue limit:',
-                        model: `${communication}.messageQueueLimit`,
-                        name: '"messageQueueLimit"',
-                        placeholder: '{{ 
::$ctrl.Clusters.messageQueueLimit.default }}',
-                        min: '{{ ::$ctrl.Clusters.messageQueueLimit.min }}',
-                        tip: 'Message queue limit for incoming and outgoing 
messages'
-                    })
-                .pc-form-grid-col-30
-                    +sane-ignite-form-field-number({
-                        label: 'Unacknowledged messages:',
-                        model: 
`${communication}.unacknowledgedMessagesBufferSize`,
-                        name: '"unacknowledgedMessagesBufferSize"',
-                        placeholder: '{{ 
::$ctrl.Clusters.unacknowledgedMessagesBufferSize.default }}',
-                        min: `{{ 
$ctrl.Clusters.unacknowledgedMessagesBufferSize.min(
-                            ${communication}.unacknowledgedMessagesBufferSize,
-                            ${communication}.messageQueueLimit,
-                            ${communication}.ackSendThreshold
-                        ) }}`,
-                        tip: `Maximum number of stored unacknowledged messages 
per connection to node<br/>
-                        If specified non zero value it should be
-                        <ul>
-                            <li>At least ack send threshold * {{ 
::$ctrl.Clusters.unacknowledgedMessagesBufferSize.validRatio }}</li>
-                            <li>At least message queue limit * {{ 
::$ctrl.Clusters.unacknowledgedMessagesBufferSize.validRatio }}</li>
-                        </ul>`
-                    })(
-                        //- allowInvalid: true prevents from infinite digest 
loop when old value was 0 and becomes less than allowed minimum
-                        ng-model-options=`{
-                            allowInvalid: true
-                        }`
-                    )
-                .pc-form-grid-col-30
-                    +number('Socket write timeout:', 
`${communication}.socketWriteTimeout`, '"socketWriteTimeout"', 'true', '2000', 
'0', 'Socket write timeout')
-                .pc-form-grid-col-30
-                    +number('Selectors count:', 
`${communication}.selectorsCount`, '"selectorsCount"', 'true', 'min(4, 
availableProcessors)', '1', 'Count of selectors te be used in TCP server')
-                .pc-form-grid-col-60
-                    +java-class('Address resolver:', 
`${communication}.addressResolver`, '"comAddressResolver"', 'true', 'false', 
'Provides resolution between external and internal addresses')
-                .pc-form-grid-col-60
-                    +checkbox('Direct buffer', 
`${communication}.directBuffer`, '"directBuffer"',
-                    'If value is true, then SPI will use 
ByteBuffer.allocateDirect(int) call<br/>\
-                    Otherwise, SPI will use ByteBuffer.allocate(int) call')
-                .pc-form-grid-col-60
-                    +checkbox('Direct send buffer', 
`${communication}.directSendBuffer`, '"directSendBuffer"', 'Flag defining 
whether direct send buffer should be used')
-                .pc-form-grid-col-60
-                    +checkbox('TCP_NODELAY option', 
`${communication}.tcpNoDelay`, '"tcpNoDelay"', 'Value for TCP_NODELAY socket 
option')
-            .pca-form-column-6
-                +preview-xml-java(model, 'clusterCommunication')
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Communication
+    panel-description
+        | Configuration of communication with other nodes by TCP/IP.
+        | Provide basic plumbing to send and receive grid messages and is 
utilized for all distributed grid operations. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/network-config"; 
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-30
+                +number('Timeout:', `${model}.networkTimeout`, 
'"commNetworkTimeout"', 'true', '5000', '1', 'Maximum timeout in milliseconds 
for network requests')
+            .pc-form-grid-col-30
+                +number('Send retry delay:', `${model}.networkSendRetryDelay`, 
'"networkSendRetryDelay"', 'true', '1000', '1', 'Interval in milliseconds 
between message send retries')
+            .pc-form-grid-col-30
+                +number('Send retry count:', `${model}.networkSendRetryCount`, 
'"networkSendRetryCount"', 'true', '3', '1', 'Message send retries count')
+            .pc-form-grid-col-30(ng-if='$ctrl.available(["1.0.0", "2.3.0"])')
+                +number('Discovery startup delay:', 
`${model}.discoveryStartupDelay`, '"discoveryStartupDelay"', 'true', '60000', 
'1', 'This value is used to expire messages from waiting list whenever node 
discovery discrepancies happen')
+            .pc-form-grid-col-60
+                +java-class('Communication listener:', 
`${communication}.listener`, '"comListener"', 'true', 'false', 'Listener of 
communication events')
+            .pc-form-grid-col-30
+                +text-ip-address('Local IP address:', 
`${communication}.localAddress`, '"comLocalAddress"', 'true', '0.0.0.0',
+                    'Local host address for socket binding<br/>\
+                    If not specified use all available addres on local host')
+            .pc-form-grid-col-30
+                +number-min-max('Local port:', `${communication}.localPort`, 
'"comLocalPort"', 'true', '47100', '1024', '65535', 'Local port for socket 
binding')
+            .pc-form-grid-col-30
+                +number('Local port range:', 
`${communication}.localPortRange`, '"comLocalPortRange"', 'true', '100', '1', 
'Local port range for local host ports')
+            .pc-form-grid-col-30
+                +sane-ignite-form-field-number({
+                    label: 'Shared memory port:',
+                    model: `${communication}.sharedMemoryPort`,
+                    name: '"sharedMemoryPort"',
+                    placeholder: '{{ ::$ctrl.Clusters.sharedMemoryPort.default 
}}',
+                    min: '{{ ::$ctrl.Clusters.sharedMemoryPort.min }}',
+                    max: '{{ ::$ctrl.Clusters.sharedMemoryPort.max }}',
+                    tip: `Local port to accept shared memory 
connections<br/>If set to <b>-1</b> shared memory communication will be 
disabled`
+                })(
+                    
pc-not-in-collection='::$ctrl.Clusters.sharedMemoryPort.invalidValues'
+                )
+                    +form-field-feedback('"sharedMemoryPort"', 
'notInCollection', 'Shared memory port should be more than "{{ 
::$ctrl.Clusters.sharedMemoryPort.invalidValues[0] }}" or equal to "{{ 
::$ctrl.Clusters.sharedMemoryPort.min }}"')
+            .pc-form-grid-col-30
+                +number('Idle connection timeout:', 
`${communication}.idleConnectionTimeout`, '"idleConnectionTimeout"', 'true', 
'30000', '1',
+                    'Maximum idle connection timeout upon which a connection 
to client will be closed')
+            .pc-form-grid-col-30
+                +number('Connect timeout:', `${communication}.connectTimeout`, 
'"connectTimeout"', 'true', '5000', '0', 'Connect timeout used when 
establishing connection with remote nodes')
+            .pc-form-grid-col-30
+                +number('Max. connect timeout:', 
`${communication}.maxConnectTimeout`, '"maxConnectTimeout"', 'true', '600000', 
'0', 'Maximum connect timeout')
+            .pc-form-grid-col-30
+                +number('Reconnect count:', `${communication}.reconnectCount`, 
'"comReconnectCount"', 'true', '10', '1',
+                    'Maximum number of reconnect attempts used when 
establishing connection with remote nodes')
+            .pc-form-grid-col-30
+                +number('Socket send buffer:', 
`${communication}.socketSendBuffer`, '"socketSendBuffer"', 'true', '32768', 
'0', 'Send buffer size for sockets created or accepted by this SPI')
+            .pc-form-grid-col-30
+                +number('Socket receive buffer:', 
`${communication}.socketReceiveBuffer`, '"socketReceiveBuffer"', 'true', 
'32768', '0', 'Receive buffer size for sockets created or accepted by this SPI')
+            .pc-form-grid-col-30
+                +number('Slow client queue limit:', 
`${communication}.slowClientQueueLimit`, '"slowClientQueueLimit"', 'true', '0', 
'0', 'Slow client queue limit')
+            .pc-form-grid-col-30
+                +sane-ignite-form-field-number({
+                    label: 'Ack send threshold:',
+                    model: `${communication}.ackSendThreshold`,
+                    name: '"ackSendThreshold"',
+                    placeholder: '{{ ::$ctrl.Clusters.ackSendThreshold.default 
}}',
+                    min: '{{ ::$ctrl.Clusters.ackSendThreshold.min }}',
+                    tip: 'Number of received messages per connection to node 
after which acknowledgment message is sent'
+                })
+            .pc-form-grid-col-30
+                +sane-ignite-form-field-number({
+                    label: 'Message queue limit:',
+                    model: `${communication}.messageQueueLimit`,
+                    name: '"messageQueueLimit"',
+                    placeholder: '{{ 
::$ctrl.Clusters.messageQueueLimit.default }}',
+                    min: '{{ ::$ctrl.Clusters.messageQueueLimit.min }}',
+                    tip: 'Message queue limit for incoming and outgoing 
messages'
+                })
+            .pc-form-grid-col-30
+                +sane-ignite-form-field-number({
+                    label: 'Unacknowledged messages:',
+                    model: `${communication}.unacknowledgedMessagesBufferSize`,
+                    name: '"unacknowledgedMessagesBufferSize"',
+                    placeholder: '{{ 
::$ctrl.Clusters.unacknowledgedMessagesBufferSize.default }}',
+                    min: `{{ 
$ctrl.Clusters.unacknowledgedMessagesBufferSize.min(
+                        ${communication}.unacknowledgedMessagesBufferSize,
+                        ${communication}.messageQueueLimit,
+                        ${communication}.ackSendThreshold
+                    ) }}`,
+                    tip: `Maximum number of stored unacknowledged messages per 
connection to node<br/>
+                    If specified non zero value it should be
+                    <ul>
+                        <li>At least ack send threshold * {{ 
::$ctrl.Clusters.unacknowledgedMessagesBufferSize.validRatio }}</li>
+                        <li>At least message queue limit * {{ 
::$ctrl.Clusters.unacknowledgedMessagesBufferSize.validRatio }}</li>
+                    </ul>`
+                })(
+                    //- allowInvalid: true prevents from infinite digest loop 
when old value was 0 and becomes less than allowed minimum
+                    ng-model-options=`{
+                        allowInvalid: true
+                    }`
+                )
+            .pc-form-grid-col-30
+                +number('Socket write timeout:', 
`${communication}.socketWriteTimeout`, '"socketWriteTimeout"', 'true', '2000', 
'0', 'Socket write timeout')
+            .pc-form-grid-col-30
+                +number('Selectors count:', `${communication}.selectorsCount`, 
'"selectorsCount"', 'true', 'min(4, availableProcessors)', '1', 'Count of 
selectors te be used in TCP server')
+            .pc-form-grid-col-60
+                +java-class('Address resolver:', 
`${communication}.addressResolver`, '"comAddressResolver"', 'true', 'false', 
'Provides resolution between external and internal addresses')
+            .pc-form-grid-col-60
+                +checkbox('Direct buffer', `${communication}.directBuffer`, 
'"directBuffer"',
+                'If value is true, then SPI will use 
ByteBuffer.allocateDirect(int) call<br/>\
+                Otherwise, SPI will use ByteBuffer.allocate(int) call')
+            .pc-form-grid-col-60
+                +checkbox('Direct send buffer', 
`${communication}.directSendBuffer`, '"directSendBuffer"', 'Flag defining 
whether direct send buffer should be used')
+            .pc-form-grid-col-60
+                +checkbox('TCP_NODELAY option', `${communication}.tcpNoDelay`, 
'"tcpNoDelay"', 'Value for TCP_NODELAY socket option')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterCommunication')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.pug
index 50975b7..76c5016 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.pug
@@ -21,83 +21,80 @@ include /app/helpers/jade/mixins
 -var enabled = model + '.enabled'
 -var sslEnabled = enabled + ' && ' + model + '.sslEnabled'
 
-.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 Connector configuration
-        .pca-panel-heading-description
-            | Configure HTTP REST configuration to enable HTTP server 
features. 
-            | 
#[a.link-success(href="https://apacheignite.readme.io/docs/rest-api#general-configuration";
 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, '"restEnabled"', 'Flag 
indicating whether to configure connector configuration')
-                .pc-form-grid-col-60
-                    +text-enabled('Jetty configuration path:', 
`${model}.jettyPath`, '"connectorJettyPath"', enabled, 'false', 'Input path to 
Jetty configuration',
-                        'Path, either absolute or relative to IGNITE_HOME, to 
Jetty XML configuration file<br/>\
-                        Jetty is used to support REST over HTTP protocol for 
accessing Ignite APIs remotely<br/>\
-                        If not provided, Jetty instance with default 
configuration will be started picking IgniteSystemProperties.IGNITE_JETTY_HOST 
and IgniteSystemProperties.IGNITE_JETTY_PORT as host and port respectively')
-                .pc-form-grid-col-20
-                    +text-ip-address('TCP host:', `${model}.host`, 
'"connectorHost"', enabled, 'IgniteConfiguration#getLocalHost()',
-                        'Host for TCP binary protocol server<br/>\
-                        This can be either an IP address or a domain name<br/>\
-                        If not defined, system - wide local address will be 
used IgniteConfiguration#getLocalHost()<br/>\
-                        You can also use "0.0.0.0" value to bind to all 
locally - available IP addresses')
-                .pc-form-grid-col-20
-                    +number-min-max('TCP port:', `${model}.port`, 
'"connectorPort"', enabled, '11211', '1024', '65535', 'Port for TCP binary 
protocol server')
-                .pc-form-grid-col-20
-                    +number('TCP port range:', `${model}.portRange`, 
'"connectorPortRange"', enabled, '100', '1', 'Number of ports for TCP binary 
protocol server to try if configured port is already in use')
-                .pc-form-grid-col-60
-                    +number('Idle query cursor timeout:', 
`${model}.idleQueryCursorTimeout`, '"connectorIdleQueryCursorTimeout"', 
enabled, '600000', '0',
-                        'Reject open query cursors that is not used 
timeout<br/>\
-                        If no fetch query request come within idle timeout, it 
will be removed on next check for old query cursors')
-                .pc-form-grid-col-60
-                    +number('Idle query cursor check frequency:', 
`${model}.idleQueryCursorCheckFrequency`, 
'"connectorIdleQueryCursorCheckFrequency"', enabled, '60000', '0',
-                        'Idle query cursors check frequency<br/>\
-                        This setting is used to reject open query cursors that 
is not used')
-                .pc-form-grid-col-30
-                    +number('Idle timeout:', `${model}.idleTimeout`, 
'"connectorIdleTimeout"', enabled, '7000', '0',
-                        'Idle timeout for REST server<br/>\
-                        This setting is used to reject half - opened 
sockets<br/>\
-                        If no packets come within idle timeout, the connection 
is closed')
-                .pc-form-grid-col-30
-                    +number('Receive buffer size:', 
`${model}.receiveBufferSize`, '"connectorReceiveBufferSize"', enabled, '32768', 
'0', 'REST TCP server receive buffer size')
-                .pc-form-grid-col-30
-                    +number('Send buffer size:', `${model}.sendBufferSize`, 
'"connectorSendBufferSize"', enabled, '32768', '0', 'REST TCP server send 
buffer size')
-                .pc-form-grid-col-30
-                    +number('Send queue limit:', `${model}.sendQueueLimit`, 
'"connectorSendQueueLimit"', enabled, 'unlimited', '0',
-                        'REST TCP server send queue limit<br/>\
-                        If the limit exceeds, all successive writes will block 
until the queue has enough capacity')
-                .pc-form-grid-col-60
-                    +checkbox-enabled('Direct buffer', 
`${model}.directBuffer`, '"connectorDirectBuffer"', enabled,
-                        'Flag indicating whether REST TCP server should use 
direct buffers<br/>\
-                        A direct buffer is a buffer that is allocated and 
accessed using native system calls, without using JVM heap<br/>\
-                        Enabling direct buffer may improve performance and 
avoid memory issues(long GC pauses due to huge buffer size)')
-                .pc-form-grid-col-60
-                    +checkbox-enabled('TCP_NODELAY option', 
`${model}.noDelay`, '"connectorNoDelay"', enabled,
-                        'Flag indicating whether TCP_NODELAY option should be 
set for accepted client connections<br/>\
-                        Setting this option reduces network latency and should 
be enabled in majority of cases<br/>\
-                        For more information, see 
Socket#setTcpNoDelay(boolean)')
-                .pc-form-grid-col-30
-                    +number('Selector count:', `${model}.selectorCount`, 
'"connectorSelectorCount"', enabled, 'min(4, availableProcessors)', '1',
-                        'Number of selector threads in REST TCP server<br/>\
-                        Higher value for this parameter may increase 
throughput, but also increases context switching')
-                .pc-form-grid-col-30
-                    +number('Thread pool size:', `${model}.threadPoolSize`, 
'"connectorThreadPoolSize"', enabled, 'max(8, availableProcessors) * 2', '1',
-                        'Thread pool size to use for processing of client 
messages (REST requests)')
-                .pc-form-grid-col-60
-                    +java-class('Message interceptor:', 
`${model}.messageInterceptor`, '"connectorMessageInterceptor"', enabled, 
'false',
-                        'Interceptor allows to transform all objects exchanged 
via REST protocol<br/>\
-                        For example if you use custom serialisation on client 
you can write interceptor to transform binary representations received from 
client to Java objects and later access them from java code directly')
-                .pc-form-grid-col-60
-                    +text-enabled('Secret key:', `${model}.secretKey`, 
'"connectorSecretKey"', enabled, 'false', 'Specify to enable authentication', 
'Secret key to authenticate REST requests')
-                .pc-form-grid-col-60
-                    +checkbox-enabled('Enable SSL', `${model}.sslEnabled`, 
'"connectorSslEnabled"', enabled, 'Enables/disables SSL for REST TCP binary 
protocol')
-                .pc-form-grid-col-60
-                    +checkbox-enabled('Enable SSL client auth', 
`${model}.sslClientAuth`, '"connectorSslClientAuth"', sslEnabled, 'Flag 
indicating whether or not SSL client authentication is required')
-                .pc-form-grid-col-60
-                    +java-class('SSL factory:', `${model}.sslFactory`, 
'"connectorSslFactory"', sslEnabled, sslEnabled,
-                        'Instance of Factory that will be used to create an 
instance of SSLContext for Secure Socket Layer on TCP binary protocol')
-            .pca-form-column-6
-                +preview-xml-java(model, 'clusterConnector')
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Connector configuration
+    panel-description
+        | Configure HTTP REST configuration to enable HTTP server features. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/rest-api#general-configuration";
 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, '"restEnabled"', 'Flag 
indicating whether to configure connector configuration')
+            .pc-form-grid-col-60
+                +text-enabled('Jetty configuration path:', 
`${model}.jettyPath`, '"connectorJettyPath"', enabled, 'false', 'Input path to 
Jetty configuration',
+                    'Path, either absolute or relative to IGNITE_HOME, to 
Jetty XML configuration file<br/>\
+                    Jetty is used to support REST over HTTP protocol for 
accessing Ignite APIs remotely<br/>\
+                    If not provided, Jetty instance with default configuration 
will be started picking IgniteSystemProperties.IGNITE_JETTY_HOST and 
IgniteSystemProperties.IGNITE_JETTY_PORT as host and port respectively')
+            .pc-form-grid-col-20
+                +text-ip-address('TCP host:', `${model}.host`, 
'"connectorHost"', enabled, 'IgniteConfiguration#getLocalHost()',
+                    'Host for TCP binary protocol server<br/>\
+                    This can be either an IP address or a domain name<br/>\
+                    If not defined, system - wide local address will be used 
IgniteConfiguration#getLocalHost()<br/>\
+                    You can also use "0.0.0.0" value to bind to all locally - 
available IP addresses')
+            .pc-form-grid-col-20
+                +number-min-max('TCP port:', `${model}.port`, 
'"connectorPort"', enabled, '11211', '1024', '65535', 'Port for TCP binary 
protocol server')
+            .pc-form-grid-col-20
+                +number('TCP port range:', `${model}.portRange`, 
'"connectorPortRange"', enabled, '100', '1', 'Number of ports for TCP binary 
protocol server to try if configured port is already in use')
+            .pc-form-grid-col-60
+                +number('Idle query cursor timeout:', 
`${model}.idleQueryCursorTimeout`, '"connectorIdleQueryCursorTimeout"', 
enabled, '600000', '0',
+                    'Reject open query cursors that is not used timeout<br/>\
+                    If no fetch query request come within idle timeout, it 
will be removed on next check for old query cursors')
+            .pc-form-grid-col-60
+                +number('Idle query cursor check frequency:', 
`${model}.idleQueryCursorCheckFrequency`, 
'"connectorIdleQueryCursorCheckFrequency"', enabled, '60000', '0',
+                    'Idle query cursors check frequency<br/>\
+                    This setting is used to reject open query cursors that is 
not used')
+            .pc-form-grid-col-30
+                +number('Idle timeout:', `${model}.idleTimeout`, 
'"connectorIdleTimeout"', enabled, '7000', '0',
+                    'Idle timeout for REST server<br/>\
+                    This setting is used to reject half - opened sockets<br/>\
+                    If no packets come within idle timeout, the connection is 
closed')
+            .pc-form-grid-col-30
+                +number('Receive buffer size:', `${model}.receiveBufferSize`, 
'"connectorReceiveBufferSize"', enabled, '32768', '0', 'REST TCP server receive 
buffer size')
+            .pc-form-grid-col-30
+                +number('Send buffer size:', `${model}.sendBufferSize`, 
'"connectorSendBufferSize"', enabled, '32768', '0', 'REST TCP server send 
buffer size')
+            .pc-form-grid-col-30
+                +number('Send queue limit:', `${model}.sendQueueLimit`, 
'"connectorSendQueueLimit"', enabled, 'unlimited', '0',
+                    'REST TCP server send queue limit<br/>\
+                    If the limit exceeds, all successive writes will block 
until the queue has enough capacity')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Direct buffer', `${model}.directBuffer`, 
'"connectorDirectBuffer"', enabled,
+                    'Flag indicating whether REST TCP server should use direct 
buffers<br/>\
+                    A direct buffer is a buffer that is allocated and accessed 
using native system calls, without using JVM heap<br/>\
+                    Enabling direct buffer may improve performance and avoid 
memory issues(long GC pauses due to huge buffer size)')
+            .pc-form-grid-col-60
+                +checkbox-enabled('TCP_NODELAY option', `${model}.noDelay`, 
'"connectorNoDelay"', enabled,
+                    'Flag indicating whether TCP_NODELAY option should be set 
for accepted client connections<br/>\
+                    Setting this option reduces network latency and should be 
enabled in majority of cases<br/>\
+                    For more information, see Socket#setTcpNoDelay(boolean)')
+            .pc-form-grid-col-30
+                +number('Selector count:', `${model}.selectorCount`, 
'"connectorSelectorCount"', enabled, 'min(4, availableProcessors)', '1',
+                    'Number of selector threads in REST TCP server<br/>\
+                    Higher value for this parameter may increase throughput, 
but also increases context switching')
+            .pc-form-grid-col-30
+                +number('Thread pool size:', `${model}.threadPoolSize`, 
'"connectorThreadPoolSize"', enabled, 'max(8, availableProcessors) * 2', '1',
+                    'Thread pool size to use for processing of client messages 
(REST requests)')
+            .pc-form-grid-col-60
+                +java-class('Message interceptor:', 
`${model}.messageInterceptor`, '"connectorMessageInterceptor"', enabled, 
'false',
+                    'Interceptor allows to transform all objects exchanged via 
REST protocol<br/>\
+                    For example if you use custom serialisation on client you 
can write interceptor to transform binary representations received from client 
to Java objects and later access them from java code directly')
+            .pc-form-grid-col-60
+                +text-enabled('Secret key:', `${model}.secretKey`, 
'"connectorSecretKey"', enabled, 'false', 'Specify to enable authentication', 
'Secret key to authenticate REST requests')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Enable SSL', `${model}.sslEnabled`, 
'"connectorSslEnabled"', enabled, 'Enables/disables SSL for REST TCP binary 
protocol')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Enable SSL client auth', 
`${model}.sslClientAuth`, '"connectorSslClientAuth"', sslEnabled, 'Flag 
indicating whether or not SSL client authentication is required')
+            .pc-form-grid-col-60
+                +java-class('SSL factory:', `${model}.sslFactory`, 
'"connectorSslFactory"', sslEnabled, sslEnabled,
+                    'Instance of Factory that will be used to create an 
instance of SSLContext for Secure Socket Layer on TCP binary protocol')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterConnector')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/data-storage.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/data-storage.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/data-storage.pug
index b605fad..c9fea56 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/data-storage.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/data-storage.pug
@@ -135,170 +135,167 @@ mixin data-region-form({modelAt, namePlaceholder, 
dataRegionsAt})
         +checkbox('Persistence enabled', `${modelAt}.persistenceEnabled`, 
'"RegionPersistenceEnabled" + $index',
         'Enable Ignite Native Persistence')
 
-.pca-panel.pca-panel-default(ng-show='$ctrl.available("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 Data storage 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/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.3.0") && 
ui.isPanelLoaded('${form}')`).pca-form-row
-            .pca-form-column-6.pc-form-grid-row
+panel-collapsible(ng-show='$ctrl.available("2.3.0")' ng-form=form 
on-open=`ui.loadPanel('${form}')`)
+    panel-title Data storage 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/distributed-persistent-store";
 target="_blank") More info]
+    panel-content.pca-form-row(ng-if=`$ctrl.available("2.3.0") && 
ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-30
+                +sane-ignite-form-field-dropdown({
+                    label: 'Page size:',
+                    model: `${model}.pageSize`,
+                    name: '"DataStorageConfigurationPageSize"',
+                    options: 
`$ctrl.Clusters.dataStorageConfiguration.pageSize.values`,
+                    tip: 'Every memory region is split on pages of fixed size'
+                })
+            .pc-form-grid-col-30
+                +number('Concurrency level:', model + '.concurrencyLevel', 
'"DataStorageConfigurationConcurrencyLevel"',
+                '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 region
+            .pc-form-group.pc-form-grid-row
                 .pc-form-grid-col-30
-                    +sane-ignite-form-field-dropdown({
-                        label: 'Page size:',
-                        model: `${model}.pageSize`,
-                        name: '"DataStorageConfigurationPageSize"',
-                        options: 
`$ctrl.Clusters.dataStorageConfiguration.pageSize.values`,
-                        tip: 'Every memory region is split on pages of fixed 
size'
-                    })
+                    pc-form-field-size(
+                        label='Initial size:'
+                        ng-model=`${model}.systemRegionInitialSize`
+                        name='DataStorageSystemRegionInitialSize'
+                        placeholder='{{ 
$ctrl.Clusters.dataStorageConfiguration.systemRegionInitialSize.default / 
systemRegionInitialSizeScale.value }}'
+                        min='{{ 
::$ctrl.Clusters.dataStorageConfiguration.systemRegionInitialSize.min }}'
+                        tip='Initial size of a data region reserved for system 
cache'
+                        on-scale-change='systemRegionInitialSizeScale = $event'
+                    )
                 .pc-form-grid-col-30
-                    +number('Concurrency level:', model + '.concurrencyLevel', 
'"DataStorageConfigurationConcurrencyLevel"',
-                    '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 region
-                .pc-form-group.pc-form-grid-row
-                    .pc-form-grid-col-30
-                        pc-form-field-size(
-                            label='Initial size:'
-                            ng-model=`${model}.systemRegionInitialSize`
-                            name='DataStorageSystemRegionInitialSize'
-                            placeholder='{{ 
$ctrl.Clusters.dataStorageConfiguration.systemRegionInitialSize.default / 
systemRegionInitialSizeScale.value }}'
-                            min='{{ 
::$ctrl.Clusters.dataStorageConfiguration.systemRegionInitialSize.min }}'
-                            tip='Initial size of a data region reserved for 
system cache'
-                            on-scale-change='systemRegionInitialSizeScale = 
$event'
-                        )
-                    .pc-form-grid-col-30
-                        pc-form-field-size(
-                            label='Max size:'
-                            ng-model=`${model}.systemRegionMaxSize`
-                            name='DataStorageSystemRegionMaxSize'
-                            placeholder='{{ 
$ctrl.Clusters.dataStorageConfiguration.systemRegionMaxSize.default / 
systemRegionMaxSizeScale.value }}'
-                            min='{{ 
$ctrl.Clusters.dataStorageConfiguration.systemRegionMaxSize.min($ctrl.clonedCluster)
 }}'
-                            tip='Maximum data region size reserved for system 
cache'
-                            on-scale-change='systemRegionMaxSizeScale = $event'
-                        )
-                .pc-form-grid-col-60.pc-form-group__text-title
-                    span Default data region
-                .pc-form-group.pc-form-grid-row
-                    +data-region-form({
-                        modelAt: dfltRegionModel,
-                        namePlaceholder: '{{ 
::$ctrl.Clusters.dataRegion.name.default }}',
-                        dataRegionsAt: dataRegionConfigurations
-                    })
-                .pc-form-grid-col-60
-                    .ignite-form-field
-                        .ignite-form-field__label Data region configurations
-                        .ignite-form-field__control
-                            list-editable(name='dataRegionConfigurations' 
ng-model=dataRegionConfigurations)
-                                list-editable-item-edit.pc-form-grid-row
-                                    - form = '$parent.form'
-                                    +data-region-form({
-                                        modelAt: '$item',
-                                        namePlaceholder: 'Data region name',
-                                        dataRegionsAt: dataRegionConfigurations
-                                    })
-                                    - form = 'dataStorageConfiguration'
-                                list-editable-no-items
-                                    list-editable-add-item-button(
-                                        
add-item=`$ctrl.Clusters.addDataRegionConfiguration($ctrl.clonedCluster)`
-                                        label-single='data region 
configuration'
-                                        label-multiple='data region 
configurations'
-                                    )
+                    pc-form-field-size(
+                        label='Max size:'
+                        ng-model=`${model}.systemRegionMaxSize`
+                        name='DataStorageSystemRegionMaxSize'
+                        placeholder='{{ 
$ctrl.Clusters.dataStorageConfiguration.systemRegionMaxSize.default / 
systemRegionMaxSizeScale.value }}'
+                        min='{{ 
$ctrl.Clusters.dataStorageConfiguration.systemRegionMaxSize.min($ctrl.clonedCluster)
 }}'
+                        tip='Maximum data region size reserved for system 
cache'
+                        on-scale-change='systemRegionMaxSizeScale = $event'
+                    )
+            .pc-form-grid-col-60.pc-form-group__text-title
+                span Default data region
+            .pc-form-group.pc-form-grid-row
+                +data-region-form({
+                    modelAt: dfltRegionModel,
+                    namePlaceholder: '{{ 
::$ctrl.Clusters.dataRegion.name.default }}',
+                    dataRegionsAt: dataRegionConfigurations
+                })
+            .pc-form-grid-col-60
+                .ignite-form-field
+                    .ignite-form-field__label Data region configurations
+                    .ignite-form-field__control
+                        list-editable(name='dataRegionConfigurations' 
ng-model=dataRegionConfigurations)
+                            list-editable-item-edit.pc-form-grid-row
+                                - form = '$parent.form'
+                                +data-region-form({
+                                    modelAt: '$item',
+                                    namePlaceholder: 'Data region name',
+                                    dataRegionsAt: dataRegionConfigurations
+                                })
+                                - form = 'dataStorageConfiguration'
+                            list-editable-no-items
+                                list-editable-add-item-button(
+                                    
add-item=`$ctrl.Clusters.addDataRegionConfiguration($ctrl.clonedCluster)`
+                                    label-single='data region configuration'
+                                    label-multiple='data region configurations'
+                                )
 
-                .pc-form-grid-col-60
-                    +text-enabled('Storage path:', `${model}.storagePath`, 
'"DataStoragePath"', 'true', 'false', 'db',
-                    'Directory where index and partition files are stored')
-                .pc-form-grid-col-60
-                    +number('Checkpoint frequency:', 
`${model}.checkpointFrequency`, '"DataStorageCheckpointFrequency"', 'true', 
'180000', '1',
-                    'Frequency which is a minimal interval when the dirty 
pages will be written to the Persistent Store')
-                .pc-form-grid-col-20
-                    +number('Checkpoint threads:', 
`${model}.checkpointThreads`, '"DataStorageCheckpointThreads"', 'true', '4', 
'1', 'A number of threads to use for the checkpoint purposes')
-                .pc-form-grid-col-20
-                    +dropdown('Checkpoint write order:', 
`${model}.checkpointWriteOrder`, '"DataStorageCheckpointWriteOrder"', 'true', 
'SEQUENTIAL',
-                    '[\
-                        {value: "RANDOM", label: "RANDOM"},\
-                        {value: "SEQUENTIAL", label: "SEQUENTIAL"}\
-                    ]',
-                    'Order of writing pages to disk storage during checkpoint.\
-                    <ul>\
-                        <li>RANDOM - Pages are written in order provided by 
checkpoint pages collection iterator</li>\
-                        <li>SEQUENTIAL - All checkpoint pages are collected 
into single list and sorted by page index</li>\
-                    </ul>')
-                .pc-form-grid-col-20
-                    +dropdown('WAL mode:', `${model}.walMode`, 
'"DataStorageWalMode"', 'true', 'DEFAULT',
-                    '[\
-                        {value: "DEFAULT", label: "DEFAULT"},\
-                        {value: "LOG_ONLY", label: "LOG_ONLY"},\
-                        {value: "BACKGROUND", label: "BACKGROUND"},\
-                        {value: "NONE", label: "NONE"}\
-                    ]',
-                    'Type define behavior wal fsync.\
-                    <ul>\
-                        <li>DEFAULT - full-sync disk writes</li>\
-                        <li>LOG_ONLY - flushes application buffers</li>\
-                        <li>BACKGROUND - does not force application&#39;s 
buffer flush</li>\
-                        <li>NONE - WAL is disabled</li>\
-                    </ul>')
-                .pc-form-grid-col-60
-                    +text-enabled('WAL path:', `${model}.walPath`, 
'"DataStorageWalPath"', 'true', 'false', 'db/wal', 'A path to the directory 
where WAL is stored')
-                .pc-form-grid-col-60
-                    +text-enabled('WAL archive path:', 
`${model}.walArchivePath`, '"DataStorageWalArchivePath"', 'true', 'false', 
'db/wal/archive', 'A path to the WAL archive directory')
-                .pc-form-grid-col-20
-                    +number('WAL segments:', `${model}.walSegments`, 
'"DataStorageWalSegments"', 'true', '10', '1', 'A number of WAL segments to 
work with')
-                .pc-form-grid-col-20
-                    +number('WAL segment size:', `${model}.walSegmentSize`, 
'"DataStorageWalSegmentSize"', 'true', '67108864', '0', 'Size of a WAL segment')
-                .pc-form-grid-col-20
-                    +number('WAL history size:', `${model}.walHistorySize`, 
'"DataStorageWalHistorySize"', 'true', '20', '1', 'A total number of 
checkpoints to keep in the WAL history')
-                .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")')
-                    +number('WAL buffer size:', `${model}.walBufferSize`, 
'"DataStorageWalBufferSize"', 'true', 'WAL segment size / 4', '1',
-                    'Size of WAL buffer')
-                .pc-form-grid-col-30
-                    +number('WAL flush frequency:', 
`${model}.walFlushFrequency`, '"DataStorageWalFlushFrequency"', 'true', '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`, 
'"DataStorageWalFsyncDelay"', 'true', '1000', '1', 'WAL fsync delay, in 
nanoseconds')
-                .pc-form-grid-col-60
-                    +number('WAL record iterator buffer size:', 
`${model}.walRecordIteratorBufferSize`, 
'"DataStorageWalRecordIteratorBufferSize"', 'true', '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`, 
'"DataStorageLockWaitTime"', 'true', '10000', '1',
-                    'Time out in milliseconds, while wait and try get file 
lock for start persist manager')
-                .pc-form-grid-col-30
-                    +number('WAL thread local buffer size:', 
`${model}.walThreadLocalBufferSize`, '"DataStorageWalThreadLocalBufferSize"', 
'true', '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('Metrics sub interval count:', 
`${model}.metricsSubIntervalCount`, '"DataStorageMetricsSubIntervalCount"', 
'true', '5', '1',
-                    'Number of sub - intervals the whole rate time interval 
will be split into to calculate rate - based metrics')
-                .pc-form-grid-col-30
-                    +number('Metrics rate time interval:', 
`${model}.metricsRateTimeInterval`, '"DataStorageMetricsRateTimeInterval"', 
'true', '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
-                    +dropdown('File IO factory:', `${model}.fileIOFactory`, 
'"DataStorageFileIOFactory"', 'true', 'Default',
-                    '[\
-                        {value: "RANDOM", label: "RANDOM"},\
-                        {value: "ASYNC", label: "ASYNC"},\
-                        {value: null, label: "Default"},\
-                    ]',
-                    'Order of writing pages to disk storage during checkpoint.\
-                    <ul>\
-                        <li>RANDOM - Pages are written in order provided by 
checkpoint pages collection iterator</li>\
-                        <li>SEQUENTIAL - All checkpoint pages are collected 
into single list and sorted by page index</li>\
-                    </ul>')
-                .pc-form-grid-col-30
-                    +number('WAL auto archive after inactivity:', 
`${model}.walAutoArchiveAfterInactivity`, 
'"DataStorageWalAutoArchiveAfterInactivity"', 'true', '-1', '-1',
-                    'Time in millis to run auto archiving segment after last 
record logging')
-                .pc-form-grid-col-60
-                    +checkbox-enabled('Metrics enabled', 
`${model}.metricsEnabled`, '"DataStorageMetricsEnabled"', 'true', 'Flag 
indicating whether persistence metrics collection is enabled')
-                .pc-form-grid-col-60
-                    +checkbox-enabled('Always write full pages', 
`${model}.alwaysWriteFullPages`, '"DataStorageAlwaysWriteFullPages"', 'true', 
'Flag indicating whether always write full pages')
-                .pc-form-grid-col-60
-                    +checkbox('Write throttling enabled', 
`${model}.writeThrottlingEnabled`, '"DataStorageWriteThrottlingEnabled"',
-                    'Throttle threads that generate dirty pages too fast 
during ongoing checkpoint')
-                .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")')
-                    +checkbox('Enable WAL compaction', 
`${model}.walCompactionEnabled`, '"DataStorageWalCompactionEnabled"',
-                    'If true, system filters and compresses WAL archive in 
background')
+            .pc-form-grid-col-60
+                +text-enabled('Storage path:', `${model}.storagePath`, 
'"DataStoragePath"', 'true', 'false', 'db',
+                'Directory where index and partition files are stored')
+            .pc-form-grid-col-60
+                +number('Checkpoint frequency:', 
`${model}.checkpointFrequency`, '"DataStorageCheckpointFrequency"', 'true', 
'180000', '1',
+                'Frequency which is a minimal interval when the dirty pages 
will be written to the Persistent Store')
+            .pc-form-grid-col-20
+                +number('Checkpoint threads:', `${model}.checkpointThreads`, 
'"DataStorageCheckpointThreads"', 'true', '4', '1', 'A number of threads to use 
for the checkpoint purposes')
+            .pc-form-grid-col-20
+                +dropdown('Checkpoint write order:', 
`${model}.checkpointWriteOrder`, '"DataStorageCheckpointWriteOrder"', 'true', 
'SEQUENTIAL',
+                '[\
+                    {value: "RANDOM", label: "RANDOM"},\
+                    {value: "SEQUENTIAL", label: "SEQUENTIAL"}\
+                ]',
+                'Order of writing pages to disk storage during checkpoint.\
+                <ul>\
+                    <li>RANDOM - Pages are written in order provided by 
checkpoint pages collection iterator</li>\
+                    <li>SEQUENTIAL - All checkpoint pages are collected into 
single list and sorted by page index</li>\
+                </ul>')
+            .pc-form-grid-col-20
+                +dropdown('WAL mode:', `${model}.walMode`, 
'"DataStorageWalMode"', 'true', 'DEFAULT',
+                '[\
+                    {value: "DEFAULT", label: "DEFAULT"},\
+                    {value: "LOG_ONLY", label: "LOG_ONLY"},\
+                    {value: "BACKGROUND", label: "BACKGROUND"},\
+                    {value: "NONE", label: "NONE"}\
+                ]',
+                'Type define behavior wal fsync.\
+                <ul>\
+                    <li>DEFAULT - full-sync disk writes</li>\
+                    <li>LOG_ONLY - flushes application buffers</li>\
+                    <li>BACKGROUND - does not force application&#39;s buffer 
flush</li>\
+                    <li>NONE - WAL is disabled</li>\
+                </ul>')
+            .pc-form-grid-col-60
+                +text-enabled('WAL path:', `${model}.walPath`, 
'"DataStorageWalPath"', 'true', 'false', 'db/wal', 'A path to the directory 
where WAL is stored')
+            .pc-form-grid-col-60
+                +text-enabled('WAL archive path:', `${model}.walArchivePath`, 
'"DataStorageWalArchivePath"', 'true', 'false', 'db/wal/archive', 'A path to 
the WAL archive directory')
+            .pc-form-grid-col-20
+                +number('WAL segments:', `${model}.walSegments`, 
'"DataStorageWalSegments"', 'true', '10', '1', 'A number of WAL segments to 
work with')
+            .pc-form-grid-col-20
+                +number('WAL segment size:', `${model}.walSegmentSize`, 
'"DataStorageWalSegmentSize"', 'true', '67108864', '0', 'Size of a WAL segment')
+            .pc-form-grid-col-20
+                +number('WAL history size:', `${model}.walHistorySize`, 
'"DataStorageWalHistorySize"', 'true', '20', '1', 'A total number of 
checkpoints to keep in the WAL history')
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")')
+                +number('WAL buffer size:', `${model}.walBufferSize`, 
'"DataStorageWalBufferSize"', 'true', 'WAL segment size / 4', '1',
+                'Size of WAL buffer')
+            .pc-form-grid-col-30
+                +number('WAL flush frequency:', `${model}.walFlushFrequency`, 
'"DataStorageWalFlushFrequency"', 'true', '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`, 
'"DataStorageWalFsyncDelay"', 'true', '1000', '1', 'WAL fsync delay, in 
nanoseconds')
+            .pc-form-grid-col-60
+                +number('WAL record iterator buffer size:', 
`${model}.walRecordIteratorBufferSize`, 
'"DataStorageWalRecordIteratorBufferSize"', 'true', '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`, 
'"DataStorageLockWaitTime"', 'true', '10000', '1',
+                'Time out in milliseconds, while wait and try get file lock 
for start persist manager')
+            .pc-form-grid-col-30
+                +number('WAL thread local buffer size:', 
`${model}.walThreadLocalBufferSize`, '"DataStorageWalThreadLocalBufferSize"', 
'true', '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('Metrics sub interval count:', 
`${model}.metricsSubIntervalCount`, '"DataStorageMetricsSubIntervalCount"', 
'true', '5', '1',
+                'Number of sub - intervals the whole rate time interval will 
be split into to calculate rate - based metrics')
+            .pc-form-grid-col-30
+                +number('Metrics rate time interval:', 
`${model}.metricsRateTimeInterval`, '"DataStorageMetricsRateTimeInterval"', 
'true', '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
+                +dropdown('File IO factory:', `${model}.fileIOFactory`, 
'"DataStorageFileIOFactory"', 'true', 'Default',
+                '[\
+                    {value: "RANDOM", label: "RANDOM"},\
+                    {value: "ASYNC", label: "ASYNC"},\
+                    {value: null, label: "Default"},\
+                ]',
+                'Order of writing pages to disk storage during checkpoint.\
+                <ul>\
+                    <li>RANDOM - Pages are written in order provided by 
checkpoint pages collection iterator</li>\
+                    <li>SEQUENTIAL - All checkpoint pages are collected into 
single list and sorted by page index</li>\
+                </ul>')
+            .pc-form-grid-col-30
+                +number('WAL auto archive after inactivity:', 
`${model}.walAutoArchiveAfterInactivity`, 
'"DataStorageWalAutoArchiveAfterInactivity"', 'true', '-1', '-1',
+                'Time in millis to run auto archiving segment after last 
record logging')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Metrics enabled', 
`${model}.metricsEnabled`, '"DataStorageMetricsEnabled"', 'true', 'Flag 
indicating whether persistence metrics collection is enabled')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Always write full pages', 
`${model}.alwaysWriteFullPages`, '"DataStorageAlwaysWriteFullPages"', 'true', 
'Flag indicating whether always write full pages')
+            .pc-form-grid-col-60
+                +checkbox('Write throttling enabled', 
`${model}.writeThrottlingEnabled`, '"DataStorageWriteThrottlingEnabled"',
+                'Throttle threads that generate dirty pages too fast during 
ongoing checkpoint')
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")')
+                +checkbox('Enable WAL compaction', 
`${model}.walCompactionEnabled`, '"DataStorageWalCompactionEnabled"',
+                'If true, system filters and compresses WAL archive in 
background')
 
-            .pca-form-column-6
-                +preview-xml-java(model, 'clusterDataStorageConfiguration')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterDataStorageConfiguration')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.pug
index 10244ac..1f0b615 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.pug
@@ -27,169 +27,166 @@ include /app/helpers/jade/mixins
 -var localDeployment = modelDeployment + '.kind === "Local"'
 -var customDeployment = modelDeployment + '.kind === "Custom"'
 
-.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 Class deployment
-        .pca-panel-heading-description
-            | Task and resources deployment in cluster.
-            | 
#[a.link-success(href="https://apacheignite.readme.io/docs/deployment-modes"; 
target="_blank") More info]
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id='deployment')
-        .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row
-            .pca-form-column-6.pc-form-grid-row
-                .pc-form-grid-col-60
-                    +dropdown('Deployment mode:', `${model}.deploymentMode`, 
'"deploymentMode"', 'true', 'SHARED',
-                        '[\
-                            {value: "PRIVATE", label: "PRIVATE"},\
-                            {value: "ISOLATED", label: "ISOLATED"}, \
-                            {value: "SHARED", label: "SHARED"},\
-                            {value: "CONTINUOUS", label: "CONTINUOUS"}\
-                        ]',
-                        'Task classes and resources sharing mode<br/>\
-                        The following deployment modes are supported:\
-                        <ul>\
-                            <li>PRIVATE - in this mode deployed classes do not 
share resources</li>\
-                            <li>ISOLATED - in this mode tasks or classes 
deployed within the same class loader will share the same instances of 
resources</li>\
-                            <li>SHARED - same as ISOLATED, but now tasks from 
different master nodes with the same user version and same class loader will 
share the same class loader on remote nodes</li>\
-                            <li>CONTINUOUS - same as SHARED deployment mode, 
but resources will not be undeployed even after all master nodes left grid</li>\
-                        </ul>')
-                .pc-form-grid-col-60
-                    +checkbox('Enable peer class loading', 
`${model}.peerClassLoadingEnabled`, '"peerClassLoadingEnabled"', 
'Enables/disables peer class loading')
-                .pc-form-grid-col-60
-                    +number('Missed resources cache size:', 
`${model}.peerClassLoadingMissedResourcesCacheSize`, 
'"peerClassLoadingMissedResourcesCacheSize"', enabled, '100', '0',
-                        'If size greater than 0, missed resources will be 
cached and next resource request ignored<br/>\
-                        If size is 0, then request for the resource will be 
sent to the remote node every time this resource is requested')
-                .pc-form-grid-col-60
-                    +number('Pool size:', 
`${model}.peerClassLoadingThreadPoolSize`, '"peerClassLoadingThreadPoolSize"', 
enabled, '2', '1', 'Thread pool size to use for peer class loading')
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Class deployment
+    panel-description
+        | Task and resources deployment in cluster.
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/deployment-modes"; 
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
+                +dropdown('Deployment mode:', `${model}.deploymentMode`, 
'"deploymentMode"', 'true', 'SHARED',
+                    '[\
+                        {value: "PRIVATE", label: "PRIVATE"},\
+                        {value: "ISOLATED", label: "ISOLATED"}, \
+                        {value: "SHARED", label: "SHARED"},\
+                        {value: "CONTINUOUS", label: "CONTINUOUS"}\
+                    ]',
+                    'Task classes and resources sharing mode<br/>\
+                    The following deployment modes are supported:\
+                    <ul>\
+                        <li>PRIVATE - in this mode deployed classes do not 
share resources</li>\
+                        <li>ISOLATED - in this mode tasks or classes deployed 
within the same class loader will share the same instances of resources</li>\
+                        <li>SHARED - same as ISOLATED, but now tasks from 
different master nodes with the same user version and same class loader will 
share the same class loader on remote nodes</li>\
+                        <li>CONTINUOUS - same as SHARED deployment mode, but 
resources will not be undeployed even after all master nodes left grid</li>\
+                    </ul>')
+            .pc-form-grid-col-60
+                +checkbox('Enable peer class loading', 
`${model}.peerClassLoadingEnabled`, '"peerClassLoadingEnabled"', 
'Enables/disables peer class loading')
+            .pc-form-grid-col-60
+                +number('Missed resources cache size:', 
`${model}.peerClassLoadingMissedResourcesCacheSize`, 
'"peerClassLoadingMissedResourcesCacheSize"', enabled, '100', '0',
+                    'If size greater than 0, missed resources will be cached 
and next resource request ignored<br/>\
+                    If size is 0, then request for the resource will be sent 
to the remote node every time this resource is requested')
+            .pc-form-grid-col-60
+                +number('Pool size:', 
`${model}.peerClassLoadingThreadPoolSize`, '"peerClassLoadingThreadPoolSize"', 
enabled, '2', '1', 'Thread pool size to use for peer class loading')
+            .pc-form-grid-col-60
+                mixin clusters-deployment-packages
+                    .ignite-form-field
+                        -let items = exclude
+                        -var uniqueTip = 'Such package already exists!'
+
+                        list-editable(
+                            ng-model=items
+                            name='localClassPathExclude'
+                            list-editable-cols=`::[{
+                                name: "Local class path excludes:",
+                                tip: "List of packages from the system 
classpath that need to be peer-to-peer loaded from task originating node<br/>
+                                '*' is supported at the end of the package 
name which means that all sub-packages and their classes are included like in 
Java package import clause"
+                            }]`
+                            ng-disabled=enabledToDisabled(enabled)
+                        )
+                            list-editable-item-view {{ $item }}
+
+                            list-editable-item-edit
+                                +list-java-package-field('Package name', 
'$item', '"packageName"', items)(
+                                    ignite-auto-focus
+                                )
+                                    +unique-feedback('"packageName"', 
uniqueTip)
+
+                            list-editable-no-items
+                                list-editable-add-item-button(
+                                    
add-item=`$editLast($ctrl.Clusters.addPeerClassLoadingLocalClassPathExclude(${model}))`
+                                    label-single='package'
+                                    label-multiple='packages'
+                                )
+
+                -var form = '$parent.form'
+                +clusters-deployment-packages
+                -var form = 'deployment'
+
+            //- Since ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
+                +java-class('Class loader:', model + '.classLoader', 
'"classLoader"', 'true', 'false',
+                    'Loader which will be used for instantiating execution 
context')
+
+            .pc-form-grid-col-60
+                +dropdown('Deployment variant:', modelDeployment + '.kind', 
'"deploymentKind"', 'true', 'Default',
+                    '[\
+                        {value: "URI", label: "URI"},\
+                        {value: "Local", label: "Local"}, \
+                        {value: "Custom", label: "Custom"},\
+                        {value: null, label: "Default"}\
+                    ]',
+                    'Grid deployment SPI is in charge of deploying tasks and 
classes from different sources:\
+                    <ul>\
+                        <li>URI - Deploy tasks from different sources like 
file system folders, email and HTTP</li>\
+                        <li>Local - Only within VM deployment on local 
node</li>\
+                        <li>Custom - Custom implementation of 
DeploymentSpi</li>\
+                        <li>Default - Default configuration of 
LocalDeploymentSpi will be used</li>\
+                    </ul>')
+            .pc-form-group(ng-show=uriDeployment).pc-form-grid-row
                 .pc-form-grid-col-60
-                    mixin clusters-deployment-packages
+                    mixin clusters-deployment-uri
                         .ignite-form-field
-                            -let items = exclude
-                            -var uniqueTip = 'Such package already exists!'
+                            -let items = uriListModel
+                            -var uniqueTip = 'Such URI already configured!'
 
                             list-editable(
                                 ng-model=items
-                                name='localClassPathExclude'
+                                name='uriList'
                                 list-editable-cols=`::[{
-                                    name: "Local class path excludes:",
-                                    tip: "List of packages from the system 
classpath that need to be peer-to-peer loaded from task originating node<br/>
-                                    '*' is supported at the end of the package 
name which means that all sub-packages and their classes are included like in 
Java package import clause"
+                                    name: "URI list:",
+                                    tip: "List of URI which point to GAR file 
and which should be scanned by SPI for the new tasks"
                                 }]`
-                                ng-disabled=enabledToDisabled(enabled)
                             )
                                 list-editable-item-view {{ $item }}
 
                                 list-editable-item-edit
-                                    +list-java-package-field('Package name', 
'$item', '"packageName"', items)(
-                                        ignite-auto-focus
-                                    )
-                                        +unique-feedback('"packageName"', 
uniqueTip)
+                                    +list-url-field('URL', '$item', '"url"', 
items)
+                                        +unique-feedback('"url"', uniqueTip)
 
                                 list-editable-no-items
                                     list-editable-add-item-button(
-                                        
add-item=`$editLast($ctrl.Clusters.addPeerClassLoadingLocalClassPathExclude(${model}))`
-                                        label-single='package'
-                                        label-multiple='packages'
+                                        add-item=`$editLast((${items} = 
${items} || []).push(''))`
+                                        label-single='URI'
+                                        label-multiple='URIs'
                                     )
 
-                    -var form = '$parent.form'
-                    +clusters-deployment-packages
-                    -var form = 'deployment'
+                    - var form = '$parent.form'
+                    +clusters-deployment-uri
+                    - var form = 'deployment'
+
+                .pc-form-grid-col-60
+                    +text('Temporary directory path:', modelDeployment + 
'.URI.temporaryDirectoryPath', '"DeploymentURITemporaryDirectoryPath"', 
'false', 'Temporary directory path',
+                    'Absolute path to temporary directory which will be used 
by deployment SPI to keep all deployed classes in')
+                .pc-form-grid-col-60
+                    mixin clusters-deployment-scanner
+                        .ignite-form-field
+                            -let items = scannerModel
+                            -var uniqueTip = 'Such scanner already configured!'
+
+                            list-editable(
+                                ng-model=items
+                                name='scannerModel'
+                                list-editable-cols=`::[{name: "URI deployment 
scanners:"}]`
+                            )
+                                list-editable-item-view {{ $item }}
+
+                                list-editable-item-edit
+                                    +list-java-class-field('Scanner', '$item', 
'"scanner"', items)
+                                        +unique-feedback('"scanner"', 
uniqueTip)
 
-                //- Since ignite 2.0
-                .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
-                    +java-class('Class loader:', model + '.classLoader', 
'"classLoader"', 'true', 'false',
-                        'Loader which will be used for instantiating execution 
context')
+                                list-editable-no-items
+                                    list-editable-add-item-button(
+                                        add-item=`$editLast((${items} = 
${items} || []).push(''))`
+                                        label-single='scanner'
+                                        label-multiple='scanners'
+                                    )
+
+                    - var form = '$parent.form'
+                    +clusters-deployment-scanner
+                    - var form = 'deployment'
 
                 .pc-form-grid-col-60
-                    +dropdown('Deployment variant:', modelDeployment + 
'.kind', '"deploymentKind"', 'true', 'Default',
-                        '[\
-                            {value: "URI", label: "URI"},\
-                            {value: "Local", label: "Local"}, \
-                            {value: "Custom", label: "Custom"},\
-                            {value: null, label: "Default"}\
-                        ]',
-                        'Grid deployment SPI is in charge of deploying tasks 
and classes from different sources:\
-                        <ul>\
-                            <li>URI - Deploy tasks from different sources like 
file system folders, email and HTTP</li>\
-                            <li>Local - Only within VM deployment on local 
node</li>\
-                            <li>Custom - Custom implementation of 
DeploymentSpi</li>\
-                            <li>Default - Default configuration of 
LocalDeploymentSpi will be used</li>\
-                        </ul>')
-                .pc-form-group(ng-show=uriDeployment).pc-form-grid-row
-                    .pc-form-grid-col-60
-                        mixin clusters-deployment-uri
-                            .ignite-form-field
-                                -let items = uriListModel
-                                -var uniqueTip = 'Such URI already configured!'
-
-                                list-editable(
-                                    ng-model=items
-                                    name='uriList'
-                                    list-editable-cols=`::[{
-                                        name: "URI list:",
-                                        tip: "List of URI which point to GAR 
file and which should be scanned by SPI for the new tasks"
-                                    }]`
-                                )
-                                    list-editable-item-view {{ $item }}
-
-                                    list-editable-item-edit
-                                        +list-url-field('URL', '$item', 
'"url"', items)
-                                            +unique-feedback('"url"', 
uniqueTip)
-
-                                    list-editable-no-items
-                                        list-editable-add-item-button(
-                                            add-item=`$editLast((${items} = 
${items} || []).push(''))`
-                                            label-single='URI'
-                                            label-multiple='URIs'
-                                        )
-
-                        - var form = '$parent.form'
-                        +clusters-deployment-uri
-                        - var form = 'deployment'
-
-                    .pc-form-grid-col-60
-                        +text('Temporary directory path:', modelDeployment + 
'.URI.temporaryDirectoryPath', '"DeploymentURITemporaryDirectoryPath"', 
'false', 'Temporary directory path',
-                        'Absolute path to temporary directory which will be 
used by deployment SPI to keep all deployed classes in')
-                    .pc-form-grid-col-60
-                        mixin clusters-deployment-scanner
-                            .ignite-form-field
-                                -let items = scannerModel
-                                -var uniqueTip = 'Such scanner already 
configured!'
-
-                                list-editable(
-                                    ng-model=items
-                                    name='scannerModel'
-                                    list-editable-cols=`::[{name: "URI 
deployment scanners:"}]`
-                                )
-                                    list-editable-item-view {{ $item }}
-
-                                    list-editable-item-edit
-                                        +list-java-class-field('Scanner', 
'$item', '"scanner"', items)
-                                            +unique-feedback('"scanner"', 
uniqueTip)
-
-                                    list-editable-no-items
-                                        list-editable-add-item-button(
-                                            add-item=`$editLast((${items} = 
${items} || []).push(''))`
-                                            label-single='scanner'
-                                            label-multiple='scanners'
-                                        )
-
-                        - var form = '$parent.form'
-                        +clusters-deployment-scanner
-                        - var form = 'deployment'
-
-                    .pc-form-grid-col-60
-                        +java-class('Listener:', 
`${modelDeployment}.URI.listener`, '"DeploymentURIListener"', 'true', 'false', 
'Deployment event listener', uriDeployment)
-                    .pc-form-grid-col-60
-                        +checkbox('Check MD5', 
`${modelDeployment}.URI.checkMd5`, '"DeploymentURICheckMd5"', 'Exclude files 
with same md5s from deployment')
-                    .pc-form-grid-col-60
-                        +checkbox('Encode URI', 
`${modelDeployment}.URI.encodeUri`, '"DeploymentURIEncodeUri"', 'URI must be 
encoded before usage')
-                .pc-form-group(ng-show=localDeployment).pc-form-grid-row
-                    .pc-form-grid-col-60
-                        +java-class('Listener:', 
`${modelDeployment}.Local.listener`, '"DeploymentLocalListener"', 'true', 
'false', 'Deployment event listener', localDeployment)
-                .pc-form-group(ng-show=customDeployment).pc-form-grid-row
-                    .pc-form-grid-col-60
-                        +java-class('Class:', 
`${modelDeployment}.Custom.className`, '"DeploymentCustom"', 'true', 
customDeployment, 'DeploymentSpi implementation class', customDeployment)
-            .pca-form-column-6
-                +preview-xml-java(model, 'clusterDeployment')
+                    +java-class('Listener:', 
`${modelDeployment}.URI.listener`, '"DeploymentURIListener"', 'true', 'false', 
'Deployment event listener', uriDeployment)
+                .pc-form-grid-col-60
+                    +checkbox('Check MD5', `${modelDeployment}.URI.checkMd5`, 
'"DeploymentURICheckMd5"', 'Exclude files with same md5s from deployment')
+                .pc-form-grid-col-60
+                    +checkbox('Encode URI', 
`${modelDeployment}.URI.encodeUri`, '"DeploymentURIEncodeUri"', 'URI must be 
encoded before usage')
+            .pc-form-group(ng-show=localDeployment).pc-form-grid-row
+                .pc-form-grid-col-60
+                    +java-class('Listener:', 
`${modelDeployment}.Local.listener`, '"DeploymentLocalListener"', 'true', 
'false', 'Deployment event listener', localDeployment)
+            .pc-form-group(ng-show=customDeployment).pc-form-grid-row
+                .pc-form-grid-col-60
+                    +java-class('Class:', 
`${modelDeployment}.Custom.className`, '"DeploymentCustom"', 'true', 
customDeployment, 'DeploymentSpi implementation class', customDeployment)
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterDeployment')

Reply via email to