@@ -10,6 +10,7 @@ import { DDUtils } from './dd-utils';
1010import { DDBaseImplement , HTMLElementExtendOpt } from './dd-base-impl' ;
1111import { GridItemHTMLElement , DDUIData } from '../types' ;
1212
13+ // TODO: merge with DDDragOpt ?
1314export interface DDDraggableOpt {
1415 appendTo ?: string | HTMLElement ;
1516 containment ?: string | HTMLElement ; // TODO: not implemented yet
@@ -34,19 +35,30 @@ export interface DragOffset {
3435
3536export 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