pagy 5.2.3 → 5.5.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 +4 -4
- data/lib/config/pagy.rb +25 -12
- data/lib/javascripts/pagy.js +15 -10
- data/lib/pagy/calendar/day.rb +29 -0
- data/lib/pagy/calendar/month.rb +44 -0
- data/lib/pagy/calendar/week.rb +39 -0
- data/lib/pagy/calendar/year.rb +29 -0
- data/lib/pagy/calendar.rb +44 -102
- data/lib/pagy/countless.rb +2 -1
- data/lib/pagy/extras/bootstrap.rb +6 -6
- data/lib/pagy/extras/bulma.rb +10 -11
- data/lib/pagy/extras/calendar.rb +54 -24
- data/lib/pagy/extras/foundation.rb +8 -8
- data/lib/pagy/extras/{shared.rb → frontend_helpers.rb} +21 -6
- data/lib/pagy/extras/i18n.rb +14 -3
- data/lib/pagy/extras/items.rb +1 -1
- data/lib/pagy/extras/materialize.rb +6 -6
- data/lib/pagy/extras/navs.rb +5 -5
- data/lib/pagy/extras/overflow.rb +5 -5
- data/lib/pagy/extras/semantic.rb +8 -8
- data/lib/pagy/extras/standalone.rb +11 -8
- data/lib/pagy/extras/trim.rb +3 -3
- data/lib/pagy/extras/uikit.rb +8 -8
- data/lib/pagy/frontend.rb +11 -15
- data/lib/pagy/url_helpers.rb +23 -9
- data/lib/pagy.rb +19 -3
- data/lib/templates/foundation_nav.html.erb +1 -1
- data/lib/templates/foundation_nav.html.haml +1 -1
- data/lib/templates/foundation_nav.html.slim +1 -1
- data/lib/templates/uikit_nav.html.erb +1 -1
- data/lib/templates/uikit_nav.html.haml +1 -1
- data/lib/templates/uikit_nav.html.slim +1 -1
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78c55595ac8caaa34c73688103333dc62e9ebb395696725e7c305e5ace3d7f42
|
4
|
+
data.tar.gz: 3e259f8f72025fc7955fb6107920be08025539d5178e5c4c714173d26aa05da1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fede5003b2a686ee972d7dd93a80b5221704518212adb8faa7b133c309b2ece0094f3fbe72575fb4e29b706a819f5dc447fc6f3a89b4c3fe202e23542dfee310
|
7
|
+
data.tar.gz: 15840445b0afa7e343c9f0f4ad196b847cb564d8d2a5da56b94a9a59ac348731fc6bb104c282343f77654a0d07090dd501957e751c843c88de208779581dbbae
|
data/lib/config/pagy.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Pagy initializer file (5.
|
3
|
+
# Pagy initializer file (5.5.0)
|
4
4
|
# Customize only what you really need and notice that Pagy works also without any of the following lines.
|
5
5
|
# Should you just cherry pick part of this file, please maintain the require-order of the extras
|
6
6
|
|
@@ -22,6 +22,7 @@
|
|
22
22
|
# See https://ddnexus.github.io/pagy/api/pagy#other-variables
|
23
23
|
# Pagy::DEFAULT[:size] = [1,4,4,1] # default
|
24
24
|
# Pagy::DEFAULT[:page_param] = :page # default
|
25
|
+
# The :params can be also set as a lambda e.g ->(params){ params.exclude('useless').merge!('custom' => 'useful') }
|
25
26
|
# Pagy::DEFAULT[:params] = {} # default
|
26
27
|
# Pagy::DEFAULT[:fragment] = '#fragment' # example
|
27
28
|
# Pagy::DEFAULT[:link_extra] = 'data-remote="true"' # example
|
@@ -39,17 +40,30 @@
|
|
39
40
|
# See https://ddnexus.github.io/pagy/extras/array
|
40
41
|
# require 'pagy/extras/array'
|
41
42
|
|
42
|
-
# Calendar extra:
|
43
|
+
# Calendar extra: Add pagination filtering by calendar time unit (Year, Month, Week Day)
|
43
44
|
# See https://ddnexus.github.io/pagy/extras/calendar
|
44
45
|
# require 'pagy/extras/calendar'
|
45
|
-
#
|
46
|
-
# Pagy::DEFAULT[:
|
47
|
-
# Pagy::DEFAULT[:
|
48
|
-
#
|
49
|
-
# Pagy::DEFAULT[:
|
50
|
-
# Pagy::DEFAULT[:
|
51
|
-
#
|
52
|
-
# Pagy::DEFAULT[:
|
46
|
+
# Default for each unit
|
47
|
+
# Pagy::Calendar::Year::DEFAULT[:order] = :asc # Time direction of pagination
|
48
|
+
# Pagy::Calendar::Year::DEFAULT[:format] = '%Y' # strftime format
|
49
|
+
#
|
50
|
+
# Pagy::Calendar::Month::DEFAULT[:order] = :asc # Time direction of pagination
|
51
|
+
# Pagy::Calendar::Month::DEFAULT[:format] = '%Y-%m' # strftime format
|
52
|
+
#
|
53
|
+
# Pagy::Calendar::Week::DEFAULT[:order] = :asc # Time direction of pagination
|
54
|
+
# Pagy::Calendar::Week::DEFAULT[:format] = '%Y-%W' # strftime format
|
55
|
+
# Pagy::Calendar::Week::DEFAULT[:offset] = 0 # Day offset from Sunday (0: Sunday; 1: Monday;... 6: Saturday)
|
56
|
+
#
|
57
|
+
# Pagy::Calendar::Day::DEFAULT[:order] = :asc # Time direction of pagination
|
58
|
+
# Pagy::Calendar::Day::DEFAULT[:format] = '%Y-%m-%d' # strftime format
|
59
|
+
#
|
60
|
+
# Uncomment the following block, if you need calendar localization without using the I18n extra
|
61
|
+
# module LocalizePagyCalendar
|
62
|
+
# def localize(time, opts)
|
63
|
+
# ::I18n.l(time, **opts)
|
64
|
+
# end
|
65
|
+
# end
|
66
|
+
# Pagy::Calendar.prepend LocalizePagyCalendar
|
53
67
|
|
54
68
|
# Countless extra: Paginate without any count, saving one query per rendering
|
55
69
|
# See https://ddnexus.github.io/pagy/extras/countless
|
@@ -218,6 +232,5 @@
|
|
218
232
|
# Pagy::DEFAULT[:i18n_key] = 'pagy.item_name' # default
|
219
233
|
|
220
234
|
|
221
|
-
# When you are done setting your own
|
222
|
-
# so it will not changed accidentally
|
235
|
+
# When you are done setting your own default freeze it, so it will not get changed accidentally
|
223
236
|
Pagy::DEFAULT.freeze
|
data/lib/javascripts/pagy.js
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
// See the Pagy documentation: https://ddnexus.github.io/pagy/extras#javascript
|
2
2
|
|
3
|
+
// This code should be OK also with very old browsers
|
4
|
+
|
3
5
|
// Container of the whole pagy stuff
|
4
6
|
function Pagy(){}
|
5
7
|
|
6
|
-
Pagy.version = '5.
|
8
|
+
Pagy.version = '5.5.0'
|
7
9
|
|
8
10
|
// Used by the waitForMe function
|
9
11
|
Pagy.delay = 100
|
@@ -23,10 +25,11 @@ Pagy.init =
|
|
23
25
|
|
24
26
|
// Power the pagy*_nav_js helpers
|
25
27
|
Pagy.nav =
|
26
|
-
function(pagyEl, tags, sequels, trimParam) {
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
function(pagyEl, tags, sequels, label_sequels, trimParam ) {
|
29
|
+
label_sequels = (label_sequels === null) ? sequels : label_sequels
|
30
|
+
var widths = [], lastWidth,
|
31
|
+
fill = function(string, item, label) { return string.replace(/__pagy_page__/g, item)
|
32
|
+
.replace(/__pagy_label__/g, label) }
|
30
33
|
for (var width in sequels) {
|
31
34
|
if (sequels.hasOwnProperty(width)) { widths.push(parseInt(width, 10)) }
|
32
35
|
}
|
@@ -40,13 +43,15 @@ Pagy.nav =
|
|
40
43
|
}
|
41
44
|
if (width !== lastWidth) {
|
42
45
|
var html = tags.before,
|
43
|
-
series = sequels[width]
|
46
|
+
series = sequels[width],
|
47
|
+
labels = label_sequels[width]
|
44
48
|
for (i = 0, len = series.length; i < len; i++) {
|
45
|
-
var item
|
46
|
-
|
47
|
-
|
49
|
+
var item = series[i],
|
50
|
+
label = labels[i]
|
51
|
+
if (typeof(trimParam) === 'string' && item === 1) { html += Pagy.trim(fill(tags.link, item, label), trimParam) }
|
52
|
+
else if (typeof(item) === 'number') { html += fill(tags.link, item, label) }
|
48
53
|
else if (item === 'gap') { html += tags.gap }
|
49
|
-
else if (typeof(item) === 'string') { html += tags.active
|
54
|
+
else if (typeof(item) === 'string') { html += fill(tags.active, item, label) }
|
50
55
|
}
|
51
56
|
html += tags.after
|
52
57
|
this.insertAdjacentHTML('afterbegin', html)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# See Pagy::Countless API documentation: https://ddnexus.github.io/pagy/api/calendar
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class Pagy # :nodoc:
|
5
|
+
class Calendar # :nodoc:
|
6
|
+
# Calendar day subclass
|
7
|
+
class Day < Calendar
|
8
|
+
DEFAULT = { order: :asc, # rubocop:disable Style/MutableConstant
|
9
|
+
format: '%Y-%m-%d' }
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
# Setup the calendar variables
|
14
|
+
def setup_unit_vars
|
15
|
+
super
|
16
|
+
@initial = new_time(@starting.year, @starting.month, @starting.day)
|
17
|
+
@final = new_time(@ending.year, @ending.month, @ending.day) + DAY
|
18
|
+
@pages = @last = (@final - @initial).to_i / DAY
|
19
|
+
@from = time_for(@page)
|
20
|
+
@to = @from + DAY
|
21
|
+
end
|
22
|
+
|
23
|
+
# Time for the page
|
24
|
+
def time_for(page)
|
25
|
+
@initial + (snap(page) * DAY)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# See Pagy::Countless API documentation: https://ddnexus.github.io/pagy/api/calendar
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class Pagy # :nodoc:
|
5
|
+
class Calendar # :nodoc:
|
6
|
+
# Calendar month subclass
|
7
|
+
class Month < Calendar
|
8
|
+
DEFAULT = { order: :asc, # rubocop:disable Style/MutableConstant
|
9
|
+
format: '%Y-%m' }
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
# Setup the calendar variables
|
14
|
+
def setup_unit_vars
|
15
|
+
super
|
16
|
+
@initial = new_time(@starting.year, @starting.month)
|
17
|
+
@final = bump_month(@ending)
|
18
|
+
@pages = @last = months(@final) - months(@initial)
|
19
|
+
@from = time_for(@page)
|
20
|
+
@to = bump_month(@from)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Time for the page
|
24
|
+
def time_for(page)
|
25
|
+
bump_month(@initial, snap(page))
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# Months in local time
|
31
|
+
def months(time)
|
32
|
+
(time.year * 12) + time.month
|
33
|
+
end
|
34
|
+
|
35
|
+
# Add 1 or more months to local time
|
36
|
+
def bump_month(time, months = 1)
|
37
|
+
months += months(time)
|
38
|
+
year = months / 12
|
39
|
+
month = months % 12
|
40
|
+
month.zero? ? new_time(year - 1, 12) : new_time(year, month)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# See Pagy::Countless API documentation: https://ddnexus.github.io/pagy/api/calendar
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class Pagy # :nodoc:
|
5
|
+
class Calendar # :nodoc:
|
6
|
+
# Calendar week subclass
|
7
|
+
class Week < Calendar
|
8
|
+
DEFAULT = { order: :asc, # rubocop:disable Style/MutableConstant
|
9
|
+
format: '%Y-%W',
|
10
|
+
offset: 0 }
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
# Setup the calendar variables
|
15
|
+
def setup_unit_vars
|
16
|
+
setup_vars(offset: 0)
|
17
|
+
super
|
18
|
+
@initial = week_start(@starting)
|
19
|
+
@final = week_start(@ending) + WEEK
|
20
|
+
@pages = @last = (@final - @initial).to_i / WEEK
|
21
|
+
@from = time_for(@page)
|
22
|
+
@to = @from + WEEK
|
23
|
+
end
|
24
|
+
|
25
|
+
# Time for the page
|
26
|
+
def time_for(page)
|
27
|
+
@initial + (snap(page) * WEEK)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# Return the start of the week for local time
|
33
|
+
def week_start(time)
|
34
|
+
start = time - (((time.wday - @offset) * DAY) % WEEK)
|
35
|
+
new_time(start.year, start.month, start.day)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# See Pagy::Countless API documentation: https://ddnexus.github.io/pagy/api/calendar
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class Pagy # :nodoc:
|
5
|
+
class Calendar # :nodoc:
|
6
|
+
# Calendar year subclass
|
7
|
+
class Year < Calendar
|
8
|
+
DEFAULT = { order: :asc, # rubocop:disable Style/MutableConstant
|
9
|
+
format: '%Y' }
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
# Setup the calendar variables
|
14
|
+
def setup_unit_vars
|
15
|
+
super
|
16
|
+
@initial = new_time(@starting.year)
|
17
|
+
@final = new_time(@ending.year + 1)
|
18
|
+
@pages = @last = @final.year - @initial.year
|
19
|
+
@from = time_for(@page)
|
20
|
+
@to = new_time(@from.year + 1)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Time for the page
|
24
|
+
def time_for(page)
|
25
|
+
new_time(@initial.year + snap(page))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/pagy/calendar.rb
CHANGED
@@ -2,122 +2,68 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require 'pagy'
|
5
|
-
require 'date'
|
6
5
|
|
7
6
|
class Pagy # :nodoc:
|
8
|
-
|
9
|
-
DEFAULT[:unit] = :month # Time unit allowed %i[year month week day]
|
10
|
-
DEFAULT[:week_offset] = 0 # Day offset from Sunday (0: Sunday; 1: Monday;... 6: Saturday)
|
11
|
-
DEFAULT[:order] = :asc # Time direction of pagination
|
12
|
-
DEFAULT[:year_format] = '%Y' # strftime format for :year unit
|
13
|
-
DEFAULT[:month_format] = '%Y-%m' # strftime format for :month unit
|
14
|
-
DEFAULT[:week_format] = '%Y-%W' # strftime format for :week unit
|
15
|
-
DEFAULT[:day_format] = '%Y-%m-%d' # strftime format for :day unit
|
16
|
-
|
17
|
-
# Paginate a Time period by units (year, month, week or day)
|
7
|
+
# Base class for time units subclasses (Year, Month, Week, Day)
|
18
8
|
class Calendar < Pagy
|
19
|
-
|
20
|
-
|
9
|
+
DAY = 60 * 60 * 24
|
10
|
+
WEEK = DAY * 7
|
11
|
+
|
12
|
+
attr_reader :order
|
21
13
|
|
22
14
|
# Merge and validate the options, do some simple arithmetic and set a few instance variables
|
23
15
|
def initialize(vars) # rubocop:disable Lint/MissingSuper
|
16
|
+
raise InternalError, 'Pagy::Calendar is a base class; use one of its subclasses' if instance_of?(Pagy::Calendar)
|
17
|
+
|
24
18
|
normalize_vars(vars)
|
25
|
-
|
19
|
+
@vars = self.class::DEFAULT.merge(@vars)
|
20
|
+
setup_vars(page: 1)
|
26
21
|
setup_unit_vars
|
22
|
+
setup_params_var
|
27
23
|
raise OverflowError.new(self, :page, "in 1..#{@last}", @page) if @page > @last
|
28
24
|
|
29
25
|
@prev = (@page - 1 unless @page == 1)
|
30
26
|
@next = @page == @last ? (1 if @vars[:cycle]) : @page + 1
|
31
27
|
end
|
32
28
|
|
33
|
-
#
|
34
|
-
def
|
35
|
-
|
36
|
-
format ||= @vars[:"#{@unit}_format"]
|
37
|
-
case @unit
|
38
|
-
when :year then new_time(@initial.year + snap)
|
39
|
-
when :month then bump_month(@initial, snap)
|
40
|
-
when :week then @initial + (snap * WEEK)
|
41
|
-
when :day then @initial + (snap * DAY)
|
42
|
-
else raise InternalError, "expected @unit to be in [:year, :month, :week, :day]; got #{@unit.inspect}"
|
43
|
-
end.strftime(format)
|
29
|
+
# The label for the current page (it can pass along the I18n gem opts when it's used with the i18n extra)
|
30
|
+
def label(**opts)
|
31
|
+
label_for(@page, **opts)
|
44
32
|
end
|
45
33
|
|
46
|
-
|
47
|
-
|
34
|
+
# The label for any page (it can pass along the I18n gem opts when it's used with the i18n extra)
|
35
|
+
def label_for(page, **opts)
|
36
|
+
opts[:format] ||= @vars[:format]
|
37
|
+
localize(time_for(page.to_i), **opts)
|
48
38
|
end
|
49
39
|
|
50
|
-
|
51
|
-
|
40
|
+
# Period of the active page (used for nested units)
|
41
|
+
def active_period
|
42
|
+
[[@starting, @from].max, [@to - DAY, @ending].min] # include only last unit day
|
43
|
+
end
|
52
44
|
|
53
45
|
protected
|
54
46
|
|
47
|
+
# Base class method for the setup of the unit variables
|
55
48
|
def setup_unit_vars
|
56
|
-
(
|
57
|
-
raise VariableError.new(self, :format, 'to be a strftime format', @vars[:"#{unit}_format"]) \
|
58
|
-
unless @vars[:"#{unit}_format"].is_a?(String)
|
59
|
-
end
|
60
|
-
raise VariableError.new(self, :unit, "to be in #{units.inspect}", @unit) \
|
61
|
-
unless units.include?(@unit = @vars[:unit])
|
49
|
+
raise VariableError.new(self, :format, 'to be a strftime format', @vars[:format]) unless @vars[:format].is_a?(String)
|
62
50
|
raise VariableError.new(self, :order, 'to be in [:asc, :desc]', @order) \
|
63
51
|
unless %i[asc desc].include?(@order = @vars[:order])
|
64
52
|
|
65
|
-
|
66
|
-
raise VariableError.new(self, :
|
67
|
-
unless
|
68
|
-
&& (@utc_offset =
|
69
|
-
|
70
|
-
send :"setup_#{@unit}_vars", min, max
|
71
|
-
end
|
72
|
-
|
73
|
-
# IMPORTANT: all the Time objects created and passed as arguments MUST be local!
|
74
|
-
|
75
|
-
# @initial: beginning of the first day of the period that encloses the min local time
|
76
|
-
# @final: beginning of the first day of the NEXT period AFTER the period that encloses the max local time
|
77
|
-
# @utc_from: beginning of the first day of the period of the current page as UTC time
|
78
|
-
# @utc_to: beginning of the first day of the NEXT period AFTER the current page as UTC time
|
79
|
-
|
80
|
-
# Setup the calendar vars when the unit is :year
|
81
|
-
def setup_year_vars(min, max)
|
82
|
-
@initial = new_time(min.year)
|
83
|
-
@final = new_time(max.year + 1)
|
84
|
-
@pages = @last = @final.year - @initial.year
|
85
|
-
@utc_from = new_time(@initial.year + snap).utc
|
86
|
-
@utc_to = new_time(@initial.year + snap + 1).utc
|
87
|
-
end
|
88
|
-
|
89
|
-
# Setup the calendar vars when the unit is :month
|
90
|
-
def setup_month_vars(min, max)
|
91
|
-
@initial = new_time(min.year, min.month)
|
92
|
-
@final = bump_month(max)
|
93
|
-
@pages = @last = months(@final) - months(@initial)
|
94
|
-
@utc_from = bump_month(@initial, snap).utc
|
95
|
-
@utc_to = bump_month(@initial, snap + 1).utc
|
96
|
-
end
|
97
|
-
|
98
|
-
# Setup the calendar vars when the unit is :week
|
99
|
-
def setup_week_vars(min, max)
|
100
|
-
@initial = week_start(min)
|
101
|
-
@final = week_start(max) + WEEK
|
102
|
-
@pages = @last = (@final - @initial).to_i / WEEK
|
103
|
-
@utc_from = (@initial + (snap * WEEK)).utc
|
104
|
-
@utc_to = @utc_from + WEEK
|
53
|
+
@starting, @ending = @vars[:period]
|
54
|
+
raise VariableError.new(self, :period, 'to be a an Array of min and max local Time instances', @vars[:period]) \
|
55
|
+
unless @starting.is_a?(Time) && @ending.is_a?(Time) && !@starting.utc? && !@ending.utc? && @starting <= @ending \
|
56
|
+
&& (@utc_offset = @starting.utc_offset) == @ending.utc_offset
|
105
57
|
end
|
106
58
|
|
107
|
-
#
|
108
|
-
def
|
109
|
-
|
110
|
-
@final = new_time(max.year, max.month, max.day) + DAY
|
111
|
-
@pages = @last = (@final - @initial).to_i / DAY
|
112
|
-
@utc_from = (@initial + (snap * DAY)).utc
|
113
|
-
@utc_to = @utc_from + DAY
|
59
|
+
# Apply the strftime format to the time (overridden by the i18n extra when localization is required)
|
60
|
+
def localize(time, opts)
|
61
|
+
time.strftime(opts[:format])
|
114
62
|
end
|
115
63
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
# without actually reordering anything in the internal structure
|
120
|
-
def snap(page = @page)
|
64
|
+
# Simple trick to snap the page into its ordered position, without actually reordering anything in the internal structure.
|
65
|
+
# Tech note: use for @from but not for @to, which must be one period after @from also in :desc order!
|
66
|
+
def snap(page)
|
121
67
|
@order == :asc ? page - 1 : @pages - page
|
122
68
|
end
|
123
69
|
|
@@ -125,24 +71,20 @@ class Pagy # :nodoc:
|
|
125
71
|
def new_time(year, month = 1, day = 1)
|
126
72
|
Time.new(year, month, day, 0, 0, 0, @utc_offset)
|
127
73
|
end
|
74
|
+
end
|
75
|
+
require 'pagy/calendar/year'
|
76
|
+
require 'pagy/calendar/month'
|
77
|
+
require 'pagy/calendar/week'
|
78
|
+
require 'pagy/calendar/day'
|
128
79
|
|
129
|
-
|
130
|
-
|
131
|
-
(time.year * 12) + time.month
|
132
|
-
end
|
80
|
+
class Calendar # :nodoc:
|
81
|
+
UNITS = { year: Year, month: Month, week: Week, day: Day }.freeze
|
133
82
|
|
134
|
-
#
|
135
|
-
def
|
136
|
-
|
137
|
-
year = months / 12
|
138
|
-
month = months % 12
|
139
|
-
month.zero? ? new_time(year - 1, 12) : new_time(year, month)
|
140
|
-
end
|
83
|
+
# Create a subclass instance by unit name (internal use)
|
84
|
+
def self.create(unit, vars)
|
85
|
+
raise InternalError, "unit must be in #{UNITS.keys.inspect}; got #{unit}" unless UNITS.key?(unit)
|
141
86
|
|
142
|
-
|
143
|
-
def week_start(time)
|
144
|
-
start = time - (((time.wday - @week_offset) * DAY) % WEEK)
|
145
|
-
new_time(start.year, start.month, start.day)
|
87
|
+
UNITS[unit].new(vars)
|
146
88
|
end
|
147
89
|
end
|
148
90
|
end
|
data/lib/pagy/countless.rb
CHANGED
@@ -11,6 +11,7 @@ class Pagy
|
|
11
11
|
normalize_vars(vars)
|
12
12
|
setup_vars(page: 1, outset: 0)
|
13
13
|
setup_items_var
|
14
|
+
setup_params_var
|
14
15
|
@offset = (@items * (@page - 1)) + @outset
|
15
16
|
end
|
16
17
|
|
@@ -29,7 +30,7 @@ class Pagy
|
|
29
30
|
|
30
31
|
# Override the original series.
|
31
32
|
# Return nil if :countless_minimal is enabled
|
32
|
-
def series(
|
33
|
+
def series(*)
|
33
34
|
super unless @vars[:countless_minimal]
|
34
35
|
end
|
35
36
|
end
|
@@ -1,20 +1,20 @@
|
|
1
1
|
# See the Pagy documentation: https://ddnexus.github.io/pagy/extras/bootstrap
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require 'pagy/extras/
|
4
|
+
require 'pagy/extras/frontend_helpers'
|
5
5
|
|
6
6
|
class Pagy # :nodoc:
|
7
7
|
# Frontend modules are specially optimized for performance.
|
8
8
|
# The resulting code may not look very elegant, but produces the best benchmarks
|
9
9
|
module BootstrapExtra
|
10
10
|
# Pagination for bootstrap: it returns the html with the series of links to the pages
|
11
|
-
def pagy_bootstrap_nav(pagy, pagy_id: nil, link_extra: '')
|
11
|
+
def pagy_bootstrap_nav(pagy, pagy_id: nil, link_extra: '', **vars)
|
12
12
|
p_id = %( id="#{pagy_id}") if pagy_id
|
13
13
|
link = pagy_link_proc(pagy, link_extra: %(class="page-link" #{link_extra}))
|
14
14
|
|
15
15
|
html = +%(<nav#{p_id} class="pagy-bootstrap-nav" aria-label="pager"><ul class="pagination">)
|
16
16
|
html << pagy_bootstrap_prev_html(pagy, link)
|
17
|
-
pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
17
|
+
pagy.series(**vars).each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
18
18
|
html << case item
|
19
19
|
when Integer
|
20
20
|
%(<li class="page-item">#{link.call item}</li>)
|
@@ -30,17 +30,17 @@ class Pagy # :nodoc:
|
|
30
30
|
end
|
31
31
|
|
32
32
|
# Javascript pagination for bootstrap: it returns a nav and a JSON tag used by the Pagy.nav javascript
|
33
|
-
def pagy_bootstrap_nav_js(pagy, pagy_id: nil, link_extra: '',
|
33
|
+
def pagy_bootstrap_nav_js(pagy, pagy_id: nil, link_extra: '', **vars)
|
34
34
|
p_id = %( id="#{pagy_id}") if pagy_id
|
35
35
|
link = pagy_link_proc(pagy, link_extra: %(class="page-link" #{link_extra}))
|
36
36
|
tags = { 'before' => %(<ul class="pagination">#{pagy_bootstrap_prev_html pagy, link}),
|
37
|
-
'link' => %(<li class="page-item">#{mark = link.call(PAGE_PLACEHOLDER)}</li>),
|
37
|
+
'link' => %(<li class="page-item">#{mark = link.call(PAGE_PLACEHOLDER, LABEL_PLACEHOLDER)}</li>),
|
38
38
|
'active' => %(<li class="page-item active">#{mark}</li>),
|
39
39
|
'gap' => %(<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t 'pagy.nav.gap'}</a></li>),
|
40
40
|
'after' => %(#{pagy_bootstrap_next_html pagy, link}</ul>) }
|
41
41
|
|
42
42
|
%(<nav#{p_id} class="pagy-njs pagy-bootstrap-nav-js" aria-label="pager" #{
|
43
|
-
|
43
|
+
pagy_json_attr(pagy, :nav, tags, (sequels = pagy.sequels(**vars)), pagy.label_sequels(sequels))}></nav>)
|
44
44
|
end
|
45
45
|
|
46
46
|
# Javascript combo pagination for bootstrap: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
|
data/lib/pagy/extras/bulma.rb
CHANGED
@@ -1,26 +1,26 @@
|
|
1
1
|
# See the Pagy documentation: https://ddnexus.github.io/pagy/extras/bulma
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require 'pagy/extras/
|
4
|
+
require 'pagy/extras/frontend_helpers'
|
5
5
|
|
6
6
|
class Pagy # :nodoc:
|
7
7
|
# Frontend modules are specially optimized for performance.
|
8
8
|
# The resulting code may not look very elegant, but produces the best benchmarks
|
9
9
|
module BulmaExtra
|
10
10
|
# Pagination for Bulma: it returns the html with the series of links to the pages
|
11
|
-
def pagy_bulma_nav(pagy, pagy_id: nil, link_extra: '')
|
11
|
+
def pagy_bulma_nav(pagy, pagy_id: nil, link_extra: '', **vars)
|
12
12
|
p_id = %( id="#{pagy_id}") if pagy_id
|
13
13
|
link = pagy_link_proc(pagy, link_extra: link_extra)
|
14
14
|
|
15
15
|
html = +%(<nav#{p_id} class="pagy-bulma-nav pagination is-centered" aria-label="pagination">)
|
16
16
|
html << pagy_bulma_prev_next_html(pagy, link)
|
17
17
|
html << %(<ul class="pagination-list">)
|
18
|
-
pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
18
|
+
pagy.series(**vars).each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
19
19
|
html << case item
|
20
20
|
when Integer
|
21
|
-
%(<li>#{link.call item, item, %(class="pagination-link" aria-label="goto page #{item}")}</li>)
|
21
|
+
%(<li>#{link.call item, pagy.label_for(item), %(class="pagination-link" aria-label="goto page #{item}")}</li>)
|
22
22
|
when String
|
23
|
-
%(<li>#{link.call item, item,
|
23
|
+
%(<li>#{link.call item, pagy.label_for(item),
|
24
24
|
%(class="pagination-link is-current" aria-label="page #{item}" aria-current="page")}</li>)
|
25
25
|
when :gap
|
26
26
|
%(<li><span class="pagination-ellipsis">#{pagy_t 'pagy.nav.gap'}</span></li>)
|
@@ -30,21 +30,20 @@ class Pagy # :nodoc:
|
|
30
30
|
html << %(</ul></nav>)
|
31
31
|
end
|
32
32
|
|
33
|
-
def pagy_bulma_nav_js(pagy, pagy_id: nil, link_extra: '',
|
33
|
+
def pagy_bulma_nav_js(pagy, pagy_id: nil, link_extra: '', **vars)
|
34
34
|
p_id = %( id="#{pagy_id}") if pagy_id
|
35
35
|
link = pagy_link_proc(pagy, link_extra: link_extra)
|
36
36
|
tags = { 'before' => %(#{pagy_bulma_prev_next_html(pagy, link)}<ul class="pagination-list">),
|
37
|
-
'link' => %(<li>#{link.call PAGE_PLACEHOLDER,
|
37
|
+
'link' => %(<li>#{link.call PAGE_PLACEHOLDER, LABEL_PLACEHOLDER,
|
38
38
|
%(class="pagination-link" aria-label="goto page #{PAGE_PLACEHOLDER}")}</li>),
|
39
|
-
'active' => %(<li>#{link.call PAGE_PLACEHOLDER,
|
39
|
+
'active' => %(<li>#{link.call PAGE_PLACEHOLDER, LABEL_PLACEHOLDER,
|
40
40
|
%(class="pagination-link is-current" aria-current="page" aria-label="page #{
|
41
41
|
PAGE_PLACEHOLDER}")}</li>),
|
42
42
|
'gap' => %(<li><span class="pagination-ellipsis">#{pagy_t 'pagy.nav.gap'}</span></li>),
|
43
43
|
'after' => '</ul>' }
|
44
44
|
|
45
|
-
%(<nav#{p_id} class="pagy-njs pagy-bulma-nav-js pagination is-centered" aria-label="pagination" #{
|
46
|
-
pagy, :nav, tags, pagy.sequels(
|
47
|
-
)}></nav>)
|
45
|
+
%(<nav#{p_id} class="pagy-njs pagy-bulma-nav-js pagination is-centered" aria-label="pagination" #{
|
46
|
+
pagy_json_attr(pagy, :nav, tags, (sequels = pagy.sequels(**vars)), pagy.label_sequels(sequels))}></nav>)
|
48
47
|
end
|
49
48
|
|
50
49
|
# Javascript combo pagination for Bulma: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
|