OSDN Git Service

fix form
[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 :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         p [field_name]
58           extend_form_name = @item.boosters[boost_name].model_name
59           extend_item = @item.boosters[boost_name].extend_item
60           @fields[field_name] = ExtendForm.new self, extend_form_name, extend_item, @mounted, @operators
61         else
62           @fields[field_name] = Field.new self, field_name, field_manifest
63         end
64       end
65     end
66     
67     def submit_name
68       if @item.new_record?
69         @item.table_name + '.submit.new'
70       else
71         @item.table_name + '.submit.edit'
72       end
73     end
74     
75     def submit_template_dir
76       self.template_dir + 'submit/'
77     end
78     
79     def submit_template_name
80       if @submit
81         self.submit_template_dir + 'submit'
82       else
83         self.submit_template_dir + 'none'
84       end
85     end
86     
87   end
88   
89   class ExtendForm < FormBase
90     attr :parent
91     
92     def initialize parent, form_name, item, mounted, operators
93       @parent = parent
94       super form_name, item, mounted, operators
95       self.init_fields
96     end
97     
98     def init_fields
99       @manifest.each_field do |field_name, field_manifest| 
100         @fields[field_name] = ExtendField.new self, field_name, field_manifest
101       end
102     end
103     
104     def template_file_name
105       "extend_form"
106     end
107     
108     def template_option
109       {:form=> self}
110     end
111     
112   end
113   
114 end
115