query.js 3.5 KB

12345678
  1. /*
  2. Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. 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;};}