OSDN Git Service

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