pagy 9.3.3 → 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/LICENSE.txt +1 -1
- 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} +27 -32
- data/apps/{keyset_s.ru → keyset_sequel.ru} +24 -29
- data/apps/rails.ru +51 -48
- data/apps/repro.ru +46 -43
- data/bin/pagy +22 -23
- 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 +12 -9
- 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 +114 -56
- 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 -86
- 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 -166
- data/lib/pagy/keyset/active_record.rb +0 -38
- data/lib/pagy/keyset/sequel.rb +0 -51
- data/lib/pagy/keyset.rb +0 -118
- data/lib/pagy/shared_methods.rb +0 -26
- data/lib/pagy/url_helpers.rb +0 -26
- 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,30 +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
|
40
|
+
|
45
41
|
# Root route/action
|
46
42
|
get '/' do
|
47
43
|
Time.zone = 'UTC'
|
48
44
|
|
49
45
|
@order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
|
50
|
-
@pagy, @pets =
|
46
|
+
@pagy, @pets = pagy(:keyset, Pet.order(@order), limit: 10, client_max_limit: 100)
|
47
|
+
# response.headers.merge!(@pagy.headers_hash)
|
51
48
|
erb :main
|
52
49
|
end
|
53
50
|
|
54
51
|
helpers do
|
55
|
-
include Pagy::Frontend
|
56
|
-
|
57
52
|
def order_symbol(dir)
|
58
53
|
{ asc: '↗', desc: '↘' }[dir]
|
59
54
|
end
|
@@ -80,11 +75,11 @@ class PagyKeyset < Sinatra::Base
|
|
80
75
|
margin: 0 !important;
|
81
76
|
font-family: sans-serif !important;
|
82
77
|
}
|
83
|
-
.content {
|
78
|
+
.main-content {
|
84
79
|
padding: 1rem 1.5rem 2rem !important;
|
85
80
|
}
|
86
81
|
|
87
|
-
<%= Pagy.
|
82
|
+
<%= Pagy::ROOT.join('stylesheets/pagy.css').read %>
|
88
83
|
</style>
|
89
84
|
</head>
|
90
85
|
<body>
|
@@ -96,10 +91,10 @@ class PagyKeyset < Sinatra::Base
|
|
96
91
|
|
97
92
|
template :main do
|
98
93
|
<<~ERB
|
99
|
-
<div class="content">
|
94
|
+
<div class="main-content">
|
100
95
|
<h1>Pagy Keyset App</h1>
|
101
|
-
<p>Self-contained, standalone app usable to easily reproduce any
|
102
|
-
|
96
|
+
<p>Self-contained, standalone app usable to easily reproduce any Keyset related pagy issue with ActiveRecord sets.</p>
|
97
|
+
|
103
98
|
<h2>Versions</h2>
|
104
99
|
<ul>
|
105
100
|
<li>Ruby: <%= RUBY_VERSION %></li>
|
@@ -110,12 +105,12 @@ class PagyKeyset < Sinatra::Base
|
|
110
105
|
|
111
106
|
<h3>Collection</h3>
|
112
107
|
<div id="records" class="collection">
|
113
|
-
<table border="1"
|
108
|
+
<table border="1" style="border-collapse: collapse; border-spacing: 0; padding: 0.2rem;">
|
114
109
|
<tr>
|
115
|
-
<th>animal <%= order_symbol(@order[:animal]) %></th>
|
116
|
-
<th>name <%= order_symbol(@order[:name]) %></th>
|
117
|
-
<th>birthdate <%= order_symbol(@order[:birthdate]) %></th>
|
118
|
-
<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>
|
119
114
|
</tr>
|
120
115
|
<% @pets.each do |pet| %>
|
121
116
|
<tr>
|
@@ -129,7 +124,7 @@ class PagyKeyset < Sinatra::Base
|
|
129
124
|
</div>
|
130
125
|
<p>
|
131
126
|
<nav class="pagy" id="next" aria-label="Pagy next">
|
132
|
-
<%=
|
127
|
+
<%= @pagy.next_tag(text: 'Next page >') %>
|
133
128
|
</nav>
|
134
129
|
</div>
|
135
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,29 +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
|
41
|
+
|
46
42
|
# Root route/action
|
47
43
|
get '/' do
|
48
44
|
@order = { animal: :asc, name: :asc, birthdate: :desc, id: :asc }
|
49
|
-
@pagy, @pets =
|
45
|
+
@pagy, @pets = pagy(:keyset, Pet.order(:animal, :name, Sequel.desc(:birthdate), :id),
|
46
|
+
limit: 10, client_max_limit: 100)
|
50
47
|
erb :main
|
51
48
|
end
|
52
49
|
|
53
50
|
helpers do
|
54
|
-
include Pagy::Frontend
|
55
|
-
|
56
51
|
def order_symbol(dir)
|
57
52
|
{ asc: '↗', desc: '↘' }[dir]
|
58
53
|
end
|
@@ -79,11 +74,11 @@ class PagyKeyset < Sinatra::Base
|
|
79
74
|
margin: 0 !important;
|
80
75
|
font-family: sans-serif !important;
|
81
76
|
}
|
82
|
-
.content {
|
77
|
+
.main-content {
|
83
78
|
padding: 1rem 1.5rem 2rem !important;
|
84
79
|
}
|
85
80
|
|
86
|
-
<%= Pagy.
|
81
|
+
<%= Pagy::ROOT.join('stylesheets/pagy.css').read %>
|
87
82
|
</style>
|
88
83
|
</head>
|
89
84
|
<body>
|
@@ -95,10 +90,10 @@ class PagyKeyset < Sinatra::Base
|
|
95
90
|
|
96
91
|
template :main do
|
97
92
|
<<~ERB
|
98
|
-
<div class="content">
|
93
|
+
<div class="main-content">
|
99
94
|
<h1>Pagy Keyset App</h1>
|
100
|
-
<p>Self-contained, standalone app usable to easily reproduce any
|
101
|
-
|
95
|
+
<p>Self-contained, standalone app usable to easily reproduce any Keyset related pagy issue with Sequel sets.</p>
|
96
|
+
|
102
97
|
<h2>Versions</h2>
|
103
98
|
<ul>
|
104
99
|
<li>Ruby: <%= RUBY_VERSION %></li>
|
@@ -128,7 +123,7 @@ class PagyKeyset < Sinatra::Base
|
|
128
123
|
</div>
|
129
124
|
<p>
|
130
125
|
<nav class="pagy" id="next" aria-label="Pagy next">
|
131
|
-
<%=
|
126
|
+
<%= @pagy.next_tag(text: 'Next page >') %>
|
132
127
|
</nav>
|
133
128
|
</div>
|
134
129
|
ERB
|
@@ -216,4 +211,4 @@ data.each_line(chomp: true) do |pet|
|
|
216
211
|
dataset.insert(name:, animal:, birthdate:)
|
217
212
|
end
|
218
213
|
|
219
|
-
run
|
214
|
+
run PagyKeysetSequel
|