summaryrefslogtreecommitdiffstats
path: root/comm/suite/mailnews/content/folderDisplay.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/suite/mailnews/content/folderDisplay.js')
-rw-r--r--comm/suite/mailnews/content/folderDisplay.js142
1 files changed, 142 insertions, 0 deletions
diff --git a/comm/suite/mailnews/content/folderDisplay.js b/comm/suite/mailnews/content/folderDisplay.js
new file mode 100644
index 0000000000..0318fb2e66
--- /dev/null
+++ b/comm/suite/mailnews/content/folderDisplay.js
@@ -0,0 +1,142 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* 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 gFolderDisplay =
+{
+ get selectedCount()
+ {
+ return gDBView ? gDBView.numSelected : 0;
+ },
+
+ get selectedMessage()
+ {
+ if (!this.selectedIndices.length)
+ return null;
+ return gDBView.hdrForFirstSelectedMessage;
+ },
+
+ get selectedMessageUri()
+ {
+ if (!this.selectedIndices.length)
+ return null;
+ return gDBView.URIForFirstSelectedMessage;
+ },
+
+ get selectedMessageIsFeed()
+ {
+ return FeedMessageHandler.isFeedMessage(this.selectedMessage);
+ },
+
+ get selectedMessageIsImap()
+ {
+ var message = this.selectedMessage;
+ return message && message.folder &&
+ (message.folder.flags & Ci.nsMsgFolderFlags.ImapBox) != 0;
+ },
+
+ get selectedMessageIsNews()
+ {
+ var message = this.selectedMessage;
+ return message && message.folder &&
+ (message.folder.flags & Ci.nsMsgFolderFlags.Newsgroup) != 0;
+ },
+
+ get selectedMessageIsExternal()
+ {
+ var message = this.selectedMessage;
+ return message && !message.folder;
+ },
+
+ get selectedIndices()
+ {
+ return gDBView ? gDBView.getIndicesForSelection() : [];
+ },
+
+ get selectedMessages()
+ {
+ return gDBView ? gDBView.getSelectedMsgHdrs() : [];
+ },
+
+ get selectedMessageUris()
+ {
+ if (!gDBView)
+ return null;
+ var messageArray = gDBView.getURIsForSelection();
+ return messageArray.length ? messageArray : null;
+ },
+
+ get canArchiveSelectedMessages()
+ {
+ if (!gDBView)
+ return false;
+ var selectedMessages = this.selectedMessages;
+ if (selectedMessages.length == 0)
+ return false;
+ return selectedMessages.every(function(aMsg) {
+ let identity = GetIdentityForHeader(aMsg);
+ return identity && identity.archiveEnabled;
+ });
+ },
+
+ get displayedFolder()
+ {
+ return gMsgFolderSelected;
+ },
+
+ /**
+ * Determine which pane currently has focus (one of the folder pane, thread
+ * pane, or message pane). When changing focus to the message pane, be sure
+ * to focus the appropriate content window in addition to the messagepanebox
+ * (doing both is required in order to blur the previously-focused chrome
+ * element).
+ *
+ * @return the focused pane
+ */
+ get focusedPane() {
+ let panes = ["threadTree", "folderTree", "messagepanebox"].map(id =>
+ document.getElementById(id));
+
+ let currentNode = top.document.activeElement;
+
+ while (currentNode) {
+ if (panes.includes(currentNode)) {
+ return currentNode;
+ }
+
+ currentNode = currentNode.parentNode;
+ }
+ return null;
+ },
+
+}
+
+var gMessageDisplay =
+{
+ get displayedMessage()
+ {
+ if (!gDBView)
+ return null;
+ var viewIndex = gDBView.currentlyDisplayedMessage;
+ return viewIndex == nsMsgViewIndex_None ? null :
+ gDBView.getMsgHdrAt(viewIndex);
+ },
+
+ get isDummy()
+ {
+ return gDBView && gDBView.keyForFirstSelectedMessage == nsMsgKey_None;
+ },
+
+ get visible()
+ {
+ return !GetMessagePane().collapsed;
+ },
+
+ set visible(aVisible)
+ {
+ return aVisible; // Fake setter for the time being.
+ }
+}
+
+gFolderDisplay.messageDisplay = gMessageDisplay;