updated filter editor and list:

1) update buttons as appropriate (disabled/enabled)
2) actually pass the filter to the filter edit dialog
3) update the scope automatically based on the filter
4) on new filters, update the scope based on the filterList that's passed in
5) put searchattribute and searchoperators in the right place in the tree
This commit is contained in:
alecf%netscape.com 2000-05-01 08:55:48 +00:00
Родитель fe98e16945
Коммит 3ccc3f72c3
4 изменённых файлов: 130 добавлений и 49 удалений

Просмотреть файл

@ -21,15 +21,33 @@
* Alec Flett <alecf@netscape.com>
*/
var validityManager;
// the actual filter that we're editing
var gFilter;
var nsIMsgSearchValidityManager = Components.interfaces.nsIMsgSearchValidityManager;
function filterEditorOnLoad()
{
validityManager = Components.classes["mozilla.mail.search.validityManager.1"].getService(Components.interfaces.nsIMsgSearchValidityManager);
if (window.arguments && window.arguments[0]) {
var args = window.arguments[0];
if (args.filter) {
gFilter = window.arguments[0].filter;
dump("Filter editor loading with filter " + gFilter.filterName + "\n");
initializeDialog(gFilter);
} else {
if (args.filterList)
setScope(getScopeFromFilterList(args.filterList));
dump("New filter\n");
}
}
}
var searchAttr = document.getElementById("searchAttr");
searchAttr.scope = 0;
// set scope on all visible searhattribute tags
function setScope(scope) {
var searchAttributes = document.getElementsByTagName("searchattribute");
for (var i = 0; i<searchAttributes.length; i++) {
searchAttributes[i].searchScope = scope;
}
}
@ -38,11 +56,28 @@ function scopeChanged(event)
var menuitem = event.target;
var searchattr = document.getElementById("searchAttr");
dump("setting scope to " + menuitem.data + "\n");
try {
searchattr.scope = menuitem.data;
searchattr.searchScope = menuitem.data;
} catch (ex) {
}
// DumpDOM(searchattr.anonymousContent[0]);
}
function getScopeFromFilterList(filterList)
{
var type = filterList.folder.server.type;
if (type == "nntp") return nsIMsgSearchValidityManager.news;
return nsIMsgSearchValidityManager.onlineMail;
}
function getScope(filter) {
return getScopeFromFilterList(filter.filterList);
}
function initializeDialog(filter)
{
var filterName = document.getElementById("filterName");
filterName.value = filter.filterName;
setScope(getScope(filter));
}

Просмотреть файл

@ -33,24 +33,10 @@ Rights Reserved.
<script language="JavaScript" src="chrome://messenger/content/FilterEditor.js"/>
<script language="JavaScript" src="chrome://global/content/strres.js"/>
<script src="chrome://global/content/default/DumpDOM.js"/>
<box orient="horizontal" class="padded">
<text value="&filterName.label;"/>
<textfield flex="1"/>
</box>
<box>
<text value="(For debugging only) Scope:"/>
<menulist oncommand="scopeChanged(event);">
<menupopup>
<menuitem value="onlineMail" data="0"/>
<menuitem value="offlineMailFilter" data="1"/>
<menuitem value="offlineMail" data="2"/>
<menuitem value="localNews" data="3"/>
<menuitem value="news" data="4"/>
<menuitem value="newsEx" data="5"/>
</menupopup>
</menulist>
<textfield flex="1" id="filterName"/>
</box>
<titledbox orient="vertical">
<title>
@ -63,8 +49,9 @@ Rights Reserved.
</radiogroup>
<spring class="spacer"/>
<box>
<box orient="horizontal">
</box>
<box style="min-height:200px">
<tree class="inset" flex="1">
<treecol id="a" />
<treecol id="b"/>
@ -74,12 +61,14 @@ Rights Reserved.
<treeitem>
<treerow>
<treecell allowevents="true">
<searchattribute id="searchAttr" flex="1"/>
<searchattribute id="searchAttr" for="searchOp" flex="1"/>
</treecell>
<treecell allowevents="true">
<searchoperator id="searchOp" flex="1"/>
<searchoperator id="searchOp" for="searchValue" flex="1"/>
</treecell>
<treecell allowevents="true">
<textfield id="searchValue" flex="1"/>
</treecell>
<treecell value="text here"/>
</treerow>
</treeitem>
<treeitem>
@ -109,12 +98,6 @@ Rights Reserved.
<menuitem value="&watchThread.label;"/>
</menupopup>
</menulist>
<spring class="spacer"/>
<box orient="horizontal">
<!-- we can use fcc folder picker, because that follows the "can file into here" rules -->
<menu id="msgFccFolderPicker"/>
<spring flex="100%"/>
</box>
</titledbox>
<separator class="groove"/>
<box id="okCancelButtons"/>

Просмотреть файл

@ -18,9 +18,19 @@
* Rights Reserved.
*/
var rdf;
var editButton;
var deleteButton;
function onLoad()
{
dump("Loading..\n");
rdf = Components.classes["component://netscape/rdf/rdf-service"].getService(Components.interfaces.nsIRDFService);
editButton = document.getElementById("editButton");
deleteButton = document.getElementById("deleteButton");
updateButtons();
var firstitem;
var args = window.arguments;
@ -41,6 +51,7 @@ function onServerClick(event)
{
var item = event.target;
setServer(item.id);
updateButtons();
}
// roots the tree at the specified server
@ -62,18 +73,67 @@ function selectServer(uri)
setServer(uri);
}
function currentFilter()
{
var selection = document.getElementById("filterTree").selectedItems;
if (!selection || selection.length <=0)
return null;
var filter;
try {
var filterResource = rdf.GetResource(selection[0].id);
filter = filterResource.GetDelegate("filter",
Components.interfaces.nsIMsgFilter);
} catch (ex) {
dump(ex);
dump("no filter selected!\n");
}
return filter;
}
function currentFilterList()
{
var serverMenu = document.getElementById("serverMenu");
var serverUri = serverMenu.data;
var filterList = rdf.GetResource(serverUri).GetDelegate("filter", Components.interfaces.nsIMsgFilterList);
return filterList;
}
function onFilterSelect(event)
{
updateButtons();
}
function EditFilter() {
var tree = document.getElementById("filterTree");
var selectedFilter = tree.selectedItems[0];
var selectedFilter = currentFilter();
var args = {selectedFilter: selectedFilter};
var args = {filter: selectedFilter};
window.openDialog("chrome://messenger/content/FilterEditor.xul", "FilterEditor", "chrome,modal", args);
}
function NewFilter() {
// pass the URI too, so that we know what filter to put this before
window.openDialog("chrome://messenger/content/FilterEditor.xul", "FilterEditor", "chrome,modal");
function NewFilter()
{
var curFilterList = currentFilterList();
var args = {filterList: curFilterList };
window.openDialog("chrome://messenger/content/FilterEditor.xul", "FilterEditor", "chrome,modal", args);
}
function updateButtons()
{
var filter = currentFilter();
if (filter) {
editButton.removeAttribute("disabled");
deleteButton.removeAttribute("disabled");
} else {
editButton.setAttribute("disabled", "true");
deleteButton.setAttribute("disabled", "true");
}
}

Просмотреть файл

@ -31,6 +31,7 @@ Rights Reserved.
title="&window.title;">
<script language="JavaScript" src="chrome://messenger/content/FilterListDialog.js"/>
<!-- <script src="resource:/res/samples/DumpDOM.js"/> -->
<box orient="horizontal">
<text value="Filters for:"/>
@ -39,7 +40,7 @@ Rights Reserved.
rdf:containment="http://home.netscape.com/NC-rdf#child"
ref="msgaccounts:/">
<template>
<menuitem uri="..." value="rdf:http://home.netscape.com/NC-rdf#Name"/>
<menuitem uri="..." data="..." value="rdf:http://home.netscape.com/NC-rdf#Name"/>
</template>
</menupopup>
</menulist>
@ -47,8 +48,9 @@ Rights Reserved.
<box orient="horizontal" >
<box orient="vertical" style="width:100%;" >
<text value="&filterHeader.label;"/>
<box orient="horizontal">
<tree id="filterTree" class="inset" style="width: 35em"
<box orient="horizontal" style="min-height: 200px; min-width: 200px">
<tree id="filterTree" class="inset" flex="1"
onselect="onFilterSelect(event);"
rdf:datasources="rdf:msgaccountmanager rdf:msgfilters"
rdf:containment="http://home.netscape.com/NC-rdf#child">
<template>
@ -70,8 +72,8 @@ Rights Reserved.
<treehead>
<treerow>
<treecell persist="hidden width" value="&nameColumn.label;"/>
<treecell persist="hidden width" value="&activeColumn.label;"/>
<treecell persist="hidden width" class="treecell-header treecell-inset-header" value="&nameColumn.label;"/>
<treecell persist="hidden width" class="treecell-header treecell-inset-header" value="&activeColumn.label;"/>
</treerow>
</treehead>
</tree>
@ -88,15 +90,16 @@ Rights Reserved.
</box>
</box>
<box orient="vertical">
<button value="&newButton.label;" onclick="NewFilter();"/>
<button value="&editButton.label;" onclick="EditFilter();"/>
<button value="&deleteButton.label;" onclick="DeleteFilter();"/>
<button id="newButton" value="&newButton.label;" onclick="NewFilter();"/>
<button id="editButton" value="&editButton.label;" onclick="EditFilter();"/>
<button id="deleteButton" value="&deleteButton.label;" onclick="DeleteFilter();"/>
</box>
</box>
<box orient="horizontal">
<button value="&runFiltersNow.label;" width="0em"/>
<html style="font: bold">Do NOT file bugs against this dialog. It is not complete.</html>
</box>
<!-- <button onclick="DumpDOM(document.getElementById('filterTree'));" value="dump"/> -->
<separator class="groove"/>
<box id="okCancelButtons"/>