tabulatr2 0.8.9 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/Gemfile +1 -1
- data/README.md +72 -46
- data/app/assets/javascripts/tabulatr/application.js +197 -114
- data/app/views/tabulatr/_tabulatr_filter_dialog.html.slim +2 -2
- data/app/views/tabulatr/_tabulatr_filter_menu.html.slim +2 -2
- data/app/views/tabulatr/_tabulatr_fuzzy_search_field.html.slim +1 -1
- data/app/views/tabulatr/_tabulatr_static_table.html.slim +2 -2
- data/lib/tabulatr/data/data.rb +2 -1
- data/lib/tabulatr/data/dsl.rb +13 -2
- data/lib/tabulatr/data/filtering.rb +16 -11
- data/lib/tabulatr/data/formatting.rb +9 -1
- data/lib/tabulatr/data/row.rb +8 -0
- data/lib/tabulatr/data/sorting.rb +1 -1
- data/lib/tabulatr/generators/tabulatr/templates/tabulatr_data.rb +11 -17
- data/lib/tabulatr/json_builder.rb +8 -6
- data/lib/tabulatr/rails/action_view.rb +2 -2
- data/lib/tabulatr/renderer/association.rb +1 -1
- data/lib/tabulatr/renderer/checkbox.rb +1 -1
- data/lib/tabulatr/renderer/columns_from_block.rb +1 -1
- data/lib/tabulatr/renderer/renderer.rb +14 -4
- data/lib/tabulatr/utility/request_data_not_included_error.rb +9 -0
- data/lib/tabulatr/version.rb +1 -1
- data/spec/dummy/app/tabulatr_data/product_tabulatr_data.rb +8 -4
- data/spec/dummy/app/views/products/simple_index.html.erb +3 -10
- data/spec/dummy/app/views/products/with_styling.html.erb +1 -1
- data/spec/dummy/config/application.rb +1 -1
- data/spec/features/tabulatrs_spec.rb +1 -1
- metadata +6 -4
- data/lib/tabulatr/renderer/columns.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33bcdd2d48f79be42e48d96f15856c24731b6543
|
4
|
+
data.tar.gz: db9ecdc0fb072cd452233d3a181bf1524cc0e6d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b88025d3af65dd7cceaa36ab28512767de961cd4bbd35878ec5be326456112aaf2ef7ed695ad9f8d8a7b87118c0330f0df1f09ee96aa79986048fd3946754725
|
7
|
+
data.tar.gz: 695b0ee5be5f34b8c6464b014ce11e5c4a814ec817469f6100f8f76bc7ec77a9c41190c4da675a7a9c2753c1500993209bd02ab74cefebd73790499001e8fee2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,28 @@
|
|
1
|
+
## 0.9
|
2
|
+
|
3
|
+
* Added `row` to the TabulatrData DSL to provide HTML attributes for the
|
4
|
+
table_row of each record.
|
5
|
+
|
6
|
+
Example:
|
7
|
+
```
|
8
|
+
row do |record, row_config|
|
9
|
+
if record.super_important?
|
10
|
+
row_config[:class] = 'important';
|
11
|
+
end
|
12
|
+
row_config[:data] = {
|
13
|
+
href: edit_user_path(record.id),
|
14
|
+
vip: record.super_important?
|
15
|
+
}
|
16
|
+
end
|
17
|
+
```
|
18
|
+
|
19
|
+
* Added `id` of record as `data-id` of table row in static table if
|
20
|
+
id is available.
|
21
|
+
|
22
|
+
* Added `columns` keyword argument to `table_for`
|
23
|
+
|
24
|
+
* Added `checkbox` to the TabulatrData DSL
|
25
|
+
|
1
26
|
## 0.8.9
|
2
27
|
|
3
28
|
* fix sorting, filtering, searching and batch_actions for tables whose class
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -14,14 +14,8 @@ After that run `bundle install`.
|
|
14
14
|
Also add `//= require tabulatr` to your application js file and `*= require tabulatr` to your CSS asset
|
15
15
|
pipeline.
|
16
16
|
|
17
|
-
|
18
|
-
`rails g tabulatr
|
19
|
-
|
20
|
-
This will generate a `ProductTabulatrData` class in `app/tabulatr_data/product_tabulatr_data.rb` for you.
|
21
|
-
|
22
|
-
You can also run the generator for a new model, if you just run the standard Rails `resource` generator.
|
23
|
-
|
24
|
-
`rails g resource Product title:string vendor:references description:text`
|
17
|
+
Now run the Install generator via
|
18
|
+
`rails g tabulatr install`
|
25
19
|
|
26
20
|
## Usage
|
27
21
|
|
@@ -79,6 +73,13 @@ end
|
|
79
73
|
```
|
80
74
|
The search method is used for a fuzzy search field.
|
81
75
|
|
76
|
+
You can automatically generate a new TabulatrData-Class by running
|
77
|
+
`rails g tabulatr:table MODELNAME`.
|
78
|
+
|
79
|
+
This will generate a `MODELNAMETabulatrData` class in `app/tabulatr_data/MODELNAME_data.rb` for you.
|
80
|
+
|
81
|
+
This generator also gets executed if you just run the standard Rails `resource` generator.
|
82
|
+
|
82
83
|
## Controller
|
83
84
|
|
84
85
|
In `ProductsController#index` we have:
|
@@ -99,6 +100,22 @@ _Hint:_ If you want to prefilter your table, you can do that too! Just pass an `
|
|
99
100
|
### View
|
100
101
|
|
101
102
|
In the view we can use all the attributes which are defined in our `ProductTabulatrData` class.
|
103
|
+
To display all the columns defined in the `ProductTabulatrData` class we
|
104
|
+
just need to put the following statement in our view:
|
105
|
+
|
106
|
+
```erb
|
107
|
+
<%= table_for Product %>
|
108
|
+
```
|
109
|
+
If you just want do display a subset of the defined columns or show them in a
|
110
|
+
different order you can provide them as arguments to the `columns` key:
|
111
|
+
|
112
|
+
```erb
|
113
|
+
<%= table_for Product, columns: [:vendor_address, 'vendor:name', {tags: :title}]%>
|
114
|
+
```
|
115
|
+
Note that you can write associations as a string with colon between association
|
116
|
+
name and method or as a hash as you can see above.
|
117
|
+
|
118
|
+
An other option is to provide the columns in a block:
|
102
119
|
|
103
120
|
```erb
|
104
121
|
<%= table_for Product do |t|
|
@@ -178,49 +195,63 @@ These options should be specified at the view level as parameters to the `table_
|
|
178
195
|
They change the appearance and behaviour of the table.
|
179
196
|
|
180
197
|
```ruby
|
181
|
-
#
|
182
|
-
:
|
183
|
-
:
|
184
|
-
|
185
|
-
:
|
186
|
-
:
|
187
|
-
:
|
188
|
-
:
|
189
|
-
:
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
198
|
+
filter: true, # false for no filter row at all
|
199
|
+
search: true, # show fuzzy search field
|
200
|
+
paginate: false, # true to show paginator
|
201
|
+
pagesize: 20, # default pagesize
|
202
|
+
sortable: true, # true to allow sorting (can be specified for every sortable column)
|
203
|
+
batch_actions: false, # :name => value hash of batch action stuff
|
204
|
+
footer_content: false, # if given, add a <%= content_for <footer_content> %> before the </table>
|
205
|
+
path: '#', # where to send the AJAX-requests to
|
206
|
+
order_by: nil # default order
|
207
|
+
```
|
208
|
+
|
209
|
+
#### Example:
|
210
|
+
```erb
|
211
|
+
<%= table_for Product, {order_by: 'price desc', pagesize: 50} %>
|
194
212
|
```
|
195
213
|
|
196
214
|
### Column Options
|
197
215
|
|
216
|
+
You can specify these options either in your `TabulatrData` class or to
|
217
|
+
the columns in the block of `table_for`.
|
218
|
+
|
198
219
|
```ruby
|
199
|
-
:
|
200
|
-
:
|
201
|
-
:
|
202
|
-
:
|
203
|
-
:
|
204
|
-
:
|
205
|
-
:
|
206
|
-
:
|
207
|
-
:
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
:
|
213
|
-
:
|
214
|
-
:
|
215
|
-
:range_filter_symbol => '–', # put between the <inputs> of the range filter
|
216
|
-
:sortable => true, # if set, sorting-stuff is added to the header cell
|
217
|
-
:format_methods => [] # javascript method to execute on this column
|
220
|
+
header: nil, # override content of header cell
|
221
|
+
classes: nil, # CSS classes for this column
|
222
|
+
width: false,
|
223
|
+
align: false,
|
224
|
+
valign: false,
|
225
|
+
wrap: nil,
|
226
|
+
th_html: false,
|
227
|
+
filter_html: false,
|
228
|
+
filter: true, # whether this column should be filterable
|
229
|
+
checkbox_value: '1',
|
230
|
+
checkbox_label: '',
|
231
|
+
sortable: true, # whethter this column should be sortable
|
232
|
+
format: nil,
|
233
|
+
map: true,
|
234
|
+
cell_style: {}, # CSS style for all body cells of this column
|
235
|
+
header_style: {} # CSS style for all header cells of this column
|
218
236
|
```
|
219
237
|
|
238
|
+
#### Example:
|
239
|
+
```erb
|
240
|
+
# in the view
|
241
|
+
<%= table_for Product do |t|
|
242
|
+
t.column(:title, header_style: {color: 'red'})
|
243
|
+
# ...
|
244
|
+
%>
|
245
|
+
|
246
|
+
# or in TabulatrData
|
247
|
+
class ProductTabulatrData < Tabulatr::Data
|
248
|
+
column(:title, table_column_options: {header_style: {color: 'red'}})
|
249
|
+
end
|
250
|
+
```
|
220
251
|
|
221
252
|
## Dependencies
|
222
253
|
|
223
|
-
We use [
|
254
|
+
We use [Bootstrap from Twitter](http://getbootstrap.com) in order to make the table look pretty decent.
|
224
255
|
|
225
256
|
## Known Bugs
|
226
257
|
|
@@ -231,11 +262,6 @@ And this limit is hard-coded IIRC. So – If you run into this limitation –
|
|
231
262
|
please consider using another server.
|
232
263
|
(Thanks to [stepheneb](https://github.com/stepheneb) for calling my attention back to this.)
|
233
264
|
|
234
|
-
## Other, new bugs
|
235
|
-
|
236
|
-
There are roughly another 997 bugs in Tabulatr2, although we do some testing.
|
237
|
-
If you hunt them, please file an issue.
|
238
|
-
|
239
265
|
## Contributing
|
240
266
|
|
241
267
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
@@ -19,105 +19,109 @@
|
|
19
19
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
20
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
21
|
|
22
|
-
Tabulatr
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
22
|
+
function Tabulatr(id){
|
23
|
+
this.id = id;
|
24
|
+
this.name = '';
|
25
|
+
this.moreResults = true;
|
26
|
+
this.currentData = null;
|
27
|
+
this.locked = false;
|
28
|
+
}
|
29
|
+
|
30
|
+
var tabulatr_tables;
|
31
|
+
Tabulatr.prototype = {
|
32
|
+
constructor: Tabulatr,
|
33
|
+
|
34
|
+
createPaginationListItem: function(page, active){
|
35
|
+
var $page = $('<li><a href="" data-page="'+ page +'">'+ page +'</a></li>');
|
36
|
+
if(active){
|
37
|
+
$page.addClass('active');
|
33
38
|
}
|
34
|
-
|
39
|
+
return $page;
|
40
|
+
},
|
41
|
+
|
42
|
+
updatePagination: function(currentPage, numPages){
|
43
|
+
var $paginatorUl = $('.pagination[data-table='+ this.id +'] > ul');
|
44
|
+
|
45
|
+
$paginatorUl.html('');
|
35
46
|
if(numPages < 13){
|
36
47
|
for(var i = 1; i <= numPages; i++){
|
37
|
-
|
38
|
-
if(i == currentPage){
|
39
|
-
cls = 'active';
|
40
|
-
}
|
41
|
-
ul.append('<li class="'+ cls +'"><a href="#" data-page="'+ i+'">'+
|
42
|
-
i +'</a></li>');
|
48
|
+
$paginatorUl.append(this.createPaginationListItem(i, (i == currentPage)));
|
43
49
|
}
|
44
50
|
}else{
|
45
51
|
if(currentPage > 1){
|
46
|
-
|
52
|
+
$paginatorUl.append(this.createPaginationListItem(1, false));
|
47
53
|
}
|
48
54
|
|
49
55
|
var between = Math.floor((1 + currentPage) / 2);
|
50
56
|
if(between > 1 && between < currentPage - 2){
|
51
|
-
|
52
|
-
|
57
|
+
$paginatorUl.append('<li><span>...</span></li>');
|
58
|
+
$paginatorUl.append(this.createPaginationListItem(between, false));
|
53
59
|
}
|
54
60
|
|
55
61
|
if(currentPage > 4){
|
56
|
-
|
62
|
+
$paginatorUl.append('<li><span>...</span></li>');
|
57
63
|
}
|
58
64
|
|
59
65
|
if(currentPage > 3){
|
60
|
-
|
61
|
-
|
62
|
-
ul.append('<li><a href="#" data-page="'+ (currentPage - 1) +'">'+
|
63
|
-
(currentPage-1) +'</a></li>');
|
66
|
+
$paginatorUl.append(this.createPaginationListItem(currentPage-2, false));
|
67
|
+
$paginatorUl.append(this.createPaginationListItem(currentPage-1, false));
|
64
68
|
}
|
65
69
|
|
66
|
-
|
67
|
-
currentPage +'</a></li>');
|
70
|
+
$paginatorUl.append(this.createPaginationListItem(currentPage, true));
|
68
71
|
|
69
72
|
if(currentPage < numPages - 1){
|
70
|
-
|
71
|
-
(currentPage+1) +'</a></li>');
|
73
|
+
$paginatorUl.append(this.createPaginationListItem(currentPage+1, false));
|
72
74
|
}
|
73
75
|
|
74
76
|
if(currentPage < numPages - 2){
|
75
|
-
|
76
|
-
(currentPage+2) +'</a></li>');
|
77
|
+
$paginatorUl.append(this.createPaginationListItem(currentPage+2, false));
|
77
78
|
}
|
78
79
|
|
79
80
|
if(currentPage < numPages - 3){
|
80
|
-
|
81
|
+
$paginatorUl.append('<li><span>...</span></li>');
|
81
82
|
}
|
82
83
|
|
83
84
|
between = Math.floor((currentPage + numPages) / 2);
|
84
85
|
|
85
86
|
if(between > currentPage + 3 && between < numPages - 1){
|
86
|
-
|
87
|
-
|
88
|
-
ul.append('<li><span>...</span></li>');
|
87
|
+
$paginatorUl.append(this.createPaginationListItem(between, false));
|
88
|
+
$paginatorUl.append('<li><span>...</span></li>');
|
89
89
|
}
|
90
90
|
if(currentPage < numPages){
|
91
|
-
|
92
|
-
numPages +'</a></li>');
|
91
|
+
$paginatorUl.append(this.createPaginationListItem(numPages, false));
|
93
92
|
}
|
94
93
|
}
|
95
94
|
|
96
95
|
},
|
97
96
|
|
98
|
-
updateTable: function(hash,
|
97
|
+
updateTable: function(hash, forceReload) {
|
98
|
+
var $table = $('#'+ this.id);
|
99
99
|
if(hash.page !== undefined && !forceReload){
|
100
100
|
//old page should be stored
|
101
101
|
Tabulatr.storePage = true;
|
102
102
|
// check if this page was already loaded
|
103
|
-
if($('
|
104
|
-
$('
|
105
|
-
$('
|
103
|
+
if($table.find('tbody tr[data-page='+ hash.page +']').length > 0){
|
104
|
+
$table.find('tbody tr').hide();
|
105
|
+
$table.find('tbody tr[data-page='+ hash.page +']').show();
|
106
106
|
|
107
|
-
|
108
|
-
$('.pagination[data-table='+
|
109
|
-
|
107
|
+
this.updatePagination(hash.page,
|
108
|
+
$('.pagination[data-table='+ this.id +'] a:last').data('page'),
|
109
|
+
this.id);
|
110
110
|
return;
|
111
111
|
}
|
112
112
|
}else{
|
113
|
-
|
113
|
+
this.storePage = false;
|
114
114
|
}
|
115
|
-
if(
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
115
|
+
if(this.locked){ return; }
|
116
|
+
this.locked = true;
|
117
|
+
var curTable = this;
|
118
|
+
$.ajax({
|
119
|
+
context: this,
|
120
|
+
type: 'GET',
|
121
|
+
url: $('table#'+ this.id).data('path') + '.json',
|
122
|
+
data: this.createParameterString(hash, this.id),
|
123
|
+
success: this.handleResponse
|
124
|
+
});
|
121
125
|
},
|
122
126
|
|
123
127
|
checkIfCheckboxesAreMarked: function(){
|
@@ -125,32 +129,30 @@ Tabulatr = {
|
|
125
129
|
},
|
126
130
|
|
127
131
|
handleResponse: function(response) {
|
128
|
-
|
129
|
-
|
130
|
-
|
132
|
+
this.insertTabulatrData(response);
|
133
|
+
this.updatePagination(response.meta.page, response.meta.pages, response.meta.table_id);
|
134
|
+
this.locked = false;
|
131
135
|
},
|
132
136
|
|
133
137
|
insertTabulatrData: function(response){
|
134
|
-
var columns = [];
|
135
138
|
var tableId = response.meta.table_id;
|
136
|
-
var tableName = tableId.split('_')[0];
|
137
139
|
var tbody = $('#'+ tableId +' tbody');
|
138
140
|
if(!response.meta.append){
|
139
|
-
if(
|
141
|
+
if(this.storePage){
|
140
142
|
$('#'+ tableId +' tbody tr').hide();
|
141
143
|
}else{
|
142
144
|
$('#'+ tableId +' tbody').html('');
|
143
145
|
}
|
144
146
|
}
|
145
|
-
if(response.data.length
|
146
|
-
|
147
|
+
if(response.data.length === 0){
|
148
|
+
this.moreResults = false;
|
147
149
|
$('.pagination_trigger[data-table='+ tableId +']').unbind('inview');
|
148
150
|
}else{
|
149
151
|
if(response.data.length < response.meta.pagesize){
|
150
|
-
|
152
|
+
this.moreResults = false;
|
151
153
|
$('.pagination_trigger[data-table='+ tableId + ']').unbind('inview');
|
152
154
|
}else{
|
153
|
-
|
155
|
+
this.moreResults = true;
|
154
156
|
}
|
155
157
|
|
156
158
|
// insert the actual data
|
@@ -159,13 +161,18 @@ Tabulatr = {
|
|
159
161
|
var id = data.id;
|
160
162
|
var tr = $('tr.empty_row').clone();
|
161
163
|
tr.removeClass('empty_row');
|
164
|
+
if(data._row_config.data){
|
165
|
+
tr.data(data._row_config.data);
|
166
|
+
delete data._row_config.data;
|
167
|
+
}
|
168
|
+
tr.attr(data._row_config);
|
162
169
|
tr.attr('data-page', response.meta.page);
|
163
170
|
tr.attr('data-id', id);
|
164
171
|
tr.find('td').each(function(i,td_raw) {
|
165
172
|
var td = $(td_raw);
|
166
173
|
var coltype = td.data('tabulatr-type');
|
167
174
|
var name = td.data('tabulatr-column-name');
|
168
|
-
var cont = data[name]
|
175
|
+
var cont = data[name];
|
169
176
|
if(coltype === 'checkbox') {
|
170
177
|
cont = $("<input>").attr('type', 'checkbox').val(id).addClass('tabulatr-checkbox');
|
171
178
|
}
|
@@ -184,49 +191,47 @@ Tabulatr = {
|
|
184
191
|
},
|
185
192
|
|
186
193
|
replacer: function(match, attribute, offset, string){
|
187
|
-
return
|
194
|
+
return this.currentData[attribute];
|
188
195
|
},
|
189
196
|
|
190
197
|
|
191
198
|
makeAction: function(action, data){
|
192
|
-
|
193
|
-
return unescape(action).replace(/{{([\w:]+)}}/g,
|
199
|
+
this.currentData = data;
|
200
|
+
return unescape(action).replace(/{{([\w:]+)}}/g, this.replacer);
|
194
201
|
},
|
195
202
|
|
196
|
-
submitFilterForm: function(
|
197
|
-
if($('.pagination[data-table='+
|
198
|
-
$('.pagination_trigger[data-table='+
|
199
|
-
$('.pagination_trigger[data-table='+
|
203
|
+
submitFilterForm: function(){
|
204
|
+
if($('.pagination[data-table='+ this.id +']').length === 0){
|
205
|
+
$('.pagination_trigger[data-table='+ this.id +']').unbind('inview', cbfn);
|
206
|
+
$('.pagination_trigger[data-table='+ this.id +']').bind('inview', cbfn);
|
200
207
|
}
|
201
|
-
|
208
|
+
this.updateTable({page: 1, append: false}, true);
|
202
209
|
return false;
|
203
210
|
},
|
204
211
|
|
205
|
-
createParameterString: function(hash
|
206
|
-
var tableName =
|
212
|
+
createParameterString: function(hash){
|
213
|
+
var tableName = this.id.split('_')[0];
|
207
214
|
if(hash === undefined){
|
208
215
|
hash = {};
|
209
216
|
hash.append = false;
|
210
217
|
}
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
console.log('Tabulatr: No pagesize specified')
|
215
|
-
}
|
218
|
+
var pagesize = hash.pagesize;
|
219
|
+
if(pagesize === undefined){
|
220
|
+
pagesize = $('table#'+ this.id).data('pagesize');
|
216
221
|
}
|
217
222
|
if(hash.page === undefined){
|
218
|
-
hash.page = Math.floor($('#'+
|
223
|
+
hash.page = Math.floor($('#'+ this.id +' tbody tr[class!=empty_row]').length/pagesize) + 1;
|
219
224
|
if(!isFinite(hash.page)){
|
220
225
|
hash.page = 1;
|
221
226
|
}
|
222
227
|
}
|
223
228
|
hash.pagesize = pagesize;
|
224
|
-
hash.arguments = $.map($('#'+
|
225
|
-
return $(n).data('tabulatr-column-name')
|
226
|
-
}).filter(function(n){return n}).join();
|
227
|
-
hash.table_id =
|
229
|
+
hash.arguments = $.map($('#'+ this.id +' th'), function(n){
|
230
|
+
return $(n).data('tabulatr-column-name');
|
231
|
+
}).filter(function(n){return n; }).join();
|
232
|
+
hash.table_id = this.id;
|
228
233
|
hash[tableName + '_search'] = $('input#'+ tableName +'_fuzzy_search_query').val();
|
229
|
-
var form_array = $('.tabulatr_filter_form[data-table="'+
|
234
|
+
var form_array = $('.tabulatr_filter_form[data-table="'+ this.id +'"]')
|
230
235
|
.find('input:visible,select:visible,input[type=hidden]').serializeArray();
|
231
236
|
for(var i = 0; i < form_array.length; i++){
|
232
237
|
hash[form_array[i].name] = form_array[i].value;
|
@@ -237,9 +242,12 @@ Tabulatr = {
|
|
237
242
|
localDate: function(value, $td, $tr, obj){
|
238
243
|
return new Date(value).toLocaleString();
|
239
244
|
}
|
245
|
+
|
240
246
|
}
|
241
247
|
|
248
|
+
|
242
249
|
$(document).on('ready page:load', function(){
|
250
|
+
tabulatr_tables = [];
|
243
251
|
|
244
252
|
$('th.tabulatr-sortable').click(function(){
|
245
253
|
var th = $(this);
|
@@ -247,26 +255,32 @@ $(document).on('ready page:load', function(){
|
|
247
255
|
var dir = th.attr('data-sorted');
|
248
256
|
var table = th.parents('table');
|
249
257
|
var tableId = table.attr('id');
|
250
|
-
var
|
258
|
+
var table_obj = undefined;
|
259
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
260
|
+
if(tabulatr_tables[i].id == tableId){
|
261
|
+
table_obj = tabulatr_tables[i];
|
262
|
+
}
|
263
|
+
}
|
264
|
+
var tableName = table_obj.id.split('_')[0];
|
251
265
|
table.find('th.tabulatr-sortable.sorted').removeClass('sorted').removeAttr('data-sorted');
|
252
266
|
dir = (dir === 'asc') ? 'desc' : 'asc';
|
253
267
|
th.addClass('sorted').attr('data-sorted', dir);
|
254
268
|
$('.tabulatr_filter_form[data-table='+ tableId +'] input[name='+ tableName +'_sort]').val(sort_by + ' '+ dir);
|
255
|
-
if(!
|
256
|
-
|
257
|
-
if($('.pagination[data-table='+ tableId +']').length
|
269
|
+
if(!table_obj.moreResults){
|
270
|
+
table_obj.moreResults = true;
|
271
|
+
if($('.pagination[data-table='+ tableId +']').length === 0){
|
258
272
|
$('.pagination_trigger[data-table='+ tableId +']').bind('inview', cbfn);
|
259
273
|
}
|
260
274
|
}
|
261
275
|
$($(this).parents('table').find('tbody tr')).remove();
|
262
276
|
|
263
277
|
$('.tabulatr_mark_all[data-table='+ tableName +']').prop('checked', false).prop('indeterminate', false);
|
264
|
-
|
278
|
+
table_obj.updateTable({});
|
265
279
|
});
|
266
280
|
|
267
281
|
|
268
282
|
$('.tabulatr_table').each(function(ix, el){
|
269
|
-
if($('.pagination[data-table="'+ $(el).attr('id') +'"]').length
|
283
|
+
if($('.pagination[data-table="'+ $(el).attr('id') +'"]').length === 0){
|
270
284
|
$('.pagination_trigger[data-table="'+ $(el).attr('id') +'"]').bind('inview', cbfn);
|
271
285
|
}
|
272
286
|
});
|
@@ -278,25 +292,43 @@ $(document).on('ready page:load', function(){
|
|
278
292
|
var tableId = a.data('table-id');
|
279
293
|
var params = {page: 1};
|
280
294
|
params[name] = key;
|
281
|
-
params
|
295
|
+
params.tabulatr_checked = {checked_ids: jQuery.map($('#'+ tableId +' .tabulatr-checkbox:checked'), function(el){return $(el).val();}).join(',')};
|
282
296
|
$('.tabulatr_mark_all[data-table='+ tableId +']').prop('indeterminate', false).prop('checked', false);
|
283
297
|
$('#'+ tableId +' .tabulatr-wrench').addClass('disabled');
|
284
|
-
|
298
|
+
var table_obj = undefined;
|
299
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
300
|
+
if(tabulatr_tables[i].id == tableId){
|
301
|
+
table_obj = tabulatr_tables[i];
|
302
|
+
}
|
303
|
+
}
|
304
|
+
table_obj.updateTable(params, true);
|
285
305
|
});
|
286
306
|
|
287
307
|
$('form.tabulatr-fuzzy-search').submit(function(){
|
288
308
|
var tableId = $(this).data('table');
|
289
|
-
if($('.pagination[data-table='+ tableId +']').length
|
309
|
+
if($('.pagination[data-table='+ tableId +']').length === 0){
|
290
310
|
$('.pagination_trigger[data-table='+ tableId +']').unbind('inview', cbfn);
|
291
311
|
$('.pagination_trigger[data-table='+ tableId +']').bind('inview', cbfn);
|
292
312
|
}
|
293
|
-
|
313
|
+
var table_obj = undefined;
|
314
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
315
|
+
if(tabulatr_tables[i].id == tableId){
|
316
|
+
table_obj = tabulatr_tables[i];
|
317
|
+
}
|
318
|
+
}
|
319
|
+
table_obj.updateTable({page: 1, append: false}, true);
|
294
320
|
return false;
|
295
321
|
});
|
296
322
|
|
297
|
-
$('form.tabulatr_filter_form').submit(function(
|
323
|
+
$('form.tabulatr_filter_form').submit(function(){
|
298
324
|
var tableId = $(this).data('table');
|
299
|
-
|
325
|
+
var table_obj = undefined;
|
326
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
327
|
+
if(tabulatr_tables[i].id == tableId){
|
328
|
+
table_obj = tabulatr_tables[i];
|
329
|
+
}
|
330
|
+
}
|
331
|
+
table_obj.submitFilterForm();
|
300
332
|
return false;
|
301
333
|
});
|
302
334
|
|
@@ -313,21 +345,33 @@ $(document).on('ready page:load', function(){
|
|
313
345
|
}
|
314
346
|
var tableId = $(this).closest('.tabulatr_table').attr('id');
|
315
347
|
$(this).remove();
|
316
|
-
if($('.pagination[data-table='+ tableId +']').length
|
348
|
+
if($('.pagination[data-table='+ tableId +']').length === 0){
|
317
349
|
$('.pagination_trigger[data-table='+ tableId +']').bind('inview', cbfn);
|
318
350
|
}
|
319
|
-
|
351
|
+
var table_obj = undefined;
|
352
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
353
|
+
if(tabulatr_tables[i].id == tableId){
|
354
|
+
table_obj = tabulatr_tables[i];
|
355
|
+
}
|
356
|
+
}
|
357
|
+
table_obj.updateTable({});
|
320
358
|
return false;
|
321
359
|
});
|
322
360
|
|
323
361
|
$('.tabulatr_mark_all').click(function(){
|
324
362
|
var tableId = $(this).data('table');
|
363
|
+
var table_obj = undefined;
|
364
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
365
|
+
if(tabulatr_tables[i].id == tableId){
|
366
|
+
table_obj = tabulatr_tables[i];
|
367
|
+
}
|
368
|
+
}
|
325
369
|
if($(this).is(':checked')){
|
326
370
|
$('#'+ tableId +' tr[data-page]:visible input[type=checkbox]').prop('checked', true);
|
327
371
|
$('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
|
328
372
|
}else{
|
329
373
|
$('#'+ tableId +' tr[data-page]:visible input[type=checkbox]').prop('checked', false);
|
330
|
-
if(
|
374
|
+
if(table_obj.checkIfCheckboxesAreMarked()){
|
331
375
|
$('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
|
332
376
|
}else{
|
333
377
|
$('#'+ tableId +' .tabulatr-wrench').addClass('disabled');
|
@@ -337,6 +381,12 @@ $(document).on('ready page:load', function(){
|
|
337
381
|
|
338
382
|
$('.tabulatr_table').on('click', 'input.tabulatr-checkbox', function(){
|
339
383
|
var tableId = $(this).closest('.tabulatr_table').attr('id');
|
384
|
+
var table_obj = undefined;
|
385
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
386
|
+
if(tabulatr_tables[i].id == tableId){
|
387
|
+
table_obj = tabulatr_tables[i];
|
388
|
+
}
|
389
|
+
}
|
340
390
|
if($(this).is(':checked')){
|
341
391
|
if($('#'+ tableId +' tr[data-page]:visible input[type=checkbox]').not(':checked').length > 0){
|
342
392
|
$('.tabulatr_mark_all[data-table='+ tableId +']').prop("indeterminate", true);
|
@@ -352,7 +402,7 @@ $(document).on('ready page:load', function(){
|
|
352
402
|
}else{
|
353
403
|
$('.tabulatr_mark_all[data-table='+ tableId +']').prop('indeterminate', false);
|
354
404
|
$('.tabulatr_mark_all[data-table='+ tableId +']').prop('checked', false);
|
355
|
-
if(
|
405
|
+
if(table_obj.checkIfCheckboxesAreMarked()){
|
356
406
|
$('#'+ tableId +' .tabulatr-wrench').removeClass('disabled');
|
357
407
|
}else{
|
358
408
|
$('#'+ tableId +' .tabulatr-wrench').addClass('disabled');
|
@@ -366,17 +416,23 @@ $(document).on('ready page:load', function(){
|
|
366
416
|
$(this).closest('div').find('a').removeClass('active');
|
367
417
|
$(this).addClass('active');
|
368
418
|
var tableId = $(this).closest('div').data('table');
|
369
|
-
|
370
|
-
|
419
|
+
var table_obj = undefined;
|
420
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
421
|
+
if(tabulatr_tables[i].id == tableId){
|
422
|
+
table_obj = tabulatr_tables[i];
|
423
|
+
}
|
424
|
+
}
|
425
|
+
table_obj.moreResults = true;
|
426
|
+
if($('.pagination[data-table='+ tableId +']').length === 0){
|
371
427
|
$('.pagination_trigger[data-table='+ tableId +']').bind('inview', cbfn);
|
372
428
|
}
|
373
429
|
if(typeof(Storage) !== undefined){
|
374
430
|
localStorage.tabulatr_page_display_count = $(this).data('items-per-page');
|
375
431
|
}
|
376
|
-
|
432
|
+
table_obj.updateTable({page: 1}, true);
|
377
433
|
});
|
378
434
|
|
379
|
-
if($('.tabulatr_table').length > 0){
|
435
|
+
if($('.tabulatr_table:not(".tabulatr_static_table")').length > 0){
|
380
436
|
if(typeof(Storage) !== undefined){
|
381
437
|
var count = localStorage.tabulatr_page_display_count;
|
382
438
|
if(count !== undefined){
|
@@ -385,8 +441,16 @@ $(document).on('ready page:load', function(){
|
|
385
441
|
addClass('active');
|
386
442
|
}
|
387
443
|
}
|
388
|
-
|
389
|
-
|
444
|
+
var table_obj = undefined;
|
445
|
+
$('.tabulatr_table:not(".tabulatr_static_table")').each(function(ix, el){
|
446
|
+
var tableId = $(el).attr('id');
|
447
|
+
tabulatr_tables.push(new Tabulatr(tableId));
|
448
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
449
|
+
if(tabulatr_tables[i].id == tableId){
|
450
|
+
table_obj = tabulatr_tables[i];
|
451
|
+
}
|
452
|
+
}
|
453
|
+
table_obj.updateTable({});
|
390
454
|
});
|
391
455
|
}
|
392
456
|
});
|
@@ -400,7 +464,13 @@ $(document).on('click', '.pagination a', function(){
|
|
400
464
|
var tableId = $(a).closest('.pagination').data('table');
|
401
465
|
$('.tabulatr_mark_all[data-table='+ tableId +']').prop('checked', false);
|
402
466
|
$('.tabulatr_mark_all[data-table='+ tableId +']').prop('indeterminate', false);
|
403
|
-
|
467
|
+
var table_obj = undefined;
|
468
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
469
|
+
if(tabulatr_tables[i].id == tableId){
|
470
|
+
table_obj = tabulatr_tables[i];
|
471
|
+
}
|
472
|
+
}
|
473
|
+
table_obj.updateTable({append: false, page: a.data('page')});
|
404
474
|
return false;
|
405
475
|
});
|
406
476
|
|
@@ -409,13 +479,13 @@ $(document).on('click', '.pagination a', function(){
|
|
409
479
|
|
410
480
|
$(document).on('click', 'a[data-show-table-filter]', function(){
|
411
481
|
var a = $(this);
|
412
|
-
var
|
413
|
-
$('div[data-filter-column-name="'+
|
482
|
+
var name = a.data('show-table-filter');
|
483
|
+
$('div[data-filter-column-name="'+ name +'"]').show('blind');
|
414
484
|
$('div[data-filter-column-name="_submit"]').show('blind');
|
415
485
|
|
416
486
|
a.hide();
|
417
487
|
return false;
|
418
|
-
})
|
488
|
+
});
|
419
489
|
|
420
490
|
$(document).on('click', 'a[data-hide-table-filter]', function(){
|
421
491
|
var a = $(this);
|
@@ -428,9 +498,15 @@ $(document).on('click', 'a[data-hide-table-filter]', function(){
|
|
428
498
|
$('div[data-filter-column-name="_submit"]').hide('blind');
|
429
499
|
|
430
500
|
var tableId = $(this).parents('form').data('table');
|
431
|
-
|
501
|
+
var table_obj = undefined;
|
502
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
503
|
+
if(tabulatr_tables[i].id == tableId){
|
504
|
+
table_obj = tabulatr_tables[i];
|
505
|
+
}
|
506
|
+
}
|
507
|
+
table_obj.submitFilterForm();
|
432
508
|
return false;
|
433
|
-
})
|
509
|
+
});
|
434
510
|
|
435
511
|
$(document).on('change', 'select[data-tabulatr-date-filter]', function() {
|
436
512
|
var select = $(this);
|
@@ -452,7 +528,14 @@ var cbfn = function(event, isInView, visiblePartX, visiblePartY) {
|
|
452
528
|
} else if (visiblePartY == 'bottom') {
|
453
529
|
// bottom part of element is visible
|
454
530
|
} else {
|
455
|
-
|
531
|
+
var tableId = $(event.currentTarget).data('table');
|
532
|
+
var table_obj = undefined;
|
533
|
+
for(var i = 0; i < tabulatr_tables.length; i++){
|
534
|
+
if(tabulatr_tables[i].id == tableId){
|
535
|
+
table_obj = tabulatr_tables[i];
|
536
|
+
}
|
537
|
+
}
|
538
|
+
table_obj.updateTable({append: true});
|
456
539
|
}
|
457
540
|
}
|
458
|
-
};
|
541
|
+
};
|