~ubuntu-branches/ubuntu/oneiric/enigmail/oneiric-updates

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Alexander Sack
  • Date: 2010-04-10 01:42:24 UTC
  • Revision ID: james.westby@ubuntu.com-20100410014224-fbq9ui5x3b0h2t36
Tags: 2:1.0.1-0ubuntu1
* First releaase of enigmail 1.0.1 for tbird/icedove 3
  (LP: #527138)
* redo packaging from scratch 
  + add debian/make-orig target that uses xulrunner provided
    buildsystem + enigmail tarball to produce a proper orig.tar.gz
  + use debhelper 7 with mozilla-devscripts
  + use debian source format 3.0 (quilt)
  + patch enigmail to use frozen API only
    - add debian/patches/frozen_api.diff
  + patch build system to not link against -lxul - which isnt
    available for sdks produced by all-static apps like tbird
    - add debian/patches/build_system_dont_link_libxul.diff
  + add minimal build-depends to control

Show diffs side-by-side

added added

removed removed

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