@hmcts/media-viewer
Version:
47 lines • 6.36 kB
JavaScript
import { Directive, Input } from '@angular/core';
import * as i0 from "@angular/core";
export class TextHighlightDirective {
constructor(element) {
this.element = element;
}
ngAfterViewChecked() {
if (this.textToHighlight) {
this.highlightInputText(this.textToHighlight);
}
}
highlightInputText(textToHighlight) {
this.resetHighlight();
this.textToHighlight = textToHighlight;
const searchPattern = new RegExp(textToHighlight, 'gi');
const hostElement = this.element.nativeElement;
if (hostElement.innerHTML.match(searchPattern)) {
hostElement.innerHTML = hostElement.innerHTML
.replace(searchPattern, this.highlightPattern('$&'));
}
this.textToHighlight = undefined;
}
resetHighlight() {
const hostElement = this.element.nativeElement;
const searchPattern = new RegExp(this.highlightPattern('(.*?)'), 'gi');
while (hostElement.innerHTML.match(searchPattern)) {
const matchGroups = searchPattern.exec(hostElement.innerHTML);
if (matchGroups) {
hostElement.innerHTML = hostElement.innerHTML.replace(matchGroups[0], matchGroups[1]);
}
}
}
highlightPattern(dynamicText) {
return '<span class="mvTextHighlight">' + dynamicText + '</span>';
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextHighlightDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: TextHighlightDirective, selector: "[mvTextHighlight]", inputs: { textToHighlight: "textToHighlight" }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextHighlightDirective, decorators: [{
type: Directive,
args: [{
selector: '[mvTextHighlight]'
}]
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { textToHighlight: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1oaWdobGlnaHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvY29tbWVudC1zZXQvY29tbWVudC90ZXh0LWhpZ2hsaWdodC90ZXh0LWhpZ2hsaWdodC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUsvRSxNQUFNLE9BQU8sc0JBQXNCO0lBSWpDLFlBQW9CLE9BQWdDO1FBQWhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO0lBQUcsQ0FBQztJQUV4RCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLGVBQXVCO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxNQUFNLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDL0MsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQy9DLFdBQVcsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVM7aUJBQzFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNsRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5RCxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixXQUFXLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxXQUFtQjtRQUMxQyxPQUFPLGdDQUFnQyxHQUFHLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDcEUsQ0FBQztrSUFyQ1Usc0JBQXNCO3NIQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBSGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtpQkFDOUI7K0VBR1UsZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW212VGV4dEhpZ2hsaWdodF0nXG59KVxuZXhwb3J0IGNsYXNzIFRleHRIaWdobGlnaHREaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcblxuICBASW5wdXQoKSB0ZXh0VG9IaWdobGlnaHQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7fVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50ZXh0VG9IaWdobGlnaHQpIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0SW5wdXRUZXh0KHRoaXMudGV4dFRvSGlnaGxpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBoaWdobGlnaHRJbnB1dFRleHQodGV4dFRvSGlnaGxpZ2h0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc2V0SGlnaGxpZ2h0KCk7XG4gICAgdGhpcy50ZXh0VG9IaWdobGlnaHQgPSB0ZXh0VG9IaWdobGlnaHQ7XG4gICAgY29uc3Qgc2VhcmNoUGF0dGVybiA9IG5ldyBSZWdFeHAodGV4dFRvSGlnaGxpZ2h0LCAnZ2knKTtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChob3N0RWxlbWVudC5pbm5lckhUTUwubWF0Y2goc2VhcmNoUGF0dGVybikpIHtcbiAgICAgIGhvc3RFbGVtZW50LmlubmVySFRNTCA9IGhvc3RFbGVtZW50LmlubmVySFRNTFxuICAgICAgICAucmVwbGFjZShzZWFyY2hQYXR0ZXJuLCB0aGlzLmhpZ2hsaWdodFBhdHRlcm4oJyQmJykpO1xuICAgIH1cbiAgICB0aGlzLnRleHRUb0hpZ2hsaWdodCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlc2V0SGlnaGxpZ2h0KCkge1xuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgc2VhcmNoUGF0dGVybiA9IG5ldyBSZWdFeHAodGhpcy5oaWdobGlnaHRQYXR0ZXJuKCcoLio/KScpLCAnZ2knKTtcbiAgICB3aGlsZSAoaG9zdEVsZW1lbnQuaW5uZXJIVE1MLm1hdGNoKHNlYXJjaFBhdHRlcm4pKSB7XG4gICAgICBjb25zdCBtYXRjaEdyb3VwcyA9IHNlYXJjaFBhdHRlcm4uZXhlYyhob3N0RWxlbWVudC5pbm5lckhUTUwpO1xuICAgICAgaWYgKG1hdGNoR3JvdXBzKSB7XG4gICAgICAgIGhvc3RFbGVtZW50LmlubmVySFRNTCA9IGhvc3RFbGVtZW50LmlubmVySFRNTC5yZXBsYWNlKG1hdGNoR3JvdXBzWzBdLCBtYXRjaEdyb3Vwc1sxXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoaWdobGlnaHRQYXR0ZXJuKGR5bmFtaWNUZXh0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibXZUZXh0SGlnaGxpZ2h0XCI+JyArIGR5bmFtaWNUZXh0ICsgJzwvc3Bhbj4nO1xuICB9XG59XG4iXX0=