| /* |
| 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.jsonPath.query"]){ |
| dojo._hasResource["dojox.jsonPath.query"]=true; |
| dojo.provide("dojox.jsonPath.query"); |
| dojox.jsonPath.query=function(_1,_2,_3){ |
| var re=dojox.jsonPath._regularExpressions; |
| if(!_3){ |
| _3={}; |
| } |
| var _4=[]; |
| function _5(i){ |
| return _4[i]; |
| }; |
| var _6; |
| if(_3.resultType=="PATH"&&_3.evalType=="RESULT"){ |
| throw Error("RESULT based evaluation not supported with PATH based results"); |
| } |
| var P={resultType:_3.resultType||"VALUE",normalize:function(_7){ |
| var _8=[]; |
| _7=_7.replace(/'([^']|'')*'/g,function(t){ |
| return "_str("+(_4.push(eval(t))-1)+")"; |
| }); |
| var ll=-1; |
| while(ll!=_8.length){ |
| ll=_8.length; |
| _7=_7.replace(/(\??\([^\(\)]*\))/g,function($0){ |
| return "#"+(_8.push($0)-1); |
| }); |
| } |
| _7=_7.replace(/[\['](#[0-9]+)[\]']/g,"[$1]").replace(/'?\.'?|\['?/g,";").replace(/;;;|;;/g,";..;").replace(/;$|'?\]|'$/g,""); |
| ll=-1; |
| while(ll!=_7){ |
| ll=_7; |
| _7=_7.replace(/#([0-9]+)/g,function($0,$1){ |
| return _8[$1]; |
| }); |
| } |
| return _7.split(";"); |
| },asPaths:function(_9){ |
| for(var j=0;j<_9.length;j++){ |
| var p="$"; |
| var x=_9[j]; |
| for(var i=1,n=x.length;i<n;i++){ |
| p+=/^[0-9*]+$/.test(x[i])?("["+x[i]+"]"):("['"+x[i]+"']"); |
| } |
| _9[j]=p; |
| } |
| return _9; |
| },exec:function(_a,_b,rb){ |
| var _c=["$"]; |
| var _d=rb?_b:[_b]; |
| var _e=[_c]; |
| function _f(v,p,def){ |
| if(v&&v.hasOwnProperty(p)&&P.resultType!="VALUE"){ |
| _e.push(_c.concat([p])); |
| } |
| if(def){ |
| _d=v[p]; |
| }else{ |
| if(v&&v.hasOwnProperty(p)){ |
| _d.push(v[p]); |
| } |
| } |
| }; |
| function _10(v){ |
| _d.push(v); |
| _e.push(_c); |
| P.walk(v,function(i){ |
| if(typeof v[i]==="object"){ |
| var _11=_c; |
| _c=_c.concat(i); |
| _10(v[i]); |
| _c=_11; |
| } |
| }); |
| }; |
| function _12(loc,val){ |
| if(val instanceof Array){ |
| var len=val.length,_13=0,end=len,_14=1; |
| loc.replace(/^(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$/g,function($0,$1,$2,$3){ |
| _13=parseInt($1||_13); |
| end=parseInt($2||end); |
| _14=parseInt($3||_14); |
| }); |
| _13=(_13<0)?Math.max(0,_13+len):Math.min(len,_13); |
| end=(end<0)?Math.max(0,end+len):Math.min(len,end); |
| for(var i=_13;i<end;i+=_14){ |
| _f(val,i); |
| } |
| } |
| }; |
| function _15(str){ |
| var i=loc.match(/^_str\(([0-9]+)\)$/); |
| return i?_4[i[1]]:str; |
| }; |
| function _16(val){ |
| if(/^\(.*?\)$/.test(loc)){ |
| _f(val,P.eval(loc,val),rb); |
| }else{ |
| if(loc==="*"){ |
| P.walk(val,rb&&val instanceof Array?function(i){ |
| P.walk(val[i],function(j){ |
| _f(val[i],j); |
| }); |
| }:function(i){ |
| _f(val,i); |
| }); |
| }else{ |
| if(loc===".."){ |
| _10(val); |
| }else{ |
| if(/,/.test(loc)){ |
| for(var s=loc.split(/'?,'?/),i=0,n=s.length;i<n;i++){ |
| _f(val,_15(s[i])); |
| } |
| }else{ |
| if(/^\?\(.*?\)$/.test(loc)){ |
| P.walk(val,function(i){ |
| if(P.eval(loc.replace(/^\?\((.*?)\)$/,"$1"),val[i])){ |
| _f(val,i); |
| } |
| }); |
| }else{ |
| if(/^(-?[0-9]*):(-?[0-9]*):?([0-9]*)$/.test(loc)){ |
| _12(loc,val); |
| }else{ |
| loc=_15(loc); |
| if(rb&&val instanceof Array&&!/^[0-9*]+$/.test(loc)){ |
| P.walk(val,function(i){ |
| _f(val[i],loc); |
| }); |
| }else{ |
| _f(val,loc,rb); |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| }; |
| while(_a.length){ |
| var loc=_a.shift(); |
| if((_b=_d)===null||_b===undefined){ |
| return _b; |
| } |
| _d=[]; |
| var _17=_e; |
| _e=[]; |
| if(rb){ |
| _16(_b); |
| }else{ |
| P.walk(_b,function(i){ |
| _c=_17[i]||_c; |
| _16(_b[i]); |
| }); |
| } |
| } |
| if(P.resultType=="BOTH"){ |
| _e=P.asPaths(_e); |
| var _18=[]; |
| for(var i=0;i<_e.length;i++){ |
| _18.push({path:_e[i],value:_d[i]}); |
| } |
| return _18; |
| } |
| return P.resultType=="PATH"?P.asPaths(_e):_d; |
| },walk:function(val,f){ |
| if(val instanceof Array){ |
| for(var i=0,n=val.length;i<n;i++){ |
| if(i in val){ |
| f(i); |
| } |
| } |
| }else{ |
| if(typeof val==="object"){ |
| for(var m in val){ |
| if(val.hasOwnProperty(m)){ |
| f(m); |
| } |
| } |
| } |
| } |
| },eval:function(x,_19){ |
| try{ |
| return $&&_19&&eval(x.replace(/@/g,"_v")); |
| } |
| catch(e){ |
| throw new SyntaxError("jsonPath: "+e.message+": "+x.replace(/@/g,"_v").replace(/\^/g,"_a")); |
| } |
| }}; |
| var $=_1; |
| if(_2&&_1){ |
| return P.exec(P.normalize(_2).slice(1),_1,_3.evalType=="RESULT"); |
| } |
| return false; |
| }; |
| } |