OSDN Git Service

Merge branch 'v06sheet' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v06sheet
[pettanr/pettanr.git] / lib / element.rb
1 module Element
2   def self.included(base)
3     base.extend(ClassMethods)
4     base.__send__ :include, InstanceMethods
5   end
6   
7   module ClassMethods
8     def colum_structures
9       raise
10     end
11     
12     def list_opt_for_panel
13       {}
14     end
15     
16     def show_opt_for_panel
17       {}
18     end
19     
20     def json_opt_for_panel
21       {}
22     end
23     
24     def path_name with_engine = false
25       self.to_s.tableize
26     end
27     
28   end
29   
30   module InstanceMethods
31     private
32     
33     public
34     
35     def has_picture?
36       false
37     end
38     
39     def has_part?
40       false
41     end
42     
43     def parts
44       @parts ||= []
45     end
46     
47     def has_helper? column_name
48       self.class.colum_structures[column_name] and self.class.colum_structures[column_name][:helper]
49     end
50     
51     def element_name
52       self.class.to_s.underscore
53     end
54     
55     def extend_column
56       nil
57     end
58     
59     def extend_element_name
60       self.extend_column ? self.attributes[extend_column] : self.element_name
61     end
62     
63     def find_configurations hash, key
64        if hash[key].is_a? String
65          self.find_configurations hash, hash[key]
66        else
67          return hash[key]
68        end
69     end
70     
71     def new_index
72       @new_index
73     end
74     
75     def new_index= v
76       @new_index = v
77     end
78     
79     def new_panel
80       @new_panel
81     end
82     
83     def new_panel= v
84       @new_panel = v
85     end
86     
87     def get_panel
88       self.panel || @new_panel
89     end
90     
91     def tag_id c = nil
92       'panel' + self.tag_panel_id + self.tag_element_type + self.tag_element_id + c.to_s
93     end
94     
95     def field_tag_id f
96       self.tag_id + f.to_s
97     end
98     
99     def tag_panel_id
100       self.get_panel.new_record? ? '0' : self.get_panel.id.to_s
101     end
102     
103     def tag_element_id
104       self.new_record? ? '0' : self.id.to_s
105     end
106     
107     def tag_element_type
108       raise
109     end
110     
111     def tag_new_index
112       self.new_index.to_s
113     end
114     
115     def path_name with_engine = false
116       self.class.path_name(with_engine)
117     end
118     
119     def form_template with_engine = false
120       self.path_name(with_engine) + '/form'
121     end
122     
123     def scenario_template with_engine = false
124       self.path_name(with_engine) + '/scenario'
125     end
126     
127     def element_face_template with_engine = false
128       self.path_name(with_engine) + '/element_face'
129     end
130     
131     def form_helper_template(colum_name)
132       self.class.colum_structures[colum_name][:helper]
133     end
134     
135     def tag_attributes column = nil, opt = {}
136       {
137         :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, 
138         :element_id => self.tag_element_id, :element_type => self.tag_element_type
139       }.merge(opt)
140     end
141     
142     def field_tag_attributes column, no_attr, opt = {}
143       self.tag_attributes(column).merge(
144         {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr}
145       ).merge(opt)
146     end
147     
148     #render element by body
149     def any_tag_attributes name = nil, opt = {}
150       r = self.tag_attributes(name)
151       r.merge!(
152         {:new_index => self.tag_new_index}
153       ) if self.new_index
154       r.merge(opt)
155     end
156     
157     def select_tag_attributes(selected, column, no_attr)
158       [
159         :last, :first, 
160         {:html => {:selected => selected}}, 
161         self.field_tag_attributes(column, no_attr)
162       ]
163     end
164     
165     def tag_attr column = nil, opt = {}
166       self.tag_attributes(column, opt).to_attr
167     end
168     
169     def field_tag_attr column, no_attr, opt = {}
170       self.field_tag_attributes(column, no_attr, opt).to_attr
171     end
172     
173     def any_tag_attr name = nil, opt = {}
174       self.any_tag_attributes(name, opt).to_attr
175     end
176     
177   end
178 end
179