From 302bf1b523012e11b60425d6eee1221ebc2724eb Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Sun, 3 Nov 2019 00:17:46 -0400 Subject: Issue #1258 - Part 1: Import mailnews, ldap, and mork from comm-esr52.9.1 --- mailnews/compose/content/askSendFormat.js | 58 +++++++ mailnews/compose/content/askSendFormat.xul | 46 ++++++ .../compose/content/mailComposeEditorOverlay.xul | 157 +++++++++++++++++++ .../compose/content/menulistCompactBindings.xml | 22 +++ mailnews/compose/content/sendProgress.js | 171 +++++++++++++++++++++ mailnews/compose/content/sendProgress.xul | 50 ++++++ 6 files changed, 504 insertions(+) create mode 100644 mailnews/compose/content/askSendFormat.js create mode 100644 mailnews/compose/content/askSendFormat.xul create mode 100644 mailnews/compose/content/mailComposeEditorOverlay.xul create mode 100644 mailnews/compose/content/menulistCompactBindings.xml create mode 100644 mailnews/compose/content/sendProgress.js create mode 100644 mailnews/compose/content/sendProgress.xul (limited to 'mailnews/compose/content') diff --git a/mailnews/compose/content/askSendFormat.js b/mailnews/compose/content/askSendFormat.js new file mode 100644 index 000000000..17f4bafe4 --- /dev/null +++ b/mailnews/compose/content/askSendFormat.js @@ -0,0 +1,58 @@ +/* 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 gParam = null; + +/** + * This dialog should be opened with arguments like e.g. + * {action: nsIMsgCompSendFormat.AskUser, convertible: nsIMsgCompConvertible.Yes} + */ +function Startup() +{ + gParam = window.arguments[0]; + + const msgCompSendFormat = Components.interfaces.nsIMsgCompSendFormat; + const msgCompConvertible = Components.interfaces.nsIMsgCompConvertible; + + var bundle = document.getElementById("askSendFormatStringBundle"); + + // If the user hits the close box, we will abort. + gParam.abort = true; + + // Set the question label + var mailSendFormatExplanation = document.getElementById("mailSendFormatExplanation"); + var icon = document.getElementById("convertDefault"); + + switch (gParam.convertible) + { + case msgCompConvertible.Altering: + mailSendFormatExplanation.textContent = bundle.getString("convertibleAltering"); + icon.className = "question-icon"; + break; + case msgCompConvertible.No: + mailSendFormatExplanation.textContent = bundle.getString("convertibleNo"); + icon.className = "alert-icon"; + break; + default: // msgCompConvertible.Yes + mailSendFormatExplanation.textContent = bundle.getString("convertibleYes"); + // XXX change this to use class message-icon once bug 512173 is fixed + icon.className = "question-icon"; + break; + } + + // Set the default radio array value and recommendation. + var group = document.getElementById("mailDefaultHTMLAction"); + if (gParam.action != msgCompSendFormat.AskUser) + { + group.value = gParam.action; + group.selectedItem.label += " " + bundle.getString("recommended"); + } +} + +function Send() +{ + // gParam.action should be an integer for when it is returned to MsgComposeCommands.js + gParam.action = parseInt(document.getElementById("mailDefaultHTMLAction").value); + gParam.abort = false; +} diff --git a/mailnews/compose/content/askSendFormat.xul b/mailnews/compose/content/askSendFormat.xul new file mode 100644 index 000000000..751378bd8 --- /dev/null +++ b/mailnews/compose/content/askSendFormat.xul @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + diff --git a/mailnews/compose/content/menulistCompactBindings.xml b/mailnews/compose/content/menulistCompactBindings.xml new file mode 100644 index 000000000..5ca277347 --- /dev/null +++ b/mailnews/compose/content/menulistCompactBindings.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/mailnews/compose/content/sendProgress.js b/mailnews/compose/content/sendProgress.js new file mode 100644 index 000000000..8354cf953 --- /dev/null +++ b/mailnews/compose/content/sendProgress.js @@ -0,0 +1,171 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 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 nsIMsgCompDeliverMode = Components.interfaces.nsIMsgCompDeliverMode; + +// dialog is just an array we'll use to store various properties from the dialog document... +var dialog; + +// the msgProgress is a nsIMsgProgress object +var msgProgress = null; + +// random global variables... +var itsASaveOperation = false; +var gSendProgressStringBundle; + +// all progress notifications are done through the nsIWebProgressListener implementation... +var progressListener = { + onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) + { + if (aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_START) + { + // Put progress meter in undetermined mode. + dialog.progress.setAttribute("mode", "undetermined"); + } + + if (aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_STOP) + { + // we are done sending/saving the message... + // Indicate completion in status area. + var msg; + if (itsASaveOperation) + msg = gSendProgressStringBundle.getString("messageSaved"); + else + msg = gSendProgressStringBundle.getString("messageSent"); + dialog.status.setAttribute("value", msg); + + // Put progress meter at 100%. + dialog.progress.setAttribute("value", 100); + dialog.progress.setAttribute("mode", "normal"); + var percentMsg = gSendProgressStringBundle.getFormattedString("percentMsg", [100]); + dialog.progressText.setAttribute("value", percentMsg); + + window.close(); + } + }, + + onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress) + { + // Calculate percentage. + var percent; + if (aMaxTotalProgress > 0) + { + percent = Math.round(aCurTotalProgress / aMaxTotalProgress * 100); + if (percent > 100) + percent = 100; + + dialog.progress.removeAttribute("mode"); + + // Advance progress meter. + dialog.progress.setAttribute("value", percent); + + // Update percentage label on progress meter. + var percentMsg = gSendProgressStringBundle.getFormattedString("percentMsg", [percent]); + dialog.progressText.setAttribute("value", percentMsg); + } + else + { + // Progress meter should be barber-pole in this case. + dialog.progress.setAttribute("mode", "undetermined"); + // Update percentage label on progress meter. + dialog.progressText.setAttribute("value", ""); + } + }, + + onLocationChange: function(aWebProgress, aRequest, aLocation, aFlags) + { + // we can ignore this notification + }, + + onStatusChange: function(aWebProgress, aRequest, aStatus, aMessage) + { + if (aMessage != "") + dialog.status.setAttribute("value", aMessage); + }, + + onSecurityChange: function(aWebProgress, aRequest, state) + { + // we can ignore this notification + }, + + QueryInterface : function(iid) + { + if (iid.equals(Components.interfaces.nsIWebProgressListener) || + iid.equals(Components.interfaces.nsISupportsWeakReference) || + iid.equals(Components.interfaces.nsISupports)) + return this; + + throw Components.results.NS_NOINTERFACE; + } +}; + +function onLoad() +{ + // Set global variables. + let subject = ""; + gSendProgressStringBundle = document.getElementById("sendProgressStringBundle"); + + msgProgress = window.arguments[0]; + if (!msgProgress) + { + Components.utils.reportError("Invalid argument to sendProgress.xul."); + window.close(); + return; + } + + if (window.arguments[1]) + { + let progressParams = window.arguments[1].QueryInterface(Components.interfaces.nsIMsgComposeProgressParams); + if (progressParams) + { + itsASaveOperation = (progressParams.deliveryMode != nsIMsgCompDeliverMode.Now); + subject = progressParams.subject; + } + } + + if (subject) { + let title = itsASaveOperation ? "titleSaveMsgSubject" : "titleSendMsgSubject"; + document.title = gSendProgressStringBundle.getFormattedString(title, [subject]); + } else { + let title = itsASaveOperation ? "titleSaveMsg" : "titleSendMsg"; + document.title = gSendProgressStringBundle.getString(title); + } + + dialog = {}; + dialog.status = document.getElementById("dialog.status"); + dialog.progress = document.getElementById("dialog.progress"); + dialog.progressText = document.getElementById("dialog.progressText"); + + // set our web progress listener on the helper app launcher + msgProgress.registerListener(progressListener); +} + +function onUnload() +{ + if (msgProgress) + { + try + { + msgProgress.unregisterListener(progressListener); + msgProgress = null; + } catch (e) {} + } +} + +// If the user presses cancel, tell the app launcher and close the dialog... +function onCancel() +{ + // Cancel app launcher. + try + { + msgProgress.processCanceledByUser = true; + } catch (e) + { + return true; + } + + // don't Close up dialog by returning false, the backend will close the dialog when everything will be aborted. + return false; +} diff --git a/mailnews/compose/content/sendProgress.xul b/mailnews/compose/content/sendProgress.xul new file mode 100644 index 000000000..45508387f --- /dev/null +++ b/mailnews/compose/content/sendProgress.xul @@ -0,0 +1,50 @@ + + + + + + + + + + +