OSDN Git Service

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