OSDN Git Service

fix:server
[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 has_picture?
71       false
72     end
73     
74     def has_part?
75       false
76     end
77     
78     def parent_key
79       self.class.parent_key
80     end
81     
82     def parts
83       @parts ||= []
84     end
85     
86     def extend_column
87       nil
88     end
89     
90     def extend_element_name
91       self.extend_column ? self.attributes[extend_column] : self.element_name
92     end
93     
94     def scenario_template with_engine = false
95       self.path_name(with_engine) + '/scenario'
96     end
97     
98     def element_face_template with_engine = false
99       self.path_name(with_engine) + '/element_face'
100     end
101     
102     def tag_attributes column = nil, opt = {}
103       r = super
104       r.merge({'data-parent_dom_id' => self.parent.dom_item_id}) if self.editize?
105       r
106     end
107     
108     def merge_opacity s, opacity
109       s.merge({
110         'opacity' => opacity.to_f/100, 
111         'filter' => "alpha(opacity=#{opacity})"
112       })
113     end
114     
115     def copy_attributes opt = {}
116       r = self.attributes
117       r.delete 'id'
118       r.delete self.parent_key
119       r.delete 't' unless opt[:all]  # no problem at balloon, speech
120       r.delete 'z' unless opt[:all]  # no problem at balloon, speech
121       r.delete 'created_at'
122       r.delete 'updated_at'
123       r
124     end
125     
126   end
127 end
128