<!DOCTYPE html>
<!--
- Copyright (c) 1996-2022 by Art Cancro and the citadel.org team.
+ Copyright (c) 1996-2023 by Art Cancro and the citadel.org team.
This program is open source software. Use, duplication, or
disclosure are subject to the GNU General Public License v3.
-->
<div class="ctdl-modal" id="ctdl_big_modal"></div>
<!-- When we need a custom ghost image for drag-and-drop, we can attach it to this element -->
-<div id="ctdl_draggo" style="position:absolute; left:0px; top:0px; z-index:-9">DRAGGO</div>
+<div id="ctdl_draggo" style="position:absolute; left:0px; top:0px; z-index:-9"> </div>
<div class="ctdl-main-grid-container">
function display_mail_folder_list(target_div) {
display_mail_folder_list_async = async(target_div) => {
- let rendered_list = "hi from display_mail_folder_list_async()";
+ let rendered_list = "";
// load the room list from the Citadel Server
response = await fetch("/ctdl/r/", { method: "GET" } );
for (let i=0; i<roomlist_json.length; ++i) {
if (roomlist_json[i].current_view == views.VIEW_MAILBOX) {
rendered_list += "<li "
- + "onmouseup=\"mail_mouseup('" + roomlist_json[i].name + "');\" "
+ + "id=\"" + randomString() + "\" "
+ + "onDragEnter=\"return mail_dragenter_handler(event)\" "
+ + "onDragOver=\"return mail_dragover_handler(event)\" "
+ + "onDragLeave=\"return mail_dragleave_handler(event)\" "
+ + "onDrop=\"return mail_drop_handler(event, '" + escapeJS(roomlist_json[i].name) + "')\" "
+ "onClick=\"gotoroom('" + roomlist_json[i].name + "');\">"
+ ((roomlist_json[i].name == "Mail") ? _("INBOX") : escapeHTML(roomlist_json[i].name))
+ "</li>\n"
}
-// The user released the mouse button over a folder name -- this is probably a drop event
-function mail_mouseup(roomname) {
- console.log("mail_mouseup " + roomname);
+function mail_dragenter_handler(event) {
+ event.preventDefault();
+ return false;
+}
+
+
+function mail_dragover_handler(event) {
+ event.preventDefault();
+ return false;
+}
- // todo:
- // 1. First check to see if a drag operation is in progress. Exit if there is no such case.
- // 2. Perform the MOVE operation on the selected rows.
+function mail_dragleave_handler(event) {
+ event.preventDefault();
+ return false;
}
+
+function mail_drop_handler(event, to_room) {
+ console.log("Drop! " + event.currentTarget.id + " to room '" + to_room + "'");
+ event.preventDefault();
+ return false;
+}
+
+
// Helper function for mail_send_messages() to extract and decode metadata values.
function msm_field(element_name, separator) {
let s1 = document.getElementById(element_name).innerHTML;
- let s2 = s1.replaceAll("|",separator); // Replace "|" with "!" because "|" is a field separator in Citadel wire protocol
+ let s2 = s1.replaceAll("|",separator); // Replace "|" with "!" because "|" is a field separator in Citadel
let s3 = decodeURI(s2);
let s4 = document.createElement("textarea"); // This One Weird Trick Unescapes All HTML Entities
s4.innerHTML = s3;