| /* |
| Copyright (c) 2004-2009, 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.data.CssRuleStore"]){ |
| dojo._hasResource["dojox.data.CssRuleStore"]=true; |
| dojo.provide("dojox.data.CssRuleStore"); |
| dojo.require("dojo.data.util.filter"); |
| dojo.require("dojo.data.util.sorter"); |
| dojo.require("dojox.data.css"); |
| dojo.declare("dojox.data.CssRuleStore",null,{_storeRef:"_S",_labelAttribute:"selector",_cache:null,_browserMap:null,_cName:"dojox.data.CssRuleStore",constructor:function(_1){ |
| if(_1){ |
| dojo.mixin(this,_1); |
| } |
| this._cache={}; |
| this._allItems=null; |
| this._waiting=[]; |
| this.gatherHandle=null; |
| var _2=this; |
| function _3(){ |
| try{ |
| _2.context=dojox.data.css.determineContext(_2.context); |
| if(_2.gatherHandle){ |
| clearInterval(_2.gatherHandle); |
| _2.gatherHandle=null; |
| } |
| while(_2._waiting.length){ |
| var _4=_2._waiting.pop(); |
| dojox.data.css.rules.forEach(_4.forFunc,null,_2.context); |
| _4.finishFunc(); |
| } |
| } |
| catch(e){ |
| } |
| }; |
| this.gatherHandle=setInterval(_3,250); |
| },setContext:function(_5){ |
| if(_5){ |
| this.close(); |
| this.context=dojox.data.css.determineContext(_5); |
| } |
| },getFeatures:function(){ |
| return {"dojo.data.api.Read":true}; |
| },isItem:function(_6){ |
| if(_6&&_6[this._storeRef]==this){ |
| return true; |
| } |
| return false; |
| },hasAttribute:function(_7,_8){ |
| this._assertIsItem(_7); |
| this._assertIsAttribute(_8); |
| var _9=this.getAttributes(_7); |
| if(dojo.indexOf(_9,_8)!=-1){ |
| return true; |
| } |
| return false; |
| },getAttributes:function(_a){ |
| this._assertIsItem(_a); |
| var _b=["selector","classes","rule","style","cssText","styleSheet","parentStyleSheet","parentStyleSheetHref"]; |
| var _c=_a.rule.style; |
| if(_c){ |
| var _d; |
| for(_d in _c){ |
| _b.push("style."+_d); |
| } |
| } |
| return _b; |
| },getValue:function(_e,_f,_10){ |
| var _11=this.getValues(_e,_f); |
| var _12=_10; |
| if(_11&&_11.length>0){ |
| return _11[0]; |
| } |
| return _10; |
| },getValues:function(_13,_14){ |
| this._assertIsItem(_13); |
| this._assertIsAttribute(_14); |
| var _15=null; |
| if(_14==="selector"){ |
| _15=_13.rule["selectorText"]; |
| if(_15&&dojo.isString(_15)){ |
| _15=_15.split(","); |
| } |
| }else{ |
| if(_14==="classes"){ |
| _15=_13.classes; |
| }else{ |
| if(_14==="rule"){ |
| _15=_13.rule.rule; |
| }else{ |
| if(_14==="style"){ |
| _15=_13.rule.style; |
| }else{ |
| if(_14==="cssText"){ |
| if(dojo.isIE){ |
| if(_13.rule.style){ |
| _15=_13.rule.style.cssText; |
| if(_15){ |
| _15="{ "+_15.toLowerCase()+" }"; |
| } |
| } |
| }else{ |
| _15=_13.rule.cssText; |
| if(_15){ |
| _15=_15.substring(_15.indexOf("{"),_15.length); |
| } |
| } |
| }else{ |
| if(_14==="styleSheet"){ |
| _15=_13.rule.styleSheet; |
| }else{ |
| if(_14==="parentStyleSheet"){ |
| _15=_13.rule.parentStyleSheet; |
| }else{ |
| if(_14==="parentStyleSheetHref"){ |
| if(_13.href){ |
| _15=_13.href; |
| } |
| }else{ |
| if(_14.indexOf("style.")===0){ |
| var _16=_14.substring(_14.indexOf("."),_14.length); |
| _15=_13.rule.style[_16]; |
| }else{ |
| _15=[]; |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| if(_15!==undefined){ |
| if(!dojo.isArray(_15)){ |
| _15=[_15]; |
| } |
| } |
| return _15; |
| },getLabel:function(_17){ |
| this._assertIsItem(_17); |
| return this.getValue(_17,this._labelAttribute); |
| },getLabelAttributes:function(_18){ |
| return [this._labelAttribute]; |
| },containsValue:function(_19,_1a,_1b){ |
| var _1c=undefined; |
| if(typeof _1b==="string"){ |
| _1c=dojo.data.util.filter.patternToRegExp(_1b,false); |
| } |
| return this._containsValue(_19,_1a,_1b,_1c); |
| },isItemLoaded:function(_1d){ |
| return this.isItem(_1d); |
| },loadItem:function(_1e){ |
| this._assertIsItem(_1e.item); |
| },fetch:function(_1f){ |
| _1f=_1f||{}; |
| if(!_1f.store){ |
| _1f.store=this; |
| } |
| var _20=_1f.scope||dojo.global; |
| if(this._pending&&this._pending.length>0){ |
| this._pending.push({request:_1f,fetch:true}); |
| }else{ |
| this._pending=[{request:_1f,fetch:true}]; |
| this._fetch(_1f); |
| } |
| return _1f; |
| },_fetch:function(_21){ |
| var _22=_21.scope||dojo.global; |
| if(this._allItems===null){ |
| this._allItems={}; |
| try{ |
| if(this.gatherHandle){ |
| this._waiting.push({"forFunc":dojo.hitch(this,this._handleRule),"finishFunc":dojo.hitch(this,this._handleReturn)}); |
| }else{ |
| dojox.data.css.rules.forEach(dojo.hitch(this,this._handleRule),null,this.context); |
| this._handleReturn(); |
| } |
| } |
| catch(e){ |
| if(_21.onError){ |
| _21.onError.call(_22,e,_21); |
| } |
| } |
| }else{ |
| this._handleReturn(); |
| } |
| },_handleRule:function(_23,_24,_25){ |
| var _26=_23["selectorText"]; |
| var s=_26.split(" "); |
| var _27=[]; |
| for(var j=0;j<s.length;j++){ |
| var tmp=s[j]; |
| var _28=tmp.indexOf("."); |
| if(tmp&&tmp.length>0&&_28!==-1){ |
| var _29=tmp.indexOf(",")||tmp.indexOf("["); |
| tmp=tmp.substring(_28,((_29!==-1&&_29>_28)?_29:tmp.length)); |
| _27.push(tmp); |
| } |
| } |
| var _2a={}; |
| _2a.rule=_23; |
| _2a.styleSheet=_24; |
| _2a.href=_25; |
| _2a.classes=_27; |
| _2a[this._storeRef]=this; |
| if(!this._allItems[_26]){ |
| this._allItems[_26]=[]; |
| } |
| this._allItems[_26].push(_2a); |
| },_handleReturn:function(){ |
| var _2b=[]; |
| var _2c=[]; |
| var _2d=null; |
| for(var i in this._allItems){ |
| _2d=this._allItems[i]; |
| for(var j in _2d){ |
| _2c.push(_2d[j]); |
| } |
| } |
| var _2e; |
| while(this._pending.length){ |
| _2e=this._pending.pop(); |
| _2e.request._items=_2c; |
| _2b.push(_2e); |
| } |
| while(_2b.length){ |
| _2e=_2b.pop(); |
| this._handleFetchReturn(_2e.request); |
| } |
| },_handleFetchReturn:function(_2f){ |
| var _30=_2f.scope||dojo.global; |
| var _31=[]; |
| var _32="all"; |
| var i; |
| if(_2f.query){ |
| _32=dojo.toJson(_2f.query); |
| } |
| if(this._cache[_32]){ |
| _31=this._cache[_32]; |
| }else{ |
| if(_2f.query){ |
| for(i in _2f._items){ |
| var _33=_2f._items[i]; |
| var _34=dojo.isWebKit?true:(_2f.queryOptions?_2f.queryOptions.ignoreCase:false); |
| var _35={}; |
| var key; |
| var _36; |
| for(key in _2f.query){ |
| _36=_2f.query[key]; |
| if(typeof _36==="string"){ |
| _35[key]=dojo.data.util.filter.patternToRegExp(_36,_34); |
| } |
| } |
| var _37=true; |
| for(key in _2f.query){ |
| _36=_2f.query[key]; |
| if(!this._containsValue(_33,key,_36,_35[key])){ |
| _37=false; |
| } |
| } |
| if(_37){ |
| _31.push(_33); |
| } |
| } |
| this._cache[_32]=_31; |
| }else{ |
| for(i in _2f._items){ |
| _31.push(_2f._items[i]); |
| } |
| } |
| } |
| var _38=_31.length; |
| if(_2f.sort){ |
| _31.sort(dojo.data.util.sorter.createSortFunction(_2f.sort,this)); |
| } |
| var _39=0; |
| var _3a=_31.length; |
| if(_2f.start>0&&_2f.start<_31.length){ |
| _39=_2f.start; |
| } |
| if(_2f.count&&_2f.count){ |
| _3a=_2f.count; |
| } |
| var _3b=_39+_3a; |
| if(_3b>_31.length){ |
| _3b=_31.length; |
| } |
| _31=_31.slice(_39,_3b); |
| if(_2f.onBegin){ |
| _2f.onBegin.call(_30,_38,_2f); |
| } |
| if(_2f.onItem){ |
| if(dojo.isArray(_31)){ |
| for(i=0;i<_31.length;i++){ |
| _2f.onItem.call(_30,_31[i],_2f); |
| } |
| if(_2f.onComplete){ |
| _2f.onComplete.call(_30,null,_2f); |
| } |
| } |
| }else{ |
| if(_2f.onComplete){ |
| _2f.onComplete.call(_30,_31,_2f); |
| } |
| } |
| return _2f; |
| },close:function(){ |
| this._cache={}; |
| this._allItems=null; |
| },_assertIsItem:function(_3c){ |
| if(!this.isItem(_3c)){ |
| throw new Error(this._cName+": Invalid item argument."); |
| } |
| },_assertIsAttribute:function(_3d){ |
| if(typeof _3d!=="string"){ |
| throw new Error(this._cName+": Invalid attribute argument."); |
| } |
| },_containsValue:function(_3e,_3f,_40,_41){ |
| return dojo.some(this.getValues(_3e,_3f),function(_42){ |
| if(_42!==null&&!dojo.isObject(_42)&&_41){ |
| if(_42.toString().match(_41)){ |
| return true; |
| } |
| }else{ |
| if(_40===_42){ |
| return true; |
| } |
| } |
| return false; |
| }); |
| }}); |
| } |