azkaban-uncached

Details

diff --git a/src/java/azkaban/webapp/servlet/velocity/permissionspage.vm b/src/java/azkaban/webapp/servlet/velocity/permissionspage.vm
index 58352bb..edd848d 100644
--- a/src/java/azkaban/webapp/servlet/velocity/permissionspage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/permissionspage.vm
@@ -22,6 +22,7 @@
 #parse ("azkaban/webapp/servlet/velocity/javascript.vm")
 
 		<script type="text/javascript" src="${context}/js/azkaban.permission.view.js"></script>
+		<script type="text/javascript" src="${context}/js/azkaban.projectmodals.view.js"></script>
 		<script type="text/javascript">
 			var contextURL = "${context}";
 			var currentTime = ${currentTime};
@@ -63,12 +64,11 @@
 			</div>
 		</div>
 
-		<div class="az-page-header">
-			<div class="container">
-				<h1><a href="${context}/manager?project=${project.name}">Project <small>$project.name</small></a></h1>
-				<p>$project.description</p>
-			</div>
-		</div>
+	## Page header.
+	
+  #parse ("azkaban/webapp/servlet/velocity/projectpageheader.vm")
+
+  ## Page content.
 
 		<div class="container">
 			<div class="row">
@@ -356,6 +356,7 @@
 				</div>
 			</div>
 
+	#parse ("azkaban/webapp/servlet/velocity/projectmodals.vm")
 	#parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
 #end
 #parse ("azkaban/webapp/servlet/velocity/footer.vm")
diff --git a/src/java/azkaban/webapp/servlet/velocity/projectlogpage.vm b/src/java/azkaban/webapp/servlet/velocity/projectlogpage.vm
index 17d6f6b..3a36e85 100644
--- a/src/java/azkaban/webapp/servlet/velocity/projectlogpage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/projectlogpage.vm
@@ -24,6 +24,7 @@
 		<script type="text/javascript" src="${context}/js/azkaban.date.utils.js"></script>
 		<script type="text/javascript" src="${context}/js/azkaban.ajax.utils.js"></script>
 		<script type="text/javascript" src="${context}/js/azkaban.projectlog.view.js"></script>
+		<script type="text/javascript" src="${context}/js/azkaban.projectmodals.view.js"></script>
 		<script type="text/javascript">
 			var contextURL = "${context}";
 			var currentTime = ${currentTime};
@@ -61,13 +62,8 @@
 		</div>
 
 	## Page header.
-
-		<div class="az-page-header">
-			<div class="container">
-				<h1><a href="${context}/manager?project=${project.name}">Project <small>$project.name</small></a></h1>
-				<p>$project.description</p>
-			</div>
-		</div>
+	
+  #parse ("azkaban/webapp/servlet/velocity/projectpageheader.vm")
 
 	## Page content.
 
@@ -94,6 +90,7 @@
 				</div>
 			</div>
 
+	#parse ("azkaban/webapp/servlet/velocity/projectmodals.vm")
 #end
 
 #parse ("azkaban/webapp/servlet/velocity/footer.vm")
diff --git a/src/java/azkaban/webapp/servlet/velocity/projectmodals.vm b/src/java/azkaban/webapp/servlet/velocity/projectmodals.vm
new file mode 100644
index 0000000..1d22d58
--- /dev/null
+++ b/src/java/azkaban/webapp/servlet/velocity/projectmodals.vm
@@ -0,0 +1,71 @@
+#*
+ * Copyright 2012 LinkedIn Corp.
+ * 
+ * Licensed 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.
+*#
+
+  ## Upload project modal
+
+			<div class="modal fade" id="upload-project-modal">
+				<div class="modal-dialog">
+					<div class="modal-content">
+						<form id="upload-project-form" enctype="multipart/form-data" method="post" action="$!context/manager">
+							<div class="modal-header">
+								<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+								<h4 class="modal-title">Upload Project Files</h4>
+							</div>
+							<div class="modal-body">
+								<div class="alert alert-danger" id="upload-project-modal-error-msg">$error_msg</div>
+								<fieldset class="form-horizontal">
+									<div class="form-group">
+										<label for="path" class="col-sm-2 control-label">Job Archive</label>
+										<div class="col-sm-10">
+											<input type="file" class="form-control" id="file" name="file">
+										</div>
+									</div>
+								</fieldset>
+							</div>
+							<div class="modal-footer">
+								<input type="hidden" name="project" value="$project.name">
+								<input type="hidden" name="action" value="upload">
+								<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+								<button type="button" class="btn btn-primary" id="upload-project-btn">Upload</button>
+							</div>
+						</form>
+					</div>
+				</div>
+			</div>
+
+	## Delete project modal.
+			
+			<div class="modal fade" id="delete-project-modal">
+				<div class="modal-dialog">
+					<div class="modal-content">
+						<div class="modal-header">
+							<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+							<h4 class="modal-title">Delete Project</h4>
+						</div>
+						<div class="modal-body">
+							<p><strong>Warning:</strong> This project will be deleted and may not be recoverable.</p>
+						</div>
+						<div class="modal-footer">
+							<form id="delete-form">
+								<input type="hidden" name="project" value="$project.name">
+								<input type="hidden" name="delete" value="true">
+								<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+								<button type="button" class="btn btn-danger" id="delete-btn">Delete Project</button>
+							</form>
+						</div>
+					</div>
+				</div>
+			</div>
diff --git a/src/java/azkaban/webapp/servlet/velocity/projectpage.vm b/src/java/azkaban/webapp/servlet/velocity/projectpage.vm
index 0b971be..e09811d 100644
--- a/src/java/azkaban/webapp/servlet/velocity/projectpage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/projectpage.vm
@@ -27,6 +27,7 @@
 		<script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
 		<script type="text/javascript" src="${context}/js/azkaban.ajax.utils.js"></script>
 		<script type="text/javascript" src="${context}/js/azkaban.project.view.js"></script>
+		<script type="text/javascript" src="${context}/js/azkaban.projectmodals.view.js"></script>
 		<script type="text/javascript">
 			var contextURL = "${context}";
 			var currentTime = ${currentTime};
@@ -71,63 +72,47 @@
 		</div>
 
 	## Page header.
-
-		<div class="az-page-header">
-			<div class="container">
-				<h1><a href="${context}/manager?project=${project.name}">Project <small>$project.name</small></a></h1>
-				<p>$project.description</p>
-			</div>
-		</div>
+	
+  #parse ("azkaban/webapp/servlet/velocity/projectpageheader.vm")
 
 	## Page content.
 
     <div class="container">
 			<div class="row">
-				<div class="col-lg-8">
+				<div class="col-lg-8" id="flow-tabs">
 					
 	#set ($project_page = "flows")
 	#parse ("azkaban/webapp/servlet/velocity/projectnav.vm")
 
-					<div class="panel panel-default" id="flow-tabs">
-						<div class="panel-heading">
-							<div class="pull-right" id="project-options">
-								<button id="project-upload-btn" class="btn btn-xs btn-primary">
-									<span class="glyphicon glyphicon-upload"></span> Upload
-								</button>
-								<button id="project-delete-btn" class="btn btn-xs btn-danger">
-									<span class="glyphicon glyphicon-trash"></span> Delete Project
-								</button>
-							</div>
-							Flows
-						</div>
-						<div class="panel-body">
-
+            <div id="flow-tabs">
 	#if ($flows)
 		#foreach ($flow in $flows)
-							<div class="panel panel-info" flow="${flow.id}" project="${project.name}">
-								<div class="panel-heading flow-expander" id="${flow.id}">
+              <div class="panel panel-info" flow="${flow.id}" project="${project.name}">
+                <div class="panel-heading flow-expander" id="${flow.id}">
 			#if (${exec})
-									<div class="pull-right">
-										<button type="button" class="btn btn-xs btn-primary execute-flow" flowId="${flow.id}">Execute Flow</button>
-										<a href="${context}/manager?project=${project.name}&flow=${flow.id}#executions" class="btn btn-primary btn-xs">Executions</a>
-										<a href="${context}/manager?project=${project.name}&flow=${flow.id}#summary" class="btn btn-primary btn-xs">Summary</a>
-									</div>
+                <div class="pull-right">
+                  <button type="button" class="btn btn-xs btn-primary execute-flow" flowId="${flow.id}">Execute Flow</button>
+                  <a href="${context}/manager?project=${project.name}&flow=${flow.id}#executions" class="btn btn-primary btn-xs">Executions</a>
+                  <a href="${context}/manager?project=${project.name}&flow=${flow.id}#summary" class="btn btn-primary btn-xs">Summary</a>
+                </div>
 			#end
-									<a href="${context}/manager?project=${project.name}&flow=${flow.id}">${flow.id}</a>
-								</div>
-								<div id="${flow.id}-child" class="panel-collapse collapse">
-									<table class="table">
-										<tbody id="${flow.id}-tbody">
-										</tbody>
-									</table>
-								</div>
-							</div>
+                <a href="${context}/manager?project=${project.name}&flow=${flow.id}">${flow.id}</a>
+              </div>
+              <div id="${flow.id}-child" class="panel-collapse collapse">
+                <table class="table">
+                  <tbody id="${flow.id}-tbody">
+                  </tbody>
+                </table>
+              </div>
+            </div>
 		#end
 	#else
-							<p>No flows uploaded to this project</p>
+            <div class="alert alert-info">
+              <h4>No Flows</h4>
+              <p>No flows have been uploaded to this project yet.</p>
+            </div>
 	#end
-						</div>
-					</div>
+          </div><!-- /#flow-tabs -->
 				</div><!-- /col-lg-8 -->
 
 				<div class="col-lg-4">
@@ -135,62 +120,7 @@
 				</div><!-- /col-lg-4 -->
 			</div><!-- /row -->
 
-## Upload project modal
-
-			<div class="modal fade" id="upload-project-modal">
-				<div class="modal-dialog">
-					<div class="modal-content">
-						<form id="upload-project-form" enctype="multipart/form-data" method="post" action="$!context/manager">
-							<div class="modal-header">
-								<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-								<h4 class="modal-title">Upload Project Files</h4>
-							</div>
-							<div class="modal-body">
-								<div class="alert alert-danger" id="upload-project-modal-error-msg">$error_msg</div>
-								<fieldset class="form-horizontal">
-									<div class="form-group">
-										<label for="path" class="col-sm-2 control-label">Job Archive</label>
-										<div class="col-sm-10">
-											<input type="file" class="form-control" id="file" name="file">
-										</div>
-									</div>
-								</fieldset>
-							</div>
-							<div class="modal-footer">
-								<input type="hidden" name="project" value="$project.name">
-								<input type="hidden" name="action" value="upload">
-								<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
-								<button type="button" class="btn btn-primary" id="upload-project-btn">Upload</button>
-							</div>
-						</form>
-					</div>
-				</div>
-			</div>
-
-	## Delete project modal.
-			
-			<div class="modal fade" id="delete-project-modal">
-				<div class="modal-dialog">
-					<div class="modal-content">
-						<div class="modal-header">
-							<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-							<h4 class="modal-title">Delete Project</h4>
-						</div>
-						<div class="modal-body">
-							<p><strong>Warning:</strong> This project will be deleted and may not be recoverable.</p>
-						</div>
-						<div class="modal-footer">
-							<form id="delete-form">
-								<input type="hidden" name="project" value="$project.name">
-								<input type="hidden" name="delete" value="true">
-								<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
-								<button type="button" class="btn btn-danger" id="delete-btn">Delete Project</button>
-							</form>
-						</div>
-					</div>
-				</div>
-			</div>
-
+	#parse ("azkaban/webapp/servlet/velocity/projectmodals.vm")
 	#parse ("azkaban/webapp/servlet/velocity/invalidsessionmodal.vm")
 	#parse ("azkaban/webapp/servlet/velocity/flowexecutionpanel.vm")
 	#parse ("azkaban/webapp/servlet/velocity/messagedialog.vm")
diff --git a/src/java/azkaban/webapp/servlet/velocity/projectpageheader.vm b/src/java/azkaban/webapp/servlet/velocity/projectpageheader.vm
new file mode 100644
index 0000000..5fda594
--- /dev/null
+++ b/src/java/azkaban/webapp/servlet/velocity/projectpageheader.vm
@@ -0,0 +1,36 @@
+#*
+ * Copyright 2012 LinkedIn Corp.
+ * 
+ * Licensed 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="az-page-header">
+			<div class="container">
+        <div class="row">
+          <div class="col-lg-6">
+            <h1><a href="${context}/manager?project=${project.name}">Project <small>$project.name</small></a></h1>
+            <p>$project.description</p>
+          </div>
+          <div class="col-lg-6">
+            <div class="pull-right az-page-header-form" id="project-options">
+              <button id="project-delete-btn" class="btn btn-sm btn-danger">
+                <span class="glyphicon glyphicon-trash"></span> Delete Project
+              </button>
+              <button id="project-upload-btn" class="btn btn-sm btn-primary">
+                <span class="glyphicon glyphicon-upload"></span> Upload
+              </button>
+            </div>
+          </div>
+        </div>
+			</div>
+		</div>
diff --git a/src/web/js/azkaban.project.view.js b/src/web/js/azkaban.project.view.js
index a1b8f3d..6f04950 100644
--- a/src/web/js/azkaban.project.view.js
+++ b/src/web/js/azkaban.project.view.js
@@ -16,67 +16,6 @@
 
 $.namespace('azkaban');
 
-var projectView;
-azkaban.ProjectView = Backbone.View.extend({
-	events: {
-		"click #project-upload-btn": "handleUploadProjectJob",
-		"click #project-delete-btn": "handleDeleteProject"
-	},
-
-	initialize: function(settings) {
-	},
-
-	handleUploadProjectJob: function(evt) {
-		console.log("click upload project");
-		$('#upload-project-modal').modal();
-	},
-
-	handleDeleteProject: function(evt) {
-		console.log("click delete project");
-		$('#delete-project-modal').modal();
-	},
-	
-	render: function() {
-	}
-});
-
-var uploadProjectView;
-azkaban.UploadProjectView = Backbone.View.extend({
-	events: {
-		"click #upload-project-btn": "handleCreateProject"
-	},
-
-	initialize: function(settings) {
-		console.log("Hide upload project modal error msg");
-		$("#upload-project-modal-error-msg").hide();
-	},
-	
-	handleCreateProject: function(evt) {
-		console.log("Upload project button.");
-		$("#upload-project-form").submit();
-	},
-	
-	render: function() {
-	}
-});
-
-var deleteProjectView;
-azkaban.DeleteProjectView = Backbone.View.extend({
-	events: {
-		"click #delete-btn": "handleDeleteProject"
-	},
-	
-	initialize: function(settings) {
-	},
-	
-	handleDeleteProject: function(evt) {
-		$("#delete-form").submit();
-	},
-
-	render: function() {
-	}
-});
-
 var flowTableView;
 azkaban.FlowTableView = Backbone.View.extend({
 	events : {
@@ -294,65 +233,6 @@ azkaban.FlowTableView = Backbone.View.extend({
 	}
 });
 
-var projectSummary;
-azkaban.ProjectSummaryView = Backbone.View.extend({
-	events: {
-		"click #edit": "handleDescriptionEdit"
-	},
-
-	initialize: function(settings) {
-	},
-	
-	handleDescriptionEdit: function(evt) {
-		console.log("Edit description");
-		var editText = $("#edit").text();
-		var descriptionTD = $('#pdescription');
-		
-		if (editText != "Edit Description") {
-			var requestURL = contextURL + "/manager";
-			var newText = $("#descEdit").val();
-
-			$.get(
-				requestURL,
-				{
-					"project": projectName, 
-					"ajax":"changeDescription", 
-					"description":newText
-				},
-				function(data) {
-					if (data.error) {
-						alert(data.error);
-					}
-				},
-				"json"
-			);
-				
-			$(descriptionTD).remove("#descEdit");
-			$(descriptionTD).text(newText);
-			$("#edit").text("Edit Description");
-		}
-		else {
-			var text = $(descriptionTD).text();
-			var edit = document.createElement("textarea");
-			
-			$(edit).addClass("editTextArea");
-			$(edit).attr("id", "descEdit");
-			$(edit).val(text);
-			$(descriptionTD).text("");
-			$(descriptionTD).append(edit);
-			
-			$("#edit").text("Commit");
-		}
-	},
-	render: function() {
-	}
-});
-
 $(function() {
-	projectView = new azkaban.ProjectView({el:$('#project-options')});
-	uploadView = new azkaban.UploadProjectView({el:$('#upload-project-modal')});
 	flowTableView = new azkaban.FlowTableView({el:$('#flow-tabs')});
-	projectSummary = new azkaban.ProjectSummaryView({el:$('#project-summary')});
-	deleteProjectView = new azkaban.DeleteProjectView({el: $('#delete-project-modal')});
-	// Setting up the project tabs
 });
diff --git a/src/web/js/azkaban.projectmodals.view.js b/src/web/js/azkaban.projectmodals.view.js
new file mode 100644
index 0000000..0362b8a
--- /dev/null
+++ b/src/web/js/azkaban.projectmodals.view.js
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2012 LinkedIn Corp.
+ * 
+ * Licensed 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.
+ */
+
+$.namespace('azkaban');
+
+var projectView;
+azkaban.ProjectView = Backbone.View.extend({
+	events: {
+		"click #project-upload-btn": "handleUploadProjectJob",
+		"click #project-delete-btn": "handleDeleteProject"
+	},
+
+	initialize: function(settings) {
+	},
+
+	handleUploadProjectJob: function(evt) {
+		console.log("click upload project");
+		$('#upload-project-modal').modal();
+	},
+
+	handleDeleteProject: function(evt) {
+		console.log("click delete project");
+		$('#delete-project-modal').modal();
+	},
+	
+	render: function() {
+	}
+});
+
+var uploadProjectView;
+azkaban.UploadProjectView = Backbone.View.extend({
+	events: {
+		"click #upload-project-btn": "handleCreateProject"
+	},
+
+	initialize: function(settings) {
+		console.log("Hide upload project modal error msg");
+		$("#upload-project-modal-error-msg").hide();
+	},
+	
+	handleCreateProject: function(evt) {
+		console.log("Upload project button.");
+		$("#upload-project-form").submit();
+	},
+	
+	render: function() {
+	}
+});
+
+var deleteProjectView;
+azkaban.DeleteProjectView = Backbone.View.extend({
+	events: {
+		"click #delete-btn": "handleDeleteProject"
+	},
+	
+	initialize: function(settings) {
+	},
+	
+	handleDeleteProject: function(evt) {
+		$("#delete-form").submit();
+	},
+
+	render: function() {
+	}
+});
+
+var projectSummary;
+azkaban.ProjectSummaryView = Backbone.View.extend({
+	events: {
+		"click #edit": "handleDescriptionEdit"
+	},
+
+	initialize: function(settings) {
+	},
+	
+	handleDescriptionEdit: function(evt) {
+		console.log("Edit description");
+		var editText = $("#edit").text();
+		var descriptionTD = $('#pdescription');
+		
+		if (editText != "Edit Description") {
+			var requestURL = contextURL + "/manager";
+			var newText = $("#descEdit").val();
+
+			$.get(
+				requestURL,
+				{
+					"project": projectName, 
+					"ajax":"changeDescription", 
+					"description":newText
+				},
+				function(data) {
+					if (data.error) {
+						alert(data.error);
+					}
+				},
+				"json"
+			);
+				
+			$(descriptionTD).remove("#descEdit");
+			$(descriptionTD).text(newText);
+			$("#edit").text("Edit Description");
+		}
+		else {
+			var text = $(descriptionTD).text();
+			var edit = document.createElement("textarea");
+			
+			$(edit).addClass("editTextArea");
+			$(edit).attr("id", "descEdit");
+			$(edit).val(text);
+			$(descriptionTD).text("");
+			$(descriptionTD).append(edit);
+			
+			$("#edit").text("Commit");
+		}
+	},
+	render: function() {
+	}
+});
+
+$(function() {
+	projectView = new azkaban.ProjectView({el:$('#project-options')});
+	uploadView = new azkaban.UploadProjectView({el:$('#upload-project-modal')});
+	deleteProjectView = new azkaban.DeleteProjectView({el: $('#delete-project-modal')});
+	projectSummary = new azkaban.ProjectSummaryView({el:$('#project-summary')});
+});