OSDN Git Service

a9e30545167b434f04e3177c50c6e6cae7249227
[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           extend_form_name = @item.boosters[boost_name].model_name
58           extend_form_manifest = LocalManifest.manifest.forms[extend_form_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         if boost_name = @item.class.find_boost_name(field_name)
101           extend_form_name = @item.boosters[boost_name].model_name
102           extend_form_manifest = LocalManifest.manifest.forms[extend_form_name]
103           @fields[field_name] = ExtendField.new self, field_name, field_manifest, @item.boosters[n].extend_item
104         else
105        #   @fields[field_name] = Field.new self, field_name, field_manifest
106         end
107       end
108     end
109     
110     def template_file_name
111       "extend_form"
112     end
113     
114   end
115   
116 end
117