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"> Add 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["{{field.model}}"].$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["{{field.model}}"].$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["{{field.model}}"].$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] && 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 && 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["{{detail.model}}"].$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["{{detail.model}}"].$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["{{detail.model}}"].$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 > 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 > 0" ng-click="swapSimpleItems(detailMdl, $index, $index - 1); detail.editIdx = -1;" class="fa fa-arrow-up"></i><i ng-show="$index < 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) >= 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 > 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 > 0" ng-click="swapSimpleItems(fieldMdl, $index, $index - 1); field.editIdx = -1;" class="fa fa-arrow-up"></i><i ng-show="$index < 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) >= 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 > 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> / </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["{{field.model}}"].$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["{{field.model}}"].$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["{{field.model}}"].$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] && 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 && 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["{{detail.model}}"].$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["{{detail.model}}"].$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["{{detail.model}}"].$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 > 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 > 0" ng-click="swapSimpleItems(detailMdl, $index, $index - 1); detail.editIdx = -1;" class="fa fa-arrow-up"></i><i ng-show="$index < 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) >= 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 > 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 > 0" ng-click="swapSimpleItems(fieldMdl, $index, $index - 1); field.editIdx = -1;" class="fa fa-arrow-up"></i><i ng-show="$index < 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) >= 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 > 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> / </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">×</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 == "register"" 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=="register"" ng-required="action=="register"" 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=="login"" 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 != "login"" ng-click="action = "login";" class="show-signup ng-hide">log in</a><a ng-show="action != 'register'" ng-click="action = "register";" class="show-signup">sign up</a> or ++ <button ng-click="auth(action, user_info)" ng-show="action == "login"" ng-disabled="loginForm.$invalid" class="btn btn-primary">Log In</button> ++ <button ng-click="auth(action, user_info)" ng-show="action == "register"" ng-disabled="loginForm.$invalid" class="btn btn-primary">Sign Up</button> ++ </div> + </div> - </div> - - <script src="js/login.js"></script> - - </body> - - </html> ++ </div> ++</div>