hermitage 0.0.4.1 → 0.0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +7 -0
- data/README.md +15 -4
- data/app/assets/images/hermitage-loader.gif +0 -0
- data/app/assets/javascripts/{hermitage.js.coffee → hermitage.js.coffee.erb} +40 -3
- data/hermitage.gemspec +1 -1
- data/lib/generators/hermitage/templates/hermitage.rb +2 -2
- data/lib/hermitage/rails_render_core.rb +13 -3
- data/lib/hermitage/version.rb +1 -1
- data/spec/lib/hermitage/view_helpers_spec.rb +20 -4
- metadata +5 -4
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
### 0.0.5 ###
|
2
|
+
|
3
|
+
* Loading animation added
|
4
|
+
* Original, thumbnail and title options can be lambdas
|
5
|
+
* Bug with looped gallery with the only one image fixed
|
6
|
+
* Wrong behavior with Turbolinks when user clicks back in browser fixed
|
7
|
+
|
1
8
|
### 0.0.4.1 ###
|
2
9
|
|
3
10
|
* RailsRenderCore is not a child of ActionView::Base anymore
|
data/README.md
CHANGED
@@ -5,6 +5,8 @@
|
|
5
5
|
|
6
6
|
Ruby library for generation of image galleries (thumbnails and original images viewer).
|
7
7
|
|
8
|
+
There is a [demo](http://immaculatepine.github.io/hermitage/demo/default.html) with customization examples at project's [homepage](http://immaculatepine.github.io/hermitage/).
|
9
|
+
|
8
10
|
## Requirements
|
9
11
|
|
10
12
|
Hermitage requires Ruby on Rails version >= 3.1 with support of jQuery and CoffeeScript (jquery-rails and coffee-rails gems, respectively).
|
@@ -69,6 +71,10 @@ If the only method returns both paths according to passed parameters you can spe
|
|
69
71
|
|
70
72
|
render_gallery_for @posts, original: 'attachment(:full)', thumbnail: 'attachment(:thumbnail)'
|
71
73
|
|
74
|
+
Also you can specify those values by lambdas:
|
75
|
+
|
76
|
+
render_gallery_for @posts, original: -> post { post.attachment(:full) }, thumbnail: -> post { post.attachment(:thumbnail) }
|
77
|
+
|
72
78
|
#### Markup
|
73
79
|
|
74
80
|
Hermitage renders markup that will look nice with Twitter Bootstrap by default:
|
@@ -140,8 +146,8 @@ You can overwrite :default config. These changes will be applied to all the gall
|
|
140
146
|
Uncoment the following lines in config/initializers/hermitage.rb file and make some changes here:
|
141
147
|
|
142
148
|
Hermitage.configure :default do
|
143
|
-
original
|
144
|
-
thumbnail
|
149
|
+
original -> item { item.image.url(:medium) }
|
150
|
+
thumbnail -> item { image.url(:small) }
|
145
151
|
end
|
146
152
|
|
147
153
|
Now Hermitage will use `image.url` method with :medium or :small argument to get images for the gallery.
|
@@ -170,11 +176,13 @@ Then your config/initializers/hermitage.rb could looks like this:
|
|
170
176
|
|
171
177
|
# Some rules for :default config if needed...
|
172
178
|
|
179
|
+
# Setup by lambdas...
|
173
180
|
Hermitage.configure :pictures do
|
174
|
-
original
|
175
|
-
thumbnail
|
181
|
+
original -> item { item.image_path }
|
182
|
+
thumbnail -> item { item.image_path(:small) }
|
176
183
|
end
|
177
184
|
|
185
|
+
# ...or by strings
|
178
186
|
Hermitage.configure :posts do
|
179
187
|
original 'attachment'
|
180
188
|
thumbnail 'attachment(:tiny)'
|
@@ -223,6 +231,9 @@ You can customize the following parameters:
|
|
223
231
|
* `image.styles` - any custom CSS for current image
|
224
232
|
* `bottomPanel.styles` - any custom CSS for bottom panel
|
225
233
|
* `bottomPanel.text.styles` - any custom CSS for text block of bottom panel
|
234
|
+
* `loader.image` - custom image for loader
|
235
|
+
* `loader.timeout` - timeout before loader animation should appear
|
236
|
+
* `loader.styles` - custom styles for loader
|
226
237
|
* `minimumSize.width` - minimum width of scaled image, px
|
227
238
|
* `minimumSize.height` - minimum height of scaled image, px
|
228
239
|
* `animationDuration` - duration of UI animations, ms
|
Binary file
|
@@ -115,6 +115,15 @@ root.hermitage =
|
|
115
115
|
color: '#FAFAFA'
|
116
116
|
styles: {}
|
117
117
|
|
118
|
+
loaderTimer: undefined
|
119
|
+
loader:
|
120
|
+
default:
|
121
|
+
attributes: { class: 'loader' }
|
122
|
+
styles: {}
|
123
|
+
styles: {}
|
124
|
+
image: '<%= asset_path 'hermitage-loader.gif' %>'
|
125
|
+
timeout: 100
|
126
|
+
|
118
127
|
# Minimum size of scaled image, px
|
119
128
|
minimumSize:
|
120
129
|
width: 100
|
@@ -285,6 +294,26 @@ createBotomPanel = ->
|
|
285
294
|
createElement($('<div>'), hermitage.bottomPanel.text)
|
286
295
|
.appendTo(bottomPanel)
|
287
296
|
|
297
|
+
createLoader = ->
|
298
|
+
loadImage hermitage.loader.image, ->
|
299
|
+
createElement($('<img>'), hermitage.loader)
|
300
|
+
.attr('src', hermitage.loader.image)
|
301
|
+
.appendTo($('#hermitage'))
|
302
|
+
.hide()
|
303
|
+
.center()
|
304
|
+
|
305
|
+
clearLoaderTimer = -> clearTimeout(hermitage.loaderTimer) if hermitage.loaderTimer
|
306
|
+
|
307
|
+
showLoader = ->
|
308
|
+
clearLoaderTimer()
|
309
|
+
hermitage.loaderTimer = setTimeout \
|
310
|
+
-> $('#hermitage .loader').show(),
|
311
|
+
hermitage.loader.timeout
|
312
|
+
|
313
|
+
hideLoader = ->
|
314
|
+
clearLoaderTimer()
|
315
|
+
$('#hermitage .loader').hide()
|
316
|
+
|
288
317
|
# Shows original image of the chosen one
|
289
318
|
openGallery = (image) ->
|
290
319
|
$('#hermitage')
|
@@ -296,11 +325,14 @@ openGallery = (image) ->
|
|
296
325
|
createLeftNavigationButton()
|
297
326
|
createCloseButton()
|
298
327
|
createBotomPanel()
|
328
|
+
createLoader()
|
299
329
|
|
300
330
|
showImage(indexOfImage(image))
|
301
331
|
|
302
332
|
# Shows image with specified index from images array
|
303
333
|
showImage = (index, direction = undefined) ->
|
334
|
+
showLoader()
|
335
|
+
|
304
336
|
img = createElement($('<img />'), hermitage.image)
|
305
337
|
.attr('src', sourceFor(index))
|
306
338
|
.hide()
|
@@ -366,7 +398,6 @@ closeGallery = ->
|
|
366
398
|
$('#hermitage').hide()
|
367
399
|
.empty()
|
368
400
|
|
369
|
-
|
370
401
|
# Moves image to correct position and sets correct size.
|
371
402
|
# Then it calls adjusting methods for navigation and close buttons.
|
372
403
|
# Attributes:
|
@@ -377,7 +408,6 @@ closeGallery = ->
|
|
377
408
|
# * 'right' - move from the right bound of screen
|
378
409
|
# * 'left' - move from the left bound of screen
|
379
410
|
adjustImage = (withAnimation = false, image = undefined, direction = undefined) ->
|
380
|
-
|
381
411
|
if image is undefined
|
382
412
|
image = $('#hermitage img.current')
|
383
413
|
return unless image.length is 1
|
@@ -426,9 +456,12 @@ adjustImage = (withAnimation = false, image = undefined, direction = undefined)
|
|
426
456
|
else
|
427
457
|
image.fadeIn(hermitage.animationDuration)
|
428
458
|
|
459
|
+
hideLoader()
|
460
|
+
|
429
461
|
adjustNavigationButtons(withAnimation, image)
|
430
462
|
adjustCloseButton(withAnimation, image)
|
431
463
|
adjustBottomPanel(withAnimation)
|
464
|
+
$('#hermitage .loader').center()
|
432
465
|
|
433
466
|
# Moves navigation buttons to proper positions
|
434
467
|
adjustNavigationButtons = (withAnimation, current) ->
|
@@ -479,12 +512,16 @@ adjustBottomPanel = (withAnimation) ->
|
|
479
512
|
panel.fadeIn(hermitage.animationDuration)
|
480
513
|
|
481
514
|
canShowNextAfter = (index) ->
|
515
|
+
return false if hermitage.images.length < 2
|
516
|
+
|
482
517
|
if index < hermitage.images.length - 1
|
483
518
|
true
|
484
519
|
else
|
485
520
|
hermitage.looped
|
486
521
|
|
487
522
|
canShowPreviousBefore = (index) ->
|
523
|
+
return false if hermitage.images.length < 2
|
524
|
+
|
488
525
|
if index > 0
|
489
526
|
true
|
490
527
|
else
|
@@ -522,4 +559,4 @@ previousIndexBefore = (index) ->
|
|
522
559
|
|
523
560
|
# Initialize gallery on page load
|
524
561
|
$(document).ready(hermitage.init)
|
525
|
-
$(document).on('page:
|
562
|
+
$(document).on('page:change', hermitage.init)
|
data/hermitage.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ['immaculate.pine@gmail.com']
|
11
11
|
spec.description = %q{Ruby library for image galleries generation.}
|
12
12
|
spec.summary = %q{Ruby library for image galleries generation (thumbnails and original images viewer).}
|
13
|
-
spec.homepage = '
|
13
|
+
spec.homepage = 'http://immaculatepine.github.io/hermitage/'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -4,8 +4,8 @@
|
|
4
4
|
# You can configure any of its options and they will be applied for every rendering.
|
5
5
|
#
|
6
6
|
# Hermitage.configure :default do
|
7
|
-
# original
|
8
|
-
# thumbnail
|
7
|
+
# original -> item { item.file.url }
|
8
|
+
# thumbnail -> item { item.file.url(:thumbnail) }
|
9
9
|
# title nil
|
10
10
|
# list_tag :ul
|
11
11
|
# item_tag :li
|
@@ -37,11 +37,21 @@ module Hermitage
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
# Returns value of item's attribute
|
41
|
+
def value_for(item, option)
|
42
|
+
attribute = @options[option]
|
43
|
+
if attribute.is_a? Proc
|
44
|
+
attribute.call(item)
|
45
|
+
else
|
46
|
+
eval("item.#{attribute}")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
40
50
|
# Renders link to the specific image in a gallery
|
41
51
|
def render_link_for(item)
|
42
|
-
original_path =
|
43
|
-
thumbnail_path =
|
44
|
-
title = @options[:title] ?
|
52
|
+
original_path = value_for(item, :original)
|
53
|
+
thumbnail_path = value_for(item, :thumbnail)
|
54
|
+
title = @options[:title] ? value_for(item, :title) : nil
|
45
55
|
image = @template.image_tag(thumbnail_path, class: @options[:image_class])
|
46
56
|
@template.link_to(image, original_path, rel: 'hermitage', class: @options[:link_class], title: title)
|
47
57
|
end
|
data/lib/hermitage/version.rb
CHANGED
@@ -20,15 +20,31 @@ describe Hermitage::ViewHelpers, type: :helper do
|
|
20
20
|
context 'with options' do
|
21
21
|
|
22
22
|
context 'original and thumbnail' do
|
23
|
-
subject { template.render_gallery_for images, original: 'photo', thumbnail: 'photo(:thumbnail)' }
|
24
23
|
let(:images) { Array.new(2) { |i| DummyPhoto.new(i.to_s) } }
|
25
|
-
|
24
|
+
|
25
|
+
context 'by string' do
|
26
|
+
subject { template.render_gallery_for images, original: 'photo', thumbnail: 'photo(:thumbnail)' }
|
27
|
+
it { should == expected }
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'by proc' do
|
31
|
+
subject { template.render_gallery_for images, original: -> item { item.photo }, thumbnail: -> item { item.photo(:thumbnail) } }
|
32
|
+
it { should == expected }
|
33
|
+
end
|
26
34
|
end
|
27
35
|
|
28
36
|
context 'title' do
|
29
|
-
subject { template.render_gallery_for images, title: 'description' }
|
30
37
|
let(:expected) { '<ul class="thumbnails"><li class="span4"><a class="thumbnail" href="/assets/0-full.png" rel="hermitage" title="description of 0"><img alt="0 thumbnail" src="/assets/0-thumbnail.png" /></a></li><li class="span4"><a class="thumbnail" href="/assets/1-full.png" rel="hermitage" title="description of 1"><img alt="1 thumbnail" src="/assets/1-thumbnail.png" /></a></li></ul>' }
|
31
|
-
|
38
|
+
|
39
|
+
context 'by string' do
|
40
|
+
subject { template.render_gallery_for images, title: 'description' }
|
41
|
+
it { should == expected }
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'by proc' do
|
45
|
+
subject { template.render_gallery_for images, title: -> item { item.description } }
|
46
|
+
it { should == expected }
|
47
|
+
end
|
32
48
|
end
|
33
49
|
|
34
50
|
context 'list_tag and item_tag' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hermitage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -203,7 +203,8 @@ files:
|
|
203
203
|
- LICENSE.txt
|
204
204
|
- README.md
|
205
205
|
- Rakefile
|
206
|
-
- app/assets/
|
206
|
+
- app/assets/images/hermitage-loader.gif
|
207
|
+
- app/assets/javascripts/hermitage.js.coffee.erb
|
207
208
|
- config.ru
|
208
209
|
- hermitage.gemspec
|
209
210
|
- lib/generators/hermitage/install_generator.rb
|
@@ -282,7 +283,7 @@ files:
|
|
282
283
|
- spec/lib/hermitage/view_helpers_spec.rb
|
283
284
|
- spec/lib/hermitage_spec.rb
|
284
285
|
- spec/spec_helper.rb
|
285
|
-
homepage:
|
286
|
+
homepage: http://immaculatepine.github.io/hermitage/
|
286
287
|
licenses:
|
287
288
|
- MIT
|
288
289
|
post_install_message:
|