From: L W <war...@us...> - 2005-08-02 10:39:18
|
Update of /cvsroot/dynapi/dynapi3x/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv942/src Modified Files: dynapi.js Log Message: Update revisions prior to tag and release. Index: dynapi.js =================================================================== RCS file: /cvsroot/dynapi/dynapi3x/src/dynapi.js,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** dynapi.js 17 Jul 2003 04:34:06 -0000 1.15 --- dynapi.js 2 Aug 2005 10:39:08 -0000 1.16 *************** *** 1,12 **** /* ! DynAPI Distribution ! DynObject, DynAPI Object, UserAgent, Library, Functions ! The DynAPI Distribution is distributed under the terms of the GNU LGPL license. */ function DynObject() { ! this.id = "DynObject"+DynObject._c++; ! DynObject.all[this.id] = this; }; var p = DynObject.prototype; --- 1,12 ---- /* ! DynAPI Distribution ! DynObject, DynAPI Object, UserAgent, Library, Functions ! The DynAPI Distribution is distributed under the terms of the GNU LGPL license. */ function DynObject() { ! this.id = "DynObject"+DynObject._c++; ! DynObject.all[this.id] = this; }; var p = DynObject.prototype; *************** *** 17,25 **** p.removeMethod = function(n) {this[n] = null}; p.setID = function(id,isInline,noImports) { ! if (this.id) delete DynObject.all[this.id]; ! this.id = id; ! this.isInline=isInline; ! this._noInlineValues=noImports; ! DynObject.all[this.id] = this; }; p.toString = function() {return "DynObject.all."+this.id}; --- 17,25 ---- p.removeMethod = function(n) {this[n] = null}; p.setID = function(id,isInline,noImports) { ! if (this.id) delete DynObject.all[this.id]; ! this.id = id; ! this.isInline=isInline; ! this._noInlineValues=noImports; ! DynObject.all[this.id] = this; }; p.toString = function() {return "DynObject.all."+this.id}; *************** *** 27,142 **** DynObject._c = 0; DynObject.isClass = function(cn,n) { ! if (cn == n) return true; ! else { ! var c = dynapi.frame[cn]; ! var p = c.prototype._pClassName; ! if (p) return DynObject.isClass(p,n); ! else return false; ! } }; function _UserAgent() { ! var b = navigator.appName; ! var v = this.version = navigator.appVersion; ! var ua = navigator.userAgent.toLowerCase(); ! this.v = parseInt(v); ! this.safari = ua.indexOf("safari")>-1; // always check for safari & opera ! this.opera = ua.indexOf("opera")>-1; // before ns or ie ! this.ns = !this.opera && !this.safari && (b=="Netscape"); ! this.ie = !this.opera && (b=="Microsoft Internet Explorer"); ! this.gecko = ua.indexOf('gecko')>-1; // check for gecko engine ! if (this.ns) { ! this.ns4 = (this.v==4); ! this.ns6 = (this.v>=5); ! this.b = "Netscape"; ! }else if (this.ie) { ! this.ie4 = this.ie5 = this.ie55 = this.ie6 = false; ! if (v.indexOf('MSIE 4')>0) {this.ie4 = true; this.v = 4;} ! else if (v.indexOf('MSIE 5')>0) {this.ie5 = true; this.v = 5;} ! else if (v.indexOf('MSIE 5.5')>0) {this.ie55 = true; this.v = 5.5;} ! else if (v.indexOf('MSIE 6')>0) {this.ie6 = true; this.v = 6;} ! this.b = "MSIE"; ! }else if (this.opera) { ! this.v=parseInt(ua.substr(ua.indexOf("opera")+6,1)); // set opera version ! this.opera6=(this.v>=6); ! this.opera7=(this.v>=7); ! this.b = "Opera"; ! }else if (this.safari) { ! this.ns6 = (this.v>=5); // ns6 compatible correct? ! this.b = "Safari"; ! } ! this.dom = (document.createElement && document.appendChild && document.getElementsByTagName)? true : false; ! this.def = (this.ie||this.dom); ! this.win32 = ua.indexOf("win")>-1; ! this.mac = ua.indexOf("mac")>-1; ! this.other = (!this.win32 && !this.mac); ! this.supported = (this.def||this.ns4||this.ns6||this.opera)? true:false; ! this.broadband=false; ! this._bws=new Date; // bandwidth timer start }; function DynAPIObject() { ! this.DynObject = DynObject; ! this.DynObject(); ! this.version = '3.0.0 Beta 1'; ! this.loaded = false; ! this.ua = new _UserAgent(); ! this._loadfn = []; ! this._unloadfn = []; ! var f = this.frame = window; ! ! var url = f.document.location.href; ! url = url.substring(0,url.lastIndexOf('/')+1); ! this.documentPath = url; ! ! var o = this; ! ! this.library = {}; ! this.library.setPath = function(p) {o.library.path = p}; ! ! f.onload = function() { ! o.loaded = true; ! if (!o.ua.supported) return alert('Unsupported Browser. Exiting.'); ! if (o.library._create) o.library._create(); // calls dynapi._onLoad() after loading necessary files ! else setTimeout(o+'._onLoad()',1); ! }; ! f.onunload = function() { ! for (var i=0;i<o._unloadfn.length;i++) o._unloadfn[i](); ! if (o.document) { ! o.document._destroy(); ! o.document = null; ! } ! }; }; p = DynAPIObject.prototype = new DynObject; p.onLoad = function(f) { ! if (typeof(f)=="function") { ! if (!this.loaded) this._loadfn[this._loadfn.length] = f; ! else f(); ! } }; p._onLoad = function(f) { ! for (var i=0;i<this._loadfn.length;i++) this._loadfn[i](); }; p.onUnload = function(f) { ! if (typeof(f)=="function") this._unloadfn[this._unloadfn.length] = f; }; p.setPrototype = function(sC,sP) { ! var c = this.frame[sC]; ! var p = this.frame[sP]; ! if ((!c || !p) && this.ua.ns4 && this.library && this.library.elm) { ! if (!c) c = this.library.elm[sC]; ! if (!p) p = this.library.elm[sP]; ! } ! if (!c || !p) return alert('Prototype Error'); ! c.prototype = new p(); ! c.prototype._className = sC; ! c.prototype._pClassName = sP; ! c.toString = function() {return '['+sC+']'}; ! return c.prototype; }; --- 27,142 ---- DynObject._c = 0; DynObject.isClass = function(cn,n) { ! if (cn == n) return true; ! else { ! var c = dynapi.frame[cn]; ! var p = c.prototype._pClassName; ! if (p) return DynObject.isClass(p,n); ! else return false; ! } }; function _UserAgent() { ! var b = navigator.appName; ! var v = this.version = navigator.appVersion; ! var ua = navigator.userAgent.toLowerCase(); ! this.v = parseInt(v); ! this.safari = ua.indexOf("safari")>-1; // always check for safari & opera ! this.opera = ua.indexOf("opera")>-1; // before ns or ie ! this.ns = !this.opera && !this.safari && (b=="Netscape"); ! this.ie = !this.opera && (b=="Microsoft Internet Explorer"); ! this.gecko = ua.indexOf('gecko')>-1; // check for gecko engine ! if (this.ns) { ! this.ns4 = (this.v==4); ! this.ns6 = (this.v>=5); ! this.b = "Netscape"; ! }else if (this.ie) { ! this.ie4 = this.ie5 = this.ie55 = this.ie6 = false; ! if (v.indexOf('MSIE 4')>0) {this.ie4 = true; this.v = 4;} ! else if (v.indexOf('MSIE 5')>0) {this.ie5 = true; this.v = 5;} ! else if (v.indexOf('MSIE 5.5')>0) {this.ie55 = true; this.v = 5.5;} ! else if (v.indexOf('MSIE 6')>0) {this.ie6 = true; this.v = 6;} ! this.b = "MSIE"; ! }else if (this.opera) { ! this.v=parseInt(ua.substr(ua.indexOf("opera")+6,1)); // set opera version ! this.opera6=(this.v>=6); ! this.opera7=(this.v>=7); ! this.b = "Opera"; ! }else if (this.safari) { ! this.ns6 = (this.v>=5); // ns6 compatible correct? ! this.b = "Safari"; ! } ! this.dom = (document.createElement && document.appendChild && document.getElementsByTagName)? true : false; ! this.def = (this.ie||this.dom); ! this.win32 = ua.indexOf("win")>-1; ! this.mac = ua.indexOf("mac")>-1; ! this.other = (!this.win32 && !this.mac); ! this.supported = (this.def||this.ns4||this.ns6||this.opera)? true:false; ! this.broadband=false; ! this._bws=new Date; // bandwidth timer start }; function DynAPIObject() { ! this.DynObject = DynObject; ! this.DynObject(); ! this.version = '3.0.0-beta2'; ! this.loaded = false; ! this.ua = new _UserAgent(); ! this._loadfn = []; ! this._unloadfn = []; ! var f = this.frame = window; ! ! var url = f.document.location.href; ! url = url.substring(0,url.lastIndexOf('/')+1); ! this.documentPath = url; ! ! var o = this; ! ! this.library = {}; ! this.library.setPath = function(p) {o.library.path = p}; ! ! f.onload = function() { ! o.loaded = true; ! if (!o.ua.supported) return alert('Unsupported Browser. Exiting.'); ! if (o.library._create) o.library._create(); // calls dynapi._onLoad() after loading necessary files ! else setTimeout(o+'._onLoad()',1); ! }; ! f.onunload = function() { ! for (var i=0;i<o._unloadfn.length;i++) o._unloadfn[i](); ! if (o.document) { ! o.document._destroy(); ! o.document = null; ! } ! }; }; p = DynAPIObject.prototype = new DynObject; p.onLoad = function(f) { ! if (typeof(f)=="function") { ! if (!this.loaded) this._loadfn[this._loadfn.length] = f; ! else f(); ! } }; p._onLoad = function(f) { ! for (var i=0;i<this._loadfn.length;i++) this._loadfn[i](); }; p.onUnload = function(f) { ! if (typeof(f)=="function") this._unloadfn[this._unloadfn.length] = f; }; p.setPrototype = function(sC,sP) { ! var c = this.frame[sC]; ! var p = this.frame[sP]; ! if ((!c || !p) && this.ua.ns4 && this.library && this.library.elm) { ! if (!c) c = this.library.elm[sC]; ! if (!p) p = this.library.elm[sP]; ! } ! if (!c || !p) return alert('Prototype Error'); ! c.prototype = new p(); ! c.prototype._className = sC; ! c.prototype._pClassName = sP; ! c.toString = function() {return '['+sC+']'}; ! return c.prototype; }; *************** *** 145,232 **** dynapi.ximages={'__xCnTer__':0}; // eXtensible Images p._imageGetHTML=function(){ ! t= '<img src="'+this.src+'"' ! +((this.width)? ' width="'+this.width+'"':'') ! +((this.height)? ' height="'+this.height+'"':'') ! +' border="0">'; ! return t; }; dynapi.functions = { ! removeFromArray : function(array, index, id) { ! var which=(typeof(index)=="object")?index:array[index]; ! if (id) delete array[which.id]; else for (var i=0; i<array.length; i++) { ! if (array[i]==which) { ! if(array.splice) array.splice(i,1); ! else { ! for(var x=i; x<array.length-1; x++) array[x]=array[x+1]; ! array.length -= 1; ! } ! break; ! } ! } ! return array; ! }, ! removeFromObject : function(object, id) { ! if(!dynapi.ua.opera) delete object[id]; ! else { ! var o={}; ! for (var i in object) if(id!=i) o[i]=object[i]; ! object=o; ! } ! return object; ! }, ! True : function() {return true}, ! False : function() {return false}, ! Null : function() {}, ! Zero : function() {return 0;}, ! Allow : function() { ! event.cancelBubble = true; ! return true; ! }, ! Deny : function() { ! event.cancelBubble = false; ! return false; ! }, ! getImage : function(src,w,h) { ! img=(w!=null&&h!=null)? new Image(w,h) : new Image(); ! img.src=src; ! img.getHTML=dynapi._imageGetHTML; ! return img; ! }, ! getURLArguments : function(o) { // pass a string or frame/layer object ! var url,l={}; ! if (typeof(o)=="string") url = o; ! else if (dynapi.ua.ns4 && o.src) url = o.src; ! else if (o.document) url = o.document.location.href; ! else return l; ! var s = url.substring(url.indexOf('?')+1); ! var a = s.split('&'); ! for (var i=0;i<a.length;i++) { ! var b = a[i].split('='); ! l[b[0]] = unescape(b[1]); ! } ! return l; ! }, ! getAnchorLocation : function(a,lyr){ ! var o,x=0,y=0; ! if(lyr && !lyr.doc) lyr=null; ! lyr=(lyr)? lyr:{doc:document,elm:document}; ! if(typeof(a)=='string') { ! if(lyr.doc.all) a=lyr.doc.all[a]; ! else if(lyr.doc.getElementById) a=lyr.doc.getElementById(a); ! else if(lyr.doc.layers) a=lyr.doc.anchors[a]; ! } ! if(a) o=a; ! else return; ! if(lyr.doc.layers) { y+=o.y; x+=o.x;} ! else if(lyr.doc.getElementById || lyr.doc.all){ ! while (o.offsetParent && lyr.elm!=o){ ! x+= o.offsetLeft;y+= o.offsetTop; ! o = o.offsetParent; ! } ! } ! return {x:x,y:y,anchor:a}; ! } }; --- 145,232 ---- dynapi.ximages={'__xCnTer__':0}; // eXtensible Images p._imageGetHTML=function(){ ! t= '<img src="'+this.src+'"' ! +((this.width)? ' width="'+this.width+'"':'') ! +((this.height)? ' height="'+this.height+'"':'') ! +' border="0">'; ! return t; }; dynapi.functions = { ! removeFromArray : function(array, index, id) { ! var which=(typeof(index)=="object")?index:array[index]; ! if (id) delete array[which.id]; else for (var i=0; i<array.length; i++) { ! if (array[i]==which) { ! if(array.splice) array.splice(i,1); ! else { ! for(var x=i; x<array.length-1; x++) array[x]=array[x+1]; ! array.length -= 1; ! } ! break; ! } ! } ! return array; ! }, ! removeFromObject : function(object, id) { ! if(!dynapi.ua.opera) delete object[id]; ! else { ! var o={}; ! for (var i in object) if(id!=i) o[i]=object[i]; ! object=o; ! } ! return object; ! }, ! True : function() {return true}, ! False : function() {return false}, ! Null : function() {}, ! Zero : function() {return 0;}, ! Allow : function() { ! event.cancelBubble = true; ! return true; ! }, ! Deny : function() { ! event.cancelBubble = false; ! return false; ! }, ! getImage : function(src,w,h) { ! img=(w!=null&&h!=null)? new Image(w,h) : new Image(); ! img.src=src; ! img.getHTML=dynapi._imageGetHTML; ! return img; ! }, ! getURLArguments : function(o) { // pass a string or frame/layer object ! var url,l={}; ! if (typeof(o)=="string") url = o; ! else if (dynapi.ua.ns4 && o.src) url = o.src; ! else if (o.document) url = o.document.location.href; ! else return l; ! var s = url.substring(url.indexOf('?')+1); ! var a = s.split('&'); ! for (var i=0;i<a.length;i++) { ! var b = a[i].split('='); ! l[b[0]] = unescape(b[1]); ! } ! return l; ! }, ! getAnchorLocation : function(a,lyr){ ! var o,x=0,y=0; ! if(lyr && !lyr.doc) lyr=null; ! lyr=(lyr)? lyr:{doc:document,elm:document}; ! if(typeof(a)=='string') { ! if(lyr.doc.all) a=lyr.doc.all[a]; ! else if(lyr.doc.getElementById) a=lyr.doc.getElementById(a); ! else if(lyr.doc.layers) a=lyr.doc.anchors[a]; ! } ! if(a) o=a; ! else return; ! if(lyr.doc.layers) { y+=o.y; x+=o.x;} ! else if(lyr.doc.getElementById || lyr.doc.all){ ! while (o.offsetParent && lyr.elm!=o){ ! x+= o.offsetLeft;y+= o.offsetTop; ! o = o.offsetParent; ! } ! } ! return {x:x,y:y,anchor:a}; ! } }; *************** *** 237,265 **** dPrint=function(s){var d=dynapi.debug; d.print(s)}; dynapi.debug.print = function(s) { ! //@IF:DEBUG[ ! if(s==null) s=''; ! dynapi._debugBuffer += s + '\n'; ! //]:DEBUG }; // The DynAPI library system is optional, this can be removed if you want to include other scripts manually function DynAPILibrary() { ! this.DynObject = DynObject; ! this.DynObject(); ! // list of js files: this.scripts['../src/api/dynlayer_ie.js'] = {dep, objects, pkg, fn}; ! this.scripts = {}; ! // list of package names: this.packages['dynapi.api'] = dynapi.api = {_objects,_path} ! this.packages = {}; ! // list of object names: this.objects['DynLayer'] = this.scripts['../src/api/dynlayer_ie.js'] ! this.objects = {}; ! ! this._c = 0; ! this.loadList = []; ! this.loadIndex = -1; ! this.path = null; ! this.busy = true; }; p = dynapi.setPrototype('DynAPILibrary','DynObject'); --- 237,265 ---- dPrint=function(s){var d=dynapi.debug; d.print(s)}; dynapi.debug.print = function(s) { ! //@IF:DEBUG[ ! if(s==null) s=''; ! dynapi._debugBuffer += s + '\n'; ! //]:DEBUG }; // The DynAPI library system is optional, this can be removed if you want to include other scripts manually function DynAPILibrary() { ! this.DynObject = DynObject; ! this.DynObject(); ! // list of js files: this.scripts['../src/api/dynlayer_ie.js'] = {dep, objects, pkg, fn}; ! this.scripts = {}; ! // list of package names: this.packages['dynapi.api'] = dynapi.api = {_objects,_path} ! this.packages = {}; ! // list of object names: this.objects['DynLayer'] = this.scripts['../src/api/dynlayer_ie.js'] ! this.objects = {}; ! ! this._c = 0; ! this.loadList = []; ! this.loadIndex = -1; ! this.path = null; ! this.busy = true; }; p = dynapi.setPrototype('DynAPILibrary','DynObject'); *************** *** 267,431 **** // can return a path specific to a package, eg. dynapi.library.getPath('dynapi.api') returns '/src/dynapi/api/' p.getPath = function(pkg) { ! if (!pkg) pkg = 'dynapi'; ! if (this.packages[pkg]) return this.packages[pkg]._path; ! return null; }; // set dynapi path p.setPath = function(p,pkgFile) { ! this.path = p; ! // to-do: rearrange so add()'s can be done before setPath ! // full paths will then be determined when queued ! // need an extra argument on addPackage to specify whether the path is relative to this.path or not ! // OR: add functionality so that these package definitions can be loaded/included on the fly ! ! // load pkgFile or 'ext/packages.js' file ! var s='<script type="text/javascript" language="JavaScript" src="' ! +((pkgFile)? pkgFile:p+'ext/packages.js')+'"><\/script>'; ! document.write(s); }; // adds package(s) to the library p.addPackage = function(pkg, path) { ! var ps; ! if (pkg.indexOf('.')) ps = pkg.split('.'); ! else ps = [pkg]; ! ! var p = dynapi.frame; ! for (var i=0;i<ps.length;i++) { // returns the package object (eg. dynapi.api), or creates it if non-existant ! if (!p[ps[i]]) p[ps[i]] = {}; ! p = p[ps[i]]; ! } ! this.packages[pkg] = p; ! p._objects = []; ! p._path = path; ! return p; }; // add object(s) to the library p.add = function(name, src, dep, relSource) { ! var objects = typeof(name)=="string"? [name] : name; ! dep = (!dep)? [] : typeof(dep)=="string"? [dep] : dep; ! var s,p,pkg; ! if (objects[0].indexOf('.')) { ! pkg = objects[0].substring(0,objects[0].lastIndexOf('.')); ! if (pkg && this.packages[pkg]) { ! p = this.packages[pkg]; ! if (relSource!=false) src = p._path + src; ! } ! } ! if (!this.scripts[src]) s = this.scripts[src] = {}; ! else s = this.scripts[src]; ! s.objects = []; ! s.dep = dep; ! s.rdep = []; ! s.src = src; ! s.pkg = pkg; ! s.loaded = false; ! s.fn = null; ! ! var n; ! for (var i=0;i<objects.length;i++) { ! n = objects[i]; ! if (pkg) n = n.substring(n.lastIndexOf('.')+1); ! this.objects[n] = s; ! s.objects[s.objects.length] = n; ! if (p) p._objects[p._objects.length] = n; ! } ! return s; }; // adds a dependency, whenever object "n" is loaded it will load object "d" beforehand p.addBefore = function(n, d) { ! var s = this.objects[n]; ! if (s && this.objects[d]) s.dep[s.dep.length] = d; }; // adds a reverse dependency, whenever object "n" is loaded it will load object "r" afterword p.addAfter = function(n, r) { ! var s = this.objects[n]; ! if (s && this.objects[r]) s.rdep[s.rdep.length] = r; }; // returns a list of js source filenames to load p._queue = function(n, list, force) { ! var na=[], names=[],o; ! if (list==null) list = []; ! if (typeof(n)=="string") na = [n]; ! else na = n; ! ! for (var i=0;i<na.length;i++) { ! o = na[i]; ! if (typeof(o)=="string") { ! if (this.packages[o]) ! for (var j in this.packages[o]._objects) ! names[names.length] = this.packages[o]._objects[j]; ! else names[names.length] = o; ! } ! else if (typeof(o)=="object" && o.length) { ! list = this._queue(o, list, force); ! } ! } ! ! var s; ! for (var j=0;j<names.length;j++) { ! s = this._queueObject(names[j], force); ! if (s) { ! if (s.dep) ! for (var i=0;i<s.dep.length;i++) ! list = this._queue(s.dep[i], list, force); ! list[list.length] = s.src; ! // also include reverse deps ! if (s.rdep.length) list = this._queue(s.rdep, list, force); ! } ! } ! return list; }; // determines whether to queue the script this object is in p._queueObject = function(n, f) { ! if (n.indexOf('.')) { ! var pkg = n.substring(0,n.lastIndexOf('.')); ! if (this.packages[pkg]) n = n.substring(n.lastIndexOf('.')+1); ! } ! var s = this.objects[n]; ! if (s) { ! if (!s.queued) { ! if (f!=true && s.loaded) dynapi.debug.print('Library Warning: '+n+' is already loaded'); ! else { ! s.queued = true; ! s.loaded = false; ! return s; ! } ! } ! } ! else dynapi.debug.print('Library Error: no library map for '+n); ! return false; }; // writes the <script> tag for the object ! p.include = function() { ! var a = arguments; ! if (a[0]==true) a=a[1]; // arguments used ONLY by packages.js ! // buffer includes until packages(.js) are loaded ! if (!this._pakLoaded) { ! if(!this._buffer) this._buffer=[]; ! this._buffer[this._buffer.length]=a; ! return; ! } ! if (dynapi.loaded) this.load(a); ! else { ! var list = this._queue(a); ! var src; ! for (var i=0;i<list.length;i++) { ! src = list[i]; ! this.scripts[src].loaded = true; ! dynapi.frame.document.write('<script type="text/javascript" language="JavaScript" src="'+src+'"><\/script>'); ! } ! } }; p.load = p.reload = p.loadScript = p.reloadScript = function(n) { ! dynapi.debug.print('Warning: dynapi.library load extensions not included'); }; dynapi.library = new DynAPILibrary(); --- 267,431 ---- // can return a path specific to a package, eg. dynapi.library.getPath('dynapi.api') returns '/src/dynapi/api/' p.getPath = function(pkg) { ! if (!pkg) pkg = 'dynapi'; ! if (this.packages[pkg]) return this.packages[pkg]._path; ! return null; }; // set dynapi path p.setPath = function(p,pkgFile) { ! this.path = p; ! // to-do: rearrange so add()'s can be done before setPath ! // full paths will then be determined when queued ! // need an extra argument on addPackage to specify whether the path is relative to this.path or not ! // OR: add functionality so that these package definitions can be loaded/included on the fly ! ! // load pkgFile or 'ext/packages.js' file ! var s='<script type="text/javascript" language="JavaScript" src="' ! +((pkgFile)? pkgFile:p+'ext/packages.js')+'"><\/script>'; ! document.write(s); }; // adds package(s) to the library p.addPackage = function(pkg, path) { ! var ps; ! if (pkg.indexOf('.')) ps = pkg.split('.'); ! else ps = [pkg]; ! ! var p = dynapi.frame; ! for (var i=0;i<ps.length;i++) { // returns the package object (eg. dynapi.api), or creates it if non-existant ! if (!p[ps[i]]) p[ps[i]] = {}; ! p = p[ps[i]]; ! } ! this.packages[pkg] = p; ! p._objects = []; ! p._path = path; ! return p; }; // add object(s) to the library p.add = function(name, src, dep, relSource) { ! var objects = typeof(name)=="string"? [name] : name; ! dep = (!dep)? [] : typeof(dep)=="string"? [dep] : dep; ! var s,p,pkg; ! if (objects[0].indexOf('.')) { ! pkg = objects[0].substring(0,objects[0].lastIndexOf('.')); ! if (pkg && this.packages[pkg]) { ! p = this.packages[pkg]; ! if (relSource!=false) src = p._path + src; ! } ! } ! if (!this.scripts[src]) s = this.scripts[src] = {}; ! else s = this.scripts[src]; ! s.objects = []; ! s.dep = dep; ! s.rdep = []; ! s.src = src; ! s.pkg = pkg; ! s.loaded = false; ! s.fn = null; ! ! var n; ! for (var i=0;i<objects.length;i++) { ! n = objects[i]; ! if (pkg) n = n.substring(n.lastIndexOf('.')+1); ! this.objects[n] = s; ! s.objects[s.objects.length] = n; ! if (p) p._objects[p._objects.length] = n; ! } ! return s; }; // adds a dependency, whenever object "n" is loaded it will load object "d" beforehand p.addBefore = function(n, d) { ! var s = this.objects[n]; ! if (s && this.objects[d]) s.dep[s.dep.length] = d; }; // adds a reverse dependency, whenever object "n" is loaded it will load object "r" afterword p.addAfter = function(n, r) { ! var s = this.objects[n]; ! if (s && this.objects[r]) s.rdep[s.rdep.length] = r; }; // returns a list of js source filenames to load p._queue = function(n, list, force) { ! var na=[], names=[],o; ! if (list==null) list = []; ! if (typeof(n)=="string") na = [n]; ! else na = n; ! ! for (var i=0;i<na.length;i++) { ! o = na[i]; ! if (typeof(o)=="string") { ! if (this.packages[o]) ! for (var j in this.packages[o]._objects) ! names[names.length] = this.packages[o]._objects[j]; ! else names[names.length] = o; ! } ! else if (typeof(o)=="object" && o.length) { ! list = this._queue(o, list, force); ! } ! } ! ! var s; ! for (var j=0;j<names.length;j++) { ! s = this._queueObject(names[j], force); ! if (s) { ! if (s.dep) ! for (var i=0;i<s.dep.length;i++) ! list = this._queue(s.dep[i], list, force); ! list[list.length] = s.src; ! // also include reverse deps ! if (s.rdep.length) list = this._queue(s.rdep, list, force); ! } ! } ! return list; }; // determines whether to queue the script this object is in p._queueObject = function(n, f) { ! if (n.indexOf('.')) { ! var pkg = n.substring(0,n.lastIndexOf('.')); ! if (this.packages[pkg]) n = n.substring(n.lastIndexOf('.')+1); ! } ! var s = this.objects[n]; ! if (s) { ! if (!s.queued) { ! if (f!=true && s.loaded) dynapi.debug.print('Library Warning: '+n+' is already loaded'); ! else { ! s.queued = true; ! s.loaded = false; ! return s; ! } ! } ! } ! else dynapi.debug.print('Library Error: no library map for '+n); ! return false; }; // writes the <script> tag for the object ! p.include = function() { ! var a = arguments; ! if (a[0]==true) a=a[1]; // arguments used ONLY by packages.js ! // buffer includes until packages(.js) are loaded ! if (!this._pakLoaded) { ! if(!this._buffer) this._buffer=[]; ! this._buffer[this._buffer.length]=a; ! return; ! } ! if (dynapi.loaded) this.load(a); ! else { ! var list = this._queue(a); ! var src; ! for (var i=0;i<list.length;i++) { ! src = list[i]; ! this.scripts[src].loaded = true; ! dynapi.frame.document.write('<script type="text/javascript" language="JavaScript" src="'+src+'"><\/script>'); ! } ! } }; p.load = p.reload = p.loadScript = p.reloadScript = function(n) { ! dynapi.debug.print('Warning: dynapi.library load extensions not included'); }; dynapi.library = new DynAPILibrary(); |