OSDN Git Service

e
[pettanr/pettanr.git] / app / models / ground_color.rb
1 class GroundColor < Peta::Element
2   load_manifest
3   include ElementInspire
4   belongs_to :panel
5   belongs_to :color
6   
7   validates :panel_id, :numericality => {:allow_blank => true}
8   validates :code, :presence => true, :numericality => {:greater_than_or_equal_to => 0, :less_than => 0x1000000}
9   validates :orientation, :presence => true, :numericality => true, :inclusion => {:in => 0..1}
10   validates :xy, :numericality => {:greater_than_or_equal_to => 0, :allow_blank => true}
11   validates :wh, :numericality => {:greater_than_or_equal_to => 0, :allow_blank => true}
12   validates :z, :presence => true, :numericality => {:greater_than => 0}
13   validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
14   
15   def self.colum_structures
16     @@colum_structures ||= {
17       :code => {
18         :helper => 'panels/color_helper'
19       }
20     }
21   end
22   
23   def self.list_opt_for_panel
24     {
25       :ground_colors => {
26       }
27     }
28   end
29   
30   def self.show_opt_for_panel
31     {
32       :ground_colors => {
33       }
34     }
35   end
36   
37   def self.json_opt_for_panel
38     {
39     }
40   end
41   
42   def self.has_picture?
43     false
44   end
45   
46   def supply_default
47     self.code ||= 0
48     if self.panel
49       self.t = self.panel.new_t 
50       self.z = self.panel.new_z 
51     end
52   end
53   
54   def overwrite pid
55     self.panel_id = pid
56   end
57   
58   def visible? operators
59     return false unless super
60     self.owner_model.visible? operators
61   end
62   
63   def div_offset
64     xy ? xy : 0
65   end
66   
67   def div_size
68     wh ? wh : 100 - self.div_offset
69   end
70   
71   def div_x
72     if self.orientation == 0
73       0
74     else
75       self.div_offset
76     end
77   end
78   
79   def div_y
80     if self.orientation == 0
81       self.div_offset
82     else
83       0
84     end
85   end
86   
87   def div_width
88     if self.orientation == 0
89       100
90     else
91       self.div_size
92     end
93   end
94   
95   def div_height 
96     if self.orientation == 0
97       self.div_size
98     else
99       100
100     end
101   end
102   
103   def style spot = nil, opacity = 20
104     r = {
105       'position' => 'absolute', 'z-index' => self.z, 
106       'top' => self.div_y.to_s + '%', 'left' => self.div_x.to_s + '%', 
107       'width' => self.div_width.to_s + '%', 'height' => self.div_height.to_s + '%', 
108       'background-color' => '#' + format("%06x", self.code)
109     }
110     self.merge_opacity(r, opacity) if spot and spot != self
111     r
112   end
113   
114   def boost
115   end
116   
117   def tag_element_type
118     'ground_color'
119   end
120   
121   def self.list_where
122     'panels.publish > 0'
123   end
124   
125   def self.list_order
126     'ground_colors.updated_at desc'
127   end
128   
129   def self.list_opt
130     {:panel => {:author => {}} }
131   end
132   
133   def self.list_json_opt
134     {:include => {:panel => {:include => {:author => {}}} }}
135   end
136   
137   def self.show_opt
138     {:include => {:panel => {:author => {}} }}
139   end
140   
141   def self.show_json_opt
142     {:include => {:panel => {:include => {:author => {}}} }}
143   end
144   
145   def store operators
146     if self.new_record?
147       self.panel.ground_colors.build(self.attributes)
148     else
149       self.panel.ground_colors.each do |ground_color|
150         next unless ground_color == self
151         attr = self.attributes
152         attr.delete 'id'
153         ground_color.attributes = attr
154         break
155       end
156     end
157     self.panel.store({}, operators)
158   end
159   
160   def remove operators
161     self.panel.remove_element(self, operators)
162   end
163   
164   def scenario
165     if caption.blank?
166       ''
167     else
168       '<p>' + ERB::Util.html_escape(self.caption) + '</p>'
169     end
170   end
171   
172   def plain_scenario
173     if caption.blank?
174       ''
175     else
176       self.caption + "\n"
177     end
178   end
179   
180 end