falcon-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sowmya...@apache.org
Subject [11/22] falcon git commit: FALCON-1315 Update falcon ui for HiveDR, secure clusters and bug fixes. Contributed by Armando Reyna/Venkat Ranganathan.
Date Tue, 13 Oct 2015 00:04:04 GMT
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">&nbsp</div>-->
+
+		  <!--<div class="row">-->
+		    <!--<div class="col-sm-offset-1 col-sm-22 hint">-->
+		        <!--Default user: ambari-qa &nbsp Password: admin-->
+		    <!--</div>-->
+		  <!--</div>-->
+
+		  <div class="row">
+		    <div class="col-sm-offset-1 col-sm-22">
+		      <div class="clearfix hidden-md">&nbsp</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">&nbsp</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">&nbsp</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


Mime
View raw message