Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / data / GoogleSearchStore.js @ 11

History | View | Annotate | Download (7.66 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.data.GoogleSearchStore"]){
9
dojo._hasResource["dojox.data.GoogleSearchStore"]=true;
10
dojo.provide("dojox.data.GoogleSearchStore");
11
dojo.provide("dojox.data.GoogleWebSearchStore");
12
dojo.provide("dojox.data.GoogleBlogSearchStore");
13
dojo.provide("dojox.data.GoogleLocalSearchStore");
14
dojo.provide("dojox.data.GoogleVideoSearchStore");
15
dojo.provide("dojox.data.GoogleNewsSearchStore");
16
dojo.provide("dojox.data.GoogleBookSearchStore");
17
dojo.provide("dojox.data.GoogleImageSearchStore");
18
dojo.require("dojo.io.script");
19
dojo.experimental("dojox.data.GoogleSearchStore");
20
dojo.declare("dojox.data.GoogleSearchStore",null,{constructor:function(_1){
21
if(_1){
22
if(_1.label){
23
this.label=_1.label;
24
}
25
if(_1.key){
26
this._key=_1.key;
27
}
28
if(_1.lang){
29
this._lang=_1.lang;
30
}
31
if("urlPreventCache" in _1){
32
this.urlPreventCache=_1.urlPreventCache?true:false;
33
}
34
}
35
this._id=dojox.data.GoogleSearchStore.prototype._id++;
36
},_id:0,_requestCount:0,_googleUrl:"http://ajax.googleapis.com/ajax/services/search/",_storeRef:"_S",_attributes:["unescapedUrl","url","visibleUrl","cacheUrl","title","titleNoFormatting","content","estimatedResultCount"],_aggregatedAttributes:{estimatedResultCount:"cursor.estimatedResultCount"},label:"titleNoFormatting",_type:"web",urlPreventCache:true,_queryAttrs:{text:"q"},_assertIsItem:function(_2){
37
if(!this.isItem(_2)){
38
throw new Error("dojox.data.GoogleSearchStore: a function was passed an item argument that was not an item");
39
}
40
},_assertIsAttribute:function(_3){
41
if(typeof _3!=="string"){
42
throw new Error("dojox.data.GoogleSearchStore: a function was passed an attribute argument that was not an attribute name string");
43
}
44
},getFeatures:function(){
45
return {"dojo.data.api.Read":true};
46
},getValue:function(_4,_5,_6){
47
var _7=this.getValues(_4,_5);
48
if(_7&&_7.length>0){
49
return _7[0];
50
}
51
return _6;
52
},getAttributes:function(_8){
53
return this._attributes;
54
},hasAttribute:function(_9,_a){
55
if(this.getValue(_9,_a)){
56
return true;
57
}
58
return false;
59
},isItemLoaded:function(_b){
60
return this.isItem(_b);
61
},loadItem:function(_c){
62
},getLabel:function(_d){
63
return this.getValue(_d,this.label);
64
},getLabelAttributes:function(_e){
65
return [this.label];
66
},containsValue:function(_f,_10,_11){
67
var _12=this.getValues(_f,_10);
68
for(var i=0;i<_12.length;i++){
69
if(_12[i]===_11){
70
return true;
71
}
72
}
73
return false;
74
},getValues:function(_13,_14){
75
this._assertIsItem(_13);
76
this._assertIsAttribute(_14);
77
var val=_13[_14];
78
if(dojo.isArray(val)){
79
return val;
80
}else{
81
if(val!==undefined){
82
return [val];
83
}else{
84
return [];
85
}
86
}
87
},isItem:function(_15){
88
if(_15&&_15[this._storeRef]===this){
89
return true;
90
}
91
return false;
92
},close:function(_16){
93
},_format:function(_17,_18){
94
return _17;
95
},fetch:function(_19){
96
_19=_19||{};
97
var _1a=_19.scope||dojo.global;
98
if(!_19.query){
99
if(_19.onError){
100
_19.onError.call(_1a,new Error(this.declaredClass+": A query must be specified."));
101
return;
102
}
103
}
104
var _1b={};
105
for(var _1c in this._queryAttrs){
106
_1b[_1c]=_19.query[_1c];
107
}
108
_19={query:_1b,onComplete:_19.onComplete,onError:_19.onError,onItem:_19.onItem,onBegin:_19.onBegin,start:_19.start,count:_19.count};
109
var _1d=8;
110
var _1e="GoogleSearchStoreCallback_"+this._id+"_"+(++this._requestCount);
111
var _1f=this._createContent(_1b,_1e,_19);
112
var _20;
113
if(typeof (_19.start)==="undefined"||_19.start===null){
114
_19.start=0;
115
}
116
if(!_19.count){
117
_19.count=_1d;
118
}
119
_20={start:_19.start-_19.start%_1d};
120
var _21=this;
121
var _22=this._googleUrl+this._type;
122
var _23={url:_22,preventCache:this.urlPreventCache,content:_1f};
123
var _24=[];
124
var _25=0;
125
var _26=false;
126
var _27=_19.start-1;
127
var _28=0;
128
var _29=[];
129
function _2a(req){
130
_28++;
131
_23.content.context=_23.content.start=req.start;
132
var _2b=dojo.io.script.get(_23);
133
_29.push(_2b.ioArgs.id);
134
_2b.addErrback(function(_2c){
135
if(_19.onError){
136
_19.onError.call(_1a,_2c,_19);
137
}
138
});
139
};
140
var _2d=function(_2e,_2f){
141
if(_29.length>0){
142
dojo.query("#"+_29.splice(0,1)).forEach(dojo.destroy);
143
}
144
if(_26){
145
return;
146
}
147
var _30=_21._getItems(_2f);
148
var _31=_2f?_2f["cursor"]:null;
149
if(_30){
150
for(var i=0;i<_30.length&&i+_2e<_19.count+_19.start;i++){
151
_21._processItem(_30[i],_2f);
152
_24[i+_2e]=_30[i];
153
}
154
_25++;
155
if(_25==1){
156
var _32=_31?_31.pages:null;
157
var _33=_32?Number(_32[_32.length-1].start):0;
158
if(_19.onBegin){
159
var est=_31?_31.estimatedResultCount:_30.length;
160
var _34=est?Math.min(est,_33+_30.length):_33+_30.length;
161
_19.onBegin.call(_1a,_34,_19);
162
}
163
var _35=(_19.start-_19.start%_1d)+_1d;
164
var _36=1;
165
while(_32){
166
if(!_32[_36]||Number(_32[_36].start)>=_19.start+_19.count){
167
break;
168
}
169
if(Number(_32[_36].start)>=_35){
170
_2a({start:_32[_36].start});
171
}
172
_36++;
173
}
174
}
175
if(_19.onItem&&_24[_27+1]){
176
do{
177
_27++;
178
_19.onItem.call(_1a,_24[_27],_19);
179
}while(_24[_27+1]&&_27<_19.start+_19.count);
180
}
181
if(_25==_28){
182
_26=true;
183
dojo.global[_1e]=null;
184
if(_19.onItem){
185
_19.onComplete.call(_1a,null,_19);
186
}else{
187
_24=_24.slice(_19.start,_19.start+_19.count);
188
_19.onComplete.call(_1a,_24,_19);
189
}
190
}
191
}
192
};
193
var _37=[];
194
var _38=_20.start-1;
195
dojo.global[_1e]=function(_39,_3a,_3b,_3c){
196
try{
197
if(_3b!=200){
198
if(_19.onError){
199
_19.onError.call(_1a,new Error("Response from Google was: "+_3b),_19);
200
}
201
dojo.global[_1e]=function(){
202
};
203
return;
204
}
205
if(_39==_38+1){
206
_2d(Number(_39),_3a);
207
_38+=_1d;
208
if(_37.length>0){
209
_37.sort(_21._getSort());
210
while(_37.length>0&&_37[0].start==_38+1){
211
_2d(Number(_37[0].start),_37[0].data);
212
_37.splice(0,1);
213
_38+=_1d;
214
}
215
}
216
}else{
217
_37.push({start:_39,data:_3a});
218
}
219
}
220
catch(e){
221
_19.onError.call(_1a,e,_19);
222
}
223
};
224
_2a(_20);
225
},_getSort:function(){
226
return function(a,b){
227
if(a.start<b.start){
228
return -1;
229
}
230
if(b.start<a.start){
231
return 1;
232
}
233
return 0;
234
};
235
},_processItem:function(_3d,_3e){
236
_3d[this._storeRef]=this;
237
for(var _3f in this._aggregatedAttributes){
238
_3d[_3f]=dojo.getObject(this._aggregatedAttributes[_3f],false,_3e);
239
}
240
},_getItems:function(_40){
241
return _40["results"]||_40;
242
},_createContent:function(_41,_42,_43){
243
var _44={v:"1.0",rsz:"large",callback:_42,key:this._key,hl:this._lang};
244
for(var _45 in this._queryAttrs){
245
_44[this._queryAttrs[_45]]=_41[_45];
246
}
247
return _44;
248
}});
249
dojo.declare("dojox.data.GoogleWebSearchStore",dojox.data.GoogleSearchStore,{});
250
dojo.declare("dojox.data.GoogleBlogSearchStore",dojox.data.GoogleSearchStore,{_type:"blogs",_attributes:["blogUrl","postUrl","title","titleNoFormatting","content","author","publishedDate"],_aggregatedAttributes:{}});
251
dojo.declare("dojox.data.GoogleLocalSearchStore",dojox.data.GoogleSearchStore,{_type:"local",_attributes:["title","titleNoFormatting","url","lat","lng","streetAddress","city","region","country","phoneNumbers","ddUrl","ddUrlToHere","ddUrlFromHere","staticMapUrl","viewport"],_aggregatedAttributes:{viewport:"viewport"},_queryAttrs:{text:"q",centerLatLong:"sll",searchSpan:"sspn"}});
252
dojo.declare("dojox.data.GoogleVideoSearchStore",dojox.data.GoogleSearchStore,{_type:"video",_attributes:["title","titleNoFormatting","content","url","published","publisher","duration","tbWidth","tbHeight","tbUrl","playUrl"],_aggregatedAttributes:{}});
253
dojo.declare("dojox.data.GoogleNewsSearchStore",dojox.data.GoogleSearchStore,{_type:"news",_attributes:["title","titleNoFormatting","content","url","unescapedUrl","publisher","clusterUrl","location","publishedDate","relatedStories"],_aggregatedAttributes:{}});
254
dojo.declare("dojox.data.GoogleBookSearchStore",dojox.data.GoogleSearchStore,{_type:"books",_attributes:["title","titleNoFormatting","authors","url","unescapedUrl","bookId","pageCount","publishedYear"],_aggregatedAttributes:{}});
255
dojo.declare("dojox.data.GoogleImageSearchStore",dojox.data.GoogleSearchStore,{_type:"images",_attributes:["title","titleNoFormatting","visibleUrl","url","unescapedUrl","originalContextUrl","width","height","tbWidth","tbHeight","tbUrl","content","contentNoFormatting"],_aggregatedAttributes:{}});
256
}