@ng-select/ng-option-highlight
Version:
## Build
111 lines • 7.03 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, ElementRef, Input, Renderer2 } from '@angular/core';
export class NgOptionHighlightDirective {
/**
* @param {?} elementRef
* @param {?} renderer
*/
constructor(elementRef, renderer) {
this.elementRef = elementRef;
this.renderer = renderer;
this.element = this.elementRef.nativeElement;
}
/**
* @return {?}
*/
ngOnChanges() {
if (this._canHighlight) {
this._highlightLabel();
}
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.label = this.element.innerHTML;
if (this._canHighlight) {
this._highlightLabel();
}
}
/**
* @private
* @return {?}
*/
_highlightLabel() {
/** @type {?} */
const label = this.label;
if (!this.term) {
this._setInnerHtml(label);
return;
}
/** @type {?} */
const alternationString = this.term.replace(' ', '|');
/** @type {?} */
const termRegex = new RegExp(alternationString, 'gi');
this._setInnerHtml(label.replace(termRegex, `<span class=\"highlighted\">$&</span>`));
}
/**
* @private
* @return {?}
*/
get _canHighlight() {
return this._isDefined(this.term) && this._isDefined(this.label);
}
/**
* @private
* @param {?} html
* @return {?}
*/
_setInnerHtml(html) {
this.renderer.setProperty(this.elementRef.nativeElement, 'innerHTML', html);
}
/**
* @private
* @param {?} value
* @return {?}
*/
_isDefined(value) {
return value !== undefined && value !== null;
}
}
NgOptionHighlightDirective.decorators = [
{ type: Directive, args: [{
selector: '[ngOptionHighlight]'
},] }
];
/** @nocollapse */
NgOptionHighlightDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 }
];
NgOptionHighlightDirective.propDecorators = {
term: [{ type: Input, args: ['ngOptionHighlight',] }]
};
if (false) {
/** @type {?} */
NgOptionHighlightDirective.prototype.term;
/**
* @type {?}
* @private
*/
NgOptionHighlightDirective.prototype.element;
/**
* @type {?}
* @private
*/
NgOptionHighlightDirective.prototype.label;
/**
* @type {?}
* @private
*/
NgOptionHighlightDirective.prototype.elementRef;
/**
* @type {?}
* @private
*/
NgOptionHighlightDirective.prototype.renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctb3B0aW9uLWhpZ2hsaWdodC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmctc2VsZWN0L25nLW9wdGlvbi1oaWdobGlnaHQvIiwic291cmNlcyI6WyJsaWIvbmctb3B0aW9uLWhpZ2hsaWdodC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFFTCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFLdkIsTUFBTSxPQUFPLDBCQUEwQjs7Ozs7SUFPbkMsWUFDWSxVQUFzQixFQUN0QixRQUFtQjtRQURuQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUNqRCxDQUFDOzs7O0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDMUI7SUFDTCxDQUFDOzs7O0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjtJQUNMLENBQUM7Ozs7O0lBRU8sZUFBZTs7Y0FDYixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUs7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLE9BQU87U0FDVjs7Y0FFSyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDOztjQUMvQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsdUNBQXVDLENBQUMsQ0FBQyxDQUFBO0lBQ3pGLENBQUM7Ozs7O0lBRUQsSUFBWSxhQUFhO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckUsQ0FBQzs7Ozs7O0lBRU8sYUFBYSxDQUFDLElBQUk7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hGLENBQUM7Ozs7OztJQUVPLFVBQVUsQ0FBQyxLQUFVO1FBQ3pCLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0lBQ2pELENBQUM7OztZQW5ESixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjthQUNsQzs7OztZQVJHLFVBQVU7WUFHVixTQUFTOzs7bUJBUVIsS0FBSyxTQUFDLG1CQUFtQjs7OztJQUExQiwwQ0FBeUM7Ozs7O0lBRXpDLDZDQUE2Qjs7Ozs7SUFDN0IsMkNBQXNCOzs7OztJQUdsQixnREFBOEI7Ozs7O0lBQzlCLDhDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNlYXJjaEhlbHBlciBmcm9tICcuL3NlYXJjaC1oZWxwZXInO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBSZW5kZXJlcjJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW25nT3B0aW9uSGlnaGxpZ2h0XSdcbn0pXG5leHBvcnQgY2xhc3MgTmdPcHRpb25IaWdobGlnaHREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuXG4gICAgQElucHV0KCduZ09wdGlvbkhpZ2hsaWdodCcpIHRlcm06IHN0cmluZztcblxuICAgIHByaXZhdGUgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBsYWJlbDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5fY2FuSGlnaGxpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRMYWJlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmxhYmVsID0gdGhpcy5lbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgaWYgKHRoaXMuX2NhbkhpZ2hsaWdodCkge1xuICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0TGFiZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2hpZ2hsaWdodExhYmVsKCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWw7XG4gICAgICAgIGlmICghdGhpcy50ZXJtKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRJbm5lckh0bWwobGFiZWwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWx0ZXJuYXRpb25TdHJpbmcgPSB0aGlzLnRlcm0ucmVwbGFjZSgnICcsICd8JylcbiAgICAgICAgY29uc3QgdGVybVJlZ2V4ID0gbmV3IFJlZ0V4cChhbHRlcm5hdGlvblN0cmluZywgJ2dpJylcbiAgICAgICAgdGhpcy5fc2V0SW5uZXJIdG1sKGxhYmVsLnJlcGxhY2UodGVybVJlZ2V4LCBgPHNwYW4gY2xhc3M9XFxcImhpZ2hsaWdodGVkXFxcIj4kJjwvc3Bhbj5gKSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBfY2FuSGlnaGxpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNEZWZpbmVkKHRoaXMudGVybSkgJiYgdGhpcy5faXNEZWZpbmVkKHRoaXMubGFiZWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldElubmVySHRtbChodG1sKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdpbm5lckhUTUwnLCBodG1sKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0RlZmluZWQodmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgICB9XG59ICAgXG4iXX0=