From 088dc10485ea48d45f868afb6808a64f0c9cbfd1 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Fri, 27 Feb 2009 19:09:08 +0000 Subject: [PATCH 1/2] Monotone-Parent: 485b2bbaa9cf22a075daa65673c3fac7256a86e4 Monotone-Revision: fe48391f8342ece1fa8c34044cf6b2fa38e02918 Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2009-02-27T19:09:08 Monotone-Branch: ca.inverse.sogo --- UI/Scheduler/UIxAppointmentEditor.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/Scheduler/UIxAppointmentEditor.m b/UI/Scheduler/UIxAppointmentEditor.m index a28b0828f..a9bf600e7 100644 --- a/UI/Scheduler/UIxAppointmentEditor.m +++ b/UI/Scheduler/UIxAppointmentEditor.m @@ -398,7 +398,7 @@ [self event]; - result = [context response]; + result = [self responseWithStatus: 200]; user = [context activeUser]; timeZone = [user timeZone]; dateFormatter = [user dateFormatterInContext: context]; From b63d4f2622e39da9e117d86d292226e1cb37ab86 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Fri, 27 Feb 2009 19:42:44 +0000 Subject: [PATCH 2/2] JavaScript rows selection improvements Monotone-Parent: fe48391f8342ece1fa8c34044cf6b2fa38e02918 Monotone-Revision: 8c77afb1abc1cfa1e4e6fdd86195aca95b508f1a Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2009-02-27T19:42:44 Monotone-Branch: ca.inverse.sogo --- UI/WebServerResources/HTMLElement.js | 58 ++++++++++++++++------------ UI/WebServerResources/generic.js | 8 ++-- 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/UI/WebServerResources/HTMLElement.js b/UI/WebServerResources/HTMLElement.js index 8781cf3fc..354fa22ee 100644 --- a/UI/WebServerResources/HTMLElement.js +++ b/UI/WebServerResources/HTMLElement.js @@ -96,39 +96,36 @@ Element.addMethods( getSelectedNodes: function(element) { element = $(element); - var selArray = new Array(); - - for (var i = 0; i < element.childNodes.length; i++) { - node = element.childNodes.item(i); - if (node.nodeType == 1 - && isNodeSelected(node)) - selArray.push(node); - } - - return selArray; + + if (!element.selectedElements) + element.selectedElements = new Array(); + + return element.selectedElements; }, getSelectedNodesId: function(element) { element = $(element); - var selArray = new Array(); - - for (var i = 0; i < element.childNodes.length; i++) { - node = element.childNodes.item(i); - if (node.nodeType == 1 - && isNodeSelected(node)) { - selArray.push(node.getAttribute("id")); } + + var selArray = new Array(); + if (element.selectedElements) { + for (var i = 0; i < element.selectedElements.length; i++) { + var node = element.selectedElements[i]; + selArray.push(node.getAttribute("id")); + } } + else + element.selectedElements = new Array(); return selArray; }, onContextMenu: function(element, event) { element = $(element); - var popup = element.sogoContextMenu; if (document.currentPopupMenu) hideMenu(document.currentPopupMenu); + var popup = element.sogoContextMenu; var menuTop = Event.pointerY(event); var menuLeft = Event.pointerX(event); var heightDiff = (window.height() @@ -162,6 +159,15 @@ Element.addMethods( selectElement: function(element) { element = $(element); element.addClassName('_selected'); + + var parent = element.up(); + if (!parent.selectedElements) + // Selected nodes are kept in a array at the + // container level. + parent.selectedElements = new Array(); + for (var i = 0; i < parent.selectedElements.length; i++) + if (parent.selectedElements[i] == element) return; + parent.selectedElements.push(element); // use index instead ? }, selectRange: function(element, startIndex, endIndex) { @@ -192,16 +198,20 @@ Element.addMethods( deselect: function(element) { element = $(element); element.removeClassName('_selected'); - }, + + var parent = element.up(); + if (parent.selectedElements) + parent.selectedElements = parent.selectedElements.without(element); + }, deselectAll: function(element) { element = $(element); - for (var i = 0; i < element.childNodes.length; i++) { - var node = element.childNodes.item(i); - if (node.nodeType == 1) - $(node).deselect(); + if (element.selectedElements) { + for (var i = 0; i < element.selectedElements.length; i++) + element.selectedElements[i].removeClassName('_selected'); + element.selectedElements = null; } - }, + }, setCaretTo: function(element, pos) { element = $(element); diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index 8627cd334..28e8e3303 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -256,8 +256,8 @@ function openMailTo(senderMailTo) { if (mailto.length > 0) openMailComposeWindow(ApplicationBaseURL - + "../Mail/compose?mailto=" + mailto - + ((subject.length > 0)?"?subject="+subject:"")); + + "../Mail/compose?mailto=" + encodeURI(mailto) + + ((subject.length > 0)?"?subject=" + encodeURI(subject):"")); return false; /* stop following the link */ } @@ -592,6 +592,7 @@ function onRowClick(event) { $(node.parentNode).selectRange(lastClickedRow, rowIndex); } else if (isNodeSelected(node)) { $(node).deselect(); + rowIndex = null; } else { $(node).selectElement(); } @@ -609,7 +610,8 @@ function onRowClick(event) { parentNode.fire("mousedown"); } } - lastClickedRow = rowIndex; + if (rowIndex) + lastClickedRow = rowIndex; return true; }