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]; 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 5c24c9586..c9fb9bdc6 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; }