jekyll-galleries 0.7.2 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +5 -0
- data/README.md +12 -3
- data/lib/jekyll/galleries.rb +94 -23
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0489231e919c218babd6617e37e913be0dd8c72d
|
4
|
+
data.tar.gz: f22848c946b32ac8f1214b92e1ef0c0c9a5abf6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f34067a34ac82992965a482fce1feb0052eba6db5ce772f3083b9a2d0972d19f58a1d7472d0c7d0486c251d7ada79ad69564c181b297e05598d17687c6e424d5
|
7
|
+
data.tar.gz: 8a88da9bbc312697178aa02018ccc8f79defbc429e947a0765d30d4547e5f8fcd725fcb1727a1eacb1227bb001e6fdcb94c4988ec78327595390ec356131bdbb
|
data/ChangeLog
CHANGED
data/README.md
CHANGED
@@ -4,6 +4,8 @@ By [allenlsy](mailto:cafe@allenlsy.com)
|
|
4
4
|
|
5
5
|
__Jekyll-galleries__ is a Jekyll plugin used for generating photo galleries from image folders.
|
6
6
|
|
7
|
+
A demo to this plugin is on my [personal website](http://allenlsy.com/galleries.html).
|
8
|
+
|
7
9
|
If you have any questions or any suggestions, I'm very pleased to hear from you. I need your support and ideas to make this plugin better.
|
8
10
|
|
9
11
|
---
|
@@ -25,15 +27,15 @@ Here is an example on how to use this plugin.
|
|
25
27
|
|
26
28
|
##### 1. Setup the plugin
|
27
29
|
|
28
|
-
Add `gem 'jekyll-galleries'` to the `Gemfile` in your jekyll project, and
|
30
|
+
Add `gem 'jekyll-galleries'` to the `Gemfile` in your jekyll project, and also the depedencies `rmagick`. Then run `bundle` command in shell to install them. Next add `require 'jekyll/galleries'` to `_plugins/_ext.rb`.
|
29
31
|
|
30
|
-
There are three attributes which are optional. All of them should be put
|
32
|
+
There are three attributes which are optional. All of them should be put into the `_config.yml`, if needed.
|
31
33
|
|
32
34
|
* `galleries` specifies the extra information of each gallery, using the YAML object format.
|
33
35
|
* `gallery_dir` defines which folder in jekyll project stores the all the galleries. Default value is `galleries` if not defined.
|
34
36
|
* `gallery_layout` defines the layout __Jekyll-galleries__ will use to render each single gallery. Default value is `gallery`, which uses the `_layouts/gallery.html` as the template.
|
35
37
|
|
36
|
-
Check out the example `_config.yml` if you are still not clear.
|
38
|
+
Check out the example `_config.yml` down below if you are still not clear.
|
37
39
|
|
38
40
|
##### 2. Add galleries to jekyll project
|
39
41
|
|
@@ -64,6 +66,13 @@ Inside the optional `galleries` attribute in `_config.yml`, you can have objects
|
|
64
66
|
|
65
67
|
Then in the template, the gallery will have the attribute `subtitle` that can be rendered.
|
66
68
|
|
69
|
+
Another attribute is `top`. If you set `top: true` for a gallery, then this gallery will always be put on top of the galleries index page. For example:
|
70
|
+
|
71
|
+
galleries:
|
72
|
+
- name: Sample Gallery
|
73
|
+
subtitle: This is a sample gallery
|
74
|
+
top: true
|
75
|
+
|
67
76
|
##### 5. Use attributes in template
|
68
77
|
|
69
78
|
Now, the `site.data['galleries']` global variable contains all the gallery pages. It is an array of `GalleryPage` objects. Each `GalleryPage` object has at least three attributes: `name`, `date` and `url`. `url` is URL escaped. You can use them in your galleries index page.
|
data/lib/jekyll/galleries.rb
CHANGED
@@ -1,12 +1,25 @@
|
|
1
|
+
require 'RMagick'
|
2
|
+
include Magick
|
3
|
+
|
4
|
+
include FileUtils
|
5
|
+
|
1
6
|
module Jekyll
|
2
7
|
class GalleryGenerator < Generator
|
3
|
-
attr_accessor :site
|
8
|
+
attr_accessor :site
|
9
|
+
attr_accessor :gallery_dir # directory for storing galleries. Default value is `galleries`
|
10
|
+
attr_accessor :gallery_layout # layout file for gallery. Default value is `gallery`
|
11
|
+
attr_accessor :galleries
|
12
|
+
attr_accessor :gallery_pages
|
13
|
+
attr_accessor :top_gallery_pages # GalleryPage array of topped galleries
|
14
|
+
|
4
15
|
class << self; attr_accessor :site; end
|
5
16
|
|
6
17
|
def generate(site)
|
7
18
|
self.class.site = self.site = site
|
8
19
|
self.gallery_dir = site.config['gallery_dir'] || 'galleries'
|
9
20
|
self.gallery_layout = site.config['gallery_layout'] || 'gallery'
|
21
|
+
self.gallery_pages = []
|
22
|
+
self.top_gallery_pages = []
|
10
23
|
|
11
24
|
# array of GalleryPage objects
|
12
25
|
site.data['galleries'] = []
|
@@ -16,6 +29,17 @@ module Jekyll
|
|
16
29
|
gallery_dirs.each do |dir|
|
17
30
|
generate_gallery_page(dir)
|
18
31
|
end
|
32
|
+
|
33
|
+
# ordering the Page generation
|
34
|
+
site.pages << self.top_gallery_pages
|
35
|
+
site.pages << self.gallery_pages
|
36
|
+
site.pages.flatten!
|
37
|
+
|
38
|
+
# ordering galleries on gallery index page
|
39
|
+
site.data['galleries'] << self.top_gallery_pages
|
40
|
+
site.data['galleries'] << self.gallery_pages.reverse!
|
41
|
+
site.data['galleries'].flatten!
|
42
|
+
|
19
43
|
end
|
20
44
|
|
21
45
|
private
|
@@ -24,54 +48,72 @@ module Jekyll
|
|
24
48
|
|
25
49
|
page = GalleryPage.new(site, site.source, self.gallery_dir, gallery_dir, data)
|
26
50
|
|
27
|
-
|
28
|
-
|
29
|
-
site.data['galleries'] << page
|
51
|
+
pages_queue = page.top? ? top_gallery_pages : gallery_pages # decide the queue that current page should be put into
|
52
|
+
pages_queue << page
|
30
53
|
end
|
31
|
-
|
32
54
|
end
|
33
55
|
|
34
56
|
class GalleryPage < Page
|
35
57
|
# Valid post name regex.
|
36
58
|
MATCHER = /^(\d+-\d+-\d+)-(.*)$/
|
37
59
|
CONFIG_GALLERIES_ATTR = 'galleries'
|
38
|
-
|
39
|
-
attr_accessor :
|
60
|
+
attr_accessor :url, :name, :slug, :date, :base
|
61
|
+
attr_accessor :gen_dir # path that this gallery will be generated into
|
62
|
+
attr_accessor :gallery_dir # the original path of the this gallery on local
|
63
|
+
attr_accessor :gallery_dir_name # the name of this gallery dir
|
64
|
+
attr_accessor :thumbs_dir # path of thumbnails dir
|
40
65
|
|
41
66
|
def initialize(site, base, gen_dir, gallery_dir, data={})
|
67
|
+
# preparation
|
68
|
+
@base = base
|
69
|
+
@site = site
|
70
|
+
self.gen_dir = gen_dir
|
71
|
+
self.gallery_dir = gallery_dir
|
42
72
|
self.content = data.delete('content') || ''
|
43
73
|
self.data = data
|
74
|
+
self.thumbs_dir = site.config['thumbs_dir']
|
75
|
+
|
76
|
+
self.gallery_dir_name = File.basename gallery_dir
|
77
|
+
super(site, base, gen_dir, self.gallery_dir_name)
|
44
78
|
|
45
|
-
|
46
|
-
|
79
|
+
# ---
|
80
|
+
generate_photos
|
47
81
|
|
48
|
-
|
49
|
-
|
50
|
-
|
82
|
+
end
|
83
|
+
|
84
|
+
def generate_photos
|
85
|
+
photos_config_filepath = "#{@base}/#{@site.config['gallery_dir']}/#{self.date}-#{self.name}.yml"
|
86
|
+
photos_config = YAML.load(File.open(photos_config_filepath).read) if File.exists?(photos_config_filepath) # config of this gallery
|
51
87
|
|
52
88
|
# generating photos
|
53
|
-
self.url = "/#{gen_dir}/#{self.
|
54
|
-
self.data['url'] = URI.escape self.url
|
89
|
+
self.url = "/#{self.gen_dir}/#{self.gallery_dir_name}/index.html" # gallery page url
|
90
|
+
self.data['url'] = URI.escape self.url
|
55
91
|
|
56
92
|
# For each photo, initial attributes are `filename` and `url`
|
57
|
-
photos = Dir["#{gallery_dir}/*"].map { |e| { filename: File.basename(e), url: URI.escape("/#{gen_dir}/#{gallery_dir_name}/#{File.basename e}") } } # basic photos attributes
|
93
|
+
photos = Dir["#{self.gallery_dir}/*"].map { |e| { filename: File.basename(e), url: URI.escape("/#{self.gen_dir}/#{self.gallery_dir_name}/#{File.basename e}") } } # basic photos attributes
|
58
94
|
|
59
95
|
self.data['photos'] = [] # storing an array of Photo
|
60
96
|
photos.each do |photo|
|
61
97
|
photo_data = {}
|
62
98
|
photo_data = photos_config.find { |e| e['filename'] == photo[:filename] } if photos_config
|
63
|
-
|
99
|
+
|
100
|
+
self.data['photos'] << Photo.new(@site, photo[:filename], self, photo_data)
|
64
101
|
end
|
65
102
|
|
66
103
|
# gallery page configuration
|
67
|
-
if site.config[CONFIG_GALLERIES_ATTR]
|
68
|
-
attr = site.config[CONFIG_GALLERIES_ATTR].find { |e| e['name'] == self.name}
|
104
|
+
if @site.config[CONFIG_GALLERIES_ATTR]
|
105
|
+
attr = @site.config[CONFIG_GALLERIES_ATTR].find { |e| e['name'] == self.name }
|
69
106
|
if attr
|
70
107
|
attr.each { |k, v| self.data[k] = v }
|
71
108
|
end
|
72
109
|
end
|
73
110
|
end
|
74
111
|
|
112
|
+
|
113
|
+
def top?
|
114
|
+
self.data['top'] and self.data['top'] == true
|
115
|
+
end
|
116
|
+
|
75
117
|
def read_yaml(*)
|
76
118
|
end
|
77
119
|
|
@@ -93,16 +135,45 @@ module Jekyll
|
|
93
135
|
end
|
94
136
|
|
95
137
|
class Photo
|
96
|
-
attr_accessor :filename, :url, :data
|
138
|
+
attr_accessor :filename, :url, :data, :thumbnail_url
|
97
139
|
|
98
|
-
def initialize(filename,
|
99
|
-
|
100
|
-
|
140
|
+
def initialize(site, filename, gallery, options=nil)
|
141
|
+
@site = site
|
142
|
+
@gallery = gallery
|
101
143
|
self.data = options || {}
|
144
|
+
self.data['url'] = URI.escape("/#{gallery.gen_dir}/#{gallery.gallery_dir_name}/#{filename}")
|
145
|
+
self.data['filename'] = filename
|
146
|
+
self.filename = filename
|
147
|
+
|
148
|
+
|
149
|
+
@thumbs_dir = site.config['thumbnails_dir']
|
150
|
+
generate_thumbnails if @thumbs_dir
|
151
|
+
|
102
152
|
end
|
103
153
|
|
104
154
|
def to_liquid
|
105
|
-
self.data
|
155
|
+
self.data
|
156
|
+
end
|
157
|
+
|
158
|
+
def generate_thumbnails
|
159
|
+
size_x = @site.config['thumbnail_x'] || 100
|
160
|
+
size_y = @site.config['thumbnail_y'] || 100
|
161
|
+
|
162
|
+
full_thumbs_path = "#{@site.dest}/#{@thumbs_dir}/#{@gallery.gallery_dir_name}"
|
163
|
+
FileUtils.mkdir_p(full_thumbs_path, :mode => 0755)
|
164
|
+
if File.file?("#{full_thumbs_path}/#{self.filename}") == false or File.mtime("#{@gallery.gallery_dir}/#{self.filename}") > File.mtime("#{full_thumbs_path}/#{self.filename}")
|
165
|
+
begin
|
166
|
+
m_image = ImageList.new("#{@gallery.gallery_dir}/#{self.filename}")
|
167
|
+
m_image.send("resize_to_fit!", size_x, size_y)
|
168
|
+
puts "Writing thumbnail to #{full_thumbs_path}/#{self.filename}"
|
169
|
+
m_image.write("#{full_thumbs_path}/#{self.filename}")
|
170
|
+
rescue
|
171
|
+
puts "error"
|
172
|
+
puts $!
|
173
|
+
end
|
174
|
+
GC.start
|
175
|
+
end
|
176
|
+
self.data['thumbnail_url'] = URI.escape("/#{@thumbs_dir}/#{@gallery.gallery_dir_name}/#{self.filename}")
|
106
177
|
end
|
107
178
|
end
|
108
179
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-galleries
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- allenlsy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Jekyll plugin to automatically generate photo gallery (album) from image
|
14
14
|
folder.
|
@@ -32,7 +32,7 @@ rdoc_options:
|
|
32
32
|
- --line-numbers
|
33
33
|
- --all
|
34
34
|
- --title
|
35
|
-
- jekyll-galleries Application documentation (v0.
|
35
|
+
- jekyll-galleries Application documentation (v0.8.0)
|
36
36
|
- --main
|
37
37
|
- ChangeLog
|
38
38
|
require_paths:
|