Commit 6315c4a687f09bb86fac90a0fef64b663ba31ffe
1 parent
ec28af31
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
refactoring preview images to works with plugins and themes
Showing
6 changed files
with
248 additions
and
21 deletions
Show diff stats
app/helpers/box_organizer_helper.rb
... | ... | @@ -23,11 +23,40 @@ module BoxOrganizerHelper |
23 | 23 | end |
24 | 24 | |
25 | 25 | def display_previews(block) |
26 | -# def self.previews_path | |
27 | -# previews = Dir.glob(File.join(images_filesystem_path, 'previews/*')).map do |path| | |
28 | -# File.join(images_base_url_path, 'previews', File.basename(path)) | |
26 | + images_path = nil | |
27 | + plugin = @plugins.fetch_first_plugin(:has_block?, block) | |
28 | + | |
29 | + theme = Theme.new(environment.theme) # remove this | |
30 | + | |
31 | +# images_path = Dir.glob(File.join(theme.public_path, 'images', block.previews_path, '*')) | |
32 | + | |
33 | + | |
34 | + images_path = Dir.glob(File.join(theme.filesystem_path, 'images', block.preview_path, '*')) | |
35 | + images_path = images_path.map{|path| path.gsub(theme.filesystem_path, theme.public_path) } unless images_path.empty? | |
36 | + | |
37 | + images_path = Dir.glob(File.join(Rails.root, 'public', plugin.public_path, 'images', block.preview_path, '*')) if plugin && images_path.empty? | |
38 | + images_path = images_path.map{|path| path.gsub(File.join(Rails.root, 'public'), '') } unless images_path.empty? | |
39 | + | |
40 | + images_path = Dir.glob(File.join(Rails.root, 'public', 'images', block.preview_path, '*')) if images_path.empty? | |
41 | + images_path = images_path.map{|path| path.gsub(File.join(Rails.root, 'public', 'images'), '') } unless images_path.empty? | |
42 | + | |
43 | + images_path = 1.upto(3).map{block.default_preview_path} if images_path.empty? | |
44 | + | |
45 | +# if File.exists?(File.join(theme.filesystem_path, 'images', block.previews_path)) | |
46 | +# images_path = Dir.glob(File.join(theme.public_path, 'images', block.previews_path, '*')) | |
47 | +# elsif plugin && File.exists?(File.join(Rails.root, 'public', plugin.public_path, 'images', block.previews_path)) | |
48 | +# images_path = Dir.glob(File.join('/', plugin.public_path, 'images', block.previews_path, '*')) | |
49 | +# elsif File.exists?(File.join(Rails.root, 'public', 'images', block.previews_path)) | |
50 | +# images_path = block.previews_path | |
51 | +# else | |
52 | +# images_path = block.default_previews_path | |
29 | 53 | # end |
30 | - '' | |
54 | + | |
55 | + content_tag(:ul, | |
56 | + images_path.map do |preview| | |
57 | + content_tag(:li, image_tag(preview, height: '240', width: '384', alt: '')) | |
58 | + end.join("\n") | |
59 | + ) | |
31 | 60 | end |
32 | 61 | |
33 | 62 | def icon_selector(icon = 'no-ico') | ... | ... |
app/helpers/layout_helper.rb
... | ... | @@ -27,6 +27,7 @@ module LayoutHelper |
27 | 27 | 'thickbox', |
28 | 28 | 'lightbox', |
29 | 29 | 'colorbox', |
30 | + 'block_store', | |
30 | 31 | pngfix_stylesheet_path, |
31 | 32 | ] + tokeninput_stylesheets |
32 | 33 | plugins_stylesheets = @plugins.select(&:stylesheet?).map { |plugin| plugin.class.public_path('style.css') } | ... | ... |
app/models/block.rb
... | ... | @@ -247,9 +247,9 @@ class Block < ActiveRecord::Base |
247 | 247 | duplicated_block |
248 | 248 | end |
249 | 249 | |
250 | - def self.previews_path | |
250 | + def self.preview_path | |
251 | 251 | base_name = self.name.split('::').last.underscore |
252 | - Dir.glob(File.join('blocks', base_name,'previews/*')) | |
252 | + File.join('blocks', base_name,'previews') | |
253 | 253 | end |
254 | 254 | |
255 | 255 | def self.icon_path |
... | ... | @@ -265,5 +265,4 @@ class Block < ActiveRecord::Base |
265 | 265 | "block_preview.png" |
266 | 266 | end |
267 | 267 | |
268 | - | |
269 | 268 | end | ... | ... |
app/views/box_organizer/show_block_type_info.html.erb
1 | 1 | <div id="block-info-container"> |
2 | 2 | |
3 | - <div id="bs-block-header"> | |
3 | + <div id="block-info-header"> | |
4 | 4 | <%= display_icon(@block) %> |
5 | 5 | <h1><%= @block.pretty_name %></h1> |
6 | 6 | <p><%= @block.short_description %></p> |
... | ... | @@ -8,15 +8,7 @@ |
8 | 8 | |
9 | 9 | <div id="block-info-images"> |
10 | 10 | <div style="white-space: nowrap;"> |
11 | - <% if @block.previews_path.empty? %> | |
12 | - <% for i in 0..2 %> | |
13 | - <%= image_tag(@block.default_preview, height: '240', width: '384', alt: '') %> | |
14 | - <% end %> | |
15 | - <% else %> | |
16 | - <% @block.previews_path.each do |preview| %> | |
17 | - <%= image_tag(preview, height: '240', width: '384', alt: '') %> | |
18 | - <% end %> | |
19 | - <% end %> | |
11 | + <%= display_previews(@block) %> | |
20 | 12 | </div> |
21 | 13 | </div> |
22 | 14 | ... | ... |
public/stylesheets/block_store.css
... | ... | @@ -82,17 +82,26 @@ r, |
82 | 82 | } |
83 | 83 | |
84 | 84 | #block-info-container #block-info-header { |
85 | - display: inline-block; | |
85 | + float: left; | |
86 | +} | |
87 | + | |
88 | +#block-info-container #block-info-header .block-type-icon{ | |
86 | 89 | float: left; |
87 | 90 | } |
88 | 91 | |
89 | 92 | #block-info-container #block-info-header h1 { |
90 | - display: inline-block; | |
93 | + float: left; | |
91 | 94 | margin: 0; |
92 | - font-weight: normal; | |
93 | - font-family: "Arial Black", Liberation Sans, Arial, sans-serif; | |
95 | + font-weight: normal; | |
96 | + font-family: "Arial Black", Liberation Sans, Arial, sans-serif; | |
97 | + margin-left: 5px; | |
98 | +} | |
99 | + | |
100 | +#block-info-container #block-info-header p{ | |
101 | + margin-left: 55px; | |
94 | 102 | } |
95 | 103 | |
104 | + | |
96 | 105 | #block-info-container h2 { |
97 | 106 | margin: 0; |
98 | 107 | margin-top: 10px; |
... | ... | @@ -110,6 +119,19 @@ r, |
110 | 119 | padding-top: 15px; |
111 | 120 | } |
112 | 121 | |
122 | +#block-info-images ul{ | |
123 | + margin: 0px; | |
124 | + padding: 0px; | |
125 | +} | |
126 | +#block-info-images li{ | |
127 | + list-style: none; | |
128 | + display: inline; | |
129 | + | |
130 | +} | |
131 | + | |
132 | + | |
113 | 133 | #block-info-description { |
114 | 134 | margin-top: 20px; |
115 | 135 | } |
136 | + | |
137 | + | ... | ... |
test/unit/box_organizer_helper_test.rb
... | ... | @@ -131,4 +131,188 @@ class BoxOrganizerHelperTest < ActionView::TestCase |
131 | 131 | assert_match 'plugins/some/images/blocks/some_block/icon.png', display_icon(block) |
132 | 132 | end |
133 | 133 | |
134 | +########################################## | |
135 | + | |
136 | + should 'display the default preview for block without previews images' do | |
137 | + class SomeBlock < Block; end | |
138 | + block = SomeBlock | |
139 | + @plugins = mock | |
140 | + @plugins.stubs(:fetch_first_plugin).with(:has_block?, block).returns(nil) | |
141 | + | |
142 | + doc = HTML::Document.new display_previews(block) | |
143 | + assert_select doc.root, 'li' do |elements| | |
144 | + assert_match /img.* src="\/images\/block_preview.png.*"/, elements[0].to_s | |
145 | + assert_match /img.* src="\/images\/block_preview.png.*"/, elements[1].to_s | |
146 | + assert_match /img.* src="\/images\/block_preview.png.*"/, elements[2].to_s | |
147 | + end | |
148 | + end | |
149 | + | |
150 | + should 'display the previews of block' do | |
151 | + class SomeBlock < Block; end | |
152 | + block = SomeBlock | |
153 | + @plugins = mock | |
154 | + @plugins.stubs(:fetch_first_plugin).with(:has_block?, block).returns(nil) | |
155 | + | |
156 | + Dir.stubs(:glob).returns([]) | |
157 | + base_path = File.join(Rails.root, 'public', 'images', '/blocks/some_block/previews/') | |
158 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
159 | + doc = HTML::Document.new display_previews(block) | |
160 | + assert_select doc.root, 'li' do |elements| | |
161 | + assert_match /img.* src="\/blocks\/some_block\/previews\/p1.png"/, elements[0].to_s | |
162 | + assert_match /img.* src="\/blocks\/some_block\/previews\/p2.png"/, elements[1].to_s | |
163 | + end | |
164 | + end | |
165 | + | |
166 | + should 'display the plugin preview images of block' do | |
167 | + class SomeBlock < Block; end | |
168 | + block = SomeBlock | |
169 | + class SomePlugin < Noosfero::Plugin; end | |
170 | + SomePlugin.stubs(:name).returns('SomePlugin') | |
171 | + @plugins = mock | |
172 | + @plugins.stubs(:fetch_first_plugin).with(:has_block?, block).returns(SomePlugin) | |
173 | + | |
174 | + | |
175 | + Dir.stubs(:glob).returns([]) | |
176 | + base_path = File.join(Rails.root, 'public', 'plugins/some/', 'images', '/blocks/some_block/previews/') | |
177 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
178 | + doc = HTML::Document.new display_previews(block) | |
179 | + assert_select doc.root, 'li' do |elements| | |
180 | + assert_match /img.* src="\/plugins\/some\/images\/blocks\/some_block\/previews\/p1.png"/, elements[0].to_s | |
181 | + assert_match /img.* src="\/plugins\/some\/images\/blocks\/some_block\/previews\/p2.png"/, elements[1].to_s | |
182 | + end | |
183 | + | |
184 | + end | |
185 | + | |
186 | + should 'display the theme previews of block' do | |
187 | + class SomeBlock < Block; end | |
188 | + block = SomeBlock | |
189 | + | |
190 | + @plugins = mock | |
191 | + @plugins.stubs(:fetch_first_plugin).with(:has_block?, block).returns(nil) | |
192 | + | |
193 | + @environment = mock | |
194 | + @environment.stubs(:theme).returns('some_theme') | |
195 | + | |
196 | + | |
197 | + Dir.stubs(:glob).returns([]) | |
198 | + base_path = File.join(Rails.root, 'public', 'designs/themes/some_theme/', 'images', '/blocks/some_block/previews/') | |
199 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
200 | + doc = HTML::Document.new display_previews(block) | |
201 | + assert_select doc.root, 'li' do |elements| | |
202 | + assert_match /img.* src="\/designs\/themes\/some_theme\/images\/blocks\/some_block\/previews\/p1.png"/, elements[0].to_s | |
203 | + assert_match /img.* src="\/designs\/themes\/some_theme\/images\/blocks\/some_block\/previews\/p2.png"/, elements[1].to_s | |
204 | + end | |
205 | + | |
206 | + end | |
207 | + | |
208 | + should 'display the theme preview images of block instead of block preview images' do | |
209 | + class SomeBlock < Block; end | |
210 | + block = SomeBlock | |
211 | + | |
212 | + @plugins = mock | |
213 | + @plugins.stubs(:fetch_first_plugin).with(:has_block?, block).returns(nil) | |
214 | + | |
215 | + @environment = mock | |
216 | + @environment.stubs(:theme).returns('some_theme') | |
217 | + | |
218 | + Dir.stubs(:glob).returns([]) | |
219 | + base_path = File.join(Rails.root, 'public', 'designs/themes/some_theme/', 'images', '/blocks/some_block/previews/') | |
220 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
221 | + | |
222 | + base_path = File.join(Rails.root, 'public', 'images', '/blocks/some_block/previews/') | |
223 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
224 | + | |
225 | + doc = HTML::Document.new display_previews(block) | |
226 | + assert_select doc.root, 'li' do |elements| | |
227 | + assert_match /img.* src="\/designs\/themes\/some_theme\/images\/blocks\/some_block\/previews\/p1.png"/, elements[0].to_s | |
228 | + assert_match /img.* src="\/designs\/themes\/some_theme\/images\/blocks\/some_block\/previews\/p2.png"/, elements[1].to_s | |
229 | + end | |
230 | + end | |
231 | + | |
232 | + should 'display the theme preview images of block instead of plugin preview images' do | |
233 | + class SomeBlock < Block; end | |
234 | + block = SomeBlock | |
235 | + | |
236 | + class SomePlugin < Noosfero::Plugin; end | |
237 | + SomePlugin.stubs(:name).returns('SomePlugin') | |
238 | + @plugins = mock | |
239 | + @plugins.stubs(:fetch_first_plugin).with(:has_block?, block).returns(SomePlugin) | |
240 | + | |
241 | + @environment = mock | |
242 | + @environment.stubs(:theme).returns('some_theme') | |
243 | + | |
244 | + Dir.stubs(:glob).returns([]) | |
245 | + base_path = File.join(Rails.root, 'public', 'designs/themes/some_theme/', 'images', '/blocks/some_block/previews/') | |
246 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
247 | + | |
248 | + base_path = File.join(Rails.root, 'public', 'plugins/some/', 'images', '/blocks/some_block/previews/') | |
249 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
250 | + | |
251 | + doc = HTML::Document.new display_previews(block) | |
252 | + assert_select doc.root, 'li' do |elements| | |
253 | + assert_match /img.* src="\/designs\/themes\/some_theme\/images\/blocks\/some_block\/previews\/p1.png"/, elements[0].to_s | |
254 | + assert_match /img.* src="\/designs\/themes\/some_theme\/images\/blocks\/some_block\/previews\/p2.png"/, elements[1].to_s | |
255 | + end | |
256 | + | |
257 | + end | |
258 | + | |
259 | + should 'display the theme preview images of block instead of block previews and plugin previews' do | |
260 | + class SomeBlock < Block; end | |
261 | + block = SomeBlock | |
262 | + | |
263 | + class SomePlugin < Noosfero::Plugin; end | |
264 | + SomePlugin.stubs(:name).returns('SomePlugin') | |
265 | + @plugins = mock | |
266 | + @plugins.stubs(:fetch_first_plugin).with(:has_block?, block).returns(SomePlugin) | |
267 | + | |
268 | + | |
269 | + @environment = mock | |
270 | + @environment.stubs(:theme).returns('some_theme') | |
271 | + | |
272 | + Dir.stubs(:glob).returns([]) | |
273 | + base_path = File.join(Rails.root, 'public', 'designs/themes/some_theme/', 'images', '/blocks/some_block/previews/') | |
274 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
275 | + | |
276 | + base_path = File.join(Rails.root, 'public', 'plugins/some/', 'images', '/blocks/some_block/previews/') | |
277 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
278 | + | |
279 | + base_path = File.join(Rails.root, 'public', 'images', '/blocks/some_block/previews/') | |
280 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
281 | + | |
282 | + doc = HTML::Document.new display_previews(block) | |
283 | + assert_select doc.root, 'li' do |elements| | |
284 | + assert_match /img.* src="\/designs\/themes\/some_theme\/images\/blocks\/some_block\/previews\/p1.png"/, elements[0].to_s | |
285 | + assert_match /img.* src="\/designs\/themes\/some_theme\/images\/blocks\/some_block\/previews\/p2.png"/, elements[1].to_s | |
286 | + end | |
287 | + | |
288 | + end | |
289 | + | |
290 | + should 'display the plugin preview images of block instead of block previews' do | |
291 | + class SomeBlock < Block; end | |
292 | + block = SomeBlock | |
293 | + | |
294 | + class SomePlugin < Noosfero::Plugin; end | |
295 | + SomePlugin.stubs(:name).returns('SomePlugin') | |
296 | + @plugins = mock | |
297 | + @plugins.stubs(:fetch_first_plugin).with(:has_block?, block).returns(SomePlugin) | |
298 | + | |
299 | + Dir.stubs(:glob).returns([]) | |
300 | + base_path = File.join(Rails.root, 'public', 'designs/themes/some_theme/', 'images', '/blocks/some_block/previews/') | |
301 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
302 | + | |
303 | + base_path = File.join(Rails.root, 'public', 'plugins/some/', 'images', '/blocks/some_block/previews/') | |
304 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
305 | + | |
306 | + base_path = File.join(Rails.root, 'public', 'images', '/blocks/some_block/previews/') | |
307 | + Dir.stubs(:glob).with(File.join(base_path, '*')).returns([File.join(base_path, 'p1.png'), File.join(base_path, 'p2.png')]) | |
308 | + | |
309 | + doc = HTML::Document.new display_previews(block) | |
310 | + assert_select doc.root, 'li' do |elements| | |
311 | + assert_match /img.* src="\/plugins\/some\/images\/blocks\/some_block\/previews\/p1.png"/, elements[0].to_s | |
312 | + assert_match /img.* src="\/plugins\/some\/images\/blocks\/some_block\/previews\/p2.png"/, elements[1].to_s | |
313 | + end | |
314 | + | |
315 | + end | |
316 | + | |
317 | + | |
134 | 318 | end | ... | ... |