diff options
Diffstat (limited to 'mailnews/base/content/msgAccountCentral.js')
-rw-r--r-- | mailnews/base/content/msgAccountCentral.js | 341 |
1 files changed, 341 insertions, 0 deletions
diff --git a/mailnews/base/content/msgAccountCentral.js b/mailnews/base/content/msgAccountCentral.js new file mode 100644 index 000000000..de5543dff --- /dev/null +++ b/mailnews/base/content/msgAccountCentral.js @@ -0,0 +1,341 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * 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/. */ + +Components.utils.import("resource://gre/modules/Services.jsm"); + +var selectedServer = null; + +function OnInit() +{ + // Set the header for the page. + // Title containts the brand name of the application and the account + // type (mail/news) and the name of the account + try { + let msgFolder = null; + let title; + + // Get the brand name + let brandName = document.getElementById("bundle_brand") + .getString("brandShortName"); + let messengerBundle = document.getElementById("bundle_messenger"); + + selectedServer = GetSelectedServer(); + if (selectedServer) { + // Get the account type + let serverType = selectedServer.type; + let acctType; + if (serverType == "nntp") + acctType = messengerBundle.getString("newsAcctType"); + else if (serverType == "rss") + acctType = messengerBundle.getString("feedsAcctType"); + else + acctType = messengerBundle.getString("mailAcctType"); + + // Get the account name + msgFolder = GetSelectedMsgFolder(); + ArrangeAccountCentralItems(selectedServer, msgFolder); + + let acctName = msgFolder.prettyName; + // Display and collapse items presented to the user based on account type + title = messengerBundle.getFormattedString("acctCentralTitleFormat", + [brandName, acctType, acctName]); + } else { + // If there is no selectedServer, we are in a brand new profile with + // no accounts - show the create account rows. + title = brandName; + SetItemDisplay("AccountsHeader", true); + SetItemDisplay("CreateAccount", true); + SetItemDisplay("CreateAccounts", true); + } + + // Set the title for the document + document.getElementById("AccountCentralTitle").setAttribute("value", title); + } + catch(ex) { + Components.utils.reportError("Error getting selected account: " + ex + "\n"); + } +} + +// Show items in the AccountCentral page depending on the capabilities +// of the given account +function ArrangeAccountCentralItems(server, msgFolder) +{ + let exceptions = []; + let protocolInfo = null; + try { + protocolInfo = server.protocolInfo; + } catch (e) { + exceptions.push(e); + } + + // Is this a RSS account? + let displayRssHeader = server && server.type == 'rss'; + + /***** Email header and items : Begin *****/ + + // Read Messages + let canGetMessages = false; + try { + canGetMessages = protocolInfo && protocolInfo.canGetMessages; + SetItemDisplay("ReadMessages", canGetMessages && !displayRssHeader); + } catch (e) { exceptions.push(e); } + + // Compose Messages link + let showComposeMsgLink = false; + try { + showComposeMsgLink = protocolInfo && protocolInfo.showComposeMsgLink; + SetItemDisplay("ComposeMessage", showComposeMsgLink); + } catch (e) { exceptions.push(e); } + + // Junk mail settings (false, until ready for prime time) + let canControlJunkEmail = false + try { + canControlJunkEmail = false && protocolInfo && + protocolInfo.canGetIncomingMessages && + protocolInfo.canGetMessages; + SetItemDisplay("JunkSettingsMail", canControlJunkEmail); + } catch (e) { exceptions.push(e); } + + // Display Email header, only if any of the items are displayed + let displayEmailHeader = !displayRssHeader && + (canGetMessages || showComposeMsgLink || + canControlJunkEmail); + SetItemDisplay("EmailHeader", displayEmailHeader); + + /***** Email header and items : End *****/ + + /***** News header and items : Begin *****/ + + // Subscribe to Newsgroups + let canSubscribe = false; + try { + canSubscribe = msgFolder && msgFolder.canSubscribe && + protocolInfo && !protocolInfo.canGetMessages; + SetItemDisplay("SubscribeNewsgroups", canSubscribe); + } catch (e) { exceptions.push(e); } + + // Junk news settings (false, until ready for prime time) + let canControlJunkNews = false; + try { + canControlJunkNews = false && protocolInfo && + protocolInfo.canGetIncomingMessages && + !protocolInfo.canGetMessages; + SetItemDisplay("JunkSettingsNews", canControlJunkNews); + } catch (e) { exceptions.push(e); } + + // Display News header, only if any of the items are displayed + let displayNewsHeader = canSubscribe || canControlJunkNews; + SetItemDisplay("NewsHeader", displayNewsHeader); + + /***** News header and items : End *****/ + + /***** RSS header and items : Begin *****/ + + // Display RSS header, only if this is RSS account + SetItemDisplay("rssHeader", displayRssHeader); + + // Subscribe to RSS Feeds + SetItemDisplay("SubscribeRSS", displayRssHeader); + + /***** RSS header and items : End *****/ + + // If either of above sections exists, show section separators + SetItemDisplay("MessagesSection", + displayNewsHeader || displayEmailHeader || displayRssHeader); + + /***** Accounts : Begin *****/ + + // Account Settings if a server is found + let canShowAccountSettings = server != null; + SetItemDisplay("AccountSettings", canShowAccountSettings); + + // Show New Mail Account Wizard if not prohibited by pref + let canShowCreateAccount = false; + try { + canShowCreateAccount = !Services.prefs + .prefIsLocked("mail.disable_new_account_addition"); + SetItemDisplay("CreateAccount", canShowCreateAccount); + SetItemDisplay("CreateAccounts", canShowCreateAccount); + } catch (e) { exceptions.push(e); } + + // Display Accounts header, only if any of the items are displayed + let displayAccountsHeader = canShowAccountSettings || canShowCreateAccount; + SetItemDisplay("AccountsHeader", canShowCreateAccount); + + /***** Accounts : End *****/ + + /***** Advanced Features header and items : Begin *****/ + + // Search Messages + let canSearchMessages = false; + try { + canSearchMessages = server && server.canSearchMessages; + SetItemDisplay("SearchMessages", canSearchMessages); + } catch (e) { exceptions.push(e); } + + // Create Filters + let canHaveFilters = false; + try { + canHaveFilters = server && server.canHaveFilters; + SetItemDisplay("CreateFilters", canHaveFilters); + } catch (e) { exceptions.push(e); } + + // Subscribe to IMAP Folders + let canSubscribeImapFolders = false; + try { + canSubscribeImapFolders = msgFolder && msgFolder.canSubscribe && + protocolInfo && protocolInfo.canGetMessages; + SetItemDisplay("SubscribeImapFolders", canSubscribeImapFolders); + } catch (e) { exceptions.push(e); } + + // Offline Settings + let supportsOffline = false; + try { + supportsOffline = server && server.offlineSupportLevel != 0; + SetItemDisplay("OfflineSettings", supportsOffline); + } catch (e) { exceptions.push(e); } + + // Display Adv Features header, only if any of the items are displayed + let displayAdvFeatures = canSearchMessages || canHaveFilters || + canSubscribeImapFolders|| supportsOffline; + SetItemDisplay("AdvancedFeaturesHeader", displayAdvFeatures); + + /***** Advanced Featuers header and items : End *****/ + + // If either of above features exist, show section separators + SetItemDisplay("AccountsSection", displayAdvFeatures); + + while (exceptions.length) { + Components.utils.reportError("Error in setting AccountCentral Items: " + + exceptions.pop() + "\n"); + } +} + +// Show the item if the item feature is supported +function SetItemDisplay(elemId, displayThisItem) +{ + if (displayThisItem) { + let elem = document.getElementById(elemId); + if (elem) + elem.setAttribute("collapsed", false); + + let elemSpacer = document.getElementById(elemId + ".spacer"); + if (elemSpacer) + elemSpacer.setAttribute("collapsed", false); + } +} + +// From the current folder tree, return the selected server or null +function GetSelectedServer() +{ + let currentFolder = GetSelectedMsgFolder(); + return currentFolder ? currentFolder.server : null; +} + +// From the current folder tree, return the selected folder, +// the root folder of default account or null +function GetSelectedMsgFolder() +{ + return window.parent.GetSelectedMsgFolders()[0] || + window.parent.GetDefaultAccountRootFolder(); +} + +/** + * Open Inbox for selected server. + * If needed, open the twisty and select Inbox. + */ +function ReadMessages() +{ + if (!selectedServer) + return; + try { + window.parent.OpenInboxForServer(selectedServer); + } + catch(ex) { + Components.utils + .reportError("Error opening Inbox for server: " + ex + "\n"); + } +} + +// Trigger composer for a new message +function ComposeAMessage(event) +{ + // Pass event to allow holding Shift key for toggling HTML vs. plaintext format + window.parent.MsgNewMessage(event); +} + +/** + * Open AccountManager to view settings for a given account + * @param selectPage the xul file name for the viewing page, + * null for the account main page, other pages are + * 'am-server.xul', 'am-copies.xul', 'am-offline.xul', + * 'am-addressing.xul', 'am-smtp.xul' + */ +function ViewSettings(selectPage) +{ + window.parent.MsgAccountManager(selectPage); +} + +// Open AccountWizard to create an account +function CreateNewAccount() +{ + window.parent.msgOpenAccountWizard(); +} + +function CreateNewAccountTB(type) +{ + if (type == "mail") { + if (Services.prefs.getBoolPref("mail.provider.enabled")) + NewMailAccountProvisioner(null); + else + AddMailAccount(); + return; + } + + if (type == "feeds") { + AddFeedAccount(); + return; + } + + window.parent.msgOpenAccountWizard( + function(state) { + let win = getMostRecentMailWindow(); + if (state && win && win.gFolderTreeView && this.gCurrentAccount) { + win.gFolderTreeView.selectFolder( + this.gCurrentAccount.incomingServer.rootMsgFolder); + } + }, + type); +} + +// Bring up search interface for selected account +function SearchMessages() +{ + window.parent.MsgSearchMessages(); +} + +// Open filters window +function CreateMsgFilters() +{ + window.parent.MsgFilters(null, null); +} + +// Open Subscribe dialog +function Subscribe() +{ + if (!selectedServer) + return; + if (selectedServer.type == 'rss') + window.parent.openSubscriptionsDialog(selectedServer.rootFolder); + else + window.parent.MsgSubscribe(); +} + +// Open junk mail settings dialog +function JunkSettings() +{ + // TODO: function does not exist yet, will throw an exception if exposed + window.parent.MsgJunkMail(); +} |