X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/cf1e0b3f31b643899b556c3c7ae59630a0ec7495..14ea55f217bbd7061fafc1fe69f4f453ad7c3e59:/apps/workbench/app/helpers/application_helper.rb diff --git a/apps/workbench/app/helpers/application_helper.rb b/apps/workbench/app/helpers/application_helper.rb index 921122f4b3..e608572f05 100644 --- a/apps/workbench/app/helpers/application_helper.rb +++ b/apps/workbench/app/helpers/application_helper.rb @@ -106,42 +106,70 @@ module ApplicationHelper end def render_editable_subattribute(object, attr, subattr, template, htmloptions={}) - attrvalue = object.send(attr) - subattr.each do |k| - if attrvalue and attrvalue.is_a? Hash - attrvalue = attrvalue[k] - else - break + if object + attrvalue = object.send(attr) + subattr.each do |k| + if attrvalue and attrvalue.is_a? Hash + attrvalue = attrvalue[k] + else + break + end end end datatype = nil + required = true if template - puts "Template is #{template.class} #{template.is_a? Hash} #{template}" + #puts "Template is #{template.class} #{template.is_a? Hash} #{template}" if template.is_a? Hash if template[:output_of] return raw("#{template[:output_of]}") - elsif template[:datatype] - datatype = template[:datatype] + end + if template[:dataclass] + dataclass = template[:dataclass] + end + if template[:optional] != nil + required = (template[:optional] != "true") + end + if template[:required] != nil + required = template[:required] end end end - return attrvalue if !object.attribute_editable? attr + rsc = template + if template.is_a? Hash + if template[:value] + rsc = template[:value] + elsif template[:default] + rsc = template[:default] + end + end - if not datatype - dataclass = ArvadosBase.resource_class_for_uuid(template) - if dataclass - datatype = 'select' - else - if template.is_a? Array - # ?!? - elsif template.is_a? String - if /^\d+$/.match(template) - datatype = 'number' - else - datatype = 'text' - end + return link_to_if_arvados_object(rsc) if !object + return link_to_if_arvados_object(attrvalue) if !object.attribute_editable? attr + + if dataclass + begin + dataclass = dataclass.constantize + rescue NameError + end + else + dataclass = ArvadosBase.resource_class_for_uuid(rsc) + end + + if dataclass && dataclass.is_a?(Class) + datatype = 'select' + elsif dataclass == 'number' + datatype = 'number' + else + if template.is_a? Array + # ?!? + elsif template.is_a? String + if /^\d+$/.match(template) + datatype = 'number' + else + datatype = 'text' end end end @@ -152,12 +180,19 @@ module ApplicationHelper dn += "[#{a}]" end - if dataclass + if attrvalue.is_a? String + attrvalue = attrvalue.strip + end + + if dataclass and dataclass.is_a? Class items = [] - dataclass.where(uuid: attrvalue).each do |item| - items.append({name: item.uuid, uuid: item.uuid, type: dataclass.to_s}) + if attrvalue and !attrvalue.empty? + items.append({name: attrvalue, uuid: attrvalue, type: dataclass.to_s}) end - dataclass.limit(19).each do |item| + #dataclass.where(uuid: attrvalue).each do |item| + # items.append({name: item.uuid, uuid: item.uuid, type: dataclass.to_s}) + #end + dataclass.limit(10).each do |item| items.append({name: item.uuid, uuid: item.uuid, type: dataclass.to_s}) end end @@ -167,22 +202,25 @@ module ApplicationHelper "data-placement" => "bottom", "data-type" => datatype, "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-title" => "Set value for #{subattr[-1].to_s}", "data-name" => dn, - "data-value" => attrvalue, "data-pk" => "{id: \"#{object.uuid}\", key: \"#{object.class.to_s.underscore}\"}", - :class => "editable", + "data-showbuttons" => "false", + "data-value" => attrvalue, + :class => "editable #{'required' if required}", :id => id }.merge(htmloptions) - lt += raw(<") + + 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("") - -EOF -) lt end end