OSDN Git Service

add folder
[pettanr/pettanr.git] / lib / locmare / form.rb
1 require_dependency "locmare/form/field"
2 require_dependency "locmare/form/extend_field"
3
4 module Locmare
5   class FormBase
6     include FormModule
7     attr :manifest, :form_name, :item, :mounted, :operators, :template_dir, 
8       :fields
9     def initialize form_name, item, mounted, operators
10       @form_name = form_name
11       @item = item
12       @mounted = mounted
13       @operators = operators
14       
15       @manifest = LocalManifest.manifest.forms[@form_name]
16       @template_dir = 'templates/r/form/'
17       @fields = {}
18     end
19     
20     def each_field
21       @manifest.field_names.each do |field_name| 
22         yield field_name, @fields[field_name]
23       end
24     end
25     
26     def template_file_name
27       "form"
28     end
29     
30     def template_name
31       self.template_dir + self.template_file_name
32     end
33     
34     def fields_template_name
35       self.template_dir + 'fields'
36     end
37     
38     def image_dir
39       '/images/'
40     end
41     
42   end
43   
44   class Form < FormBase
45     attr :submit
46     
47     def initialize form_name, item, mounted, submit, operators
48       super form_name, item, mounted, operators
49       @submit = submit
50       @item.boosts 'post'
51       self.init_fields
52     end
53     
54     def init_fields
55       @manifest.each_field do |field_name, field_manifest| 
56         if boost_name = @item.class.find_boost_name(field_name)
57           extend_form_name = @item.boosters[boost_name].model_name
58           extend_item = @item.boosters[boost_name].extend_item
59           @fields[field_name] = ExtendForm.new self, extend_form_name, extend_item, @mounted, @operators, field_name
60         else
61           @fields[field_name] = Field.new self, field_name, field_manifest
62         end
63       end
64     end
65     
66     def submit_name
67       if @item.new_record?
68         @item.table_name + '.submit.new'
69       else
70         @item.table_name + '.submit.edit'
71       end
72     end
73     
74     def submit_template_dir
75       self.template_dir + 'submit/'
76     end
77     
78     def submit_template_name
79       if @submit
80         self.submit_template_dir + 'submit'
81       else
82         self.submit_template_dir + 'none'
83       end
84     end
85     
86   end
87   
88   class ExtendForm < FormBase
89     include FieldModule
90     attr :parent, :field_name, :field, :label
91     
92     def initialize parent, form_name, item, mounted, operators, field_name
93       @parent = parent
94       @field_name = field_name
95       super form_name, item, mounted, operators
96       @field = Field.new @parent, @field_name, @parent.manifest.fields[@field_name]
97       @label = @field.label
98       self.init_fields
99     end
100     
101     def init_fields
102       @manifest.each_field do |field_name, field_manifest| 
103         @fields[field_name] = ExtendField.new self, field_name, field_manifest
104       end
105     end
106     
107     def template_file_name
108       "extend_form"
109     end
110     
111     def template_option
112       {:form=> self}
113     end
114     
115   end
116   
117 end
118