diff --git a/ChangeLog b/ChangeLog index 560edfdb8..886510d22 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2006-11-08 Wolfgang Sourdeau + * UI/WebServerResources/HTMLTableElement.js: added code to + simulate XUL drag n drop events. This code will possibly be moved + to HTMLElement.js instead later... + * SoObjects/Contacts/SOGoContactLDAPFolder.m ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as below. diff --git a/UI/WebServerResources/HTMLTableElement.js b/UI/WebServerResources/HTMLTableElement.js index b83a42d66..45f792827 100644 --- a/UI/WebServerResources/HTMLTableElement.js +++ b/UI/WebServerResources/HTMLTableElement.js @@ -28,3 +28,44 @@ HTMLTableElement.prototype.deselectAll = function() { for (var i = 0; i < nodes.length; i++) deselectNode(nodes[i]); } + +/* "draggesture" seems inhibited on Mozilla so we create a work-around */ +HTMLTableElement.prototype.workAroundDragGesture = function() { + this._dragGestureStartPoint = null; + this.addEventListener("mousedown", this._dragGestureMouseDownHandler, false); +} + +HTMLTableElement.prototype._dragGestureMouseDownHandler = function(event) { + this.addEventListener("mousemove", this._dragGestureMouseMoveHandler, false); + this.addEventListener("mousedown", this._dragGestureMouseUpHandler, false); + this._dragGestureStartPoint = new Array(event.clientX, event.clientY); + this._dragGestureTarget = event.target; +} + +HTMLTableElement.prototype._dragGestureMouseUpHandler = function(event) { + this.removeEventListener("mousemove", this._dragGestureMouseMoveHandler, false); + this.removeEventListener("mousedown", this._dragGestureMouseUpHandler, false); + this._dragGestureStartPoint = null; +} + +HTMLTableElement.prototype._dragGestureMouseMoveHandler = function(event) { + var deltaX = event.clientX - this._dragGestureStartPoint[0]; + var deltaY = event.clientX - this._dragGestureStartPoint[0]; + if (Math.sqrt((deltaX * deltaX) + (deltaY * deltaY)) > 10) { + this.removeEventListener("mousemove", this._dragGestureMouseMoveHandler, false); + this.removeEventListener("mousedown", this._dragGestureMouseUpHandler, false); + this._dragGestureStartPoint = null; + var dragStart = document.createEvent("MouseEvents"); + dragStart.initMouseEvent("draggesture-hack", true, true, window, + event.detail, event.screenX, event.screenY, + event.clientX, event.clientY, event.ctrlKey, + event.altKey, event.shiftKey, event.metaKey, + event.button, null); + this.dispatchEvent(dragStart); + window.addEventListener("mouseup", document.DNDManager.destinationDrop, false); + window.addEventListener("mouseover", document.DNDManager.destinationEnter, false); + window.addEventListener("mousemove", document.DNDManager.destinationOver, false); + window.addEventListener("mouseout", document.DNDManager.destinationExit, false); + event.returnValue = false; + } +}