jekyll-paginate-v2 1.9.4 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README-AUTOPAGES.md +38 -1
- data/README-GENERATOR.md +40 -0
- data/README.md +6 -2
- data/lib/jekyll-paginate-v2/autopages/pages/categoryAutoPage.rb +1 -0
- data/lib/jekyll-paginate-v2/autopages/pages/tagAutoPage.rb +1 -0
- data/lib/jekyll-paginate-v2/autopages/utils.rb +9 -13
- data/lib/jekyll-paginate-v2/generator/defaults.rb +1 -0
- data/lib/jekyll-paginate-v2/generator/paginationIndexer.rb +35 -12
- data/lib/jekyll-paginate-v2/generator/paginationModel.rb +5 -0
- data/lib/jekyll-paginate-v2/generator/paginationPage.rb +16 -4
- data/lib/jekyll-paginate-v2/generator/utils.rb +21 -0
- data/lib/jekyll-paginate-v2/version.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b1be5a3a418704b6d5798054c310cb0d1db73c8
|
4
|
+
data.tar.gz: a0861fb2289e24c3ebc6d0047a9f4e55c7e8b866
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ac0fae0864bed484368ce0dd83645e177809c0a90c0fb8a1b55536cb15ecd693bbe9dcd058d90c7e797f1ba834ba0ba7fa2c8ef6464f6ccf73929e1a4c2254f
|
7
|
+
data.tar.gz: b7bf4594ed5718a301b49a118f4b040627f4705d601ef52cb0e79223c9b12436c900637a83048bdeb41bfaaca771618199eb2fe617b9f61c6f9f65baaac73d66
|
data/README-AUTOPAGES.md
CHANGED
@@ -100,5 +100,42 @@ 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
|
+
|
103
140
|
## Common issues
|
104
|
-
_None reported so far_
|
141
|
+
_None reported so far_
|
data/README-GENERATOR.md
CHANGED
@@ -271,6 +271,36 @@ pagination:
|
|
271
271
|
category: software, ruby
|
272
272
|
```
|
273
273
|
|
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
|
+
|
274
304
|
> 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.
|
275
305
|
|
276
306
|
### Filtering tags
|
@@ -291,6 +321,16 @@ pagination:
|
|
291
321
|
tag: cool, life
|
292
322
|
```
|
293
323
|
|
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
|
+
|
294
334
|
> 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"_
|
295
335
|
|
296
336
|
### Filtering locales
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Jekyll::Paginate V2
|
2
2
|
|
3
|
-
Pagination gem built specially for Jekyll 3 and newer that is fully backwards
|
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
5
|
[![Gem](https://img.shields.io/gem/v/jekyll-paginate-v2.svg)](https://rubygems.org/gems/jekyll-paginate-v2)
|
6
6
|
[![Join the chat at https://gitter.im/jekyll-paginate-v2/Lobby](https://badges.gitter.im/jekyll-paginate-v2/Lobby.svg)](https://gitter.im/jekyll-paginate-v2/Lobby)
|
@@ -10,7 +10,7 @@ Pagination gem built specially for Jekyll 3 and newer that is fully backwards co
|
|
10
10
|
[![security](https://hakiri.io/github/sverrirs/jekyll-paginate-v2/master.svg)](https://hakiri.io/github/sverrirs/jekyll-paginate-v2/master)
|
11
11
|
[![Gem](https://img.shields.io/gem/dt/jekyll-paginate-v2.svg)](https://rubygems.org/gems/jekyll-paginate-v2)
|
12
12
|
|
13
|
-
Reach me at the [project issues](https://github.com/sverrirs/jekyll-paginate-v2/issues) section or via email at [jekyll@sverrirs.com](mailto:jekyll@sverrirs.com), you can also get in touch on the project's [
|
13
|
+
Reach me at the [project issues](https://github.com/sverrirs/jekyll-paginate-v2/issues) section or via email at [jekyll@sverrirs.com](mailto:jekyll@sverrirs.com), you can also get in touch on the project's [Gitter chat room](https://gitter.im/jekyll-paginate-v2/Lobby).
|
14
14
|
|
15
15
|
> The code was based on the original design of [jekyll-paginate](https://github.com/jekyll/jekyll-paginate) and features were sourced from discussions such as [#27](https://github.com/jekyll/jekyll-paginate/issues/27) (thanks [Günter Kits](https://github.com/gynter)).
|
16
16
|
|
@@ -39,6 +39,10 @@ Now you're ready to run `jekyll serve` and your paginated files should be genera
|
|
39
39
|
|
40
40
|
Please see the [Examples](https://github.com/sverrirs/jekyll-paginate-v2/tree/master/examples) for tips and tricks on how to configure the pagination logic.
|
41
41
|
|
42
|
+
> :warning: Please note that this plugin is currently NOT supported by GitHub pages. Here is a [list of all plugins supported](https://pages.github.com/versions/). There is work underway to try to get it added it but until then please follow [this GitHub guide](https://help.github.com/articles/adding-jekyll-plugins-to-a-github-pages-site/) to enable it or use [Travis CI](https://ayastreb.me/deploy-jekyll-to-github-pages-with-travis-ci/).
|
43
|
+
|
44
|
+
> GitLab supposedly supports [any plugin](https://about.gitlab.com/comparison/gitlab-pages-vs-github-pages.html).
|
45
|
+
|
42
46
|
|
43
47
|
## Pagination Generator
|
44
48
|
|
@@ -11,6 +11,7 @@ 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
|
14
15
|
end
|
15
16
|
|
16
17
|
get_autopage_permalink_lambda = lambda do |permalink_pattern|
|
@@ -11,6 +11,7 @@ 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
|
14
15
|
end
|
15
16
|
|
16
17
|
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,25 +49,21 @@ 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.strip
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
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
|
61
|
+
key = key.to_s.strip
|
62
|
+
processed_key = key.downcase #Clean whitespace and junk
|
63
|
+
if !index.has_key?(processed_key)
|
64
|
+
# 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")
|
65
|
+
# Also, only interested in storing all the keys not the pages in this case
|
66
|
+
index[processed_key] = [processed_key, key]
|
71
67
|
end
|
72
68
|
end
|
73
69
|
end
|
@@ -5,6 +5,7 @@ module Jekyll
|
|
5
5
|
DEFAULT = {
|
6
6
|
'enabled' => false,
|
7
7
|
'collection' => 'posts',
|
8
|
+
'offset' => 0, # Supports skipping x number of posts from the beginning of the post list
|
8
9
|
'per_page' => 10,
|
9
10
|
'permalink' => '/page:num/', # Supports :num as customizable elements
|
10
11
|
'title' => ':title - page :num', # Supports :num as customizable elements
|
@@ -66,24 +66,47 @@ 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
|
-
|
69
|
+
|
70
|
+
plural_key = Utils.plural(config_key)
|
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?
|
71
74
|
|
72
75
|
# 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]
|
74
76
|
|
75
|
-
|
76
|
-
|
77
|
-
|
77
|
+
if config[config_key].is_a?(Hash) || config[plural_key].is_a?(Hash)
|
78
|
+
# { values: [..], matching: any|all }
|
79
|
+
config_hash = config[config_key].is_a?(Hash) ? config[config_key] : config[plural_key]
|
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'
|
78
86
|
end
|
79
87
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
88
|
+
matching = matching.to_s.downcase.strip
|
89
|
+
|
90
|
+
# Filter on any/all specified categories, etc.
|
91
|
+
|
92
|
+
if matching == "all"
|
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
|
85
108
|
end
|
86
|
-
|
109
|
+
|
87
110
|
# The fully filtered final post list
|
88
111
|
return posts
|
89
112
|
end #function read_config_value_and_filter_posts
|
@@ -158,6 +158,7 @@ module Jekyll
|
|
158
158
|
|
159
159
|
puts f + " Active Filters"
|
160
160
|
puts f + " Collection: ".ljust(r) + config['collection'].to_s
|
161
|
+
puts f + " Offset: ".ljust(r) + config['offset'].to_s
|
161
162
|
puts f + " Category: ".ljust(r) + (config['category'].nil? || config['category'] == "posts" ? "[Not set]" : config['category'].to_s)
|
162
163
|
puts f + " Tag: ".ljust(r) + (config['tag'].nil? ? "[Not set]" : config['tag'].to_s)
|
163
164
|
puts f + " Locale: ".ljust(r) + (config['locale'].nil? ? "[Not set]" : config['locale'].to_s)
|
@@ -243,6 +244,10 @@ module Jekyll
|
|
243
244
|
|
244
245
|
using_posts.sort!{ |a,b| Utils.sort_values(Utils.sort_get_post_data(a.data, sort_field), Utils.sort_get_post_data(b.data, sort_field)) }
|
245
246
|
|
247
|
+
# Remove the first x entries
|
248
|
+
offset_post_count = [0, config['offset'].to_i].max
|
249
|
+
using_posts.pop(offset_post_count)
|
250
|
+
|
246
251
|
if config['sort_reverse']
|
247
252
|
using_posts.reverse!
|
248
253
|
end
|
@@ -13,12 +13,24 @@ module Jekyll
|
|
13
13
|
@site = page_to_copy.site
|
14
14
|
@base = ''
|
15
15
|
@url = ''
|
16
|
-
|
16
|
+
if cur_page_nr == 1
|
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
|
17
22
|
|
18
23
|
self.process(@name) # Creates the basename and ext member values
|
19
24
|
|
20
|
-
#
|
21
|
-
|
25
|
+
# Copy page data over site defaults
|
26
|
+
defaults = @site.frontmatter_defaults.all(page_to_copy.relative_path, type)
|
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
|
+
|
22
34
|
if !page_to_copy.data['autopage']
|
23
35
|
self.content = page_to_copy.content
|
24
36
|
else
|
@@ -41,7 +53,7 @@ module Jekyll
|
|
41
53
|
end
|
42
54
|
|
43
55
|
def set_url(url_value)
|
44
|
-
@url = url_value
|
56
|
+
@url = @use_permalink_for_url ? self.data['permalink'] : url_value
|
45
57
|
end
|
46
58
|
end # class PaginationPage
|
47
59
|
|
@@ -135,6 +135,27 @@ 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
|
138
159
|
end
|
139
160
|
|
140
161
|
end # module PaginateV2
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Jekyll
|
2
2
|
module PaginateV2
|
3
|
-
VERSION = "
|
3
|
+
VERSION = "2.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 v2.0.0 -m "Gem v2.0.0"
|
6
6
|
# git push origin --tags
|
7
7
|
# Yanking a published Gem
|
8
8
|
# gem yank jekyll-paginate-v2 -v VERSION
|
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:
|
4
|
+
version: 2.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: 2018-
|
11
|
+
date: 2018-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|