1
/* ***** BEGIN LICENSE BLOCK *****
2
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
4
* The contents of this file are subject to the Mozilla Public
5
* License Version 1.1 (the "MPL"); you may not use this file
6
* except in compliance with the MPL. You may obtain a copy of
7
* the MPL at http://www.mozilla.org/MPL/
9
* Software distributed under the MPL is distributed on an "AS
10
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
11
* implied. See the MPL for the specific language governing
12
* rights and limitations under the MPL.
14
* The Original Code is Enigmail.
16
* The Initial Developer of the Original Code is Patrick Brunschwig.
17
* Portions created by Patrick Brunschwig <patrick@mozilla-enigmail.org> are
18
* Copyright (C) 2003 Patrick Brunschwig. All Rights Reserved.
22
* Alternatively, the contents of this file may be used under the terms of
23
* either the GNU General Public License Version 2 or later (the "GPL"), or
24
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
25
* in which case the provisions of the GPL or the LGPL are applicable instead
26
* of those above. If you wish to allow use of your version of this file only
27
* under the terms of either the GPL or the LGPL, and not to allow others to
28
* use your version of this file under the terms of the MPL, indicate your
29
* decision by deleting the provisions above and replace them with the notice
30
* and other provisions required by the GPL or the LGPL. If you do not delete
31
* the provisions above, a recipient may use your version of this file under
32
* the terms of any one of the MPL, the GPL or the LGPL.
33
* ***** END LICENSE BLOCK ***** */
35
// Uses: chrome://enigmail/content/enigmailCommon.js
37
// Initialize enigmailCommon
38
EnigInitCommon("enigmailRulesEditor");
43
var gSearchTimer = null;
44
var gSearchInput = null;
45
var gClearButton = null;
48
function enigmailDlgOnLoad() {
49
var enigmailSvc = GetEnigmailSvc();
53
var rulesListObj=new Object;
54
if (enigmailSvc.getRulesData(rulesListObj)) {
55
var treeChildren=document.getElementById("rulesTreeChildren");
56
var rulesList=rulesListObj.value;
57
if (rulesList.firstChild.nodeName=="parsererror") {
58
EnigAlert("Invalid enigmail.xml file:\n"+ rulesList.firstChild.textContent);
61
DEBUG_LOG("enigmailRulesEditor.js: dlgOnLoad: keys loaded\n");
63
var node=rulesList.firstChild.firstChild;
65
if (node.tagName=="pgpRule") {
68
email: node.getAttribute("email"),
69
keyId: node.getAttribute("keyId"),
70
sign: node.getAttribute("sign"),
71
encrypt: node.getAttribute("encrypt"),
72
pgpMime: node.getAttribute("pgpMime"),
75
if (node.getAttribute("negateRule")) {
76
userObj.negate=node.getAttribute("negateRule");
79
var treeItem=document.createElement("treeitem");
80
createRow(treeItem, userObj);
81
treeChildren.appendChild(treeItem);
85
node = node.nextSibling;
88
var rulesTree=document.getElementById("rulesTree");
89
gSearchInput = document.getElementById("filterEmail");
90
gClearButton = document.getElementById("clearButton");
94
function enigmailDlgOnAccept() {
95
DEBUG_LOG("enigmailRulesEditor.js: dlgOnAccept:\n");
96
var enigmailSvc = GetEnigmailSvc();
99
enigmailSvc.clearRules();
101
var node=getFirstNode();
103
enigmailSvc.addRule(true,
104
node.getAttribute("email"),
105
node.getAttribute("keyId"),
106
node.getAttribute("sign"),
107
node.getAttribute("encrypt"),
108
node.getAttribute("pgpMime"),
109
node.getAttribute("negateRule")
111
node = node.nextSibling;
113
enigmailSvc.saveRulesFile();
118
function createCol(value, label, treeItem, translate) {
119
var column=document.createElement("treecell");
120
column.setAttribute("id", value);
121
treeItem.setAttribute(value, label);
126
switch (Number(label)) {
128
label=EnigGetString("never");
131
label=EnigGetString("possible");
134
label=EnigGetString("always");
140
label=EnigGetString("nextRcpt");
144
if (Number(label) == 1) {
145
label=EnigGetString("negateRule");
151
column.setAttribute("label", label);
155
function createRow(treeItem, userObj) {
156
var negate=createCol("negateRule", userObj.negate, treeItem);
157
var email=createCol("email", userObj.email, treeItem);
158
var keyId=createCol("keyId", userObj.keyId, treeItem);
159
var sign=createCol("sign", userObj.sign, treeItem);
160
var encrypt=createCol("encrypt", userObj.encrypt, treeItem);
161
var pgpMime=createCol("pgpMime", userObj.pgpMime, treeItem);
162
var treeRow=document.createElement("treerow");
163
treeRow.appendChild(negate);
164
treeRow.appendChild(email);
165
treeRow.appendChild(keyId);
166
treeRow.appendChild(sign);
167
treeRow.appendChild(encrypt);
168
treeRow.appendChild(pgpMime);
169
treeRow.setAttribute("rowId", ++gNumRows);
171
if (treeItem.firstChild) {
172
treeItem.replaceChild(treeRow, treeItem.firstChild);
175
treeItem.appendChild(treeRow);
179
function getFirstNode() {
180
return document.getElementById("rulesTreeChildren").firstChild;
183
function getCurrentNode() {
184
var rulesTree=document.getElementById("rulesTree");
185
return rulesTree.contentView.getItemAtIndex(rulesTree.currentIndex)
189
function enigDoEdit() {
190
var node=getCurrentNode()
192
var inputObj = new Object;
193
var resultObj = new Object;
194
inputObj.command = "edit";
195
inputObj.options = "nosave";
196
inputObj.toAddress = node.getAttribute("email");
197
inputObj.keyId = node.getAttribute("keyId").split(/[ ,]+/);
198
inputObj.sign = Number(node.getAttribute("sign"));
199
inputObj.encrypt = Number(node.getAttribute("encrypt"));
200
inputObj.pgpmime = Number(node.getAttribute("pgpMime"));
201
inputObj.negate = Number(node.getAttribute("negateRule"));
203
window.openDialog("chrome://enigmail/content/enigmailSingleRcptSettings.xul","", "dialog,modal,centerscreen,resizable", inputObj, resultObj);
204
if (resultObj.cancelled==false) {
205
createRow(node, resultObj);
210
function enigDoAdd() {
211
var inputObj = new Object;
212
var resultObj = new Object;
213
inputObj.options = "nosave";
214
inputObj.toAddress = "{}";
215
inputObj.command = "add";
217
window.openDialog("chrome://enigmail/content/enigmailSingleRcptSettings.xul","", "dialog,modal,centerscreen,resizable", inputObj, resultObj);
218
if (resultObj.cancelled==false) {
219
var treeItem=document.createElement("treeitem");
220
createRow(treeItem, resultObj);
221
var treeChildren=document.getElementById("rulesTreeChildren");
222
if (treeChildren.firstChild) {
223
treeChildren.insertBefore(treeItem, treeChildren.firstChild);
226
treeChildren.appendChild(treeItem);
231
function enigDoDelete() {
232
var node=getCurrentNode();
234
if (EnigConfirm(EnigGetString("deleteRule"), EnigGetString("dlg.button.delete"))) {
235
var treeChildren=document.getElementById("rulesTreeChildren");
236
treeChildren.removeChild(node);
241
function enigDoMoveUp() {
242
var node=getCurrentNode();
244
var prev=node.previousSibling;
246
var rulesTree=document.getElementById("rulesTree");
247
var currentIndex = rulesTree.currentIndex;
248
var treeChildren=document.getElementById("rulesTreeChildren");
249
var newNode=node.cloneNode(true);
250
treeChildren.removeChild(node);
251
treeChildren.insertBefore(newNode, prev);
252
rulesTree.currentIndex = -1;
253
rulesTree.currentIndex = currentIndex - 1;
257
function enigDoMoveDown() {
258
var node=getCurrentNode();
260
var nextNode=node.nextSibling;
262
var rulesTree=document.getElementById("rulesTree");
263
var currentIndex = rulesTree.currentIndex;
264
var treeChildren=document.getElementById("rulesTreeChildren");
265
var newNode=nextNode.cloneNode(true);
266
treeChildren.removeChild(nextNode);
267
treeChildren.insertBefore(newNode, node);
268
rulesTree.currentIndex = currentIndex + 1;
272
function enigDoSearch() {
273
var searchTxt=document.getElementById("filterEmail").value;
274
if (!searchTxt) return;
275
searchTxt = searchTxt.toLowerCase();
276
var node=getFirstNode();
278
if (node.getAttribute("email").toLowerCase().indexOf(searchTxt) <0) {
284
node = node.nextSibling;
288
function enigDoResetFilter() {
289
document.getElementById("filterEmail").value="";
290
var node=getFirstNode();
293
node = node.nextSibling;
295
gClearButton.setAttribute("disabled", true);
298
function onEnterInSearchBar()
300
if (gSearchInput.value == "")
306
gClearButton.setAttribute("disabled", false);
313
function onSearchKeyPress(event)
316
if (event && event.keyCode == 13) {
317
event.stopPropagation(); // make sure the dialog is not closed...
323
function onSearchInput(returnKeyHit)
326
gSearchTimer.cancel();
330
// only select the text when the return key was hit
332
gSearchInput.select();
333
onEnterInSearchBar();
336
gSearchTimer = EnigmailCommon.setTimeout(onEnterInSearchBar, 800);
341
function disableQuickSearchClearButton()
344
gClearButton.setAttribute("disabled", true);