UNPKG

ngx-truncate-text

Version:

This module is for shortening the text and also includes some useful features for text manipulation like finding hashtags, highlight words with favorite color and so on after version 1.0.0.

233 lines 22.7 kB
/** * @fileoverview added by tsickle * Generated from: lib/ngx-truncate-text.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, ElementRef, Input, Renderer2 } from '@angular/core'; import { NgxTruncateService } from './ngx-truncate.service'; export class NgxTruncateTextDirective { /** * @param {?} elRef * @param {?} renderer * @param {?} trunService */ constructor(elRef, renderer, trunService) { this.elRef = elRef; this.renderer = renderer; this.trunService = trunService; this._highlightQuery = []; this.replace = false; ((/** @type {?} */ (window))).trun = this; // elRef will get a reference to the element where // the directive is placed this.element = elRef.nativeElement; } /** * @param {?} list * @return {?} */ set highlightList(list) { this._highlightQuery = JSON.parse(list); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { //. ارسال می شوند highlightList نزولی کردن کلمات بر اساس طول آنها، کلماتی که در //.ابتدا باید کلمات با طول بیشتر را پیدا کند replace به دلیل اینکه تابع this._highlightQuery.sort((/** * @param {?} a * @param {?} b * @return {?} */ (a, b) => { if (a.hasOwnProperty('name')) return b.name.length - a.name.length; })); if ((changes && changes.content && changes.content.previousValue)) { this.fill(changes.content.currentValue); } } /** * @return {?} */ ngAfterViewInit() { this.fill(this.element.innerHTML); } /** * @param {?} text * @return {?} */ fill(text) { if (!this.hasLiteral) text = text.replace(/(\r\n\t|\n|\r\t)/gm, ' '); this.text = text; /** @type {?} */ let toggling = false; /** @type {?} */ let remainText = ""; if (text.length > this.number) { remainText = this.trunService.applyCondition(text, this.number, this.completeWord, this.hashtag); remainText = this.trunService.highlight(remainText, this.highlightCondition, this._highlightQuery); // برای نمایش ادامه یا پنهان toggling = true; this.replace = true; this.element.innerHTML = remainText + ' ... '; /** @type {?} */ const span = this.renderer.createElement('span'); span.innerHTML = this.more; this.renderer.setStyle(span, 'color', '#ff00ff'); this.renderer.setStyle(span, 'cursor', 'pointer'); this.renderer.addClass(span, 'toggleText'); this.element.innerHTML = remainText + "... "; this.renderer.listen(span, 'click', (/** * @param {?} event * @return {?} */ (event) => this.replace === true ? this.showFullText(event) : this.hideSomeText(event))); this.element.appendChild(span); } else { text = this.hashtag ? this.trunService.findHashtag(text) : text; text = this.trunService.highlight(text, this.highlightCondition, this._highlightQuery); this.element.innerHTML = text; } //اعمال شود این کلاس قرار داده می شود html در \n برای اینکه کاراکتر های if (this.hasLiteral) this.element.style.whiteSpace = 'pre-line'; } /* * نمایش کامل متن * @param mouseDown {mousedown} mouse event */ /** * @param {?} mouseDown * @return {?} */ showFullText(mouseDown) { /** @type {?} */ const span = this.renderer.createElement('span'); span.innerHTML = " " + this.less; this.renderer.setStyle(span, 'color', '#ff00ff'); this.renderer.setStyle(span, 'cursor', 'pointer'); this.renderer.addClass(span, 'toggleText'); /** @type {?} */ let fullText = this.hashtag ? this.trunService.findHashtag(this.text) : this.text; this.element.innerHTML = this.trunService.highlight(fullText, this.highlightCondition, this._highlightQuery); //اعمال شود این کلاس قرار داده می شود html در \n برای اینکه کاراکتر های if (this.hasLiteral) this.element.style.whiteSpace = 'pre-line'; this.renderer.listen(span, 'click', (/** * @param {?} event * @return {?} */ (event) => this.hideSomeText(event))); this.element.appendChild(span); // جلوگیری از کلیک روی عنصر پدر mouseDown.stopPropagation(); this.replace = false; } /* * نمایش قسمتی از متن بر اساس تعداد کاراکتر خواسته شده * @param mouseDown {mousedown} mouse event */ /** * @param {?} mouseDown * @return {?} */ hideSomeText(mouseDown) { /** @type {?} */ const temp = this.trunService.applyCondition(this.text, this.number, this.completeWord, this.hashtag); /** @type {?} */ const remainText = this.trunService.highlight(temp, this.highlightCondition, this._highlightQuery); /** @type {?} */ const span = this.renderer.createElement('span'); this.renderer.setStyle(span, 'color', '#ff00ff'); this.renderer.setStyle(span, 'cursor', 'pointer'); this.renderer.addClass(span, 'toggleText'); span.innerHTML = this.more; this.element.innerHTML = remainText + ' ... '; //اعمال شود این کلاس قرار داده میشود html در n \برای اینکه کاراکتر های if (this.hasLiteral) this.element.style.whiteSpace = 'pre-line'; this.renderer.listen(span, 'click', (/** * @param {?} event * @return {?} */ (event) => this.showFullText(event))); this.element.appendChild(span); // جلوگیری از کلیک روی عنصر پدر mouseDown.stopPropagation(); this.replace = true; } } NgxTruncateTextDirective.decorators = [ { type: Directive, args: [{ selector: '[ngxTruncateText]' },] } ]; /** @nocollapse */ NgxTruncateTextDirective.ctorParameters = () => [ { type: ElementRef }, { type: Renderer2 }, { type: NgxTruncateService } ]; NgxTruncateTextDirective.propDecorators = { more: [{ type: Input }], less: [{ type: Input }], number: [{ type: Input }], completeWord: [{ type: Input }], hashtag: [{ type: Input }], hasLiteral: [{ type: Input }], highlightCondition: [{ type: Input }], highlightList: [{ type: Input }] }; if (false) { /** * @type {?} * @private */ NgxTruncateTextDirective.prototype.element; /** * @type {?} * @private */ NgxTruncateTextDirective.prototype._highlightQuery; /** @type {?} */ NgxTruncateTextDirective.prototype.more; /** @type {?} */ NgxTruncateTextDirective.prototype.less; /** @type {?} */ NgxTruncateTextDirective.prototype.number; /** @type {?} */ NgxTruncateTextDirective.prototype.completeWord; /** @type {?} */ NgxTruncateTextDirective.prototype.hashtag; /** @type {?} */ NgxTruncateTextDirective.prototype.hasLiteral; /** @type {?} */ NgxTruncateTextDirective.prototype.highlightCondition; /** @type {?} */ NgxTruncateTextDirective.prototype.target; /** @type {?} */ NgxTruncateTextDirective.prototype.replace; /** @type {?} */ NgxTruncateTextDirective.prototype.text; /** * @type {?} * @private */ NgxTruncateTextDirective.prototype.elRef; /** * @type {?} * @private */ NgxTruncateTextDirective.prototype.renderer; /** * @type {?} * @private */ NgxTruncateTextDirective.prototype.trunService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRydW5jYXRlLXRleHQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdHJ1bmNhdGUtdGV4dC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdHJ1bmNhdGUtdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUs1RCxNQUFNLE9BQU8sd0JBQXdCOzs7Ozs7SUFxQm5DLFlBQW9CLEtBQWlCLEVBQzNCLFFBQW1CLEVBQ25CLFdBQStCO1FBRnJCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFwQmpDLG9CQUFlLEdBQWUsRUFBRSxDQUFDO1FBY3pDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFPZCxDQUFDLG1CQUFLLE1BQU0sRUFBQSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUMxQixrREFBa0Q7UUFDbEQsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztJQUNyQyxDQUFDOzs7OztJQWhCRCxJQUNJLGFBQWEsQ0FBQyxJQUFZO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDOzs7OztJQWVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxnRkFBZ0Y7UUFDaEYsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSTs7Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUks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LENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPOzs7O1FBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQiwrQkFBK0I7UUFDL0IsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7OztZQWpJRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjthQUM5Qjs7OztZQUxrQyxVQUFVO1lBQVMsU0FBUztZQUN0RCxrQkFBa0I7OzttQkFVeEIsS0FBSzttQkFDTCxLQUFLO3FCQUNMLEtBQUs7MkJBQ0wsS0FBSztzQkFDTCxLQUFLO3lCQUNMLEtBQUs7aUNBQ0wsS0FBSzs0QkFDTCxLQUFLOzs7Ozs7O0lBVk4sMkNBQTZCOzs7OztJQUM3QixtREFBeUM7O0lBRXpDLHdDQUFzQjs7SUFDdEIsd0NBQXNCOztJQUN0QiwwQ0FBd0I7O0lBQ3hCLGdEQUErQjs7SUFDL0IsMkNBQTBCOztJQUMxQiw4Q0FBNkI7O0lBQzdCLHNEQUFvQzs7SUFLcEMsMENBQWU7O0lBQ2YsMkNBQWdCOztJQUNoQix3Q0FBYTs7Ozs7SUFHRCx5Q0FBeUI7Ozs7O0lBQ25DLDRDQUEyQjs7Ozs7SUFDM0IsK0NBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hUcnVuY2F0ZVNlcnZpY2UgfSBmcm9tICcuL25neC10cnVuY2F0ZS5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25neFRydW5jYXRlVGV4dF0nXG59KVxuZXhwb3J0IGNsYXNzIE5neFRydW5jYXRlVGV4dERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIHByaXZhdGUgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX2hpZ2hsaWdodFF1ZXJ5OiBBcnJheTxhbnk+ID0gW107XG5cbiAgQElucHV0KCkgbW9yZTogc3RyaW5nO1xuICBASW5wdXQoKSBsZXNzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG51bWJlcjogbnVtYmVyO1xuICBASW5wdXQoKSBjb21wbGV0ZVdvcmQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhhc2h0YWc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhhc0xpdGVyYWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhpZ2hsaWdodENvbmRpdGlvbjogc3RyaW5nO1xuICBASW5wdXQoKVxuICBzZXQgaGlnaGxpZ2h0TGlzdChsaXN0OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9oaWdobGlnaHRRdWVyeSA9IEpTT04ucGFyc2UobGlzdCk7XG4gIH1cbiAgdGFyZ2V0OiBzdHJpbmc7XG4gIHJlcGxhY2UgPSBmYWxzZTtcbiAgdGV4dDogc3RyaW5nO1xuXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSB0cnVuU2VydmljZTogTmd4VHJ1bmNhdGVTZXJ2aWNlKSB7XG4gICAgKDxhbnk+d2luZG93KS50cnVuID0gdGhpcztcbiAgICAvLyBlbFJlZiB3aWxsIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCB3aGVyZVxuICAgIC8vIHRoZSBkaXJlY3RpdmUgaXMgcGxhY2VkXG4gICAgdGhpcy5lbGVtZW50ID0gZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLy4g2KfYsdiz2KfZhCDZhduMINi02YjZhtivIGhpZ2hsaWdodExpc3Qg2YbYstmI2YTbjCDaqdix2K/ZhiDaqdmE2YXYp9iqINio2LEg2KfYs9in2LMg2LfZiNmEINii2YbZh9in2IwgINqp2YTZhdin2KrbjCDaqdmHINiv2LFcbiAgICAvLy7Yp9io2KrYr9inINio2KfbjNivINqp2YTZhdin2Kog2KjYpyDYt9mI2YQg2KjbjNi02KrYsSDYsdinINm+24zYr9inINqp2YbYryByZXBsYWNlINio2Ycg2K/ZhNuM2YQg2KfbjNmG2qnZhyDYqtin2KjYuVxuICAgIHRoaXMuX2hpZ2hsaWdodFF1ZXJ5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmIChhLmhhc093blByb3BlcnR5KCduYW1lJykpIHJldHVybiBiLm5hbWUubGVuZ3RoIC0gYS5uYW1lLmxlbmd0aDtcbiAgICB9KTtcblxuICAgIGlmICgoY2hhbmdlcyAmJiBjaGFuZ2VzLmNvbnRlbnQgJiYgY2hhbmdlcy5jb250ZW50LnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICB0aGlzLmZpbGwoY2hhbmdlcy5jb250ZW50LmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsbCh0aGlzLmVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgfVxuXG5cbiAgZmlsbCh0ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpdGVyYWwpIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyhcXHJcXG5cXHR8XFxufFxcclxcdCkvZ20sICcgJyk7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBsZXQgdG9nZ2xpbmcgPSBmYWxzZTtcbiAgICBsZXQgcmVtYWluVGV4dDogc3RyaW5nID0gXCJcIjtcbiAgICBpZiAodGV4dC5sZW5ndGggPiB0aGlzLm51bWJlcikge1xuICAgICAgcmVtYWluVGV4dCA9IHRoaXMudHJ1blNlcnZpY2UuYXBwbHlDb25kaXRpb24odGV4dCwgdGhpcy5udW1iZXIsIHRoaXMuY29tcGxldGVXb3JkLCB0aGlzLmhhc2h0YWcpO1xuICAgICAgcmVtYWluVGV4dCA9IHRoaXMudHJ1blNlcnZpY2UuaGlnaGxpZ2h0KHJlbWFpblRleHQsIHRoaXMuaGlnaGxpZ2h0Q29uZGl0aW9uLCB0aGlzLl9oaWdobGlnaHRRdWVyeSk7XG4gICAgICAvLyDYqNix2KfbjCDZhtmF2KfbjNi0INin2K/Yp9mF2Ycg24zYpyDZvtmG2YfYp9mGXG4gICAgICB0b2dnbGluZyA9IHRydWU7XG4gICAgICB0aGlzLnJlcGxhY2UgPSB0cnVlO1xuICAgICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9IHJlbWFpblRleHQgKyAnIC4uLiAnO1xuICAgICAgY29uc3Qgc3BhbiA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgc3Bhbi5pbm5lckhUTUwgPSB0aGlzLm1vcmU7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNwYW4sICdjb2xvcicsICcjZmYwMGZmJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNwYW4sICdjdXJzb3InLCAncG9pbnRlcicpO1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhzcGFuLCAndG9nZ2xlVGV4dCcpO1xuICAgICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9IHJlbWFpblRleHQgKyBcIi4uLiBcIjtcblxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oc3BhbiwgJ2NsaWNrJywgKGV2ZW50KSA9PiB0aGlzLnJlcGxhY2UgPT09IHRydWUgPyB0aGlzLnNob3dGdWxsVGV4dChldmVudCkgOiB0aGlzLmhpZGVTb21lVGV4dChldmVudCkpO1xuICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRleHQgPSB0aGlzLmhhc2h0YWcgPyB0aGlzLnRydW5TZXJ2aWNlLmZpbmRIYXNodGFnKHRleHQpIDogdGV4dDtcbiAgICAgIHRleHQgPSB0aGlzLnRydW5TZXJ2aWNlLmhpZ2hsaWdodCh0ZXh0LCB0aGlzLmhpZ2hsaWdodENvbmRpdGlvbiwgdGhpcy5faGlnaGxpZ2h0UXVlcnkpO1xuICAgICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9IHRleHQ7XG4gICAgfVxuICAgIC8v2KfYudmF2KfZhCDYtNmI2K8g2KfbjNmGINqp2YTYp9izINmC2LHYp9ixINiv2KfYr9mHINmF24wg2LTZiNivICBodG1sINiv2LEgXFxuINio2LHYp9uMINin24zZhtqp2Ycg2qnYp9ix2Kfaqdiq2LEg2YfYp9uMXG4gICAgaWYgKHRoaXMuaGFzTGl0ZXJhbClcbiAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aGl0ZVNwYWNlID0gJ3ByZS1saW5lJztcbiAgfVxuXG4gIC8qXG4gICog2YbZhdin24zYtCDaqdin2YXZhCDZhdiq2YZcbiAgKiBAcGFyYW0gbW91c2VEb3duIHttb3VzZWRvd259IG1vdXNlIGV2ZW50XG4gICovXG4gIHNob3dGdWxsVGV4dChtb3VzZURvd246IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBzcGFuID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgc3Bhbi5pbm5lckhUTUwgPSBcIiBcIiArIHRoaXMubGVzcztcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNwYW4sICdjb2xvcicsICcjZmYwMGZmJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzcGFuLCAnY3Vyc29yJywgJ3BvaW50ZXInKTtcblxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Moc3BhbiwgJ3RvZ2dsZVRleHQnKTtcbiAgICBsZXQgZnVsbFRleHQgPSB0aGlzLmhhc2h0YWcgPyB0aGlzLnRydW5TZXJ2aWNlLmZpbmRIYXNodGFnKHRoaXMudGV4dCkgOnRoaXMudGV4dDtcbiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy50cnVuU2VydmljZS5oaWdobGlnaHQoZnVsbFRleHQsIHRoaXMuaGlnaGxpZ2h0Q29uZGl0aW9uLCB0aGlzLl9oaWdobGlnaHRRdWVyeSk7XG4gICAgLy/Yp9i52YXYp9mEINi02YjYryDYp9uM2YYg2qnZhNin2LMg2YLYsdin2LEg2K/Yp9iv2Ycg2YXbjCDYtNmI2K8gIGh0bWwg2K/YsSBcXG4g2KjYsdin24wg2KfbjNmG2qnZhyDaqdin2LHYp9qp2KrYsSDZh9in24xcbiAgICBpZiAodGhpcy5oYXNMaXRlcmFsKVxuICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndoaXRlU3BhY2UgPSAncHJlLWxpbmUnO1xuXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oc3BhbiwgJ2NsaWNrJywgKGV2ZW50KSA9PiB0aGlzLmhpZGVTb21lVGV4dChldmVudCkpO1xuICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICAvLyDYrNmE2Yjar9uM2LHbjCDYp9iyINqp2YTbjNqpINix2YjbjCDYudmG2LXYsSDZvtiv2LFcbiAgICBtb3VzZURvd24uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5yZXBsYWNlID0gZmFsc2U7XG4gIH1cbiAgLypcbiAgICog2YbZhdin24zYtCDZgtiz2YXYqtuMINin2LIg2YXYqtmGINio2LEg2KfYs9in2LMg2KrYudiv2KfYryDaqdin2LHYp9qp2KrYsSDYrtmI2KfYs9iq2Ycg2LTYr9mHXG4gICAqIEBwYXJhbSBtb3VzZURvd24ge21vdXNlZG93bn0gbW91c2UgZXZlbnRcbiAgICovXG4gIGhpZGVTb21lVGV4dChtb3VzZURvd246IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCB0ZW1wID0gdGhpcy50cnVuU2VydmljZS5hcHBseUNvbmRpdGlvbih0aGlzLnRleHQsIHRoaXMubnVtYmVyLCB0aGlzLmNvbXBsZXRlV29yZCwgdGhpcy5oYXNodGFnKTtcbiAgICBjb25zdCByZW1haW5UZXh0ID0gdGhpcy50cnVuU2VydmljZS5oaWdobGlnaHQodGVtcCwgdGhpcy5oaWdobGlnaHRDb25kaXRpb24sIHRoaXMuX2hpZ2hsaWdodFF1ZXJ5KTtcblxuICAgIGNvbnN0IHNwYW4gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNwYW4sICdjb2xvcicsICcjZmYwMGZmJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzcGFuLCAnY3Vyc29yJywgJ3BvaW50ZXInKTtcblxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Moc3BhbiwgJ3RvZ2dsZVRleHQnKTtcbiAgICBzcGFuLmlubmVySFRNTCA9IHRoaXMubW9yZTtcbiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gcmVtYWluVGV4dCArICcgLi4uICc7XG4gICAgLy/Yp9i52YXYp9mEINi02YjYryDYp9uM2YYg2qnZhNin2LMg2YLYsdin2LEg2K/Yp9iv2Ycg2YXbjNi02YjYryAgaHRtbCDYr9ixICBuIFxc2KjYsdin24wg2KfbjNmG2qnZhyDaqdin2LHYp9qp2KrYsSDZh9in24xcbiAgICBpZiAodGhpcy5oYXNMaXRlcmFsKVxuICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndoaXRlU3BhY2UgPSAncHJlLWxpbmUnO1xuXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oc3BhbiwgJ2NsaWNrJywgKGV2ZW50KSA9PiB0aGlzLnNob3dGdWxsVGV4dChldmVudCkpO1xuICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICAvLyDYrNmE2Yjar9uM2LHbjCDYp9iyINqp2YTbjNqpINix2YjbjCDYudmG2LXYsSDZvtiv2LFcbiAgICBtb3VzZURvd24uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5yZXBsYWNlID0gdHJ1ZTtcbiAgfVxuXG5cbn1cbiJdfQ==