wunderbaum 0.9.0 → 0.10.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/wunderbaum.css +7 -0
- package/dist/wunderbaum.css.map +1 -1
- package/dist/wunderbaum.d.ts +58 -1
- package/dist/wunderbaum.esm.js +154 -24
- package/dist/wunderbaum.esm.min.js +20 -20
- package/dist/wunderbaum.esm.min.js.map +1 -1
- package/dist/wunderbaum.umd.js +154 -24
- package/dist/wunderbaum.umd.min.js +30 -30
- package/dist/wunderbaum.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/common.ts +2 -0
- package/src/drag_observer.ts +32 -3
- package/src/types.ts +18 -0
- package/src/util.ts +50 -0
- package/src/wb_ext_grid.ts +66 -6
- package/src/wb_options.ts +5 -0
- package/src/wunderbaum.scss +11 -3
- package/src/wunderbaum.ts +15 -2
package/dist/wunderbaum.css
CHANGED
|
@@ -94,6 +94,8 @@ div.wunderbaum div.wb-header {
|
|
|
94
94
|
position: sticky;
|
|
95
95
|
top: 0;
|
|
96
96
|
z-index: 2;
|
|
97
|
+
user-select: none;
|
|
98
|
+
-webkit-user-select: none; /* Safari */
|
|
97
99
|
}
|
|
98
100
|
div.wunderbaum div.wb-header,
|
|
99
101
|
div.wunderbaum div.wb-list-container {
|
|
@@ -202,6 +204,10 @@ div.wunderbaum div.wb-header span.wb-col-resizer {
|
|
|
202
204
|
border: none;
|
|
203
205
|
border-right: 2px solid var(--wb-border-color);
|
|
204
206
|
height: 100%;
|
|
207
|
+
user-select: none;
|
|
208
|
+
-webkit-user-select: none;
|
|
209
|
+
}
|
|
210
|
+
div.wunderbaum div.wb-header span.wb-col-resizer.wb-col-resizer-active {
|
|
205
211
|
cursor: col-resize;
|
|
206
212
|
}
|
|
207
213
|
div.wunderbaum span.wb-col {
|
|
@@ -219,6 +225,7 @@ div.wunderbaum span.wb-col:last-of-type {
|
|
|
219
225
|
}
|
|
220
226
|
div.wunderbaum span.wb-node {
|
|
221
227
|
user-select: none;
|
|
228
|
+
-webkit-user-select: none;
|
|
222
229
|
/* Fix Bootstrap Icon alignment */
|
|
223
230
|
}
|
|
224
231
|
div.wunderbaum span.wb-node i.wb-checkbox,
|
package/dist/wunderbaum.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../src/wunderbaum.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AA2EA;AAAA;EAME;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;;;AAMF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EAGA;AAsBA;
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../src/wunderbaum.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AA2EA;AAAA;EAME;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;;;AAMF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EAGA;AAsBA;AAyBA;AA8QA;AAoHA;AA8BA;AAgEA;AAEA;AAUA;AAoBA;AAYA;;AAvjBA;EAEE;;AAIF;EACE;EACA;;AAGF;EACE;EAEA;;AAMF;EACE;EACA;EACA;EACA;EACA;;AAGF;AAAA;EAEE;;AAKF;EACE;EACA;EACA;EACA;EACA;;AAMA;EACE;EACA;EACA;EACA;;AAIA;EACE;;AAKF;EAEE;;AAGF;EAEE;;AAGF;EACE;;AAOA;EAEE;EACA;;AAEA;EACE;;AAaN;EAEE;EACA;;AAEA;EACE;;AAON;EACE;;AAEA;EACE;;AAOF;EACE;;AAGF;EAEE;;AAGA;EACE;;AAKJ;EACE;EACA;;AAGF;EAEE;EACA;;AAEA;EAEE;;AAIJ;EACE;;AAGF;AAAA;AAAA;EAGE;EAcA;EASA;;AAGF;EAEE;;AAON;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EAIA;;AAIF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAMN;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;AAqBA;;AAhBA;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;;AAIF;EACE;;AAGF;EACE;EACA;EACA;;AAMA;EACE;;AAIJ;AAAA;EAEE;EACA;EACA;EACA;;AAGF;EACE;EAEA;EACA;EACA;EACA;EACA;;AAUI;EACE;;AAON;EACE;;AAIJ;EACE;;AAEA;EACE;;AAIF;EACE;;AAGF;EACE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAgBE;EACA;EACA;;AAGF;AAAA;EAEE;;AAcA;EACE;;AAWJ;EACE;;AAGF;EACE;;AAEA;EACE;;AAON;EACE;;AAEA;EACE;;AAQJ;EACE;;AASJ;EACE;;AAEA;EACE;;AAGF;EACE;;AAMJ;EACE;;AAaJ;EACE;;AAEA;EACE;;AAIJ;EACE;;AAEA;EACE;EACA;;AAGA;EACE;EACA;;AAEA;EAGE;EACA;EAGA;EACA;EACA;;AAgBR;AAAA;EAIE;EACA;EACA;;AAKF;EACE;;AAUE;AAAA;EAEE;;AAFF;AAAA;EAEE;;AAFF;AAAA;EAEE;;AAFF;AAAA;EAEE;;AAOJ;EAIE;EACA;;AAGF;AAAA;EAKE;EACA;;AAMF;AAAA;EAEE;EACA;EACA;EACA;;AAOF;EACE;;AAGF;AAAA;EAEE;;AAKA;EACE;;;AAMR;AAEA;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;;;AAQJ;AACA;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAIA;AAAA;EAEE;;AAGF;AAAA;EAEE;;;AAIJ;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAIJ;AAAA;AAAA;AAMA;EACE;EACA;;;AAGF;EAGE;;;AAGF;EACE;;;AAKF;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE","file":"wunderbaum.css"}
|
package/dist/wunderbaum.d.ts
CHANGED
|
@@ -374,6 +374,24 @@ declare module "util" {
|
|
|
374
374
|
export function getOption(opts: any, name: string, defaultValue?: any): any;
|
|
375
375
|
/** Convert an Array or space-separated string to a Set. */
|
|
376
376
|
export function toSet(val: any): Set<string>;
|
|
377
|
+
/** Convert a pixel string to number.
|
|
378
|
+
* We accept a number or a string like '123px'. If undefined, the first default
|
|
379
|
+
* value that is a number or a string ending with 'px' is returned.
|
|
380
|
+
*
|
|
381
|
+
* Example:
|
|
382
|
+
* ```js
|
|
383
|
+
* const width = util.toPixel("123px", 100);
|
|
384
|
+
* ```
|
|
385
|
+
*/
|
|
386
|
+
export function toPixel(...defaults: (string | number | undefined | null)[]): number;
|
|
387
|
+
/** Evaluate a boolean value using default if undefined.
|
|
388
|
+
* Example:
|
|
389
|
+
* ```js
|
|
390
|
+
* const opts = { flag: true };
|
|
391
|
+
* const value = util.toBool(opts.flag, otherVar, false);
|
|
392
|
+
* ```
|
|
393
|
+
*/
|
|
394
|
+
export function toBool(...boolDefaults: (boolean | undefined | null)[]): boolean;
|
|
377
395
|
/** Return a canonical string representation for an object's type (e.g. 'array', 'number', ...). */
|
|
378
396
|
export function type(obj: any): string;
|
|
379
397
|
/**
|
|
@@ -416,6 +434,8 @@ declare module "common" {
|
|
|
416
434
|
export const RENDER_MAX_PREFETCH = 5;
|
|
417
435
|
/** Skip rendering new rows when we have at least N nodes rendeed above and below the viewport. */
|
|
418
436
|
export const RENDER_MIN_PREFETCH = 5;
|
|
437
|
+
/** Minimum column width if not set otherwise. */
|
|
438
|
+
export const DEFAULT_MIN_COL_WIDTH = 4;
|
|
419
439
|
/** Regular expression to detect if a string describes an image URL (in contrast
|
|
420
440
|
* to a class name). Strings are considered image urls if they contain '.' or '/'.
|
|
421
441
|
*/
|
|
@@ -1217,6 +1237,11 @@ declare module "wb_options" {
|
|
|
1217
1237
|
* Default: false
|
|
1218
1238
|
*/
|
|
1219
1239
|
fixedCol?: boolean;
|
|
1240
|
+
/**
|
|
1241
|
+
* Default value for ColumnDefinition.resizable option.
|
|
1242
|
+
* Default: false
|
|
1243
|
+
*/
|
|
1244
|
+
resizableColumns?: boolean;
|
|
1220
1245
|
/**
|
|
1221
1246
|
* Default: "multi"
|
|
1222
1247
|
*/
|
|
@@ -1386,6 +1411,8 @@ declare module "types" {
|
|
|
1386
1411
|
export type TristateType = boolean | undefined;
|
|
1387
1412
|
/** Show/hide checkbox or display a radiobutton icon instead. */
|
|
1388
1413
|
export type CheckboxOption = boolean | "radio";
|
|
1414
|
+
/** A value that can either be true, false, or undefined. */
|
|
1415
|
+
export type SortOrderType = "asc" | "desc" | undefined;
|
|
1389
1416
|
/** An icon may either be
|
|
1390
1417
|
* a string-tag that references an entry in the `iconMap` (e.g. `"folderOpen"`)),
|
|
1391
1418
|
* an HTML string that contains a `<` and is used as-is,
|
|
@@ -1667,6 +1694,22 @@ declare module "types" {
|
|
|
1667
1694
|
* Default: `4px`.
|
|
1668
1695
|
*/
|
|
1669
1696
|
minWidth?: string | number;
|
|
1697
|
+
/** Allow user to resize the column.
|
|
1698
|
+
* Default: false.
|
|
1699
|
+
*/
|
|
1700
|
+
resizable?: boolean;
|
|
1701
|
+
/** Optional custom column width when user resized by mouse drag.
|
|
1702
|
+
* Default: unset.
|
|
1703
|
+
*/
|
|
1704
|
+
customWidthPx?: number;
|
|
1705
|
+
/** Allow user to sort the column.
|
|
1706
|
+
* Default: false.
|
|
1707
|
+
*/
|
|
1708
|
+
sortable?: boolean;
|
|
1709
|
+
/** Optional custom column sort orde when user clicked the sort icon.
|
|
1710
|
+
* Default: unset.
|
|
1711
|
+
*/
|
|
1712
|
+
sortOrder?: SortOrderType;
|
|
1670
1713
|
/** Optional class names that are added to all `span.wb-col` header AND data
|
|
1671
1714
|
* elements of that column.
|
|
1672
1715
|
*/
|
|
@@ -2372,8 +2415,15 @@ declare module "drag_observer" {
|
|
|
2372
2415
|
export type DragCallbackArgType = {
|
|
2373
2416
|
/** "dragstart", "drag", or "dragstop". */
|
|
2374
2417
|
type: string;
|
|
2375
|
-
/** Original
|
|
2418
|
+
/** Original mousedown or touch event that triggered the dragstart event. */
|
|
2419
|
+
startEvent: MouseEvent | TouchEvent;
|
|
2420
|
+
/** Original mouse or touch event that triggered the current drag event.
|
|
2421
|
+
* Note that this is not the same as `startEvent`, but a mousemove in case of
|
|
2422
|
+
* a dragstart threshold.
|
|
2423
|
+
*/
|
|
2376
2424
|
event: MouseEvent | TouchEvent;
|
|
2425
|
+
/** Custom data that was passed to the DragObserver, typically on dragstart. */
|
|
2426
|
+
customData: any;
|
|
2377
2427
|
/** Element which is currently dragged. */
|
|
2378
2428
|
dragElem: HTMLElement | null;
|
|
2379
2429
|
/** Relative horizontal drag distance since start. */
|
|
@@ -2403,6 +2453,7 @@ declare module "drag_observer" {
|
|
|
2403
2453
|
protected _handler: any;
|
|
2404
2454
|
protected root: EventTarget;
|
|
2405
2455
|
protected start: {
|
|
2456
|
+
event: MouseEvent | TouchEvent | null;
|
|
2406
2457
|
x: number;
|
|
2407
2458
|
y: number;
|
|
2408
2459
|
altKey: boolean;
|
|
@@ -2412,6 +2463,7 @@ declare module "drag_observer" {
|
|
|
2412
2463
|
};
|
|
2413
2464
|
protected dragElem: HTMLElement | null;
|
|
2414
2465
|
protected dragging: boolean;
|
|
2466
|
+
protected customData: object;
|
|
2415
2467
|
protected events: string[];
|
|
2416
2468
|
protected opts: DragObserverOptionsType;
|
|
2417
2469
|
constructor(opts: DragObserverOptionsType);
|
|
@@ -2437,6 +2489,9 @@ declare module "wb_ext_grid" {
|
|
|
2437
2489
|
protected observer: DragObserver;
|
|
2438
2490
|
constructor(tree: Wunderbaum);
|
|
2439
2491
|
init(): void;
|
|
2492
|
+
/**
|
|
2493
|
+
* Hanldes drag and sragstop events for column resizing.
|
|
2494
|
+
*/
|
|
2440
2495
|
protected handleDrag(e: DragCallbackArgType): void;
|
|
2441
2496
|
}
|
|
2442
2497
|
}
|
|
@@ -2871,6 +2926,8 @@ declare module "wunderbaum" {
|
|
|
2871
2926
|
logTimeEnd(label: string): void;
|
|
2872
2927
|
/** Write to `console.warn` with tree name as prefix with if opts.debugLevel >= 2. */
|
|
2873
2928
|
logWarn(...args: any[]): void;
|
|
2929
|
+
/** Reset column widths to default. */
|
|
2930
|
+
resetColumns(): void;
|
|
2874
2931
|
/**
|
|
2875
2932
|
* Make sure that this node is vertically scrolled into the viewport.
|
|
2876
2933
|
*
|
package/dist/wunderbaum.esm.js
CHANGED
|
@@ -288,7 +288,7 @@ function throttle(func, wait = 0, options = {}) {
|
|
|
288
288
|
/*!
|
|
289
289
|
* Wunderbaum - util
|
|
290
290
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
291
|
-
* v0.
|
|
291
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
292
292
|
*/
|
|
293
293
|
/** @module util */
|
|
294
294
|
/** Readable names for `MouseEvent.button` */
|
|
@@ -937,6 +937,52 @@ function toSet(val) {
|
|
|
937
937
|
}
|
|
938
938
|
throw new Error("Cannot convert to Set<string>: " + val);
|
|
939
939
|
}
|
|
940
|
+
/** Convert a pixel string to number.
|
|
941
|
+
* We accept a number or a string like '123px'. If undefined, the first default
|
|
942
|
+
* value that is a number or a string ending with 'px' is returned.
|
|
943
|
+
*
|
|
944
|
+
* Example:
|
|
945
|
+
* ```js
|
|
946
|
+
* const width = util.toPixel("123px", 100);
|
|
947
|
+
* ```
|
|
948
|
+
*/
|
|
949
|
+
function toPixel(
|
|
950
|
+
// val: string | number | undefined | null,
|
|
951
|
+
...defaults) {
|
|
952
|
+
// if (typeof val === "number") {
|
|
953
|
+
// return val;
|
|
954
|
+
// }
|
|
955
|
+
for (const d of defaults) {
|
|
956
|
+
if (typeof d === "number") {
|
|
957
|
+
return d;
|
|
958
|
+
}
|
|
959
|
+
if (typeof d === "string" && d.endsWith("px")) {
|
|
960
|
+
return parseInt(d, 10);
|
|
961
|
+
}
|
|
962
|
+
assert(d == null, `Expected a number or string like '123px': ${d}`);
|
|
963
|
+
}
|
|
964
|
+
throw new Error(`Expected a string like '123px': ${defaults}`);
|
|
965
|
+
}
|
|
966
|
+
/** Evaluate a boolean value using default if undefined.
|
|
967
|
+
* Example:
|
|
968
|
+
* ```js
|
|
969
|
+
* const opts = { flag: true };
|
|
970
|
+
* const value = util.toBool(opts.flag, otherVar, false);
|
|
971
|
+
* ```
|
|
972
|
+
*/
|
|
973
|
+
function toBool(
|
|
974
|
+
// val: boolean | undefined | null,
|
|
975
|
+
...boolDefaults) {
|
|
976
|
+
// if (val != null) {
|
|
977
|
+
// return !!val;
|
|
978
|
+
// }
|
|
979
|
+
for (const d of boolDefaults) {
|
|
980
|
+
if (d != null) {
|
|
981
|
+
return !!d;
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
throw new Error("No default boolean value provided");
|
|
985
|
+
}
|
|
940
986
|
// /** Check if a string is contained in an Array or Set. */
|
|
941
987
|
// export function isAnyOf(s: string, items: Array<string>|Set<string>): boolean {
|
|
942
988
|
// return Array.prototype.includes.call(items, s)
|
|
@@ -1078,6 +1124,8 @@ var util = /*#__PURE__*/Object.freeze({
|
|
|
1078
1124
|
setValueToElem: setValueToElem,
|
|
1079
1125
|
sleep: sleep,
|
|
1080
1126
|
throttle: throttle,
|
|
1127
|
+
toBool: toBool,
|
|
1128
|
+
toPixel: toPixel,
|
|
1081
1129
|
toSet: toSet,
|
|
1082
1130
|
toggleCheckbox: toggleCheckbox,
|
|
1083
1131
|
type: type
|
|
@@ -1086,7 +1134,7 @@ var util = /*#__PURE__*/Object.freeze({
|
|
|
1086
1134
|
/*!
|
|
1087
1135
|
* Wunderbaum - types
|
|
1088
1136
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
1089
|
-
* v0.
|
|
1137
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
1090
1138
|
*/
|
|
1091
1139
|
/**
|
|
1092
1140
|
* Possible values for {@link WunderbaumNode.update()} and {@link Wunderbaum.update()}.
|
|
@@ -1150,7 +1198,7 @@ var NavModeEnum;
|
|
|
1150
1198
|
/*!
|
|
1151
1199
|
* Wunderbaum - wb_extension_base
|
|
1152
1200
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
1153
|
-
* v0.
|
|
1201
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
1154
1202
|
*/
|
|
1155
1203
|
class WunderbaumExtension {
|
|
1156
1204
|
constructor(tree, id, defaults) {
|
|
@@ -1209,7 +1257,7 @@ class WunderbaumExtension {
|
|
|
1209
1257
|
/*!
|
|
1210
1258
|
* Wunderbaum - ext-filter
|
|
1211
1259
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
1212
|
-
* v0.
|
|
1260
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
1213
1261
|
*/
|
|
1214
1262
|
const START_MARKER = "\uFFF7";
|
|
1215
1263
|
const END_MARKER = "\uFFF8";
|
|
@@ -1533,7 +1581,7 @@ function _markFuzzyMatchedChars(text, matches, escapeTitles = true) {
|
|
|
1533
1581
|
/*!
|
|
1534
1582
|
* Wunderbaum - ext-keynav
|
|
1535
1583
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
1536
|
-
* v0.
|
|
1584
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
1537
1585
|
*/
|
|
1538
1586
|
const QUICKSEARCH_DELAY = 500;
|
|
1539
1587
|
class KeynavExtension extends WunderbaumExtension {
|
|
@@ -1897,7 +1945,7 @@ class KeynavExtension extends WunderbaumExtension {
|
|
|
1897
1945
|
/*!
|
|
1898
1946
|
* Wunderbaum - ext-logger
|
|
1899
1947
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
1900
|
-
* v0.
|
|
1948
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
1901
1949
|
*/
|
|
1902
1950
|
class LoggerExtension extends WunderbaumExtension {
|
|
1903
1951
|
constructor(tree) {
|
|
@@ -1939,7 +1987,7 @@ class LoggerExtension extends WunderbaumExtension {
|
|
|
1939
1987
|
/*!
|
|
1940
1988
|
* Wunderbaum - common
|
|
1941
1989
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
1942
|
-
* v0.
|
|
1990
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
1943
1991
|
*/
|
|
1944
1992
|
const DEFAULT_DEBUGLEVEL = 3; // Replaced by rollup script
|
|
1945
1993
|
/**
|
|
@@ -1957,6 +2005,8 @@ const ICON_WIDTH = 20;
|
|
|
1957
2005
|
const TITLE_SPAN_PAD_Y = 7;
|
|
1958
2006
|
/** Render row markup for N nodes above and below the visible viewport. */
|
|
1959
2007
|
const RENDER_MAX_PREFETCH = 5;
|
|
2008
|
+
/** Minimum column width if not set otherwise. */
|
|
2009
|
+
const DEFAULT_MIN_COL_WIDTH = 4;
|
|
1960
2010
|
/** Regular expression to detect if a string describes an image URL (in contrast
|
|
1961
2011
|
* to a class name). Strings are considered image urls if they contain '.' or '/'.
|
|
1962
2012
|
*/
|
|
@@ -2262,7 +2312,7 @@ function decompressSourceData(source) {
|
|
|
2262
2312
|
/*!
|
|
2263
2313
|
* Wunderbaum - ext-dnd
|
|
2264
2314
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
2265
|
-
* v0.
|
|
2315
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
2266
2316
|
*/
|
|
2267
2317
|
const nodeMimeType = "application/x-wunderbaum-node";
|
|
2268
2318
|
class DndExtension extends WunderbaumExtension {
|
|
@@ -2707,7 +2757,7 @@ class DndExtension extends WunderbaumExtension {
|
|
|
2707
2757
|
/*!
|
|
2708
2758
|
* Wunderbaum - drag_observer
|
|
2709
2759
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
2710
|
-
* v0.
|
|
2760
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
2711
2761
|
*/
|
|
2712
2762
|
/**
|
|
2713
2763
|
* Convert mouse- and touch events to 'dragstart', 'drag', and 'dragstop'.
|
|
@@ -2715,6 +2765,7 @@ class DndExtension extends WunderbaumExtension {
|
|
|
2715
2765
|
class DragObserver {
|
|
2716
2766
|
constructor(opts) {
|
|
2717
2767
|
this.start = {
|
|
2768
|
+
event: null,
|
|
2718
2769
|
x: 0,
|
|
2719
2770
|
y: 0,
|
|
2720
2771
|
altKey: false,
|
|
@@ -2724,6 +2775,7 @@ class DragObserver {
|
|
|
2724
2775
|
};
|
|
2725
2776
|
this.dragElem = null;
|
|
2726
2777
|
this.dragging = false;
|
|
2778
|
+
this.customData = {};
|
|
2727
2779
|
// TODO: touch events
|
|
2728
2780
|
this.events = ["mousedown", "mouseup", "mousemove", "keydown"];
|
|
2729
2781
|
if (!opts.root) {
|
|
@@ -2751,22 +2803,32 @@ class DragObserver {
|
|
|
2751
2803
|
stopDrag(cb_event) {
|
|
2752
2804
|
if (this.dragging && this.opts.dragstop && cb_event) {
|
|
2753
2805
|
cb_event.type = "dragstop";
|
|
2754
|
-
|
|
2806
|
+
try {
|
|
2807
|
+
this.opts.dragstop(cb_event);
|
|
2808
|
+
}
|
|
2809
|
+
catch (err) {
|
|
2810
|
+
console.error("dragstop error", err); // eslint-disable-line no-console
|
|
2811
|
+
}
|
|
2755
2812
|
}
|
|
2756
2813
|
this.dragElem = null;
|
|
2757
2814
|
this.dragging = false;
|
|
2815
|
+
this.start.event = null;
|
|
2816
|
+
this.customData = {};
|
|
2758
2817
|
}
|
|
2759
2818
|
handleEvent(e) {
|
|
2760
2819
|
const type = e.type;
|
|
2761
2820
|
const opts = this.opts;
|
|
2762
2821
|
const cb_event = {
|
|
2763
2822
|
type: e.type,
|
|
2823
|
+
startEvent: type === "mousedown" ? e : this.start.event,
|
|
2764
2824
|
event: e,
|
|
2825
|
+
customData: this.customData,
|
|
2765
2826
|
dragElem: this.dragElem,
|
|
2766
2827
|
dx: e.pageX - this.start.x,
|
|
2767
2828
|
dy: e.pageY - this.start.y,
|
|
2768
2829
|
apply: undefined,
|
|
2769
2830
|
};
|
|
2831
|
+
// console.log("handleEvent", type, cb_event);
|
|
2770
2832
|
switch (type) {
|
|
2771
2833
|
case "keydown":
|
|
2772
2834
|
this.stopDrag(cb_event);
|
|
@@ -2791,6 +2853,7 @@ class DragObserver {
|
|
|
2791
2853
|
}
|
|
2792
2854
|
}
|
|
2793
2855
|
}
|
|
2856
|
+
this.start.event = e;
|
|
2794
2857
|
this.start.x = e.pageX;
|
|
2795
2858
|
this.start.y = e.pageY;
|
|
2796
2859
|
this.start.altKey = e.altKey;
|
|
@@ -2843,7 +2906,7 @@ class DragObserver {
|
|
|
2843
2906
|
/*!
|
|
2844
2907
|
* Wunderbaum - ext-grid
|
|
2845
2908
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
2846
|
-
* v0.
|
|
2909
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
2847
2910
|
*/
|
|
2848
2911
|
class GridExtension extends WunderbaumExtension {
|
|
2849
2912
|
constructor(tree) {
|
|
@@ -2852,11 +2915,43 @@ class GridExtension extends WunderbaumExtension {
|
|
|
2852
2915
|
});
|
|
2853
2916
|
this.observer = new DragObserver({
|
|
2854
2917
|
root: window.document,
|
|
2855
|
-
selector: "span.wb-col-resizer",
|
|
2918
|
+
selector: "span.wb-col-resizer-active",
|
|
2856
2919
|
thresh: 4,
|
|
2857
2920
|
// throttle: 400,
|
|
2858
2921
|
dragstart: (e) => {
|
|
2859
|
-
|
|
2922
|
+
const info = Wunderbaum.getEventInfo(e.startEvent);
|
|
2923
|
+
const colDef = info.colDef;
|
|
2924
|
+
const allow = colDef &&
|
|
2925
|
+
this.tree.element.contains(e.dragElem) &&
|
|
2926
|
+
toBool(colDef.resizable, tree.options.resizableColumns, false);
|
|
2927
|
+
// this.tree.log("dragstart", colDef, e, info);
|
|
2928
|
+
this.tree.element.classList.toggle("wb-col-resizing", !!allow);
|
|
2929
|
+
info.colElem.classList.toggle("wb-col-resizing", !!allow);
|
|
2930
|
+
// We start dagging, so we remember the actual width in *pixels*
|
|
2931
|
+
// (which may be 'auto' or '100%').
|
|
2932
|
+
// Since we we re-create the markup on each update, we also cannot store
|
|
2933
|
+
// the original event or DOM element, but only the colDef object.
|
|
2934
|
+
if (allow) {
|
|
2935
|
+
// Store initial target column infos in customData
|
|
2936
|
+
e.customData.colDef = colDef;
|
|
2937
|
+
e.customData.orgCustomWidthPx = colDef.customWidthPx;
|
|
2938
|
+
const curWidthPx = Number.parseInt(info.colElem.style.width, 10);
|
|
2939
|
+
e.customData.orgWidthPx = curWidthPx;
|
|
2940
|
+
// Set custom width to current width, so that we can modify it
|
|
2941
|
+
colDef.customWidthPx = curWidthPx;
|
|
2942
|
+
// this.tree.log(
|
|
2943
|
+
// `dragstart customWidthPx=${colDef.customWidthPx}`,
|
|
2944
|
+
// e,
|
|
2945
|
+
// info
|
|
2946
|
+
// );
|
|
2947
|
+
this.tree.update(ChangeType.colStructure);
|
|
2948
|
+
// this.tree.log(
|
|
2949
|
+
// `dragstart 2 customWidthPx=${colDef.customWidthPx}`,
|
|
2950
|
+
// e,
|
|
2951
|
+
// info
|
|
2952
|
+
// );
|
|
2953
|
+
}
|
|
2954
|
+
return allow;
|
|
2860
2955
|
},
|
|
2861
2956
|
drag: (e) => {
|
|
2862
2957
|
// TODO: throttle
|
|
@@ -2870,17 +2965,39 @@ class GridExtension extends WunderbaumExtension {
|
|
|
2870
2965
|
init() {
|
|
2871
2966
|
super.init();
|
|
2872
2967
|
}
|
|
2968
|
+
/**
|
|
2969
|
+
* Hanldes drag and sragstop events for column resizing.
|
|
2970
|
+
*/
|
|
2873
2971
|
handleDrag(e) {
|
|
2874
|
-
const
|
|
2875
|
-
|
|
2876
|
-
this.tree.log(`${e.type}(
|
|
2972
|
+
const custom = e.customData;
|
|
2973
|
+
const colDef = custom.colDef;
|
|
2974
|
+
// this.tree.log(`${e.type} (dx=${e.dx})`, e, info);
|
|
2975
|
+
if (e.type === "dragstop" || e.type === "drag") {
|
|
2976
|
+
this.tree.element.classList.remove("wb-col-resizing");
|
|
2977
|
+
// info.colElem!.classList.remove("wb-col-resizing");
|
|
2978
|
+
if (e.apply || e.type === "drag") {
|
|
2979
|
+
const minWidth = toPixel(colDef.minWidth, DEFAULT_MIN_COL_WIDTH);
|
|
2980
|
+
const newWidth = Math.max(minWidth, custom.orgWidthPx + e.dx);
|
|
2981
|
+
colDef.customWidthPx = newWidth;
|
|
2982
|
+
// this.tree.log(
|
|
2983
|
+
// `${e.type} minWidth=${minWidth}, newWidth=${newWidth}`,
|
|
2984
|
+
// colDef
|
|
2985
|
+
// );
|
|
2986
|
+
}
|
|
2987
|
+
else {
|
|
2988
|
+
// Drag was cancelled
|
|
2989
|
+
this.tree.log("Column resize cancelled", e);
|
|
2990
|
+
colDef.customWidthPx = custom.orgCustomWidthPx; // Restore original width or undefined
|
|
2991
|
+
}
|
|
2992
|
+
this.tree.update(ChangeType.colStructure);
|
|
2993
|
+
}
|
|
2877
2994
|
}
|
|
2878
2995
|
}
|
|
2879
2996
|
|
|
2880
2997
|
/*!
|
|
2881
2998
|
* Wunderbaum - deferred
|
|
2882
2999
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
2883
|
-
* v0.
|
|
3000
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
2884
3001
|
*/
|
|
2885
3002
|
/**
|
|
2886
3003
|
* Implement a ES6 Promise, that exposes a resolve() and reject() method.
|
|
@@ -2933,7 +3050,7 @@ class Deferred {
|
|
|
2933
3050
|
/*!
|
|
2934
3051
|
* Wunderbaum - wunderbaum_node
|
|
2935
3052
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
2936
|
-
* v0.
|
|
3053
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
2937
3054
|
*/
|
|
2938
3055
|
/** WunderbaumNode properties that can be passed with source data.
|
|
2939
3056
|
* (Any other source properties will be stored as `node.data.PROP`.)
|
|
@@ -5342,7 +5459,7 @@ WunderbaumNode.sequence = 0;
|
|
|
5342
5459
|
/*!
|
|
5343
5460
|
* Wunderbaum - ext-edit
|
|
5344
5461
|
* Copyright (c) 2021-2024, Martin Wendt. Released under the MIT license.
|
|
5345
|
-
* v0.
|
|
5462
|
+
* v0.10.0, Mon, 24 Jun 2024 19:17:59 GMT (https://github.com/mar10/wunderbaum)
|
|
5346
5463
|
*/
|
|
5347
5464
|
// const START_MARKER = "\uFFF7";
|
|
5348
5465
|
class EditExtension extends WunderbaumExtension {
|
|
@@ -5673,8 +5790,8 @@ class EditExtension extends WunderbaumExtension {
|
|
|
5673
5790
|
* https://github.com/mar10/wunderbaum
|
|
5674
5791
|
*
|
|
5675
5792
|
* Released under the MIT license.
|
|
5676
|
-
* @version v0.
|
|
5677
|
-
* @date
|
|
5793
|
+
* @version v0.10.0
|
|
5794
|
+
* @date Mon, 24 Jun 2024 19:17:59 GMT
|
|
5678
5795
|
*/
|
|
5679
5796
|
// import "./wunderbaum.scss";
|
|
5680
5797
|
class WbSystemRoot extends WunderbaumNode {
|
|
@@ -6997,6 +7114,13 @@ class Wunderbaum {
|
|
|
6997
7114
|
console.warn(this.toString(), ...args); // eslint-disable-line no-console
|
|
6998
7115
|
}
|
|
6999
7116
|
}
|
|
7117
|
+
/** Reset column widths to default. */
|
|
7118
|
+
resetColumns() {
|
|
7119
|
+
this.columns.forEach((col) => {
|
|
7120
|
+
delete col.customWidthPx;
|
|
7121
|
+
});
|
|
7122
|
+
this.update(ChangeType.colStructure);
|
|
7123
|
+
}
|
|
7000
7124
|
/**
|
|
7001
7125
|
* Make sure that this node is vertically scrolled into the viewport.
|
|
7002
7126
|
*
|
|
@@ -7354,7 +7478,7 @@ class Wunderbaum {
|
|
|
7354
7478
|
this._columnsById = {};
|
|
7355
7479
|
for (const col of columns) {
|
|
7356
7480
|
this._columnsById[col.id] = col;
|
|
7357
|
-
const cw = col.width;
|
|
7481
|
+
const cw = col.customWidthPx ? `${col.customWidthPx}px` : col.width;
|
|
7358
7482
|
if (col.id === "*" && col !== col0) {
|
|
7359
7483
|
throw new Error(`Column id '*' must be defined only once: '${col.title}'.`);
|
|
7360
7484
|
}
|
|
@@ -7460,7 +7584,13 @@ class Wunderbaum {
|
|
|
7460
7584
|
}
|
|
7461
7585
|
let resizer = "";
|
|
7462
7586
|
if (i < colCount - 1) {
|
|
7463
|
-
|
|
7587
|
+
if (toBool(col.resizable, this.options.resizableColumns, false)) {
|
|
7588
|
+
resizer =
|
|
7589
|
+
'<span class="wb-col-resizer wb-col-resizer-active"></span>';
|
|
7590
|
+
}
|
|
7591
|
+
else {
|
|
7592
|
+
resizer = '<span class="wb-col-resizer"></span>';
|
|
7593
|
+
}
|
|
7464
7594
|
}
|
|
7465
7595
|
colElem.innerHTML = `<span class="wb-col-title"${tooltip}>${title}</span>${resizer}`;
|
|
7466
7596
|
if (this.isCellNav()) {
|
|
@@ -7910,7 +8040,7 @@ class Wunderbaum {
|
|
|
7910
8040
|
}
|
|
7911
8041
|
Wunderbaum.sequence = 0;
|
|
7912
8042
|
/** Wunderbaum release version number "MAJOR.MINOR.PATCH". */
|
|
7913
|
-
Wunderbaum.version = "v0.
|
|
8043
|
+
Wunderbaum.version = "v0.10.0"; // Set to semver by 'grunt release'
|
|
7914
8044
|
/** Expose some useful methods of the util.ts module as `Wunderbaum.util`. */
|
|
7915
8045
|
Wunderbaum.util = util;
|
|
7916
8046
|
|