Patches item #420252, was updated on 2001-04-30 13:27 You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=305757&aid=420252&group_id=5757 Category: None Group: None Status: Open Resolution: None Priority: 5 Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: toloadlayer better than loadpanel Initial Comment: Hi every one I made a new version of loadpanel that I called loadlayer... the best is that you can aply load functions to all DynLayers if you like.... but the better is that this toloadlayer make load functions in a layer work as a frame or iframe, so all links load html files inside the layer if target==self... toloadlayer.js (to put on ----------------------------------------------------- /* DynAPI Distribution LoadPanel Widget The DynAPI Distribution is distributed under the terms of the GNU LGPL license. Requirements: dynapi.api [dynlayer, dyndocument, browser, events] */ function LoadPanel(url) { this.DynLayer = DynLayer; this.DynLayer(); this.autoH=true; this.autoW=false; this.isILayer=false; this.isIFrame=!(is.ie5 && is.platform=='win32'); var l=new EventListener(this); l.onresize=function(e) { var o=e.getTarget(); if (!o.created || o.isReloading) return; if (o.autoH && o.url) o.reload(); }; l.oncreate=function(e) { var o=e.getTarget(); o.setURL(o.url); if (!o.isReloading && o.tempURL) { o.setURL(o.tempURL); delete o.tempURL; } }; this.addEventListener(l); this.tempURL=url; return this; }; LoadPanel.prototype=new DynLayer(); LoadPanel.prototype.setAutoResizeWidth=function(b) { this.autoW=b; }; LoadPanel.prototype.setAutoResizeHeight=function(b) { this.autoH=b; }; LoadPanel.prototype.useILayer=function(b) { if (is.ns4) { this.isILayer=b; if (this.created) this.reload(); } }; LoadPanel.prototype.useIFrame=function(b) { if (is.def) { this.isIFrame=b; if (this.created) this.reload(); } }; LoadPanel.prototype.insertInlineElements=function() { if (is.ie5) { if (this.isIFrame) this.setHTML ('<IFRAME ID="'+this.id+'loadElement" STYLE="visibility: hidden; display: none;"></IFRAME>',false); else this.setHTML('<DIV ID="'+this.id+'loadElement" STYLE="behavior:url (#default#download)" style="display: none;"></DIV>',false); } else if (is.ns4 && this.isILayer) this.setHTML ('<ilayer></ilayer>',false); else if (is.ns6) this.setHTML('<IFRAME ID="'+this.id+'loadElement" STYLE="visibility: hidden;"></IFRAME>',false); else if (is.ie4) { if (this.useBuffer) this.setHTML ('<IFRAME ID="'+this.id+'loadElement" STYLE="visibility: hidden; display: none;" onLoad="LoadQueue.loadHandler()"></IFRAME>',false); else this.setHTML('<IFRAME ID="'+this.id+'loadElement" WIDTH="'+this.getWidth() +'" HEIGHT="'+this.getHeight()+'" STYLE="visibility: hidden; display: none;" onLoad="LoadQueue.loadHandler ()"></IFRAME>',false); } }; LoadPanel.prototype.findInlineElements=function() { if (is.ie5) { if (this.isIFrame) this.loadElement=document.frames (this.id+'loadElement'); else this.loadElement=document.all (this.id+'loadElement'); } else if (is.ns4) { if (this.isILayer) this.loadElement=this.doc.layers[0]; else this.loadElement=this.elm; } else if (is.ns6) this.loadElement=document.getElementById (this.id+'loadElement'); else if (is.ie4) { if (this.isIFrame) this.loadElement=document.all[this.id+'loadElement']; else this.loadElement=this.elm; } }; LoadPanel.prototype.getFileScope=function() { if (!this.loadElement) return null; return this.loadElement; }; LoadPanel.prototype.clearFile=function() { this.url=null if (this.isILayer) { this.loadElement.document.write(''); this.loadElement.document.close(); } else this.reload(); }; LoadPanel.prototype.getURL=function() { return this.url; }; LoadPanel.prototype.setURL=function(url) { if (!url) return; if (!this.created) this.url=url; else LoadPanel.queue.add(url,this); }; LoadPanel.prototype.reload=function() { this.isReloading=true; var url=this.url; var p=this.parent; this.removeFromParent(); // CH: Had to add this code, so NS4 does not recycle the old loadElement. if(is.ns4 && p.doc.recycled.length>0) { delete p.doc.recycled [p.doc.recycled.length-1]; p.doc.recycled.length--; } this.html = ''; p.addChild(this); this.isReloading=false; } LoadPanel.prototype.loadHandler=function(url) { this.url=url; if (is.ie5 && !this.isIFrame && this.elm && this.elm.all) { var imgs = this.elm.all.tags("img"); for (var i=0;i<imgs.length;i++) { if (imgs[i].readyState == 'uninitialized') imgs[i].src = imgs[i].src; } } if (is.ns4 && this.isILayer) { var w=this.loadElement.document.width; var h=this.loadElement.document.height; } else { var w=this.getContentWidth(); var h=this.getContentHeight(); } if (this.autoW) this.setWidth(w,false); if (this.autoH) this.setHeight(h,false); this.isReloading=false; this.invokeEvent('load'); }; function LoadQueue() { this.queue=new Array(); this.index=0; }; LoadQueue.prototype.toString=function() { return "LoadPanel.queue"; }; LoadQueue.prototype.add=function(url,loadpanel) { var q=this.queue.length; this.queue[q]=[url,loadpanel]; this.loadNext(); }; LoadQueue.prototype.loadNext=function() { if (!this.busy && this.queue[this.index]) { this.busy=true; var lpanel=this.currentLoadPanel=this.queue[this.index][1]; var url=this.currentURL=this.queue [this.index][0]; if (is.ns4) { if (is.ILayer) lpanel.insertInlineElements(); lpanel.findInlineElements(); DynAPI.document.releaseMouseEvents(); var lyr=lpanel.elm; while(lyr.parentLayer) lyr=lyr.parentLayer; lyr.onload=LoadQueue.loadHandler; lpanel.loadElement.onload=LoadQueue.loadHandler ; lpanel.loadElement.src=url; } else { if (!lpanel.loadElement) { lpanel.insertInlineElements(); lpanel.findInlineElements(); } if (is.ie5) { if (lpanel.isIFrame) { lpanel.loadElement.document.isLoading=true; lpanel.loadElement.location=url; lpanel.timerID=setInterval(this.toString() + '.loadTimer()',250); } else lpanel.loadElement.startDownload (url,LoadQueue.loadHandler); } else if (is.ie4) { lpanel.timerID=setInterval("if (document.frames ['"+lpanel.id+"loadElement'].document.readyState=='inte ractive') {clearInterval("+lpanel.toString() +".timerID);LoadQueue.loadHandler(document.frames ['"+lpanel.id+"loadElement'].document.body.innerHTML)}" ,250); document.frames [lpanel.id+"loadElement"].document.location=url; } else if (is.ns6) { lpanel.timerID=setInterval(this.toString() + '.loadTimer()',250); lpanel.loadElement.src=url; } } Methods.removeFromArray (this.queue,this.index); } }; if (is.ns6) { LoadQueue.prototype.loadTimer=function() { var lpanel=this.currentLoadPanel; if (!document.getElementById (lpanel.id+'loadElement')) { clearInterval(lpanel.timerID); LoadQueue.continueLoad(); } else if (lpanel.loadElement.contentDocument && lpanel.loadElement.contentDocument.body.innerHTML != document.body.innerHTML) { clearInterval(lpanel.timerID); LoadQueue.loadHandler (lpanel.loadElement.contentDocument); } } } else if (is.ie5) { LoadQueue.prototype.loadTimer=function() { var lpanel=this.currentLoadPanel; if (!document.frames (lpanel.id+'loadElement')) { clearInterval(lpanel.timerID); LoadQueue.continueLoad(); } else if (! lpanel.loadElement.document.isLoading && (lpanel.loadElement.document.readyState=='interactive' || lpanel.loadElement.document.readyState=='complete')) { clearInterval(lpanel.timerID); LoadQueue.loadHandler (lpanel.loadElement.document.body.innerHTML); } } } LoadQueue.loadHandler=function(e) { var q=LoadPanel.queue; var lp=q.currentLoadPanel; if (q.currentLoadPanel) { if (is.ie) { lp.elm.innerHTML=e; if (lp.isIFrame) lp.loadElement=null; } else if (is.ns4) { var lyr = lp.elm; while(lyr.parentLayer != window) lyr = lyr.parentLayer; lyr.onload = function(){}; lp.loadElement.onload = function(){}; } else if (is.ns6) { var html=e.body.innerHTML; lp.elm.innerHTML=html; lp.loadElement=null; } setTimeout('LoadQueue.continueLoad ()',200); } }; LoadQueue.continueLoad=function() { var q=LoadPanel.queue; q.currentLoadPanel.loadHandler(q.currentURL); q.busy=false; if (q.queue[q.index]) q.loadNext(); else DynAPI.document.captureMouseEvents(); }; LoadPanel.queue=new LoadQueue(); *EOF* test.html ----------------------------------------------------- <html> <head> <script language="Javascript" src="js/dynapi.js"></script> <script language="Javascript"> DynAPI.setLibraryPath('js/'); DynAPI.include('dynapi.api.*'); DynAPI.include('dynapi.event.*'); DynAPI.include('dynapi.gui.toloadlayer.js'); </script> <script language="Javascript"> DynAPI.onLoad = function() { panel1 = new DynLayer( null, 10, 20, 200, 150, "#ffffff") panel1.toLoadLayer("text1.html") DynAPI.document.addChild( panel1 ) panel2 = new DynLayer( null, 400, 20, 200, 150, "#ffffff") panel2.toLoadLayer("text2.html") DynAPI.document.addChild( panel2 ) } </script> </head> <body> </body> </html> *EOF* text1.html ----------------------------------------------------- <html> <head> </head> <body border=0 scroll=no marginwidth=0 marginheight=0 topmargin=0 leftmargin=0 bgcolor=#ffffff text=#000000 link=#ff0000> <a href="text2.html">to TEXt2.html</a><br> <a href="text2.html" target="_top">to TEXt2.html target _top</a><br> <a href="javascript:alert(1);">javascript alert</a><br> </body> </html> *EOF* text2.html ----------------------------------------------------- <html> <head> </head> <body border=0 scroll=no marginwidth=0 marginheight=0 topmargin=0 leftmargin=0 bgcolor=#ffffff text=#000000 link=#ff0000> <a href="text1.html">to TEXt1.html</a><br> </body> </html> *EOF* Enjoy www.microbians.com [EMAIL PROTECTED] ---------------------------------------------------------------------- You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=305757&aid=420252&group_id=5757 _______________________________________________ Dynapi-Dev mailing list [EMAIL PROTECTED] http://lists.sourceforge.net/lists/listinfo/dynapi-dev