tabulatr2 0.9.20 → 0.9.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +17 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +4 -0
- data/app/assets/javascripts/tabulatr/_events.js +252 -0
- data/app/assets/javascripts/tabulatr/_pagination.js +85 -0
- data/app/assets/javascripts/tabulatr/_tabulatr.js +70 -372
- data/app/assets/javascripts/tabulatr/application.js +2 -0
- data/app/views/tabulatr/_tabulatr_actual_table.html.slim +7 -7
- data/app/views/tabulatr/_tabulatr_filter_dialog.html.slim +1 -1
- data/app/views/tabulatr/_tabulatr_static_table.html.slim +5 -3
- data/lib/tabulatr/data/data.rb +1 -1
- data/lib/tabulatr/data/dsl.rb +62 -86
- data/lib/tabulatr/data/filtering.rb +32 -52
- data/lib/tabulatr/data/sorting.rb +1 -1
- data/lib/tabulatr/params_builder.rb +50 -0
- data/lib/tabulatr/rails/action_view.rb +2 -2
- data/lib/tabulatr/rails/active_record.rb +3 -8
- data/lib/tabulatr/renderer/action.rb +1 -1
- data/lib/tabulatr/renderer/association.rb +3 -3
- data/lib/tabulatr/renderer/buttons.rb +1 -1
- data/lib/tabulatr/renderer/column.rb +40 -125
- data/lib/tabulatr/renderer/columns_from_block.rb +10 -7
- data/lib/tabulatr/renderer/renderer.rb +26 -15
- data/lib/tabulatr/version.rb +1 -1
- data/lib/tabulatr.rb +1 -0
- data/spec/dummy/app/controllers/products_controller.rb +5 -6
- data/spec/dummy/app/tabulatr_data/product_tabulatr_data.rb +6 -6
- data/spec/dummy/app/views/products/stupid_array.html.erb +20 -6
- data/spec/dummy/app/views/products/with_styling.html.erb +1 -1
- data/spec/dummy/app/views/products/without_filters.html.erb +1 -0
- data/spec/dummy/config/routes.rb +1 -0
- data/spec/features/tabulatrs_spec.rb +7 -2
- data/spec/lib/tabulatr/data/data_spec.rb +2 -2
- data/spec/lib/tabulatr/data/dsl_spec.rb +54 -4
- data/spec/lib/tabulatr/data/filtering_spec.rb +164 -7
- data/spec/lib/tabulatr/data/formatting_spec.rb +2 -2
- data/spec/lib/tabulatr/data/sorting_spec.rb +6 -6
- data/spec/lib/tabulatr/params_builder_spec.rb +19 -0
- data/spec/lib/tabulatr/renderer/association_spec.rb +29 -0
- data/spec/lib/tabulatr/renderer/renderer_spec.rb +8 -0
- data/spec/rails_helper.rb +4 -0
- metadata +13 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56841eb8e3e3607969b5d1c47e3883491379b89e
|
4
|
+
data.tar.gz: 0d4161bd6fc978cb2eb49798da66e3ec55733330
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25d64c35946e6f69017326178eb33e80d8cebf8bf10aaf58f55408fd46986eddcd59a98f8ce2e95f3ee65cd240763f57d18c9f3c7f16d7173c8fe9eddf07cffa
|
7
|
+
data.tar.gz: b6aa5878acc666f2f5f17ac07230ab73c2c91032a0f9ac0f60bfa55236d2861da8f0e6ff44ba30244c8771879e25cf08e5aa07dbea88c6cd240905afcdb75f90
|
data/.codeclimate.yml
ADDED
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
@@ -0,0 +1,252 @@
|
|
1
|
+
$(document).on('ready page:load', function(){
|
2
|
+
tabulatr_tables = [];
|
3
|
+
|
4
|
+
$('th.tabulatr-sortable').click(function(){
|
5
|
+
var th = $(this);
|
6
|
+
var sort_by = th.data('tabulatr-column-name');
|
7
|
+
var dir = th.attr('data-sorted');
|
8
|
+
var table = th.parents('table');
|
9
|
+
var tableId = table.attr('id');
|
10
|
+
var table_obj;
|
11
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
12
|
+
if(tabulatr_tables[i].id === tableId){
|
13
|
+
table_obj = tabulatr_tables[i];
|
14
|
+
}
|
15
|
+
}
|
16
|
+
var tableName = table_obj.id.split('_')[0];
|
17
|
+
table.find('th.tabulatr-sortable.sorted').removeClass('sorted').removeAttr('data-sorted');
|
18
|
+
dir = (dir === 'asc') ? 'desc' : 'asc';
|
19
|
+
th.addClass('sorted').attr('data-sorted', dir);
|
20
|
+
$('.tabulatr_filter_form[data-table='+ tableId +'] input[name='+ tableName +'_sort]').val(sort_by + ' '+ dir);
|
21
|
+
if(!table_obj.moreResults){
|
22
|
+
table_obj.moreResults = true;
|
23
|
+
if(table_obj.hasInfiniteScrolling){
|
24
|
+
$('.pagination_trigger[data-table='+ tableId +']').bind('inview', cbfn);
|
25
|
+
}
|
26
|
+
}
|
27
|
+
$($(this).parents('table').find('tbody tr')).remove();
|
28
|
+
|
29
|
+
$('.tabulatr_mark_all[data-table='+ tableName +']').prop('checked', false).prop('indeterminate', false);
|
30
|
+
table_obj.updateTable({});
|
31
|
+
});
|
32
|
+
|
33
|
+
|
34
|
+
$('.tabulatr_table').each(function(ix, el){
|
35
|
+
if($('.pagination[data-table="'+ $(el).attr('id') +'"]').length === 0){
|
36
|
+
$('.pagination_trigger[data-table="'+ $(el).attr('id') +'"]').bind('inview', cbfn);
|
37
|
+
}
|
38
|
+
});
|
39
|
+
|
40
|
+
$('.batch-action-inputs').click(function(){
|
41
|
+
var a = $(this);
|
42
|
+
var name = a.data('do-batch-action-name');
|
43
|
+
var key = a.data('do-batch-action');
|
44
|
+
var tableId = a.data('table-id');
|
45
|
+
var params = {page: 1};
|
46
|
+
params[name] = key;
|
47
|
+
params.tabulatr_checked = {checked_ids: jQuery.map($('#'+ tableId +' .tabulatr-checkbox:checked'), function(el){return $(el).val();}).join(',')};
|
48
|
+
var confirmation = true;
|
49
|
+
if(params.tabulatr_checked.checked_ids === ''){
|
50
|
+
confirmation = window.confirm(a.parents('ul').data('confirm-text'));
|
51
|
+
}
|
52
|
+
if(confirmation){
|
53
|
+
$('.tabulatr_mark_all[data-table='+ tableId +']').prop('indeterminate', false).prop('checked', false);
|
54
|
+
$('#'+ tableId +' .tabulatr-wrench').addClass('disabled');
|
55
|
+
var table_obj;
|
56
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
57
|
+
if(tabulatr_tables[i].id === tableId){
|
58
|
+
table_obj = tabulatr_tables[i];
|
59
|
+
}
|
60
|
+
}
|
61
|
+
table_obj.updateTable(params, true);
|
62
|
+
}
|
63
|
+
});
|
64
|
+
|
65
|
+
$('form.tabulatr-fuzzy-search').submit(function(){
|
66
|
+
var tableId = $(this).data('table');
|
67
|
+
var table_obj;
|
68
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
69
|
+
if(tabulatr_tables[i].id === tableId){
|
70
|
+
table_obj = tabulatr_tables[i];
|
71
|
+
}
|
72
|
+
}
|
73
|
+
if(table_obj.hasInfiniteScrolling){
|
74
|
+
$('.pagination_trigger[data-table='+ tableId +']').unbind('inview', cbfn);
|
75
|
+
$('.pagination_trigger[data-table='+ tableId +']').bind('inview', cbfn);
|
76
|
+
}
|
77
|
+
table_obj.updateTable({page: 1, append: false}, true);
|
78
|
+
return false;
|
79
|
+
});
|
80
|
+
|
81
|
+
$('form.tabulatr_filter_form input, form.tabulatr_filter_form select').change(function(){
|
82
|
+
$(this).parents('form.tabulatr_filter_form').submit();
|
83
|
+
});
|
84
|
+
|
85
|
+
$('form.tabulatr_filter_form').submit(function(){
|
86
|
+
var tableId = $(this).data('table');
|
87
|
+
var table_obj;
|
88
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
89
|
+
if(tabulatr_tables[i].id === tableId){
|
90
|
+
table_obj = tabulatr_tables[i];
|
91
|
+
}
|
92
|
+
}
|
93
|
+
table_obj.submitFilterForm();
|
94
|
+
return false;
|
95
|
+
});
|
96
|
+
|
97
|
+
$('.tabulatr_mark_all').click(function(){
|
98
|
+
var tableId = $(this).parents('table').prop('id');
|
99
|
+
var table_obj;
|
100
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
101
|
+
if(tabulatr_tables[i].id === tableId){
|
102
|
+
table_obj = tabulatr_tables[i];
|
103
|
+
}
|
104
|
+
}
|
105
|
+
if($(this).is(':checked')){
|
106
|
+
$('#'+ tableId +' tr[data-page]:visible input[type=checkbox]').prop('checked', true);
|
107
|
+
$('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
|
108
|
+
}else{
|
109
|
+
$('#'+ tableId +' tr[data-page]:visible input[type=checkbox]').prop('checked', false);
|
110
|
+
if(table_obj.checkIfCheckboxesAreMarked()){
|
111
|
+
$('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
|
112
|
+
}else{
|
113
|
+
$('#'+ tableId +' .tabulatr-wrench').addClass('disabled');
|
114
|
+
}
|
115
|
+
}
|
116
|
+
});
|
117
|
+
|
118
|
+
$('.tabulatr_table').on('click', 'input.tabulatr-checkbox', function(){
|
119
|
+
var $table = $(this).closest('.tabulatr_table');
|
120
|
+
var tableId = $table.attr('id');
|
121
|
+
var $markAllCheckbox = $table.find('.tabulatr_mark_all');
|
122
|
+
var table_obj;
|
123
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
124
|
+
if(tabulatr_tables[i].id === tableId){
|
125
|
+
table_obj = tabulatr_tables[i];
|
126
|
+
}
|
127
|
+
}
|
128
|
+
if($(this).is(':checked')){
|
129
|
+
if($('#'+ tableId +' tr[data-page]:visible input[type=checkbox]').not(':checked').length > 0){
|
130
|
+
$markAllCheckbox.prop("indeterminate", true);
|
131
|
+
}else{
|
132
|
+
$markAllCheckbox.prop('indeterminate', false);
|
133
|
+
$markAllCheckbox.prop('checked', true);
|
134
|
+
}
|
135
|
+
$('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
|
136
|
+
}else{
|
137
|
+
if($('#'+ tableId +' tr[data-page]:visible input[type=checkbox]:checked').length > 0){
|
138
|
+
$markAllCheckbox.prop('indeterminate', true);
|
139
|
+
$('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
|
140
|
+
}else{
|
141
|
+
$markAllCheckbox.prop('indeterminate', false);
|
142
|
+
$markAllCheckbox.prop('checked', false);
|
143
|
+
if(table_obj.checkIfCheckboxesAreMarked()){
|
144
|
+
$('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
|
145
|
+
}else{
|
146
|
+
$('#'+ tableId +' .tabulatr-wrench').addClass('disabled');
|
147
|
+
}
|
148
|
+
}
|
149
|
+
}
|
150
|
+
});
|
151
|
+
|
152
|
+
$('.tabulatr-per-page a').click(function(){
|
153
|
+
if($(this).hasClass('active')){ return false; }
|
154
|
+
$(this).closest('div').find('a').removeClass('active');
|
155
|
+
$(this).addClass('active');
|
156
|
+
var tableId = $(this).closest('div').data('table');
|
157
|
+
var table_obj;
|
158
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
159
|
+
if(tabulatr_tables[i].id === tableId){
|
160
|
+
table_obj = tabulatr_tables[i];
|
161
|
+
}
|
162
|
+
}
|
163
|
+
table_obj.moreResults = true;
|
164
|
+
if(table_obj.hasInfiniteScrolling){
|
165
|
+
$('.pagination_trigger[data-table='+ tableId +']').bind('inview', cbfn);
|
166
|
+
}
|
167
|
+
if(typeof(Storage) !== undefined){
|
168
|
+
localStorage.tabulatr_page_display_count = $(this).data('items-per-page');
|
169
|
+
}
|
170
|
+
table_obj.updateTable({page: 1}, true);
|
171
|
+
});
|
172
|
+
|
173
|
+
$(document).on('click', 'a[data-tabulatr-reset]',function(){
|
174
|
+
var a = $(this);
|
175
|
+
var tableObj;
|
176
|
+
var tableId = a.data('tabulatrReset');
|
177
|
+
a.parents('.tabulatr-outer-wrapper').removeClass('filtered');
|
178
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
179
|
+
if(tabulatr_tables[i].id === tableId){
|
180
|
+
tableObj = tabulatr_tables[i];
|
181
|
+
tableObj.resetTable();
|
182
|
+
return false;
|
183
|
+
}
|
184
|
+
}
|
185
|
+
});
|
186
|
+
|
187
|
+
if($('.tabulatr_table:not(".tabulatr_static_table")').length > 0){
|
188
|
+
if(typeof(Storage) !== undefined){
|
189
|
+
var count = localStorage.tabulatr_page_display_count;
|
190
|
+
if(count !== undefined){
|
191
|
+
$('.tabulatr-per-page a').removeClass('active');
|
192
|
+
$('.tabulatr-per-page a[data-items-per-page='+ count +']').
|
193
|
+
addClass('active');
|
194
|
+
}
|
195
|
+
}
|
196
|
+
var tableObj, tableId, tabulatrTable;
|
197
|
+
$('.tabulatr_table:not(".tabulatr_static_table")').each(function(ix, el){
|
198
|
+
tableId = $(el).attr('id');
|
199
|
+
tabulatrTable = new Tabulatr(tableId);
|
200
|
+
if($(el).data('persistent')){
|
201
|
+
tabulatrTable.isAPersistedTable = true;
|
202
|
+
}
|
203
|
+
if($('.pagination[data-table='+ tableId +']').length === 0){
|
204
|
+
tabulatrTable.hasInfiniteScrolling = true;
|
205
|
+
}
|
206
|
+
tabulatr_tables.push(tabulatrTable);
|
207
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
208
|
+
if(tabulatr_tables[i].id === tableId){
|
209
|
+
tableObj = tabulatr_tables[i];
|
210
|
+
}
|
211
|
+
}
|
212
|
+
tableObj.updateTable({}, false);
|
213
|
+
});
|
214
|
+
}
|
215
|
+
|
216
|
+
$(document).on('click', 'a[data-show-filters-for]', function(){
|
217
|
+
var a = $(this);
|
218
|
+
a.parents('.tabulatr-outer-wrapper').addClass('filtered');
|
219
|
+
});
|
220
|
+
|
221
|
+
});
|
222
|
+
|
223
|
+
$(document).on('click', '.pagination a[data-page]', function(){
|
224
|
+
var a = $(this);
|
225
|
+
if(a.parent().hasClass('active') ||
|
226
|
+
a.parent().hasClass('disabled')){
|
227
|
+
return false;
|
228
|
+
}
|
229
|
+
var tableId = $(a).closest('.pagination').data('table');
|
230
|
+
$('.tabulatr_mark_all[data-table='+ tableId +']').prop('checked', false);
|
231
|
+
$('.tabulatr_mark_all[data-table='+ tableId +']').prop('indeterminate', false);
|
232
|
+
var table_obj;
|
233
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
234
|
+
if(tabulatr_tables[i].id === tableId){
|
235
|
+
table_obj = tabulatr_tables[i];
|
236
|
+
}
|
237
|
+
}
|
238
|
+
table_obj.updateTable({append: false, page: a.data('page')});
|
239
|
+
return false;
|
240
|
+
});
|
241
|
+
|
242
|
+
|
243
|
+
$(document).on('change', 'select[data-tabulatr-date-filter]', function() {
|
244
|
+
var select = $(this);
|
245
|
+
var option = select.find('option:selected');
|
246
|
+
var val = option.val();
|
247
|
+
if (val === 'from_to') {
|
248
|
+
select.parents('.tabulatr-filter-row').find(".from_to").show().removeClass('hidden');
|
249
|
+
} else {
|
250
|
+
select.parents('.tabulatr-filter-row').find(".from_to").hide().val('');
|
251
|
+
}
|
252
|
+
});
|
@@ -0,0 +1,85 @@
|
|
1
|
+
function TabulatrPagination(pageCount, tableId){
|
2
|
+
this.pageCount = pageCount;
|
3
|
+
this.tableId = tableId;
|
4
|
+
}
|
5
|
+
|
6
|
+
TabulatrPagination.prototype = {
|
7
|
+
constructor: TabulatrPagination,
|
8
|
+
|
9
|
+
createPaginationListItem: function(page, active){
|
10
|
+
var $page = $('<li><a href="" data-page="'+ page +'">'+ page +'</a></li>');
|
11
|
+
if(active){
|
12
|
+
$page.addClass('active');
|
13
|
+
}
|
14
|
+
return $page;
|
15
|
+
},
|
16
|
+
|
17
|
+
updatePagination: function(currentPage){
|
18
|
+
var $paginatorUl = $('.pagination[data-table='+ this.tableId +'] > ul');
|
19
|
+
$paginatorUl.html(this.createResetButton());
|
20
|
+
if(this.pageCount < 13){
|
21
|
+
for(var i = 1; i <= this.pageCount; i++){
|
22
|
+
$paginatorUl.append(this.createPaginationListItem(i, (i == currentPage)));
|
23
|
+
}
|
24
|
+
}else{
|
25
|
+
if(currentPage > 1){
|
26
|
+
$paginatorUl.append(this.createPaginationListItem(1, false));
|
27
|
+
}
|
28
|
+
|
29
|
+
var between = Math.floor((1 + currentPage) / 2);
|
30
|
+
if(between > 1 && between < currentPage - 2){
|
31
|
+
$paginatorUl.append('<li><span>...</span></li>');
|
32
|
+
$paginatorUl.append(this.createPaginationListItem(between, false));
|
33
|
+
}
|
34
|
+
|
35
|
+
if(currentPage > 4){
|
36
|
+
$paginatorUl.append('<li><span>...</span></li>');
|
37
|
+
}
|
38
|
+
|
39
|
+
if(currentPage > 3){
|
40
|
+
$paginatorUl.append(this.createPaginationListItem(currentPage-2, false));
|
41
|
+
}
|
42
|
+
|
43
|
+
if(currentPage > 2){
|
44
|
+
$paginatorUl.append(this.createPaginationListItem(currentPage-1, false));
|
45
|
+
}
|
46
|
+
|
47
|
+
$paginatorUl.append(this.createPaginationListItem(currentPage, true));
|
48
|
+
|
49
|
+
if(currentPage < this.pageCount - 1){
|
50
|
+
$paginatorUl.append(this.createPaginationListItem(currentPage+1, false));
|
51
|
+
}
|
52
|
+
|
53
|
+
if(currentPage < this.pageCount - 2){
|
54
|
+
$paginatorUl.append(this.createPaginationListItem(currentPage+2, false));
|
55
|
+
}
|
56
|
+
|
57
|
+
if(currentPage < this.pageCount - 3){
|
58
|
+
$paginatorUl.append('<li><span>...</span></li>');
|
59
|
+
}
|
60
|
+
|
61
|
+
between = Math.floor((currentPage + this.pageCount) / 2);
|
62
|
+
|
63
|
+
if(this.additionalPlaceholderNeeded(between, currentPage)){
|
64
|
+
$paginatorUl.append(this.createPaginationListItem(between, false));
|
65
|
+
$paginatorUl.append('<li><span>...</span></li>');
|
66
|
+
}
|
67
|
+
if(currentPage < this.pageCount){
|
68
|
+
$paginatorUl.append(this.createPaginationListItem(this.pageCount, false));
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
},
|
73
|
+
|
74
|
+
createResetButton: function() {
|
75
|
+
var html = '';
|
76
|
+
if($('table#'+ this.tableId).data('persistent')){
|
77
|
+
html = '<li><a href="#" data-tabulatr-reset="'+ this.tableId +'"><i class="fa fa-refresh"></i></a></li>';
|
78
|
+
}
|
79
|
+
return html;
|
80
|
+
},
|
81
|
+
|
82
|
+
additionalPlaceholderNeeded: function(pageToCompare, currentPage){
|
83
|
+
return pageToCompare > currentPage + 3 && pageToCompare < this.pageCount - 1;
|
84
|
+
}
|
85
|
+
}
|