@slickgrid-universal/custom-tooltip-plugin 9.12.0 → 10.0.0-beta.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 +0 -8
- package/dist/slickCustomTooltip.d.ts +21 -1
- package/dist/slickCustomTooltip.d.ts.map +1 -1
- package/dist/slickCustomTooltip.js +173 -59
- package/dist/slickCustomTooltip.js.map +1 -1
- package/package.json +5 -5
- package/src/slickCustomTooltip.ts +198 -65
package/README.md
CHANGED
|
@@ -5,11 +5,6 @@
|
|
|
5
5
|
[](https://www.npmjs.com/package/@slickgrid-universal/custom-tooltip-plugin)
|
|
6
6
|
[](https://bundlephobia.com/result?p=@slickgrid-universal/custom-tooltip-plugin)
|
|
7
7
|
|
|
8
|
-
[](https://github.com/ghiscoding/slickgrid-universal/actions)
|
|
9
|
-
[](https://www.cypress.io/)
|
|
10
|
-
[](https://vitest.dev/)
|
|
11
|
-
[](https://codecov.io/gh/ghiscoding/slickgrid-universal)
|
|
12
|
-
|
|
13
8
|
## Custom Tooltip (plugin)
|
|
14
9
|
#### @slickgrid-universal/custom-tooltip-plugin
|
|
15
10
|
|
|
@@ -53,8 +48,5 @@ export class MyExample {
|
|
|
53
48
|
}
|
|
54
49
|
```
|
|
55
50
|
|
|
56
|
-
### Internal Dependencies
|
|
57
|
-
- [@slickgrid-universal/common](https://github.com/ghiscoding/slickgrid-universal/tree/master/packages/common)
|
|
58
|
-
|
|
59
51
|
### Installation
|
|
60
52
|
Follow the instruction provided in the main [README](https://github.com/ghiscoding/slickgrid-universal#installation)
|
|
@@ -3,7 +3,7 @@ import type { CancellablePromiseWrapper, Column, ContainerService, CustomDataVie
|
|
|
3
3
|
import { SlickEventHandler } from '@slickgrid-universal/common';
|
|
4
4
|
type CellType = 'slick-cell' | 'slick-header-column' | 'slick-headerrow-column';
|
|
5
5
|
export declare class SlickCustomTooltip {
|
|
6
|
-
|
|
6
|
+
readonly pluginName = "CustomTooltip";
|
|
7
7
|
protected _addonOptions?: CustomTooltipOption;
|
|
8
8
|
protected _cellAddonOptions?: CustomTooltipOption;
|
|
9
9
|
protected _cellNodeElm?: HTMLElement;
|
|
@@ -22,6 +22,7 @@ export declare class SlickCustomTooltip {
|
|
|
22
22
|
protected _hideTooltipTimeout?: any;
|
|
23
23
|
protected _autoHideTimeout?: any;
|
|
24
24
|
protected _isMouseOverTooltip: boolean;
|
|
25
|
+
protected _isGridTooltip: boolean;
|
|
25
26
|
protected _bindEventService: BindingEventService;
|
|
26
27
|
constructor();
|
|
27
28
|
get addonOptions(): CustomTooltipOption | undefined;
|
|
@@ -39,6 +40,8 @@ export declare class SlickCustomTooltip {
|
|
|
39
40
|
addRxJsResource(rxjs: RxJsFacade): void;
|
|
40
41
|
init(grid: SlickGrid, containerService: ContainerService): void;
|
|
41
42
|
dispose(): void;
|
|
43
|
+
protected handleGlobalMouseOver(event: MouseEvent): void;
|
|
44
|
+
protected handleGlobalMouseOut(event: MouseEvent): void;
|
|
42
45
|
protected handleOnMouseLeave(): void;
|
|
43
46
|
/**
|
|
44
47
|
* hide (remove) tooltip from the DOM, it will also remove it from the DOM and also cancel any pending requests (as mentioned below).
|
|
@@ -47,6 +50,12 @@ export declare class SlickCustomTooltip {
|
|
|
47
50
|
hideTooltip(): void;
|
|
48
51
|
getOptions(): CustomTooltipOption | undefined;
|
|
49
52
|
setOptions(newOptions: CustomTooltipOption): void;
|
|
53
|
+
/** Clear all timeouts (hide and auto-hide) */
|
|
54
|
+
protected clearTimeouts(): void;
|
|
55
|
+
/** Truncate text if it exceeds maxLength */
|
|
56
|
+
protected truncateText(text: string, maxLength?: number): string;
|
|
57
|
+
/** Find the closest tooltip element based on attributes */
|
|
58
|
+
protected findTooltipElement(target: HTMLElement | null): HTMLElement | null;
|
|
50
59
|
/**
|
|
51
60
|
* Async process callback will hide any prior tooltip & then merge the new result with the item `dataContext` under a `__params` property
|
|
52
61
|
* (unless a new prop name is provided) to provice as dataContext object to the asyncPostFormatter.
|
|
@@ -79,6 +88,8 @@ export declare class SlickCustomTooltip {
|
|
|
79
88
|
row: number;
|
|
80
89
|
cell: number;
|
|
81
90
|
}, value: any, columnDef: Column, item: unknown, tooltipText?: string, inputTitleElm?: Element | null): void;
|
|
91
|
+
/** Bind mouseenter/mouseleave events to tooltip when persistOnHover is disabled */
|
|
92
|
+
protected bindPersistOnHoverEvents(): void;
|
|
82
93
|
/**
|
|
83
94
|
* Reposition the Tooltip to be top-left position over the cell.
|
|
84
95
|
* By default we use an "auto" mode which will allow to position the Tooltip to the best logical position in the window, also when we mention position, we are talking about the relative position against the grid cell.
|
|
@@ -90,6 +101,15 @@ export declare class SlickCustomTooltip {
|
|
|
90
101
|
row: number;
|
|
91
102
|
cell: number;
|
|
92
103
|
}): void;
|
|
104
|
+
/** Check if element has tooltip attribute (title or data-slick-tooltip) */
|
|
105
|
+
protected hasTooltipAttribute(element: HTMLElement | null): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Find title element - returns the element itself if it has a non-empty title attribute,
|
|
108
|
+
* otherwise queries for a child element with a title attribute
|
|
109
|
+
*/
|
|
110
|
+
protected findElementWithTitle(element: HTMLElement): Element | null;
|
|
111
|
+
/** Swap title attribute to data-slick-tooltip and clear title to prevent native browser tooltip */
|
|
112
|
+
protected swapTitleAttribute(element?: Element | null, tooltipText?: string): void;
|
|
93
113
|
/**
|
|
94
114
|
* swap and copy the "title" attribute into a new custom attribute then clear the "title" attribute
|
|
95
115
|
* from the grid div text content so that it won't show also as a 2nd browser tooltip
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slickCustomTooltip.d.ts","sourceRoot":"","sources":["../src/slickCustomTooltip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EACV,yBAAyB,EACzB,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,SAAS,EAGT,UAAU,EAEV,UAAU,EACV,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,EACb,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAQL,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAGrC,KAAK,QAAQ,GAAG,YAAY,GAAG,qBAAqB,GAAG,wBAAwB,CAAC;AAiChF,qBAAa,kBAAkB;IAC7B,
|
|
1
|
+
{"version":3,"file":"slickCustomTooltip.d.ts","sourceRoot":"","sources":["../src/slickCustomTooltip.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ const SELECTOR_CLOSEST_TOOLTIP_ATTR = '[title], [data-slick-tooltip]';
|
|
|
31
31
|
const DEFAULT_CLASS_NAME = 'slick-custom-tooltip';
|
|
32
32
|
export class SlickCustomTooltip {
|
|
33
33
|
constructor() {
|
|
34
|
-
this.
|
|
34
|
+
this.pluginName = 'CustomTooltip';
|
|
35
35
|
this._cellType = 'slick-cell';
|
|
36
36
|
this._rxjs = null;
|
|
37
37
|
this._sharedService = null;
|
|
@@ -46,8 +46,11 @@ export class SlickCustomTooltip {
|
|
|
46
46
|
whiteSpace: 'normal',
|
|
47
47
|
autoHideDelay: 3000,
|
|
48
48
|
persistOnHover: true,
|
|
49
|
+
observeAllTooltips: false, // global tooltip observation is disabled by default
|
|
50
|
+
observeTooltipContainer: 'body',
|
|
49
51
|
};
|
|
50
52
|
this._isMouseOverTooltip = false;
|
|
53
|
+
this._isGridTooltip = false; // tracks if tooltip is from grid events vs global events
|
|
51
54
|
this._bindEventService = new BindingEventService();
|
|
52
55
|
this._eventHandler = new SlickEventHandler();
|
|
53
56
|
}
|
|
@@ -106,14 +109,62 @@ export class SlickCustomTooltip {
|
|
|
106
109
|
.subscribe(grid.onHeaderMouseOut, this.handleOnMouseLeave.bind(this))
|
|
107
110
|
.subscribe(grid.onHeaderRowMouseLeave, this.handleOnMouseLeave.bind(this))
|
|
108
111
|
.subscribe(grid.onHeaderRowMouseOut, this.handleOnMouseLeave.bind(this));
|
|
112
|
+
// optionally observe all title elements outside the grid
|
|
113
|
+
if (this._addonOptions?.observeAllTooltips) {
|
|
114
|
+
const containerSelector = this._addonOptions.observeTooltipContainer || 'body';
|
|
115
|
+
const scope = containerSelector === 'body' ? document.body : document.querySelector(containerSelector) || grid.getContainerNode();
|
|
116
|
+
this._bindEventService.bind(scope, 'mouseover', this.handleGlobalMouseOver.bind(this));
|
|
117
|
+
this._bindEventService.bind(scope, 'mouseout', this.handleGlobalMouseOut.bind(this));
|
|
118
|
+
}
|
|
109
119
|
}
|
|
110
120
|
dispose() {
|
|
111
121
|
// hide (remove) any tooltip and unsubscribe from all events
|
|
112
122
|
this.hideTooltip();
|
|
113
123
|
this._cancellablePromise = undefined;
|
|
114
124
|
this._eventHandler.unsubscribeAll();
|
|
125
|
+
this._bindEventService.unbindAll();
|
|
126
|
+
}
|
|
127
|
+
handleGlobalMouseOver(event) {
|
|
128
|
+
const target = event.target;
|
|
129
|
+
// skip if target is within a SlickGrid cell (to avoid duplicate tooltips)
|
|
130
|
+
if (target?.closest('.slick-cell, .slick-header-column, .slick-headerrow-column')) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// Always hide any existing tooltip first to prevent overlapping tooltips
|
|
134
|
+
this._isGridTooltip = false; // mark as global tooltip event
|
|
135
|
+
this.hideTooltip();
|
|
136
|
+
// Find element with tooltip
|
|
137
|
+
const titleElm = this.findTooltipElement(target);
|
|
138
|
+
if (titleElm) {
|
|
139
|
+
const tooltipText = findFirstAttribute(titleElm, CLOSEST_TOOLTIP_FILLED_ATTR);
|
|
140
|
+
if (tooltipText) {
|
|
141
|
+
this._cellNodeElm = titleElm;
|
|
142
|
+
this._mouseTarget = titleElm;
|
|
143
|
+
this._cellType = 'slick-cell'; // use as default type
|
|
144
|
+
this._hasMultipleTooltips = (titleElm?.querySelectorAll(SELECTOR_CLOSEST_TOOLTIP_ATTR).length || 0) > 1;
|
|
145
|
+
// render the tooltip using regular tooltip mode
|
|
146
|
+
this._cellAddonOptions = { ...this._addonOptions, useRegularTooltip: true };
|
|
147
|
+
this.renderRegularTooltip(undefined, { row: -1, cell: -1 }, null, {}, {});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
handleGlobalMouseOut(event) {
|
|
152
|
+
const target = event.target;
|
|
153
|
+
const relatedTarget = event.relatedTarget;
|
|
154
|
+
// check if we're leaving an element with a title attribute
|
|
155
|
+
const leavingTitleElm = target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
|
|
156
|
+
if (leavingTitleElm) {
|
|
157
|
+
// don't hide if we're moving to the tooltip itself (for persistOnHover support)
|
|
158
|
+
const enteringTooltip = relatedTarget?.closest('.slick-custom-tooltip');
|
|
159
|
+
// also don't hide if moving to a child of the same element with title
|
|
160
|
+
const stayingInSameTitleElm = relatedTarget?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR) === leavingTitleElm;
|
|
161
|
+
if (!enteringTooltip && !stayingInSameTitleElm) {
|
|
162
|
+
this.handleOnMouseLeave();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
115
165
|
}
|
|
116
166
|
handleOnMouseLeave() {
|
|
167
|
+
this._isGridTooltip = false; // reset tooltip type flag
|
|
117
168
|
if (this.addonOptions?.persistOnHover === false) {
|
|
118
169
|
if (this._hideTooltipTimeout) {
|
|
119
170
|
clearTimeout(this._hideTooltipTimeout);
|
|
@@ -136,14 +187,7 @@ export class SlickCustomTooltip {
|
|
|
136
187
|
this._cancellablePromise?.cancel();
|
|
137
188
|
this._observable$?.unsubscribe();
|
|
138
189
|
if (this.addonOptions?.persistOnHover === false) {
|
|
139
|
-
|
|
140
|
-
clearTimeout(this._hideTooltipTimeout);
|
|
141
|
-
this._hideTooltipTimeout = undefined;
|
|
142
|
-
}
|
|
143
|
-
if (this._autoHideTimeout) {
|
|
144
|
-
clearTimeout(this._autoHideTimeout);
|
|
145
|
-
this._autoHideTimeout = undefined;
|
|
146
|
-
}
|
|
190
|
+
this.clearTimeouts();
|
|
147
191
|
this._isMouseOverTooltip = false;
|
|
148
192
|
this._bindEventService.unbindAll();
|
|
149
193
|
}
|
|
@@ -160,6 +204,37 @@ export class SlickCustomTooltip {
|
|
|
160
204
|
// --
|
|
161
205
|
// protected functions
|
|
162
206
|
// ---------------------
|
|
207
|
+
/** Clear all timeouts (hide and auto-hide) */
|
|
208
|
+
clearTimeouts() {
|
|
209
|
+
if (this._hideTooltipTimeout) {
|
|
210
|
+
clearTimeout(this._hideTooltipTimeout);
|
|
211
|
+
this._hideTooltipTimeout = undefined;
|
|
212
|
+
}
|
|
213
|
+
if (this._autoHideTimeout) {
|
|
214
|
+
clearTimeout(this._autoHideTimeout);
|
|
215
|
+
this._autoHideTimeout = undefined;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/** Truncate text if it exceeds maxLength */
|
|
219
|
+
truncateText(text, maxLength) {
|
|
220
|
+
if (maxLength && text.length > maxLength) {
|
|
221
|
+
return text.substring(0, maxLength - 3) + '...';
|
|
222
|
+
}
|
|
223
|
+
return text;
|
|
224
|
+
}
|
|
225
|
+
/** Find the closest tooltip element based on attributes */
|
|
226
|
+
findTooltipElement(target) {
|
|
227
|
+
if (target) {
|
|
228
|
+
const targetHasTooltipAttr = this.hasTooltipAttribute(target);
|
|
229
|
+
if (findFirstAttribute(target, CLOSEST_TOOLTIP_FILLED_ATTR)) {
|
|
230
|
+
return target;
|
|
231
|
+
}
|
|
232
|
+
if (!targetHasTooltipAttr) {
|
|
233
|
+
return target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
163
238
|
/**
|
|
164
239
|
* Async process callback will hide any prior tooltip & then merge the new result with the item `dataContext` under a `__params` property
|
|
165
240
|
* (unless a new prop name is provided) to provice as dataContext object to the asyncPostFormatter.
|
|
@@ -176,8 +251,11 @@ export class SlickCustomTooltip {
|
|
|
176
251
|
}
|
|
177
252
|
/** depending on the selector type, execute the necessary handler code */
|
|
178
253
|
handleOnHeaderMouseOverByType(event, args, selector) {
|
|
254
|
+
this._isGridTooltip = true; // mark as grid tooltip event
|
|
179
255
|
this._cellType = selector;
|
|
180
|
-
|
|
256
|
+
// Find element with tooltip
|
|
257
|
+
const target = event.target;
|
|
258
|
+
this._mouseTarget = this.findTooltipElement(target);
|
|
181
259
|
// before doing anything, let's remove any previous tooltip before
|
|
182
260
|
// and cancel any opened Promise/Observable when using async
|
|
183
261
|
this.hideTooltip();
|
|
@@ -214,8 +292,15 @@ export class SlickCustomTooltip {
|
|
|
214
292
|
}
|
|
215
293
|
}
|
|
216
294
|
async handleOnMouseOver(event) {
|
|
295
|
+
this._isGridTooltip = true; // mark as grid tooltip event
|
|
217
296
|
this._cellType = 'slick-cell';
|
|
218
|
-
|
|
297
|
+
// Find element with tooltip
|
|
298
|
+
const target = event.target;
|
|
299
|
+
this._mouseTarget = this.findTooltipElement(target);
|
|
300
|
+
// if target has tooltip attribute but it's empty, return early to prevent showing parent/cell tooltip
|
|
301
|
+
if (this.hasTooltipAttribute(target) && !this._mouseTarget) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
219
304
|
// before doing anything, let's remove any previous tooltip before
|
|
220
305
|
// and cancel any opened Promise/Observable when using async
|
|
221
306
|
this.hideTooltip();
|
|
@@ -252,6 +337,13 @@ export class SlickCustomTooltip {
|
|
|
252
337
|
// when we aren't using regular tooltip and we do have a tooltip formatter, let's render it
|
|
253
338
|
if (typeof this._cellAddonOptions?.formatter === 'function') {
|
|
254
339
|
this.renderTooltipFormatter(this._cellAddonOptions.formatter, cell, cellValue, columnDef, item);
|
|
340
|
+
// Clear all title attributes from elements in the cell to prevent native browser tooltips
|
|
341
|
+
// This should happen whenever we're using custom tooltips (not regular tooltips)
|
|
342
|
+
if (!this._cellAddonOptions?.useRegularTooltip && this._cellNodeElm) {
|
|
343
|
+
this._cellNodeElm.querySelectorAll('[title]').forEach((elm) => {
|
|
344
|
+
this.swapTitleAttribute(elm, elm.getAttribute('title') || '');
|
|
345
|
+
});
|
|
346
|
+
}
|
|
255
347
|
}
|
|
256
348
|
// when tooltip is an Async (delayed, e.g. with a backend API call)
|
|
257
349
|
if (typeof this._cellAddonOptions?.asyncProcess === 'function') {
|
|
@@ -322,13 +414,17 @@ export class SlickCustomTooltip {
|
|
|
322
414
|
!this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
|
|
323
415
|
tooltipText = cellElm.textContent?.trim() ?? '';
|
|
324
416
|
if (this._cellAddonOptions?.tooltipTextMaxLength && tooltipText.length > this._cellAddonOptions?.tooltipTextMaxLength) {
|
|
325
|
-
tooltipText =
|
|
417
|
+
tooltipText = this.truncateText(tooltipText, this._cellAddonOptions.tooltipTextMaxLength);
|
|
326
418
|
}
|
|
327
419
|
tmpTitleElm = cellElm;
|
|
328
420
|
}
|
|
329
421
|
else {
|
|
330
422
|
if (this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
|
|
423
|
+
// For nested tooltips in formatters, prioritize formatter output first, then fallback to cell element
|
|
331
424
|
tmpTitleElm = tmpDiv.querySelector(SELECTOR_CLOSEST_TOOLTIP_ATTR);
|
|
425
|
+
if (!tmpTitleElm) {
|
|
426
|
+
tmpTitleElm = cellElm && findFirstAttribute(cellElm, CLOSEST_TOOLTIP_FILLED_ATTR) ? cellElm : null;
|
|
427
|
+
}
|
|
332
428
|
}
|
|
333
429
|
else {
|
|
334
430
|
tmpTitleElm = findFirstAttribute(cellElm, CLOSEST_TOOLTIP_FILLED_ATTR)
|
|
@@ -339,7 +435,10 @@ export class SlickCustomTooltip {
|
|
|
339
435
|
}
|
|
340
436
|
}
|
|
341
437
|
// prettier-ignore
|
|
342
|
-
|
|
438
|
+
// When in global tooltip observation mode (cell.row === -1), we always want to show the tooltip from the target element
|
|
439
|
+
// For grid cells with multiple tooltips, only hide if hovering the cell container itself (not a specific child element)
|
|
440
|
+
if (tmpTitleElm?.style.display === 'none' ||
|
|
441
|
+
(cell.row !== -1 && this._hasMultipleTooltips && (!cellElm || cellElm === this._cellNodeElm))) {
|
|
343
442
|
tooltipText = '';
|
|
344
443
|
}
|
|
345
444
|
else if (!tooltipText || (typeof formatterOrText === 'function' && this._cellAddonOptions?.useRegularTooltipFromFormatterOnly)) {
|
|
@@ -367,10 +466,7 @@ export class SlickCustomTooltip {
|
|
|
367
466
|
value = findFirstAttribute(tmpTitleElm, CLOSEST_TOOLTIP_FILLED_ATTR) || value;
|
|
368
467
|
}
|
|
369
468
|
let outputText = tooltipText || this.parseFormatterAndSanitize(formatter, cell, value, columnDef, item) || '';
|
|
370
|
-
outputText =
|
|
371
|
-
this._cellAddonOptions?.tooltipTextMaxLength && outputText.length > this._cellAddonOptions.tooltipTextMaxLength
|
|
372
|
-
? outputText.substring(0, this._cellAddonOptions.tooltipTextMaxLength - 3) + '...'
|
|
373
|
-
: outputText;
|
|
469
|
+
outputText = this.truncateText(outputText, this._cellAddonOptions?.tooltipTextMaxLength);
|
|
374
470
|
let finalOutputText = '';
|
|
375
471
|
if (!tooltipText || this._cellAddonOptions?.renderRegularTooltipAsHtml) {
|
|
376
472
|
finalOutputText = this._grid.sanitizeHtmlString(outputText);
|
|
@@ -381,7 +477,7 @@ export class SlickCustomTooltip {
|
|
|
381
477
|
finalOutputText = outputText || '';
|
|
382
478
|
this._tooltipBodyElm.textContent = finalOutputText;
|
|
383
479
|
this._tooltipBodyElm.style.whiteSpace =
|
|
384
|
-
this._cellAddonOptions?.regularTooltipWhiteSpace ?? this._defaultOptions.regularTooltipWhiteSpace;
|
|
480
|
+
this._cellAddonOptions?.regularTooltipWhiteSpace ?? this._defaultOptions.regularTooltipWhiteSpace;
|
|
385
481
|
}
|
|
386
482
|
// optional max height/width of the tooltip container
|
|
387
483
|
if (this._cellAddonOptions?.maxHeight) {
|
|
@@ -393,29 +489,32 @@ export class SlickCustomTooltip {
|
|
|
393
489
|
// when do have text to show, then append the new tooltip to the html body & reposition the tooltip
|
|
394
490
|
if (finalOutputText.toString()) {
|
|
395
491
|
document.body.appendChild(this._tooltipElm);
|
|
396
|
-
|
|
397
|
-
this._bindEventService.bind(this._tooltipElm, 'mouseenter', () => {
|
|
398
|
-
this._isMouseOverTooltip = true;
|
|
399
|
-
if (this._hideTooltipTimeout) {
|
|
400
|
-
clearTimeout(this._hideTooltipTimeout);
|
|
401
|
-
this._hideTooltipTimeout = undefined;
|
|
402
|
-
}
|
|
403
|
-
});
|
|
404
|
-
this._bindEventService.bind(this._tooltipElm, 'mouseleave', () => {
|
|
405
|
-
this._isMouseOverTooltip = false;
|
|
406
|
-
this.hideTooltip();
|
|
407
|
-
});
|
|
408
|
-
// Auto-hide tooltip after 3 seconds regardless of mouse position
|
|
409
|
-
this._autoHideTimeout = setTimeout(() => {
|
|
410
|
-
this.hideTooltip();
|
|
411
|
-
}, this.addonOptions?.autoHideDelay);
|
|
412
|
-
}
|
|
413
|
-
// reposition the tooltip on top of the cell that triggered the mouse over event
|
|
492
|
+
this.bindPersistOnHoverEvents();
|
|
414
493
|
this.reposition(cell);
|
|
415
|
-
// also clear any "title" attribute to avoid showing a 2nd browser tooltip
|
|
416
494
|
this.swapAndClearTitleAttribute(inputTitleElm, outputText);
|
|
417
495
|
}
|
|
418
496
|
}
|
|
497
|
+
/** Bind mouseenter/mouseleave events to tooltip when persistOnHover is disabled */
|
|
498
|
+
bindPersistOnHoverEvents() {
|
|
499
|
+
if (this.addonOptions?.persistOnHover === false && this._tooltipElm) {
|
|
500
|
+
this._bindEventService.bind(this._tooltipElm, 'mouseenter', () => {
|
|
501
|
+
this._isMouseOverTooltip = true;
|
|
502
|
+
if (this._hideTooltipTimeout) {
|
|
503
|
+
clearTimeout(this._hideTooltipTimeout);
|
|
504
|
+
this._hideTooltipTimeout = undefined;
|
|
505
|
+
}
|
|
506
|
+
});
|
|
507
|
+
this._bindEventService.bind(this._tooltipElm, 'mouseleave', () => {
|
|
508
|
+
this._isMouseOverTooltip = false;
|
|
509
|
+
this.hideTooltip();
|
|
510
|
+
});
|
|
511
|
+
if (this._autoHideTimeout) {
|
|
512
|
+
clearTimeout(this._autoHideTimeout);
|
|
513
|
+
}
|
|
514
|
+
// Auto-hide tooltip after 3 seconds regardless of mouse position
|
|
515
|
+
this._autoHideTimeout = setTimeout(() => this.hideTooltip(), this.addonOptions?.autoHideDelay);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
419
518
|
/**
|
|
420
519
|
* Reposition the Tooltip to be top-left position over the cell.
|
|
421
520
|
* By default we use an "auto" mode which will allow to position the Tooltip to the best logical position in the window, also when we mention position, we are talking about the relative position against the grid cell.
|
|
@@ -474,34 +573,49 @@ export class SlickCustomTooltip {
|
|
|
474
573
|
this._tooltipElm.style.left = `${newPositionLeft}px`;
|
|
475
574
|
}
|
|
476
575
|
}
|
|
576
|
+
/** Check if element has tooltip attribute (title or data-slick-tooltip) */
|
|
577
|
+
hasTooltipAttribute(element) {
|
|
578
|
+
return !!element && (element.hasAttribute('title') || element.hasAttribute('data-slick-tooltip'));
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* Find title element - returns the element itself if it has a non-empty title attribute,
|
|
582
|
+
* otherwise queries for a child element with a title attribute
|
|
583
|
+
*/
|
|
584
|
+
findElementWithTitle(element) {
|
|
585
|
+
if (element.hasAttribute('title') && element.getAttribute('title')) {
|
|
586
|
+
return element;
|
|
587
|
+
}
|
|
588
|
+
return element.querySelector('[title]');
|
|
589
|
+
}
|
|
590
|
+
/** Swap title attribute to data-slick-tooltip and clear title to prevent native browser tooltip */
|
|
591
|
+
swapTitleAttribute(element, tooltipText) {
|
|
592
|
+
if (element && tooltipText) {
|
|
593
|
+
element.setAttribute('data-slick-tooltip', tooltipText);
|
|
594
|
+
if (element.hasAttribute('title')) {
|
|
595
|
+
element.setAttribute('title', '');
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
}
|
|
477
599
|
/**
|
|
478
600
|
* swap and copy the "title" attribute into a new custom attribute then clear the "title" attribute
|
|
479
601
|
* from the grid div text content so that it won't show also as a 2nd browser tooltip
|
|
480
602
|
*/
|
|
481
603
|
swapAndClearTitleAttribute(inputTitleElm, tooltipText) {
|
|
482
|
-
|
|
483
|
-
// OR in a child element (most commonly as a custom formatter)
|
|
604
|
+
let titleElm = inputTitleElm;
|
|
484
605
|
let cellWithTitleElm;
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
if (
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
titleElm.setAttribute('title', '');
|
|
499
|
-
}
|
|
500
|
-
// targeted element might actually not be the cell element,
|
|
501
|
-
// so let's also clear the cell element title attribute to avoid showing native + custom tooltips
|
|
502
|
-
if (cellWithTitleElm?.hasAttribute('title')) {
|
|
503
|
-
cellWithTitleElm.setAttribute('title', '');
|
|
504
|
-
}
|
|
606
|
+
// Only search for children in grid cells, not in global tooltip elements
|
|
607
|
+
if (!titleElm && this._cellNodeElm && this._isGridTooltip) {
|
|
608
|
+
titleElm = this.findElementWithTitle(this._cellNodeElm);
|
|
609
|
+
}
|
|
610
|
+
// For grid cells with inputTitleElm matching cellNodeElm, also check for child elements with title attributes
|
|
611
|
+
if (this._isGridTooltip && inputTitleElm && inputTitleElm === this._cellNodeElm) {
|
|
612
|
+
cellWithTitleElm = this.findElementWithTitle(this._cellNodeElm);
|
|
613
|
+
}
|
|
614
|
+
// Swap title to data-slick-tooltip and clear title to prevent native browser tooltip
|
|
615
|
+
this.swapTitleAttribute(titleElm, tooltipText);
|
|
616
|
+
// Also clear cell element's title if it's different (only for grid cells)
|
|
617
|
+
if (cellWithTitleElm && cellWithTitleElm !== titleElm) {
|
|
618
|
+
this.swapTitleAttribute(cellWithTitleElm, cellWithTitleElm.getAttribute('title') || '');
|
|
505
619
|
}
|
|
506
620
|
}
|
|
507
621
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slickCustomTooltip.js","sourceRoot":"","sources":["../src/slickCustomTooltip.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slickCustomTooltip.js","sourceRoot":"","sources":["../src/slickCustomTooltip.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slickgrid-universal/custom-tooltip-plugin",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.0-beta.0",
|
|
4
4
|
"description": "A plugin to add Custom Tooltip when hovering a cell, it subscribes to the cell",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"url": "https://github.com/ghiscoding/slickgrid-universal/issues"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@slickgrid-universal/binding": "
|
|
35
|
-
"@slickgrid-universal/common": "
|
|
36
|
-
"@slickgrid-universal/utils": "
|
|
34
|
+
"@slickgrid-universal/binding": "10.0.0-beta.0",
|
|
35
|
+
"@slickgrid-universal/common": "10.0.0-beta.0",
|
|
36
|
+
"@slickgrid-universal/utils": "10.0.0-beta.0"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "9ee3b4ce76e171dd3375f1e68e232e315364600e"
|
|
39
39
|
}
|
|
@@ -62,8 +62,7 @@ const SELECTOR_CLOSEST_TOOLTIP_ATTR = '[title], [data-slick-tooltip]';
|
|
|
62
62
|
const DEFAULT_CLASS_NAME = 'slick-custom-tooltip';
|
|
63
63
|
|
|
64
64
|
export class SlickCustomTooltip {
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
readonly pluginName = 'CustomTooltip';
|
|
67
66
|
protected _addonOptions?: CustomTooltipOption;
|
|
68
67
|
protected _cellAddonOptions?: CustomTooltipOption;
|
|
69
68
|
protected _cellNodeElm?: HTMLElement;
|
|
@@ -86,12 +85,15 @@ export class SlickCustomTooltip {
|
|
|
86
85
|
whiteSpace: 'normal',
|
|
87
86
|
autoHideDelay: 3000,
|
|
88
87
|
persistOnHover: true,
|
|
88
|
+
observeAllTooltips: false, // global tooltip observation is disabled by default
|
|
89
|
+
observeTooltipContainer: 'body',
|
|
89
90
|
} as CustomTooltipOption;
|
|
90
91
|
protected _grid!: SlickGrid;
|
|
91
92
|
protected _eventHandler: SlickEventHandler;
|
|
92
93
|
protected _hideTooltipTimeout?: any;
|
|
93
94
|
protected _autoHideTimeout?: any;
|
|
94
95
|
protected _isMouseOverTooltip = false;
|
|
96
|
+
protected _isGridTooltip = false; // tracks if tooltip is from grid events vs global events
|
|
95
97
|
protected _bindEventService: BindingEventService = new BindingEventService();
|
|
96
98
|
|
|
97
99
|
constructor() {
|
|
@@ -161,6 +163,14 @@ export class SlickCustomTooltip {
|
|
|
161
163
|
.subscribe(grid.onHeaderMouseOut, this.handleOnMouseLeave.bind(this))
|
|
162
164
|
.subscribe(grid.onHeaderRowMouseLeave, this.handleOnMouseLeave.bind(this))
|
|
163
165
|
.subscribe(grid.onHeaderRowMouseOut, this.handleOnMouseLeave.bind(this));
|
|
166
|
+
|
|
167
|
+
// optionally observe all title elements outside the grid
|
|
168
|
+
if (this._addonOptions?.observeAllTooltips) {
|
|
169
|
+
const containerSelector = this._addonOptions.observeTooltipContainer || 'body';
|
|
170
|
+
const scope = containerSelector === 'body' ? document.body : document.querySelector(containerSelector) || grid.getContainerNode();
|
|
171
|
+
this._bindEventService.bind(scope, 'mouseover', this.handleGlobalMouseOver.bind(this) as EventListener);
|
|
172
|
+
this._bindEventService.bind(scope, 'mouseout', this.handleGlobalMouseOut.bind(this) as EventListener);
|
|
173
|
+
}
|
|
164
174
|
}
|
|
165
175
|
|
|
166
176
|
dispose(): void {
|
|
@@ -168,14 +178,64 @@ export class SlickCustomTooltip {
|
|
|
168
178
|
this.hideTooltip();
|
|
169
179
|
this._cancellablePromise = undefined;
|
|
170
180
|
this._eventHandler.unsubscribeAll();
|
|
181
|
+
this._bindEventService.unbindAll();
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
protected handleGlobalMouseOver(event: MouseEvent): void {
|
|
185
|
+
const target = event.target as HTMLElement;
|
|
186
|
+
|
|
187
|
+
// skip if target is within a SlickGrid cell (to avoid duplicate tooltips)
|
|
188
|
+
if (target?.closest('.slick-cell, .slick-header-column, .slick-headerrow-column')) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Always hide any existing tooltip first to prevent overlapping tooltips
|
|
193
|
+
this._isGridTooltip = false; // mark as global tooltip event
|
|
194
|
+
this.hideTooltip();
|
|
195
|
+
|
|
196
|
+
// Find element with tooltip
|
|
197
|
+
const titleElm = this.findTooltipElement(target);
|
|
198
|
+
|
|
199
|
+
if (titleElm) {
|
|
200
|
+
const tooltipText = findFirstAttribute(titleElm, CLOSEST_TOOLTIP_FILLED_ATTR);
|
|
201
|
+
if (tooltipText) {
|
|
202
|
+
this._cellNodeElm = titleElm;
|
|
203
|
+
this._mouseTarget = titleElm;
|
|
204
|
+
this._cellType = 'slick-cell'; // use as default type
|
|
205
|
+
this._hasMultipleTooltips = (titleElm?.querySelectorAll(SELECTOR_CLOSEST_TOOLTIP_ATTR).length || 0) > 1;
|
|
206
|
+
|
|
207
|
+
// render the tooltip using regular tooltip mode
|
|
208
|
+
this._cellAddonOptions = { ...this._addonOptions, useRegularTooltip: true };
|
|
209
|
+
this.renderRegularTooltip(undefined, { row: -1, cell: -1 }, null, {} as Column, {});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
protected handleGlobalMouseOut(event: MouseEvent): void {
|
|
215
|
+
const target = event.target as HTMLElement;
|
|
216
|
+
const relatedTarget = event.relatedTarget as HTMLElement;
|
|
217
|
+
|
|
218
|
+
// check if we're leaving an element with a title attribute
|
|
219
|
+
const leavingTitleElm = target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
|
|
220
|
+
|
|
221
|
+
if (leavingTitleElm) {
|
|
222
|
+
// don't hide if we're moving to the tooltip itself (for persistOnHover support)
|
|
223
|
+
const enteringTooltip = relatedTarget?.closest('.slick-custom-tooltip');
|
|
224
|
+
// also don't hide if moving to a child of the same element with title
|
|
225
|
+
const stayingInSameTitleElm = relatedTarget?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR) === leavingTitleElm;
|
|
226
|
+
|
|
227
|
+
if (!enteringTooltip && !stayingInSameTitleElm) {
|
|
228
|
+
this.handleOnMouseLeave();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
171
231
|
}
|
|
172
232
|
|
|
173
233
|
protected handleOnMouseLeave(): void {
|
|
234
|
+
this._isGridTooltip = false; // reset tooltip type flag
|
|
174
235
|
if (this.addonOptions?.persistOnHover === false) {
|
|
175
236
|
if (this._hideTooltipTimeout) {
|
|
176
237
|
clearTimeout(this._hideTooltipTimeout);
|
|
177
238
|
}
|
|
178
|
-
|
|
179
239
|
this._hideTooltipTimeout = setTimeout(() => {
|
|
180
240
|
if (!this._isMouseOverTooltip) {
|
|
181
241
|
this.hideTooltip();
|
|
@@ -195,15 +255,7 @@ export class SlickCustomTooltip {
|
|
|
195
255
|
this._observable$?.unsubscribe();
|
|
196
256
|
|
|
197
257
|
if (this.addonOptions?.persistOnHover === false) {
|
|
198
|
-
|
|
199
|
-
clearTimeout(this._hideTooltipTimeout);
|
|
200
|
-
this._hideTooltipTimeout = undefined;
|
|
201
|
-
}
|
|
202
|
-
if (this._autoHideTimeout) {
|
|
203
|
-
clearTimeout(this._autoHideTimeout);
|
|
204
|
-
this._autoHideTimeout = undefined;
|
|
205
|
-
}
|
|
206
|
-
|
|
258
|
+
this.clearTimeouts();
|
|
207
259
|
this._isMouseOverTooltip = false;
|
|
208
260
|
this._bindEventService.unbindAll();
|
|
209
261
|
}
|
|
@@ -225,6 +277,40 @@ export class SlickCustomTooltip {
|
|
|
225
277
|
// protected functions
|
|
226
278
|
// ---------------------
|
|
227
279
|
|
|
280
|
+
/** Clear all timeouts (hide and auto-hide) */
|
|
281
|
+
protected clearTimeouts(): void {
|
|
282
|
+
if (this._hideTooltipTimeout) {
|
|
283
|
+
clearTimeout(this._hideTooltipTimeout);
|
|
284
|
+
this._hideTooltipTimeout = undefined;
|
|
285
|
+
}
|
|
286
|
+
if (this._autoHideTimeout) {
|
|
287
|
+
clearTimeout(this._autoHideTimeout);
|
|
288
|
+
this._autoHideTimeout = undefined;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/** Truncate text if it exceeds maxLength */
|
|
293
|
+
protected truncateText(text: string, maxLength?: number): string {
|
|
294
|
+
if (maxLength && text.length > maxLength) {
|
|
295
|
+
return text.substring(0, maxLength - 3) + '...';
|
|
296
|
+
}
|
|
297
|
+
return text;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/** Find the closest tooltip element based on attributes */
|
|
301
|
+
protected findTooltipElement(target: HTMLElement | null): HTMLElement | null {
|
|
302
|
+
if (target) {
|
|
303
|
+
const targetHasTooltipAttr = this.hasTooltipAttribute(target);
|
|
304
|
+
if (findFirstAttribute(target, CLOSEST_TOOLTIP_FILLED_ATTR)) {
|
|
305
|
+
return target;
|
|
306
|
+
}
|
|
307
|
+
if (!targetHasTooltipAttr) {
|
|
308
|
+
return target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR) as HTMLElement;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return null;
|
|
312
|
+
}
|
|
313
|
+
|
|
228
314
|
/**
|
|
229
315
|
* Async process callback will hide any prior tooltip & then merge the new result with the item `dataContext` under a `__params` property
|
|
230
316
|
* (unless a new prop name is provided) to provice as dataContext object to the asyncPostFormatter.
|
|
@@ -247,8 +333,12 @@ export class SlickCustomTooltip {
|
|
|
247
333
|
|
|
248
334
|
/** depending on the selector type, execute the necessary handler code */
|
|
249
335
|
protected handleOnHeaderMouseOverByType(event: SlickEventData, args: any, selector: CellType): void {
|
|
336
|
+
this._isGridTooltip = true; // mark as grid tooltip event
|
|
250
337
|
this._cellType = selector;
|
|
251
|
-
|
|
338
|
+
|
|
339
|
+
// Find element with tooltip
|
|
340
|
+
const target = event.target as HTMLElement;
|
|
341
|
+
this._mouseTarget = this.findTooltipElement(target);
|
|
252
342
|
|
|
253
343
|
// before doing anything, let's remove any previous tooltip before
|
|
254
344
|
// and cancel any opened Promise/Observable when using async
|
|
@@ -292,9 +382,17 @@ export class SlickCustomTooltip {
|
|
|
292
382
|
}
|
|
293
383
|
|
|
294
384
|
protected async handleOnMouseOver(event: SlickEventData): Promise<void> {
|
|
385
|
+
this._isGridTooltip = true; // mark as grid tooltip event
|
|
295
386
|
this._cellType = 'slick-cell';
|
|
296
|
-
this._mouseTarget = event.target?.closest(SELECTOR_CLOSEST_TOOLTIP_ATTR);
|
|
297
387
|
|
|
388
|
+
// Find element with tooltip
|
|
389
|
+
const target = event.target as HTMLElement;
|
|
390
|
+
this._mouseTarget = this.findTooltipElement(target);
|
|
391
|
+
|
|
392
|
+
// if target has tooltip attribute but it's empty, return early to prevent showing parent/cell tooltip
|
|
393
|
+
if (this.hasTooltipAttribute(target) && !this._mouseTarget) {
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
298
396
|
// before doing anything, let's remove any previous tooltip before
|
|
299
397
|
// and cancel any opened Promise/Observable when using async
|
|
300
398
|
this.hideTooltip();
|
|
@@ -339,6 +437,14 @@ export class SlickCustomTooltip {
|
|
|
339
437
|
// when we aren't using regular tooltip and we do have a tooltip formatter, let's render it
|
|
340
438
|
if (typeof this._cellAddonOptions?.formatter === 'function') {
|
|
341
439
|
this.renderTooltipFormatter(this._cellAddonOptions.formatter, cell, cellValue, columnDef, item);
|
|
440
|
+
|
|
441
|
+
// Clear all title attributes from elements in the cell to prevent native browser tooltips
|
|
442
|
+
// This should happen whenever we're using custom tooltips (not regular tooltips)
|
|
443
|
+
if (!this._cellAddonOptions?.useRegularTooltip && this._cellNodeElm) {
|
|
444
|
+
this._cellNodeElm.querySelectorAll('[title]').forEach((elm) => {
|
|
445
|
+
this.swapTitleAttribute(elm, elm.getAttribute('title') || '');
|
|
446
|
+
});
|
|
447
|
+
}
|
|
342
448
|
}
|
|
343
449
|
|
|
344
450
|
// when tooltip is an Async (delayed, e.g. with a backend API call)
|
|
@@ -436,12 +542,16 @@ export class SlickCustomTooltip {
|
|
|
436
542
|
) {
|
|
437
543
|
tooltipText = cellElm.textContent?.trim() ?? '';
|
|
438
544
|
if (this._cellAddonOptions?.tooltipTextMaxLength && tooltipText.length > this._cellAddonOptions?.tooltipTextMaxLength) {
|
|
439
|
-
tooltipText =
|
|
545
|
+
tooltipText = this.truncateText(tooltipText, this._cellAddonOptions.tooltipTextMaxLength);
|
|
440
546
|
}
|
|
441
547
|
tmpTitleElm = cellElm;
|
|
442
548
|
} else {
|
|
443
549
|
if (this._cellAddonOptions?.useRegularTooltipFromFormatterOnly) {
|
|
550
|
+
// For nested tooltips in formatters, prioritize formatter output first, then fallback to cell element
|
|
444
551
|
tmpTitleElm = tmpDiv.querySelector<HTMLDivElement>(SELECTOR_CLOSEST_TOOLTIP_ATTR);
|
|
552
|
+
if (!tmpTitleElm) {
|
|
553
|
+
tmpTitleElm = cellElm && findFirstAttribute(cellElm, CLOSEST_TOOLTIP_FILLED_ATTR) ? cellElm : null;
|
|
554
|
+
}
|
|
445
555
|
} else {
|
|
446
556
|
tmpTitleElm = findFirstAttribute(cellElm, CLOSEST_TOOLTIP_FILLED_ATTR)
|
|
447
557
|
? cellElm
|
|
@@ -453,7 +563,12 @@ export class SlickCustomTooltip {
|
|
|
453
563
|
}
|
|
454
564
|
|
|
455
565
|
// prettier-ignore
|
|
456
|
-
|
|
566
|
+
// When in global tooltip observation mode (cell.row === -1), we always want to show the tooltip from the target element
|
|
567
|
+
// For grid cells with multiple tooltips, only hide if hovering the cell container itself (not a specific child element)
|
|
568
|
+
if (
|
|
569
|
+
tmpTitleElm?.style.display === 'none' ||
|
|
570
|
+
(cell.row !== -1 && this._hasMultipleTooltips && (!cellElm || cellElm === this._cellNodeElm))
|
|
571
|
+
) {
|
|
457
572
|
tooltipText = '';
|
|
458
573
|
} else if (!tooltipText || (typeof formatterOrText === 'function' && this._cellAddonOptions?.useRegularTooltipFromFormatterOnly)) {
|
|
459
574
|
tooltipText = findFirstAttribute(tmpTitleElm, CLOSEST_TOOLTIP_FILLED_ATTR) || '';
|
|
@@ -493,10 +608,7 @@ export class SlickCustomTooltip {
|
|
|
493
608
|
}
|
|
494
609
|
|
|
495
610
|
let outputText = tooltipText || this.parseFormatterAndSanitize(formatter, cell, value, columnDef, item) || '';
|
|
496
|
-
outputText =
|
|
497
|
-
this._cellAddonOptions?.tooltipTextMaxLength && outputText.length > this._cellAddonOptions.tooltipTextMaxLength
|
|
498
|
-
? outputText.substring(0, this._cellAddonOptions.tooltipTextMaxLength - 3) + '...'
|
|
499
|
-
: outputText;
|
|
611
|
+
outputText = this.truncateText(outputText, this._cellAddonOptions?.tooltipTextMaxLength);
|
|
500
612
|
|
|
501
613
|
let finalOutputText = '';
|
|
502
614
|
if (!tooltipText || this._cellAddonOptions?.renderRegularTooltipAsHtml) {
|
|
@@ -507,7 +619,7 @@ export class SlickCustomTooltip {
|
|
|
507
619
|
finalOutputText = outputText || '';
|
|
508
620
|
this._tooltipBodyElm.textContent = finalOutputText;
|
|
509
621
|
this._tooltipBodyElm.style.whiteSpace =
|
|
510
|
-
this._cellAddonOptions?.regularTooltipWhiteSpace ?? (this._defaultOptions.regularTooltipWhiteSpace as string);
|
|
622
|
+
this._cellAddonOptions?.regularTooltipWhiteSpace ?? (this._defaultOptions.regularTooltipWhiteSpace as string);
|
|
511
623
|
}
|
|
512
624
|
|
|
513
625
|
// optional max height/width of the tooltip container
|
|
@@ -521,32 +633,33 @@ export class SlickCustomTooltip {
|
|
|
521
633
|
// when do have text to show, then append the new tooltip to the html body & reposition the tooltip
|
|
522
634
|
if (finalOutputText.toString()) {
|
|
523
635
|
document.body.appendChild(this._tooltipElm);
|
|
636
|
+
this.bindPersistOnHoverEvents();
|
|
637
|
+
this.reposition(cell);
|
|
638
|
+
this.swapAndClearTitleAttribute(inputTitleElm, outputText);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
524
641
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
642
|
+
/** Bind mouseenter/mouseleave events to tooltip when persistOnHover is disabled */
|
|
643
|
+
protected bindPersistOnHoverEvents(): void {
|
|
644
|
+
if (this.addonOptions?.persistOnHover === false && this._tooltipElm) {
|
|
645
|
+
this._bindEventService.bind(this._tooltipElm, 'mouseenter', () => {
|
|
646
|
+
this._isMouseOverTooltip = true;
|
|
647
|
+
if (this._hideTooltipTimeout) {
|
|
648
|
+
clearTimeout(this._hideTooltipTimeout);
|
|
649
|
+
this._hideTooltipTimeout = undefined;
|
|
650
|
+
}
|
|
651
|
+
});
|
|
533
652
|
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
653
|
+
this._bindEventService.bind(this._tooltipElm, 'mouseleave', () => {
|
|
654
|
+
this._isMouseOverTooltip = false;
|
|
655
|
+
this.hideTooltip();
|
|
656
|
+
});
|
|
538
657
|
|
|
539
|
-
|
|
540
|
-
this._autoHideTimeout
|
|
541
|
-
this.hideTooltip();
|
|
542
|
-
}, this.addonOptions?.autoHideDelay);
|
|
658
|
+
if (this._autoHideTimeout) {
|
|
659
|
+
clearTimeout(this._autoHideTimeout);
|
|
543
660
|
}
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
this.reposition(cell);
|
|
547
|
-
|
|
548
|
-
// also clear any "title" attribute to avoid showing a 2nd browser tooltip
|
|
549
|
-
this.swapAndClearTitleAttribute(inputTitleElm, outputText);
|
|
661
|
+
// Auto-hide tooltip after 3 seconds regardless of mouse position
|
|
662
|
+
this._autoHideTimeout = setTimeout(() => this.hideTooltip(), this.addonOptions?.autoHideDelay);
|
|
550
663
|
}
|
|
551
664
|
}
|
|
552
665
|
|
|
@@ -614,35 +727,55 @@ export class SlickCustomTooltip {
|
|
|
614
727
|
}
|
|
615
728
|
}
|
|
616
729
|
|
|
730
|
+
/** Check if element has tooltip attribute (title or data-slick-tooltip) */
|
|
731
|
+
protected hasTooltipAttribute(element: HTMLElement | null): boolean {
|
|
732
|
+
return !!element && (element.hasAttribute('title') || element.hasAttribute('data-slick-tooltip'));
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* Find title element - returns the element itself if it has a non-empty title attribute,
|
|
737
|
+
* otherwise queries for a child element with a title attribute
|
|
738
|
+
*/
|
|
739
|
+
protected findElementWithTitle(element: HTMLElement): Element | null {
|
|
740
|
+
if (element.hasAttribute('title') && element.getAttribute('title')) {
|
|
741
|
+
return element;
|
|
742
|
+
}
|
|
743
|
+
return element.querySelector('[title]');
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
/** Swap title attribute to data-slick-tooltip and clear title to prevent native browser tooltip */
|
|
747
|
+
protected swapTitleAttribute(element?: Element | null, tooltipText?: string): void {
|
|
748
|
+
if (element && tooltipText) {
|
|
749
|
+
element.setAttribute('data-slick-tooltip', tooltipText);
|
|
750
|
+
if (element.hasAttribute('title')) {
|
|
751
|
+
element.setAttribute('title', '');
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
|
|
617
756
|
/**
|
|
618
757
|
* swap and copy the "title" attribute into a new custom attribute then clear the "title" attribute
|
|
619
758
|
* from the grid div text content so that it won't show also as a 2nd browser tooltip
|
|
620
759
|
*/
|
|
621
760
|
protected swapAndClearTitleAttribute(inputTitleElm?: Element | null, tooltipText?: string): void {
|
|
622
|
-
|
|
623
|
-
// OR in a child element (most commonly as a custom formatter)
|
|
761
|
+
let titleElm: Element | null | undefined = inputTitleElm;
|
|
624
762
|
let cellWithTitleElm: Element | null | undefined;
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
? this._cellNodeElm
|
|
630
|
-
: this._cellNodeElm?.querySelector('[title]'));
|
|
763
|
+
|
|
764
|
+
// Only search for children in grid cells, not in global tooltip elements
|
|
765
|
+
if (!titleElm && this._cellNodeElm && this._isGridTooltip) {
|
|
766
|
+
titleElm = this.findElementWithTitle(this._cellNodeElm);
|
|
631
767
|
}
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
if (cellWithTitleElm?.hasAttribute('title')) {
|
|
644
|
-
cellWithTitleElm.setAttribute('title', '');
|
|
645
|
-
}
|
|
768
|
+
|
|
769
|
+
// For grid cells with inputTitleElm matching cellNodeElm, also check for child elements with title attributes
|
|
770
|
+
if (this._isGridTooltip && inputTitleElm && inputTitleElm === this._cellNodeElm) {
|
|
771
|
+
cellWithTitleElm = this.findElementWithTitle(this._cellNodeElm);
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
// Swap title to data-slick-tooltip and clear title to prevent native browser tooltip
|
|
775
|
+
this.swapTitleAttribute(titleElm, tooltipText);
|
|
776
|
+
// Also clear cell element's title if it's different (only for grid cells)
|
|
777
|
+
if (cellWithTitleElm && cellWithTitleElm !== titleElm) {
|
|
778
|
+
this.swapTitleAttribute(cellWithTitleElm, cellWithTitleElm.getAttribute('title') || '');
|
|
646
779
|
}
|
|
647
780
|
}
|
|
648
781
|
}
|