function updateFilterableQueryNow($target) {
var newquery = $target.data('filterable-query-new');
var params = $target.data('infinite-content-params-filterable') || {};
- params.filters = [['any', 'ilike', '%' + newquery + '%']];
+ if (newquery == null || newquery == '') {
+ params.filters = [];
+ } else {
+ params.filters = [['any', '@@', newquery.concat(':*')]];
+ }
$target.data('infinite-content-params-filterable', params);
$target.data('filterable-query', newquery);
}
});
}).
on('paste keyup input', 'input[type=text].filterable-control', function(e) {
+ var regexp;
if (this != e.target) return;
var $target = $($(this).attr('data-filterable-target'));
var currentquery = $target.data('filterable-query');
} else {
// Target does not have infinite-scroll capability. Just
// filter the rows in the browser using a RegExp.
+ regexp = undefined;
+ try {
+ regexp = new RegExp($(this).val(), 'i');
+ } catch(e) {
+ if (e instanceof SyntaxError) {
+ // Invalid/partial regexp. See 'has-error' below.
+ } else {
+ throw e;
+ }
+ }
$target.
+ toggleClass('has-error', regexp === undefined).
addClass('filterable-container').
- data('q', new RegExp($(this).val(), 'i')).
+ data('q', regexp).
trigger('refresh');
}
}).on('refresh', '.filterable-container', function() {