rails-gallery 0.2.1 → 0.3.0

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/Gemfile CHANGED
@@ -1,5 +1,8 @@
1
1
  source "http://rubygems.org"
2
2
 
3
+ gem 'rails'
4
+ gem 'hashie', '~> 1.2.0'
5
+
3
6
  group :development do
4
7
  gem "rspec", ">= 2.8.0"
5
8
  gem "rdoc", ">= 3.12"
@@ -1,15 +1,77 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ actionmailer (3.2.8)
5
+ actionpack (= 3.2.8)
6
+ mail (~> 2.4.4)
7
+ actionpack (3.2.8)
8
+ activemodel (= 3.2.8)
9
+ activesupport (= 3.2.8)
10
+ builder (~> 3.0.0)
11
+ erubis (~> 2.7.0)
12
+ journey (~> 1.0.4)
13
+ rack (~> 1.4.0)
14
+ rack-cache (~> 1.2)
15
+ rack-test (~> 0.6.1)
16
+ sprockets (~> 2.1.3)
17
+ activemodel (3.2.8)
18
+ activesupport (= 3.2.8)
19
+ builder (~> 3.0.0)
20
+ activerecord (3.2.8)
21
+ activemodel (= 3.2.8)
22
+ activesupport (= 3.2.8)
23
+ arel (~> 3.0.2)
24
+ tzinfo (~> 0.3.29)
25
+ activeresource (3.2.8)
26
+ activemodel (= 3.2.8)
27
+ activesupport (= 3.2.8)
28
+ activesupport (3.2.8)
29
+ i18n (~> 0.6)
30
+ multi_json (~> 1.0)
31
+ arel (3.0.2)
32
+ builder (3.0.0)
4
33
  diff-lcs (1.1.3)
34
+ erubis (2.7.0)
5
35
  git (1.2.5)
36
+ hashie (1.2.0)
37
+ hike (1.2.1)
38
+ i18n (0.6.0)
6
39
  jeweler (1.8.4)
7
40
  bundler (~> 1.0)
8
41
  git (>= 1.2.5)
9
42
  rake
10
43
  rdoc
44
+ journey (1.0.4)
11
45
  json (1.7.5)
46
+ mail (2.4.4)
47
+ i18n (>= 0.4.0)
48
+ mime-types (~> 1.16)
49
+ treetop (~> 1.4.8)
50
+ mime-types (1.19)
12
51
  multi_json (1.3.6)
52
+ polyglot (0.3.3)
53
+ rack (1.4.1)
54
+ rack-cache (1.2)
55
+ rack (>= 0.4)
56
+ rack-ssl (1.3.2)
57
+ rack
58
+ rack-test (0.6.1)
59
+ rack (>= 1.0)
60
+ rails (3.2.8)
61
+ actionmailer (= 3.2.8)
62
+ actionpack (= 3.2.8)
63
+ activerecord (= 3.2.8)
64
+ activeresource (= 3.2.8)
65
+ activesupport (= 3.2.8)
66
+ bundler (~> 1.0)
67
+ railties (= 3.2.8)
68
+ railties (3.2.8)
69
+ actionpack (= 3.2.8)
70
+ activesupport (= 3.2.8)
71
+ rack-ssl (~> 1.3.2)
72
+ rake (>= 0.8.7)
73
+ rdoc (~> 3.4)
74
+ thor (>= 0.14.6, < 2.0)
13
75
  rake (0.9.2.2)
14
76
  rdoc (3.12)
15
77
  json (~> 1.4)
@@ -25,13 +87,25 @@ GEM
25
87
  multi_json (~> 1.0)
26
88
  simplecov-html (~> 0.5.3)
27
89
  simplecov-html (0.5.3)
90
+ sprockets (2.1.3)
91
+ hike (~> 1.2)
92
+ rack (~> 1.0)
93
+ tilt (~> 1.1, != 1.3.0)
94
+ thor (0.16.0)
95
+ tilt (1.3.3)
96
+ treetop (1.4.10)
97
+ polyglot
98
+ polyglot (>= 0.3.1)
99
+ tzinfo (0.3.33)
28
100
 
29
101
  PLATFORMS
30
102
  ruby
31
103
 
32
104
  DEPENDENCIES
33
105
  bundler (>= 1.0.0)
106
+ hashie (~> 1.2.0)
34
107
  jeweler (>= 1.8.4)
108
+ rails
35
109
  rdoc (>= 3.12)
36
110
  rspec (>= 2.8.0)
37
111
  simplecov (>= 0.5)
data/README.md CHANGED
@@ -4,7 +4,7 @@ Popular Javascript Photo galleries/carousels ready to use with Rails 3+.
4
4
 
5
5
  ## Usage
6
6
 
7
- `gem 'rails-gallery'
7
+ `gem 'rails-gallery'`
8
8
 
9
9
  ## Galleries included
10
10
 
@@ -21,12 +21,11 @@ In `application.css` manifest file:
21
21
 
22
22
  ```css
23
23
  /*
24
- * require responsive-gallery
25
- * require gallery/responsive/elastislide
26
- * require gallery/responsive/style
27
- * require gallery/slideshow
28
- * require gallery/galleria
29
- * require gallery/touch_touch
24
+ *= require gallery/responsive/elastislide
25
+ *= require gallery/responsive
26
+ *= require gallery/slideshow
27
+ *= require gallery/galleria/classic
28
+ *= require gallery/touch_touch
30
29
  */
31
30
  ```
32
31
 
@@ -36,7 +35,7 @@ Using Compass, f.ex in `application.css.scss`
36
35
  @import 'gallery/responsive/elastislide';
37
36
  @import 'gallery/responsive';
38
37
  @import 'gallery/slideshow';
39
- @import 'gallery/galleria';
38
+ @import 'gallery/galleria/classic';
40
39
  @import 'gallery/touch_touch';
41
40
  ```
42
41
 
@@ -46,6 +45,7 @@ In `application.js` manifest file:
46
45
  //= require gallery/responsive
47
46
  //= require gallery/slideshow
48
47
  //= require gallery/galleria
48
+ //= require gallery/galleria/classic
49
49
  //= require gallery/touch_touch
50
50
 
51
51
  //= require jquery/jquery.easing-1.3
@@ -66,6 +66,10 @@ $(function(){
66
66
 
67
67
  See [TouchTouch](http://tutorialzine.com/2012/04/mobile-touch-gallery/) and [github repo](https://github.com/martinaglv/touchTouch)
68
68
 
69
+ ```haml
70
+ = touchgal_image photo
71
+ ```
72
+
69
73
  ## Minimalistic Slideshow gallery
70
74
 
71
75
  See [minimalistic-slideshow-gallery](http://tympanus.net/codrops/2010/07/05/minimalistic-slideshow-gallery/) for more info.
@@ -188,12 +192,29 @@ class PropertiesController < ApplicationController
188
192
  end
189
193
  ```
190
194
 
195
+ The RGallery should now also support multiple photo sources for responsive galleries:
196
+
197
+ ```ruby
198
+ @photos.pages.add_photo_w_sources 'banner' => [{src: 'banner-HD', sizing: '2x'}, {src: 'banner-phone', sizing: '100w'}]
199
+
200
+ Note: See module `RGallery::Pages` class.
201
+
202
+ # OR
203
+
204
+ @photos.pages.add_photo_sources 'banner' => [{src: 'banner-HD', sizing: '2x'}], 'logo' => [{src: 'logo-HD', sizing: '2x'}
205
+
206
+ OR on individual pages
207
+
208
+ @photos.page(:first).add_photo_sources 'banner' => [{src: 'banner-HD', sizing: '2x'}], 'logo' => [{src: 'logo-HD', sizing: '2x'}
209
+
210
+ ```
211
+
191
212
  This engine comes with a RGallery::Photos` model which can encapsulate your photos for display and allows you to group photos in multiple pages.
192
213
  The `RGallery::Photo` class is a base class for describing a photo.
193
214
 
194
215
  You should create your own Photo class that inherits from `RGallery::Photo` (or implements the API), which knows how to render and describe your photos.
195
216
 
196
- Here a rough example:
217
+ Here is a rough example:
197
218
 
198
219
  ```ruby
199
220
  class Property
@@ -215,6 +236,13 @@ class Property
215
236
  'responsive-gallery/images'
216
237
  end
217
238
 
239
+ # The filename of the picture.
240
+ # Here it assumes that the id assigned is a Property object, which has a
241
+ # method 'picture' which returns the picture id.
242
+ def filename
243
+ "property-#{id.picture}"
244
+ end
245
+
218
246
  def title
219
247
  'property title'
220
248
  end
@@ -230,7 +258,18 @@ class Property
230
258
  end
231
259
  ```
232
260
 
233
- See the `lib/rails-gallery/rgallery/photos.rb
261
+ See the `lib/rails-gallery/rgallery/photos.rb` for details on how to extend this class appropriately to fit your scenario.
262
+
263
+ *debugging*
264
+
265
+ In order to help debug the configuration of the photo class, you can use the view_helper methods:
266
+
267
+ ```ruby
268
+ = validate_gallery_photo photo # prints error msg if invalid
269
+ - validate_gallery_photo! photo # raise error if invalid
270
+ ```
271
+
272
+ Or you can include the `RailsGallery::PhotoValidation` module anywhere you want to leverage these methods!
234
273
 
235
274
  Then in your `properties/show.html.haml`:
236
275
 
@@ -274,7 +313,7 @@ There are also some view helpers included in `rails-gallery/view_helper.rb`
274
313
 
275
314
  `= gallery_image type, photo`
276
315
 
277
- Simple example:
316
+ *Simple example:*
278
317
 
279
318
  Iterate all photos as a "single page".
280
319
 
@@ -283,7 +322,7 @@ Iterate all photos as a "single page".
283
322
  = gallery_image :responsive, photo`
284
323
  ```
285
324
 
286
- Pages example:
325
+ *Pages example:*
287
326
 
288
327
  Iterate photos, one page at a time.
289
328
 
@@ -292,7 +331,7 @@ Iterate photos, one page at a time.
292
331
  = gallery_image :responsive, photo`
293
332
  ```
294
333
 
295
- Advanced example:
334
+ *Advanced example:*
296
335
 
297
336
  Iterate photos, first page visible, then remaining pages invisible.
298
337
 
@@ -307,6 +346,37 @@ Iterate photos, first page visible, then remaining pages invisible.
307
346
  = gallery_image :responsive, photo`
308
347
  ```
309
348
 
349
+ ### Shortcuts for view helpers
350
+
351
+ ```haml
352
+ # galleria
353
+ = riagal_image photo
354
+ = riagal_imageset photo
355
+
356
+ # slideshow
357
+ = slidegal_image photo
358
+ = slidegal_imageset photo
359
+
360
+ # responsive
361
+ = respgal_image photo
362
+ = respgal_imageset photo
363
+
364
+ # touchtouch
365
+ = touchgal_image photo
366
+ = touchgal_imageset photo
367
+ ```
368
+
369
+ ## Responsive images via "image srcset"
370
+
371
+ The View Helpers also includes tag helpers to create image tags with [srcset](https://github.com/borismus/srcset-polyfill). This can be installed and used with [picturefill-rails](https://github.com/kristianmandrup/picturefill-rails)
372
+
373
+ Example:
374
+
375
+ ```haml
376
+ - photos.pages.each do |photo|
377
+ = gallery_imageset :responsive, photo`
378
+ ```
379
+
310
380
  Enjoy!
311
381
 
312
382
  ## Adding more galleries
@@ -321,7 +391,7 @@ Then add gallery client-side pieces to the assets folder following conventions a
321
391
 
322
392
  ## TODO
323
393
 
324
- Would perhaps be nice to allow pages/albums to have info assigned, such as title and/or description, tags etc. ?
394
+ Would be nice to allow pages/albums to have info assigned, such as title and/or description, tags etc.
325
395
 
326
396
  ## Contributing to rails-gallery
327
397
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.3.0
@@ -1,4 +1,3 @@
1
- #galleria
1
+ #galleria.galleria
2
2
  - photos.all.each do |photo|
3
- %a{href:"/assets/#{photo.path}"}
4
- = image_tag photo.path, :"data-title" => photo.title, :"data-description" => photo.description
3
+ = gallery_image :galleria, photo
@@ -10,6 +10,5 @@
10
10
  .es-carousel
11
11
  %ul
12
12
  - photos.all.each do |photo|
13
- %li
14
- %a{href:"#"}
15
- = image_tag photo.thumb, :"data-large" => "/assets/#{photo.path}", :alt => photo.alt, :"data-description" => photo.title
13
+ = gallery_image :responsive, photo, wrap: true
14
+
@@ -13,12 +13,12 @@
13
13
  .msg_thumb_wrapper
14
14
  - photos.page(:first).photos.each do |photo|
15
15
  %a{href: "#"}
16
- = image_tag photo.thumb, alt: "/assets/#{photo.path}"
16
+ = gallery_image :slideshow photo
17
17
  - photos.pages.remainder.each do |page|
18
18
  .msg_thumb_wrapper{style: 'display:none'}
19
19
  - page.photos.each do |photo|
20
20
  %a{href: "#"}
21
- = image_tag photo.thumb, alt: "/assets/#{photo.path}"
21
+ = gallery_image :slideshow, photo
22
22
  %a#msg_thumb_next.msg_thumb_next{href: '#'}
23
23
  %a#msg_thumb_prev.msg_thumb_prev{href: '#'}
24
24
  %a#msg_thumb_close.msg_thumb_close{href: '#'}
@@ -1,3 +1,4 @@
1
1
  require 'rails-gallery/rgallery'
2
+ require 'rails-gallery/photo_validation'
2
3
  require 'rails-gallery/view_helper'
3
4
  require 'rails-gallery/engine' if defined?(::Rails::Engine)
@@ -2,6 +2,8 @@ module RailsGallery
2
2
  module Rails
3
3
  class Engine < ::Rails::Engine
4
4
  initializer 'rails gallery' do
5
+ puts "Adding RailsGallery::ViewHelper"
6
+
5
7
  ActionView::Base.send :include, RailsGallery::ViewHelper
6
8
  end
7
9
  end
@@ -0,0 +1,37 @@
1
+ module RailsGallery
2
+ module PhotoValidation
3
+ def validate_gallery_photo photo
4
+ return "Photo must be a kind of RGallery::Photo, was: #{photo}" unless photo.kind_of?(RGallery::Photo)
5
+ return 'Photo must have a #path method' unless photo.respond_to? :path
6
+ return 'Photo must have a #title method' unless photo.respond_to? :title
7
+
8
+ begin
9
+ photo.filename
10
+ photo.file_path
11
+ rescue Exception => e
12
+ return "filename or file_path could not be resolved for: #{photo}, cause: #{e}"
13
+ end
14
+
15
+ return "Photo must have a path: #{photo}" if photo.path.blank?
16
+ return "Photo must have a title: #{photo}" if photo.title.blank?
17
+ true
18
+ end
19
+
20
+ def validate_gallery_photo! photo
21
+ raise ArgumentError, "Photo must be a kind of RGallery::Photo, was: #{photo}" unless photo.kind_of?(RGallery::Photo)
22
+ raise ArgumentError, 'Photo must have a #path method' unless photo.respond_to? :path
23
+ raise ArgumentError, 'Photo must have a #title method' unless photo.respond_to? :title
24
+
25
+ begin
26
+ photo.filename
27
+ photo.file_path
28
+ rescue Exception => e
29
+ raise ::RailsGallery::ConfigurationError, "filename or file_path could not be resolved for: #{photo}, cause: #{e}"
30
+ end
31
+
32
+ raise ArgumentError, "Photo must have a path: #{photo}" if photo.path.blank?
33
+ raise ArgumentError, "Photo must have a title: #{photo}" if photo.title.blank?
34
+ true
35
+ end
36
+ end
37
+ end
@@ -7,6 +7,39 @@ module RGallery
7
7
  super options
8
8
  end
9
9
 
10
+ # a source is a hash of the form:
11
+ # 'banner' => [{src: 'banner-HD', sizing: '2x'}, {src: 'banner-phone', sizing: '100w'}]
12
+ # see: add_photo_sources
13
+ def self.from_source sources
14
+ page = self.create sources.keys, options
15
+
16
+ @photos ||= sources.map do |key, srclist|
17
+ photo_class.new key, options.merge(:sources => srclist)
18
+ end
19
+ end
20
+
21
+ def << photo_ids
22
+ @photo_ids ||= []
23
+ @photo_ids += [photo_ids].flatten
24
+ end
25
+
26
+ def add_photo_sources sources_hash
27
+ sources_hash.each do |source|
28
+ add_photo_w_sources source
29
+ end
30
+ end
31
+
32
+ def add_photo_w_sources source
33
+ raise ArgumentError, "Must be a hash, was: #{source}" unless source.kind_of? Hash
34
+ key = source.keys.first
35
+ srclist = source.values.first
36
+ raise ArgumentError, "Hash value must be an Array, was: #{srclist}" unless srclist.kind_of? Array
37
+
38
+ self.send :<<, key
39
+ @photos ||= []
40
+ @photos << photo_class.new(key, options.merge(:sources => srclist))
41
+ end
42
+
10
43
  def photo_ids
11
44
  @photo_ids ||= []
12
45
  end
@@ -23,6 +23,21 @@ module RGallery
23
23
  pages << RGallery::Page.new(photo_list, options)
24
24
  end
25
25
 
26
+ # a source is a hash of the form:
27
+ # 'banner' => [{src: 'banner-HD', sizing: '2x'}, {src: 'banner-phone', sizing: '100w'}]
28
+ def add_photo_w_sources source
29
+ pages << RGallery::Page.from_source(source, options)
30
+ end
31
+
32
+ # a Hash where each element is a source of the form:
33
+ # 'banner' => [{src: 'banner-HD', sizing: '2x'}, {src: 'banner-phone', sizing: '100w'}]
34
+ def add_photo_sources sources_hash
35
+ sources_hash.each do |source|
36
+ pages.add_photo_w_sources source
37
+ end
38
+ end
39
+
40
+
26
41
  delegate :empty?, to: :pages
27
42
 
28
43
  protected