@vismaux/ngx-nordic-cool
Version:
Common Nordic-Cool components for Angular.
56 lines • 6.72 kB
JavaScript
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