in assets/scripts/api.simile-widgets.org/ajax/2.2.3/scripts/window-manager.js [217:338]
SimileAjax.WindowManager._onBodyMouseMove = function(elmt, evt, target) {
if (SimileAjax.WindowManager._draggedElement != null) {
var callback = SimileAjax.WindowManager._draggedElementCallback;
var lastCoords = SimileAjax.WindowManager._lastCoords;
var diffX = evt.clientX - lastCoords.x;
var diffY = evt.clientY - lastCoords.y;
if (!SimileAjax.WindowManager._dragging) {
if (Math.abs(diffX) > 5 || Math.abs(diffY) > 5) {
try {
if ("onDragStart" in callback) {
callback.onDragStart();
}
if ("ghost" in callback && callback.ghost) {
var draggedElmt = SimileAjax.WindowManager._draggedElement;
SimileAjax.WindowManager._ghostCoords = SimileAjax.DOM.getPageCoordinates(draggedElmt);
SimileAjax.WindowManager._ghostCoords.left += diffX;
SimileAjax.WindowManager._ghostCoords.top += diffY;
var ghostElmt = draggedElmt.cloneNode(true);
ghostElmt.style.position = "absolute";
ghostElmt.style.left = SimileAjax.WindowManager._ghostCoords.left + "px";
ghostElmt.style.top = SimileAjax.WindowManager._ghostCoords.top + "px";
ghostElmt.style.zIndex = 1000;
SimileAjax.Graphics.setOpacity(ghostElmt, 50);
document.body.appendChild(ghostElmt);
callback._ghostElmt = ghostElmt;
}
SimileAjax.WindowManager._dragging = true;
SimileAjax.WindowManager._lastCoords = { x: evt.clientX, y: evt.clientY };
document.body.focus();
} catch (e) {
SimileAjax.Debug.exception("WindowManager: Error handling mouse down", e);
SimileAjax.WindowManager._cancelDragging();
}
}
} else {
try {
SimileAjax.WindowManager._lastCoords = { x: evt.clientX, y: evt.clientY };
if ("onDragBy" in callback) {
callback.onDragBy(diffX, diffY);
}
if ("_ghostElmt" in callback) {
var ghostElmt = callback._ghostElmt;
SimileAjax.WindowManager._ghostCoords.left += diffX;
SimileAjax.WindowManager._ghostCoords.top += diffY;
ghostElmt.style.left = SimileAjax.WindowManager._ghostCoords.left + "px";
ghostElmt.style.top = SimileAjax.WindowManager._ghostCoords.top + "px";
if (SimileAjax.WindowManager._draggingModeIndicatorElmt != null) {
var indicatorElmt = SimileAjax.WindowManager._draggingModeIndicatorElmt;
indicatorElmt.style.left = (SimileAjax.WindowManager._ghostCoords.left - 16) + "px";
indicatorElmt.style.top = SimileAjax.WindowManager._ghostCoords.top + "px";
}
if ("droppable" in callback && callback.droppable) {
var coords = SimileAjax.DOM.getEventPageCoordinates(evt);
var target = SimileAjax.DOM.hittest(
coords.x, coords.y,
[ SimileAjax.WindowManager._ghostElmt,
SimileAjax.WindowManager._dropTargetHighlightElement
]
);
target = SimileAjax.WindowManager._findDropTarget(target);
if (target != SimileAjax.WindowManager._potentialDropTarget) {
if (SimileAjax.WindowManager._dropTargetHighlightElement != null) {
document.body.removeChild(SimileAjax.WindowManager._dropTargetHighlightElement);
SimileAjax.WindowManager._dropTargetHighlightElement = null;
SimileAjax.WindowManager._potentialDropTarget = null;
}
var droppable = false;
if (target != null) {
if ((!("canDropOn" in callback) || callback.canDropOn(target)) &&
(!("canDrop" in target) || target.canDrop(SimileAjax.WindowManager._draggedElement))) {
droppable = true;
}
}
if (droppable) {
var border = 4;
var targetCoords = SimileAjax.DOM.getPageCoordinates(target);
var highlight = document.createElement("div");
highlight.style.border = border + "px solid yellow";
highlight.style.backgroundColor = "yellow";
highlight.style.position = "absolute";
highlight.style.left = targetCoords.left + "px";
highlight.style.top = targetCoords.top + "px";
highlight.style.width = (target.offsetWidth - border * 2) + "px";
highlight.style.height = (target.offsetHeight - border * 2) + "px";
SimileAjax.Graphics.setOpacity(highlight, 30);
document.body.appendChild(highlight);
SimileAjax.WindowManager._potentialDropTarget = target;
SimileAjax.WindowManager._dropTargetHighlightElement = highlight;
}
}
}
}
} catch (e) {
SimileAjax.Debug.exception("WindowManager: Error handling mouse move", e);
SimileAjax.WindowManager._cancelDragging();
}
}
SimileAjax.DOM.cancelEvent(evt);
return false;
}
};