@marianmeres/stuic 1.65.0 → 1.67.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/dist/actions/drag-drop.d.ts +2 -0
- package/dist/actions/drag-drop.js +38 -27
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@ export interface DraggableOptions {
|
|
|
8
8
|
payload?: any;
|
|
9
9
|
effectAllowed?: EffectAllowed;
|
|
10
10
|
isDragged?: Writable<Record<string, boolean>>;
|
|
11
|
+
logger?: (...args: any[]) => void;
|
|
11
12
|
}
|
|
12
13
|
export declare const draggable: (node: HTMLElement, options: DraggableOptions) => {
|
|
13
14
|
update(newOptions?: DraggableOptions): void;
|
|
@@ -20,6 +21,7 @@ export interface DroppableOptions {
|
|
|
20
21
|
onDragover?: (data: any) => void;
|
|
21
22
|
dropEffect?: DropEffect;
|
|
22
23
|
isDraggedOver?: Writable<Record<string, boolean>>;
|
|
24
|
+
logger?: (...args: any[]) => void;
|
|
23
25
|
}
|
|
24
26
|
export declare const droppable: (node: HTMLElement, options: DroppableOptions) => {
|
|
25
27
|
update(newOptions?: DroppableOptions): void;
|
|
@@ -8,21 +8,11 @@ export const draggable = (node, options) => {
|
|
|
8
8
|
effectAllowed: 'all',
|
|
9
9
|
};
|
|
10
10
|
options = { ...DEFAULT_OPTIONS, ...options };
|
|
11
|
-
|
|
12
|
-
const _init = (_opts) => {
|
|
13
|
-
if (_opts.enabled) {
|
|
14
|
-
node.setAttribute('draggable', 'true');
|
|
15
|
-
node.setAttribute('aria-grabbed', 'false');
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
node.removeAttribute('draggable');
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
// init now
|
|
22
|
-
_init(options);
|
|
11
|
+
const _log = (...args) => options.logger?.apply(null, args);
|
|
23
12
|
const _payload = () => (_isFn(options?.payload) ? options.payload() : options.payload);
|
|
24
13
|
//
|
|
25
14
|
const onDragstart = (e) => {
|
|
15
|
+
_log('onDragstart', e.dataTransfer);
|
|
26
16
|
const pld = _payload();
|
|
27
17
|
if (pld !== undefined) {
|
|
28
18
|
// add "stuic" as a custom data format
|
|
@@ -33,18 +23,39 @@ export const draggable = (node, options) => {
|
|
|
33
23
|
node.setAttribute('aria-grabbed', 'true');
|
|
34
24
|
};
|
|
35
25
|
const onDrag = (e) => {
|
|
26
|
+
// _log('onDrag', e.dataTransfer); // too much spam
|
|
36
27
|
// const el: HTMLElement = e.currentTarget as HTMLElement;
|
|
37
28
|
// clog(el);
|
|
38
29
|
// ?
|
|
39
30
|
};
|
|
40
31
|
const onDragend = (e) => {
|
|
32
|
+
_log('onDragend', e.dataTransfer);
|
|
41
33
|
// e.preventDefault();
|
|
42
34
|
options?.isDragged?.update((old) => ({ ...old, [options.id]: false }));
|
|
43
35
|
node.setAttribute('aria-grabbed', 'false');
|
|
44
36
|
};
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
37
|
+
const _removeListeners = () => {
|
|
38
|
+
node.removeEventListener('dragstart', onDragstart);
|
|
39
|
+
node.removeEventListener('drag', onDrag);
|
|
40
|
+
node.removeEventListener('dragend', onDragend);
|
|
41
|
+
};
|
|
42
|
+
// initalizer
|
|
43
|
+
const _init = (_opts) => {
|
|
44
|
+
_log('_init', _opts);
|
|
45
|
+
_removeListeners();
|
|
46
|
+
if (_opts.enabled) {
|
|
47
|
+
node.setAttribute('draggable', 'true');
|
|
48
|
+
node.setAttribute('aria-grabbed', 'false');
|
|
49
|
+
node.addEventListener('dragstart', onDragstart);
|
|
50
|
+
node.addEventListener('drag', onDrag);
|
|
51
|
+
node.addEventListener('dragend', onDragend);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
node.removeAttribute('draggable');
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
// init now
|
|
58
|
+
_init(options);
|
|
48
59
|
return {
|
|
49
60
|
update(newOptions) {
|
|
50
61
|
options = { ...options, ...(newOptions || {}) };
|
|
@@ -52,9 +63,7 @@ export const draggable = (node, options) => {
|
|
|
52
63
|
_init(options);
|
|
53
64
|
},
|
|
54
65
|
destroy() {
|
|
55
|
-
|
|
56
|
-
node.removeEventListener('drag', onDrag);
|
|
57
|
-
node.removeEventListener('dragend', onDragend);
|
|
66
|
+
_removeListeners();
|
|
58
67
|
},
|
|
59
68
|
};
|
|
60
69
|
};
|
|
@@ -65,21 +74,27 @@ export const droppable = (node, options) => {
|
|
|
65
74
|
dropEffect: 'move',
|
|
66
75
|
};
|
|
67
76
|
options = { ...DEFAULT_OPTIONS, ...options };
|
|
77
|
+
const _log = (...args) => options.logger?.apply(null, args);
|
|
68
78
|
//
|
|
69
79
|
const onDragenter = (e) => {
|
|
70
80
|
// e.preventDefault();
|
|
71
|
-
|
|
81
|
+
_log('onDragenter', e.dataTransfer);
|
|
72
82
|
e.dataTransfer.dropEffect = options.dropEffect;
|
|
73
83
|
options?.isDraggedOver?.update((old) => ({ ...old, [options.id]: true }));
|
|
74
84
|
};
|
|
75
85
|
const onDragover = (e) => {
|
|
76
|
-
e.
|
|
86
|
+
// _log('onDragover', e.dataTransfer); // too much spam
|
|
87
|
+
// prevent default to allow drop
|
|
88
|
+
// this alse prevents animation (todo: really?)
|
|
89
|
+
e.preventDefault();
|
|
77
90
|
};
|
|
78
91
|
const onDragleave = (e) => {
|
|
92
|
+
_log('onDragleave', e.dataTransfer);
|
|
79
93
|
// e.preventDefault();
|
|
80
94
|
options?.isDraggedOver?.update((old) => ({ ...old, [options.id]: false }));
|
|
81
95
|
};
|
|
82
96
|
const onDrop = (e) => {
|
|
97
|
+
_log('onDrop', e.dataTransfer);
|
|
83
98
|
e.preventDefault();
|
|
84
99
|
const target = e.target;
|
|
85
100
|
e.dataTransfer.dropEffect = options.dropEffect;
|
|
@@ -101,18 +116,14 @@ export const droppable = (node, options) => {
|
|
|
101
116
|
node.removeEventListener('drop', onDrop);
|
|
102
117
|
};
|
|
103
118
|
//
|
|
104
|
-
let _listens = false;
|
|
105
119
|
const _init = (_opts) => {
|
|
106
|
-
|
|
120
|
+
_log('_init', _opts);
|
|
121
|
+
_removeListeners();
|
|
122
|
+
if (_opts.enabled) {
|
|
107
123
|
node.addEventListener('dragenter', onDragenter);
|
|
108
124
|
node.addEventListener('dragover', onDragover);
|
|
109
125
|
node.addEventListener('dragleave', onDragleave);
|
|
110
126
|
node.addEventListener('drop', onDrop);
|
|
111
|
-
_listens = true;
|
|
112
|
-
}
|
|
113
|
-
else if (!_opts.enabled && _listens) {
|
|
114
|
-
_removeListeners();
|
|
115
|
-
_listens = false;
|
|
116
127
|
}
|
|
117
128
|
};
|
|
118
129
|
// init now
|