Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / json / query.js @ 11

History | View | Annotate | Download (3.69 KB)

1
/*
2
        Copyright (c) 2004-2010, 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

    
7

    
8
if(!dojo._hasResource["dojox.json.query"]){
9
dojo._hasResource["dojox.json.query"]=true;
10
dojo.provide("dojox.json.query");
11
(function(){
12
dojox.json._slice=function(_1,_2,_3,_4){
13
var _5=_1.length,_6=[];
14
_3=_3||_5;
15
_2=(_2<0)?Math.max(0,_2+_5):Math.min(_5,_2);
16
_3=(_3<0)?Math.max(0,_3+_5):Math.min(_5,_3);
17
for(var i=_2;i<_3;i+=_4){
18
_6.push(_1[i]);
19
}
20
return _6;
21
};
22
dojox.json._find=function e(_7,_8){
23
var _9=[];
24
function _a(_b){
25
if(_8){
26
if(_8===true&&!(_b instanceof Array)){
27
_9.push(_b);
28
}else{
29
if(_b[_8]){
30
_9.push(_b[_8]);
31
}
32
}
33
}
34
for(var i in _b){
35
var _c=_b[i];
36
if(!_8){
37
_9.push(_c);
38
}else{
39
if(_c&&typeof _c=="object"){
40
_a(_c);
41
}
42
}
43
}
44
};
45
if(_8 instanceof Array){
46
if(_8.length==1){
47
return _7[_8[0]];
48
}
49
for(var i=0;i<_8.length;i++){
50
_9.push(_7[_8[i]]);
51
}
52
}else{
53
_a(_7);
54
}
55
return _9;
56
};
57
dojox.json._distinctFilter=function(_d,_e){
58
var _f=[];
59
var _10={};
60
for(var i=0,l=_d.length;i<l;++i){
61
var _11=_d[i];
62
if(_e(_11,i,_d)){
63
if((typeof _11=="object")&&_11){
64
if(!_11.__included){
65
_11.__included=true;
66
_f.push(_11);
67
}
68
}else{
69
if(!_10[_11+typeof _11]){
70
_10[_11+typeof _11]=true;
71
_f.push(_11);
72
}
73
}
74
}
75
}
76
for(i=0,l=_f.length;i<l;++i){
77
if(_f[i]){
78
delete _f[i].__included;
79
}
80
}
81
return _f;
82
};
83
dojox.json.query=function(_12,obj){
84
var _13=0;
85
var str=[];
86
_12=_12.replace(/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'|[\[\]]/g,function(t){
87
_13+=t=="["?1:t=="]"?-1:0;
88
return (t=="]"&&_13>0)?"`]":(t.charAt(0)=="\""||t.charAt(0)=="'")?"`"+(str.push(t)-1):t;
89
});
90
var _14="";
91
function _15(_16){
92
_14=_16+"("+_14;
93
};
94
function _17(t,a,b,c,d,e,f,g){
95
return str[g].match(/[\*\?]/)||f=="~"?"/^"+str[g].substring(1,str[g].length-1).replace(/\\([btnfr\\"'])|([^\w\*\?])/g,"\\$1$2").replace(/([\*\?])/g,"[\\w\\W]$1")+(f=="~"?"$/i":"$/")+".test("+a+")":t;
96
};
97
_12.replace(/(\]|\)|push|pop|shift|splice|sort|reverse)\s*\(/,function(){
98
throw new Error("Unsafe function call");
99
});
100
_12=_12.replace(/([^=]=)([^=])/g,"$1=$2").replace(/@|(\.\s*)?[a-zA-Z\$_]+(\s*:)?/g,function(t){
101
return t.charAt(0)=="."?t:t=="@"?"$obj":(t.match(/:|^(\$|Math|true|false|null)$/)?"":"$obj.")+t;
102
}).replace(/\.?\.?\[(`\]|[^\]])*\]|\?.*|\.\.([\w\$_]+)|\.\*/g,function(t,a,b){
103
var _18=t.match(/^\.?\.?(\[\s*\^?\?|\^?\?|\[\s*==)(.*?)\]?$/);
104
if(_18){
105
var _19="";
106
if(t.match(/^\./)){
107
_15("dojox.json._find");
108
_19=",true)";
109
}
110
_15(_18[1].match(/\=/)?"dojo.map":_18[1].match(/\^/)?"dojox.json._distinctFilter":"dojo.filter");
111
return _19+",function($obj){return "+_18[2]+"})";
112
}
113
_18=t.match(/^\[\s*([\/\\].*)\]/);
114
if(_18){
115
return ".concat().sort(function(a,b){"+_18[1].replace(/\s*,?\s*([\/\\])\s*([^,\\\/]+)/g,function(t,a,b){
116
return "var av= "+b.replace(/\$obj/,"a")+",bv= "+b.replace(/\$obj/,"b")+";if(av>bv||bv==null){return "+(a=="/"?1:-1)+";}\n"+"if(bv>av||av==null){return "+(a=="/"?-1:1)+";}\n";
117
})+"return 0;})";
118
}
119
_18=t.match(/^\[(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)\]/);
120
if(_18){
121
_15("dojox.json._slice");
122
return ","+(_18[1]||0)+","+(_18[2]||0)+","+(_18[3]||1)+")";
123
}
124
if(t.match(/^\.\.|\.\*|\[\s*\*\s*\]|,/)){
125
_15("dojox.json._find");
126
return (t.charAt(1)=="."?",'"+b+"'":t.match(/,/)?","+t:"")+")";
127
}
128
return t;
129
}).replace(/(\$obj\s*((\.\s*[\w_$]+\s*)|(\[\s*`([0-9]+)\s*`\]))*)(==|~)\s*`([0-9]+)/g,_17).replace(/`([0-9]+)\s*(==|~)\s*(\$obj\s*((\.\s*[\w_$]+)|(\[\s*`([0-9]+)\s*`\]))*)/g,function(t,a,b,c,d,e,f,g){
130
return _17(t,c,d,e,f,g,b,a);
131
});
132
_12=_14+(_12.charAt(0)=="$"?"":"$")+_12.replace(/`([0-9]+|\])/g,function(t,a){
133
return a=="]"?"]":str[a];
134
});
135
var _1a=eval("1&&function($,$1,$2,$3,$4,$5,$6,$7,$8,$9){var $obj=$;return "+_12+"}");
136
for(var i=0;i<arguments.length-1;i++){
137
arguments[i]=arguments[i+1];
138
}
139
return obj?_1a.apply(this,arguments):_1a;
140
};
141
})();
142
}