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,11 +23,40 @@ module BoxOrganizerHelper | ||
23 | end | 23 | end |
24 | 24 | ||
25 | def display_previews(block) | 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 | # end | 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 | end | 60 | end |
32 | 61 | ||
33 | def icon_selector(icon = 'no-ico') | 62 | def icon_selector(icon = 'no-ico') |
app/helpers/layout_helper.rb
@@ -27,6 +27,7 @@ module LayoutHelper | @@ -27,6 +27,7 @@ module LayoutHelper | ||
27 | 'thickbox', | 27 | 'thickbox', |
28 | 'lightbox', | 28 | 'lightbox', |
29 | 'colorbox', | 29 | 'colorbox', |
30 | + 'block_store', | ||
30 | pngfix_stylesheet_path, | 31 | pngfix_stylesheet_path, |
31 | ] + tokeninput_stylesheets | 32 | ] + tokeninput_stylesheets |
32 | plugins_stylesheets = @plugins.select(&:stylesheet?).map { |plugin| plugin.class.public_path('style.css') } | 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,9 +247,9 @@ class Block < ActiveRecord::Base | ||
247 | duplicated_block | 247 | duplicated_block |
248 | end | 248 | end |
249 | 249 | ||
250 | - def self.previews_path | 250 | + def self.preview_path |
251 | base_name = self.name.split('::').last.underscore | 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 | end | 253 | end |
254 | 254 | ||
255 | def self.icon_path | 255 | def self.icon_path |
@@ -265,5 +265,4 @@ class Block < ActiveRecord::Base | @@ -265,5 +265,4 @@ class Block < ActiveRecord::Base | ||
265 | "block_preview.png" | 265 | "block_preview.png" |
266 | end | 266 | end |
267 | 267 | ||
268 | - | ||
269 | end | 268 | end |
app/views/box_organizer/show_block_type_info.html.erb
1 | <div id="block-info-container"> | 1 | <div id="block-info-container"> |
2 | 2 | ||
3 | - <div id="bs-block-header"> | 3 | + <div id="block-info-header"> |
4 | <%= display_icon(@block) %> | 4 | <%= display_icon(@block) %> |
5 | <h1><%= @block.pretty_name %></h1> | 5 | <h1><%= @block.pretty_name %></h1> |
6 | <p><%= @block.short_description %></p> | 6 | <p><%= @block.short_description %></p> |
@@ -8,15 +8,7 @@ | @@ -8,15 +8,7 @@ | ||
8 | 8 | ||
9 | <div id="block-info-images"> | 9 | <div id="block-info-images"> |
10 | <div style="white-space: nowrap;"> | 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 | </div> | 12 | </div> |
21 | </div> | 13 | </div> |
22 | 14 |
public/stylesheets/block_store.css
@@ -82,17 +82,26 @@ r, | @@ -82,17 +82,26 @@ r, | ||
82 | } | 82 | } |
83 | 83 | ||
84 | #block-info-container #block-info-header { | 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 | float: left; | 89 | float: left; |
87 | } | 90 | } |
88 | 91 | ||
89 | #block-info-container #block-info-header h1 { | 92 | #block-info-container #block-info-header h1 { |
90 | - display: inline-block; | 93 | + float: left; |
91 | margin: 0; | 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 | #block-info-container h2 { | 105 | #block-info-container h2 { |
97 | margin: 0; | 106 | margin: 0; |
98 | margin-top: 10px; | 107 | margin-top: 10px; |
@@ -110,6 +119,19 @@ r, | @@ -110,6 +119,19 @@ r, | ||
110 | padding-top: 15px; | 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 | #block-info-description { | 133 | #block-info-description { |
114 | margin-top: 20px; | 134 | margin-top: 20px; |
115 | } | 135 | } |
136 | + | ||
137 | + |
test/unit/box_organizer_helper_test.rb
@@ -131,4 +131,188 @@ class BoxOrganizerHelperTest < ActionView::TestCase | @@ -131,4 +131,188 @@ class BoxOrganizerHelperTest < ActionView::TestCase | ||
131 | assert_match 'plugins/some/images/blocks/some_block/icon.png', display_icon(block) | 131 | assert_match 'plugins/some/images/blocks/some_block/icon.png', display_icon(block) |
132 | end | 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 | end | 318 | end |