zutils 3.0.7 → 4.0.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.
@@ -1,93 +1,85 @@
1
1
  <% exceptions ||= ['created_at', 'updated_at', 'deleted_at'] %>
2
2
  <% sort_fields ||= [] %>
3
3
  <% sort_all ||= false %>
4
- <% nested_resource ||= false %>
5
4
  <% excluded_columns ||= [] %>
6
5
  <% show_columns ||= [] %>
7
6
  <% additional_columns ||= [] %>
8
7
  <% additional_actions ||= [] %>
9
- <% card_color ||= 'danger' %>
10
- <% table_class ||= 'bootstrap-table' %>
8
+ <% card_color ||= 'primary' %>
9
+ <% card_class ||= "card-#{card_color}" %>
10
+ <% card_margin ||= '' %>
11
+ <% table_class ||= 'table table-striped align-middle bootstrap-table' %>
11
12
  <% hide ||= %w[new back delete_right] %>
12
- <% size ||= "xs" %>
13
+ <% size ||= "sm" %>
13
14
  <% controller ||= "bootstrap-table" %>
14
15
  <% hide_actions ||= false %>
16
+ <% show_new ||= !hide.include?('header_new') %>
15
17
  <% pagy ||= @pagy %>
16
- <div class="card card-outline card-<%= card_color %>" data-controller="<%= controller %>">
18
+
19
+ <% if show_columns.empty? %>
20
+ <% show_columns = list.klass.column_names - exceptions - excluded_columns + additional_columns %>
21
+ <% end %>
22
+
23
+ <div
24
+ class="card card-outline shadow-sm <%= card_class %> <%= card_margin %>"
25
+ data-controller="<%= controller %>"
26
+ >
17
27
  <% unless hide.include? 'header' %>
18
- <div class="card-header with-border">
19
- <div class="row">
20
- <div class="col-md-6">
21
- <h3 class="card-title">
28
+ <div class="card-header border-0 bg-body-tertiary">
29
+ <div class="d-flex justify-content-between align-items-start flex-wrap gap-2">
30
+ <div>
31
+ <h5 class="mb-1">
22
32
  <strong>
23
33
  <i class="<%= list.klass.icon %>"></i>
24
- Listagem de
25
- <%= list.klass.model_name.human.pluralize %>
34
+ Listagem de <%= list.klass.model_name.human.pluralize %>
26
35
  </strong>
27
- <% unless hide.include? "header_new" %>
28
- <%= link_to eval("new_#{list.klass.model_name.singular}_path"), class: "btn btn-xs btn-#{card_color}" do %>
29
- Cadastar <i class="fa fa-plus"></i>
30
- <% end %>
31
- <% end %>
32
- <% if block_given? %>
33
- <%= yield %>
34
- <% end %>
35
- <div class="text-muted text-xs">
36
- <% if defined? Kaminari %>
37
- <%= page_entries_info list, entry_name: '' %>
38
- <% end %>
39
- <% if pagy && defined?(Pagy) %>
40
- <%== pagy_info(pagy) %>
41
- <% end %>
42
- </div>
43
- </h3>
44
- </div>
45
- <div class="col-md-6">
46
- <div class="float-right">
47
- <% if defined? Kaminari %>
48
- <%= paginate list, window: 1 %>
36
+ </h5>
37
+
38
+ <div class="text-muted small">
39
+ <% if defined?(Kaminari) %>
40
+ <%= page_entries_info list, entry_name: '' %>
49
41
  <% end %>
50
42
  <% if pagy && defined?(Pagy) %>
51
- <% if defined? pagy_bootstrap_nav %>
52
- <%== pagy_bootstrap_nav(pagy) %>
53
- <% else %>
54
- <%== pagy_nav(pagy) %>
55
- <% end %>
43
+ <%== pagy_info pagy %>
56
44
  <% end %>
57
45
  </div>
58
46
  </div>
47
+
48
+ <div class="d-flex align-items-center gap-2 flex-wrap">
49
+ <% if block_given? %>
50
+ <%= yield %>
51
+ <% end %>
52
+
53
+ <% if show_new && !hide.include?('new') && can?(:new, list.klass) %>
54
+ <%= link_to eval("new_#{list.klass.model_name.singular}_path"),
55
+ class: "btn btn-sm btn-#{card_color}" do %>
56
+ <i class="fa fa-plus"></i>
57
+ <span class="d-none d-md-inline"> Cadastrar </span>
58
+ <% end %>
59
+ <% end %>
60
+ </div>
59
61
  </div>
60
62
  </div>
61
63
  <% end %>
62
- <%= render 'shared/list', list: list, exceptions: exceptions, excluded_columns: excluded_columns,
63
- additional_columns: additional_columns, sort_fields: sort_fields, sort_all: sort_all,
64
- additional_actions: additional_actions, hide_actions: hide_actions, table_class: table_class,
65
- show_columns: show_columns, hide: hide, size: size, card_color: card_color, controller: controller
66
- %>
67
- </div>
68
- <div class="row mb-2">
69
- <div class="col" >
70
- <div class="text-muted text-xs">
71
- <% if defined? Kaminari %>
72
- <%= page_entries_info list, entry_name: '' %>
73
- <% end %>
74
- <% if pagy && defined?(Pagy) %>
75
- <%== pagy_info(pagy) %>
76
- <% end %>
77
- </div>
78
- </div>
79
- <div class="col">
80
- <div class="float-right">
81
- <% if defined? Kaminari %>
82
- <%= paginate list, window: 1 %>
83
- <% end %>
84
- <% if pagy && defined?(Pagy) %>
85
- <% if defined? pagy_bootstrap_nav %>
86
- <%== pagy_bootstrap_nav(pagy) %>
87
- <% else %>
88
- <%== pagy_nav(pagy) %>
89
- <% end %>
90
- <% end %>
91
- </div>
64
+
65
+ <div class="card-body p-1">
66
+ <%= render 'shared/list',
67
+ list: list,
68
+ show_columns: show_columns,
69
+ exceptions: exceptions,
70
+ excluded_columns: excluded_columns,
71
+ additional_columns: additional_columns,
72
+ additional_actions: additional_actions,
73
+ sort_all: sort_all,
74
+ sort_fields: sort_fields,
75
+ hide: hide,
76
+ size: size,
77
+ card_color: card_color,
78
+ table_class: table_class,
79
+ hide_actions: hide_actions %>
92
80
  </div>
93
81
  </div>
82
+
83
+ <div class="my-3">
84
+ <%= render "shared/pagination", list: list, pagy: pagy %>
85
+ </div>
@@ -1,144 +1,164 @@
1
- <% exceptions ||= ['created_at', 'updated_at', 'deleted_at'] %>
2
- <% excluded_columns ||= [] %>
3
- <% additional_columns ||= [] %>
4
- <% additional_actions ||= [] %>
5
- <% sort_fields ||= [] %>
6
- <% sort_all ||= false %>
7
-
8
- <% card_color ||= 'primary' %>
9
- <% table_class ||= 'table table-striped bootstrap-table' %>
10
-
11
- <% show_columns ||= [] %>
12
-
13
- <% hide_actions ||= false %>
14
- <% hide ||= %w[new back delete_right] %>
15
- <% size ||= "xs" %>
16
-
17
- <% if show_columns.empty? %>
18
- <% show_columns = list.klass.column_names - exceptions - excluded_columns + additional_columns %>
19
- <% end %>
20
-
21
- <table class="<%= table_class %>">
22
- <thead>
23
- <tr>
24
- <% show_columns.each do |column| %>
25
-
26
- <% column_method = nil %>
27
- <% column_name = column %>
28
- <% column_align = ''%>
29
- <% if column.class == Hash %>
30
- <% column_name = column[:attribute] %>
31
- <% column_method = column[:method] %>
32
- <% column_align = column[:align] %>
33
- <% column_title = column[:title] %>
34
- <% end %>
35
-
36
- <% next if /_currency$/ =~ column_name %>
37
-
38
- <th data-field="<%= column_method || column_name %>" data-align="<%= column_align %>">
39
- <% if sort_all || sort_fields.include?(column_name) %>
40
- <% if column_name.include?('.') %>
41
- <% mname = column_name.split('.')[-2]&.camelize %>
42
- <% cname = column_name.split('.')[-1] %>
43
- <% model = Kernel.const_get(mname) %>
44
- <%= sort_link(@q, column_name.split('.').join('_'),
45
- column_title || "#{model.model_name.human} (#{model.human_attribute_name(cname)})")
46
- %>
47
- <% elsif /_id$/ =~ column_name %>
48
- <%= sort_link(@q, column_name, column_title || list.klass.human_attribute_name(column_name.split("_id")[0])) %>
49
- <% elsif /_cents$/ =~ column_name %>
50
- <%= sort_link(@q, column_name, column_title || list.klass.human_attribute_name(column_name.split("_cents")[0])) %>
51
- <% elsif /_currency$/ =~ column_name %>
52
- <!-- faz nada -->
53
- <% elsif column_name == 'id' %>
54
- <%= sort_link(@q, column_name, column_title || '#') %>
55
- <% else %>
56
- <%= sort_link(@q, column_name, column_title || list.klass.human_attribute_name(column_name)) %>
57
- <% end %>
58
- <% else %>
59
- <% if column_name.include?('.') %>
60
- <% s_name = column_title || column_method || column_name %>
61
- <%= "#{s_name.split('.')[-2]&.camelize} (#{s_name.split('.')[-1]})" %>
62
- <% elsif /_id$/ =~ column_name %>
63
- <%= column_title || list.klass.human_attribute_name(column_name.split("_id")[0]) %>
64
- <% elsif /_cents$/ =~ column_name %>
65
- <%= column_title || list.klass.human_attribute_name(column_name.split("_cents")[0]) %>
66
- <% elsif /_currency$/ =~ column_name %>
67
- <% elsif column_name == 'id' %>
68
- <%= column_title || "#" %>
69
- <% else %>
70
- <%= column_title || list.klass.human_attribute_name(column_name) %>
71
- <% end %>
72
- <% end %>
73
- </th>
74
- <% end %>
75
- <% unless hide_actions %>
76
- <th data-align="center">Ações</th>
77
- <% end %>
78
- </tr>
79
- </thead>
80
- <tbody>
81
- <% list.each do |object| %>
82
- <tr>
83
- <% show_columns.each do |column| %>
84
-
85
- <% column_method = nil %>
86
- <% column_name = column %>
87
- <% if column.class == Hash %>
88
- <% column_name = column[:attribute] %>
89
- <% column_method = column[:method] %>
90
- <% column_format = column[:format] %>
91
- <% end %>
92
-
93
- <% next if /_currency$/ =~ column_name %>
94
-
95
- <td>
96
- <% if column_name.include?('.') %>
97
- <% if column_method.nil? %>
98
- <% o = object %>
99
- <% column_name.split('.').each{|m| o = o.send(m) if o } %>
100
- <%= o %>
101
- <% else %>
102
- <%= object.send(column_method) %>
103
- <% end %>
104
- <% elsif object.send(column_name).class == Date or
105
- object.send(column_name).class == DateTime or
106
- object.send(column_name).class == ActiveSupport::TimeWithZone or
107
- object.send(column_name).class == Time %>
108
- <% if column_format %>
109
- <%= l(object.send(column_name), format: (column_format.is_a?(Symbol) ? column_format : column_format.to_sym)) %>
110
- <% else %>
111
- <%=l object.send(column_name) %>
112
- <% end %>
113
- <% elsif object.send(column_name).respond_to? 'attached?' %>
114
- <% if object.send(column_name).class == ActiveStorage::Attached::One %>
115
- <% if object.send(column_name).attached? %>
116
- <%= link_to rails_blob_path(object.send(column_name)), class: "btn btn-#{card_color} btn-xs", target: '_blank' do %>
117
- <i class="fa fa-file-o"></i> Arquivo
118
- <% end %>
119
- <% end %>
120
- <% end %>
121
- <% elsif /_id$/ =~ column_name && object.respond_to?(column_name.split('_id')[0]) %>
122
- <%= object.send(column_name.split("_id")[0])&.name %>
123
- <% elsif /_cents$/ =~ column_name %>
124
- <%= number_to_currency object.send(column_name.split("_cents")[0]) %>
125
- <% elsif /_currency$/ =~ column_name %>
126
- <!-- faz nada -->
127
- <% elsif column_name.include?(".") %>
128
- <%= eval("object.#{column_name}") %>
129
- <% elsif column_name == 'id' %>
130
- <%= link_to object.id, object %>
131
- <% else %>
132
- <%= object.send(column_method || column_name) %>
133
- <% end %>
134
- </td>
135
- <% end %>
136
- <% unless hide_actions %>
137
- <td>
138
- <%= render 'shared/btn_action_links', object: object, additional_actions: additional_actions, hide: hide, size: size %>
139
- </td>
140
- <% end %>
141
- </tr>
142
- <% end %>
143
- </tbody>
144
- </table>
1
+ <% exceptions ||= ['created_at', 'updated_at', 'deleted_at'] %>
2
+ <% excluded_columns ||= [] %>
3
+ <% additional_columns ||= [] %>
4
+ <% additional_actions ||= [] %>
5
+ <% sort_fields ||= [] %>
6
+ <% sort_all ||= false %>
7
+ <% card_color ||= 'primary' %>
8
+ <% table_class ||= 'table table-striped align-middle bootstrap-table' %>
9
+ <% show_columns ||= [] %>
10
+ <% hide_actions ||= false %>
11
+ <% hide ||= %i[new back] %>
12
+ <% size ||= "sm" %>
13
+
14
+ <% if show_columns.empty? %>
15
+ <% show_columns = list.klass.column_names - exceptions - excluded_columns + additional_columns %>
16
+ <% end %>
17
+
18
+ <table class="<%= table_class %>">
19
+ <thead>
20
+ <tr>
21
+ <% show_columns.each do |column| %>
22
+ <% column_method = nil %>
23
+ <% column_name = column %>
24
+ <% column_align = '' %>
25
+ <% column_title = nil %>
26
+
27
+ <% if column.class == Hash %>
28
+ <% column_name = column[:attribute] %>
29
+ <% column_method = column[:method] %>
30
+ <% column_align = column[:align] %>
31
+ <% column_title = column[:title] %>
32
+ <% end %>
33
+
34
+ <% next if /_currency$/ =~ column_name %>
35
+
36
+ <th
37
+ data-field="<%= column_method || column_name %>"
38
+ data-align="<%= column_align %>"
39
+ data-width="<%= 20 if column_name == 'id' %>"
40
+ >
41
+ <% if sort_all || sort_fields.include?(column_name) %>
42
+ <% if column_name.include?('.') %>
43
+ <% mname = column_name.split('.')[-2]&.camelize %>
44
+ <% cname = column_name.split('.')[-1] %>
45
+ <% model = Kernel.const_get(mname) %>
46
+ <%= sort_link(@q,
47
+ column_name.split('.').join('_'),
48
+ column_title || "#{model.model_name.human} (#{model.human_attribute_name(cname)})") %>
49
+ <% elsif /_id$/ =~ column_name %>
50
+ <%= sort_link(@q,
51
+ column_name,
52
+ column_title || list.klass.human_attribute_name(column_name.split("_id")[0])) %>
53
+ <% elsif /_cents$/ =~ column_name %>
54
+ <%= sort_link(@q,
55
+ column_name,
56
+ column_title || list.klass.human_attribute_name(column_name.split("_cents")[0])) %>
57
+ <% elsif column_name == 'id' %>
58
+ <div class="text-md-end">
59
+ <%= sort_link(@q, column_name, column_title || '#') %>
60
+ </div>
61
+ <% else %>
62
+ <%= sort_link(@q,
63
+ column_name,
64
+ column_title || list.klass.human_attribute_name(column_name)) %>
65
+ <% end %>
66
+ <% else %>
67
+ <% if column_name.include?('.') %>
68
+ <% s_name = column_title || column_method || column_name %>
69
+ <%= "#{s_name.split('.')[-2]&.camelize} (#{s_name.split('.')[-1]})" %>
70
+ <% elsif /_id$/ =~ column_name %>
71
+ <%= column_title || list.klass.human_attribute_name(column_name.split("_id")[0]) %>
72
+ <% elsif /_cents$/ =~ column_name %>
73
+ <%= column_title || list.klass.human_attribute_name(column_name.split("_cents")[0]) %>
74
+ <% elsif column_name == 'id' %>
75
+ <%= column_title || "#" %>
76
+ <% else %>
77
+ <%= column_title || list.klass.human_attribute_name(column_name) %>
78
+ <% end %>
79
+ <% end %>
80
+ </th>
81
+ <% end %>
82
+
83
+ <% unless hide_actions %>
84
+ <th data-width="100">
85
+ <div class="text-md-center">Ações</div>
86
+ </th>
87
+ <% end %>
88
+ </tr>
89
+ </thead>
90
+
91
+ <tbody>
92
+ <% list.each do |object| %>
93
+ <tr>
94
+ <% show_columns.each do |column| %>
95
+ <% column_method = nil %>
96
+ <% column_name = column %>
97
+ <% column_format = nil %>
98
+
99
+ <% if column.class == Hash %>
100
+ <% column_name = column[:attribute] %>
101
+ <% column_method = column[:method] %>
102
+ <% column_format = column[:format] %>
103
+ <% end %>
104
+
105
+ <% next if /_currency$/ =~ column_name %>
106
+
107
+ <td>
108
+ <% if column_name.include?('.') %>
109
+ <% if column_method.nil? %>
110
+ <% o = object %>
111
+ <% column_name.split('.').each{|m| o = o.send(m) if o } %>
112
+ <%= o %>
113
+ <% else %>
114
+ <%= object.send(column_method) %>
115
+ <% end %>
116
+ <% elsif object.send(column_name).is_a?(Date) ||
117
+ object.send(column_name).is_a?(Time) ||
118
+ object.send(column_name).is_a?(DateTime) ||
119
+ object.send(column_name).is_a?(ActiveSupport::TimeWithZone) %>
120
+ <% if column_format %>
121
+ <%= l(object.send(column_name), format: column_format.to_sym) %>
122
+ <% else %>
123
+ <%= l object.send(column_name) %>
124
+ <% end %>
125
+ <% elsif object.send(column_name).respond_to?('attached?') %>
126
+ <% if object.send(column_name).class == ActiveStorage::Attached::One %>
127
+ <% if object.send(column_name).attached? %>
128
+ <%= link_to rails_blob_path(object.send(column_name)),
129
+ class: "btn btn-outline-#{card_color} btn-sm",
130
+ target: '_blank' do %>
131
+ <i class="fa fa-file"></i>
132
+ <span class="d-none d-md-inline"> Arquivo </span>
133
+ <% end %>
134
+ <% end %>
135
+ <% end %>
136
+ <% elsif /_id$/ =~ column_name && object.respond_to?(column_name.split('_id')[0]) %>
137
+ <%= object.send(column_name.split("_id")[0])&.name %>
138
+ <% elsif /_cents$/ =~ column_name %>
139
+ <%= number_to_currency object.send(column_name.split("_cents")[0]) %>
140
+ <% elsif column_name == 'id' %>
141
+ <div class="text-md-end">
142
+ <%= link_to "##{object.id}", object, class: "fw-bold" %>
143
+ </div>
144
+ <% else %>
145
+ <%= object.send(column_method || column_name) %>
146
+ <% end %>
147
+ </td>
148
+ <% end %>
149
+
150
+ <% unless hide_actions %>
151
+ <td>
152
+ <div class="text-md-center">
153
+ <%= render 'shared/btn_action_links',
154
+ object: object,
155
+ additional_actions: additional_actions,
156
+ hide: hide,
157
+ size: size %>
158
+ </div>
159
+ </td>
160
+ <% end %>
161
+ </tr>
162
+ <% end %>
163
+ </tbody>
164
+ </table>
@@ -1,24 +1,26 @@
1
- <% partial ||= 'shared/fields' %>
2
- <% name ||= object.model_name.singular %>
3
-
4
- <div class="modal fade in <%= name %>-modal" id="modal-default">
5
- <div class="modal-dialog">
6
- <div class="modal-content">
7
- <div class="modal-header">
8
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
9
- <span aria-hidden="true">×</span></button>
10
- <h4 class="modal-title"><%=t "helpers.links.new" %> <%= object.model_name.human %></h4>
11
- </div>
12
- <%= simple_form_for object do |f| %>
13
- <div class="modal-body">
14
- <%= render partial, object: object, f: f %>
15
- </div>
16
- <div class="modal-footer">
17
- <%= f.submit class: "btn btn-primary" %>
18
- </div>
19
- <% end %>
20
- </div>
21
- <!-- /.modal-content -->
22
- </div>
23
- <!-- /.modal-dialog -->
24
- </div>
1
+ <% modal_id ||= 'modal-task' %>
2
+ <% modal_title ||= '' %>
3
+ <% modal_size ||= 'lg' %>
4
+
5
+ <div id="<%= modal_id %>" class="modal fade" role="dialog" aria-hidden="true">
6
+ <div class="modal-dialog modal-dialog-centered modal-<%= modal_size %>">
7
+ <div class="modal-content">
8
+ <div class="modal-header">
9
+ <h5 class="modal-title"><%= modal_title %></h5>
10
+
11
+ <button
12
+ type="button"
13
+ class="btn-close"
14
+ data-bs-dismiss="modal"
15
+ aria-label="Close"
16
+ ></button>
17
+ </div>
18
+
19
+ <div class="modal-body">
20
+ <% if block_given? %>
21
+ <%= yield %>
22
+ <% end %>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </div>
@@ -0,0 +1,90 @@
1
+ <% list ||= [] %>
2
+ <% pagy ||= nil %>
3
+
4
+ <% using_kaminari = defined?(Kaminari) %>
5
+ <% using_pagy = pagy && defined?(Pagy) %>
6
+
7
+ <% current_page = params[:page].presence || 1 %>
8
+
9
+ <% per_page =
10
+ params[:items].presence ||
11
+ (using_kaminari ? Kaminari.config.default_per_page :
12
+ using_pagy ? Pagy::DEFAULT[:limit] :
13
+ 25) %>
14
+
15
+ <% sizes ||= [5, 10, 25, 50, 100, 250, 500] %>
16
+
17
+ <div
18
+ class="
19
+ d-flex flex-column flex-md-row align-items-start justify-content-between
20
+ gap-2 mb-2
21
+ "
22
+ >
23
+ <div class="text-muted small mb-1 mb-md-0 text-nowrap">
24
+ <% if using_kaminari %>
25
+ <%= page_entries_info list, entry_name: '' %>
26
+ <% elsif using_pagy %>
27
+ <%== pagy_info pagy %>
28
+ <% end %>
29
+ </div>
30
+
31
+ <%= form_with method: :get, local: true, id: "pagination-form",
32
+ class: "w-100 w-sm-auto d-flex justify-content-center justify-content-md-end" do %>
33
+ <% request.query_parameters.except("page", "items").each do |key, value| %>
34
+ <% if value.is_a?(Array) %>
35
+ <% value.each do |v| %>
36
+ <%= hidden_field_tag "#{key}[]", v %>
37
+ <% end %>
38
+ <% elsif value.is_a?(Hash) %>
39
+ <% value.each do |k, v| %>
40
+ <% if v.is_a?(Array) %>
41
+ <% v.each do |vv| %>
42
+ <%= hidden_field_tag "#{key}[#{k}][]", vv %>
43
+ <% end %>
44
+ <% else %>
45
+ <%= hidden_field_tag "#{key}[#{k}]", v %>
46
+ <% end %>
47
+ <% end %>
48
+ <% else %>
49
+ <%= hidden_field_tag key, value %>
50
+ <% end %>
51
+ <% end %>
52
+
53
+ <div
54
+ class="
55
+ d-flex flex-column flex-md-row align-items-start
56
+ align-items-md-center gap-2
57
+ "
58
+ >
59
+ <div
60
+ class="
61
+ d-flex w-100 w-md-auto justify-content-between gap-2 order-2
62
+ order-md-1
63
+ "
64
+ >
65
+ <div class="d-flex align-items-center gap-1">
66
+ <div class="text-muted small">pag</div>
67
+ <%= number_field_tag :page, current_page, min: 1, class: "form-control", style: "width: 80px;" %>
68
+ </div>
69
+
70
+ <div class="d-flex align-items-center gap-1">
71
+ <%= select_tag :items,
72
+ options_for_select(sizes, per_page),
73
+ class: "form-select",
74
+ style: "width: 100px;",
75
+ onchange: "this.form.submit();" %>
76
+
77
+ <div class="text-muted small">p/pag</div>
78
+ </div>
79
+ </div>
80
+
81
+ <div class="mt-2 mt-md-0 order-1 order-md-2 align-self-center">
82
+ <% if using_kaminari %>
83
+ <%= paginate list, window: 1 %>
84
+ <% elsif using_pagy %>
85
+ <%== defined?(pagy_bootstrap_nav) ? pagy_bootstrap_nav(pagy) : pagy_nav(pagy) %>
86
+ <% end %>
87
+ </div>
88
+ </div>
89
+ <% end %>
90
+ </div>