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