зеркало из https://github.com/mozilla/gecko-dev.git
add more/less lines and support adding new terms (doesn't QUITE work yet)
This commit is contained in:
Родитель
258558c1a2
Коммит
4435d11891
|
@ -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>
|
||||||
|
|
Загрузка…
Ссылка в новой задаче