gridstack 5.1.0 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -42
- package/dist/{h5/dd-base-impl.d.ts → dd-base-impl.d.ts} +1 -1
- package/dist/{h5/dd-base-impl.js → dd-base-impl.js} +1 -3
- package/dist/dd-base-impl.js.map +1 -0
- package/dist/{es5/h5/dd-draggable.d.ts → dd-draggable.d.ts} +6 -7
- package/dist/dd-draggable.js +313 -0
- package/dist/dd-draggable.js.map +1 -0
- package/dist/{h5/dd-droppable.d.ts → dd-droppable.d.ts} +3 -2
- package/dist/dd-droppable.js +149 -0
- package/dist/dd-droppable.js.map +1 -0
- package/dist/{h5/dd-element.d.ts → dd-element.d.ts} +2 -2
- package/dist/{h5/dd-element.js → dd-element.js} +1 -1
- package/dist/dd-element.js.map +1 -0
- package/dist/dd-gridstack.d.ts +36 -0
- package/dist/{gridstack-dd.js → dd-gridstack.js} +159 -69
- package/dist/dd-gridstack.js.map +1 -0
- package/dist/dd-manager.d.ts +20 -0
- package/dist/{h5/dd-manager.js → dd-manager.js} +4 -1
- package/dist/dd-manager.js.map +1 -0
- package/dist/{es5/h5/dd-resizable-handle.d.ts → dd-resizable-handle.d.ts} +1 -1
- package/dist/{h5/dd-resizable-handle.js → dd-resizable-handle.js} +32 -8
- package/dist/dd-resizable-handle.js.map +1 -0
- package/dist/{es5/h5/dd-resizable.d.ts → dd-resizable.d.ts} +2 -2
- package/dist/{h5/dd-resizable.js → dd-resizable.js} +41 -28
- package/dist/dd-resizable.js.map +1 -0
- package/dist/dd-touch.d.ts +33 -0
- package/dist/dd-touch.js +179 -0
- package/dist/dd-touch.js.map +1 -0
- package/dist/es5/{h5/dd-base-impl.d.ts → dd-base-impl.d.ts} +1 -1
- package/dist/es5/{h5/dd-base-impl.js → dd-base-impl.js} +1 -3
- package/dist/es5/dd-base-impl.js.map +1 -0
- package/dist/{h5 → es5}/dd-draggable.d.ts +6 -7
- package/dist/es5/dd-draggable.js +335 -0
- package/dist/es5/dd-draggable.js.map +1 -0
- package/dist/es5/{h5/dd-droppable.d.ts → dd-droppable.d.ts} +3 -2
- package/dist/es5/dd-droppable.js +180 -0
- package/dist/es5/dd-droppable.js.map +1 -0
- package/dist/es5/{h5/dd-element.d.ts → dd-element.d.ts} +2 -2
- package/dist/es5/{h5/dd-element.js → dd-element.js} +1 -1
- package/dist/es5/dd-element.js.map +1 -0
- package/dist/es5/dd-gridstack.d.ts +36 -0
- package/dist/es5/{gridstack-dd.js → dd-gridstack.js} +169 -88
- package/dist/es5/dd-gridstack.js.map +1 -0
- package/dist/es5/dd-manager.d.ts +20 -0
- package/dist/es5/{h5/dd-manager.js → dd-manager.js} +4 -1
- package/dist/es5/dd-manager.js.map +1 -0
- package/dist/{h5 → es5}/dd-resizable-handle.d.ts +1 -1
- package/dist/es5/{h5/dd-resizable-handle.js → dd-resizable-handle.js} +32 -8
- package/dist/es5/dd-resizable-handle.js.map +1 -0
- package/dist/{h5 → es5}/dd-resizable.d.ts +2 -2
- package/dist/es5/{h5/dd-resizable.js → dd-resizable.js} +41 -28
- package/dist/es5/dd-resizable.js.map +1 -0
- package/dist/es5/dd-touch.d.ts +33 -0
- package/dist/es5/dd-touch.js +182 -0
- package/dist/es5/dd-touch.js.map +1 -0
- package/dist/es5/gridstack-all.js +3 -0
- package/dist/{gridstack-static.js.LICENSE.txt → es5/gridstack-all.js.LICENSE.txt} +1 -1
- package/dist/es5/gridstack-all.js.map +1 -0
- package/dist/es5/gridstack-engine.d.ts +2 -3
- package/dist/es5/gridstack-engine.js +18 -18
- package/dist/es5/gridstack-engine.js.map +1 -1
- package/dist/es5/gridstack-poly.js +1 -1
- package/dist/es5/gridstack.d.ts +8 -9
- package/dist/es5/gridstack.js +47 -35
- package/dist/es5/gridstack.js.map +1 -1
- package/dist/es5/types.d.ts +12 -16
- package/dist/es5/types.js +1 -1
- package/dist/es5/types.js.map +1 -1
- package/dist/es5/utils.d.ts +11 -1
- package/dist/es5/utils.js +67 -6
- package/dist/es5/utils.js.map +1 -1
- package/dist/gridstack-all.js +3 -0
- package/dist/{es5/gridstack-h5.js.LICENSE.txt → gridstack-all.js.LICENSE.txt} +1 -1
- package/dist/gridstack-all.js.map +1 -0
- package/dist/gridstack-engine.d.ts +2 -3
- package/dist/gridstack-engine.js +17 -18
- package/dist/gridstack-engine.js.map +1 -1
- package/dist/gridstack.css +21 -9
- package/dist/gridstack.d.ts +8 -9
- package/dist/gridstack.js +45 -35
- package/dist/gridstack.js.map +1 -1
- package/dist/gridstack.min.css +1 -1
- package/dist/src/gridstack.scss +19 -12
- package/dist/types.d.ts +12 -16
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +11 -1
- package/dist/utils.js +64 -6
- package/dist/utils.js.map +1 -1
- package/doc/CHANGES.md +16 -1
- package/doc/README.md +19 -20
- package/package.json +2 -2
- package/dist/es5/gridstack-dd.d.ts +0 -35
- package/dist/es5/gridstack-dd.js.map +0 -1
- package/dist/es5/gridstack-ddi.d.ts +0 -17
- package/dist/es5/gridstack-ddi.js +0 -31
- package/dist/es5/gridstack-ddi.js.map +0 -1
- package/dist/es5/gridstack-h5.d.ts +0 -10
- package/dist/es5/gridstack-h5.js +0 -3
- package/dist/es5/gridstack-h5.js.map +0 -1
- package/dist/es5/gridstack-jq.d.ts +0 -10
- package/dist/es5/gridstack-jq.js +0 -3
- package/dist/es5/gridstack-jq.js.LICENSE.txt +0 -99
- package/dist/es5/gridstack-jq.js.map +0 -1
- package/dist/es5/gridstack-static.d.ts +0 -9
- package/dist/es5/gridstack-static.js +0 -3
- package/dist/es5/gridstack-static.js.LICENSE.txt +0 -7
- package/dist/es5/gridstack-static.js.map +0 -1
- package/dist/es5/h5/dd-base-impl.js.map +0 -1
- package/dist/es5/h5/dd-draggable.js +0 -326
- package/dist/es5/h5/dd-draggable.js.map +0 -1
- package/dist/es5/h5/dd-droppable.js +0 -199
- package/dist/es5/h5/dd-droppable.js.map +0 -1
- package/dist/es5/h5/dd-element.js.map +0 -1
- package/dist/es5/h5/dd-manager.d.ts +0 -8
- package/dist/es5/h5/dd-manager.js.map +0 -1
- package/dist/es5/h5/dd-resizable-handle.js.map +0 -1
- package/dist/es5/h5/dd-resizable.js.map +0 -1
- package/dist/es5/h5/dd-utils.d.ts +0 -19
- package/dist/es5/h5/dd-utils.js +0 -111
- package/dist/es5/h5/dd-utils.js.map +0 -1
- package/dist/es5/h5/gridstack-dd-native.d.ts +0 -26
- package/dist/es5/h5/gridstack-dd-native.js +0 -175
- package/dist/es5/h5/gridstack-dd-native.js.map +0 -1
- package/dist/es5/jq/gridstack-dd-jqueryui.d.ts +0 -22
- package/dist/es5/jq/gridstack-dd-jqueryui.js +0 -162
- package/dist/es5/jq/gridstack-dd-jqueryui.js.map +0 -1
- package/dist/gridstack-dd.d.ts +0 -35
- package/dist/gridstack-dd.js.map +0 -1
- package/dist/gridstack-ddi.d.ts +0 -17
- package/dist/gridstack-ddi.js +0 -28
- package/dist/gridstack-ddi.js.map +0 -1
- package/dist/gridstack-h5.d.ts +0 -10
- package/dist/gridstack-h5.js +0 -3
- package/dist/gridstack-h5.js.LICENSE.txt +0 -7
- package/dist/gridstack-h5.js.map +0 -1
- package/dist/gridstack-jq.d.ts +0 -10
- package/dist/gridstack-jq.js +0 -3
- package/dist/gridstack-jq.js.LICENSE.txt +0 -99
- package/dist/gridstack-jq.js.map +0 -1
- package/dist/gridstack-static.d.ts +0 -9
- package/dist/gridstack-static.js +0 -3
- package/dist/gridstack-static.js.map +0 -1
- package/dist/h5/dd-base-impl.js.map +0 -1
- package/dist/h5/dd-draggable.js +0 -302
- package/dist/h5/dd-draggable.js.map +0 -1
- package/dist/h5/dd-droppable.js +0 -168
- package/dist/h5/dd-droppable.js.map +0 -1
- package/dist/h5/dd-element.js.map +0 -1
- package/dist/h5/dd-manager.d.ts +0 -8
- package/dist/h5/dd-manager.js.map +0 -1
- package/dist/h5/dd-resizable-handle.js.map +0 -1
- package/dist/h5/dd-resizable.js.map +0 -1
- package/dist/h5/dd-utils.d.ts +0 -19
- package/dist/h5/dd-utils.js +0 -94
- package/dist/h5/dd-utils.js.map +0 -1
- package/dist/h5/gridstack-dd-native.d.ts +0 -26
- package/dist/h5/gridstack-dd-native.js +0 -140
- package/dist/h5/gridstack-dd-native.js.map +0 -1
- package/dist/jq/gridstack-dd-jqueryui.d.ts +0 -22
- package/dist/jq/gridstack-dd-jqueryui.js +0 -133
- package/dist/jq/gridstack-dd-jqueryui.js.map +0 -1
- package/dist/jq/jquery-ui.js +0 -2
- package/dist/jq/jquery-ui.js.map +0 -1
- package/dist/jq/jquery.js +0 -2
- package/dist/jq/jquery.js.map +0 -1
- package/dist/jq/jquery.ui.touch-punch.js +0 -2
- package/dist/jq/jquery.ui.touch-punch.js.map +0 -1
package/README.md
CHANGED
|
@@ -15,9 +15,9 @@ If you find this lib useful, please donate [PayPal](https://www.paypal.me/alaind
|
|
|
15
15
|
[](https://www.paypal.me/alaind831)
|
|
16
16
|
[](https://www.venmo.com/adumesny)
|
|
17
17
|
|
|
18
|
-
Join us on Slack: https://gridstackjs.
|
|
18
|
+
Join us on Slack: https://gridstackjs.slack.com
|
|
19
19
|
|
|
20
|
-
[](https://gridstackjs.
|
|
20
|
+
[](https://gridstackjs.slack.com)
|
|
21
21
|
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
|
22
22
|
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
|
23
23
|
**Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)*
|
|
@@ -42,6 +42,7 @@ Join us on Slack: https://gridstackjs.troolee.com
|
|
|
42
42
|
- [Migrating to v3](#migrating-to-v3)
|
|
43
43
|
- [Migrating to v4](#migrating-to-v4)
|
|
44
44
|
- [Migrating to v5](#migrating-to-v5)
|
|
45
|
+
- [Migrating to v6](#migrating-to-v6)
|
|
45
46
|
- [jQuery Application](#jquery-application)
|
|
46
47
|
- [Changes](#changes)
|
|
47
48
|
- [The Team](#the-team)
|
|
@@ -71,44 +72,21 @@ ES6 or Typescript
|
|
|
71
72
|
```js
|
|
72
73
|
import 'gridstack/dist/gridstack.min.css';
|
|
73
74
|
import { GridStack } from 'gridstack';
|
|
74
|
-
// THEN to get HTML5 drag&drop
|
|
75
|
-
import 'gridstack/dist/h5/gridstack-dd-native';
|
|
76
|
-
// OR to get legacy jquery-ui drag&drop (support Mobile touch devices, h5 does not yet)
|
|
77
|
-
import 'gridstack/dist/jq/gridstack-dd-jqueryui';
|
|
78
|
-
// OR nothing to get static grids (API driven, no user drag&drop)
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**Note**: `jquery` & `jquery-ui` are imported by name, so you will have to specify their location in your webpack (or equivalent) config file,
|
|
82
|
-
which means you can possibly bring your own version
|
|
83
|
-
```js
|
|
84
|
-
alias: {
|
|
85
|
-
'jquery': 'gridstack/dist/jq/jquery.js',
|
|
86
|
-
'jquery-ui': 'gridstack/dist/jq/jquery-ui.js',
|
|
87
|
-
'jquery.ui': 'gridstack/dist/jq/jquery-ui.js',
|
|
88
|
-
'jquery.ui.touch-punch': 'gridstack/dist/jq/jquery.ui.touch-punch.js',
|
|
89
|
-
},
|
|
90
75
|
```
|
|
91
76
|
|
|
92
|
-
Alternatively (single combined file) in html
|
|
77
|
+
Alternatively (single combined file, notice the -all.js) in html
|
|
93
78
|
|
|
94
79
|
```html
|
|
95
80
|
<link href="node_modules/gridstack/dist/gridstack.min.css" rel="stylesheet"/>
|
|
96
|
-
|
|
97
|
-
<script src="node_modules/gridstack/dist/gridstack-h5.js"></script>
|
|
98
|
-
<!-- OR jquery-ui drag&drop (195k) -->
|
|
99
|
-
<script src="node_modules/gridstack/dist/gridstack-jq.js"></script>
|
|
100
|
-
<!-- OR static grid (40k) -->
|
|
101
|
-
<script src="node_modules/gridstack/dist/gridstack-static.js"></script>
|
|
81
|
+
<script src="node_modules/gridstack/dist/gridstack-all.js"></script>
|
|
102
82
|
```
|
|
103
83
|
|
|
104
|
-
**Note**:
|
|
105
|
-
|
|
106
|
-
**Note2**: IE support was dropped in v2, but restored in v4.4 by an external contributor (I have no interest in testing+supporting obsolete browser so this might break in the future).
|
|
84
|
+
**Note**: IE support was dropped in v2, but restored in v4.4 by an external contributor (I have no interest in testing+supporting obsolete browser so this likely will break again in the future).
|
|
107
85
|
You can use the es5 files and polyfill (larger) for older browser instead. For example:
|
|
108
86
|
```html
|
|
109
87
|
<link href="node_modules/gridstack/dist/gridstack.min.css" rel="stylesheet"/>
|
|
110
88
|
<script src="node_modules/gridstack/dist/es5/gridstack-poly.js"></script>
|
|
111
|
-
<script src="node_modules/gridstack/dist/es5/gridstack-
|
|
89
|
+
<script src="node_modules/gridstack/dist/es5/gridstack-all.js"></script>
|
|
112
90
|
```
|
|
113
91
|
|
|
114
92
|
|
|
@@ -161,7 +139,7 @@ see [jsfiddle sample](https://jsfiddle.net/adumesny/jqhkry7g) as running example
|
|
|
161
139
|
|
|
162
140
|
## Requirements
|
|
163
141
|
|
|
164
|
-
GridStack no longer requires external dependencies as of v1.0.0 (lodash was removed in v0.5.0 and jquery API in v1.0.0). v3
|
|
142
|
+
GridStack no longer requires external dependencies as of v1.0.0 (lodash was removed in v0.5.0 and jquery API in v1.0.0). v3 is a complete HTML5 re-write removing need for jquery (still available for legacy apps). v6 is native mouse and touch event for mobile support, and no longer have jquery-ui version. All you need to include now is `gridstack-all.js` and `gridstack.min.css` (layouts are done using CSS column based %).
|
|
165
143
|
|
|
166
144
|
## Extend Library
|
|
167
145
|
|
|
@@ -209,14 +187,15 @@ GridStack makes it very easy if you need [1-12] columns out of the box (default
|
|
|
209
187
|
GridStack.init( {column: N} );
|
|
210
188
|
```
|
|
211
189
|
|
|
212
|
-
2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly.
|
|
190
|
+
2) also include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly.
|
|
213
191
|
```html
|
|
214
|
-
<link href="node_modules/gridstack/dist/gridstack
|
|
192
|
+
<link href="node_modules/gridstack/dist/gridstack.min.css" rel="stylesheet"/>
|
|
193
|
+
<link href="node_modules/gridstack/dist/gridstack-extra.min.css" rel="stylesheet"/>
|
|
215
194
|
|
|
216
195
|
<div class="grid-stack">...</div>
|
|
217
196
|
```
|
|
218
197
|
|
|
219
|
-
Note: class `.grid-stack-N` will automatically be added and we include `gridstack-extra.css` which defines CSS for grids with custom [2-11] columns. Anything more and you'll need to generate the SASS/CSS yourself (see next).
|
|
198
|
+
Note: class `.grid-stack-N` will automatically be added and we include `gridstack-extra.min.css` which defines CSS for grids with custom [2-11] columns. Anything more and you'll need to generate the SASS/CSS yourself (see next).
|
|
220
199
|
|
|
221
200
|
See example: [2 grids demo](http://gridstack.github.io/gridstack.js/demo/two.html) with 6 columns
|
|
222
201
|
|
|
@@ -253,7 +232,7 @@ and so on.
|
|
|
253
232
|
Better yet, here is a SASS code snippet which can make life much easier (Thanks to @ascendantofrain, [#81](https://github.com/gridstack/gridstack.js/issues/81) and @StefanM98, [#868](https://github.com/gridstack/gridstack.js/issues/868)) and you can use sites like [sassmeister.com](https://www.sassmeister.com/) to generate the CSS for you instead:
|
|
254
233
|
|
|
255
234
|
```sass
|
|
256
|
-
@use "sass
|
|
235
|
+
@use "sass:math";
|
|
257
236
|
.grid-stack > .grid-stack-item {
|
|
258
237
|
|
|
259
238
|
$gridstack-columns: 12;
|
|
@@ -295,21 +274,19 @@ GridStack.init({
|
|
|
295
274
|
|
|
296
275
|
## Touch devices support
|
|
297
276
|
|
|
298
|
-
gridstack
|
|
299
|
-
|
|
300
|
-
work on touch-based devices (now distributed as `dist/jq/jquery.ui.touch-punch.js` for reference).
|
|
277
|
+
gridstack v6+ now support mobile out of the box, with the addition of native touch event (along with mouse event) for drag&drop and resize.
|
|
278
|
+
Older versions (3.2+) required the jq version with added touch punch, but doesn't work well with nested grids.
|
|
301
279
|
|
|
302
|
-
|
|
303
|
-
This option will be useful:
|
|
280
|
+
This option is now the default:
|
|
304
281
|
|
|
305
282
|
```js
|
|
306
283
|
let options = {
|
|
307
|
-
alwaysShowResizeHandle: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
|
|
284
|
+
alwaysShowResizeHandle: 'mobile' // which defaults to /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
|
|
308
285
|
};
|
|
309
286
|
GridStack.init(options);
|
|
310
287
|
```
|
|
311
288
|
|
|
312
|
-
See [example](http://gridstack.github.io/gridstack.js/demo/mobile.html).
|
|
289
|
+
See [example](http://gridstack.github.io/gridstack.js/demo/mobile.html).
|
|
313
290
|
|
|
314
291
|
# gridstack.js for specific frameworks
|
|
315
292
|
|
|
@@ -457,9 +434,44 @@ make sure to read v4 migration first!
|
|
|
457
434
|
v5 does not have any breaking changes from v4, but a focus on nested grids in h5 mode:
|
|
458
435
|
You can now drag in/out of parent into nested child, with new API parameters values. See the release notes.
|
|
459
436
|
|
|
437
|
+
## Migrating to v6
|
|
438
|
+
|
|
439
|
+
the API did not really change from v5, but a complete re-write of Drag&Drop to use native mouseevent (instead of HTML draggable=true which is buggy on Mac Safari, and doesn't work on mobile devices) and touchevent (mobile), and we no longer have jquery ui option (wasn't working well for nested grids, didn't want to maintain legacy lib).
|
|
440
|
+
|
|
441
|
+
The main difference is you only need to include gridstack.js and get D&D (desktop and mobile) out of the box for the same size as h5 version.
|
|
442
|
+
|
|
460
443
|
# jQuery Application
|
|
461
444
|
|
|
462
|
-
|
|
445
|
+
This is **old and no longer apply to v6+**. You'll need to use v5.1.1 and before
|
|
446
|
+
|
|
447
|
+
```js
|
|
448
|
+
import 'gridstack/dist/gridstack.min.css';
|
|
449
|
+
import { GridStack } from 'gridstack';
|
|
450
|
+
import 'gridstack/dist/jq/gridstack-dd-jqueryui';
|
|
451
|
+
```
|
|
452
|
+
**Note**: `jquery` & `jquery-ui` are imported by name, so you will have to specify their location in your webpack (or equivalent) config file,
|
|
453
|
+
which means you can possibly bring your own version
|
|
454
|
+
```js
|
|
455
|
+
alias: {
|
|
456
|
+
'jquery': 'gridstack/dist/jq/jquery.js',
|
|
457
|
+
'jquery-ui': 'gridstack/dist/jq/jquery-ui.js',
|
|
458
|
+
'jquery.ui': 'gridstack/dist/jq/jquery-ui.js',
|
|
459
|
+
'jquery.ui.touch-punch': 'gridstack/dist/jq/jquery.ui.touch-punch.js',
|
|
460
|
+
},
|
|
461
|
+
```
|
|
462
|
+
Alternatively (single combined file) in html
|
|
463
|
+
|
|
464
|
+
```html
|
|
465
|
+
<link href="node_modules/gridstack/dist/gridstack.min.css" rel="stylesheet"/>
|
|
466
|
+
<!-- HTML5 drag&drop (70k) -->
|
|
467
|
+
<script src="node_modules/gridstack/dist/gridstack-h5.js"></script>
|
|
468
|
+
<!-- OR jquery-ui drag&drop (195k) -->
|
|
469
|
+
<script src="node_modules/gridstack/dist/gridstack-jq.js"></script>
|
|
470
|
+
<!-- OR static grid (40k) -->
|
|
471
|
+
<script src="node_modules/gridstack/dist/gridstack-static.js"></script>
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
We have a native HTML5 drag'n'drop through the plugin system (default), but the jquery-ui version can be used instead. It will bundle `jquery` (3.5.1) + `jquery-ui` (1.13.1 minimal drag|drop|resize) + `jquery-ui-touch-punch` (1.0.8 for mobile support) in `gridstack-jq.js`.
|
|
463
475
|
|
|
464
476
|
**NOTE: in v4, v3**: we ES6 module import jquery & jquery-ui by name, so you need to specify location of those .js files, which means you might be able to bring your own version as well. See the include instructions.
|
|
465
477
|
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* dd-base-impl.ts
|
|
3
|
+
* dd-base-impl.ts 6.0.1
|
|
4
4
|
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.DDBaseImplement = void 0;
|
|
8
8
|
class DDBaseImplement {
|
|
9
9
|
constructor() {
|
|
10
|
-
/** @internal */
|
|
11
|
-
this._disabled = false;
|
|
12
10
|
/** @internal */
|
|
13
11
|
this._eventRegister = {};
|
|
14
12
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dd-base-impl.js","sourceRoot":"","sources":["../src/dd-base-impl.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,MAAsB,eAAe;IAArC;QAME,gBAAgB;QACN,mBAAc,GAEpB,EAAE,CAAC;IA0BT,CAAC;IAlCC,mHAAmH;IACnH,IAAW,QAAQ,KAAgB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IASpD,EAAE,CAAC,KAAa,EAAE,QAAuB;QAC9C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;IACxC,CAAC;IAEM,GAAG,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEM,YAAY,CAAC,SAAiB,EAAE,KAAY;QACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;YACzE,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;CACF;AAnCD,0CAmCC","sourcesContent":["/**\n * dd-base-impl.ts 6.0.1\n * Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license\n */\n\nexport type EventCallback = (event: Event) => boolean|void;\nexport abstract class DDBaseImplement {\n /** returns the enable state, but you have to call enable()/disable() to change (as other things need to happen) */\n public get disabled(): boolean { return this._disabled; }\n\n /** @internal */\n protected _disabled: boolean; // initial state to differentiate from false\n /** @internal */\n protected _eventRegister: {\n [eventName: string]: EventCallback;\n } = {};\n\n public on(event: string, callback: EventCallback): void {\n this._eventRegister[event] = callback;\n }\n\n public off(event: string): void {\n delete this._eventRegister[event];\n }\n\n public enable(): void {\n this._disabled = false;\n }\n\n public disable(): void {\n this._disabled = true;\n }\n\n public destroy(): void {\n delete this._eventRegister;\n }\n\n public triggerEvent(eventName: string, event: Event): boolean|void {\n if (!this.disabled && this._eventRegister && this._eventRegister[eventName])\n return this._eventRegister[eventName](event);\n }\n}\n\nexport interface HTMLElementExtendOpt<T> {\n el: HTMLElement;\n option: T;\n updateOption(T): DDBaseImplement;\n}\n"]}
|
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* dd-draggable.ts
|
|
2
|
+
* dd-draggable.ts 6.0.1
|
|
3
3
|
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license
|
|
4
4
|
*/
|
|
5
5
|
import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl';
|
|
6
|
-
import { DDUIData } from '
|
|
6
|
+
import { DDUIData } from './types';
|
|
7
7
|
export interface DDDraggableOpt {
|
|
8
8
|
appendTo?: string | HTMLElement;
|
|
9
|
-
containment?: string | HTMLElement;
|
|
10
9
|
handle?: string;
|
|
11
|
-
revert?: string | boolean | unknown;
|
|
12
|
-
scroll?: boolean;
|
|
13
10
|
helper?: string | HTMLElement | ((event: Event) => HTMLElement);
|
|
14
11
|
start?: (event: Event, ui: DDUIData) => void;
|
|
15
12
|
stop?: (event: Event) => void;
|
|
16
13
|
drag?: (event: Event, ui: DDUIData) => void;
|
|
17
14
|
}
|
|
15
|
+
declare type DDDragEvent = 'drag' | 'dragstart' | 'dragstop';
|
|
18
16
|
export declare class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt<DDDraggableOpt> {
|
|
19
17
|
el: HTMLElement;
|
|
20
18
|
option: DDDraggableOpt;
|
|
21
19
|
helper: HTMLElement;
|
|
22
20
|
constructor(el: HTMLElement, option?: DDDraggableOpt);
|
|
23
|
-
on(event:
|
|
24
|
-
off(event:
|
|
21
|
+
on(event: DDDragEvent, callback: (event: DragEvent) => void): void;
|
|
22
|
+
off(event: DDDragEvent): void;
|
|
25
23
|
enable(): void;
|
|
26
24
|
disable(forDestroy?: boolean): void;
|
|
27
25
|
destroy(): void;
|
|
28
26
|
updateOption(opts: DDDraggableOpt): DDDraggable;
|
|
29
27
|
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* dd-draggable.ts 6.0.1
|
|
4
|
+
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DDDraggable = void 0;
|
|
8
|
+
const dd_manager_1 = require("./dd-manager");
|
|
9
|
+
const utils_1 = require("./utils");
|
|
10
|
+
const dd_base_impl_1 = require("./dd-base-impl");
|
|
11
|
+
const dd_touch_1 = require("./dd-touch");
|
|
12
|
+
// let count = 0; // TEST
|
|
13
|
+
class DDDraggable extends dd_base_impl_1.DDBaseImplement {
|
|
14
|
+
constructor(el, option = {}) {
|
|
15
|
+
super();
|
|
16
|
+
this.el = el;
|
|
17
|
+
this.option = option;
|
|
18
|
+
// get the element that is actually supposed to be dragged by
|
|
19
|
+
let className = option.handle.substring(1);
|
|
20
|
+
this.dragEl = el.classList.contains(className) ? el : el.querySelector(option.handle) || el;
|
|
21
|
+
// create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions)
|
|
22
|
+
this._mouseDown = this._mouseDown.bind(this);
|
|
23
|
+
this._mouseMove = this._mouseMove.bind(this);
|
|
24
|
+
this._mouseUp = this._mouseUp.bind(this);
|
|
25
|
+
this.enable();
|
|
26
|
+
}
|
|
27
|
+
on(event, callback) {
|
|
28
|
+
super.on(event, callback);
|
|
29
|
+
}
|
|
30
|
+
off(event) {
|
|
31
|
+
super.off(event);
|
|
32
|
+
}
|
|
33
|
+
enable() {
|
|
34
|
+
if (this.disabled === false)
|
|
35
|
+
return;
|
|
36
|
+
super.enable();
|
|
37
|
+
this.dragEl.addEventListener('mousedown', this._mouseDown);
|
|
38
|
+
if (dd_touch_1.isTouch) {
|
|
39
|
+
this.dragEl.addEventListener('touchstart', dd_touch_1.touchstart);
|
|
40
|
+
this.dragEl.addEventListener('pointerdown', dd_touch_1.pointerdown);
|
|
41
|
+
// this.dragEl.style.touchAction = 'none'; // not needed unlike pointerdown doc comment
|
|
42
|
+
}
|
|
43
|
+
this.el.classList.remove('ui-draggable-disabled');
|
|
44
|
+
this.el.classList.add('ui-draggable');
|
|
45
|
+
}
|
|
46
|
+
disable(forDestroy = false) {
|
|
47
|
+
if (this.disabled === true)
|
|
48
|
+
return;
|
|
49
|
+
super.disable();
|
|
50
|
+
this.dragEl.removeEventListener('mousedown', this._mouseDown);
|
|
51
|
+
if (dd_touch_1.isTouch) {
|
|
52
|
+
this.dragEl.removeEventListener('touchstart', dd_touch_1.touchstart);
|
|
53
|
+
this.dragEl.removeEventListener('pointerdown', dd_touch_1.pointerdown);
|
|
54
|
+
}
|
|
55
|
+
this.el.classList.remove('ui-draggable');
|
|
56
|
+
if (!forDestroy)
|
|
57
|
+
this.el.classList.add('ui-draggable-disabled');
|
|
58
|
+
}
|
|
59
|
+
destroy() {
|
|
60
|
+
if (this.dragging)
|
|
61
|
+
this._mouseUp(this.mouseDownEvent);
|
|
62
|
+
this.disable(true);
|
|
63
|
+
delete this.el;
|
|
64
|
+
delete this.helper;
|
|
65
|
+
delete this.option;
|
|
66
|
+
super.destroy();
|
|
67
|
+
}
|
|
68
|
+
updateOption(opts) {
|
|
69
|
+
Object.keys(opts).forEach(key => this.option[key] = opts[key]);
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
/** @internal call when mouse goes down before a dragstart happens */
|
|
73
|
+
_mouseDown(e) {
|
|
74
|
+
// don't let more than one widget handle mouseStart
|
|
75
|
+
if (dd_manager_1.DDManager.mouseHandled)
|
|
76
|
+
return;
|
|
77
|
+
if (e.button !== 0)
|
|
78
|
+
return true; // only left click
|
|
79
|
+
// make sure we are clicking on a drag handle or child of it...
|
|
80
|
+
// Note: we don't need to check that's handle is an immediate child, as mouseHandled will prevent parents from also handling it (lowest wins)
|
|
81
|
+
let className = this.option.handle.substring(1);
|
|
82
|
+
let el = e.target;
|
|
83
|
+
while (el && !el.classList.contains(className)) {
|
|
84
|
+
el = el.parentElement;
|
|
85
|
+
}
|
|
86
|
+
if (!el)
|
|
87
|
+
return;
|
|
88
|
+
this.mouseDownEvent = e;
|
|
89
|
+
delete this.dragging;
|
|
90
|
+
delete dd_manager_1.DDManager.dragElement;
|
|
91
|
+
delete dd_manager_1.DDManager.dropElement;
|
|
92
|
+
// document handler so we can continue receiving moves as the item is 'fixed' position, and capture=true so WE get a first crack
|
|
93
|
+
document.addEventListener('mousemove', this._mouseMove, true); // true=capture, not bubble
|
|
94
|
+
document.addEventListener('mouseup', this._mouseUp, true);
|
|
95
|
+
if (dd_touch_1.isTouch) {
|
|
96
|
+
this.dragEl.addEventListener('touchmove', dd_touch_1.touchmove);
|
|
97
|
+
this.dragEl.addEventListener('touchend', dd_touch_1.touchend);
|
|
98
|
+
}
|
|
99
|
+
e.preventDefault();
|
|
100
|
+
dd_manager_1.DDManager.mouseHandled = true;
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
/** @internal called when the main page (after successful mousedown) receives a move event to drag the item around the screen */
|
|
104
|
+
_mouseMove(e) {
|
|
105
|
+
var _a;
|
|
106
|
+
// console.log(`${count++} move ${e.x},${e.y}`)
|
|
107
|
+
let s = this.mouseDownEvent;
|
|
108
|
+
if (this.dragging) {
|
|
109
|
+
this._dragFollow(e);
|
|
110
|
+
const ev = utils_1.Utils.initEvent(e, { target: this.el, type: 'drag' });
|
|
111
|
+
if (this.option.drag) {
|
|
112
|
+
this.option.drag(ev, this.ui());
|
|
113
|
+
}
|
|
114
|
+
this.triggerEvent('drag', ev);
|
|
115
|
+
}
|
|
116
|
+
else if (Math.abs(e.x - s.x) + Math.abs(e.y - s.y) > 3) {
|
|
117
|
+
/**
|
|
118
|
+
* don't start unless we've moved at least 3 pixels
|
|
119
|
+
*/
|
|
120
|
+
this.dragging = true;
|
|
121
|
+
dd_manager_1.DDManager.dragElement = this;
|
|
122
|
+
// if we're dragging an actual grid item, set the current drop as the grid (to detect enter/leave)
|
|
123
|
+
let grid = (_a = this.el.gridstackNode) === null || _a === void 0 ? void 0 : _a.grid;
|
|
124
|
+
if (grid) {
|
|
125
|
+
dd_manager_1.DDManager.dropElement = grid.el.ddElement.ddDroppable;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
delete dd_manager_1.DDManager.dropElement;
|
|
129
|
+
}
|
|
130
|
+
this.helper = this._createHelper(e);
|
|
131
|
+
this._setupHelperContainmentStyle();
|
|
132
|
+
this.dragOffset = this._getDragOffset(e, this.el, this.helperContainment);
|
|
133
|
+
const ev = utils_1.Utils.initEvent(e, { target: this.el, type: 'dragstart' });
|
|
134
|
+
this._setupHelperStyle(e);
|
|
135
|
+
if (this.option.start) {
|
|
136
|
+
this.option.start(ev, this.ui());
|
|
137
|
+
}
|
|
138
|
+
this.triggerEvent('dragstart', ev);
|
|
139
|
+
}
|
|
140
|
+
e.preventDefault();
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
/** @internal call when the mouse gets released to drop the item at current location */
|
|
144
|
+
_mouseUp(e) {
|
|
145
|
+
var _a;
|
|
146
|
+
document.removeEventListener('mousemove', this._mouseMove, true);
|
|
147
|
+
document.removeEventListener('mouseup', this._mouseUp, true);
|
|
148
|
+
if (dd_touch_1.isTouch) {
|
|
149
|
+
this.dragEl.removeEventListener('touchmove', dd_touch_1.touchmove, true);
|
|
150
|
+
this.dragEl.removeEventListener('touchend', dd_touch_1.touchend, true);
|
|
151
|
+
}
|
|
152
|
+
if (this.dragging) {
|
|
153
|
+
delete this.dragging;
|
|
154
|
+
// reset the drop target if dragging over ourself (already parented, just moving during stop callback below)
|
|
155
|
+
if (((_a = dd_manager_1.DDManager.dropElement) === null || _a === void 0 ? void 0 : _a.el) === this.el.parentElement) {
|
|
156
|
+
delete dd_manager_1.DDManager.dropElement;
|
|
157
|
+
}
|
|
158
|
+
this.helperContainment.style.position = this.parentOriginStylePosition || null;
|
|
159
|
+
if (this.helper === this.el) {
|
|
160
|
+
this._removeHelperStyle();
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
this.helper.remove();
|
|
164
|
+
}
|
|
165
|
+
const ev = utils_1.Utils.initEvent(e, { target: this.el, type: 'dragstop' });
|
|
166
|
+
if (this.option.stop) {
|
|
167
|
+
this.option.stop(ev); // NOTE: destroy() will be called when removing item, so expect NULL ptr after!
|
|
168
|
+
}
|
|
169
|
+
this.triggerEvent('dragstop', ev);
|
|
170
|
+
// call the droppable method to receive the item
|
|
171
|
+
if (dd_manager_1.DDManager.dropElement) {
|
|
172
|
+
dd_manager_1.DDManager.dropElement.drop(e);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
delete this.helper;
|
|
176
|
+
delete this.mouseDownEvent;
|
|
177
|
+
delete dd_manager_1.DDManager.dragElement;
|
|
178
|
+
delete dd_manager_1.DDManager.dropElement;
|
|
179
|
+
delete dd_manager_1.DDManager.mouseHandled;
|
|
180
|
+
e.preventDefault();
|
|
181
|
+
}
|
|
182
|
+
/** @internal create a clone copy (or user defined method) of the original drag item if set */
|
|
183
|
+
_createHelper(event) {
|
|
184
|
+
let helper = this.el;
|
|
185
|
+
if (typeof this.option.helper === 'function') {
|
|
186
|
+
helper = this.option.helper(event);
|
|
187
|
+
}
|
|
188
|
+
else if (this.option.helper === 'clone') {
|
|
189
|
+
helper = utils_1.Utils.cloneNode(this.el);
|
|
190
|
+
}
|
|
191
|
+
if (!document.body.contains(helper)) {
|
|
192
|
+
utils_1.Utils.appendTo(helper, this.option.appendTo === 'parent' ? this.el.parentNode : this.option.appendTo);
|
|
193
|
+
}
|
|
194
|
+
if (helper === this.el) {
|
|
195
|
+
this.dragElementOriginStyle = DDDraggable.originStyleProp.map(prop => this.el.style[prop]);
|
|
196
|
+
}
|
|
197
|
+
return helper;
|
|
198
|
+
}
|
|
199
|
+
/** @internal set the fix position of the dragged item */
|
|
200
|
+
_setupHelperStyle(e) {
|
|
201
|
+
this.helper.classList.add('ui-draggable-dragging');
|
|
202
|
+
// TODO: set all at once with style.cssText += ... ? https://stackoverflow.com/questions/3968593
|
|
203
|
+
const style = this.helper.style;
|
|
204
|
+
style.pointerEvents = 'none'; // needed for over items to get enter/leave
|
|
205
|
+
// style.cursor = 'move'; // TODO: can't set with pointerEvents=none ! (done in CSS as well)
|
|
206
|
+
style['min-width'] = 0; // since we no longer relative to our parent and we don't resize anyway (normally 100/#column %)
|
|
207
|
+
style.width = this.dragOffset.width + 'px';
|
|
208
|
+
style.height = this.dragOffset.height + 'px';
|
|
209
|
+
style.willChange = 'left, top';
|
|
210
|
+
style.position = 'fixed'; // let us drag between grids by not clipping as parent .grid-stack is position: 'relative'
|
|
211
|
+
this._dragFollow(e); // now position it
|
|
212
|
+
style.transition = 'none'; // show up instantly
|
|
213
|
+
setTimeout(() => {
|
|
214
|
+
if (this.helper) {
|
|
215
|
+
style.transition = null; // recover animation
|
|
216
|
+
}
|
|
217
|
+
}, 0);
|
|
218
|
+
return this;
|
|
219
|
+
}
|
|
220
|
+
/** @internal restore back the original style before dragging */
|
|
221
|
+
_removeHelperStyle() {
|
|
222
|
+
var _a;
|
|
223
|
+
this.helper.classList.remove('ui-draggable-dragging');
|
|
224
|
+
let node = (_a = this.helper) === null || _a === void 0 ? void 0 : _a.gridstackNode;
|
|
225
|
+
// don't bother restoring styles if we're gonna remove anyway...
|
|
226
|
+
if (this.dragElementOriginStyle && (!node || !node._isAboutToRemove)) {
|
|
227
|
+
let helper = this.helper;
|
|
228
|
+
// don't animate, otherwise we animate offseted when switching back to 'absolute' from 'fixed'
|
|
229
|
+
let transition = this.dragElementOriginStyle['transition'] || null;
|
|
230
|
+
helper.style.transition = this.dragElementOriginStyle['transition'] = 'none';
|
|
231
|
+
DDDraggable.originStyleProp.forEach(prop => helper.style[prop] = this.dragElementOriginStyle[prop] || null);
|
|
232
|
+
setTimeout(() => helper.style.transition = transition, 50); // recover animation from saved vars after a pause (0 isn't enough #1973)
|
|
233
|
+
}
|
|
234
|
+
delete this.dragElementOriginStyle;
|
|
235
|
+
return this;
|
|
236
|
+
}
|
|
237
|
+
/** @internal updates the top/left position to follow the mouse */
|
|
238
|
+
_dragFollow(e) {
|
|
239
|
+
let containmentRect = { left: 0, top: 0 };
|
|
240
|
+
// if (this.helper.style.position === 'absolute') { // we use 'fixed'
|
|
241
|
+
// const { left, top } = this.helperContainment.getBoundingClientRect();
|
|
242
|
+
// containmentRect = { left, top };
|
|
243
|
+
// }
|
|
244
|
+
const style = this.helper.style;
|
|
245
|
+
const offset = this.dragOffset;
|
|
246
|
+
style.left = e.clientX + offset.offsetLeft - containmentRect.left + 'px';
|
|
247
|
+
style.top = e.clientY + offset.offsetTop - containmentRect.top + 'px';
|
|
248
|
+
}
|
|
249
|
+
/** @internal */
|
|
250
|
+
_setupHelperContainmentStyle() {
|
|
251
|
+
this.helperContainment = this.helper.parentElement;
|
|
252
|
+
if (this.helper.style.position !== 'fixed') {
|
|
253
|
+
this.parentOriginStylePosition = this.helperContainment.style.position;
|
|
254
|
+
if (window.getComputedStyle(this.helperContainment).position.match(/static/)) {
|
|
255
|
+
this.helperContainment.style.position = 'relative';
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return this;
|
|
259
|
+
}
|
|
260
|
+
/** @internal */
|
|
261
|
+
_getDragOffset(event, el, parent) {
|
|
262
|
+
// in case ancestor has transform/perspective css properties that change the viewpoint
|
|
263
|
+
let xformOffsetX = 0;
|
|
264
|
+
let xformOffsetY = 0;
|
|
265
|
+
if (parent) {
|
|
266
|
+
const testEl = document.createElement('div');
|
|
267
|
+
utils_1.Utils.addElStyles(testEl, {
|
|
268
|
+
opacity: '0',
|
|
269
|
+
position: 'fixed',
|
|
270
|
+
top: 0 + 'px',
|
|
271
|
+
left: 0 + 'px',
|
|
272
|
+
width: '1px',
|
|
273
|
+
height: '1px',
|
|
274
|
+
zIndex: '-999999',
|
|
275
|
+
});
|
|
276
|
+
parent.appendChild(testEl);
|
|
277
|
+
const testElPosition = testEl.getBoundingClientRect();
|
|
278
|
+
parent.removeChild(testEl);
|
|
279
|
+
xformOffsetX = testElPosition.left;
|
|
280
|
+
xformOffsetY = testElPosition.top;
|
|
281
|
+
// TODO: scale ?
|
|
282
|
+
}
|
|
283
|
+
const targetOffset = el.getBoundingClientRect();
|
|
284
|
+
return {
|
|
285
|
+
left: targetOffset.left,
|
|
286
|
+
top: targetOffset.top,
|
|
287
|
+
offsetLeft: -event.clientX + targetOffset.left - xformOffsetX,
|
|
288
|
+
offsetTop: -event.clientY + targetOffset.top - xformOffsetY,
|
|
289
|
+
width: targetOffset.width,
|
|
290
|
+
height: targetOffset.height
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
/** @internal TODO: set to public as called by DDDroppable! */
|
|
294
|
+
ui() {
|
|
295
|
+
const containmentEl = this.el.parentElement;
|
|
296
|
+
const containmentRect = containmentEl.getBoundingClientRect();
|
|
297
|
+
const offset = this.helper.getBoundingClientRect();
|
|
298
|
+
return {
|
|
299
|
+
position: {
|
|
300
|
+
top: offset.top - containmentRect.top,
|
|
301
|
+
left: offset.left - containmentRect.left
|
|
302
|
+
}
|
|
303
|
+
/* not used by GridStack for now...
|
|
304
|
+
helper: [this.helper], //The object arr representing the helper that's being dragged.
|
|
305
|
+
offset: { top: offset.top, left: offset.left } // Current offset position of the helper as { top, left } object.
|
|
306
|
+
*/
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
exports.DDDraggable = DDDraggable;
|
|
311
|
+
/** @internal properties we change during dragging, and restore back */
|
|
312
|
+
DDDraggable.originStyleProp = ['transition', 'pointerEvents', 'position', 'left', 'top'];
|
|
313
|
+
//# sourceMappingURL=dd-draggable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dd-draggable.js","sourceRoot":"","sources":["../src/dd-draggable.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * dd-draggable.ts 6.0.1\n * Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license\n */\n\nimport { DDManager } from './dd-manager';\nimport { Utils } from './utils';\nimport { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl';\nimport { GridItemHTMLElement, DDUIData } from './types';\nimport { DDElementHost } from './dd-element';\nimport { isTouch, touchend, touchmove, touchstart, pointerdown } from './dd-touch';\n\n// TODO: merge with DDDragOpt ?\nexport interface DDDraggableOpt {\n appendTo?: string | HTMLElement;\n handle?: string;\n helper?: string | HTMLElement | ((event: Event) => HTMLElement);\n // containment?: string | HTMLElement; // TODO: not implemented yet\n // revert?: string | boolean | unknown; // TODO: not implemented yet\n // scroll?: boolean; // native support by HTML5 drag drop, can't be switch to off actually\n start?: (event: Event, ui: DDUIData) => void;\n stop?: (event: Event) => void;\n drag?: (event: Event, ui: DDUIData) => void;\n}\n\ninterface DragOffset {\n left: number;\n top: number;\n width: number;\n height: number;\n offsetLeft: number;\n offsetTop: number;\n}\n\ntype DDDragEvent = 'drag' | 'dragstart' | 'dragstop';\n\n// let count = 0; // TEST\n\nexport class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt<DDDraggableOpt> {\n public el: HTMLElement;\n public option: DDDraggableOpt;\n public helper: HTMLElement; // used by GridStackDDNative\n\n /** @internal */\n protected mouseDownEvent: MouseEvent;\n /** @internal */\n protected dragOffset: DragOffset;\n /** @internal */\n protected dragElementOriginStyle: Array<string>;\n /** @internal */\n protected dragEl: HTMLElement;\n /** @internal true while we are dragging an item around */\n protected dragging: boolean;\n /** @internal */\n protected parentOriginStylePosition: string;\n /** @internal */\n protected helperContainment: HTMLElement;\n /** @internal properties we change during dragging, and restore back */\n protected static originStyleProp = ['transition', 'pointerEvents', 'position', 'left', 'top'];\n\n constructor(el: HTMLElement, option: DDDraggableOpt = {}) {\n super();\n this.el = el;\n this.option = option;\n // get the element that is actually supposed to be dragged by\n let className = option.handle.substring(1);\n this.dragEl = el.classList.contains(className) ? el : el.querySelector(option.handle) || el;\n // create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions)\n this._mouseDown = this._mouseDown.bind(this);\n this._mouseMove = this._mouseMove.bind(this);\n this._mouseUp = this._mouseUp.bind(this);\n this.enable();\n }\n\n public on(event: DDDragEvent, callback: (event: DragEvent) => void): void {\n super.on(event, callback);\n }\n\n public off(event: DDDragEvent): void {\n super.off(event);\n }\n\n public enable(): void {\n if (this.disabled === false) return;\n super.enable();\n this.dragEl.addEventListener('mousedown', this._mouseDown);\n if (isTouch) {\n this.dragEl.addEventListener('touchstart', touchstart);\n this.dragEl.addEventListener('pointerdown', pointerdown);\n // this.dragEl.style.touchAction = 'none'; // not needed unlike pointerdown doc comment\n }\n this.el.classList.remove('ui-draggable-disabled');\n this.el.classList.add('ui-draggable');\n }\n\n public disable(forDestroy = false): void {\n if (this.disabled === true) return;\n super.disable();\n this.dragEl.removeEventListener('mousedown', this._mouseDown);\n if (isTouch) {\n this.dragEl.removeEventListener('touchstart', touchstart);\n this.dragEl.removeEventListener('pointerdown', pointerdown);\n }\n this.el.classList.remove('ui-draggable');\n if (!forDestroy) this.el.classList.add('ui-draggable-disabled');\n }\n\n public destroy(): void {\n if (this.dragging) this._mouseUp(this.mouseDownEvent);\n this.disable(true);\n delete this.el;\n delete this.helper;\n delete this.option;\n super.destroy();\n }\n\n public updateOption(opts: DDDraggableOpt): DDDraggable {\n Object.keys(opts).forEach(key => this.option[key] = opts[key]);\n return this;\n }\n\n /** @internal call when mouse goes down before a dragstart happens */\n protected _mouseDown(e: MouseEvent): boolean {\n // don't let more than one widget handle mouseStart\n if (DDManager.mouseHandled) return;\n if (e.button !== 0) return true; // only left click\n\n // make sure we are clicking on a drag handle or child of it...\n // Note: we don't need to check that's handle is an immediate child, as mouseHandled will prevent parents from also handling it (lowest wins)\n let className = this.option.handle.substring(1);\n let el = e.target as HTMLElement;\n while (el && !el.classList.contains(className)) { el = el.parentElement; }\n if (!el) return;\n this.mouseDownEvent = e;\n delete this.dragging;\n delete DDManager.dragElement;\n delete DDManager.dropElement;\n // document handler so we can continue receiving moves as the item is 'fixed' position, and capture=true so WE get a first crack\n document.addEventListener('mousemove', this._mouseMove, true); // true=capture, not bubble\n document.addEventListener('mouseup', this._mouseUp, true);\n if (isTouch) {\n this.dragEl.addEventListener('touchmove', touchmove);\n this.dragEl.addEventListener('touchend', touchend);\n }\n\n e.preventDefault();\n DDManager.mouseHandled = true;\n return true;\n }\n\n /** @internal called when the main page (after successful mousedown) receives a move event to drag the item around the screen */\n protected _mouseMove(e: DragEvent): boolean {\n // console.log(`${count++} move ${e.x},${e.y}`)\n let s = this.mouseDownEvent;\n\n if (this.dragging) {\n this._dragFollow(e);\n const ev = Utils.initEvent<DragEvent>(e, { target: this.el, type: 'drag' });\n if (this.option.drag) {\n this.option.drag(ev, this.ui());\n }\n this.triggerEvent('drag', ev);\n } else if (Math.abs(e.x - s.x) + Math.abs(e.y - s.y) > 3) {\n /**\n * don't start unless we've moved at least 3 pixels\n */\n this.dragging = true;\n DDManager.dragElement = this;\n // if we're dragging an actual grid item, set the current drop as the grid (to detect enter/leave)\n let grid = (this.el as GridItemHTMLElement).gridstackNode?.grid;\n if (grid) {\n DDManager.dropElement = (grid.el as DDElementHost).ddElement.ddDroppable;\n } else {\n delete DDManager.dropElement;\n }\n this.helper = this._createHelper(e);\n this._setupHelperContainmentStyle();\n this.dragOffset = this._getDragOffset(e, this.el, this.helperContainment);\n const ev = Utils.initEvent<DragEvent>(e, { target: this.el, type: 'dragstart' });\n\n this._setupHelperStyle(e);\n if (this.option.start) {\n this.option.start(ev, this.ui());\n }\n this.triggerEvent('dragstart', ev);\n }\n e.preventDefault();\n return true;\n }\n\n /** @internal call when the mouse gets released to drop the item at current location */\n protected _mouseUp(e: MouseEvent): void {\n document.removeEventListener('mousemove', this._mouseMove, true);\n document.removeEventListener('mouseup', this._mouseUp, true);\n if (isTouch) {\n this.dragEl.removeEventListener('touchmove', touchmove, true);\n this.dragEl.removeEventListener('touchend', touchend, true);\n }\n if (this.dragging) {\n delete this.dragging;\n\n // reset the drop target if dragging over ourself (already parented, just moving during stop callback below)\n if (DDManager.dropElement?.el === this.el.parentElement) {\n delete DDManager.dropElement;\n }\n\n this.helperContainment.style.position = this.parentOriginStylePosition || null;\n if (this.helper === this.el) {\n this._removeHelperStyle();\n } else {\n this.helper.remove();\n }\n const ev = Utils.initEvent<DragEvent>(e, { target: this.el, type: 'dragstop' });\n if (this.option.stop) {\n this.option.stop(ev); // NOTE: destroy() will be called when removing item, so expect NULL ptr after!\n }\n this.triggerEvent('dragstop', ev);\n\n // call the droppable method to receive the item\n if (DDManager.dropElement) {\n DDManager.dropElement.drop(e);\n }\n }\n delete this.helper;\n delete this.mouseDownEvent;\n delete DDManager.dragElement;\n delete DDManager.dropElement;\n delete DDManager.mouseHandled;\n e.preventDefault();\n }\n\n /** @internal create a clone copy (or user defined method) of the original drag item if set */\n protected _createHelper(event: DragEvent): HTMLElement {\n let helper = this.el;\n if (typeof this.option.helper === 'function') {\n helper = this.option.helper(event);\n } else if (this.option.helper === 'clone') {\n helper = Utils.cloneNode(this.el);\n }\n if (!document.body.contains(helper)) {\n Utils.appendTo(helper, this.option.appendTo === 'parent' ? this.el.parentNode : this.option.appendTo);\n }\n if (helper === this.el) {\n this.dragElementOriginStyle = DDDraggable.originStyleProp.map(prop => this.el.style[prop]);\n }\n return helper;\n }\n\n /** @internal set the fix position of the dragged item */\n protected _setupHelperStyle(e: DragEvent): DDDraggable {\n this.helper.classList.add('ui-draggable-dragging');\n // TODO: set all at once with style.cssText += ... ? https://stackoverflow.com/questions/3968593\n const style = this.helper.style;\n style.pointerEvents = 'none'; // needed for over items to get enter/leave\n // style.cursor = 'move'; // TODO: can't set with pointerEvents=none ! (done in CSS as well)\n style['min-width'] = 0; // since we no longer relative to our parent and we don't resize anyway (normally 100/#column %)\n style.width = this.dragOffset.width + 'px';\n style.height = this.dragOffset.height + 'px';\n style.willChange = 'left, top';\n style.position = 'fixed'; // let us drag between grids by not clipping as parent .grid-stack is position: 'relative'\n this._dragFollow(e); // now position it\n style.transition = 'none'; // show up instantly\n setTimeout(() => {\n if (this.helper) {\n style.transition = null; // recover animation\n }\n }, 0);\n return this;\n }\n\n /** @internal restore back the original style before dragging */\n protected _removeHelperStyle(): DDDraggable {\n this.helper.classList.remove('ui-draggable-dragging');\n let node = (this.helper as GridItemHTMLElement)?.gridstackNode;\n // don't bother restoring styles if we're gonna remove anyway...\n if (this.dragElementOriginStyle && (!node || !node._isAboutToRemove)) {\n let helper = this.helper;\n // don't animate, otherwise we animate offseted when switching back to 'absolute' from 'fixed'\n let transition = this.dragElementOriginStyle['transition'] || null;\n helper.style.transition = this.dragElementOriginStyle['transition'] = 'none';\n DDDraggable.originStyleProp.forEach(prop => helper.style[prop] = this.dragElementOriginStyle[prop] || null);\n setTimeout(() => helper.style.transition = transition, 50); // recover animation from saved vars after a pause (0 isn't enough #1973)\n }\n delete this.dragElementOriginStyle;\n return this;\n }\n\n /** @internal updates the top/left position to follow the mouse */\n protected _dragFollow(e: DragEvent): void {\n let containmentRect = { left: 0, top: 0 };\n // if (this.helper.style.position === 'absolute') { // we use 'fixed'\n // const { left, top } = this.helperContainment.getBoundingClientRect();\n // containmentRect = { left, top };\n // }\n const style = this.helper.style;\n const offset = this.dragOffset;\n style.left = e.clientX + offset.offsetLeft - containmentRect.left + 'px';\n style.top = e.clientY + offset.offsetTop - containmentRect.top + 'px';\n }\n\n /** @internal */\n protected _setupHelperContainmentStyle(): DDDraggable {\n this.helperContainment = this.helper.parentElement;\n if (this.helper.style.position !== 'fixed') {\n this.parentOriginStylePosition = this.helperContainment.style.position;\n if (window.getComputedStyle(this.helperContainment).position.match(/static/)) {\n this.helperContainment.style.position = 'relative';\n }\n }\n return this;\n }\n\n /** @internal */\n protected _getDragOffset(event: DragEvent, el: HTMLElement, parent: HTMLElement): DragOffset {\n\n // in case ancestor has transform/perspective css properties that change the viewpoint\n let xformOffsetX = 0;\n let xformOffsetY = 0;\n if (parent) {\n const testEl = document.createElement('div');\n Utils.addElStyles(testEl, {\n opacity: '0',\n position: 'fixed',\n top: 0 + 'px',\n left: 0 + 'px',\n width: '1px',\n height: '1px',\n zIndex: '-999999',\n });\n parent.appendChild(testEl);\n const testElPosition = testEl.getBoundingClientRect();\n parent.removeChild(testEl);\n xformOffsetX = testElPosition.left;\n xformOffsetY = testElPosition.top;\n // TODO: scale ?\n }\n\n const targetOffset = el.getBoundingClientRect();\n return {\n left: targetOffset.left,\n top: targetOffset.top,\n offsetLeft: - event.clientX + targetOffset.left - xformOffsetX,\n offsetTop: - event.clientY + targetOffset.top - xformOffsetY,\n width: targetOffset.width,\n height: targetOffset.height\n };\n }\n\n /** @internal TODO: set to public as called by DDDroppable! */\n public ui(): DDUIData {\n const containmentEl = this.el.parentElement;\n const containmentRect = containmentEl.getBoundingClientRect();\n const offset = this.helper.getBoundingClientRect();\n return {\n position: { //Current CSS position of the helper as { top, left } object\n top: offset.top - containmentRect.top,\n left: offset.left - containmentRect.left\n }\n /* not used by GridStack for now...\n helper: [this.helper], //The object arr representing the helper that's being dragged.\n offset: { top: offset.top, left: offset.left } // Current offset position of the helper as { top, left } object.\n */\n };\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* dd-droppable.ts
|
|
2
|
+
* dd-droppable.ts 6.0.1
|
|
3
3
|
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license
|
|
4
4
|
*/
|
|
5
5
|
import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl';
|
|
@@ -13,7 +13,6 @@ export declare class DDDroppable extends DDBaseImplement implements HTMLElementE
|
|
|
13
13
|
accept: (el: HTMLElement) => boolean;
|
|
14
14
|
el: HTMLElement;
|
|
15
15
|
option: DDDroppableOpt;
|
|
16
|
-
protected static lastActive: DDDroppable;
|
|
17
16
|
constructor(el: HTMLElement, opts?: DDDroppableOpt);
|
|
18
17
|
on(event: 'drop' | 'dropover' | 'dropout', callback: (event: DragEvent) => void): void;
|
|
19
18
|
off(event: 'drop' | 'dropover' | 'dropout'): void;
|
|
@@ -21,4 +20,6 @@ export declare class DDDroppable extends DDBaseImplement implements HTMLElementE
|
|
|
21
20
|
disable(forDestroy?: boolean): void;
|
|
22
21
|
destroy(): void;
|
|
23
22
|
updateOption(opts: DDDroppableOpt): DDDroppable;
|
|
23
|
+
/** item is being dropped on us - called by the drag mouseup handler - this calls the client drop event */
|
|
24
|
+
drop(e: MouseEvent): void;
|
|
24
25
|
}
|