pagy 9.4.0 → 43.0.0.rc1
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/apps/calendar.ru +547 -551
- data/apps/demo.ru +221 -178
- data/apps/index.rb +3 -1
- data/apps/keynav.ru +258 -0
- data/apps/{keyset_ar.ru → keyset.ru} +26 -32
- data/apps/{keyset_s.ru → keyset_sequel.ru} +23 -29
- data/apps/rails.ru +51 -48
- data/apps/repro.ru +46 -43
- data/bin/pagy +20 -21
- data/config/pagy.rb +35 -207
- data/javascripts/ai_widget.js +76 -0
- data/javascripts/pagy.js +151 -0
- data/javascripts/pagy.js.map +10 -0
- data/javascripts/pagy.min.js +1 -4
- data/javascripts/pagy.mjs +111 -63
- data/javascripts/wand.js +1166 -0
- data/lib/pagy/classes/calendar/calendar.rb +98 -0
- data/lib/pagy/{calendar → classes/calendar}/day.rb +7 -11
- data/lib/pagy/{calendar → classes/calendar}/month.rb +5 -10
- data/lib/pagy/{calendar → classes/calendar}/quarter.rb +10 -15
- data/lib/pagy/classes/calendar/unit.rb +92 -0
- data/lib/pagy/{calendar → classes/calendar}/week.rb +5 -9
- data/lib/pagy/{calendar → classes/calendar}/year.rb +5 -6
- data/lib/pagy/classes/exceptions.rb +33 -0
- data/lib/pagy/classes/keyset/active_record.rb +11 -0
- data/lib/pagy/classes/keyset/adapters/active_record.rb +50 -0
- data/lib/pagy/classes/keyset/adapters/sequel.rb +63 -0
- data/lib/pagy/classes/keyset/keynav/active_record.rb +13 -0
- data/lib/pagy/classes/keyset/keynav/sequel.rb +13 -0
- data/lib/pagy/classes/keyset/keynav.rb +77 -0
- data/lib/pagy/classes/keyset/keyset.rb +126 -0
- data/lib/pagy/classes/keyset/sequel.rb +11 -0
- data/lib/pagy/classes/offset/countless.rb +56 -0
- data/lib/pagy/classes/offset/offset.rb +54 -0
- data/lib/pagy/classes/offset/search.rb +38 -0
- data/lib/pagy/classes/request.rb +36 -0
- data/lib/pagy/modules/abilities/configurable.rb +36 -0
- data/lib/pagy/modules/abilities/linkable.rb +59 -0
- data/lib/pagy/modules/abilities/rangeable.rb +15 -0
- data/lib/pagy/modules/abilities/shiftable.rb +12 -0
- data/lib/pagy/{b64.rb → modules/b64.rb} +3 -7
- data/lib/pagy/modules/console.rb +38 -0
- data/lib/pagy/modules/i18n/i18n.rb +48 -0
- data/lib/pagy/modules/i18n/p11n/arabic.rb +29 -0
- data/lib/pagy/modules/i18n/p11n/east_slavic.rb +26 -0
- data/lib/pagy/modules/i18n/p11n/one_other.rb +15 -0
- data/lib/pagy/modules/i18n/p11n/one_upto_two_other.rb +15 -0
- data/lib/pagy/modules/i18n/p11n/other.rb +13 -0
- data/lib/pagy/modules/i18n/p11n/polish.rb +26 -0
- data/lib/pagy/modules/i18n/p11n/west_slavic.rb +22 -0
- data/lib/pagy/modules/i18n/p11n.rb +16 -0
- data/lib/pagy/modules/searcher.rb +20 -0
- data/lib/pagy/toolbox/helpers/anchor_tags.rb +25 -0
- data/lib/pagy/toolbox/helpers/bootstrap/input_nav_js.rb +24 -0
- data/lib/pagy/toolbox/helpers/bootstrap/previous_next_html.rb +18 -0
- data/lib/pagy/toolbox/helpers/bootstrap/series_nav.rb +29 -0
- data/lib/pagy/toolbox/helpers/bootstrap/series_nav_js.rb +21 -0
- data/lib/pagy/toolbox/helpers/bulma/input_nav_js.rb +21 -0
- data/lib/pagy/toolbox/helpers/bulma/previous_next_html.rb +19 -0
- data/lib/pagy/toolbox/helpers/bulma/series_nav.rb +28 -0
- data/lib/pagy/toolbox/helpers/bulma/series_nav_js.rb +20 -0
- data/lib/pagy/toolbox/helpers/data_hash.rb +26 -0
- data/lib/pagy/toolbox/helpers/headers_hash.rb +20 -0
- data/lib/pagy/toolbox/helpers/info_tag.rb +26 -0
- data/lib/pagy/toolbox/helpers/input_nav_js.rb +19 -0
- data/lib/pagy/toolbox/helpers/limit_tag_js.rb +23 -0
- data/lib/pagy/toolbox/helpers/loader.rb +33 -0
- data/lib/pagy/toolbox/helpers/page_url.rb +23 -0
- data/lib/pagy/toolbox/helpers/series_nav.rb +29 -0
- data/lib/pagy/toolbox/helpers/series_nav_js.rb +19 -0
- data/lib/pagy/toolbox/helpers/support/a_lambda.rb +34 -0
- data/lib/pagy/toolbox/helpers/support/data_pagy_attribute.rb +15 -0
- data/lib/pagy/toolbox/helpers/support/nav_aria_label_attribute.rb +12 -0
- data/lib/pagy/toolbox/helpers/support/series.rb +38 -0
- data/lib/pagy/toolbox/helpers/support/wrap_input_nav_js.rb +20 -0
- data/lib/pagy/toolbox/helpers/support/wrap_series_nav.rb +17 -0
- data/lib/pagy/toolbox/helpers/support/wrap_series_nav_js.rb +36 -0
- data/lib/pagy/toolbox/helpers/urls_hash.rb +13 -0
- data/lib/pagy/toolbox/paginators/calendar.rb +30 -0
- data/lib/pagy/toolbox/paginators/countless.rb +25 -0
- data/lib/pagy/toolbox/paginators/elasticsearch_rails.rb +32 -0
- data/lib/pagy/toolbox/paginators/keynav_js.rb +29 -0
- data/lib/pagy/toolbox/paginators/keyset.rb +18 -0
- data/lib/pagy/toolbox/paginators/meilisearch.rb +32 -0
- data/lib/pagy/toolbox/paginators/method.rb +26 -0
- data/lib/pagy/toolbox/paginators/offset.rb +33 -0
- data/lib/pagy/toolbox/paginators/searchkick.rb +32 -0
- data/lib/pagy.rb +59 -97
- data/locales/ar.yml +9 -6
- data/locales/be.yml +9 -6
- data/locales/bg.yml +9 -6
- data/locales/bs.yml +9 -6
- data/locales/ca.yml +9 -6
- data/locales/ckb.yml +8 -6
- data/locales/cs.yml +9 -6
- data/locales/da.yml +9 -6
- data/locales/de.yml +9 -6
- data/locales/dz.yml +9 -6
- data/locales/en.yml +9 -6
- data/locales/es.yml +9 -6
- data/locales/fr.yml +9 -6
- data/locales/hr.yml +9 -6
- data/locales/id.yml +9 -6
- data/locales/it.yml +9 -6
- data/locales/ja.yml +9 -6
- data/locales/km.yml +9 -6
- data/locales/ko.yml +9 -6
- data/locales/nb.yml +9 -6
- data/locales/nl.yml +9 -6
- data/locales/nn.yml +9 -6
- data/locales/pl.yml +9 -6
- data/locales/pt-BR.yml +10 -7
- data/locales/pt.yml +10 -7
- data/locales/ru.yml +9 -6
- data/locales/sr.yml +9 -6
- data/locales/sv-SE.yml +9 -6
- data/locales/sv.yml +9 -6
- data/locales/sw.yml +12 -9
- data/locales/ta.yml +15 -8
- data/locales/tr.yml +9 -6
- data/locales/uk.yml +9 -6
- data/locales/vi.yml +9 -6
- data/locales/zh-CN.yml +9 -6
- data/locales/zh-HK.yml +9 -6
- data/locales/zh-TW.yml +9 -6
- data/stylesheets/pagy-tailwind.css +64 -0
- data/stylesheets/pagy.css +63 -27
- metadata +112 -52
- data/javascripts/pagy.min.js.map +0 -10
- data/lib/pagy/backend.rb +0 -44
- data/lib/pagy/calendar/unit.rb +0 -103
- data/lib/pagy/calendar.rb +0 -84
- data/lib/pagy/console.rb +0 -23
- data/lib/pagy/countless.rb +0 -38
- data/lib/pagy/exceptions.rb +0 -25
- data/lib/pagy/extras/arel.rb +0 -28
- data/lib/pagy/extras/array.rb +0 -19
- data/lib/pagy/extras/bootstrap.rb +0 -97
- data/lib/pagy/extras/bulma.rb +0 -93
- data/lib/pagy/extras/calendar.rb +0 -79
- data/lib/pagy/extras/countless.rb +0 -32
- data/lib/pagy/extras/elasticsearch_rails.rb +0 -71
- data/lib/pagy/extras/gearbox.rb +0 -55
- data/lib/pagy/extras/headers.rb +0 -54
- data/lib/pagy/extras/i18n.rb +0 -26
- data/lib/pagy/extras/js_tools.rb +0 -70
- data/lib/pagy/extras/jsonapi.rb +0 -88
- data/lib/pagy/extras/keyset.rb +0 -30
- data/lib/pagy/extras/limit.rb +0 -63
- data/lib/pagy/extras/meilisearch.rb +0 -57
- data/lib/pagy/extras/metadata.rb +0 -42
- data/lib/pagy/extras/overflow.rb +0 -81
- data/lib/pagy/extras/pagy.rb +0 -82
- data/lib/pagy/extras/searchkick.rb +0 -59
- data/lib/pagy/extras/size.rb +0 -40
- data/lib/pagy/extras/standalone.rb +0 -60
- data/lib/pagy/extras/trim.rb +0 -29
- data/lib/pagy/frontend.rb +0 -99
- data/lib/pagy/i18n.rb +0 -167
- data/lib/pagy/keyset/active_record.rb +0 -44
- data/lib/pagy/keyset/sequel.rb +0 -57
- data/lib/pagy/keyset.rb +0 -118
- data/lib/pagy/shared_methods.rb +0 -26
- data/lib/pagy/url_helpers.rb +0 -26
- data/locales/sk.yml +0 -23
- data/stylesheets/pagy.scss +0 -48
- data/stylesheets/pagy.tailwind.css +0 -21
data/apps/keynav.ru
ADDED
@@ -0,0 +1,258 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# DESCRIPTION
|
4
|
+
# Showcase the Keynav pagination (ActiveRecord example)
|
5
|
+
#
|
6
|
+
# DOC
|
7
|
+
# https://ddnexus.github.io/pagy/playground/#keyset-apps
|
8
|
+
#
|
9
|
+
# BIN HELP
|
10
|
+
# pagy -h
|
11
|
+
#
|
12
|
+
# DEV USAGE
|
13
|
+
# pagy clone keynav
|
14
|
+
# pagy ./keynav.ru
|
15
|
+
#
|
16
|
+
# URL
|
17
|
+
# http://127.0.0.1:8000
|
18
|
+
|
19
|
+
VERSION = '43.0.0.rc1'
|
20
|
+
|
21
|
+
if VERSION != Pagy::VERSION
|
22
|
+
Warning.warn("\n>>> WARNING! '#{File.basename(__FILE__)}-#{VERSION}' running with 'pagy-#{Pagy::VERSION}'! <<< \n\n")
|
23
|
+
end
|
24
|
+
|
25
|
+
# Bundle
|
26
|
+
require 'bundler/inline'
|
27
|
+
gemfile(!Pagy::ROOT.join('pagy.gemspec').exist?) do
|
28
|
+
source 'https://rubygems.org'
|
29
|
+
gem 'activerecord'
|
30
|
+
gem 'puma'
|
31
|
+
gem 'sinatra'
|
32
|
+
gem 'sqlite3'
|
33
|
+
end
|
34
|
+
|
35
|
+
# Sinatra setup
|
36
|
+
require 'sinatra/base'
|
37
|
+
# Sinatra application
|
38
|
+
class PagyKeynav < Sinatra::Base
|
39
|
+
include Pagy::Method
|
40
|
+
|
41
|
+
get('/javascripts/:file') do
|
42
|
+
format = params[:file].split('.').last
|
43
|
+
if format == 'js'
|
44
|
+
content_type 'application/javascript'
|
45
|
+
elsif format == 'map'
|
46
|
+
content_type 'application/json'
|
47
|
+
end
|
48
|
+
send_file Pagy::ROOT.join('javascripts', params[:file])
|
49
|
+
end
|
50
|
+
|
51
|
+
# Root route/action
|
52
|
+
get '/' do
|
53
|
+
Time.zone = 'UTC'
|
54
|
+
|
55
|
+
@order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
|
56
|
+
@pagy, @pets = pagy(:keynav_js, Pet.order(@order), limit: 4, client_max_limit: 100)
|
57
|
+
@ids = @pets.pluck(:id)
|
58
|
+
erb :main
|
59
|
+
end
|
60
|
+
|
61
|
+
helpers do
|
62
|
+
def order_symbol(dir)
|
63
|
+
{ asc: '↗', desc: '↘' }[dir]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Views
|
68
|
+
template :layout do
|
69
|
+
<<~ERB
|
70
|
+
<!DOCTYPE html>
|
71
|
+
<html lang="en">
|
72
|
+
<html>
|
73
|
+
<head>
|
74
|
+
<title>Pagy Keynav App</title>
|
75
|
+
<script src="javascripts/pagy.js"></script>
|
76
|
+
<script>
|
77
|
+
window.addEventListener("load", Pagy.init);
|
78
|
+
</script>
|
79
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
80
|
+
<style type="text/css">
|
81
|
+
@media screen { html, body {
|
82
|
+
font-size: 1rem;
|
83
|
+
line-height: 1.2s;
|
84
|
+
padding: 0;
|
85
|
+
margin: 0;
|
86
|
+
} }
|
87
|
+
body {
|
88
|
+
background: white !important;
|
89
|
+
margin: 0 !important;
|
90
|
+
font-family: sans-serif !important;
|
91
|
+
}
|
92
|
+
.main-content {
|
93
|
+
padding: 1rem 1.5rem 2rem !important;
|
94
|
+
}
|
95
|
+
.pagy {
|
96
|
+
padding: .5em;
|
97
|
+
margin: .3em 0;
|
98
|
+
width: fit-content;
|
99
|
+
box-shadow: 5px 5px 10px 0px rgba(0,0,0,0.2);
|
100
|
+
}
|
101
|
+
|
102
|
+
|
103
|
+
<%= Pagy::ROOT.join('stylesheets/pagy.css').read %>
|
104
|
+
</style>
|
105
|
+
</head>
|
106
|
+
<body>
|
107
|
+
<%= yield %>
|
108
|
+
</body>
|
109
|
+
</html>
|
110
|
+
ERB
|
111
|
+
end
|
112
|
+
|
113
|
+
template :main do
|
114
|
+
<<~ERB
|
115
|
+
<div class="main-content">
|
116
|
+
<h1>Pagy Keynav App</h1>
|
117
|
+
<p>Self-contained, standalone app usable to easily reproduce any Keynav related pagy issue
|
118
|
+
with ActiveRecord sets.</p>
|
119
|
+
|
120
|
+
<p>Notice that Keynav works also with Sequel sets.</p>
|
121
|
+
|
122
|
+
<h2>Versions</h2>
|
123
|
+
<ul>
|
124
|
+
<li>Ruby: <%= RUBY_VERSION %></li>
|
125
|
+
<li>Rack: <%= Rack::RELEASE %></li>
|
126
|
+
<li>Sinatra: <%= Sinatra::VERSION %></li>
|
127
|
+
<li>Pagy: <%= Pagy::VERSION %></li>
|
128
|
+
</ul>
|
129
|
+
|
130
|
+
<h3>Collection</h3>
|
131
|
+
<p id="records">@ids: <%= @ids.join(',') %></p>
|
132
|
+
<div class="collection">
|
133
|
+
<table border="1" style="border-collapse: collapse; border-spacing: 0; padding: 0.2rem;">
|
134
|
+
<tr>
|
135
|
+
<th scope="col">animal <%= order_symbol(@order[:animal]) %></th>
|
136
|
+
<th scope="col">name <%= order_symbol(@order[:name]) %></th>
|
137
|
+
<th scope="col">birthdate <%= order_symbol(@order[:birthdate]) %></th>
|
138
|
+
<th scope="col">id <%= order_symbol(@order[:id]) %></th>
|
139
|
+
</tr>
|
140
|
+
<% @pets.each do |pet| %>
|
141
|
+
<tr>
|
142
|
+
<td><%= pet.animal %></td>
|
143
|
+
<td><%= pet.name %></td>
|
144
|
+
<td><%= pet.birthdate %></td>
|
145
|
+
<td><%= pet.id %></td>
|
146
|
+
</tr>
|
147
|
+
<% end %>
|
148
|
+
</table>
|
149
|
+
</div>
|
150
|
+
|
151
|
+
<h4>@pagy.series_nav</h4>
|
152
|
+
<%= @pagy.series_nav(id: 'series-nav',
|
153
|
+
aria_label: 'Pages (nav)') %>
|
154
|
+
|
155
|
+
<h4>@pagy.series_nav_js (responsive)</h4>
|
156
|
+
<%= @pagy.series_nav_js(id: 'series-nav-js-responsive',
|
157
|
+
aria_label: 'Pages (nav_js_responsive)',
|
158
|
+
steps: { 0 => 5, 500 => 7, 750 => 9, 1000 => 11 }) %>
|
159
|
+
<h4>@pagy.input_nav_js</h4>
|
160
|
+
<%= @pagy.input_nav_js(id: 'input-nav-js',
|
161
|
+
aria_label: 'Pages (input_nav_js)') %>
|
162
|
+
|
163
|
+
<h4>@pagy.info_tag</h4>
|
164
|
+
<%= @pagy.info_tag(id: 'pagy-info') %>
|
165
|
+
</div>
|
166
|
+
ERB
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
# ActiveRecord setup
|
171
|
+
require 'active_record'
|
172
|
+
|
173
|
+
# Match the microsecods with the strings stored into the time columns of SQLite
|
174
|
+
# ActiveSupport::JSON::Encoding.time_precision = 6
|
175
|
+
|
176
|
+
# Log
|
177
|
+
output = ENV['APP_ENV'].equal?('showcase') ? IO::NULL : $stdout
|
178
|
+
ActiveRecord::Base.logger = Logger.new(output)
|
179
|
+
# SQLite DB files
|
180
|
+
dir = ENV['APP_ENV'].equal?('development') ? '.' : Dir.pwd # app dir in dev or pwd otherwise
|
181
|
+
abort "ERROR: Cannot create DB files: the directory #{dir.inspect} is not writable." \
|
182
|
+
unless File.writable?(dir)
|
183
|
+
# Connection
|
184
|
+
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: "#{dir}/tmp/pagy-keyset-ar.sqlite3")
|
185
|
+
# Schema
|
186
|
+
ActiveRecord::Schema.define do
|
187
|
+
create_table :pets, force: true do |t|
|
188
|
+
t.string :animal
|
189
|
+
t.string :name
|
190
|
+
t.date :birthdate
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
# Models
|
195
|
+
class Pet < ActiveRecord::Base; end
|
196
|
+
|
197
|
+
data = <<~DATA
|
198
|
+
Luna | dog | 2018-03-10
|
199
|
+
Coco | cat | 2019-05-15
|
200
|
+
Dodo | dog | 2020-06-25
|
201
|
+
Wiki | bird | 2018-03-12
|
202
|
+
Baby | rabbit | 2020-01-13
|
203
|
+
Neki | horse | 2021-07-20
|
204
|
+
Tino | donkey | 2019-06-18
|
205
|
+
Plot | cat | 2022-09-21
|
206
|
+
Riki | cat | 2018-09-14
|
207
|
+
Susi | horse | 2018-10-26
|
208
|
+
Coco | pig | 2020-08-29
|
209
|
+
Momo | bird | 2023-08-25
|
210
|
+
Lili | cat | 2021-07-22
|
211
|
+
Beli | pig | 2020-07-26
|
212
|
+
Rocky | bird | 2022-08-19
|
213
|
+
Vyvy | dog | 2018-05-16
|
214
|
+
Susi | horse | 2024-01-25
|
215
|
+
Ella | cat | 2020-02-20
|
216
|
+
Rocky | dog | 2019-09-19
|
217
|
+
Juni | rabbit | 2020-08-24
|
218
|
+
Coco | bird | 2021-03-17
|
219
|
+
Susi | dog | 2021-07-28
|
220
|
+
Luna | horse | 2023-05-14
|
221
|
+
Gigi | pig | 2022-05-19
|
222
|
+
Coco | cat | 2020-02-20
|
223
|
+
Nino | donkey | 2019-06-17
|
224
|
+
Luna | cat | 2022-02-09
|
225
|
+
Popi | dog | 2020-09-26
|
226
|
+
Lili | pig | 2022-06-18
|
227
|
+
Mina | horse | 2021-04-21
|
228
|
+
Susi | rabbit | 2023-05-18
|
229
|
+
Toni | donkey | 2018-06-22
|
230
|
+
Rocky | horse | 2019-09-28
|
231
|
+
Lili | cat | 2019-03-18
|
232
|
+
Roby | cat | 2022-06-19
|
233
|
+
Anto | horse | 2022-08-18
|
234
|
+
Susi | pig | 2021-04-21
|
235
|
+
Boly | bird | 2020-03-29
|
236
|
+
Sky | cat | 2023-07-19
|
237
|
+
Lili | dog | 2020-01-28
|
238
|
+
Fami | snake | 2023-04-27
|
239
|
+
Lopi | pig | 2019-06-19
|
240
|
+
Rocky | snake | 2022-03-13
|
241
|
+
Denis | dog | 2022-06-19
|
242
|
+
Maca | cat | 2022-06-19
|
243
|
+
Luna | dog | 2022-08-15
|
244
|
+
Jeme | horse | 2019-08-08
|
245
|
+
Sary | bird | 2023-04-29
|
246
|
+
Rocky | bird | 2023-05-14
|
247
|
+
Coco | dog | 2023-05-27
|
248
|
+
DATA
|
249
|
+
|
250
|
+
# DB seed
|
251
|
+
pets = []
|
252
|
+
data.each_line(chomp: true) do |pet|
|
253
|
+
name, animal, birthdate = pet.split('|').map(&:strip)
|
254
|
+
pets << { name:, animal:, birthdate: }
|
255
|
+
end
|
256
|
+
Pet.insert_all(pets)
|
257
|
+
|
258
|
+
run PagyKeynav
|
@@ -1,28 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# DESCRIPTION
|
4
|
-
# Showcase the
|
4
|
+
# Showcase the Keyset pagination (ActiveRecord example)
|
5
5
|
#
|
6
6
|
# DOC
|
7
|
-
# https://ddnexus.github.io/pagy/playground/#
|
7
|
+
# https://ddnexus.github.io/pagy/playground/#keyset-apps
|
8
8
|
#
|
9
9
|
# BIN HELP
|
10
|
-
#
|
10
|
+
# pagy -h
|
11
11
|
#
|
12
12
|
# DEV USAGE
|
13
|
-
#
|
14
|
-
#
|
13
|
+
# pagy clone keyset
|
14
|
+
# pagy ./keyset.ru
|
15
15
|
#
|
16
16
|
# URL
|
17
|
-
# http://
|
17
|
+
# http://127.0.0.1:8000
|
18
18
|
|
19
|
-
VERSION = '
|
19
|
+
VERSION = '43.0.0.rc1'
|
20
|
+
|
21
|
+
if VERSION != Pagy::VERSION
|
22
|
+
Warning.warn("\n>>> WARNING! '#{File.basename(__FILE__)}-#{VERSION}' running with 'pagy-#{Pagy::VERSION}'! <<< \n\n")
|
23
|
+
end
|
20
24
|
|
21
25
|
# Bundle
|
22
26
|
require 'bundler/inline'
|
23
|
-
|
24
|
-
Bundler.configure
|
25
|
-
gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
|
27
|
+
gemfile(!Pagy::ROOT.join('pagy.gemspec').exist?) do
|
26
28
|
source 'https://rubygems.org'
|
27
29
|
gem 'activerecord'
|
28
30
|
gem 'puma'
|
@@ -30,31 +32,23 @@ gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
|
|
30
32
|
gem 'sqlite3'
|
31
33
|
end
|
32
34
|
|
33
|
-
# Pagy initializer
|
34
|
-
require 'pagy/extras/limit'
|
35
|
-
require 'pagy/extras/keyset'
|
36
|
-
require 'pagy/extras/pagy'
|
37
|
-
Pagy::DEFAULT[:limit] = 10
|
38
|
-
Pagy::DEFAULT.freeze
|
39
|
-
|
40
35
|
# Sinatra setup
|
41
36
|
require 'sinatra/base'
|
42
37
|
# Sinatra application
|
43
38
|
class PagyKeyset < Sinatra::Base
|
44
|
-
include Pagy::
|
39
|
+
include Pagy::Method
|
45
40
|
|
46
41
|
# Root route/action
|
47
42
|
get '/' do
|
48
43
|
Time.zone = 'UTC'
|
49
44
|
|
50
45
|
@order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
|
51
|
-
@pagy, @pets =
|
46
|
+
@pagy, @pets = pagy(:keyset, Pet.order(@order), limit: 10, client_max_limit: 100)
|
47
|
+
# response.headers.merge!(@pagy.headers_hash)
|
52
48
|
erb :main
|
53
49
|
end
|
54
50
|
|
55
51
|
helpers do
|
56
|
-
include Pagy::Frontend
|
57
|
-
|
58
52
|
def order_symbol(dir)
|
59
53
|
{ asc: '↗', desc: '↘' }[dir]
|
60
54
|
end
|
@@ -81,11 +75,11 @@ class PagyKeyset < Sinatra::Base
|
|
81
75
|
margin: 0 !important;
|
82
76
|
font-family: sans-serif !important;
|
83
77
|
}
|
84
|
-
.content {
|
78
|
+
.main-content {
|
85
79
|
padding: 1rem 1.5rem 2rem !important;
|
86
80
|
}
|
87
81
|
|
88
|
-
<%= Pagy.
|
82
|
+
<%= Pagy::ROOT.join('stylesheets/pagy.css').read %>
|
89
83
|
</style>
|
90
84
|
</head>
|
91
85
|
<body>
|
@@ -97,10 +91,10 @@ class PagyKeyset < Sinatra::Base
|
|
97
91
|
|
98
92
|
template :main do
|
99
93
|
<<~ERB
|
100
|
-
<div class="content">
|
94
|
+
<div class="main-content">
|
101
95
|
<h1>Pagy Keyset App</h1>
|
102
|
-
<p>Self-contained, standalone app usable to easily reproduce any
|
103
|
-
|
96
|
+
<p>Self-contained, standalone app usable to easily reproduce any Keyset related pagy issue with ActiveRecord sets.</p>
|
97
|
+
|
104
98
|
<h2>Versions</h2>
|
105
99
|
<ul>
|
106
100
|
<li>Ruby: <%= RUBY_VERSION %></li>
|
@@ -111,12 +105,12 @@ class PagyKeyset < Sinatra::Base
|
|
111
105
|
|
112
106
|
<h3>Collection</h3>
|
113
107
|
<div id="records" class="collection">
|
114
|
-
<table border="1"
|
108
|
+
<table border="1" style="border-collapse: collapse; border-spacing: 0; padding: 0.2rem;">
|
115
109
|
<tr>
|
116
|
-
<th>animal <%= order_symbol(@order[:animal]) %></th>
|
117
|
-
<th>name <%= order_symbol(@order[:name]) %></th>
|
118
|
-
<th>birthdate <%= order_symbol(@order[:birthdate]) %></th>
|
119
|
-
<th>id <%= order_symbol(@order[:id]) %></th>
|
110
|
+
<th scope="col">animal <%= order_symbol(@order[:animal]) %></th>
|
111
|
+
<th scope="col">name <%= order_symbol(@order[:name]) %></th>
|
112
|
+
<th scope="col">birthdate <%= order_symbol(@order[:birthdate]) %></th>
|
113
|
+
<th scope="col">id <%= order_symbol(@order[:id]) %></th>
|
120
114
|
</tr>
|
121
115
|
<% @pets.each do |pet| %>
|
122
116
|
<tr>
|
@@ -130,7 +124,7 @@ class PagyKeyset < Sinatra::Base
|
|
130
124
|
</div>
|
131
125
|
<p>
|
132
126
|
<nav class="pagy" id="next" aria-label="Pagy next">
|
133
|
-
<%=
|
127
|
+
<%= @pagy.next_tag(text: 'Next page >') %>
|
134
128
|
</nav>
|
135
129
|
</div>
|
136
130
|
ERB
|
@@ -1,28 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# DESCRIPTION
|
4
|
-
# Showcase the
|
4
|
+
# Showcase the Keyset pagination (Sequel example)
|
5
5
|
#
|
6
6
|
# DOC
|
7
|
-
# https://ddnexus.github.io/pagy/playground/#
|
7
|
+
# https://ddnexus.github.io/pagy/playground/#keyset-apps
|
8
8
|
#
|
9
9
|
# BIN HELP
|
10
|
-
#
|
10
|
+
# pagy -h
|
11
11
|
#
|
12
12
|
# DEV USAGE
|
13
|
-
#
|
14
|
-
#
|
13
|
+
# pagy clone keyset_sequel
|
14
|
+
# pagy ./keyset_sequel.ru
|
15
15
|
#
|
16
16
|
# URL
|
17
|
-
# http://
|
17
|
+
# http://127.0.0.1:8000
|
18
18
|
|
19
|
-
VERSION = '
|
19
|
+
VERSION = '43.0.0.rc1'
|
20
|
+
|
21
|
+
if VERSION != Pagy::VERSION
|
22
|
+
Warning.warn("\n>>> WARNING! '#{File.basename(__FILE__)}-#{VERSION}' running with 'pagy-#{Pagy::VERSION}'! <<< \n\n")
|
23
|
+
end
|
20
24
|
|
21
25
|
# Bundle
|
22
26
|
require 'bundler/inline'
|
23
|
-
|
24
|
-
Bundler.configure
|
25
|
-
gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
|
27
|
+
gemfile(!Pagy::ROOT.join('pagy.gemspec').exist?) do
|
26
28
|
source 'https://rubygems.org'
|
27
29
|
gem 'puma'
|
28
30
|
gem 'sequel'
|
@@ -30,30 +32,22 @@ gemfile(ENV['PAGY_INSTALL_BUNDLE'] == 'true') do
|
|
30
32
|
gem 'sqlite3'
|
31
33
|
end
|
32
34
|
|
33
|
-
# Pagy initializer
|
34
|
-
require 'pagy/extras/limit'
|
35
|
-
require 'pagy/extras/keyset'
|
36
|
-
require 'pagy/extras/pagy'
|
37
|
-
Pagy::DEFAULT[:limit] = 10
|
38
|
-
Pagy::DEFAULT.freeze
|
39
|
-
|
40
35
|
# Sinatra setup
|
41
36
|
require 'sinatra/base'
|
42
37
|
require 'logger'
|
43
38
|
# Sinatra application
|
44
|
-
class
|
45
|
-
include Pagy::
|
39
|
+
class PagyKeysetSequel < Sinatra::Base
|
40
|
+
include Pagy::Method
|
46
41
|
|
47
42
|
# Root route/action
|
48
43
|
get '/' do
|
49
44
|
@order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
|
50
|
-
@pagy, @pets =
|
45
|
+
@pagy, @pets = pagy(:keyset, Pet.order(:animal, :name, Sequel.desc(:birthdate), :id),
|
46
|
+
limit: 10, client_max_limit: 100)
|
51
47
|
erb :main
|
52
48
|
end
|
53
49
|
|
54
50
|
helpers do
|
55
|
-
include Pagy::Frontend
|
56
|
-
|
57
51
|
def order_symbol(dir)
|
58
52
|
{ asc: '↗', desc: '↘' }[dir]
|
59
53
|
end
|
@@ -80,11 +74,11 @@ class PagyKeyset < Sinatra::Base
|
|
80
74
|
margin: 0 !important;
|
81
75
|
font-family: sans-serif !important;
|
82
76
|
}
|
83
|
-
.content {
|
77
|
+
.main-content {
|
84
78
|
padding: 1rem 1.5rem 2rem !important;
|
85
79
|
}
|
86
80
|
|
87
|
-
<%= Pagy.
|
81
|
+
<%= Pagy::ROOT.join('stylesheets/pagy.css').read %>
|
88
82
|
</style>
|
89
83
|
</head>
|
90
84
|
<body>
|
@@ -96,10 +90,10 @@ class PagyKeyset < Sinatra::Base
|
|
96
90
|
|
97
91
|
template :main do
|
98
92
|
<<~ERB
|
99
|
-
<div class="content">
|
93
|
+
<div class="main-content">
|
100
94
|
<h1>Pagy Keyset App</h1>
|
101
|
-
<p>Self-contained, standalone app usable to easily reproduce any
|
102
|
-
|
95
|
+
<p>Self-contained, standalone app usable to easily reproduce any Keyset related pagy issue with Sequel sets.</p>
|
96
|
+
|
103
97
|
<h2>Versions</h2>
|
104
98
|
<ul>
|
105
99
|
<li>Ruby: <%= RUBY_VERSION %></li>
|
@@ -129,7 +123,7 @@ class PagyKeyset < Sinatra::Base
|
|
129
123
|
</div>
|
130
124
|
<p>
|
131
125
|
<nav class="pagy" id="next" aria-label="Pagy next">
|
132
|
-
<%=
|
126
|
+
<%= @pagy.next_tag(text: 'Next page >') %>
|
133
127
|
</nav>
|
134
128
|
</div>
|
135
129
|
ERB
|
@@ -217,4 +211,4 @@ data.each_line(chomp: true) do |pet|
|
|
217
211
|
dataset.insert(name:, animal:, birthdate:)
|
218
212
|
end
|
219
213
|
|
220
|
-
run
|
214
|
+
run PagyKeysetSequel
|