]> code.citadel.org Git - citadel.git/blob - webcit-ng/static/js/view_mail.js
Added the logic to auto-refresh mailbox display
[citadel.git] / webcit-ng / static / js / view_mail.js
1 // This module handles the view for "mailbox" rooms.
2 //
3 // Copyright (c) 2016-2022 by the citadel.org team
4 //
5 // This program is open source software.  Use, duplication, or
6 // disclosure are subject to the GNU General Public License v3.
7
8
9 // Remember the last message that was selected
10 var selected_message = 0;
11 var RefreshMailboxInterval;
12
13
14 // A message has been selected...
15 function select_message(msgnum) {
16         // unhighlight any previously selected message
17         try {
18                 document.getElementById("ctdl-msgsum-" + selected_message).classList.remove("w3-blue");
19         }
20         catch {
21         }
22
23         // highlight the newly selected message
24         selected_message = msgnum;
25         document.getElementById("ctdl-msgsum-" + selected_message).classList.add("w3-blue");
26         document.getElementById("ctdl-msgsum-" + selected_message).scrollIntoView();
27
28         // display the message
29         reading_pane = document.getElementById("ctdl-reading-pane").innerHTML = "message selected " + msgnum ;
30 }
31
32
33 // render one row in the mailbox table (this could be called from one of several places)
34 function mail_render_row(msg) {
35         row     = "<tr "
36                 + "id=\"ctdl-msgsum-" + msg["msgnum"] + "\" "
37                 + "onClick=\"select_message(" + msg["msgnum"] + ");\" "
38                 //+ "onmouseenter=\"console.log('mouse in');\" "
39                 //+ "onmouseleave=\"console.log('mouse out');\""
40                 + ">"
41                 + "<td>" + msg["subject"] + "</td>"
42                 + "<td>" + msg["author"] + " &lt;" + msg["addr"] + "&gt;</td>"
43                 + "<td>" + convertTimestamp(msg["time"]) + "</td>"
44                 + "<td>" + msg["msgnum"] + "</td>"
45                 + "</tr>";
46         return(row);
47 }
48
49
50 // Set up the mailbox view
51 function mail_display() {
52         document.getElementById("ctdl-main").innerHTML = "<div id=\"ctdl-mailbox-pane\">mailbox pane</div><div id=\"ctdl-reading-pane\">reading pane</div>";
53         refresh_mail_display();
54         RefreshMailboxInterval = setInterval(refresh_mail_display, 10000);
55 }
56
57
58 // Display or refresh the mailbox
59 function refresh_mail_display() {
60         console.log("refresh_mail_display()");
61
62         // If the "ctdl-mailbox-pane" no longer exists, the user has navigated to a different part of the site,
63         // so cancel the refresh.
64         try {
65                 document.getElementById("ctdl-mailbox-pane").innerHTML;
66         }
67         catch {
68                 console.log("ending refresh_mail_display()");
69                 clearInterval(RefreshMailboxInterval);
70                 return;
71         }
72
73         // Now go to the server.
74         url = "/ctdl/r/" + escapeHTMLURI(current_room) + "/mailbox";
75         fetch_mailbox = async() => {
76                 response = await fetch(url);
77                 msgs = await(response.json());
78                 if (response.ok) {
79
80                         box =   "<table class=\"w3-table-all w3-hoverable\" width=100%>"
81                                 + "<tr class=\"w3-blue\">"
82                                 + "<th>" + _("Subject") + "</th>"
83                                 + "<th>" + _("Sender") + "</th>"
84                                 + "<th>" + _("Date") + "</th>"
85                                 + "<th>#</th>"
86                                 + "</tr>";
87
88                         for (var i=0; i<msgs.length; ++i) {
89                                 box += mail_render_row(msgs[i]);
90                         }
91
92                         box +=  "</table>";
93                         document.getElementById("ctdl-mailbox-pane").innerHTML = box;
94
95                         if (selected_message > 0) {                     // if we had a message selected, keep it selected
96                                 select_message(selected_message);
97                         }
98                 }
99         }
100         fetch_mailbox();
101 }