X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=webcit%2Fstatic%2Fsummaryview.js;h=f3964c053d423a1e0b8495531b68d422eacd254b;hp=b19e7efbde7181a00bbe5eae6a332e04fd45132a;hb=d89c2995e621fb8f5cb4c2777277ebef023b14cf;hpb=f097cfe518aa0c0c416ad96ebe829523597250df diff --git a/webcit/static/summaryview.js b/webcit/static/summaryview.js index b19e7efbd..f3964c053 100644 --- a/webcit/static/summaryview.js +++ b/webcit/static/summaryview.js @@ -1,9 +1,22 @@ -/** Webcit Summary View v2 - All comments, flowers and death threats to Mathew McBride - / -*/ +/* + * Webcit Summary View v2 + * All comments, flowers and death threats to Mathew McBride + * / + * Copyright 2009 The Citadel Team + * Licensed under the GPL V3 + * + * QA reminders: because I keep forgetting / get cursed. + * After changing anything in here, make sure that you still can: + * 1. Resort messages in both normal and paged view. + * 2. Select a range with shift-click + * 3. Select messages with ctrl-click + * 4. Normal click will deselect everything done above + * 5. Move messages, and they will disappear + */ + document.observe("dom:loaded", createMessageView); +var msgs = null; var message_view = null; var loadingMsg = null; var rowArray = null; @@ -16,485 +29,619 @@ var mlh_from = null; var currentSorterToggle = null; var query = ""; var currentlyMarkedRows = new Object(); -var markedRowId = null; +var markedRowIndex = null; +var currentlyHasRowsSelected = false; var mouseDownEvent = null; var exitedMouseDown = false; +var is_shift_pressed = false; +var is_ctrl_pressed = false; + +var originalMarkedRow = null; +var previousFinish = 0; +var markedFrom = 0; +var trTemplate = new Array(11); +trTemplate[0] = ""; +trTemplate[10] = ""; +trTemplate[12] = ""; +trTemplate[14] = ""; + + +var currentPage = 0; var sortModes = { - "rdate" : sortRowsByDateDescending, - "date" : sortRowsByDateAscending, - // "reverse" : sortRowsByDateDescending, - "subj" : sortRowsBySubjectAscending, - "rsubj" : sortRowsBySubjectDescending, - "sender": sortRowsByFromAscending, - "rsender" : sortRowsByFromDescending + "rdate" : sortRowsByDateDescending, + "date" : sortRowsByDateAscending, + "subj" : sortRowsBySubjectAscending, + "rsubj" : sortRowsBySubjectDescending, + "sender": sortRowsByFromAscending, + "rsender" : sortRowsByFromDescending }; var toggles = {}; var nummsgs = 0; var startmsg = 0; + function createMessageView() { - message_view = document.getElementById("message_list_body"); - loadingMsg = document.getElementById("loading"); - getMessages(); - mlh_date = $("mlh_date"); - mlh_subject = $('mlh_subject'); - mlh_from = $('mlh_from'); - toggles["rdate"] = mlh_date; - toggles["date"] = mlh_date; - // toggles["reverse"] = mlh_date; - toggles["subj"] = mlh_subject; - toggles["rsubj"] = mlh_subject; - toggles["sender"] = mlh_from; - toggles["rsender"] = mlh_from; - mlh_date.observe('click',ApplySort); - mlh_subject.observe('click',ApplySort); - mlh_from.observe('click',ApplySort); - $(document).observe('keyup',CtdlMessageListKeyUp,false); - window.oncontextmenu = function() { return false; }; - $('resize_msglist').observe('mousedown', CtdlResizeMouseDown); - $('m_refresh').observe('click', getMessages); - document.getElementById('m_refresh').setAttribute("href","#"); - Event.observe(document.onresize ? document : window, "resize", normalizeHeaderTable); - sizePreviewPane(); - Event.observe(document.onresize ? document : window, "resize", sizePreviewPane); - $('summpage').observe('change', getPage); - takeOverSearchOMatic(); - setupDragDrop(); // here for now + message_view = document.getElementById("message_list_body"); + loadingMsg = document.getElementById("loading"); + getMessages(); + mlh_date = $("mlh_date"); + mlh_subject = $('mlh_subject'); + mlh_from = $('mlh_from'); + toggles["rdate"] = mlh_date; + toggles["date"] = mlh_date; + toggles["subj"] = mlh_subject; + toggles["rsubj"] = mlh_subject; + toggles["sender"] = mlh_from; + toggles["rsender"] = mlh_from; + mlh_date.observe('click',ApplySort); + mlh_subject.observe('click',ApplySort); + mlh_from.observe('click',ApplySort); + $(document).observe('keydown',CtdlMessageListKeyDown,false); + $(document).observe('keyup',CtdlMessageListKeyUp,false); + $('resize_msglist').observe('mousedown', CtdlResizeMouseDown); + $('m_refresh').observe('click', getMessages); + document.getElementById('m_refresh').setAttribute("href","#"); + Event.observe(document.onresize ? document : window, "resize", normalizeHeaderTable); + Event.observe(document.onresize ? document : window, "resize", sizePreviewPane); + if ( $('summpage') ) { + $('summpage').observe('change', getPage); + } + else { + alert('error: summpage does not exist'); + } + takeOverSearchOMatic(); + setupDragDrop(); // here for now } + function getMessages() { - if (loadingMsg.parentNode == null) { - message_view.innerHTML = ""; - message_view.appendChild(loadingMsg); - } -roomName = getTextContent(document.getElementById("rmname")); - var parameters = {'room':roomName, 'startmsg': startmsg}; - if (is_safe_mode) { - parameters['maxmsgs'] = 500; - if (currentSortMode != null) { - var SortBy = currentSortMode[0]; - if (SortBy.charAt(0) == 'r') { - SortBy = SortBy.substr(1); - parameters["SortOrder"] = "2"; - } - parameters["SortBy"] = SortBy; - } - } - if (query.length > 0) { - parameters["query"] = query; - } -new Ajax.Request("roommsgs", { - method: 'get', - onSuccess: loadMessages, - parameters: parameters, - sanitize: false, - evalJSON: false, - onFailure: function(e) { alert("Failure: " + e);} + if (loadingMsg.parentNode == null) { + message_view.innerHTML = ""; + message_view.appendChild(loadingMsg); + } + roomName = getTextContent(document.getElementById("rmname")); + var parameters = {'room':roomName, 'startmsg': startmsg, 'stopmsg': -1}; + if (is_safe_mode) { + parameters['stopmsg'] = parseInt(startmsg)+499; + //parameters['maxmsgs'] = 500; + if (currentSortMode != null) { + var SortBy = currentSortMode[0]; + if (SortBy.charAt(0) == 'r') { + SortBy = SortBy.substr(1); + parameters["SortOrder"] = "0"; + } + parameters["SortBy"] = SortBy; + } + } + if (query.length > 0) { + parameters["query"] = query; + } + new Ajax.Request("roommsgs", { + method: 'get', + onSuccess: loadMessages, + parameters: parameters, + sanitize: false, + evalJSON: false, + onFailure: function(e) { alert("Failure: " + e);} }); } + +function evalJSON(data) { + var jsonData = null; + if (typeof(JSON) === 'object' && typeof(JSON.parse) === 'function') { + try { + jsonData = JSON.parse(data); + } catch (e) { + // ignore + } + } + if (jsonData == null) { + jsonData = eval('('+data+')'); + } + return jsonData; +} function loadMessages(transport) { - try { - var data = eval('('+transport.responseText+')'); - if (!!data && transport.responseText.length < 2) { - alert("Message loading failed"); - } - nummsgs = data['nummsgs']; - var msgs = data['msgs']; - var length = msgs.length; - rowArray = new Array(); // store so they can be sorted - var start = new Date(); - for(var i=0; i"; + for(var x=0; x markedRowId) { - startMarkingFrom = markedRowId+1; - finish = rowId; - } else if (rowId < markedRowId) { - startMarkingFrom = rowId+1; - finish = markedRowId; - } - for(var x = startMarkingFrom; x markedRowIndex) { + startMarkingFrom = markedRowIndex+1; + finish = rowIndex; + } else if (rowIndex < markedRowIndex) { + startMarkingFrom = rowIndex+1; + finish = markedRowIndex; + } + previousFinish = finish; + WCLog('startMarkingFrom=' + startMarkingFrom + ', finish=' + finish); + for(var x = startMarkingFrom; x 800) { + if (!room_is_trash) { + mvCommand = encodeURI("g_cmd=MOVE " + msgIds + "|_TRASH_|0"); + } + else { + mvCommand = encodeURI("g_cmd=DELE " + msgIds); + } + new Ajax.Request("ajax_servcmd", { + parameters: mvCommand, + method: 'post', + onSuccess: function(transport) { + WCLog(transport.responseText); + } + }); + msgIds = ""; + } + } + + if (!room_is_trash) { + mvCommand = encodeURI("g_cmd=MOVE " + msgIds + "|_TRASH_|0"); } + else { + mvCommand = encodeURI("g_cmd=DELE " + msgIds); + } + new Ajax.Request("ajax_servcmd", { + parameters: mvCommand, + method: 'post', + onSuccess: function(transport) { + WCLog(transport.responseText); + } + }); + + document.getElementById("preview_pane").innerHTML = ""; deleteAllMarkedRows(); - } +} + + +function arrgggh() { + s = '.'; + if (is_shift_pressed) { + s = s + 'S'; + } + s = s + '.'; + if (is_ctrl_pressed) { + s = s + 'C'; + } + s = s + '.'; + $('ib_summary').innerHTML = s; + +} + +function CtdlMessageListKeyDown(event) { + var key = event.which || event.keyCode; + + if (key == 16) { /* SHIFT */ + is_shift_pressed = true; + } + else if ( (key == 17) || (key == 18) ) { /* CTRL or ALT */ + is_ctrl_pressed = true; + } + arrgggh(); +} + +function CtdlMessageListKeyUp(event) { + var key = event.which || event.keyCode; + + if (key == 16) { /* SHIFT */ + is_shift_pressed = false; + } + else if ( (key == 17) || (key == 18) ) { /* CTRL or ALT */ + is_ctrl_pressed = false; + } + else if (key == 46) { /* DELETE */ + deleteAllSelectedMessages(); + } + arrgggh(); } function clearMessage(msgId) { - var row = document.getElementById('msg_'+msgId); - row.parentNode.removeChild(row); - delete currentlyMarkedRows[msgId]; + var row = document.getElementById('msg_'+msgId); + row.parentNode.removeChild(row); + delete currentlyMarkedRows[msgId]; } function summaryViewContextMenu() { - if (!exitedMouseDown) { - var contextSource = document.getElementById("listViewContextMenu"); - CtdlSpawnContextMenu(mouseDownEvent, contextSource); - } + if (!exitedMouseDown) { + var contextSource = document.getElementById("listViewContextMenu"); + CtdlSpawnContextMenu(mouseDownEvent, contextSource); + } } function summaryViewDragAndDropHandler() { - var element = document.createElement("div"); - var msgList = document.createElement("ul"); - element.appendChild(msgList); - for(msgId in currentlyMarkedRows) { - msgRow = currentlyMarkedRows[msgId]; - var subject = getTextContent(msgRow.getElementsByTagName("td")[0]); - var li = document.createElement("li"); - msgList.appendChild(li); - setTextContent(li, subject); - li.ctdlMsgId = msgId; - } - return element; + var element = document.createElement("div"); + var msgList = document.createElement("ul"); + element.appendChild(msgList); + for(msgId in currentlyMarkedRows) { + msgRow = currentlyMarkedRows[msgId]; + var subject = getTextContent(msgRow.getElementsByTagName("td")[0]); + var li = document.createElement("li"); + msgList.appendChild(li); + setTextContent(li, subject); + li.ctdlMsgId = msgId; + } + return element; } var saved_y = 0; function CtdlResizeMouseDown(event) { - $(document).observe('mousemove', CtdlResizeMouseMove); - $(document).observe('mouseup', CtdlResizeMouseUp); - saved_y = event.clientY; + $(document).observe('mousemove', CtdlResizeMouseMove); + $(document).observe('mouseup', CtdlResizeMouseUp); + saved_y = event.clientY; } function sizePreviewPane() { - var preview_pane = document.getElementById("preview_pane"); - var content = $('content'); // we'd like to use prototype methods here - var childElements = content.childElements(); - var sizeOfElementsAbove = 0; - var heightOfContent = content.offsetHeight; - for(var i=0; i