blob: 27fa4dce49b76d6c9dcb63ff4716ab3fb0d049a2 [file] [log] [blame]
/*
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.data.RailsStore"]){
dojo._hasResource["dojox.data.RailsStore"]=true;
dojo.provide("dojox.data.RailsStore");
dojo.require("dojox.data.JsonRestStore");
dojo.declare("dojox.data.RailsStore",dojox.data.JsonRestStore,{constructor:function(){
},preamble:function(_1){
if(typeof _1.target=="string"&&!_1.service){
var _2=_1.target.replace(/\/$/g,"");
var _3=function(id,_4){
_4=_4||{};
var _5=_2;
var _6;
var _7;
if(dojo.isObject(id)){
_7="";
_6="?"+dojo.objectToQuery(id);
}else{
if(_4.queryStr&&_4.queryStr.indexOf("?")!=-1){
_7=_4.queryStr.replace(/\?.*/,"");
_6=_4.queryStr.replace(/[^?]*\?/g,"?");
}else{
if(dojo.isString(_4.query)&&_4.query.indexOf("?")!=-1){
_7=_4.query.replace(/\?.*/,"");
_6=_4.query.replace(/[^?]*\?/g,"?");
}else{
_7=id?id.toString():"";
_6="";
}
}
}
if(_7.indexOf("=")!=-1){
_6=_7;
_7="";
}
if(_7){
_5=_5+"/"+_7+".json"+_6;
}else{
_5=_5+".json"+_6;
}
var _8=dojox.rpc._sync;
dojox.rpc._sync=false;
return {url:_5,handleAs:"json",contentType:"application/json",sync:_8,headers:{Accept:"application/json,application/javascript",Range:_4&&(_4.start>=0||_4.count>=0)?"items="+(_4.start||"0")+"-"+((_4.count&&(_4.count+(_4.start||0)-1))||""):undefined}};
};
_1.service=dojox.rpc.Rest(this.target,true,null,_3);
}
},fetch:function(_9){
_9=_9||{};
function _a(_b){
function _c(){
if(_9.queryStr==null){
_9.queryStr="";
}
if(dojo.isObject(_9.query)){
_9.queryStr="?"+dojo.objectToQuery(_9.query);
}else{
if(dojo.isString(_9.query)){
_9.queryStr=_9.query;
}
}
};
function _d(){
if(_9.queryStr.indexOf("?")==-1){
return "?";
}else{
return "&";
}
};
if(_9.queryStr==null){
_c();
}
_9.queryStr=_9.queryStr+_d()+dojo.objectToQuery(_b);
};
if(_9.start||_9.count){
if((_9.start||0)%_9.count){
throw new Error("The start parameter must be a multiple of the count parameter");
}
_a({page:((_9.start||0)/_9.count)+1,per_page:_9.count});
}
if(_9.sort){
var _e={sortBy:[],sortDir:[]};
dojo.forEach(_9.sort,function(_f){
_e.sortBy.push(_f.attribute);
_e.sortDir.push(!!_f.descending?"DESC":"ASC");
});
_a(_e);
delete _9.sort;
}
return this.inherited(arguments);
},_processResults:function(_10,_11){
var _12;
if((typeof this.rootAttribute=="undefined")&&_10[0]){
if(_10[0][this.idAttribute]){
this.rootAttribute=false;
}else{
for(var _13 in _10[0]){
if(_10[0][_13][this.idAttribute]){
this.rootAttribute=_13;
}
}
}
}
if(this.rootAttribute){
_12=dojo.map(_10,function(_14){
return _14[this.rootAttribute];
},this);
}else{
_12=_10;
}
var _15=_10.length;
return {totalCount:_11.fullLength||(_11.request.count==_15?(_11.request.start||0)+_15*2:_15),items:_12};
}});
}