2
* The contents of this file are subject to the Mozilla Public
3
* License Version 1.1 (the "MPL"); you may not use this file
4
* except in compliance with the MPL. You may obtain a copy of
5
* the MPL at http://www.mozilla.org/MPL/
7
* Software distributed under the MPL is distributed on an "AS
8
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
9
* implied. See the MPL for the specific language governing
10
* rights and limitations under the MPL.
12
* The Original Code is Enigmail.
14
* The Initial Developer of this code is Patrick Brunschwig.
15
* Portions created by Patrick Brunschwig <patrick.brunschwig@gmx.net>
16
* are Copyright (C) 2004 Patrick Brunschwig.
17
* All Rights Reserved.
21
* Alternatively, the contents of this file may be used under the
22
* terms of the GNU General Public License (the "GPL") or the GNU
23
* Lesser General Public License (the "LGPL"), in which case
24
* the provisions of the GPL or the LGPL are applicable instead of
25
* those above. If you wish to allow use of your version of this
26
* file only under the terms of the GPL or the LGPL and not to allow
27
* others to use your version of this file under the MPL, indicate
28
* your decision by deleting the provisions above and replace them
29
* with the notice and other provisions required by the GPL or the
31
* If you do not delete the provisions above, a recipient
32
* may use your version of this file under either the MPL, the
36
// Uses: chrome://enigmail/content/enigmailCommon.js
38
// Initialize enigmailCommon
39
EnigInitCommon("enigmailRulesEditor");
44
var gSearchTimer = null;
45
var gSearchInput = null;
46
var gClearButton = null;
49
function enigmailDlgOnLoad() {
50
var enigmailSvc = GetEnigmailSvc();
54
var rulesListObj=new Object;
55
if (enigmailSvc.getRulesData(rulesListObj)) {
56
var treeChildren=document.getElementById("rulesTreeChildren");
57
var rulesList=rulesListObj.value;
58
if (rulesList.firstChild.nodeName=="parsererror") {
59
EnigAlert("Invalid enigmail.xml file:\n"+ rulesList.firstChild.textContent);
62
DEBUG_LOG("enigmailRulesEditor.js: dlgOnLoad: keys loaded\n");
64
var node=rulesList.firstChild.firstChild;
66
if (node.tagName=="pgpRule") {
69
email: node.getAttribute("email"),
70
keyId: node.getAttribute("keyId"),
71
sign: node.getAttribute("sign"),
72
encrypt: node.getAttribute("encrypt"),
73
pgpMime: node.getAttribute("pgpMime"),
76
if (node.getAttribute("negateRule")) {
77
userObj.negate=node.getAttribute("negateRule");
80
var treeItem=document.createElement("treeitem");
81
createRow(treeItem, userObj);
82
treeChildren.appendChild(treeItem);
86
node = node.nextSibling;
89
var rulesTree=document.getElementById("rulesTree");
90
gSearchInput = document.getElementById("filterEmail");
91
gClearButton = document.getElementById("clearButton");
95
function enigmailDlgOnAccept() {
96
DEBUG_LOG("enigmailRulesEditor.js: dlgOnAccept:\n");
97
var enigmailSvc = GetEnigmailSvc();
100
enigmailSvc.clearRules();
102
var node=getFirstNode();
104
enigmailSvc.addRule(true,
105
node.getAttribute("email"),
106
node.getAttribute("keyId"),
107
node.getAttribute("sign"),
108
node.getAttribute("encrypt"),
109
node.getAttribute("pgpMime"),
110
node.getAttribute("negateRule")
112
node = node.nextSibling;
114
enigmailSvc.saveRulesFile();
119
function createCol(value, label, treeItem, translate) {
120
var column=document.createElement("treecell");
121
column.setAttribute("id", value);
122
treeItem.setAttribute(value, label);
127
switch (Number(label)) {
129
label=EnigGetString("never");
132
label=EnigGetString("possible");
135
label=EnigGetString("always");
141
label=EnigGetString("nextRcpt");
145
if (Number(label) == 1) {
146
label=EnigGetString("negateRule");
152
column.setAttribute("label", label);
156
function createRow(treeItem, userObj) {
157
var negate=createCol("negateRule", userObj.negate, treeItem);
158
var email=createCol("email", userObj.email, treeItem);
159
var keyId=createCol("keyId", userObj.keyId, treeItem);
160
var sign=createCol("sign", userObj.sign, treeItem);
161
var encrypt=createCol("encrypt", userObj.encrypt, treeItem);
162
var pgpMime=createCol("pgpMime", userObj.pgpMime, treeItem);
163
var treeRow=document.createElement("treerow");
164
treeRow.appendChild(negate);
165
treeRow.appendChild(email);
166
treeRow.appendChild(keyId);
167
treeRow.appendChild(sign);
168
treeRow.appendChild(encrypt);
169
treeRow.appendChild(pgpMime);
170
treeRow.setAttribute("rowId", ++gNumRows);
172
if (treeItem.firstChild) {
173
treeItem.replaceChild(treeRow, treeItem.firstChild);
176
treeItem.appendChild(treeRow);
180
function getFirstNode() {
181
return document.getElementById("rulesTreeChildren").firstChild;
184
function getCurrentNode() {
185
var rulesTree=document.getElementById("rulesTree");
186
return rulesTree.contentView.getItemAtIndex(rulesTree.currentIndex)
190
function enigDoEdit() {
191
var node=getCurrentNode()
193
var inputObj = new Object;
194
var resultObj = new Object;
195
inputObj.command = "edit";
196
inputObj.options = "nosave";
197
inputObj.toAddress = node.getAttribute("email");
198
inputObj.keyId = node.getAttribute("keyId").split(/[ ,]+/);
199
inputObj.sign = Number(node.getAttribute("sign"));
200
inputObj.encrypt = Number(node.getAttribute("encrypt"));
201
inputObj.pgpmime = Number(node.getAttribute("pgpMime"));
202
inputObj.negate = Number(node.getAttribute("negateRule"));
204
window.openDialog("chrome://enigmail/content/enigmailSingleRcptSettings.xul","", "dialog,modal,centerscreen,resizable", inputObj, resultObj);
205
if (resultObj.cancelled==false) {
206
createRow(node, resultObj);
211
function enigDoAdd() {
212
var inputObj = new Object;
213
var resultObj = new Object;
214
inputObj.options = "nosave";
215
inputObj.toAddress = "{}";
216
inputObj.command = "add";
218
window.openDialog("chrome://enigmail/content/enigmailSingleRcptSettings.xul","", "dialog,modal,centerscreen,resizable", inputObj, resultObj);
219
if (resultObj.cancelled==false) {
220
var treeItem=document.createElement("treeitem");
221
createRow(treeItem, resultObj);
222
var treeChildren=document.getElementById("rulesTreeChildren");
223
if (treeChildren.firstChild) {
224
treeChildren.insertBefore(treeItem, treeChildren.firstChild);
227
treeChildren.appendChild(treeItem);
232
function enigDoDelete() {
233
var node=getCurrentNode();
235
if (EnigConfirm(EnigGetString("deleteRule"), EnigGetString("dlg.button.delete"))) {
236
var treeChildren=document.getElementById("rulesTreeChildren");
237
treeChildren.removeChild(node);
242
function enigDoMoveUp() {
243
var node=getCurrentNode();
245
var prev=node.previousSibling;
247
var rulesTree=document.getElementById("rulesTree");
248
var currentIndex = rulesTree.currentIndex;
249
var treeChildren=document.getElementById("rulesTreeChildren");
250
var newNode=node.cloneNode(true);
251
treeChildren.removeChild(node);
252
treeChildren.insertBefore(newNode, prev);
253
rulesTree.currentIndex = -1;
254
rulesTree.currentIndex = currentIndex - 1;
258
function enigDoMoveDown() {
259
var node=getCurrentNode();
261
var nextNode=node.nextSibling;
263
var rulesTree=document.getElementById("rulesTree");
264
var currentIndex = rulesTree.currentIndex;
265
var treeChildren=document.getElementById("rulesTreeChildren");
266
var newNode=nextNode.cloneNode(true);
267
treeChildren.removeChild(nextNode);
268
treeChildren.insertBefore(newNode, node);
269
rulesTree.currentIndex = currentIndex + 1;
273
function enigDoSearch() {
274
var searchTxt=document.getElementById("filterEmail").value;
275
if (!searchTxt) return;
276
searchTxt = searchTxt.toLowerCase();
277
var node=getFirstNode();
279
if (node.getAttribute("email").toLowerCase().indexOf(searchTxt) <0) {
285
node = node.nextSibling;
289
function enigDoResetFilter() {
290
document.getElementById("filterEmail").value="";
291
var node=getFirstNode();
294
node = node.nextSibling;
296
gClearButton.setAttribute("disabled", true);
299
function onEnterInSearchBar()
301
if (gSearchInput.value == "")
307
gClearButton.setAttribute("disabled", false);
314
function onSearchKeyPress(event)
317
if (event && event.keyCode == 13) {
318
event.stopPropagation(); // make sure the dialog is not closed...
324
function onSearchInput(returnKeyHit)
327
clearTimeout(gSearchTimer);
331
// only select the text when the return key was hit
333
gSearchInput.select();
334
onEnterInSearchBar();
337
gSearchTimer = setTimeout("onEnterInSearchBar();", 800);
342
function disableQuickSearchClearButton()
345
gClearButton.setAttribute("disabled", true);