effective_datatables 4.18.0 → 4.19.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98b8b128f779a12a5f4bf7618a4c62ba9177a7c6da54b875b1fb74713a2ae1b7
4
- data.tar.gz: 654dd180969300fbb4f0d9c61e0f81c47bc24e577d615585d2ca7c9194fca864
3
+ metadata.gz: d9a3cae1554f2bcf9b6d73f51972eb1f8bc00c38a30d160c7f8910bf6e339a99
4
+ data.tar.gz: 72193d4f4895fa60a933c6be50d2d5d6a9d32d5d09a7f60558b130c2042eee1a
5
5
  SHA512:
6
- metadata.gz: cec0f5d9a28e18853014d058818dd16c6c8c668269c6cc970ebd3ac17928a591cb0c2d49b6bbd962f473e6f68f69739c642f936ede01d3a79fd356e03db7ccff
7
- data.tar.gz: c65bbcfaae3d8efb553bd2a548fa1b3f843ac44eefd2ed6171e488d8740eb6d368676414ee1747ed7bb4a81050b1c36e38253da5710502ad3a1780924fa67981
6
+ metadata.gz: 321d799d2a21d4e3d19523ef8ae24d8ae62649bd1656afcc90223b26a77409d00dd8bd80a8f15bd40eb07476ea2b1f4a3eb7500f0f44a4a6b0b98553c873ba1d
7
+ data.tar.gz: f35dc8eeabe695ded08c56d80d1f09cfb18ac1e9925cf55d43870ac121d357543e085e9fdeb14020f92a52f6419de45712a0a663cb4429029ee3edcd9f29e9b4
data/README.md CHANGED
@@ -1131,6 +1131,27 @@ Above we have `resources :things` for the 7 crud actions. And we add two more me
1131
1131
 
1132
1132
  Your datatable should now have New, Show, Edit, Approve and Reject buttons. Click them for inline functionality.
1133
1133
 
1134
+ ## Adding an Ajax member action
1135
+
1136
+ To render a member action with an inline datatable:
1137
+
1138
+ - Create a "cool_things.html" template and a "_cool_things.html" partial file. Need both.
1139
+
1140
+ - The links must be inside an `actions_col` or a `col(:thing, col_class: 'col-actions')` for the javascript to work.
1141
+
1142
+ - The action itself just needs to be `data-remote=true`. Try `link_to('Show Cool Things', thing_cool_things_path(thing), 'data-remote': true)`
1143
+
1144
+ Make sure the route and permissions are working:
1145
+
1146
+ ```
1147
+ resources :things do
1148
+ get :cool_things, on: :member
1149
+ ```
1150
+
1151
+ and `can?(:cool_things, Thing)`
1152
+
1153
+ Good luck.
1154
+
1134
1155
  ## Troubleshooting Inline
1135
1156
 
1136
1157
  If things aren't working, try the following:
@@ -5,3 +5,91 @@ $(document).on 'click', 'a[data-apply-effective-datatables-filters]', (event) ->
5
5
  $table = $('#' + $form.attr('aria-controls'))
6
6
  $table.DataTable().draw()
7
7
 
8
+ # Date Filters
9
+ # This uses moment.js. Sorry.
10
+ selectMonth = ($filter, date) ->
11
+ prevDate = date.clone().subtract('1', 'month').startOf('month')
12
+ startDate = date.clone().startOf('month')
13
+ endDate = date.clone().endOf('month')
14
+ nextDate = date.clone().add('1', 'month').startOf('month')
15
+
16
+ # Update Previous Button
17
+ $filter.find('[data-effective-datatables-filter-prev-month]').data('effective-datatables-filter-prev-month', prevDate.format('YYYY-MM-DD'))
18
+ $filter.find('[data-effective-datatables-filter-prev-month]').find('span.prev-month').text(prevDate.format('MMM'))
19
+
20
+ # Update Start and End Dates
21
+ $filter.find('.start-date').text(startDate.format('YYYY-MM-DD'))
22
+ $filter.find('.end-date').text(endDate.format('YYYY-MM-DD'))
23
+
24
+ # Update Next Button
25
+ $filter.find('[data-effective-datatables-filter-next-month]').data('effective-datatables-filter-next-month', nextDate.format('YYYY-MM-DD'))
26
+ $filter.find('[data-effective-datatables-filter-next-month]').find('span.next-month').text(nextDate.format('MMM'))
27
+
28
+ # Update hidden inputs
29
+ $filter.find("input[id='filters_start_date']").data('DateTimePicker').date(startDate.format('YYYY-MM-DD'))
30
+ $filter.find("input[id='filters_end_date']").data('DateTimePicker').date(endDate.format('YYYY-MM-DD'))
31
+
32
+ $table = $('#' + $filter.closest('.effective-datatables-filters').attr('aria-controls'))
33
+ $table.DataTable().draw()
34
+
35
+ $(document).on 'click', 'a[data-effective-datatables-filter-next-month]', (event) ->
36
+ event.preventDefault()
37
+
38
+ $obj = $(event.currentTarget)
39
+ $filter = $obj.closest('.effective-datatables-filter')
40
+ date = moment($obj.data('effective-datatables-filter-next-month'))
41
+
42
+ selectMonth($filter, date)
43
+
44
+ $(document).on 'click', 'a[data-effective-datatables-filter-prev-month]', (event) ->
45
+ event.preventDefault()
46
+
47
+ $obj = $(event.currentTarget)
48
+ $filter = $obj.closest('.effective-datatables-filter')
49
+ date = moment($obj.data('effective-datatables-filter-prev-month'))
50
+
51
+ selectMonth($filter, date)
52
+
53
+ ## Years
54
+ selectYear = ($filter, date) ->
55
+ prevDate = date.clone().subtract('1', 'year').startOf('year')
56
+ startDate = date.clone().startOf('year')
57
+ endDate = date.clone().endOf('year')
58
+ nextDate = date.clone().add('1', 'year').startOf('year')
59
+
60
+ # Update Previous Button
61
+ $filter.find('[data-effective-datatables-filter-prev-year]').data('effective-datatables-filter-prev-year', prevDate.format('YYYY-MM-DD'))
62
+ $filter.find('[data-effective-datatables-filter-prev-year]').find('span.prev-year').text(prevDate.format('YYYY'))
63
+
64
+ # Update Start and End Dates
65
+ $filter.find('.start-date').text(startDate.format('YYYY-MM-DD'))
66
+ $filter.find('.end-date').text(endDate.format('YYYY-MM-DD'))
67
+
68
+ # Update Next Button
69
+ $filter.find('[data-effective-datatables-filter-next-year]').data('effective-datatables-filter-next-year', nextDate.format('YYYY-MM-DD'))
70
+ $filter.find('[data-effective-datatables-filter-next-year]').find('span.next-year').text(nextDate.format('YYYY'))
71
+
72
+ # Update hidden inputs
73
+ $filter.find("input[id='filters_start_date']").data('DateTimePicker').date(startDate.format('YYYY-MM-DD'))
74
+ $filter.find("input[id='filters_end_date']").data('DateTimePicker').date(endDate.format('YYYY-MM-DD'))
75
+
76
+ $table = $('#' + $filter.closest('.effective-datatables-filters').attr('aria-controls'))
77
+ $table.DataTable().draw()
78
+
79
+ $(document).on 'click', 'a[data-effective-datatables-filter-next-year]', (event) ->
80
+ event.preventDefault()
81
+
82
+ $obj = $(event.currentTarget)
83
+ $filter = $obj.closest('.effective-datatables-filter')
84
+ date = moment($obj.data('effective-datatables-filter-next-year'))
85
+
86
+ selectYear($filter, date)
87
+
88
+ $(document).on 'click', 'a[data-effective-datatables-filter-prev-year]', (event) ->
89
+ event.preventDefault()
90
+
91
+ $obj = $(event.currentTarget)
92
+ $filter = $obj.closest('.effective-datatables-filter')
93
+ date = moment($obj.data('effective-datatables-filter-prev-year'))
94
+
95
+ selectYear($filter, date)
@@ -31,17 +31,45 @@
31
31
  = f.static_field :year do
32
32
  #{now.beginning_of_year.strftime('%F')} to #{now.strftime('%F')} (today)
33
33
 
34
+ = f.show_if :date_range, :year do
35
+ = f.static_field :year, wrapper: { class: 'effective-datatables-filter' } do
36
+ - date = f.object.start_date.beginning_of_year
37
+
38
+ = link_to '#', 'data-effective-datatables-filter-prev-year': date.advance(years: -1).strftime('%F') do
39
+ = icon('arrow-left-circle')
40
+ %span.prev-year= date.advance(years: -1).strftime('%Y')
41
+
42
+ %span.start-date= f.object.start_date.strftime('%F')
43
+ to
44
+ %span.end-date= f.object.end_date.strftime('%F')
45
+
46
+ = link_to '#', 'data-effective-datatables-filter-next-year': date.advance(years: 1).strftime('%F') do
47
+ = icon('arrow-right-circle')
48
+ %span.next-year= date.advance(years: 1).strftime('%Y')
49
+
50
+ %div{style: 'display: none;'}
51
+ = f.date_field :start_date, name: name, autocomplete: 'off', feedback: false
52
+ = f.date_field :end_date, name: name, autocomplete: 'off', feedback: false
53
+
34
54
  = f.show_if :date_range, :month do
35
- = f.static_field :month do
36
- = link_to((prev_month.strftime('%b %Y') + ' ' + icon('arrow-left-circle')).html_safe, prev_month_path.sub(path, request.path))
37
- #{start_date.beginning_of_month.strftime('%F')} to #{start_date.end_of_month.strftime('%F')}
38
- = link_to((icon('arrow-right-circle') + ' ' + next_month.strftime('%b %Y')).html_safe, next_month_path.sub(path, request.path))
55
+ = f.static_field :month, wrapper: { class: 'effective-datatables-filter' } do
56
+ - date = f.object.start_date.beginning_of_month
39
57
 
40
- = f.show_if :date_range, :year do
41
- = f.static_field :year do
42
- = link_to((prev_year.strftime('%Y') + ' ' + icon('arrow-left-circle')).html_safe, prev_year_path.sub(path, request.path))
43
- #{start_date.beginning_of_year.strftime('%F')} to #{start_date.end_of_year.strftime('%F')}
44
- = link_to((icon('arrow-right-circle') + ' ' + next_year.strftime('%Y')).html_safe, next_year_path.sub(path, request.path))
58
+ = link_to '#', 'data-effective-datatables-filter-prev-month': date.advance(months: -1).strftime('%F') do
59
+ = icon('arrow-left-circle')
60
+ %span.prev-month= date.advance(months: -1).strftime('%b')
61
+
62
+ %span.start-date= f.object.start_date.strftime('%F')
63
+ to
64
+ %span.end-date= f.object.end_date.strftime('%F')
65
+
66
+ = link_to '#', 'data-effective-datatables-filter-next-month': date.advance(months: 1).strftime('%F') do
67
+ = icon('arrow-right-circle')
68
+ %span.next-month= date.advance(months: 1).strftime('%b')
69
+
70
+ %div{style: 'display: none;'}
71
+ = f.date_field :start_date, name: name, autocomplete: 'off', feedback: false
72
+ = f.date_field :end_date, name: name, autocomplete: 'off', feedback: false
45
73
 
46
74
  = f.show_if :date_range, :custom do
47
75
  .row
@@ -1,6 +1,6 @@
1
1
  .effective-datatables-filters{'aria-controls': datatable.to_param}
2
2
 
3
- = effective_form_with(model: datatable.filters_form, scope: :filters, url: (datatable._form[:url] || '#'), method: datatable._form[:verb], id: nil) do |form|
3
+ = effective_form_with(model: datatable.filters_form, scope: :filters, url: (datatable._form[:url] || '#'), method: datatable._form[:verb], id: nil, authenticity_token: datatable._filters_form_required?) do |form|
4
4
  .form-row.align-items-center
5
5
  - if datatable._scopes.present?
6
6
  = datatable_scope_tag(form, datatable)
@@ -1,3 +1,3 @@
1
1
  module EffectiveDatatables
2
- VERSION = '4.18.0'.freeze
2
+ VERSION = '4.19.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_datatables
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.18.0
4
+ version: 4.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-08 00:00:00.000000000 Z
11
+ date: 2023-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails