You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(83) |
Nov
(319) |
Dec
(441) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(617) |
Feb
(784) |
Mar
(426) |
Apr
(363) |
May
(489) |
Jun
(396) |
Jul
(405) |
Aug
(146) |
Sep
(97) |
Oct
(146) |
Nov
(348) |
Dec
(99) |
2002 |
Jan
(69) |
Feb
(92) |
Mar
(58) |
Apr
(33) |
May
(29) |
Jun
(45) |
Jul
(72) |
Aug
(71) |
Sep
(47) |
Oct
(19) |
Nov
(48) |
Dec
(55) |
2003 |
Jan
(23) |
Feb
(73) |
Mar
(42) |
Apr
(52) |
May
(64) |
Jun
(155) |
Jul
(169) |
Aug
(103) |
Sep
(113) |
Oct
(118) |
Nov
(46) |
Dec
(30) |
2004 |
Jan
(19) |
Feb
(24) |
Mar
(40) |
Apr
(13) |
May
(35) |
Jun
(1) |
Jul
(23) |
Aug
(3) |
Sep
(31) |
Oct
(31) |
Nov
(26) |
Dec
|
2005 |
Jan
(5) |
Feb
(4) |
Mar
(3) |
Apr
(2) |
May
(2) |
Jun
|
Jul
|
Aug
(23) |
Sep
(9) |
Oct
(5) |
Nov
(2) |
Dec
(1) |
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(3) |
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Shruti C. (shruchau) <shr...@ci...> - 2008-07-17 18:41:27
|
Can i have reply on my below problem.I would like to add here that im only updating the inner layer of table on every refresh of the screen. On refresh i fetch the data from backend using jsrsExecute and then the response html i set to the layer by using setHtml. What could be the memory leak in this and how to get rid of it. Regards Shruti ________________________________ From: Shruti Chaudhary (shruchau) Sent: Tuesday, July 15, 2008 10:46 PM To: 'dyn...@li...' Subject: Out Of memory in DynAPI2 Dear Support, We have a page contaning a table which is refreshed continuously after completion of certain interval.On refreshing it fetches the new set of data and populates the table with the new fetched data.We get out of memory error on this page after 3-4hrs. Could you please help me as to how can i debug or find out the cause of this error.Some memory leak is happnening which is causing the memory to increase continuously. DynAPI2 Version 2.5.7 The problem is reproducible in IE6.0 in window 2000 Best Regards, Shruti Chaudhary Work: +91 (080) 4103 6096 | Cell: +91 9731850850 Cisco Systems Pvt Ltd Prestige Waterford No 9, Brunton Road Bangalore-560025, Karnataka, India shr...@ci... |
From: Shruti C. (shruchau) <shr...@ci...> - 2008-07-15 17:35:40
|
Dear Support, We have a page contaning a table which is refreshed continuously after completion of certain interval.On refreshing it fetches the new set of data and populates the table with the new fetched data.We get out of memory error on this page after 3-4hrs. Could you please help me as to how can i debug or find out the cause of this error.Some memory leak is happnening which is causing the memory to increase continuously. DynAPI2 Version 2.5.7 The problem is reproducible in IE6.0 in window 2000 Best Regards, Shruti Chaudhary Work: +91 (080) 4103 6096 | Cell: +91 9731850850 Cisco Systems Pvt Ltd Prestige Waterford No 9, Brunton Road Bangalore-560025, Karnataka, India shr...@ci... |
From: Shruti C. (shruchau) <shr...@ci...> - 2008-06-24 13:36:45
|
Following are the specifications DynAPI2 Version 2.5.7 IE 6.0 OS-XP Currently my application has support only on IE. What do you mean by trying the version in CVS? I will try to create a minimum sample and send across. Regards Shruti -----Original Message----- From: dyn...@li... [mailto:dyn...@li...] On Behalf Of Leif W Sent: Tuesday, June 24, 2008 6:58 PM To: dyn...@li... Subject: Re: [Dynapi-Help] ScrollPane is distorting Hi. Which version of DynAPI are you using? Have you tried the version in CVS? Which browser are you using? Operating System? Browser Version? OS version? Have you tried in other browsers? Does it work as you expect in any other browsers? Please make a very generic and simplified example of the code that creates the problem, preferably if it can all fit in to one html file or maybe one JavaScript file. Leif ------ Original Message ------ Received: Tue, 24 Jun 2008 07:42:39 AM EDT From: "Shruti Chaudhary (shruchau)" <shr...@ci...> To: <dyn...@li...> Subject: [Dynapi-Help] ScrollPane is distorting > Dear Support, > I m using scrollpane with table embedded in it. Now if i use > Ctrl+F and search for a text which is currently visible in the page it > works fine.If i ctrl+F for a text which is not currently visible on > the visible part of the page and is somewhere down , then the searched > text is sometimes found and highlightened but horizontal scrollbar > gets distorted and doesnot remain at the border of the table. Seems > like on searching of text the page scrolls down but the scrollpane > remains intact to its prev position so it appears at the middle of the > page and didnt get repositioned to new position.Also the vertical > scroller ends at the middle of the page and rest lower half of the > table doesnot carry the scrollpane. > > > Best Regards, > > Shruti Chaudhary > > > ---------------------------------------------------------------------- > --- Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for just about anything > Open Source. > http://sourceforge.net/services/buy/index.php > _______________________________________________ > Dynapi-Help mailing list > Dyn...@li... > https://lists.sourceforge.net/lists/listinfo/dynapi-help > ------------------------------------------------------------------------ - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ Dynapi-Help mailing list Dyn...@li... https://lists.sourceforge.net/lists/listinfo/dynapi-help |
From: Leif W <war...@us...> - 2008-06-24 13:27:52
|
Hi. Which version of DynAPI are you using? Have you tried the version in CVS? Which browser are you using? Operating System? Browser Version? OS version? Have you tried in other browsers? Does it work as you expect in any other browsers? Please make a very generic and simplified example of the code that creates the problem, preferably if it can all fit in to one html file or maybe one JavaScript file. Leif ------ Original Message ------ Received: Tue, 24 Jun 2008 07:42:39 AM EDT From: "Shruti Chaudhary (shruchau)" <shr...@ci...> To: <dyn...@li...> Subject: [Dynapi-Help] ScrollPane is distorting > Dear Support, > I m using scrollpane with table embedded in it. Now if i use Ctrl+F > and search for a text which is currently visible in the page it works > fine.If i ctrl+F for a text which is not currently visible on the > visible part of the page and is somewhere down , then the searched text > is sometimes found and highlightened but horizontal scrollbar gets > distorted and doesnot remain at the border of the table. Seems like on > searching of text the page scrolls down but the scrollpane remains > intact to its prev position so it appears at the middle of the page and > didnt get repositioned to new position.Also the vertical scroller ends > at the middle of the page and rest lower half of the table doesnot carry > the scrollpane. > > > Best Regards, > > Shruti Chaudhary > > > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://sourceforge.net/services/buy/index.php > _______________________________________________ > Dynapi-Help mailing list > Dyn...@li... > https://lists.sourceforge.net/lists/listinfo/dynapi-help > |
From: Shruti C. (shruchau) <shr...@ci...> - 2008-06-24 11:42:35
|
Dear Support, I m using scrollpane with table embedded in it. Now if i use Ctrl+F and search for a text which is currently visible in the page it works fine.If i ctrl+F for a text which is not currently visible on the visible part of the page and is somewhere down , then the searched text is sometimes found and highlightened but horizontal scrollbar gets distorted and doesnot remain at the border of the table. Seems like on searching of text the page scrolls down but the scrollpane remains intact to its prev position so it appears at the middle of the page and didnt get repositioned to new position.Also the vertical scroller ends at the middle of the page and rest lower half of the table doesnot carry the scrollpane. Best Regards, Shruti Chaudhary |
From: Deo, S. <sd...@am...> - 2006-11-17 21:36:16
|
Hi, In Firefox, if I have a scrollbar on a page and its dragged to the = middle or bottom, then on a page refresh I get a momentary black screen = before the content shows up. I stripped down everything accept the essential code, and found that the = problem occurs somewhere in the DynApi code when it is loaded. This works perfectly in IE. Has anyone encountered this ?=20 Thanks Shantanu |
From: Florian O. - s. - <fo...@se...> - 2005-12-22 10:58:44
|
Hello All, on our website we are using a 'dynapi2x'. After having updated our operating system from os9.x to osX we noticed browser crashes on this website. even other browsers than safari (ie,firefox,...) seem to have problems after the update. do you have any experiences with that problem? may it be a bug in the library? kind regards Florian Ott |
From: Leif W <war...@us...> - 2005-11-13 18:54:14
|
> From: "Anthony Treanor" <ant...@ya...> > Sent: 2005 November 12 Saturday 10:51 > > Ok, I know you use dynapi.document.addChild(child) > to add a child, but I'm trying to understand the code. > I worked out that the document object is created at > the bottom of dyndocument.js. But as far as I can tell > there is no function defined as addChild(child). I've > searched through the api files, looking for addChild, > using my editors search function. There doesn't seem > to be any definition matching this signature. What on > earth is going on? I forget exactly, if it's a DOM thing, defined in most modern browsers, or if it's redefined in the DynAPI. Do a recursive search for "addChild" in all *.js files, and look specifically at the results that create something. Most likely of the form "p.addChild = function...". ./src/api/event.js:126:p.addChild = function(c,alias,inlineID) { ./src/gui/highlighter.js:17:p.addChild=dynapi.functions.Null; ./src/gui/templmngr.js:103:p.addChild = function(c,fld){ The last two are most likely redefined versions, slightly tweaked for use in that particular widget. The first, in event.js, might be where it comes from. Leif |
From: Anthony T. <ant...@ya...> - 2005-11-12 15:51:10
|
Ok, I know you use dynapi.document.addChild(child) to add a child, but I'm trying to understand the code. I worked out that the document object is created at the bottom of dyndocument.js. But as far as I can tell there is no function defined as addChild(child). I've searched through the api files, looking for addChild, using my editors search function. There doesn't seem to be any definition matching this signature. What on earth is going on? __________________________________ Yahoo! FareChase: Search multiple travel sites in one click. http://farechase.yahoo.com |
From: Doug M. <do...@cr...> - 2005-10-12 13:53:15
|
I built a tree much like this (Not DynAPI) for a commercial site. They had 800+ items to load in their tree and this took WAY too long. Assuming that any given branch does not exceed a couple dozen nodes then rendering a branch on demand should not be too demanding. ----- Original Message ----- From: "Leif W" <war...@us...> To: <dyn...@li...> Sent: Monday, October 10, 2005 11:42 AM Subject: Re: [Dynapi-Help] Lazy Tree > >>> From: Julian Rath <jul...@gm...> > >>> Received: Mon, 10 Oct 2005 09:31:37 AM EDT > >>> > >>> Hi Everybody, > >>> how can i get this Explorer lazy, so it shoud only load that what i need. > >> > >> 2005/10/10, Leif W <war...@us...>: > >> Hi Julian, > >> > >> I am not sure what you mean. Can you describe in more detail what you mean > by > >> "Lazy Tree" or "Lazy Explorer" or "load only what you need". Load what > and > >> not load what else? What do you want to avoid loading? > > > > From: Julian Rath <jul...@gm...> > > Received: Mon, 10 Oct 2005 10:16:04 AM EDT > > > > My Plan: > > If you click on a node load only the childs of it not more of the tree > > so a async one, i think > > Ok, I think I understand. Is this what you mean? For instance, let's use > http://dynapi.sourceforge.net/releases/dynapix/examples/dynapi.gui.explorer. html > for reference. > > I hit the page, and I see it takes a very long time to load, as it loads > everything. On the other hand, when it runs, it runs very quick. > > Say we load only the top level, then load only if required by expanding a tab. > The downside is that the application might seem slow. > > So something aynchronous might be desireable. Perhaps load the top level, and > display it, then continue to walk the tree breadth-first and load the data for > sub levels while waiting, and stop to handle any user actions? That seems > very complicated to me, but might be the right way to handle it for the user > experience. > > Any comments or ideas how to implement? It's a feature request, so I'll copy > the results of the discussion there and refer to this thread. > > Leif > > > > > ------------------------------------------------------- > This SF.Net email is sponsored by: > Power Architecture Resource Center: Free content, downloads, discussions, > and more. http://solutions.newsforge.com/ibmarch.tmpl > _______________________________________________ > Dynapi-Help mailing list > Dyn...@li... > https://lists.sourceforge.net/lists/listinfo/dynapi-help > > > > -- > No virus found in this incoming message. > Checked by AVG Anti-Virus. > Version: 7.0.344 / Virus Database: 267.11.14/128 - Release Date: 10/10/2005 > > |
From: Leif W <war...@us...> - 2005-10-10 15:42:25
|
>>> From: Julian Rath <jul...@gm...> >>> Received: Mon, 10 Oct 2005 09:31:37 AM EDT >>> = >>> Hi Everybody, >>> how can i get this Explorer lazy, so it shoud only load that what i n= eed. >> >> 2005/10/10, Leif W <war...@us...>: >> Hi Julian, >> >> I am not sure what you mean. Can you describe in more detail what you= mean by >> "Lazy Tree" or "Lazy Explorer" or "load only what you need". Load wha= t and >> not load what else? What do you want to avoid loading? > = > From: Julian Rath <jul...@gm...> > Received: Mon, 10 Oct 2005 10:16:04 AM EDT > = > My Plan: > If you click on a node load only the childs of it not more of the tree > so a async one, i think Ok, I think I understand. Is this what you mean? For instance, let's us= e = http://dynapi.sourceforge.net/releases/dynapix/examples/dynapi.gui.explor= er.html for reference. I hit the page, and I see it takes a very long time to load, as it loads everything. On the other hand, when it runs, it runs very quick. Say we load only the top level, then load only if required by expanding a= tab. The downside is that the application might seem slow. So something aynchronous might be desireable. Perhaps load the top level= , and display it, then continue to walk the tree breadth-first and load the dat= a for sub levels while waiting, and stop to handle any user actions? That seem= s very complicated to me, but might be the right way to handle it for the u= ser experience. Any comments or ideas how to implement? It's a feature request, so I'll = copy the results of the discussion there and refer to this thread. Leif |
From: Julian R. <jul...@gm...> - 2005-10-10 14:13:53
|
My Plan: If you click on a node load only the childs of it not more of the tree so a async one, i think 2005/10/10, Leif W <war...@us...>: > > From: Julian Rath <jul...@gm...> > > Received: Mon, 10 Oct 2005 09:31:37 AM EDT > > > > Hi Everybody, > > how can i get this Explorer lazy, so it shoud only load that what i nee= d. > > Hi Julian, > > I am not sure what you mean. Can you describe in more detail what you me= an by > "Lazy Tree" or "Lazy Explorer" or "load only what you need". Load what a= nd > not load what else? What do you want to avoid loading? > > Leif > > > > > ------------------------------------------------------- > This SF.Net email is sponsored by: > Power Architecture Resource Center: Free content, downloads, discussions, > and more. http://solutions.newsforge.com/ibmarch.tmpl > _______________________________________________ > Dynapi-Help mailing list > Dyn...@li... > https://lists.sourceforge.net/lists/listinfo/dynapi-help > |
From: Leif W <war...@us...> - 2005-10-10 14:10:04
|
> From: Julian Rath <jul...@gm...> > Received: Mon, 10 Oct 2005 09:31:37 AM EDT > = > Hi Everybody, > how can i get this Explorer lazy, so it shoud only load that what i nee= d. Hi Julian, I am not sure what you mean. Can you describe in more detail what you me= an by "Lazy Tree" or "Lazy Explorer" or "load only what you need". Load what a= nd not load what else? What do you want to avoid loading? Leif |
From: Julian R. <jul...@gm...> - 2005-10-10 13:30:34
|
Hi Everybody, how can i get this Explorer lazy, so it shoud only load that what i need. thx Julian |
From: Leif W <war...@us...> - 2005-09-12 14:20:25
|
> From: "Jesse Vitrone" <je...@6t...> > Sent: 2005 September 07 Wednesday 10:26 > I'm playing around with Prototype (http://prototype.conio.net/) and it > seems to conflict with DynAPI. I wanted to use prototype for ajax Hi, I don't understand exactly what's happening. But another person has just submitted a bug report with another JS library conflict, which I think speaks to the same root cause. https://sourceforge.net/tracker/?func=detail&atid=105757&aid=1288708&group_id=5757 Leif |
From: Roger B. - C. <rog...@ch...> - 2005-09-12 13:27:15
|
Hello, Sorry, but my English is very bad ! I have many anchors in a body of my document and in many dynapi element (LoadPanel and Marquee); How to capture the click-event (left-click not the contextmenu) in a anchor for cancelling this click Thanks ! Roger Burton |
From: Jesse V. <je...@6t...> - 2005-09-07 14:27:19
|
I'm playing around with Prototype (http://prototype.conio.net/) and it seems to conflict with DynAPI. I wanted to use prototype for ajax functionality, but still use DynAPI for all it's DynAPI goodness. Has anyone played around with Prototype before? Any idea what this error would be from? I've added the prototype.js to the bottom of the email. This is my js code: <script src="../js/prototype.js"></script> <script src="../js/dynapi/dynapi.js"></script> <script language="Javascript"> dynapi.library.setPath('../js/dynapi/'); dynapi.library.include('dynapi.api'); dynapi.library.include('dynapi.api.ext.DynLayerInline'); dynapi.library.include('Fader'); </script> And I get this error in Firefox: Error: n.indexOf is not a function Source File: http://localhost:8080/agentscape/js/dynapi/dynapi.js Line: 388 If I don't do the DynAPI includes, Prototype works fine. If I don't do the Prototype include, DynAPI works fine. So I'm assuming it's the mix of them that's the problem, but I'm not sure where. Any ideas of what's going on or how to avoid it would be appreciated. Thanks in advance, Jesse prototype.js: /* Prototype JavaScript framework, version 1.3.1 * (c) 2005 Sam Stephenson <sa...@co...> * * THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff * against the source tree, available from the Prototype darcs repository. * * Prototype is freely distributable under the terms of an MIT-style license. * * For details, see the Prototype web site: http://prototype.conio.net/ * /*--------------------------------------------------------------------------*/ var Prototype = { Version: '1.3.1', emptyFunction: function() {} } var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Abstract = new Object(); Object.extend = function(destination, source) { for (property in source) { destination[property] = source[property]; } return destination; } Object.prototype.extend = function(object) { return Object.extend.apply(this, [this, object]); } Function.prototype.bind = function(object) { var __method = this; return function() { __method.apply(object, arguments); } } Function.prototype.bindAsEventListener = function(object) { var __method = this; return function(event) { __method.call(object, event || window.event); } } Number.prototype.toColorPart = function() { var digits = this.toString(16); if (this < 16) return '0' + digits; return digits; } var Try = { these: function() { var returnValue; for (var i = 0; i < arguments.length; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) {} } return returnValue; } } /*--------------------------------------------------------------------------*/ var PeriodicalExecuter = Class.create(); PeriodicalExecuter.prototype = { initialize: function(callback, frequency) { this.callback = callback; this.frequency = frequency; this.currentlyExecuting = false; this.registerCallback(); }, registerCallback: function() { setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, onTimerEvent: function() { if (!this.currentlyExecuting) { try { this.currentlyExecuting = true; this.callback(); } finally { this.currentlyExecuting = false; } } } } /*--------------------------------------------------------------------------*/ function $() { var elements = new Array(); for (var i = 0; i < arguments.length; i++) { var element = arguments[i]; if (typeof element == 'string') element = document.getElementById(element); if (arguments.length == 1) return element; elements.push(element); } return elements; } if (!Array.prototype.push) { Array.prototype.push = function() { var startLength = this.length; for (var i = 0; i < arguments.length; i++) this[startLength + i] = arguments[i]; return this.length; } } if (!Function.prototype.apply) { // Based on code from http://www.youngpup.net/ Function.prototype.apply = function(object, parameters) { var parameterStrings = new Array(); if (!object) object = window; if (!parameters) parameters = new Array(); for (var i = 0; i < parameters.length; i++) parameterStrings[i] = 'parameters[' + i + ']'; object.__apply__ = this; var result = eval('object.__apply__(' + parameterStrings.join(', ') + ')'); object.__apply__ = null; return result; } } String.prototype.extend({ stripTags: function() { return this.replace(/<\/?[^>]+>/gi, ''); }, escapeHTML: function() { var div = document.createElement('div'); var text = document.createTextNode(this); div.appendChild(text); return div.innerHTML; }, unescapeHTML: function() { var div = document.createElement('div'); div.innerHTML = this.stripTags(); return div.childNodes[0].nodeValue; } }); var Ajax = { getTransport: function() { return Try.these( function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')}, function() {return new XMLHttpRequest()} ) || false; } } Ajax.Base = function() {}; Ajax.Base.prototype = { setOptions: function(options) { this.options = { method: 'post', asynchronous: true, parameters: '' }.extend(options || {}); }, responseIsSuccess: function() { return this.transport.status == undefined || this.transport.status == 0 || (this.transport.status >= 200 && this.transport.status < 300); }, responseIsFailure: function() { return !this.responseIsSuccess(); } } Ajax.Request = Class.create(); Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; Ajax.Request.prototype = (new Ajax.Base()).extend({ initialize: function(url, options) { this.transport = Ajax.getTransport(); this.setOptions(options); this.request(url); }, request: function(url) { var parameters = this.options.parameters || ''; if (parameters.length > 0) parameters += '&_='; try { if (this.options.method == 'get') url += '?' + parameters; this.transport.open(this.options.method, url, this.options.asynchronous); if (this.options.asynchronous) { this.transport.onreadystatechange = this.onStateChange.bind(this); setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10); } this.setRequestHeaders(); var body = this.options.postBody ? this.options.postBody : parameters; this.transport.send(this.options.method == 'post' ? body : null); } catch (e) { } }, setRequestHeaders: function() { var requestHeaders = ['X-Requested-With', 'XMLHttpRequest', 'X-Prototype-Version', Prototype.Version]; if (this.options.method == 'post') { requestHeaders.push('Content-type', 'application/x-www-form-urlencoded'); /* Force "Connection: close" for Mozilla browsers to work around * a bug where XMLHttpReqeuest sends an incorrect Content-length * header. See Mozilla Bugzilla #246651. */ if (this.transport.overrideMimeType) requestHeaders.push('Connection', 'close'); } if (this.options.requestHeaders) requestHeaders.push.apply(requestHeaders, this.options.requestHeaders); for (var i = 0; i < requestHeaders.length; i += 2) this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]); }, onStateChange: function() { var readyState = this.transport.readyState; if (readyState != 1) this.respondToReadyState(this.transport.readyState); }, respondToReadyState: function(readyState) { var event = Ajax.Request.Events[readyState]; if (event == 'Complete') (this.options['on' + this.transport.status] || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')] || Prototype.emptyFunction)(this.transport); (this.options['on' + event] || Prototype.emptyFunction)(this.transport); /* Avoid memory leak in MSIE: clean up the oncomplete event handler */ if (event == 'Complete') this.transport.onreadystatechange = Prototype.emptyFunction; } }); Ajax.Updater = Class.create(); Ajax.Updater.ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:<\/script>)'; Ajax.Updater.prototype.extend(Ajax.Request.prototype).extend({ initialize: function(container, url, options) { this.containers = { success: container.success ? $(container.success) : $(container), failure: container.failure ? $(container.failure) : (container.success ? null : $(container)) } this.transport = Ajax.getTransport(); this.setOptions(options); var onComplete = this.options.onComplete || Prototype.emptyFunction; this.options.onComplete = (function() { this.updateContent(); onComplete(this.transport); }).bind(this); this.request(url); }, updateContent: function() { var receiver = this.responseIsSuccess() ? this.containers.success : this.containers.failure; var match = new RegExp(Ajax.Updater.ScriptFragment, 'img'); var response = this.transport.responseText.replace(match, ''); var scripts = this.transport.responseText.match(match); if (receiver) { if (this.options.insertion) { new this.options.insertion(receiver, response); } else { receiver.innerHTML = response; } } if (this.responseIsSuccess()) { if (this.onComplete) setTimeout((function() {this.onComplete( this.transport)}).bind(this), 10); } if (this.options.evalScripts && scripts) { match = new RegExp(Ajax.Updater.ScriptFragment, 'im'); setTimeout((function() { for (var i = 0; i < scripts.length; i++) eval(scripts[i].match(match)[1]); }).bind(this), 10); } } }); Ajax.PeriodicalUpdater = Class.create(); Ajax.PeriodicalUpdater.prototype = (new Ajax.Base()).extend({ initialize: function(container, url, options) { this.setOptions(options); this.onComplete = this.options.onComplete; this.frequency = (this.options.frequency || 2); this.decay = 1; this.updater = {}; this.container = container; this.url = url; this.start(); }, start: function() { this.options.onComplete = this.updateComplete.bind(this); this.onTimerEvent(); }, stop: function() { this.updater.onComplete = undefined; clearTimeout(this.timer); (this.onComplete || Ajax.emptyFunction).apply(this, arguments); }, updateComplete: function(request) { if (this.options.decay) { this.decay = (request.responseText == this.lastText ? this.decay * this.options.decay : 1); this.lastText = request.responseText; } this.timer = setTimeout(this.onTimerEvent.bind(this), this.decay * this.frequency * 1000); }, onTimerEvent: function() { this.updater = new Ajax.Updater(this.container, this.url, this.options); } }); document.getElementsByClassName = function(className) { var children = document.getElementsByTagName('*') || document.all; var elements = new Array(); for (var i = 0; i < children.length; i++) { var child = children[i]; var classNames = child.className.split(' '); for (var j = 0; j < classNames.length; j++) { if (classNames[j] == className) { elements.push(child); break; } } } return elements; } /*--------------------------------------------------------------------------*/ if (!window.Element) { var Element = new Object(); } Object.extend(Element, { toggle: function() { for (var i = 0; i < arguments.length; i++) { var element = $(arguments[i]); element.style.display = (element.style.display == 'none' ? '' : 'none'); } }, hide: function() { for (var i = 0; i < arguments.length; i++) { var element = $(arguments[i]); element.style.display = 'none'; } }, show: function() { for (var i = 0; i < arguments.length; i++) { var element = $(arguments[i]); element.style.display = ''; } }, remove: function(element) { element = $(element); element.parentNode.removeChild(element); }, getHeight: function(element) { element = $(element); return element.offsetHeight; }, hasClassName: function(element, className) { element = $(element); if (!element) return; var a = element.className.split(' '); for (var i = 0; i < a.length; i++) { if (a[i] == className) return true; } return false; }, addClassName: function(element, className) { element = $(element); Element.removeClassName(element, className); element.className += ' ' + className; }, removeClassName: function(element, className) { element = $(element); if (!element) return; var newClassName = ''; var a = element.className.split(' '); for (var i = 0; i < a.length; i++) { if (a[i] != className) { if (i > 0) newClassName += ' '; newClassName += a[i]; } } element.className = newClassName; }, // removes whitespace-only text node children cleanWhitespace: function(element) { var element = $(element); for (var i = 0; i < element.childNodes.length; i++) { var node = element.childNodes[i]; if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) Element.remove(node); } } }); var Toggle = new Object(); Toggle.display = Element.toggle; /*--------------------------------------------------------------------------*/ Abstract.Insertion = function(adjacency) { this.adjacency = adjacency; } Abstract.Insertion.prototype = { initialize: function(element, content) { this.element = $(element); this.content = content; if (this.adjacency && this.element.insertAdjacentHTML) { this.element.insertAdjacentHTML(this.adjacency, this.content); } else { this.range = this.element.ownerDocument.createRange(); if (this.initializeRange) this.initializeRange(); this.fragment = this.range.createContextualFragment(this.content); this.insertContent(); } } } var Insertion = new Object(); Insertion.Before = Class.create(); Insertion.Before.prototype = (new Abstract.Insertion('beforeBegin')).extend({ initializeRange: function() { this.range.setStartBefore(this.element); }, insertContent: function() { this.element.parentNode.insertBefore(this.fragment, this.element); } }); Insertion.Top = Class.create(); Insertion.Top.prototype = (new Abstract.Insertion('afterBegin')).extend({ initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(true); }, insertContent: function() { this.element.insertBefore(this.fragment, this.element.firstChild); } }); Insertion.Bottom = Class.create(); Insertion.Bottom.prototype = (new Abstract.Insertion('beforeEnd')).extend({ initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(this.element); }, insertContent: function() { this.element.appendChild(this.fragment); } }); Insertion.After = Class.create(); Insertion.After.prototype = (new Abstract.Insertion('afterEnd')).extend({ initializeRange: function() { this.range.setStartAfter(this.element); }, insertContent: function() { this.element.parentNode.insertBefore(this.fragment, this.element.nextSibling); } }); var Field = { clear: function() { for (var i = 0; i < arguments.length; i++) $(arguments[i]).value = ''; }, focus: function(element) { $(element).focus(); }, present: function() { for (var i = 0; i < arguments.length; i++) if ($(arguments[i]).value == '') return false; return true; }, select: function(element) { $(element).select(); }, activate: function(element) { $(element).focus(); $(element).select(); } } /*--------------------------------------------------------------------------*/ var Form = { serialize: function(form) { var elements = Form.getElements($(form)); var queryComponents = new Array(); for (var i = 0; i < elements.length; i++) { var queryComponent = Form.Element.serialize(elements[i]); if (queryComponent) queryComponents.push(queryComponent); } return queryComponents.join('&'); }, getElements: function(form) { var form = $(form); var elements = new Array(); for (tagName in Form.Element.Serializers) { var tagElements = form.getElementsByTagName(tagName); for (var j = 0; j < tagElements.length; j++) elements.push(tagElements[j]); } return elements; }, getInputs: function(form, typeName, name) { var form = $(form); var inputs = form.getElementsByTagName('input'); if (!typeName && !name) return inputs; var matchingInputs = new Array(); for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if ((typeName && input.type != typeName) || (name && input.name != name)) continue; matchingInputs.push(input); } return matchingInputs; }, disable: function(form) { var elements = Form.getElements(form); for (var i = 0; i < elements.length; i++) { var element = elements[i]; element.blur(); element.disabled = 'true'; } }, enable: function(form) { var elements = Form.getElements(form); for (var i = 0; i < elements.length; i++) { var element = elements[i]; element.disabled = ''; } }, focusFirstElement: function(form) { var form = $(form); var elements = Form.getElements(form); for (var i = 0; i < elements.length; i++) { var element = elements[i]; if (element.type != 'hidden' && !element.disabled) { Field.activate(element); break; } } }, reset: function(form) { $(form).reset(); } } Form.Element = { serialize: function(element) { var element = $(element); var method = element.tagName.toLowerCase(); var parameter = Form.Element.Serializers[method](element); if (parameter) return encodeURIComponent(parameter[0]) + '=' + encodeURIComponent(parameter[1]); }, getValue: function(element) { var element = $(element); var method = element.tagName.toLowerCase(); var parameter = Form.Element.Serializers[method](element); if (parameter) return parameter[1]; } } Form.Element.Serializers = { input: function(element) { switch (element.type.toLowerCase()) { case 'submit': case 'hidden': case 'password': case 'text': return Form.Element.Serializers.textarea(element); case 'checkbox': case 'radio': return Form.Element.Serializers.inputSelector(element); } return false; }, inputSelector: function(element) { if (element.checked) return [element.name, element.value]; }, textarea: function(element) { return [element.name, element.value]; }, select: function(element) { var value = ''; if (element.type == 'select-one') { var index = element.selectedIndex; if (index >= 0) value = element.options[index].value || element.options[index].text; } else { value = new Array(); for (var i = 0; i < element.length; i++) { var opt = element.options[i]; if (opt.selected) value.push(opt.value || opt.text); } } return [element.name, value]; } } /*--------------------------------------------------------------------------*/ var $F = Form.Element.getValue; /*--------------------------------------------------------------------------*/ Abstract.TimedObserver = function() {} Abstract.TimedObserver.prototype = { initialize: function(element, frequency, callback) { this.frequency = frequency; this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); this.registerCallback(); }, registerCallback: function() { setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, onTimerEvent: function() { var value = this.getValue(); if (this.lastValue != value) { this.callback(this.element, value); this.lastValue = value; } } } Form.Element.Observer = Class.create(); Form.Element.Observer.prototype = (new Abstract.TimedObserver()).extend({ getValue: function() { return Form.Element.getValue(this.element); } }); Form.Observer = Class.create(); Form.Observer.prototype = (new Abstract.TimedObserver()).extend({ getValue: function() { return Form.serialize(this.element); } }); /*--------------------------------------------------------------------------*/ Abstract.EventObserver = function() {} Abstract.EventObserver.prototype = { initialize: function(element, callback) { this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); if (this.element.tagName.toLowerCase() == 'form') this.registerFormCallbacks(); else this.registerCallback(this.element); }, onElementEvent: function() { var value = this.getValue(); if (this.lastValue != value) { this.callback(this.element, value); this.lastValue = value; } }, registerFormCallbacks: function() { var elements = Form.getElements(this.element); for (var i = 0; i < elements.length; i++) this.registerCallback(elements[i]); }, registerCallback: function(element) { if (element.type) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': element.target = this; element.prev_onclick = element.onclick || Prototype.emptyFunction; element.onclick = function() { this.prev_onclick(); this.target.onElementEvent(); } break; case 'password': case 'text': case 'textarea': case 'select-one': case 'select-multiple': element.target = this; element.prev_onchange = element.onchange || Prototype.emptyFunction; element.onchange = function() { this.prev_onchange(); this.target.onElementEvent(); } break; } } } } Form.Element.EventObserver = Class.create(); Form.Element.EventObserver.prototype = (new Abstract.EventObserver()).extend({ getValue: function() { return Form.Element.getValue(this.element); } }); Form.EventObserver = Class.create(); Form.EventObserver.prototype = (new Abstract.EventObserver()).extend({ getValue: function() { return Form.serialize(this.element); } }); if (!window.Event) { var Event = new Object(); } Object.extend(Event, { KEY_BACKSPACE: 8, KEY_TAB: 9, KEY_RETURN: 13, KEY_ESC: 27, KEY_LEFT: 37, KEY_UP: 38, KEY_RIGHT: 39, KEY_DOWN: 40, KEY_DELETE: 46, element: function(event) { return event.target || event.srcElement; }, isLeftClick: function(event) { return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1))); }, pointerX: function(event) { return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); }, pointerY: function(event) { return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); }, stop: function(event) { if (event.preventDefault) { event.preventDefault(); event.stopPropagation(); } else { event.returnValue = false; } }, // find the first node with the given tagName, starting from the // node the event was triggered on; traverses the DOM upwards findElement: function(event, tagName) { var element = Event.element(event); while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase()))) element = element.parentNode; return element; }, observers: false, _observeAndCache: function(element, name, observer, useCapture) { if (!this.observers) this.observers = []; if (element.addEventListener) { this.observers.push([element, name, observer, useCapture]); element.addEventListener(name, observer, useCapture); } else if (element.attachEvent) { this.observers.push([element, name, observer, useCapture]); element.attachEvent('on' + name, observer); } }, unloadCache: function() { if (!Event.observers) return; for (var i = 0; i < Event.observers.length; i++) { Event.stopObserving.apply(this, Event.observers[i]); Event.observers[i][0] = null; } Event.observers = false; }, observe: function(element, name, observer, useCapture) { var element = $(element); useCapture = useCapture || false; if (name == 'keypress' && ((navigator.appVersion.indexOf('AppleWebKit') > 0) || element.attachEvent)) name = 'keydown'; this._observeAndCache(element, name, observer, useCapture); }, stopObserving: function(element, name, observer, useCapture) { var element = $(element); useCapture = useCapture || false; if (name == 'keypress' && ((navigator.appVersion.indexOf('AppleWebKit') > 0) || element.detachEvent)) name = 'keydown'; if (element.removeEventListener) { element.removeEventListener(name, observer, useCapture); } else if (element.detachEvent) { element.detachEvent('on' + name, observer); } } }); /* prevent memory leaks in IE */ Event.observe(window, 'unload', Event.unloadCache, false); var Position = { // set to true if needed, warning: firefox performance problems // NOT neeeded for page scrolling, only if draggable contained in // scrollable elements includeScrollOffsets: false, // must be called before calling withinIncludingScrolloffset, every time the // page is scrolled prepare: function() { this.deltaX = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0; this.deltaY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; }, realOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.scrollTop || 0; valueL += element.scrollLeft || 0; element = element.parentNode; } while (element); return [valueL, valueT]; }, cumulativeOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; } while (element); return [valueL, valueT]; }, // caches x/y coordinate pair to use with overlap within: function(element, x, y) { if (this.includeScrollOffsets) return this.withinIncludingScrolloffsets(element, x, y); this.xcomp = x; this.ycomp = y; this.offset = this.cumulativeOffset(element); return (y >= this.offset[1] && y < this.offset[1] + element.offsetHeight && x >= this.offset[0] && x < this.offset[0] + element.offsetWidth); }, withinIncludingScrolloffsets: function(element, x, y) { var offsetcache = this.realOffset(element); this.xcomp = x + offsetcache[0] - this.deltaX; this.ycomp = y + offsetcache[1] - this.deltaY; this.offset = this.cumulativeOffset(element); return (this.ycomp >= this.offset[1] && this.ycomp < this.offset[1] + element.offsetHeight && this.xcomp >= this.offset[0] && this.xcomp < this.offset[0] + element.offsetWidth); }, // within must be called directly before overlap: function(mode, element) { if (!mode) return 0; if (mode == 'vertical') return ((this.offset[1] + element.offsetHeight) - this.ycomp) / element.offsetHeight; if (mode == 'horizontal') return ((this.offset[0] + element.offsetWidth) - this.xcomp) / element.offsetWidth; }, clone: function(source, target) { source = $(source); target = $(target); target.style.position = 'absolute'; var offsets = this.cumulativeOffset(source); target.style.top = offsets[1] + 'px'; target.style.left = offsets[0] + 'px'; target.style.width = source.offsetWidth + 'px'; target.style.height = source.offsetHeight + 'px'; } } |
From: Leif W <war...@us...> - 2005-09-04 12:11:07
|
> From: "Hallvord Reiar Michaelsen Steen" <hal...@on...> > Sent: 2005 September 03 Saturday 16:42 > >> On 15 Aug 2005 at 14:59, Leif W wrote: >> But, it'd be nice if the user can turn the feature on >> or off globally, as well as per-site, incase we do get something >> fixed >> up. > > Browser.js can always be turned off globally either by editing the > ini-file or by simply deleting the browser.js file from Opera's > profile folder. It would be nice to have site by site as well, as it leaves us the option to fix DynAPI 2 and other users to upgrade without relearning DynAPI 3 and converting custom widgets. > toyota.com with a different directory structure and file name, I'm > planning to extend the fix to affect all files called "dynlayer.js". > I hope your conclusion still stands.. In DynAPI 2, you're looking at two files from the folder dynapi/src/lib/dynapi/api/ , so you might want to check dyndocument.js as well. > Do you have a "live" demonstration site that is guaranteed to always > run the latest and greatest DynAPI version? If so I would like to add > that site to our routine test run for browser.js so that we can try > to look out for problems this causes for upcoming versions. We've got releases up here: http://dynapi.sourceforge.net/releases/ . But only 2.5.7 at time of writing, and 3 beta 1 and 2, and CVS in dynapi3x. I'll have to put the other versions. There should be some examples in a sub directory of the same name under each release. Leif |
From: Hallvord R. M. S. <hal...@on...> - 2005-09-03 20:42:04
|
On 15 Aug 2005 at 14:59, Leif W wrote: > > As you may or may not be aware, older versions of DynAPI do not run > > well in Opera because they detect Opera as "Opera" and important > > parts of the script branches for NN and IE only. > I believe that is the DynAPI 2 or older way. Currently we're not doing > anything with DynAPI 2. Ideally I'd like to update the older APIs, but > right now I'm spending my time trying to fix bugs for a DynAPI 3 > release. The current versions of DynAPI work fine AFAIK and even if you make changes it is very unlikely that the affected websites will upgrade their scripts. This is why we want to use browser.js to work around it. > But, it'd be nice if the user can turn the feature on > or off globally, as well as per-site, incase we do get something fixed > up. Browser.js can always be turned off globally either by editing the ini-file or by simply deleting the browser.js file from Opera's profile folder. > Currently DynAPI 3 has moved > the browser detect stuff into "dynapi/src/dynapi.js", though some may > choose to install just /src/ on the site under a different dirname like > /scripts/dynapi/dynapi.js or something. So I don't think it would > affect current or future versions. Thank you for your feedback! Since I found an outdated version causing problems for Opera on toyota.com with a different directory structure and file name, I'm planning to extend the fix to affect all files called "dynlayer.js". I hope your conclusion still stands.. Do you have a "live" demonstration site that is guaranteed to always run the latest and greatest DynAPI version? If so I would like to add that site to our routine test run for browser.js so that we can try to look out for problems this causes for upcoming versions. -- Hallvord Reiar Michaelsen Steen http://www.hallvord.com/ -- Hallvord Reiar Michaelsen Steen http://www.hallvord.com/ |
From: Leif W <war...@us...> - 2005-09-03 18:29:31
|
> From: "Roger BURTON - CIRCA" <rog...@ch...> > Sent: 2005 September 02 Friday 16:03 > > Hello, > Sorry, but i don't speak english. Sorry, but I only know English. :-) > In french: > Comment cr=E9er des layer dans le fichier charg=E9 dans un load panel ? > > In English :-) > How to create DynLayer in a file loaded in a LoadPanel, not by the=20 > main page but directly in the file ? Maybe with Inline. I am working on an example based upon the LoadPanel=20 and Inline examples. There is a problem because none of the dynapi objects will exist in the=20 loaded file, only in parent.dynapi. We can reference parent.* objects,=20 but I don't know how to tell it to look back in the currently loading=20 HTML in the LoadPanel. Anyone else attempt this? Leif |
From: Roger B. - C. <rog...@ch...> - 2005-09-02 20:03:12
|
Hello, Sorry, but i don't speak english. In french: Comment créer des layer dans le fichier chargé dans un load panel ? In English :-) How to create DynLayer in a file loaded in a LoadPanel, not by the main page but directly in the file ? Thanks Roger Burton |
From: enriQUE [swe] <en...@ge...> - 2005-09-02 09:58:56
|
Henry Ho wrote: > Hi, > > Have anyone tried to implement a portal like layout using DynAPI? I > think the PanelBar and ObjectTracker may be used as the build blocks > for a site similar to my.msn.com <http://my.msn.com>, where they have > windows/panels stacked together. The main missing feature is to allow > dragging and dropping windows from one column to another. I'd > appreciate if anyone can provide some pointers and comment on this > approach. > > Regards, > Henry Hello Henry, Is it something like http://www.dhtmlcentral.com/ you are thinking of? If so I suggest you look into doing something like the example at http://dynapi.sourceforge.net/releases/dynapi-3.0.0-beta2/examples/dynapi.api.ext.dragevent.html shows. (And you might look into how dhtmlcentral does it too and try to fit it together.) regards Henrik |
From: Henry Ho <dax...@gm...> - 2005-09-01 17:25:30
|
Hi, Have anyone tried to implement a portal like layout using DynAPI? I think= =20 the PanelBar and ObjectTracker may be used as the build blocks for a site= =20 similar to my.msn.com <http://my.msn.com>, where they have windows/panels= =20 stacked together. The main missing feature is to allow dragging and droppin= g=20 windows from one column to another. I'd appreciate if anyone can provide=20 some pointers and comment on this approach. Regards, Henry |
From: Leif W <war...@us...> - 2005-08-28 10:01:01
|
> From: "Raymond Irving" <xw...@ya...> > Sent: 2005 August 27 Saturday 22:50 > > Hi everyone, > > Doug is correct about the functionality of the black > board. That's exactly what it was design for. Hi Raymond, good to hear from you! Thanks for the confirmation. And Doug, thanks for the visual, it helps a lot. I'd like to see a doc page for that, including the caveats noted (until they're resolved, pending testing and discussion as needed). If someone has the initiative, do it, otherwise I'll get to it eventually. :p Leif |
From: Raymond I. <xw...@ya...> - 2005-08-28 02:51:03
|
Hi everyone, Doug is correct about the functionality of the black board. That's exactly what it was design for. __ Raymond Irving --- do...@cr... wrote: > > > More verbose.. also checked code to verfiy.. the > part about a transparent > coverlayer was just smoke (won't say what kind of > smoke..) > > So.. > > As we know, if you add a child layer or widget to a > layer, then set the html > of that layer, the existing html (the child ler or > widget) get's deleted. > Obviously this can cause some issues if your coed > expects said layer or widget > to be there. > > The solution to this is to call enabledBlackBoard on > the parent layer. > Having done this, when you call setHTML() on a layer > that has it's Blackboard > enabled, the html that you specify is placed within > the blackboard instead of > replacing the html of your parent layer. > > Man reading the above just confuses me.. and i wrote > it :-) > new visual: > > case 1 (no blackboard) > create a layer and add a widget: > (result) > [myLayer] > [myWidget][/myWidget] > [/myLayer] > > then call myLayer.setHTML("where's the widget?") > (result: note the widget is gone) > [myLayer] > Where's the widget? > [/myLayer] > > case 2 (with blackboard) > create a layer, add a widget, enable blackboard > [myLayer] > [myWidget][/myWidget] > [_blkBoardElm][/_blkBoardElm] > [/myLayer] > then call myLayer.setHTML("there's the widget!") > [myLayer] > [myWidget][/myWidget] > [_blkBoardElm]there's the widget![/_blkBoardElm] > [/myLayer] > > One thing i do notice while looking at the code is > that we do not specifiy the > Z-Order of the blackboard. This can cause a problem > if the blackboard is added > after a widget or childlayer has been added as the > blackboard may overlap said > child layers. > > notes: > if blackboard is enabled after a sethtml call (or > layer is created with > default html in the new dynlayer() call) then the > html will be transferred to > the blackboard. > > Recommend specifying a largely negative Z-Order on > the blackboard layer > > Cheers > > Leif W <war...@us...> said: > > > > From: <do...@cr...> > > > Sent: 2005 August 24 Wednesday 11:06 > > > > > > here it is.. the blackboard as described below > is to allow you to add > > > a child > > > layer to a layer, and then later call sethtml on > the parent layer > > > without > > > accidently deleting the child layers :-) > > > > >> before EnableBlackboard() > > >> [myLayer]content[/myLayer] > > >> > > >> After EnabledBlackboard > > >> [myLayer] > > >> [TransparentCoverLayer] > > >> [BlackBoard] > > >> Content > > >> [BlackBoard] > > >> [TransparentCoverLayer] > > >> [myLayer] > > > > Wow, excellent, thanks for that explanation and > visual. > > > > Leif > > > > > > > > > > > > > ------------------------------------------------------- > > SF.Net email is Sponsored by the Better Software > Conference & EXPO > > September 19-22, 2005 * San Francisco, CA * > Development Lifecycle Practices > > Agile & Plan-Driven Development * Managing > Projects & Teams * Testing & QA > > Security * Process Improvement & Measurement * > http://www.sqe.com/bsce5sf > > _______________________________________________ > > Dynapi-Help mailing list > > Dyn...@li... > > > https://lists.sourceforge.net/lists/listinfo/dynapi-help > > > > > > -- > > > > > > ------------------------------------------------------- > SF.Net email is Sponsored by the Better Software > Conference & EXPO > September 19-22, 2005 * San Francisco, CA * > Development Lifecycle Practices > Agile & Plan-Driven Development * Managing Projects > & Teams * Testing & QA > Security * Process Improvement & Measurement * > http://www.sqe.com/bsce5sf > _______________________________________________ > Dynapi-Help mailing list > Dyn...@li... > https://lists.sourceforge.net/lists/listinfo/dynapi-help > |