jekyll-paginate-v2 1.3.1 → 1.3.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.
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'))
|