bridgetown-paginate 1.0.0.alpha1 → 1.0.0.alpha2
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 +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: []
|