Sha256: c163b52d769274446fe105440a7077b15ed2c78f2c1b6c35d2b9e557b5b1220c

Contents?: true

Size: 1.92 KB

Versions: 1

Compression:

Stored size: 1.92 KB

Contents

class StandardForm < Amrita2::Macro::Base
  TemplateText = <<-END_OF_TEMPLATE
    <<fieldset<
      <<legend:title>>
      <%%= form_tag(<%= $_[:url].inspect %>) %%>
        <<:header>>
        <<p:items<
          <<label:label|Attr[:for]<
            <<:text>>:
          <<:input>>
        <<:fotter>>
      <%%= '</form>' %%>

  END_OF_TEMPLATE

  def macro_data(element)
    root = element.as_amrita_dictionary
    record = root[:record].intern
    title = element.search("form_title").first
    url = element.search("url").first
    header = element.search("header").first
    items = element.search("tr").collect do |tr|
      tr_to_data(record, tr)
    end
    fotter = element.search("fotter").first

    ret = {
      :title => title.contents,
      :record => record,
      :url => url ? url.as_amrita_dictionary : {},
      :header => header.contents,
      :items => items,
      :fotter => fotter.contents
    }
    ret
  end

  def tr_to_data(record, tr)
    label = tr.search("th").first
    td = tr.search("td").first
    input = td_to_input(record, td) || { }
    {
      :label => {
        :for => "#{record}_#{input[:field_id]}",
        :text => label.contents.strip,
      },
      :input => input[:input]
    }
  end

  def td_to_input(record, td)
    x = td.children.find { |c| c.kind_of?(Hpricot::Elem) }
    raise "input was not found in <td>" unless x
    attr = x.as_amrita_dictionary
    field_id = attr.delete(:id)
    input =  case x.name
             when "text"
               "<%= text_field #{record.to_s.inspect}, #{field_id.to_s.inspect}, #{attr.inspect} %>"
             when "text_area"
               "<%= text_area #{record.to_s.inspect}, #{field_id.to_s.inspect}, #{attr.inspect} %>"
             when "field"
               x.contents
             else
               raise "unknown input field #{x.name} "
             end
    {
      :input => Amrita2::SanitizedString[input],
      :field_id => field_id
    }
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
amrita2-2.0.0 sample/depot/app/helpers/standard_form.rb