summaryrefslogtreecommitdiff
path: root/chrome/content/messengercompose.js
blob: 4b12f64c6866f25c74aded2f66a034effdf2518b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
var composeStateListener = {
  NotifyComposeBodyReady: function() {
  }
};

// From addressingWidgetOverlay.js; we use this to call the function to update
// the status of the encryption keys for the various "To" fields.  This is for
// the case where the user presses "Return" or "Tab" and Thunderbird inserts a
// new "To" row, and we then update the encryption key status for each row.
function awRecipientKeyPress(event, element)
{
  switch(event.keyCode) {
  case KeyEvent.DOM_VK_RETURN:
  case KeyEvent.DOM_VK_TAB:
    // if the user text contains a comma or a line return, ignore
    if (element.value.includes(','))
    {
      var addresses = element.value;
      element.value = ""; // clear out the current line so we don't try to autocomplete it..
      parseAndAddAddresses(addresses, awGetPopupElement(awGetRowByInputElement(element)).value);
    }
    else if (event.keyCode == KeyEvent.DOM_VK_TAB)
      awTabFromRecipient(element, event);

    // Bitmask: update the encryption status.
    checkToField.updateEncryptionStatus();
    break;
  }
}

var checkToField = {
  // It is possible to enter all "To" addresses in a single field but since we
  // are displaying the encryption key per field (per row), we need to split a
  // single field into multiple fields if it contains a "," and then check
  // the encryption status for each field.
  splitInput: function(event) {
    let id = event.target.id;
    id = id.slice(id.lastIndexOf('#')+1);

    let toFieldInput = document.getElementById("addressCol2#" + id);

    if (toFieldInput.value.includes(",")) {
      let addresses = toFieldInput.value;
      toFieldInput.value = "";
      parseAndAddAddresses(addresses, awGetPopupElement(awGetRowByInputElement(toFieldInput)).value);
      checkToField.updateEncryptionStatus();
    }
  },

  updateEncryptionStatus: function() {
    for (let i = 1; i <= awGetNumberOfRecipients(); i++) {
      // Get the "To" field which has the email address.
      let toField = document.getElementById("addressCol2#" + i);
      // gCurrentIdentity.email returns the current identity.
      let promise = bitmask.keys.exprt(gCurrentIdentity.email, toField.value);

      if (toField.value) {
        let image = document.createElement("image");
        toField.appendChild(image);

        promise.then(function(data) {
          toField.getElementsByTagName("image")[0].setAttribute("src",
            "chrome://bitmask/skin/lock.png");
        }).catch(function(error) {
          toField.getElementsByTagName("image")[0].setAttribute("src",
            "chrome://bitmask/skin/unlock.png");
        });
      }
      else {
        toField.getElementsByTagName("image")[0].setAttribute("src", "");
      }
    }
  }
};

window.addEventListener("compose-window-init", function(event) {
  gMsgCompose.RegisterStateListener(composeStateListener);
}, true);