1 // Display the mail folder list
3 // Copyright (c) 2016-2023 by the citadel.org team
5 // This program is open source software. Use, duplication, or
6 // disclosure are subject to the GNU General Public License v3.
9 // Display the mail folder list in the specified div
10 function display_mail_folder_list(target_div) {
12 display_mail_folder_list_async = async(target_div) => {
13 let rendered_list = "";
15 // load the room list from the Citadel Server
16 response = await fetch("/ctdl/r/", { method: "GET" } );
18 roomlist = await response.json();
19 rendered_list = render_mail_folder_list(roomlist);
22 rendered_list = "❌ " + response.status;
25 document.getElementById(target_div).innerHTML = rendered_list;
28 document.getElementById(target_div).innerHTML = "<img src=\"/ctdl/s/images/throbber.gif\" />"; // show throbber
29 document.getElementById(target_div).style.display = "block";
30 display_mail_folder_list_async(target_div);
34 // Given a JSON object containing the output of the `/ctdl/r` API call, return a rendered mail folder list.
35 function render_mail_folder_list(roomlist_json) {
37 // Sort first by floor then by room order
38 roomlist_json.sort(function(a, b) {
39 if (a.floor > b.floor) return 1;
40 if (a.floor < b.floor) return -1;
41 if (a.name == "Mail") return -1;
42 if (b.name == "Mail") return 1;
43 if (a.rorder > b.rorder) return 1;
44 if (a.rorder < b.rorder) return -1;
48 // Turn it into displayable markup
49 let rendered_list = "<ul class=\"ctdl_mail_folders\" id=\"ctdl_mail_folders\">\n";
50 for (let i=0; i<roomlist_json.length; ++i) {
51 if (roomlist_json[i].current_view == views.VIEW_MAILBOX) {
52 rendered_list += "<li "
53 + "id=\"" + randomString() + "\" "
54 + "onclick=\"gotoroom('" + roomlist_json[i].name + "')\" "
55 + "ondragstart=\"mail_folder_dragstart(event)\" "
56 + "ondragover=\"mail_folder_dragover(event)\" "
57 + "ondragleave=\"mail_folder_dragleave(event)\" "
58 + "ondrop=\"mail_folder_drop(event)\" "
60 + ((roomlist_json[i].name == "Mail") ? _("INBOX") : escapeHTML(roomlist_json[i].name))
65 rendered_list += "</ul>";
70 function mail_folder_dragstart(event) {
71 event.preventDefault();
75 // There MUST be a dragover handler, otherwise drop doesn't work. This may be a browser specific quirk.
76 function mail_folder_dragover(event) {
77 event.preventDefault();
81 function mail_folder_dragleave(event) {
82 event.preventDefault();
86 function mail_folder_drop(event) {
87 console.log("target DROP!");