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;
+ }
]]>