Skip to content

Commit a269e1c

Browse files
authored
Merge pull request #64 from level12/40-cleanup-url-filters
Cleanup parameters generated by filter form submission
2 parents 313bdd7 + bc6cb7f commit a269e1c

File tree

1 file changed

+46
-29
lines changed

1 file changed

+46
-29
lines changed

webgrid/static/webgrid.js

Lines changed: 46 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ $(document).ready(function() {
2525
$(this).siblings('input').val($(this).val());
2626
});
2727
$('.datagrid .export-link').click(verify_export);
28+
$('.datagrid form.header').submit(datagrid_cleanup_before_form_submission);
2829
_datagrid_is_loaded = true;
2930
});
3031

@@ -40,10 +41,9 @@ $(document).ready(function() {
4041
4142
*/
4243
function datagrid_toggle_mselect(){
43-
jq_img = $(this);
44-
jq_select = jq_img.siblings('select');
45-
select_name = jq_select.attr('name');
46-
multiple_attr = jq_select.attr('multiple');
44+
var jq_img = $(this);
45+
var jq_select = jq_img.siblings('select');
46+
var multiple_attr = jq_select.attr('multiple');
4747
if (typeof multiple_attr !== 'undefined' && multiple_attr !== false) {
4848
jq_select.removeAttr('multiple');
4949
jq_select.siblings('.ms-parent').hide();
@@ -95,8 +95,8 @@ function datagrid_activate_mselect_ui(jq_select) {
9595
9696
*/
9797
function datagrid_add_filter() {
98-
jq_afs = $('.datagrid .filters .add-filter select');
99-
filter_key = jq_afs.val();
98+
var jq_afs = $('.datagrid .filters .add-filter select');
99+
var filter_key = jq_afs.val();
100100
if( filter_key != '') {
101101
datagrid_activate_filter(filter_key);
102102
jq_afs.val('');
@@ -114,12 +114,12 @@ function datagrid_add_filter() {
114114
*/
115115
function datagrid_prep_filters(){
116116
$('.datagrid .filters tr').each(function(){
117-
jq_tr = $(this);
117+
var jq_tr = $(this);
118118
// Added _filter to address CSS collision with Bootstrap
119119
// Ref: https://github.com/level12/webgrid/issues/28
120-
filter_key = jq_tr.attr('class').replace(new RegExp('_filter$'),'');
120+
var filter_key = jq_tr.attr('class').replace(new RegExp('_filter$'),'');
121121
if( filter_key != 'add-filter') {
122-
op_select = jq_tr.find('.operator select');
122+
var op_select = jq_tr.find('.operator select');
123123
if( op_select.val() != '' ) {
124124
// filter should be active, so activate it
125125
datagrid_activate_filter(filter_key);
@@ -142,13 +142,13 @@ function datagrid_prep_filters(){
142142
function datagrid_activate_filter(filter_key) {
143143
// Added _filter to address CSS collision with Bootstrap
144144
// Ref: https://github.com/level12/webgrid/issues/28
145-
jq_tr = $('.datagrid .filters tr.' + filter_key+ "_filter");
145+
var jq_tr = $('.datagrid .filters tr.' + filter_key+ "_filter");
146146
// show the filter's row of controls
147147
jq_tr.show();
148148

149149
// make sure the option in the "Add Filter" select box for this
150150
// filter is disabled
151-
jq_option = $('.datagrid .filters .add-filter option[value="'+filter_key+'"]');
151+
var jq_option = $('.datagrid .filters .add-filter option[value="'+filter_key+'"]');
152152
jq_option.attr('disabled', 'disabled');
153153
}
154154

@@ -161,11 +161,8 @@ function datagrid_activate_filter(filter_key) {
161161
162162
*/
163163
function datagrid_on_operator_change() {
164-
jq_op_select = $(this);
165-
jq_tr = jq_op_select.closest('tr');
166-
// Added _filter to address CSS collision with Bootstrap
167-
// Ref: https://github.com/level12/webgrid/issues/28
168-
filter_key = jq_tr.attr('class').replace(new RegExp('_filter$'), '');
164+
var jq_op_select = $(this);
165+
var jq_tr = jq_op_select.closest('tr');
169166
datagrid_toggle_filter_inputs(jq_tr);
170167
}
171168

@@ -177,10 +174,13 @@ function datagrid_on_operator_change() {
177174
178175
*/
179176
function datagrid_toggle_filter_inputs(jq_filter_tr) {
180-
op_key = jq_filter_tr.find('.operator select').val();
181-
fields1 = jq_filter_tr.find('.inputs1').children();
182-
fields2 = jq_filter_tr.find('.inputs2').children();
183-
v1name = 'v1('+filter_key+')';
177+
// Added _filter to address CSS collision with Bootstrap
178+
// Ref: https://github.com/level12/webgrid/issues/28
179+
var filter_key = jq_filter_tr.attr('class').replace(new RegExp('_filter$'), '');
180+
var op_key = jq_filter_tr.find('.operator select').val();
181+
var fields1 = jq_filter_tr.find('.inputs1').children();
182+
var fields2 = jq_filter_tr.find('.inputs2').children();
183+
var v1name = 'v1('+filter_key+')';
184184

185185
if( op_key == null ) {
186186
fields1.show();
@@ -194,8 +194,8 @@ function datagrid_toggle_filter_inputs(jq_filter_tr) {
194194
fields2.hide();
195195
fields2.val('');
196196
} else {
197-
op_data = datagrid_data[filter_key][op_key];
198-
field_type = op_data.field_type;
197+
var op_data = datagrid_data[filter_key][op_key];
198+
var field_type = op_data.field_type;
199199
if( field_type == null ) {
200200
fields1.hide();
201201
fields1.val('');
@@ -258,14 +258,14 @@ function datagrid_filter_inactive(filter_key){
258258
259259
*/
260260
function datagrid_toggle_sort_selects() {
261-
jq_dds = $('.datagrid .header .sorting dd');
261+
var jq_dds = $('.datagrid .header .sorting dd');
262262
if (jq_dds.length == 0) return;
263-
dd1 = jq_dds.eq(0)
264-
dd2 = jq_dds.eq(1)
265-
dd3 = jq_dds.eq(2)
266-
sb1 = dd1.find('select');
267-
sb2 = dd2.find('select');
268-
sb3 = dd3.find('select');
263+
var dd1 = jq_dds.eq(0)
264+
var dd2 = jq_dds.eq(1)
265+
var dd3 = jq_dds.eq(2)
266+
var sb1 = dd1.find('select');
267+
var sb2 = dd2.find('select');
268+
var sb3 = dd3.find('select');
269269

270270
if( sb1.val() == '' ) {
271271
dd2.hide();
@@ -316,3 +316,20 @@ function verify_export(event) {
316316
}
317317
return true;
318318
}
319+
320+
/*
321+
datagrid_cleanup_before_form_submission()
322+
323+
Called before form submission to remove filter form rows that are unused. This reduces the
324+
size of the URL by not including query parameters for filters that are empty.
325+
*/
326+
function datagrid_cleanup_before_form_submission() {
327+
$('.datagrid .filters tr').each(function(idx, row) {
328+
var $row = $(row);
329+
var $operator = $row.find('.operator select');
330+
if ($operator.length && $operator.val() === '') {
331+
$row.remove();
332+
}
333+
});
334+
return true;
335+
}

0 commit comments

Comments
 (0)