Make DragdropHandler more bulletproof

This commit is contained in:
DanyaPostfactum 2014-08-24 00:37:06 +10:00
commit f9591eb16f

View file

@ -84,7 +84,7 @@ function DragdropHandler(mouseHandler) {
if (useragent.isOpera) { if (useragent.isOpera) {
editor.container.appendChild(blankImage); editor.container.appendChild(blankImage);
// force layout // force layout
blankImage._top = blankImage.offsetTop; blankImage.scrollTop = 0;
} }
dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0); dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);
if (useragent.isOpera) { if (useragent.isOpera) {
@ -115,6 +115,8 @@ function DragdropHandler(mouseHandler) {
this.onDragEnter = function(e) { this.onDragEnter = function(e) {
if (editor.getReadOnly() || !canAccept(e.dataTransfer)) if (editor.getReadOnly() || !canAccept(e.dataTransfer))
return; return;
x = e.clientX;
y = e.clientY;
if (!dragSelectionMarker) if (!dragSelectionMarker)
addDragMarker(); addDragMarker();
counter++; counter++;
@ -126,6 +128,8 @@ function DragdropHandler(mouseHandler) {
this.onDragOver = function(e) { this.onDragOver = function(e) {
if (editor.getReadOnly() || !canAccept(e.dataTransfer)) if (editor.getReadOnly() || !canAccept(e.dataTransfer))
return; return;
x = e.clientX;
y = e.clientY;
// Opera doesn't trigger dragenter event on drag start // Opera doesn't trigger dragenter event on drag start
if (!dragSelectionMarker) { if (!dragSelectionMarker) {
addDragMarker(); addDragMarker();
@ -133,8 +137,6 @@ function DragdropHandler(mouseHandler) {
} }
if (onMouseMoveTimer !== null) if (onMouseMoveTimer !== null)
onMouseMoveTimer = null; onMouseMoveTimer = null;
x = e.clientX;
y = e.clientY;
e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);
return event.preventDefault(e); return event.preventDefault(e);
@ -150,7 +152,7 @@ function DragdropHandler(mouseHandler) {
}; };
this.onDrop = function(e) { this.onDrop = function(e) {
if (!dragSelectionMarker) if (!dragCursor)
return; return;
var dataTransfer = e.dataTransfer; var dataTransfer = e.dataTransfer;
if (isInternal) { if (isInternal) {
@ -264,6 +266,7 @@ function DragdropHandler(mouseHandler) {
if (editor.isFocused()) if (editor.isFocused())
editor.renderer.$cursorLayer.setBlinking(false); editor.renderer.$cursorLayer.setBlinking(false);
clearInterval(timerId); clearInterval(timerId);
onDragInterval();
timerId = setInterval(onDragInterval, 20); timerId = setInterval(onDragInterval, 20);
counter = 0; counter = 0;
event.addListener(document, "mousemove", onMouseMove); event.addListener(document, "mousemove", onMouseMove);
@ -279,6 +282,7 @@ function DragdropHandler(mouseHandler) {
if (editor.isFocused() && !isInternal) if (editor.isFocused() && !isInternal)
editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly()); editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());
range = null; range = null;
dragCursor = null;
counter = 0; counter = 0;
autoScrollStartTime = null; autoScrollStartTime = null;
cursorMovedTime = null; cursorMovedTime = null;