effective_datatables 4.3.4 → 4.3.5

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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +19 -1
  3. data/app/assets/javascripts/dataTables/buttons/buttons.bootstrap4.js +1 -0
  4. data/app/assets/javascripts/dataTables/buttons/buttons.colVis.js +12 -2
  5. data/app/assets/javascripts/dataTables/buttons/buttons.html5.js +58 -6
  6. data/app/assets/javascripts/dataTables/buttons/buttons.print.js +16 -5
  7. data/app/assets/javascripts/dataTables/buttons/dataTables.buttons.js +26 -10
  8. data/app/assets/javascripts/dataTables/rowReorder/dataTables.rowReorder.js +818 -0
  9. data/app/assets/javascripts/dataTables/rowReorder/rowReorder.bootstrap4.js +38 -0
  10. data/app/assets/javascripts/effective_datatables.js +3 -10
  11. data/app/assets/javascripts/effective_datatables/flash.js.coffee +20 -0
  12. data/app/assets/javascripts/effective_datatables/initialize.js.coffee +12 -1
  13. data/app/assets/javascripts/effective_datatables/overrides.js.coffee +0 -24
  14. data/app/assets/javascripts/effective_datatables/reorder.js.coffee +37 -0
  15. data/app/assets/stylesheets/dataTables/buttons/buttons.bootstrap4.css +6 -0
  16. data/app/assets/stylesheets/dataTables/rowReorder/rowReorder.bootstrap4.css +22 -0
  17. data/app/assets/stylesheets/effective_datatables.scss +1 -0
  18. data/app/assets/stylesheets/effective_datatables/_overrides.scss +15 -2
  19. data/app/controllers/effective/datatables_controller.rb +25 -0
  20. data/app/helpers/effective_datatables_helper.rb +3 -1
  21. data/app/helpers/effective_datatables_private_helper.rb +28 -4
  22. data/app/models/effective/datatable.rb +23 -3
  23. data/app/models/effective/effective_datatable/dsl.rb +1 -1
  24. data/app/models/effective/effective_datatable/dsl/datatable.rb +65 -26
  25. data/app/models/effective/effective_datatable/format.rb +7 -4
  26. data/app/models/effective/effective_datatable/resource.rb +0 -2
  27. data/app/models/effective/effective_datatable/state.rb +15 -8
  28. data/app/views/effective/datatables/_reorder_column.html.haml +5 -0
  29. data/config/routes.rb +1 -0
  30. data/lib/effective_datatables/version.rb +1 -1
  31. metadata +8 -2
@@ -3,7 +3,7 @@ module Effective
3
3
  module Dsl
4
4
 
5
5
  def bulk_actions(&block)
6
- define_method('initialize_bulk_actions') { dsl_tool.instance_exec(&block) }
6
+ define_method('initialize_bulk_actions') { dsl_tool.instance_exec(&block); dsl_tool.bulk_actions_col }
7
7
  end
8
8
 
9
9
  def charts(&block)
@@ -3,6 +3,11 @@ module Effective
3
3
  module Dsl
4
4
  module Datatable
5
5
  # Instance Methods inside the datatable do .. end block
6
+ def length(length)
7
+ raise 'length must be 5, 10, 25, 50, 100, 250, 500, :all' unless [5, 10, 25, 50, 100, 250, 500, :all].include?(length)
8
+ datatable.state[:length] ||= (length == :all ? 9999999 : length)
9
+ end
10
+
6
11
  def order(name, dir = nil)
7
12
  raise 'order direction must be :asc or :desc' unless [nil, :asc, :desc].include?(dir)
8
13
 
@@ -10,9 +15,13 @@ module Effective
10
15
  datatable.state[:order_dir] ||= dir
11
16
  end
12
17
 
13
- def length(length)
14
- raise 'length must be 5, 10, 25, 50, 100, 250, 500, :all' unless [5, 10, 25, 50, 100, 250, 500, :all].include?(length)
15
- datatable.state[:length] ||= (length == :all ? 9999999 : length)
18
+ def reorder(name, dir = nil)
19
+ raise 'order direction must be :asc or :desc' unless [nil, :asc, :desc].include?(dir)
20
+
21
+ datatable.state[:order_name] = :_reorder
22
+ datatable.state[:order_dir] = dir
23
+
24
+ reorder_col(name)
16
25
  end
17
26
 
18
27
  # A col has its internal values sorted/searched before the block is run
@@ -73,8 +82,47 @@ module Effective
73
82
  )
74
83
  end
75
84
 
85
+ def actions_col(col_class: nil, inline: nil, partial: nil, partial_as: nil, actions_partial: nil, responsive: 5000, visible: true, **actions, &format)
86
+ raise 'You can only have one actions column' if datatable.columns[:_actions].present?
87
+
88
+ datatable._columns[:_actions] = Effective::DatatableColumn.new(
89
+ action: false,
90
+ as: :actions,
91
+ compute: nil,
92
+ col_class: col_class,
93
+ format: (format if block_given?),
94
+ index: nil,
95
+ inline: (inline.nil? ? datatable.inline? : inline),
96
+ label: false,
97
+ name: :actions,
98
+ partial: partial,
99
+ partial_as: partial_as,
100
+ actions_partial: (actions_partial || :dropleft),
101
+ responsive: responsive,
102
+ search: false,
103
+ sort: false,
104
+ sql_column: nil,
105
+ th: nil,
106
+ th_append: nil,
107
+ visible: visible,
108
+
109
+ # { approve: false }. These args are passed to effective_resources render_resource_actions
110
+ actions: actions
111
+ )
112
+ end
113
+
114
+ def aggregate(name, label: nil, &compute)
115
+ datatable._aggregates[name.to_sym] = {
116
+ compute: (compute if block_given?),
117
+ label: label || name.to_s.titleize,
118
+ name: name.to_sym,
119
+ }
120
+ end
121
+
122
+ # Called automatically after bulk_actions do ... end
123
+ # Call again if you want to change the position of the bulk_actions_col
76
124
  def bulk_actions_col(col_class: nil, partial: nil, partial_as: nil, responsive: 5000)
77
- raise 'You can only have one bulk actions column' if datatable.columns[:_bulk_actions].present?
125
+ datatable._columns.delete(:_bulk_actions) if datatable.columns[:_bulk_actions]
78
126
 
79
127
  datatable._columns[:_bulk_actions] = Effective::DatatableColumn.new(
80
128
  action: false,
@@ -97,42 +145,33 @@ module Effective
97
145
  )
98
146
  end
99
147
 
100
- def actions_col(col_class: nil, inline: nil, partial: nil, partial_as: nil, actions_partial: nil, responsive: 5000, visible: true, **actions, &format)
101
- raise 'You can only have one actions column' if datatable.columns[:_actions].present?
148
+ # Called automatically after reorder
149
+ # Call again if you want to change the position of the reorder_col
150
+ def reorder_col(name, col_class: nil, partial: nil, partial_as: nil, sql_column: nil, responsive: 5000)
151
+ datatable._columns.delete(:_reorder) if datatable.columns[:_reorder]
102
152
 
103
- datatable._columns[:_actions] = Effective::DatatableColumn.new(
153
+ datatable._columns[:_reorder] = Effective::DatatableColumn.new(
104
154
  action: false,
105
- as: :actions,
155
+ as: :reorder,
106
156
  compute: nil,
107
157
  col_class: col_class,
108
- format: (format if block_given?),
158
+ format: nil,
109
159
  index: nil,
110
- inline: (inline.nil? ? datatable.inline? : inline),
111
160
  label: false,
112
- name: :actions,
113
- partial: partial,
161
+ name: :reorder,
162
+ partial: partial || '/effective/datatables/reorder_column',
114
163
  partial_as: partial_as,
115
- actions_partial: (actions_partial || :dropleft),
164
+ reorder: name,
116
165
  responsive: responsive,
117
166
  search: false,
118
- sort: false,
119
- sql_column: nil,
167
+ sort: true,
168
+ sql_column: (sql_column || name),
120
169
  th: nil,
121
170
  th_append: nil,
122
- visible: visible,
123
-
124
- # { approve: false }. These args are passed to effective_resources render_resource_actions
125
- actions: actions
171
+ visible: false
126
172
  )
127
173
  end
128
174
 
129
- def aggregate(name, label: nil, &compute)
130
- datatable._aggregates[name.to_sym] = {
131
- compute: (compute if block_given?),
132
- label: label || name.to_s.titleize,
133
- name: name.to_sym,
134
- }
135
- end
136
175
  end
137
176
  end
138
177
  end
@@ -2,6 +2,7 @@ module Effective
2
2
  module EffectiveDatatable
3
3
  module Format
4
4
  BLANK = ''.freeze
5
+ NONVISIBLE = '...'.freeze
5
6
  SPACER = 'EFFECTIVEDATATABLESSPACER'.freeze
6
7
  SPACER_TEMPLATE = '/effective/datatables/spacer_template'.freeze
7
8
 
@@ -12,7 +13,9 @@ module Effective
12
13
  rendered = {}
13
14
 
14
15
  columns.each do |name, opts|
15
- if opts[:partial] && state[:visible][name]
16
+ next unless state[:visible][name]
17
+
18
+ if opts[:partial]
16
19
  locals = { datatable: self, column: columns[name] }.merge(resource_col_locals(opts))
17
20
 
18
21
  rendered[name] = (view.render(
@@ -35,13 +38,13 @@ module Effective
35
38
 
36
39
  collection.each_with_index do |row, row_index|
37
40
  columns.each do |name, opts|
38
- next unless state[:visible][name]
39
-
40
41
  index = opts[:index]
41
42
  value = row[index]
42
43
 
43
44
  row[index] = (
44
- if opts[:as] == :actions
45
+ if state[:visible][name] == false
46
+ NONVISIBLE
47
+ elsif opts[:as] == :actions
45
48
  rendered[name][row_index]
46
49
  elsif opts[:format] && rendered.key?(name)
47
50
  dsl_tool.instance_exec(value, row, rendered[name][row_index], &opts[:format])
@@ -108,8 +108,6 @@ module Effective
108
108
 
109
109
  opts[:col_class] = "col-#{opts[:as]} col-#{name.to_s.parameterize} #{opts[:col_class]}".strip
110
110
  end
111
-
112
- load_resource_search!
113
111
  end
114
112
 
115
113
  def load_resource_search!
@@ -104,8 +104,10 @@ module Effective
104
104
  def load_ajax_state!
105
105
  state[:length] = params[:length].to_i
106
106
 
107
- state[:order_dir] = (params[:order]['0'][:dir] == 'desc' ? :desc : :asc)
108
- state[:order_index] = params[:order]['0'][:column].to_i
107
+ if params[:order]
108
+ state[:order_dir] = (params[:order]['0'][:dir] == 'desc' ? :desc : :asc)
109
+ state[:order_index] = params[:order]['0'][:column].to_i
110
+ end
109
111
 
110
112
  state[:scope] = _scopes.keys.find { |name| params[:scope] == name.to_s }
111
113
  state[:start] = params[:start].to_i
@@ -140,14 +142,19 @@ module Effective
140
142
  def load_columns!
141
143
  state[:length] ||= EffectiveDatatables.default_length
142
144
 
143
- if columns.present?
144
- columns.each_with_index { |(_, column), index| column[:index] = index }
145
+ (columns || {}).each_with_index { |(_, column), index| column[:index] = index }
145
146
 
146
- if order_index.present?
147
- state[:order_name] = columns.keys[order_index]
148
- end
147
+ if columns.present?
148
+ state[:order_name] = (
149
+ if columns.key?(:_reorder)
150
+ :_reorder
151
+ elsif order_index.present?
152
+ columns.keys[order_index]
153
+ else
154
+ columns.find { |name, opts| opts[:sort] }.first
155
+ end
156
+ )
149
157
 
150
- state[:order_name] ||= columns.find { |name, opts| opts[:sort] }.first
151
158
  raise "order column :#{order_name} must exist as a col or val" unless columns[order_name]
152
159
 
153
160
  state[:order_index] = columns[order_name][:index]
@@ -0,0 +1,5 @@
1
+ - id = (resource.try(:to_param) || resource.try(:id) || resource.object_id)
2
+ - value = resource.send(column[:reorder])
3
+
4
+ %input{type: 'hidden', value: value, 'data-reorder-resource': id}
5
+ = icon('move')
data/config/routes.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  EffectiveDatatables::Engine.routes.draw do
2
2
  scope :module => 'effective' do
3
3
  match 'datatables/:id(.:format)', to: 'datatables#show', via: [:get, :post], as: :datatable
4
+ match 'datatables/:id/reorder(.:format)', to: 'datatables#reorder', via: [:post], as: :reorder_datatable
4
5
  end
5
6
  end
6
7
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveDatatables
2
- VERSION = '4.3.4'.freeze
2
+ VERSION = '4.3.5'.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.3.4
4
+ version: 4.3.5
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: 2018-10-22 00:00:00.000000000 Z
11
+ date: 2018-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -103,14 +103,18 @@ files:
103
103
  - app/assets/javascripts/dataTables/jquery.dataTables.js
104
104
  - app/assets/javascripts/dataTables/responsive/dataTables.responsive.js
105
105
  - app/assets/javascripts/dataTables/responsive/responsive.bootstrap4.js
106
+ - app/assets/javascripts/dataTables/rowReorder/dataTables.rowReorder.js
107
+ - app/assets/javascripts/dataTables/rowReorder/rowReorder.bootstrap4.js
106
108
  - app/assets/javascripts/effective_datatables.js
107
109
  - app/assets/javascripts/effective_datatables/bulk_actions.js.coffee
108
110
  - app/assets/javascripts/effective_datatables/charts.js.coffee
109
111
  - app/assets/javascripts/effective_datatables/events.js.coffee
110
112
  - app/assets/javascripts/effective_datatables/filters.js.coffee
113
+ - app/assets/javascripts/effective_datatables/flash.js.coffee
111
114
  - app/assets/javascripts/effective_datatables/initialize.js.coffee
112
115
  - app/assets/javascripts/effective_datatables/inline_crud.js.coffee
113
116
  - app/assets/javascripts/effective_datatables/overrides.js.coffee
117
+ - app/assets/javascripts/effective_datatables/reorder.js.coffee
114
118
  - app/assets/javascripts/effective_datatables/reset.js.coffee
115
119
  - app/assets/javascripts/effective_datatables/responsive.js.coffee
116
120
  - app/assets/javascripts/vendor/jquery.delayedChange.js
@@ -118,6 +122,7 @@ files:
118
122
  - app/assets/stylesheets/dataTables/buttons/buttons.bootstrap4.css
119
123
  - app/assets/stylesheets/dataTables/dataTables.bootstrap4.css
120
124
  - app/assets/stylesheets/dataTables/responsive/responsive.bootstrap4.css
125
+ - app/assets/stylesheets/dataTables/rowReorder/rowReorder.bootstrap4.css
121
126
  - app/assets/stylesheets/effective_datatables.scss
122
127
  - app/assets/stylesheets/effective_datatables/_overrides.scss
123
128
  - app/controllers/effective/datatables_controller.rb
@@ -150,6 +155,7 @@ files:
150
155
  - app/views/effective/datatables/_chart.html.haml
151
156
  - app/views/effective/datatables/_datatable.html.haml
152
157
  - app/views/effective/datatables/_filters.html.haml
158
+ - app/views/effective/datatables/_reorder_column.html.haml
153
159
  - app/views/effective/datatables/_resource_column.html.haml
154
160
  - app/views/effective/datatables/_spacer_template.html
155
161
  - app/views/effective/datatables/index.html.haml