summaryrefslogtreecommitdiff
path: root/js/dojo-1.7.2/dojox/grid/enhanced/plugins/Search.js
diff options
context:
space:
mode:
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.js123
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