require_dependency "locmare/form/field"
+require_dependency "locmare/form/extend_field"
+
module Locmare
- class Form
+ class FormBase
include FormModule
- attr :form_name, :item, :mounted, :submit, :operators, :template_dir,
+ attr :form_name, :item, :mounted, :operators, :template_dir,
:fields
- def initialize form_name, item, mounted, submit, operators
+ def initialize form_name, item, mounted, operators
@form_name = form_name
@item = item
@mounted = mounted
- @submit = submit
@operators = operators
+
@manifest = LocalManifest.manifest.forms[@form_name]
@template_dir = 'templates/r/form/'
@fields = {}
- @manifest.each_field do |field_name, field_manifest|
- @fields[field_name] = Field.new self, field_name, field_manifest
- end
+ self.init_fields
end
def each_field
- @manifest.each_field do |field_name, field_manifest|
+ @manifest.field_names.each do |field_name|
yield field_name, @fields[field_name]
end
end
self.template_dir + self.template_file_name
end
+ def fields_template_name
+ self.template_dir + 'fields'
+ end
+
+ def image_dir
+ '/images/'
+ end
+
+ end
+
+ class Form < FormBase
+ attr :submit
+
+ def initialize form_name, item, mounted, submit, operators
+ super form_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
+ extend_form_manifest = LocalManifest.manifest.forms[extend_form_name]
+ @fields[field_name] = ExtendForm.new self, extend_form_name, @item, @mounted, @operators
+ else
+ @fields[field_name] = Field.new self, field_name, field_manifest
+ end
+ end
+ end
+
def submit_name
if @item.new_record?
@item.table_name + '.submit.new'
end
end
- def fields_template_name
- self.template_dir + 'fields'
+ end
+
+ class ExtendForm < FormBase
+ attr :parent
+
+ def initialize parent, form_name, item, mounted, submit, operators
+ @parent = parent
+ super form_name, item, mounted, operators
end
- def image_dir
- '/images/'
+ 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
+ extend_form_manifest = LocalManifest.manifest.forms[extend_form_name]
+ @fields[field_name] = ExtendField.new self, field_name, field_manifest, @item.boosters[n].extend_item
+ else
+ @fields[field_name] = Field.new self, field_name, field_manifest
+ end
+ end
end
end
+
end