/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.grid.enhanced.plugins.Search"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojox.grid.enhanced.plugins.Search"] = true;
dojo.provide("dojox.grid.enhanced.plugins.Search");
dojo.require("dojox.grid.enhanced._Plugin");
dojo.require("dojo.data.util.filter");
dojo.declare("dojox.grid.enhanced.plugins.Search", dojox.grid.enhanced._Plugin, {
// summary:
// Search the grid using wildcard string or Regular Expression.
// name: String
// plugin name
name: "search",
constructor: function(grid, args){
this.grid = grid;
args = (args && dojo.isObject(args)) ? args : {};
this._cacheSize = args.cacheSize || -1;
grid.searchRow = dojo.hitch(this, "searchRow");
},
searchRow: function(/* Object|RegExp|String */searchArgs, /* function(Integer, item) */onSearched){
if(!dojo.isFunction(onSearched)){ return; }
if(dojo.isString(searchArgs)){
searchArgs = dojo.data.util.filter.patternToRegExp(searchArgs);
}
var isGlobal = false;
if(searchArgs instanceof RegExp){
isGlobal = true;
}else if(dojo.isObject(searchArgs)){
var isEmpty = true;
for(var field in searchArgs){
if(dojo.isString(searchArgs[field])){
searchArgs[field] = dojo.data.util.filter.patternToRegExp(searchArgs[field]);
}
isEmpty = false;
}
if(isEmpty){ return; }
}else{
return;
}
this._search(searchArgs, 0, onSearched, isGlobal);
},
_search: function(/* Object|RegExp */searchArgs, /* Integer */start, /* function(Integer, item) */onSearched, /* Boolean */isGlobal){
var _this = this,
cnt = this._cacheSize,
args = {
"start": start,
"onBegin": function(size){
_this._storeSize = size;
},
"onComplete": function(items){
if(!dojo.some(items, function(item, i){
if(_this._checkRow(item, searchArgs, isGlobal)){
onSearched(start + i, item);
return true;
}
return false;
})){
if(cnt > 0 && start + cnt < _this._storeSize){
_this._search(searchArgs, start + cnt, onSearched, isGlobal);
}else{
onSearched(-1, null);
}
}
}
};
if(cnt > 0){
args.count = cnt;
}
this.grid._storeLayerFetch(args);
},
_checkRow: function(/* store item */item, /* Object|RegExp */searchArgs, /* Boolean */isGlobal){
var g = this.grid, s = g.store, i, field,
cells = dojo.filter(g.layout.cells, function(cell){
return !cell.hidden;
});
if(isGlobal){
return dojo.some(cells, function(cell){
try{
if(cell.field){
return String(s.getValue(item, cell.field)).search(searchArgs) >= 0;
}
}catch(e){
console.log("Search._checkRow() error: ", e);
}
return false;
});
}else{
for(field in searchArgs){
if(searchArgs[field] instanceof RegExp){
for(i = cells.length - 1; i >= 0; --i){
if(cells[i].field == field){
try{
if(String(s.getValue(item, field)).search(searchArgs[field]) < 0){
return false;
}
break;
}catch(e){
return false;
}
}
}
if(i < 0){ return false; }
}
}
return true;
}
}
});
dojox.grid.EnhancedGrid.registerPlugin(dojox.grid.enhanced.plugins.Search/*name:'search'*/);
}
# |
Change |
User |
Description |
Committed |
|
#1
|
16170 |
perforce_software |
Move Chronicle files to follow new path scheme for branching. |
|
|
//guest/perforce_software/chronicle/collateral/dojo-debug/dojox/grid/enhanced/plugins/Search.js |
#1
|
8972 |
Matt Attaway |
Initial add of the Chronicle source code |
|
|