OSDN Git Service

d666e7147c42e3237e196e838190a3c4647081e1
[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       self.my_manifest.associations.each_parent_model do |parent_model|
11         define_singleton_method("parent_model") do 
12           parent_model
13         end
14       end
15       # Instance Methods
16     end
17     
18     def self.element?
19       true
20     end
21     
22     def self.root_model
23       if self.parent_model
24         self.parent_model.root_model
25       else
26         self
27       end
28     end
29     
30     def self.list_opt_for_panel
31       {}
32     end
33     
34     def self.show_opt_for_panel
35       {}
36     end
37     
38     def self.json_opt_for_panel
39       {}
40     end
41     
42     def self.panelize elements_attributes
43       elements_attributes = [elements_attributes] unless elements_attributes.is_a?(Array)
44       hash = {}
45       index = 0
46       elements_attributes.each do |element_attributes|
47         hash[self.to_s.tableize + '_attributes'] ||= {}
48         n = if element_attributes['id']
49           element_attributes['id'].to_s
50         else
51           index += 1
52           'new' + index.to_s 
53         end
54         hash[self.to_s.tableize + '_attributes'][n] = element_attributes
55       end
56       hash
57     end
58     
59     def has_picture?
60       false
61     end
62     
63     def has_part?
64       false
65     end
66     
67     def parts
68       @parts ||= []
69     end
70     
71     def extend_column
72       nil
73     end
74     
75     def extend_element_name
76       self.extend_column ? self.attributes[extend_column] : self.element_name
77     end
78     
79     def scenario_template with_engine = false
80       self.path_name(with_engine) + '/scenario'
81     end
82     
83     def element_face_template with_engine = false
84       self.path_name(with_engine) + '/element_face'
85     end
86     
87     def tag_attributes column = nil, opt = {}
88       r = super
89       r.merge({'data-parent_dom_id' => self.parent.dom_item_id}) if self.editize?
90       r
91     end
92     
93     def merge_opacity s, opacity
94       s.merge({
95         'opacity' => opacity.to_f/100, 
96         'filter' => "alpha(opacity=#{opacity})"
97       })
98     end
99     
100     def copy_attributes opt = {}
101       r = self.attributes
102       r.delete 'id'
103     r.delete 'panel_id'
104       r.delete 't' unless opt[:all]
105       r.delete 'z' unless opt[:all]
106       r.delete 'created_at'
107       r.delete 'updated_at'
108       r
109     end
110     
111   end
112 end
113