Index: block.js |
=================================================================== |
--- a/block.js |
+++ b/block.js |
@@ -20,7 +20,6 @@ |
// Attach event listeners |
window.addEventListener("keydown", onKeyDown, false); |
window.addEventListener("dragstart", onDragStart, false); |
- window.addEventListener("drag", onDrag, false); |
window.addEventListener("dragend", onDragEnd, false); |
$("#addButton").click(addFilters); |
@@ -95,40 +94,49 @@ |
); |
} |
-var dragCoords = null; |
+var dragStartX; |
kzar
2015/03/19 16:15:15
Nit: probably should set the start coords to null
Sebastian Noack
2015/03/19 16:52:14
Note that we explicitly check for null when access
kzar
2015/03/19 16:55:01
Wow, it never occurred to me that `10 - null` woul
|
+var dragStartY; |
+var dragEndX = null; |
+var dragEndY = null; |
+ |
function onDragStart(event) |
{ |
- dragCoords = [event.screenX, event.screenY]; |
-} |
- |
-function onDrag(event) |
-{ |
- if (!dragCoords) |
- return; |
- |
- if (!event.screenX && !event.screenY) |
- return; |
- |
- var diff = [event.screenX - dragCoords[0], event.screenY - dragCoords[1]]; |
- if (diff[0] || diff[1]) |
- { |
- ext.backgroundPage.sendMessage( |
- { |
- type: "forward", |
- payload: |
- { |
- type: "clickhide-move", |
- x: diff[0], |
- y: diff[1] |
- } |
- } |
- ); |
- dragCoords = [event.screenX, event.screenY]; |
- } |
+ dragStartX = event.screenX; |
+ dragStartY = event.screenY; |
} |
function onDragEnd(event) |
{ |
- onDrag(event); |
- dragCoords = null; |
+ if (dragEndX == null) |
+ dragEndX = event.screenX; |
+ if (dragEndY == null) |
+ dragEndY = event.screenY; |
+ |
+ ext.backgroundPage.sendMessage({ |
+ type: "forward", |
+ payload: |
+ { |
+ type: "clickhide-move", |
+ x: dragEndX - dragStartX, |
+ y: dragEndY - dragStartY |
+ } |
+ }); |
+ |
+ dragStartX = null; |
+ dragStartY = null; |
+ dragEndX = null; |
+ dragEndY = null; |
} |
+ |
+// The coordinates in the dragend event are unreliable on Safari. So we |
+// need to get the destination coordinates from the drag event instead. |
+// However on Chrome, the coordinates in the drag event are unreliable. |
+// So we need to get the coordinates from dragend event there. |
+if (navigator.userAgent.indexOf(" Version/") != -1) |
+{ |
+ window.addEventListener("drag", function(event) |
+ { |
+ dragEndX = event.screenX; |
+ dragEndY = event.screenY; |
+ }, false); |
+} |