Files
odoo_source/addons/web_calendar/static/lib/dhtmlxScheduler/sources/load.js
T

203 lines
5.8 KiB
JavaScript

/*
This software is allowed to use under GPL or you need to obtain Commercial or Enterise License
to use it in not GPL project. Please contact sales@dhtmlx.com for details
*/
scheduler._loaded={};
scheduler._load=function(url,from){
url=url||this._load_url;
url+=(url.indexOf("?")==-1?"?":"&")+"timeshift="+(new Date()).getTimezoneOffset();
if (this.config.prevent_cache) url+="&uid="+this.uid();
var to;
from=from||this._date;
if (this._load_mode){
var lf = this.templates.load_format;
from = this.date[this._load_mode+"_start"](new Date(from.valueOf()));
while (from>this._min_date) from=this.date.add(from,-1,this._load_mode);
to = from;
var cache_line = true;
while (to<this._max_date){
to=this.date.add(to,1,this._load_mode);
if (this._loaded[lf(from)] && cache_line)
from=this.date.add(from,1,this._load_mode);
else cache_line = false;
}
var temp_to=to;
do {
to = temp_to;
temp_to=this.date.add(to,-1,this._load_mode);
} while (temp_to>from && this._loaded[lf(temp_to)]);
if (to<=from)
return false; //already loaded
dhtmlxAjax.get(url+"&from="+lf(from)+"&to="+lf(to),function(l){scheduler.on_load(l);});
while(from<to){
this._loaded[lf(from)]=true;
from=this.date.add(from,1,this._load_mode);
}
} else
dhtmlxAjax.get(url,function(l){scheduler.on_load(l);});
this.callEvent("onXLS",[]);
return true;
};
scheduler.on_load=function(loader){
this._loading=true;
var evs;
if (this._process)
evs=this[this._process].parse(loader.xmlDoc.responseText);
else
evs=this._magic_parser(loader);
this._not_render=true;
for (var i=0; i<evs.length; i++){
if (!this.callEvent("onEventLoading",[evs[i]])) continue;
this.addEvent(evs[i]);
}
this._not_render=false;
if (this._render_wait) this.render_view_data();
this._loading=false;
if (this._after_call) this._after_call();
this._after_call=null;
this.callEvent("onXLE",[]);
};
scheduler.json={};
scheduler.json.parse = function(data){
if (typeof data == "string"){
eval("scheduler._temp = "+data+";");
data = scheduler._temp;
}
var evs = [];
for (var i=0; i < data.length; i++){
data[i].start_date = scheduler.templates.xml_date(data[i].start_date);
data[i].end_date = scheduler.templates.xml_date(data[i].end_date);
evs.push(data[i]);
}
return evs;
};
scheduler.parse=function(data,type){
this._process=type;
this.on_load({xmlDoc:{responseText:data}});
};
scheduler.load=function(url,call){
if (typeof call == "string"){
this._process=call;
call = arguments[2];
}
this._load_url=url;
this._after_call=call;
this._load(url,this._date);
};
//possible values - day,week,month,year,all
scheduler.setLoadMode=function(mode){
if (mode=="all") mode="";
this._load_mode=mode;
};
//current view by default, or all data if "true" as parameter provided
scheduler.refresh=function(refresh_all){
alert("not implemented");
/*
this._loaded={};
this._load();
*/
};
scheduler.serverList=function(name, array){
if(array) {
return this.serverList[name] = array.slice(0);
}
return this.serverList[name] = (this.serverList[name]||[]);
};
scheduler._userdata={};
scheduler._magic_parser=function(loader){
var xml;
if (!loader.getXMLTopNode){ //from a string
var xml_string = loader.xmlDoc.responseText;
loader = new dtmlXMLLoaderObject(function(){});
loader.loadXMLString(xml_string);
}
xml=loader.getXMLTopNode("data");
if (xml.tagName!="data") return [];//not an xml
var opts = loader.doXPath("//coll_options");
for (var i=0; i < opts.length; i++) {
var bind = opts[i].getAttribute("for");
var arr = this.serverList[bind];
if (!arr) continue;
arr.splice(0,arr.length); //clear old options
var itms = loader.doXPath(".//item",opts[i]);
for (var j=0; j < itms.length; j++) {
var itm = itms[j];
var attrs = itm.attributes;
var obj = { key:itms[j].getAttribute("value"), label:itms[j].getAttribute("label")};
for (var k = 0; k < attrs.length; k++) {
var attr = attrs[k];
if(attr.nodeName == "value" || attr.nodeName == "label")
continue;
obj[attr.nodeName] = attr.nodeValue;
}
arr.push(obj);
}
}
if (opts.length)
scheduler.callEvent("onOptionsLoad",[]);
var ud=loader.doXPath("//userdata");
for (var i=0; i < ud.length; i++) {
var udx = this.xmlNodeToJSON(ud[i]);
this._userdata[udx.name]=udx.text;
}
var evs=[];
xml=loader.doXPath("//event");
for (var i=0; i < xml.length; i++) {
evs[i]=this.xmlNodeToJSON(xml[i]);
evs[i].text=evs[i].text||evs[i]._tagvalue;
evs[i].start_date=this.templates.xml_date(evs[i].start_date);
evs[i].end_date=this.templates.xml_date(evs[i].end_date);
}
return evs;
};
scheduler.xmlNodeToJSON = function(node){
var t={};
for (var i=0; i<node.attributes.length; i++)
t[node.attributes[i].name]=node.attributes[i].value;
for (var i=0; i<node.childNodes.length; i++){
var child=node.childNodes[i];
if (child.nodeType==1)
t[child.tagName]=child.firstChild?child.firstChild.nodeValue:"";
}
if (!t.text) t.text=node.firstChild?node.firstChild.nodeValue:"";
return t;
};
scheduler.attachEvent("onXLS",function(){
if (this.config.show_loading===true){
var t;
t=this.config.show_loading=document.createElement("DIV");
t.className='dhx_loading';
t.style.left = Math.round((this._x-128)/2)+"px";
t.style.top = Math.round((this._y-15)/2)+"px";
this._obj.appendChild(t);
}
});
scheduler.attachEvent("onXLE",function(){
var t;
if (t=this.config.show_loading)
if (typeof t == "object"){
this._obj.removeChild(t);
this.config.show_loading=true;
}
});