fix for 65761 - prefill filters using email address;r=ducarroz;sr=sspitzer

git-svn-id: svn://10.0.0.236/trunk@106099 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
varada%netscape.com
2001-10-24 00:00:32 +00:00
parent 7d0572e219
commit d06349b965
15 changed files with 194 additions and 36 deletions

View File

@@ -202,6 +202,7 @@ var DefaultController =
case "cmd_forwardInline":
case "cmd_forwardAttachment":
case "cmd_editAsNew":
case "cmd_canHaveFilter":
case "cmd_delete":
case "button_delete":
case "cmd_shiftDelete":
@@ -330,6 +331,10 @@ var DefaultController =
case "cmd_forwardInline":
case "cmd_forwardAttachment":
case "cmd_editAsNew":
case "cmd_canHaveFilter":
var loadedFolder = GetLoadedMsgFolder();
if (!(loadedFolder && loadedFolder.server.canHaveFilters) || !(IsMessageDisplayedInMessagePane()))
return false;
case "cmd_openMessage":
case "button_print":
case "cmd_print":
@@ -372,7 +377,7 @@ var DefaultController =
return(MailAreaHasFocus() && IsFolderSelected());
case "cmd_find":
case "cmd_findAgain":
return IsFindEnabled();
return IsMessageDisplayedInMessagePane();
break;
// these are enabled on when we are in threaded mode
case "cmd_selectThread":
@@ -478,6 +483,9 @@ var DefaultController =
case "cmd_editAsNew":
MsgEditMessageAsNew();
break;
case "cmd_canHaveFilter":
MsgCreateFilter();
break;
case "button_delete":
case "cmd_delete":
SetNextMessageAfterDelete();
@@ -867,7 +875,7 @@ function IsFolderSelected()
return false;
}
function IsFindEnabled()
function IsMessageDisplayedInMessagePane()
{
return (!IsThreadAndMessagePaneSplitterCollapsed() && (GetNumSelectedMessages() > 0));
}

View File

@@ -126,6 +126,10 @@ Rights Reserved.
<menuitem label="&CopyEmailAddress.label;"
accesskey="&CopyEmailAddress.accesskey;"
oncommand="CopyEmailAddress(document.popupNode)"/>
<menuitem label="&CreateFilter.label;"
accesskey="&CreateFilter.accesskey;"
oncommand="CreateFilter(document.popupNode)"
observes="cmd_canHaveFilter"/>
</popup>
<popup id="allHeadersPopup" onpopupshowing="return fillAllHeadersPopup(document.popupNode);" popupanchor="bottomleft">

View File

@@ -654,6 +654,24 @@ function MsgEditMessageAsNew()
ComposeMessage(msgComposeType.Template, msgComposeFormat.Default, loadedFolder, messageArray);
}
function MsgCreateFilter()
{
var emailAddressNode;
if (gCollapsedHeaderViewMode)
emailAddressNode = document.getElementById("collapsedfromValue");
else
emailAddressNode = document.getElementById("expandedfromValue");
if (emailAddressNode)
{
var emailAddress = emailAddressNode.getTextAttribute("emailAddress");
if (emailAddress){
top.MsgFilters(emailAddress);
}
}
}
function MsgHome(url)
{
window.open(url, "_blank", "chrome,dependent=yes,all");
@@ -926,26 +944,43 @@ function MsgSearchMessages()
"chrome,resizable,centerscreen,dialog=no", { folder: preselectedFolder });
}
function MsgFilters()
function MsgFilters(emailAddress)
{
var preselectedFolder = GetFirstSelectedMsgFolder();
var windowManagerInterface = GetWindowMediator();
var filterList = windowManagerInterface.getMostRecentWindow("mailnews:filterlist");
var args = { folder: preselectedFolder };
if (emailAddress)
args.prefillValue = emailAddress;
if (filterList)
{
var filterEditor = windowManagerInterface.getMostRecentWindow("mailnews:filtereditor");
var filterEditor = windowManagerInterface.getMostRecentWindow("mailnews:filtereditor");
// If the filtereditor is open, then we focus that because it is modal and
// thus blocking the filterlist from focusing.
if (filterEditor)
filterEditor.focus();
else
filterList.focus();
// If the filtereditor is open, then we focus that because it is modal and
// thus blocking the filterlist from focusing.
if (filterEditor)
{
if(emailAddress)
{
if(!gPromptService) {
gPromptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService();
gPromptService = gPromptService.QueryInterface(Components.interfaces.nsIPromptService);
}
gPromptService.alert(window,
gBrandBundle.getString("brandShortName"),
gMessengerBundle.getString('cannotHaveTwoFilterRulesText')
);
}
filterEditor.focus();
}
else
filterList.openPrefillOnExistingFilterList(emailAddress);
}
else
window.openDialog("chrome://messenger/content/FilterListDialog.xul", "",
"chrome,resizable,centerscreen,dialog=yes", { folder: preselectedFolder });
window.openDialog("chrome://messenger/content/FilterListDialog.xul", "",
"chrome,resizable,centerscreen,dialog=yes", args);
}
function MsgViewAllHeaders()

View File

@@ -188,7 +188,7 @@ Rights Reserved.
<command id="cmd_forwardInline" oncommand="goDoCommand('cmd_forwardInline')"/>
<command id="cmd_forwardAttachment" oncommand="goDoCommand('cmd_forwardAttachment')"/>
<command id="cmd_editAsNew" oncommand="goDoCommand('cmd_editAsNew')"/>
<command id="cmd_canHaveFilter" oncommand="goDoCommand('cmd_canHaveFilter')"/>
<command id="cmd_killThread" oncommand="goDoCommand('cmd_killThread')"/>
<command id="cmd_watchThread" oncommand="goDoCommand('cmd_watchThread')"/>
@@ -900,7 +900,7 @@ Rights Reserved.
<menuseparator/>
<menuitem label="&filtersCmd.label;"
accesskey="&filtersCmd.accesskey;"
oncommand="MsgFilters();"/>
oncommand="MsgFilters(null);"/>
<menuitem id="menu_properties" label="&folderPropsCmd.label;"
accesskey="&folderPropsCmd.accesskey;"
observes="cmd_properties"/>
@@ -1064,6 +1064,10 @@ Rights Reserved.
key="key_editAsNew"
observes="cmd_editAsNew"/>
<menuseparator/>
<menuitem id="createFilter" label="&createFilter.label;"
accesskey="&createFilter.accesskey;"
observes="cmd_canHaveFilter"/>
<menuseparator/>
<menu label="&moveMsgMenu.label;" accesskey="&moveMsgMenu.accesskey;" id="moveMenu" datasources="rdf:null"
sortResource="http://home.netscape.com/NC-rdf#FolderTreeName"
sortDirection="ascending">

View File

@@ -420,6 +420,7 @@ var MessageWindowController =
case "cmd_forwardInline":
case "cmd_forwardAttachment":
case "cmd_editAsNew":
case "cmd_canHaveFilter":
case "cmd_delete":
case "cmd_undo":
case "cmd_redo":
@@ -499,6 +500,11 @@ var MessageWindowController =
case "cmd_forwardInline":
case "cmd_forwardAttachment":
case "cmd_editAsNew":
case "cmd_canHaveFilter":
var loadedFolder = GetLoadedMsgFolder();
if (!(loadedFolder && loadedFolder.server.canHaveFilters))
return false;
case "button_delete":
case "cmd_shiftDelete":
case "cmd_print":
@@ -600,6 +606,9 @@ var MessageWindowController =
case "cmd_editAsNew":
MsgEditMessageAsNew();
break;
case "cmd_canHaveFilter":
MsgCreateFilter();
break;
case "cmd_delete":
MsgDeleteMessageFromMessageWindow(false, false);
break;

View File

@@ -106,6 +106,10 @@ Rights Reserved.
<menuitem label="&CopyEmailAddress.label;"
accesskey="&CopyEmailAddress.accesskey;"
oncommand="CopyEmailAddress(document.popupNode)"/>
<menuitem label="&CreateFilter.label;"
accesskey="&CreateFilter.accesskey;"
oncommand="CreateFilter(document.popupNode)"
observes="cmd_canHaveFilter"/>
</popup>
<popup id="allHeadersPopup" onpopupshowing="return fillAllHeadersPopup(document.popupNode);" popupanchor="bottomleft">

View File

@@ -130,6 +130,10 @@ Rights Reserved.
<menuitem label="&CopyEmailAddress.label;"
accesskey="&CopyEmailAddress.accesskey;"
oncommand="CopyEmailAddress(document.popupNode)"/>
<menuitem label="&CreateFilter.label;"
accesskey="&CreateFilter.accesskey;"
oncommand="CreateFilter(document.popupNode)"
observes="cmd_canHaveFilter"/>
</popup>
<popup id="allHeadersPopup" onpopupshowing="return fillAllHeadersPopup(document.popupNode);" popupanchor="bottomleft">

View File

@@ -236,7 +236,7 @@ function SearchMessages()
// Open filters window
function CreateMsgFilters()
{
window.parent.MsgFilters();
window.parent.MsgFilters(null);
}
// Open Subscribe dialog

View File

@@ -712,6 +712,20 @@ function CopyEmailAddress(emailAddressNode)
}
}
// CreateFilter opens the Message Filters and Filter Rules dialogs.
//The Filter Rules dialog has focus. The window is prefilled with filtername <email address>
//Sender condition is selected and the value is prefilled <email address>
function CreateFilter(emailAddressNode)
{
if (emailAddressNode)
{
var emailAddress = emailAddressNode.getAttribute("emailAddress");
if (emailAddress){
top.MsgFilters(emailAddress);
}
}
}
// createnewAttachmentInfo --> constructor method for creating new attachment object which goes into the
// data attachment array.
function createNewAttachmentInfo(contentType, url, displayName, uri, notDownloaded)

View File

@@ -341,6 +341,8 @@ Rights Reserved.
<!ENTITY editMsgAsNewCmd.label "Edit Message As New">
<!ENTITY editMsgAsNewCmd.accesskey "E">
<!ENTITY editMsgAsNewCmd.key "e">
<!ENTITY createFilter.label "Create Filter...">
<!ENTITY createFilter.accesskey "a">
<!ENTITY moveMsgMenu.label "Move Message">
<!ENTITY moveMsgMenu.accesskey "M">
<!ENTITY copyMessageLocation.label "Copy Message Location">
@@ -495,6 +497,10 @@ Rights Reserved.
<!ENTITY SendMailTo.accesskey "s">
<!ENTITY CopyEmailAddress.label "Copy Email Address">
<!ENTITY CopyEmailAddress.accesskey "C">
<!ENTITY CreateFilter.label "Create Filter...">
<!ENTITY CreateFilter.accesskey "F">
<!ENTITY BlockAddress.label "Block Address">
<!ENTITY BlockAddress.accesskey "A">
<!-- Print Engine -->
<!ENTITY printEngine.title "Printing...">

View File

@@ -174,6 +174,8 @@ nocachedbodytitle=<TITLE>Go Online to View This Message</TITLE>\n\
confirmUnsubscribeTitle=Confirm Unsubscribe
confirmUnsubscribeText=Are you sure you want to unsubscribe from %S?
cannotHaveTwoFilterRulesDialogs=Filter Rules Dialog
cannotHaveTwoFilterRulesText=The filter cannot be created because the Filter Rules dialog is already in use. Please close the dialog and try again.
# msgHdrViewOverlay.js
openLabel=Open

View File

@@ -39,7 +39,6 @@
// the actual filter that we're editing
var gFilter;
// cache the key elements we need
var gFilterList;
var gFilterNameElement;
@@ -49,10 +48,14 @@ var gActionValueDeck;
var gActionPriority;
var gActionLabel;
var gFilterBundle;
var gPreFillName;
var nsMsgSearchScope = Components.interfaces.nsMsgSearchScope;
var nsMsgFilterAction = Components.interfaces.nsMsgFilterAction;
/* the okCallback is used for sending a callback to the Filter Dialog to close incase the user cancels from pre-fill.*/
var okCallback=null;
var gFilterEditorMsgWindow=null;
function filterEditorOnLoad()
@@ -63,16 +66,45 @@ function filterEditorOnLoad()
gFilterBundle = document.getElementById("bundle_filter");
if ("arguments" in window && window.arguments[0]) {
var args = window.arguments[0];
if("okCallback" in args ) {
top.okCallback = window.arguments[0].okCallback;
}
if ("filter" in args) {
gFilter = window.arguments[0].filter;
// editing a filter
gFilter = window.arguments[0].filter;
initializeDialog(gFilter);
}
else {
gFilterList = args.filterList;
if (gFilterList)
setSearchScope(getScopeFromFilterList(gFilterList));
// if doing prefill filter create a new filter and populate it.
if ("filterName" in args) {
gPreFillName = args.filterName;
gFilter = gFilterList.createFilter(gPreFillName);
var term = gFilter.createTerm();
term.attrib = Components.interfaces.nsMsgSearchAttrib.Sender;
term.op = Components.interfaces.nsMsgSearchOp.Is;
var termValue = term.value;
termValue.attrib = term.attrib;
termValue.str = gPreFillName;
term.value = termValue;
gFilter.appendTerm(term);
gFilter.action = nsMsgFilterAction.MoveToFolder;
initializeDialog(gFilter);
} else {
gFilterList = args.filterList;
if (gFilterList)
setSearchScope(getScopeFromFilterList(gFilterList));
}
else{
// fake the first more button press
onMore(null);
}
}
}
if (!gFilter)
@@ -90,7 +122,7 @@ function filterEditorOnLoad()
gFilterNameElement.value = name;
}
gFilterNameElement.focus();
doSetOKCancel(onOk, null);
doSetOKCancel(onOk, onCancel);
moveToAlertPosition();
}
@@ -127,6 +159,13 @@ function onOk()
window.close();
}
function onCancel()
{
if (top.okCallback)
top.okCallback();
window.close();
}
function duplicateFilterNameExists(filterName)
{
var args = window.arguments[0];
@@ -261,7 +300,15 @@ function saveFilter() {
gFilter.enabled=true;
} else {
gFilter.filterName = gFilterNameElement.value;
isNewFilter = false;
//Prefilter is treated as a new filter.
if (gPreFillName) {
isNewFilter = true;
gFilter.enabled=true;
}
else {
isNewFilter = false;
}
}
gFilter.action = action;

View File

@@ -40,7 +40,8 @@ Contributor(s):
windowtype="mailnews:filtereditor"
width="510" height="360"
persist="width height screenX screenY"
onload="filterEditorOnLoad();">
onload="filterEditorOnLoad();"
onclose="onCancel();">
<dummy class="usesMailWidgets"/>
<stringbundleset id="stringbundleset">

View File

@@ -29,7 +29,7 @@ const nsMsgFilterMotion = Components.interfaces.nsMsgFilterMotion;
var gFilterBundle;
var gPromptService;
var gFilterListDialogAlreadyOpen = false;
function onLoad()
{
rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
@@ -44,7 +44,7 @@ function onLoad()
reorderUpButton = document.getElementById("reorderUpButton");
reorderDownButton = document.getElementById("reorderDownButton");
doSetOKCancel(onOk, null);
doSetOKCancel(onOk, onCancel);
updateButtons();
@@ -62,14 +62,30 @@ function onLoad()
}
moveToAlertPosition();
if (("arguments" in window) && window.arguments[0] && ("prefillValue" in window.arguments[0]))
onNewFilter(window.arguments[0].prefillValue);
}
function openPrefillOnExistingFilterList(emailAddress)
{
gFilterListDialogAlreadyOpen = true;
onNewFilter(emailAddress);
}
function onCancel()
{
if(gFilterListDialogAlreadyOpen)
gFilterListDialogAlreadyOpen = false;
else
window.close();
}
function onOk()
{
// make sure to save the filter to disk
var filterList = currentFilterList();
if (filterList) filterList.saveToDefaultFile();
window.close();
// make sure to save the filter to disk
var filterList = currentFilterList();
if (filterList) filterList.saveToDefaultFile();
window.close();
}
function onServerClick(event)
@@ -157,11 +173,15 @@ function onEditFilter() {
refreshFilterList();
}
function onNewFilter()
function onNewFilter(emailAddress)
{
var curFilterList = currentFilterList();
var args = {filterList: curFilterList};
var curFilterList = currentFilterList();
var args = {filterList: curFilterList};
if(emailAddress) {
args.okCallback = onCancel;
args.filterName = emailAddress;
}
window.openDialog("chrome://messenger/content/FilterEditor.xul", "FilterEditor", "chrome,modal,titlebar,resizable,centerscreen", args);
if ("refresh" in args && args.refresh)

View File

@@ -122,7 +122,7 @@ Contributor(s): H
</vbox>
<vbox>
<button id="newButton" label="&newButton.label;" oncommand="onNewFilter();"/>
<button id="newButton" label="&newButton.label;" oncommand="onNewFilter(null);"/>
<button id="editButton" label="&editButton.label;" oncommand="onEditFilter();"/>
<button id="deleteButton" label="&deleteButton.label;" oncommand="onDeleteFilter();"/>
<spacer flex="1"/>