UI for editing component parameters now correctly highlights the background of requir...
authorPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 27 Feb 2014 20:38:00 +0000 (15:38 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 27 Feb 2014 20:38:00 +0000 (15:38 -0500)
apps/workbench/app/assets/javascripts/editable.js
apps/workbench/app/assets/javascripts/selection.js
apps/workbench/app/controllers/pipeline_instances_controller.rb
apps/workbench/app/helpers/application_helper.rb
apps/workbench/app/views/pipeline_instances/_show_components.html.erb

index 29cf2b8a85da5a3fbc0e9caebfee3e21e4fbe2ef..9418fb2e0d6dfb3a368a710085b8f2a6816591d6 100644 (file)
@@ -8,4 +8,36 @@ $.fn.editable.defaults.params = function (params) {
     a[key] = {};
     a[key][params.name] = params.value;
     return a;
-};
\ No newline at end of file
+};
+
+(function() {
+    $.fn.editable.defaults.success = function (response, newValue) {
+        var tag = $(this);
+        if (tag.hasClass("required")) {
+            if (newValue && newValue.trim() != "") {
+                tag.parent().css("background-color", "");
+                tag.parent().prev().css("background-color", "");
+            }
+            else {
+                tag.parent().css("background-color", "#ffdddd");
+                tag.parent().prev().css("background-color", "#ffdddd");
+            }
+        }
+    }
+
+    $(window).on('load', function() {
+        var a = $('a.editable.required');
+        for (var i = 0; i < a.length; i++) {
+            var tag = $(a[i]);
+            if (tag.hasClass("editable-empty")) {
+                tag.parent().css("background-color", "#ffdddd");
+                tag.parent().prev().css("background-color", "#ffdddd");
+            }
+            else {
+                tag.parent().css("background-color", "");
+                tag.parent().prev().css("background-color", "");
+            }
+        }
+    } );
+
+})();
index d4af32191466fe70b15794b0fb0f5f4531077d16..c8ec8100ac90c7fdb2c559c9f73feac4603443a8 100644 (file)
@@ -156,4 +156,5 @@ select_form_sources  = null;
         }
         return ret;
     };
-})();
\ No newline at end of file
+})();
+
index 09220173b809c3e75e32f6058ad9f6599551e219..12db3c3b6413058c8dbeb7182a8548a3c65a05d4 100644 (file)
@@ -57,6 +57,8 @@ class PipelineInstancesController < ApplicationController
               if param_value.is_a? Hash
                 if param_value[:value]
                   pipeline[component_name][:script_parameters][param_name] = param_value[:value]
+                elsif param_value[:default]
+                  pipeline[component_name][:script_parameters][param_name] = param_value[:default]
                 elsif param_value[:optional] and param_value.length == 1
                     pipeline[component_name][:script_parameters][param_name] = ""
                 else
index 921122f4b35d486f5d76996c1d2ddcfa2398e14d..2c2316b0b7667fae44bcedae44c2354a8078245d 100644 (file)
@@ -116,14 +116,22 @@ module ApplicationHelper
     end
 
     datatype = nil
+    required = true
     if template
       puts "Template is #{template.class} #{template.is_a? Hash} #{template}"
       if template.is_a? Hash
         if template[:output_of]
           return raw("<span class='label label-default'>#{template[:output_of]}</span>")
-        elsif template[:datatype]
+        end
+        if template[:datatype]
           datatype = template[:datatype]
         end
+        if template[:optional] != nil
+          required = (template[:optional] != "true")
+        end
+        if template[:required] != nil
+          required = template[:required]
+        end
       end
     end
 
@@ -152,6 +160,10 @@ module ApplicationHelper
       dn += "[#{a}]"
     end
 
+    if attrvalue.is_a? String
+      attrvalue = attrvalue.strip
+    end
+
     if dataclass
       items = []
       dataclass.where(uuid: attrvalue).each do |item|
@@ -169,20 +181,22 @@ module ApplicationHelper
       "data-url" => url_for(action: "update", id: object.uuid, controller: object.class.to_s.pluralize.underscore),
       "data-title" => "Update #{subattr[-1].to_s.titleize}",
       "data-name" => dn,
-      "data-value" => attrvalue,
       "data-pk" => "{id: \"#{object.uuid}\", key: \"#{object.class.to_s.underscore}\"}",
-      :class => "editable",
+      "data-showbuttons" => "false",
+      :class => "editable #{'required' if required}",
       :id => id
     }.merge(htmloptions)
 
-    lt += raw(<<EOF
+    lt += raw('<script>')
+    
+    if items and items.length > 0
+      lt += raw("add_form_selection_sources(#{items.to_json});\n")
+    end
+
+    lt += raw("$('##{id}').editable({source: function() { return select_form_sources('#{dataclass}'); } });\n")
+
+    lt += raw("</script>")
 
-<script>
-    add_form_selection_sources(#{items.to_json});
-    $('##{id}').editable({source: function() { return select_form_sources('#{dataclass}'); } });
-</script>
-EOF
-)
     lt 
   end
 end
index 4a39c199a176d31009d7bcf46808caab87a73844..1148bffe47b4ccda0525b0e10507ee3e47d9d11f 100644 (file)
@@ -21,6 +21,10 @@ table.pipeline-components-table td {
   text-overflow: ellipsis;
 }
 
+td.required {
+  background: #ffdddd;
+}
+
 <% end %>
 
 <% if @object.active != nil %>
@@ -120,39 +124,37 @@ setInterval(function(){$('a.refresh').click()}, 30000);
       </th><th>
         parameter
       </th><th>
-        input
+        value
       </th>
     </tr>
   </thead>
   <tbody>
     <% template = PipelineTemplate.find(@object.pipeline_template_uuid) %>
-    <% template.components.each do |k, v| %>
-
-    <% sp = v[:script_parameters].collect do |x, y| [x, y] end %>
+    <% template.components.each do |k, template_value| %>
 
     <tr>
       <td><span class="label label-default"><%= k %></span></td>
 
-      <td><%= v[:script] %></td>
+      <td><%= render_editable_subattribute @object, :components, [k, :script], template_value[:script] %></td>
 
-      <td>script_version</td>
+      <td>script version</td>
 
       <td>
-        <%= render_editable_subattribute @object, :components, [k, :script_version], v[:script_version] %>
+        <%= render_editable_subattribute @object, :components, [k, :script_version], template_value[:script_version] %>
       </td>
     </tr>
 
-    <% if sp.length > 0 %>
-    <tr>
-      <td style="border-top: none"></td>
-      <td style="border-top: none"></td>
-
-      <% sp.each do |p| %>
-        <td><%= p[0] %></td>
-        <td><%= render_editable_subattribute @object, :components, [k, :script_parameters, p[0].to_sym], p[1] %></td>
+    <% if template_value[:script_parameters].length > 0 %>
+      <% template_value[:script_parameters].each do |p, tv| %>
+        <tr>
+          <td style="border-top: none"></td>
+          <td style="border-top: none"></td>
+          
+          <td class="property-edit-row"><%= p %></td>
+          <td class="property-edit-row"><%= render_editable_subattribute @object, :components, [k, :script_parameters, p.to_sym], tv %></td>
       <% end %>
-    </tr>
-  <% end %>
+      </tr>
+    <% end %>
   <% end %>
   </tbody>
   </table>