From: Robert R. <rai...@us...> - 2002-04-10 19:00:37
|
Update of /cvsroot/dynapi/dynapi2x/src/util In directory usw-pr-cvs1:/tmp/cvs-serv19326/src/util Added Files: cookie.js ioelement.js Log Message: initial import --- NEW FILE --- /* DynAPI Distribution Cookie functions The DynAPI Distribution is distributed under the terms of the GNU LGPL license. */ /* This is not tested, should work like this: var c = new Cookie('mycookieset'); c.set('name','MyName'); // re-saves cookie each time a value is added c.add('array',[1,2,3]); var c = new Cookie('mycookieset'); // auto-retrieves saved cookie object var name = c.get('name'); var array = c.get('array'); array[array.length] = 4; c.add('name',name+' MyLastName'); c.add('array',array); */ function Cookie(name) { this.inherit('DynObject'); this.name = name; this.data = {}; this.exists = false; var c = dynapi.functions.getCookie(this.name); if (c) { this.exists = true; var a = c.split(','); var x,n,v; for (var i=0;i<a.length;a++) { x = a[i].split('='); n = x[0]; v = x[1]; if (n && v) this.data[n] = v; } //var i1 = c.indexOf('expires='); this._save(false); } else this._save(); } var p = dynapi.setPrototype('Cookie','DynObject'); p.get = function(name) { return this.data[name]; }; p.getAll = function() { return data; }; p.add = function(name,value) { this.data[name] = value; this._save(); }; p.remove = function(name) { this.data[name] = null; delete this.data[name]; this._save(); }; p.setExpires = function(days) { this.expires = days; }; p.destroy = function() { dynapi.functions.deleteCookie(this.name); }; p._save = function(write) { var s = ''; for (var i in this.data) { var v = this.data[i]; if (v) s += i + '=' + escape(v) + ','; } s = s.substring(0,s.length-1); var f = 'Saved'; if (write!=false) dynapi.functions.setCookie(this.name,s,this.expires); else f = 'Found'; dynapi.debug.print(f+' Cookie: name='+this.name+' data={'+s+'}'); }; dynapi.functions.setCookie = function(name,value,days) { if (days) { var date=new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires="; expires="+date.toGMTString(); } else expires = ""; dynapi.frame.document.cookie = name+"="+value+expires+"; path=/"; }; dynapi.functions.getCookie = function(name) { var nameEQ = name+"="; var ca = dynapi.frame.document.cookie.split(';'); for(var i=0;i<ca.length;i++) { var c=ca[i]; while (c.charAt(0)==' ') c=c.substring(1,c.length); if (c.indexOf(nameEQ)==0) return c.substring(nameEQ.length,c.length); } return null; }; dynapi.functions.deleteCookie = function(name) { dynapi.functions.setCookie(name,"",-1); }; --- NEW FILE --- /* DynAPI Distribution IOElement Class The DynAPI Distribution is distributed under the terms of the GNU LGPL license. requires: dynapi.api.DynLayer // pages loaded must include this code: <script> if (parent.DynAPI) parent.IOElement.notify(this); </script> */ function IOElement(hiddenThreads) { this.inherit('DynLayer'); this._elmID = this.id+'elm'; this._requests = {}; // [url,data,fn,method,id,timer,cargo] this._cargoID=''; this._requestList = []; this._requestIndex = -1; this._retryID=null; this.api={}; this.api.source=this; this.failTime = 50000; this._elmBusy=[]; this._elmThread=null; this._maxThreads=(hiddenThreads>1 && hiddenThreads<=8)? hiddenThreads : 1; this._hidden = (hiddenThreads!=null)? true : false; if (this._hidden) { this.setVisible(false); var o = this; if (!dynapi.loaded) { dynapi.onLoad(function() { dynapi.document.addChild(o); }); } else dynapi.document.addChild(o); } this.addEventListener(IOElement.events); }; var p = dynapi.setPrototype('IOElement','DynLayer'); IOElement.events = { onprecreate : function(e) { var html=[],o = e.getSource(); if (o._hidden) { if (dynapi.ua.ns4) html = ['<ilayer name="',o._elmID,'" visibility="hide" width=0 height=0></ilayer>']; else if (dynapi.ua.ie) html = ['<iframe name="',o._elmID,'" style="width:0px; height:0px; visibility:hidden"></iframe>']; //style="display:none" else html = ['<iframe name="',o._elmID,'" style="width:0px; height:0px; visibility:hidden"></iframe>']; o.html=html.join('') o._elmThread=o._elmID; o._elmBusy[o._elmID]=false; for(var i=1;i<o._maxThreads;i++){ // setup additional threads html[1]=o._elmID+'x'+i; o.html+=html.join(''); o._elmBusy[o._elmID+'x'+i]=false; // flag as not busy } }else{ if (dynapi.ua.ns4) o.html = '<layer width='+o.w+' height='+o.h+' name="'+o._elmID+'" visibility="inherit"></ilayer>'; else o.html = '<iframe name="'+o._elmID+'" width='+o.w+' height='+o.h+' scrolling="no" frameborder="no" marginwidth=0 marginheight=0 style="overflow:hidden;"></iframe>'; } }, oncreate : function(e) { var o = e.getSource(); if (o.getScope()) { if (o._requestList.length>0) o._doRequest(); } } }; p.setTimeout=function(ms){if(!isNaN(ms))this.failTime=ms;} p.getVariable = function(name) { return this.getScope()[name]; }; p.getScope = function() { var scope; if (dynapi.ua.ns4) scope = this.doc.layers[this._elmThread]; else scope = window.frames[this._elmThread]; if (!scope) return alert('IOElement Error: no load element'); else return scope; }; p.getCargo=function(){ if(!this._cargoID) return null; var c=this._requests[this._cargoID][6]; this._requests[this._cargoID][6]=null; return c; }; p.isBusy = function(){ for (var i in this._elmBusy){ if (this._elmBusy[i]==false) return false; };return true }; p.cancelAll=function(){ this._requests=[]; for (var i in this._elmBusy){ this.elmThread=i; this._clearScope(); } } p.cancel= function(id){ id=(id)? id:this._retryID; var req=this._requests[id]; if(req){ this._elmBusy[req[4]]=false; this._requests[id]=null; this._clearScope() return true; } }; p.retry=function(id){ id=(id)? id:this._retryID; var req=this._requests[id]; if(req) { window.setTimeout(this+'._doRequest("'+id+'")',50); return true; } } p.get = function(url,data,fn,cargo) { return this._request(url,data,fn,'get',cargo); }; p.post = function(url,data,fn,cargo) { return this._request(url,data,fn,'post',cargo); }; p._request = function(url,data,fn,method,cargo) { var id = Math.random()+''; // create random load ID to ensure no caching id = 'io'+id.substring(2); dynapi.debug.print("IOElement "+method+" request"); if (typeof(url)=="string") this._requests[id] = [url,data,fn,method,null,null,cargo]; else if (method=="get") { for (var i=0;i<url.length;i++) { // support loading several files, attach handler to last file var src = url[i]; if (i<url.length-1) this._requests[id] = [src,null,null,method,null,null,cargo]; else this._requests[id] = [src,data,fn,method,null,null]; } } this._requestList[this._requestList.length] = id; window.setTimeout(this+'._doRequest()',20); return id }; p._doRequest = function(id) { if (this.isBusy()) return; else { if (this._requestIndex<this._requestList.length-1 || id) { if(!id){ // direct request - used by the retry() method this._requestIndex++; id = this._requestList[this._requestIndex]; } var r = this._requests[id]; var url = r[0]; var data = r[1]; var fn = r[2]; var method = r[3]; var elm = this._getFreeElm(); if(!elm) return; r[4]=this._elmThread; if (url.indexOf('http')!=0) { if (url.substr(0,1)=='/') url = 'http://'+dynapi.frame.document.domain+url; else url = dynapi.documentPath+url; } url += (url.indexOf('?')==-1)? '?' : '&'; url += 'ioRequestID='+id+'&ioElementID='+this.id; r[5] = window.setTimeout(this+'._notify("'+id+'","'+url+'",false)',this.failTime); if (method=="get" || dynapi.ua.ns4) { if (data) { for (var i in data) { url += '&'+i+'='+escape(data[i]); } } if (dynapi.ua.ns4) elm.src = url; else elm.document.location.href = url; }else { var str = '<html><body><form name="ioDataForm" action="'+url+'" method="post">'; var i; if (data) { for (i in data) { str += '<input name="'+i+'" type="hidden">'; } } str += '</form></body></html>'; elm.document.open(); elm.document.write(str); elm.document.close(); var f = elm.document.forms['ioDataForm']; if (!f) return alert("IOElement Error: no form element found"); if (f && data) { for (i in data) { f[i].value = data[i]; } } f.submit(); } this.invokeEvent("request"); }else { // finished all } } }; p._clearScope=function(){ var doc=this.getScope().document if(doc){doc.open();doc.write('');doc.close()} }; p._getFreeElm= function(){ for (var i in this._elmBusy){ if (this._elmBusy[i]==false){ this._elmThread=i;this._elmBusy[i]=true return this.getScope() } } }; p._notify = function(id, url, success) { var fn,req=this._requests[id]; if(!req)return; var s = (success!=null)? success : true; if (!this._elmBusy[req[4]] && success) { if(dprint)dprint('IOElement Error: '+id+' '+this._elmID+' '+url); return; } clearTimeout(req[5]); this._elmThread=req[4]; fn = (req) ? req[2]:null; if(!s)this._retryID=id; this._cargoID=id; if (fn) { var e = new DynEvent("load",this); fn(e, s); }else{ this.invokeEvent("response",null,s) } this._cargoID=''; if(s)this._requests[id] = null; else this._clearScope(); this._elmBusy[req[4]] = false; this._doRequest(); }; IOElement.notify = function(elm, fn, success) { // ds: added success parameter to nicely relay server generated error messages if (elm) { var url, id; if (dynapi.ua.ns4) url = elm.src; else url = elm.document.location.href; if (url) { elm.args = dynapi.functions.getURLArguments(url); var id = elm.args["ioRequestID"]; var obj = DynObject.all[elm.args["ioElementID"]]; if (obj!=null && id!=null) { elm.onload = function() { if (fn) fn(obj); // send obj fn - rmo obj._notify(id,url, success); // ds: success }; return obj; } else { return false; } } } return null; }; |