pagy 5.5.0 → 5.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/config/pagy.rb +28 -25
- data/lib/javascripts/pagy.js +1 -1
- data/lib/locales/ta.yml +22 -0
- data/lib/pagy/calendar/day.rb +3 -3
- data/lib/pagy/calendar/month.rb +4 -32
- data/lib/pagy/calendar/month_mixin.rb +47 -0
- data/lib/pagy/calendar/quarter.rb +23 -0
- data/lib/pagy/calendar/week.rb +4 -4
- data/lib/pagy/calendar/year.rb +3 -3
- data/lib/pagy/calendar.rb +23 -24
- data/lib/pagy/extras/calendar.rb +4 -4
- data/lib/pagy/frontend.rb +2 -2
- data/lib/pagy/i18n.rb +21 -17
- data/lib/pagy.rb +1 -1
- data/lib/templates/bootstrap_nav.html.erb +1 -1
- data/lib/templates/bootstrap_nav.html.haml +1 -1
- data/lib/templates/bootstrap_nav.html.slim +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a24ac286e97d1aacd7603d7ada3791006120004bf56c027320c4184b9488fc7
|
4
|
+
data.tar.gz: 63a018d758c2ffff334de22fc8fdd433cdffe74030ba46ca5c3cf5dc8a563a9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5fd0f9dd9c8c8a151ea026e7e749ba6446fec53baf4bd9af276f8059f062d50d54b0d500e46762f5f4df8a3f89af475f4b07c7d8633f8194ee3da5d33d2b104
|
7
|
+
data.tar.gz: cd09f6222ce1d6db7c92984c9382d080d386ea862f66b3b7104721ea6cc6fc5e788714ce2aa623517c6ad9f17c6c95fd52fdcbcf2ba9a017c1485b262ce86405
|
data/lib/config/pagy.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Pagy initializer file (5.
|
4
|
-
# Customize only what you really need and notice that Pagy works also without any of the following lines.
|
3
|
+
# Pagy initializer file (5.6.2)
|
4
|
+
# Customize only what you really need and notice that the core 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
|
|
7
7
|
|
8
8
|
# Pagy DEFAULT Variables
|
9
9
|
# See https://ddnexus.github.io/pagy/api/pagy#variables
|
10
|
-
# All the Pagy::DEFAULT are set for all the Pagy instances but can be overridden per instance
|
11
|
-
#
|
10
|
+
# All the Pagy::DEFAULT are set for all the Pagy instances but can be overridden per instance by just passing them to
|
11
|
+
# Pagy.new|Pagy::Countless.new|Pagy::Calendar::*.new or any of the #pagy* controller methods
|
12
12
|
|
13
13
|
|
14
14
|
# Instance variables
|
@@ -40,24 +40,27 @@
|
|
40
40
|
# See https://ddnexus.github.io/pagy/extras/array
|
41
41
|
# require 'pagy/extras/array'
|
42
42
|
|
43
|
-
# Calendar extra: Add pagination filtering by calendar time unit (
|
43
|
+
# Calendar extra: Add pagination filtering by calendar time unit (year, quarter, month, week, day)
|
44
44
|
# See https://ddnexus.github.io/pagy/extras/calendar
|
45
45
|
# require 'pagy/extras/calendar'
|
46
46
|
# Default for each unit
|
47
|
-
# Pagy::Calendar::Year::DEFAULT[:order]
|
48
|
-
# Pagy::Calendar::Year::DEFAULT[:format]
|
47
|
+
# Pagy::Calendar::Year::DEFAULT[:order] = :asc # Time direction of pagination
|
48
|
+
# Pagy::Calendar::Year::DEFAULT[:format] = '%Y' # strftime format
|
49
49
|
#
|
50
|
-
# Pagy::Calendar::
|
51
|
-
# Pagy::Calendar::
|
50
|
+
# Pagy::Calendar::Quarter::DEFAULT[:order] = :asc # Time direction of pagination
|
51
|
+
# Pagy::Calendar::Quarter::DEFAULT[:format] = '%Y-Q%q' # strftime format
|
52
52
|
#
|
53
|
-
# Pagy::Calendar::
|
54
|
-
# Pagy::Calendar::
|
55
|
-
# Pagy::Calendar::Week::DEFAULT[:offset] = 0 # Day offset from Sunday (0: Sunday; 1: Monday;... 6: Saturday)
|
53
|
+
# Pagy::Calendar::Month::DEFAULT[:order] = :asc # Time direction of pagination
|
54
|
+
# Pagy::Calendar::Month::DEFAULT[:format] = '%Y-%m' # strftime format
|
56
55
|
#
|
57
|
-
# Pagy::Calendar::
|
58
|
-
# Pagy::Calendar::
|
56
|
+
# Pagy::Calendar::Week::DEFAULT[:order] = :asc # Time direction of pagination
|
57
|
+
# Pagy::Calendar::Week::DEFAULT[:format] = '%Y-%W' # strftime format
|
58
|
+
# Pagy::Calendar::Week::DEFAULT[:offset] = 0 # Day offset from Sunday (0: Sunday; 1: Monday;... 6: Saturday)
|
59
59
|
#
|
60
|
-
#
|
60
|
+
# Pagy::Calendar::Day::DEFAULT[:order] = :asc # Time direction of pagination
|
61
|
+
# Pagy::Calendar::Day::DEFAULT[:format] = '%Y-%m-%d' # strftime format
|
62
|
+
#
|
63
|
+
# Uncomment the following lines, if you need calendar localization without using the I18n extra
|
61
64
|
# module LocalizePagyCalendar
|
62
65
|
# def localize(time, opts)
|
63
66
|
# ::I18n.l(time, **opts)
|
@@ -97,8 +100,8 @@
|
|
97
100
|
# you must require the shared internal extra (BEFORE the metadata extra) ONLY if you need also the :sequels
|
98
101
|
# require 'pagy/extras/shared'
|
99
102
|
# require 'pagy/extras/metadata'
|
100
|
-
# For performance
|
101
|
-
# Pagy::DEFAULT[:metadata] = %i[scaffold_url
|
103
|
+
# For performance reasons, you should explicitly set ONLY the metadata you use in the frontend
|
104
|
+
# Pagy::DEFAULT[:metadata] = %i[scaffold_url page prev next last] # example
|
102
105
|
|
103
106
|
# Searchkick extra: Paginate `Searchkick::Results` objects
|
104
107
|
# See https://ddnexus.github.io/pagy/extras/searchkick
|
@@ -209,18 +212,18 @@
|
|
209
212
|
#
|
210
213
|
# load the "de", "en" and "es" built-in locales:
|
211
214
|
# (the first passed :locale will be used also as the default_locale)
|
212
|
-
# Pagy::I18n.load({locale: 'de'},
|
213
|
-
# {locale: 'en'},
|
214
|
-
# {locale: 'es'})
|
215
|
+
# Pagy::I18n.load({ locale: 'de' },
|
216
|
+
# { locale: 'en' },
|
217
|
+
# { locale: 'es' })
|
215
218
|
#
|
216
219
|
# load the "en" built-in locale, a custom "es" locale,
|
217
220
|
# and a totally custom locale complete with a custom :pluralize proc:
|
218
221
|
# (the first passed :locale will be used also as the default_locale)
|
219
|
-
# Pagy::I18n.load({locale: 'en'},
|
220
|
-
# {locale: 'es', filepath: 'path/to/pagy-es.yml'},
|
221
|
-
# {locale: 'xyz', # not built-in
|
222
|
-
#
|
223
|
-
#
|
222
|
+
# Pagy::I18n.load({ locale: 'en' },
|
223
|
+
# { locale: 'es', filepath: 'path/to/pagy-es.yml' },
|
224
|
+
# { locale: 'xyz', # not built-in
|
225
|
+
# filepath: 'path/to/pagy-xyz.yml',
|
226
|
+
# pluralize: lambda{ |count| ... } )
|
224
227
|
|
225
228
|
|
226
229
|
# I18n extra: uses the standard i18n gem which is ~18x slower using ~10x more memory
|
data/lib/javascripts/pagy.js
CHANGED
data/lib/locales/ta.yml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/locales/utils/p11n.rb)
|
2
|
+
|
3
|
+
ta:
|
4
|
+
pagy:
|
5
|
+
|
6
|
+
item_name:
|
7
|
+
one: "பதிவு"
|
8
|
+
other: "பதிவுகள்"
|
9
|
+
|
10
|
+
nav:
|
11
|
+
prev: "‹ முந்தையது"
|
12
|
+
next: "அடுத்தது ›"
|
13
|
+
gap: "…"
|
14
|
+
|
15
|
+
info:
|
16
|
+
no_items: "%{item_name} கிடைக்கவில்லை"
|
17
|
+
single_page: "<b>%{count}</b> %{item_name} காட்டப்படுகின்றது"
|
18
|
+
multiple_pages: "மொத்தம் <b>%{count}</b> %{item_name}, காட்டப்படுபவை <b>%{from}-%{to}</b>"
|
19
|
+
|
20
|
+
combo_nav_js: "<label>%{pages}-இல் %{page_input}-வது பக்கம்</label>"
|
21
|
+
|
22
|
+
items_selector_js: "<label>ஒரு பக்கத்திற்கு %{items_input} %{item_name} காட்டு</label>"
|
data/lib/pagy/calendar/day.rb
CHANGED
@@ -16,12 +16,12 @@ class Pagy # :nodoc:
|
|
16
16
|
@initial = new_time(@starting.year, @starting.month, @starting.day)
|
17
17
|
@final = new_time(@ending.year, @ending.month, @ending.day) + DAY
|
18
18
|
@pages = @last = (@final - @initial).to_i / DAY
|
19
|
-
@from =
|
19
|
+
@from = starting_time_for(@page)
|
20
20
|
@to = @from + DAY
|
21
21
|
end
|
22
22
|
|
23
|
-
#
|
24
|
-
def
|
23
|
+
# Starting time for the page
|
24
|
+
def starting_time_for(page)
|
25
25
|
@initial + (snap(page) * DAY)
|
26
26
|
end
|
27
27
|
end
|
data/lib/pagy/calendar/month.rb
CHANGED
@@ -1,44 +1,16 @@
|
|
1
1
|
# See Pagy::Countless API documentation: https://ddnexus.github.io/pagy/api/calendar
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
+
require_relative 'month_mixin'
|
5
|
+
|
4
6
|
class Pagy # :nodoc:
|
5
7
|
class Calendar # :nodoc:
|
6
8
|
# Calendar month subclass
|
7
9
|
class Month < Calendar
|
8
10
|
DEFAULT = { order: :asc, # rubocop:disable Style/MutableConstant
|
9
11
|
format: '%Y-%m' }
|
10
|
-
|
11
|
-
|
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
|
12
|
+
MONTHS = 1 # number of months in the unit
|
13
|
+
include MonthMixin
|
42
14
|
end
|
43
15
|
end
|
44
16
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Pagy
|
4
|
+
class Calendar
|
5
|
+
# Mixin for month based unit periods
|
6
|
+
# It is used for month and quarter, but you could use it to implement less common unit of 6, 4, 2 months
|
7
|
+
# (see the https://ddnexus.github.io/pagy/api/calendar#custom-units sections for details).
|
8
|
+
# The including class must set the MONTHS duration for the unit and the usual DEFAULT.
|
9
|
+
module MonthMixin
|
10
|
+
protected
|
11
|
+
|
12
|
+
# Setup the calendar variables
|
13
|
+
def setup_unit_vars
|
14
|
+
super
|
15
|
+
@months = self.class::MONTHS # number of months in the unit
|
16
|
+
@initial = new_time(@starting.year, starting_month_including(@starting.month))
|
17
|
+
@final = add_months_to(new_time(@ending.year, starting_month_including(@ending.month)), @months)
|
18
|
+
@pages = @last = (months_in(@final) - months_in(@initial)) / @months
|
19
|
+
@from = starting_time_for(@page)
|
20
|
+
@to = add_months_to(@from, @months)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Starting time for the page
|
24
|
+
def starting_time_for(page)
|
25
|
+
add_months_to(@initial, snap(page) * @months)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Starting month of the unit including the passed month
|
29
|
+
def starting_month_including(month)
|
30
|
+
(@months * ((month - 1) / @months)) + 1 # remove 1 month for 0-11 calculations and add it back for 1-12 conversion
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
# Number of months in time
|
36
|
+
def months_in(time)
|
37
|
+
(time.year * 12) + time.month
|
38
|
+
end
|
39
|
+
|
40
|
+
# Add months to time
|
41
|
+
def add_months_to(time, months)
|
42
|
+
months += months_in(time) - 1 # remove 1 month for 0-11 calculations
|
43
|
+
new_time(months / 12, (months % 12) + 1) # add 1 month back for 1-12 conversion
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# See Pagy::Countless API documentation: https://ddnexus.github.io/pagy/api/calendar
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative 'month_mixin'
|
5
|
+
|
6
|
+
class Pagy # :nodoc:
|
7
|
+
class Calendar # :nodoc:
|
8
|
+
# Calendar quarter subclass
|
9
|
+
class Quarter < Calendar
|
10
|
+
DEFAULT = { order: :asc, # rubocop:disable Style/MutableConstant
|
11
|
+
format: '%Y-Q%q' } # '%q' token
|
12
|
+
MONTHS = 3 # number of months of the unit
|
13
|
+
include MonthMixin
|
14
|
+
|
15
|
+
# The label for any page, with the substitution of the '%q' token
|
16
|
+
def label_for(page, opts = {})
|
17
|
+
starting_time = starting_time_for(page.to_i) # page could be a string
|
18
|
+
opts[:format] = (opts[:format] || @vars[:format]).gsub('%q') { (starting_time.month / 4) + 1 }
|
19
|
+
localize(starting_time, opts)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/pagy/calendar/week.rb
CHANGED
@@ -18,18 +18,18 @@ class Pagy # :nodoc:
|
|
18
18
|
@initial = week_start(@starting)
|
19
19
|
@final = week_start(@ending) + WEEK
|
20
20
|
@pages = @last = (@final - @initial).to_i / WEEK
|
21
|
-
@from =
|
21
|
+
@from = starting_time_for(@page)
|
22
22
|
@to = @from + WEEK
|
23
23
|
end
|
24
24
|
|
25
|
-
#
|
26
|
-
def
|
25
|
+
# Starting time for the page
|
26
|
+
def starting_time_for(page)
|
27
27
|
@initial + (snap(page) * WEEK)
|
28
28
|
end
|
29
29
|
|
30
30
|
private
|
31
31
|
|
32
|
-
# Return the start of the week for
|
32
|
+
# Return the start of the week for time
|
33
33
|
def week_start(time)
|
34
34
|
start = time - (((time.wday - @offset) * DAY) % WEEK)
|
35
35
|
new_time(start.year, start.month, start.day)
|
data/lib/pagy/calendar/year.rb
CHANGED
@@ -16,12 +16,12 @@ class Pagy # :nodoc:
|
|
16
16
|
@initial = new_time(@starting.year)
|
17
17
|
@final = new_time(@ending.year + 1)
|
18
18
|
@pages = @last = @final.year - @initial.year
|
19
|
-
@from =
|
19
|
+
@from = starting_time_for(@page)
|
20
20
|
@to = new_time(@from.year + 1)
|
21
21
|
end
|
22
22
|
|
23
|
-
#
|
24
|
-
def
|
23
|
+
# Starting time for the page
|
24
|
+
def starting_time_for(page)
|
25
25
|
new_time(@initial.year + snap(page))
|
26
26
|
end
|
27
27
|
end
|
data/lib/pagy/calendar.rb
CHANGED
@@ -4,10 +4,12 @@
|
|
4
4
|
require 'pagy'
|
5
5
|
|
6
6
|
class Pagy # :nodoc:
|
7
|
-
# Base class for time units subclasses (Year, Month, Week, Day)
|
7
|
+
# Base class for time units subclasses (Year, Quarter, Month, Week, Day)
|
8
8
|
class Calendar < Pagy
|
9
|
-
|
10
|
-
|
9
|
+
# List of units in desc order of duration. It can be used for custom units.
|
10
|
+
UNITS = %i[year quarter month week day] # rubocop:disable Style/MutableConstant
|
11
|
+
DAY = 60 * 60 * 24 # One day in seconds
|
12
|
+
WEEK = DAY * 7 # One week in seconds
|
11
13
|
|
12
14
|
attr_reader :order
|
13
15
|
|
@@ -15,8 +17,8 @@ class Pagy # :nodoc:
|
|
15
17
|
def initialize(vars) # rubocop:disable Lint/MissingSuper
|
16
18
|
raise InternalError, 'Pagy::Calendar is a base class; use one of its subclasses' if instance_of?(Pagy::Calendar)
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
+
vars = self.class::DEFAULT.merge(vars) # subclass specific default
|
21
|
+
normalize_vars(vars) # general default
|
20
22
|
setup_vars(page: 1)
|
21
23
|
setup_unit_vars
|
22
24
|
setup_params_var
|
@@ -27,19 +29,19 @@ class Pagy # :nodoc:
|
|
27
29
|
end
|
28
30
|
|
29
31
|
# 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(
|
31
|
-
label_for(@page,
|
32
|
+
def label(opts = {})
|
33
|
+
label_for(@page, opts)
|
32
34
|
end
|
33
35
|
|
34
36
|
# 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,
|
37
|
+
def label_for(page, opts = {})
|
36
38
|
opts[:format] ||= @vars[:format]
|
37
|
-
localize(
|
39
|
+
localize(starting_time_for(page.to_i), opts) # page could be a string
|
38
40
|
end
|
39
41
|
|
40
42
|
# Period of the active page (used for nested units)
|
41
43
|
def active_period
|
42
|
-
[[@starting, @from].max, [@to -
|
44
|
+
[[@starting, @from].max, [@to - 1, @ending].min] # -1 sec: include only last unit day
|
43
45
|
end
|
44
46
|
|
45
47
|
protected
|
@@ -61,8 +63,7 @@ class Pagy # :nodoc:
|
|
61
63
|
time.strftime(opts[:format])
|
62
64
|
end
|
63
65
|
|
64
|
-
# Simple trick to snap the page
|
65
|
-
# Tech note: use for @from but not for @to, which must be one period after @from also in :desc order!
|
66
|
+
# Simple trick to snap the page to its ordered start, without actually reordering anything in the internal structure
|
66
67
|
def snap(page)
|
67
68
|
@order == :asc ? page - 1 : @pages - page
|
68
69
|
end
|
@@ -71,20 +72,18 @@ class Pagy # :nodoc:
|
|
71
72
|
def new_time(year, month = 1, day = 1)
|
72
73
|
Time.new(year, month, day, 0, 0, 0, @utc_offset)
|
73
74
|
end
|
74
|
-
end
|
75
|
-
require 'pagy/calendar/year'
|
76
|
-
require 'pagy/calendar/month'
|
77
|
-
require 'pagy/calendar/week'
|
78
|
-
require 'pagy/calendar/day'
|
79
|
-
|
80
|
-
class Calendar # :nodoc:
|
81
|
-
UNITS = { year: Year, month: Month, week: Week, day: Day }.freeze
|
82
75
|
|
83
|
-
|
84
|
-
|
85
|
-
|
76
|
+
class << self
|
77
|
+
# Create a subclass instance by unit name (internal use)
|
78
|
+
def create(unit, vars)
|
79
|
+
raise InternalError, "unit must be in #{UNITS.inspect}; got #{unit}" unless UNITS.include?(unit)
|
86
80
|
|
87
|
-
|
81
|
+
name = unit.to_s
|
82
|
+
name[0] = name[0].capitalize
|
83
|
+
Object.const_get("Pagy::Calendar::#{name}").new(vars)
|
84
|
+
end
|
88
85
|
end
|
89
86
|
end
|
87
|
+
|
88
|
+
Calendar::UNITS.each { |unit| require "pagy/calendar/#{unit}" }
|
90
89
|
end
|
data/lib/pagy/extras/calendar.rb
CHANGED
@@ -8,11 +8,11 @@ class Pagy # :nodoc:
|
|
8
8
|
module CalendarExtra
|
9
9
|
# Additions for the Backend module
|
10
10
|
module Backend
|
11
|
-
CONF_KEYS = %i[
|
11
|
+
CONF_KEYS = (Calendar::UNITS + %i[pagy active]).freeze
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
|
-
# Take a collection and a conf Hash with keys in [:year, :month: week, :day, :pagy: :active];
|
15
|
+
# Take a collection and a conf Hash with keys in [:year, :quarter, :month: week, :day, :pagy: :active];
|
16
16
|
# The calendar is active by default, but it can be explicitly inactivated with `active: false`
|
17
17
|
# Return a hash with 3 items:
|
18
18
|
# 0. Array of pagy calendar unit objects
|
@@ -31,7 +31,7 @@ class Pagy # :nodoc:
|
|
31
31
|
|
32
32
|
# Setup and return the calendar objects and the filtered collection
|
33
33
|
def pagy_setup_calendar(collection, conf)
|
34
|
-
units = Calendar::UNITS
|
34
|
+
units = Calendar::UNITS & conf.keys # get the units in time length desc order
|
35
35
|
page_param = conf[:pagy][:page_param] || DEFAULT[:page_param]
|
36
36
|
units.each do |unit| # set all the :page_param vars for later deletion
|
37
37
|
unit_page_param = :"#{unit}_#{page_param}"
|
@@ -47,7 +47,7 @@ class Pagy # :nodoc:
|
|
47
47
|
params
|
48
48
|
end
|
49
49
|
conf[unit][:period] = period
|
50
|
-
calendar[unit] = Calendar.create
|
50
|
+
calendar[unit] = Calendar.send(:create, unit, conf[unit])
|
51
51
|
period = calendar[unit].active_period # set the period for the next unit
|
52
52
|
end
|
53
53
|
[calendar, pagy_calendar_filter(collection, calendar[units.last].from, calendar[units.last].to)]
|
data/lib/pagy/frontend.rb
CHANGED
@@ -76,8 +76,8 @@ class Pagy
|
|
76
76
|
|
77
77
|
# Similar to I18n.t: just ~18x faster using ~10x less memory
|
78
78
|
# (@pagy_locale explicitly initialized in order to avoid warning)
|
79
|
-
def pagy_t(key,
|
80
|
-
Pagy::I18n.t(@pagy_locale ||= nil, key,
|
79
|
+
def pagy_t(key, opts = {})
|
80
|
+
Pagy::I18n.t(@pagy_locale ||= nil, key, opts)
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
data/lib/pagy/i18n.rb
CHANGED
@@ -10,12 +10,16 @@ class Pagy
|
|
10
10
|
|
11
11
|
# Pluralization rules
|
12
12
|
module P11n
|
13
|
-
#
|
14
|
-
from0to1 =
|
15
|
-
from2to4 =
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
# Pluralization variables
|
14
|
+
from0to1 = (0..1).to_a.freeze
|
15
|
+
from2to4 = (2..4).to_a.freeze
|
16
|
+
from3to10 = (3..10).to_a.freeze
|
17
|
+
from5to9 = (5..9).to_a.freeze
|
18
|
+
from11to14 = (11..14).to_a.freeze
|
19
|
+
from11to99 = (11..99).to_a.freeze
|
20
|
+
from12to14 = (12..14).to_a.freeze
|
21
|
+
|
22
|
+
from0to1_from5to9 = from0to1 + from5to9
|
19
23
|
|
20
24
|
# Store the proc defining each pluralization RULE
|
21
25
|
# Logic adapted from https://github.com/svenfuchs/rails-i18n
|
@@ -24,12 +28,12 @@ class Pagy
|
|
24
28
|
lambda do |n = 0|
|
25
29
|
mod100 = n % 100
|
26
30
|
case
|
27
|
-
when n == 0
|
28
|
-
when n == 1
|
29
|
-
when n == 2
|
30
|
-
when
|
31
|
-
when
|
32
|
-
else
|
31
|
+
when n == 0 then 'zero' # rubocop:disable Style/NumericPredicate
|
32
|
+
when n == 1 then 'one'
|
33
|
+
when n == 2 then 'two'
|
34
|
+
when from3to10.include?(mod100) then 'few'
|
35
|
+
when from11to99.include?(mod100) then 'many'
|
36
|
+
else 'other'
|
33
37
|
end
|
34
38
|
end,
|
35
39
|
|
@@ -68,10 +72,10 @@ class Pagy
|
|
68
72
|
mod10 = n % 10
|
69
73
|
mod100 = n % 100
|
70
74
|
case
|
71
|
-
when n == 1
|
72
|
-
when from2to4.include?(mod10) && !from12to14.include?(mod100)
|
73
|
-
when
|
74
|
-
else
|
75
|
+
when n == 1 then 'one'
|
76
|
+
when from2to4.include?(mod10) && !from12to14.include?(mod100) then 'few'
|
77
|
+
when from0to1_from5to9.include?(mod10) || from12to14.include?(mod100) then 'many'
|
78
|
+
else 'other'
|
75
79
|
end
|
76
80
|
end,
|
77
81
|
|
@@ -149,7 +153,7 @@ class Pagy
|
|
149
153
|
end
|
150
154
|
|
151
155
|
# Translate and pluralize the key with the locale DATA
|
152
|
-
def t(locale, key,
|
156
|
+
def t(locale, key, opts = {})
|
153
157
|
data, pluralize = DATA[locale]
|
154
158
|
translation = data[key] || (opts[:count] && data[key += ".#{pluralize.call(opts[:count])}"]) \
|
155
159
|
or return %([translation missing: "#{key}"])
|
data/lib/pagy.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
The link variable is set to a proc that returns the link tag.
|
6
6
|
Usage: link.call( page_number [, text [, extra_attributes_string ]])
|
7
7
|
-%>
|
8
|
-
<% link = pagy_link_proc(pagy, 'class="page-link"') -%>
|
8
|
+
<% link = pagy_link_proc(pagy, link_extra: 'class="page-link"') -%>
|
9
9
|
<%# -%><nav aria-label="pager" class="pagy-bootstrap-nav" role="navigation">
|
10
10
|
<%# -%> <ul class="pagination">
|
11
11
|
<% if pagy.prev -%> <li class="page-item prev"><%== link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"') %></li>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
-# The link variable is set to a proc that returns the link tag.
|
5
5
|
-# Usage: link.call( page_number [, text [, extra_attributes_string ]])
|
6
6
|
|
7
|
-
- link = pagy_link_proc(pagy, 'class="page-link"')
|
7
|
+
- link = pagy_link_proc(pagy, link_extra: 'class="page-link"')
|
8
8
|
|
9
9
|
%nav.pagy-bootstrap-nav{"aria-label" => "pager", :role => "navigation"}
|
10
10
|
|
@@ -4,7 +4,7 @@
|
|
4
4
|
/ The link variable is set to a proc that returns the link tag.
|
5
5
|
/ Usage: link.call( page_number [, text [, extra_attributes_string ]])
|
6
6
|
|
7
|
-
- link = pagy_link_proc(pagy, 'class="page-link"')
|
7
|
+
- link = pagy_link_proc(pagy, link_extra: 'class="page-link"')
|
8
8
|
|
9
9
|
nav.pagy-bootstrap-nav role="navigation" aria-label="pager"
|
10
10
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pagy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Domizio Demichelis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-11-
|
11
|
+
date: 2021-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Agnostic pagination in plain ruby. It does it all. Better.
|
14
14
|
email:
|
@@ -46,6 +46,7 @@ files:
|
|
46
46
|
- lib/locales/sv-SE.yml
|
47
47
|
- lib/locales/sv.yml
|
48
48
|
- lib/locales/sw.yml
|
49
|
+
- lib/locales/ta.yml
|
49
50
|
- lib/locales/tr.yml
|
50
51
|
- lib/locales/uk.yml
|
51
52
|
- lib/locales/zh-CN.yml
|
@@ -56,6 +57,8 @@ files:
|
|
56
57
|
- lib/pagy/calendar.rb
|
57
58
|
- lib/pagy/calendar/day.rb
|
58
59
|
- lib/pagy/calendar/month.rb
|
60
|
+
- lib/pagy/calendar/month_mixin.rb
|
61
|
+
- lib/pagy/calendar/quarter.rb
|
59
62
|
- lib/pagy/calendar/week.rb
|
60
63
|
- lib/pagy/calendar/year.rb
|
61
64
|
- lib/pagy/console.rb
|