📄 window-manager.js
字号:
if (SimileAjax.WindowManager._draggingModeIndicatorElmt != null) {
document.body.removeChild(SimileAjax.WindowManager._draggingModeIndicatorElmt);
SimileAjax.WindowManager._draggingModeIndicatorElmt = null;
}
}
}
};
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;
}
};
SimileAjax.WindowManager._onBodyMouseUp = function(elmt, evt, target) {
if (SimileAjax.WindowManager._draggedElement != null) {
try {
if (SimileAjax.WindowManager._dragging) {
var callback = SimileAjax.WindowManager._draggedElementCallback;
if ("onDragEnd" in callback) {
callback.onDragEnd();
}
if ("droppable" in callback && callback.droppable) {
var dropped = false;
var target = SimileAjax.WindowManager._potentialDropTarget;
if (target != null) {
if ((!("canDropOn" in callback) || callback.canDropOn(target)) &&
(!("canDrop" in target) || target.canDrop(SimileAjax.WindowManager._draggedElement))) {
if ("onDropOn" in callback) {
callback.onDropOn(target);
}
target.ondrop(SimileAjax.WindowManager._draggedElement, SimileAjax.WindowManager._draggingMode);
dropped = true;
}
}
if (!dropped) {
// TODO: do holywood explosion here
}
}
}
} finally {
SimileAjax.WindowManager._cancelDragging();
}
SimileAjax.DOM.cancelEvent(evt);
return false;
}
};
SimileAjax.WindowManager._cancelDragging = function() {
var callback = SimileAjax.WindowManager._draggedElementCallback;
if ("_ghostElmt" in callback) {
var ghostElmt = callback._ghostElmt;
document.body.removeChild(ghostElmt);
delete callback._ghostElmt;
}
if (SimileAjax.WindowManager._dropTargetHighlightElement != null) {
document.body.removeChild(SimileAjax.WindowManager._dropTargetHighlightElement);
SimileAjax.WindowManager._dropTargetHighlightElement = null;
}
if (SimileAjax.WindowManager._draggingModeIndicatorElmt != null) {
document.body.removeChild(SimileAjax.WindowManager._draggingModeIndicatorElmt);
SimileAjax.WindowManager._draggingModeIndicatorElmt = null;
}
SimileAjax.WindowManager._draggedElement = null;
SimileAjax.WindowManager._draggedElementCallback = null;
SimileAjax.WindowManager._potentialDropTarget = null;
SimileAjax.WindowManager._dropTargetHighlightElement = null;
SimileAjax.WindowManager._lastCoords = null;
SimileAjax.WindowManager._ghostCoords = null;
SimileAjax.WindowManager._draggingMode = "";
SimileAjax.WindowManager._dragging = false;
};
SimileAjax.WindowManager._findDropTarget = function(elmt) {
while (elmt != null) {
if ("ondrop" in elmt && (typeof elmt.ondrop) == "function") {
break;
}
elmt = elmt.parentNode;
}
return elmt;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -