in site/js/dev/ponymail_composer.js [95:282]
function compose(eid, lid, type) {
var email = null
// If a list ID is supplied, try to work out which list,
// and create a dummy email object, as we're not
// replying to an email here.
if (lid) {
if (lid == "xlist") {
if (xlist != null && xlist.length > 4) {
lid = xlist;
} else {
lid = null
}
}
if (lid != null) {
email = {
'message-id': "",
'list': xlist.replace("@", "."),
'subject': "",
'body': "",
'from': "",
'date': ""
}
composeType = "new"
}
}
else {
composeType = "reply"
email = saved_emails[eid]
}
// If we have a valid dummy email or are replying to an email, then...
if (email != null) {
var truncated = false
if (login.credentials) {
current_reply_eid = eid
// Turn list-id into an actual email address to send to
var listname = email['list'].replace(/[<>]/g, "").replace(/^([^.]+)\./, "$1@")
// Save some smtp headers for later
compose_headers = {
'eid': eid,
'in-reply-to': email['message-id'],
'references': email['message-id'] + " " + (email['references'] ? email['references'] : ""),
'to': listname
}
// find the composer pane and show it
var obj = document.getElementById('splash')
obj.style.display = "block"
// Set the right title of the pane
what = "Reply to email"
if (lid) {
what = "Start a new thread"
}
obj.innerHTML = "<p style='text-align: right;'><a href='javascript:void(0);' onclick='hideComposer(event)' style='color: #FFF;'>Hit escape to close this window or click here<big> ☒</big></a></p><h3>" + what + " on " + listname + ":</h3>"
// Append the previous email body, if such exists
var area = document.createElement('textarea')
area.style.width = "660px"
area.style.height = "400px";
area.setAttribute("id", "reply_body")
var eml = "\n\nOn " + email.date + ", " + email.from.replace(/</mg, "<") + " wrote: \n"
email.body = email.body.replace(/\r/mg, "")
eml += email.body.replace(/^([^\n]*)/mg, "> $1")
var eml_raw = "\n\nOn " + email.date + ", " + email.from + " wrote: \n"
eml_raw += email.body.replace(/^([^\n]*)/mg, "> $1")
var subject = "Re: " + email.subject.replace(/^Re:\s*/mg, "").replace(/</mg, "<")
// If it's a new email, scrap what we just did...gee, swell!
if (lid) {
eml = ""
eml_raw = ""
subject = ""
}
// Do we have alternate email addresses associated?
// If so, let the user pick which to send from
if (login.alternates && login.alternates.length !== undefined) {
var alts = {}
alts[login.credentials.email] = login.credentials.email
for (var i in login.alternates) {
alts[login.alternates[i]] = login.alternates[i]
}
obj.appendChild(generateFormDivs('alt', 'Send as:', 'select', alts, login.credentials.email))
obj.innerHTML += "<div> </div>"
}
// Set up a subject text field, populate it
obj.appendChild(document.createTextNode('Subject: '))
var txt = document.createElement('input')
txt.setAttribute("type", "text")
txt.setAttribute("style", "width: 500px;")
txt.setAttribute("value", subject)
txt.setAttribute("id", "reply_subject")
obj.appendChild(txt)
// Set email body in HTML
area.innerHTML = eml
obj.appendChild(area)
// Do we need to fetch cache here?
if (sessionStorageAvailable) {
if (composeType == "new" && window.sessionStorage.getItem("reply_subject_" + xlist)) {
area.innerHTML = window.sessionStorage.getItem("reply_body_" + xlist)
txt.value = window.sessionStorage.getItem("reply_subject_" + xlist)
} else if (composeType == "reply" && window.sessionStorage.getItem("reply_subject_eid_" + eid)) {
area.innerHTML = window.sessionStorage.getItem("reply_body_eid_" + eid)
txt.value = window.sessionStorage.getItem("reply_subject_eid_" + eid)
}
}
// submit button
var btn = document.createElement('input')
btn.setAttribute("type", "button")
btn.setAttribute("class", "btn btn-success")
btn.style.background = "#51A351 !important"
btn.setAttribute("value", lid ? "Send email" : "Send reply")
btn.setAttribute("onclick", "sendEmail(this.form)")
obj.appendChild(btn)
// reply-via-mua button
if (!lid) {
// construct long and winding mailto: link
// Make sure we don't go over 16k chars in the body,
// or we'll risk a namespace error in the link
var eml_raw_short = eml_raw
var N = 16000
if (eml_raw_short.length > N) {
truncated = true
eml_raw_short = eml_raw_short.substring(0, N) + "\n[message truncated...]"
}
var xlink = 'mailto:' + listname + "?subject=" + encodeURIComponent(subject) + "&In-Reply-To=" + encodeURIComponent(email['message-id']) + "&body=" + encodeURIComponent(eml_raw_short)
// Make a button object
var btn = document.createElement('input')
btn.setAttribute("type", "button")
btn.setAttribute("class", "btn btn-info")
btn.style.float = "right"
btn.style.background = "#51A351 !important"
btn.setAttribute("value", "reply via your own mail client")
btn.setAttribute("onclick", "location.href=\"" + xlink + "\";")
obj.appendChild(btn)
}
// Focus on body or subject, depending on what's going on
area.focus()
if (composeType == "new" && txt.value.length == 0) {
txt.focus()
}
// If not logged in, we don't show the UI, but we do show a "reply-via-MUA" button
} else {
// Same as above, construct mailto: link
var eml_raw = "\n\nOn " + email.date + ", " + email.from + " wrote: \n"
eml_raw += email.body.replace(/([^\r\n]*)/mg, "> $1")
// Same as before, we have to truncate very large emails
// or the URL to MUA won't work and throw a namespace error
var eml_raw_short = eml_raw
var N = 16000
if (eml_raw_short.length > N) {
truncated = true
eml_raw_short = eml_raw_short.substring(0, N) + "\n[message truncated...]"
}
var subject = "Re: " + email.subject.replace(/^Re:\s*/mg, "").replace(/</mg, "<")
var link = 'mailto:' + email.list.replace(/[<>]/g, "").replace(/([^.]+)\./, "$1@") + "?subject=" + encodeURIComponent(subject) + "&In-Reply-To=" + encodeURIComponent(email['message-id']) + "&body=" + encodeURIComponent(eml_raw_short)
// Get compose pane, show it
var obj = document.getElementById('splash')
obj.style.display = "block"
obj.innerHTML = "<p style='text-align: right;'><a href='javascript:void(0);' onclick='hideComposer(event)' style='color: #FFF;'>Hit escape to close this window or click here<big> ☒</big></a></p><h3>Reply to email:</h3>"
// "sorry, but..." text + mua link
obj.innerHTML += "<p>You need to be logged in to reply online.<br/>If you have a regular mail client, you can reply to this email by clicking below:<br/><h4><a style='color: #FFF;' class='btn btn-success' onclick='hideComposer(event);' href=\"" + link + "\">Reply via Mail Client</a></h4>"
}
// truncation warning for very long emails
if (composeType == 'reply' && truncated) {
obj.innerHTML += "<div><br/><i><b>Note: </b>In case of very long emails such as this, the body may be truncated if you choose to reply using your own mail client</i></div>"
}
} else {
alert("I don't know which list to send an email to, sorry :(")
}
}