~ubuntu-branches/ubuntu/quantal/enigmail/quantal-security

« back to all changes in this revision

Viewing changes to extensions/enigmail/ui/content/enigmailRulesEditor.js

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2013-09-13 16:02:15 UTC
  • mfrom: (0.12.16)
  • Revision ID: package-import@ubuntu.com-20130913160215-u3g8nmwa0pdwagwc
Tags: 2:1.5.2-0ubuntu0.12.10.1
* New upstream release v1.5.2 for Thunderbird 24

* Build enigmail using a stripped down Thunderbird 17 build system, as it's
  now quite difficult to build the way we were doing previously, with the
  latest Firefox build system
* Add debian/patches/no_libxpcom.patch - Don't link against libxpcom, as it
  doesn't exist anymore (but exists in the build system)
* Add debian/patches/use_sdk.patch - Use the SDK version of xpt.py and
  friends
* Drop debian/patches/ipc-pipe_rename.diff (not needed anymore)
* Drop debian/patches/makefile_depth.diff (not needed anymore)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* ***** BEGIN LICENSE BLOCK *****
2
 
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3
 
 *
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/
8
 
 *
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.
13
 
 *
14
 
 * The Original Code is Enigmail.
15
 
 *
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.
19
 
 *
20
 
 * Contributor(s):
21
 
 *
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 ***** */
34
 
 
35
 
// Uses: chrome://enigmail/content/enigmailCommon.js
36
 
 
37
 
// Initialize enigmailCommon
38
 
EnigInitCommon("enigmailRulesEditor");
39
 
 
40
 
const INPUT=0;
41
 
const RESULT=1;
42
 
 
43
 
var gSearchTimer = null;
44
 
var gSearchInput = null;
45
 
var gClearButton = null;
46
 
var gNumRows = null;
47
 
 
48
 
function enigmailDlgOnLoad() {
49
 
  var enigmailSvc = GetEnigmailSvc();
50
 
  if (!enigmailSvc)
51
 
    return;
52
 
 
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);
59
 
      return;
60
 
    }
61
 
    DEBUG_LOG("enigmailRulesEditor.js: dlgOnLoad: keys loaded\n");
62
 
    gNumRows=0;
63
 
    var node=rulesList.firstChild.firstChild;
64
 
    while (node) {
65
 
      if (node.tagName=="pgpRule") {
66
 
        //try {
67
 
          var userObj={
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"),
73
 
                negate: "0"
74
 
              };
75
 
          if (node.getAttribute("negateRule")) {
76
 
            userObj.negate=node.getAttribute("negateRule");
77
 
          }
78
 
 
79
 
          var treeItem=document.createElement("treeitem");
80
 
          createRow(treeItem, userObj);
81
 
          treeChildren.appendChild(treeItem);
82
 
        //}
83
 
        //catch (ex) {}
84
 
      }
85
 
      node = node.nextSibling;
86
 
    }
87
 
  }
88
 
  var rulesTree=document.getElementById("rulesTree");
89
 
  gSearchInput = document.getElementById("filterEmail");
90
 
  gClearButton = document.getElementById("clearButton");
91
 
 
92
 
}
93
 
 
94
 
function enigmailDlgOnAccept() {
95
 
  DEBUG_LOG("enigmailRulesEditor.js: dlgOnAccept:\n");
96
 
  var enigmailSvc = GetEnigmailSvc();
97
 
  if (!enigmailSvc)
98
 
    return false;
99
 
  enigmailSvc.clearRules();
100
 
 
101
 
  var node=getFirstNode();
102
 
  while(node) {
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")
110
 
                        );
111
 
    node = node.nextSibling;
112
 
  }
113
 
  enigmailSvc.saveRulesFile();
114
 
 
115
 
  return true;
116
 
}
117
 
 
118
 
function createCol(value, label, treeItem, translate) {
119
 
  var column=document.createElement("treecell");
120
 
  column.setAttribute("id", value);
121
 
  treeItem.setAttribute(value, label);
122
 
  switch (value) {
123
 
  case "sign":
124
 
  case "encrypt":
125
 
  case "pgpMime":
126
 
    switch (Number(label)) {
127
 
    case 0:
128
 
      label=EnigGetString("never");
129
 
      break;
130
 
    case 1:
131
 
      label=EnigGetString("possible");
132
 
      break;
133
 
    case 2:
134
 
      label=EnigGetString("always");
135
 
      break;
136
 
    }
137
 
    break;
138
 
  case "keyId":
139
 
    if (label==".") {
140
 
      label=EnigGetString("nextRcpt");
141
 
    }
142
 
    break;
143
 
  case "negateRule":
144
 
    if (Number(label) == 1) {
145
 
      label=EnigGetString("negateRule");
146
 
    }
147
 
    else {
148
 
      label = "";
149
 
    }
150
 
  }
151
 
  column.setAttribute("label", label);
152
 
  return column;
153
 
}
154
 
 
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);
170
 
 
171
 
  if (treeItem.firstChild) {
172
 
    treeItem.replaceChild(treeRow, treeItem.firstChild);
173
 
  }
174
 
  else {
175
 
    treeItem.appendChild(treeRow);
176
 
  }
177
 
}
178
 
 
179
 
function getFirstNode() {
180
 
  return document.getElementById("rulesTreeChildren").firstChild;
181
 
}
182
 
 
183
 
function getCurrentNode() {
184
 
  var rulesTree=document.getElementById("rulesTree");
185
 
  return rulesTree.contentView.getItemAtIndex(rulesTree.currentIndex)
186
 
}
187
 
 
188
 
 
189
 
function enigDoEdit() {
190
 
  var node=getCurrentNode()
191
 
  if (node) {
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"));
202
 
 
203
 
    window.openDialog("chrome://enigmail/content/enigmailSingleRcptSettings.xul","", "dialog,modal,centerscreen,resizable", inputObj, resultObj);
204
 
    if (resultObj.cancelled==false) {
205
 
      createRow(node, resultObj);
206
 
    }
207
 
  }
208
 
}
209
 
 
210
 
function enigDoAdd() {
211
 
  var inputObj  = new Object;
212
 
  var resultObj = new Object;
213
 
  inputObj.options = "nosave";
214
 
  inputObj.toAddress = "{}";
215
 
  inputObj.command = "add";
216
 
 
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);
224
 
    }
225
 
    else {
226
 
      treeChildren.appendChild(treeItem);
227
 
    }
228
 
  }
229
 
}
230
 
 
231
 
function enigDoDelete() {
232
 
  var node=getCurrentNode();
233
 
  if (node) {
234
 
    if (EnigConfirm(EnigGetString("deleteRule"), EnigGetString("dlg.button.delete"))) {
235
 
      var treeChildren=document.getElementById("rulesTreeChildren");
236
 
      treeChildren.removeChild(node);
237
 
    }
238
 
  }
239
 
}
240
 
 
241
 
function enigDoMoveUp() {
242
 
  var node=getCurrentNode();
243
 
  if (! node) return;
244
 
  var prev=node.previousSibling;
245
 
  if (prev) {
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;
254
 
  }
255
 
}
256
 
 
257
 
function enigDoMoveDown() {
258
 
  var node=getCurrentNode();
259
 
  if (! node) return;
260
 
  var nextNode=node.nextSibling;
261
 
  if (nextNode) {
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;
269
 
  }
270
 
}
271
 
 
272
 
function enigDoSearch() {
273
 
  var searchTxt=document.getElementById("filterEmail").value;
274
 
  if (!searchTxt) return;
275
 
  searchTxt = searchTxt.toLowerCase();
276
 
  var node=getFirstNode();
277
 
  while (node) {
278
 
    if (node.getAttribute("email").toLowerCase().indexOf(searchTxt) <0) {
279
 
      node.hidden=true;
280
 
    }
281
 
    else {
282
 
      node.hidden=false;
283
 
    }
284
 
    node = node.nextSibling;
285
 
  }
286
 
}
287
 
 
288
 
function enigDoResetFilter() {
289
 
  document.getElementById("filterEmail").value="";
290
 
  var node=getFirstNode();
291
 
  while (node) {
292
 
    node.hidden=false;
293
 
    node = node.nextSibling;
294
 
  }
295
 
  gClearButton.setAttribute("disabled", true);
296
 
}
297
 
 
298
 
function onEnterInSearchBar()
299
 
{
300
 
   if (gSearchInput.value == "")
301
 
   {
302
 
     enigDoResetFilter();
303
 
     return;
304
 
   }
305
 
 
306
 
   gClearButton.setAttribute("disabled", false);
307
 
 
308
 
   enigDoSearch();
309
 
}
310
 
 
311
 
 
312
 
 
313
 
function onSearchKeyPress(event)
314
 
{
315
 
  // 13 == return
316
 
  if (event && event.keyCode == 13) {
317
 
    event.stopPropagation(); // make sure the dialog is not closed...
318
 
    onSearchInput(true);
319
 
  }
320
 
}
321
 
 
322
 
 
323
 
function onSearchInput(returnKeyHit)
324
 
{
325
 
  if (gSearchTimer) {
326
 
    gSearchTimer.cancel();
327
 
    gSearchTimer = null;
328
 
  }
329
 
 
330
 
  // only select the text when the return key was hit
331
 
  if (returnKeyHit) {
332
 
    gSearchInput.select();
333
 
    onEnterInSearchBar();
334
 
  }
335
 
  else {
336
 
    gSearchTimer = EnigmailCommon.setTimeout(onEnterInSearchBar, 800);
337
 
  }
338
 
}
339
 
 
340
 
 
341
 
function disableQuickSearchClearButton()
342
 
{
343
 
 if (gClearButton)
344
 
   gClearButton.setAttribute("disabled", true);
345
 
}
346