OSDN Git Service

element
[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 opt_div_style spot = nil, opacity = 20
104     o = (spot and spot != self) ? "opacity: #{opacity.to_f/100}; filter:alpha(opacity=#{opacity});" : ''
105     "position: absolute; left:#{self.div_x}%; top:#{self.div_y}%; width:#{self.div_width}%; height:#{self.div_height}%; z-index:#{self.z}; background-color:##{format("%06x", self.code)}; #{o}"
106   end
107   
108   def boost
109   end
110   
111   def tag_element_type
112     'ground_color'
113   end
114   
115   def self.list_where
116     'panels.publish > 0'
117   end
118   
119   def self.list_order
120     'ground_colors.updated_at desc'
121   end
122   
123   def self.list_opt
124     {:panel => {:author => {}} }
125   end
126   
127   def self.list_json_opt
128     {:include => {:panel => {:include => {:author => {}}} }}
129   end
130   
131   def self.show_opt
132     {:include => {:panel => {:author => {}} }}
133   end
134   
135   def self.show_json_opt
136     {:include => {:panel => {:include => {:author => {}}} }}
137   end
138   
139   def store operators
140     if self.new_record?
141       self.panel.ground_colors.build(self.attributes)
142     else
143       self.panel.ground_colors.each do |ground_color|
144         next unless ground_color == self
145         attr = self.attributes
146         attr.delete 'id'
147         ground_color.attributes = attr
148         break
149       end
150     end
151     self.panel.store({}, operators)
152   end
153   
154   def remove operators
155     self.panel.remove_element(self, operators)
156   end
157   
158   def scenario
159     if caption.blank?
160       ''
161     else
162       '<p>' + ERB::Util.html_escape(self.caption) + '</p>'
163     end
164   end
165   
166   def plain_scenario
167     if caption.blank?
168       ''
169     else
170       self.caption + "\n"
171     end
172   end
173   
174 end