in webui/js/ponymail.js [3910:4037]
async function render_email_chatty(state, json) {
let div = state.div;
div.parentNode.style.border = 'none';
// Author
let when = new Date(json.epoch * 1000.0);
let ldate = when.toISOString();
try {
ldate = "%s %s".format(when.toLocaleDateString(undefined, PONYMAIL_DATE_FORMAT), when.toLocaleTimeString(undefined, PONYMAIL_TIME_FORMAT));
} catch (e) {
}
let author_field = new HTML('div', {
class: 'chatty_author'
});
let gravatar = new HTML('img', {
class: "chatty_gravatar",
src: GRAVATAR_URL.format(json.gravatar)
});
let author_name = json.from.replace(/\s*<.+>/, "").replace(/"/g, '');
let author_email = json.from.match(/\s*<(.+@.+)>\s*/);
if (author_name.length == 0) author_name = author_email ? author_email[1] : "(No author?)";
let author_nametag = new HTML('div', {
class: 'chatty_author_name'
}, [
new HTML('b', {}, author_name),
" - %s".format(ldate)
]);
author_field.inject([gravatar, author_nametag]);
div.inject(author_field);
let chatty_body = fixup_quotes(json.body);
if (json.mid == G_current_open_email) {
let header = new HTML('h4', {
class: 'chatty_title_inline'
}, json.subject);
chatty_body.unshift(header);
}
let text = new HTML('pre', {
class: 'chatty_body'
}, chatty_body);
div.inject(text);
// Private text?
if (json.private === true) {
text.style.backgroundImage = "url(images/private.png)";
}
// Attachments?
if (json.attachments && json.attachments.length > 0) {
let attach_field = new HTML('div', {
class: 'email_kv'
});
let attach_key = new HTML('div', {
class: 'email_key'
}, "Attachment(s):");
let alinks = [];
for (let attachment of json.attachments) {
let link = `${G_apiURL}api/email.lua?attachment=true&id=${json.mid}&file=${attachment.hash}`;
let a = new HTML('a', {
href: link,
target: '_blank'
}, attachment.filename);
alinks.push(a);
let fs = ` ${attachment.size} bytes`;
if (attachment.size >= 1024) fs = ` ${Math.floor(attachment.size/1024)} KB`;
if (attachment.size >= 1024 * 1024) fs = ` ${Math.floor(attachment.size/(1024*10.24))/100} MB`;
alinks.push(fs);
alinks.push(new HTML('br'));
}
let attach_value = new HTML('div', {
class: 'email_value'
}, alinks);
attach_field.inject([attach_key, attach_value]);
text.inject(attach_field);
}
let toolbar = new HTML('div', {
class: 'toolbar_chatty'
});
// reply to email button
let replybutton = new HTML('button', {
title: "Reply to this email",
onclick: `compose_email('${json.mid}');`,
class: 'btn toolbar_btn toolbar_button_reply'
}, new HTML('span', {
class: 'glyphicon glyphicon-pencil'
}, ' '));
toolbar.inject(replybutton);
// permalink button
let linkbutton = new HTML('a', {
href: 'thread/%s'.format(json.mid),
title: "Permanent link to this email",
target: '_blank',
class: 'btn toolbar_btn toolbar_button_link'
}, new HTML('span', {
class: 'glyphicon glyphicon-link'
}, ' '));
toolbar.inject(linkbutton);
// Source-view button
let sourcebutton = new HTML('a', {
href: '%sapi/source.lua?id=%s'.format(G_apiURL, encodeURIComponent(json.mid)),
target: '_blank',
title: "View raw source",
class: 'btn toolbar_btn toolbar_button_source'
}, new HTML('span', {
class: 'glyphicon glyphicon-file'
}, ' '));
toolbar.inject(sourcebutton);
// Admin button?
if (G_ponymail_preferences.login && G_ponymail_preferences.login.credentials && G_ponymail_preferences.login.credentials.admin) {
let adminbutton = new HTML('a', {
href: 'admin/%s'.format(encodeURIComponent(json.mid)),
target: '_blank',
title: "Modify email",
class: 'btn toolbar_btn toolbar_button_admin'
}, new HTML('span', {
class: 'glyphicon glyphicon-cog'
}, ' '));
toolbar.inject(adminbutton);
}
text.inject(toolbar);
}