]> code.citadel.org Git - citadel.git/blobdiff - webcit-ng/static/js/view_mail.js
utf8ify_rfc822_string() is in libcitadel now
[citadel.git] / webcit-ng / static / js / view_mail.js
index 5b1c915e6907aab440e9aa0eb4d62983e19f0483..535d0f1f793875d5aca2c4e542e3fb02b8933444 100644 (file)
@@ -6,9 +6,88 @@
 // disclosure are subject to the GNU General Public License v3.
 
 
-// Remember the last message that was selected
-var selected_message = 0;
-var RefreshMailboxInterval;
+var selected_message = 0;                                                      // Remember the last message that was selected
+var RefreshMailboxInterval;                                                    // We store our refresh timer here
+
+
+// Render a message into the mailbox view
+function mail_render_one(msg, target_div) {
+       let div = "FIXME";
+       try {
+               outmsg =
+                 "<div class=\"ctdl-mmsg-wrapper\">"                           // begin message wrapper
+               + "<div class=\"ctdl-avatar\" onClick=\"javascript:user_profile('" + msg.from + "');\">"
+               + "<img src=\"/ctdl/u/" + msg.from + "/userpic\" width=\"32\" "
+               + "onerror=\"this.parentNode.innerHTML='&lt;i class=&quot;fa fa-user-circle fa-2x&quot;&gt;&lt;/i&gt; '\">"
+               + "</div>"                                                      // end avatar
+               + "<div class=\"ctdl-mmsg-content\">"                           // begin content
+               + "<div class=\"ctdl-msg-header\">"                             // begin header
+               + "<span class=\"ctdl-msg-header-info\">"                       // begin header info on left side
+               + "<span class=\"ctdl-username\" onClick=\"javascript:user_profile('" + msg.from + "');\">"
+               + msg.from
+               + "</a></span>"                                                 // end username
+               + "<span class=\"ctdl-msgdate\">"
+               + convertTimestamp(msg.time)
+               + "</span>"                                                     // end msgdate
+               + "</span>"                                                     // end header info on left side
+               + "<span class=\"ctdl-msg-header-buttons\">"                    // begin buttons on right side
+       
+               + "<span class=\"ctdl-msg-button\">"                            // Reply
+               + "<a href=\"javascript:open_reply_box('"+div+"',false,'"+msg.wefw+"','"+msg.msgn+"');\">"
+               + "<i class=\"fa fa-reply\"></i> " 
+               + _("Reply")
+               + "</a></span>"
+       
+               + "<span class=\"ctdl-msg-button\">"                            // ReplyQuoted
+               + "<a href=\"javascript:open_reply_box('"+div+"',true,'"+msg.wefw+"','"+msg.msgn+"');\">"
+               + "<i class=\"fa fa-comment\"></i> " 
+               + _("ReplyQuoted")
+               + "</a></span>";
+       
+               if (can_delete_messages) {
+                       outmsg +=
+                       "<span class=\"ctdl-msg-button\">"
+                       + "<a href=\"javascript:forum_delete_message('"+div+"','"+msg.msgnum+"');\">"
+                       + "<i class=\"fa fa-trash\"></i> " 
+                       + _("Delete")
+                       + "</a></span>";
+               }
+       
+               outmsg +=
+                 "</span>";                                                    // end buttons on right side
+               if (msg.subj) {
+                       outmsg +=
+                       "<br><span class=\"ctdl-msgsubject\">" + msg.subj + "</span>";
+               }
+               outmsg +=
+                 "</div><br>"                                                  // end header
+               + "<div class=\"ctdl-msg-body\" id=\"" + div + "_body\">"       // begin body
+               + msg.text
+               + "</div>"                                                      // end body
+               + "</div>"                                                      // end content
+               + "</div>"                                                      // end wrapper
+               ;
+       }
+       catch(err) {
+               outmsg = "<div class=\"ctdl-mmsg-wrapper\">" + err.message + "</div>";
+       }
+
+       target_div.innerHTML = outmsg;
+}
+
+
+// display an individual message
+function mail_display_message(msgnum, target_div) {
+       url = "/ctdl/r/" + escapeHTMLURI(current_room) + "/" + msgnum + "/json";
+       mail_fetch_msg = async() => {
+               response = await fetch(url);
+               msg = await(response.json());
+               if (response.ok) {
+                       mail_render_one(msg, target_div);
+               }
+       }
+       mail_fetch_msg();
+}
 
 
 // A message has been selected...
@@ -21,12 +100,14 @@ function select_message(msgnum) {
        }
 
        // highlight the newly selected message
-       selected_message = msgnum;
-       document.getElementById("ctdl-msgsum-" + selected_message).classList.add("w3-blue");
-       document.getElementById("ctdl-msgsum-" + selected_message).scrollIntoView();
+       document.getElementById("ctdl-msgsum-" + msgnum).classList.add("w3-blue");
+       document.getElementById("ctdl-msgsum-" + msgnum).scrollIntoView();
 
-       // display the message
-       reading_pane = document.getElementById("ctdl-reading-pane").innerHTML = "message selected " + msgnum ;
+       // display the message if it isn't already displayed
+       if (selected_message != msgnum) {
+               selected_message = msgnum;
+               mail_display_message(msgnum, document.getElementById("ctdl-reading-pane"));
+       }
 }
 
 
@@ -49,8 +130,16 @@ function mail_render_row(msg) {
 
 // Set up the mailbox view
 function mail_display() {
-       document.getElementById("ctdl-main").innerHTML = "<div id=\"ctdl-mailbox-pane\">mailbox pane</div><div id=\"ctdl-reading-pane\">reading pane</div>";
+       document.getElementById("ctdl-main").innerHTML
+               = "<div id=\"ctdl-mailbox-pane\" class=\"ctdl-mailbox-pane\"></div>"
+               + "<div id=\"ctdl-reading-pane\" class=\"ctdl-reading-pane\"></div>";
+       ;
        refresh_mail_display();
+       try {                                                   // if this was already set up, clear it so there aren't multiple
+               clearInterval(RefreshMailboxInterval);
+       }
+       catch {
+       }
        RefreshMailboxInterval = setInterval(refresh_mail_display, 10000);
 }
 
@@ -78,7 +167,7 @@ function refresh_mail_display() {
                if (response.ok) {
 
                        box =   "<table class=\"w3-table-all w3-hoverable\" width=100%>"
-                               + "<tr class=\"w3-blue\">"
+                               + "<tr class=\"ctdl-mailbox-heading w3-blue\">"
                                + "<th>" + _("Subject") + "</th>"
                                + "<th>" + _("Sender") + "</th>"
                                + "<th>" + _("Date") + "</th>"