From ba16eef595eb12dc4fbdb2d2064663a9ec4aa3fe Mon Sep 17 00:00:00 2001 From: "mscott%netscape.com" Date: Tue, 20 Nov 2001 03:29:27 +0000 Subject: [PATCH] Bug #109929 --> cache email address nodes in the multi toggle email address widget. This helps with message display performance. r=ssu sr=sspitzer git-svn-id: svn://10.0.0.236/trunk@108547 18797224-902f-48f8-a5cc-f745e15eee43 --- .../base/resources/content/mailWidgets.xml | 75 +++++++++++++++++-- 1 file changed, 69 insertions(+), 6 deletions(-) diff --git a/mozilla/mailnews/base/resources/content/mailWidgets.xml b/mozilla/mailnews/base/resources/content/mailWidgets.xml index c36124901c9..c5c5ba2b40f 100644 --- a/mozilla/mailnews/base/resources/content/mailWidgets.xml +++ b/mozilla/mailnews/base/resources/content/mailWidgets.xml @@ -92,6 +92,10 @@ + + 3 + + + + + 1) + numExistingCachedAddresses = (numExistingCachedAddresses + 1)/ 2; + + var index = 0; + var numAddressesAdded = 0; + var emailAddressNode; + var commaNode; + while (numAddressesAdded < numExistingCachedAddresses && numAddressesAdded < aNumAddressesToShow) + { + if (index && numExistingCachedAddresses > 1) + { + commaNode = aAddressesNode.childNodes[index++]; + if (commaNode) + commaNode.removeAttribute('collapsed'); + } + + // get the node pointed to by index + emailAddressNode = aAddressesNode.childNodes[index++]; + this.updateEmailAddressNode(emailAddressNode, this.mAddresses[numAddressesAdded]); + emailAddressNode.removeAttribute('collapsed'); + numAddressesAdded++; + } + + // if we have added all of our elements but we still have more cached items in this address node + // then make sure the extra cached copies are collapsed... + numExistingCachedAddresses = aAddressesNode.childNodes.length; // reset + while (index < numExistingCachedAddresses) + { + aAddressesNode.childNodes[index++].setAttribute('collapsed', true); + } + + return this.mAddresses.length - numAddressesAdded; + ]]> + + + @@ -128,20 +180,22 @@ numAddresses) // then show all aNumAddressesToShow = numAddresses; - var index = 0; + // before we try to create email address nodes, try to leverage any cached nodes... + var remainder = this.fillCachedAddresses(aAddressesNode, aNumAddressesToShow); + var index = numAddresses - remainder; while (index < numAddresses && index < aNumAddressesToShow) { - var newAddressNode= document.createElement("mail-emailaddress"); + var newAddressNode = document.createElement("mail-emailaddress"); if (index) { var textNode = document.createElement("text"); textNode.setAttribute("value", ", "); textNode.setAttribute("class", "emailSeparator"); aAddressesNode.appendChild(textNode); - } + } var itemInDocument = aAddressesNode.appendChild(newAddressNode); this.updateEmailAddressNode(itemInDocument, this.mAddresses[index]); @@ -221,8 +275,17 @@ 0) - aParentNode.removeChild(aParentNode.childNodes[0]); + // we want to keep around the first mSizeOfAddressCache email address nodes + // don't forget that we have comma text nodes in there too so really we want to keep + // around cache size * 2 - 1. + var numItemsToPreserve = this.mSizeOfAddressCache * 2 - 1; + var numItemsInNode = aParentNode.childNodes.length; + + while (numItemsInNode && (numItemsInNode > numItemsToPreserve)) + { + aParentNode.removeChild(aParentNode.childNodes[numItemsInNode-1]); + numItemsInNode = numItemsInNode - 1; + } ]]>