Bug #295642 --> cannot attach additional attachments after deleting all of the attachments.

use .collapse instead of .hidden on the listbox. Update some of the JS to use listbox APIs instead of dom element APIs.

sr=bienvenu
This commit is contained in:
scott%scott-macgregor.org 2005-05-27 05:46:32 +00:00
parent a5fc8c1e38
commit 9ef78e49bd
2 changed files with 31 additions and 45 deletions

View File

@ -1367,9 +1367,7 @@ function ComposeStartup(recycled, aParams)
if (attachments.Count()) if (attachments.Count())
{ {
var attachmentBox = document.getElementById("attachments-box"); ChangeAttachmentBucketVisibility(false);
attachmentBox.hidden = false;
document.getElementById("attachmentbucket-sizer").hidden=false;
} }
} }
@ -2456,14 +2454,12 @@ function AttachFile()
var fileHandler = ioService.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler); var fileHandler = ioService.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler);
var currentAttachment = fileHandler.getURLSpecFromFile(currentFile); var currentAttachment = fileHandler.getURLSpecFromFile(currentFile);
if (!DuplicateFileCheck(currentAttachment)) { if (!DuplicateFileCheck(currentAttachment)) {
var attachment = Components.classes["@mozilla.org/messengercompose/attachment;1"].createInstance(Components.interfaces.nsIMsgAttachment); var attachment = Components.classes["@mozilla.org/messengercompose/attachment;1"].createInstance(Components.interfaces.nsIMsgAttachment);
attachment.url = currentAttachment; attachment.url = currentAttachment;
AddAttachment(attachment); AddAttachment(attachment);
var attachmentBox = document.getElementById("attachments-box"); ChangeAttachmentBucketVisibility(false);
attachmentBox.hidden = false;
document.getElementById("attachmentbucket-sizer").hidden=false;
gContentChanged = true; gContentChanged = true;
} }
} }
@ -2474,7 +2470,6 @@ function AddAttachment(attachment)
if (attachment && attachment.url) if (attachment && attachment.url)
{ {
var bucket = document.getElementById("attachmentBucket"); var bucket = document.getElementById("attachmentBucket");
var item = document.createElement("listitem");
if (!attachment.name) if (!attachment.name)
attachment.name = gMsgCompose.AttachmentPrettyName(attachment.url, null); attachment.name = gMsgCompose.AttachmentPrettyName(attachment.url, null);
@ -2492,7 +2487,7 @@ function AddAttachment(attachment)
attachment.name = sComposeMsgsBundle.getString("partAttachmentSafeName"); attachment.name = sComposeMsgsBundle.getString("partAttachmentSafeName");
} }
item.setAttribute("label", attachment.name); //use for display only var item = bucket.appendItem(attachment.name, "");
item.attachment = attachment; //full attachment object stored here item.attachment = attachment; //full attachment object stored here
try { try {
item.setAttribute("tooltiptext", decodeURI(attachment.url)); item.setAttribute("tooltiptext", decodeURI(attachment.url));
@ -2522,8 +2517,6 @@ function AddAttachment(attachment)
item.setAttribute("image", "moz-icon://" + url.fileName); item.setAttribute("image", "moz-icon://" + url.fileName);
else else
item.setAttribute("image", "moz-icon:" + attachment.url); item.setAttribute("image", "moz-icon:" + attachment.url);
bucket.appendChild(item);
} }
} }
@ -2538,7 +2531,7 @@ function MessageHasAttachments()
{ {
var bucketList = document.getElementById("attachmentBucket"); var bucketList = document.getElementById("attachmentBucket");
if (bucketList) { if (bucketList) {
return (bucketList && bucketList.hasChildNodes() && (bucketList == top.document.commandDispatcher.focusedElement)); return (bucketList && bucketList.getRowCount() && (bucketList == top.document.commandDispatcher.focusedElement));
} }
return false; return false;
} }
@ -2569,18 +2562,16 @@ function AttachPage()
var attachment = Components.classes["@mozilla.org/messengercompose/attachment;1"].createInstance(Components.interfaces.nsIMsgAttachment); var attachment = Components.classes["@mozilla.org/messengercompose/attachment;1"].createInstance(Components.interfaces.nsIMsgAttachment);
attachment.url = result.value; attachment.url = result.value;
AddAttachment(attachment); AddAttachment(attachment);
var attachmentBox = document.getElementById("attachments-box"); ChangeAttachmentBucketVisibility(false);
attachmentBox.hidden = false;
document.getElementById("attachmentbucket-sizer").hidden=false;
} }
} }
} }
function DuplicateFileCheck(FileUrl) function DuplicateFileCheck(FileUrl)
{ {
var bucket = document.getElementById('attachmentBucket'); var bucket = document.getElementById('attachmentBucket');
for (var index = 0; index < bucket.childNodes.length; index++) for (var index = 0; index < bucket.getRowCount(); index++)
{ {
var item = bucket.childNodes[index]; var item = bucket.getItemAtIndex(index);
var attachment = item.attachment; var attachment = item.attachment;
if (attachment) if (attachment)
{ {
@ -2599,9 +2590,9 @@ function Attachments2CompFields(compFields)
//First, we need to clear all attachment in the compose fields //First, we need to clear all attachment in the compose fields
compFields.removeAttachments(); compFields.removeAttachments();
for (var index = 0; index < bucket.childNodes.length; index++) for (var index = 0; index < bucket.getRowCount(); index++)
{ {
var item = bucket.childNodes[index]; var item = bucket.getItemAtIndex(index);
var attachment = item.attachment; var attachment = item.attachment;
if (attachment) if (attachment)
compFields.addAttachment(attachment); compFields.addAttachment(attachment);
@ -2612,15 +2603,20 @@ function RemoveAllAttachments()
{ {
var child; var child;
var bucket = document.getElementById("attachmentBucket"); var bucket = document.getElementById("attachmentBucket");
while (bucket.hasChildNodes()) while (bucket.getRowCount())
{ {
child = bucket.removeChild(bucket.lastChild); child = bucket.removeItemAt(bucket.getRowCount() - 1);
// Let's release the attachment object hold by the node else it won't go away until the window is destroyed // Let's release the attachment object hold by the node else it won't go away until the window is destroyed
child.attachment = null; child.attachment = null;
} }
document.getElementById("attachments-box").setAttribute("hidden", "true"); ChangeAttachmentBucketVisibility(true);
document.getElementById("attachmentbucket-sizer").setAttribute("hidden", "true"); }
function ChangeAttachmentBucketVisibility(aHideBucket)
{
document.getElementById("attachments-box").collapsed = aHideBucket;
document.getElementById("attachmentbucket-sizer").collapsed = aHideBucket;
} }
function RemoveSelectedAttachment() function RemoveSelectedAttachment()
@ -2628,35 +2624,31 @@ function RemoveSelectedAttachment()
var child; var child;
var bucket = document.getElementById("attachmentBucket"); var bucket = document.getElementById("attachmentBucket");
if (bucket.selectedItems.length > 0) { if (bucket.selectedItems.length > 0) {
for (var item = bucket.selectedItems.length - 1; item >= 0; item-- ) for (var index = bucket.selectedCount - 1; index >= 0; index-- )
{ {
child = bucket.removeChild(bucket.selectedItems[item]); child = bucket.removeItemAt(bucket.getIndexOfItem(bucket.getSelectedItem(index)));
// Let's release the attachment object hold by the node else it won't go away until the window is destroyed // Let's release the attachment object held by the node else it won't go away until the window is destroyed
child.attachment = null; child.attachment = null;
} }
gContentChanged = true; gContentChanged = true;
} }
if (!MessageHasAttachments()) if (!MessageHasAttachments())
{ ChangeAttachmentBucketVisibility(true);
document.getElementById("attachments-box").setAttribute("hidden", "true");
document.getElementById("attachmentbucket-sizer").setAttribute("hidden", "true");
}
} }
function FocusOnFirstAttachment() function FocusOnFirstAttachment()
{ {
var bucketList = document.getElementById("attachmentBucket"); var bucketList = document.getElementById("attachmentBucket");
if (bucketList && bucketList.hasChildNodes()) if (bucketList && bucketList.getRowCount())
bucketTree.selectItem(bucketList.firstChild); bucketTree.selectedIndex(0);
} }
function AttachmentElementHasItems() function AttachmentElementHasItems()
{ {
var element = document.getElementById("attachmentBucket"); var element = document.getElementById("attachmentBucket");
return element ? element.getRowCount() : 0;
return element ? element.childNodes.length : 0;
} }
function OpenSelectedAttachment() function OpenSelectedAttachment()
@ -3091,10 +3083,7 @@ var envelopeDragObserver = {
attachment.url = rawData; attachment.url = rawData;
attachment.name = prettyName; attachment.name = prettyName;
AddAttachment(attachment); AddAttachment(attachment);
ChangeAttachmentBucketVisibility(false);
var attachmentBox = document.getElementById("attachments-box");
attachmentBox.hidden = false;
document.getElementById("attachmentbucket-sizer").hidden=false;
} }
} }
} }
@ -3113,11 +3102,8 @@ var envelopeDragObserver = {
{ {
// make sure the attachment box is visible during drag over // make sure the attachment box is visible during drag over
var attachmentBox = document.getElementById("attachments-box"); var attachmentBox = document.getElementById("attachments-box");
if (attachmentBox.hidden) if (attachmentBox.collapsed)
{ ChangeAttachmentBucketVisibility(false);
attachmentBox.hidden = false;
document.getElementById("attachmentbucket-sizer").hidden=false;
}
} }
else else
{ {

View File

@ -737,8 +737,8 @@
onkeypress="subjectKeyPress(event);" /> onkeypress="subjectKeyPress(event);" />
</hbox> </hbox>
</vbox> </vbox>
<splitter id="attachmentbucket-sizer" hidden="true" collapse="after"/> <splitter id="attachmentbucket-sizer" collapsed="true" collapse="after"/>
<vbox id="attachments-box" hidden="true"> <vbox id="attachments-box" collapsed="true">
<label id="attachmentBucketText" value="&attachments.label;" crop="right" <label id="attachmentBucketText" value="&attachments.label;" crop="right"
accesskey="&attachments.accesskey;" control="attachmentBucket"/> accesskey="&attachments.accesskey;" control="attachmentBucket"/>
<listbox seltype="multiple" id="attachmentBucket" flex="1" rows="4" <listbox seltype="multiple" id="attachmentBucket" flex="1" rows="4"