jekyll-paginate-v2 1.3.1 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d7de5f8ddc3857991231c6f4a76ef803728a164
|
4
|
+
data.tar.gz: 6c516cc6e012ecbea06f9a859401d36cc99cae71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7858c9b171488a7a956ec3bc226ca7ee8f0ea2467866bcb74ddb4f9db57bcf1b0efa8427cd2f76c98e5aa96185d0bb50648faf39ab5554182a8c70a97aa9213e
|
7
|
+
data.tar.gz: 46de0b546ff6bb11a1848535685710bc6b6eb6260f726602f74fe842da038f60efca60fc1b0b9a623183892b161524832830bfdcf3e1af45a8390061a18542e5
|
data/README.md
CHANGED
@@ -10,6 +10,22 @@ The code was based on the original design of [jekyll-paginate](https://github.co
|
|
10
10
|
:heart:
|
11
11
|
|
12
12
|
|
13
|
+
* [Installation](#installation)
|
14
|
+
* [Features](#features)
|
15
|
+
* [New site configuration](#site-configuration)
|
16
|
+
* [New page configuration](#page-configuration)
|
17
|
+
* [Backwards compatibility](#backwards-compatibility-with-jekyll-paginate)
|
18
|
+
* [How to paginate categories, tags, locales](#paginate-categories-tags-locales)
|
19
|
+
+ [Filtering categories](#filtering-categories)
|
20
|
+
+ [Filtering tags](#filtering-tags)
|
21
|
+
+ [Filtering locales](#filtering-locales)
|
22
|
+
* [How to paginate on combination of filters](#paginate-on-combination-of-filters)
|
23
|
+
* [Specifying configuration overrides](#configuration-overrides)
|
24
|
+
* [Common issues](#common-issues)
|
25
|
+
- [Bundler error upgrading gem (Bundler::GemNotFound)](#im-getting-a-bundler-error-after-upgrading-the-gem-bundlergemnotfound)
|
26
|
+
* [Issues / to-be-completed](#issues--to-be-completed)
|
27
|
+
* [How to Contribute](#contributing)
|
28
|
+
|
13
29
|
## Installation
|
14
30
|
|
15
31
|
```
|
@@ -38,28 +54,6 @@ In addition to all the features offered by the older [jekyll-paginate gem](https
|
|
38
54
|
|
39
55
|
All this while being fully backwards compatible with the old [jekyll-paginate](https://github.com/jekyll/jekyll-paginate) gem.
|
40
56
|
|
41
|
-
## Issues / to-be-completed
|
42
|
-
* Incomplete unit-tests
|
43
|
-
* Missing integration tests [#2](https://github.com/jekyll/jekyll-paginate/pull/2)
|
44
|
-
* Missing more detailed examples
|
45
|
-
* Unable to auto-generate category/tag/language pagination pages. Still requires programmer to specify the pages him/herself.
|
46
|
-
* _Exclude_ filter not implemented [#6](https://github.com/jekyll/jekyll-paginate/issues/6)
|
47
|
-
|
48
|
-
## Contributing
|
49
|
-
|
50
|
-
I currently need testers and people willing to give me feedback and code reviews.
|
51
|
-
|
52
|
-
1. Fork it ( https://github.com/sverrirs/jekyll-paginate-v2/fork )
|
53
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
54
|
-
3. Run the unit tests (`rake`)
|
55
|
-
4. Commit your changes (`git commit -am 'Add some feature'`)
|
56
|
-
5. Build the gem locally (`gem build jekyll-paginate-v2.gemspec`)
|
57
|
-
6. Test and verify the gem locally (`gem install ./jekyll-paginate-v2-x.x.x.gem`)
|
58
|
-
7. Push to the branch (`git push origin my-new-feature`)
|
59
|
-
8. Create new Pull Request
|
60
|
-
|
61
|
-
Note: This project uses [semantic versioning](http://semver.org/).
|
62
|
-
|
63
57
|
## Site configuration
|
64
58
|
|
65
59
|
The plugin can be configured in the site's `_config.yml` file by including the `pagination` configuration element
|
@@ -104,20 +98,6 @@ pagination:
|
|
104
98
|
############################################################
|
105
99
|
```
|
106
100
|
|
107
|
-
### Backwards compatibility with jekyll-paginate
|
108
|
-
This gem is fully backwards compatible with the old [jekyll-paginate](https://github.com/jekyll/jekyll-paginate) gem and can be used as a zero-configuration replacement for it. If the old site config is detected then the gem will fall back to the old logic of pagination.
|
109
|
-
|
110
|
-
> You cannot run both the new pagination logic and the old one at the same time
|
111
|
-
|
112
|
-
The following `_config.yml` settings are honored when running this gem in compatability mode
|
113
|
-
|
114
|
-
``` yml
|
115
|
-
paginate: 8
|
116
|
-
paginate_path: "/legacy/page:num/"
|
117
|
-
```
|
118
|
-
|
119
|
-
See more about the old style of pagination at the [jekyll-paginate](https://github.com/jekyll/jekyll-paginate) page.
|
120
|
-
|
121
101
|
## Page configuration
|
122
102
|
|
123
103
|
To enable pagination on a page (i.e. make that page a template for pagination) then simply include the minimal pagination configuration in the page front-matter:
|
@@ -163,6 +143,23 @@ The code is fully backwards compatible and you will have access to all the norma
|
|
163
143
|
|
164
144
|
Neat!
|
165
145
|
|
146
|
+
## Backwards compatibility with jekyll-paginate
|
147
|
+
This gem is fully backwards compatible with the old [jekyll-paginate](https://github.com/jekyll/jekyll-paginate) gem and can be used as a zero-configuration replacement for it. If the old site config is detected then the gem will fall back to the old logic of pagination.
|
148
|
+
|
149
|
+
> You cannot run both the new pagination logic and the old one at the same time
|
150
|
+
|
151
|
+
The following `_config.yml` settings are honored when running this gem in compatability mode
|
152
|
+
|
153
|
+
``` yml
|
154
|
+
paginate: 8
|
155
|
+
paginate_path: "/legacy/page:num/"
|
156
|
+
```
|
157
|
+
|
158
|
+
See more about the old style of pagination at the [jekyll-paginate](https://github.com/jekyll/jekyll-paginate) page.
|
159
|
+
|
160
|
+
> :bangbang: **Warning** Backwards compatibility with the old jekyll-paginate gem is currently scheduled to be removed after **1st January 2018**. Users will start receiving warning log messages when running jekyll two months before this date.
|
161
|
+
|
162
|
+
|
166
163
|
## Paginate categories, tags, locales
|
167
164
|
|
168
165
|
Enabling pagination for specific categories, tags or locales is as simple as adding values to the pagination template front-matter and corresponding values in the posts.
|
@@ -276,3 +273,25 @@ pagination:
|
|
276
273
|
> bundler/spec_set.rb:95:in `block in materialize': Could not find jekyll-paginate-v2-1.0.0 in any of the sources (Bundler::GemNotFound)
|
277
274
|
|
278
275
|
When running `jekyll serve` if you ever get an error similar to the one above the solution is to delete your `Gemfile.lock` file and try again.
|
276
|
+
|
277
|
+
## Issues / to-be-completed
|
278
|
+
* Incomplete unit-tests
|
279
|
+
* Missing integration tests [#2](https://github.com/jekyll/jekyll-paginate/pull/2)
|
280
|
+
* Missing more detailed examples
|
281
|
+
* Unable to auto-generate category/tag/language pagination pages. Still requires programmer to specify the pages him/herself.
|
282
|
+
* _Exclude_ filter not implemented [#6](https://github.com/jekyll/jekyll-paginate/issues/6)
|
283
|
+
|
284
|
+
## Contributing
|
285
|
+
|
286
|
+
I currently need testers and people willing to give me feedback and code reviews.
|
287
|
+
|
288
|
+
1. Fork it ( https://github.com/sverrirs/jekyll-paginate-v2/fork )
|
289
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
290
|
+
3. Run the unit tests (`rake`)
|
291
|
+
4. Commit your changes (`git commit -am 'Add some feature'`)
|
292
|
+
5. Build the gem locally (`gem build jekyll-paginate-v2.gemspec`)
|
293
|
+
6. Test and verify the gem locally (`gem install ./jekyll-paginate-v2-x.x.x.gem`)
|
294
|
+
7. Push to the branch (`git push origin my-new-feature`)
|
295
|
+
8. Create new Pull Request
|
296
|
+
|
297
|
+
Note: This project uses [semantic versioning](http://semver.org/).
|
@@ -48,12 +48,12 @@ module Jekyll
|
|
48
48
|
# directories, e.g.: page2/index.html, page3/index.html, etc and adds more
|
49
49
|
# site-wide data.
|
50
50
|
#
|
51
|
-
def self.paginate(legacy_config, all_posts, page,
|
51
|
+
def self.paginate(legacy_config, all_posts, page, page_create_lambda, logging_lambda )
|
52
52
|
pages = Utils.calculate_number_of_pages(all_posts, legacy_config['per_page'].to_i)
|
53
53
|
(1..pages).each do |num_page|
|
54
54
|
pager = Paginator.new( legacy_config['per_page'], legacy_config['permalink'], all_posts, num_page, pages, page.url )
|
55
55
|
if num_page > 1
|
56
|
-
newpage =
|
56
|
+
newpage = page_create_lambda.call( page.dir, page.name )
|
57
57
|
newpage.pager = pager
|
58
58
|
newpage.dir = Utils.paginate_path(page.url, num_page, legacy_config['permalink'])
|
59
59
|
else
|
@@ -65,6 +65,7 @@ module Jekyll
|
|
65
65
|
|
66
66
|
################ 2 ####################
|
67
67
|
# Create the proc that constructs the real-life site page
|
68
|
+
# This is necessary to decouple the code from the Jekyll site object
|
68
69
|
page_create_lambda = lambda do | template_dir, template_name |
|
69
70
|
# Create the new page
|
70
71
|
newpage = Page.new( site, site.source, template_dir, template_name)
|
@@ -75,12 +76,27 @@ module Jekyll
|
|
75
76
|
end
|
76
77
|
|
77
78
|
################ 3 ####################
|
79
|
+
# Create a proc that will delegate logging
|
80
|
+
# Decoupling Jekyll specific logging
|
81
|
+
logging_lambda = lambda do | message, type="info" |
|
82
|
+
if type == 'debug'
|
83
|
+
Jekyll.logger.debug "Pagination:", message
|
84
|
+
elsif type == 'error'
|
85
|
+
Jekyll.logger.error "Pagination:", message
|
86
|
+
elsif type == 'warn'
|
87
|
+
Jekyll.logger.warn "Pagination:", message
|
88
|
+
else
|
89
|
+
Jekyll.logger.info "Pagination:", message
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
################ 4 ####################
|
78
94
|
# Now create and call the model with the real-life page creation proc and site data
|
79
95
|
model = PaginationModel.new()
|
80
96
|
if( default_config['legacy'] ) #(REMOVE AFTER 2018-01-01)
|
81
|
-
model.run_compatability(default_config, all_pages, site_title, all_posts,
|
97
|
+
model.run_compatability(default_config, all_pages, site_title, all_posts, page_create_lambda, logging_lambda) #(REMOVE AFTER 2018-01-01)
|
82
98
|
else
|
83
|
-
model.run(default_config, all_pages, site_title, all_posts,
|
99
|
+
model.run(default_config, all_pages, site_title, all_posts, page_create_lambda, logging_lambda)
|
84
100
|
end
|
85
101
|
|
86
102
|
end
|
@@ -3,12 +3,13 @@ module Jekyll
|
|
3
3
|
|
4
4
|
class PaginationModel
|
5
5
|
|
6
|
-
def run(default_config, site_pages, site_title, all_posts,
|
6
|
+
def run(default_config, site_pages, site_title, all_posts, page_create_lambda, logging_lambda)
|
7
7
|
# By default if pagination is enabled we attempt to find all index.html pages in the site
|
8
8
|
templates = self.discover_paginate_templates(site_pages)
|
9
9
|
if( templates.size.to_i <= 0 )
|
10
|
-
|
11
|
-
"
|
10
|
+
logging_lambda.call "Is enabled, but I couldn't find any pagination template page "+
|
11
|
+
"to use as the pagination template. Skipping pagination. "+
|
12
|
+
"Templates must have 'paginate: enabled: true' in their front-matter.", "warn"
|
12
13
|
return
|
13
14
|
end
|
14
15
|
|
@@ -29,10 +30,10 @@ module Jekyll
|
|
29
30
|
# requiring this makes the logic simpler as I don't need to determine which index pages
|
30
31
|
# were generated automatically and which weren't
|
31
32
|
if( template_config['enabled'] )
|
32
|
-
|
33
|
+
logging_lambda.call "found template: "+template.path
|
33
34
|
# Now construct the pagination data for this template page
|
34
35
|
#self.paginate(site, template, template_config, all_posts, all_tags, all_categories, all_locales)
|
35
|
-
self.paginate(template, template_config, site_title, all_posts, all_tags, all_categories, all_locales,
|
36
|
+
self.paginate(template, template_config, site_title, all_posts, all_tags, all_categories, all_locales, page_create_lambda, logging_lambda)
|
36
37
|
end
|
37
38
|
end
|
38
39
|
end #for
|
@@ -43,21 +44,27 @@ module Jekyll
|
|
43
44
|
# no changes should be made to this function and it should be retired and deleted after 2018-01-01
|
44
45
|
# (REMOVE AFTER 2018-01-01)
|
45
46
|
#
|
46
|
-
def run_compatability(legacy_config, site_pages, site_title, all_posts,
|
47
|
+
def run_compatability(legacy_config, site_pages, site_title, all_posts, page_create_lambda, logging_lambda)
|
47
48
|
|
49
|
+
# Decomissioning error
|
48
50
|
if( date = Date.strptime("20180101","%Y%m%d") <= Date.today )
|
49
51
|
raise ArgumentError.new("Legacy jekyll-paginate configuration compatibility mode has expired. Please upgrade to jekyll-paginate-v2 configuration.")
|
50
52
|
end
|
51
53
|
|
52
|
-
|
54
|
+
# Two month warning or general notification
|
55
|
+
if( date = Date.strptime("20171101","%Y%m%d") <= Date.today )
|
56
|
+
logging_lambda.call "Legacy pagination logic will stop working on Jan 1st 2018, update your configs before that time.", "warn"
|
57
|
+
else
|
58
|
+
logging_lambda.call "Detected legacy jekyll-paginate logic being run. "+
|
53
59
|
"Please update your configs to use the new pagination logic (gem jekyll-paginate-v2). This compatibility function "+
|
54
60
|
"will stop working after Jan 1st 2018 and your site build will throw an error."
|
55
|
-
|
61
|
+
end
|
62
|
+
|
56
63
|
if template = CompatibilityUtils.template_page(site_pages, legacy_config['legacy_source'], legacy_config['permalink'])
|
57
|
-
CompatibilityUtils.paginate(legacy_config, all_posts, template,
|
64
|
+
CompatibilityUtils.paginate(legacy_config, all_posts, template, page_create_lambda, logging_lambda)
|
58
65
|
else
|
59
|
-
|
60
|
-
"an index.html page to use as the pagination template. Skipping pagination."
|
66
|
+
logging_lambda.call "Legacy pagination is enabled, but I couldn't find " +
|
67
|
+
"an index.html page to use as the pagination template. Skipping pagination.", "warn"
|
61
68
|
end
|
62
69
|
end # function run_compatability (REMOVE AFTER 2018-01-01)
|
63
70
|
|
@@ -182,7 +189,7 @@ module Jekyll
|
|
182
189
|
# template - The index.html Page that requires pagination.
|
183
190
|
# config - The configuration settings that should be used
|
184
191
|
#
|
185
|
-
def paginate(template, config, site_title, all_posts, all_tags, all_categories, all_locales,
|
192
|
+
def paginate(template, config, site_title, all_posts, all_tags, all_categories, all_locales, page_create_lambda, logging_lambda)
|
186
193
|
# By default paginate on all posts in the site
|
187
194
|
using_posts = all_posts
|
188
195
|
|
@@ -216,7 +223,7 @@ module Jekyll
|
|
216
223
|
pager = Paginator.new( config['per_page'], config['permalink'], using_posts, cur_page_nr, total_pages, template.url )
|
217
224
|
if( cur_page_nr > 1)
|
218
225
|
# External Proc call to create the actual page for us (this is passed in when the pagination is run)
|
219
|
-
newpage =
|
226
|
+
newpage = page_create_lambda.call( template.dir, template.name )
|
220
227
|
newpage.pager = pager
|
221
228
|
newpage.dir = Utils.paginate_path(template.url, cur_page_nr, config['permalink'])
|
222
229
|
if( config.has_key?('title_suffix'))
|