fix for #91662 (long strings in headers can cause scroll barfs and attachment window to disappear) and bug #61497 (can't select text in message headers).

r=ben, sr=bienvenu.
This commit is contained in:
sspitzer%netscape.com 2002-09-05 06:27:43 +00:00
parent 3a78c9b53c
commit 59c316ce53
4 changed files with 50 additions and 35 deletions

View File

@ -16,15 +16,15 @@
<binding id="mail-toggle-headerfield"> <binding id="mail-toggle-headerfield">
<content> <content>
<xul:hbox class="headerNameBox" align="start"> <xul:hbox class="headerNameBox" align="start">
<xul:image class="expandHeaderViewButton" xbl:inherits="onclick=ontwistyclick"/> <xul:image class="expandHeaderViewButton" xbl:inherits="onclick=ontwistyclick"/>
<xul:spacer flex="1"/> <xul:spacer flex="1"/>
<xul:label class="headerName" xbl:inherits="value=label"/> <xul:label class="headerName" xbl:inherits="value=label"/>
</xul:hbox> </xul:hbox>
<xul:label class="headerValue" anonid="headerValue" flex="1">*</xul:label> <xul:textbox originalclass="headerValue plain" appendoriginalclass="true" keywordrelated="true" class="headerValue plain" anonid="headerValue" flex="1" readonly="true"/>
</content> </content>
<implementation> <implementation>
<property name="headerValue" onset="return document.getAnonymousElementByAttribute(this, 'anonid', 'headerValue').firstChild.nodeValue = val;"/> <property name="headerValue" onset="return document.getAnonymousElementByAttribute(this, 'anonid', 'headerValue').value = val;"/>
</implementation> </implementation>
</binding> </binding>
@ -36,11 +36,11 @@
<xul:hbox class="headerNameBox" align="start"> <xul:hbox class="headerNameBox" align="start">
<xul:label class="headerName" xbl:inherits="value=label" flex="1"/> <xul:label class="headerName" xbl:inherits="value=label" flex="1"/>
</xul:hbox> </xul:hbox>
<xul:label class="headerValue" anonid="headerValue" flex="1">*</xul:label> <xul:textbox originalclass="headerValue plain" appendoriginalclass="true" keywordrelated="true" class="headerValue plain" anonid="headerValue" flex="1" readonly="true"/>
</content> </content>
<implementation> <implementation>
<property name="headerValue" onset="return document.getAnonymousElementByAttribute(this, 'anonid', 'headerValue').firstChild.nodeValue = val;" /> <property name="headerValue" onset="return document.getAnonymousElementByAttribute(this, 'anonid', 'headerValue').value = val;"/>
</implementation> </implementation>
</binding> </binding>
@ -48,8 +48,8 @@
<content> <content>
<xul:hbox class="headerNameBox" align="start"> <xul:hbox class="headerNameBox" align="start">
<xul:label class="headerName" xbl:inherits="value=label" flex="1"/> <xul:label class="headerName" xbl:inherits="value=label" flex="1"/>
</xul:hbox> </xul:hbox>
<xul:mail-emailaddress anonid="emailAddressNode"/> <xul:mail-emailaddress anonid="emailAddressNode"/>
</content> </content>
<implementation> <implementation>

View File

@ -585,16 +585,30 @@ function SetKeywords(aKeywords)
return; return;
// these are the UI elements who care about keywords // these are the UI elements who care about keywords
var ids = ["expandedKeywordImage","expandedHeaderView","msgHeaderView","collapsedHeaderView","collapsedKeywordImage","editMessageBox","expandedAttachmentBox"]; var elements = document.getElementsByAttribute("keywordrelated","true");
for (i in ids) { var len = elements.length;
var element = document.getElementById(ids[i]); for (var i=0; i<len; i++) {
if (element) { var element = elements[i];
if (aKeywords) var originalclass = element.getAttribute("originalclass");
element.setAttribute("class", aKeywords);
else { // we use XBL for certain headers.
// if no keywords, reset class to the original class // if the element has keywordrelated="true"
element.setAttribute("class", element.getAttribute("originalclass")); // but no original class, it's an XBL widget
// so to get the real element, use getAnonymousElementByAttribute()
if (!originalclass) {
element = document.getAnonymousElementByAttribute(element, "keywordrelated", "true");
originalclass = element.getAttribute("originalclass");
}
if (aKeywords) {
if (element.getAttribute("appendoriginalclass") == "true") {
aKeywords += " " + originalclass;
} }
element.setAttribute("class", aKeywords);
}
else {
// if no keywords, reset class to the original class
element.setAttribute("class", originalclass);
} }
} }

View File

@ -501,7 +501,7 @@ function updateHeaderValue(headerEntry, headerValue)
function updateHeaderValueInTextNode(headerEntry, headerValue) function updateHeaderValueInTextNode(headerEntry, headerValue)
{ {
headerEntry.textNode.setAttribute("value", headerValue); headerEntry.textNode.value = headerValue;
} }
function createNewHeaderView(headerName) function createNewHeaderView(headerName)
@ -510,9 +510,10 @@ function createNewHeaderView(headerName)
var newHeader = document.createElement("mail-headerfield"); var newHeader = document.createElement("mail-headerfield");
newHeader.setAttribute('id', idName); newHeader.setAttribute('id', idName);
newHeader.setAttribute('label', currentHeaderData[headerName].headerName + ':'); newHeader.setAttribute('label', currentHeaderData[headerName].headerName + ':');
// all mail-headerfield elements are keyword related
newHeader.setAttribute('keywordrelated','true');
newHeader.collapsed = true; newHeader.collapsed = true;
// this new element needs to be inserted into the view... // this new element needs to be inserted into the view...
var topViewNode = document.getElementById('expandedHeaders'); var topViewNode = document.getElementById('expandedHeaders');

View File

@ -55,9 +55,9 @@ Rights Reserved.
<tooltip id="attachmentListTooltip" <tooltip id="attachmentListTooltip"
onpopupshowing="return FillInAttachmentTooltip(document.tooltipNode);"/> onpopupshowing="return FillInAttachmentTooltip(document.tooltipNode);"/>
<hbox id="msgHeaderView" originalclass="none" persist="state"> <hbox id="msgHeaderView" keywordrelated="true" originalclass="none" persist="state">
<grid id="collapsedHeaderView" class="header-part1" originalclass="header-part1" flex="1" collapsed="true"> <grid id="collapsedHeaderView" class="header-part1" keywordrelated="true" originalclass="header-part1" flex="1" collapsed="true">
<rows> <rows>
<row flex="1"/> <row flex="1"/>
</rows> </rows>
@ -70,11 +70,11 @@ Rights Reserved.
</column> </column>
<column id="collapsedsubjectBox" collapsed="true" flex="1"> <column id="collapsedsubjectBox" collapsed="true" flex="1">
<hbox align="start"> <hbox>
<label class="collapsedHeaderDisplayName" value="&subjectField.label;"/> <label class="collapsedHeaderDisplayName" value="&subjectField.label;"/>
<label id="collapsedsubjectValue" class="collapsedHeaderValue" crop="right" flex="1"/> <textbox id="collapsedsubjectValue" keywordrelated="true" class="collapsedHeaderValue plain" originalclass="collapsedHeaderValue plain" readonly="true" crop="right" appendoriginalclass="true" flex="1"/>
</hbox> </hbox>
</column> </column>
<column id="collapsedfromBox" collapsed="true"> <column id="collapsedfromBox" collapsed="true">
<hbox align="start"> <hbox align="start">
@ -85,13 +85,13 @@ Rights Reserved.
<column id = "collapseddateBox" collapsed="true"> <column id = "collapseddateBox" collapsed="true">
<hbox align="start"> <hbox align="start">
<label id="collapseddateValue" class="collapsedHeaderValue"/> <textbox id="collapseddateValue" keywordrelated="true" class="collapsedHeaderValue plain" originalclass="collapsedHeaderValue plain" appendoriginalclass="true" readonly="true"/>
</hbox> </hbox>
</column> </column>
<column id="collapsedKeywordBox"> <column id="collapsedKeywordBox">
<hbox align="start"> <hbox align="start">
<image id="collapsedKeywordImage" originalclass="none"/> <image id="collapsedKeywordImage" keywordrelated="true" originalclass="none"/>
</hbox> </hbox>
</column> </column>
@ -103,38 +103,38 @@ Rights Reserved.
</columns> </columns>
</grid> </grid>
<hbox id="expandedHeaderView" class="header-part1" originalclass="header-part1" flex="1" collapsed="true"> <hbox id="expandedHeaderView" class="header-part1" keywordrelated="true" originalclass="header-part1" flex="1" collapsed="true">
<vbox id="expandedHeaders" flex="1"> <vbox id="expandedHeaders" flex="1">
<mail-toggle-headerfield id="expandedsubjectBox" class="subjectvalue" label="&subjectField.label;" ontwistyclick="ToggleHeaderView();" collapsed="true"/> <mail-toggle-headerfield keywordrelated="true" id="expandedsubjectBox" class="subjectvalue" label="&subjectField.label;" ontwistyclick="ToggleHeaderView();" collapsed="true"/>
<mail-emailheaderfield id="expandedfromBox" label="&fromField.label;" collapsed="true"/> <mail-emailheaderfield id="expandedfromBox" label="&fromField.label;" collapsed="true"/>
<mail-emailheaderfield id="expandedreply-toBox" label="&replyToField.label;" collapsed="true"/> <mail-emailheaderfield id="expandedreply-toBox" label="&replyToField.label;" collapsed="true"/>
<mail-headerfield id="expandeddateBox" label="&dateField.label;" collapsed="true"/> <mail-headerfield keywordrelated="true" id="expandeddateBox" label="&dateField.label;" collapsed="true"/>
<mail-multi-emailHeaderField id="expandedtoBox" label="&toField.label;" collapsed="true"/> <mail-multi-emailHeaderField id="expandedtoBox" label="&toField.label;" collapsed="true"/>
<mail-multi-emailHeaderField id="expandedccBox" label="&ccField.label;" collapsed="true"/> <mail-multi-emailHeaderField id="expandedccBox" label="&ccField.label;" collapsed="true"/>
<mail-multi-emailHeaderField id="expandedbccBox" label="&bccField.label;" collapsed="true"/> <mail-multi-emailHeaderField id="expandedbccBox" label="&bccField.label;" collapsed="true"/>
<mail-headerfield id="expandednewsgroupsBox" label="&newsgroupsField.label;" collapsed="true"/> <mail-headerfield keywordrelated="true" id="expandednewsgroupsBox" label="&newsgroupsField.label;" collapsed="true"/>
<mail-headerfield id="expandedfollowup-toBox" label="&followupToField.label;" collapsed="true"/> <mail-headerfield keywordrelated="true" id="expandedfollowup-toBox" label="&followupToField.label;" collapsed="true"/>
<mail-headerfield id="expandeduser-agentBox" label="&userAgentField.label;" collapsed="true"/> <mail-headerfield keywordrelated="true" id="expandeduser-agentBox" label="&userAgentField.label;" collapsed="true"/>
</vbox> </vbox>
<vbox id="expandedKeywordBox"> <vbox id="expandedKeywordBox">
<spacer flex="1"/> <spacer flex="1"/>
<image id="expandedKeywordImage" originalclass="none" /> <image id="expandedKeywordImage" keywordrelated="true" originalclass="none" />
<spacer flex="1"/> <spacer flex="1"/>
</vbox> </vbox>
<vbox id="editMessageBox" class="header-part1" originalclass="header-part1" collapsed="true"> <vbox id="editMessageBox" class="header-part1" keywordrelated="true" originalclass="header-part1" collapsed="true">
<spacer flex="1"/> <spacer flex="1"/>
<button id="editMessageButton" label="&editMessage.label;" oncommand="MsgComposeDraftMessage()"/> <button id="editMessageButton" label="&editMessage.label;" oncommand="MsgComposeDraftMessage()"/>
<spacer flex="1"/> <spacer flex="1"/>
</vbox> </vbox>
<vbox id="expandedAttachmentBox" class="header-part1" originalclass="header-part1" collapsed="true"> <vbox id="expandedAttachmentBox" class="header-part1" keywordrelated="true" originalclass="header-part1" collapsed="true">
<label id="attachmentText" value="&attachmentsTree.label;" crop="right"/> <label id="attachmentText" value="&attachmentsTree.label;" crop="right"/>
<listbox id="attachmentList" flex="2" <listbox id="attachmentList" flex="2"
onclick="attachmentListClick(event);" ondraggesture="nsDragAndDrop.startDrag(event,attachmentAreaDNDObserver);" ondragover="nsDragAndDrop.dragOver(event, attachmentAreaDNDObserver);" context="attachmentListContext"/> onclick="attachmentListClick(event);" ondraggesture="nsDragAndDrop.startDrag(event,attachmentAreaDNDObserver);" ondragover="nsDragAndDrop.dragOver(event, attachmentAreaDNDObserver);" context="attachmentListContext"/>