effective_datatables 3.7.7 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +5 -5
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +32 -32
  4. data/app/assets/images/dataTables/sort-down.svg +1 -0
  5. data/app/assets/images/dataTables/sort-up.svg +1 -0
  6. data/app/assets/images/dataTables/sort.svg +1 -0
  7. data/app/assets/javascripts/dataTables/buttons/{buttons.bootstrap.js → buttons.bootstrap4.js} +7 -15
  8. data/app/assets/javascripts/dataTables/dataTables.bootstrap4.js +184 -0
  9. data/app/assets/javascripts/dataTables/responsive/dataTables.responsive.js +30 -11
  10. data/app/assets/javascripts/dataTables/responsive/{responsive.bootstrap.js → responsive.bootstrap4.js} +6 -6
  11. data/app/assets/javascripts/effective_datatables.js +4 -4
  12. data/app/assets/javascripts/effective_datatables/bulk_actions.js.coffee +43 -43
  13. data/app/assets/javascripts/effective_datatables/events.js.coffee +7 -4
  14. data/app/assets/javascripts/effective_datatables/filters.js.coffee +0 -1
  15. data/app/assets/javascripts/effective_datatables/initialize.js.coffee +45 -49
  16. data/app/assets/javascripts/effective_datatables/overrides.js +12 -0
  17. data/app/assets/javascripts/effective_datatables/reset.js.coffee +1 -1
  18. data/app/assets/stylesheets/dataTables/buttons/{buttons.bootstrap.scss → buttons.bootstrap4.css} +68 -1
  19. data/app/assets/stylesheets/dataTables/{dataTables.bootstrap.scss → dataTables.bootstrap4.css} +44 -29
  20. data/app/assets/stylesheets/dataTables/responsive/{responsive.bootstrap.scss → responsive.bootstrap4.css} +3 -3
  21. data/app/assets/stylesheets/effective_datatables.scss +3 -4
  22. data/app/assets/stylesheets/effective_datatables/_overrides.scss +72 -152
  23. data/app/controllers/effective/datatables_controller.rb +6 -39
  24. data/app/helpers/effective_datatables_helper.rb +55 -50
  25. data/app/helpers/effective_datatables_private_helper.rb +47 -179
  26. data/app/models/effective/datatable.rb +16 -44
  27. data/app/models/effective/datatable_column.rb +0 -1
  28. data/app/models/effective/datatable_column_tool.rb +1 -1
  29. data/app/models/effective/datatable_dsl_tool.rb +3 -11
  30. data/app/models/effective/datatable_value_tool.rb +23 -23
  31. data/app/models/effective/effective_datatable/attributes.rb +13 -5
  32. data/app/models/effective/effective_datatable/collection.rb +3 -18
  33. data/app/models/effective/effective_datatable/compute.rb +6 -17
  34. data/app/models/effective/effective_datatable/cookie.rb +20 -19
  35. data/app/models/effective/effective_datatable/dsl.rb +3 -8
  36. data/app/models/effective/effective_datatable/dsl/bulk_actions.rb +25 -14
  37. data/app/models/effective/effective_datatable/dsl/datatable.rb +28 -70
  38. data/app/models/effective/effective_datatable/dsl/filters.rb +5 -5
  39. data/app/models/effective/effective_datatable/format.rb +50 -95
  40. data/app/models/effective/effective_datatable/params.rb +3 -8
  41. data/app/models/effective/effective_datatable/resource.rb +76 -137
  42. data/app/models/effective/effective_datatable/state.rb +15 -30
  43. data/app/views/effective/datatables/_actions_column.html.haml +8 -1
  44. data/app/views/effective/datatables/_bulk_actions_column.html.haml +1 -1
  45. data/app/views/effective/datatables/_filters.html.haml +11 -12
  46. data/app/views/effective/datatables/_resource_column.html.haml +8 -11
  47. data/config/effective_datatables.rb +14 -12
  48. data/config/routes.rb +0 -1
  49. data/lib/effective_datatables.rb +4 -57
  50. data/lib/effective_datatables/engine.rb +1 -1
  51. data/lib/effective_datatables/version.rb +1 -1
  52. metadata +20 -30
  53. data/app/assets/images/dataTables/sort_asc.png +0 -0
  54. data/app/assets/images/dataTables/sort_both.png +0 -0
  55. data/app/assets/images/dataTables/sort_desc.png +0 -0
  56. data/app/assets/javascripts/dataTables/dataTables.bootstrap.js +0 -182
  57. data/app/assets/javascripts/dataTables/locales/en.lang +0 -33
  58. data/app/assets/javascripts/dataTables/locales/es.lang +0 -36
  59. data/app/assets/javascripts/dataTables/locales/nl.lang +0 -30
  60. data/app/assets/javascripts/effective_datatables/flash.js.coffee +0 -31
  61. data/app/assets/javascripts/effective_datatables/inline_crud.js.coffee +0 -217
  62. data/app/assets/javascripts/effective_datatables/overrides.js.coffee +0 -7
  63. data/app/assets/javascripts/effective_datatables/reorder.js.coffee +0 -43
  64. data/app/assets/stylesheets/effective_datatables/_filters.scss +0 -7
  65. data/app/views/effective/datatables/_reorder_column.html.haml +0 -5
  66. data/config/locales/en.yml +0 -12
  67. data/config/locales/es.yml +0 -12
  68. data/config/locales/nl.yml +0 -12
@@ -1,182 +0,0 @@
1
- /*! DataTables Bootstrap 3 integration
2
- * ©2011-2015 SpryMedia Ltd - datatables.net/license
3
- */
4
-
5
- /**
6
- * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and
7
- * DataTables 1.10 or newer.
8
- *
9
- * This file sets the defaults and adds options to DataTables to style its
10
- * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
11
- * for further information.
12
- */
13
- (function( factory ){
14
- if ( typeof define === 'function' && define.amd ) {
15
- // AMD
16
- define( ['jquery', 'datatables.net'], function ( $ ) {
17
- return factory( $, window, document );
18
- } );
19
- }
20
- else if ( typeof exports === 'object' ) {
21
- // CommonJS
22
- module.exports = function (root, $) {
23
- if ( ! root ) {
24
- root = window;
25
- }
26
-
27
- if ( ! $ || ! $.fn.dataTable ) {
28
- // Require DataTables, which attaches to jQuery, including
29
- // jQuery if needed and have a $ property so we can access the
30
- // jQuery object that is used
31
- $ = require('datatables.net')(root, $).$;
32
- }
33
-
34
- return factory( $, root, root.document );
35
- };
36
- }
37
- else {
38
- // Browser
39
- factory( jQuery, window, document );
40
- }
41
- }(function( $, window, document, undefined ) {
42
- 'use strict';
43
- var DataTable = $.fn.dataTable;
44
-
45
-
46
- /* Set the defaults for DataTables initialisation */
47
- $.extend( true, DataTable.defaults, {
48
- dom:
49
- "<'row'<'col-sm-6'l><'col-sm-6'f>>" +
50
- "<'row'<'col-sm-12'tr>>" +
51
- "<'row'<'col-sm-5'i><'col-sm-7'p>>",
52
- renderer: 'bootstrap'
53
- } );
54
-
55
-
56
- /* Default class modification */
57
- $.extend( DataTable.ext.classes, {
58
- sWrapper: "dataTables_wrapper form-inline dt-bootstrap",
59
- sFilterInput: "form-control input-sm",
60
- sLengthSelect: "form-control input-sm",
61
- sProcessing: "dataTables_processing panel panel-default"
62
- } );
63
-
64
-
65
- /* Bootstrap paging button renderer */
66
- DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
67
- var api = new DataTable.Api( settings );
68
- var classes = settings.oClasses;
69
- var lang = settings.oLanguage.oPaginate;
70
- var aria = settings.oLanguage.oAria.paginate || {};
71
- var btnDisplay, btnClass, counter=0;
72
-
73
- var attach = function( container, buttons ) {
74
- var i, ien, node, button;
75
- var clickHandler = function ( e ) {
76
- e.preventDefault();
77
- if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
78
- api.page( e.data.action ).draw( 'page' );
79
- }
80
- };
81
-
82
- for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
83
- button = buttons[i];
84
-
85
- if ( $.isArray( button ) ) {
86
- attach( container, button );
87
- }
88
- else {
89
- btnDisplay = '';
90
- btnClass = '';
91
-
92
- switch ( button ) {
93
- case 'ellipsis':
94
- btnDisplay = '&#x2026;';
95
- btnClass = 'disabled';
96
- break;
97
-
98
- case 'first':
99
- btnDisplay = lang.sFirst;
100
- btnClass = button + (page > 0 ?
101
- '' : ' disabled');
102
- break;
103
-
104
- case 'previous':
105
- btnDisplay = lang.sPrevious;
106
- btnClass = button + (page > 0 ?
107
- '' : ' disabled');
108
- break;
109
-
110
- case 'next':
111
- btnDisplay = lang.sNext;
112
- btnClass = button + (page < pages-1 ?
113
- '' : ' disabled');
114
- break;
115
-
116
- case 'last':
117
- btnDisplay = lang.sLast;
118
- btnClass = button + (page < pages-1 ?
119
- '' : ' disabled');
120
- break;
121
-
122
- default:
123
- btnDisplay = button + 1;
124
- btnClass = page === button ?
125
- 'active' : '';
126
- break;
127
- }
128
-
129
- if ( btnDisplay ) {
130
- node = $('<li>', {
131
- 'class': classes.sPageButton+' '+btnClass,
132
- 'id': idx === 0 && typeof button === 'string' ?
133
- settings.sTableId +'_'+ button :
134
- null
135
- } )
136
- .append( $('<a>', {
137
- 'href': '#',
138
- 'aria-controls': settings.sTableId,
139
- 'aria-label': aria[ button ],
140
- 'data-dt-idx': counter,
141
- 'tabindex': settings.iTabIndex
142
- } )
143
- .html( btnDisplay )
144
- )
145
- .appendTo( container );
146
-
147
- settings.oApi._fnBindAction(
148
- node, {action: button}, clickHandler
149
- );
150
-
151
- counter++;
152
- }
153
- }
154
- }
155
- };
156
-
157
- // IE9 throws an 'unknown error' if document.activeElement is used
158
- // inside an iframe or frame.
159
- var activeEl;
160
-
161
- try {
162
- // Because this approach is destroying and recreating the paging
163
- // elements, focus is lost on the select button which is bad for
164
- // accessibility. So we want to restore focus once the draw has
165
- // completed
166
- activeEl = $(host).find(document.activeElement).data('dt-idx');
167
- }
168
- catch (e) {}
169
-
170
- attach(
171
- $(host).empty().html('<ul class="pagination"/>').children('ul'),
172
- buttons
173
- );
174
-
175
- if ( activeEl !== undefined ) {
176
- $(host).find( '[data-dt-idx='+activeEl+']' ).focus();
177
- }
178
- };
179
-
180
-
181
- return DataTable;
182
- }));
@@ -1,33 +0,0 @@
1
- /**
2
- * English - this is the default DataTables ships with
3
- * @name English
4
- * @anchor English
5
- * @author <a href="http://www.sprymedia.co.uk/">Allan Jardine</a>
6
- */
7
-
8
- {
9
- "sEmptyTable": "No data available in table",
10
- "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
11
- "sInfoEmpty": "Showing 0 to 0 of 0 entries",
12
- "sInfoFiltered": "(filtered from _MAX_ total entries)",
13
- "sInfoPostFix": "",
14
- "sInfoThousands": ",",
15
- "sLengthMenu": "&nbsp;with _MENU_ per page",
16
- "sLoadingRecords": "Loading...",
17
- "sProcessing": "Processing...",
18
- "sSearch": "Search:",
19
- "sZeroRecords": "No matching records found",
20
- "oPaginate": {
21
- "sFirst": "First",
22
- "sLast": "Last",
23
- "sNext": "Next",
24
- "sPrevious": "Previous"
25
- },
26
- "oAria": {
27
- "sSortAscending": ": activate to sort column ascending",
28
- "sSortDescending": ": activate to sort column descending"
29
- },
30
- "buttons": {
31
- "colvis": "Show / Hide"
32
- }
33
- }
@@ -1,36 +0,0 @@
1
- /**
2
- * Spanish translation
3
- * @name Spanish
4
- * @anchor Spanish
5
- * @author Giovanni Ariza, Aristobulo Gomez and Roberto Poo
6
- */
7
-
8
- {
9
- "sProcessing": "Procesando...",
10
- "sLengthMenu": "Mostrar _MENU_ registros",
11
- "sZeroRecords": "No se encontraron resultados",
12
- "sEmptyTable": "Ningún dato disponible en esta tabla =(",
13
- "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
14
- "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros",
15
- "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
16
- "sLengthMenu": "&nbsp; con _MENU_ por página",
17
- "sInfoPostFix": "",
18
- "sSearch": "Buscar:",
19
- "sUrl": "",
20
- "sInfoThousands": ",",
21
- "sLoadingRecords": "Cargando...",
22
- "oPaginate": {
23
- "sFirst": "Primero",
24
- "sLast": "Último",
25
- "sNext": "Siguiente",
26
- "sPrevious": "Anterior"
27
- },
28
- "oAria": {
29
- "sSortAscending": ": Activar para ordenar la columna de manera ascendente",
30
- "sSortDescending": ": Activar para ordenar la columna de manera descendente"
31
- },
32
- "buttons": {
33
- "copy": "Copiar",
34
- "colvis": "Mostrar/Ocultar"
35
- }
36
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * Dutch translation
3
- * @name Dutch
4
- * @anchor Dutch
5
- * @author <a href="http://www.blikgooien.nl/">Erwin Kerk</a> and <i>ashwin</i>
6
- */
7
-
8
- {
9
- "sProcessing": "Bezig...",
10
- "sLengthMenu": "_MENU_ resultaten weergeven",
11
- "sZeroRecords": "Geen resultaten gevonden",
12
- "sInfo": "_START_ tot _END_ van _TOTAL_ resultaten",
13
- "sInfoEmpty": "Geen resultaten om weer te geven",
14
- "sInfoFiltered": " (gefilterd uit _MAX_ resultaten)",
15
- "sInfoPostFix": "",
16
- "sSearch": "Zoeken:",
17
- "sEmptyTable": "Geen resultaten aanwezig in de tabel",
18
- "sInfoThousands": ".",
19
- "sLoadingRecords": "Een moment geduld aub - bezig met laden...",
20
- "oPaginate": {
21
- "sFirst": "Eerste",
22
- "sLast": "Laatste",
23
- "sNext": "Volgende",
24
- "sPrevious": "Vorige"
25
- },
26
- "oAria": {
27
- "sSortAscending": ": activeer om kolom oplopend te sorteren",
28
- "sSortDescending": ": activeer om kolom aflopend te sorteren"
29
- }
30
- }
@@ -1,31 +0,0 @@
1
- flash = (message, status = '') ->
2
- @context[0].oFeatures.bProcessing = false
3
-
4
- message ||= 'Processing...'
5
-
6
- if status == 'danger'
7
- message = 'Error: ' + message
8
-
9
- $processing = $(@table().node()).siblings('.dataTables_processing')
10
-
11
- if status.length > 0
12
- $processing.addClass("alert-#{status}")
13
-
14
- $processing.html(message).show()
15
-
16
- timeout = $processing.data('timeout')
17
- clearTimeout(timeout) if timeout
18
-
19
- delay = (if status == 'danger' then 4000 else 1500)
20
-
21
- $processing.html(message).data('timeout', setTimeout( =>
22
- $processing.html('Processing...')
23
- $processing.removeClass('alert-success alert-info alert-warning alert-danger alert-error')
24
- $processing.hide()
25
- @context[0].oFeatures.bProcessing = true
26
- , delay)
27
- )
28
-
29
- return @
30
-
31
- $.fn.DataTable.Api.register('flash()', flash);
@@ -1,217 +0,0 @@
1
- # To achieve inline crud, we use rails' data-remote links, and override their behaviour when inside a datatable
2
- # This works with EffectiveForm.remote_form which is part of the effective_bootstrap gem.
3
-
4
- # We click the New/Edit/Action button from the col-actions
5
- $(document).on 'ajax:beforeSend', '.dataTables_wrapper .col-actions', (e, xhr, settings) ->
6
- $action = $(e.target)
7
- $table = $(e.target).closest('table')
8
-
9
- return true if ('' + $action.data('inline')) == 'false'
10
-
11
- $params = $.param({_datatable_id: $table.attr('id'), _datatable_attributes: $table.data('attributes'), _datatable_action: true })
12
- settings.url += (if settings.url.indexOf('?') == -1 then '?' else '&') + $params
13
-
14
- if $action.closest('.effective-datatables-inline-row,table.dataTable').hasClass('effective-datatables-inline-row')
15
- # Nothing.
16
- else if $action.closest('tr').parent().prop('tagName') == 'THEAD'
17
- beforeNew($action)
18
- else
19
- beforeEdit($action)
20
-
21
- true
22
-
23
- # We have either completed the resource action, or fetched the inline form to load.
24
- $(document).on 'ajax:success', '.dataTables_wrapper .col-actions', (event, data) ->
25
- $action = $(event.target)
26
-
27
- return true if ('' + $action.data('inline')) == 'false'
28
-
29
- if data.length > 0
30
- return true if data.indexOf('Turbolinks.clearCache()') == 0 && data.includes("Turbolinks.visit(")
31
- return true if data.indexOf('<html') >= 0
32
-
33
- if ($action.data('method') || 'get') == 'get'
34
- if $action.closest('tr').parent().prop('tagName') == 'THEAD' then afterNew($action) else afterEdit($action)
35
- else
36
- afterAction($action)
37
-
38
- EffectiveForm.remote_form_payload = ''
39
- EffectiveForm.remote_form_commit = ''
40
- EffectiveForm.remote_form_flash = ''
41
-
42
- true
43
-
44
- # There was an error completing something
45
- $(document).on 'ajax:error', '.dataTables_wrapper', (event) ->
46
- $action = $(event.target)
47
-
48
- return true if ('' + $action.data('inline')) == 'false'
49
-
50
- afterError($action)
51
-
52
- EffectiveForm.remote_form_payload = ''
53
- EffectiveForm.remote_form_commit = ''
54
- EffectiveForm.remote_form_flash = ''
55
- true
56
-
57
- # Submitting an inline datatables form
58
- $(document).on 'ajax:beforeSend', '.dataTables_wrapper .col-inline-form', (e, xhr, settings) ->
59
- $table = $(e.target).closest('table')
60
-
61
- $params = $.param({_datatable_id: $table.attr('id'), _datatable_attributes: $table.data('attributes') })
62
- settings.url += (if settings.url.indexOf('?') == -1 then '?' else '&') + $params
63
-
64
- true
65
-
66
- # The inline form has been submitted successfully
67
- $(document).on 'effective-form:success', '.dataTables_wrapper .col-inline-form', (event, flash) ->
68
- $action = $(event.target)
69
-
70
- $tr = $action.closest('tr')
71
- $table = $tr.closest('table')
72
-
73
- if $tr.hasClass('effective-datatables-new-resource')
74
- $table.DataTable().flash(flash || 'Item created', 'success')
75
- $tr.fadeOut('slow')
76
-
77
- $actions = $table.children('thead').find('th.col-actions')
78
- $actions.children('svg').remove()
79
- $actions.children('a').fadeIn()
80
- else
81
- $table.DataTable().flash(flash || 'Item updated', 'success')
82
- $tr.fadeOut('slow')
83
-
84
- $table.DataTable().draw()
85
-
86
- beforeNew = ($action) ->
87
- $table = $action.closest('table')
88
- $th = $action.closest('th')
89
-
90
- # Hide New Button
91
- $th.children('a').hide()
92
-
93
- # Append spinner and show Processing
94
- $th.append($table.data('spinner'))
95
- $table.DataTable().flash()
96
- $table.one 'draw.dt', (event) ->
97
- $th.find('a').show().siblings('svg').remove() if event.target == event.currentTarget
98
-
99
- afterNew = ($action) ->
100
- $tr = $action.closest('tr')
101
- $table = $tr.closest('table')
102
- $action.siblings('svg').remove()
103
-
104
- html = buildRow($tr.children('th').length, EffectiveForm.remote_form_payload)
105
-
106
- $tr = $("<tr class='effective-datatables-inline-row effective-datatables-new-resource' role='row'>#{html}</tr>")
107
- $table.children('tbody').prepend($tr)
108
-
109
- expand($table)
110
- $tr.trigger('turbolinks:load')
111
- $tr.hide().fadeIn()
112
-
113
- beforeEdit = ($action) ->
114
- $table = $action.closest('table')
115
- $td = $action.closest('td')
116
-
117
- # Hide dropdown
118
- $td.find('.dropdown-toggle').dropdown('toggle')
119
- $td.children('.btn-group').hide()
120
- $td.children('a').hide()
121
-
122
- # Append spinner and show Processing
123
- $td.append($table.data('spinner'))
124
- $table.DataTable().flash()
125
-
126
- afterEdit = ($action) ->
127
- $tr = $action.closest('tr')
128
- $table = $tr.closest('table')
129
-
130
- html = buildRow($tr.children('td').length, EffectiveForm.remote_form_payload)
131
-
132
- $tr.data('inline-form-original-html', $tr.children().detach())
133
- $tr.html(html)
134
- $tr.addClass('effective-datatables-inline-row')
135
-
136
- expand($table)
137
- $tr.trigger('turbolinks:load')
138
- $tr.hide().fadeIn()
139
-
140
- # This is when one of the resource actions completes
141
- afterAction = ($action) ->
142
- $table = $action.closest('table')
143
-
144
- if EffectiveForm.remote_form_flash.length > 0
145
- flash = EffectiveForm.remote_form_flash[0]
146
- $table.DataTable().flash(flash[1], flash[0])
147
- else
148
- $table.DataTable().flash('Successfully ' + $action.attr('title'), 'success')
149
-
150
- $table.DataTable().draw()
151
-
152
- afterError = ($action) ->
153
- $table = $action.closest('table')
154
- $td = $action.closest('td')
155
-
156
- # Show dropdown
157
- $td.children('.btn-group').show()
158
-
159
- # Hide spinner
160
- $td.children('svg').hide()
161
-
162
- # Cancel
163
- cancel($table)
164
-
165
- # Don't redraw
166
- $table.DataTable().flash('unable to ' + ($action.attr('title') || 'complete action'), 'danger')
167
-
168
- buildRow = (length, payload) ->
169
- "<td class='col-inline-form' colspan='#{length-1}'><div class='container'>#{payload}</div></td>" +
170
- "<td class='col-actions col-actions-inline-form'>" +
171
- "<a href='#' class='btn btn-sm btn-outline-primary' title='Cancel' data-role='inline-form-cancel'>Cancel</a>" +
172
- "</td>"
173
-
174
- expand = ($table) ->
175
- $wrapper = $table.closest('.dataTables_wrapper').addClass('effective-datatables-inline-expanded')
176
- $table.on 'draw.dt', (event) ->
177
- $wrapper.removeClass('effective-datatables-inline-expanded') if event.target == event.currentTarget
178
-
179
- cancel = ($table) ->
180
- $wrapper = $table.closest('.dataTables_wrapper')
181
- if $wrapper.find('.effective-datatables-inline-row').length == 0
182
- $wrapper.removeClass('effective-datatables-inline-expanded')
183
-
184
- # Cancel button clicked. Blow away new tr, or restore edit tr
185
- # No data will have changed at this point
186
- $(document).on 'click', ".dataTables_wrapper a[data-role='inline-form-cancel']", (event) ->
187
- $tr = $(event.currentTarget).closest('tr')
188
-
189
- if $tr.hasClass('effective-datatables-new-resource')
190
- $tr.fadeOut('slow', ->
191
- $table = $(this).closest('table')
192
-
193
- $actions = $table.children('thead').find('th.col-actions')
194
- $actions.children('svg').remove()
195
- $actions.children('a').fadeIn()
196
-
197
- $(this).remove()
198
- cancel($table)
199
- )
200
- else
201
- $tr.fadeOut('slow', ->
202
- $table = $(this).closest('table')
203
- $tr.html($tr.data('inline-form-original-html'))
204
-
205
- $td = $tr.children('.col-actions').first()
206
- $td.children('svg').remove()
207
-
208
- $toggle = $td.find('.dropdown-toggle')
209
- $toggle.dropdown('toggle') if $toggle.parent().hasClass('show')
210
- $td.children('.btn-group').show()
211
- $td.children('a').show()
212
-
213
- $tr.removeClass('effective-datatables-inline-row').fadeIn()
214
- cancel($table)
215
- )
216
-
217
- false