OSDN Git Service

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