OSDN Git Service

fix form extend
[pettanr/pettanr.git] / lib / peta / element.rb
1 module Peta
2   class Element < ElementNestableContent
3     self.abstract_class = true
4     
5     # Dynamic ClassMethods
6     
7     def self.load_manifest
8       super
9       # Class Methods
10       pm = Manifest.manifest.models[self.my_peta.parent_model_name].classify
11       define_singleton_method("parent_model") do 
12         pm
13       end
14       # Instance Methods
15     end
16     
17     def self.element?
18       true
19     end
20     
21     def self.root_model
22       if self.parent_model
23         if self.parent_model.element?
24           self.parent_model.root_model
25         else
26           self.parent_model
27         end
28       else
29         self
30       end
31     end
32     
33     # Instance Methods
34     
35     def root
36       pm = self.__send__ self.class.parent_model.item_name
37       if pm.class.element?
38         pm.root
39       else
40         pm
41       end
42     end
43     
44     def own? operators
45       self.root.own? operators
46     end
47     
48     def visible? operators
49       return false unless self.user_visible? operators
50       self.root.visible? operators
51     end
52     
53     def self.list_opt_for_panel
54       {}
55     end
56     
57     def self.show_opt_for_panel
58       {}
59     end
60     
61     def self.json_opt_for_panel
62       {}
63     end
64     
65     def self.panelize elements_attributes
66       elements_attributes = [elements_attributes] unless elements_attributes.is_a?(Array)
67       hash = {}
68       index = 0
69       elements_attributes.each do |element_attributes|
70         hash[self.to_s.tableize + '_attributes'] ||= {}
71         n = if element_attributes['id']
72           element_attributes['id'].to_s
73         else
74           index += 1
75           'new' + index.to_s 
76         end
77         hash[self.to_s.tableize + '_attributes'][n] = element_attributes
78       end
79       hash
80     end
81     
82     def has_picture?
83       false
84     end
85     
86     def has_part?
87       false
88     end
89     
90     def parts
91       @parts ||= []
92     end
93     
94     def extend_column
95       nil
96     end
97     
98     def extend_element_name
99       self.extend_column ? self.attributes[extend_column] : self.element_name
100     end
101     
102     def scenario_template with_engine = false
103       self.path_name(with_engine) + '/scenario'
104     end
105     
106     def element_face_template with_engine = false
107       self.path_name(with_engine) + '/element_face'
108     end
109     
110     def tag_attributes column = nil, opt = {}
111       r = super
112       r.merge({'data-parent_dom_id' => self.parent.dom_item_id}) if self.editize?
113       r
114     end
115     
116     def merge_opacity s, opacity
117       s.merge({
118         'opacity' => opacity.to_f/100, 
119         'filter' => "alpha(opacity=#{opacity})"
120       })
121     end
122     
123     def copy_attributes opt = {}
124       r = self.attributes
125       r.delete 'id'
126     r.delete 'panel_id'
127       r.delete 't' unless opt[:all]
128       r.delete 'z' unless opt[:all]
129       r.delete 'created_at'
130       r.delete 'updated_at'
131       r
132     end
133     
134   end
135 end
136