UNPKG

@paperbits/common

Version:
50 lines (38 loc) 1.67 kB
import { Events } from "../../events"; import { DragManager, DragSourceConfig } from "../../ui/draggables"; export class DragSource { private dragManager: DragManager; public element: HTMLElement; public configuration: DragSourceConfig; public initialOffsetX: number; public initialOffsetY: number; public initialPointerX: number; public initialPointerY: number; constructor(element: HTMLElement, config: DragSourceConfig, dragManager: DragManager) { this.element = element; this.configuration = config; this.dragManager = dragManager; this.onPointerDown = this.onPointerDown.bind(this); element.addEventListener(Events.MouseDown, this.onPointerDown); element["dragSource"] = this; } private onPointerDown(event: MouseEvent): void { if (event.ctrlKey || event.buttons !== 1 || event["handled"]) { return; } event["handled"] = true; const targetElement = event.target as HTMLElement; this.beginDrag(targetElement, event.clientX, event.clientY); } public beginDrag(targetElement: HTMLElement, clientX: number, clientY: number): void { if (this.configuration.preventDragging && this.configuration.preventDragging(targetElement)) { return; } const rect = this.element.getBoundingClientRect(); this.initialOffsetX = clientX - rect.left; this.initialOffsetY = clientY - rect.top; this.initialPointerX = clientX; this.initialPointerY = clientY; this.dragManager.onPointerDown(this); } }