bridgetown-paginate 1.0.0.alpha1 → 1.0.0.alpha2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -3
- data/lib/bridgetown-paginate/pagination_generator.rb +5 -4
- data/lib/bridgetown-paginate/pagination_indexer.rb +3 -5
- data/lib/bridgetown-paginate/pagination_model.rb +64 -65
- data/lib/bridgetown-paginate/pagination_page.rb +1 -1
- data/lib/bridgetown-paginate/paginator.rb +3 -3
- data/lib/bridgetown-paginate/utils.rb +4 -8
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f4ddd4a70ec92776ef3aa0ef66b3962795bed297e7a9dc82823254b9ed0192a
|
4
|
+
data.tar.gz: c8f3a2c8df7fc1fcc53cc5dff9a55241bbdba95f9779fc350ab11caaece8fce6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe5262a059bb676c9c16f9d81c50cf3b006319da0c6fe28aeba1c6b1faaec84b0b8e158d6e15b4719b20c39e249222a2a54cef12d1c88c342079572d5778ac42
|
7
|
+
data.tar.gz: cfda5839ca555de2c8bb99a1639656bbb26a6c0074b99491db9469e4f451b3cdeb9cfb48a98d0fdad035802199bb800799bafe963cbe39e767ed16d59ac8650c
|
data/.rubocop.yml
CHANGED
@@ -36,7 +36,7 @@ module Bridgetown
|
|
36
36
|
# If disabled then simply quit
|
37
37
|
unless default_config["enabled"]
|
38
38
|
Bridgetown.logger.info "Pagination:", "disabled. Enable in site config" \
|
39
|
-
|
39
|
+
" with pagination:\\n enabled: true"
|
40
40
|
return
|
41
41
|
end
|
42
42
|
|
@@ -102,11 +102,12 @@ module Bridgetown
|
|
102
102
|
# Create a proc that will delegate logging
|
103
103
|
# Decoupling Bridgetown specific logging
|
104
104
|
logging_lambda = ->(message, type = "info") do
|
105
|
-
|
105
|
+
case type
|
106
|
+
when "debug"
|
106
107
|
Bridgetown.logger.debug "Pagination:", message.to_s
|
107
|
-
|
108
|
+
when "error"
|
108
109
|
Bridgetown.logger.error "Pagination:", message.to_s
|
109
|
-
|
110
|
+
when "warn"
|
110
111
|
Bridgetown.logger.warn "Pagination:", message.to_s
|
111
112
|
else
|
112
113
|
Bridgetown.logger.info "Pagination:", message.to_s
|
@@ -7,7 +7,7 @@ module Bridgetown
|
|
7
7
|
# filtering said collections when requested by the defined filters.
|
8
8
|
#
|
9
9
|
class PaginationIndexer
|
10
|
-
@cached_index = {}
|
10
|
+
@cached_index = {}.compare_by_identity
|
11
11
|
|
12
12
|
class << self
|
13
13
|
attr_accessor :cached_index
|
@@ -53,10 +53,8 @@ module Bridgetown
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
unless cached_index[all_documents
|
57
|
-
|
58
|
-
end
|
59
|
-
cached_index[all_documents.object_id][index_key] = index
|
56
|
+
cached_index[all_documents] = {} unless cached_index[all_documents].is_a?(Hash)
|
57
|
+
cached_index[all_documents][index_key] = index
|
60
58
|
index
|
61
59
|
end
|
62
60
|
|
@@ -32,8 +32,11 @@ module Bridgetown
|
|
32
32
|
# rubocop:disable Metrics/BlockLength
|
33
33
|
def run(default_config, templates, site_title) # rubocop:todo Metrics/AbcSize
|
34
34
|
if templates.size.to_i <= 0
|
35
|
-
@logging_lambda.call
|
36
|
-
"
|
35
|
+
@logging_lambda.call(
|
36
|
+
"is enabled in the config, but no paginated pages found." \
|
37
|
+
" Add 'pagination:\\n collection: <label>' to the front-matter of a page.",
|
38
|
+
"warn"
|
39
|
+
)
|
37
40
|
return
|
38
41
|
end
|
39
42
|
|
@@ -63,7 +66,7 @@ module Bridgetown
|
|
63
66
|
|
64
67
|
next unless template_config["enabled"]
|
65
68
|
|
66
|
-
@logging_lambda.call "found page:
|
69
|
+
@logging_lambda.call "found page: #{template.path}", "debug" unless @debug
|
67
70
|
|
68
71
|
# Request all documents in all collections that the user has requested
|
69
72
|
all_posts = get_docs_in_collections(template_config["collection"], template)
|
@@ -154,34 +157,34 @@ module Bridgetown
|
|
154
157
|
r = 20
|
155
158
|
f = "Pagination: ".rjust(20)
|
156
159
|
# Debug print the config
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
160
|
+
return unless @debug
|
161
|
+
|
162
|
+
puts "#{f}----------------------------"
|
163
|
+
puts "#{f}Page: #{page_path}"
|
164
|
+
puts "#{f} Active configuration"
|
165
|
+
puts f + " Enabled: ".ljust(r) + config["enabled"].to_s
|
166
|
+
puts f + " Items per page: ".ljust(r) + config["per_page"].to_s
|
167
|
+
puts f + " Permalink: ".ljust(r) + config["permalink"].to_s
|
168
|
+
puts f + " Title: ".ljust(r) + config["title"].to_s
|
169
|
+
puts f + " Limit: ".ljust(r) + config["limit"].to_s
|
170
|
+
puts f + " Sort by: ".ljust(r) + config["sort_field"].to_s
|
171
|
+
puts f + " Sort reverse: ".ljust(r) + config["sort_reverse"].to_s
|
172
|
+
|
173
|
+
puts "#{f} Active Filters"
|
174
|
+
puts f + " Collection: ".ljust(r) + config["collection"].to_s
|
175
|
+
puts f + " Offset: ".ljust(r) + config["offset"].to_s
|
176
|
+
puts f + " Category: ".ljust(r) + (config["category"].nil? || config["category"] == "posts" ? "[Not set]" : config["category"].to_s)
|
177
|
+
puts f + " Tag: ".ljust(r) + (config["tag"].nil? ? "[Not set]" : config["tag"].to_s)
|
178
|
+
puts f + " Locale: ".ljust(r) + (config["locale"].nil? ? "[Not set]" : config["locale"].to_s)
|
176
179
|
end
|
177
180
|
# rubocop:enable Layout/LineLength
|
178
181
|
|
179
182
|
# rubocop:disable Layout/LineLength
|
180
183
|
def _debug_print_filtering_info(filter_name, before_count, after_count)
|
181
184
|
# Debug print the config
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
+
return unless @debug
|
186
|
+
|
187
|
+
puts "#{"Pagination: ".rjust(20)} Filtering by: #{filter_name.to_s.ljust(9)} #{before_count.to_s.rjust(3)} => #{after_count}"
|
185
188
|
end
|
186
189
|
# rubocop:enable Layout/LineLength
|
187
190
|
|
@@ -263,7 +266,7 @@ module Bridgetown
|
|
263
266
|
# So to unblock this common issue for the date field I simply iterate
|
264
267
|
# once over every document and initialize the .date field explicitly
|
265
268
|
if @debug
|
266
|
-
puts "Pagination: ".rjust(20)
|
269
|
+
puts "#{"Pagination: ".rjust(20)}Rolling through the date fields for all documents"
|
267
270
|
end
|
268
271
|
using_posts.each do |u_post|
|
269
272
|
next unless u_post.respond_to?("date")
|
@@ -378,11 +381,7 @@ module Bridgetown
|
|
378
381
|
newpage.data["permalink"] = newpage.paginator.page_path if template.data["permalink"]
|
379
382
|
|
380
383
|
# Transfer the title across to the new page
|
381
|
-
tmp_title =
|
382
|
-
site_title
|
383
|
-
else
|
384
|
-
template.data["title"]
|
385
|
-
end
|
384
|
+
tmp_title = template.data["title"] || site_title
|
386
385
|
|
387
386
|
# If the user specified a title suffix to be added then let's add that
|
388
387
|
# to all the pages except the first
|
@@ -419,40 +418,40 @@ module Bridgetown
|
|
419
418
|
# simplest is to include all of the links to the pages preceeding the
|
420
419
|
# current one (e.g for page 1 you get the list 2, 3, 4.... and for
|
421
420
|
# page 2 you get the list 3,4,5...)
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
421
|
+
return unless config["trail"] && !config["trail"].nil? && newpages.size.to_i.positive?
|
422
|
+
|
423
|
+
trail_before = [config["trail"]["before"].to_i, 0].max
|
424
|
+
trail_after = [config["trail"]["after"].to_i, 0].max
|
425
|
+
trail_length = trail_before + trail_after + 1
|
426
|
+
|
427
|
+
return unless trail_before.positive? || trail_after.positive?
|
428
|
+
|
429
|
+
newpages.select do |npage|
|
430
|
+
# Selecting the beginning of the trail
|
431
|
+
idx_start = [npage.paginator.page - trail_before - 1, 0].max
|
432
|
+
# Selecting the end of the trail
|
433
|
+
idx_end = [idx_start + trail_length, newpages.size.to_i].min
|
434
|
+
|
435
|
+
# Always attempt to maintain the max total of <trail_length> pages
|
436
|
+
# in the trail (it will look better if the trail doesn't shrink)
|
437
|
+
if idx_end - idx_start < trail_length
|
438
|
+
# Attempt to pad the beginning if we have enough pages
|
439
|
+
# Never go beyond the zero index
|
440
|
+
idx_start = [
|
441
|
+
idx_start - (trail_length - (idx_end - idx_start)),
|
442
|
+
0,
|
443
|
+
].max
|
444
|
+
end
|
445
|
+
|
446
|
+
# Convert the newpages array into a two dimensional array that has
|
447
|
+
# [index, page_url] as items
|
448
|
+
npage.paginator.page_trail = newpages[idx_start...idx_end] \
|
449
|
+
.each_with_index.map do |ipage, idx|
|
450
|
+
PageTrail.new(
|
451
|
+
idx_start + idx + 1,
|
452
|
+
ipage.paginator.page_path,
|
453
|
+
ipage.data["title"]
|
454
|
+
)
|
456
455
|
end
|
457
456
|
end
|
458
457
|
end
|
@@ -11,7 +11,7 @@ module Bridgetown
|
|
11
11
|
# not read from disk
|
12
12
|
#
|
13
13
|
class PaginationPage < Bridgetown::GeneratedPage
|
14
|
-
def initialize(page_to_copy, cur_page_nr, total_pages, index_pageandext, template_ext)
|
14
|
+
def initialize(page_to_copy, cur_page_nr, total_pages, index_pageandext, template_ext) # rubocop:disable Lint/MissingSuper
|
15
15
|
@site = page_to_copy.site
|
16
16
|
@base = ""
|
17
17
|
@url = ""
|
@@ -29,7 +29,7 @@ module Bridgetown
|
|
29
29
|
|
30
30
|
if @page > @total_pages
|
31
31
|
raise "page number can't be greater than total pages:" \
|
32
|
-
|
32
|
+
" #{@page} > #{@total_pages}"
|
33
33
|
end
|
34
34
|
|
35
35
|
init = (@page - 1) * @per_page
|
@@ -63,7 +63,7 @@ module Bridgetown
|
|
63
63
|
@documents = documents[init..offset]
|
64
64
|
@page_path = Utils.format_page_number(this_page_url, cur_page_nr, @total_pages)
|
65
65
|
|
66
|
-
@previous_page = @page
|
66
|
+
@previous_page = @page == 1 ? nil : @page - 1
|
67
67
|
@previous_page_path = unless @page == 1
|
68
68
|
if @page == 2
|
69
69
|
Utils.format_page_number(
|
@@ -77,7 +77,7 @@ module Bridgetown
|
|
77
77
|
)
|
78
78
|
end
|
79
79
|
end
|
80
|
-
@next_page = @page
|
80
|
+
@next_page = @page == @total_pages ? nil : @page + 1
|
81
81
|
@next_page_path = if @page != @total_pages
|
82
82
|
Utils.format_page_number(
|
83
83
|
paginated_page_url, @next_page, @total_pages
|
@@ -74,14 +74,10 @@ module Bridgetown
|
|
74
74
|
# Sorting routine used for ordering posts by custom fields.
|
75
75
|
# Handles Strings separately as we want a case-insenstive sorting
|
76
76
|
#
|
77
|
-
# rubocop:disable Naming/MethodParameterName, Metrics/CyclomaticComplexity
|
77
|
+
# rubocop:disable Naming/MethodParameterName, Metrics/CyclomaticComplexity
|
78
78
|
def self.sort_values(a, b)
|
79
|
-
if a.nil? && !b.nil?
|
80
|
-
|
81
|
-
elsif !a.nil? && b.nil?
|
82
|
-
return 1
|
83
|
-
end
|
84
|
-
|
79
|
+
return -1 if a.nil? && !b.nil?
|
80
|
+
return 1 if !a.nil? && b.nil?
|
85
81
|
return a.downcase <=> b.downcase if a.is_a?(String)
|
86
82
|
|
87
83
|
if a.respond_to?("to_datetime") && b.respond_to?("to_datetime")
|
@@ -91,7 +87,7 @@ module Bridgetown
|
|
91
87
|
# By default use the built in sorting for the data type
|
92
88
|
a <=> b
|
93
89
|
end
|
94
|
-
# rubocop:enable Naming/MethodParameterName, Metrics/CyclomaticComplexity
|
90
|
+
# rubocop:enable Naming/MethodParameterName, Metrics/CyclomaticComplexity
|
95
91
|
|
96
92
|
# Retrieves the given sort field from the given post
|
97
93
|
# the sort_field variable can be a hierarchical value on the form
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bridgetown-paginate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.alpha2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bridgetown Team
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.0.0.
|
19
|
+
version: 1.0.0.alpha2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.0.0.
|
26
|
+
version: 1.0.0.alpha2
|
27
27
|
description:
|
28
28
|
email: maintainers@bridgetownrb.com
|
29
29
|
executables: []
|