//>>built define("dojox/data/FlickrRestStore",["dojo/_base/lang","dojo/_base/declare","dojo/_base/array","dojo/io/script","dojox/data/FlickrStore","dojo/_base/connect"],function(_1,_2,_3,_4,_5,_6){ var _7=_2("dojox.data.FlickrRestStore",_5,{constructor:function(_8){ if(_8){ if(_8.label){ this.label=_8.label; } if(_8.apikey){ this._apikey=_8.apikey; } } this._cache=[]; this._prevRequests={}; this._handlers={}; this._prevRequestRanges=[]; this._maxPhotosPerUser={}; this._id=_7.prototype._id++; },_id:0,_requestCount:0,_flickrRestUrl:"http://www.flickr.com/services/rest/",_apikey:null,_storeRef:"_S",_cache:null,_prevRequests:null,_handlers:null,_sortAttributes:{"date-posted":true,"date-taken":true,"interestingness":true},_fetchItems:function(_9,_a,_b){ var _c={}; if(!_9.query){ _9.query=_c={}; }else{ _1.mixin(_c,_9.query); } var _d=[]; var _e=[]; var _f={format:"json",method:"flickr.photos.search",api_key:this._apikey,extras:"owner_name,date_upload,date_taken"}; var _10=false; if(_c.userid){ _10=true; _f.user_id=_9.query.userid; _d.push("userid"+_9.query.userid); } if(_c.groupid){ _10=true; _f.group_id=_c.groupid; _d.push("groupid"+_c.groupid); } if(_c.apikey){ _10=true; _f.api_key=_9.query.apikey; _e.push("api"+_9.query.apikey); }else{ if(_f.api_key){ _10=true; _9.query.apikey=_f.api_key; _e.push("api"+_f.api_key); }else{ throw Error("dojox.data.FlickrRestStore: An API key must be specified."); } } _9._curCount=_9.count; if(_c.page){ _f.page=_9.query.page; _e.push("page"+_f.page); }else{ if(("start" in _9)&&_9.start!==null){ if(!_9.count){ _9.count=20; } var _11=_9.start%_9.count; var _12=_9.start,_13=_9.count; if(_11!==0){ if(_12<_13/2){ _13=_12+_13; _12=0; }else{ var _14=20,div=2; for(var i=_14;i>0;i--){ if(_12%i===0&&(_12/i)>=_13){ div=i; break; } } _13=_12/div; } _9._realStart=_9.start; _9._realCount=_9.count; _9._curStart=_12; _9._curCount=_13; }else{ _9._realStart=_9._realCount=null; _9._curStart=_9.start; _9._curCount=_9.count; } _f.page=(_12/_13)+1; _e.push("page"+_f.page); } } if(_9._curCount){ _f.per_page=_9._curCount; _e.push("count"+_9._curCount); } if(_c.lang){ _f.lang=_9.query.lang; _d.push("lang"+_9.lang); } if(_c.setid){ _f.method="flickr.photosets.getPhotos"; _f.photoset_id=_9.query.setid; _d.push("set"+_9.query.setid); } if(_c.tags){ if(_c.tags instanceof Array){ _f.tags=_c.tags.join(","); }else{ _f.tags=_c.tags; } _d.push("tags"+_f.tags); if(_c["tag_mode"]&&(_c.tag_mode.toLowerCase()==="any"||_c.tag_mode.toLowerCase()==="all")){ _f.tag_mode=_c.tag_mode; } } if(_c.text){ _f.text=_c.text; _d.push("text:"+_c.text); } if(_c.sort&&_c.sort.length>0){ if(!_c.sort[0].attribute){ _c.sort[0].attribute="date-posted"; } if(this._sortAttributes[_c.sort[0].attribute]){ if(_c.sort[0].descending){ _f.sort=_c.sort[0].attribute+"-desc"; }else{ _f.sort=_c.sort[0].attribute+"-asc"; } } }else{ _f.sort="date-posted-asc"; } _d.push("sort:"+_f.sort); _d=_d.join("."); _e=_e.length>0?"."+_e.join("."):""; var _15=_d+_e; _9={query:_c,count:_9._curCount,start:_9._curStart,_realCount:_9._realCount,_realStart:_9._realStart,onBegin:_9.onBegin,onComplete:_9.onComplete,onItem:_9.onItem}; var _16={request:_9,fetchHandler:_a,errorHandler:_b}; if(this._handlers[_15]){ this._handlers[_15].push(_16); return; } this._handlers[_15]=[_16]; var _17=null; var _18={url:this._flickrRestUrl,preventCache:this.urlPreventCache,content:_f,callbackParamName:"jsoncallback"}; var _19=_1.hitch(this,function(_1a,_1b,_1c){ var _1d=_1c.request.onBegin; _1c.request.onBegin=null; var _1e; var req=_1c.request; if(("_realStart" in req)&&req._realStart!=null){ req.start=req._realStart; req.count=req._realCount; req._realStart=req._realCount=null; } if(_1d){ var _1f=null; if(_1b){ _1f=(_1b.photoset?_1b.photoset:_1b.photos); } if(_1f&&("perpage" in _1f)&&("pages" in _1f)){ if(_1f.perpage*_1f.pages<=_1c.request.start+_1c.request.count){ _1e=_1c.request.start+_1f.photo.length; }else{ _1e=_1f.perpage*_1f.pages; } this._maxPhotosPerUser[_d]=_1e; _1d(_1e,_1c.request); }else{ if(this._maxPhotosPerUser[_d]){ _1d(this._maxPhotosPerUser[_d],_1c.request); } } } _1c.fetchHandler(_1a,_1c.request); if(_1d){ _1c.request.onBegin=_1d; } }); var _20=_1.hitch(this,function(_21){ if(_21.stat!="ok"){ _b(null,_9); }else{ var _22=this._handlers[_15]; if(!_22){ return; } this._handlers[_15]=null; this._prevRequests[_15]=_21; var _23=this._processFlickrData(_21,_9,_d); if(!this._prevRequestRanges[_d]){ this._prevRequestRanges[_d]=[]; } this._prevRequestRanges[_d].push({start:_9.start,end:_9.start+(_21.photoset?_21.photoset.photo.length:_21.photos.photo.length)}); _3.forEach(_22,function(i){ _19(_23,_21,i); }); } }); var _24=this._prevRequests[_15]; if(_24){ this._handlers[_15]=null; _19(this._cache[_d],_24,_16); return; }else{ if(this._checkPrevRanges(_d,_9.start,_9.count)){ this._handlers[_15]=null; _19(this._cache[_d],null,_16); return; } } var _25=_4.get(_18); _25.addCallback(_20); _25.addErrback(function(_26){ _6.disconnect(_17); _b(_26,_9); }); },getAttributes:function(_27){ return ["title","author","imageUrl","imageUrlSmall","imageUrlMedium","imageUrlThumb","imageUrlLarge","imageUrlOriginal","link","dateTaken","datePublished"]; },getValues:function(_28,_29){ this._assertIsItem(_28); this._assertIsAttribute(_29); switch(_29){ case "title": return [this._unescapeHtml(_28.title)]; case "author": return [_28.ownername]; case "imageUrlSmall": return [_28.media.s]; case "imageUrl": return [_28.media.l]; case "imageUrlOriginal": return [_28.media.o]; case "imageUrlLarge": return [_28.media.l]; case "imageUrlMedium": return [_28.media.m]; case "imageUrlThumb": return [_28.media.t]; case "link": return ["http://www.flickr.com/photos/"+_28.owner+"/"+_28.id]; case "dateTaken": return [_28.datetaken]; case "datePublished": return [_28.datepublished]; default: return undefined; } },_processFlickrData:function(_2a,_2b,_2c){ if(_2a.items){ return _5.prototype._processFlickrData.apply(this,arguments); } var _2d=["http://farm",null,".static.flickr.com/",null,"/",null,"_",null]; var _2e=[]; var _2f=(_2a.photoset?_2a.photoset:_2a.photos); if(_2a.stat=="ok"&&_2f&&_2f.photo){ _2e=_2f.photo; for(var i=0;i<_2e.length;i++){ var _30=_2e[i]; _30[this._storeRef]=this; _2d[1]=_30.farm; _2d[3]=_30.server; _2d[5]=_30.id; _2d[7]=_30.secret; var _31=_2d.join(""); _30.media={s:_31+"_s.jpg",m:_31+"_m.jpg",l:_31+".jpg",t:_31+"_t.jpg",o:_31+"_o.jpg"}; if(!_30.owner&&_2a.photoset){ _30.owner=_2a.photoset.owner; } } } var _32=_2b.start?_2b.start:0; var arr=this._cache[_2c]; if(!arr){ this._cache[_2c]=arr=[]; } _3.forEach(_2e,function(i,idx){ arr[idx+_32]=i; }); return arr; },_checkPrevRanges:function(_33,_34,_35){ var end=_34+_35; var arr=this._prevRequestRanges[_33]; return (!!arr)&&_3.some(arr,function(_36){ return ((_34>=_36.start)&&(end<=_36.end)); }); }}); return _7; });