--- a/mail/base/content/ABSearchDialog.js
+++ b/mail/base/content/ABSearchDialog.js
@@ -91,16 +91,19 @@ function searchOnLoad()
.getService(Components.interfaces.nsIPrefService);
var prefBranch = prefService.getBranch(null).QueryInterface(Components.interfaces.nsIPrefBranch2);
gSearchPhoneticName =
prefBranch.getComplexValue("mail.addr_book.show_phonetic_fields",
Components.interfaces.nsIPrefLocalizedString).data;
if (window.arguments && window.arguments[0])
SelectDirectory(window.arguments[0].directory);
+ else
+ SelectDirectory(document.getElementById("abPopup-menupopup")
+ .firstChild.value);
// initialize globals, see abCommon.js, InitCommonJS()
abList = document.getElementById("abPopup");
onMore(null);
}
function searchOnUnload()
@@ -362,16 +365,8 @@ function UpdateCardView()
gComposeButton.removeAttribute("disabled");
if (numSelected == 1)
gPropertiesButton.removeAttribute("disabled");
else
gPropertiesButton.setAttribute("disabled","true");
}
-
-function onChooseDirectory(event)
-{
- var directoryURI = event.id;
- if (directoryURI) {
- SelectDirectory(directoryURI);
- }
-}
--- a/mail/base/content/ABSearchDialog.xul
+++ b/mail/base/content/ABSearchDialog.xul
@@ -48,17 +48,16 @@
/abResultsPaneOverlay.dtd">
%abResultsPaneOverlayDTD;
<!ENTITY % SearchDialogDTD SYSTEM "chrome://messenger/locale/SearchDialog.dtd">
%SearchDialogDTD;
]>
<window id="searchAddressBookWindow"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:nc="http://home.netscape.com/NC-rdf#"
onload="searchOnLoad();"
onunload="searchOnUnload();"
onclose="onSearchStop();"
windowtype="mailnews:absearch"
title="&abSearchDialogTitle.label;"
style="width: 52em; height: 34em;"
persist="screenX screenY width height sizemode">
@@ -83,31 +82,18 @@
</keyset>
<dummy class="usesMailWidgets"/>
<vbox id="searchTerms" flex="3" persist="height">
<vbox>
<hbox align="center">
<label value="&abSearchHeading.label;" accesskey="&abSearchHeading.accesskey;" control="abPopup"/>
- <menulist id="abPopup">
- <menupopup id="abPopup-menupopup" ref="moz-abdirectory://"
- datasources="rdf:addressdirectory"
- sortActive="true"
- sortDirection="ascending"
- sortResource="http://home.netscape.com/NC-rdf#DirTreeNameSort"
- oncommand="onChooseDirectory(event.target);">
- <template>
- <rule nc:IsMailList="false">
- <menuitem uri="..."
- label="rdf:http://home.netscape.com/NC-rdf#DirName"
- value="rdf:http://home.netscape.com/NC-rdf#DirUri"/>
- </rule>
- </template>
- </menupopup>
+ <menulist id="abPopup" oncommand="SelectDirectory(this.value);">
+ <menupopup id="abPopup-menupopup" class="addrbooksPopup"/>
</menulist>
<spacer flex="10"/>
<button id="search-button" oncommand="onSearchButton(event);" default="true"/>
</hbox>
<hbox align="center">
<spacer flex="1"/>
<button label="&resetButton.label;" oncommand="onAbSearchReset(event);" accesskey="&resetButton.accesskey;"/>
</hbox>
--- a/mail/base/content/messenger.css
+++ b/mail/base/content/messenger.css
@@ -257,8 +257,12 @@ tabmail
.tabs-alltabs-popup {
-moz-binding: url("chrome://messenger/content/tabmail.xml#tabmail-alltabs-popup");
}
menupopup[type="folder"] {
-moz-binding: url("chrome://messenger/content/folderWidgets.xml#folder-menupopup");
}
+
+.addrbooksPopup {
+ -moz-binding: url("chrome://messenger/content/addressbook/addrbookWidgets.xml#addrbooks-menupopup");
+}
--- a/mail/components/addrbook/content/abCardOverlay.js
+++ b/mail/components/addrbook/content/abCardOverlay.js
@@ -371,17 +371,17 @@ function NewCardOKButton()
gOkCallback(gEditCard.card.translateTo("vcard"));
return true; // close the window
}
var popup = document.getElementById('abPopup');
if ( popup )
{
- var uri = popup.getAttribute('value');
+ var uri = popup.value;
// FIX ME - hack to avoid crashing if no ab selected because of blank option bug from template
// should be able to just remove this if we are not seeing blank lines in the ab popup
if ( !uri )
return false; // don't close window
// -----
if (gEditCard.card)
--- a/mail/components/addrbook/content/abCommon.js
+++ b/mail/components/addrbook/content/abCommon.js
@@ -85,17 +85,17 @@ var DirPaneController =
// only handles single selection
// so we forward select all to the results pane
// but if there is no gAbView
// don't bother sending to the results pane
return (gAbView != null);
case "cmd_delete":
case "button_delete":
var selectedDir = GetSelectedDirectory();
- if (command == "cmd_delete")
+ if (command == "cmd_delete" && selectedDir)
goSetMenuValue(command, GetDirectoryFromURI(selectedDir).isMailList ?
"valueList" : "valueAddressBook");
if (selectedDir &&
(selectedDir != kPersonalAddressbookURI) &&
(selectedDir != kCollectedAddressbookURI)) {
// If the directory is a mailing list, and it is read-only, return
// false.
@@ -605,17 +605,17 @@ function DirPaneHasFocus()
{
// returns true if diectory pane has the focus. Returns false, otherwise.
return (top.document.commandDispatcher.focusedElement == dirTree)
}
function GetSelectedDirectory()
{
if (abList)
- return abList.selectedItem.id;
+ return abList.value;
else {
if (dirTree.currentIndex < 0)
return null;
var selected = dirTree.builderView.getResourceAtIndex(dirTree.currentIndex)
return selected.Value;
}
}
--- a/mail/components/addrbook/content/abContactsPanel.js
+++ b/mail/components/addrbook/content/abContactsPanel.js
@@ -69,72 +69,22 @@ function addSelectedAddresses(recipientT
{
// turn each card into a properly formatted address
var address = GenerateAddressFromCard(cards[i]);
if (address != "")
parent.AddRecipient(recipientType, address);
}
}
-var gAddressBookPanelAbListener = {
- onItemAdded: function(parentDir, item) {
- // will not be called
- },
- onItemRemoved: function(parentDir, item) {
- // will only be called when an addressbook is deleted
- try {
- var directory = item.QueryInterface(Components.interfaces.nsIAbDirectory);
- // check if the item being removed is the directory
- // that we are showing in the addressbook sidebar
- // if so, select the person addressbook (it can't be removed)
- var abPopup = document.getElementById('addressbookList');
- if (directory.URI == abPopup.value) {
- abPopup.value = kPersonalAddressbookURI;
- LoadPreviouslySelectedAB();
- }
- }
- catch (ex) {
- }
- },
- onItemPropertyChanged: function(item, property, oldValue, newValue) {
- try {
- var directory = item.QueryInterface(Components.interfaces.nsIAbDirectory);
- // check if the item being changed is the directory
- // that we are showing in the addressbook sidebar
- if (directory == GetAbView().directory) {
- LoadPreviouslySelectedAB();
- }
- }
- catch (ex) {
- }
- }
-};
-
-
-// XXX todo
-// can we combine some common code? see OnLoadNewMailList()
-// set popup with address book names
-function LoadPreviouslySelectedAB()
-{
- var abPopup = document.getElementById('addressbookList');
- var value = abPopup.value || kPersonalAddressbookURI;
- abPopup.selectedItem = null;
- abPopup.value = value;
- ChangeDirectoryByURI(abPopup.selectedItem.id);
-}
-
function AddressBookMenuListChange()
{
if (gSearchInput.value && !gSearchInput.showingSearchCriteria)
onEnterInSearchBar();
else
- {
- var abPopup = document.getElementById('addressbookList');
- ChangeDirectoryByURI(abPopup.selectedItem.id);
- }
+ ChangeDirectoryByURI(document.getElementById('addressbookList').value);
}
function AbPanelOnComposerClose()
{
CloseAbView();
onClearSearch();
}
@@ -144,52 +94,49 @@ function AbPanelOnComposerReOpen()
}
function AbPanelLoad()
{
InitCommonJS();
document.title = parent.document.getElementById("sidebar-title").value;
- LoadPreviouslySelectedAB();
+ var abPopup = document.getElementById('addressbookList');
- // Add a listener, so we can switch directories if the current directory is
- // deleted, and change the name if the selected directory's name is modified.
- // This listener only cares when a directory is removed or modified.
- Components.classes["@mozilla.org/abmanager;1"]
- .getService(Components.interfaces.nsIAbManager)
- .addAddressBookListener(gAddressBookPanelAbListener,
- nsIAbListener.directoryRemoved |
- nsIAbListener.itemChanged);
+ // Reselect the persisted address book if possible, if not just select the
+ // first in the list.
+ var temp = abPopup.value;
+ abPopup.selectedItem = null;
+ abPopup.value = temp;
+ if (!abPopup.selectedItem)
+ abPopup.selectedIndex = 0;
+
+ ChangeDirectoryByURI(abPopup.value);
parent.addEventListener("compose-window-close", AbPanelOnComposerClose, true);
parent.addEventListener("compose-window-reopen", AbPanelOnComposerReOpen, true);
gSearchInput = document.getElementById("searchInput");
}
function AbPanelUnload()
{
- Components.classes["@mozilla.org/abmanager;1"]
- .getService(Components.interfaces.nsIAbManager)
- .removeAddressBookListener(gAddressBookPanelAbListener);
-
parent.removeEventListener("compose-window-close", AbPanelOnComposerClose, true);
parent.removeEventListener("compose-window-reopen", AbPanelOnComposerReOpen, true);
CloseAbView();
}
function AbPanelNewCard()
{
- goNewCardDialog(abList.selectedItem.getAttribute('id'));
+ goNewCardDialog(abList.value);
}
function AbPanelNewList()
{
- goNewListDialog(abList.selectedItem.getAttribute('id'));
+ goNewListDialog(abList.value);
}
function ResultsPaneSelectionChanged()
{
// do nothing for ab panel
}
function OnClickedCard()
--- a/mail/components/addrbook/content/abContactsPanel.xul
+++ b/mail/components/addrbook/content/abContactsPanel.xul
@@ -52,18 +52,16 @@
<!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd">
%globalDTD;
]>
<page id="abContactsPanel"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="AbPanelLoad();"
onunload="AbPanelUnload();"
- xmlns:nc="http://home.netscape.com/NC-rdf#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
selectedaddresses="true">
<stringbundleset id="stringbundleset">
<stringbundle id="bundle_addressBook" src="chrome://messenger/locale/addressbook/addressBook.properties"/>
</stringbundleset>
<script type="application/x-javascript" src="chrome://messenger/content/addressbook/addressbook.js"/>
<script type="application/x-javascript" src="chrome://global/content/nsDragAndDrop.js"/>
@@ -83,30 +81,17 @@
<vbox id="results_box" flex="1">
<separator class="thin"/>
<label value="&addressbookPicker.label;" accesskey="&addressbookPicker.accesskey;" control="addressbookList"/>
<hbox id="panel-bar" class="toolbar" align="center">
<menulist id="addressbookList"
oncommand="AddressBookMenuListChange();" flex="1"
persist="value">
- <menupopup id="addressbookList-menupopup"
- datasources="rdf:addressdirectory"
- ref="moz-abdirectory://"
- sortActive="true"
- sortDirection="ascending"
- sortResource="http://home.netscape.com/NC-rdf#DirTreeNameSort">
- <template>
- <rule nc:IsMailList="false">
- <menuitem uri="..."
- label="rdf:http://home.netscape.com/NC-rdf#DirName"
- value="rdf:http://home.netscape.com/NC-rdf#DirUri"/>
- </rule>
- </template>
- </menupopup>
+ <menupopup id="addressbookList-menupopup" class="addrbooksPopup"/>
</menulist>
</hbox>
<separator class="thin"/>
<vbox>
<label value="&searchInput.label;" accesskey="&searchInput.accesskey;" control="searchInput"/>
<textbox id="searchInput" flex="1" type="timed" timeout="800"
--- a/mail/components/addrbook/content/abEditListDialog.xul
+++ b/mail/components/addrbook/content/abEditListDialog.xul
@@ -37,17 +37,16 @@
#
# ***** END LICENSE BLOCK *****
<?xml-stylesheet href="chrome://messenger/skin/addressbook/cardDialog.css" type="text/css"?>
<!DOCTYPE dialog SYSTEM "chrome://messenger/locale/addressbook/abMailListDialog.dtd">
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
id="ablistWindow"
title="&mailListWindow.title;"
onload="OnLoadEditList();"
ondialogaccept="return EditListOKButton();"
ondragover="DragOverAddressListTree(event);"
ondragdrop="DropOnAddressListTree(event);">
<stringbundleset id="stringbundleset">
--- a/mail/components/addrbook/content/abMailListDialog.xul
+++ b/mail/components/addrbook/content/abMailListDialog.xul
@@ -37,18 +37,16 @@
#
# ***** END LICENSE BLOCK *****
<?xml-stylesheet href="chrome://messenger/skin/addressbook/cardDialog.css" type="text/css"?>
<!DOCTYPE dialog SYSTEM "chrome://messenger/locale/addressbook/abMailListDialog.dtd">
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:nc="http://home.netscape.com/NC-rdf#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
id="ablistWindow"
title="&mailListWindow.title;"
ondialogaccept="return MailListOKButton();"
onload="OnLoadNewMailList();"
ondragover="DragOverAddressListTree(event);"
ondragdrop="DropOnAddressListTree(event);">
<stringbundleset id="stringbundleset">
@@ -58,31 +56,18 @@
<!-- move needed functions into a single js file -->
<script type="application/x-javascript" src="chrome://messenger/content/messengercompose/addressingWidgetOverlay.js"/>
<script type="application/x-javascript" src="chrome://messenger/content/addressbook/abCommon.js"/>
<script type="application/x-javascript" src="chrome://messenger/content/addressbook/abMailListDialog.js"/>
<hbox align="center">
<label control="abPopup" value="&addToAddressBook.label;" accesskey="&addToAddressBook.accesskey;"/>
<menulist id="abPopup">
- <menupopup id="abPopup-menupopup"
- ref="moz-abdirectory://"
- datasources="rdf:addressdirectory"
- sortActive="true"
- sortDirection="ascending"
- sortResource="http://home.netscape.com/NC-rdf#DirTreeNameSort">
- <template>
- <rule nc:IsWriteable="false"/>
- <rule nc:SupportsMailingLists="true">
- <menuitem uri="..."
- label="rdf:http://home.netscape.com/NC-rdf#DirName"
- value="rdf:http://home.netscape.com/NC-rdf#DirUri"/>
- </rule>
- </template>
- </menupopup>
+ <menupopup id="abPopup-menupopup" class="addrbooksPopup" writeable="true"
+ supportsmaillists="true"/>
</menulist>
</hbox>
<spacer style="height:1em"/>
<vbox id="editlist">
<hbox>
<spacer flex="1"/>
--- a/mail/components/addrbook/jar.mn
+++ b/mail/components/addrbook/jar.mn
@@ -3,16 +3,17 @@ messenger.jar:
* content/messenger/addressbook/addressbook.js (content/addressbook.js)
* content/messenger/addressbook/addressbook.xul (content/addressbook.xul)
* content/messenger/addressbook/abCommon.js (content/abCommon.js)
* content/messenger/addressbook/abCardOverlay.js (content/abCardOverlay.js)
* content/messenger/addressbook/abEditListDialog.xul (content/abEditListDialog.xul)
* content/messenger/addressbook/abMailListDialog.xul (content/abMailListDialog.xul)
* content/messenger/addressbook/abContactsPanel.xul (content/abContactsPanel.xul)
* content/messenger/addressbook/abContactsPanel.js (content/abContactsPanel.js)
+ content/messenger/addressbook/addrbookWidgets.xml (/mailnews/addrbook/resources/content/addrbookWidgets.xml)
content/messenger/addressbook/pref-directory.js (/mailnews/addrbook/prefs/resources/content/pref-directory.js)
content/messenger/addressbook/pref-directory-add.js (/mailnews/addrbook/prefs/resources/content/pref-directory-add.js)
content/messenger/addressbook/pref-directory-add.xul (/mailnews/addrbook/prefs/resources/content/pref-directory-add.xul)
content/messenger/addressbook/pref-editdirectories.js (/mailnews/addrbook/prefs/resources/content/pref-editdirectories.js)
content/messenger/addressbook/pref-editdirectories.xul (/mailnews/addrbook/prefs/resources/content/pref-editdirectories.xul)
content/messenger/addressbook/abAddressBookNameDialog.js (/mailnews/addrbook/resources/content/abAddressBookNameDialog.js)
content/messenger/addressbook/abAddressBookNameDialog.xul (/mailnews/addrbook/resources/content/abAddressBookNameDialog.xul)
content/messenger/addressbook/abNewCardDialog.xul (/mailnews/addrbook/resources/content/abNewCardDialog.xul)
--- a/mailnews/addrbook/resources/content/abCardOverlay.js
+++ b/mailnews/addrbook/resources/content/abCardOverlay.js
@@ -370,17 +370,17 @@ function NewCardOKButton()
gOkCallback(gEditCard.card.translateTo("vcard"));
return true; // close the window
}
var popup = document.getElementById('abPopup');
if ( popup )
{
- var uri = popup.getAttribute('value');
+ var uri = popup.value;
// FIX ME - hack to avoid crashing if no ab selected because of blank option bug from template
// should be able to just remove this if we are not seeing blank lines in the ab popup
if ( !uri )
return false; // don't close window
// -----
if (gEditCard.card)
--- a/mailnews/addrbook/resources/content/abCommon.js
+++ b/mailnews/addrbook/resources/content/abCommon.js
@@ -617,17 +617,17 @@ function DirPaneHasFocus()
{
// returns true if diectory pane has the focus. Returns false, otherwise.
return (top.document.commandDispatcher.focusedElement == dirTree)
}
function GetSelectedDirectory()
{
if (abList)
- return abList.selectedItem.id;
+ return abList.value;
else {
if (dirTree.currentIndex < 0)
return null;
var selected = dirTree.builderView.getResourceAtIndex(dirTree.currentIndex)
return selected.Value;
}
}
--- a/mailnews/addrbook/resources/content/abMailListDialog.xul
+++ b/mailnews/addrbook/resources/content/abMailListDialog.xul
@@ -38,45 +38,30 @@
<?xml-stylesheet href="chrome://messenger/skin/dialogs.css" type="text/css"?>
<?xul-overlay href="chrome://messenger/content/addressbook/abListOverlay.xul"?>
<!DOCTYPE dialog SYSTEM "chrome://messenger/locale/addressbook/abMailListDialog.dtd">
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:nc="http://home.netscape.com/NC-rdf#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
id="ablistWindow"
title="&mailListWindow.title;"
ondialogaccept="return MailListOKButton();"
onload="OnLoadNewMailList()"
ondragover="DragOverAddressListTree(event);"
ondragdrop="DropOnAddressListTree(event);">
<stringbundleset id="stringbundleset"/>
<hbox align="center" valign="center">
<label control="abPopup" value="&addToAddressBook.label;" accesskey="&addToAddressBook.accesskey;"/>
<menulist id="abPopup">
- <menupopup id="abPopup-menupopup"
- ref="moz-abdirectory://"
- datasources="rdf:addressdirectory"
- sortActive="true"
- sortDirection="ascending"
- sortResource="http://home.netscape.com/NC-rdf#DirTreeNameSort">
- <template>
- <rule nc:IsWriteable="false"/>
- <rule nc:SupportsMailingLists="true">
- <menuitem uri="..."
- label="rdf:http://home.netscape.com/NC-rdf#DirName"
- value="rdf:http://home.netscape.com/NC-rdf#DirUri"/>
- </rule>
- </template>
- </menupopup>
+ <menupopup id="abPopup-menupopup" class="addrbooksPopup" writeable="true"
+ supportsmaillists="true"/>
</menulist>
</hbox>
<spacer style="height:1em"/>
<vbox id="editlist"/>
</dialog>
--- a/mailnews/addrbook/resources/content/abNewCardDialog.xul
+++ b/mailnews/addrbook/resources/content/abNewCardDialog.xul
@@ -38,44 +38,28 @@
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
<?xul-overlay href="chrome://messenger/content/addressbook/abCardOverlay.xul"?>
<!DOCTYPE dialog SYSTEM "chrome://messenger/locale/addressbook/abNewCardDialog.dtd">
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:nc="http://home.netscape.com/NC-rdf#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
id="abcardWindow"
onload="OnLoadNewCard()"
ondialogaccept="return NewCardOKButton();">
<stringbundleset id="stringbundleset"/>
<hbox align="center">
<label id="abPopupLabel" control="abPopup" value="&chooseAddressBook.label;" accesskey="&chooseAddressBook.accesskey;"/>
<menulist id="abPopup">
- <menupopup id="abPopup-menupopup"
- ref="moz-abdirectory://"
- datasources="rdf:addressdirectory"
- sortActive="true"
- sortDirection="ascending"
- sortResource="http://home.netscape.com/NC-rdf#DirTreeNameSort">
- <template>
- <rule nc:IsWriteable="false"/>
- <rule nc:IsMailList="false">
- <menuitem uri="..."
- label="rdf:http://home.netscape.com/NC-rdf#DirName"
- value="rdf:http://home.netscape.com/NC-rdf#DirUri"/>
- </rule>
- </template>
- </menupopup>
+ <menupopup id="abPopup-menupopup" class="addrbooksPopup" writeable="true"/>
</menulist>
</hbox>
<spacer style="height:1em"/>
<vbox id="editcard"/>
--- a/mailnews/addrbook/resources/content/abSelectAddressesDialog.js
+++ b/mailnews/addrbook/resources/content/abSelectAddressesDialog.js
@@ -111,17 +111,25 @@ function OnLoadSelectAddress()
AddAddressFromComposeWindow(toAddress, prefixTo);
AddAddressFromComposeWindow(ccAddress, prefixCc);
AddAddressFromComposeWindow(bccAddress, prefixBcc);
}
gSearchInput = document.getElementById("searchInput");
SearchInputChanged();
- SelectFirstAddressBookMenulist();
+ // Reselect the persisted address book if possible, if not just select the
+ // first in the list.
+ var temp = abPopup.value;
+ abPopup.selectedItem = null;
+ abPopup.value = temp;
+ if (!abPopup.selectedItem)
+ abPopup.selectedIndex = 0;
+
+ ChangeDirectoryByURI(abList.value);
DialogBucketPaneSelectionChanged();
var workPhoneCol = document.getElementById("WorkPhone");
workPhoneCol.setAttribute("hidden", "true");
var companyCol = document.getElementById("Company");
companyCol.setAttribute("hidden", "true");
@@ -392,40 +400,34 @@ function onEnterInSearchBar()
if (!selectedNode)
return;
if (!gQueryURIFormat) {
gQueryURIFormat = gPrefs.getComplexValue("mail.addr_book.quicksearchquery.format",
Components.interfaces.nsIPrefLocalizedString).data;
}
- var searchURI = selectedNode.getAttribute("id");
+ var searchURI = selectedNode.value;
if (gSearchInput.value != "") {
searchURI += gQueryURIFormat.replace(/@V/g, encodeURIComponent(gSearchInput.value));
}
SetAbView(searchURI);
SelectFirstCard();
}
-function SelectFirstAddressBookMenulist()
-{
- ChangeDirectoryByURI(abList.selectedItem.id);
- return;
-}
-
function DirPaneSelectionChangeMenulist()
{
if (abList && abList.selectedItem) {
if (gSearchInput.value && (gSearchInput.value != ""))
onEnterInSearchBar();
else
- ChangeDirectoryByURI(abList.selectedItem.id);
+ ChangeDirectoryByURI(abList.value);
}
}
function GetPromptService()
{
try {
return Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService);
--- a/mailnews/addrbook/resources/content/abSelectAddressesDialog.xul
+++ b/mailnews/addrbook/resources/content/abSelectAddressesDialog.xul
@@ -48,19 +48,17 @@
<!DOCTYPE window [
<!ENTITY % abSelectAddressesDialogDTD SYSTEM "chrome://messenger/locale/addressbook/abSelectAddressesDialog.dtd" >
%abSelectAddressesDialogDTD;
<!ENTITY % abResultsPaneOverlayDTD SYSTEM "chrome://messenger/locale/addressbook/abResultsPaneOverlay.dtd" >
%abResultsPaneOverlayDTD;
]>
<window id="selectAddressesWindow"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:nc="http://home.netscape.com/NC-rdf#"
title="&selectAddressWindow.title;"
class="dialog"
style="width: 50em; height: 35em;"
persist="width height screenX screenY"
onload="OnLoadSelectAddress()"
onunload="OnUnloadSelectAddress()">
<stringbundle id="bundle_addressBook" src="chrome://messenger/locale/addressbook/addressBook.properties"/>
@@ -74,32 +72,18 @@
<keyset id="dialogKeys"/>
<vbox flex="1">
<hbox id="topBox" align="center">
<label value="&lookIn.label;" accesskey="&lookIn.accesskey;" control="addressbookList"/>
<menulist id="addressbookList"
- ref="moz-abdirectory://"
- datasources="rdf:addressdirectory"
- containment="http://home.netscape.com/NC-rdf#child"
- sortActive="true"
- sortDirection="ascending"
- sortResource="http://home.netscape.com/NC-rdf#DirTreeNameSort"
oncommand="DirPaneSelectionChangeMenulist(); document.commandDispatcher.updateCommands('addrbook-select');">
- <template>
- <rule nc:IsMailList="false">
- <menupopup>
- <menuitem label="rdf:http://home.netscape.com/NC-rdf#DirName" uri="..."
- IsMailList="rdf:http://home.netscape.com/NC-rdf#IsMailList"
- IsRemote="rdf:http://home.netscape.com/NC-rdf#IsRemote"/>
- </menupopup>
- </rule>
- </template>
+ <menupopup id="addressbookList-menupopup" class="addrbooksPopup"/>
</menulist>
<label value="&for.label;" accesskey="&for.accesskey;" control="searchInput"/>
<textbox id="searchInput" flex="1"
type="timed" timeout="800"
oninput="SearchInputChanged();"
oncommand="onEnterInSearchBar();"/>
<button id="clear" label="&clearButton.label;" disabled="true" accesskey="&clearButton.accesskey;" oncommand="onAbClearSearch();"/>
</hbox>
new file mode 100644
--- /dev/null
+++ b/mailnews/addrbook/resources/content/addrbookWidgets.xml
@@ -0,0 +1,211 @@
+<?xml version="1.0"?>
+<!-- ***** BEGIN LICENSE BLOCK *****
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS" basis,
+ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ for the specific language governing rights and limitations under the
+ License.
+
+ The Original Code is Address Book code
+
+ The Initial Developer of the Original Code is
+ Mozilla Messaging
+ Portions created by the Initial Developer are Copyright (C) 2008
+ the Initial Developer. All Rights Reserved.
+
+ Contributor(s):
+ Mark Banner <bugzilla@standard8.plus.com>
+
+ Alternatively, the contents of this file may be used under the terms of
+ either of the GNU General Public License Version 2 or later (the "GPL"),
+ or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ in which case the provisions of the GPL or the LGPL are applicable instead
+ of those above. If you wish to allow use of your version of this file only
+ under the terms of either the GPL or the LGPL, and not to allow others to
+ use your version of this file under the terms of the MPL, indicate your
+ decision by deleting the provisions above and replace them with the notice
+ and other provisions required by the GPL or the LGPL. If you do not delete
+ the provisions above, a recipient may use your version of this file under
+ the terms of any one of the MPL, the GPL or the LGPL.
+
+ ***** END LICENSE BLOCK ***** -->
+
+<bindings id="addrbookBindings"
+ xmlns="http://www.mozilla.org/xbl"
+ xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:xbl="http://www.mozilla.org/xbl">
+
+ <binding id="addrbooks-menupopup"
+ extends="chrome://global/content/bindings/popup.xml#popup">
+ <implementation implements="nsIAbListener">
+ <constructor>
+ <![CDATA[
+ this._build();
+
+ const nsIAbListener = Components.interfaces.nsIAbListener;
+ // Add a listener so we can update correctly if the list should change
+ Components.classes["@mozilla.org/abmanager;1"]
+ .getService(Components.interfaces.nsIAbManager)
+ .addAddressBookListener(this,
+ nsIAbListener.itemAdded |
+ nsIAbListener.directoryRemoved |
+ nsIAbListener.itemChanged);
+ ]]>
+ </constructor>
+ <destructor>
+ <![CDATA[
+ Components.classes["@mozilla.org/abmanager;1"]
+ .getService(Components.interfaces.nsIAbManager)
+ .removeAddressBookListener(this);
+
+ this._teardown();
+ ]]>
+ </destructor>
+
+ <!-- nsIAbListener methods -->
+ <method name="onItemAdded">
+ <parameter name="aParentDir"/>
+ <parameter name="aItem"/>
+ <body><![CDATA[
+ if (aItem instanceof Components.interfaces.nsIAbDirectory) {
+ // Save the currently selected item
+ var selectedItem = this.parentNode.value;
+ this.parentNode.value = null;
+
+ // Re-use _teardown and _build so that we can use its sort function
+ this._teardown();
+ this._build();
+
+ // Now reset the value of the parent to re-connect it with the
+ // appropriate DOM Node.
+ this.parentNode.value = selectedItem;
+ }
+ ]]></body>
+ </method>
+
+ <method name="onItemRemoved">
+ <parameter name="aParentDir"/>
+ <parameter name="aItem"/>
+ <body><![CDATA[
+ if (aItem instanceof Components.interfaces.nsIAbDirectory) {
+ // Find the item in the list to remove
+ var nodes = this.getElementsByAttribute("value", aItem.URI);
+
+ // We should only ever have at most one node with the URI.
+ if (nodes.length > 0)
+ this.removeChild(nodes[0]);
+
+ // Update the parent item
+ if (this.parentNode.value == aItem.URI) {
+ this.firstChild.doCommand();
+ }
+ }
+ ]]></body>
+ </method>
+
+ <method name="onItemPropertyChanged">
+ <parameter name="aItem"/>
+ <parameter name="aProperty"/>
+ <parameter name="aOldValue"/>
+ <parameter name="aNewValue"/>
+ <body><![CDATA[
+ if (aItem instanceof Components.interfaces.nsIAbDirectory) {
+ // Find the item in the list to rename.
+ var nodes = this.getElementsByAttribute("value", aItem.URI);
+
+ // We should only ever have at most one node with the URI.
+ if (nodes.length > 0)
+ nodes[0].label = aItem.dirName;
+ }
+ ]]></body>
+ </method>
+
+ // Private methods
+ <method name="_teardown">
+ <body><![CDATA[
+ // Empty out anything in the list.
+ while (this.hasChildNodes())
+ this.removeChild(this.lastChild);
+ ]]></body>
+ </method>
+
+ <method name="_build">
+ <body><![CDATA[
+ // Init the address book list.
+ var addressBooks = Components.classes["@mozilla.org/abmanager;1"]
+ .getService(Components.interfaces.nsIAbManager)
+ .directories;
+ var holdingArray = [];
+
+ var remoteOnly = this.getAttribute("remoteonly");
+ var localOnly = this.getAttribute("localonly");
+ var writeable = this.getAttribute("writeable");
+ var sml = this.getAttribute("supportsmaillists");
+
+ const nsIAbDirectory = Components.interfaces.nsIAbDirectory;
+
+ while (addressBooks && addressBooks.hasMoreElements()) {
+ var ab = addressBooks.getNext();
+ if (ab instanceof nsIAbDirectory &&
+ (!remoteOnly || ab.isRemote) &&
+ (!localOnly || !ab.isRemote) &&
+ (!sml || ab.supportsMailingLists) &&
+ (!writeable || (ab.operations & nsIAbDirectory.opWrite) ==
+ nsIAbDirectory.opWrite))
+ holdingArray.push(ab);
+ }
+
+ const kPersonalAddressbookURI = "moz-abmdbdirectory://abook.mab";
+ const kCollectedAddressbookURI = "moz-abmdbdirectory://history.mab";
+
+ holdingArray.sort(function (a, b) {
+ // Personal at the top.
+ if (a.URI == kPersonalAddressbookURI)
+ return -1;
+
+ if (b.URI == kPersonalAddressbookURI)
+ return 1;
+
+ // Collected at the bottom.
+ if (a.URI == kCollectedAddressbookURI)
+ return 1;
+
+ if (b.URI == kCollectedAddressbookURI)
+ return -1;
+
+ // Sort books of the same type by name.
+ if (a.dirType == b.dirType)
+ return a.dirName.localeCompare(b.dirName);
+
+ // If one of the dirTypes is 2 and the other is something else,
+ // then the other will go below the one of type 2.
+ if (a.dirType == 2)
+ return -1;
+
+ if (b.dirType == 2)
+ return 1;
+
+ // Sort anything else by the dir type.
+ return a.dirType - b.dirType;
+ });
+
+ var menupopup = this;
+
+ holdingArray.forEach(function (ab) {
+ var item = document.createElement('menuitem');
+ item.setAttribute("label", ab.dirName);
+ item.setAttribute("value", ab.URI);
+
+ menupopup.appendChild(item);
+ });
+ ]]></body>
+ </method>
+ </implementation>
+ </binding>
+</bindings>
--- a/mailnews/addrbook/resources/content/addressbook-panel.js
+++ b/mailnews/addrbook/resources/content/addressbook-panel.js
@@ -37,79 +37,33 @@
var gMsgCompose = false;
function GetAbViewListener()
{
// the ab panel doesn't care if the total changes, or if the selection changes
return null;
}
-var gAddressBookPanelAbListener = {
- onItemAdded: function(parentDir, item) {
- // will not be called
- },
- onItemRemoved: function(parentDir, item) {
- // will only be called when an addressbook is deleted
- try {
- var directory = item.QueryInterface(Components.interfaces.nsIAbDirectory);
- // check if the item being removed is the directory
- // that we are showing in the addressbook sidebar
- // if so, select the person addressbook (it can't be removed)
- var abPopup = document.getElementById('addressbookList');
- if (directory.URI == abPopup.value) {
- abPopup.value = kPersonalAddressbookURI;
- LoadPreviouslySelectedAB();
- }
- }
- catch (ex) {
- }
- },
- onItemPropertyChanged: function(item, property, oldValue, newValue) {
- try {
- var directory = item.QueryInterface(Components.interfaces.nsIAbDirectory);
- // check if the item being changed is the directory
- // that we are showing in the addressbook sidebar
- if (directory == GetAbView().directory) {
- LoadPreviouslySelectedAB();
- }
- }
- catch (ex) {
- }
- }
-};
-
-
-// XXX todo
-// can we combine some common code? see OnLoadNewMailList()
-// set popup with address book names
-function LoadPreviouslySelectedAB()
-{
- var abPopup = document.getElementById('addressbookList');
- var value = abPopup.value || kPersonalAddressbookURI;
- abPopup.selectedItem = null;
- abPopup.value = value;
- ChangeDirectoryByURI(abPopup.selectedItem.id);
-}
-
function AbPanelLoad()
{
InitCommonJS();
UpgradeAddressBookResultsPaneUI("mailnews.ui.addressbook_panel_results.version");
- LoadPreviouslySelectedAB();
+ var abPopup = document.getElementById('addressbookList');
- // Add a listener, so we can switch directories if the current directory is
- // deleted, and change the name if the selected directory's name is modified.
- // This listener only cares when a directory is removed or modified.
- Components.classes["@mozilla.org/abmanager;1"]
- .getService(Components.interfaces.nsIAbManager)
- .addAddressBookListener(gAddressBookPanelAbListener,
- nsIAbListener.directoryRemoved |
- nsIAbListener.itemChanged);
+ // Reselect the persisted address book if possible, if not just select the
+ // first in the list.
+ var temp = abPopup.value;
+ abPopup.selectedItem = null;
+ abPopup.value = temp;
+ if (!abPopup.selectedItem)
+ abPopup.selectedIndex = 0;
+
+ ChangeDirectoryByURI(abPopup.value);
gSearchInput = document.getElementById("searchInput");
// for the compose window we want to show To, Cc, Bcc and a separator
// for all other windows we want to show Compose Mail To
var popup = document.getElementById("composeMail");
gMsgCompose = parent.document.documentElement.getAttribute("windowtype") == "msgcompose";
for (var i = 0; i < 4; i++)
@@ -120,20 +74,16 @@ function AbPanelLoad()
parent.addEventListener("compose-window-close", onAbClearSearch, true);
}
function AbPanelUnload()
{
if (gMsgCompose)
parent.removeEventListener("compose-window-close", onAbClearSearch, true);
- Components.classes["@mozilla.org/abmanager;1"]
- .getService(Components.interfaces.nsIAbManager)
- .removeAddressBookListener(gAddressBookPanelAbListener);
-
CloseAbView();
}
function AbPanelAdd(addrtype)
{
var cards = GetSelectedAbCards();
var count = cards.length;
@@ -146,22 +96,22 @@ function AbPanelAdd(addrtype)
gPromptService.alert(window,
gAddressBookBundle.getString("emptyEmailAddCardTitle"),
gAddressBookBundle.getString("emptyEmailAddCard"));
}
}
function AbPanelNewCard()
{
- goNewCardDialog(abList.selectedItem.getAttribute('id'));
+ goNewCardDialog(abList.value);
}
function AbPanelNewList()
{
- goNewListDialog(abList.selectedItem.getAttribute('id'));
+ goNewListDialog(abList.value);
}
function ResultsPaneSelectionChanged()
{
// do nothing for ab panel
}
function OnClickedCard()
--- a/mailnews/addrbook/resources/content/addressbook-panel.xul
+++ b/mailnews/addrbook/resources/content/addressbook-panel.xul
@@ -50,18 +50,16 @@
<!ENTITY % abResultsPaneOverlayDTD SYSTEM "chrome://messenger/locale/addressbook/abResultsPaneOverlay.dtd" >
%abResultsPaneOverlayDTD;
]>
<page id="addressbook-panel"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="AbPanelLoad();"
onunload="AbPanelUnload();"
- xmlns:nc="http://home.netscape.com/NC-rdf#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
title="&selectAddressWindow.title;"
selectedaddresses="true">
<stringbundleset id="stringbundleset">
<stringbundle id="bundle_addressBook" src="chrome://messenger/locale/addressbook/addressBook.properties"/>
</stringbundleset>
<script type="application/x-javascript" src="chrome://global/content/globalOverlay.js"/>
@@ -90,30 +88,17 @@
<menuitem label="&addrBookCardProperties.label;" accesskey="&addrBookCardProperties.accesskey;" oncommand="AbEditSelectedCard();"/>
</popup>
<vbox id="results_box" flex="1">
<hbox id="panel-bar" class="toolbar" align="center">
<label value="&lookIn.label;" control="addressbookList" id="lookInLabel"/>
<menulist id="addressbookList"
oncommand="DirPaneSelectionChangeMenulist();" flex="1"
persist="value">
- <menupopup id="addressbookList-menupopup"
- datasources="rdf:addressdirectory"
- ref="moz-abdirectory://"
- sortActive="true"
- sortDirection="ascending"
- sortResource="http://home.netscape.com/NC-rdf#DirTreeNameSort">
- <template>
- <rule nc:IsMailList="false">
- <menuitem uri="..."
- label="rdf:http://home.netscape.com/NC-rdf#DirName"
- value="rdf:http://home.netscape.com/NC-rdf#DirUri"/>
- </rule>
- </template>
- </menupopup>
+ <menupopup id="addressbookList-menupopup" class="addrbooksPopup"/>
</menulist>
</hbox>
<hbox align="center">
<label value="&for.label;" id="forLabel" control="searchInput"/>
<textbox id="searchInput" flex="1"
type="timed" timeout="800"
aria-labelledby="lookInLabel addressbookList forLabel"
oncommand="onEnterInSearchBar();"/>
--- a/mailnews/base/resources/content/messenger.css
+++ b/mailnews/base/resources/content/messenger.css
@@ -86,16 +86,20 @@ mail-headerfield {
mail-tagfield {
-moz-binding: url("chrome://messenger/content/mailWidgets.xml#mail-headerfield-tags");
}
menupopup[type="folder"] {
-moz-binding: url("chrome://messenger/content/folderWidgets.xml#folder-menupopup");
}
+.addrbooksPopup {
+ -moz-binding: url("chrome://messenger/content/addressbook/addrbookWidgets.xml#addrbooks-menupopup");
+}
+
searchattribute {
-moz-binding: url("chrome://messenger/content/mailWidgets.xml#searchattribute");
}
searchoperator {
-moz-binding: url("chrome://messenger/content/mailWidgets.xml#searchoperator");
}
--- a/mailnews/base/search/resources/content/ABSearchDialog.js
+++ b/mailnews/base/search/resources/content/ABSearchDialog.js
@@ -93,16 +93,19 @@ function searchOnLoad()
.getService(Components.interfaces.nsIPrefService);
var prefBranch = prefService.getBranch(null).QueryInterface(Components.interfaces.nsIPrefBranch2);
gSearchPhoneticName =
prefBranch.getComplexValue("mail.addr_book.show_phonetic_fields",
Components.interfaces.nsIPrefLocalizedString).data;
if (window.arguments && window.arguments[0])
SelectDirectory(window.arguments[0].directory);
+ else
+ SelectDirectory(document.getElementById("abPopup-menupopup")
+ .firstChild.value);
// initialize globals, see abCommon.js, InitCommonJS()
abList = document.getElementById("abPopup");
onMore(null);
}
function searchOnUnload()
@@ -358,16 +361,8 @@ function UpdateCardView()
gComposeButton.removeAttribute("disabled");
if (numSelected == 1)
gPropertiesButton.removeAttribute("disabled");
else
gPropertiesButton.setAttribute("disabled","true");
}
-
-function onChooseDirectory(event)
-{
- var directoryURI = event.id;
- if (directoryURI) {
- SelectDirectory(directoryURI);
- }
-}
--- a/mailnews/base/search/resources/content/ABSearchDialog.xul
+++ b/mailnews/base/search/resources/content/ABSearchDialog.xul
@@ -84,31 +84,18 @@
</keyset>
<dummy class="usesMailWidgets"/>
<vbox id="searchTerms" flex="3" persist="height">
<vbox>
<hbox align="center">
<label value="&abSearchHeading.label;" accesskey="&abSearchHeading.accesskey;" control="abPopup"/>
- <menulist id="abPopup">
- <menupopup id="abPopup-menupopup" ref="moz-abdirectory://"
- datasources="rdf:addressdirectory"
- sortActive="true"
- sortDirection="ascending"
- sortResource="http://home.netscape.com/NC-rdf#DirTreeNameSort"
- oncommand="onChooseDirectory(event.target);">
- <template>
- <rule nc:IsMailList="false">
- <menuitem uri="..."
- label="rdf:http://home.netscape.com/NC-rdf#DirName"
- value="rdf:http://home.netscape.com/NC-rdf#DirUri"/>
- </rule>
- </template>
- </menupopup>
+ <menulist id="abPopup" oncommand="SelectDirectory(this.value);">
+ <menupopup id="abPopup-menupopup" class="addrbooksPopup"/>
</menulist>
<spacer flex="10"/>
<button id="search-button" oncommand="onSearchButton(event);" default="true"/>
</hbox>
<hbox align="center">
<spacer flex="1"/>
<button label="&resetButton.label;" oncommand="onAbSearchReset(event);" accesskey="&resetButton.accesskey;"/>
</hbox>
--- a/mailnews/base/search/src/SpamAssassin.sfd
+++ b/mailnews/base/search/src/SpamAssassin.sfd
@@ -1,14 +1,14 @@
-version="8"
+version="9"
logging="yes"
name="SpamAssassinYes"
enabled="yes"
-type="1"
+type="17"
action="JunkScore"
actionValue="100"
-condition="OR (\"X-Spam-Status\",begins with,Yes) OR (\"X-Spam-Flag\",begins with,YES) OR (subject,begins with,***SPAM***)"
+condition="OR (\"x-spam-status\",begins with,Yes) OR (\"x-spam-flag\",begins with,YES) OR (subject,begins with,***SPAM***)"
name="SpamAssassinNo"
enabled="yes"
-type="1"
+type="17"
action="JunkScore"
actionValue="0"
-condition="OR (\"X-Spam-Status\",begins with,No)"
+condition="OR (\"x-spam-status\",begins with,No)"
--- a/mailnews/jar.mn
+++ b/mailnews/jar.mn
@@ -33,16 +33,17 @@ messenger.jar:
content/messenger/addressbook/abCommon.js (addrbook/resources/content/abCommon.js)
content/messenger/addressbook/abDirTreeOverlay.xul (addrbook/resources/content/abDirTreeOverlay.xul)
content/messenger/addressbook/abEditCardDialog.xul (addrbook/resources/content/abEditCardDialog.xul)
content/messenger/addressbook/abNewCardDialog.xul (addrbook/resources/content/abNewCardDialog.xul)
content/messenger/addressbook/abResultsPaneOverlay.xul (addrbook/resources/content/abResultsPaneOverlay.xul)
content/messenger/addressbook/abResultsPane.js (addrbook/resources/content/abResultsPane.js)
content/messenger/addressbook/abSelectAddressesDialog.js (addrbook/resources/content/abSelectAddressesDialog.js)
content/messenger/addressbook/abSelectAddressesDialog.xul (addrbook/resources/content/abSelectAddressesDialog.xul)
+ content/messenger/addressbook/addrbookWidgets.xml (addrbook/resources/content/addrbookWidgets.xml)
content/messenger/addressbook/addressbook.js (addrbook/resources/content/addressbook.js)
content/messenger/addressbook/addressbook.xul (addrbook/resources/content/addressbook.xul)
content/messenger/addressbook/abDragDrop.js (addrbook/resources/content/abDragDrop.js)
content/messenger/addressbook/abMailListDialog.xul (addrbook/resources/content/abMailListDialog.xul)
content/messenger/addressbook/abMailListDialog.js (addrbook/resources/content/abMailListDialog.js)
content/messenger/addressbook/abListOverlay.xul (addrbook/resources/content/abListOverlay.xul)
content/messenger/addressbook/abEditListDialog.xul (addrbook/resources/content/abEditListDialog.xul)
content/messenger/addressbook/addressbook-panel.xul (addrbook/resources/content/addressbook-panel.xul)