Skip to content

Commit 7acec23

Browse files
authored
Merge pull request #1487 from adumesny/develop
h5: code cleanup before release
2 parents af53b5b + e4ac6b0 commit 7acec23

File tree

8 files changed

+248
-189
lines changed

8 files changed

+248
-189
lines changed

src/h5/dd-base-impl.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
*/
88
export type EventCallback = (event: Event) => boolean|void;
99
export abstract class DDBaseImplement {
10-
// returns the enable state, but you have to call enable()/disable() to change (as other things need to happen)
10+
/** returns the enable state, but you have to call enable()/disable() to change (as other things need to happen) */
1111
public get disabled(): boolean { return this._disabled; }
1212

13+
/** @internal */
1314
private _disabled = false;
15+
/** @internal */
1416
private _eventRegister: {
1517
[eventName: string]: EventCallback;
1618
} = {};

src/h5/dd-draggable.ts

Lines changed: 71 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { DDUtils } from './dd-utils';
1010
import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl';
1111
import { GridItemHTMLElement, DDUIData } from '../types';
1212

13+
// TODO: merge with DDDragOpt ?
1314
export interface DDDraggableOpt {
1415
appendTo?: string | HTMLElement;
1516
containment?: string | HTMLElement; // TODO: not implemented yet
@@ -34,19 +35,30 @@ export interface DragOffset {
3435

3536
export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt<DDDraggableOpt> {
3637
public el: HTMLElement;
37-
public helper: HTMLElement;
3838
public option: DDDraggableOpt;
39-
public dragOffset: DragOffset;
40-
public dragElementOriginStyle: Array<string>;
41-
public dragFollowTimer: number;
42-
public mouseDownElement: HTMLElement;
43-
public dragging = false;
44-
public paintTimer: number;
45-
public parentOriginStylePosition: string;
46-
public helperContainment: HTMLElement;
39+
public helper: HTMLElement; // used by GridStackDDNative
4740

41+
/** @internal */
42+
private dragOffset: DragOffset;
43+
/** @internal */
44+
private dragElementOriginStyle: Array<string>;
45+
/** @internal */
46+
private dragFollowTimer: number;
47+
/** @internal */
48+
private mouseDownElement: HTMLElement;
49+
/** @internal */
50+
private dragging = false;
51+
/** @internal */
52+
private paintTimer: number;
53+
/** @internal */
54+
private parentOriginStylePosition: string;
55+
/** @internal */
56+
private helperContainment: HTMLElement;
57+
/** @internal */
4858
private static basePosition: 'fixed' | 'absolute' = 'absolute';
59+
/** @internal */
4960
private static dragEventListenerOption = DDUtils.isEventSupportPassiveOption ? { capture: true, passive: true } : true;
61+
/** @internal */
5062
private static originStyleProp = ['transition', 'pointerEvents', 'position',
5163
'left', 'top', 'opacity', 'zIndex', 'width', 'height', 'willChange'];
5264

@@ -55,13 +67,16 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
5567
this.el = el;
5668
this.option = option;
5769
// create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions)
58-
this.mouseDown = this.mouseDown.bind(this);
59-
this.dragStart = this.dragStart.bind(this);
60-
this.drag = this.drag.bind(this);
61-
this.dragEnd = this.dragEnd.bind(this);
62-
this.dragFollow = this.dragFollow.bind(this);
70+
this._mouseDown = this._mouseDown.bind(this);
71+
this._dragStart = this._dragStart.bind(this);
72+
this._drag = this._drag.bind(this);
73+
this._dragEnd = this._dragEnd.bind(this);
74+
this._dragFollow = this._dragFollow.bind(this);
6375

64-
this.init();
76+
this.el.draggable = true;
77+
this.el.classList.add('ui-draggable');
78+
this.el.addEventListener('mousedown', this._mouseDown);
79+
this.el.addEventListener('dragstart', this._dragStart);
6580
}
6681

6782
public on(event: 'drag' | 'dragstart' | 'dragstop', callback: (event: DragEvent) => void): void {
@@ -89,12 +104,12 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
89104
// Destroy while dragging should remove dragend listener and manually trigger
90105
// dragend, otherwise dragEnd can't perform dragstop because eventRegistry is
91106
// destroyed.
92-
this.dragEnd({} as DragEvent);
107+
this._dragEnd({} as DragEvent);
93108
}
94109
this.el.draggable = false;
95110
this.el.classList.remove('ui-draggable');
96-
this.el.removeEventListener('mousedown', this.mouseDown);
97-
this.el.removeEventListener('dragstart', this.dragStart);
111+
this.el.removeEventListener('mousedown', this._mouseDown);
112+
this.el.removeEventListener('dragstart', this._dragStart);
98113
delete this.el;
99114
delete this.helper;
100115
delete this.option;
@@ -106,19 +121,13 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
106121
return this;
107122
}
108123

109-
protected init(): DDDraggable {
110-
this.el.draggable = true;
111-
this.el.classList.add('ui-draggable');
112-
this.el.addEventListener('mousedown', this.mouseDown);
113-
this.el.addEventListener('dragstart', this.dragStart);
114-
return this;
115-
}
116-
117-
private mouseDown(event: MouseEvent): void {
124+
/** @internal */
125+
private _mouseDown(event: MouseEvent): void {
118126
this.mouseDownElement = event.target as HTMLElement;
119127
}
120128

121-
private dragStart(event: DragEvent): void {
129+
/** @internal */
130+
private _dragStart(event: DragEvent): void {
122131
if (this.option.handle && !(
123132
this.mouseDownElement
124133
&& this.mouseDownElement.matches(
@@ -129,25 +138,26 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
129138
return;
130139
}
131140
DDManager.dragElement = this;
132-
this.helper = this.createHelper(event);
133-
this.setupHelperContainmentStyle();
134-
this.dragOffset = this.getDragOffset(event, this.el, this.helperContainment);
141+
this.helper = this._createHelper(event);
142+
this._setupHelperContainmentStyle();
143+
this.dragOffset = this._getDragOffset(event, this.el, this.helperContainment);
135144
const ev = DDUtils.initEvent<DragEvent>(event, { target: this.el, type: 'dragstart' });
136145
if (this.helper !== this.el) {
137-
this.setupDragFollowNodeNotifyStart(ev);
146+
this._setupDragFollowNodeNotifyStart(ev);
138147
} else {
139148
this.dragFollowTimer = window.setTimeout(() => {
140149
delete this.dragFollowTimer;
141-
this.setupDragFollowNodeNotifyStart(ev);
150+
this._setupDragFollowNodeNotifyStart(ev);
142151
}, 0);
143152
}
144-
this.cancelDragGhost(event);
153+
this._cancelDragGhost(event);
145154
}
146155

147-
protected setupDragFollowNodeNotifyStart(ev: Event): DDDraggable {
148-
this.setupHelperStyle();
149-
document.addEventListener('dragover', this.drag, DDDraggable.dragEventListenerOption);
150-
this.el.addEventListener('dragend', this.dragEnd);
156+
/** @internal */
157+
private _setupDragFollowNodeNotifyStart(ev: Event): DDDraggable {
158+
this._setupHelperStyle();
159+
document.addEventListener('dragover', this._drag, DDDraggable.dragEventListenerOption);
160+
this.el.addEventListener('dragend', this._dragEnd);
151161
if (this.option.start) {
152162
this.option.start(ev, this.ui());
153163
}
@@ -157,16 +167,18 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
157167
return this;
158168
}
159169

160-
private drag(event: DragEvent): void {
161-
this.dragFollow(event);
170+
/** @internal */
171+
private _drag(event: DragEvent): void {
172+
this._dragFollow(event);
162173
const ev = DDUtils.initEvent<DragEvent>(event, { target: this.el, type: 'drag' });
163174
if (this.option.drag) {
164175
this.option.drag(ev, this.ui());
165176
}
166177
this.triggerEvent('drag', ev);
167178
}
168179

169-
private dragEnd(event: DragEvent): void {
180+
/** @internal */
181+
private _dragEnd(event: DragEvent): void {
170182
if (this.dragFollowTimer) {
171183
clearTimeout(this.dragFollowTimer);
172184
delete this.dragFollowTimer;
@@ -175,14 +187,14 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
175187
if (this.paintTimer) {
176188
cancelAnimationFrame(this.paintTimer);
177189
}
178-
document.removeEventListener('dragover', this.drag, DDDraggable.dragEventListenerOption);
179-
this.el.removeEventListener('dragend', this.dragEnd);
190+
document.removeEventListener('dragover', this._drag, DDDraggable.dragEventListenerOption);
191+
this.el.removeEventListener('dragend', this._dragEnd);
180192
}
181193
this.dragging = false;
182194
this.helper.classList.remove('ui-draggable-dragging');
183195
this.helperContainment.style.position = this.parentOriginStylePosition || null;
184196
if (this.helper === this.el) {
185-
this.removeHelperStyle();
197+
this._removeHelperStyle();
186198
} else {
187199
this.helper.remove();
188200
}
@@ -196,7 +208,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
196208
delete this.mouseDownElement;
197209
}
198210

199-
private createHelper(event: DragEvent): HTMLElement {
211+
/** @internal */
212+
private _createHelper(event: DragEvent): HTMLElement {
200213
const helperIsFunction = (typeof this.option.helper) === 'function';
201214
const helper = (helperIsFunction
202215
? (this.option.helper as ((event: Event) => HTMLElement)).apply(this.el, [event])
@@ -213,7 +226,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
213226
return helper;
214227
}
215228

216-
private setupHelperStyle(): DDDraggable {
229+
/** @internal */
230+
private _setupHelperStyle(): DDDraggable {
217231
this.helper.style.pointerEvents = 'none';
218232
this.helper.style.width = this.dragOffset.width + 'px';
219233
this.helper.style.height = this.dragOffset.height + 'px';
@@ -229,7 +243,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
229243
return this;
230244
}
231245

232-
private removeHelperStyle(): DDDraggable {
246+
/** @internal */
247+
private _removeHelperStyle(): DDDraggable {
233248
// don't bother restoring styles if we're gonna remove anyway...
234249
if (! (this.helper as GridItemHTMLElement)?.gridstackNode?._isAboutToRemove) {
235250
DDDraggable.originStyleProp.forEach(prop => {
@@ -240,7 +255,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
240255
return this;
241256
}
242257

243-
private dragFollow(event: DragEvent): void {
258+
/** @internal */
259+
private _dragFollow(event: DragEvent): void {
244260
if (this.paintTimer) {
245261
cancelAnimationFrame(this.paintTimer);
246262
}
@@ -257,7 +273,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
257273
});
258274
}
259275

260-
private setupHelperContainmentStyle(): DDDraggable {
276+
/** @internal */
277+
private _setupHelperContainmentStyle(): DDDraggable {
261278
this.helperContainment = this.helper.parentElement;
262279
if (this.option.basePosition !== 'fixed') {
263280
this.parentOriginStylePosition = this.helperContainment.style.position;
@@ -268,7 +285,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
268285
return this;
269286
}
270287

271-
private cancelDragGhost(e: DragEvent): DDDraggable {
288+
/** @internal */
289+
private _cancelDragGhost(e: DragEvent): DDDraggable {
272290
if (e.dataTransfer != null) {
273291
e.dataTransfer.setData('text', '');
274292
}
@@ -288,7 +306,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
288306
return this;
289307
}
290308

291-
private getDragOffset(event: DragEvent, el: HTMLElement, parent: HTMLElement): DragOffset {
309+
/** @internal */
310+
private _getDragOffset(event: DragEvent, el: HTMLElement, parent: HTMLElement): DragOffset {
292311

293312
// in case ancestor has transform/perspective css properties that change the viewpoint
294313
let xformOffsetX = 0;
@@ -323,7 +342,7 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt
323342
};
324343
}
325344

326-
/** public -> called by DDDroppable as well */
345+
/** @internal TODO: set to public as called by DDDroppable! */
327346
public ui = (): DDUIData => {
328347
const containmentEl = this.el.parentElement;
329348
const containmentRect = containmentEl.getBoundingClientRect();

0 commit comments

Comments
 (0)