jekyll-paginate-v2 1.6.1 → 1.7.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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 520aefbd27b59fcb86fcaca7871c693295bafb16
|
|
4
|
+
data.tar.gz: 3e45a7ccc457134a43ee81520dc0f32971c9989d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 31e6855bc99cd94c7160da6e5926046f7cb32b783bd177c9b5ef1d3d38b989063746df296a3909159e3fbc43d9285202d424d165ef639c0187c002828b8ff332
|
|
7
|
+
data.tar.gz: 734e0a050c950f4535c49eb115009f65c509ecd20ce8c1c95b99b27fa535bef19f8a990457edd8a9e1207184004f617d84e416385bf1602c73af28470af51532
|
data/README-GENERATOR.md
CHANGED
|
@@ -22,6 +22,7 @@ The **Generator** forms the core of the pagination logic. It is responsible for
|
|
|
22
22
|
* [How to paginate on combination of filters](#paginate-on-combination-of-filters)
|
|
23
23
|
* [Overriding site configuration](#configuration-overrides)
|
|
24
24
|
* [Advanced Sorting](#advanced-sorting)
|
|
25
|
+
* [Creating Pagination Trails](#creating-pagination-trails)
|
|
25
26
|
* [How to detect auto-generated pages](#detecting-generated-pagination-pages)
|
|
26
27
|
* [Formatting page titles](#formatting-page-titles)
|
|
27
28
|
* [Common issues](#common-issues)
|
|
@@ -79,6 +80,14 @@ pagination:
|
|
|
79
80
|
# in reality this can be any value, suggested are the Microsoft locale-codes (e.g. en_US, en_GB) or simply the ISO-639 language code )
|
|
80
81
|
locale: ''
|
|
81
82
|
|
|
83
|
+
# Optional,omit or set both before and after to zero to disable.
|
|
84
|
+
# Controls how the pagination trail for the paginated pages look like.
|
|
85
|
+
# this feature enables the user to display a <prev, 1, 2, 3, 4, 5, next> pagination trail on their page
|
|
86
|
+
# By default this feature produces two pages before and two pages after the current page (total of 5 pages)
|
|
87
|
+
trail:
|
|
88
|
+
before: 2
|
|
89
|
+
after: 2
|
|
90
|
+
|
|
82
91
|
############################################################
|
|
83
92
|
```
|
|
84
93
|
|
|
@@ -356,6 +365,58 @@ pagination:
|
|
|
356
365
|
---
|
|
357
366
|
```
|
|
358
367
|
|
|
368
|
+
## Creating Pagination Trails
|
|
369
|
+
|
|
370
|
+
<p align="center">
|
|
371
|
+
<img src="https://raw.githubusercontent.com/sverrirs/jekyll-paginate-v2/master/res/pagination-trails.png" width="59" />
|
|
372
|
+
</p>
|
|
373
|
+
|
|
374
|
+
Creating a trail structure for your pagination as shown above can be achieved by enabling the `trail` configuration and including a little extra code in your liquid templates.
|
|
375
|
+
|
|
376
|
+
``` yml
|
|
377
|
+
pagination:
|
|
378
|
+
trail:
|
|
379
|
+
before: 2 # The number of links before the current page
|
|
380
|
+
after: 2 # The number of links after the current page
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Your layout file would then have to include code similar to the following to generate the correct HTML structure
|
|
384
|
+
|
|
385
|
+
``` HTML
|
|
386
|
+
{% if paginator.page_trail %}
|
|
387
|
+
{% for trail in paginator.page_trail %}
|
|
388
|
+
<li>
|
|
389
|
+
<a href="{{ trail.path | prepend: site.baseurl }}" title="{{trail.title}}">{{ trail.num }}</a>
|
|
390
|
+
</li>
|
|
391
|
+
{% endfor %}
|
|
392
|
+
{% endif %}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
The `trail` value exposes three properties:
|
|
396
|
+
* `num`: The number of the page
|
|
397
|
+
* `path`: The path to the page
|
|
398
|
+
* `title`: The title of the page
|
|
399
|
+
|
|
400
|
+
The algorithm will always attempt to keep the same trail length for all pages (`trail length = before + after + 1`).
|
|
401
|
+
Example when on page 4 the trail for the configuration above would look like this
|
|
402
|
+
|
|
403
|
+
<p align="center">
|
|
404
|
+
<img src="https://raw.githubusercontent.com/sverrirs/jekyll-paginate-v2/master/res/pagination-trails-p4.png" />
|
|
405
|
+
</p>
|
|
406
|
+
|
|
407
|
+
Different number of before and after trail links can be specified. Below is an example of how this yml config would look like when on the same page 4
|
|
408
|
+
|
|
409
|
+
``` yml
|
|
410
|
+
pagination:
|
|
411
|
+
trail:
|
|
412
|
+
before: 1
|
|
413
|
+
after: 3
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
<p align="center">
|
|
417
|
+
<img src="https://raw.githubusercontent.com/sverrirs/jekyll-paginate-v2/master/res/pagination-trails-p4-b1a3.png" />
|
|
418
|
+
</p>
|
|
419
|
+
|
|
359
420
|
## Detecting generated pagination pages
|
|
360
421
|
|
|
361
422
|
To identify the auto-generated pages that are created by the pagination logic when iterating through collections such as `site.pages` the `page.autogen` variable can be used like so
|
|
@@ -12,6 +12,10 @@ module Jekyll
|
|
|
12
12
|
'sort_reverse' => false,
|
|
13
13
|
'sort_field' => 'date',
|
|
14
14
|
'limit' => 0, # Limit how many content objects to paginate (default: 0, means all)
|
|
15
|
+
'trail' => {
|
|
16
|
+
'before' => 0, # Limits how many links to show before the current page in the pagination trail (0, means off, default: 0)
|
|
17
|
+
'after' => 0, # Limits how many links to show after the current page in the pagination trail (0 means off, default: 0)
|
|
18
|
+
},
|
|
15
19
|
'debug' => false, # Turns on debug output for the gem
|
|
16
20
|
'legacy' => false # Internal value, do not use (will be removed after 2018-01-01)
|
|
17
21
|
}
|
|
@@ -235,6 +235,9 @@ module Jekyll
|
|
|
235
235
|
#### BEFORE STARTING REMOVE THE TEMPLATE PAGE FROM THE SITE LIST!
|
|
236
236
|
@page_remove_lambda.call( template )
|
|
237
237
|
|
|
238
|
+
# list of all newly created pages
|
|
239
|
+
newpages = []
|
|
240
|
+
|
|
238
241
|
# Now for each pagination page create it and configure the ranges for the collection
|
|
239
242
|
# This .pager member is a built in thing in Jekyll and defines the paginator implementation
|
|
240
243
|
# Simpy override to use mine
|
|
@@ -284,7 +287,38 @@ module Jekyll
|
|
|
284
287
|
|
|
285
288
|
# Add the page to the site
|
|
286
289
|
@page_add_lambda.call( newpage )
|
|
287
|
-
|
|
290
|
+
|
|
291
|
+
# Store the page in an internal list for later referencing if we need to generate a pagination number path later on
|
|
292
|
+
newpages << newpage
|
|
293
|
+
end #each.do total_pages
|
|
294
|
+
|
|
295
|
+
# Now generate the pagination number path, e.g. so that the users can have a prev 1 2 3 4 5 next structure on their page
|
|
296
|
+
# simplest is to include all of the links to the pages preceeding the current one
|
|
297
|
+
# (e.g for page 1 you get the list 2, 3, 4.... and for page 2 you get the list 3,4,5...)
|
|
298
|
+
if( config['trail'] && !config['trail'].nil? && newpages.size.to_i > 1 )
|
|
299
|
+
trail_before = [config['trail']['before'].to_i, 0].max
|
|
300
|
+
trail_after = [config['trail']['after'].to_i, 0].max
|
|
301
|
+
trail_length = trail_before + trail_after + 1
|
|
302
|
+
|
|
303
|
+
if( trail_before > 0 || trail_after > 0 )
|
|
304
|
+
newpages.select do | npage |
|
|
305
|
+
idx_start = [ npage.pager.page - trail_before - 1, 0].max # Selecting the beginning of the trail
|
|
306
|
+
idx_end = [idx_start + trail_length, newpages.size.to_i].min # Selecting the end of the trail
|
|
307
|
+
|
|
308
|
+
# Always attempt to maintain the max total of <trail_length> pages in the trail (it will look better if the trail doesn't shrink)
|
|
309
|
+
if( idx_end - idx_start < trail_length )
|
|
310
|
+
# Attempt to pad the beginning if we have enough pages
|
|
311
|
+
idx_start = [idx_start - ( trail_length - (idx_end - idx_start) ), 0].max # Never go beyond the zero index
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
# Convert the newpages array into a two dimensional array that has [index, page_url] as items
|
|
315
|
+
#puts( "Trail created for page #{npage.pager.page} (idx_start:#{idx_start} idx_end:#{idx_end})")
|
|
316
|
+
npage.pager.page_trail = newpages[idx_start...idx_end].each_with_index.map {|ipage,idx| PageTrail.new(idx_start+idx+1, ipage.pager.page_path, ipage.data['title'])}
|
|
317
|
+
#puts( npage.pager.page_trail )
|
|
318
|
+
end #newpages.select
|
|
319
|
+
end #if trail_before / trail_after
|
|
320
|
+
end # if config['trail']
|
|
321
|
+
|
|
288
322
|
end # function paginate
|
|
289
323
|
|
|
290
324
|
end # class PaginationV2
|
|
@@ -6,7 +6,15 @@ module Jekyll
|
|
|
6
6
|
#
|
|
7
7
|
class Paginator
|
|
8
8
|
attr_reader :page, :per_page, :posts, :total_posts, :total_pages,
|
|
9
|
-
:previous_page, :previous_page_path, :next_page, :next_page_path, :page_path
|
|
9
|
+
:previous_page, :previous_page_path, :next_page, :next_page_path, :page_path, :page_trail
|
|
10
|
+
|
|
11
|
+
def page_trail
|
|
12
|
+
@page_trail
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def page_trail=(page_array)
|
|
16
|
+
@page_trail = page_array
|
|
17
|
+
end
|
|
10
18
|
|
|
11
19
|
# Initialize a new Paginator.
|
|
12
20
|
#
|
|
@@ -45,11 +53,32 @@ module Jekyll
|
|
|
45
53
|
'previous_page' => previous_page,
|
|
46
54
|
'previous_page_path' => previous_page_path,
|
|
47
55
|
'next_page' => next_page,
|
|
48
|
-
'next_page_path' => next_page_path
|
|
56
|
+
'next_page_path' => next_page_path,
|
|
57
|
+
'page_trail' => page_trail
|
|
49
58
|
}
|
|
50
59
|
end
|
|
51
60
|
|
|
52
61
|
end # class Paginator
|
|
53
62
|
|
|
63
|
+
# Small utility class that handles individual pagination trails
|
|
64
|
+
# and makes them easier to work with in Liquid
|
|
65
|
+
class PageTrail
|
|
66
|
+
attr_reader :num, :path, :title
|
|
67
|
+
|
|
68
|
+
def initialize( num, path, title )
|
|
69
|
+
@num = num
|
|
70
|
+
@path = path
|
|
71
|
+
@title = title
|
|
72
|
+
end #func initialize
|
|
73
|
+
|
|
74
|
+
def to_liquid
|
|
75
|
+
{
|
|
76
|
+
'num' => num,
|
|
77
|
+
'path' => path+"index.html",
|
|
78
|
+
'title' => title
|
|
79
|
+
}
|
|
80
|
+
end
|
|
81
|
+
end #class PageTrail
|
|
82
|
+
|
|
54
83
|
end # module PaginateV2
|
|
55
84
|
end # module Jekyll
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
module Jekyll
|
|
2
2
|
module PaginateV2
|
|
3
|
-
VERSION = "1.
|
|
3
|
+
VERSION = "1.7.0"
|
|
4
4
|
# When modifying remember to issue a new tag command in git before committing, then push the new tag
|
|
5
|
-
# git tag -a v1.
|
|
5
|
+
# git tag -a v1.7.0 -m "Gem v1.7.0"
|
|
6
6
|
# git push origin --tags
|
|
7
7
|
end # module PaginateV2
|
|
8
8
|
end # module Jekyll
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jekyll-paginate-v2
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sverrir Sigmundarson
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-01-
|
|
11
|
+
date: 2017-01-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jekyll
|