You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ponymail.apache.org by hu...@apache.org on 2021/03/29 15:17:08 UTC

[incubator-ponymail-foal] 04/04: regen JS

This is an automated email from the ASF dual-hosted git repository.

humbedooh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-ponymail-foal.git

commit f8ec9d2bb47b9ae9d3c883ef7735afe3e131e7f2
Author: Daniel Gruno <hu...@apache.org>
AuthorDate: Mon Mar 29 17:16:48 2021 +0200

    regen JS
---
 webui/js/ponymail.js | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 151 insertions(+)

diff --git a/webui/js/ponymail.js b/webui/js/ponymail.js
index bc18ebe..198a84e 100644
--- a/webui/js/ponymail.js
+++ b/webui/js/ponymail.js
@@ -2424,6 +2424,157 @@ function listview_threaded_element(thread, idx) {
 
 
 /******************************************
+ Fetched from source/mgmt.js
+******************************************/
+
+let admin_current_email = null;
+
+async function POST(url, formdata, state) {
+    const resp = await fetch(url, {
+        credentials: "same-origin",
+        mode: "same-origin",
+        method: "post",
+        headers: { "Content-Type": "application/json" },
+        body: formdata
+    });
+    return resp
+}
+
+// Deletes (hides) an email from the archives
+async function admin_hide_email() {
+    formdata = JSON.stringify({
+        action: "delete",
+        document: admin_current_email
+    });
+    let rv = await POST('%sapi/mgmt.json'.format(apiURL), formdata, {});
+    let response = await rv.text();
+    if (rv.status == 200) {
+        modal("Email removed", "Server responded with: " + response, "help");
+    } else {
+        modal("Something went wrong!", "Server responded with: " + response, "error");
+    }
+}
+
+// Saves an email with edits
+async function admin_save_email() {
+    let from = document.getElementById('email_from').value;
+    let subject = document.getElementById('email_subject').value;
+    let listname = document.getElementById('email_listname').value;
+    let private = document.getElementById('email_private').value;
+    let body = document.getElementById('email_body').value;
+    let formdata = JSON.stringify({
+        action: "edit",
+        document: admin_current_email,
+        from: from,
+        subject: subject,
+        list: listname,
+        private: private,
+        body: body
+    })
+    let rv = await POST('%sapi/mgmt.json'.format(apiURL), formdata, {});
+    let response = await rv.text();
+    if (rv.status == 200) {
+        modal("Email changed", "Server responded with: " + response, "help");
+    } else {
+        modal("Something went wrong!", "Server responded with: " + response, "error");
+    }
+}
+
+function admin_email_preview(stats, json) {
+    admin_current_email = json.mid;
+    let cp = document.getElementById("panel");
+    let div = new HTML('div');
+    cp.inject(div);
+
+    div.inject(new HTML('h1', {}, "Editing email " + json.mid + ":"));
+
+    // Author
+    let author_field = new HTML('div', {class: 'email_kv_edit'});
+    let author_key = new HTML('div', {class: 'email_key'}, "From: ");
+    let author_value = new HTML('input', {id: 'email_from', style: {width: "480px"}, value: json.from});
+    author_field.inject([author_key, author_value]);
+    div.inject(author_field);
+
+    // Subject
+    let subject_field = new HTML('div', {class: 'email_kv_edit'});
+    let subject_key = new HTML('div', {class: 'email_key'}, "Subject: ");
+    let subject_value = new HTML('input', {id: 'email_subject', style: {width: "480px"}, value: json.subject});
+    subject_field.inject([subject_key, subject_value]);
+    div.inject(subject_field);
+
+    // Date
+    let date_field = new HTML('div', {class: 'email_kv_edit'});
+    let date_key = new HTML('div', {class: 'email_key'}, "Date: ");
+    let date_value = new HTML('div', {class: 'email_value'}, new Date(json.epoch * 1000.0).ISOBare());
+    date_field.inject([date_key, date_value]);
+    div.inject(date_field);
+
+    // List
+    let listname = json.list_raw.replace(".", "@", 1).replace(/[<>]/g, "");
+    let list_field = new HTML('div', {class: 'email_kv_edit'});
+    let list_key = new HTML('div', {class: 'email_key'}, "List: ");
+    let list_value = new HTML('input', {id: 'email_listname', style: {width: "480px"}, value: listname});
+    list_field.inject([list_key, list_value]);
+    div.inject(list_field);
+
+    // Private email?
+    let priv_field = new HTML('div', {class: 'email_kv_edit'});
+    let priv_key = new HTML('div', {class: 'email_key'}, "Private: ");
+    let priv_value = new HTML('select', {id:'email_private'});
+    priv_value.inject(new HTML('option', {value: 'no', style: {color: 'green'}, selected: json.private ? null : "selected"}, "No"));
+    priv_value.inject(new HTML('option', {value: 'yes', style: {color: 'red'}, selected: json.private ? "selected" : null}, "Yes"));
+    priv_field.inject([priv_key, priv_value]);
+    div.inject(priv_field);
+
+    // 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 n = 0; n < json.attachments.length; n++) {
+            let attachment = json.attachments[n];
+            let link = `${pm_config.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]);
+        div.inject(attach_field);
+    }
+
+    let text = new HTML('textarea', {id: 'email_body', style: {width: "100%", height: "480px"}}, json.body);
+    div.inject(text);
+
+    let btn_edit = new HTML('button', {onclick: "admin_save_email();"}, "Save changes to archive");
+    let btn_hide = new HTML('button', {onclick: "admin_hide_email();", style: {marginLeft: "24px", color: 'red'}}, "Remove email from archives*");
+    div.inject(new HTML('br'));
+    div.inject(btn_edit);
+    div.inject(btn_hide);
+    div.inject(new HTML('br'));
+    div.inject(new HTML('small', {}, "* Emails that are removed may still be recovered by the base system administrator. For complete expungement, please contact the system administrator."))
+}
+
+function admin_init() {
+    let mid = location.href.split('/').pop();
+    // Specific email/list handling?
+    if (mid.length > 0) {
+        // List handling?
+        if (mid.match(/^<.+>$/)) {
+
+        }
+        // Email handling?
+        else {
+            GET('%sapi/email.lua?id=%s'.format(apiURL, mid), admin_email_preview, null);
+        }
+    }
+}
+
+/******************************************
  Fetched from source/preferences.js
 ******************************************/