blob: 01af8892cc2ecc67a6dddc93cffff87c9e659fa4 (
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
|
/* 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/. */
var { MailServices } = ChromeUtils.import(
"resource:///modules/MailServices.jsm"
);
var dialog;
/**
* Pass in keyToEdit as a window argument to turn this dialog into an edit
* tag dialog.
*/
function onLoad() {
let windowArgs = window.arguments[0];
dialog = {};
dialog.OKButton = document.querySelector("dialog").getButton("accept");
dialog.nameField = document.getElementById("name");
dialog.nameField.focus();
// call this when OK is pressed
dialog.okCallback = windowArgs.okCallback;
if (windowArgs.keyToEdit) {
initializeForEditing(windowArgs.keyToEdit);
document.addEventListener("dialogaccept", onOKEditTag);
} else {
document.addEventListener("dialogaccept", onOKNewTag);
}
doEnabling();
}
/**
* Turn the new tag dialog into an edit existing tag dialog
*/
function initializeForEditing(aTagKey) {
dialog.editTagKey = aTagKey;
// Change the title of the dialog
var messengerBundle = document.getElementById("bundle_messenger");
document.title = messengerBundle.getString("editTagTitle");
// extract the color and name for the current tag
document.getElementById("tagColorPicker").value =
MailServices.tags.getColorForKey(aTagKey);
dialog.nameField.value = MailServices.tags.getTagForKey(aTagKey);
}
/**
* on OK handler for editing a new tag.
*/
function onOKEditTag(event) {
// get the tag name of the current key we are editing
let existingTagName = MailServices.tags.getTagForKey(dialog.editTagKey);
// it's ok if the name didn't change
if (existingTagName != dialog.nameField.value) {
// don't let the user edit a tag to the name of another existing tag
if (MailServices.tags.getKeyForTag(dialog.nameField.value)) {
alertForExistingTag();
event.preventDefault();
return;
}
MailServices.tags.setTagForKey(dialog.editTagKey, dialog.nameField.value);
}
MailServices.tags.setColorForKey(
dialog.editTagKey,
document.getElementById("tagColorPicker").value
);
}
/**
* on OK handler for creating a new tag. Alerts the user if a tag with
* the name already exists.
*/
function onOKNewTag(event) {
var name = dialog.nameField.value;
if (MailServices.tags.getKeyForTag(name)) {
alertForExistingTag();
event.preventDefault();
return;
}
if (
!dialog.okCallback(name, document.getElementById("tagColorPicker").value)
) {
event.preventDefault();
}
}
/**
* Alerts the user that they are trying to create a tag with a name that
* already exists.
*/
function alertForExistingTag() {
var messengerBundle = document.getElementById("bundle_messenger");
var alertText = messengerBundle.getString("tagExists");
Services.prompt.alert(window, document.title, alertText);
}
function doEnabling() {
dialog.OKButton.disabled = !dialog.nameField.value;
}
|