OSDN Git Service

6a692293a896f3fba179ed2edf485717f22b634c
[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       self.__send__ self.class.root_model.item_name
37     end
38     
39     def visible? operators
40       return false unless super
41       self.root.visible? operators
42     end
43     
44     def self.list_opt_for_panel
45       {}
46     end
47     
48     def self.show_opt_for_panel
49       {}
50     end
51     
52     def self.json_opt_for_panel
53       {}
54     end
55     
56     def self.panelize elements_attributes
57       elements_attributes = [elements_attributes] unless elements_attributes.is_a?(Array)
58       hash = {}
59       index = 0
60       elements_attributes.each do |element_attributes|
61         hash[self.to_s.tableize + '_attributes'] ||= {}
62         n = if element_attributes['id']
63           element_attributes['id'].to_s
64         else
65           index += 1
66           'new' + index.to_s 
67         end
68         hash[self.to_s.tableize + '_attributes'][n] = element_attributes
69       end
70       hash
71     end
72     
73     def has_picture?
74       false
75     end
76     
77     def has_part?
78       false
79     end
80     
81     def parts
82       @parts ||= []
83     end
84     
85     def extend_column
86       nil
87     end
88     
89     def extend_element_name
90       self.extend_column ? self.attributes[extend_column] : self.element_name
91     end
92     
93     def scenario_template with_engine = false
94       self.path_name(with_engine) + '/scenario'
95     end
96     
97     def element_face_template with_engine = false
98       self.path_name(with_engine) + '/element_face'
99     end
100     
101     def tag_attributes column = nil, opt = {}
102       r = super
103       r.merge({'data-parent_dom_id' => self.parent.dom_item_id}) if self.editize?
104       r
105     end
106     
107     def merge_opacity s, opacity
108       s.merge({
109         'opacity' => opacity.to_f/100, 
110         'filter' => "alpha(opacity=#{opacity})"
111       })
112     end
113     
114     def copy_attributes opt = {}
115       r = self.attributes
116       r.delete 'id'
117     r.delete 'panel_id'
118       r.delete 't' unless opt[:all]
119       r.delete 'z' unless opt[:all]
120       r.delete 'created_at'
121       r.delete 'updated_at'
122       r
123     end
124     
125   end
126 end
127