summaryrefslogtreecommitdiffstats
path: root/comm/mail/base/content/aboutDialog.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/base/content/aboutDialog.js')
-rw-r--r--comm/mail/base/content/aboutDialog.js155
1 files changed, 155 insertions, 0 deletions
diff --git a/comm/mail/base/content/aboutDialog.js b/comm/mail/base/content/aboutDialog.js
new file mode 100644
index 0000000000..74af77866f
--- /dev/null
+++ b/comm/mail/base/content/aboutDialog.js
@@ -0,0 +1,155 @@
+/* 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 aboutDialog-appUpdater.js */
+
+"use strict";
+
+var { AppConstants } = ChromeUtils.importESModule(
+ "resource://gre/modules/AppConstants.sys.mjs"
+);
+if (AppConstants.MOZ_UPDATER) {
+ Services.scriptloader.loadSubScript(
+ "chrome://messenger/content/aboutDialog-appUpdater.js",
+ this
+ );
+}
+
+window.addEventListener("DOMContentLoaded", onLoad);
+if (AppConstants.MOZ_UPDATER) {
+ // This method is in the aboutDialog-appUpdater.js file.
+ window.addEventListener("unload", onUnload);
+}
+
+function onLoad(event) {
+ if (event.target !== document) {
+ return;
+ }
+
+ let defaults = Services.prefs.getDefaultBranch(null);
+ let distroId = defaults.getCharPref("distribution.id", "");
+ if (distroId) {
+ let distroAbout = defaults.getStringPref("distribution.about", "");
+ // If there is about text, we always show it.
+ if (distroAbout) {
+ let distroField = document.getElementById("distribution");
+ distroField.innerText = distroAbout;
+ distroField.style.display = "block";
+ }
+ // If it's not a mozilla distribution, show the rest,
+ // unless about text exists, then we always show.
+ if (!distroId.startsWith("mozilla-") || distroAbout) {
+ let distroVersion = defaults.getCharPref("distribution.version", "");
+ if (distroVersion) {
+ distroId += " - " + distroVersion;
+ }
+
+ let distroIdField = document.getElementById("distributionId");
+ distroIdField.innerText = distroId;
+ distroIdField.style.display = "block";
+ }
+ }
+
+ // Include the build ID and display warning if this is an "a#" (nightly or aurora) build
+ let versionId = "aboutDialog-version";
+ let versionAttributes = {
+ version: AppConstants.MOZ_APP_VERSION_DISPLAY,
+ bits: Services.appinfo.is64Bit ? 64 : 32,
+ };
+
+ let version = Services.appinfo.version;
+ if (/a\d+$/.test(version)) {
+ versionId = "aboutDialog-version-nightly";
+ let buildID = Services.appinfo.appBuildID;
+ let year = buildID.slice(0, 4);
+ let month = buildID.slice(4, 6);
+ let day = buildID.slice(6, 8);
+ versionAttributes.isodate = `${year}-${month}-${day}`;
+
+ document.getElementById("experimental").hidden = false;
+ document.getElementById("communityDesc").hidden = true;
+ }
+
+ // Use Fluent arguments for append version and the architecture of the build
+ let versionField = document.getElementById("version");
+
+ document.l10n.setAttributes(versionField, versionId, versionAttributes);
+
+ if (!AppConstants.NIGHTLY_BUILD) {
+ // Show a release notes link if we have a URL.
+ let relNotesLink = document.getElementById("releasenotes");
+ let relNotesPrefType = Services.prefs.getPrefType("app.releaseNotesURL");
+ if (relNotesPrefType != Services.prefs.PREF_INVALID) {
+ let relNotesURL = Services.urlFormatter.formatURLPref(
+ "app.releaseNotesURL"
+ );
+ if (relNotesURL != "about:blank") {
+ relNotesLink.href = relNotesURL;
+ relNotesLink.hidden = false;
+ }
+ }
+ }
+
+ if (AppConstants.MOZ_UPDATER) {
+ gAppUpdater = new appUpdater({ buttonAutoFocus: true });
+
+ let channelLabel = document.getElementById("currentChannelText");
+ let channelAttrs = document.l10n.getAttributes(channelLabel);
+ let channel = UpdateUtils.UpdateChannel;
+ document.l10n.setAttributes(channelLabel, channelAttrs.id, { channel });
+ if (
+ /^release($|\-)/.test(channel) ||
+ Services.sysinfo.getProperty("isPackagedApp")
+ ) {
+ channelLabel.hidden = true;
+ }
+ }
+
+ // Open external links in browser
+ for (const link of document.getElementsByClassName("browser-link")) {
+ link.onclick = event => {
+ event.preventDefault();
+ openLink(event.target.href);
+ };
+ }
+ // Open internal (about:) links open in Thunderbird tab
+ for (const link of document.getElementsByClassName("tab-link")) {
+ link.onclick = event => {
+ event.preventDefault();
+ openAboutTab(event.target.href);
+ };
+ }
+}
+
+// This function is used to open about: tabs. The caller should ensure the url
+// is only an about: url.
+function openAboutTab(url) {
+ // Check existing windows
+ let mailWindow = Services.wm.getMostRecentWindow("mail:3pane");
+ if (mailWindow) {
+ mailWindow.focus();
+ mailWindow.document
+ .getElementById("tabmail")
+ .openTab("contentTab", { url });
+ return;
+ }
+
+ // No existing windows.
+ window.openDialog(
+ "chrome://messenger/content/messenger.xhtml",
+ "_blank",
+ "chrome,dialog=no,all",
+ null,
+ {
+ tabType: "contentTab",
+ tabParams: { url },
+ }
+ );
+}
+
+function openLink(url) {
+ Cc["@mozilla.org/uriloader/external-protocol-service;1"]
+ .getService(Ci.nsIExternalProtocolService)
+ .loadURI(Services.io.newURI(url));
+}