Skip to content

Commit

Permalink
attach drag handlers to root
Browse files Browse the repository at this point in the history
  • Loading branch information
sgratzl committed Apr 14, 2020
1 parent 5b00f94 commit edfc616
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 6 deletions.
19 changes: 13 additions & 6 deletions src/internal/drag.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import {cssClass} from '../styles';

/** @internal */
export interface IDragHandleOptions {
attachRoot?: boolean;
/**
* drag base container
* @default handle parentElement
Expand Down Expand Up @@ -38,6 +40,8 @@ export function dragHandle(handle: HTMLElement | SVGElement, options: Partial<ID
minDelta: 2
}, options);

let ueberElement: HTMLElement | null = null;

// converts the given x coordinate to be relative to the given element
const toContainerRelative = (x: number, elem: HTMLElement | SVGElement) => {
const rect = elem.getBoundingClientRect();
Expand Down Expand Up @@ -73,9 +77,10 @@ export function dragHandle(handle: HTMLElement | SVGElement, options: Partial<ID
evt.preventDefault();

const end = toContainerRelative(evt.clientX, o.container) - handleShift;
o.container.removeEventListener('mousemove', <any>mouseMove);
o.container.removeEventListener('mouseup', <any>mouseUp);
o.container.removeEventListener('mouseleave', <any>mouseUp);
ueberElement!.removeEventListener('mousemove', <any>mouseMove);
ueberElement!.removeEventListener('mouseup', <any>mouseUp);
ueberElement!.removeEventListener('mouseleave', <any>mouseUp);
ueberElement!.classList.remove(cssClass('dragging'));

if (Math.abs(start - end) < 2) {
//ignore
Expand All @@ -96,9 +101,11 @@ export function dragHandle(handle: HTMLElement | SVGElement, options: Partial<ID
start = last = toContainerRelative(evt.clientX, o.container) - handleShift;

// register other event listeners
o.container.addEventListener('mousemove', <any>mouseMove);
o.container.addEventListener('mouseup', <any>mouseUp);
o.container.addEventListener('mouseleave', <any>mouseUp);
ueberElement = <HTMLElement>handle.closest('body') || <HTMLElement>handle.closest(`.${cssClass()}`)!; // take the whole body or root lineup
ueberElement.addEventListener('mousemove', <any>mouseMove);
ueberElement.addEventListener('mouseup', <any>mouseUp);
ueberElement.addEventListener('mouseleave', <any>mouseUp);
ueberElement!.classList.add(cssClass('dragging'));

o.onStart(handle, start, 0, evt);
};
Expand Down
4 changes: 4 additions & 0 deletions src/styles/engine/_header.scss
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,10 @@
cursor: col-resize !important;
}

.#{$lu_css_prefix}-dragging {
cursor: ew-resize !important;
}

// FIXME
.#{$lu_css_prefix}-dialog-sub-nested > section {
margin-bottom: $lu_engine_grip_gap + 15px;
Expand Down

0 comments on commit edfc616

Please sign in to comment.