Repository: ignite
Updated Branches:
  refs/heads/master ca75df181 -> d24dab813


http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/igfs/fragmentizer.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/igfs/fragmentizer.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/igfs/fragmentizer.pug
index 7d5052e..a8194c2 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/igfs/fragmentizer.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/igfs/fragmentizer.pug
@@ -19,22 +19,19 @@ include /app/helpers/jade/mixins
 -var form = 'fragmentizer'
 -var model = 'backupItem'
 
-.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 Fragmentizer
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
-            .pca-form-column-6.pc-form-grid-row
-                -var enabled = `${model}.fragmentizerEnabled`
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Fragmentizer
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            -var enabled = `${model}.fragmentizerEnabled`
 
-                .pc-form-grid-col-60
-                    +checkbox('Enabled', enabled, '"fragmentizerEnabled"', 
'Fragmentizer enabled flag')
-                .pc-form-grid-col-30
-                    +number('Concurrent files:', 
`${model}.fragmentizerConcurrentFiles`, '"fragmentizerConcurrentFiles"', 
enabled, '0', '0', 'Number of files to process concurrently by fragmentizer')
-                .pc-form-grid-col-30
-                    +number('Throttling block length:', 
`${model}.fragmentizerThrottlingBlockLength`, 
'"fragmentizerThrottlingBlockLength"', enabled, '16777216', '1', 'Length of 
file chunk to transmit before throttling is delayed')
-                .pc-form-grid-col-60
-                    +number('Throttling delay:', 
`${model}.fragmentizerThrottlingDelay`, '"fragmentizerThrottlingDelay"', 
enabled, '200', '0', 'Delay in milliseconds for which fragmentizer is paused')
-            .pca-form-column-6
-                +preview-xml-java(model, 'igfsFragmentizer')
+            .pc-form-grid-col-60
+                +checkbox('Enabled', enabled, '"fragmentizerEnabled"', 
'Fragmentizer enabled flag')
+            .pc-form-grid-col-30
+                +number('Concurrent files:', 
`${model}.fragmentizerConcurrentFiles`, '"fragmentizerConcurrentFiles"', 
enabled, '0', '0', 'Number of files to process concurrently by fragmentizer')
+            .pc-form-grid-col-30
+                +number('Throttling block length:', 
`${model}.fragmentizerThrottlingBlockLength`, 
'"fragmentizerThrottlingBlockLength"', enabled, '16777216', '1', 'Length of 
file chunk to transmit before throttling is delayed')
+            .pc-form-grid-col-60
+                +number('Throttling delay:', 
`${model}.fragmentizerThrottlingDelay`, '"fragmentizerThrottlingDelay"', 
enabled, '200', '0', 'Delay in milliseconds for which fragmentizer is paused')
+        .pca-form-column-6
+            +preview-xml-java(model, 'igfsFragmentizer')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/igfs/general.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/igfs/general.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/igfs/general.pug
index 9f65f41..b9eb8fc 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/igfs/general.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/igfs/general.pug
@@ -19,57 +19,54 @@ include /app/helpers/jade/mixins
 -var form = 'general'
 -var model = 'backupItem'
 
-.pca-panel(ng-form=form novalidate)
-    .pca-panel-heading(bs-collapse-toggle)
-        ignite-form-panel-chevron
-        .pca-panel-heading-title General
-        .pca-panel-heading-description
-            | General IGFS configuration. 
-            
a.link-success(href="https://apacheignite-fs.readme.io/docs/in-memory-file-system";
 target="_blank") More info
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id='general')
-        .pca-panel-body.pca-form-row
-            .pca-form-column-6.pc-form-grid-row
-                .pc-form-grid-col-60
-                    +sane-ignite-form-field-text({
-                        label: 'Name:',
-                        model: `${model}.name`,
-                        name: '"igfsName"',
-                        placeholder: 'Input name',
-                        required: true
-                    })(
-                        ignite-unique='$ctrl.igfss'
-                        ignite-unique-property='name'
-                        ignite-unique-skip=`["_id", ${model}]`
-                    )
-                        +unique-feedback(`${model}.name`, 'IGFS name should be 
unique.')
-                .pc-form-grid-col-30
-                    +sane-ignite-form-field-dropdown({
-                        label: 'IGFS mode:',
-                        model: `${model}.defaultMode`,
-                        name: '"defaultMode"',
-                        placeholder: '{{::$ctrl.IGFSs.defaultMode.default}}',
-                        options: '{{::$ctrl.IGFSs.defaultMode.values}}',
-                        tip: `
-                        Mode to specify how IGFS interacts with Hadoop file 
system
-                        <ul>
-                            <li>PRIMARY - in this mode IGFS will not delegate 
to secondary Hadoop file system and will cache all the files in memory only</li>
-                            <li>PROXY - in this mode IGFS will not cache any 
files in memory and will only pass them through to secondary file system</li>
-                            <li>DUAL_SYNC - in this mode IGFS will cache files 
locally and also <b>synchronously</b> write them through to secondary file 
system</li>
-                            <li>DUAL_ASYNC - in this mode IGFS will cache 
files locally and also <b> asynchronously </b> write them through to secondary 
file system</li>
-                        </ul>
-                        `
-                    })
-                .pc-form-grid-col-30
-                    +sane-ignite-form-field-number({
-                        label: 'Group size:',
-                        model: `${model}.affinnityGroupSize`,
-                        name: '"affinnityGroupSize"',
-                        placeholder: 
'{{::$ctrl.IGFSs.affinnityGroupSize.default}}',
-                        min: '{{::$ctrl.IGFSs.affinnityGroupSize.min}}',
-                        tip: `
-                            Size of the group in blocks<br/>
-                            Required for construction of affinity mapper in 
IGFS data cache
-                        `
-                    })
-            .pca-form-column-6
-                +preview-xml-java(model, 'igfsGeneral')
+panel-collapsible(opened=`::true` ng-form=form)
+    panel-title General
+    panel-description
+        | General IGFS configuration. 
+        
a.link-success(href="https://apacheignite-fs.readme.io/docs/in-memory-file-system";
 target="_blank") More info
+    panel-content.pca-form-row
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +sane-ignite-form-field-text({
+                    label: 'Name:',
+                    model: `${model}.name`,
+                    name: '"igfsName"',
+                    placeholder: 'Input name',
+                    required: true
+                })(
+                    ignite-unique='$ctrl.igfss'
+                    ignite-unique-property='name'
+                    ignite-unique-skip=`["_id", ${model}]`
+                )
+                    +unique-feedback(`${model}.name`, 'IGFS name should be 
unique.')
+            .pc-form-grid-col-30
+                +sane-ignite-form-field-dropdown({
+                    label: 'IGFS mode:',
+                    model: `${model}.defaultMode`,
+                    name: '"defaultMode"',
+                    placeholder: '{{::$ctrl.IGFSs.defaultMode.default}}',
+                    options: '{{::$ctrl.IGFSs.defaultMode.values}}',
+                    tip: `
+                    Mode to specify how IGFS interacts with Hadoop file system
+                    <ul>
+                        <li>PRIMARY - in this mode IGFS will not delegate to 
secondary Hadoop file system and will cache all the files in memory only</li>
+                        <li>PROXY - in this mode IGFS will not cache any files 
in memory and will only pass them through to secondary file system</li>
+                        <li>DUAL_SYNC - in this mode IGFS will cache files 
locally and also <b>synchronously</b> write them through to secondary file 
system</li>
+                        <li>DUAL_ASYNC - in this mode IGFS will cache files 
locally and also <b> asynchronously </b> write them through to secondary file 
system</li>
+                    </ul>
+                    `
+                })
+            .pc-form-grid-col-30
+                +sane-ignite-form-field-number({
+                    label: 'Group size:',
+                    model: `${model}.affinnityGroupSize`,
+                    name: '"affinnityGroupSize"',
+                    placeholder: 
'{{::$ctrl.IGFSs.affinnityGroupSize.default}}',
+                    min: '{{::$ctrl.IGFSs.affinnityGroupSize.min}}',
+                    tip: `
+                        Size of the group in blocks<br/>
+                        Required for construction of affinity mapper in IGFS 
data cache
+                    `
+                })
+        .pca-form-column-6
+            +preview-xml-java(model, 'igfsGeneral')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/igfs/ipc.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/igfs/ipc.pug 
b/modules/web-console/frontend/app/modules/states/configuration/igfs/ipc.pug
index e123b3c..ef024b4 100644
--- a/modules/web-console/frontend/app/modules/states/configuration/igfs/ipc.pug
+++ b/modules/web-console/frontend/app/modules/states/configuration/igfs/ipc.pug
@@ -19,40 +19,37 @@ include /app/helpers/jade/mixins
 -var form = 'ipc'
 -var model = 'backupItem'
 
-.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 IPC
-        .pca-panel-heading-description IGFS Inter-process communication 
properties.
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
-            .pca-form-column-6.pc-form-grid-row
-                -var ipcEndpointConfiguration = 
`${model}.ipcEndpointConfiguration`
-                -var enabled = `${model}.ipcEndpointEnabled`
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title IPC
+    panel-description IGFS Inter-process communication properties.
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            -var ipcEndpointConfiguration = `${model}.ipcEndpointConfiguration`
+            -var enabled = `${model}.ipcEndpointEnabled`
 
-                .pc-form-grid-col-60
-                    +checkbox('Enabled', enabled, '"ipcEndpointEnabled"', 'IPC 
endpoint enabled flag')
-                .pc-form-grid-col-60
-                    +dropdown('Type:', `${ipcEndpointConfiguration}.type`, 
'"ipcEndpointConfigurationType"', enabled, 'TCP',
-                        '[\
-                            {value: "SHMEM", label: "SHMEM"},\
-                            {value: "TCP", label: "TCP"}\
-                        ]',
-                        'IPC endpoint type\
-                        <ul>\
-                            <li>SHMEM - shared memory endpoint</li>\
-                            <li>TCP - TCP endpoint</li>\
-                        </ul>')
-                .pc-form-grid-col-30
-                    +text-ip-address('Host:', 
`${ipcEndpointConfiguration}.host`, '"ipcEndpointConfigurationHost"', enabled, 
'127.0.0.1', 'Host endpoint is bound to')
-                .pc-form-grid-col-30
-                    +number-min-max('Port:', 
`${ipcEndpointConfiguration}.port`, '"ipcEndpointConfigurationPort"', enabled, 
'10500', '1', '65535', 'Port endpoint is bound to')
-                .pc-form-grid-col-30
-                    +number('Memory size:', 
`${ipcEndpointConfiguration}.memorySize`, 
'"ipcEndpointConfigurationMemorySize"', enabled, '262144', '1', 'Shared memory 
size in bytes allocated for endpoint communication')
-                .pc-form-grid-col-30
-                    +number('Thread count:', 
`${ipcEndpointConfiguration}.threadCount`, 
'"ipcEndpointConfigurationThreadCount"', enabled, 'availableProcessors', '1',
-                        'Number of threads used by this endpoint to process 
incoming requests')
-                .pc-form-grid-col-60
-                    +text-enabled('Token directory:', 
`${ipcEndpointConfiguration}.tokenDirectoryPath`, 
'"ipcEndpointConfigurationTokenDirectoryPath"', enabled, 'false', 'ipc/shmem', 
'Directory where shared memory tokens are stored')
-            .pca-form-column-6
-                +preview-xml-java(model, 'igfsIPC')
+            .pc-form-grid-col-60
+                +checkbox('Enabled', enabled, '"ipcEndpointEnabled"', 'IPC 
endpoint enabled flag')
+            .pc-form-grid-col-60
+                +dropdown('Type:', `${ipcEndpointConfiguration}.type`, 
'"ipcEndpointConfigurationType"', enabled, 'TCP',
+                    '[\
+                        {value: "SHMEM", label: "SHMEM"},\
+                        {value: "TCP", label: "TCP"}\
+                    ]',
+                    'IPC endpoint type\
+                    <ul>\
+                        <li>SHMEM - shared memory endpoint</li>\
+                        <li>TCP - TCP endpoint</li>\
+                    </ul>')
+            .pc-form-grid-col-30
+                +text-ip-address('Host:', `${ipcEndpointConfiguration}.host`, 
'"ipcEndpointConfigurationHost"', enabled, '127.0.0.1', 'Host endpoint is bound 
to')
+            .pc-form-grid-col-30
+                +number-min-max('Port:', `${ipcEndpointConfiguration}.port`, 
'"ipcEndpointConfigurationPort"', enabled, '10500', '1', '65535', 'Port 
endpoint is bound to')
+            .pc-form-grid-col-30
+                +number('Memory size:', 
`${ipcEndpointConfiguration}.memorySize`, 
'"ipcEndpointConfigurationMemorySize"', enabled, '262144', '1', 'Shared memory 
size in bytes allocated for endpoint communication')
+            .pc-form-grid-col-30
+                +number('Thread count:', 
`${ipcEndpointConfiguration}.threadCount`, 
'"ipcEndpointConfigurationThreadCount"', enabled, 'availableProcessors', '1',
+                    'Number of threads used by this endpoint to process 
incoming requests')
+            .pc-form-grid-col-60
+                +text-enabled('Token directory:', 
`${ipcEndpointConfiguration}.tokenDirectoryPath`, 
'"ipcEndpointConfigurationTokenDirectoryPath"', enabled, 'false', 'ipc/shmem', 
'Directory where shared memory tokens are stored')
+        .pca-form-column-6
+            +preview-xml-java(model, 'igfsIPC')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.pug 
b/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.pug
index 63e5e46..9a39b3a 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.pug
@@ -20,94 +20,91 @@ include /app/helpers/jade/mixins
 -var model = 'backupItem'
 -var pathModes = `${model}.pathModes`
 
-.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 Miscellaneous
-        .pca-panel-heading-description Various miscellaneous IGFS settings.
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
-            .pca-form-column-6.pc-form-grid-row
-                .pc-form-grid-col-60
-                    +number('Block size:', `${model}.blockSize`, 
'"blockSize"', 'true', '65536', '0', 'File data block size in bytes')
-
-                //- Since ignite 2.0
-                .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
-                    +number('Buffer size:', `${model}.streamBufferSize`, 
'"streamBufferSize"', 'true', '65536', '0', 'Read/write buffer size for IGFS 
stream operations in bytes')
-
-                //- Removed in ignite 2.0
-                .pc-form-grid-col-60(ng-if-start='$ctrl.available(["1.0.0", 
"2.0.0"])')
-                    +number('Stream buffer size:', 
`${model}.streamBufferSize`, '"streamBufferSize"', 'true', '65536', '0', 
'Read/write buffer size for IGFS stream operations in bytes')
-                .pc-form-grid-col-60(ng-if-end)
-                    +number('Maximum space size:', `${model}.maxSpaceSize`, 
'"maxSpaceSize"', 'true', '0', '0', 'Maximum space available for data cache to 
store file system entries')
-
-                .pc-form-grid-col-30
-                    +number('Maximum task range length:', 
`${model}.maximumTaskRangeLength`, '"maximumTaskRangeLength"', 'true', '0', 
'0', 'Maximum default range size of a file being split during IGFS task 
execution')
-                .pc-form-grid-col-30
-                    +number-min-max('Management port:', 
`${model}.managementPort`, '"managementPort"', 'true', '11400', '0', '65535', 
'Port number for management endpoint')
-                .pc-form-grid-col-30
-                    +number('Per node batch size:', 
`${model}.perNodeBatchSize`, '"perNodeBatchSize"', 'true', '100', '0', 'Number 
of file blocks collected on local node before sending batch to remote node')
-                .pc-form-grid-col-30
-                    +number('Per node parallel batch count:', 
`${model}.perNodeParallelBatchCount`, '"perNodeParallelBatchCount"', 'true', 
'8', '0', 'Number of file block batches that can be concurrently sent to remote 
node')
-                .pc-form-grid-col-60
-                    +number('Prefetch blocks:', `${model}.prefetchBlocks`, 
'"prefetchBlocks"', 'true', '0', '0', 'Number of pre-fetched blocks if specific 
file chunk is requested')
-                .pc-form-grid-col-60
-                    +number('Sequential reads before prefetch:', 
`${model}.sequentialReadsBeforePrefetch`, '"sequentialReadsBeforePrefetch"', 
'true', '0', '0', 'Amount of sequential block reads before prefetch is 
triggered')
-
-                //- Removed in ignite 2.0
-                .pc-form-grid-col-60(ng-if='$ctrl.available(["1.0.0", 
"2.0.0"])')
-                    +number('Trash purge timeout:', 
`${model}.trashPurgeTimeout`, '"trashPurgeTimeout"', 'true', '1000', '0', 
'Maximum timeout awaiting for trash purging in case data cache oversize is 
detected')
-
-                .pc-form-grid-col-60
-                    +checkbox('Colocate metadata', 
`${model}.colocateMetadata`, '"colocateMetadata"', 'Whether to co-locate 
metadata on a single node')
-                .pc-form-grid-col-60
-                    +checkbox('Relaxed consistency', 
`${model}.relaxedConsistency`, '"relaxedConsistency"',
-                        'If value of this flag is <b>true</b>, IGFS will skip 
expensive consistency checks<br/>\
-                        It is recommended to set this flag to <b>false</b> if 
your application has conflicting\
-                        operations, or you do not know how exactly users will 
use your system')
-
-                //- Since ignite 2.0
-                .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
-                    +checkbox('Update file length on flush', model + 
'.updateFileLengthOnFlush', '"updateFileLengthOnFlush"', 'Update file length on 
flush flag')
-
-                .pc-form-grid-col-60
-                    mixin igfs-misc-path-modes
-                        .ignite-form-field
-                            +ignite-form-field__label('Path modes:', 
'"pathModes"')
-                                +tooltip(`Map of path prefixes to IGFS modes 
used for them`)
-                            .ignite-form-field__control
-                                -let items = pathModes
-
-                                list-editable(ng-model=items)
-                                    list-editable-item-view
-                                        | {{ $item.path + " [" + $item.mode + 
"]"}}
-
-                                    list-editable-item-edit
-                                        - form = '$parent.form'
-
-                                        .pc-form-grid-row
-                                            .pc-form-grid-col-30
-                                                
+ignite-form-field-text('Path:', '$item.path', '"path"', false, true, 'Enter 
path')(ignite-auto-focus)
-                                            .pc-form-grid-col-30
-                                                
+sane-ignite-form-field-dropdown({
-                                                    label: 'Mode:',
-                                                    model: `$item.mode`,
-                                                    name: '"mode"',
-                                                    required: true,
-                                                    placeholder: 'Choose igfs 
mode',
-                                                    options: 
'{{::$ctrl.IGFSs.defaultMode.values}}'
-                                                })(
-                                                    
ng-model-options='{allowInvalid: true}'
-                                                )
-
-                                    list-editable-no-items
-                                        list-editable-add-item-button(
-                                            add-item=`$editLast((${items} = 
${items} || []).push({}))`
-                                            label-single='path mode'
-                                            label-multiple='path modes'
-                                        )
-
-                    +igfs-misc-path-modes
-
-            .pca-form-column-6
-                +preview-xml-java(model, 'igfsMisc')
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Miscellaneous
+    panel-description Various miscellaneous IGFS settings.
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +number('Block size:', `${model}.blockSize`, '"blockSize"', 
'true', '65536', '0', 'File data block size in bytes')
+
+            //- Since ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
+                +number('Buffer size:', `${model}.streamBufferSize`, 
'"streamBufferSize"', 'true', '65536', '0', 'Read/write buffer size for IGFS 
stream operations in bytes')
+
+            //- Removed in ignite 2.0
+            .pc-form-grid-col-60(ng-if-start='$ctrl.available(["1.0.0", 
"2.0.0"])')
+                +number('Stream buffer size:', `${model}.streamBufferSize`, 
'"streamBufferSize"', 'true', '65536', '0', 'Read/write buffer size for IGFS 
stream operations in bytes')
+            .pc-form-grid-col-60(ng-if-end)
+                +number('Maximum space size:', `${model}.maxSpaceSize`, 
'"maxSpaceSize"', 'true', '0', '0', 'Maximum space available for data cache to 
store file system entries')
+
+            .pc-form-grid-col-30
+                +number('Maximum task range length:', 
`${model}.maximumTaskRangeLength`, '"maximumTaskRangeLength"', 'true', '0', 
'0', 'Maximum default range size of a file being split during IGFS task 
execution')
+            .pc-form-grid-col-30
+                +number-min-max('Management port:', `${model}.managementPort`, 
'"managementPort"', 'true', '11400', '0', '65535', 'Port number for management 
endpoint')
+            .pc-form-grid-col-30
+                +number('Per node batch size:', `${model}.perNodeBatchSize`, 
'"perNodeBatchSize"', 'true', '100', '0', 'Number of file blocks collected on 
local node before sending batch to remote node')
+            .pc-form-grid-col-30
+                +number('Per node parallel batch count:', 
`${model}.perNodeParallelBatchCount`, '"perNodeParallelBatchCount"', 'true', 
'8', '0', 'Number of file block batches that can be concurrently sent to remote 
node')
+            .pc-form-grid-col-60
+                +number('Prefetch blocks:', `${model}.prefetchBlocks`, 
'"prefetchBlocks"', 'true', '0', '0', 'Number of pre-fetched blocks if specific 
file chunk is requested')
+            .pc-form-grid-col-60
+                +number('Sequential reads before prefetch:', 
`${model}.sequentialReadsBeforePrefetch`, '"sequentialReadsBeforePrefetch"', 
'true', '0', '0', 'Amount of sequential block reads before prefetch is 
triggered')
+
+            //- Removed in ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available(["1.0.0", "2.0.0"])')
+                +number('Trash purge timeout:', `${model}.trashPurgeTimeout`, 
'"trashPurgeTimeout"', 'true', '1000', '0', 'Maximum timeout awaiting for trash 
purging in case data cache oversize is detected')
+
+            .pc-form-grid-col-60
+                +checkbox('Colocate metadata', `${model}.colocateMetadata`, 
'"colocateMetadata"', 'Whether to co-locate metadata on a single node')
+            .pc-form-grid-col-60
+                +checkbox('Relaxed consistency', 
`${model}.relaxedConsistency`, '"relaxedConsistency"',
+                    'If value of this flag is <b>true</b>, IGFS will skip 
expensive consistency checks<br/>\
+                    It is recommended to set this flag to <b>false</b> if your 
application has conflicting\
+                    operations, or you do not know how exactly users will use 
your system')
+
+            //- Since ignite 2.0
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")')
+                +checkbox('Update file length on flush', model + 
'.updateFileLengthOnFlush', '"updateFileLengthOnFlush"', 'Update file length on 
flush flag')
+
+            .pc-form-grid-col-60
+                mixin igfs-misc-path-modes
+                    .ignite-form-field
+                        +ignite-form-field__label('Path modes:', '"pathModes"')
+                            +tooltip(`Map of path prefixes to IGFS modes used 
for them`)
+                        .ignite-form-field__control
+                            -let items = pathModes
+
+                            list-editable(ng-model=items)
+                                list-editable-item-view
+                                    | {{ $item.path + " [" + $item.mode + "]"}}
+
+                                list-editable-item-edit
+                                    - form = '$parent.form'
+
+                                    .pc-form-grid-row
+                                        .pc-form-grid-col-30
+                                            +ignite-form-field-text('Path:', 
'$item.path', '"path"', false, true, 'Enter path')(ignite-auto-focus)
+                                        .pc-form-grid-col-30
+                                            +sane-ignite-form-field-dropdown({
+                                                label: 'Mode:',
+                                                model: `$item.mode`,
+                                                name: '"mode"',
+                                                required: true,
+                                                placeholder: 'Choose igfs 
mode',
+                                                options: 
'{{::$ctrl.IGFSs.defaultMode.values}}'
+                                            })(
+                                                
ng-model-options='{allowInvalid: true}'
+                                            )
+
+                                list-editable-no-items
+                                    list-editable-add-item-button(
+                                        add-item=`$editLast((${items} = 
${items} || []).push({}))`
+                                        label-single='path mode'
+                                        label-multiple='path modes'
+                                    )
+
+                +igfs-misc-path-modes
+
+        .pca-form-column-6
+            +preview-xml-java(model, 'igfsMisc')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/igfs/secondary.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/modules/states/configuration/igfs/secondary.pug
 
b/modules/web-console/frontend/app/modules/states/configuration/igfs/secondary.pug
index da34596..92c8210 100644
--- 
a/modules/web-console/frontend/app/modules/states/configuration/igfs/secondary.pug
+++ 
b/modules/web-console/frontend/app/modules/states/configuration/igfs/secondary.pug
@@ -19,40 +19,37 @@ include /app/helpers/jade/mixins
 -var form = 'secondaryFileSystem'
 -var model = 'backupItem'
 
-.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 Secondary file system
-        .pca-panel-heading-description
-            | Secondary file system is provided for pass-through, 
write-through, and read-through purposes. 
-            
a.link-success(href="https://apacheignite-fs.readme.io/docs/secondary-file-system";
 target="_blank") More info
-    .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .pca-panel-body.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
-            .pca-form-column-6.pc-form-grid-row
-                -var enabled = `${model}.secondaryFileSystemEnabled`
-                -var secondaryFileSystem = `${model}.secondaryFileSystem`
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Secondary file system
+    panel-description
+        | Secondary file system is provided for pass-through, write-through, 
and read-through purposes. 
+        
a.link-success(href="https://apacheignite-fs.readme.io/docs/secondary-file-system";
 target="_blank") More info
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            -var enabled = `${model}.secondaryFileSystemEnabled`
+            -var secondaryFileSystem = `${model}.secondaryFileSystem`
 
-                .pc-form-grid-col-60
-                    +sane-form-field-checkbox({
-                        label: 'Enabled',
-                        name: '"secondaryFileSystemEnabled"',
-                        model: enabled
-                    })(
-                        ng-model-options='{allowInvalid: true}'
-                        ui-validate=`{
-                            requiredWhenIGFSProxyMode: 
'$ctrl.IGFSs.secondaryFileSystemEnabled.requiredWhenIGFSProxyMode(${model})',
-                            requiredWhenPathModeProxyMode: 
'$ctrl.IGFSs.secondaryFileSystemEnabled.requiredWhenPathModeProxyMode(${model})'
-                        }`
-                        ui-validate-watch-collection=`"[${model}.defaultMode, 
${model}.pathModes]"`
-                        ui-validate-watch-object-equality='true'
-                    )
-                        +form-field-feedback(null, 
'requiredWhenIGFSProxyMode', 'Secondary file system should be configured for 
"PROXY" IGFS mode')
-                        +form-field-feedback(null, 
'requiredWhenPathModeProxyMode', 'Secondary file system should be configured 
for "PROXY" path mode')
-                .pc-form-grid-col-60
-                    +text-enabled('URI:', `${secondaryFileSystem}.uri`, 
'"hadoopURI"', enabled, 'false', 'hdfs://[namenodehost]:[port]/[path]', 'URI of 
file system')
-                .pc-form-grid-col-60
-                    +text-enabled('Config path:', 
`${secondaryFileSystem}.cfgPath`, '"cfgPath"', enabled, 'false', 'Path to 
additional config', 'Additional path to Hadoop configuration')
-                .pc-form-grid-col-60
-                    +text-enabled('User name:', 
`${secondaryFileSystem}.userName`, '"userName"', enabled, 'false', 'Input user 
name', 'User name')
-            .pca-form-column-6
-                +preview-xml-java(model, 'igfsSecondFS')
+            .pc-form-grid-col-60
+                +sane-form-field-checkbox({
+                    label: 'Enabled',
+                    name: '"secondaryFileSystemEnabled"',
+                    model: enabled
+                })(
+                    ng-model-options='{allowInvalid: true}'
+                    ui-validate=`{
+                        requiredWhenIGFSProxyMode: 
'$ctrl.IGFSs.secondaryFileSystemEnabled.requiredWhenIGFSProxyMode(${model})',
+                        requiredWhenPathModeProxyMode: 
'$ctrl.IGFSs.secondaryFileSystemEnabled.requiredWhenPathModeProxyMode(${model})'
+                    }`
+                    ui-validate-watch-collection=`"[${model}.defaultMode, 
${model}.pathModes]"`
+                    ui-validate-watch-object-equality='true'
+                )
+                    +form-field-feedback(null, 'requiredWhenIGFSProxyMode', 
'Secondary file system should be configured for "PROXY" IGFS mode')
+                    +form-field-feedback(null, 
'requiredWhenPathModeProxyMode', 'Secondary file system should be configured 
for "PROXY" path mode')
+            .pc-form-grid-col-60
+                +text-enabled('URI:', `${secondaryFileSystem}.uri`, 
'"hadoopURI"', enabled, 'false', 'hdfs://[namenodehost]:[port]/[path]', 'URI of 
file system')
+            .pc-form-grid-col-60
+                +text-enabled('Config path:', 
`${secondaryFileSystem}.cfgPath`, '"cfgPath"', enabled, 'false', 'Path to 
additional config', 'Additional path to Hadoop configuration')
+            .pc-form-grid-col-60
+                +text-enabled('User name:', `${secondaryFileSystem}.userName`, 
'"userName"', enabled, 'false', 'Input user name', 'User name')
+        .pca-form-column-6
+            +preview-xml-java(model, 'igfsSecondFS')

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/package-lock.json
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/package-lock.json 
b/modules/web-console/frontend/package-lock.json
index f7f313d..071dec0 100644
--- a/modules/web-console/frontend/package-lock.json
+++ b/modules/web-console/frontend/package-lock.json
@@ -39,6 +39,15 @@
         "@types/angular": "1.6.43"
       }
     },
+    "@types/angular-mocks": {
+      "version": "1.5.11",
+      "resolved": 
"https://registry.npmjs.org/@types/angular-mocks/-/angular-mocks-1.5.11.tgz";,
+      "integrity": 
"sha512-C8ipXVKQvw+w64kH97Npa3a7uZB7ZL9Kr4+sOe33oYIyxeg09M8bzAWCIYCmPRRV0px6ozFTZeSVjBXDikz2zw==",
+      "dev": true,
+      "requires": {
+        "@types/angular": "1.6.43"
+      }
+    },
     "@types/angular-strap": {
       "version": "2.3.1",
       "resolved": 
"https://registry.npmjs.org/@types/angular-strap/-/angular-strap-2.3.1.tgz";,
@@ -85,12 +94,41 @@
       "integrity": 
"sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==",
       "dev": true
     },
+    "@types/node": {
+      "version": "9.6.2",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.2.tgz";,
+      "integrity": 
"sha512-UWkRY9X7RQHp5OhhRIIka58/gVVycL1zHZu0OTsT5LI86ABaMOSbUjAl+b0FeDhQcxclrkyft3kW5QWdMRs8wQ==",
+      "dev": true
+    },
     "@types/sinon": {
       "version": "4.3.1",
       "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-4.3.1.tgz";,
       "integrity": 
"sha512-DK4YtH30I67k4klURIBS4VAe1aBISfS9lgNlHFkibSmKem2tLQc5VkKoJreT3dCJAd+xRyCS8bx1o97iq3yUVg==",
       "dev": true
     },
+    "@types/tapable": {
+      "version": "1.0.1",
+      "resolved": 
"https://registry.npmjs.org/@types/tapable/-/tapable-1.0.1.tgz";,
+      "integrity": 
"sha512-zRc13uGALq6rmLOYmpdI8X5TK6ATuf9jITC7iKTxaHqb/se7vBdiC8BEp1vM2VJQVSt3N53kDDzJOYeVkUKO/Q==",
+      "dev": true
+    },
+    "@types/uglify-js": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.1.tgz";,
+      "integrity": 
"sha512-eWwNO88HxJonNKyxZ3dR62yle3N+aBPIsjTrPtoMcldLXGeIKAIlewNIWT4cxjZ4gy3YdBobkaKSv74HJXSzRg==",
+      "dev": true,
+      "requires": {
+        "source-map": "0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": 
"https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";,
+          "integrity": 
"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
     "@types/ui-grid": {
       "version": "0.0.38",
       "resolved": 
"https://registry.npmjs.org/@types/ui-grid/-/ui-grid-0.0.38.tgz";,
@@ -101,6 +139,35 @@
         "@types/jquery": "3.3.1"
       }
     },
+    "@types/webpack": {
+      "version": "4.1.3",
+      "resolved": 
"https://registry.npmjs.org/@types/webpack/-/webpack-4.1.3.tgz";,
+      "integrity": 
"sha512-NoGVTCumOsyFfuy3934f3ktiJi+wcXHJFxT47tby3iCpuo6M/WjFA9VqT5bYO+FE46i3R0N00RpJX75HxHKDaQ==",
+      "dev": true,
+      "requires": {
+        "@types/node": "9.6.2",
+        "@types/tapable": "1.0.1",
+        "@types/uglify-js": "3.0.1",
+        "source-map": "0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": 
"https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";,
+          "integrity": 
"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "@types/webpack-merge": {
+      "version": "4.1.3",
+      "resolved": 
"https://registry.npmjs.org/@types/webpack-merge/-/webpack-merge-4.1.3.tgz";,
+      "integrity": 
"sha512-VdmNuYIvIouYlCI73NLKOE1pOVAxv5m5eupvTemojZz9dqghoQXmeEveI6CqeuWpCH6x6FLp6+tXM2sls20/MA==",
+      "dev": true,
+      "requires": {
+        "@types/webpack": "4.1.3"
+      }
+    },
     "@uirouter/angularjs": {
       "version": "1.0.15",
       "resolved": 
"https://registry.npmjs.org/@uirouter/angularjs/-/angularjs-1.0.15.tgz";,
@@ -323,6 +390,12 @@
       "resolved": 
"https://registry.npmjs.org/angular-messages/-/angular-messages-1.6.9.tgz";,
       "integrity": 
"sha512-/2xvG6vDC+Us8h0baSa1siDKwPj5R2A7LldxxhK2339HInc09bq9shMVCUy9zqnuvwnDUJ/DSgkSaBoSHSZrqg=="
     },
+    "angular-mocks": {
+      "version": "1.6.9",
+      "resolved": 
"https://registry.npmjs.org/angular-mocks/-/angular-mocks-1.6.9.tgz";,
+      "integrity": 
"sha512-5aEwXmfd5DQvb64pOgP2W2D3ozAQSARkB6q+6NQfUJvJs9bD2YcExrUc1P4EbiIuyWag2OQM+pIKUNojVi3SBg==",
+      "dev": true
+    },
     "angular-motion": {
       "version": "0.4.4",
       "resolved": 
"https://registry.npmjs.org/angular-motion/-/angular-motion-0.4.4.tgz";,

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/package.json
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/package.json 
b/modules/web-console/frontend/package.json
index 32d9262..3b42a61 100644
--- a/modules/web-console/frontend/package.json
+++ b/modules/web-console/frontend/package.json
@@ -116,12 +116,16 @@
   "devDependencies": {
     "@types/angular": "^1.6.32",
     "@types/angular-animate": "^1.5.8",
+    "@types/angular-mocks": "^1.5.11",
     "@types/angular-strap": "^2.3.1",
-    "@types/chai": "^4.0.4",
+    "@types/chai": "^4.1.2",
     "@types/lodash": "^4.14.77",
-    "@types/mocha": "^2.2.44",
+    "@types/mocha": "^2.2.48",
     "@types/sinon": "^4.0.0",
     "@types/ui-grid": "0.0.38",
+    "@types/webpack": "^4.1.2",
+    "@types/webpack-merge": "^4.1.3",
+    "angular-mocks": "^1.6.9",
     "app-root-path": "2.0.1",
     "chai": "4.1.0",
     "chalk": "2.1.0",
@@ -131,7 +135,7 @@
     "jasmine-core": "2.6.4",
     "karma": "2.0.0",
     "karma-babel-preprocessor": "6.0.1",
-    "karma-chrome-launcher": "2.2.0",
+    "karma-chrome-launcher": "^2.2.0",
     "karma-mocha": "1.3.0",
     "karma-mocha-reporter": "2.2.3",
     "karma-teamcity-reporter": "1.0.0",

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/test/karma.conf.babel.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/test/karma.conf.babel.js 
b/modules/web-console/frontend/test/karma.conf.babel.js
index 48104c8..b192594 100644
--- a/modules/web-console/frontend/test/karma.conf.babel.js
+++ b/modules/web-console/frontend/test/karma.conf.babel.js
@@ -83,6 +83,14 @@ export default (config) => {
             ChromeHeadlessNoSandbox: {
                 base: 'ChromeHeadless',
                 flags: ['--no-sandbox']
+            },
+            ChromeDebug: {
+                base: 'Chrome',
+                flags: [
+                    '--start-maximized',
+                    '--auto-open-devtools-for-tabs'
+                ],
+                debug: true
             }
         },
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/webpack/webpack.test.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/webpack/webpack.test.js 
b/modules/web-console/frontend/webpack/webpack.test.js
index f906d0d..2ade625 100644
--- a/modules/web-console/frontend/webpack/webpack.test.js
+++ b/modules/web-console/frontend/webpack/webpack.test.js
@@ -38,10 +38,9 @@ export default merge(commonCfg, {
         }
     },
     module: {
+        exprContextCritical: false,
         rules: [
-            {test: /\.scss$/, use: ['ignore-loader']},
-            {test: /\.css$/, use: ['ignore-loader']},
-            {test: /\.pug$/, use: ['ignore-loader']}
+            {test: /\.s?css$/, use: ['ignore-loader']}
         ]
     }
 });

Reply via email to