OSDN Git Service

fix anything
[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       self.init_fields
19     end
20     
21     def each_field
22       @manifest.field_names.each do |field_name| 
23         yield field_name, @fields[field_name]
24       end
25     end
26     
27     def template_file_name
28       "form"
29     end
30     
31     def template_name
32       self.template_dir + self.template_file_name
33     end
34     
35     def fields_template_name
36       self.template_dir + 'fields'
37     end
38     
39     def image_dir
40       '/images/'
41     end
42     
43   end
44   
45   class Form < FormBase
46     attr :submit
47     
48     def initialize form_name, item, mounted, submit, operators
49       super form_name, item, mounted, operators
50       @submit = submit
51       @item.boosts 'post'
52       self.init_fields
53     end
54     
55     def init_fields
56       @manifest.each_field do |field_name, field_manifest| 
57         if boost_name = @item.class.find_boost_name(field_name)
58           extend_form_name = @item.boosters[boost_name].model_name
59           extend_form_manifest = LocalManifest.manifest.forms[extend_form_name]
60           @fields[field_name] = ExtendForm.new self, extend_form_name, @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, submit, operators
93       @parent = parent
94       super form_name, item, mounted, operators
95     end
96     
97     def init_fields
98       @manifest.each_field do |field_name, field_manifest| 
99         if boost_name = @item.class.find_boost_name(field_name)
100           extend_form_name = @item.boosters[boost_name].model_name
101           extend_form_manifest = LocalManifest.manifest.forms[extend_form_name]
102           @fields[field_name] = ExtendField.new self, field_name, field_manifest, @item.boosters[n].extend_item
103         else
104           @fields[field_name] = Field.new self, field_name, field_manifest
105         end
106       end
107     end
108     
109   end
110   
111 end
112