From b076287018913c4cac33026f2e539b8ba3795a1b Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Wed, 9 Nov 2005 04:50:45 +0000 Subject: [PATCH] * Mailbox view: selected messages are now draggablevi ChangeLog (Now we just need to implement a place to drop them.) --- webcit/ChangeLog | 4 ++ webcit/messages.c | 2 +- webcit/static/wclib.js | 112 +++++++++++++++++++++++++++++++++++++++-- 3 files changed, 113 insertions(+), 5 deletions(-) diff --git a/webcit/ChangeLog b/webcit/ChangeLog index 2efb0aff7..c1511832d 100644 --- a/webcit/ChangeLog +++ b/webcit/ChangeLog @@ -1,5 +1,9 @@ $Id$ +Tue Nov 8 23:50:01 EST 2005 ajc +* Mailbox view: selected messages are now draggable!! (Now we just need to + implement a place to drop them.) + Tue Nov 8 00:44:19 EST 2005 ajc * Now it resizes on mousemove instead of mouseup. Very nice animated effect. diff --git a/webcit/messages.c b/webcit/messages.c index b239cd9bc..578d11474 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -1338,7 +1338,7 @@ void display_summarized(int num) { char datebuf[64]; wprintf("", + "onMouseDown=\"CtdlMoveMsgMouseDown(event,%ld)\">", WC->summ[num].msgnum, (WC->summ[num].is_new ? "bold" : "normal"), WC->summ[num].msgnum diff --git a/webcit/static/wclib.js b/webcit/static/wclib.js index 960ad4227..23ef4f8dd 100644 --- a/webcit/static/wclib.js +++ b/webcit/static/wclib.js @@ -164,17 +164,19 @@ function CtdlClearDeletedMsg(msgnum) { // These functions called when the user down-clicks on the message list resizer bar +var saved_x = 0; var saved_y = 0; -function ml_up(evt) { +function CtdlResizeMsgListMouseUp(evt) { document.onmouseup = null; document.onmousemove = null; if (document.layers) { document.releaseEvents(Event.MOUSEUP | Event.MOUSEMOVE); } + return true; } -function ml_move(evt) { +function CtdlResizeMsgListMouseMove(evt) { y = (ns6 ? evt.clientY : event.clientY); increment = y - saved_y; @@ -219,13 +221,115 @@ function ml_move(evt) { d.style.top = (divTop + increment) + 'px'; saved_y = y; + return true; } function CtdlResizeMsgListMouseDown(evt) { saved_y = (ns6 ? evt.clientY : event.clientY); - document.onmouseup = ml_up; - document.onmousemove = ml_move; + document.onmouseup = CtdlResizeMsgListMouseUp; + document.onmousemove = CtdlResizeMsgListMouseMove; + if (document.layers) { + document.captureEvents(Event.MOUSEUP | Event.MOUSEMOVE); + } + return true; +} + + + +// These functions handle drag and drop message moving + +var mm_div = null; + +function CtdlMoveMsgMouseDown(evt, msgnum) { + + // do the highlight first + CtdlSingleClickMsg(evt, msgnum); + + // Now handle the possibility of dragging + saved_x = (ns6 ? evt.clientX : event.clientX); + saved_y = (ns6 ? evt.clientY : event.clientY); + document.onmouseup = CtdlMoveMsgMouseUp; + document.onmousemove = CtdlMoveMsgMouseMove; if (document.layers) { document.captureEvents(Event.MOUSEUP | Event.MOUSEMOVE); } + + return false; +} + +function CtdlMoveMsgMouseMove(evt) { + x = (ns6 ? evt.clientX : event.clientX); + y = (ns6 ? evt.clientY : event.clientY); + + if ( (x == saved_x) && (y == saved_y) ) { + return true; + } + + if (CtdlNumMsgsSelected < 1) { + return true; + } + + if (!mm_div) { + + + drag_o_text = "
"; + for (i=0; i'; + } + drag_o_text = drag_o_text + "
"; + + mm_div = document.createElement("DIV"); + mm_div.style.position='absolute'; + mm_div.style.top = y + 'px'; + mm_div.style.left = x + 'px'; + mm_div.style.pixelHeight = '300'; + mm_div.style.pixelWidth = '300'; + mm_div.innerHTML = drag_o_text; + document.body.appendChild(mm_div); + } + else { + mm_div.style.top = y + 'px'; + mm_div.style.left = x + 'px'; + } + + return false; // prevent the default mouse action from happening? +} + +function CtdlMoveMsgMouseUp(evt) { + document.onmouseup = null; + document.onmousemove = null; + if (document.layers) { + document.releaseEvents(Event.MOUSEUP | Event.MOUSEMOVE); + } + + if (mm_div) { + document.body.removeChild(mm_div); + mm_div = null; + } + return true; +} + + +function ctdl_ts_getInnerText(el) { + if (typeof el == "string") return el; + if (typeof el == "undefined") { return el }; + if (el.innerText) return el.innerText; //Not needed but it is faster + var str = ""; + + var cs = el.childNodes; + var l = cs.length; + for (var i = 0; i < l; i++) { + switch (cs[i].nodeType) { + case 1: //ELEMENT_NODE + str += ts_getInnerText(cs[i]); + break; + case 3: //TEXT_NODE + str += cs[i].nodeValue; + break; + } + } + return str; } -- 2.39.2