jekyll-paginate-v2 2.0.0 → 3.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 +5 -5
- data/README-AUTOPAGES.md +1 -38
- data/README-GENERATOR.md +15 -40
- data/README.md +1 -1
- data/jekyll-paginate-v2.gemspec +3 -3
- data/lib/jekyll-paginate-v2/autopages/pages/categoryAutoPage.rb +0 -1
- data/lib/jekyll-paginate-v2/autopages/pages/tagAutoPage.rb +0 -1
- data/lib/jekyll-paginate-v2/autopages/utils.rb +13 -9
- data/lib/jekyll-paginate-v2/generator/paginationIndexer.rb +12 -35
- data/lib/jekyll-paginate-v2/generator/paginationPage.rb +4 -16
- data/lib/jekyll-paginate-v2/generator/utils.rb +0 -21
- data/lib/jekyll-paginate-v2/version.rb +4 -2
- metadata +12 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 87dc86f06aedb8e2c1e0b3d398a3580bb00d31569577ebb4ab6bfdefb45ad572
|
4
|
+
data.tar.gz: fd0c6a583189811309acd885c468eb2ed19555e8223743e285a7eecbd575c1a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bf26590ccba733825ab51cc305fdfb914d235983984d734ffdb9c5a95a97acb63c78ca6930c252431e81f8bffe25bb27fd10f87edb2c0915ef0a7e49d82c2ac
|
7
|
+
data.tar.gz: c51a21cb26af1df50f5fd26693828b09321bc556b986be7abdc10e26b333aa3251bf100fc6d059dfc8fc4025b8b511a87df7f9f62878d858de4910a80b2ea9cd
|
data/README-AUTOPAGES.md
CHANGED
@@ -100,42 +100,5 @@ An example of this can be found in [examples/03-tags/_layouts/autopage_collectio
|
|
100
100
|
### Title should not contain pagination macros
|
101
101
|
There is no need to include the pagination title macros `:num`, `:max` or `:title` in the title configuration. The autopages will use the title configuration from the pagination configuration itself.
|
102
102
|
|
103
|
-
### Categories and tags with spaces
|
104
|
-
If you have category or tag names with spaces, make sure you use either
|
105
|
-
1. the singular forms (`tag`, `category`), or
|
106
|
-
2. the plural forms (`tags`, `categories`) using the YAML array syntax.
|
107
|
-
|
108
|
-
See [Filtering categories](https://github.com/sverrirs/jekyll-paginate-v2/blob/master/README-GENERATOR.md#filtering-categories) for more information.
|
109
|
-
|
110
|
-
### Special characters
|
111
|
-
|
112
|
-
As of v1.9.4, special characters are supported in category, tag, and collection names by default:
|
113
|
-
|
114
|
-
``` yml
|
115
|
-
category: sports car, b+w
|
116
|
-
```
|
117
|
-
|
118
|
-
If you need to support the previous behavior where special characters are replaced with hyphens in URLs, use the new `slugify` option:
|
119
|
-
|
120
|
-
``` yml
|
121
|
-
autopages:
|
122
|
-
categories:
|
123
|
-
enabled: true
|
124
|
-
slugify:
|
125
|
-
mode: nil
|
126
|
-
cased: true
|
127
|
-
```
|
128
|
-
|
129
|
-
The following modes are available:
|
130
|
-
|
131
|
-
| Value| Description |
|
132
|
-
| --- | --- |
|
133
|
-
| `none` | No conversion (default) |
|
134
|
-
| `raw` | Replace sequences of spaces with a hyphen |
|
135
|
-
| `nil` | Replace non-alphabetic characters with a hyphen |
|
136
|
-
| `pretty` | Keep some non-alphabetic characters (._~!$&'()+,;=@) |
|
137
|
-
|
138
|
-
If `cased` is set to `true`, all uppercase letters are replaced with their lowercase counterparts.
|
139
|
-
|
140
103
|
## Common issues
|
141
|
-
_None reported so far_
|
104
|
+
_None reported so far_
|
data/README-GENERATOR.md
CHANGED
@@ -21,6 +21,7 @@ The **Generator** forms the core of the pagination logic. It is responsible for
|
|
21
21
|
+ [Filtering locales](#filtering-locales)
|
22
22
|
* [How to paginate on combination of filters](#paginate-on-combination-of-filters)
|
23
23
|
* [Overriding site configuration](#configuration-overrides)
|
24
|
+
* [Offsetting posts (how to skip newest posts)](#offsetting-posts)
|
24
25
|
* [Advanced Sorting](#advanced-sorting)
|
25
26
|
* [Creating Pagination Trails](#creating-pagination-trails)
|
26
27
|
* [How to detect auto-generated pages](#detecting-generated-pagination-pages)
|
@@ -271,36 +272,6 @@ pagination:
|
|
271
272
|
category: software, ruby
|
272
273
|
```
|
273
274
|
|
274
|
-
You may use also use `categories` instead:
|
275
|
-
|
276
|
-
``` yml
|
277
|
-
pagination:
|
278
|
-
enabled: true
|
279
|
-
categories:
|
280
|
-
- software
|
281
|
-
- ruby
|
282
|
-
```
|
283
|
-
|
284
|
-
**Note:** Do *not* use `categories` as follows:
|
285
|
-
|
286
|
-
``` yml
|
287
|
-
categories: programming language, ruby
|
288
|
-
```
|
289
|
-
|
290
|
-
i.e. with category names that have spaces in them. Jekyll will split the above using spaces as the delimiter, resulting in `programming`, `language,`, and `ruby` as categories. Instead, use
|
291
|
-
|
292
|
-
``` yml
|
293
|
-
category: programming language, ruby
|
294
|
-
```
|
295
|
-
|
296
|
-
or
|
297
|
-
|
298
|
-
``` yml
|
299
|
-
categories:
|
300
|
-
- programming language
|
301
|
-
- ruby
|
302
|
-
```
|
303
|
-
|
304
275
|
> To define categories you can either specify them in the front-matter or through the [directory structure](http://jekyllrb.com/docs/variables/#page-variables) of your jekyll site (Categories are derived from the directory structure above the \_posts directory). You can actually use both approaches to assign your pages to multiple categories.
|
305
276
|
|
306
277
|
### Filtering tags
|
@@ -321,16 +292,6 @@ pagination:
|
|
321
292
|
tag: cool, life
|
322
293
|
```
|
323
294
|
|
324
|
-
As with categories, you may also use the following syntax:
|
325
|
-
|
326
|
-
``` yml
|
327
|
-
pagination:
|
328
|
-
enabled: true
|
329
|
-
tags:
|
330
|
-
- cool
|
331
|
-
- life
|
332
|
-
```
|
333
|
-
|
334
295
|
> When specifying tags in your posts make sure that the values are not enclosed in single quotes (double quotes are fine). If they are you will get a cryptic error when generating your site that looks like _"Error: could not read file <FILE>: did not find expected key while parsing a block mapping at line 2 column 1"_
|
335
296
|
|
336
297
|
### Filtering locales
|
@@ -394,6 +355,20 @@ pagination:
|
|
394
355
|
sort_reverse: false
|
395
356
|
```
|
396
357
|
|
358
|
+
## Offsetting posts
|
359
|
+
The paging logic can be instructed to exclude the first _N_ number of newest posts from the pagination.
|
360
|
+
This can be useful in situations where your site treats the first N posts differently from the rest (e.g. a featured post that is always present).
|
361
|
+
|
362
|
+
The number of pages to skip is configured using the `offset` setting like so
|
363
|
+
|
364
|
+
``` yml
|
365
|
+
pagination:
|
366
|
+
enabled: true
|
367
|
+
offset: 3
|
368
|
+
```
|
369
|
+
|
370
|
+
This example skips the 3 newest posts from the pagination logic.
|
371
|
+
|
397
372
|
## Advanced Sorting
|
398
373
|
Sorting can be done by any field that is available in the post front-matter. You can even sort by nested fields.
|
399
374
|
|
data/README.md
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
Pagination gem built specially for Jekyll 3 and newer that is fully backwards compatible and serves as an enhanced replacement for the previously built-in [jekyll-paginate gem](https://github.com/jekyll/jekyll-paginate). View it on [rubygems.org](https://rubygems.org/gems/jekyll-paginate-v2).
|
4
4
|
|
5
|
+
[](https://www.codeshelter.co/)
|
5
6
|
[](https://rubygems.org/gems/jekyll-paginate-v2)
|
6
7
|
[](https://gitter.im/jekyll-paginate-v2/Lobby)
|
7
8
|
[](https://travis-ci.org/sverrirs/jekyll-paginate-v2)
|
8
|
-
[](https://gemnasium.com/github.com/sverrirs/jekyll-paginate-v2)
|
9
9
|
[](https://codeclimate.com/github/sverrirs/jekyll-paginate-v2)
|
10
10
|
[](https://hakiri.io/github/sverrirs/jekyll-paginate-v2/master)
|
11
11
|
[](https://rubygems.org/gems/jekyll-paginate-v2)
|
data/jekyll-paginate-v2.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.homepage = "https://github.com/sverrirs/jekyll-paginate-v2"
|
16
16
|
spec.license = "MIT"
|
17
17
|
|
18
|
-
spec.summary = %q{Pagination Generator for Jekyll 3}
|
18
|
+
spec.summary = %q{Pagination Generator for Jekyll 3 and newer}
|
19
19
|
spec.description = %q{An enhanced zero-configuration in-place replacement for the now decomissioned built-in jekyll-paginate gem. This pagination gem offers full backwards compatability as well as a slew of new frequently requested features with minimal additional site and page configuration. Optional features include auto-generation of paginated collection, tag and category pages.}
|
20
20
|
|
21
21
|
spec.files = Dir['CODE_OF_CONDUCT.md', 'README*.md', 'LICENSE', 'Rakefile', '*.gemspec', 'Gemfile', 'lib/**/*', 'spec/**/*']
|
@@ -24,10 +24,10 @@ Gem::Specification.new do |spec|
|
|
24
24
|
|
25
25
|
# Gem requires Jekyll to work
|
26
26
|
# ~> is the pessimistic operator and is equivalent to '>= 3.0', '< 4.0'
|
27
|
-
spec.add_runtime_dependency "jekyll", "
|
27
|
+
spec.add_runtime_dependency "jekyll", ">= 3.0", "< 5.0"
|
28
28
|
|
29
29
|
# Development requires more
|
30
30
|
spec.add_development_dependency "bundler", "~> 1.5"
|
31
31
|
spec.add_development_dependency "rake", "~> 10.4"
|
32
32
|
spec.add_development_dependency "minitest", '~> 5.4'
|
33
|
-
end
|
33
|
+
end
|
@@ -11,7 +11,6 @@ module Jekyll
|
|
11
11
|
# this function received the pagination config hash and manipulates it
|
12
12
|
set_autopage_data_lambda = lambda do | in_config |
|
13
13
|
in_config['category'] = category
|
14
|
-
in_config['collection'] = site.collections.keys
|
15
14
|
end
|
16
15
|
|
17
16
|
get_autopage_permalink_lambda = lambda do |permalink_pattern|
|
@@ -11,7 +11,6 @@ module Jekyll
|
|
11
11
|
# this function received the pagination config hash and manipulates it
|
12
12
|
set_autopage_data_lambda = lambda do | config |
|
13
13
|
config['tag'] = tag
|
14
|
-
config['collection'] = site.collections.keys
|
15
14
|
end
|
16
15
|
|
17
16
|
get_autopage_permalink_lambda = lambda do |permalink_pattern|
|
@@ -32,7 +32,7 @@ module Jekyll
|
|
32
32
|
def self.collect_all_docs(site_collections)
|
33
33
|
coll = []
|
34
34
|
site_collections.each do |coll_name, coll_data|
|
35
|
-
if !coll_data.nil?
|
35
|
+
if !coll_data.nil?
|
36
36
|
coll += coll_data.docs.select { |doc| !doc.data.has_key?('pagination') }.each{ |doc| doc.data['__coll'] = coll_name } # Exclude all pagination pages and then for every page store it's collection name
|
37
37
|
end
|
38
38
|
end
|
@@ -49,21 +49,25 @@ module Jekyll
|
|
49
49
|
next if post.data[index_key].nil?
|
50
50
|
next if post.data[index_key].size <= 0
|
51
51
|
next if post.data[index_key].to_s.strip.length == 0
|
52
|
-
|
52
|
+
|
53
53
|
# Only tags and categories come as premade arrays, locale does not, so convert any data
|
54
54
|
# elements that are strings into arrays
|
55
55
|
post_data = post.data[index_key]
|
56
56
|
if post_data.is_a?(String)
|
57
57
|
post_data = post_data.split(/;|,|\s/)
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
post_data.each do |key|
|
61
|
-
key = key.
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
index
|
61
|
+
key = key.strip
|
62
|
+
# If the key is a delimetered list of values
|
63
|
+
# (meaning the user didn't use an array but a string with commas)
|
64
|
+
key.split(/;|,/).each do |raw_k_split|
|
65
|
+
k_split = raw_k_split.to_s.downcase.strip #Clean whitespace and junk
|
66
|
+
if !index.has_key?(k_split)
|
67
|
+
# Need to store the original key value here so that I can present it to the users as a page variable they can use (unmodified, e.g. tags not being 'sci-fi' but "Sci-Fi")
|
68
|
+
# Also, only interested in storing all the keys not the pages in this case
|
69
|
+
index[k_split.to_s] = [k_split.to_s, raw_k_split.to_s]
|
70
|
+
end
|
67
71
|
end
|
68
72
|
end
|
69
73
|
end
|
@@ -66,47 +66,24 @@ module Jekyll
|
|
66
66
|
return nil if posts.nil?
|
67
67
|
return nil if source_posts.nil? # If the source is empty then simply don't do anything
|
68
68
|
return posts if config.nil?
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
return posts if !config.has_key?(config_key) && !config.has_key?(plural_key)
|
73
|
-
return posts if config[config_key].nil? && config[plural_key].nil?
|
69
|
+
return posts if !config.has_key?(config_key)
|
70
|
+
return posts if config[config_key].nil?
|
74
71
|
|
75
72
|
# Get the filter values from the config (this is the cat/tag/locale values that should be filtered on)
|
73
|
+
config_value = config[config_key]
|
76
74
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
config_value = Utils.config_values(config_hash, 'value')
|
81
|
-
matching = config_hash['matching'] || 'all'
|
82
|
-
else
|
83
|
-
# Default array syntax
|
84
|
-
config_value = Utils.config_values(config, config_key)
|
85
|
-
matching = 'all'
|
75
|
+
# If we're dealing with a delimitered string instead of an array then let's be forgiving
|
76
|
+
if( config_value.is_a?(String))
|
77
|
+
config_value = config_value.split(/;|,/)
|
86
78
|
end
|
87
79
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
# Now for all filter values for the config key, let's remove all items from the posts that
|
94
|
-
# aren't common for all collections that the user wants to filter on
|
95
|
-
config_value.each do |key|
|
96
|
-
key = key.to_s.downcase.strip
|
97
|
-
posts = PaginationIndexer.intersect_arrays(posts, source_posts[key])
|
98
|
-
end
|
99
|
-
|
100
|
-
elsif matching == "any"
|
101
|
-
# "or" filter: Remove posts that don't have at least one required key
|
102
|
-
posts.delete_if { |post|
|
103
|
-
post_config = Utils.config_values(post.data, config_key)
|
104
|
-
(config_value & post_config).empty?
|
105
|
-
}
|
106
|
-
|
107
|
-
# else no filter
|
80
|
+
# Now for all filter values for the config key, let's remove all items from the posts that
|
81
|
+
# aren't common for all collections that the user wants to filter on
|
82
|
+
config_value.each do |key|
|
83
|
+
key = key.to_s.downcase.strip
|
84
|
+
posts = PaginationIndexer.intersect_arrays(posts, source_posts[key])
|
108
85
|
end
|
109
|
-
|
86
|
+
|
110
87
|
# The fully filtered final post list
|
111
88
|
return posts
|
112
89
|
end #function read_config_value_and_filter_posts
|
@@ -13,24 +13,12 @@ module Jekyll
|
|
13
13
|
@site = page_to_copy.site
|
14
14
|
@base = ''
|
15
15
|
@url = ''
|
16
|
-
|
17
|
-
@dir = File.dirname(page_to_copy.dir)
|
18
|
-
@name = page_to_copy.name
|
19
|
-
else
|
20
|
-
@name = index_pageandext.nil? ? 'index.html' : index_pageandext
|
21
|
-
end
|
16
|
+
@name = index_pageandext.nil? ? 'index.html' : index_pageandext
|
22
17
|
|
23
18
|
self.process(@name) # Creates the basename and ext member values
|
24
19
|
|
25
|
-
#
|
26
|
-
|
27
|
-
self.data = Jekyll::Utils.deep_merge_hashes(defaults, page_to_copy.data)
|
28
|
-
|
29
|
-
if defaults.has_key?('permalink')
|
30
|
-
self.data['permalink'] = Jekyll::URL.new(:template => defaults['permalink'], :placeholders => self.url_placeholders).to_s
|
31
|
-
@use_permalink_for_url = true
|
32
|
-
end
|
33
|
-
|
20
|
+
# Only need to copy the data part of the page as it already contains the layout information
|
21
|
+
self.data = Jekyll::Utils.deep_merge_hashes( page_to_copy.data, {} )
|
34
22
|
if !page_to_copy.data['autopage']
|
35
23
|
self.content = page_to_copy.content
|
36
24
|
else
|
@@ -53,7 +41,7 @@ module Jekyll
|
|
53
41
|
end
|
54
42
|
|
55
43
|
def set_url(url_value)
|
56
|
-
@url =
|
44
|
+
@url = url_value
|
57
45
|
end
|
58
46
|
end # class PaginationPage
|
59
47
|
|
@@ -135,27 +135,6 @@ module Jekyll
|
|
135
135
|
return url
|
136
136
|
end
|
137
137
|
|
138
|
-
# Constructs the plural for a key
|
139
|
-
def self.plural(config_key)
|
140
|
-
(config_key =~ /s$/) ? config_key :
|
141
|
-
(config_key.dup.sub!(/y$/, 'ies') || "#{config_key}s")
|
142
|
-
end
|
143
|
-
|
144
|
-
# Converts a string or array to a downcased, stripped array
|
145
|
-
def self.config_array(config, key, keepcase = nil)
|
146
|
-
[ config[key] ].flatten.compact.uniq.map { |c|
|
147
|
-
c.split(/[,;]\s*/).map { |v|
|
148
|
-
keepcase ? v.to_s.strip : v.to_s.downcase.strip
|
149
|
-
}
|
150
|
-
}.flatten.uniq
|
151
|
-
end
|
152
|
-
|
153
|
-
# Merges singular and plural config values into an array
|
154
|
-
def self.config_values(config, key, keepcase = nil)
|
155
|
-
singular = config_array(config, key, keepcase)
|
156
|
-
plural = config_array(config, plural(key), keepcase)
|
157
|
-
[ singular, plural ].flatten.uniq
|
158
|
-
end
|
159
138
|
end
|
160
139
|
|
161
140
|
end # module PaginateV2
|
@@ -1,10 +1,12 @@
|
|
1
1
|
module Jekyll
|
2
2
|
module PaginateV2
|
3
|
-
VERSION = "
|
3
|
+
VERSION = "3.0.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
|
5
|
+
# git tag -a v3.0.0 -m "Gem v3.0.0"
|
6
6
|
# git push origin --tags
|
7
7
|
# Yanking a published Gem
|
8
8
|
# gem yank jekyll-paginate-v2 -v VERSION
|
9
|
+
# Building gem
|
10
|
+
# gem build jekyll-paginate-v2.gemspec
|
9
11
|
end # module PaginateV2
|
10
12
|
end # module Jekyll
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-paginate-v2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.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:
|
11
|
+
date: 2020-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '3.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: bundler
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,10 +133,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
133
|
version: '0'
|
128
134
|
requirements: []
|
129
135
|
rubyforge_project:
|
130
|
-
rubygems_version: 2.
|
136
|
+
rubygems_version: 2.7.10
|
131
137
|
signing_key:
|
132
138
|
specification_version: 4
|
133
|
-
summary: Pagination Generator for Jekyll 3
|
139
|
+
summary: Pagination Generator for Jekyll 3 and newer
|
134
140
|
test_files:
|
135
141
|
- spec/generator/defaults_spec.rb
|
136
142
|
- spec/generator/paginationPage_spec.rb
|