summaryrefslogtreecommitdiffstats
path: root/comm/mail/base/content/newTagDialog.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/base/content/newTagDialog.js')
-rw-r--r--comm/mail/base/content/newTagDialog.js108
1 files changed, 108 insertions, 0 deletions
diff --git a/comm/mail/base/content/newTagDialog.js b/comm/mail/base/content/newTagDialog.js
new file mode 100644
index 0000000000..01af8892cc
--- /dev/null
+++ b/comm/mail/base/content/newTagDialog.js
@@ -0,0 +1,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;
+}