tabulatr2 0.9.20 → 0.9.21

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +17 -0
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +4 -0
  5. data/Gemfile +4 -0
  6. data/app/assets/javascripts/tabulatr/_events.js +252 -0
  7. data/app/assets/javascripts/tabulatr/_pagination.js +85 -0
  8. data/app/assets/javascripts/tabulatr/_tabulatr.js +70 -372
  9. data/app/assets/javascripts/tabulatr/application.js +2 -0
  10. data/app/views/tabulatr/_tabulatr_actual_table.html.slim +7 -7
  11. data/app/views/tabulatr/_tabulatr_filter_dialog.html.slim +1 -1
  12. data/app/views/tabulatr/_tabulatr_static_table.html.slim +5 -3
  13. data/lib/tabulatr/data/data.rb +1 -1
  14. data/lib/tabulatr/data/dsl.rb +62 -86
  15. data/lib/tabulatr/data/filtering.rb +32 -52
  16. data/lib/tabulatr/data/sorting.rb +1 -1
  17. data/lib/tabulatr/params_builder.rb +50 -0
  18. data/lib/tabulatr/rails/action_view.rb +2 -2
  19. data/lib/tabulatr/rails/active_record.rb +3 -8
  20. data/lib/tabulatr/renderer/action.rb +1 -1
  21. data/lib/tabulatr/renderer/association.rb +3 -3
  22. data/lib/tabulatr/renderer/buttons.rb +1 -1
  23. data/lib/tabulatr/renderer/column.rb +40 -125
  24. data/lib/tabulatr/renderer/columns_from_block.rb +10 -7
  25. data/lib/tabulatr/renderer/renderer.rb +26 -15
  26. data/lib/tabulatr/version.rb +1 -1
  27. data/lib/tabulatr.rb +1 -0
  28. data/spec/dummy/app/controllers/products_controller.rb +5 -6
  29. data/spec/dummy/app/tabulatr_data/product_tabulatr_data.rb +6 -6
  30. data/spec/dummy/app/views/products/stupid_array.html.erb +20 -6
  31. data/spec/dummy/app/views/products/with_styling.html.erb +1 -1
  32. data/spec/dummy/app/views/products/without_filters.html.erb +1 -0
  33. data/spec/dummy/config/routes.rb +1 -0
  34. data/spec/features/tabulatrs_spec.rb +7 -2
  35. data/spec/lib/tabulatr/data/data_spec.rb +2 -2
  36. data/spec/lib/tabulatr/data/dsl_spec.rb +54 -4
  37. data/spec/lib/tabulatr/data/filtering_spec.rb +164 -7
  38. data/spec/lib/tabulatr/data/formatting_spec.rb +2 -2
  39. data/spec/lib/tabulatr/data/sorting_spec.rb +6 -6
  40. data/spec/lib/tabulatr/params_builder_spec.rb +19 -0
  41. data/spec/lib/tabulatr/renderer/association_spec.rb +29 -0
  42. data/spec/lib/tabulatr/renderer/renderer_spec.rb +8 -0
  43. data/spec/rails_helper.rb +4 -0
  44. metadata +13 -3
@@ -9,6 +9,8 @@ function Tabulatr(id){
9
9
  this.hasInfiniteScrolling = false;
10
10
  }
11
11
 
12
+ var tabulatr_tables;
13
+
12
14
  var cbfn = function(event, isInView, visiblePartX, visiblePartY) {
13
15
  if (isInView && visiblePartY !== 'top' && visiblePartY !== 'bottom') {
14
16
  var tableId = $(event.currentTarget).data('table');
@@ -22,106 +24,41 @@ var cbfn = function(event, isInView, visiblePartX, visiblePartY) {
22
24
  }
23
25
  };
24
26
 
25
- var tabulatr_tables;
26
27
  Tabulatr.prototype = {
27
28
  constructor: Tabulatr,
28
29
 
29
- createPaginationListItem: function(page, active){
30
- var $page = $('<li><a href="" data-page="'+ page +'">'+ page +'</a></li>');
31
- if(active){
32
- $page.addClass('active');
33
- }
34
- return $page;
30
+ updateTable: function(hash, forceReload) {
31
+ var $table = $('#'+ this.id);
32
+ this.storePage = this.pageShouldBeStored(hash.page, forceReload);
33
+ if((this.storePage && this.retrievePage($table, hash)) || this.locked){ return; }
34
+ this.locked = true;
35
+ this.showLoadingSpinner();
36
+ this.loadDataFromServer(hash);
35
37
  },
36
38
 
37
- updatePagination: function(currentPage, numPages){
38
- var $paginatorUl = $('.pagination[data-table='+ this.id +'] > ul');
39
-
40
- if($('table#'+ this.id).data('persistent')){
41
- $paginatorUl.html('<li><a href="#" data-tabulatr-reset="'+ this.id +'"><i class="fa fa-refresh"></i></a></li>');
42
- }else{
43
- $paginatorUl.html('');
44
- }
45
- if(numPages < 13){
46
- for(var i = 1; i <= numPages; i++){
47
- $paginatorUl.append(this.createPaginationListItem(i, (i == currentPage)));
48
- }
49
- }else{
50
- if(currentPage > 1){
51
- $paginatorUl.append(this.createPaginationListItem(1, false));
52
- }
53
-
54
- var between = Math.floor((1 + currentPage) / 2);
55
- if(between > 1 && between < currentPage - 2){
56
- $paginatorUl.append('<li><span>...</span></li>');
57
- $paginatorUl.append(this.createPaginationListItem(between, false));
58
- }
59
-
60
- if(currentPage > 4){
61
- $paginatorUl.append('<li><span>...</span></li>');
62
- }
63
-
64
- if(currentPage > 3){
65
- $paginatorUl.append(this.createPaginationListItem(currentPage-2, false));
66
- }
67
-
68
- if(currentPage > 2){
69
- $paginatorUl.append(this.createPaginationListItem(currentPage-1, false));
70
- }
71
-
72
- $paginatorUl.append(this.createPaginationListItem(currentPage, true));
73
-
74
- if(currentPage < numPages - 1){
75
- $paginatorUl.append(this.createPaginationListItem(currentPage+1, false));
76
- }
77
-
78
- if(currentPage < numPages - 2){
79
- $paginatorUl.append(this.createPaginationListItem(currentPage+2, false));
80
- }
81
-
82
- if(currentPage < numPages - 3){
83
- $paginatorUl.append('<li><span>...</span></li>');
84
- }
39
+ pageShouldBeStored: function(page, forceReload){
40
+ return page !== undefined && !forceReload;
41
+ },
85
42
 
86
- between = Math.floor((currentPage + numPages) / 2);
43
+ retrievePage: function(table, hash){
44
+ table.find('tbody tr').hide();
45
+ if(table.find('tbody tr[data-page='+ hash.page +']').length > 0){
46
+ table.find('tbody tr[data-page='+ hash.page +']').show();
87
47
 
88
- if(between > currentPage + 3 && between < numPages - 1){
89
- $paginatorUl.append(this.createPaginationListItem(between, false));
90
- $paginatorUl.append('<li><span>...</span></li>');
91
- }
92
- if(currentPage < numPages){
93
- $paginatorUl.append(this.createPaginationListItem(numPages, false));
48
+ var tabulatrPagination = new TabulatrPagination(
49
+ $('.pagination[data-table='+ this.id +'] a:last').data('page'), this.id);
50
+ tabulatrPagination.updatePagination(hash.page);
51
+ if(this.isAPersistedTable){
52
+ var data = this.createParameterString(hash, this.id);
53
+ localStorage[this.id] = JSON.stringify(data);
94
54
  }
55
+ return true;
95
56
  }
96
-
57
+ return false;
97
58
  },
98
59
 
99
- updateTable: function(hash, forceReload) {
100
- var $table = $('#'+ this.id);
60
+ getDataForAjax: function(hash){
101
61
  var data;
102
- if(hash.page !== undefined && !forceReload){
103
- //old page should be stored
104
- this.storePage = true;
105
- // check if this page was already loaded
106
- $table.find('tbody tr').hide();
107
- if($table.find('tbody tr[data-page='+ hash.page +']').length > 0){
108
- $table.find('tbody tr[data-page='+ hash.page +']').show();
109
-
110
- this.updatePagination(hash.page,
111
- $('.pagination[data-table='+ this.id +'] a:last').data('page'),
112
- this.id);
113
- if(this.isAPersistedTable){
114
- data = this.createParameterString(hash, this.id);
115
- localStorage[this.id] = JSON.stringify(data);
116
- }
117
- return;
118
- }
119
- }else{
120
- this.storePage = false;
121
- }
122
- if(this.locked){ return; }
123
- this.locked = true;
124
- this.showLoadingSpinner();
125
62
  if(this.initialRequest && this.isAPersistedTable && localStorage[this.id]){
126
63
  data = JSON.parse(localStorage[this.id]);
127
64
  }else{
@@ -130,6 +67,10 @@ Tabulatr.prototype = {
130
67
  localStorage[this.id] = JSON.stringify(data);
131
68
  }
132
69
  }
70
+ return data;
71
+ },
72
+
73
+ loadDataFromServer: function(hash){
133
74
  $.ajax({
134
75
  context: this,
135
76
  type: 'GET',
@@ -137,7 +78,7 @@ Tabulatr.prototype = {
137
78
  accepts: {
138
79
  json: 'application/json'
139
80
  },
140
- data: data,
81
+ data: this.getDataForAjax(hash),
141
82
  success: this.handleResponse,
142
83
  complete: this.hideLoadingSpinner,
143
84
  error: this.handleError
@@ -154,7 +95,9 @@ Tabulatr.prototype = {
154
95
 
155
96
  handleResponse: function(response) {
156
97
  this.insertTabulatrData(response);
157
- this.updatePagination(response.meta.page, response.meta.pages, response.meta.table_id);
98
+ var tabulatrPagination = new TabulatrPagination(
99
+ response.meta.pages, response.meta.table_id);
100
+ tabulatrPagination.updatePagination(response.meta.page);
158
101
  if($('.pagination[data-table='+ response.meta.table_id +']').length > 0){
159
102
  if(response.meta.page > response.meta.pages){
160
103
  this.updateTable({page: response.meta.pages});
@@ -217,7 +160,7 @@ Tabulatr.prototype = {
217
160
 
218
161
  makeAction: function(action, data){
219
162
  this.currentData = data;
220
- return unescape(action).replace(/{{([\w:]+)}}/g, this.replacer);
163
+ return decodeURI(action).replace(/{{([\w:]+)}}/g, this.replacer);
221
164
  },
222
165
 
223
166
  submitFilterForm: function(){
@@ -232,40 +175,15 @@ Tabulatr.prototype = {
232
175
  createParameterString: function(hash){
233
176
  var tableName = this.id.split('_')[0];
234
177
  if(hash === undefined){
235
- hash = {};
236
- hash.append = false;
237
- }
238
- var pagesize = hash.pagesize;
239
- if(pagesize === undefined){
240
- pagesize = $('table#'+ this.id).data('pagesize');
178
+ hash = {append: false};
241
179
  }
242
- if(hash.page === undefined){
243
- if(this.hasInfiniteScrolling){
244
- hash.page = Math.floor($('#'+ this.id +' tbody tr[class!=empty_row]').length/pagesize) + 1;
245
- }
246
- if(!isFinite(hash.page)){
247
- hash.page = 1;
248
- }
249
- }
250
- hash.pagesize = pagesize;
180
+ hash = this.getPageParams(hash);
251
181
  hash.arguments = $.map($('#'+ this.id +' th'), function(n){
252
182
  return $(n).data('tabulatr-column-name');
253
183
  }).filter(function(n){return n; }).join();
254
184
  hash.table_id = this.id;
255
185
  hash[tableName + '_search'] = $('input#'+ this.id +'_fuzzy_search_query').val();
256
- var form_array = $('.tabulatr_filter_form[data-table="'+ this.id +'"]')
257
- .find('input:visible,select:visible,input[type=hidden]').serializeArray();
258
- for(var i = 0; i < form_array.length; i++){
259
- if(hash[form_array[i].name] !== undefined){
260
- if(!Array.isArray(hash[form_array[i].name])){
261
- hash[form_array[i].name] = [hash[form_array[i].name]];
262
- }
263
- hash[form_array[i].name].push(form_array[i].value);
264
- }else{
265
- hash[form_array[i].name] = form_array[i].value;
266
- }
267
- }
268
- return hash;
186
+ return this.readParamsFromForm(hash);
269
187
  },
270
188
 
271
189
  localDate: function(value){
@@ -291,271 +209,51 @@ Tabulatr.prototype = {
291
209
  $('.tabulatr_count[data-table='+ tableId +']').html(count_string);
292
210
  },
293
211
 
294
- prepareTableForInsert: function(tableId, append, dataCount, actualCount){
295
- if(!append){
296
- if(this.storePage){
297
- $('#'+ tableId +' tbody tr').hide();
298
- }else{
299
- $('#'+ tableId +' tbody').html('');
300
- }
301
- }
302
- if(dataCount === 0 || this.currentCount() + dataCount >= actualCount){
303
- this.moreResults = false;
304
- $('.pagination_trigger[data-table='+ tableId +']').unbind('inview');
305
- }
306
- }
307
-
308
- };
309
-
310
- $(document).on('ready page:load', function(){
311
- tabulatr_tables = [];
312
-
313
- $('th.tabulatr-sortable').click(function(){
314
- var th = $(this);
315
- var sort_by = th.data('tabulatr-column-name');
316
- var dir = th.attr('data-sorted');
317
- var table = th.parents('table');
318
- var tableId = table.attr('id');
319
- var table_obj;
320
- for(var i = 0; i < tabulatr_tables.length; i++){
321
- if(tabulatr_tables[i].id === tableId){
322
- table_obj = tabulatr_tables[i];
323
- }
324
- }
325
- var tableName = table_obj.id.split('_')[0];
326
- table.find('th.tabulatr-sortable.sorted').removeClass('sorted').removeAttr('data-sorted');
327
- dir = (dir === 'asc') ? 'desc' : 'asc';
328
- th.addClass('sorted').attr('data-sorted', dir);
329
- $('.tabulatr_filter_form[data-table='+ tableId +'] input[name='+ tableName +'_sort]').val(sort_by + ' '+ dir);
330
- if(!table_obj.moreResults){
331
- table_obj.moreResults = true;
332
- if(table_obj.hasInfiniteScrolling){
333
- $('.pagination_trigger[data-table='+ tableId +']').bind('inview', cbfn);
334
- }
335
- }
336
- $($(this).parents('table').find('tbody tr')).remove();
337
-
338
- $('.tabulatr_mark_all[data-table='+ tableName +']').prop('checked', false).prop('indeterminate', false);
339
- table_obj.updateTable({});
340
- });
341
-
342
-
343
- $('.tabulatr_table').each(function(ix, el){
344
- if($('.pagination[data-table="'+ $(el).attr('id') +'"]').length === 0){
345
- $('.pagination_trigger[data-table="'+ $(el).attr('id') +'"]').bind('inview', cbfn);
346
- }
347
- });
348
-
349
- $('.batch-action-inputs').click(function(){
350
- var a = $(this);
351
- var name = a.data('do-batch-action-name');
352
- var key = a.data('do-batch-action');
353
- var tableId = a.data('table-id');
354
- var params = {page: 1};
355
- params[name] = key;
356
- params.tabulatr_checked = {checked_ids: jQuery.map($('#'+ tableId +' .tabulatr-checkbox:checked'), function(el){return $(el).val();}).join(',')};
357
- var confirmation = true;
358
- if(params.tabulatr_checked.checked_ids == ''){
359
- confirmation = confirm(a.parents('ul').data('confirm-text'));
360
- }
361
- if(confirmation){
362
- $('.tabulatr_mark_all[data-table='+ tableId +']').prop('indeterminate', false).prop('checked', false);
363
- $('#'+ tableId +' .tabulatr-wrench').addClass('disabled');
364
- var table_obj;
365
- for(var i = 0; i < tabulatr_tables.length; i++){
366
- if(tabulatr_tables[i].id === tableId){
367
- table_obj = tabulatr_tables[i];
212
+ readParamsFromForm: function(hash){
213
+ var form_array = $('.tabulatr_filter_form[data-table="'+ this.id +'"]')
214
+ .find('input:visible,select:visible,input[type=hidden]').serializeArray();
215
+ for(var i = 0; i < form_array.length; i++){
216
+ if(hash[form_array[i].name] !== undefined){
217
+ if(!Array.isArray(hash[form_array[i].name])){
218
+ hash[form_array[i].name] = [hash[form_array[i].name]];
368
219
  }
369
- }
370
- table_obj.updateTable(params, true);
371
- }
372
- });
373
-
374
- $('form.tabulatr-fuzzy-search').submit(function(){
375
- var tableId = $(this).data('table');
376
- var table_obj;
377
- for(var i = 0; i < tabulatr_tables.length; i++){
378
- if(tabulatr_tables[i].id === tableId){
379
- table_obj = tabulatr_tables[i];
380
- }
381
- }
382
- if(table_obj.hasInfiniteScrolling){
383
- $('.pagination_trigger[data-table='+ tableId +']').unbind('inview', cbfn);
384
- $('.pagination_trigger[data-table='+ tableId +']').bind('inview', cbfn);
385
- }
386
- table_obj.updateTable({page: 1, append: false}, true);
387
- return false;
388
- });
389
-
390
- $('form.tabulatr_filter_form input, form.tabulatr_filter_form select').change(function(){
391
- $(this).parents('form.tabulatr_filter_form').submit();
392
- });
393
-
394
- $('form.tabulatr_filter_form').submit(function(){
395
- var tableId = $(this).data('table');
396
- var table_obj;
397
- for(var i = 0; i < tabulatr_tables.length; i++){
398
- if(tabulatr_tables[i].id === tableId){
399
- table_obj = tabulatr_tables[i];
400
- }
401
- }
402
- table_obj.submitFilterForm();
403
- return false;
404
- });
405
-
406
- $('.tabulatr_mark_all').click(function(){
407
- var tableId = $(this).parents('table').prop('id');
408
- var table_obj;
409
- for(var i = 0; i < tabulatr_tables.length; i++){
410
- if(tabulatr_tables[i].id === tableId){
411
- table_obj = tabulatr_tables[i];
412
- }
413
- }
414
- if($(this).is(':checked')){
415
- $('#'+ tableId +' tr[data-page]:visible input[type=checkbox]').prop('checked', true);
416
- $('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
417
- }else{
418
- $('#'+ tableId +' tr[data-page]:visible input[type=checkbox]').prop('checked', false);
419
- if(table_obj.checkIfCheckboxesAreMarked()){
420
- $('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
220
+ hash[form_array[i].name].push(form_array[i].value);
421
221
  }else{
422
- $('#'+ tableId +' .tabulatr-wrench').addClass('disabled');
222
+ hash[form_array[i].name] = form_array[i].value;
423
223
  }
424
224
  }
425
- });
225
+ return hash;
226
+ },
426
227
 
427
- $('.tabulatr_table').on('click', 'input.tabulatr-checkbox', function(){
428
- var $table = $(this).closest('.tabulatr_table');
429
- var tableId = $table.attr('id');
430
- var $markAllCheckbox = $table.find('.tabulatr_mark_all');
431
- var table_obj;
432
- for(var i = 0; i < tabulatr_tables.length; i++){
433
- if(tabulatr_tables[i].id === tableId){
434
- table_obj = tabulatr_tables[i];
435
- }
228
+ getPageParams: function(hash){
229
+ var pagesize = hash.pagesize;
230
+ if(pagesize === undefined){
231
+ pagesize = $('table#'+ this.id).data('pagesize');
436
232
  }
437
- if($(this).is(':checked')){
438
- if($('#'+ tableId +' tr[data-page]:visible input[type=checkbox]').not(':checked').length > 0){
439
- $markAllCheckbox.prop("indeterminate", true);
440
- }else{
441
- $markAllCheckbox.prop('indeterminate', false);
442
- $markAllCheckbox.prop('checked', true);
233
+ if(hash.page === undefined){
234
+ if(this.hasInfiniteScrolling){
235
+ hash.page = Math.floor($('#'+ this.id +' tbody tr[class!=empty_row]').length/pagesize) + 1;
443
236
  }
444
- $('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
445
- }else{
446
- if($('#'+ tableId +' tr[data-page]:visible input[type=checkbox]:checked').length > 0){
447
- $markAllCheckbox.prop('indeterminate', true);
448
- $('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
449
- }else{
450
- $markAllCheckbox.prop('indeterminate', false);
451
- $markAllCheckbox.prop('checked', false);
452
- if(table_obj.checkIfCheckboxesAreMarked()){
453
- $('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
454
- }else{
455
- $('#'+ tableId +' .tabulatr-wrench').addClass('disabled');
456
- }
237
+ if(!isFinite(hash.page)){
238
+ hash.page = 1;
457
239
  }
458
240
  }
459
- });
241
+ hash.pagesize = pagesize;
242
+ return hash;
243
+ },
460
244
 
461
- $('.tabulatr-per-page a').click(function(){
462
- if($(this).hasClass('active')){ return false; }
463
- $(this).closest('div').find('a').removeClass('active');
464
- $(this).addClass('active');
465
- var tableId = $(this).closest('div').data('table');
466
- var table_obj;
467
- for(var i = 0; i < tabulatr_tables.length; i++){
468
- if(tabulatr_tables[i].id === tableId){
469
- table_obj = tabulatr_tables[i];
470
- }
471
- }
472
- table_obj.moreResults = true;
473
- if(table_obj.hasInfiniteScrolling){
474
- $('.pagination_trigger[data-table='+ tableId +']').bind('inview', cbfn);
475
- }
476
- if(typeof(Storage) !== undefined){
477
- localStorage.tabulatr_page_display_count = $(this).data('items-per-page');
478
- }
479
- table_obj.updateTable({page: 1}, true);
480
- });
481
-
482
- $(document).on('click', 'a[data-tabulatr-reset]',function(){
483
- var a = $(this);
484
- var tableObj;
485
- var tableId = a.data('tabulatrReset');
486
- a.parents('.tabulatr-outer-wrapper').removeClass('filtered');
487
- for(var i = 0; i < tabulatr_tables.length; i++){
488
- if(tabulatr_tables[i].id === tableId){
489
- tableObj = tabulatr_tables[i];
490
- tableObj.resetTable();
491
- return false;
245
+ prepareTableForInsert: function(tableId, append, dataCount, actualCount){
246
+ if(!append){
247
+ if(this.storePage){
248
+ $('#'+ tableId +' tbody tr').hide();
249
+ }else{
250
+ $('#'+ tableId +' tbody').html('');
492
251
  }
493
252
  }
494
- });
495
-
496
- if($('.tabulatr_table:not(".tabulatr_static_table")').length > 0){
497
- if(typeof(Storage) !== undefined){
498
- var count = localStorage.tabulatr_page_display_count;
499
- if(count !== undefined){
500
- $('.tabulatr-per-page a').removeClass('active');
501
- $('.tabulatr-per-page a[data-items-per-page='+ count +']').
502
- addClass('active');
503
- }
253
+ if(dataCount === 0 || this.currentCount() + dataCount >= actualCount){
254
+ this.moreResults = false;
255
+ $('.pagination_trigger[data-table='+ tableId +']').unbind('inview');
504
256
  }
505
- var tableObj, tableId, tabulatrTable;
506
- $('.tabulatr_table:not(".tabulatr_static_table")').each(function(ix, el){
507
- tableId = $(el).attr('id');
508
- tabulatrTable = new Tabulatr(tableId);
509
- if($(el).data('persistent')){
510
- tabulatrTable.isAPersistedTable = true;
511
- }
512
- if($('.pagination[data-table='+ tableId +']').length === 0){
513
- tabulatrTable.hasInfiniteScrolling = true;
514
- }
515
- tabulatr_tables.push(tabulatrTable);
516
- for(var i = 0; i < tabulatr_tables.length; i++){
517
- if(tabulatr_tables[i].id === tableId){
518
- tableObj = tabulatr_tables[i];
519
- }
520
- }
521
- tableObj.updateTable({}, false);
522
- });
523
257
  }
524
258
 
525
- $(document).on('click', 'a[data-show-filters-for]', function(){
526
- var a = $(this);
527
- a.parents('.tabulatr-outer-wrapper').addClass('filtered');
528
- });
529
-
530
- });
531
-
532
- $(document).on('click', '.pagination a[data-page]', function(){
533
- var a = $(this);
534
- if(a.parent().hasClass('active') ||
535
- a.parent().hasClass('disabled')){
536
- return false;
537
- }
538
- var tableId = $(a).closest('.pagination').data('table');
539
- $('.tabulatr_mark_all[data-table='+ tableId +']').prop('checked', false);
540
- $('.tabulatr_mark_all[data-table='+ tableId +']').prop('indeterminate', false);
541
- var table_obj;
542
- for(var i = 0; i < tabulatr_tables.length; i++){
543
- if(tabulatr_tables[i].id === tableId){
544
- table_obj = tabulatr_tables[i];
545
- }
546
- }
547
- table_obj.updateTable({append: false, page: a.data('page')});
548
- return false;
549
- });
550
-
551
-
552
- $(document).on('change', 'select[data-tabulatr-date-filter]', function() {
553
- var select = $(this);
554
- var option = select.find('option:selected');
555
- var val = option.val();
556
- if (val === 'from_to') {
557
- select.parents('.tabulatr-filter-row').find(".from_to").show().removeClass('hidden');
558
- } else {
559
- select.parents('.tabulatr-filter-row').find(".from_to").hide().val('');
560
- }
561
- });
259
+ };
@@ -1,3 +1,5 @@
1
1
  //= require ./_tabulatr
2
2
  //= require ./_storage
3
+ //= require ./_pagination
4
+ //= require ./_events
3
5
  //= require ./jquery.inview.min
@@ -25,17 +25,17 @@
25
25
  thead
26
26
  tr
27
27
  - columns.each do |column|
28
- - classes = column.sortable ? ['tabulatr-sortable'] : []
29
- - classes = [classes, "tabulatr-column-#{column.coltype}", column.classes].flatten.compact.join(' ')
30
- th data-tabulatr-column-name=column.full_name style=column.html_header_style class=classes
31
- = column.human_name
28
+ - classes = column.col_options.sortable ? ['tabulatr-sortable'] : []
29
+ - classes = [classes, "tabulatr-column-#{column.coltype}", column.col_options.classes].flatten.compact.join(' ')
30
+ = content_tag('th', column.col_options.header_html.merge(:'data-tabulatr-column-name' => column.full_name, class: classes)) do
31
+ - column.human_name
32
32
  tbody
33
33
  tfoot
34
34
  tr.empty_row
35
35
  - columns.each do |column|
36
- - classes = column.sortable ? ['tabulatr-sortable'] : []
37
- - classes = [classes, "tabulatr-column-#{column.coltype}", column.classes].flatten.compact.join(' ')
38
- td data-tabulatr-column-name=column.full_name data-tabulatr-type=column.coltype style=column.html_cell_style class=classes
36
+ - classes = column.col_options.sortable ? ['tabulatr-sortable'] : []
37
+ - classes = [classes, "tabulatr-column-#{column.coltype}", column.col_options.classes].flatten.compact.join(' ')
38
+ = content_tag('td', column.col_options.data_html.merge(:'data-tabulatr-column-name' => column.full_name, :'data-tabulatr-type' => column.coltype, class: classes)){}
39
39
  .tabulatr-spinner-box data-table=table_id
40
40
  = image_tag "#{Tabulatr.spinner}-loader.gif"
41
41
  span.pagination_trigger data-table="#{table_id}"
@@ -44,7 +44,7 @@
44
44
  - filter_name = "tabulatr_form_#{name}"
45
45
 
46
46
  label.control-label for=filter_name
47
- = column.filter_label || column.human_name
47
+ = column.col_options.filter_label || column.human_name
48
48
 
49
49
  - if column.filter.is_a?(Hash) || column.filter.is_a?(Array) || column.filter.is_a?(String)
50
50
  select.form-control.no-chosen id=name name=iname
@@ -23,11 +23,13 @@ table class="#{table_options[:html_class]} tabulatr_static_table"
23
23
  thead
24
24
  tr
25
25
  - columns.each do |column|
26
- th data-tabulatr-column-name=column.full_name style=column.html_header_style class=["tabulatr-column-#{column.coltype}", column.classes].flatten.compact.join(' ')
27
- = column.human_name
26
+ - classes = ["tabulatr-column#{column.coltype}", column.col_options.classes].flatten.compact.join(' ')
27
+ = content_tag('th', column.col_options.header_html.merge(:'data-tabulatr-column-name' => column.full_name, class: classes)) do
28
+ - column.human_name
28
29
  tbody
29
30
  - records.each do |record|
30
31
  tr data-id=record.try(:id)
31
32
  - columns.each do |column|
32
- td data-tabulatr-column-name=column.full_name data-tabulatr-type=column.coltype style=column.html_cell_style class=["tabulatr-column-#{column.coltype}", column.classes].flatten.compact.join(' ')
33
+ - classes = ["tabulatr-column-#{column.coltype}", column.col_options.classes].flatten.compact.join(' ')
34
+ = content_tag('td', column.col_options.data_html.merge(:'data-tabulatr-column-name' => column.full_name, :'data-tabulatr-type' => column.coltype, class: classes)) do
33
35
  = column.value_for(record, self)
@@ -35,7 +35,7 @@ class Tabulatr::Data
35
35
  table_columns.map do |col|
36
36
  next if col.is_a? Tabulatr::Renderer::Checkbox
37
37
  col.klass = @base.reflect_on_association(col.table_name).try(:klass) || @base
38
- col.determine_appropriate_filter! if col.filter === true
38
+ col.determine_appropriate_filter! if col.col_options.filter === true
39
39
  end
40
40
  end
41
41