http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/92c06985/modules/webconfig/src/main/webapp/clusters.html
----------------------------------------------------------------------
diff --cc modules/webconfig/src/main/webapp/clusters.html
index 0000000,0000000..c9ca499
new file mode 100644
--- /dev/null
+++ b/modules/webconfig/src/main/webapp/clusters.html
@@@ -1,0 -1,0 +1,493 @@@
++<!DOCTYPE html>
++<html ng-app="ignite-web-configurator">
++  <head>
++    <title></title>
++    <!-- Bootstrap-->
++    <link rel="stylesheet" 
href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.css">
++    <!-- Font Awesome Icons-->
++    <link rel="stylesheet" 
href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.css">
++    <!-- Font-->
++    <link rel="stylesheet" 
href="//fonts.googleapis.com/css?family=Roboto+Slab:700:serif|Roboto+Slab:400:serif">
++    <link rel="stylesheet" href="/stylesheets/style.css">
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.min.js"></script>
++    <script 
src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-sanitize.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.tpl.min.js"></script>
++    <script 
src="https://cdnjs.cloudflare.com/ajax/libs/angular-smart-table/2.0.3/smart-table.js";></script>
++    <script src="/javascripts/controllers/common.js"></script>
++    <script src="/javascripts/dataStructures.js"></script>
++    <script src="/javascripts/bundle.js"></script>
++    <script src="/javascripts/controllers/clusters.js"></script>
++  </head>
++  <body class="theme-line body-overlap">
++    <div class="wrapper">
++      <header id="header" class="header">
++        <div class="container">
++          <h1 class="navbar-brand"><a href="/">Apache Ignite Web 
Configurator</a></h1>
++          <div ng-controller="auth" class="navbar-collapse collapse">
++            <ul ng-controller="activeLink" class="nav navbar-nav">
++              <li><a ng-class="{active: isActive('/clusters')}" 
href="/clusters">Configuration</a></li>
++              <li><a ng-class="{active: isActive('/sql')}" 
href="/sql">SQL</a></li>
++            </ul>
++            <ul ng-init="user = undefined" class="nav navbar-nav pull-right">
++              <li ng-show="user"><a data-toggle="dropdown" 
aria-expanded="true" bs-dropdown data-template="user-dropdown" 
data-placement="bottom-right" class="dropdown-toggle">{{user.username}}<span 
class="caret"></span></a>
++                <script id="user-dropdown" type="text/ng-template">
++                  <ul class="dropdown-menu">
++                    <li><a href="/rest/auth/logout">Log Out</a></li>
++                  </ul>
++                </script>
++              </li>
++              <li ng-show="!user" class="nav-login"><a ng-click="login()" 
href="#">Log In</a></li>
++            </ul>
++          </div>
++        </div>
++      </header>
++      <div class="container body-container">
++        <div class="main-content">
++          <div class="main-head">
++            <div class="row">
++              <div class="col-sm-2 border-right section-left greedy">
++                <div class="sidebar-nav">
++                  <ul ng-controller="activeLink" class="menu">
++                    <li><a ng-class="{active: isActive('/clusters')}" 
href="/clusters">Clusters</a></li>
++                    <li><a ng-class="{active: isActive('/caches')}" 
href="/caches">Caches</a></li>
++                    <li><a ng-class="{active: isActive('/persistence')}" 
href="/persistence">Persistence</a></li>
++                    <li><a ng-class="{active: isActive('/clients')}" 
href="/clients">Clients</a></li>
++                    <li>
++                      <p></p><a ng-class="{active: isActive('/summary')}" 
href="/summary">Summary</a>
++                    </li>
++                  </ul>
++                </div>
++              </div>
++              <div class="col-sm-10 border-left section-right">
++                <div class="docs-content">
++                  <div class="docs-header">
++                    <h1>Clusters</h1>
++                    <p>Create and configure Ignite clusters.</p>
++                    <hr>
++                  </div>
++                  <div ng-controller="clustersController" class="docs-body">
++                    <div ng-hide="clusters.length == 0" class="links">
++                      <table st-table="clusters" class="col-sm-12">
++                        <tbody>
++                          <tr ng-repeat="row in clusters track by row._id">
++                            <td ng-class="{active: row._id == 
selectedItem._id}" class="col-sm-6"><a ng-click="selectItem(row)">{{$index + 
1}}. {{row.name}}, {{row.discovery.kind | displayValue:discoveries:'Discovery 
not set'}}</a></td>
++                          </tr>
++                        </tbody>
++                      </table>
++                    </div>
++                    <button ng-click="createItem()" 
ng-disabled="!create.template" class="btn btn-primary">&nbspAdd cluster</button>
++                    <label style="margin-left: 15px; margin-right: 10px">Use 
template:</label>
++                    <button ng-init="create.template = templates[0].value" 
ng-model="create.template" data-template="/select" data-placeholder="Choose 
cluster template" bs-options="item.value as item.label for item in templates" 
bs-select class="btn btn-default"></button><i bs-tooltip 
data-title="{{joinTip(templateTip)}}" type="button" class="tiplabel fa 
fa-question-circle"></i>
++                    <hr>
++                    <form name="inputForm" ng-if="backupItem" novalidate 
class="form-horizontal">
++                      <div bs-collapse data-start-collapsed="false">
++                        <div class="panel panel-default">
++                          <div class="panel-heading">
++                            <h3><a bs-collapse-toggle>General</a></h3>
++                          </div>
++                          <div bs-collapse-target class="panel-collapse">
++                            <div class="panel-body">
++                              <div ng-repeat="field in general" 
class="settings-row">
++                                <div ng-switch="field.type">
++                                  <div ng-switch-when="check" class="checkbox 
col-sm-6">
++                                    <label>
++                                      <input type="checkbox" 
ng-model="getModel(backupItem, field.path)[field.model]"/>{{field.label}}<i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipLabel 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipLabel fa 
fa-question-circle blank"></i>
++                                    </label>
++                                  </div>
++                                  <div ng-switch-when="text">
++                                    <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                    <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                      <div class="input-tip">
++                                        <input type="text" 
placeholder="{{field.placeholder}}" ng-required="field.required" 
class="form-control" ng-model="getModel(backupItem, field.path)[field.model]"/>
++                                      </div>
++                                    </div>
++                                  </div>
++                                  <div ng-switch-when="password">
++                                    <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                    <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                      <div class="input-tip">
++                                        <input type="password" 
placeholder="{{field.placeholder}}" ng-required="field.required" 
class="form-control" ng-model="getModel(backupItem, field.path)[field.model]"/>
++                                      </div>
++                                    </div>
++                                  </div>
++                                  <div ng-switch-when="number">
++                                    <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                    <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                      <div class="input-tip">
++                                        <input name="{{field.model}}" 
type="number" placeholder="{{field.placeholder}}" min="{{field.min ? field.min 
: 0}}" max="{{field.max ? field.max : Number.MAX_VALUE}}" 
ng-required="field.required" class="form-control" 
ng-model="getModel(backupItem, field.path)[field.model]"/><i 
ng-show="inputForm[&quot;{{field.model}}&quot;].$error.min" 
bs-tooltip="bs-tooltip" data-title="Value is less than allowable minimum." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i><i 
ng-show="inputForm[&quot;{{field.model}}&quot;].$error.max" 
bs-tooltip="bs-tooltip" data-title="Value is more than allowable maximum." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i><i 
ng-show="inputForm[&quot;{{field.model}}&quot;].$error.number" 
bs-tooltip="bs-tooltip" data-title="Invalid value. Only numbers allowed." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i>
++                                      </div>
++                                    </div>
++                                  </div>
++                                  <div ng-switch-when="dropdown">
++                                    <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                    <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                      <div class="input-tip">
++                                        <button bs-select="bs-select" 
ng-required="field.required" data-placeholder="{{field.placeholder}}" 
bs-options="item.value as item.label for item in {{field.items}}" 
class="form-control" ng-model="getModel(backupItem, 
field.path)[field.model]"></button>
++                                      </div>
++                                    </div>
++                                  </div>
++                                  <div ng-switch-when="dropdown-multiple">
++                                    <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                    <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                      <div class="input-tip">
++                                        <button bs-select="bs-select" 
ng-disabled="{{field.items}}.length == 0" data-multiple="1" 
data-placeholder="{{field.placeholder}}" bs-options="item.value as item.label 
for item in {{field.items}}" class="form-control" 
ng-model="getModel(backupItem, field.path)[field.model]"></button>
++                                      </div>
++                                    </div><a ng-show="field.addLink" 
ng-href="{{field.addLink.ref}}" class="customize">{{field.addLink.label}}</a>
++                                  </div>
++                                  <div ng-switch-when="dropdown-details">
++                                    <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                    <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                      <div class="input-tip">
++                                        <button bs-select="bs-select" 
ng-required="field.required" data-placeholder="{{field.placeholder}}" 
bs-options="item.value as item.label for item in {{field.items}}" 
class="form-control" ng-model="getModel(backupItem, 
field.path)[field.model]"></button>
++                                      </div>
++                                    </div><a ng-show="getModel(backupItem, 
field.path)[field.model] &amp;&amp; field.details[getModel(backupItem, 
field.path)[field.model]].fields" ng-click="field.details[getModel(backupItem, 
field.path)[field.model]].expanded = !field.details[getModel(backupItem, 
field.path)[field.model]].expanded" 
class="customize">{{field.details[getModel(backupItem, 
field.path)[field.model]].expanded ? "Hide settings" : "Show settings"}}</a>
++                                    <div 
ng-show="field.details[getModel(backupItem, field.path)[field.model]].expanded 
&amp;&amp; getModel(backupItem, field.path)[field.model]" class="col-sm-6 
panel-details">
++                                      <div ng-repeat="detail in 
field.details[getModel(backupItem, field.path)[field.model]].fields" 
class="details-row">
++                                        <div ng-switch="detail.type">
++                                          <div ng-switch-when="check" 
class="checkbox">
++                                            <label>
++                                              <input type="checkbox" 
ng-model="getModel(backupItem, detail.path)[detail.model]"/>{{detail.label}}<i 
ng-if="detail.tip" bs-tooltip="joinTip(detail.tip)" type="button" 
class="tipLabel fa fa-question-circle"></i><i ng-if="!detail.tip" 
class="tipLabel fa fa-question-circle blank"></i>
++                                            </label>
++                                          </div>
++                                          <div ng-switch-when="text">
++                                            <label class="col-sm-4 
details-label">{{detail.label}}:</label>
++                                            <div class="col-sm-8"><i 
ng-if="detail.tip" bs-tooltip="joinTip(detail.tip)" type="button" 
class="tipField fa fa-question-circle"></i><i ng-if="!detail.tip" 
class="tipField fa fa-question-circle blank"></i>
++                                              <div class="input-tip">
++                                                <input type="text" 
placeholder="{{detail.placeholder}}" class="form-control" 
ng-model="getModel(backupItem, detail.path)[detail.model]"/>
++                                              </div>
++                                            </div>
++                                          </div>
++                                          <div ng-switch-when="number">
++                                            <label class="col-sm-4 
details-label">{{detail.label}}:</label>
++                                            <div class="col-sm-8"><i 
ng-if="detail.tip" bs-tooltip="joinTip(detail.tip)" type="button" 
class="tipField fa fa-question-circle"></i><i ng-if="!detail.tip" 
class="tipField fa fa-question-circle blank"></i>
++                                              <div class="input-tip">
++                                                <input 
name="{{detail.model}}" type="number" placeholder="{{detail.placeholder}}" 
min="{{detail.min ? detail.min : 0}}" max="{{detail.max ? detail.max : 
Number.MAX_VALUE}}" class="form-control" ng-model="getModel(backupItem, 
detail.path)[detail.model]"/><i 
ng-show="inputForm[&quot;{{detail.model}}&quot;].$error.min" 
bs-tooltip="bs-tooltip" data-title="Value is less than allowable minimum." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i><i 
ng-show="inputForm[&quot;{{detail.model}}&quot;].$error.max" 
bs-tooltip="bs-tooltip" data-title="Value is more than allowable maximum." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i><i 
ng-show="inputForm[&quot;{{detail.model}}&quot;].$error.number" 
bs-tooltip="bs-tooltip" data-title="Invalid value. Only numbers allowed." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i>
++                                              </div>
++                                            </div>
++                                          </div>
++                                          <div ng-switch-when="dropdown">
++                                            <label class="col-sm-4 
details-label">{{detail.label}}:</label>
++                                            <div class="col-sm-8"><i 
ng-if="detail.tip" bs-tooltip="joinTip(detail.tip)" type="button" 
class="tipField fa fa-question-circle"></i><i ng-if="!detail.tip" 
class="tipField fa fa-question-circle blank"></i>
++                                              <div class="input-tip">
++                                                <button bs-select="bs-select" 
data-placeholder="{{detail.placeholder}}" bs-options="item.value as item.label 
for item in {{detail.items}}" class="form-control" 
ng-model="getModel(backupItem, detail.path)[detail.model]"></button>
++                                              </div>
++                                            </div>
++                                          </div>
++                                          <div 
ng-switch-when="dropdown-multiple">
++                                            <label class="col-sm-4 
details-label">{{detail.label}}:</label>
++                                            <div class="col-sm-8">
++                                              <button bs-select="bs-select" 
data-multiple="1" data-placeholder="{{detail.placeholder}}" 
bs-options="item.value as item.label for item in {{detail.items}}" 
class="form-control" ng-model="getModel(backupItem, 
detail.path)[detail.model]"></button>
++                                            </div><i ng-if="detail.tip" 
bs-tooltip="joinTip(detail.tip)" type="button" class="tipField fa 
fa-question-circle"></i><i ng-if="!detail.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                          </div>
++                                          <div ng-switch-when="table-simple" 
style="margin-right: 5px; margin-top: -0.65em" ng-model="getModel(backupItem, 
detail.path)[detail.model]">
++                                            <table 
st-table="getModel(backupItem, detail.path)[detail.model]" 
ng-show="getModel(backupItem, detail.path)[detail.model].length &gt; 0" 
class="col-sm-12 links-edit">
++                                              <tbody>
++                                                <tr ng-repeat="item in 
getModel(backupItem, detail.path)[detail.model] track by $index">
++                                                  <td class="col-sm-11">
++                                                    <div 
ng-show="detail.editIdx != {{$index}}"><a ng-click="detail.editIdx = $index; 
curValue = getModel(backupItem, detail.path)[detail.model][$index]">{{$index + 
1}}) {{item}}</a><i ng-click="detail.editIdx = -1; getModel(backupItem, 
detail.path)[detail.model].splice($index, 1)" class="tipField fa 
fa-remove"></i></div>
++                                                    <div 
ng-show="detail.editIdx == {{$index}}">
++                                                      <label 
class="labelField">{{$index + 1}})</label><i ng-click="detail.editIdx = -1; 
getModel(backupItem, detail.path)[detail.model][$index]=curValue" 
class="tipField fa fa-floppy-o"></i>
++                                                      <div class="input-tip">
++                                                        <input type="text" 
ng-model="curValue" placeholder="{{detail.placeholder}}" class="form-control"/>
++                                                      </div>
++                                                    </div>
++                                                  </td>
++                                                  <td 
ng-if="detail.reordering" class="col-sm-1"><i ng-show="$index &gt; 0" 
ng-click="swapSimpleItems(detailMdl, $index, $index - 1); detail.editIdx = -1;" 
class="fa fa-arrow-up"></i><i ng-show="$index &lt; getModel(backupItem, 
detail.path)[detail.model].length - 1" 
ng-click="swapSimpleItems(getModel(backupItem, detail.path)[detail.model], 
$index, $index + 1); detail.editIdx = -1;" class="fa fa-arrow-down"></i></td>
++                                                </tr>
++                                              </tbody>
++                                            </table>
++                                            <button ng-disabled="!newValue || 
getModel(backupItem, detail.path)[detail.model].indexOf(newValue) &gt;= 0" 
ng-click="detail.editIdx = -1; getModel(backupItem, detail.path)[detail.model] 
? getModel(backupItem, detail.path)[detail.model].push(newValue) : 
getModel(backupItem, detail.path)[detail.model] = [newValue];" class="btn 
btn-primary fieldButton">Add</button><i ng-if="detail.tip" 
bs-tooltip="joinTip(detail.tip)" type="button" class="tipField fa 
fa-question-circle"></i><i ng-if="!detail.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                            <div class="input-tip">
++                                              <input type="text" 
ng-model="newValue" ng-focus="detail.editIdx = -1" 
placeholder="{{detail.placeholder}}" class="form-control"/>
++                                            </div>
++                                          </div>
++                                        </div>
++                                      </div>
++                                    </div>
++                                  </div>
++                                  <div ng-switch-when="table-simple" 
ng-model="getModel(backupItem, field.path)[field.model]">
++                                    <div>
++                                      <label>{{field.tableLabel}}: 
{{getModel(backupItem, field.path)[field.model].length}}</label><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipLabel 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipLabel fa 
fa-question-circle blank"></i>
++                                    </div>
++                                    <table st-table="getModel(backupItem, 
field.path)[field.model]" ng-show="getModel(backupItem, 
field.path)[field.model].length &gt; 0" class="links-edit col-sm-12">
++                                      <tbody>
++                                        <tr ng-repeat="item in 
getModel(backupItem, field.path)[field.model] track by $index" 
class="col-sm-12">
++                                          <td class="col-sm-6">
++                                            <div ng-show="field.editIdx != 
{{$index}}"><a ng-click="field.editIdx = $index; curValue = 
getModel(backupItem, field.path)[field.model][$index]">{{$index + 1}}) {{item | 
compact}}</a><i ng-click="field.editIdx = -1; getModel(backupItem, 
field.path)[field.model].splice($index, 1)" class="tipField fa 
fa-remove"></i></div>
++                                            <div ng-show="field.editIdx == 
{{$index}}">
++                                              <label 
class="labelField">{{$index + 1}})</label><i ng-click="field.editIdx = -1; 
getModel(backupItem, field.path)[field.model][$index]=curValue" class="tipField 
fa fa-floppy-o"></i>
++                                              <div class="input-tip">
++                                                <input type="text" 
ng-model="curValue" placeholder="{{field.placeholder}}" class="form-control"/>
++                                              </div>
++                                            </div>
++                                          </td>
++                                          <td ng-if="field.reordering" 
class="col-sm-1"><i ng-show="$index &gt; 0" ng-click="swapSimpleItems(fieldMdl, 
$index, $index - 1); field.editIdx = -1;" class="fa fa-arrow-up"></i><i 
ng-show="$index &lt; getModel(backupItem, field.path)[field.model].length - 1" 
ng-click="swapSimpleItems(getModel(backupItem, field.path)[field.model], 
$index, $index + 1); field.editIdx = -1;" class="fa fa-arrow-down"></i></td>
++                                        </tr>
++                                      </tbody>
++                                    </table>
++                                    <div class="col-sm-6">
++                                      <button ng-disabled="!newValue || 
getModel(backupItem, field.path)[field.model].indexOf(newValue) &gt;= 0" 
ng-click="field.editIdx = -1; getModel(backupItem, field.path)[field.model] ? 
getModel(backupItem, field.path)[field.model].push(newValue) : 
getModel(backupItem, field.path)[field.model] = [newValue];" class="btn 
btn-primary fieldButton">Add</button><i ng-if="field.tip" 
bs-tooltip="joinTip(field.tip)" type="button" class="tipField fa 
fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                      <div class="input-tip">
++                                        <input type="text" 
ng-model="newValue" ng-focus="field.editIdx = -1" 
placeholder="{{field.placeholder}}" class="form-control"/>
++                                      </div>
++                                    </div>
++                                  </div>
++                                  <div ng-switch-when="indexedTypes">
++                                    <div>
++                                      <label>Indexed types: 
{{backupItem.indexedTypes.length}}</label><i ng-if="field.tip" 
bs-tooltip="joinTip(field.tip)" type="button" class="tipLabel fa 
fa-question-circle"></i><i ng-if="!field.tip" class="tipLabel fa 
fa-question-circle blank"></i>
++                                    </div>
++                                    <table st-table="backupItem.indexedTypes" 
ng-show="backupItem.indexedTypes.length &gt; 0" class="links-edit col-sm-12">
++                                      <tbody>
++                                        <tr ng-repeat="item in 
backupItem.indexedTypes" class="col-sm-12">
++                                          <td class="col-sm-6">
++                                            <div ng-show="field.editIdx != 
{{$index}}"><a ng-click="field.editIdx = $index; curKeyClass = 
backupItem.indexedTypes[$index].keyClass; curValueClass = 
backupItem.indexedTypes[$index].valueClass">{{$index + 1}}) {{item.keyClass}} / 
{{item.valueClass}}</a><i ng-click="field.editIdx = -1; 
backupItem.indexedTypes.splice($index, 1)" class="tipField fa 
fa-remove"></i></div>
++                                            <div ng-show="field.editIdx == 
{{$index}}">
++                                              <label 
class="labelField">{{$index + 1}})</label><i ng-click="field.editIdx = -1; 
backupItem.indexedTypes[$index]={keyClass: curKeyClass, valueClass: 
curValueClass}" class="tipField fa fa-floppy-o"></i>
++                                              <div class="input-tip">
++                                                <div class="col-sm-12">
++                                                  <input type="text" 
ng-model="curKeyClass" placeholder="Key class full name" class="form-control 
table-form-control"/>
++                                                  <label>&nbsp;/&nbsp;</label>
++                                                  <input type="text" 
ng-model="curValueClass" placeholder="Value class full name" 
class="form-control table-form-control"/>
++                                                </div>
++                                              </div>
++                                            </div>
++                                          </td>
++                                        </tr>
++                                      </tbody>
++                                    </table>
++                                    <div class="col-sm-6">
++                                      <input type="text" 
ng-model="newKeyClass" ng-focus="field.editIdx = -1" placeholder="Key class 
full name" class="form-control"/>
++                                      <div class="settings-row">
++                                        <input type="text" 
ng-model="newValueClass" ng-focus="field.editIdx = -1" placeholder="Value class 
full name" class="form-control"/>
++                                      </div>
++                                      <button ng-click="field.editIdx = -1; 
addIndexedTypes(newKeyClass, newValueClass)" class="btn btn-primary 
fieldButton">Add</button>
++                                    </div>
++                                  </div>
++                                </div>
++                              </div>
++                            </div>
++                          </div>
++                        </div>
++                      </div>
++                      <div bs-collapse data-start-collapsed="true">
++                        <div ng-show="expanded" class="panel-title">
++                          <h3><a bs-collapse-toggle="0" ng-click="expanded = 
!expanded;">{{expanded ? 'Hide advanced settings...' : 'Show advanced 
settings...'}}</a></h3>
++                        </div>
++                        <div bs-collapse-target class="panel-collapse">
++                          <div bs-collapse data-start-collapsed="true" 
data-allow-multiple="true" class="span">
++                            <div ng-repeat="group in advanced" class="panel 
panel-default">
++                              <div class="panel-heading">
++                                <h3><a 
bs-collapse-toggle>{{group.label}}</a><i ng-if="group.tip" 
bs-tooltip="joinTip(group.tip)" type="button" class="tipLabel fa 
fa-question-circle"></i><i ng-if="!group.tip" class="tipLabel fa 
fa-question-circle blank"></i></h3>
++                              </div>
++                              <div bs-collapse-target class="panel-collapse">
++                                <div class="panel-body">
++                                  <div ng-repeat="field in group.fields" 
class="settings-row">
++                                    <div ng-switch="field.type">
++                                      <div ng-switch-when="check" 
class="checkbox col-sm-6">
++                                        <label>
++                                          <input type="checkbox" 
ng-model="getModel(backupItem, field.path)[field.model]"/>{{field.label}}<i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipLabel 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipLabel fa 
fa-question-circle blank"></i>
++                                        </label>
++                                      </div>
++                                      <div ng-switch-when="text">
++                                        <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                        <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                          <div class="input-tip">
++                                            <input type="text" 
placeholder="{{field.placeholder}}" ng-required="field.required" 
class="form-control" ng-model="getModel(backupItem, field.path)[field.model]"/>
++                                          </div>
++                                        </div>
++                                      </div>
++                                      <div ng-switch-when="password">
++                                        <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                        <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                          <div class="input-tip">
++                                            <input type="password" 
placeholder="{{field.placeholder}}" ng-required="field.required" 
class="form-control" ng-model="getModel(backupItem, field.path)[field.model]"/>
++                                          </div>
++                                        </div>
++                                      </div>
++                                      <div ng-switch-when="number">
++                                        <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                        <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                          <div class="input-tip">
++                                            <input name="{{field.model}}" 
type="number" placeholder="{{field.placeholder}}" min="{{field.min ? field.min 
: 0}}" max="{{field.max ? field.max : Number.MAX_VALUE}}" 
ng-required="field.required" class="form-control" 
ng-model="getModel(backupItem, field.path)[field.model]"/><i 
ng-show="inputForm[&quot;{{field.model}}&quot;].$error.min" 
bs-tooltip="bs-tooltip" data-title="Value is less than allowable minimum." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i><i 
ng-show="inputForm[&quot;{{field.model}}&quot;].$error.max" 
bs-tooltip="bs-tooltip" data-title="Value is more than allowable maximum." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i><i 
ng-show="inputForm[&quot;{{field.model}}&quot;].$error.number" 
bs-tooltip="bs-tooltip" data-title="Invalid value. Only numbers allowed." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i>
++                                          </div>
++                                        </div>
++                                      </div>
++                                      <div ng-switch-when="dropdown">
++                                        <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                        <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                          <div class="input-tip">
++                                            <button bs-select="bs-select" 
ng-required="field.required" data-placeholder="{{field.placeholder}}" 
bs-options="item.value as item.label for item in {{field.items}}" 
class="form-control" ng-model="getModel(backupItem, 
field.path)[field.model]"></button>
++                                          </div>
++                                        </div>
++                                      </div>
++                                      <div ng-switch-when="dropdown-multiple">
++                                        <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                        <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                          <div class="input-tip">
++                                            <button bs-select="bs-select" 
ng-disabled="{{field.items}}.length == 0" data-multiple="1" 
data-placeholder="{{field.placeholder}}" bs-options="item.value as item.label 
for item in {{field.items}}" class="form-control" 
ng-model="getModel(backupItem, field.path)[field.model]"></button>
++                                          </div>
++                                        </div><a ng-show="field.addLink" 
ng-href="{{field.addLink.ref}}" class="customize">{{field.addLink.label}}</a>
++                                      </div>
++                                      <div ng-switch-when="dropdown-details">
++                                        <label ng-class="{required: 
field.required}" class="col-sm-2">{{field.label}}:</label>
++                                        <div class="col-sm-4"><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipField 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                          <div class="input-tip">
++                                            <button bs-select="bs-select" 
ng-required="field.required" data-placeholder="{{field.placeholder}}" 
bs-options="item.value as item.label for item in {{field.items}}" 
class="form-control" ng-model="getModel(backupItem, 
field.path)[field.model]"></button>
++                                          </div>
++                                        </div><a 
ng-show="getModel(backupItem, field.path)[field.model] &amp;&amp; 
field.details[getModel(backupItem, field.path)[field.model]].fields" 
ng-click="field.details[getModel(backupItem, field.path)[field.model]].expanded 
= !field.details[getModel(backupItem, field.path)[field.model]].expanded" 
class="customize">{{field.details[getModel(backupItem, 
field.path)[field.model]].expanded ? "Hide settings" : "Show settings"}}</a>
++                                        <div 
ng-show="field.details[getModel(backupItem, field.path)[field.model]].expanded 
&amp;&amp; getModel(backupItem, field.path)[field.model]" class="col-sm-6 
panel-details">
++                                          <div ng-repeat="detail in 
field.details[getModel(backupItem, field.path)[field.model]].fields" 
class="details-row">
++                                            <div ng-switch="detail.type">
++                                              <div ng-switch-when="check" 
class="checkbox">
++                                                <label>
++                                                  <input type="checkbox" 
ng-model="getModel(backupItem, detail.path)[detail.model]"/>{{detail.label}}<i 
ng-if="detail.tip" bs-tooltip="joinTip(detail.tip)" type="button" 
class="tipLabel fa fa-question-circle"></i><i ng-if="!detail.tip" 
class="tipLabel fa fa-question-circle blank"></i>
++                                                </label>
++                                              </div>
++                                              <div ng-switch-when="text">
++                                                <label class="col-sm-4 
details-label">{{detail.label}}:</label>
++                                                <div class="col-sm-8"><i 
ng-if="detail.tip" bs-tooltip="joinTip(detail.tip)" type="button" 
class="tipField fa fa-question-circle"></i><i ng-if="!detail.tip" 
class="tipField fa fa-question-circle blank"></i>
++                                                  <div class="input-tip">
++                                                    <input type="text" 
placeholder="{{detail.placeholder}}" class="form-control" 
ng-model="getModel(backupItem, detail.path)[detail.model]"/>
++                                                  </div>
++                                                </div>
++                                              </div>
++                                              <div ng-switch-when="number">
++                                                <label class="col-sm-4 
details-label">{{detail.label}}:</label>
++                                                <div class="col-sm-8"><i 
ng-if="detail.tip" bs-tooltip="joinTip(detail.tip)" type="button" 
class="tipField fa fa-question-circle"></i><i ng-if="!detail.tip" 
class="tipField fa fa-question-circle blank"></i>
++                                                  <div class="input-tip">
++                                                    <input 
name="{{detail.model}}" type="number" placeholder="{{detail.placeholder}}" 
min="{{detail.min ? detail.min : 0}}" max="{{detail.max ? detail.max : 
Number.MAX_VALUE}}" class="form-control" ng-model="getModel(backupItem, 
detail.path)[detail.model]"/><i 
ng-show="inputForm[&quot;{{detail.model}}&quot;].$error.min" 
bs-tooltip="bs-tooltip" data-title="Value is less than allowable minimum." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i><i 
ng-show="inputForm[&quot;{{detail.model}}&quot;].$error.max" 
bs-tooltip="bs-tooltip" data-title="Value is more than allowable maximum." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i><i 
ng-show="inputForm[&quot;{{detail.model}}&quot;].$error.number" 
bs-tooltip="bs-tooltip" data-title="Invalid value. Only numbers allowed." 
type="button" class="fa fa-exclamation-triangle form-control-feedback"></i>
++                                                  </div>
++                                                </div>
++                                              </div>
++                                              <div ng-switch-when="dropdown">
++                                                <label class="col-sm-4 
details-label">{{detail.label}}:</label>
++                                                <div class="col-sm-8"><i 
ng-if="detail.tip" bs-tooltip="joinTip(detail.tip)" type="button" 
class="tipField fa fa-question-circle"></i><i ng-if="!detail.tip" 
class="tipField fa fa-question-circle blank"></i>
++                                                  <div class="input-tip">
++                                                    <button 
bs-select="bs-select" data-placeholder="{{detail.placeholder}}" 
bs-options="item.value as item.label for item in {{detail.items}}" 
class="form-control" ng-model="getModel(backupItem, 
detail.path)[detail.model]"></button>
++                                                  </div>
++                                                </div>
++                                              </div>
++                                              <div 
ng-switch-when="dropdown-multiple">
++                                                <label class="col-sm-4 
details-label">{{detail.label}}:</label>
++                                                <div class="col-sm-8">
++                                                  <button 
bs-select="bs-select" data-multiple="1" 
data-placeholder="{{detail.placeholder}}" bs-options="item.value as item.label 
for item in {{detail.items}}" class="form-control" 
ng-model="getModel(backupItem, detail.path)[detail.model]"></button>
++                                                </div><i ng-if="detail.tip" 
bs-tooltip="joinTip(detail.tip)" type="button" class="tipField fa 
fa-question-circle"></i><i ng-if="!detail.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                              </div>
++                                              <div 
ng-switch-when="table-simple" style="margin-right: 5px; margin-top: -0.65em" 
ng-model="getModel(backupItem, detail.path)[detail.model]">
++                                                <table 
st-table="getModel(backupItem, detail.path)[detail.model]" 
ng-show="getModel(backupItem, detail.path)[detail.model].length &gt; 0" 
class="col-sm-12 links-edit">
++                                                  <tbody>
++                                                    <tr ng-repeat="item in 
getModel(backupItem, detail.path)[detail.model] track by $index">
++                                                      <td class="col-sm-11">
++                                                        <div 
ng-show="detail.editIdx != {{$index}}"><a ng-click="detail.editIdx = $index; 
curValue = getModel(backupItem, detail.path)[detail.model][$index]">{{$index + 
1}}) {{item}}</a><i ng-click="detail.editIdx = -1; getModel(backupItem, 
detail.path)[detail.model].splice($index, 1)" class="tipField fa 
fa-remove"></i></div>
++                                                        <div 
ng-show="detail.editIdx == {{$index}}">
++                                                          <label 
class="labelField">{{$index + 1}})</label><i ng-click="detail.editIdx = -1; 
getModel(backupItem, detail.path)[detail.model][$index]=curValue" 
class="tipField fa fa-floppy-o"></i>
++                                                          <div 
class="input-tip">
++                                                            <input 
type="text" ng-model="curValue" placeholder="{{detail.placeholder}}" 
class="form-control"/>
++                                                          </div>
++                                                        </div>
++                                                      </td>
++                                                      <td 
ng-if="detail.reordering" class="col-sm-1"><i ng-show="$index &gt; 0" 
ng-click="swapSimpleItems(detailMdl, $index, $index - 1); detail.editIdx = -1;" 
class="fa fa-arrow-up"></i><i ng-show="$index &lt; getModel(backupItem, 
detail.path)[detail.model].length - 1" 
ng-click="swapSimpleItems(getModel(backupItem, detail.path)[detail.model], 
$index, $index + 1); detail.editIdx = -1;" class="fa fa-arrow-down"></i></td>
++                                                    </tr>
++                                                  </tbody>
++                                                </table>
++                                                <button 
ng-disabled="!newValue || getModel(backupItem, 
detail.path)[detail.model].indexOf(newValue) &gt;= 0" ng-click="detail.editIdx 
= -1; getModel(backupItem, detail.path)[detail.model] ? getModel(backupItem, 
detail.path)[detail.model].push(newValue) : getModel(backupItem, 
detail.path)[detail.model] = [newValue];" class="btn btn-primary 
fieldButton">Add</button><i ng-if="detail.tip" bs-tooltip="joinTip(detail.tip)" 
type="button" class="tipField fa fa-question-circle"></i><i ng-if="!detail.tip" 
class="tipField fa fa-question-circle blank"></i>
++                                                <div class="input-tip">
++                                                  <input type="text" 
ng-model="newValue" ng-focus="detail.editIdx = -1" 
placeholder="{{detail.placeholder}}" class="form-control"/>
++                                                </div>
++                                              </div>
++                                            </div>
++                                          </div>
++                                        </div>
++                                      </div>
++                                      <div ng-switch-when="table-simple" 
ng-model="getModel(backupItem, field.path)[field.model]">
++                                        <div>
++                                          <label>{{field.tableLabel}}: 
{{getModel(backupItem, field.path)[field.model].length}}</label><i 
ng-if="field.tip" bs-tooltip="joinTip(field.tip)" type="button" class="tipLabel 
fa fa-question-circle"></i><i ng-if="!field.tip" class="tipLabel fa 
fa-question-circle blank"></i>
++                                        </div>
++                                        <table st-table="getModel(backupItem, 
field.path)[field.model]" ng-show="getModel(backupItem, 
field.path)[field.model].length &gt; 0" class="links-edit col-sm-12">
++                                          <tbody>
++                                            <tr ng-repeat="item in 
getModel(backupItem, field.path)[field.model] track by $index" 
class="col-sm-12">
++                                              <td class="col-sm-6">
++                                                <div ng-show="field.editIdx 
!= {{$index}}"><a ng-click="field.editIdx = $index; curValue = 
getModel(backupItem, field.path)[field.model][$index]">{{$index + 1}}) {{item | 
compact}}</a><i ng-click="field.editIdx = -1; getModel(backupItem, 
field.path)[field.model].splice($index, 1)" class="tipField fa 
fa-remove"></i></div>
++                                                <div ng-show="field.editIdx 
== {{$index}}">
++                                                  <label 
class="labelField">{{$index + 1}})</label><i ng-click="field.editIdx = -1; 
getModel(backupItem, field.path)[field.model][$index]=curValue" class="tipField 
fa fa-floppy-o"></i>
++                                                  <div class="input-tip">
++                                                    <input type="text" 
ng-model="curValue" placeholder="{{field.placeholder}}" class="form-control"/>
++                                                  </div>
++                                                </div>
++                                              </td>
++                                              <td ng-if="field.reordering" 
class="col-sm-1"><i ng-show="$index &gt; 0" ng-click="swapSimpleItems(fieldMdl, 
$index, $index - 1); field.editIdx = -1;" class="fa fa-arrow-up"></i><i 
ng-show="$index &lt; getModel(backupItem, field.path)[field.model].length - 1" 
ng-click="swapSimpleItems(getModel(backupItem, field.path)[field.model], 
$index, $index + 1); field.editIdx = -1;" class="fa fa-arrow-down"></i></td>
++                                            </tr>
++                                          </tbody>
++                                        </table>
++                                        <div class="col-sm-6">
++                                          <button ng-disabled="!newValue || 
getModel(backupItem, field.path)[field.model].indexOf(newValue) &gt;= 0" 
ng-click="field.editIdx = -1; getModel(backupItem, field.path)[field.model] ? 
getModel(backupItem, field.path)[field.model].push(newValue) : 
getModel(backupItem, field.path)[field.model] = [newValue];" class="btn 
btn-primary fieldButton">Add</button><i ng-if="field.tip" 
bs-tooltip="joinTip(field.tip)" type="button" class="tipField fa 
fa-question-circle"></i><i ng-if="!field.tip" class="tipField fa 
fa-question-circle blank"></i>
++                                          <div class="input-tip">
++                                            <input type="text" 
ng-model="newValue" ng-focus="field.editIdx = -1" 
placeholder="{{field.placeholder}}" class="form-control"/>
++                                          </div>
++                                        </div>
++                                      </div>
++                                      <div ng-switch-when="indexedTypes">
++                                        <div>
++                                          <label>Indexed types: 
{{backupItem.indexedTypes.length}}</label><i ng-if="field.tip" 
bs-tooltip="joinTip(field.tip)" type="button" class="tipLabel fa 
fa-question-circle"></i><i ng-if="!field.tip" class="tipLabel fa 
fa-question-circle blank"></i>
++                                        </div>
++                                        <table 
st-table="backupItem.indexedTypes" ng-show="backupItem.indexedTypes.length &gt; 
0" class="links-edit col-sm-12">
++                                          <tbody>
++                                            <tr ng-repeat="item in 
backupItem.indexedTypes" class="col-sm-12">
++                                              <td class="col-sm-6">
++                                                <div ng-show="field.editIdx 
!= {{$index}}"><a ng-click="field.editIdx = $index; curKeyClass = 
backupItem.indexedTypes[$index].keyClass; curValueClass = 
backupItem.indexedTypes[$index].valueClass">{{$index + 1}}) {{item.keyClass}} / 
{{item.valueClass}}</a><i ng-click="field.editIdx = -1; 
backupItem.indexedTypes.splice($index, 1)" class="tipField fa 
fa-remove"></i></div>
++                                                <div ng-show="field.editIdx 
== {{$index}}">
++                                                  <label 
class="labelField">{{$index + 1}})</label><i ng-click="field.editIdx = -1; 
backupItem.indexedTypes[$index]={keyClass: curKeyClass, valueClass: 
curValueClass}" class="tipField fa fa-floppy-o"></i>
++                                                  <div class="input-tip">
++                                                    <div class="col-sm-12">
++                                                      <input type="text" 
ng-model="curKeyClass" placeholder="Key class full name" class="form-control 
table-form-control"/>
++                                                      
<label>&nbsp;/&nbsp;</label>
++                                                      <input type="text" 
ng-model="curValueClass" placeholder="Value class full name" 
class="form-control table-form-control"/>
++                                                    </div>
++                                                  </div>
++                                                </div>
++                                              </td>
++                                            </tr>
++                                          </tbody>
++                                        </table>
++                                        <div class="col-sm-6">
++                                          <input type="text" 
ng-model="newKeyClass" ng-focus="field.editIdx = -1" placeholder="Key class 
full name" class="form-control"/>
++                                          <div class="settings-row">
++                                            <input type="text" 
ng-model="newValueClass" ng-focus="field.editIdx = -1" placeholder="Value class 
full name" class="form-control"/>
++                                          </div>
++                                          <button ng-click="field.editIdx = 
-1; addIndexedTypes(newKeyClass, newValueClass)" class="btn btn-primary 
fieldButton">Add</button>
++                                        </div>
++                                      </div>
++                                    </div>
++                                  </div>
++                                </div>
++                              </div>
++                            </div>
++                          </div>
++                        </div>
++                        <div class="panel-title">
++                          <h3><a bs-collapse-toggle="0" ng-click="expanded = 
!expanded;">{{expanded ? 'Hide advanced settings...' : 'Show advanced 
settings...'}}</a></h3>
++                        </div>
++                      </div>
++                      <button id="save-btn" ng-disabled="inputForm.$invalid" 
ng-click="saveItem()" class="btn btn-primary">Save</button>
++                      <button ng-show="backupItem._id" 
ng-click="removeItem()" class="btn btn-primary">Remove</button>
++                    </form>
++                  </div>
++                </div>
++              </div>
++            </div>
++          </div>
++        </div>
++      </div>
++      <div class="container container-footer">
++        <footer>
++          <center>
++            <p>Powered by<a href="http://ignite.incubator.apache.org";> Apache 
Ignite</a>, version 1.1.0</p>
++          </center>
++        </footer>
++      </div>
++    </div>
++  </body>
++</html>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/92c06985/modules/webconfig/src/main/webapp/images/docker.png
----------------------------------------------------------------------
diff --cc modules/webconfig/src/main/webapp/images/docker.png
index 0000000,0000000..7ec3aef
new file mode 100644
Binary files differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/92c06985/modules/webconfig/src/main/webapp/images/java.png
----------------------------------------------------------------------
diff --cc modules/webconfig/src/main/webapp/images/java.png
index 0000000,0000000..ddb3b8e
new file mode 100644
Binary files differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/92c06985/modules/webconfig/src/main/webapp/images/logo.png
----------------------------------------------------------------------
diff --cc modules/webconfig/src/main/webapp/images/logo.png
index 0000000,0000000..c3577c5
new file mode 100644
Binary files differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/92c06985/modules/webconfig/src/main/webapp/images/xml.png
----------------------------------------------------------------------
diff --cc modules/webconfig/src/main/webapp/images/xml.png
index 0000000,0000000..029065e
new file mode 100644
Binary files differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/92c06985/modules/webconfig/src/main/webapp/index.html
----------------------------------------------------------------------
diff --cc modules/webconfig/src/main/webapp/index.html
index 0000000,0000000..e4a70be
new file mode 100644
--- /dev/null
+++ b/modules/webconfig/src/main/webapp/index.html
@@@ -1,0 -1,0 +1,76 @@@
++<!DOCTYPE html>
++<html ng-app="ignite-web-configurator">
++  <head>
++    <title></title>
++    <!-- Bootstrap-->
++    <link rel="stylesheet" 
href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.css">
++    <!-- Font Awesome Icons-->
++    <link rel="stylesheet" 
href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.css">
++    <!-- Font-->
++    <link rel="stylesheet" 
href="//fonts.googleapis.com/css?family=Roboto+Slab:700:serif|Roboto+Slab:400:serif">
++    <link rel="stylesheet" href="/stylesheets/style.css">
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.min.js"></script>
++    <script 
src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-sanitize.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.tpl.min.js"></script>
++    <script 
src="https://cdnjs.cloudflare.com/ajax/libs/angular-smart-table/2.0.3/smart-table.js";></script>
++    <script src="/javascripts/controllers/common.js"></script>
++    <script src="/javascripts/dataStructures.js"></script>
++    <script src="/javascripts/bundle.js"></script>
++  </head>
++  <body class="theme-line body-overlap">
++    <div class="wrapper">
++      <header id="header" class="header">
++        <div class="container">
++          <h1 class="navbar-brand"><a href="/">Apache Ignite Web 
Configurator</a></h1>
++          <div ng-controller="auth" class="navbar-collapse collapse">
++            <ul ng-controller="activeLink" class="nav navbar-nav">
++              <li><a ng-class="{active: isActive('/clusters')}" 
href="/clusters">Configuration</a></li>
++              <li><a ng-class="{active: isActive('/sql')}" 
href="/sql">SQL</a></li>
++            </ul>
++            <ul ng-init="user = undefined" class="nav navbar-nav pull-right">
++              <li ng-show="user"><a data-toggle="dropdown" 
aria-expanded="true" bs-dropdown data-template="user-dropdown" 
data-placement="bottom-right" class="dropdown-toggle">{{user.username}}<span 
class="caret"></span></a>
++                <script id="user-dropdown" type="text/ng-template">
++                  <ul class="dropdown-menu">
++                    <li><a href="/rest/auth/logout">Log Out</a></li>
++                  </ul>
++                </script>
++              </li>
++              <li ng-show="!user" class="nav-login"><a ng-click="login()" 
href="#">Log In</a></li>
++            </ul>
++          </div>
++        </div>
++      </header>
++      <div class="container body-container">
++        <div class="main-content">
++          <div class="main-head">
++            <div class="row">
++              <div class="docs-content">
++                <div>
++                  <p>
++                    Apache Ignite<sup>tm</sup> In-Memory Data Fabric is a 
high-performance,
++                    integrated and distributed in-memory platform for 
computing and transacting on large-scale data
++                    sets in real-time, orders of magnitude faster than 
possible with traditional disk-based or flash technologies.
++                  </p>
++                </div>
++              </div>
++              <div class="block-image block-display-image"><img 
ng-src="https://www.filepicker.io/api/file/lydEeGB6Rs9hwbpcQxiw"; alt="Apache 
Ignite stack"></div>
++              <div ng-controller="auth" class="text-center">
++                <button ng-click="login()" href="#" class="btn 
btn-primary">Configure Now</button>
++              </div>
++            </div>
++          </div>
++        </div>
++      </div>
++      <div class="container container-footer">
++        <footer>
++          <center>
++            <p>Powered by<a href="http://ignite.incubator.apache.org";> Apache 
Ignite</a>, version 1.1.0</p>
++          </center>
++        </footer>
++      </div>
++    </div>
++  </body>
++</html>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/92c06985/modules/webconfig/src/main/webapp/layout-sidebar.html
----------------------------------------------------------------------
diff --cc modules/webconfig/src/main/webapp/layout-sidebar.html
index 0000000,0000000..a6735be
new file mode 100644
--- /dev/null
+++ b/modules/webconfig/src/main/webapp/layout-sidebar.html
@@@ -1,0 -1,0 +1,80 @@@
++<!DOCTYPE html>
++<html ng-app="ignite-web-configurator">
++  <head>
++    <title></title>
++    <!-- Bootstrap-->
++    <link rel="stylesheet" 
href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.css">
++    <!-- Font Awesome Icons-->
++    <link rel="stylesheet" 
href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.css">
++    <!-- Font-->
++    <link rel="stylesheet" 
href="//fonts.googleapis.com/css?family=Roboto+Slab:700:serif|Roboto+Slab:400:serif">
++    <link rel="stylesheet" href="/stylesheets/style.css">
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.min.js"></script>
++    <script 
src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-sanitize.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.tpl.min.js"></script>
++    <script 
src="https://cdnjs.cloudflare.com/ajax/libs/angular-smart-table/2.0.3/smart-table.js";></script>
++    <script src="/javascripts/controllers/common.js"></script>
++    <script src="/javascripts/dataStructures.js"></script>
++    <script src="/javascripts/bundle.js"></script>
++  </head>
++  <body class="theme-line body-overlap">
++    <div class="wrapper">
++      <header id="header" class="header">
++        <div class="container">
++          <h1 class="navbar-brand"><a href="/">Apache Ignite Web 
Configurator</a></h1>
++          <div ng-controller="auth" class="navbar-collapse collapse">
++            <ul ng-controller="activeLink" class="nav navbar-nav">
++              <li><a ng-class="{active: isActive('/clusters')}" 
href="/clusters">Configuration</a></li>
++              <li><a ng-class="{active: isActive('/sql')}" 
href="/sql">SQL</a></li>
++            </ul>
++            <ul ng-init="user = undefined" class="nav navbar-nav pull-right">
++              <li ng-show="user"><a data-toggle="dropdown" 
aria-expanded="true" bs-dropdown data-template="user-dropdown" 
data-placement="bottom-right" class="dropdown-toggle">{{user.username}}<span 
class="caret"></span></a>
++                <script id="user-dropdown" type="text/ng-template">
++                  <ul class="dropdown-menu">
++                    <li><a href="/rest/auth/logout">Log Out</a></li>
++                  </ul>
++                </script>
++              </li>
++              <li ng-show="!user" class="nav-login"><a ng-click="login()" 
href="#">Log In</a></li>
++            </ul>
++          </div>
++        </div>
++      </header>
++      <div class="container body-container">
++        <div class="main-content">
++          <div class="main-head">
++            <div class="row">
++              <div class="col-sm-2 border-right section-left greedy">
++                <div class="sidebar-nav">
++                  <ul ng-controller="activeLink" class="menu">
++                    <li><a ng-class="{active: isActive('/clusters')}" 
href="/clusters">Clusters</a></li>
++                    <li><a ng-class="{active: isActive('/caches')}" 
href="/caches">Caches</a></li>
++                    <li><a ng-class="{active: isActive('/persistence')}" 
href="/persistence">Persistence</a></li>
++                    <li><a ng-class="{active: isActive('/clients')}" 
href="/clients">Clients</a></li>
++                    <li>
++                      <p></p><a ng-class="{active: isActive('/summary')}" 
href="/summary">Summary</a>
++                    </li>
++                  </ul>
++                </div>
++              </div>
++              <div class="col-sm-10 border-left section-right">
++                <div class="docs-content">
++                </div>
++              </div>
++            </div>
++          </div>
++        </div>
++      </div>
++      <div class="container container-footer">
++        <footer>
++          <center>
++            <p>Powered by<a href="http://ignite.incubator.apache.org";> Apache 
Ignite</a>, version 1.1.0</p>
++          </center>
++        </footer>
++      </div>
++    </div>
++  </body>
++</html>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/92c06985/modules/webconfig/src/main/webapp/layout.html
----------------------------------------------------------------------
diff --cc modules/webconfig/src/main/webapp/layout.html
index 0000000,0000000..82a2957
new file mode 100644
--- /dev/null
+++ b/modules/webconfig/src/main/webapp/layout.html
@@@ -1,0 -1,0 +1,61 @@@
++<!DOCTYPE html>
++<html ng-app="ignite-web-configurator">
++  <head>
++    <title></title>
++    <!-- Bootstrap-->
++    <link rel="stylesheet" 
href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.css">
++    <!-- Font Awesome Icons-->
++    <link rel="stylesheet" 
href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.css">
++    <!-- Font-->
++    <link rel="stylesheet" 
href="//fonts.googleapis.com/css?family=Roboto+Slab:700:serif|Roboto+Slab:400:serif">
++    <link rel="stylesheet" href="/stylesheets/style.css">
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.min.js"></script>
++    <script 
src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-sanitize.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.js"></script>
++    <script 
src="//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.2.2/angular-strap.tpl.min.js"></script>
++    <script 
src="https://cdnjs.cloudflare.com/ajax/libs/angular-smart-table/2.0.3/smart-table.js";></script>
++    <script src="/javascripts/controllers/common.js"></script>
++    <script src="/javascripts/dataStructures.js"></script>
++    <script src="/javascripts/bundle.js"></script>
++  </head>
++  <body class="theme-line body-overlap">
++    <div class="wrapper">
++      <header id="header" class="header">
++        <div class="container">
++          <h1 class="navbar-brand"><a href="/">Apache Ignite Web 
Configurator</a></h1>
++          <div ng-controller="auth" class="navbar-collapse collapse">
++            <ul ng-controller="activeLink" class="nav navbar-nav">
++              <li><a ng-class="{active: isActive('/clusters')}" 
href="/clusters">Configuration</a></li>
++              <li><a ng-class="{active: isActive('/sql')}" 
href="/sql">SQL</a></li>
++            </ul>
++            <ul ng-init="user = undefined" class="nav navbar-nav pull-right">
++              <li ng-show="user"><a data-toggle="dropdown" 
aria-expanded="true" bs-dropdown data-template="user-dropdown" 
data-placement="bottom-right" class="dropdown-toggle">{{user.username}}<span 
class="caret"></span></a>
++                <script id="user-dropdown" type="text/ng-template">
++                  <ul class="dropdown-menu">
++                    <li><a href="/rest/auth/logout">Log Out</a></li>
++                  </ul>
++                </script>
++              </li>
++              <li ng-show="!user" class="nav-login"><a ng-click="login()" 
href="#">Log In</a></li>
++            </ul>
++          </div>
++        </div>
++      </header>
++      <div class="container body-container">
++        <div class="main-content">
++          <div class="main-head">
++          </div>
++        </div>
++      </div>
++      <div class="container container-footer">
++        <footer>
++          <center>
++            <p>Powered by<a href="http://ignite.incubator.apache.org";> Apache 
Ignite</a>, version 1.1.0</p>
++          </center>
++        </footer>
++      </div>
++    </div>
++  </body>
++</html>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/92c06985/modules/webconfig/src/main/webapp/login.html
----------------------------------------------------------------------
diff --cc modules/webconfig/src/main/webapp/login.html
index 732d642,0000000..35335da
mode 100644,000000..100644
--- a/modules/webconfig/src/main/webapp/login.html
+++ b/modules/webconfig/src/main/webapp/login.html
@@@ -1,36 -1,0 +1,42 @@@
- <!DOCTYPE html>
- <html>
- <head>
-     <meta charset="UTF-8">
-     <title>Ignite Configuration Tools</title>
-     <link rel="stylesheet" href="css/login.css">
- </head>
 +
- <body>
- <script 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js";></script>
- <div id="logmsk" style="display: block;">
-     <div id="userbox">
-         <h1 id="signup" style="background-repeat: initial;">
-             Login
-         </h1>
- 
-         <input id="name" placeholder="ID"
-                style="opacity: 1; background-color: rgb(255, 255, 255); 
background-repeat: initial;">
-         <input id="password" type="password" placeholder="Password"
-                style="opacity: 1; background-color: rgb(255, 255, 255); 
background-repeat: initial;">
- 
-         <input id="confirmpassword" type="password" placeholder="Confirm 
Password"
-                style="opacity: 1; background-color: rgb(255, 255, 255); 
background-repeat: initial; display: none">
- 
-         <p id="err" style="display: none; opacity: 1;">ID:</p>
- 
-         <span id="logint" style="opacity: 1;">Sign up as a new user</span>
-         <button id="signupb" style="opacity: 0.2; cursor: 
default;">Login</button>
++<div role="dialog" class="modal center">
++  <div class="modal-dialog">
++    <div class="modal-content">
++      <div class="modal-header header">
++        <div id="errors-container"></div>
++        <button type="button" ng-click="$hide()" aria-hidden="true" 
class="close">&times;</button>
++        <h1 class="navbar-brand pull-left"><a href="/">Apache Ignite Web 
Configurator</a></h1>
++        <h4 class="modal-title">Authentication</h4>
++        <p>Log in or register in order to collaborate</p>
++      </div>
++      <form name="loginForm" class="form-horizontal">
++        <div class="modal-body row">
++          <div class="col-sm-9 login col-sm-offset-1">
++            <div ng-show="action == &quot;register&quot;" class="form-group">
++              <label class="col-sm-3 control-label">Full Name:</label>
++              <div class="controls col-sm-9">
++                <input type="text" ng-model="user_info.username" 
placeholder="John Smith" focus-me="action==&quot;register&quot;" 
ng-required="action==&quot;register&quot;" class="form-control"/>
++              </div>
++            </div>
++            <div class="form-group">
++              <label class="col-sm-3 control-label">Email:</label>
++              <div class="controls col-sm-9">
++                <input type="email" ng-model="user_info.email" 
placeholder="y...@domain.com" focus-me="action==&quot;login&quot;" 
required="required" class="form-control"/>
++              </div>
++            </div>
++            <div class="form-group">
++              <label class="col-sm-3 control-label">Password:</label>
++              <div class="controls col-sm-9">
++                <input type="password" ng-model="user_info.password" 
placeholder="Password" required="required" class="form-control"/>
++              </div>
++            </div>
++          </div>
++        </div>
++      </form>
++      <div class="modal-footer"><a ng-show="action != &quot;login&quot;" 
ng-click="action = &quot;login&quot;;" class="show-signup ng-hide">log in</a><a 
ng-show="action != 'register'" ng-click="action = &quot;register&quot;;" 
class="show-signup">sign up</a>&nbsp;or&nbsp;
++        <button ng-click="auth(action, user_info)" ng-show="action == 
&quot;login&quot;" ng-disabled="loginForm.$invalid" class="btn btn-primary">Log 
In</button>
++        <button ng-click="auth(action, user_info)" ng-show="action == 
&quot;register&quot;" ng-disabled="loginForm.$invalid" class="btn 
btn-primary">Sign Up</button>
++      </div>
 +    </div>
- </div>
- 
- <script src="js/login.js"></script>
- 
- </body>
- 
- </html>
++  </div>
++</div>

Reply via email to