add more/less lines and support adding new terms (doesn't QUITE work yet)

This commit is contained in:
alecf%netscape.com 2000-05-15 01:22:07 +00:00
Родитель 258558c1a2
Коммит 4435d11891
2 изменённых файлов: 76 добавлений и 44 удалений

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

@ -23,13 +23,16 @@
// the actual filter that we're editing // the actual filter that we're editing
var gFilter; var gFilter;
var gSearchScope;
// cache the key elements we need // cache the key elements we need
var gFilterNameElement; var gFilterNameElement;
var gActionElement; var gActionElement;
var gActionTargetElement; var gActionTargetElement;
// search stuff (move to overlay) // search stuff (move to overlay)
var gTotalSearchTerms=0;
var gSearchRowContainer; var gSearchRowContainer;
var gSearchTermContainer; var gSearchTermContainer;
@ -40,6 +43,7 @@ var nsIMsgSearchTerm = Components.interfaces.nsIMsgSearchTerm;
function filterEditorOnLoad() function filterEditorOnLoad()
{ {
initializeSearchWidgets();
if (window.arguments && window.arguments[0]) { if (window.arguments && window.arguments[0]) {
var args = window.arguments[0]; var args = window.arguments[0];
if (args.filter) { if (args.filter) {
@ -48,7 +52,7 @@ function filterEditorOnLoad()
initializeDialog(gFilter); initializeDialog(gFilter);
} else { } else {
if (args.filterList) if (args.filterList)
setScope(getScopeFromFilterList(args.filterList)); setSearchScope(getScopeFromFilterList(args.filterList));
} }
} }
@ -63,13 +67,18 @@ function onOk()
// move to overlay // move to overlay
// set scope on all visible searhattribute tags // set scope on all visible searhattribute tags
function setScope(scope) { function setSearchScope(scope) {
gSearchScope = scope;
var searchTermElements = gSearchTermContainer.childNodes; var searchTermElements = gSearchTermContainer.childNodes;
for (var i=0; i<searchTerms.length; i++) { if (!searchTermElements) return;
for (var i=0; i<searchTermElements.length; i++) {
searchTermElements[i].searchattribute.searchScope = scope; searchTermElements[i].searchattribute.searchScope = scope;
} }
} }
function booleanChanged(event) {
dump("Boolean is now " + event.target.data + "\n");
}
function getScopeFromFilterList(filterList) function getScopeFromFilterList(filterList)
{ {
@ -104,38 +113,28 @@ function initializeDialog(filter)
var scope = getScope(filter); var scope = getScope(filter);
setSearchScope(scope);
initializeSearchRows(scope, filter.searchTerms) initializeSearchRows(scope, filter.searchTerms)
} }
function initializeSearchWidgets() {
gSearchRowContainer = document.getElementById("searchTermList");
gSearchTermContainer = document.getElementById("searchterms");
}
// move to overlay // move to overlay
function initializeSearchRows(scope, searchTerms) function initializeSearchRows(scope, searchTerms)
{ {
gSearchRowContainer = document.getElementById("searchTermList"); initializeSearchWidgets();
gSearchTermContainer = document.getElementById("searchterms"); gTotalSearchTerms = searchTerms.Count();
var numTerms = searchTerms.Count(); for (var i=0; i<gTotalSearchTerms; i++) {
for (var i=0; i<numTerms; i++) { var searchTerm = searchTerms.QueryElementAt(i, nsIMsgSearchTerm);
createSearchRow(i); createSearchRow(i, scope, searchTerm);
// now that it's been added to the document, we can initialize it.
var searchTermElement = document.getElementById("searchTerm" + i);
if (searchTermElement) {
searchTermElement.searchScope = scope;
var searchTerm =
searchTerms.QueryElementAt(i, nsIMsgSearchTerm);
if (searchTerm) searchTermElement.searchTerm = searchTerm;
} }
else {
dump("Ack! Can't find searchTerm" + i + "!\n");
}
}
} }
// move to overlay // move to overlay
function createSearchRow(index) function createSearchRow(index, scope, searchTerm)
{ {
var searchAttr = document.createElement("searchattribute"); var searchAttr = document.createElement("searchattribute");
var searchOp = document.createElement("searchoperator"); var searchOp = document.createElement("searchoperator");
@ -158,17 +157,19 @@ function createSearchRow(index)
// should this be done with XBL or just straight JS? // should this be done with XBL or just straight JS?
// probably straight JS but I don't know how that's done. // probably straight JS but I don't know how that's done.
var searchTerm = document.createElement("searchterm"); var searchTermElement = document.createElement("searchterm");
searchTerm.id = "searchTerm" + index; searchTermElement.id = "searchTerm" + index;
gSearchTermContainer.appendChild(searchTerm); gSearchTermContainer.appendChild(searchTermElement);
searchTerm = document.getElementById(searchTerm.id); searchTermElement = document.getElementById(searchTermElement.id);
searchTerm.searchattribute = searchAttr; searchTermElement.searchattribute = searchAttr;
searchTerm.searchoperator = searchOp; searchTermElement.searchoperator = searchOp;
searchTerm.searchvalue = searchVal; searchTermElement.searchvalue = searchVal;
// and/or string handling:
// this is scary - basically we want to take every other // this is scary - basically we want to take every other
// treecell, which will be a text label, and set the searchTerm's // treecell, (note the i+=2) which will be a text label,
// and set the searchTermElement's
// booleanNodes to that // booleanNodes to that
var stringNodes = new Array; var stringNodes = new Array;
var treecells = searchrow.firstChild.childNodes; var treecells = searchrow.firstChild.childNodes;
@ -176,9 +177,14 @@ function createSearchRow(index)
for (var i=0; i<treecells.length; i+=2) { for (var i=0; i<treecells.length; i+=2) {
stringNodes[j++] = treecells[i]; stringNodes[j++] = treecells[i];
} }
searchTerm.booleanNodes = stringNodes; searchTermElement.booleanNodes = stringNodes;
gSearchRowContainer.appendChild(searchrow); gSearchRowContainer.appendChild(searchrow);
searchTermElement.searchScope = scope;
if (searchTerm)
searchTermElement.searchTerm = searchTerm;
} }
// creates a <treerow> using the array treeCellChildren as // creates a <treerow> using the array treeCellChildren as
@ -204,7 +210,11 @@ function constructRow(treeCellChildren)
function saveFilter() { function saveFilter() {
if (!gFilter) {
gFilter = gFilterList.createFilter(gFilterNameElement.value);
} else {
gFilter.filterName = gFilterNameElement.value; gFilter.filterName = gFilterNameElement.value;
}
var searchTermElements = var searchTermElements =
document.getElementById("searchterms").childNodes; document.getElementById("searchterms").childNodes;
@ -213,9 +223,20 @@ function saveFilter() {
for (var i = 0; i<searchTermElements.length; i++) { for (var i = 0; i<searchTermElements.length; i++) {
try { try {
dump("Saving search element " + i + "\n");
var searchTerm = searchTermElements[i].searchTerm;
if (searchTerm)
searchTermElements[i].save(); searchTermElements[i].save();
else {
// need to create a new searchTerm, and somehow save it to that
dump("Need to create searchterm " + i + "\n");
searchTerm = gFilter.createTerm();
searchTermElements[i].saveTo(searchTerm);
gFilter.AppendTerm(searchTerm);
}
} catch (ex) { } catch (ex) {
dump("**** error: " + ex + "\n");
dump("** Error: " + ex + "\n");
} }
} }
@ -228,3 +249,13 @@ function saveFilter() {
else if (action == nsMsgFilterAction.ChangePriority) else if (action == nsMsgFilterAction.ChangePriority)
gFilter.actionPriority = 0; // whatever, fix this gFilter.actionPriority = 0; // whatever, fix this
} }
function onMore(event)
{
createSearchRow(++gTotalSearchTerms, gSearchScope, null);
}
function onLess(event)
{
removeSearchRow(--gTotalSearchTerms);
}

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

@ -44,14 +44,12 @@ Rights Reserved.
<text value="&conditions.label;"/> <text value="&conditions.label;"/>
</title> </title>
<text value="&conditionDesc.label;"/> <text value="&conditionDesc.label;"/>
<radiogroup> <radiogroup oncommand="booleanChanged(event);">
<radio value="&matchAll.label;" checked="true"/> <radio data="true" value="&matchAll.label;"/>
<radio value="&matchAny.label;"/> <radio data="false" value="&matchAny.label;"/>
</radiogroup> </radiogroup>
<spring class="spacer"/> <spring class="spacer"/>
<box orient="horizontal">
</box>
<box style="min-height:200px"> <box style="min-height:200px">
<searchterms id="searchterms"/> <searchterms id="searchterms"/>
<tree class="inset" flex="1" id="searchTermTree"> <tree class="inset" flex="1" id="searchTermTree">
@ -95,7 +93,10 @@ Rights Reserved.
</tree> </tree>
</box> </box>
<text value="bottom"/> <box>
<button value="&more.label;" onclick="onMore(event);"/>
<button value="&less.label;" onclick="onLess(event);"/>
</box>
</titledbox> </titledbox>
<titledbox> <titledbox>
<title> <title>