aboutsummaryrefslogtreecommitdiff
path: root/src/util/DragManager.ts
diff options
context:
space:
mode:
authorbob <bcz@cs.brown.edu>2019-01-28 11:21:27 -0500
committerbob <bcz@cs.brown.edu>2019-01-28 11:21:27 -0500
commitf69c9b50f9103ad09bb68fe4087f4165877ebaeb (patch)
tree7faf75fde4062a1db06f91c3fd3fa91b79ef7b9c /src/util/DragManager.ts
parentdb241485f4f9dff0f43cf5e8059ccb7bd8df5b15 (diff)
fixed pan interactions. simplified dragging (I think).
Diffstat (limited to 'src/util/DragManager.ts')
-rw-r--r--src/util/DragManager.ts68
1 files changed, 10 insertions, 58 deletions
diff --git a/src/util/DragManager.ts b/src/util/DragManager.ts
index 89cf45199..da4537845 100644
--- a/src/util/DragManager.ts
+++ b/src/util/DragManager.ts
@@ -1,4 +1,7 @@
-import { Opt } from "../fields/Field";
+import {Opt} from "../fields/Field";
+import {DocumentView} from "../views/nodes/DocumentView";
+import {DocumentDecorations} from "../DocumentDecorations";
+import {SelectionManager} from "./SelectionManager";
export namespace DragManager {
export let rootId = "root";
@@ -20,20 +23,10 @@ export namespace DragManager {
(): void;
}
- export class DragStartEvent {
- private _cancelled: boolean = false;
- get cancelled() { return this._cancelled };
-
- cancel() { this._cancelled = true; };
-
- constructor(readonly x: number, readonly y: number, readonly data: { [id: string]: any }) { }
- }
-
export class DragCompleteEvent {
}
export interface DragHandlers {
- dragStart: (e: DragStartEvent) => void;
dragComplete: (e: DragCompleteEvent) => void;
}
@@ -42,48 +35,18 @@ export namespace DragManager {
}
export class DropEvent {
- constructor(readonly x: number, readonly y: number, readonly data: { [id: string]: any }) { }
+ constructor(readonly x: number, readonly y: number, readonly data: {[ id: string ]: any}) {}
}
export interface DropHandlers {
drop: (e: Event, de: DropEvent) => void;
}
- export function MakeDraggable(element: HTMLElement, options: DragOptions): DragDropDisposer {
- if ("draggable" in element.dataset) {
- throw new Error("Element is already draggable, can't make it draggable again");
- }
- element.dataset["draggable"] = "true";
- const dispose = () => {
- document.removeEventListener("pointerup", upHandler);
- document.removeEventListener("pointermove", startDragHandler);
- }
- const startDragHandler = (e: PointerEvent) => {
- e.stopImmediatePropagation();
- e.preventDefault();
- dispose();
- StartDrag(element, e, options);
- }
- const upHandler = (e: PointerEvent) => {
- dispose();
- };
- const downHandler = (e: PointerEvent) => {
- document.addEventListener("pointermove", startDragHandler);
- document.addEventListener("pointerup", upHandler);
- };
- element.addEventListener("pointerdown", downHandler);
-
- return () => {
- element.removeEventListener("pointerdown", downHandler);
- delete element.dataset["draggable"];
- }
- }
-
export function MakeDropTarget(element: HTMLElement, options: DropOptions): DragDropDisposer {
- if ("draggable" in element.dataset) {
+ if ("canDrop" in element.dataset) {
throw new Error("Element is already droppable, can't make it droppable again");
}
- element.dataset["canDrop"] = "true";
+ element.dataset[ "canDrop" ] = "true";
const handler = (e: Event) => {
const ce = e as CustomEvent<DropEvent>;
options.handlers.drop(e, ce.detail);
@@ -91,11 +54,11 @@ export namespace DragManager {
element.addEventListener("dashOnDrop", handler);
return () => {
element.removeEventListener("dashOnDrop", handler);
- delete element.dataset["canDrop"]
+ delete element.dataset[ "canDrop" ]
};
}
- function StartDrag(ele: HTMLElement, e: PointerEvent, options: DragOptions) {
+ export function StartDrag(ele: HTMLElement, dragData: {[ id: string ]: any}, options: DragOptions) {
if (!dragDiv) {
const root = document.getElementById(rootId);
if (!root) {
@@ -104,17 +67,6 @@ export namespace DragManager {
dragDiv = document.createElement("div");
root.appendChild(dragDiv);
}
- if ((e.buttons & options.buttons) === 0) {
- return;
- }
- e.stopPropagation();
- e.preventDefault();
- let dragData = {};
- let event = new DragStartEvent(e.x, e.y, dragData);
- options.handlers.dragStart(event);
- if (event.cancelled) {
- return;
- }
const w = ele.offsetWidth, h = ele.offsetHeight;
const rect = ele.getBoundingClientRect();
const scaleX = rect.width / w, scaleY = rect.height / h;
@@ -157,7 +109,7 @@ export namespace DragManager {
document.addEventListener("pointerup", upHandler);
}
- function FinishDrag(dragEle: HTMLElement, e: PointerEvent, options: DragOptions, dragData: { [index: string]: any }) {
+ function FinishDrag(dragEle: HTMLElement, e: PointerEvent, options: DragOptions, dragData: {[ index: string ]: any}) {
dragDiv.removeChild(dragEle);
const target = document.elementFromPoint(e.x, e.y);
if (!target) {