UNPKG

@vismaux/ngx-nordic-cool

Version:
56 lines 6.72 kB
import { Directive, Input, } from '@angular/core'; import * as i0 from "@angular/core"; export class NcOptionHighlightDirective { constructor(elementRef, renderer) { this.elementRef = elementRef; this.renderer = renderer; } ngOnChanges() { if (this.canHighlight) { this.highlightLabel(); } } ngAfterViewInit() { this.label = this.element.innerHTML; if (this.canHighlight) { this.highlightLabel(); } } get element() { return this.elementRef.nativeElement; } escapeRegExp(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } highlightLabel() { const label = this.label; if (!this.term) { this.setInnerHtml(label); return; } const alternationString = this.escapeRegExp(this.term).replace(' ', '|'); const termRegex = new RegExp(alternationString, 'gi'); this.setInnerHtml(label.replace(termRegex, `<span role="mark" class="nc-highlighted">$&</span>`)); } get canHighlight() { return this.isDefined(this.term) && this.isDefined(this.label); } setInnerHtml(html) { this.renderer.setProperty(this.elementRef.nativeElement, 'innerHTML', html); } isDefined(value) { return value !== undefined && value !== null; } } NcOptionHighlightDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: NcOptionHighlightDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); NcOptionHighlightDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.3", type: NcOptionHighlightDirective, selector: "[ncOptionHighlight]", inputs: { term: ["ncOptionHighlight", "term"] }, usesOnChanges: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: NcOptionHighlightDirective, decorators: [{ type: Directive, args: [{ selector: '[ncOptionHighlight]', }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { term: [{ type: Input, args: ['ncOptionHighlight'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWhpZ2hsaWdodC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9yZGljLWNvb2wvc3JjL2xpYi9zZWxlY3Qvb3B0aW9uLWhpZ2hsaWdodC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7O0FBS3ZCLE1BQU0sT0FBTywwQkFBMEI7SUFLckMsWUFBb0IsVUFBc0IsRUFBVSxRQUFtQjtRQUFuRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUFHLENBQUM7SUFFM0UsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxJQUFZLE9BQU87UUFDakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUN2QyxDQUFDO0lBRU8sWUFBWSxDQUFDLEdBQVc7UUFDOUIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLE9BQU87U0FDUjtRQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RSxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxDQUNmLEtBQUssQ0FBQyxPQUFPLENBQ1gsU0FBUyxFQUNULG9EQUFvRCxDQUNyRCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBWSxZQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFZO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQVU7UUFDMUIsT0FBTyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7SUFDL0MsQ0FBQzs7dUhBdkRVLDBCQUEwQjsyR0FBMUIsMEJBQTBCOzJGQUExQiwwQkFBMEI7a0JBSHRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtpQkFDaEM7eUhBSTZCLElBQUk7c0JBQS9CLEtBQUs7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmNPcHRpb25IaWdobGlnaHRdJyxcbn0pXG5leHBvcnQgY2xhc3MgTmNPcHRpb25IaWdobGlnaHREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIGxhYmVsOiBzdHJpbmc7XG5cbiAgQElucHV0KCduY09wdGlvbkhpZ2hsaWdodCcpIHRlcm06IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5jYW5IaWdobGlnaHQpIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0TGFiZWwoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5sYWJlbCA9IHRoaXMuZWxlbWVudC5pbm5lckhUTUw7XG4gICAgaWYgKHRoaXMuY2FuSGlnaGxpZ2h0KSB7XG4gICAgICB0aGlzLmhpZ2hsaWdodExhYmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGVzY2FwZVJlZ0V4cChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWdobGlnaHRMYWJlbCgpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWw7XG4gICAgaWYgKCF0aGlzLnRlcm0pIHtcbiAgICAgIHRoaXMuc2V0SW5uZXJIdG1sKGxhYmVsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbHRlcm5hdGlvblN0cmluZyA9IHRoaXMuZXNjYXBlUmVnRXhwKHRoaXMudGVybSkucmVwbGFjZSgnICcsICd8Jyk7XG4gICAgY29uc3QgdGVybVJlZ2V4ID0gbmV3IFJlZ0V4cChhbHRlcm5hdGlvblN0cmluZywgJ2dpJyk7XG4gICAgdGhpcy5zZXRJbm5lckh0bWwoXG4gICAgICBsYWJlbC5yZXBsYWNlKFxuICAgICAgICB0ZXJtUmVnZXgsXG4gICAgICAgIGA8c3BhbiByb2xlPVwibWFya1wiIGNsYXNzPVwibmMtaGlnaGxpZ2h0ZWRcIj4kJjwvc3Bhbj5gXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNhbkhpZ2hsaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlZmluZWQodGhpcy50ZXJtKSAmJiB0aGlzLmlzRGVmaW5lZCh0aGlzLmxhYmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5uZXJIdG1sKGh0bWw6IHN0cmluZykge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdpbm5lckhUTUwnLCBodG1sKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEZWZpbmVkKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgfVxufVxuIl19