diff options
Diffstat (limited to 'js/dojo-1.7.2/dojox/grid/enhanced/plugins/Search.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/grid/enhanced/plugins/Search.js | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/grid/enhanced/plugins/Search.js b/js/dojo-1.7.2/dojox/grid/enhanced/plugins/Search.js new file mode 100644 index 0000000..2c0284c --- /dev/null +++ b/js/dojo-1.7.2/dojox/grid/enhanced/plugins/Search.js @@ -0,0 +1,123 @@ +//>>built +define("dojox/grid/enhanced/plugins/Search", [ + "dojo/_base/kernel", + "dojo/_base/lang", + "dojo/_base/declare", + "dojo/_base/array", + "dojo/data/util/filter", + "../../EnhancedGrid", + "../_Plugin" +], function(dojo, lang, declare, array, dFilter, EnhancedGrid, _Plugin){ + +var Search = declare("dojox.grid.enhanced.plugins.Search", _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 && lang.isObject(args)) ? args : {}; + this._cacheSize = args.cacheSize || -1; + grid.searchRow = lang.hitch(this, "searchRow"); + }, + searchRow: function(/* Object|RegExp|String */searchArgs, /* function(Integer, item) */onSearched){ + if(!lang.isFunction(onSearched)){ return; } + if(lang.isString(searchArgs)){ + searchArgs = dFilter.patternToRegExp(searchArgs); + } + var isGlobal = false; + if(searchArgs instanceof RegExp){ + isGlobal = true; + }else if(lang.isObject(searchArgs)){ + var isEmpty = true; + for(var field in searchArgs){ + if(lang.isString(searchArgs[field])){ + searchArgs[field] = dFilter.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, + query: this.grid.query, + sort: this.grid.getSortProps(), + queryOptions: this.grid.queryOptions, + onBegin: function(size){ + _this._storeSize = size; + }, + onComplete: function(items){ + if(!array.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 = array.filter(g.layout.cells, function(cell){ + return !cell.hidden; + }); + if(isGlobal){ + return array.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; + } + } +}); + +EnhancedGrid.registerPlugin(Search/*name:'search'*/); + +return Search; + +});
\ No newline at end of file |
