trk_datatables 0.2.2 → 0.2.7
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/Gemfile.lock +1 -1
- data/README.md +89 -40
- data/lib/trk_datatables/active_record.rb +8 -5
- data/lib/trk_datatables/base.rb +23 -7
- data/lib/trk_datatables/base_helpers.rb +5 -1
- data/lib/trk_datatables/column_key_options.rb +9 -4
- data/lib/trk_datatables/neo4j.rb +15 -2
- data/lib/trk_datatables/render_html.rb +21 -2
- data/lib/trk_datatables/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25c48f4088f3f708eaa1dc7d464e0daaad342e57cdeca53c2d1a6b53cf317e6e
|
4
|
+
data.tar.gz: 3ab420703241cd84845e88890027840a48c70f203363e2799322837963d47e73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7244afc3f897a92c6ea63b5b21721398a70ba5882a19a5296e79396c87df287fc9d257aa5a6a1efe99162ae31f673c5bb1400d4aa457236e8068ad6aac2b6aa1
|
7
|
+
data.tar.gz: 4a9dd2fc25a1ad1be8f2ccab02409a7f0c00f38ba4dffe8d25eb0ebce308c29190e6043e955e352f17d12f4b432061a8baa763b53b1c8e6b4f8b9082d1c613d8
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -18,6 +18,10 @@ you can get something like
|
|
18
18
|
|
19
19
|

|
20
20
|
|
21
|
+
Currently supports:
|
22
|
+
* ActiveRecord
|
23
|
+
* Neo4j
|
24
|
+
|
21
25
|
## Table of Contents
|
22
26
|
<!--ts-->
|
23
27
|
* [Trk Datatables](#trk-datatables)
|
@@ -62,9 +66,10 @@ import 'bootstrap'
|
|
62
66
|
|
63
67
|
// our stuff
|
64
68
|
import 'stylesheet/application'
|
65
|
-
import 'turbolinks.load'
|
66
69
|
|
67
|
-
|
70
|
+
// attach jQuery so it is available for javascript included with asset pipeline
|
71
|
+
window.$ = window.jQuery = jQuery;
|
72
|
+
|
68
73
|
const trkDatatables = require('trk_datatables')
|
69
74
|
|
70
75
|
document.addEventListener('turbolinks:load', () => {
|
@@ -88,7 +93,11 @@ environment.plugins.append('Provide', new webpack.ProvidePlugin({
|
|
88
93
|
module.exports = environment
|
89
94
|
|
90
95
|
# app/views/layouts/application.html.erb
|
96
|
+
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
|
97
|
+
<%# we need stylesheet for production server, locally it could work without stylesheet_pack_tag even in production mode %>
|
91
98
|
<%= stylesheet_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
|
99
|
+
<%# we use jQuery from wepbacker so asset pipeline should be included later %>
|
100
|
+
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
|
92
101
|
```
|
93
102
|
|
94
103
|
Than add a gem and sample PostsDatatable
|
@@ -275,47 +284,32 @@ class PostsDatatable < TrkDatatables::ActiveRecord
|
|
275
284
|
end
|
276
285
|
```
|
277
286
|
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
class BaseTrkDatable < TrkDatatables::ActiveRecord
|
284
|
-
def predefined_ranges
|
285
|
-
# defaults are defined in https://github.com/trkin/trk_datatables/blob/master/lib/trk_datatables/base.rb
|
286
|
-
default_predefined_ranges
|
287
|
-
end
|
288
|
-
end
|
289
|
-
```
|
290
|
-
or you can enable for all `date` and `datetime columns` for specific datatable
|
291
|
-
by defining `predefined_ranges` on that datatable. You can disable for specific columns also
|
287
|
+
By default, predefined ranges are enabled. You can find source for
|
288
|
+
`predefined_date_ranges` and `predefined_datetime_ranges` in
|
289
|
+
[base.rb](https://github.com/trkin/trk_datatables/blob/master/lib/trk_datatables/base.rb)
|
290
|
+
You can overwrite them in BaseTrkDatable or your trk datatable class.
|
291
|
+
You can disable or enable for specific columns like in this example:
|
292
292
|
```
|
293
293
|
class PostsDatatable < TrkDatatables::ActiveRecord
|
294
|
-
def
|
294
|
+
def predefined_datetime_ranges
|
295
295
|
{
|
296
296
|
'Today': Time.zone.now.beginning_of_day..Time.zone.now.end_of_day,
|
297
297
|
'Yesterday': [Time.zone.now.beginning_of_day - 1.day, Time.zone.now.end_of_day - 1.day],
|
298
298
|
'This Month': Time.zone.today.beginning_of_month...Time.zone.now.end_of_day,
|
299
299
|
'Last Month': Time.zone.today.prev_month.beginning_of_month...Time.zone.today.prev_month.end_of_month.end_of_day,
|
300
300
|
'This Year': Time.zone.today.beginning_of_year...Time.zone.today.end_of_day,
|
301
|
-
|
301
|
+
}.transform_values do |range|
|
302
|
+
# datepicker expects format 2020-11-29 11:59:59
|
303
|
+
range.first.strftime('%F %T')..range.last.strftime('%F %T')
|
304
|
+
end
|
302
305
|
end
|
303
306
|
|
304
307
|
def columns
|
305
308
|
{
|
306
|
-
'posts.created_at': {}, # this column will have
|
307
|
-
'posts.published_on': { predefined_ranges: false }
|
308
|
-
|
309
|
-
|
310
|
-
```
|
311
|
-
or you can define for specific column
|
312
|
-
```
|
313
|
-
# app/datatables/posts_datatable.rb
|
314
|
-
class PostsDatatable < TrkDatatables::ActiveRecord
|
315
|
-
def columns
|
316
|
-
{
|
317
|
-
'posts.created_at': { predefined_ranges: { 'Today': Time.zone.now.beginning_of_day...Time.zone.now.end_of_day } },
|
318
|
-
}
|
309
|
+
'posts.created_at': {}, # this column will have predefined_datetime_ranges
|
310
|
+
'posts.published_on': { predefined_ranges: false },
|
311
|
+
'posts.updated_at': { predefined_ranges: { 'Today': Time.zone.now.beginning_of_day...Time.zone.now.end_of_day } },
|
312
|
+
}
|
319
313
|
end
|
320
314
|
end
|
321
315
|
```
|
@@ -408,13 +402,17 @@ generated based on other columns):
|
|
408
402
|
posts_count FROM "users" LEFT OUTER JOIN "posts" ON "posts"."user_id" =
|
409
403
|
"users"."id" GROUP BY users.id`
|
410
404
|
|
411
|
-
Since in SQL you can not use aggregate functions in WHERE (we
|
405
|
+
Since in SQL you can not use aggregate functions in WHERE (we should repeat
|
412
406
|
calculation and subqueries), currently TrkDatatables does not support using
|
413
407
|
aggregate functions since it requires implementation of `HAVING` (unless you
|
414
|
-
disable search and order
|
408
|
+
disable search and order for those fields with aggregate functions
|
409
|
+
`'users.posts_count': { search: false, order: false }`).
|
415
410
|
You can use concatenation aggregate function: in postgres `STRING_AGG`, in mysql
|
416
|
-
`GROUP_CONCAT`
|
417
|
-
|
411
|
+
`GROUP_CONCAT` so in this case we search on real columns. For example let's we
|
412
|
+
have `Post.select(%(posts.*, GROUP_CONCAT(comments.body) AS
|
413
|
+
comments_body)).left_outer_joins(:comments) .group('posts.id')` and that we have
|
414
|
+
a row `postName, comment1, comment2` than when we searh for `comment2` we will
|
415
|
+
get a row `postName, comment2`.
|
418
416
|
|
419
417
|
Simple calculations and subqueries works fine, just you have to use public
|
420
418
|
method to define calculation (that method is also used in filtering). Name of
|
@@ -424,8 +422,12 @@ name you should use one of:
|
|
424
422
|
`:date_calculated_in_db`, `:datetime_calculated_in_db` or
|
425
423
|
`:boolean_calculated_in_db`.
|
426
424
|
|
427
|
-
|
428
|
-
|
425
|
+
There is an issue in calling `all.count` when you are using subquery, or
|
426
|
+
selecting two columns `User.select(:id, :email).count`, or using star in string
|
427
|
+
`User.select('users.*').count` (although `User.select(Arel.star).count` works),
|
428
|
+
using AS `User.select('users.id AS i').count` (here arel does not help, still
|
429
|
+
raise exception `User.select(User.arel_table[:email].as('imejl')).count`).
|
430
|
+
We need to patch ActiveRecord to define `returns_count_sum`:
|
429
431
|
```
|
430
432
|
# config/initializers/active_record_group_count.rb
|
431
433
|
# When you are using subquery or joins/group_by than all.count does not work
|
@@ -489,10 +491,14 @@ class MostLikedPostsDatatable < TrkDatatables::ActiveRecord
|
|
489
491
|
))
|
490
492
|
end
|
491
493
|
|
494
|
+
# This is used for filtering so you can move this to main query if
|
495
|
+
# you have { search: false }
|
492
496
|
def title_and_body
|
493
497
|
"concat(posts.title, ' ', posts.body)"
|
494
498
|
end
|
495
499
|
|
500
|
+
# This is used for filtering so you can move this to main query if
|
501
|
+
# you have { search: false }
|
496
502
|
def comments_count
|
497
503
|
<<~SQL
|
498
504
|
(SELECT COUNT(*) FROM comments
|
@@ -568,8 +574,12 @@ This will fill proper column search values so you do not need to do it manually
|
|
568
574
|
(`post_path(:columns=>{"3"=>{:search=>{:value=>"my@email.com"}},
|
569
575
|
"2"=>{:search=>{:value=>"1|2"}}}, :user_id=>1)`)
|
570
576
|
|
571
|
-
For form fields you can use similar helper
|
572
|
-
|
577
|
+
For form fields you can use similar helper that will return name which points to
|
578
|
+
specific column, for example:
|
579
|
+
```
|
580
|
+
PostsDatatable.form_field_name('users.email'`) # => 'columns[3][search][value]'
|
581
|
+
```
|
582
|
+
Usefull when you want to provide a form for a user to search on specific column
|
573
583
|
```
|
574
584
|
<%= form_tag url: posts_path, method: :get do |f| %>
|
575
585
|
<%= f.text_field PostsDatatable.form_field_name('users.email'), 'my@email.com' %>
|
@@ -577,6 +587,15 @@ For form fields you can use similar helper `PostsDatatable.form_field_name
|
|
577
587
|
<% end %>
|
578
588
|
```
|
579
589
|
|
590
|
+
For global search you can use `[search][value]` for example
|
591
|
+
|
592
|
+
```
|
593
|
+
<%= form_tag url: posts_path, method: :get do |f| %>
|
594
|
+
<%= f.text_field '[search][value]', 'my@email.com' %>
|
595
|
+
<%= f.submit 'Search' %>
|
596
|
+
<% end %>
|
597
|
+
```
|
598
|
+
|
580
599
|
If you need, you can fetch params with this helper
|
581
600
|
|
582
601
|
```
|
@@ -747,6 +766,36 @@ end
|
|
747
766
|
|
748
767
|
```
|
749
768
|
|
769
|
+
## Neo4j
|
770
|
+
|
771
|
+
User `.as(:users)` so we know which node us used
|
772
|
+
|
773
|
+
```
|
774
|
+
class UsersDatatable < TrkDatatables::Neo4j
|
775
|
+
def columns
|
776
|
+
{
|
777
|
+
'users.email': {},
|
778
|
+
'users.created_at': {},
|
779
|
+
}
|
780
|
+
end
|
781
|
+
|
782
|
+
def all_items
|
783
|
+
User
|
784
|
+
.as(:users)
|
785
|
+
.with_associations(moves: { from_group: [:location], to_groups: [:location] })
|
786
|
+
end
|
787
|
+
|
788
|
+
def rows(filtered)
|
789
|
+
filtered.map do |user|
|
790
|
+
[
|
791
|
+
@view.link_to(user.email, @view.admin_user_path(user)),
|
792
|
+
user.created_at.to_s(:long),
|
793
|
+
]
|
794
|
+
end
|
795
|
+
end
|
796
|
+
end
|
797
|
+
```
|
798
|
+
|
750
799
|
## Alternatives
|
751
800
|
|
752
801
|
There are alternatives, for example:
|
@@ -774,8 +823,8 @@ release a new version, update the version number and then publish with
|
|
774
823
|
|
775
824
|
```
|
776
825
|
vi lib/trk_datatables/version.rb
|
777
|
-
git commit -am'...'
|
778
826
|
bundle
|
827
|
+
git commit -am'...'
|
779
828
|
bundle exec rake release
|
780
829
|
```
|
781
830
|
|
@@ -1,11 +1,14 @@
|
|
1
1
|
module TrkDatatables
|
2
2
|
class ActiveRecord < Base
|
3
|
+
# there is a stack level too deep exception for more than 190 strings
|
4
|
+
MAX_NUMBER_OF_STRINGS = 190
|
5
|
+
|
3
6
|
# Global search. All columns are typecasted to string. Search string is
|
4
7
|
# splited by space and "and"-ed.
|
5
8
|
def filter_by_search_all(filtered)
|
6
|
-
conditions = @dt_params.search_all.split(' ').map do |search_string|
|
9
|
+
conditions = @dt_params.search_all.split(' ').first(MAX_NUMBER_OF_STRINGS).map do |search_string|
|
7
10
|
@column_key_options.searchable_and_global_search.map do |column_key_option|
|
8
|
-
|
11
|
+
_filter_column_as_string column_key_option, search_string
|
9
12
|
end.reduce(:or) # any searchable column is 'or'-ed
|
10
13
|
end.reduce(:and) # 'and' for each search_string
|
11
14
|
|
@@ -40,12 +43,12 @@ module TrkDatatables
|
|
40
43
|
from, to = search_value.split BETWEEN_SEPARATOR
|
41
44
|
filter_column_as_between(column_key_option, from, to)
|
42
45
|
else
|
43
|
-
|
46
|
+
_filter_column_as_string(column_key_option, search_value)
|
44
47
|
end
|
45
48
|
end
|
46
49
|
|
47
|
-
def
|
48
|
-
search_value.split(' ').map do |search_string|
|
50
|
+
def _filter_column_as_string(column_key_option, search_value)
|
51
|
+
search_value.split(' ').first(MAX_NUMBER_OF_STRINGS).map do |search_string|
|
49
52
|
casted_column = ::Arel::Nodes::NamedFunction.new(
|
50
53
|
'CAST',
|
51
54
|
[_arel_column(column_key_option).as(@column_key_options.string_cast)]
|
data/lib/trk_datatables/base.rb
CHANGED
@@ -219,18 +219,34 @@ module TrkDatatables
|
|
219
219
|
end
|
220
220
|
|
221
221
|
def predefined_ranges
|
222
|
-
|
222
|
+
Time.zone ||= 'UTC'
|
223
|
+
{
|
224
|
+
date: predefined_date_ranges,
|
225
|
+
datetime: predefined_datetime_ranges,
|
226
|
+
}
|
223
227
|
end
|
224
228
|
|
225
|
-
def
|
226
|
-
|
229
|
+
def predefined_date_ranges
|
230
|
+
{
|
231
|
+
'Today': Time.zone.today..Time.zone.today,
|
232
|
+
'Yesterday': [Time.zone.today - 1.day, Time.zone.today - 1.day],
|
233
|
+
'This Month': Time.zone.today.beginning_of_month...Time.zone.today,
|
234
|
+
'Last Month': Time.zone.today.prev_month.beginning_of_month...Time.zone.today.prev_month.end_of_month,
|
235
|
+
'This Year': Time.zone.today.beginning_of_year...Time.zone.today,
|
236
|
+
}
|
237
|
+
end
|
238
|
+
|
239
|
+
def predefined_datetime_ranges
|
227
240
|
{
|
228
241
|
'Today': Time.zone.now.beginning_of_day..Time.zone.now.end_of_day,
|
229
242
|
'Yesterday': [Time.zone.now.beginning_of_day - 1.day, Time.zone.now.end_of_day - 1.day],
|
230
|
-
'This Month': Time.zone.today.beginning_of_month...Time.zone.now.end_of_day,
|
231
|
-
'Last Month': Time.zone.today.prev_month.beginning_of_month...Time.zone.today.prev_month.end_of_month.end_of_day,
|
232
|
-
'This Year': Time.zone.today.beginning_of_year...Time.zone.today.end_of_day,
|
233
|
-
}
|
243
|
+
'This Month': Time.zone.today.beginning_of_month.beginning_of_day...Time.zone.now.end_of_day,
|
244
|
+
'Last Month': Time.zone.today.prev_month.beginning_of_month.beginning_of_day...Time.zone.today.prev_month.end_of_month.end_of_day,
|
245
|
+
'This Year': Time.zone.today.beginning_of_year.beginning_of_day...Time.zone.today.end_of_day,
|
246
|
+
}.transform_values do |range|
|
247
|
+
# datepicker expects format 2020-11-29 11:59:59
|
248
|
+
range.first.strftime('%F %T')..range.last.strftime('%F %T')
|
249
|
+
end
|
234
250
|
end
|
235
251
|
end
|
236
252
|
end
|
@@ -22,11 +22,15 @@ module TrkDatatables
|
|
22
22
|
end
|
23
23
|
|
24
24
|
# Get the form field name for column. This is class method so you do not
|
25
|
-
# need datatable instance.
|
25
|
+
# need datatable instance. It returns something like
|
26
|
+
# 'column[3][search][value]`. For global search you can use
|
27
|
+
# '[search][value]`
|
26
28
|
#
|
27
29
|
# @example
|
28
30
|
# form_tag url: posts_path, method: :get do |f|
|
29
31
|
# f.text_field PostsDatatable.form_field_name('users.email'), 'my@email.com'
|
32
|
+
# # it is the same as
|
33
|
+
# f.text_field 'columns[3][search][value]', 'my@email.com'
|
30
34
|
def form_field_name(column_key)
|
31
35
|
datatable = new OpenStruct.new(params: {})
|
32
36
|
column_index = datatable.index_by_column_key column_key
|
@@ -12,6 +12,9 @@ module TrkDatatables
|
|
12
12
|
end
|
13
13
|
class StringCalculatedInDb < CalculatedInDb; end
|
14
14
|
class IntegerCalculatedInDb < CalculatedInDb; end
|
15
|
+
class DateCalculatedInDb < CalculatedInDb; end
|
16
|
+
class DatetimeCalculatedInDb < CalculatedInDb; end
|
17
|
+
class BooleanCalculatedInDb < CalculatedInDb; end
|
15
18
|
|
16
19
|
class ColumnKeyOptions
|
17
20
|
include Enumerable
|
@@ -107,7 +110,7 @@ module TrkDatatables
|
|
107
110
|
# in calculated columns table_name is used only to determine type
|
108
111
|
column_key = column_name
|
109
112
|
elsif table_name.present? && column_name.nil?
|
110
|
-
raise Error, 'Unless table name ends with
|
113
|
+
raise Error, 'Unless table name ends with _calculated_in_db, column key needs to have one dot for example: posts.name'
|
111
114
|
end
|
112
115
|
|
113
116
|
if table_name.blank?
|
@@ -150,6 +153,8 @@ module TrkDatatables
|
|
150
153
|
end
|
151
154
|
|
152
155
|
def _set_global_search_cols(global_search_cols)
|
156
|
+
raise Error, 'global_search_cols should be array, for example %w[users.name]' unless global_search_cols.is_a? Array
|
157
|
+
|
153
158
|
@global_search_cols = global_search_cols.each_with_object([]) do |column_key, arr|
|
154
159
|
table_name, column_name = column_key.to_s.split '.'
|
155
160
|
table_class = _determine_table_class table_name
|
@@ -191,7 +196,7 @@ module TrkDatatables
|
|
191
196
|
end
|
192
197
|
|
193
198
|
def _determine_column_name(table_class, column_name)
|
194
|
-
return column_name.
|
199
|
+
return column_name.titleize if table_class.blank?
|
195
200
|
|
196
201
|
# maybe we should check if human_attribute_name exists
|
197
202
|
table_class.human_attribute_name column_name
|
@@ -239,11 +244,11 @@ module TrkDatatables
|
|
239
244
|
if %i[date datetime].include? column_type_in_db
|
240
245
|
res['data-datatable-range'] = column_type_in_db == :datetime ? :datetime : true
|
241
246
|
if column_options[PREDEFINED_RANGES].present? ||
|
242
|
-
|
247
|
+
(@predefined_ranges.try(:[], column_type_in_db).present? && column_options[PREDEFINED_RANGES] != false)
|
243
248
|
res['data-datatable-predefined-ranges'] = if column_options[PREDEFINED_RANGES].is_a? Hash
|
244
249
|
column_options[PREDEFINED_RANGES]
|
245
250
|
else
|
246
|
-
@predefined_ranges
|
251
|
+
@predefined_ranges[column_type_in_db]
|
247
252
|
end
|
248
253
|
res['data-datatable-predefined-ranges'].transform_values! do |range|
|
249
254
|
[range.first.to_s, range.last.to_s]
|
data/lib/trk_datatables/neo4j.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
module TrkDatatables
|
2
2
|
class Neo4j < Base
|
3
3
|
def filter_by_search_all(filtered)
|
4
|
-
filtered
|
4
|
+
return filtered unless @dt_params.search_all.present?
|
5
|
+
|
6
|
+
# https://neo4jrb.readthedocs.io/en/stable/QueryClauseMethods.html?highlight=where#where
|
7
|
+
sql = @column_key_options.searchable_and_global_search.map do |column_key_option|
|
8
|
+
"#{column_key_option[:column_key]} =~ ?"
|
9
|
+
end.join(' or ')
|
10
|
+
|
11
|
+
filtered.where sql, ".*#{@dt_params.search_all}.*"
|
5
12
|
end
|
6
13
|
|
7
14
|
def filter_by_columns(all)
|
@@ -15,7 +22,13 @@ module TrkDatatables
|
|
15
22
|
end
|
16
23
|
|
17
24
|
def order_items(filtered)
|
18
|
-
|
25
|
+
order_by = dt_orders_or_default_index_and_direction.each_with_object([]) do |(index, direction), queries|
|
26
|
+
column_key_option = @column_key_options[index]
|
27
|
+
next if column_key_option[:column_options][ColumnKeyOptions::ORDER_OPTION] == false
|
28
|
+
|
29
|
+
queries << "#{column_key_option[:column_key]} #{direction}"
|
30
|
+
end
|
31
|
+
filtered.order(order_by.join(', '))
|
19
32
|
end
|
20
33
|
end
|
21
34
|
end
|
@@ -5,7 +5,7 @@ module TrkDatatables
|
|
5
5
|
@search_link = search_link
|
6
6
|
@datatable = datatable
|
7
7
|
@html_options = html_options
|
8
|
-
self.class.indent =
|
8
|
+
self.class.indent = 0
|
9
9
|
end
|
10
10
|
|
11
11
|
def result
|
@@ -53,7 +53,7 @@ module TrkDatatables
|
|
53
53
|
else
|
54
54
|
">\n".html_safe << yield << "\n#{' ' * self.class.indent}</#{tag}>".html_safe
|
55
55
|
end
|
56
|
-
self.class.indent -= 1
|
56
|
+
self.class.indent -= 1 if self.class.indent > 1
|
57
57
|
html
|
58
58
|
end
|
59
59
|
# rubocop:enable Metrics/AbcSize, Metrics/PerceivedComplexity
|
@@ -128,6 +128,25 @@ module TrkDatatables
|
|
128
128
|
end
|
129
129
|
|
130
130
|
def table_tag_client
|
131
|
+
# Should we allow generating datatable only in view
|
132
|
+
# <%= ClientDatatable.new(self).render_html do %>
|
133
|
+
# <thead>
|
134
|
+
# <tr>
|
135
|
+
# so we do not need datatable and search route
|
136
|
+
# than we just need <table> tag, but it uses datatable to determine page
|
137
|
+
# length and order (which in turn it determines from params or
|
138
|
+
# preferences)
|
139
|
+
# _content_tag(
|
140
|
+
# :table,
|
141
|
+
# class: "table table-bordered table-striped #{@html_options[:class]}",
|
142
|
+
# 'data-datatable': true,
|
143
|
+
# 'data-datatable-ajax-url': @search_link,
|
144
|
+
# 'data-datatable-page-length': @datatable.dt_per_page_or_default,
|
145
|
+
# 'data-datatable-order': @datatable.dt_orders_or_default_index_and_direction.to_json,
|
146
|
+
# # for initial page load we do not have ability to show recordsTotal
|
147
|
+
# # https://github.com/trkin/trk_datatables_js/issues/1
|
148
|
+
# 'data-datatable-total-length': @datatable.filtered_items_count,
|
149
|
+
# ) do
|
131
150
|
''
|
132
151
|
end
|
133
152
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trk_datatables
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dusan Orlovic
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -206,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
206
206
|
- !ruby/object:Gem::Version
|
207
207
|
version: '0'
|
208
208
|
requirements: []
|
209
|
-
rubygems_version: 3.0.
|
209
|
+
rubygems_version: 3.0.8
|
210
210
|
signing_key:
|
211
211
|
specification_version: 4
|
212
212
|
summary: Gem that simplify using datatables with Ruby on Rails and Sinatra.
|