jqtree 1.9.0 → 2.0.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/bower.json +1 -1
- package/js-coverage/coverage-final.json +13 -0
- package/lib/jqtreeOptions.js +1 -0
- package/lib/tree.jquery.d.js +0 -0
- package/lib/tree.jquery.js +394 -0
- package/lib/triggerJQueryEvent.js +68 -0
- package/lib/typings.d.js +1 -0
- package/lib/version.js +2 -0
- package/package.json +34 -29
- package/pnpm-workspace.yaml +3 -3
- package/src/jqtreeOptions.ts +20 -62
- package/src/tree.jquery.d.ts +81 -92
- package/src/tree.jquery.ts +234 -938
- package/src/triggerJQueryEvent.ts +97 -0
- package/src/version.ts +2 -2
- package/tree.jquery.debug.js +4226 -3281
- package/tree.jquery.debug.js.map +1 -1
- package/tree.jquery.js +22 -2
- package/tree.jquery.js.map +1 -1
- package/eslint.config.mjs +0 -112
- package/src/animation.ts +0 -48
- package/src/dataLoader.ts +0 -143
- package/src/dragAndDropHandler/binarySearch.ts +0 -27
- package/src/dragAndDropHandler/dragElement.ts +0 -54
- package/src/dragAndDropHandler/generateHitAreas.ts +0 -195
- package/src/dragAndDropHandler/index.ts +0 -432
- package/src/dragAndDropHandler/iterateVisibleNodes.ts +0 -91
- package/src/dragAndDropHandler/types.ts +0 -12
- package/src/elementsRenderer.ts +0 -359
- package/src/jqtreeMethodTypes.ts +0 -40
- package/src/keyHandler.ts +0 -139
- package/src/mouseHandler.ts +0 -383
- package/src/mouseUtils.ts +0 -23
- package/src/node.ts +0 -653
- package/src/nodeElement/borderDropHint.ts +0 -32
- package/src/nodeElement/folderElement.ts +0 -138
- package/src/nodeElement/ghostDropHint.ts +0 -74
- package/src/nodeElement/index.ts +0 -94
- package/src/nodeUtils.ts +0 -10
- package/src/positionUtils.ts +0 -18
- package/src/saveStateHandler.ts +0 -276
- package/src/scrollHandler/containerScrollParent.ts +0 -71
- package/src/scrollHandler/createScrollParent.ts +0 -51
- package/src/scrollHandler/documentScrollParent.ts +0 -104
- package/src/scrollHandler/scrollParent.ts +0 -117
- package/src/scrollHandler.ts +0 -55
- package/src/selectNodeHandler.ts +0 -111
- package/src/simple.widget.ts +0 -134
- package/src/util.ts +0 -5
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
import TreeElement from "tree-element";
|
|
2
|
+
import triggerJQueryEvent from "./triggerJQueryEvent";
|
|
3
|
+
import __version__ from "./version";
|
|
4
|
+
const NODE_PARAM_IS_EMPTY = "Node parameter is empty";
|
|
5
|
+
const PARAM_IS_EMPTY = "Parameter is empty: ";
|
|
6
|
+
export class JqTreeWidget {
|
|
7
|
+
_element;
|
|
8
|
+
_inputOptions;
|
|
9
|
+
_treeElement;
|
|
10
|
+
constructor(el, options) {
|
|
11
|
+
this._element = jQuery(el);
|
|
12
|
+
this._inputOptions = options;
|
|
13
|
+
}
|
|
14
|
+
addNodeAfter(newNodeInfo, existingNode) {
|
|
15
|
+
return this._treeElement.addNodeAfter(newNodeInfo, existingNode);
|
|
16
|
+
}
|
|
17
|
+
addNodeBefore(newNodeInfo, existingNode) {
|
|
18
|
+
if (!existingNode) {
|
|
19
|
+
throw Error(PARAM_IS_EMPTY + "existingNode");
|
|
20
|
+
}
|
|
21
|
+
return this._treeElement.addNodeBefore(newNodeInfo, existingNode);
|
|
22
|
+
}
|
|
23
|
+
addParentNode(newNodeInfo, existingNode) {
|
|
24
|
+
if (!existingNode) {
|
|
25
|
+
throw Error(PARAM_IS_EMPTY + "existingNode");
|
|
26
|
+
}
|
|
27
|
+
return this._treeElement.addParentNode(newNodeInfo, existingNode);
|
|
28
|
+
}
|
|
29
|
+
addToSelection(node, mustSetFocus) {
|
|
30
|
+
if (!node) {
|
|
31
|
+
throw Error(NODE_PARAM_IS_EMPTY);
|
|
32
|
+
}
|
|
33
|
+
this._treeElement.addToSelection(node, mustSetFocus);
|
|
34
|
+
return this._element;
|
|
35
|
+
}
|
|
36
|
+
appendNode(newNodeInfo, parentNodeParam) {
|
|
37
|
+
const parentNode = parentNodeParam ?? this._treeElement.tree;
|
|
38
|
+
return this._treeElement.appendNode(newNodeInfo, parentNode);
|
|
39
|
+
}
|
|
40
|
+
closeNode(node, slideParam) {
|
|
41
|
+
if (!node) {
|
|
42
|
+
throw Error(NODE_PARAM_IS_EMPTY);
|
|
43
|
+
}
|
|
44
|
+
this._treeElement.closeNode(node, slideParam ?? undefined);
|
|
45
|
+
return this._element;
|
|
46
|
+
}
|
|
47
|
+
deinit() {
|
|
48
|
+
this._element.off();
|
|
49
|
+
this._treeElement.deinit();
|
|
50
|
+
}
|
|
51
|
+
destroy() {
|
|
52
|
+
this.deinit();
|
|
53
|
+
}
|
|
54
|
+
getNodeByCallback(callback) {
|
|
55
|
+
return this._treeElement.getNodeByCallback(callback);
|
|
56
|
+
}
|
|
57
|
+
getNodeByHtmlElement(inputElement) {
|
|
58
|
+
const element = inputElement instanceof HTMLElement ? inputElement : inputElement.get(0);
|
|
59
|
+
if (!element) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return this._treeElement.getNode(element);
|
|
63
|
+
}
|
|
64
|
+
getNodeById(nodeId) {
|
|
65
|
+
return this._treeElement.getNodeById(nodeId);
|
|
66
|
+
}
|
|
67
|
+
getNodeByName(name) {
|
|
68
|
+
return this._treeElement.getNodeByName(name);
|
|
69
|
+
}
|
|
70
|
+
getNodeByNameMustExist(name) {
|
|
71
|
+
return this._treeElement.getNodeByNameMustExist(name);
|
|
72
|
+
}
|
|
73
|
+
getNodesByProperty(key, value) {
|
|
74
|
+
return this._treeElement.getNodesByProperty(key, value);
|
|
75
|
+
}
|
|
76
|
+
getSelectedNode() {
|
|
77
|
+
return this._treeElement.getSelectedNode();
|
|
78
|
+
}
|
|
79
|
+
getSelectedNodes() {
|
|
80
|
+
return this._treeElement.getSelectedNodes();
|
|
81
|
+
}
|
|
82
|
+
getState() {
|
|
83
|
+
return this._treeElement.getState();
|
|
84
|
+
}
|
|
85
|
+
getStateFromStorage() {
|
|
86
|
+
return this._treeElement.getStateFromStorage();
|
|
87
|
+
}
|
|
88
|
+
getTree() {
|
|
89
|
+
return this._treeElement.getTree();
|
|
90
|
+
}
|
|
91
|
+
getVersion() {
|
|
92
|
+
return __version__;
|
|
93
|
+
}
|
|
94
|
+
init() {
|
|
95
|
+
const htmlElement = this._element.get(0);
|
|
96
|
+
this._element.on("tree.loading_data", this._handleLoadingDataEvent.bind(this));
|
|
97
|
+
this._element.on("tree.load_failed", this._handleLoadFailedEvent.bind(this));
|
|
98
|
+
const options = this._transformInputOptions();
|
|
99
|
+
const treeElement = new TreeElement({
|
|
100
|
+
...options,
|
|
101
|
+
classPrefix: "jqtree",
|
|
102
|
+
commonClassName: "jqtree_common",
|
|
103
|
+
htmlElement,
|
|
104
|
+
overrideTriggerEventProvider: triggerJQueryEvent,
|
|
105
|
+
treeClassName: "jqtree-tree"
|
|
106
|
+
});
|
|
107
|
+
this._treeElement = treeElement;
|
|
108
|
+
}
|
|
109
|
+
isDragging() {
|
|
110
|
+
return this._treeElement.isDragging();
|
|
111
|
+
}
|
|
112
|
+
isNodeSelected(node) {
|
|
113
|
+
if (!node) {
|
|
114
|
+
throw Error(NODE_PARAM_IS_EMPTY);
|
|
115
|
+
}
|
|
116
|
+
return this._treeElement.isNodeSelected(node);
|
|
117
|
+
}
|
|
118
|
+
loadData(data, parentNode) {
|
|
119
|
+
this._treeElement.loadData(data, parentNode);
|
|
120
|
+
return this._element;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/*
|
|
124
|
+
signatures:
|
|
125
|
+
- loadDataFromUrl(url, parent_node=null, on_finished=null)
|
|
126
|
+
loadDataFromUrl('/my_data');
|
|
127
|
+
loadDataFromUrl('/my_data', node1);
|
|
128
|
+
loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });
|
|
129
|
+
loadDataFromUrl('/my_data', null, function() { console.log('finished'); });
|
|
130
|
+
- loadDataFromUrl(parent_node=null, on_finished=null)
|
|
131
|
+
loadDataFromUrl();
|
|
132
|
+
loadDataFromUrl(node1);
|
|
133
|
+
loadDataFromUrl(null, function() { console.log('finished'); });
|
|
134
|
+
loadDataFromUrl(node1, function() { console.log('finished'); });
|
|
135
|
+
*/
|
|
136
|
+
loadDataFromUrl(param1, param2, param3) {
|
|
137
|
+
let parentNode;
|
|
138
|
+
let onFinishedLoading;
|
|
139
|
+
let url;
|
|
140
|
+
|
|
141
|
+
// first parameter is url
|
|
142
|
+
if (typeof param1 === "string") {
|
|
143
|
+
url = param1;
|
|
144
|
+
parentNode = param2;
|
|
145
|
+
onFinishedLoading = param3;
|
|
146
|
+
} else {
|
|
147
|
+
// first parameter is not url
|
|
148
|
+
parentNode = param1;
|
|
149
|
+
onFinishedLoading = param2;
|
|
150
|
+
}
|
|
151
|
+
this._treeElement.loadDataFromUrl(url, parentNode).then(() => {
|
|
152
|
+
if (onFinishedLoading) {
|
|
153
|
+
onFinishedLoading();
|
|
154
|
+
}
|
|
155
|
+
}).catch(error => {
|
|
156
|
+
throw error;
|
|
157
|
+
});
|
|
158
|
+
return this._element;
|
|
159
|
+
}
|
|
160
|
+
moveDown() {
|
|
161
|
+
this._treeElement.moveDown();
|
|
162
|
+
return this._element;
|
|
163
|
+
}
|
|
164
|
+
moveNode(node, targetNode, position) {
|
|
165
|
+
if (!node) {
|
|
166
|
+
throw Error(NODE_PARAM_IS_EMPTY);
|
|
167
|
+
}
|
|
168
|
+
if (!targetNode) {
|
|
169
|
+
throw Error(PARAM_IS_EMPTY + "targetNode");
|
|
170
|
+
}
|
|
171
|
+
if (!position) {
|
|
172
|
+
throw Error(PARAM_IS_EMPTY + "position");
|
|
173
|
+
}
|
|
174
|
+
this._treeElement.moveNode(node, targetNode, position);
|
|
175
|
+
return this._element;
|
|
176
|
+
}
|
|
177
|
+
moveUp() {
|
|
178
|
+
this._treeElement.moveUp();
|
|
179
|
+
return this._element;
|
|
180
|
+
}
|
|
181
|
+
openNode(node, param1, param2) {
|
|
182
|
+
if (!node) {
|
|
183
|
+
throw Error(NODE_PARAM_IS_EMPTY);
|
|
184
|
+
}
|
|
185
|
+
let onFinished = null;
|
|
186
|
+
let slide;
|
|
187
|
+
if (typeof param1 === "function") {
|
|
188
|
+
onFinished = param1;
|
|
189
|
+
slide = param2;
|
|
190
|
+
} else {
|
|
191
|
+
slide = param1;
|
|
192
|
+
}
|
|
193
|
+
void this._treeElement.openNode(node, slide).then(() => {
|
|
194
|
+
if (onFinished) {
|
|
195
|
+
onFinished(node);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
return this._element;
|
|
199
|
+
}
|
|
200
|
+
prependNode(newNodeInfo, parentNodeParam) {
|
|
201
|
+
const parentNode = parentNodeParam ?? this._treeElement.tree;
|
|
202
|
+
return this._treeElement.prependNode(newNodeInfo, parentNode);
|
|
203
|
+
}
|
|
204
|
+
refresh() {
|
|
205
|
+
this._treeElement.refresh();
|
|
206
|
+
return this._element;
|
|
207
|
+
}
|
|
208
|
+
reload(onFinished) {
|
|
209
|
+
this._treeElement.loadDataFromUrl(undefined, undefined).then(() => {
|
|
210
|
+
if (onFinished) {
|
|
211
|
+
onFinished();
|
|
212
|
+
}
|
|
213
|
+
}).catch(error => {
|
|
214
|
+
throw error;
|
|
215
|
+
});
|
|
216
|
+
return this._element;
|
|
217
|
+
}
|
|
218
|
+
removeFromSelection(node) {
|
|
219
|
+
if (!node) {
|
|
220
|
+
throw Error(NODE_PARAM_IS_EMPTY);
|
|
221
|
+
}
|
|
222
|
+
this._treeElement.removeFromSelection(node);
|
|
223
|
+
return this._element;
|
|
224
|
+
}
|
|
225
|
+
removeNode(node) {
|
|
226
|
+
if (!node) {
|
|
227
|
+
throw Error(NODE_PARAM_IS_EMPTY);
|
|
228
|
+
}
|
|
229
|
+
if (!node.parent) {
|
|
230
|
+
throw Error("Node has no parent");
|
|
231
|
+
}
|
|
232
|
+
this._treeElement.removeNode(node);
|
|
233
|
+
return this._element;
|
|
234
|
+
}
|
|
235
|
+
scrollToNode(node) {
|
|
236
|
+
if (!node) {
|
|
237
|
+
throw Error(NODE_PARAM_IS_EMPTY);
|
|
238
|
+
}
|
|
239
|
+
this._treeElement.scrollToNode(node);
|
|
240
|
+
return this._element;
|
|
241
|
+
}
|
|
242
|
+
selectNode(node, optionsParam) {
|
|
243
|
+
this._treeElement.selectNode(node, optionsParam);
|
|
244
|
+
return this._element;
|
|
245
|
+
}
|
|
246
|
+
setOption(option, value) {
|
|
247
|
+
this._treeElement.setOption(option, value);
|
|
248
|
+
return this._element;
|
|
249
|
+
}
|
|
250
|
+
setState(state) {
|
|
251
|
+
if (state) {
|
|
252
|
+
this._treeElement.setState(state);
|
|
253
|
+
}
|
|
254
|
+
return this._element;
|
|
255
|
+
}
|
|
256
|
+
toggle(node, slideParam = null) {
|
|
257
|
+
if (!node) {
|
|
258
|
+
throw Error(NODE_PARAM_IS_EMPTY);
|
|
259
|
+
}
|
|
260
|
+
this._treeElement.toggle(node, slideParam);
|
|
261
|
+
return this._element;
|
|
262
|
+
}
|
|
263
|
+
toJson() {
|
|
264
|
+
return this._treeElement.toJson();
|
|
265
|
+
}
|
|
266
|
+
updateNode(node, data) {
|
|
267
|
+
if (!node) {
|
|
268
|
+
throw Error(NODE_PARAM_IS_EMPTY);
|
|
269
|
+
}
|
|
270
|
+
if (!data) {
|
|
271
|
+
return this._element;
|
|
272
|
+
}
|
|
273
|
+
this._treeElement.updateNode(node, data);
|
|
274
|
+
return this._element;
|
|
275
|
+
}
|
|
276
|
+
_handleLoadFailedEvent(e) {
|
|
277
|
+
const jqTreeOnLoadFailed = this._inputOptions.onLoadFailed;
|
|
278
|
+
if (jqTreeOnLoadFailed) {
|
|
279
|
+
const {
|
|
280
|
+
response
|
|
281
|
+
} = e;
|
|
282
|
+
jqTreeOnLoadFailed(response);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
_handleLoadingDataEvent(e) {
|
|
286
|
+
const jqTreeOnLoading = this._inputOptions.onLoading;
|
|
287
|
+
if (jqTreeOnLoading) {
|
|
288
|
+
const {
|
|
289
|
+
$el,
|
|
290
|
+
isLoading,
|
|
291
|
+
node
|
|
292
|
+
} = e;
|
|
293
|
+
jqTreeOnLoading(isLoading, node ?? undefined, $el);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
_transformInputOptions() {
|
|
297
|
+
function convertToIconElement(jqtreeIconElement) {
|
|
298
|
+
if (jqtreeIconElement instanceof jQuery) {
|
|
299
|
+
return jqtreeIconElement.get(0);
|
|
300
|
+
} else {
|
|
301
|
+
return jqtreeIconElement;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
const closedIcon = convertToIconElement(this._inputOptions.closedIcon);
|
|
305
|
+
const openedIcon = convertToIconElement(this._inputOptions.openedIcon);
|
|
306
|
+
let onCreateLi = undefined;
|
|
307
|
+
const jqTreeOnCreateLi = this._inputOptions.onCreateLi;
|
|
308
|
+
if (jqTreeOnCreateLi) {
|
|
309
|
+
onCreateLi = (node, el, isSelected) => {
|
|
310
|
+
jqTreeOnCreateLi(node, jQuery(el), isSelected);
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
let onIsMoveHandle = undefined;
|
|
314
|
+
const jqTreeOnIsMoveHandle = this._inputOptions.onIsMoveHandle;
|
|
315
|
+
if (jqTreeOnIsMoveHandle) {
|
|
316
|
+
onIsMoveHandle = el => jqTreeOnIsMoveHandle(jQuery(el));
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
...this._inputOptions,
|
|
320
|
+
closedIcon,
|
|
321
|
+
onCreateLi,
|
|
322
|
+
onIsMoveHandle,
|
|
323
|
+
openedIcon
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
const register = () => {
|
|
328
|
+
const getWidgetData = (el, dataKey) => {
|
|
329
|
+
const widget = jQuery.data(el, dataKey);
|
|
330
|
+
if (widget && widget instanceof JqTreeWidget) {
|
|
331
|
+
return widget;
|
|
332
|
+
} else {
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
const createWidget = ($el, options) => {
|
|
337
|
+
for (const el of $el.get()) {
|
|
338
|
+
const existingWidget = getWidgetData(el, "jqtree");
|
|
339
|
+
if (!existingWidget) {
|
|
340
|
+
const widget = new JqTreeWidget(el, options ?? {});
|
|
341
|
+
if (!jQuery.data(el, "jqtree")) {
|
|
342
|
+
jQuery.data(el, "jqtree", widget);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// Call init after setting data, so we can call methods
|
|
346
|
+
widget.init();
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return $el;
|
|
350
|
+
};
|
|
351
|
+
const destroyWidget = $el => {
|
|
352
|
+
for (const el of $el.get()) {
|
|
353
|
+
const widget = getWidgetData(el, "jqtree");
|
|
354
|
+
if (widget) {
|
|
355
|
+
widget.destroy();
|
|
356
|
+
}
|
|
357
|
+
jQuery.removeData(el, "jqtree");
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
const callFunction = ($el, functionName, args) => {
|
|
361
|
+
let result = null;
|
|
362
|
+
for (const el of $el.get()) {
|
|
363
|
+
const widget = jQuery.data(el, "jqtree");
|
|
364
|
+
if (widget && widget instanceof JqTreeWidget) {
|
|
365
|
+
const widgetFunction = widget[functionName];
|
|
366
|
+
if (widgetFunction && typeof widgetFunction === "function") {
|
|
367
|
+
result = widgetFunction.apply(widget, args);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return result;
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
375
|
+
jQuery.fn.tree = function (argument1, ...args) {
|
|
376
|
+
if (!argument1) {
|
|
377
|
+
return createWidget(this, null);
|
|
378
|
+
} else if (typeof argument1 === "object") {
|
|
379
|
+
const options = argument1;
|
|
380
|
+
return createWidget(this, options);
|
|
381
|
+
} else if (typeof argument1 === "string" && argument1[0] !== "_") {
|
|
382
|
+
const functionName = argument1;
|
|
383
|
+
if (argument1 === "destroy") {
|
|
384
|
+
destroyWidget(this);
|
|
385
|
+
return undefined;
|
|
386
|
+
} else {
|
|
387
|
+
return callFunction(this, functionName, args);
|
|
388
|
+
}
|
|
389
|
+
} else {
|
|
390
|
+
return undefined;
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
};
|
|
394
|
+
register();
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// Attributes of tree-element events that have a different name in the jqTree api.
|
|
2
|
+
// Attributes that are not listed here are passed on unchanged; e.g. 'node' and
|
|
3
|
+
// 'isLoading'.
|
|
4
|
+
const attributeNames = {
|
|
5
|
+
deselectedNode: "deselected_node",
|
|
6
|
+
moveInfo: "move_info",
|
|
7
|
+
originalEvent: "click_event",
|
|
8
|
+
parentNode: "parent_node",
|
|
9
|
+
treeData: "tree_data"
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// Attributes of the move info of the tree.move event.
|
|
13
|
+
const moveInfoAttributeNames = {
|
|
14
|
+
doMove: "do_move",
|
|
15
|
+
movedNode: "moved_node",
|
|
16
|
+
originalEvent: "original_event",
|
|
17
|
+
previousParent: "previous_parent",
|
|
18
|
+
targetNode: "target_node"
|
|
19
|
+
};
|
|
20
|
+
const convertAttributes = (values, names) => Object.fromEntries(Object.entries(values).map(([key, value]) => [names[key] ?? key, value]));
|
|
21
|
+
const convertValues = values => {
|
|
22
|
+
const result = convertAttributes(values, attributeNames);
|
|
23
|
+
if (result.move_info) {
|
|
24
|
+
result.move_info = convertAttributes(result.move_info, moveInfoAttributeNames);
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
const triggerJQueryEvent = (element, eventName, inputValues) => {
|
|
29
|
+
const values = inputValues ? convertValues(inputValues) : {};
|
|
30
|
+
if (values.element) {
|
|
31
|
+
values.$el = jQuery(values.element);
|
|
32
|
+
delete values.element;
|
|
33
|
+
}
|
|
34
|
+
let event;
|
|
35
|
+
switch (eventName) {
|
|
36
|
+
case "tree.deselect":
|
|
37
|
+
event = jQuery.Event("tree.select", {
|
|
38
|
+
node: null,
|
|
39
|
+
previous_node: values.node
|
|
40
|
+
});
|
|
41
|
+
break;
|
|
42
|
+
case "tree.loaded_data":
|
|
43
|
+
event = jQuery.Event("tree.loading_data", {
|
|
44
|
+
...values,
|
|
45
|
+
isLoading: false,
|
|
46
|
+
node: values.node ?? null
|
|
47
|
+
});
|
|
48
|
+
break;
|
|
49
|
+
case "tree.loading_data":
|
|
50
|
+
event = jQuery.Event("tree.loading_data", {
|
|
51
|
+
...values,
|
|
52
|
+
isLoading: true,
|
|
53
|
+
node: values.node ?? null
|
|
54
|
+
});
|
|
55
|
+
break;
|
|
56
|
+
case "tree.set_data":
|
|
57
|
+
values.parent_node = values.node;
|
|
58
|
+
delete values.node;
|
|
59
|
+
event = jQuery.Event("tree.load_data", values);
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
event = jQuery.Event(eventName, values);
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
jQuery(element).trigger(event);
|
|
66
|
+
return !event.isDefaultPrevented();
|
|
67
|
+
};
|
|
68
|
+
export default triggerJQueryEvent;
|
package/lib/typings.d.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/// <reference path="./tree.jquery.d.ts" />
|
package/lib/version.js
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jqtree",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Tree widget for jQuery",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jquery-plugin",
|
|
@@ -16,68 +16,73 @@
|
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
18
18
|
"ci": "pnpm lint && pnpm tsc && pnpm test",
|
|
19
|
-
"vitest": "vitest run --coverage --config test/vitest.config.
|
|
20
|
-
"vitest-watch": "vitest --config test/vitest.config.
|
|
19
|
+
"vitest": "vitest run --coverage --config test/vitest.config.mts",
|
|
20
|
+
"vitest-watch": "vitest --config test/vitest.config.mts",
|
|
21
21
|
"lint": "eslint src playwright test",
|
|
22
22
|
"production": "./config/production",
|
|
23
23
|
"devserver": "SERVE=true rollup --config config/rollup.config.mjs --watch",
|
|
24
24
|
"devserver-with-coverage": "COVERAGE=true SERVE=true rollup --config config/rollup.config.mjs",
|
|
25
25
|
"build-with-coverage": "COVERAGE=true rollup --config config/rollup.config.mjs",
|
|
26
|
+
"bump-version": "./config/bump-version",
|
|
26
27
|
"prettier": "prettier src/*.ts --write --tab-width 4",
|
|
27
28
|
"tsc": "tsc --noEmit --project tsconfig.json",
|
|
28
29
|
"playwright": "pnpm build-with-coverage && playwright test --config playwright/playwright.config.js",
|
|
29
30
|
"test": "pnpm vitest && pnpm playwright"
|
|
30
31
|
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"tree-element": "^0.1.0"
|
|
34
|
+
},
|
|
31
35
|
"peerDependencies": {
|
|
32
36
|
"jquery": ">= 3"
|
|
33
37
|
},
|
|
34
38
|
"devDependencies": {
|
|
35
|
-
"@babel/cli": "^8.0.
|
|
36
|
-
"@babel/core": "^8.0.
|
|
37
|
-
"@babel/preset-env": "^8.0.
|
|
39
|
+
"@babel/cli": "^8.0.5",
|
|
40
|
+
"@babel/core": "^8.0.5",
|
|
41
|
+
"@babel/preset-env": "^8.0.5",
|
|
38
42
|
"@babel/preset-typescript": "^8.0.1",
|
|
39
|
-
"@cspell/eslint-plugin": "^10.0
|
|
40
|
-
"@eslint/js": "^
|
|
41
|
-
"@playwright/test": "^1.
|
|
43
|
+
"@cspell/eslint-plugin": "^10.3.0",
|
|
44
|
+
"@eslint/js": "^10.0.1",
|
|
45
|
+
"@playwright/test": "^1.63.0",
|
|
42
46
|
"@rollup/plugin-babel": "^7.1.0",
|
|
43
47
|
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
44
48
|
"@rollup/plugin-terser": "^1.0.0",
|
|
45
49
|
"@testing-library/dom": "^10.4.1",
|
|
46
|
-
"@testing-library/jest-dom": "^7.0.
|
|
47
|
-
"@testing-library/user-event": "^14.6.
|
|
50
|
+
"@testing-library/jest-dom": "^7.0.1",
|
|
51
|
+
"@testing-library/user-event": "^14.6.7",
|
|
48
52
|
"@types/debug": "^4.1.13",
|
|
49
53
|
"@types/jquery": "^4.0.1",
|
|
50
|
-
"@types/node": "^26.
|
|
51
|
-
"@vitest/coverage-istanbul": "^4.1.
|
|
52
|
-
"@vitest/eslint-plugin": "^1.6.
|
|
53
|
-
"autoprefixer": "^10.5.
|
|
54
|
-
"axe-core": "^4.
|
|
54
|
+
"@types/node": "^26.5.1",
|
|
55
|
+
"@vitest/coverage-istanbul": "^4.1.11",
|
|
56
|
+
"@vitest/eslint-plugin": "^1.6.27",
|
|
57
|
+
"autoprefixer": "^10.5.6",
|
|
58
|
+
"axe-core": "^4.13.0",
|
|
55
59
|
"babel-plugin-istanbul": "^8.0.0",
|
|
56
|
-
"eslint": "^
|
|
60
|
+
"eslint": "^10.10.0",
|
|
57
61
|
"eslint-import-resolver-typescript": "^4.4.5",
|
|
58
62
|
"eslint-plugin-import-x": "^4.17.1",
|
|
59
|
-
"eslint-plugin-jest-dom": "^5.
|
|
60
|
-
"eslint-plugin-jest-extended": "
|
|
61
|
-
"eslint-plugin-perfectionist": "^5.
|
|
62
|
-
"eslint-plugin-playwright": "^2.
|
|
63
|
+
"eslint-plugin-jest-dom": "^5.10.1",
|
|
64
|
+
"eslint-plugin-jest-extended": "github:mbraak/eslint-plugin-jest-extended#modernize",
|
|
65
|
+
"eslint-plugin-perfectionist": "^5.11.0",
|
|
66
|
+
"eslint-plugin-playwright": "^2.11.0",
|
|
63
67
|
"eslint-plugin-testing-library": "^7.16.2",
|
|
64
68
|
"jest-extended": "^7.0.0",
|
|
65
|
-
"jsdom": "^
|
|
69
|
+
"jsdom": "^30.0.1",
|
|
66
70
|
"jsdom-testing-mocks": "^1.16.0",
|
|
67
71
|
"jsonfile": "^6.2.1",
|
|
68
72
|
"lodash": "^4.18.1",
|
|
69
73
|
"msw": "^2.15.0",
|
|
70
|
-
"postcss": "^8.5.
|
|
71
|
-
"postcss-cli": "^
|
|
72
|
-
"postcss-import": "^
|
|
74
|
+
"postcss": "^8.5.28",
|
|
75
|
+
"postcss-cli": "^12.0.0",
|
|
76
|
+
"postcss-import": "^17.0.0",
|
|
73
77
|
"postcss-load-config": "^6.0.1",
|
|
74
|
-
"postcss-nested": "^
|
|
78
|
+
"postcss-nested": "^8.0.1",
|
|
75
79
|
"prettier": "^3.9.6",
|
|
76
|
-
"rollup": "^4.
|
|
80
|
+
"rollup": "^4.63.2",
|
|
77
81
|
"rollup-plugin-serve": "^3.0.0",
|
|
82
|
+
"rollup-plugin-tsconfig-paths": "^1.5.2",
|
|
78
83
|
"tslib": "^2.8.1",
|
|
79
84
|
"typescript": "^6.0.3",
|
|
80
|
-
"typescript-eslint": "^8.
|
|
81
|
-
"vitest": "^4.1.
|
|
85
|
+
"typescript-eslint": "^8.70.0",
|
|
86
|
+
"vitest": "^4.1.11"
|
|
82
87
|
}
|
|
83
88
|
}
|
package/pnpm-workspace.yaml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
allowBuilds:
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
esbuild: true
|
|
3
|
+
msw: true
|
|
4
|
+
unrs-resolver: true
|
package/src/jqtreeOptions.ts
CHANGED
|
@@ -1,71 +1,29 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { Node } from "./node";
|
|
1
|
+
import type { Node, TreeElementOptions } from "tree-element";
|
|
3
2
|
|
|
4
|
-
export type
|
|
3
|
+
export type JQTreeIconElement = HTMLElement | JQuery | string;
|
|
5
4
|
|
|
6
|
-
export type
|
|
5
|
+
export type JQTreeOnCreateLi = (node: Node, el: JQuery, isSelected: boolean) => void;
|
|
7
6
|
|
|
8
|
-
export type
|
|
7
|
+
export type JQTreeOnIsMoveHandle = (el: JQuery) => boolean;
|
|
9
8
|
|
|
10
|
-
export type
|
|
9
|
+
export type JQTreeOnLoadFailed = (el: Response) => void;
|
|
11
10
|
|
|
12
|
-
export
|
|
13
|
-
animationSpeed: AnimationSpeed;
|
|
14
|
-
autoEscape: boolean;
|
|
15
|
-
autoOpen: boolean | number;
|
|
16
|
-
buttonLeft: boolean;
|
|
17
|
-
closedIcon?: IconElement;
|
|
18
|
-
data?: NodeData[];
|
|
19
|
-
dataFilter?: DataFilter;
|
|
20
|
-
dataUrl?: DataUrl;
|
|
21
|
-
dragAndDrop: boolean;
|
|
22
|
-
keyboardSupport: boolean;
|
|
23
|
-
nodeClass: typeof Node;
|
|
24
|
-
onCanMove?: OnCanMove;
|
|
25
|
-
onCanMoveTo?: OnCanMoveTo;
|
|
26
|
-
onCanSelectNode?: (node: Node) => boolean;
|
|
27
|
-
onCreateLi?: OnCreateLi;
|
|
28
|
-
onDragMove?: DragMethod;
|
|
29
|
-
onDragStop?: DragMethod;
|
|
30
|
-
onGetStateFromStorage?: OnGetStateFromStorage;
|
|
31
|
-
onIsMoveHandle?: OnIsMoveHandle;
|
|
32
|
-
onLoadFailed?: OnLoadFailed;
|
|
33
|
-
onLoading?: OnLoading;
|
|
34
|
-
onSetStateFromStorage?: OnSetStateFromStorage;
|
|
35
|
-
openedIcon?: IconElement;
|
|
36
|
-
openFolderDelay: false | number;
|
|
37
|
-
rtl?: boolean;
|
|
38
|
-
saveState: boolean | string;
|
|
39
|
-
selectable: boolean;
|
|
40
|
-
showEmptyFolder: boolean;
|
|
41
|
-
slide: boolean;
|
|
42
|
-
startDndDelay?: number;
|
|
43
|
-
tabIndex?: number;
|
|
44
|
-
useContextMenu: boolean;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export type OnCanMove = ((node: Node) => boolean) | undefined;
|
|
48
|
-
|
|
49
|
-
export type OnCanMoveTo = (
|
|
50
|
-
node: Node,
|
|
51
|
-
targetNode: Node,
|
|
52
|
-
positionName: string,
|
|
53
|
-
) => boolean;
|
|
54
|
-
|
|
55
|
-
export type OnCreateLi = (node: Node, el: JQuery, isSelected: boolean) => void;
|
|
56
|
-
|
|
57
|
-
export type OnGetStateFromStorage = (() => string) | undefined;
|
|
58
|
-
|
|
59
|
-
export type OnIsMoveHandle = (el: JQuery) => boolean;
|
|
60
|
-
|
|
61
|
-
export type OnLoadFailed = (response: JQuery.jqXHR) => void;
|
|
62
|
-
|
|
63
|
-
export type OnLoading = (
|
|
11
|
+
export type JQTreeOnLoading = (
|
|
64
12
|
isLoading: boolean,
|
|
65
|
-
node: Node |
|
|
13
|
+
node: Node | undefined,
|
|
66
14
|
$el: JQuery,
|
|
67
15
|
) => void;
|
|
68
16
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
17
|
+
/* The class name options are set by jqTree itself, so they are not part of the
|
|
18
|
+
* jqTree options.
|
|
19
|
+
*/
|
|
20
|
+
export type JQTreeOptions = Modify<Omit<TreeElementOptions, "classPrefix" | "commonClassName" | "treeClassName">, {
|
|
21
|
+
closedIcon?: JQTreeIconElement;
|
|
22
|
+
onCreateLi?: JQTreeOnCreateLi;
|
|
23
|
+
onIsMoveHandle?: JQTreeOnIsMoveHandle;
|
|
24
|
+
onLoadFailed?: JQTreeOnLoadFailed;
|
|
25
|
+
onLoading?: JQTreeOnLoading;
|
|
26
|
+
openedIcon?: JQTreeIconElement;
|
|
27
|
+
}>
|
|
28
|
+
|
|
29
|
+
type Modify<T, R> = Omit<T, keyof R> & R;
|