summaryrefslogtreecommitdiffstats
path: root/slick.dataview.js
diff options
context:
space:
mode:
authorMichael Leibman <michael.leibman@gmail.com>2012-02-04 20:29:42 -0800
committerMichael Leibman <michael.leibman@gmail.com>2012-02-04 20:29:42 -0800
commitc95128f8b3586c74773221f8b5531c60bc63339b (patch)
tree3e5b360d63c175bd01c56d34292a3a42588cf942 /slick.dataview.js
parentc9c9f3a24268729135bbd31baf1aa53b980223d5 (diff)
downloadSlickGrid-c95128f8b3586c74773221f8b5531c60bc63339b.zip
SlickGrid-c95128f8b3586c74773221f8b5531c60bc63339b.tar.gz
SlickGrid-c95128f8b3586c74773221f8b5531c60bc63339b.tar.bz2
Made DataView filter inlining optional (default is false).
Diffstat (limited to 'slick.dataview.js')
-rw-r--r--slick.dataview.js40
1 files changed, 36 insertions, 4 deletions
diff --git a/slick.dataview.js b/slick.dataview.js
index 2889b94..0bb8a0b 100644
--- a/slick.dataview.js
+++ b/slick.dataview.js
@@ -23,7 +23,8 @@
var self = this;
var defaults = {
- groupItemMetadataProvider: null
+ groupItemMetadataProvider: null,
+ inlineFilters: false
};
@@ -526,14 +527,45 @@
return fn;
}
+ function uncompiledFilter(items, args) {
+ var retval = [], idx = 0;
+
+ for (var i = 0, ii = items.length; i < ii; i++) {
+ if (filter(items[i], args)) {
+ retval[idx++] = items[i];
+ }
+ }
+
+ return retval;
+ }
+
+ function uncompiledFilterWithCaching(items, args, cache) {
+ var retval = [], idx = 0, item;
+
+ for (var i = 0, ii = items.length; i < ii; i++) {
+ item = items[i];
+ if (cache[i]) {
+ retval[idx++] = item;
+ } else if (filter(item, args)) {
+ retval[idx++] = item;
+ cache[i] = true;
+ }
+ }
+
+ return retval;
+ }
+
function getFilteredAndPagedItems(items) {
if (filter) {
+ var batchFilter = options.inlineFilters ? compiledFilter : uncompiledFilter;
+ var batchFilterWithCaching = options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching;
+
if (refreshHints.isFilterNarrowing) {
- filteredItems = compiledFilter(filteredItems, filterArgs);
+ filteredItems = batchFilter(filteredItems, filterArgs);
} else if (refreshHints.isFilterExpanding) {
- filteredItems = compiledFilterWithCaching(items, filterArgs, filterCache);
+ filteredItems = batchFilterWithCaching(items, filterArgs, filterCache);
} else if (!refreshHints.isFilterUnchanged) {
- filteredItems = compiledFilter(items, filterArgs);
+ filteredItems = batchFilter(items, filterArgs);
}
} else {
// special case: if not filtering and not paging, the resulting