summaryrefslogtreecommitdiffstats
path: root/mailnews/compose/content/mailComposeEditorOverlay.xul
diff options
context:
space:
mode:
Diffstat (limited to 'mailnews/compose/content/mailComposeEditorOverlay.xul')
-rw-r--r--mailnews/compose/content/mailComposeEditorOverlay.xul157
1 files changed, 157 insertions, 0 deletions
diff --git a/mailnews/compose/content/mailComposeEditorOverlay.xul b/mailnews/compose/content/mailComposeEditorOverlay.xul
new file mode 100644
index 000000000..4304935e1
--- /dev/null
+++ b/mailnews/compose/content/mailComposeEditorOverlay.xul
@@ -0,0 +1,157 @@
+<?xml version="1.0"?>
+<!-- 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/. -->
+
+<!DOCTYPE window SYSTEM "chrome://messenger/locale/messengercompose/mailComposeEditorOverlay.dtd" >
+
+<overlay id="mailComposeEditorOverlay"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <script type="application/javascript">
+ <![CDATA[
+ Components.utils.import("resource://gre/modules/Services.jsm");
+
+ var gMsgCompProcessLink = false;
+ var gMsgCompInputElement = null;
+ var gMsgCompPrevInputValue = null;
+ var gMsgCompPrevMozDoNotSendAttribute;
+ var gMsgCompAttachSourceElement = null;
+
+ function OnLoadOverlay()
+ {
+ gMsgCompAttachSourceElement = document.getElementById("AttachSourceToMail");
+ var editor = GetCurrentEditor();
+ if (gMsgCompAttachSourceElement && editor &&
+ (editor.flags & Components.interfaces.nsIPlaintextEditor.eEditorMailMask))
+ {
+ SetRelativeCheckbox = function() { SetAttachCheckbox();};
+ //initialize the AttachSourceToMail checkbox
+ gMsgCompAttachSourceElement.hidden = false;
+
+ switch (document.documentElement.id)
+ {
+ case "imageDlg":
+ gMsgCompInputElement = gDialog.srcInput;
+ gMsgCompProcessLink = false;
+ break;
+ case "linkDlg" :
+ gMsgCompInputElement = gDialog.hrefInput;
+ gMsgCompProcessLink = true;
+ break;
+ }
+ if (gMsgCompInputElement)
+ {
+ SetAttachCheckbox();
+ gMsgCompPrevMozDoNotSendAttribute = globalElement.getAttribute("moz-do-not-send")
+ }
+ }
+ }
+ addEventListener("load", OnLoadOverlay, false);
+
+ function OnAcceptOverlay()
+ {
+ // Auto-convert file URLs to data URLs. If we're in the link properties
+ // dialog convert only when requested - for the image dialog do it always.
+ if (/^file:/i.test(gMsgCompInputElement.value.trim()) &&
+ (gMsgCompAttachSourceElement.checked || !gMsgCompProcessLink)) {
+ var dataURI = GenerateDataURL(gMsgCompInputElement.value.trim());
+ gMsgCompInputElement.value = dataURI;
+ gMsgCompAttachSourceElement.checked = true;
+ }
+ DoAttachSourceCheckbox();
+ }
+ addEventListener("dialogaccept", OnAcceptOverlay, false);
+
+ function SetAttachCheckbox()
+ {
+ var resetCheckbox = false;
+ var mozDoNotSend = globalElement.getAttribute("moz-do-not-send");
+
+ //In case somebody played with the advanced property and changed the moz-do-not-send attribute
+ if (mozDoNotSend != gMsgCompPrevMozDoNotSendAttribute)
+ {
+ gMsgCompPrevMozDoNotSendAttribute = mozDoNotSend;
+ resetCheckbox = true;
+ }
+
+ // Has the URL changed
+ if (gMsgCompInputElement && gMsgCompInputElement.value != gMsgCompPrevInputValue)
+ {
+ gMsgCompPrevInputValue = gMsgCompInputElement.value;
+ resetCheckbox = true;
+ }
+
+ if (gMsgCompInputElement && resetCheckbox)
+ {
+ // Here is the rule about how to set the checkbox Attach Source To Message:
+ // If the attribute "moz-do-not-send" has not been set, we look at the scheme of the URL
+ // and at some preference to decide what is the best for the user.
+ // If it is set to "false", the checkbox is checked, otherwise unchecked.
+ var attach = false;
+ if (mozDoNotSend == null)
+ {
+ // We haven't yet set the "moz-do-not-send" attribute.
+ var inputValue = gMsgCompInputElement.value.trim();
+ if (/^(file|data):/i.test(inputValue)) {
+ // For files or data URLs, default to attach them.
+ attach = true;
+ } else if (!gMsgCompProcessLink && // Implies image dialogue.
+ /^https?:/i.test(inputValue)) {
+ // For images loaded via http(s) we default to the preference value.
+ attach = Services.prefs.getBoolPref("mail.compose.attach_http_images");
+ }
+ }
+ else
+ {
+ attach = (mozDoNotSend == "false");
+ }
+
+ gMsgCompAttachSourceElement.checked = attach;
+ }
+ }
+
+ function DoAttachSourceCheckbox()
+ {
+ gMsgCompPrevMozDoNotSendAttribute = (!gMsgCompAttachSourceElement.checked).toString();
+ globalElement.setAttribute("moz-do-not-send", gMsgCompPrevMozDoNotSendAttribute);
+ }
+
+ function GenerateDataURL(url) {
+ var file = Services.io.newURI(url, null, null)
+ .QueryInterface(Components.interfaces.nsIFileURL).file;
+ var contentType = Components.classes["@mozilla.org/mime;1"]
+ .getService(Components.interfaces.nsIMIMEService)
+ .getTypeFromFile(file);
+ var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"]
+ .createInstance(Components.interfaces.nsIFileInputStream);
+ inputStream.init(file, 0x01, 0o600, 0);
+ var stream = Components.classes["@mozilla.org/binaryinputstream;1"]
+ .createInstance(Components.interfaces.nsIBinaryInputStream);
+ stream.setInputStream(inputStream);
+ let data = "";
+ while (stream.available() > 0) {
+ data += stream.readBytes(stream.available());
+ }
+ let encoded = btoa(data);
+ stream.close();
+ return "data:" + contentType +
+ ";filename=" + encodeURIComponent(file.leafName) +
+ ";base64," + encoded;
+ }
+ ]]>
+ </script>
+
+ <hbox id="MakeRelativeHbox">
+ <checkbox id="AttachSourceToMail" hidden="true"
+ label="&attachImageSource.label;" accesskey="&attachImageSource.accesskey;"
+ insertafter="MakeRelativeCheckbox" oncommand="DoAttachSourceCheckbox()"/>
+ </hbox>
+
+ <groupbox id="LinkURLBox">
+ <checkbox id="AttachSourceToMail" hidden="true"
+ label="&attachLinkSource.label;" accesskey="&attachLinkSource.accesskey;"
+ insertafter="LinkLocationBox" oncommand="DoAttachSourceCheckbox()"/>
+ </groupbox>
+
+</overlay>