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
JavaScript
/**
* @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==