You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@falcon.apache.org by so...@apache.org on 2015/10/13 02:04:04 UTC
[11/22] falcon git commit: FALCON-1315 Update falcon ui for HiveDR,
secure clusters and bug fixes. Contributed by Armando Reyna/Venkat
Ranganathan.
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/feed/feedFormClustersStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/feed/feedFormClustersStepTpl.html b/falcon-ui/app/html/feed/feedFormClustersStepTpl.html
index 8d2322f..b33b7f3 100644
--- a/falcon-ui/app/html/feed/feedFormClustersStepTpl.html
+++ b/falcon-ui/app/html/feed/feedFormClustersStepTpl.html
@@ -17,37 +17,41 @@
* limitations under the License.
*/
-->
-<form name="feedForm">
+<form name="feedForm" novalidate id="feedFormClusterStep">
+ <button class="hidden" ng-click="goNext(feedForm.$invalid, 'forms.feed.summary')" ></button>
<div ng-repeat="cluster in feed.clusters">
<div class="row">
- <h4 class="col-sm-24">{{capitalize(cluster.type)}} Cluster </h4>
+ <h4 class="col-xs-24">{{capitalize(cluster.type)}} Cluster </h4>
</div>
<div class="row detailsBox">
- <div class="col-sm-offset-1 col-sm-22">
+ <div class="col-xs-offset-1 col-xs-22">
<div class="row">
<div class="col-xs-24">
<select ng-model="cluster.name" validation-message="{{validations.messages.cluster}}"
- ng-required="true" class="col-sm-24 form-control padding0">
+ ng-required="true" class="col-xs-24 form-control padding0" id="clusterNameSelect">
<option value="" disabled selected style='display:none;'>-Select cluster-</option>
- <option ng-repeat="clusterItem in clusterList">{{clusterItem.name}}</option>
+ <option id="cluster_" ng-repeat="clusterItem in clusterList">{{clusterItem.name}}</option>
</select>
</div>
-
+
<div class="col-xs-24 feedLocationNavBox nopointer">
<h4 class="col-xs-7" ng-show="!feed.storage.fileSystem.active">Default Storage type</h4>
<h4 class="col-xs-7" ng-show="feed.storage.fileSystem.active">Storage type</h4>
- <div class="col-xs-17 feedLocationNav">
- <div class="btn btn-default pull-right" ng-class="{active: feed.storage.catalog.active}">
+ <div class="col-xs-17 feedLocationNav disabled">
+ <button class="btn btn-default pull-right"
+ ng-class="{active: feed.storage.catalog.active}"
+ ng-disabled="true">
Catalog Storage
- </div>
- <div class="btn btn-default pull-right" ng-class="{active: feed.storage.fileSystem.active}">
+ </button>
+ <button class="btn btn-default pull-right"
+ ng-class="{active: feed.storage.fileSystem.active}"
+ ng-disabled="true">
File System
- </div>
- <div class="clearfix"></div>
+ </button>
</div>
</div>
@@ -60,51 +64,85 @@
ng-show="feed.storage.fileSystem.active"
ng-repeat="location in cluster.storage.fileSystem.locations">
<label class="light">{{location.type}} path</label>
- <input type="text" class="form-control" ng-model="location.path" ng-pattern="validations.patterns.osPath" />
+ <input type="text"
+ placeholder="{{clusterLocationsPlaceHolders[location.type]}}"
+ class="form-control"
+ ng-model="location.path"
+ validation-optional-message="{{validations.messages.path}}"
+ ng-pattern="validations.patterns.osPath" />
</div>
<div class="col-xs-24 mb10" ng-show="feed.storage.catalog.active">
<label class="light">Table uri</label>
- <input type="text" class="form-control" ng-model="cluster.storage.catalog.catalogTable.uri" ng-pattern="validations.patterns.osPath"/>
+ <input type="text" class="form-control"
+ ng-model="cluster.storage.catalog.catalogTable.uri"
+ validation-optional-message="{{validations.messages.path}}"
+ ng-pattern="validations.patterns.osPath"/>
</div>
-
+ <div class="clearfix mb20"></div>
<label class="col-xs-24"> Validity </label>
-
- <div class="col-xs-12">
-
- <label class="light col-xs-24">Start</label>
-
- <div class="input-group input-group-xs">
- <span class="input-group-addon btn btn-default entypo calendar" ng-click="openDatePicker($event, cluster.validity.start)"></span>
- <input type="text" class="form-control" placeholder="Select start Date"
- datepicker-popup="{{dateFormat}}"
- ng-model="cluster.validity.start.date"
- is-open="cluster.validity.start.opened"
- ng-required="true">
- </div>
-
- </div>
- <div class="col-xs-12">
- <timepicker class="timePicker" ng-model="cluster.validity.start.time" hour-step="1" minute-step="1" ></timepicker>
- </div>
- <div class="col-xs-12">
-
- <label class="light col-xs-24">End</label>
-
- <div class="input-group input-group-xs">
- <span class="input-group-addon btn btn-default entypo calendar" ng-click="openDatePicker($event, cluster.validity.end)"></span>
- <input type="text" class="form-control" placeholder="Select end Date"
- datepicker-popup="{{dateFormat}}"
- ng-model="cluster.validity.end.date"
- is-open="cluster.validity.end.opened"
- ng-required="true">
+ <div class="col-xs-24 validityBox">
+ <div class="startDateBox">
+ <label>Start
+ <input type="text"
+ name="startDateInput"
+ class="form-control dateInput"
+ placeholder="mm/dd/yyyy"
+ datepicker-popup="{{dateFormat}}"
+ ng-model="cluster.validity.start.date"
+ is-open="cluster.validity.start.opened"
+ ng-click="openDatePicker($event, cluster.validity.start)"
+ ng-change="constructDate()"
+ ng-required="true"
+ simple-date>
+ </label>
+ <label class="col-xs-24 custom-danger validationMessageGral"
+ ng-if="!cluster.validity.start.date">
+ {{validations.messages.date.empty}}
+ </label>
+ </div>
+ <div class="startTimeBox">
+ <label>Time
+ <timepicker ng-change="constructDate()"
+ ng-model="cluster.validity.start.time"
+ hour-step="1"
+ minute-step="1"
+ show-meridian="true">
+ </timepicker>
+ </label>
+ </div>
+ <div class="endDateBox">
+ <label>End
+ <input type="text"
+ name="startDateInput"
+ class="form-control dateInput"
+ placeholder="mm/dd/yyyy"
+ datepicker-popup="{{dateFormat}}"
+ ng-model="cluster.validity.end.date"
+ is-open="cluster.validity.end.opened"
+ ng-click="openDatePicker($event, cluster.validity.end)"
+ ng-change="constructDate()"
+ ng-required="true"
+ min-date="cluster.validity.start.date"
+ simple-date>
+ </label>
+ <label class="col-xs-24 custom-danger validationMessageGral"
+ ng-if="!cluster.validity.end.date">
+ {{validations.messages.date.empty}}
+ </label>
+ </div>
+ <div class="endTimeBox">
+ <label>Time
+ <timepicker ng-change="constructDate()"
+ ng-model="cluster.validity.end.time"
+ hour-step="1"
+ minute-step="1"
+ show-meridian="true">
+ </timepicker>
+ </label>
</div>
- </div>
- <div class="col-xs-12">
- <timepicker class="timePicker" ng-model="cluster.validity.end.time" hour-step="1" minute-step="1" ></timepicker>
</div>
-
<label class="light col-xs-24"> Retention </label>
<div class="col-xs-24 inlineInputsGroup">
@@ -122,31 +160,37 @@
</div>
<div class="row" ng-if="cluster.type !== 'source'">
- <div class="btn btn-default pull-right btn-xs" ng-click="removeCluster($index)">
- - delete
- </div>
+ <button type="button" class="btn btn-default pull-right btn-xs" ng-click="removeCluster($index)">
+ <span class="entypo minus"></span> delete
+ </button>
</div>
+
</div>
</div>
</div>
</div>
-
- <div class="btn btn-default btn-xs" ng-click="addCluster()">
- + add cluster
+ <div class="col-xs-24 mt10">
+ <button type="button" class="btn btn-default btn-xs" ng-click="addCluster()">
+ <span class="entypo plus"></span> add cluster
+ </button>
</div>
- <div class="col-xs-24">
- <div class="row feedBottomButtons">
- <div class="btn btn-default col-xs-6" ng-click="goBack('forms.feed.location')" >
- Previous
- </div>
- <div class="btn btn-default col-xs-6 pull-right" ng-click="goNext(feedForm.$invalid, 'forms.feed.summary')" >
- Next
- </div>
- <u class="col-xs-3 pull-right" ui-sref="main">
- Cancel
- </u>
- </div>
+
+ <div class="col-xs-24 mt20">
+ <button id="feed.backToStep3"
+ class="btn prevBtn"
+ type="button"
+ ng-click="goBack('forms.feed.location')"
+ ng-disabled="buttonSpinners.backShow" >
+ Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+ </button>
+ <button id="feed.step4" class="btn nextBtn pull-right"
+ ng-click="goNext(feedForm.$invalid, 'forms.feed.summary')" >
+ Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+ </button>
+ <a class="pull-right" ui-sref="main">
+ Cancel
+ </a>
</div>
</form>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/feed/feedFormGeneralStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/feed/feedFormGeneralStepTpl.html b/falcon-ui/app/html/feed/feedFormGeneralStepTpl.html
index 3e2ecb9..2a4f5c4 100644
--- a/falcon-ui/app/html/feed/feedFormGeneralStepTpl.html
+++ b/falcon-ui/app/html/feed/feedFormGeneralStepTpl.html
@@ -17,80 +17,83 @@
* limitations under the License.
*/
-->
-<form name="feedForm">
+<form name="feedForm" novalidate id="feedFormGeneralStep">
-
- <div class="col-sm-24">
+ <div class="col-xs-24">
<label class="light">Name</label>
<input type="text" class="form-control" ng-disabled="!cloningMode" ng-keydown="validations.acceptNoSpaces($event)"
check-name="{type:'feed', check:cloningMode}" ng-class="{fakeInvalid:!validations.nameAvailable}"
ng-model="feed.name" ng-required="true" ng-pattern="validations.patterns.name"/>
</div>
- <div class="col-sm-24">
+ <div class="col-xs-24">
<label class="light">Description</label>
- <input type="text" class="form-control"
+ <input type="text" class="form-control" validation-optional-message="{{validations.messages.description}}"
ng-model="feed.description"
ng-pattern="validations.patterns.freeText"/>
</div>
- <div class="col-sm-24">
+ <div class="col-xs-24">
<label class="light">Tags</label>
</div>
- <div class="col-sm-24">
+ <div class="col-xs-24">
<div ng-repeat="tag in feed.tags">
<div class="row dynamic-table-spacer">
<div class="col-xs-10">
<input type="text" class="form-control" ng-model="tag.key"
+ validation-optional-message="{{validations.messages.key}}"
ng-pattern="validations.patterns.alpha" ng-required="tag.value" placeholder="key"/>
</div>
<div class="col-xs-11">
- <input type="text" class="form-control"
+ <input type="text" class="form-control" validation-optional-message="{{validations.messages.value}}"
ng-model="tag.value" ng-pattern="validations.patterns.alpha" ng-required="tag.key" placeholder="value"/>
</div>
<div class="col-xs-3">
- <div class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-if="$index>0">
+ <button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-if="$index>0">
<span class="entypo minus"></span> delete
- </div>
+ </button>
</div>
</div>
</div>
</div>
- <div class="col-sm-24 dynamic-table-spacer">
- <div class="btn btn-default btn-xs" ng-click="addTag()">
+ <div class="col-xs-24 dynamic-table-spacer">
+ <button type="button" class="btn btn-default btn-xs" ng-click="addTag()">
<span class="entypo plus"></span> add tag
- </div>
+ </button>
</div>
- <div class="col-sm-24">
+ <div class="col-xs-24">
<label class="light">Groups (comma separated)</label>
- <input type="text" class="form-control"
+ <input type="text" class="form-control" validation-optional-message="{{validations.messages.acl.group}}"
ng-pattern="validations.patterns.commaSeparated"
ng-model="feed.groups"/>
</div>
- <h4 class="col-sm-24"> Access Control List </h4>
- <div class="col-sm-8">
+ <div class="col-xs-24"><h4 class="tittle-in-row">Access Control List</h4></div>
+ <div class="col-xs-8">
<label class="light">Owner</label>
- <input type="text" class="form-control"
- ng-pattern="validations.patterns.unixId"
- ng-model="feed.ACL.owner"/>
+ <input type="text" class="form-control" validation-message="{{validations.messages.acl.owner}}"
+ ng-required="true"
+ ng-pattern="validations.patterns.unixId"
+ ng-model="feed.ACL.owner"/>
</div>
- <div class="col-sm-8">
+ <div class="col-xs-8">
<label class="light">Group</label>
- <input type="text" class="form-control"
- ng-pattern="validations.patterns.unixId"
- ng-model="feed.ACL.group"/>
+ <input type="text" class="form-control" validation-message="{{validations.messages.acl.group}}"
+ ng-required="true"
+ ng-pattern="validations.patterns.unixId"
+ ng-model="feed.ACL.group"/>
</div>
- <div class="col-sm-8">
+ <div class="col-xs-8">
<label class="light">Permissions</label>
- <input type="text" class="form-control"
- ng-pattern="validations.patterns.unixPermissions"
- ng-model="feed.ACL.permission"/>
+ <input type="text" class="form-control" validation-message="{{validations.messages.acl.permission}}"
+ ng-required="true"
+ ng-pattern="validations.patterns.unixPermissions"
+ ng-model="feed.ACL.permission"/>
</div>
- <h4 class="col-sm-24">Schema</h4>
- <div class="col-sm-12">
+ <div class="col-xs-24"><h4 class="tittle-in-row">Schema</h4></div>
+ <div class="col-xs-12">
<label class="light">Location</label>
<input type="text" class="form-control" validation-message="{{validations.messages.location}}"
ng-maxlength="200"
@@ -98,24 +101,24 @@
ng-model="feed.schema.location"
ng-required="true"/>
</div>
- <div class="col-sm-12">
+ <div class="col-xs-12">
<label class="light">Provider</label>
<input type="text" class="form-control" validation-message="{{validations.messages.provider}}"
ng-pattern="validations.patterns.osPath"
ng-model="feed.schema.provider"
ng-required="true"/>
</div>
-
- <div class="col-xs-24">
- <div class="feedBottomButtons row">
- <div class="btn btn-default col-xs-6 pull-right" ng-click="goNext(feedForm.$invalid, 'forms.feed.properties')">
- Next
- </div>
- <u class="col-xs-3 pull-right" ng-click="cancel()" ui-sref="main">
- Cancel
- </u>
- </div>
+
+ <div class="col-xs-24 mt20">
+ <button id="feed.step1" class="btn nextBtn col-xs-6 pull-right"
+ ng-disabled="buttonSpinners.show"
+ ng-click="goNext(feedForm.$invalid, 'forms.feed.properties')">
+ Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+ </button>
+ <a class="pull-right" ui-sref="main">
+ Cancel
+ </a>
</div>
</form>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/feed/feedFormLocationStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/feed/feedFormLocationStepTpl.html b/falcon-ui/app/html/feed/feedFormLocationStepTpl.html
index 7e5b6c0..7c7355e 100644
--- a/falcon-ui/app/html/feed/feedFormLocationStepTpl.html
+++ b/falcon-ui/app/html/feed/feedFormLocationStepTpl.html
@@ -17,89 +17,97 @@
* limitations under the License.
*/
-->
-<form name="feedForm">
- <div class="col-xs-24">
- <div class="row">
- <div class="col-xs-24 feedLocationNavBox">
- <h4 class="col-xs-10" ng-show="feed.storage.fileSystem.active">Default Storage type </h4>
- <h4 class="col-xs-10" ng-show="feed.storage.catalog.active"> Storage type </h4>
+<form name="feedForm" novalidate id="feedFormLocationStep">
+ <div class="col-xs-24 locationStep">
+ <div class="row">
+ <div class="col-xs-24 feedLocationNavBox">
+ <h4 class="col-xs-10" ng-show="feed.storage.fileSystem.active">Default Storage type </h4>
+ <h4 class="col-xs-10" ng-show="feed.storage.catalog.active"> Storage type </h4>
+
+ <div class="col-xs-14 feedLocationNav">
+ <button type="button"
+ class="btn btn-default pull-right"
+ ng-class="{active: feed.storage.catalog.active}"
+ ng-click="toggleStorage()">
+ Catalog Storage
+ </button>
+ <button type="button"
+ class="btn btn-default pull-right"
+ ng-class="{active: feed.storage.fileSystem.active}"
+ ng-click="toggleStorage()">
+ File System
+ </button>
- <div class="col-xs-14 feedLocationNav">
- <div class="btn btn-default pull-right"
- ng-class="{active: feed.storage.catalog.active}"
- ng-click="toggleStorage()">
- Catalog Storage
</div>
- <div class="btn btn-default pull-right"
- ng-class="{active: feed.storage.fileSystem.active}"
- ng-click="toggleStorage()">
- File System
+ <div class="clearfix"></div>
+ </div>
+ <h4 class="col-xs-12">Default Location</h4>
+ <div class="col-xs-24">
+ <div ng-show="feed.storage.fileSystem.active"
+ ng-repeat="location in feed.storage.fileSystem.locations" class="row">
+
+ <div class="col-xs-8">
+ <label class="light">{{capitalize(location.type)}} path</label>
+ </div>
+ <div class="pull-right" ng-show="location.focused">
+ <label class="light">add</label>
+ <label ng-repeat="timeVariable in ['${YEAR}', '${MONTH}', '${DAY} ', '${HOUR}']"
+ ng-click="appendVariable(timeVariable, location, 'path')">
+ {{timeVariable}}
+ </label>
+ </div>
+ <div class="clearfix hidden-md"></div>
+ <div class="col-xs-24">
+ <input type="text" class="form-control" validation-message="{{validations.messages.path}}"
+ ng-required="true"
+ ng-model="location.path"
+ ng-pattern="validations.patterns.osPath"
+ ng-class="{firstInput: $index === 0}"
+ ng-focus="location.focused = true"/>
+ </div>
</div>
-
</div>
- <div class="clearfix"></div>
- </div>
- <h4 class="col-xs-12">Default Location</h4>
- <div class="col-xs-24">
- <div ng-show="feed.storage.fileSystem.active"
- ng-repeat="location in feed.storage.fileSystem.locations" class="row">
-
+
+
+ <div ng-show="feed.storage.catalog.active">
<div class="col-xs-8">
- <label class="light">{{capitalize(location.type)}} path</label>
+ <label class="light">Table uri</label>
</div>
- <div class="pull-right" ng-show="location.focused">
+
+ <div class="pull-right" ng-show="feed.storage.catalog.catalogTable.focused">
<label class="light">add</label>
<label ng-repeat="timeVariable in ['${YEAR}', '${MONTH}', '${DAY} ', '${HOUR}']"
- ng-click="appendVariable(timeVariable, location, 'path')">
+ ng-click="appendVariable(timeVariable, feed.storage.catalog.catalogTable, 'uri')">
{{timeVariable}}
</label>
</div>
- <div class="clearfix hidden-md"></div>
+
<div class="col-xs-24">
- <input type="text" class="form-control" validation-message="{{validations.messages.path}}"
- ng-required="true"
- ng-model="location.path"
- ng-pattern="validations.patterns.osPath"
- ng-focus="location.focused = true"/>
+ <input type="text" class="form-control catalogStorageInput" custom-autofocus
+ ng-model="feed.storage.catalog.catalogTable.uri"
+ ng-pattern="validations.patterns.tableUri"
+ ng-required="feed.storage.catalog.active" validation-message="{{validations.messages.path}}"
+ ng-focus="feed.storage.catalog.catalogTable.focused = true"/>
</div>
- </div>
- </div>
-
-
- <div ng-show="feed.storage.catalog.active">
- <div class="col-xs-8">
- <label class="light">Table uri</label>
- </div>
-
- <div class="pull-right" ng-show="feed.storage.catalog.catalogTable.focused">
- <label class="light">add</label>
- <label ng-repeat="timeVariable in ['${YEAR}', '${MONTH}', '${DAY} ', '${HOUR}']"
- ng-click="appendVariable(timeVariable, feed.storage.catalog.catalogTable, 'uri')">
- {{timeVariable}}
- </label>
- </div>
- <div class="col-xs-24">
- <input type="text" class="form-control"
- ng-model="feed.storage.catalog.catalogTable.uri"
- ng-pattern="validations.patterns.tableUri"
- ng-required="feed.storage.catalog.active" validation-message="{{validations.messages.path}}"
- ng-focus="feed.storage.catalog.catalogTable.focused = true"/>
</div>
-
</div>
- </div>
- <div class="row feedBottomButtons">
- <div class="btn btn-default col-xs-6" ng-click="goBack('forms.feed.properties')" >
- Previous
- </div>
- <div class="btn btn-default col-xs-6 pull-right" ng-click="goNext(feedForm.$invalid, 'forms.feed.clusters')" >
- Next
+ <div class="row">
+ <div class="col-xs-24 mt20">
+ <button type="button"
+ id="feed.backToStep2" class="btn prevBtn"
+ ng-click="goBack('forms.feed.properties')"
+ ng-disabled="buttonSpinners.backShow">
+ Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+ </button>
+ <button id="feed.step3" class="btn nextBtn pull-right" ng-click="goNext(feedForm.$invalid, 'forms.feed.clusters')" >
+ Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+ </button>
+ <a class="pull-right" ui-sref="main">
+ Cancel
+ </a>
+ </div>
</div>
- <u class="col-xs-3 pull-right" ui-sref="main">
- Cancel
- </u>
</div>
-</div>
</form>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/feed/feedFormPropertiesStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/feed/feedFormPropertiesStepTpl.html b/falcon-ui/app/html/feed/feedFormPropertiesStepTpl.html
index 007fd91..2e4cfd1 100644
--- a/falcon-ui/app/html/feed/feedFormPropertiesStepTpl.html
+++ b/falcon-ui/app/html/feed/feedFormPropertiesStepTpl.html
@@ -17,20 +17,20 @@
* limitations under the License.
*/
-->
-<form name="feedForm">
+<form name="feedForm" novalidate id="feedFormPropertiesStep">
<h5 class="col-xs-24 mb10">Timing</h5>
- <div class="col-xs-9 inlineInputsGroup">
+ <div class="col-xs-9 inlineInputsGroup">
<div class="light">Frequency</div>
<span>Every</span>
<input type="text" class="form-control" validation-message="{{validations.messages.number}}"
- ng-model="feed.frequency.quantity"
+ ng-model="feed.frequency.quantity" autofocus
ng-required="true"
ng-keydown="validations.acceptOnlyNumber($event)"
ng-pattern="validations.patterns.twoDigits"/>
- <select
+ <select
ng-model="feed.frequency.unit"
ng-required="true">
<option selected value="minutes">minutes</option>
@@ -40,16 +40,16 @@
</select>
</div>
- <div class="col-xs-9 inlineInputsGroup">
+ <div class="col-xs-9 inlineInputsGroup">
<div class="light"><input type="checkbox" ng-model="feed.lateArrival.active" />Late Arrival</div>
<span>Up to</span>
-
+
<input type="text" class="form-control" ng-keydown="validations.acceptOnlyNumber($event)"
ng-model="feed.lateArrival.cutOff.quantity"
ng-disabled="!feed.lateArrival.active"
ng-pattern="validations.patterns.twoDigits"
ng-required="feed.lateArrival.active"/>
-
+
<select
ng-model="feed.lateArrival.cutOff.unit" ng-disabled="!feed.lateArrival.active"
ng-required="feed.lateArrival.active">
@@ -69,11 +69,11 @@
<div class="col-xs-24">
<div class="row mt20">
- <label class="col-xs-5 light">Timezone</label>
+ <label class="col-xs-5 light">Timezone</label>
<time-zone-select ng-model="feed.timezone" class="col-xs-19"></time-zone-select>
-
+
<h5 class="col-xs-24">Properties</h5>
-
+
<div class="col-xs-5">
<label class="light">Name</label>
</div>
@@ -82,13 +82,13 @@
</div>
<div class="col-xs-24" id="feedPropertiesBox">
<div ng-repeat="property in feed.properties" class="row">
-
+
<label class="col-xs-5">{{property.key}}</label>
-
+
<div class="col-xs-19" ng-if="property.key !== 'timeout' && property.key !== 'jobPriority'">
- <input type="text" class="form-control"
- ng-model="property.value"
- ng-patter="validations.patterns.alpha"/>
+ <input type="text" class="form-control" placeholder="{{propPlaceholders[property.key]}}"
+ ng-model="property.value" validation-optional-message="{{validations.messages.value}}"
+ ng-pattern="validations.patterns.alpha"/>
</div>
<div class="col-xs-19 inlineInputsGroup" ng-if="property.key === 'timeout'">
At
@@ -97,7 +97,8 @@
ng-pattern="validations.patterns.twoDigits"/>
<select
ng-model="property.value.unit">
- <option selected value="minutes">minutes</option>
+ <option value="" disabled selected style='display:none;'>-Select timeout-</option>
+ <option value="minutes">minutes</option>
<option value="hours">hours</option>
<option value="days">days</option>
<option value="months">months</option>
@@ -119,42 +120,42 @@
<div ng-repeat="property in feed.customProperties" class="row">
<div class="col-xs-5 mt10">
<input type="text" class="form-control" placeholder="key"
- ng-model="property.key"
+ ng-model="property.key" validation-optional-message="{{validations.messages.key}}"
ng-pattern="validations.patterns.alpha"
ng-required="property.value"/>
</div>
-
+
<div class="col-xs-15 mt10">
<input type="text" class="form-control" placeholder="value"
- ng-model="property.value"
+ ng-model="property.value" validation-optional-message="{{validations.messages.value}}"
ng-pattern="validations.patterns.alpha"
ng-required="property.key"/>
</div>
- <div class="col-xs-4 mt10">
- <div class="btn btn-default btn-xs mt1" ng-click="removeCustomProperty($index)" ng-if="$index>0">
+ <div class="col-xs-4 mt10">
+ <button type="button" class="btn btn-default btn-xs mt1" ng-click="removeCustomProperty($index)" ng-if="$index>0">
<span class="entypo minus"></span> delete
- </div>
+ </button>
</div>
</div>
</div>
<div class="col-xs-24 mt10">
- <div class="btn btn-default btn-xs" ng-click="addCustomProperty()">
+ <button type="button" class="btn btn-default btn-xs" ng-click="addCustomProperty()">
<span class="entypo plus"></span> add property
- </div>
+ </button>
</div>
</div>
</div>
- <div class="col-xs-24">
- <div class="feedBottomButtons row">
- <div class="btn btn-default col-xs-6" ng-click="goBack('forms.feed.general')">
- Previous
- </div>
- <div class="btn btn-default col-xs-6 pull-right" ng-click="goNext(feedForm.$invalid, 'forms.feed.location')">
- Next
- </div>
- <u class="col-xs-3 pull-right" ui-sref="main">
- Cancel
- </u>
- </div>
+ <div class="col-xs-24 mt20">
+ <button id="feed.backToStep1" class="btn prevBtn" type="button"
+ ng-click="goBack('forms.feed.general')"
+ ng-disabled="buttonSpinners.backShow">
+ Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+ </button>
+ <button id="feed.step2" class="btn nextBtn pull-right" ng-click="goNext(feedForm.$invalid, 'forms.feed.location')">
+ Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+ </button>
+ <a class="pull-right" ui-sref="main">
+ Cancel
+ </a>
</div>
</form>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/feed/feedFormSummaryStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/feed/feedFormSummaryStepTpl.html b/falcon-ui/app/html/feed/feedFormSummaryStepTpl.html
index f67fa91..a8a4844 100644
--- a/falcon-ui/app/html/feed/feedFormSummaryStepTpl.html
+++ b/falcon-ui/app/html/feed/feedFormSummaryStepTpl.html
@@ -17,7 +17,7 @@
* limitations under the License.
*/
-->
-<div class="row">
+<div class="row" id="feedFormSummaryStep">
<h4 class="col-sm-24">
General
</h4>
@@ -122,10 +122,10 @@
<div class="clearfix hidden-md"></div>
<div class="col-sm-12">
- <label>Start</label>: {{cluster.validity.start.date}} {{cluster.validity.start.time}}
+ <label>Start</label>: {{cluster.validity.start.date|date:'yyyy-MM-dd'}} {{cluster.validity.start.time|date:'HH:mm'}}
</div>
<div class="col-sm-12">
- <label>End</label>: {{cluster.validity.end.date}} {{cluster.validity.end.time}}
+ <label>End</label>: {{cluster.validity.end.date|date:'yyyy-MM-dd'}} {{cluster.validity.end.time|date:'HH:mm'}}
</div>
<div class="col-sm-24">
<label>Timezone</label>: {{feed.timezone}}
@@ -146,14 +146,18 @@
</div>
</div>
-<div class="feedBottomButtons row">
- <div class="btn btn-default col-xs-6" ng-click="goBack('forms.feed.clusters')" >
- Previous
- </div>
- <div class="btn btn-default col-xs-6 pull-right" ng-click="saveEntity()">
- Save
+<div class="row">
+ <div class="col-xs-24 mt20">
+ <button id="feed.backToStep4" class="btn prevBtn" type="button"
+ ng-click="goBack('forms.feed.clusters')"
+ ng-disabled="buttonSpinners.backShow">
+ Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+ </button>
+ <button id="feed.step5" class="btn nextBtn pull-right" ng-click="saveEntity()">
+ Save <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+ </button>
+ <a class="pull-right" ui-sref="main">
+ Cancel
+ </a>
</div>
- <u class="col-xs-3 pull-right" ui-sref="main">
- Cancel
- </u>
</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/feed/feedFormTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/feed/feedFormTpl.html b/falcon-ui/app/html/feed/feedFormTpl.html
index c05b963..ee30d54 100644
--- a/falcon-ui/app/html/feed/feedFormTpl.html
+++ b/falcon-ui/app/html/feed/feedFormTpl.html
@@ -17,78 +17,88 @@
* limitations under the License.
*/
-->
-<div class="col-sm-24 feedForm">
- <div class="col-sm-22 col-sm-offset-2">
- <div class="row">
- <h3 class="col-sm-24">
- New Feed
+<div class="col-xs-22 col-xs-offset-1 feedForm" id="feedFormTmpl">
+ <div class="col-xs-24">
+ <div class="row dt">
+
+ <h3 id="feed.title" class="col-xs-24">
+ <span class="entypo download icon-lg"></span> New Feed
</h3>
- <div class="col-sm-15 detailsBox">
- <div class="feedProgressBox" ng-class="{
- general:isActive('forms.feed.general'),
- properties:isActive('forms.feed.properties'),
- location:isActive('forms.feed.location'),
- clusters:isActive('forms.feed.clusters'),
- summary:isActive('forms.feed.summary')
- }">
- <div class="progressBar col-md-24">
- <div>
- <span>
- <div class="fir">1<span class="entypo check"></span></div>
- <h6>General</h6>
- </span>
- <span>
- <div class="sec">2<span class="entypo check"></span></div>
- <h6>Properties</h6>
- </span>
- <span>
- <div class="thi">3<span class="entypo check"></span></div>
- <h6>Location</h6>
- </span>
- <span>
- <div class="fou">4<span class="entypo check"></span></div>
- <h6>Clusters</h6>
- </span>
- <span>
- <div class="fif">5<span class="entypo check"></span></div>
- <h6>Summary</h6>
- </span>
- </div>
+ <div ng-class="{'col-xs-12' : propsOpen, 'col-xs-20' : !propsOpen}">
+ <div class="detailsBox">
+ <div class="feedProgressBox" ng-class="{
+ general:isActive('forms.feed.general'),
+ properties:isActive('forms.feed.properties'),
+ location:isActive('forms.feed.location'),
+ clusters:isActive('forms.feed.clusters'),
+ summary:isActive('forms.feed.summary')
+ }">
+ <div class="progressBar col-xs-24">
+ <div>
+ <span>
+ <div class="fir">1<span class="entypo check"></span></div>
+ <h6>General</h6>
+ </span>
+ <span>
+ <div class="sec">2<span class="entypo check"></span></div>
+ <h6>Properties</h6>
+ </span>
+ <span>
+ <div class="thi">3<span class="entypo check"></span></div>
+ <h6>Location</h6>
+ </span>
+ <span>
+ <div class="fou">4<span class="entypo check"></span></div>
+ <h6>Clusters</h6>
+ </span>
+ <span>
+ <div class="fif">5<span class="entypo check"></span></div>
+ <h6>Summary</h6>
+ </span>
+ </div>
+ </div>
</div>
- </div>
-
- <div class="row">
- <div class="col-sm-offset-1 col-sm-22">
- <fieldset ng-disabled="!editXmlDisabled">
- <div ui-view class="formViewContainer"></div>
- </fieldset>
+
+ <div class="row">
+ <div class="col-xs-offset-1 col-xs-22">
+ <fieldset ng-disabled="!editXmlDisabled">
+ <div ui-view class="formViewContainer"></div>
+ </fieldset>
+ </div>
</div>
</div>
-
</div>
- <div class="col-sm-8 detailsBox col-sm-offset-1">
- <div class="row">
+ <div ng-class="{'col-xs-12' : propsOpen, 'col-xs-4' : !propsOpen}">
+ <div class="detailsBox">
+ <div class="row dt">
- <h5 class="col-xs-13 col-xs-offset-1 noSpecial">XML Preview</h5>
-
- <div class="col-xs-9">
- <div class="btn btn-default btn-xs pull-right" ng-click="toggleEditXml()" ng-class="{'btn-warning':!editXmlDisabled}">
- Edit XML
+ <div class="col-xs-13 col-xs-offset-1 noSpecial">
+ <h5><i class="pointer glyphicon" ng-click="propsOpen = !propsOpen" ng-class="propsOpen ? 'glyphicon-minus-sign':'glyphicon-plus-sign'"></i> XML Preview</h5>
</div>
- </div>
- <div class="col-xs-24">
- <div class="row">
- <div class="col-sm-22 col-sm-offset-1">
- <textarea ng-model="prettyXml" rows="35" class="form-control" ng-disabled="editXmlDisabled">
- </textarea>
- {{xmlEditValidationError}}
+ <div ng-if="propsOpen" class="col-xs-9">
+ <button type="button"
+ id="feed.editXML"
+ class="btn btn-default btn-xs pull-right"
+ ng-click="toggleEditXml()"
+ ng-class="{'btn-warning':!editXmlDisabled}">
+ <div ng-if="editXmlDisabled">Edit XML</div>
+ <div ng-if="!editXmlDisabled">Finish</div>
+ </button>
+
+ </div>
+
+ <div ng-show="propsOpen" class="col-sm-24">
+ <div class="row">
+ <div class="col-sm-22 col-sm-offset-1">
+ <textarea ng-model="prettyXml" elastic class="form-control prettyXml" ng-disabled="editXmlDisabled"></textarea>
+ </div>
</div>
</div>
+
</div>
-
</div>
</div>
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/feed/feedSummary.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/feed/feedSummary.html b/falcon-ui/app/html/feed/feedSummary.html
new file mode 100644
index 0000000..760e810
--- /dev/null
+++ b/falcon-ui/app/html/feed/feedSummary.html
@@ -0,0 +1,214 @@
+<!--
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<div class="summaryBox" id="feedFormSummary">
+ <div class="row">
+ <h5 class="col-sm-24">
+ General
+ </h5>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-12">
+ <label>Name</label>: {{feed.name}}
+ </div>
+ <div class="col-sm-12">
+ <label>Description</label>: {{feed.description}}
+ </div>
+ </div>
+
+ <div class="row">
+ <h5 class="col-sm-24">
+ Tags
+ </h5>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-24">
+ <div ng-repeat="tag in feed.tags | filter:{key: '!!'}">
+ {{tag.key}} = {{tag.value}}
+ </div>
+ </div>
+ </div>
+
+ <div class="row">
+ <h5 class="col-sm-24">
+ Groups
+ </h5>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-24">
+ {{feed.groups}}
+ </div>
+ </div>
+
+ <div class="row">
+ <h5 class="col-sm-24">
+ Access Control List
+ </h5>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-8">
+ <label>Owner</label>: {{feed.ACL.owner}}
+ </div>
+ <div class="col-sm-8">
+ <label>Group</label>: {{feed.ACL.group}}
+ </div>
+ <div class="col-sm-8">
+ <label>Permissions</label>: {{feed.ACL.permission}}
+ </div>
+ </div>
+
+ <div class="row">
+ <h5 class="col-sm-24">
+ Schema
+ </h5>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-12">
+ <label>Location</label>: {{feed.schema.location}}
+ </div>
+ <div class="col-sm-12">
+ <label>Provider</label>: {{feed.schema.provider}}
+ </div>
+ </div>
+
+ <div class="row">
+ <h5 class="col-sm-24">
+ Properties
+ </h5>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-8">
+ <label>Frequency</label>:
+ <frequency value="feed.frequency" prefix="Every"/>
+ </div>
+ <div class="col-sm-8">
+ <label>Late Arrival</label>:
+ <frequency value="feed.lateArrival.cutOff" prefix="Up to"/>
+ </div>
+ <div class="col-sm-8">
+ <label>Availability Flag</label>: {{feed.availabilityFlag}}
+ </div>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-8" ng-repeat="property in feed.properties">
+ <label>{{property.key}}</label>:
+ <span ng-if="property.key !== 'timeout'">{{property.value}}</span>
+ <frequency ng-if="property.key === 'timeout'" value="property.value" prefix="at"/>
+ </div>
+
+ <div class="col-sm-8" ng-repeat="property in feed.customProperties | filter: {key: '!!'}">
+ <label>{{property.key}}</label>: {{property.value}}
+ </div>
+
+ <h5 class="col-xs-24">
+ Default Storage Type:
+ </h5>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-8 light" ng-show="feed.storage.fileSystem.active">File System</div>
+ <div class="col-sm-8 light" ng-show="feed.storage.catalog.active">Catalog Storage</div>
+ </div>
+
+ <div class="row">
+ <h5 class="col-sm-24">Default Location:</h5>
+ </div>
+
+
+ <div ng-repeat="location in feed.storage.fileSystem.locations" ng-show="feed.storage.fileSystem.active">
+ <div class="row">
+ <label class="col-sm-24">{{capitalize(location.type)}}</label>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-24">{{location.path}}</div>
+ </div>
+ </div>
+
+ <div ng-show="feed.storage.catalog.active">
+ <div class="row">
+ <label class="col-sm-24">Table uri</label>
+ </div>
+ <div class="row">
+ <div class="col-sm-24">{{feed.storage.catalog.catalogTable.uri}}</div>
+ </div>
+ </div>
+
+</div>
+
+<div class="summaryBox">
+ <div ng-repeat="cluster in feed.clusters">
+ <div class="row">
+ <h5 class="col-sm-24">{{capitalize(cluster.type)}} Cluster</h5>
+ </div>
+ <div class="row">
+ <div class="col-sm-12">
+ <label>Name</label>: {{cluster.name}}
+ </div>
+ <div class="clearfix hidden-md"></div>
+ </div>
+ <div class="row">
+ <div class="col-sm-12">
+ <label>Start</label>: {{dateFormatter(entity.start)}}
+ </div>
+ <div class="col-sm-12">
+ <label>End</label>: {{dateFormatter(entity.end)}}
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-sm-24">
+ <label>Timezone</label>: {{feed.timezone}}
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-sm-24">
+ <label>Retention</label>:
+ <frequency value="cluster.retention" prefix="Archive in"/>
+ </div>
+ </div>
+ </div>
+ <div class="clearfix hidden-md"></div>
+ <div class="row">
+ <h5 class="col-sm-24">Location</h5>
+ </div>
+
+ <div ng-repeat="location in cluster.storage.fileSystem.locations" ng-show="cluster.storage.fileSystem">
+ <div class="row">
+ <label class="col-sm-24">{{capitalize(location.type)}}</label>
+ </div>
+ <div class="row">
+ <div class="col-sm-24">{{location.path}}</div>
+ </div>
+ </div>
+ <div ng-show="cluster.storage.catalog.active">
+ <div class="row">
+ <label class="col-sm-24">Table uri</label>
+ </div>
+ <div class="row">
+ <div class="col-sm-24">{{cluster.storage.catalog.catalogTable.uri}}</div>
+ </div>
+ </div>
+</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/instanceDetails.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/instanceDetails.html b/falcon-ui/app/html/instanceDetails.html
new file mode 100644
index 0000000..b67c041
--- /dev/null
+++ b/falcon-ui/app/html/instanceDetails.html
@@ -0,0 +1,78 @@
+<!--
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<div class="container" id="instanceDetails">
+
+ <div class="row">
+ <div class="col-sm-24">
+ <div class="detailsBox">
+ <div class="row">
+ <div class="col-sm-9">
+ <h3 class="instance-title">
+ <a href="javascript:void(0);" ng-click="backToEntity()">{{ instance.name }}</a> | {{ instance.instance }}
+ </h3>
+ </div>
+ <div class="col-sm-3 instance-status">
+ <span class="text-success">STARTED</span><br/>
+ {{ instance.startTime | date :'MM/dd/yyyy HH:mm' }}
+ </div>
+ <div class="col-sm-5 border-left">
+ <h4 class="instance-title">
+ Status: <span ng-class="{
+ 'blink-success': instance.status == 'RUNNING',
+ 'text-success': instance.status == 'SUCCEEDED',
+ 'blink-warning': instance.status == 'WAITING' || instance.status == 'UNKNOWN',
+ 'blink-danger': instance.status == 'SUSPENDED',
+ 'text-danger': instance.status == 'FAILED' || instance.status == 'KILLED',
+ }">{{ instance.status }}</span>
+ </h4>
+ </div>
+ <div class="col-sm-7 buttonCell">
+ <div class="btn btn-big btn-xs buttons-to-show" ng-click="resumeInstance()"
+ ng-disabled="!(instance.status === 'SUSPENDED')">
+ <span class="entypo play"></span> <div>Resume</div>
+ </div>
+ <div class="btn btn-big btn-xs buttons-to-show" ng-click="reRunInstance()"
+ ng-disabled="!(instance.status === 'KILLED' || instance.status === 'SUCCEEDED' || instance.status === 'FAILED')">
+ <span class="entypo play"></span> <div>Rerun</div>
+ </div>
+ <div class="btn btn-big btn-xs buttons-to-show" ng-click="suspendInstance()" ng-disabled="!(instance.status === 'RUNNING')">
+ <span class="entypo paus"></span> <div>Suspend</div>
+ </div>
+ <div class="btn btn-big btn-xs buttons-to-show" ng-click="killInstance()" ng-disabled="!(instance.status === 'SUSPENDED' || instance.status === 'RUNNING')">
+ <span class="entypo stop"></span> <div>Kill</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div ng-if="instance.status === 'SUCCEEDED'" class="row">
+ <div class="col-sm-24">
+ <div class="detailsBox">
+ <h4>
+ Lineage
+ </h4>
+ <div class="lineage-graph"><lineage-graph type="instance.type" name="instance.name" instance="instance.instance" start="instance.startTime" end="instance.endTime"/></div>
+ </div>
+ </div>
+ </div>
+
+</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/login.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/login.html b/falcon-ui/app/html/login.html
new file mode 100644
index 0000000..556d843
--- /dev/null
+++ b/falcon-ui/app/html/login.html
@@ -0,0 +1,83 @@
+ <!--
+ /**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+ <form name="loginForm" ng-submit="loggUser(loginForm)" novalidate id="loginForm">
+
+ <div class="col-sm-24 dashboardBox login" ng-class="{showValidationStyle:showLoginVal.show}">
+ <div class="row">
+ <div class="col-sm-6"></div>
+ <div class="col-sm-12">
+
+ <div class="col-sm-15 detailsBox centered">
+ <h3>Log In</h3>
+
+ <!--<div class="clearfix hidden-md"> </div>-->
+
+ <!--<div class="row">-->
+ <!--<div class="col-sm-offset-1 col-sm-22 hint">-->
+ <!--Default user: ambari-qa   Password: admin-->
+ <!--</div>-->
+ <!--</div>-->
+
+ <div class="row">
+ <div class="col-sm-offset-1 col-sm-22">
+ <div class="clearfix hidden-md"> </div>
+ </div>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-offset-1 col-sm-22">
+ <label class="light">User</label>
+ <input type="text" class="form-control"
+ name="user"
+ ng-model="login.user"
+ ng-required="true"
+ ng-class="{'ng-invalid': showLoginVal.userPassInvalid}"
+ validation-message="{{validations.messages.user}}"
+ ng-keydown="showLoginVal.userPassInvalid = false"
+ ng-pattern="validations.patterns.id" autofocus/>
+ </div>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-23 col-sm-offset-1 custom-danger" ng-if="showLoginVal.userPassInvalid">
+ The user/password you have entered is invalid.
+ </div>
+ <div class="col-sm-offset-1 col-sm-22">
+ <div class="clearfix hidden-md"> </div>
+ </div>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-offset-1 col-sm-22">
+ <button id="login.submit" type="submit" class="btn btn-default col-xs-6 pull-right dynamic-table-spacer">
+ Check-In
+ </button>
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+ <div class="col-sm-6"></div>
+ </div>
+ </div>
+
+ </form>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/mainTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/mainTpl.html b/falcon-ui/app/html/mainTpl.html
index 4b0116e..890463f 100644
--- a/falcon-ui/app/html/mainTpl.html
+++ b/falcon-ui/app/html/mainTpl.html
@@ -18,22 +18,58 @@
*/
-->
-<div class="col-sm-24 dashboardBox">
- <div class="row">
- <div class="col-sm-8">
- <h3>Clusters</h3>
- <entity-summary entities="lists.clusterList" type="cluster"></entity-summary>
- <entities-list input="lists.clusterList" type="cluster" entity-details="entityDetails" clone="cloneEntity" remove="deleteEntity" edit="editEntity" schedule="scheduleEntity" suspend="suspendEntity" resume="resumeEntity"></entities-list>
- </div>
- <div class="col-sm-8">
- <h3>Feeds</h3>
- <entity-summary entities="lists.feedList" type="feed"></entity-summary>
- <entities-list input="lists.feedList" type="feed" entity-details="entityDetails" clone="cloneEntity" remove="deleteEntity" edit="editEntity" schedule="scheduleEntity" suspend="suspendEntity" resume="resumeEntity"></entities-list>
+<div class="col-sm-offset-1 col-sm-22">
+
+ <div class="row searchBoxContainer" id="searchBoxContainer">
+ <div class="col-sm-4"></div>
+ <div class="col-sm-16">
+
+ <img src="css/img/ajax-loader.gif" class="glyphicon search-loading-icon" ng-show="loading"/>
+ <i class="glyphicon glyphicon-search search-icon" ng-hide="loading"></i>
+
+ <tags-input ng-model="tags" min-length="1" add-on-space="true" add-from-autocomplete-only="true"
+ on-tag-added="displayResults()" on-tag-removed="displayResults()" placeholder="Search">
+ <auto-complete source="loadTags($query)" min-length="0"></auto-complete>
+ </tags-input>
+
+ <i id="nsPopover" class="glyphicon glyphicon-question-sign" ng-class="tags.length > 0 ? 'question-icon' : 'remove-icon'"
+ ns-popover
+ ns-popover-template="menu"
+ ns-popover-trigger="click"
+ ns-popover-theme="ns-popover-tooltip-theme"
+ ns-popover-timeout="5"
+ ns-popover-placement="bottom|right"></i>
+ <script type="text/ng-template" id="menu">
+ <div class="triangle"></div>
+ <!--<div class="ns-popover-tooltip">-->
+ <!--<h5>Hey there! Want some search tips?</h5>-->
+ <!--The <strong>first word</strong> you type will be taken as the <strong>Name</strong> of the entity.-->
+ <!--<br/>-->
+ <!--You can search <strong>*</strong> for getting all the entities.-->
+ <!--<br/>-->
+ <!--The <strong>second and following</strong> words will be taken as <strong> Tags</strong>.-->
+ <!--<br/>-->
+ <!--For filtering by type, write <strong>type=feed|process|mirror</strong>-->
+ <!--</div>-->
+ <div class="ns-popover-tooltip">
+ <h5>Hey there! Want some search tips?</h5>
+ You can type <strong>*</strong> and select <strong>Name: *</strong> from the autocomplete for getting all the entities.
+ </div>
+ </script>
+ <i class="glyphicon glyphicon-remove remove-icon" ng-if="tags.length > 0" ng-click="clearTags()"></i>
+
</div>
- <div class="col-sm-8">
- <h3>Processes</h3>
- <entity-summary entities="lists.processList" type="process"></entity-summary>
- <entities-list input="lists.processList" entity-details="entityDetails" type="process" clone="cloneEntity" remove="deleteEntity" edit="editEntity" schedule="scheduleEntity" suspend="suspendEntity" resume="resumeEntity"></entities-list>
+ <div class="col-sm-4"></div>
+ </div>
+
+ <div class="col-sm-24 dashboardBox" ng-show="searchList.length > 0" id="dashboardBox">
+ <div class="row">
+ <div class="col-sm-24">
+ <entities-search-list input="searchList" entity-details="entityDetails" clone="cloneEntity" tags="tags"
+ remove="deleteEntity" edit="editEntity" schedule="scheduleEntity" suspend="suspendEntity"
+ resume="resumeEntity" focus-search="focusSearch" pages="pages" go-page="goPage"/>
+ </div>
</div>
</div>
+
</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/process/processFormClustersStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/process/processFormClustersStepTpl.html b/falcon-ui/app/html/process/processFormClustersStepTpl.html
index 47886a2..21bf4bf 100644
--- a/falcon-ui/app/html/process/processFormClustersStepTpl.html
+++ b/falcon-ui/app/html/process/processFormClustersStepTpl.html
@@ -17,80 +17,117 @@
* limitations under the License.
*/
-->
-<form name="processForm" class="mt10">
- <div class="col-sm-offset-1 col-sm-22">
+<form name="processForm" class="mt10" novalidate id="processFormClusterStep">
+ <div class="col-xs-offset-1 col-xs-22">
<div ng-repeat="cluster in process.clusters" class="row">
- <div class="col-xs-24 detailsBox processCluster">
-
+ <div class="col-xs-24 detailsBox processCluster">
+
<h5>Cluster</h5>
<div class="row">
<div class="col-xs-24">
<label class="light">Name</label>
- <select ng-model="cluster.name" ng-required="true" class="form-control padding0" validation-message="{{validations.messages.cluster}}">
+ <select ng-model="cluster.name" ng-class="{firstSelectClusterStep: $index === 0}"
+ ng-required="true"
+ class="form-control padding0"
+ validation-message="{{validations.messages.cluster}}">
<option value="" disabled selected style='display:none;'>-Select cluster-</option>
<option ng-repeat="clusterItem in clusterList">{{clusterItem.name}}</option>
</select>
</div>
</div>
<div class="clearfix"></div>
-
- <h5>Validity</h5>
- <div class="row">
- <div class="col-xs-12">
-
- <div>Start</div>
-
- <div class="input-group input-group-xs">
- <span class="input-group-addon btn btn-default entypo calendar" ng-click="openDatePicker($event, cluster.validity.start)"></span>
- <input type="text" class="form-control" placeholder="Start Date"
+
+ <label class="col-xs-24"> Validity </label>
+ <div class="col-xs-24 validityBox">
+ <div class="startDateBox">
+ <label>Start
+ <input type="text"
+ name="startDateInput"
+ class="form-control dateInput"
+ placeholder="mm/dd/yyyy"
datepicker-popup="{{dateFormat}}"
ng-model="cluster.validity.start.date"
is-open="cluster.validity.start.opened"
- ng-required="true">
- </div>
+ ng-click="openDatePicker($event, cluster.validity.start)"
+ ng-required="true"
+ simple-date>
+ </label>
+ <label class="col-xs-24 custom-danger validationMessageGral"
+ ng-if="!cluster.validity.start.date">
+ {{validations.messages.date.empty}}
+ </label>
+ </div>
+ <div class="startTimeBox">
+ <label>Time
+ <timepicker
+ ng-model="cluster.validity.start.time"
+ hour-step="1"
+ minute-step="1"
+ show-meridian="true">
+ </timepicker>
+ </label>
</div>
-
- <div class="col-xs-12">
- <div>End</div>
-
- <div class="input-group input-group-xs">
- <span class="input-group-addon btn btn-default entypo calendar" ng-click="openDatePicker($event, cluster.validity.end)"></span>
- <input type="text" class="form-control" placeholder="End Date"
+ <div class="endDateBox">
+ <label>End
+ <input type="text"
+ name="endDateInput"
+ class="form-control dateInput"
+ placeholder="mm/dd/yyyy"
datepicker-popup="{{dateFormat}}"
ng-model="cluster.validity.end.date"
is-open="cluster.validity.end.opened"
- ng-required="true">
- </div>
+ ng-click="openDatePicker($event, cluster.validity.end)"
+ ng-required="true"
+ min-date="cluster.validity.start.date"
+ simple-date>
+ </label>
+ <label class="col-xs-24 custom-danger validationMessageGral"
+ ng-if="!cluster.validity.end.date">
+ {{validations.messages.date.empty}}
+ </label>
</div>
+ <div class="endTimeBox">
+ <label>Time
+ <timepicker
+ ng-model="cluster.validity.end.time"
+ hour-step="1"
+ minute-step="1"
+ show-meridian="true">
+ </timepicker>
+ </label>
+ </div>
+
<div class="col-xs-24 mt10">
- <div class="btn btn-default pull-right btn-xs" ng-click="removeCluster($index)" ng-if="!$first">
- - delete
- </div>
+ <button type="button" class="btn btn-default pull-right btn-xs" ng-click="removeCluster($index)" ng-if="!$first">
+ <span class="entypo minus"></span> delete
+ </button>
</div>
</div>
-
-
-
+
+
+
</div>
</div>
</div>
<div class="col-xs-24 mt10">
- <div class="btn btn-default btn-xs" ng-click="addCluster()">
- + add cluster
- </div>
+ <button type="button" class="btn btn-default btn-xs" ng-click="addCluster()">
+ <span class="entypo plus"></span> add cluster
+ </button>
</div>
- <div class="col-xs-24">
- <div class="row feedBottomButtons">
- <div class="btn btn-default col-xs-6" ng-click="goBack('forms.process.properties')" >
- Previous
- </div>
- <div class="btn btn-default col-xs-6 pull-right" ng-click="goNext(processForm.$invalid, 'forms.process.io')" >
- Next
- </div>
- <u class="col-xs-3 pull-right" ui-sref="main">
- Cancel
- </u>
- </div>
+ <div class="col-xs-24 mt20">
+ <button class="btn prevBtn" type="button"
+ ng-click="goBack('forms.process.properties')"
+ ng-disabled="buttonSpinners.backShow">
+ Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+ </button>
+ <button class="btn nextBtn pull-right"
+ ng-disabled="buttonSpinners.show"
+ ng-click="goNext(processForm.$invalid, 'forms.process.io')" >
+ Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+ </button>
+ <a class="pull-right" ui-sref="main">
+ Cancel
+ </a>
</div>
-
+
</form>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/process/processFormGeneralStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/process/processFormGeneralStepTpl.html b/falcon-ui/app/html/process/processFormGeneralStepTpl.html
index 3f559c8..cc21854 100644
--- a/falcon-ui/app/html/process/processFormGeneralStepTpl.html
+++ b/falcon-ui/app/html/process/processFormGeneralStepTpl.html
@@ -17,14 +17,14 @@
* limitations under the License.
*/
-->
-<form name="processForm" class="mt10">
-
+<form name="processForm" class="mt10" novalidate id="processFormGeneralStep">
+
<div class="col-xs-24">
<label class="light">Name</label>
<input type="text" class="form-control" ng-keydown="validations.acceptNoSpaces($event)"
check-name="{type:'process', check:cloningMode}" ng-class="{fakeInvalid:!validations.nameAvailable}"
ng-disabled="!cloningMode" id="entityNameField" ng-model="process.name"
- ng-required="true" ng-maxlength="39" ng-pattern="validations.patterns.name"/>
+ ng-required="true" ng-maxlength="100" ng-pattern="validations.patterns.name"/>
</div>
<div class="col-xs-24">
@@ -36,55 +36,68 @@
<div class="row dynamic-table-spacer">
<div class="col-xs-10">
<input type="text" class="form-control" ng-model="tag.key" placeholder="key"
+ validation-optional-message="{{validations.messages.key}}"
ng-pattern="validations.patterns.alpha" ng-required="tag.value"/>
</div>
<div class="col-xs-11">
<input type="text" class="form-control" placeholder="value"
+ validation-optional-message="{{validations.messages.value}}"
ng-model="tag.value" ng-pattern="validations.patterns.alpha" ng-required="tag.key"/>
</div>
<div class="col-xs-3">
- <div class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-if="$index>0">
+ <button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-if="$index>0">
<span class="entypo minus"></span> delete
- </div>
+ </button>
</div>
</div>
</div>
</div>
<div class="col-xs-24 mt10 mb10">
- <div class="btn btn-default btn-xs" ng-click="addTag()">
+ <button type="button" class="btn btn-default btn-xs" ng-click="addTag()">
<span class="entypo plus"></span> add tag
- </div>
+ </button>
</div>
<h4 class="col-xs-24">Workflow</h4>
<div class="col-xs-24">
<div class="light">Name</div>
- <input type="text" class="form-control" validation-message="{{validations.messages.engineName}}"
+ <input type="text" class="form-control" validation-optional-message="{{validations.messages.name}}"
id="workflowNameField"
ng-model="process.workflow.name"
- ng-required="false"
- ng-maxlength="39"
- ng-pattern="validations.patterns.engineName"/>
+ ng-maxlength="100"
+ ng-pattern="validations.patterns.name"/>
</div>
<div id="engineSection" class="col-xs-24">
<label class="light">Engine</label>
<div class="row">
- <div class="col-xs-4" ng-class="{fakeInvalidRadio:!process.workflow.engine}">
- <input type="radio" id="oozieEngineRadio" ng-change="selectWorkflow()" ng-model="process.workflow.engine" value="oozie" ng-required="!process.workflow.engine"/> Oozie
+ <div class="col-xs-4">
+ <input
+ type="radio" id="oozieEngineRadio"
+ ng-change="selectWorkflow()"
+ ng-model="process.workflow.engine"
+ value="oozie" /> Oozie
</div>
- <div class="col-xs-4" ng-class="{fakeInvalidRadio:!process.workflow.engine}">
- <input type="radio" id="pigEngineRadio" ng-change="selectWorkflow()" ng-model="process.workflow.engine" value="pig" ng-required="!process.workflow.engine"/> Pig
+ <div class="col-xs-4">
+ <input type="radio" id="pigEngineRadio"
+ ng-change="selectWorkflow()"
+ ng-model="process.workflow.engine"
+ value="pig" /> Pig
</div>
- <div class="col-xs-4" ng-class="{fakeInvalidRadio:!process.workflow.engine}">
- <input type="radio" id="hiveEngineRadio" ng-change="selectWorkflow()" ng-model="process.workflow.engine" value="hive" ng-required="!process.workflow.engine"/> Hive
+ <div class="col-xs-4">
+ <input type="radio" id="hiveEngineRadio"
+ ng-change="selectWorkflow()"
+ ng-model="process.workflow.engine"
+ value="hive" /> Hive
</div>
- <select id="engineVersionField" ng-model="process.workflow.version"
- ng-required="false" ng-show="process.workflow.engine" validation-message="{{validations.messages.engine}}">
-
+
+ <select id="engineVersionField"
+ ng-model="process.workflow.version"
+ ng-show="process.workflow.engine">
+
<option value="" disabled selected style='display:none;'>-Select {{process.workflow.engine}} version-</option>
-
+
<option ng-repeat="version in versions"
id="{{process.workflow.engine}}Version{{$index}}"
value="{{version}}"
@@ -92,6 +105,7 @@
{{version}}
</option>
</select>
+
</div>
</div>
<div class="col-xs-24">
@@ -101,19 +115,56 @@
ng-model="process.workflow.path"
ng-required="true"
ng-maxlength="200"
+ validation-optional-message="{{validations.messages.path}}"
ng-pattern="validations.patterns.osPath"/>
</div>
- <div class="col-xs-24">
- <div class="feedBottomButtons row">
- <div id="nextButton"
- class="btn btn-default col-xs-6 pull-right" ng-click="goNext(processForm.$invalid, 'forms.process.properties')" >
- Next
- </div>
- <u class="col-xs-3 pull-right" ng-click="cancel()" ui-sref="main">
- Cancel
- </u>
+ <div class="aclBox col-xs-24">
+ <h4>Access Control List</h4>
+ <div>
+ <label>Owner
+ <input type="text"
+ name="aclOwnerInput"
+ ng-model="process.ACL.owner"
+ ng-pattern="validations.patterns.unixId"
+ ng-required="true"
+ class="form-control"
+ validation-message="{{validations.messages.acl.owner}}"/>
+ </label>
+ </div>
+ <div>
+ <label>Group
+ <input type="text"
+ name="aclGroupInput"
+ ng-model="process.ACL.group"
+ ng-pattern="validations.patterns.unixId"
+ ng-required="true"
+ class="form-control"
+ validation-message="{{validations.messages.acl.group}}" />
+ </label>
</div>
+ <div>
+ <label>Permissions
+ <input type="text"
+ name="aclPermissionsInput"
+ ng-model="process.ACL.permission"
+ ng-pattern="validations.patterns.unixPermissions"
+ ng-required="true"
+ class="form-control"
+ validation-message="{{validations.messages.acl.permission}}" />
+ </label>
+ </div>
+ </div>
+
+ <div class="col-xs-24 mt20">
+ <button id="nextButton" class="btn nextBtn pull-right"
+ ng-disabled="buttonSpinners.show"
+ ng-click="goNext(processForm.$invalid, 'forms.process.properties')" >
+ Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+ </button>
+ <a class="pull-right" ui-sref="main">
+ Cancel
+ </a>
</div>
</form>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/process/processFormInputsAndOutputsStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/process/processFormInputsAndOutputsStepTpl.html b/falcon-ui/app/html/process/processFormInputsAndOutputsStepTpl.html
index 6ed54e1..528ce14 100644
--- a/falcon-ui/app/html/process/processFormInputsAndOutputsStepTpl.html
+++ b/falcon-ui/app/html/process/processFormInputsAndOutputsStepTpl.html
@@ -17,22 +17,24 @@
* limitations under the License.
*/
-->
-<form name="processForm">
+<form name="processForm" novalidate id="processFormInOutStep">
<div class="col-sm-offset-1 col-sm-22">
<h4 ng-if="process.inputs.length === 0">Inputs</h4>
<div ng-repeat="input in process.inputs" class="row">
<h4 class="col-xs-24">Input</h4>
-
+
<div class="col-xs-24 detailsBox processCluster">
<div class="row">
<div class="col-xs-24">
<label class="light">Name</label>
- <input type="text" class="form-control" validation-message="{{validations.messages.name}}"
+ <input type="text" class="form-control"
+ ng-class="{firstInput: $index === 0}"
+ validation-message="{{validations.messages.name}}"
ng-model="input.name"
ng-required="true"
- ng-maxlength="39"
+ ng-maxlength="100"
ng-pattern="validations.patterns.name"/>
</div>
</div>
@@ -40,7 +42,7 @@
<div class="row">
<div class="col-xs-24">
<label class="light">Feed</label>
-
+
<select ng-model="input.feed" ng-required="true" class="col-sm-24 form-control padding0"
validation-message="{{validations.messages.feed}}">
<option value="" disabled selected style='display:none;'>-Select feed-</option>
@@ -51,52 +53,58 @@
<div class="clearfix"></div>
<h5>Instance</h5>
-
+
<div class="row">
<div class="col-xs-12">
<label class="light">Start</label>
-
+
<input type="text" class="form-control" validation-message="{{validations.messages.value}}"
ng-model="input.start"
ng-required="true"
- ng-maxlength="39"/>
-
+ ng-maxlength="100"
+ on-blur="validateStartEndDate"/>
+
</div>
<div class="col-xs-12">
<label class="light">End</label>
-
- <input type="text" class="form-control" validation-message="{{validations.messages.value}}"
+
+ <input type="text" class="form-control {{invalidEndDate}}" validation-message="{{validations.messages.value}}"
ng-model="input.end"
ng-required="true"
- ng-maxlength="39"/>
+ ng-maxlength="100"
+ on-blur="validateStartEndDate"/>
+ <label ng-show="invalidEndDate" class="custom-danger nameValidationMessage">End should be equal or greater than Start</label>
</div>
-
+
<div class="col-xs-24 mt10">
- <div class="btn btn-default pull-right btn-xs" ng-click="removeInput($index)">
- - delete
- </div>
+ <button type="button" class="btn btn-default pull-right btn-xs" ng-click="removeInput($index)">
+ <span class="entypo minus"></span> delete
+ </button>
</div>
- </div>
+ </div>
</div>
</div>
- <div class="btn btn-default btn-xs mt10 mb10" ng-click="addInput()">
- + add input
- </div>
+ <button type="button" class="btn btn-default btn-xs mt10 mb10 addInputButton" ng-click="addInput()">
+ <span class="entypo plus"></span> add input
+ </button>
<h4 ng-if="process.outputs.length === 0">Outputs</h4>
<div ng-repeat="output in process.outputs" class="row">
<h4 class="col-xs-24">Output</h4>
-
+
<div class="col-xs-24 detailsBox processCluster">
<div class="row">
<div class="col-xs-24">
<label class="light">Name</label>
- <input type="text" class="form-control" validation-message="{{validations.messages.name.patternInvalid}}"
+ <input type="text"
+ ng-class="{firstOutput: $index === 0}"
+ class="form-control"
+ validation-message="{{validations.messages.name}}"
ng-model="output.name"
ng-required="true"
- ng-maxlength="39"
+ ng-maxlength="100"
ng-pattern="validations.patterns.id"/>
</div>
</div>
@@ -119,31 +127,37 @@
<input type="text" class="form-control" validation-message="{{validations.messages.value}}"
ng-model="output.outputInstance"
ng-required="true"
- ng-maxlength="39"/>
+ ng-maxlength="100"/>
</div>
</div>
<div class="row mt10">
- <div class="btn btn-default pull-right btn-xs" ng-click="removeOutput($index)">
- - delete
- </div>
+ <button type="button" class="btn btn-default pull-right btn-xs" ng-click="removeOutput($index)">
+ <span class="entypo minus"></span> delete
+ </button>
</div>
-
+
</div>
</div>
- <div class="btn btn-default btn-xs mb10 mt10" ng-click="addOutput()">
- + add output
- </div>
+ <button type="button" class="btn btn-default btn-xs mb10 mt10" ng-click="addOutput()">
+ <span class="entypo plus"></span> add output
+ </button>
</div>
- <div class="row feedBottomButtons">
- <div class="btn btn-default col-xs-6" ng-click="goBack('forms.process.clusters')">
- Previous
- </div>
- <div class="btn btn-default col-xs-6 pull-right" ng-click="goNext(processForm.$invalid, 'forms.process.summary')" >
- Next
+ <div class="row">
+ <div class="col-xs-24 mt20">
+ <button class="btn prevBtn" type="button"
+ ng-click="goBack('forms.process.clusters')"
+ ng-disabled="buttonSpinners.backShow">
+ Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+ </button>
+ <button class="btn nextBtn pull-right"
+ ng-disabled="invalidEndDate || buttonSpinners.show"
+ ng-click="goNext(processForm.$invalid, 'forms.process.summary')" >
+ Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+ </button>
+ <a class="pull-right" ui-sref="main">
+ Cancel
+ </a>
</div>
- <u class="col-xs-3 pull-right" ui-sref="main">
- Cancel
- </u>
</div>
</form>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/process/processFormPropertiesStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/process/processFormPropertiesStepTpl.html b/falcon-ui/app/html/process/processFormPropertiesStepTpl.html
index 5732060..657a1cb 100644
--- a/falcon-ui/app/html/process/processFormPropertiesStepTpl.html
+++ b/falcon-ui/app/html/process/processFormPropertiesStepTpl.html
@@ -17,13 +17,13 @@
* limitations under the License.
*/
-->
-<form name="processForm" class="mt10">
+<form name="processForm" class="mt10" novalidate id="processFormPropsStep">
<h5 class="col-xs-24">Timing</h5>
<div class="col-xs-24 mb10">
<label class="light">Timezone</label>
- <time-zone-select ng-model="process.timezone"></time-zone-select>
+ <time-zone-select ng-model="process.timezone" id="timeZoneSelect"></time-zone-select>
</div>
<div class="col-xs-9">
@@ -35,8 +35,8 @@
id="frequencyQuantity"
ng-required="true"
ng-pattern="validations.patterns.twoDigits"/>
-
- <select
+
+ <select
ng-model="process.frequency.unit"
ng-required="true">
<option selected value="minutes">minutes</option>
@@ -95,7 +95,7 @@
id="delayQuantity" ng-keydown="validations.acceptOnlyNumber($event)"
ng-required="true"
ng-pattern="validations.patterns.twoDigits"/>
-
+
<select ng-model="process.retry.delay.unit" ng-required="true" validation-message="{{validations.messages.option}}">
<option value="" disabled selected style='display:none;'>-Select delay-</option>
<option value="minutes">minutes</option>
@@ -106,17 +106,21 @@
</div>
</div>
- <div class="col-xs-24">
- <div class="feedBottomButtons row">
- <div class="btn btn-default col-xs-6" ng-click="goBack('forms.process.general')">
- Previous
- </div>
- <div class="btn btn-default col-xs-6 pull-right" ng-click="goNext(processForm.$invalid, 'forms.process.clusters')" >
- Next
- </div>
- <u class="col-xs-3 pull-right" ui-sref="main">
- Cancel
- </u>
- </div>
+ <div class="col-xs-24 mt20">
+ <button class="btn prevBtn"
+ type="button"
+ ng-click="goBack('forms.process.general')"
+ ng-disabled="buttonSpinners.backShow">
+ Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+ </button>
+ <button class="btn nextBtn pull-right"
+ ng-disabled="buttonSpinners.show"
+ ng-click="goNext(processForm.$invalid, 'forms.process.clusters')" >
+ Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+ </button>
+ <a class="pull-right" ui-sref="main">
+ Cancel
+ </a>
</div>
+
</form>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/falcon/blob/86180d93/falcon-ui/app/html/process/processFormSummaryStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/process/processFormSummaryStepTpl.html b/falcon-ui/app/html/process/processFormSummaryStepTpl.html
index 6c554da..b60dd4e 100644
--- a/falcon-ui/app/html/process/processFormSummaryStepTpl.html
+++ b/falcon-ui/app/html/process/processFormSummaryStepTpl.html
@@ -17,7 +17,7 @@
* limitations under the License.
*/
-->
-<form name="processForm" class="mt10">
+<form name="processForm" class="mt10" novalidate id="processFormSummaryStep">
<div class="row">
<h4 class="col-sm-24">Process</h4>
@@ -105,11 +105,11 @@
<div class="row">
<div class="col-sm-12">
<label class="col-sm-24">Start</label>
- <label class="col-sm-24 light">{{cluster.validity.start.date}} {{cluster.validity.start.time}}</label>
+ <label class="col-sm-24 light">{{cluster.validity.start.date|date:'yyyy-MM-dd'}} {{cluster.validity.start.time|date:'HH:mm'}}</label>
</div>
<div class="col-sm-12">
<label class="col-sm-24">End</label>
- <label class="col-sm-24 light">{{cluster.validity.end.date}} {{cluster.validity.end.time}}</label>
+ <label class="col-sm-24 light">{{cluster.validity.end.date|date:'yyyy-MM-dd'}} {{cluster.validity.end.time|date:'HH:mm'}}</label>
</div>
</div>
</div>
@@ -152,17 +152,22 @@
</div>
<div class="clearfix hidden-md"> </div>
- <div class="row feedBottomButtons">
- <div class="btn btn-default col-sm-6" ng-click="goBack('forms.process.io')">
- Previous
- </div>
- <div class="btn btn-default col-sm-6 pull-right"
- ng-disabled="processForm.$invalid"
- ng-click="saveEntity()">
- Save
+ <div class="row">
+ <div class="col-xs-24 mt20">
+ <button type="button" class="btn prevBtn"
+ ng-click="goBack('forms.process.io')"
+ ng-disabled="buttonSpinners.backShow">
+ Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+ </button>
+ <button class="btn nextBtn pull-right"
+ ng-disabled="processForm.$invalid || buttonSpinners.show"
+ ng-click="saveEntity()">
+ Save <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+ </button>
+ <a class="pull-right" ui-sref="main">
+ Cancel
+ </a>
</div>
- <u class="col-sm-3 pull-right" ui-sref="main">
- Cancel
- </u>
</div>
+
</form>
\ No newline at end of file