module Locmare
class FormBase
include FormModule
- attr :manifest, :form_name, :item, :mounted, :operators, :template_dir,
+ attr :manifest, :form_name, :use_name, :item, :mounted, :operators, :template_dir,
:fields
- def initialize form_name, item, mounted, operators
- @form_name = form_name
+ def initialize form_name_with_sub_form, use_name, item, mounted, operators
+ if form_name_with_sub_form =~ /\./
+ @sub_form_names = form_name_with_sub_form.split '.'
+ @form_name = @sub_form_names.last
+ @root_form_name = @sub_form_names.shift
+ else
+ @sub_form_names = []
+ @form_name = form_name_with_sub_form
+ @root_form_name = @form_name
+ end
+ @use_name = use_name
@item = item
@mounted = mounted
@operators = operators
- @manifest = LocalManifest.manifest.forms[@form_name]
+ @manifest = LocalManifest.manifest.forms[@form_name].uses[@use_name]
@template_dir = 'templates/r/form/'
@fields = {}
end
+ def fold_extend_settings params
+ @item.class.fold_extend_settings params[@item.item_name]
+ end
+
+ def sub_form_name
+ @sub_form_names.map{|name| '[' + name + '_attributes' + ']'}.join
+ end
+
+ def form_field_name field_name
+ @root_form_name + self.sub_form_name + '[' + field_name + ']'
+ end
+
def each_field
@manifest.field_names.each do |field_name|
yield field_name, @fields[field_name]
class Form < FormBase
attr :submit
- def initialize form_name, item, mounted, submit, operators
- super form_name, item, mounted, operators
+ def initialize form_name, use_name, item, mounted, submit, operators
+ super form_name, use_name, item, mounted, operators
@submit = submit
@item.boosts 'post'
self.init_fields
end
def init_fields
- @manifest.each_field do |field_name, field_manifest|
- if boost_name = @item.class.find_boost_name(field_name)
- extend_form_name = @item.boosters[boost_name].model_name
+ @manifest.each_field do |field_name, field_manifest|
+ boost_name = @item.class.find_boost_name(field_name)
+ extend_model = if boost_name
+ @item.boosters[boost_name].extend_model
+ else
+ nil
+ end
+ if boost_name and extend_model # field is extend setting AND template has a extend model
+ extend_form_name = @item.boosters[boost_name].item_name
extend_item = @item.boosters[boost_name].extend_item
- @fields[field_name] = ExtendForm.new self, extend_form_name, extend_item, @mounted, @operators, field_name
+ @fields[field_name] = ExtendForm.new self, extend_form_name, @use_name, extend_item, @mounted, @operators, field_name
else
@fields[field_name] = Field.new self, field_name, field_manifest
end
include FieldModule
attr :parent, :field_name, :field, :label
- def initialize parent, form_name, item, mounted, operators, field_name
+ def initialize parent, form_name, use_name, item, mounted, operators, field_name
@parent = parent
@field_name = field_name
- super form_name, item, mounted, operators
+ super form_name, use_name, item, mounted, operators
@field = Field.new @parent, @field_name, @parent.manifest.fields[@field_name]
@label = @field.label
self.init_fields
end
end
+ def form_field_name extend_field_name
+ # parent is field
+ @parent.form_field_name(@field_name) + '[' + extend_field_name + ']'
+ end
+
def template_file_name
"extend_form"
end