gridstack 4.3.1 → 4.4.0
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 +14 -5
- package/dist/es5/gridstack-dd.d.ts +35 -0
- package/dist/es5/gridstack-dd.js +683 -0
- package/dist/es5/gridstack-dd.js.map +1 -0
- package/dist/es5/gridstack-ddi.d.ts +17 -0
- package/dist/es5/gridstack-ddi.js +31 -0
- package/dist/es5/gridstack-ddi.js.map +1 -0
- package/dist/es5/gridstack-engine.d.ts +93 -0
- package/dist/es5/gridstack-engine.js +955 -0
- package/dist/es5/gridstack-engine.js.map +1 -0
- package/dist/es5/gridstack-h5.d.ts +10 -0
- package/dist/es5/gridstack-h5.js +3 -0
- package/dist/es5/gridstack-h5.js.LICENSE.txt +7 -0
- package/dist/es5/gridstack-h5.js.map +1 -0
- package/dist/es5/gridstack-jq.d.ts +10 -0
- package/dist/es5/gridstack-jq.js +3 -0
- package/dist/es5/gridstack-jq.js.LICENSE.txt +99 -0
- package/dist/es5/gridstack-jq.js.map +1 -0
- package/dist/{gridstack-poly.js → es5/gridstack-poly.js} +152 -1
- package/dist/es5/gridstack-static.d.ts +9 -0
- package/dist/es5/gridstack-static.js +3 -0
- package/dist/es5/gridstack-static.js.LICENSE.txt +7 -0
- package/dist/es5/gridstack-static.js.map +1 -0
- package/dist/es5/gridstack.d.ts +346 -0
- package/dist/es5/gridstack.js +1482 -0
- package/dist/es5/gridstack.js.map +1 -0
- package/dist/es5/h5/dd-base-impl.d.ts +20 -0
- package/dist/es5/h5/dd-base-impl.js +43 -0
- package/dist/es5/h5/dd-base-impl.js.map +1 -0
- package/dist/es5/h5/dd-draggable.d.ts +30 -0
- package/dist/es5/h5/dd-draggable.js +319 -0
- package/dist/es5/h5/dd-draggable.js.map +1 -0
- package/dist/es5/h5/dd-droppable.d.ts +23 -0
- package/dist/es5/h5/dd-droppable.js +182 -0
- package/dist/es5/h5/dd-droppable.js.map +1 -0
- package/dist/es5/h5/dd-element.d.ts +27 -0
- package/dist/es5/h5/dd-element.js +96 -0
- package/dist/es5/h5/dd-element.js.map +1 -0
- package/dist/es5/h5/dd-manager.d.ts +8 -0
- package/dist/es5/h5/dd-manager.js +14 -0
- package/dist/es5/h5/dd-manager.js.map +1 -0
- package/dist/es5/h5/dd-resizable-handle.d.ts +14 -0
- package/dist/es5/h5/dd-resizable-handle.js +83 -0
- package/dist/es5/h5/dd-resizable-handle.js.map +1 -0
- package/dist/es5/h5/dd-resizable.d.ts +29 -0
- package/dist/es5/h5/dd-resizable.js +302 -0
- package/dist/es5/h5/dd-resizable.js.map +1 -0
- package/dist/es5/h5/dd-utils.d.ts +17 -0
- package/dist/es5/h5/dd-utils.js +99 -0
- package/dist/es5/h5/dd-utils.js.map +1 -0
- package/dist/es5/h5/gridstack-dd-native.d.ts +26 -0
- package/dist/es5/h5/gridstack-dd-native.js +175 -0
- package/dist/es5/h5/gridstack-dd-native.js.map +1 -0
- package/dist/es5/jq/gridstack-dd-jqueryui.d.ts +22 -0
- package/dist/es5/jq/gridstack-dd-jqueryui.js +162 -0
- package/dist/es5/jq/gridstack-dd-jqueryui.js.map +1 -0
- package/dist/es5/types.d.ts +258 -0
- package/dist/es5/types.js +7 -0
- package/dist/es5/types.js.map +1 -0
- package/dist/es5/utils.d.ts +73 -0
- package/dist/es5/utils.js +444 -0
- package/dist/es5/utils.js.map +1 -0
- package/dist/gridstack-dd.d.ts +1 -1
- package/dist/gridstack-dd.js +7 -5
- package/dist/gridstack-dd.js.map +1 -1
- package/dist/gridstack-ddi.d.ts +1 -1
- package/dist/gridstack-ddi.js +1 -1
- package/dist/gridstack-ddi.js.map +1 -1
- package/dist/gridstack-engine.d.ts +1 -1
- package/dist/gridstack-engine.js +63 -45
- package/dist/gridstack-engine.js.map +1 -1
- package/dist/gridstack-h5.d.ts +1 -1
- package/dist/gridstack-h5.js +1 -1
- package/dist/gridstack-h5.js.LICENSE.txt +1 -1
- package/dist/gridstack-h5.js.map +1 -1
- package/dist/gridstack-jq.d.ts +1 -1
- package/dist/gridstack-jq.js +1 -1
- package/dist/gridstack-jq.js.LICENSE.txt +1 -1
- package/dist/gridstack-jq.js.map +1 -1
- package/dist/gridstack-static.d.ts +1 -1
- package/dist/gridstack-static.js +1 -1
- package/dist/gridstack-static.js.LICENSE.txt +1 -1
- package/dist/gridstack-static.js.map +1 -1
- package/dist/gridstack.css +1 -2
- package/dist/gridstack.d.ts +1 -1
- package/dist/gridstack.js +13 -11
- package/dist/gridstack.js.map +1 -1
- package/dist/gridstack.min.css +1 -1
- package/dist/h5/dd-base-impl.d.ts +1 -1
- package/dist/h5/dd-base-impl.js +1 -1
- package/dist/h5/dd-base-impl.js.map +1 -1
- package/dist/h5/dd-draggable.d.ts +1 -1
- package/dist/h5/dd-draggable.js +1 -1
- package/dist/h5/dd-draggable.js.map +1 -1
- package/dist/h5/dd-droppable.d.ts +1 -1
- package/dist/h5/dd-droppable.js +1 -1
- package/dist/h5/dd-droppable.js.map +1 -1
- package/dist/h5/dd-element.d.ts +1 -1
- package/dist/h5/dd-element.js +1 -1
- package/dist/h5/dd-element.js.map +1 -1
- package/dist/h5/dd-manager.d.ts +1 -1
- package/dist/h5/dd-manager.js +1 -1
- package/dist/h5/dd-manager.js.map +1 -1
- package/dist/h5/dd-resizable-handle.d.ts +1 -1
- package/dist/h5/dd-resizable-handle.js +1 -1
- package/dist/h5/dd-resizable-handle.js.map +1 -1
- package/dist/h5/dd-resizable.d.ts +1 -1
- package/dist/h5/dd-resizable.js +1 -1
- package/dist/h5/dd-resizable.js.map +1 -1
- package/dist/h5/dd-utils.d.ts +1 -1
- package/dist/h5/dd-utils.js +1 -1
- package/dist/h5/dd-utils.js.map +1 -1
- package/dist/h5/gridstack-dd-native.d.ts +1 -1
- package/dist/h5/gridstack-dd-native.js +1 -1
- package/dist/h5/gridstack-dd-native.js.map +1 -1
- package/dist/jq/gridstack-dd-jqueryui.js.map +1 -1
- package/dist/src/gridstack.scss +2 -2
- package/dist/types.d.ts +3 -2
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +3 -1
- package/dist/utils.js +4 -4
- package/dist/utils.js.map +1 -1
- package/doc/CHANGES.md +7 -1
- package/package.json +5 -3
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* dd-draggable.ts 4.4.0
|
|
4
|
+
* Copyright (c) 2021 Alain Dumesny - see GridStack root license
|
|
5
|
+
*/
|
|
6
|
+
var __extends = (this && this.__extends) || (function () {
|
|
7
|
+
var extendStatics = function (d, b) {
|
|
8
|
+
extendStatics = Object.setPrototypeOf ||
|
|
9
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
10
|
+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
11
|
+
return extendStatics(d, b);
|
|
12
|
+
};
|
|
13
|
+
return function (d, b) {
|
|
14
|
+
extendStatics(d, b);
|
|
15
|
+
function __() { this.constructor = d; }
|
|
16
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
17
|
+
};
|
|
18
|
+
})();
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.DDDraggable = void 0;
|
|
21
|
+
var dd_manager_1 = require("./dd-manager");
|
|
22
|
+
var dd_utils_1 = require("./dd-utils");
|
|
23
|
+
var dd_base_impl_1 = require("./dd-base-impl");
|
|
24
|
+
var DDDraggable = /** @class */ (function (_super) {
|
|
25
|
+
__extends(DDDraggable, _super);
|
|
26
|
+
function DDDraggable(el, option) {
|
|
27
|
+
if (option === void 0) { option = {}; }
|
|
28
|
+
var _this = _super.call(this) || this;
|
|
29
|
+
/** @internal */
|
|
30
|
+
_this.dragging = false;
|
|
31
|
+
/** @internal TODO: set to public as called by DDDroppable! */
|
|
32
|
+
_this.ui = function () {
|
|
33
|
+
var containmentEl = _this.el.parentElement;
|
|
34
|
+
var containmentRect = containmentEl.getBoundingClientRect();
|
|
35
|
+
var offset = _this.helper.getBoundingClientRect();
|
|
36
|
+
return {
|
|
37
|
+
position: {
|
|
38
|
+
top: offset.top - containmentRect.top,
|
|
39
|
+
left: offset.left - containmentRect.left
|
|
40
|
+
}
|
|
41
|
+
/* not used by GridStack for now...
|
|
42
|
+
helper: [this.helper], //The object arr representing the helper that's being dragged.
|
|
43
|
+
offset: { top: offset.top, left: offset.left } // Current offset position of the helper as { top, left } object.
|
|
44
|
+
*/
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
_this.el = el;
|
|
48
|
+
_this.option = option;
|
|
49
|
+
// get the element that is actually supposed to be dragged by
|
|
50
|
+
var className = option.handle.substring(1);
|
|
51
|
+
_this.dragEl = el.classList.contains(className) ? el : el.querySelector(option.handle) || el;
|
|
52
|
+
// create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions)
|
|
53
|
+
_this._dragStart = _this._dragStart.bind(_this);
|
|
54
|
+
_this._drag = _this._drag.bind(_this);
|
|
55
|
+
_this._dragEnd = _this._dragEnd.bind(_this);
|
|
56
|
+
_this.enable();
|
|
57
|
+
return _this;
|
|
58
|
+
}
|
|
59
|
+
DDDraggable.prototype.on = function (event, callback) {
|
|
60
|
+
_super.prototype.on.call(this, event, callback);
|
|
61
|
+
};
|
|
62
|
+
DDDraggable.prototype.off = function (event) {
|
|
63
|
+
_super.prototype.off.call(this, event);
|
|
64
|
+
};
|
|
65
|
+
DDDraggable.prototype.enable = function () {
|
|
66
|
+
_super.prototype.enable.call(this);
|
|
67
|
+
this.dragEl.draggable = true;
|
|
68
|
+
this.dragEl.addEventListener('dragstart', this._dragStart);
|
|
69
|
+
this.el.classList.remove('ui-draggable-disabled');
|
|
70
|
+
this.el.classList.add('ui-draggable');
|
|
71
|
+
};
|
|
72
|
+
DDDraggable.prototype.disable = function (forDestroy) {
|
|
73
|
+
if (forDestroy === void 0) { forDestroy = false; }
|
|
74
|
+
_super.prototype.disable.call(this);
|
|
75
|
+
this.dragEl.removeAttribute('draggable');
|
|
76
|
+
this.dragEl.removeEventListener('dragstart', this._dragStart);
|
|
77
|
+
this.el.classList.remove('ui-draggable');
|
|
78
|
+
if (!forDestroy)
|
|
79
|
+
this.el.classList.add('ui-draggable-disabled');
|
|
80
|
+
};
|
|
81
|
+
DDDraggable.prototype.destroy = function () {
|
|
82
|
+
if (this.dragging) {
|
|
83
|
+
// Destroy while dragging should remove dragend listener and manually trigger
|
|
84
|
+
// dragend, otherwise dragEnd can't perform dragstop because eventRegistry is
|
|
85
|
+
// destroyed.
|
|
86
|
+
this._dragEnd({});
|
|
87
|
+
}
|
|
88
|
+
this.disable(true);
|
|
89
|
+
delete this.el;
|
|
90
|
+
delete this.helper;
|
|
91
|
+
delete this.option;
|
|
92
|
+
_super.prototype.destroy.call(this);
|
|
93
|
+
};
|
|
94
|
+
DDDraggable.prototype.updateOption = function (opts) {
|
|
95
|
+
var _this = this;
|
|
96
|
+
Object.keys(opts).forEach(function (key) { return _this.option[key] = opts[key]; });
|
|
97
|
+
return this;
|
|
98
|
+
};
|
|
99
|
+
/** @internal */
|
|
100
|
+
DDDraggable.prototype._dragStart = function (event) {
|
|
101
|
+
var _this = this;
|
|
102
|
+
dd_manager_1.DDManager.dragElement = this;
|
|
103
|
+
this.helper = this._createHelper(event);
|
|
104
|
+
this._setupHelperContainmentStyle();
|
|
105
|
+
this.dragOffset = this._getDragOffset(event, this.el, this.helperContainment);
|
|
106
|
+
var ev = dd_utils_1.DDUtils.initEvent(event, { target: this.el, type: 'dragstart' });
|
|
107
|
+
if (this.helper !== this.el) {
|
|
108
|
+
this._setupDragFollowNodeNotifyStart(ev);
|
|
109
|
+
// immediately set external helper initial position to avoid flickering behavior and unnecessary looping in `_packNodes()`
|
|
110
|
+
this._dragFollow(event);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.dragFollowTimer = window.setTimeout(function () {
|
|
114
|
+
delete _this.dragFollowTimer;
|
|
115
|
+
_this._setupDragFollowNodeNotifyStart(ev);
|
|
116
|
+
}, 0);
|
|
117
|
+
}
|
|
118
|
+
this._cancelDragGhost(event);
|
|
119
|
+
};
|
|
120
|
+
/** @internal */
|
|
121
|
+
DDDraggable.prototype._setupDragFollowNodeNotifyStart = function (ev) {
|
|
122
|
+
this._setupHelperStyle();
|
|
123
|
+
document.addEventListener('dragover', this._drag, DDDraggable.dragEventListenerOption);
|
|
124
|
+
this.dragEl.addEventListener('dragend', this._dragEnd);
|
|
125
|
+
if (this.option.start) {
|
|
126
|
+
this.option.start(ev, this.ui());
|
|
127
|
+
}
|
|
128
|
+
this.dragging = true;
|
|
129
|
+
this.helper.classList.add('ui-draggable-dragging');
|
|
130
|
+
this.triggerEvent('dragstart', ev);
|
|
131
|
+
return this;
|
|
132
|
+
};
|
|
133
|
+
/** @internal */
|
|
134
|
+
DDDraggable.prototype._drag = function (event) {
|
|
135
|
+
// Safari: prevent default to allow drop to happen instead of reverting back (with animation) and delaying dragend #1541
|
|
136
|
+
// https://stackoverflow.com/questions/61760755/how-to-fire-dragend-event-immediately
|
|
137
|
+
event.preventDefault();
|
|
138
|
+
this._dragFollow(event);
|
|
139
|
+
var ev = dd_utils_1.DDUtils.initEvent(event, { target: this.el, type: 'drag' });
|
|
140
|
+
if (this.option.drag) {
|
|
141
|
+
this.option.drag(ev, this.ui());
|
|
142
|
+
}
|
|
143
|
+
this.triggerEvent('drag', ev);
|
|
144
|
+
};
|
|
145
|
+
/** @internal */
|
|
146
|
+
DDDraggable.prototype._dragEnd = function (event) {
|
|
147
|
+
if (this.dragFollowTimer) {
|
|
148
|
+
clearTimeout(this.dragFollowTimer);
|
|
149
|
+
delete this.dragFollowTimer;
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
if (this.paintTimer) {
|
|
154
|
+
cancelAnimationFrame(this.paintTimer);
|
|
155
|
+
}
|
|
156
|
+
document.removeEventListener('dragover', this._drag, DDDraggable.dragEventListenerOption);
|
|
157
|
+
this.dragEl.removeEventListener('dragend', this._dragEnd);
|
|
158
|
+
}
|
|
159
|
+
this.dragging = false;
|
|
160
|
+
this.helper.classList.remove('ui-draggable-dragging');
|
|
161
|
+
this.helperContainment.style.position = this.parentOriginStylePosition || null;
|
|
162
|
+
if (this.helper === this.el) {
|
|
163
|
+
this._removeHelperStyle();
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
this.helper.remove();
|
|
167
|
+
}
|
|
168
|
+
var ev = dd_utils_1.DDUtils.initEvent(event, { target: this.el, type: 'dragstop' });
|
|
169
|
+
if (this.option.stop) {
|
|
170
|
+
this.option.stop(ev); // Note: ui() not used by gridstack so don't pass
|
|
171
|
+
}
|
|
172
|
+
this.triggerEvent('dragstop', ev);
|
|
173
|
+
delete dd_manager_1.DDManager.dragElement;
|
|
174
|
+
delete this.helper;
|
|
175
|
+
};
|
|
176
|
+
/** @internal create a clone copy (or user defined method) of the original drag item if set */
|
|
177
|
+
DDDraggable.prototype._createHelper = function (event) {
|
|
178
|
+
var _this = this;
|
|
179
|
+
var helper = this.el;
|
|
180
|
+
if (typeof this.option.helper === 'function') {
|
|
181
|
+
helper = this.option.helper(event);
|
|
182
|
+
}
|
|
183
|
+
else if (this.option.helper === 'clone') {
|
|
184
|
+
helper = dd_utils_1.DDUtils.clone(this.el);
|
|
185
|
+
}
|
|
186
|
+
if (!document.body.contains(helper)) {
|
|
187
|
+
dd_utils_1.DDUtils.appendTo(helper, this.option.appendTo === 'parent' ? this.el.parentNode : this.option.appendTo);
|
|
188
|
+
}
|
|
189
|
+
if (helper === this.el) {
|
|
190
|
+
this.dragElementOriginStyle = DDDraggable.originStyleProp.map(function (prop) { return _this.el.style[prop]; });
|
|
191
|
+
}
|
|
192
|
+
return helper;
|
|
193
|
+
};
|
|
194
|
+
/** @internal */
|
|
195
|
+
DDDraggable.prototype._setupHelperStyle = function () {
|
|
196
|
+
var _this = this;
|
|
197
|
+
this.helper.style.pointerEvents = 'none';
|
|
198
|
+
this.helper.style.width = this.dragOffset.width + 'px';
|
|
199
|
+
this.helper.style.height = this.dragOffset.height + 'px';
|
|
200
|
+
this.helper.style.willChange = 'left, top';
|
|
201
|
+
this.helper.style.transition = 'none'; // show up instantly
|
|
202
|
+
this.helper.style.position = this.option.basePosition || DDDraggable.basePosition;
|
|
203
|
+
this.helper.style.zIndex = '1000';
|
|
204
|
+
setTimeout(function () {
|
|
205
|
+
if (_this.helper) {
|
|
206
|
+
_this.helper.style.transition = null; // recover animation
|
|
207
|
+
}
|
|
208
|
+
}, 0);
|
|
209
|
+
return this;
|
|
210
|
+
};
|
|
211
|
+
/** @internal */
|
|
212
|
+
DDDraggable.prototype._removeHelperStyle = function () {
|
|
213
|
+
var _this = this;
|
|
214
|
+
// don't bother restoring styles if we're gonna remove anyway...
|
|
215
|
+
var node = this.helper ? this.helper.gridstackNode : undefined;
|
|
216
|
+
if (!node || !node._isAboutToRemove) {
|
|
217
|
+
DDDraggable.originStyleProp.forEach(function (prop) {
|
|
218
|
+
_this.helper.style[prop] = _this.dragElementOriginStyle[prop] || null;
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
delete this.dragElementOriginStyle;
|
|
222
|
+
return this;
|
|
223
|
+
};
|
|
224
|
+
/** @internal */
|
|
225
|
+
DDDraggable.prototype._dragFollow = function (event) {
|
|
226
|
+
var _this = this;
|
|
227
|
+
if (this.paintTimer) {
|
|
228
|
+
cancelAnimationFrame(this.paintTimer);
|
|
229
|
+
}
|
|
230
|
+
this.paintTimer = requestAnimationFrame(function () {
|
|
231
|
+
delete _this.paintTimer;
|
|
232
|
+
var offset = _this.dragOffset;
|
|
233
|
+
var containmentRect = { left: 0, top: 0 };
|
|
234
|
+
if (_this.helper.style.position === 'absolute') {
|
|
235
|
+
var _a = _this.helperContainment.getBoundingClientRect(), left = _a.left, top_1 = _a.top;
|
|
236
|
+
containmentRect = { left: left, top: top_1 };
|
|
237
|
+
}
|
|
238
|
+
_this.helper.style.left = event.clientX + offset.offsetLeft - containmentRect.left + 'px';
|
|
239
|
+
_this.helper.style.top = event.clientY + offset.offsetTop - containmentRect.top + 'px';
|
|
240
|
+
});
|
|
241
|
+
};
|
|
242
|
+
/** @internal */
|
|
243
|
+
DDDraggable.prototype._setupHelperContainmentStyle = function () {
|
|
244
|
+
this.helperContainment = this.helper.parentElement;
|
|
245
|
+
if (this.option.basePosition !== 'fixed') {
|
|
246
|
+
this.parentOriginStylePosition = this.helperContainment.style.position;
|
|
247
|
+
if (window.getComputedStyle(this.helperContainment).position.match(/static/)) {
|
|
248
|
+
this.helperContainment.style.position = 'relative';
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return this;
|
|
252
|
+
};
|
|
253
|
+
/** @internal prevent the default gost image to be created (which has wrongas we move the helper/element instead
|
|
254
|
+
* (legacy jquery UI code updates the top/left of the item).
|
|
255
|
+
* TODO: maybe use mouse event instead of HTML5 drag as we have to work around it anyway, or change code to not update
|
|
256
|
+
* the actual grid-item but move the gost image around (and special case jq version) ?
|
|
257
|
+
**/
|
|
258
|
+
DDDraggable.prototype._cancelDragGhost = function (e) {
|
|
259
|
+
/* doesn't seem to do anything...
|
|
260
|
+
let t = e.dataTransfer;
|
|
261
|
+
t.effectAllowed = 'none';
|
|
262
|
+
t.dropEffect = 'none';
|
|
263
|
+
t.setData('text', '');
|
|
264
|
+
*/
|
|
265
|
+
// NOTE: according to spec (and required by Safari see #1540) the image has to be visible in the browser (in dom and not hidden) so make it a 1px div
|
|
266
|
+
var img = document.createElement('div');
|
|
267
|
+
img.style.width = '1px';
|
|
268
|
+
img.style.height = '1px';
|
|
269
|
+
img.style.position = 'fixed'; // prevent unwanted scrollbar
|
|
270
|
+
document.body.appendChild(img);
|
|
271
|
+
e.dataTransfer.setDragImage(img, 0, 0);
|
|
272
|
+
setTimeout(function () { return document.body.removeChild(img); }); // nuke once drag had a chance to grab this 'image'
|
|
273
|
+
e.stopPropagation();
|
|
274
|
+
return this;
|
|
275
|
+
};
|
|
276
|
+
/** @internal */
|
|
277
|
+
DDDraggable.prototype._getDragOffset = function (event, el, parent) {
|
|
278
|
+
// in case ancestor has transform/perspective css properties that change the viewpoint
|
|
279
|
+
var xformOffsetX = 0;
|
|
280
|
+
var xformOffsetY = 0;
|
|
281
|
+
if (parent) {
|
|
282
|
+
var testEl = document.createElement('div');
|
|
283
|
+
dd_utils_1.DDUtils.addElStyles(testEl, {
|
|
284
|
+
opacity: '0',
|
|
285
|
+
position: 'fixed',
|
|
286
|
+
top: 0 + 'px',
|
|
287
|
+
left: 0 + 'px',
|
|
288
|
+
width: '1px',
|
|
289
|
+
height: '1px',
|
|
290
|
+
zIndex: '-999999',
|
|
291
|
+
});
|
|
292
|
+
parent.appendChild(testEl);
|
|
293
|
+
var testElPosition = testEl.getBoundingClientRect();
|
|
294
|
+
parent.removeChild(testEl);
|
|
295
|
+
xformOffsetX = testElPosition.left;
|
|
296
|
+
xformOffsetY = testElPosition.top;
|
|
297
|
+
// TODO: scale ?
|
|
298
|
+
}
|
|
299
|
+
var targetOffset = el.getBoundingClientRect();
|
|
300
|
+
return {
|
|
301
|
+
left: targetOffset.left,
|
|
302
|
+
top: targetOffset.top,
|
|
303
|
+
offsetLeft: -event.clientX + targetOffset.left - xformOffsetX,
|
|
304
|
+
offsetTop: -event.clientY + targetOffset.top - xformOffsetY,
|
|
305
|
+
width: targetOffset.width,
|
|
306
|
+
height: targetOffset.height
|
|
307
|
+
};
|
|
308
|
+
};
|
|
309
|
+
/** @internal */
|
|
310
|
+
DDDraggable.basePosition = 'absolute';
|
|
311
|
+
/** @internal #1541 can't have {passive: true} on Safari as otherwise it reverts animate back to old location on drop */
|
|
312
|
+
DDDraggable.dragEventListenerOption = true; // DDUtils.isEventSupportPassiveOption ? { capture: true, passive: true } : true;
|
|
313
|
+
/** @internal */
|
|
314
|
+
DDDraggable.originStyleProp = ['transition', 'pointerEvents', 'position',
|
|
315
|
+
'left', 'top', 'opacity', 'zIndex', 'width', 'height', 'willChange'];
|
|
316
|
+
return DDDraggable;
|
|
317
|
+
}(dd_base_impl_1.DDBaseImplement));
|
|
318
|
+
exports.DDDraggable = DDDraggable;
|
|
319
|
+
//# sourceMappingURL=dd-draggable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dd-draggable.js","sourceRoot":"","sources":["../../../src/h5/dd-draggable.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * dd-draggable.ts 4.4.0\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\n */\n\nimport { DDManager } from './dd-manager';\nimport { DDUtils } from './dd-utils';\nimport { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl';\nimport { GridItemHTMLElement, DDUIData } from '../types';\n\n// TODO: merge with DDDragOpt ?\nexport interface DDDraggableOpt {\n appendTo?: string | HTMLElement;\n containment?: string | HTMLElement; // TODO: not implemented yet\n handle?: string;\n revert?: string | boolean | unknown; // TODO: not implemented yet\n scroll?: boolean; // nature support by HTML5 drag drop, can't be switch to off actually\n helper?: string | HTMLElement | ((event: Event) => HTMLElement);\n basePosition?: 'fixed' | 'absolute';\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\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 private dragOffset: DragOffset;\n /** @internal */\n private dragElementOriginStyle: Array<string>;\n /** @internal */\n private dragFollowTimer: number;\n /** @internal */\n private dragEl: HTMLElement;\n /** @internal */\n private dragging = false;\n /** @internal */\n private paintTimer: number;\n /** @internal */\n private parentOriginStylePosition: string;\n /** @internal */\n private helperContainment: HTMLElement;\n /** @internal */\n private static basePosition: 'fixed' | 'absolute' = 'absolute';\n /** @internal #1541 can't have {passive: true} on Safari as otherwise it reverts animate back to old location on drop */\n private static dragEventListenerOption = true; // DDUtils.isEventSupportPassiveOption ? { capture: true, passive: true } : true;\n /** @internal */\n private static originStyleProp = ['transition', 'pointerEvents', 'position',\n 'left', 'top', 'opacity', 'zIndex', 'width', 'height', 'willChange'];\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._dragStart = this._dragStart.bind(this);\n this._drag = this._drag.bind(this);\n this._dragEnd = this._dragEnd.bind(this);\n this.enable();\n }\n\n public on(event: 'drag' | 'dragstart' | 'dragstop', callback: (event: DragEvent) => void): void {\n super.on(event, callback);\n }\n\n public off(event: 'drag' | 'dragstart' | 'dragstop'): void {\n super.off(event);\n }\n\n public enable(): void {\n super.enable();\n this.dragEl.draggable = true;\n this.dragEl.addEventListener('dragstart', this._dragStart);\n this.el.classList.remove('ui-draggable-disabled');\n this.el.classList.add('ui-draggable');\n }\n\n public disable(forDestroy = false): void {\n super.disable();\n this.dragEl.removeAttribute('draggable');\n this.dragEl.removeEventListener('dragstart', this._dragStart);\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) {\n // Destroy while dragging should remove dragend listener and manually trigger\n // dragend, otherwise dragEnd can't perform dragstop because eventRegistry is\n // destroyed.\n this._dragEnd({} as DragEvent);\n }\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 */\n private _dragStart(event: DragEvent): void {\n DDManager.dragElement = this;\n this.helper = this._createHelper(event);\n this._setupHelperContainmentStyle();\n this.dragOffset = this._getDragOffset(event, this.el, this.helperContainment);\n const ev = DDUtils.initEvent<DragEvent>(event, { target: this.el, type: 'dragstart' });\n if (this.helper !== this.el) {\n this._setupDragFollowNodeNotifyStart(ev);\n // immediately set external helper initial position to avoid flickering behavior and unnecessary looping in `_packNodes()`\n this._dragFollow(event);\n } else {\n this.dragFollowTimer = window.setTimeout(() => {\n delete this.dragFollowTimer;\n this._setupDragFollowNodeNotifyStart(ev);\n }, 0);\n }\n this._cancelDragGhost(event);\n }\n\n /** @internal */\n private _setupDragFollowNodeNotifyStart(ev: Event): DDDraggable {\n this._setupHelperStyle();\n document.addEventListener('dragover', this._drag, DDDraggable.dragEventListenerOption);\n this.dragEl.addEventListener('dragend', this._dragEnd);\n if (this.option.start) {\n this.option.start(ev, this.ui());\n }\n this.dragging = true;\n this.helper.classList.add('ui-draggable-dragging');\n this.triggerEvent('dragstart', ev);\n return this;\n }\n\n /** @internal */\n private _drag(event: DragEvent): void {\n // Safari: prevent default to allow drop to happen instead of reverting back (with animation) and delaying dragend #1541\n // https://stackoverflow.com/questions/61760755/how-to-fire-dragend-event-immediately\n event.preventDefault();\n this._dragFollow(event);\n const ev = DDUtils.initEvent<DragEvent>(event, { target: this.el, type: 'drag' });\n if (this.option.drag) {\n this.option.drag(ev, this.ui());\n }\n this.triggerEvent('drag', ev);\n }\n\n /** @internal */\n private _dragEnd(event: DragEvent): void {\n if (this.dragFollowTimer) {\n clearTimeout(this.dragFollowTimer);\n delete this.dragFollowTimer;\n return;\n } else {\n if (this.paintTimer) {\n cancelAnimationFrame(this.paintTimer);\n }\n document.removeEventListener('dragover', this._drag, DDDraggable.dragEventListenerOption);\n this.dragEl.removeEventListener('dragend', this._dragEnd);\n }\n this.dragging = false;\n this.helper.classList.remove('ui-draggable-dragging');\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 = DDUtils.initEvent<DragEvent>(event, { target: this.el, type: 'dragstop' });\n if (this.option.stop) {\n this.option.stop(ev); // Note: ui() not used by gridstack so don't pass\n }\n this.triggerEvent('dragstop', ev);\n delete DDManager.dragElement;\n delete this.helper;\n }\n\n /** @internal create a clone copy (or user defined method) of the original drag item if set */\n private _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 = DDUtils.clone(this.el);\n }\n if (!document.body.contains(helper)) {\n DDUtils.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 */\n private _setupHelperStyle(): DDDraggable {\n this.helper.style.pointerEvents = 'none';\n this.helper.style.width = this.dragOffset.width + 'px';\n this.helper.style.height = this.dragOffset.height + 'px';\n this.helper.style.willChange = 'left, top';\n this.helper.style.transition = 'none'; // show up instantly\n this.helper.style.position = this.option.basePosition || DDDraggable.basePosition;\n this.helper.style.zIndex = '1000';\n setTimeout(() => {\n if (this.helper) {\n this.helper.style.transition = null; // recover animation\n }\n }, 0);\n return this;\n }\n\n /** @internal */\n private _removeHelperStyle(): DDDraggable {\n // don't bother restoring styles if we're gonna remove anyway...\n let node = this.helper ? (this.helper as GridItemHTMLElement).gridstackNode : undefined;\n if (!node || !node._isAboutToRemove) {\n DDDraggable.originStyleProp.forEach(prop => {\n this.helper.style[prop] = this.dragElementOriginStyle[prop] || null;\n });\n }\n delete this.dragElementOriginStyle;\n return this;\n }\n\n /** @internal */\n private _dragFollow(event: DragEvent): void {\n if (this.paintTimer) {\n cancelAnimationFrame(this.paintTimer);\n }\n this.paintTimer = requestAnimationFrame(() => {\n delete this.paintTimer;\n const offset = this.dragOffset;\n let containmentRect = { left: 0, top: 0 };\n if (this.helper.style.position === 'absolute') {\n const { left, top } = this.helperContainment.getBoundingClientRect();\n containmentRect = { left, top };\n }\n this.helper.style.left = event.clientX + offset.offsetLeft - containmentRect.left + 'px';\n this.helper.style.top = event.clientY + offset.offsetTop - containmentRect.top + 'px';\n });\n }\n\n /** @internal */\n private _setupHelperContainmentStyle(): DDDraggable {\n this.helperContainment = this.helper.parentElement;\n if (this.option.basePosition !== '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 prevent the default gost image to be created (which has wrongas we move the helper/element instead\n * (legacy jquery UI code updates the top/left of the item).\n * TODO: maybe use mouse event instead of HTML5 drag as we have to work around it anyway, or change code to not update\n * the actual grid-item but move the gost image around (and special case jq version) ?\n **/\n private _cancelDragGhost(e: DragEvent): DDDraggable {\n /* doesn't seem to do anything...\n let t = e.dataTransfer;\n t.effectAllowed = 'none';\n t.dropEffect = 'none';\n t.setData('text', '');\n */\n\n // NOTE: according to spec (and required by Safari see #1540) the image has to be visible in the browser (in dom and not hidden) so make it a 1px div\n let img = document.createElement('div');\n img.style.width = '1px';\n img.style.height = '1px';\n img.style.position = 'fixed'; // prevent unwanted scrollbar\n document.body.appendChild(img);\n e.dataTransfer.setDragImage(img, 0, 0);\n setTimeout(() => document.body.removeChild(img)); // nuke once drag had a chance to grab this 'image'\n\n e.stopPropagation();\n return this;\n }\n\n /** @internal */\n private _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 DDUtils.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\n\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dd-droppable.ts 4.4.0
|
|
3
|
+
* Copyright (c) 2021 Alain Dumesny - see GridStack root license
|
|
4
|
+
*/
|
|
5
|
+
import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl';
|
|
6
|
+
export interface DDDroppableOpt {
|
|
7
|
+
accept?: string | ((el: HTMLElement) => boolean);
|
|
8
|
+
drop?: (event: DragEvent, ui: any) => void;
|
|
9
|
+
over?: (event: DragEvent, ui: any) => void;
|
|
10
|
+
out?: (event: DragEvent, ui: any) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt<DDDroppableOpt> {
|
|
13
|
+
accept: (el: HTMLElement) => boolean;
|
|
14
|
+
el: HTMLElement;
|
|
15
|
+
option: DDDroppableOpt;
|
|
16
|
+
constructor(el: HTMLElement, opts?: DDDroppableOpt);
|
|
17
|
+
on(event: 'drop' | 'dropover' | 'dropout', callback: (event: DragEvent) => void): void;
|
|
18
|
+
off(event: 'drop' | 'dropover' | 'dropout'): void;
|
|
19
|
+
enable(): void;
|
|
20
|
+
disable(forDestroy?: boolean): void;
|
|
21
|
+
destroy(): void;
|
|
22
|
+
updateOption(opts: DDDroppableOpt): DDDroppable;
|
|
23
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* dd-droppable.ts 4.4.0
|
|
4
|
+
* Copyright (c) 2021 Alain Dumesny - see GridStack root license
|
|
5
|
+
*/
|
|
6
|
+
var __extends = (this && this.__extends) || (function () {
|
|
7
|
+
var extendStatics = function (d, b) {
|
|
8
|
+
extendStatics = Object.setPrototypeOf ||
|
|
9
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
10
|
+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
11
|
+
return extendStatics(d, b);
|
|
12
|
+
};
|
|
13
|
+
return function (d, b) {
|
|
14
|
+
extendStatics(d, b);
|
|
15
|
+
function __() { this.constructor = d; }
|
|
16
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
17
|
+
};
|
|
18
|
+
})();
|
|
19
|
+
var __assign = (this && this.__assign) || function () {
|
|
20
|
+
__assign = Object.assign || function(t) {
|
|
21
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
22
|
+
s = arguments[i];
|
|
23
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
24
|
+
t[p] = s[p];
|
|
25
|
+
}
|
|
26
|
+
return t;
|
|
27
|
+
};
|
|
28
|
+
return __assign.apply(this, arguments);
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.DDDroppable = void 0;
|
|
32
|
+
var dd_manager_1 = require("./dd-manager");
|
|
33
|
+
var dd_base_impl_1 = require("./dd-base-impl");
|
|
34
|
+
var dd_utils_1 = require("./dd-utils");
|
|
35
|
+
var DDDroppable = /** @class */ (function (_super) {
|
|
36
|
+
__extends(DDDroppable, _super);
|
|
37
|
+
function DDDroppable(el, opts) {
|
|
38
|
+
if (opts === void 0) { opts = {}; }
|
|
39
|
+
var _this = _super.call(this) || this;
|
|
40
|
+
_this.el = el;
|
|
41
|
+
_this.option = opts;
|
|
42
|
+
// create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions)
|
|
43
|
+
_this._dragEnter = _this._dragEnter.bind(_this);
|
|
44
|
+
_this._dragOver = _this._dragOver.bind(_this);
|
|
45
|
+
_this._dragLeave = _this._dragLeave.bind(_this);
|
|
46
|
+
_this._drop = _this._drop.bind(_this);
|
|
47
|
+
_this.el.classList.add('ui-droppable');
|
|
48
|
+
_this.el.addEventListener('dragenter', _this._dragEnter);
|
|
49
|
+
_this._setupAccept();
|
|
50
|
+
return _this;
|
|
51
|
+
}
|
|
52
|
+
DDDroppable.prototype.on = function (event, callback) {
|
|
53
|
+
_super.prototype.on.call(this, event, callback);
|
|
54
|
+
};
|
|
55
|
+
DDDroppable.prototype.off = function (event) {
|
|
56
|
+
_super.prototype.off.call(this, event);
|
|
57
|
+
};
|
|
58
|
+
DDDroppable.prototype.enable = function () {
|
|
59
|
+
if (!this.disabled)
|
|
60
|
+
return;
|
|
61
|
+
_super.prototype.enable.call(this);
|
|
62
|
+
this.el.classList.remove('ui-droppable-disabled');
|
|
63
|
+
this.el.addEventListener('dragenter', this._dragEnter);
|
|
64
|
+
};
|
|
65
|
+
DDDroppable.prototype.disable = function (forDestroy) {
|
|
66
|
+
if (forDestroy === void 0) { forDestroy = false; }
|
|
67
|
+
if (this.disabled)
|
|
68
|
+
return;
|
|
69
|
+
_super.prototype.disable.call(this);
|
|
70
|
+
if (!forDestroy)
|
|
71
|
+
this.el.classList.add('ui-droppable-disabled');
|
|
72
|
+
this.el.removeEventListener('dragenter', this._dragEnter);
|
|
73
|
+
};
|
|
74
|
+
DDDroppable.prototype.destroy = function () {
|
|
75
|
+
if (this.moving) {
|
|
76
|
+
this._removeLeaveCallbacks();
|
|
77
|
+
}
|
|
78
|
+
this.disable(true);
|
|
79
|
+
this.el.classList.remove('ui-droppable');
|
|
80
|
+
this.el.classList.remove('ui-droppable-disabled');
|
|
81
|
+
delete this.moving;
|
|
82
|
+
_super.prototype.destroy.call(this);
|
|
83
|
+
};
|
|
84
|
+
DDDroppable.prototype.updateOption = function (opts) {
|
|
85
|
+
var _this = this;
|
|
86
|
+
Object.keys(opts).forEach(function (key) { return _this.option[key] = opts[key]; });
|
|
87
|
+
this._setupAccept();
|
|
88
|
+
return this;
|
|
89
|
+
};
|
|
90
|
+
/** @internal called when the cursor enters our area - prepare for a possible drop and track leaving */
|
|
91
|
+
DDDroppable.prototype._dragEnter = function (event) {
|
|
92
|
+
if (!this._canDrop())
|
|
93
|
+
return;
|
|
94
|
+
event.preventDefault();
|
|
95
|
+
if (this.moving)
|
|
96
|
+
return; // ignore multiple 'dragenter' as we go over existing items
|
|
97
|
+
this.moving = true;
|
|
98
|
+
var ev = dd_utils_1.DDUtils.initEvent(event, { target: this.el, type: 'dropover' });
|
|
99
|
+
if (this.option.over) {
|
|
100
|
+
this.option.over(ev, this._ui(dd_manager_1.DDManager.dragElement));
|
|
101
|
+
}
|
|
102
|
+
this.triggerEvent('dropover', ev);
|
|
103
|
+
this.el.addEventListener('dragover', this._dragOver);
|
|
104
|
+
this.el.addEventListener('drop', this._drop);
|
|
105
|
+
this.el.addEventListener('dragleave', this._dragLeave);
|
|
106
|
+
this.el.classList.add('ui-droppable-over');
|
|
107
|
+
};
|
|
108
|
+
/** @internal called when an moving to drop item is being dragged over - do nothing but eat the event */
|
|
109
|
+
DDDroppable.prototype._dragOver = function (event) {
|
|
110
|
+
event.preventDefault();
|
|
111
|
+
event.stopPropagation();
|
|
112
|
+
};
|
|
113
|
+
/** @internal called when the item is leaving our area, stop tracking if we had moving item */
|
|
114
|
+
DDDroppable.prototype._dragLeave = function (event) {
|
|
115
|
+
// ignore leave events on our children (get when starting to drag our items)
|
|
116
|
+
// Note: Safari Mac has null relatedTarget which causes #1684 so check if DragEvent is inside the grid instead
|
|
117
|
+
if (!event.relatedTarget) {
|
|
118
|
+
var _a = this.el.getBoundingClientRect(), bottom = _a.bottom, left = _a.left, right = _a.right, top_1 = _a.top;
|
|
119
|
+
if (event.x < right && event.x > left && event.y < bottom && event.y > top_1)
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
else if (this.el.contains(event.relatedTarget))
|
|
123
|
+
return;
|
|
124
|
+
this._removeLeaveCallbacks();
|
|
125
|
+
if (this.moving) {
|
|
126
|
+
event.preventDefault();
|
|
127
|
+
var ev = dd_utils_1.DDUtils.initEvent(event, { target: this.el, type: 'dropout' });
|
|
128
|
+
if (this.option.out) {
|
|
129
|
+
this.option.out(ev, this._ui(dd_manager_1.DDManager.dragElement));
|
|
130
|
+
}
|
|
131
|
+
this.triggerEvent('dropout', ev);
|
|
132
|
+
}
|
|
133
|
+
delete this.moving;
|
|
134
|
+
};
|
|
135
|
+
/** @internal item is being dropped on us - call the client drop event */
|
|
136
|
+
DDDroppable.prototype._drop = function (event) {
|
|
137
|
+
if (!this.moving)
|
|
138
|
+
return; // should not have received event...
|
|
139
|
+
event.preventDefault();
|
|
140
|
+
var ev = dd_utils_1.DDUtils.initEvent(event, { target: this.el, type: 'drop' });
|
|
141
|
+
if (this.option.drop) {
|
|
142
|
+
this.option.drop(ev, this._ui(dd_manager_1.DDManager.dragElement));
|
|
143
|
+
}
|
|
144
|
+
this.triggerEvent('drop', ev);
|
|
145
|
+
this._removeLeaveCallbacks();
|
|
146
|
+
delete this.moving;
|
|
147
|
+
};
|
|
148
|
+
/** @internal called to remove callbacks when leaving or dropping */
|
|
149
|
+
DDDroppable.prototype._removeLeaveCallbacks = function () {
|
|
150
|
+
this.el.removeEventListener('dragleave', this._dragLeave);
|
|
151
|
+
this.el.classList.remove('ui-droppable-over');
|
|
152
|
+
if (this.moving) {
|
|
153
|
+
this.el.removeEventListener('dragover', this._dragOver);
|
|
154
|
+
this.el.removeEventListener('drop', this._drop);
|
|
155
|
+
}
|
|
156
|
+
// Note: this.moving is reset by callee of this routine to control the flow
|
|
157
|
+
};
|
|
158
|
+
/** @internal */
|
|
159
|
+
DDDroppable.prototype._canDrop = function () {
|
|
160
|
+
return dd_manager_1.DDManager.dragElement && (!this.accept || this.accept(dd_manager_1.DDManager.dragElement.el));
|
|
161
|
+
};
|
|
162
|
+
/** @internal */
|
|
163
|
+
DDDroppable.prototype._setupAccept = function () {
|
|
164
|
+
var _this = this;
|
|
165
|
+
if (this.option.accept && typeof this.option.accept === 'string') {
|
|
166
|
+
this.accept = function (el) {
|
|
167
|
+
return el.matches(_this.option.accept);
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
this.accept = this.option.accept;
|
|
172
|
+
}
|
|
173
|
+
return this;
|
|
174
|
+
};
|
|
175
|
+
/** @internal */
|
|
176
|
+
DDDroppable.prototype._ui = function (drag) {
|
|
177
|
+
return __assign({ draggable: drag.el }, drag.ui());
|
|
178
|
+
};
|
|
179
|
+
return DDDroppable;
|
|
180
|
+
}(dd_base_impl_1.DDBaseImplement));
|
|
181
|
+
exports.DDDroppable = DDDroppable;
|
|
182
|
+
//# sourceMappingURL=dd-droppable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dd-droppable.js","sourceRoot":"","sources":["../../../src/h5/dd-droppable.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * dd-droppable.ts 4.4.0\n * Copyright (c) 2021 Alain Dumesny - see GridStack root license\n */\n\nimport { DDDraggable } from './dd-draggable';\nimport { DDManager } from './dd-manager';\nimport { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl';\nimport { DDUtils } from './dd-utils';\n\nexport interface DDDroppableOpt {\n accept?: string | ((el: HTMLElement) => boolean);\n drop?: (event: DragEvent, ui) => void;\n over?: (event: DragEvent, ui) => void;\n out?: (event: DragEvent, ui) => void;\n}\n\nexport class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt<DDDroppableOpt> {\n\n public accept: (el: HTMLElement) => boolean;\n public el: HTMLElement;\n public option: DDDroppableOpt;\n\n /** @internal */\n private moving: boolean;\n\n constructor(el: HTMLElement, opts: DDDroppableOpt = {}) {\n super();\n this.el = el;\n this.option = opts;\n // create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions)\n this._dragEnter = this._dragEnter.bind(this);\n this._dragOver = this._dragOver.bind(this);\n this._dragLeave = this._dragLeave.bind(this);\n this._drop = this._drop.bind(this);\n\n this.el.classList.add('ui-droppable');\n this.el.addEventListener('dragenter', this._dragEnter);\n this._setupAccept();\n }\n\n public on(event: 'drop' | 'dropover' | 'dropout', callback: (event: DragEvent) => void): void {\n super.on(event, callback);\n }\n\n public off(event: 'drop' | 'dropover' | 'dropout'): void {\n super.off(event);\n }\n\n public enable(): void {\n if (!this.disabled) return;\n super.enable();\n this.el.classList.remove('ui-droppable-disabled');\n this.el.addEventListener('dragenter', this._dragEnter);\n }\n\n public disable(forDestroy=false): void {\n if (this.disabled) return;\n super.disable();\n if (!forDestroy) this.el.classList.add('ui-droppable-disabled');\n this.el.removeEventListener('dragenter', this._dragEnter);\n }\n\n public destroy(): void {\n if (this.moving) {\n this._removeLeaveCallbacks();\n } \n this.disable(true);\n this.el.classList.remove('ui-droppable');\n this.el.classList.remove('ui-droppable-disabled');\n delete this.moving;\n super.destroy();\n }\n\n public updateOption(opts: DDDroppableOpt): DDDroppable {\n Object.keys(opts).forEach(key => this.option[key] = opts[key]);\n this._setupAccept();\n return this;\n }\n\n /** @internal called when the cursor enters our area - prepare for a possible drop and track leaving */\n private _dragEnter(event: DragEvent): void {\n if (!this._canDrop()) return;\n event.preventDefault();\n\n if (this.moving) return; // ignore multiple 'dragenter' as we go over existing items\n this.moving = true;\n\n const ev = DDUtils.initEvent<DragEvent>(event, { target: this.el, type: 'dropover' });\n if (this.option.over) {\n this.option.over(ev, this._ui(DDManager.dragElement))\n }\n this.triggerEvent('dropover', ev);\n this.el.addEventListener('dragover', this._dragOver);\n this.el.addEventListener('drop', this._drop);\n this.el.addEventListener('dragleave', this._dragLeave);\n this.el.classList.add('ui-droppable-over');\n }\n\n /** @internal called when an moving to drop item is being dragged over - do nothing but eat the event */\n private _dragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n }\n\n /** @internal called when the item is leaving our area, stop tracking if we had moving item */\n private _dragLeave(event: DragEvent): void {\n\n // ignore leave events on our children (get when starting to drag our items)\n // Note: Safari Mac has null relatedTarget which causes #1684 so check if DragEvent is inside the grid instead\n if (!event.relatedTarget) {\n const { bottom, left, right, top } = this.el.getBoundingClientRect();\n if (event.x < right && event.x > left && event.y < bottom && event.y > top) return;\n } else if (this.el.contains(event.relatedTarget as HTMLElement)) return;\n\n this._removeLeaveCallbacks();\n if (this.moving) {\n event.preventDefault();\n const ev = DDUtils.initEvent<DragEvent>(event, { target: this.el, type: 'dropout' });\n if (this.option.out) {\n this.option.out(ev, this._ui(DDManager.dragElement))\n }\n this.triggerEvent('dropout', ev);\n }\n delete this.moving;\n }\n\n /** @internal item is being dropped on us - call the client drop event */\n private _drop(event: DragEvent): void {\n if (!this.moving) return; // should not have received event...\n event.preventDefault();\n const ev = DDUtils.initEvent<DragEvent>(event, { target: this.el, type: 'drop' });\n if (this.option.drop) {\n this.option.drop(ev, this._ui(DDManager.dragElement))\n }\n this.triggerEvent('drop', ev);\n this._removeLeaveCallbacks();\n delete this.moving;\n }\n\n /** @internal called to remove callbacks when leaving or dropping */\n private _removeLeaveCallbacks() {\n this.el.removeEventListener('dragleave', this._dragLeave);\n this.el.classList.remove('ui-droppable-over');\n if (this.moving) {\n this.el.removeEventListener('dragover', this._dragOver);\n this.el.removeEventListener('drop', this._drop);\n }\n // Note: this.moving is reset by callee of this routine to control the flow\n }\n\n /** @internal */\n private _canDrop(): boolean {\n return DDManager.dragElement && (!this.accept || this.accept(DDManager.dragElement.el));\n }\n\n /** @internal */\n private _setupAccept(): DDDroppable {\n if (this.option.accept && typeof this.option.accept === 'string') {\n this.accept = (el: HTMLElement) => {\n return el.matches(this.option.accept as string)\n }\n } else {\n this.accept = this.option.accept as ((el: HTMLElement) => boolean);\n }\n return this;\n }\n\n /** @internal */\n private _ui(drag: DDDraggable) {\n return {\n draggable: drag.el,\n ...drag.ui()\n };\n }\n}\n\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dd-elements.ts 4.4.0
|
|
3
|
+
* Copyright (c) 2021 Alain Dumesny - see GridStack root license
|
|
4
|
+
*/
|
|
5
|
+
import { DDResizable, DDResizableOpt } from './dd-resizable';
|
|
6
|
+
import { GridItemHTMLElement } from './../types';
|
|
7
|
+
import { DDDraggable, DDDraggableOpt } from './dd-draggable';
|
|
8
|
+
import { DDDroppable, DDDroppableOpt } from './dd-droppable';
|
|
9
|
+
export interface DDElementHost extends GridItemHTMLElement {
|
|
10
|
+
ddElement?: DDElement;
|
|
11
|
+
}
|
|
12
|
+
export declare class DDElement {
|
|
13
|
+
static init(el: DDElementHost): DDElement;
|
|
14
|
+
el: DDElementHost;
|
|
15
|
+
ddDraggable?: DDDraggable;
|
|
16
|
+
ddDroppable?: DDDroppable;
|
|
17
|
+
ddResizable?: DDResizable;
|
|
18
|
+
constructor(el: DDElementHost);
|
|
19
|
+
on(eventName: string, callback: (event: MouseEvent) => void): DDElement;
|
|
20
|
+
off(eventName: string): DDElement;
|
|
21
|
+
setupDraggable(opts: DDDraggableOpt): DDElement;
|
|
22
|
+
cleanDraggable(): DDElement;
|
|
23
|
+
setupResizable(opts: DDResizableOpt): DDElement;
|
|
24
|
+
cleanResizable(): DDElement;
|
|
25
|
+
setupDroppable(opts: DDDroppableOpt): DDElement;
|
|
26
|
+
cleanDroppable(): DDElement;
|
|
27
|
+
}
|