@coolon/angular-ui-powerups 16.1.0-alpha.304 → 16.1.0-alpha.305
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.
|
@@ -19,29 +19,43 @@ export class HighlightPipe extends GarbageCollector {
|
|
|
19
19
|
ngOnDestroy() {
|
|
20
20
|
this.dispose();
|
|
21
21
|
}
|
|
22
|
+
/** The markup last produced, and the trusted value wrapping it. */
|
|
23
|
+
lastHtml;
|
|
24
|
+
lastResult;
|
|
22
25
|
/**
|
|
23
26
|
* Highlights occurrences of `searchModel` within `value`.
|
|
24
27
|
*
|
|
28
|
+
* The pipe is impure, so it runs on every change detection of its view. It hands back the same
|
|
29
|
+
* trusted value while the markup is unchanged: a fresh one each time would read as a new binding,
|
|
30
|
+
* and an `[innerHTML]` would replace its text on every pass though nothing about it had changed.
|
|
31
|
+
*
|
|
25
32
|
* @param value The string to search within.
|
|
26
33
|
* @param searchTextFilter Intercept the search text to allow matching against substrings.
|
|
27
34
|
*/
|
|
28
35
|
transform(value, searchTextFilter) {
|
|
36
|
+
const html = this.highlight(value, searchTextFilter);
|
|
37
|
+
if (html !== this.lastHtml) {
|
|
38
|
+
this.lastHtml = html;
|
|
39
|
+
this.lastResult = this.sanitizer.bypassSecurityTrustHtml(html);
|
|
40
|
+
}
|
|
41
|
+
return this.lastResult;
|
|
42
|
+
}
|
|
43
|
+
highlight(value, searchTextFilter) {
|
|
29
44
|
const sanitisedValue = escape(value);
|
|
30
45
|
const rawModelValue = this.highlightContext?.aupHighlightTextModel?.value ?? '';
|
|
31
46
|
const filtered = searchTextFilter ? searchTextFilter(rawModelValue) : rawModelValue;
|
|
32
47
|
const searchText = escape(filtered ?? '');
|
|
33
48
|
if (isEmpty(searchText) || !isString(value)) {
|
|
34
|
-
return
|
|
49
|
+
return sanitisedValue;
|
|
35
50
|
}
|
|
36
51
|
// Match in a case insensitive manner
|
|
37
52
|
const re = new RegExp(escapeStringRegexp(searchText), 'gi');
|
|
38
53
|
const match = sanitisedValue.match(re);
|
|
39
54
|
// If there's no match, just return the original value.
|
|
40
55
|
if (!match) {
|
|
41
|
-
return
|
|
56
|
+
return sanitisedValue;
|
|
42
57
|
}
|
|
43
|
-
|
|
44
|
-
return this.sanitizer.bypassSecurityTrustHtml(result);
|
|
58
|
+
return sanitisedValue.replace(re, '<mark>' + match[0] + '</mark>');
|
|
45
59
|
}
|
|
46
60
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: HighlightPipe, deps: [{ token: i1.DomSanitizer }, { token: i2.HighlightTextModelDirective, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
47
61
|
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.9", ngImport: i0, type: HighlightPipe, name: "aupHighlight", pure: false });
|
|
@@ -55,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
55
69
|
}], ctorParameters: function () { return [{ type: i1.DomSanitizer }, { type: i2.HighlightTextModelDirective, decorators: [{
|
|
56
70
|
type: Optional
|
|
57
71
|
}] }]; } });
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9kaXJlY3RpdmVzL2hpZ2hsaWdodC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtIQUFrSDtBQUNsSCxPQUFPLEVBQWEsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sa0JBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOzs7O0FBTzdFLE1BQU0sT0FBTyxhQUFjLFNBQVEsZ0JBQWdCO0lBRTdCO0lBQ3FCO0lBRHpDLFlBQW9CLFNBQXVCLEVBQ0YsZ0JBQThDO1FBQ3JGLEtBQUssRUFBRSxDQUFDO1FBRlUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUNGLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBOEI7SUFFdkYsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELG1FQUFtRTtJQUMzRCxRQUFRLENBQVU7SUFDbEIsVUFBVSxDQUFNO0lBRXhCOzs7Ozs7Ozs7T0FTRztJQUNILFNBQVMsQ0FBQyxLQUFVLEVBQUUsZ0JBQTREO1FBQ2hGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDckQsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEU7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFVLEVBQUUsZ0JBQTREO1FBQ3hGLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQyxNQUFNLGFBQWEsR0FBVyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN4RixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUNwRixNQUFNLFVBQVUsR0FBVyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWxELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNDLE9BQU8sY0FBYyxDQUFDO1NBQ3ZCO1FBRUQscUNBQXFDO1FBQ3JDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdkMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLGNBQWMsQ0FBQztTQUN2QjtRQUVELE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUNyRSxDQUFDO3VHQXZEVSxhQUFhO3FHQUFiLGFBQWE7OzJGQUFiLGFBQWE7a0JBSnpCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLElBQUksRUFBRSxLQUFLO2lCQUNaOzswQkFJYyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBBbmd1bGFyIFBpcGUgdHJhbnNmb3JtIHNpZ25hdHVyZSB1c2VzIGFueSBieSBjb252ZW50aW9uICovXG5pbXBvcnQgeyBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEdhcmJhZ2VDb2xsZWN0b3IsIFZhbHVlTW9kZWwgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgZXNjYXBlU3RyaW5nUmVnZXhwIGZyb20gJ2VzY2FwZS1zdHJpbmctcmVnZXhwJztcbmltcG9ydCB7IGVzY2FwZSwgaXNFbXB0eSwgaXNTdHJpbmcgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtIaWdobGlnaHRUZXh0TW9kZWxEaXJlY3RpdmV9IGZyb20gJy4vaGlnaGxpZ2h0LXRleHQtbW9kZWwuZGlyZWN0aXZlJztcblxuXG5AUGlwZSh7XG4gIG5hbWU6ICdhdXBIaWdobGlnaHQnLFxuICBwdXJlOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBIaWdobGlnaHRQaXBlIGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRDb250ZXh0PzogSGlnaGxpZ2h0VGV4dE1vZGVsRGlyZWN0aXZlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqIFRoZSBtYXJrdXAgbGFzdCBwcm9kdWNlZCwgYW5kIHRoZSB0cnVzdGVkIHZhbHVlIHdyYXBwaW5nIGl0LiAqL1xuICBwcml2YXRlIGxhc3RIdG1sPzogc3RyaW5nO1xuICBwcml2YXRlIGxhc3RSZXN1bHQ6IGFueTtcblxuICAvKipcbiAgICogSGlnaGxpZ2h0cyBvY2N1cnJlbmNlcyBvZiBgc2VhcmNoTW9kZWxgIHdpdGhpbiBgdmFsdWVgLlxuICAgKlxuICAgKiBUaGUgcGlwZSBpcyBpbXB1cmUsIHNvIGl0IHJ1bnMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvbiBvZiBpdHMgdmlldy4gSXQgaGFuZHMgYmFjayB0aGUgc2FtZVxuICAgKiB0cnVzdGVkIHZhbHVlIHdoaWxlIHRoZSBtYXJrdXAgaXMgdW5jaGFuZ2VkOiBhIGZyZXNoIG9uZSBlYWNoIHRpbWUgd291bGQgcmVhZCBhcyBhIG5ldyBiaW5kaW5nLFxuICAgKiBhbmQgYW4gYFtpbm5lckhUTUxdYCB3b3VsZCByZXBsYWNlIGl0cyB0ZXh0IG9uIGV2ZXJ5IHBhc3MgdGhvdWdoIG5vdGhpbmcgYWJvdXQgaXQgaGFkIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIHRvIHNlYXJjaCB3aXRoaW4uXG4gICAqIEBwYXJhbSBzZWFyY2hUZXh0RmlsdGVyIEludGVyY2VwdCB0aGUgc2VhcmNoIHRleHQgdG8gYWxsb3cgbWF0Y2hpbmcgYWdhaW5zdCBzdWJzdHJpbmdzLlxuICAgKi9cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIHNlYXJjaFRleHRGaWx0ZXI/OiAocmF3OnN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGFueSB7XG4gICAgY29uc3QgaHRtbCA9IHRoaXMuaGlnaGxpZ2h0KHZhbHVlLCBzZWFyY2hUZXh0RmlsdGVyKTtcbiAgICBpZiAoaHRtbCAhPT0gdGhpcy5sYXN0SHRtbCkge1xuICAgICAgdGhpcy5sYXN0SHRtbCA9IGh0bWw7XG4gICAgICB0aGlzLmxhc3RSZXN1bHQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGFzdFJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgaGlnaGxpZ2h0KHZhbHVlOiBhbnksIHNlYXJjaFRleHRGaWx0ZXI/OiAocmF3OnN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2FuaXRpc2VkVmFsdWUgPSBlc2NhcGUodmFsdWUpO1xuXG4gICAgY29uc3QgcmF3TW9kZWxWYWx1ZTogc3RyaW5nID0gdGhpcy5oaWdobGlnaHRDb250ZXh0Py5hdXBIaWdobGlnaHRUZXh0TW9kZWw/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gc2VhcmNoVGV4dEZpbHRlciA/IHNlYXJjaFRleHRGaWx0ZXIocmF3TW9kZWxWYWx1ZSkgOiByYXdNb2RlbFZhbHVlO1xuICAgIGNvbnN0IHNlYXJjaFRleHQ6IHN0cmluZyA9IGVzY2FwZShmaWx0ZXJlZCA/PyAnJyk7XG5cbiAgICBpZiAoaXNFbXB0eShzZWFyY2hUZXh0KSB8fCAhaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICByZXR1cm4gc2FuaXRpc2VkVmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTWF0Y2ggaW4gYSBjYXNlIGluc2Vuc2l0aXZlIG1hbm5lclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChlc2NhcGVTdHJpbmdSZWdleHAoc2VhcmNoVGV4dCksICdnaScpO1xuICAgIGNvbnN0IG1hdGNoID0gc2FuaXRpc2VkVmFsdWUubWF0Y2gocmUpO1xuXG4gICAgLy8gSWYgdGhlcmUncyBubyBtYXRjaCwganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHJldHVybiBzYW5pdGlzZWRWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2FuaXRpc2VkVmFsdWUucmVwbGFjZShyZSwgJzxtYXJrPicgKyBtYXRjaFswXSArICc8L21hcms+Jyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -673,29 +673,43 @@ class HighlightPipe extends GarbageCollector {
|
|
|
673
673
|
ngOnDestroy() {
|
|
674
674
|
this.dispose();
|
|
675
675
|
}
|
|
676
|
+
/** The markup last produced, and the trusted value wrapping it. */
|
|
677
|
+
lastHtml;
|
|
678
|
+
lastResult;
|
|
676
679
|
/**
|
|
677
680
|
* Highlights occurrences of `searchModel` within `value`.
|
|
678
681
|
*
|
|
682
|
+
* The pipe is impure, so it runs on every change detection of its view. It hands back the same
|
|
683
|
+
* trusted value while the markup is unchanged: a fresh one each time would read as a new binding,
|
|
684
|
+
* and an `[innerHTML]` would replace its text on every pass though nothing about it had changed.
|
|
685
|
+
*
|
|
679
686
|
* @param value The string to search within.
|
|
680
687
|
* @param searchTextFilter Intercept the search text to allow matching against substrings.
|
|
681
688
|
*/
|
|
682
689
|
transform(value, searchTextFilter) {
|
|
690
|
+
const html = this.highlight(value, searchTextFilter);
|
|
691
|
+
if (html !== this.lastHtml) {
|
|
692
|
+
this.lastHtml = html;
|
|
693
|
+
this.lastResult = this.sanitizer.bypassSecurityTrustHtml(html);
|
|
694
|
+
}
|
|
695
|
+
return this.lastResult;
|
|
696
|
+
}
|
|
697
|
+
highlight(value, searchTextFilter) {
|
|
683
698
|
const sanitisedValue = escape(value);
|
|
684
699
|
const rawModelValue = this.highlightContext?.aupHighlightTextModel?.value ?? '';
|
|
685
700
|
const filtered = searchTextFilter ? searchTextFilter(rawModelValue) : rawModelValue;
|
|
686
701
|
const searchText = escape(filtered ?? '');
|
|
687
702
|
if (isEmpty(searchText) || !isString(value)) {
|
|
688
|
-
return
|
|
703
|
+
return sanitisedValue;
|
|
689
704
|
}
|
|
690
705
|
// Match in a case insensitive manner
|
|
691
706
|
const re = new RegExp(escapeStringRegexp(searchText), 'gi');
|
|
692
707
|
const match = sanitisedValue.match(re);
|
|
693
708
|
// If there's no match, just return the original value.
|
|
694
709
|
if (!match) {
|
|
695
|
-
return
|
|
710
|
+
return sanitisedValue;
|
|
696
711
|
}
|
|
697
|
-
|
|
698
|
-
return this.sanitizer.bypassSecurityTrustHtml(result);
|
|
712
|
+
return sanitisedValue.replace(re, '<mark>' + match[0] + '</mark>');
|
|
699
713
|
}
|
|
700
714
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: HighlightPipe, deps: [{ token: i1.DomSanitizer }, { token: HighlightTextModelDirective, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
701
715
|
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.9", ngImport: i0, type: HighlightPipe, name: "aupHighlight", pure: false });
|