jekyll-gallery-generator 0.9.0 → 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9fb877d9687a9a9b4c2ceb86449dbb29ff32db30
4
- data.tar.gz: 3b95efbc9f1992097efae0ae0dd8a1c93cd6bd25
3
+ metadata.gz: fcea80713b0f4630d7579d6364b8534d8f60c651
4
+ data.tar.gz: a77062b54c229259d1ca00e290f93380858a3cb5
5
5
  SHA512:
6
- metadata.gz: 5fce10d707394b0df32939ae3fa2b4da5938d627308e16fbe0dfb417ef49e9cc543f8ff477cc6fe435a1ace94de46a90af65c7dca801552ed7c802bfe94dc43c
7
- data.tar.gz: 520617fc88e4e50ca4183efd7a04889aeba93554017530350167045a42e39fadd9331ca800822a2afc3967869071d69bb71781bba2db5333fa7fda6626e04e0e
6
+ metadata.gz: d714d25ca0673f7a8e00b53a5b68a9c56c463bace45fcd2945c8805c11612f6affca10871382449ee36898a03fe470b4c8a4d605d02373817df8a0ffa4560f42
7
+ data.tar.gz: 9f283ef8133e3063974d6dbaa6f33b7c52a25ff6746fe9ff3deff2074561f07aab8c1e071301d97c35125aa21699922f2da38b8446faf323eba059703c6448d8
data/README.md CHANGED
@@ -17,14 +17,14 @@ This plugin is quite minimalist. It generates galleries with no pagination, no s
17
17
 
18
18
  2. Add `jekyll-gallery-generator` to the gems list in your `_config.yml`:
19
19
 
20
- ```
20
+ ```
21
21
  gems:
22
22
  - jekyll-gallery-generator
23
23
  ```
24
24
 
25
25
  3. Copy your image directories into `jekyll-site/photos/`. Here's what my directory structure looks like:
26
26
 
27
- ```bash
27
+ ```bash
28
28
  $ ls jekyll-site/photos
29
29
  best/ chile_trip/ japan_trip/
30
30
  $ ls jekyll-site/photos/chile_trip
@@ -54,28 +54,27 @@ This plugin reads several config options from `_config.yml`. The following optio
54
54
 
55
55
  ```yaml
56
56
  gallery:
57
- # path to the gallery
58
- dir: photos
59
- # title for gallery index
60
- title: "Photos"
61
- # title prefix for gallery page. title=title_prefix+gallery_name
62
- title_prefix: "Photos: "
63
- # field to control sorting of galleries for the index page
64
- # (possible values are: title, date_time, best_image)
65
- sort_field: "date_time"
66
- # sizes for thumbnails
57
+ dir: photos # Path to the gallery
58
+ symlink: false # false: copy images into _site. true: create symbolic links (saves disk space)
59
+ title: "Photos" # Title for gallery index page
60
+ title_prefix: "Photos: " # Title prefix for gallery pages. Gallery title = title_prefix + gallery_name
61
+ sort_field: "date_time" # How to sort galleries on the index page.
62
+ # Possible values are: title, date_time, best_image
67
63
  thumbnail_size:
68
- x: 400
69
- y: 400
70
- # custom configuration for individual gallery
71
- # best_image is image for the index page (defaults to last image)
64
+ x: 400 # max width of thumbnails (in pixels)
65
+ y: 400 # max height of thumbnails (in pixels)
66
+ # The following options are for individual galleries.
72
67
  galleries:
73
68
  chile_trip:
74
- best_image: IMG_1068.JPG
69
+ best_image: IMG_1068.JPG # The image to show on the gallery index page. Defaults to the last image.
75
70
  japan_trip:
76
71
  best_image: IMG_0690.JPG
77
- best:
72
+ name: "日本の旅" # Defaults to directory name, replacing _ with spaces & capitalizing words.
73
+ awesome_stuff:
78
74
  best_image: snaileo_gonzales.jpg
75
+ sort_reverse: true # Reverse sort images in gallery.
76
+ secret_stuff:
77
+ hidden: true # Don't show this gallery on the index page. People must guess the URL.
79
78
  ```
80
79
 
81
80
 
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "jekyll-gallery-generator"
3
3
  spec.summary = "Generate galleries with thumbnails for your Jekyll site."
4
- spec.version = "0.9.0"
4
+ spec.version = "1.0.0"
5
5
  spec.authors = ["Geoff Greer"]
6
6
  spec.email = "geoff@greer.fm"
7
7
  spec.homepage = "https://github.com/ggreer/jekyll-gallery-generator"
@@ -22,9 +22,9 @@ layout: page
22
22
  <hr />
23
23
  {% for image in page.images %}
24
24
  <div class="gallery-image-wrapper">
25
- <a name="{{ image }}"></a>
26
- <a href="{{ image }}"{% if site.gallery.lightbox %} rel="lightbox[{{ page.gallery }}]"{% endif %}>
27
- <img class="gallery-image" src="thumbs/{{ image }}" />
25
+ <a name="{{ image.name }}"></a>
26
+ <a href="{{ image.name }}"{% if site.gallery.lightbox %} rel="lightbox[{{ page.gallery }}]"{% endif %}>
27
+ <img class="gallery-image" src="thumbs/{{ image.name }}" />
28
28
  </a>
29
29
  </div>
30
30
  {% endfor %}
@@ -6,18 +6,59 @@ include FileUtils
6
6
 
7
7
  $image_extensions = [".png", ".jpg", ".jpeg", ".gif"]
8
8
 
9
- def get_exif_date_time(image_path)
10
- begin
11
- return EXIFR::JPEG.new(image_path).date_time.to_i
12
- rescue EXIFR::MalformedJPEG
13
- puts "No EXIF data in #{image_path}"
14
- rescue Exception => e
15
- puts "Error reading EXIF date_time for #{image_path}: #{e}"
9
+ module Jekyll
10
+ class GalleryImage
11
+ include Comparable
12
+ attr_accessor :name
13
+ attr_accessor :path
14
+
15
+ def initialize(name, base)
16
+ @name = name
17
+ @path = File.join(base, name)
18
+ end
19
+
20
+ def <=>(b)
21
+ return @date_time <=> b.date_time
22
+ end
23
+
24
+ def date_time
25
+ return @date_time if defined? @date_time
26
+ begin
27
+ @date_time = self.exif.date_time.to_i
28
+ rescue Exception => e
29
+ @date_time = 0
30
+ end
31
+ return @date_time
32
+ end
33
+
34
+ def exif
35
+ return @exif if defined? @exif
36
+ @exif = nil
37
+ begin
38
+ @exif = EXIFR::JPEG.new(@path)
39
+ rescue EXIFR::MalformedJPEG
40
+ puts "No EXIF data in #{@path}"
41
+ rescue Exception => e
42
+ puts "Error reading EXIF data for #{@path}: #{e}"
43
+ end
44
+ return @exif
45
+ end
46
+
47
+ def to_s
48
+ return @name
49
+ end
50
+
51
+ def to_liquid
52
+ # Liquid hates symbol keys. Gotta stringify them
53
+ return {
54
+ 'name' => @name,
55
+ 'src' => @name,
56
+ 'date_time' => @date_time,
57
+ 'exif' => @exif && @exif.to_hash.collect{|k,v| [k.to_s, v]}.to_h,
58
+ }
59
+ end
16
60
  end
17
- return 0
18
- end
19
61
 
20
- module Jekyll
21
62
  class GalleryFile < StaticFile
22
63
  def write(dest)
23
64
  return false
@@ -97,15 +138,15 @@ module Jekyll
97
138
  scale_method = config["scale_method"] || "fit"
98
139
  begin
99
140
  max_size_x = config["thumbnail_size"]["x"]
100
- rescue
141
+ rescue Exception
101
142
  end
102
143
  begin
103
144
  max_size_y = config["thumbnail_size"]["y"]
104
- rescue
145
+ rescue Exception
105
146
  end
106
147
  begin
107
148
  gallery_config = config["galleries"][gallery_name] || {}
108
- rescue
149
+ rescue Exception
109
150
  end
110
151
  self.process(@name)
111
152
  gallery_page = File.join(base, "_layouts", "gallery_page.html")
@@ -115,42 +156,42 @@ module Jekyll
115
156
  self.read_yaml(File.dirname(gallery_page), File.basename(gallery_page))
116
157
  self.data["gallery"] = gallery_name
117
158
  gallery_title_prefix = config["title_prefix"] || "Photos: "
118
- gallery_name = gallery_name.gsub("_", " ").gsub(/\w+/) {|word| word.capitalize}
159
+ gallery_name = gallery_name.gsub(/[_-]/, " ").gsub(/\w+/) {|word| word.capitalize}
119
160
  begin
120
161
  gallery_name = gallery_config["name"] || gallery_name
121
- rescue
162
+ rescue Exception
122
163
  end
123
164
  self.data["name"] = gallery_name
124
165
  self.data["title"] = "#{gallery_title_prefix}#{gallery_name}"
125
- thumbs_dir = File.join(site.dest, @dest_dir, "thumbs")
166
+ self.data["exif"] = {}
126
167
  begin
127
168
  @hidden = gallery_config["hidden"] || false
128
- rescue
169
+ rescue Exception
129
170
  end
130
171
  if @hidden
131
172
  self.data["sitemap"] = false
132
173
  end
133
174
 
175
+ thumbs_dir = File.join(site.dest, @dest_dir, "thumbs")
134
176
  FileUtils.mkdir_p(thumbs_dir, :mode => 0755)
135
177
  date_times = {}
136
178
  entries = Dir.entries(dir)
137
- entries.each_with_index do |image, i|
138
- next if image.chars.first == "."
139
- next unless image.downcase().end_with?(*$image_extensions)
179
+ entries.each_with_index do |name, i|
180
+ next if name.chars.first == "."
181
+ next unless name.downcase().end_with?(*$image_extensions)
182
+ image = GalleryImage.new(name, dir)
140
183
  @images.push(image)
141
- best_image = image
142
- @site.static_files << GalleryFile.new(site, base, File.join(@dest_dir, "thumbs"), image)
143
- image_path = File.join(dir, image)
144
-
145
- date_times[image] = get_exif_date_time(image_path)
184
+ date_times[name] = image.date_time
185
+ best_image = name
186
+ @site.static_files << GalleryFile.new(site, base, File.join(@dest_dir, "thumbs"), name)
146
187
 
147
188
  if symlink
148
- link_src = site.in_source_dir(image_path)
149
- link_dest = site.in_dest_dir(image_path)
189
+ link_src = site.in_source_dir(image.path)
190
+ link_dest = site.in_dest_dir(image.path)
150
191
  @site.static_files.delete_if { |sf|
151
- sf.relative_path == "/" + image_path
192
+ sf.relative_path == "/" + image.path
152
193
  }
153
- @site.static_files << GalleryFile.new(site, base, dir, image)
194
+ @site.static_files << GalleryFile.new(site, base, dir, name)
154
195
  if File.exists?(link_dest) or File.symlink?(link_dest)
155
196
  if not File.symlink?(link_dest)
156
197
  puts "#{link_dest} exists but is not a symlink. Deleting."
@@ -165,16 +206,16 @@ module Jekyll
165
206
  File.symlink(link_src, link_dest)
166
207
  end
167
208
  end
168
- thumb_path = File.join(thumbs_dir, image)
169
- if File.file?(thumb_path) == false or File.mtime(image_path) > File.mtime(thumb_path)
209
+ thumb_path = File.join(thumbs_dir, name)
210
+ if File.file?(thumb_path) == false or File.mtime(image.path) > File.mtime(thumb_path)
170
211
  begin
171
- m_image = ImageList.new(image_path)
212
+ m_image = ImageList.new(image.path)
172
213
  m_image.auto_orient!
173
214
  m_image.send("resize_to_#{scale_method}!", max_size_x, max_size_y)
174
215
  puts "Writing thumbnail to #{thumb_path}"
175
216
  m_image.write(thumb_path)
176
- rescue e
177
- printf "Error generating thumbnail for #{image_path}: #{e}\r"
217
+ rescue Exception => e
218
+ printf "Error generating thumbnail for #{image.path}: #{e}\r"
178
219
  puts e.backtrace
179
220
  end
180
221
  if i % 5 == 0
@@ -187,13 +228,7 @@ module Jekyll
187
228
  puts ""
188
229
 
189
230
  begin
190
- @images.sort! {|a,b|
191
- if date_times[a] == date_times[b]
192
- a <=> b
193
- else
194
- date_times[a] <=> date_times[b]
195
- end
196
- }
231
+ @images.sort!
197
232
  if gallery_config["sort_reverse"]
198
233
  @images.reverse!
199
234
  end
@@ -204,9 +239,15 @@ module Jekyll
204
239
 
205
240
  site.static_files = @site.static_files
206
241
  self.data["images"] = @images
207
- self.data["best_image"] = gallery_config["best_image"] || best_image
208
- best_image_path = File.join(dir.to_s, best_image.to_s)
209
- self.data["date_time"] = get_exif_date_time(best_image_path)
242
+ best_image = gallery_config["best_image"] || best_image
243
+ self.data["best_image"] = best_image
244
+ if date_times.has_key?(best_image)
245
+ gallery_date_time = date_times[best_image]
246
+ else
247
+ puts "#{gallery_name}: best_image #{best_image} not found!"
248
+ gallery_date_time = 0
249
+ end
250
+ self.data["date_time"] = gallery_date_time
210
251
  end
211
252
  end
212
253
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-gallery-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geoff Greer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-07 00:00:00.000000000 Z
11
+ date: 2016-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: exifr