You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by rm...@apache.org on 2017/01/18 14:10:47 UTC

[40/78] [abbrv] flink-web git commit: Rebuild site

http://git-wip-us.apache.org/repos/asf/flink-web/blob/9ec0a879/content/visualizer/js/program.js
----------------------------------------------------------------------
diff --git a/content/visualizer/js/program.js b/content/visualizer/js/program.js
new file mode 100755
index 0000000..683185d
--- /dev/null
+++ b/content/visualizer/js/program.js
@@ -0,0 +1,233 @@
+/*!
+ * 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.
+ */
+
+var maxColumnWidth = 200;
+var minColumnWidth = 100;
+
+// global variable for the currently requested plan
+var pactPlanRequested = 0;
+
+/*
+ * This function toggels the child checkbox on and of, depending on the parent's state
+ */
+function toggleShowPlanBox(box)
+{
+  var child = $('#suspendJobDuringPlanCheck');
+  
+  if (box.is(':checked')) {
+    child.attr('disabled', false);
+  }
+  else {
+    child.attr('disabled', true);
+  }
+}
+
+/*
+ * Shows an error message below the upload field.
+ */
+function showUploadError(message)
+{
+  $('#upload_error_text').fadeOut("fast", function () { $('#upload_error_text')[0].innerHTML = "" + message;
+                                                           $('#upload_error_text').fadeIn("slow"); } );
+}
+
+/*
+ * Checks the selected file and triggers an upload, if all is correct.
+ */
+function processUpload()
+{
+
+  var filename = $('#upload_file_input').val();
+  var len = filename.length;
+  if (len == 0) {
+    showUploadError("Please select a file.");
+  }
+  else if (len > 4 && filename.substr(len - 4, len) == ".jar") {
+    $('#upload_form')[0].submit();
+  }
+  else {
+    showUploadError("Please select a .jar file.");
+  }
+}
+
+/*
+ * This function makes sure only one checkbox is selected.
+ * Upon selection it initializes the drawing of the pact plan.
+ * Upon deselection, it clears the pact plan.
+ */
+function toggleCheckboxes(box)
+{
+
+  if (box.is(':checked')) {
+    $('.jobItemCheckbox').attr('checked', false);
+    box.attr('checked', true);
+    var id = box.parentsUntil('.JobListItems').parent().attr('id').substr(4);
+    var assemblerClass = box.attr('id');
+
+    $('#mainCanvas').html('');
+    pactPlanRequested = id;
+
+    $.ajax({
+        type: "GET",
+        url: "pactPlan",
+        data: { job: id, assemblerClass: assemblerClass},
+        success: function(response) { showPreviewPlan(response); }
+    });
+  }
+  else {
+    $('#mainCanvas').html('');
+  }
+}
+
+/*
+ * Function that takes the returned plan and draws it.
+ */
+function showPreviewPlan(data)
+{
+	$("#mainCanvas").empty();
+    var svgElement = "<div id=\"attach\"><svg id=\"svg-main\" width=500 height=500><g transform=\"translate(20, 20)\"/></svg></div>";
+    $("#mainCanvas").append(svgElement);
+    drawGraph(data.plan, "#svg-main");
+    pactPlanRequested = 0;
+    
+    //activate zoom buttons
+    activateZoomButtons();
+//  }
+}
+
+/*
+ * Asynchronously loads the jobs and creates a list of them.
+ */
+function loadJobList()
+{
+  $.get("jobs", { action: "list" }, createJobList);
+}
+
+/*
+ * Triggers an AJAX request to delete a job.
+ */
+function deleteJob(id)
+{
+  var name = id.substr(4);
+  $.get("jobs", { action: "delete", filename: name }, loadJobList);
+}
+
+/*
+ * Creates and lists the returned jobs.
+ */
+function createJobList(data)
+{
+  var markup = "";
+   
+  var lines = data.split("\n");
+  for (var i = 0; i < lines.length; i++)
+  {
+    if (lines[i] == null || lines[i].length == 0) {
+      continue;
+    }
+    
+    var date = "unknown date";
+    var assemblerClass = "<em>no entry class specified</em>";
+    
+    var tokens = lines[i].split("\t");
+    var name = tokens[0];
+    if (tokens.length > 1) {
+      date = tokens[1];
+      if (tokens.length > 2) {
+        assemblerClass = tokens[2];
+      }
+    }
+    
+    var entries = assemblerClass.split("#");
+    var classes = entries[0].split(",");
+    
+    markup += '<div id="job_' + name + '" class="JobListItems"><table class="table"><tr>';
+    markup += '<td colspan="2"><p class="JobListItemsName">' + name + '</p></td>';
+    markup += '<td><p class="JobListItemsDate">' + date + '</p></td>';
+    markup += '<td width="30px"><img class="jobItemDeleteIcon" src="img/delete-icon.png" width="24" height="24" /></td></tr>';
+    
+    var j = 0;
+    for (var idx in classes) {
+      markup += '<tr><td width="30px;"><input id="' + classes[idx] + '" class="jobItemCheckbox" type="checkbox"></td>';
+      markup += '<td colspan="3"><p class="JobListItemsDate" title="' + entries[++j] + '">' + classes[idx] + '</p></td></tr>';
+    }
+    markup += '</table></div>';
+  }
+  
+  // add the contents
+  $('#jobsContents').html(markup); 
+  
+  // register the event handler that triggers the delete when the delete icon is clicked
+  $('.jobItemDeleteIcon').click(function () { deleteJob($(this).parentsUntil('.JobListItems').parent().attr('id')); } );
+  
+  // register the event handler, that ensures only one checkbox is active
+  $('.jobItemCheckbox').change(function () { toggleCheckboxes($(this)) });
+}
+
+/*
+ * Function that checks and launches a pact job.
+ */
+function runJob ()
+{
+   var job = $('.jobItemCheckbox:checked');
+   if (job.length == 0) {
+     $('#run_error_text').fadeOut("fast", function () { $('#run_error_text')[0].innerHTML = "Select a job to run.";
+                                                           $('#run_error_text').fadeIn("slow"); } );
+     return;
+   }
+   
+   var jobName = job.parentsUntil('.JobListItems').parent().attr('id').substr(4);
+   var assemblerClass = job.attr('id');
+   
+   var showPlan = $('#showPlanCheck').is(':checked');
+   var suspendPlan = $('#suspendJobDuringPlanCheck').is(':checked');
+   var options = $('#commandLineOptionsField').attr('value'); //TODO? Replace with .val() ?
+   var args = $('#commandLineArgsField').attr('value'); //TODO? Replace with .val() ?
+   
+   var url;
+   if (assemblerClass == "<em>no entry class specified</em>") {
+      url = "runJob?" + $.param({ action: "submit", options: options, job: jobName, arguments: args, show_plan: showPlan, suspend: suspendPlan});
+   } else {
+      url = "runJob?" + $.param({ action: "submit", options: options, job: jobName, assemblerClass: assemblerClass, arguments: args, show_plan: showPlan, suspend: suspendPlan});
+   }
+   
+   window.location = url;
+}
+
+/*
+ * Document initialization.
+ */
+$(document).ready(function ()
+{
+  // hide the error text sections
+  $('#upload_error_text').fadeOut("fast");
+  $('#run_error_text').fadeOut("fast");
+  
+  // register the event listener that keeps the hidden file form and the text fied in sync
+  $('#upload_file_input').change(function () { $('#upload_file_name_text').val($(this).val()) } );
+  
+  // register the event handler for the upload button
+  $('#upload_submit_button').click(processUpload);
+  $('#run_button').click(runJob);
+  
+  // register the event handler that (in)activates the plan display checkbox
+  $('#showPlanCheck').change(function () { toggleShowPlanBox ($(this)); }); 
+  
+  // start the ajax load of the jobs
+  loadJobList();
+});