@leanix/components 0.3.49 → 0.3.50
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/esm2020/lib/core-ui/pipes/highlight-range.pipe.mjs +6 -1
- package/esm2020/lib/core-ui/pipes/highlight-term.pipe.mjs +13 -5
- package/fesm2015/leanix-components.mjs +16 -3
- package/fesm2015/leanix-components.mjs.map +1 -1
- package/fesm2020/leanix-components.mjs +16 -3
- package/fesm2020/leanix-components.mjs.map +1 -1
- package/lib/core-ui/pipes/highlight-range.pipe.d.ts +2 -1
- package/lib/core-ui/pipes/highlight-term.pipe.d.ts +1 -0
- package/package.json +2 -1
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { Pipe } from '@angular/core';
|
|
2
|
+
import { sanitize } from 'dompurify';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export class HighlightRangePipe {
|
|
4
5
|
transform(text, offset = 0, length = 0) {
|
|
6
|
+
const highlightedMarkup = this.doTransform(text, offset, length);
|
|
7
|
+
return sanitize(highlightedMarkup, { ALLOWED_TAGS: ['span'], ALLOWED_ATTR: ['class'] });
|
|
8
|
+
}
|
|
9
|
+
doTransform(text, offset, length) {
|
|
5
10
|
if (!text || offset < 0 || length < 0 || offset >= text?.length || offset + length > text?.length) {
|
|
6
11
|
return '';
|
|
7
12
|
}
|
|
@@ -18,4 +23,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
|
|
|
18
23
|
type: Pipe,
|
|
19
24
|
args: [{ name: 'lxHighlightRange' }]
|
|
20
25
|
}] });
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXJhbmdlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlLXVpL3BpcGVzL2hpZ2hsaWdodC1yYW5nZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBR3JDLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsU0FBUyxDQUFDLElBQVksRUFBRSxTQUFpQixDQUFDLEVBQUUsU0FBaUIsQ0FBQztRQUM1RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRSxPQUFPLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRU8sV0FBVyxDQUFDLElBQW1CLEVBQUUsTUFBYyxFQUFFLE1BQWM7UUFDckUsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2pHLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNySSxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVk7UUFDNUIsT0FBTywrQkFBK0IsSUFBSSxTQUFTLENBQUM7SUFDdEQsQ0FBQzs7K0dBaEJVLGtCQUFrQjs2R0FBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzYW5pdGl6ZSB9IGZyb20gJ2RvbXB1cmlmeSc7XG5cbkBQaXBlKHsgbmFtZTogJ2x4SGlnaGxpZ2h0UmFuZ2UnIH0pXG5leHBvcnQgY2xhc3MgSGlnaGxpZ2h0UmFuZ2VQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh0ZXh0OiBzdHJpbmcsIG9mZnNldDogbnVtYmVyID0gMCwgbGVuZ3RoOiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICBjb25zdCBoaWdobGlnaHRlZE1hcmt1cCA9IHRoaXMuZG9UcmFuc2Zvcm0odGV4dCwgb2Zmc2V0LCBsZW5ndGgpO1xuICAgIHJldHVybiBzYW5pdGl6ZShoaWdobGlnaHRlZE1hcmt1cCwgeyBBTExPV0VEX1RBR1M6IFsnc3BhbiddLCBBTExPV0VEX0FUVFI6IFsnY2xhc3MnXSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZG9UcmFuc2Zvcm0odGV4dDogc3RyaW5nIHwgbnVsbCwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIXRleHQgfHwgb2Zmc2V0IDwgMCB8fCBsZW5ndGggPCAwIHx8IG9mZnNldCA+PSB0ZXh0Py5sZW5ndGggfHwgb2Zmc2V0ICsgbGVuZ3RoID4gdGV4dD8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGhpZ2hsaWdodGVkUGFydCA9IHRleHQuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgIHJldHVybiB0ZXh0LnNsaWNlKDAsIG9mZnNldCkgKyAoaGlnaGxpZ2h0ZWRQYXJ0Lmxlbmd0aCAhPT0gMCA/IHRoaXMuaGlnaGxpZ2h0KGhpZ2hsaWdodGVkUGFydCkgOiAnJykgKyB0ZXh0LnNsaWNlKG9mZnNldCArIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGhpZ2hsaWdodCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJ0ZXJtSGlnaGxpZ2h0XCI+JHt0ZXh0fTwvc3Bhbj5gO1xuICB9XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Pipe } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { sanitize } from 'dompurify';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
/**
|
|
5
5
|
* These characters are treated as seperators by
|
|
@@ -16,12 +16,21 @@ export class HighlightTermPipe {
|
|
|
16
16
|
* @returns The transformed text with highlighted search term.
|
|
17
17
|
*/
|
|
18
18
|
transform(text, search, options = { exactMatch: false }) {
|
|
19
|
-
if (
|
|
19
|
+
if (text) {
|
|
20
|
+
const highlightedMarkup = this.doTransform(text, search, options);
|
|
21
|
+
return highlightedMarkup ? sanitize(highlightedMarkup, { ALLOWED_TAGS: ['span'], ALLOWED_ATTR: ['class'] }) : undefined;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
doTransform(text, search, options) {
|
|
28
|
+
if (search) {
|
|
20
29
|
let pattern = options.exactMatch ? search.trim() : search.replace(STANDARD_TOKENIZER_SEPERATORS, ' ');
|
|
21
30
|
// replace special chars for a backslash for RegExp
|
|
22
31
|
pattern = pattern.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
|
|
23
32
|
pattern = options.exactMatch
|
|
24
|
-
?
|
|
33
|
+
? pattern
|
|
25
34
|
: pattern
|
|
26
35
|
.split(' ')
|
|
27
36
|
.filter((t) => {
|
|
@@ -29,7 +38,6 @@ export class HighlightTermPipe {
|
|
|
29
38
|
})
|
|
30
39
|
.join('|');
|
|
31
40
|
const regex = new RegExp(pattern, 'gi');
|
|
32
|
-
text = escape(text);
|
|
33
41
|
return text.replace(regex, (match) => `<span class="termHighlight">${match}</span>`); // add highlighting to matched regex pattern
|
|
34
42
|
}
|
|
35
43
|
else {
|
|
@@ -43,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
|
|
|
43
51
|
type: Pipe,
|
|
44
52
|
args: [{ name: 'lxHighlightTerm' }]
|
|
45
53
|
}] });
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXRlcm0ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUtdWkvcGlwZXMvaGlnaGxpZ2h0LXRlcm0ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQVVyQzs7OztHQUlHO0FBQ0gsTUFBTSw2QkFBNkIsR0FBRyxnQkFBZ0IsQ0FBQztBQUd2RCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCOzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxJQUFhLEVBQUUsTUFBc0IsRUFBRSxVQUFzQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7UUFDMUcsSUFBSSxJQUFJLEVBQUU7WUFDUixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsRSxPQUFPLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUN6SDthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLElBQVksRUFBRSxNQUFpQyxFQUFFLE9BQW1DO1FBQ3RHLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDZCQUE2QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRXRHLG1EQUFtRDtZQUNuRCxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV6RSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVU7Z0JBQzFCLENBQUMsQ0FBQyxPQUFPO2dCQUNULENBQUMsQ0FBQyxPQUFPO3FCQUNKLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ1osT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDO3FCQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVqQixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsK0JBQStCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyw0Q0FBNEM7U0FDbkk7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDOzs4R0F0Q1UsaUJBQWlCOzRHQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNhbml0aXplIH0gZnJvbSAnZG9tcHVyaWZ5JztcblxuZXhwb3J0IGludGVyZmFjZSBIaWdobGlnaHRUZXJtU2VhcmNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzZWFyY2ggdGVybSBzaG91bGQgYmUgZXhhY3RseSBtYXRjaGVkIGluIHRoZSBnaXZlbiB0ZXh0LiBXaGVuIHNldCB0byB0cnVlLCB0aGUgZm9sbG93aW5nXG4gICAqIGNoYXJhY3RlcnMgYW5kIHNwYWNlcyBiZXR3ZWVuIHdvcmRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgc2VhcmNoOiAtIFsgXSAvIHsgfSAoICkgKiArID8gLiBeICQgfFxuICAgKi9cbiAgZXhhY3RNYXRjaDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGVzZSBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIHNlcGVyYXRvcnMgYnlcbiAqIGVsYXN0aWNzZWFyY2ggYW5kIHNwbGl0IHRoZSBpbnB1dCBpbnRvIHNlYXJjaCB0b2tlbnNcbiAqIHdoaWNoIGFyZSB1c2VkIHRvIGZpbmQgbWF0Y2hlcy5cbiAqL1xuY29uc3QgU1RBTkRBUkRfVE9LRU5JWkVSX1NFUEVSQVRPUlMgPSAvW15hLXpBLVpcXGRcXHNdL2c7XG5cbkBQaXBlKHsgbmFtZTogJ2x4SGlnaGxpZ2h0VGVybScgfSlcbmV4cG9ydCBjbGFzcyBIaWdobGlnaHRUZXJtUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgdGV4dCB3aXRoIGhpZ2hsaWdodGVkIHRleHQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBzZWFyY2ggdGVybS5cbiAgICogQHBhcmFtIHRleHQgVGhlIGlucHV0IHRleHQuXG4gICAqIEBwYXJhbSBzZWFyY2ggVGhlIHNlYXJjaCB0ZXJtIHRvIGhpZ2hsaWdodC5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGhpZ2hsaWdodCB0ZXJtIHNlYXJjaCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZWQgdGV4dCB3aXRoIGhpZ2hsaWdodGVkIHNlYXJjaCB0ZXJtLlxuICAgKi9cbiAgdHJhbnNmb3JtKHRleHQ/OiBzdHJpbmcsIHNlYXJjaD86IHN0cmluZyB8IG51bGwsIG9wdGlvbnM6IEhpZ2hsaWdodFRlcm1TZWFyY2hPcHRpb25zID0geyBleGFjdE1hdGNoOiBmYWxzZSB9KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGV4dCkge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0ZWRNYXJrdXAgPSB0aGlzLmRvVHJhbnNmb3JtKHRleHQsIHNlYXJjaCwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gaGlnaGxpZ2h0ZWRNYXJrdXAgPyBzYW5pdGl6ZShoaWdobGlnaHRlZE1hcmt1cCwgeyBBTExPV0VEX1RBR1M6IFsnc3BhbiddLCBBTExPV0VEX0FUVFI6IFsnY2xhc3MnXSB9KSA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRvVHJhbnNmb3JtKHRleHQ6IHN0cmluZywgc2VhcmNoOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBIaWdobGlnaHRUZXJtU2VhcmNoT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHNlYXJjaCkge1xuICAgICAgbGV0IHBhdHRlcm4gPSBvcHRpb25zLmV4YWN0TWF0Y2ggPyBzZWFyY2gudHJpbSgpIDogc2VhcmNoLnJlcGxhY2UoU1RBTkRBUkRfVE9LRU5JWkVSX1NFUEVSQVRPUlMsICcgJyk7XG5cbiAgICAgIC8vIHJlcGxhY2Ugc3BlY2lhbCBjaGFycyBmb3IgYSBiYWNrc2xhc2ggZm9yIFJlZ0V4cFxuICAgICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csICdcXFxcJCYnKTtcblxuICAgICAgcGF0dGVybiA9IG9wdGlvbnMuZXhhY3RNYXRjaFxuICAgICAgICA/IHBhdHRlcm5cbiAgICAgICAgOiBwYXR0ZXJuXG4gICAgICAgICAgICAuc3BsaXQoJyAnKVxuICAgICAgICAgICAgLmZpbHRlcigodCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdC5sZW5ndGggPiAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG5cbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCAnZ2knKTtcbiAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UocmVnZXgsIChtYXRjaCkgPT4gYDxzcGFuIGNsYXNzPVwidGVybUhpZ2hsaWdodFwiPiR7bWF0Y2h9PC9zcGFuPmApOyAvLyBhZGQgaGlnaGxpZ2h0aW5nIHRvIG1hdGNoZWQgcmVnZXggcGF0dGVyblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -16,6 +16,7 @@ import { TranslatePipe, TranslateModule } from '@ngx-translate/core';
|
|
|
16
16
|
import * as i1$3 from '@angular/platform-browser';
|
|
17
17
|
import Color from 'color';
|
|
18
18
|
import { format, distanceInWords, startOfDay } from 'date-fns';
|
|
19
|
+
import { sanitize } from 'dompurify';
|
|
19
20
|
import _, { curry } from 'lodash';
|
|
20
21
|
import { Renderer, marked } from 'marked';
|
|
21
22
|
import * as i2$1 from '@angular/forms';
|
|
@@ -1353,6 +1354,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
|
|
|
1353
1354
|
|
|
1354
1355
|
class HighlightRangePipe {
|
|
1355
1356
|
transform(text, offset = 0, length = 0) {
|
|
1357
|
+
const highlightedMarkup = this.doTransform(text, offset, length);
|
|
1358
|
+
return sanitize(highlightedMarkup, { ALLOWED_TAGS: ['span'], ALLOWED_ATTR: ['class'] });
|
|
1359
|
+
}
|
|
1360
|
+
doTransform(text, offset, length) {
|
|
1356
1361
|
if (!text || offset < 0 || length < 0 || offset >= (text === null || text === void 0 ? void 0 : text.length) || offset + length > (text === null || text === void 0 ? void 0 : text.length)) {
|
|
1357
1362
|
return '';
|
|
1358
1363
|
}
|
|
@@ -1385,12 +1390,21 @@ class HighlightTermPipe {
|
|
|
1385
1390
|
* @returns The transformed text with highlighted search term.
|
|
1386
1391
|
*/
|
|
1387
1392
|
transform(text, search, options = { exactMatch: false }) {
|
|
1388
|
-
if (
|
|
1393
|
+
if (text) {
|
|
1394
|
+
const highlightedMarkup = this.doTransform(text, search, options);
|
|
1395
|
+
return highlightedMarkup ? sanitize(highlightedMarkup, { ALLOWED_TAGS: ['span'], ALLOWED_ATTR: ['class'] }) : undefined;
|
|
1396
|
+
}
|
|
1397
|
+
else {
|
|
1398
|
+
return undefined;
|
|
1399
|
+
}
|
|
1400
|
+
}
|
|
1401
|
+
doTransform(text, search, options) {
|
|
1402
|
+
if (search) {
|
|
1389
1403
|
let pattern = options.exactMatch ? search.trim() : search.replace(STANDARD_TOKENIZER_SEPERATORS, ' ');
|
|
1390
1404
|
// replace special chars for a backslash for RegExp
|
|
1391
1405
|
pattern = pattern.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
|
|
1392
1406
|
pattern = options.exactMatch
|
|
1393
|
-
?
|
|
1407
|
+
? pattern
|
|
1394
1408
|
: pattern
|
|
1395
1409
|
.split(' ')
|
|
1396
1410
|
.filter((t) => {
|
|
@@ -1398,7 +1412,6 @@ class HighlightTermPipe {
|
|
|
1398
1412
|
})
|
|
1399
1413
|
.join('|');
|
|
1400
1414
|
const regex = new RegExp(pattern, 'gi');
|
|
1401
|
-
text = escape(text);
|
|
1402
1415
|
return text.replace(regex, (match) => `<span class="termHighlight">${match}</span>`); // add highlighting to matched regex pattern
|
|
1403
1416
|
}
|
|
1404
1417
|
else {
|