summaryrefslogtreecommitdiffstats
path: root/comm/mail/components/compose/content/dialogs/EdDictionary.js
blob: a79a01469c0382a61991d5b7612ed426206b374e (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/* import-globals-from ../editorUtilities.js */
/* import-globals-from EdDialogCommon.js */

var gSpellChecker;
var gWordToAdd;

function Startup() {
  if (!GetCurrentEditor()) {
    window.close();
    return;
  }
  // Get the SpellChecker shell
  if ("gSpellChecker" in window.opener && window.opener.gSpellChecker) {
    gSpellChecker = window.opener.gSpellChecker;
  }

  if (!gSpellChecker) {
    dump("SpellChecker not found!!!\n");
    window.close();
    return;
  }
  // The word to add word is passed as the 2nd extra parameter in window.openDialog()
  gWordToAdd = window.arguments[1];

  gDialog.WordInput = document.getElementById("WordInput");
  gDialog.DictionaryList = document.getElementById("DictionaryList");

  gDialog.WordInput.value = gWordToAdd;
  FillDictionaryList();

  // Select the supplied word if it is already in the list
  SelectWordToAddInList();
  SetTextboxFocus(gDialog.WordInput);
}

function ValidateWordToAdd() {
  gWordToAdd = TrimString(gDialog.WordInput.value);
  if (gWordToAdd.length > 0) {
    return true;
  }
  return false;
}

function SelectWordToAddInList() {
  for (var i = 0; i < gDialog.DictionaryList.getRowCount(); i++) {
    var wordInList = gDialog.DictionaryList.getItemAtIndex(i);
    if (wordInList && gWordToAdd == wordInList.label) {
      gDialog.DictionaryList.selectedIndex = i;
      break;
    }
  }
}

function AddWord() {
  if (ValidateWordToAdd()) {
    try {
      gSpellChecker.AddWordToDictionary(gWordToAdd);
    } catch (e) {
      dump(
        "Exception occurred in gSpellChecker.AddWordToDictionary\nWord to add probably already existed\n"
      );
    }

    // Rebuild the dialog list
    FillDictionaryList();

    SelectWordToAddInList();
    gDialog.WordInput.value = "";
  }
}

function RemoveWord() {
  var selIndex = gDialog.DictionaryList.selectedIndex;
  if (selIndex >= 0) {
    var word = gDialog.DictionaryList.selectedItem.label;

    // Remove word from list
    gDialog.DictionaryList.selectedItem.remove();

    // Remove from dictionary
    try {
      // Not working: BUG 43348
      gSpellChecker.RemoveWordFromDictionary(word);
    } catch (e) {
      dump("Failed to remove word from dictionary\n");
    }

    ResetSelectedItem(selIndex);
  }
}

function FillDictionaryList() {
  var selIndex = gDialog.DictionaryList.selectedIndex;

  // Clear the current contents of the list
  ClearListbox(gDialog.DictionaryList);

  // Get the list from the spell checker
  gSpellChecker.GetPersonalDictionary();

  var haveList = false;

  // Get words until an empty string is returned
  do {
    var word = gSpellChecker.GetPersonalDictionaryWord();
    if (word != "") {
      gDialog.DictionaryList.appendItem(word, "");
      haveList = true;
    }
  } while (word != "");

  // XXX: BUG 74467: If list is empty, it doesn't layout to full height correctly
  //     (ignores "rows" attribute) (bug is latered, so we are fixing here for now)
  if (!haveList) {
    gDialog.DictionaryList.appendItem("", "");
  }

  ResetSelectedItem(selIndex);
}

function ResetSelectedItem(index) {
  var lastIndex = gDialog.DictionaryList.getRowCount() - 1;
  if (index > lastIndex) {
    index = lastIndex;
  }

  // If we didn't have a selected item,
  //  set it to the first item
  if (index == -1 && lastIndex >= 0) {
    index = 0;
  }

  gDialog.DictionaryList.selectedIndex = index;
}