X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit-ng%2Fstatic%2Fjs%2Fview_mail.js;h=535d0f1f793875d5aca2c4e542e3fb02b8933444;hb=954e5749b5e0102f8598fcc19fc10267f31a6cda;hp=f3ee2acfab91bf6b4b2546cd1b3ab41106c119a2;hpb=d4e8b9166607cc418e714c86716b55eb1f0ec116;p=citadel.git diff --git a/webcit-ng/static/js/view_mail.js b/webcit-ng/static/js/view_mail.js index f3ee2acfa..535d0f1f7 100644 --- a/webcit-ng/static/js/view_mail.js +++ b/webcit-ng/static/js/view_mail.js @@ -1,31 +1,173 @@ +// This module handles the view for "mailbox" rooms. +// // Copyright (c) 2016-2022 by the citadel.org team // // This program is open source software. Use, duplication, or // disclosure are subject to the GNU General Public License v3. +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 = + "
" // begin message wrapper + + "
" + + "" + + "
" // end avatar + + "
" // begin content + + "
" // begin header + + "" // begin header info on left side + + "" + + msg.from + + "" // end username + + "" + + convertTimestamp(msg.time) + + "" // end msgdate + + "" // end header info on left side + + "" // begin buttons on right side + + + "" // Reply + + "" + + " " + + _("Reply") + + "" + + + "" // ReplyQuoted + + "" + + " " + + _("ReplyQuoted") + + ""; + + if (can_delete_messages) { + outmsg += + "" + + "" + + " " + + _("Delete") + + ""; + } + + outmsg += + ""; // end buttons on right side + if (msg.subj) { + outmsg += + "
" + msg.subj + ""; + } + outmsg += + "

" // end header + + "
" // begin body + + msg.text + + "
" // end body + + "
" // end content + + "
" // end wrapper + ; + } + catch(err) { + outmsg = "
" + err.message + "
"; + } + + 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... function select_message(msgnum) { - reading_pane = document.getElementById("ctdl-reading-pane").innerHTML = "message selected " + msgnum ; + // unhighlight any previously selected message + try { + document.getElementById("ctdl-msgsum-" + selected_message).classList.remove("w3-blue"); + } + catch { + } + + // highlight the newly selected message + document.getElementById("ctdl-msgsum-" + msgnum).classList.add("w3-blue"); + document.getElementById("ctdl-msgsum-" + msgnum).scrollIntoView(); + + // 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")); + } +} + + +// render one row in the mailbox table (this could be called from one of several places) +function mail_render_row(msg) { + row = "" + + "" + msg["subject"] + "" + + "" + msg["author"] + " <" + msg["addr"] + ">" + + "" + convertTimestamp(msg["time"]) + "" + + "" + msg["msgnum"] + "" + + ""; + return(row); } // Set up the mailbox view function mail_display() { - target_div = document.getElementById("ctdl-main"); - target_div.innerHTML = "
mailbox pane
reading pane
"; - mailbox_pane = document.getElementById("ctdl-mailbox-pane"); - reading_pane = document.getElementById("ctdl-reading-pane"); + document.getElementById("ctdl-main").innerHTML + = "
" + + "
"; + ; + 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); +} + - activate_loading_modal(); +// Display or refresh the mailbox +function refresh_mail_display() { + console.log("refresh_mail_display()"); + + // If the "ctdl-mailbox-pane" no longer exists, the user has navigated to a different part of the site, + // so cancel the refresh. + try { + document.getElementById("ctdl-mailbox-pane").innerHTML; + } + catch { + console.log("ending refresh_mail_display()"); + clearInterval(RefreshMailboxInterval); + return; + } + + // Now go to the server. url = "/ctdl/r/" + escapeHTMLURI(current_room) + "/mailbox"; fetch_mailbox = async() => { response = await fetch(url); msgs = await(response.json()); if (response.ok) { - box = "" - + "" + box = "
" + + "" + "" + "" + "" @@ -33,21 +175,16 @@ function mail_display() { + ""; for (var i=0; i" - + "" - + "" - + "" - + "" - + ""; + box += mail_render_row(msgs[i]); } box += "
" + _("Subject") + "" + _("Sender") + "" + _("Date") + "
" + msgs[i]["subject"] + "" + msgs[i]["author"] + " <" + msgs[i]["addr"] + ">" + convertTimestamp(msgs[i]["time"]) + "" + msgs[i]["msgnum"] + "
"; - mailbox_pane.innerHTML = box; + document.getElementById("ctdl-mailbox-pane").innerHTML = box; + + if (selected_message > 0) { // if we had a message selected, keep it selected + select_message(selected_message); + } } } fetch_mailbox(); - deactivate_loading_modal(); }