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.
272 lines • 24.4 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';
var NgxTruncateTextDirective = /** @class */ (function () {
function NgxTruncateTextDirective(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;
}
Object.defineProperty(NgxTruncateTextDirective.prototype, "highlightList", {
set: /**
* @param {?} list
* @return {?}
*/
function (list) {
this._highlightQuery = JSON.parse(list);
},
enumerable: true,
configurable: true
});
/**
* @param {?} changes
* @return {?}
*/
NgxTruncateTextDirective.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
//. ارسال می شوند highlightList نزولی کردن کلمات بر اساس طول آنها، کلماتی که در
//.ابتدا باید کلمات با طول بیشتر را پیدا کند replace به دلیل اینکه تابع
this._highlightQuery.sort((/**
* @param {?} a
* @param {?} b
* @return {?}
*/
function (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 {?}
*/
NgxTruncateTextDirective.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this.fill(this.element.innerHTML);
};
/**
* @param {?} text
* @return {?}
*/
NgxTruncateTextDirective.prototype.fill = /**
* @param {?} text
* @return {?}
*/
function (text) {
var _this = this;
if (!this.hasLiteral)
text = text.replace(/(\r\n\t|\n|\r\t)/gm, ' ');
this.text = text;
/** @type {?} */
var toggling = false;
/** @type {?} */
var 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 {?} */
var 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 {?}
*/
function (event) { return _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 {mousedown} mouse event
*/
/**
* @param {?} mouseDown
* @return {?}
*/
NgxTruncateTextDirective.prototype.showFullText = /*
* نمایش کامل متن
* @param mouseDown {mousedown} mouse event
*/
/**
* @param {?} mouseDown
* @return {?}
*/
function (mouseDown) {
var _this = this;
/** @type {?} */
var 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 {?} */
var 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 {?}
*/
function (event) { return _this.hideSomeText(event); }));
this.element.appendChild(span);
// جلوگیری از کلیک روی عنصر پدر
mouseDown.stopPropagation();
this.replace = false;
};
/*
* نمایش قسمتی از متن بر اساس تعداد کاراکتر خواسته شده
* @param mouseDown {mousedown} mouse event
*/
/*
* نمایش قسمتی از متن بر اساس تعداد کاراکتر خواسته شده
* @param mouseDown {mousedown} mouse event
*/
/**
* @param {?} mouseDown
* @return {?}
*/
NgxTruncateTextDirective.prototype.hideSomeText = /*
* نمایش قسمتی از متن بر اساس تعداد کاراکتر خواسته شده
* @param mouseDown {mousedown} mouse event
*/
/**
* @param {?} mouseDown
* @return {?}
*/
function (mouseDown) {
var _this = this;
/** @type {?} */
var temp = this.trunService.applyCondition(this.text, this.number, this.completeWord, this.hashtag);
/** @type {?} */
var remainText = this.trunService.highlight(temp, this.highlightCondition, this._highlightQuery);
/** @type {?} */
var 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 {?}
*/
function (event) { return _this.showFullText(event); }));
this.element.appendChild(span);
// جلوگیری از کلیک روی عنصر پدر
mouseDown.stopPropagation();
this.replace = true;
};
NgxTruncateTextDirective.decorators = [
{ type: Directive, args: [{
selector: '[ngxTruncateText]'
},] }
];
/** @nocollapse */
NgxTruncateTextDirective.ctorParameters = function () { return [
{ 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 }]
};
return NgxTruncateTextDirective;
}());
export { NgxTruncateTextDirective };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRydW5jYXRlLXRleHQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdHJ1bmNhdGUtdGV4dC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdHJ1bmNhdGUtdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RDtJQXdCRSxrQ0FBb0IsS0FBaUIsRUFDM0IsUUFBbUIsRUFDbkIsV0FBK0I7UUFGckIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQXBCakMsb0JBQWUsR0FBZSxFQUFFLENBQUM7UUFjekMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQU9kLENBQUMsbUJBQUssTUFBTSxFQUFBLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQzFCLGtEQUFrRDtRQUNsRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFoQkQsc0JBQ0ksbURBQWE7Ozs7O1FBRGpCLFVBQ2tCLElBQVk7WUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLENBQUM7OztPQUFBOzs7OztJQWVELDhDQUFXOzs7O0lBQVgsVUFBWSxPQUFzQjtRQUNoQyxnRkFBZ0Y7UUFDaEYsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSTs7Ozs7UUFBQyxVQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7Z0JBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNyRSxDQUFDLEVBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7Ozs7SUFFRCxrREFBZTs7O0lBQWY7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7Ozs7SUFHRCx1Q0FBSTs7OztJQUFKLFVBQUssSUFBSTtRQUFULGlCQThCQztRQTdCQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzs7WUFDYixRQUFRLEdBQUcsS0FBSzs7WUFDaEIsVUFBVSxHQUFXLEVBQUU7UUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDN0IsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pHLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNuRyw0QkFBNEI7WUFDNUIsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsT0FBTyxDQUFDOztnQkFDeEMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsTUFBTSxDQUFDO1lBRTdDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPOzs7O1lBQUUsVUFBQyxLQUFLLElBQUssT0FBQSxLQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBM0UsQ0FBMkUsRUFBQyxDQUFDO1lBQzVILElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO2FBQ0k7WUFDSCxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNoRSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQy9CO1FBQ0Qsd0VBQXdFO1FBQ3hFLElBQUksSUFBSSxDQUFDLFVBQVU7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7OztNQUdFOzs7Ozs7Ozs7SUFDRiwrQ0FBWTs7Ozs7Ozs7SUFBWixVQUFhLFNBQXFCO1FBQWxDLGlCQWtCQzs7WUFqQk8sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7O1lBQ3ZDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBLElBQUksQ0FBQyxJQUFJO1FBQ2hGLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdHLHdFQUF3RTtRQUN4RSxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU87Ozs7UUFBRSxVQUFDLEtBQUssSUFBSyxPQUFBLEtBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQXhCLENBQXdCLEVBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQiwrQkFBK0I7UUFDL0IsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFDRDs7O09BR0c7Ozs7Ozs7OztJQUNILCtDQUFZOzs7Ozs7OztJQUFaLFVBQWEsU0FBcUI7UUFBbEMsaUJBb0JDOztZQW5CTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQzs7WUFDL0YsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQzs7WUFFNUYsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsT0FBTyxDQUFDO1FBQzlDLHdFQUF3RTtRQUN4RSxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU87Ozs7UUFBRSxVQUFDLEtBQUssSUFBSyxPQUFBLEtBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQXhCLENBQXdCLEVBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQiwrQkFBK0I7UUFDL0IsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7O2dCQWpJRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtpQkFDOUI7Ozs7Z0JBTGtDLFVBQVU7Z0JBQVMsU0FBUztnQkFDdEQsa0JBQWtCOzs7dUJBVXhCLEtBQUs7dUJBQ0wsS0FBSzt5QkFDTCxLQUFLOytCQUNMLEtBQUs7MEJBQ0wsS0FBSzs2QkFDTCxLQUFLO3FDQUNMLEtBQUs7Z0NBQ0wsS0FBSzs7SUFxSFIsK0JBQUM7Q0FBQSxBQXBJRCxJQW9JQztTQWpJWSx3QkFBd0I7Ozs7OztJQUVuQywyQ0FBNkI7Ozs7O0lBQzdCLG1EQUF5Qzs7SUFFekMsd0NBQXNCOztJQUN0Qix3Q0FBc0I7O0lBQ3RCLDBDQUF3Qjs7SUFDeEIsZ0RBQStCOztJQUMvQiwyQ0FBMEI7O0lBQzFCLDhDQUE2Qjs7SUFDN0Isc0RBQW9DOztJQUtwQywwQ0FBZTs7SUFDZiwyQ0FBZ0I7O0lBQ2hCLHdDQUFhOzs7OztJQUdELHlDQUF5Qjs7Ozs7SUFDbkMsNENBQTJCOzs7OztJQUMzQiwrQ0FBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFRydW5jYXRlU2VydmljZSB9IGZyb20gJy4vbmd4LXRydW5jYXRlLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmd4VHJ1bmNhdGVUZXh0XSdcbn0pXG5leHBvcnQgY2xhc3MgTmd4VHJ1bmNhdGVUZXh0RGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHJpdmF0ZSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0UXVlcnk6IEFycmF5PGFueT4gPSBbXTtcblxuICBASW5wdXQoKSBtb3JlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxlc3M6IHN0cmluZztcbiAgQElucHV0KCkgbnVtYmVyOiBudW1iZXI7XG4gIEBJbnB1dCgpIGNvbXBsZXRlV29yZDogYm9vbGVhbjtcbiAgQElucHV0KCkgaGFzaHRhZzogYm9vbGVhbjtcbiAgQElucHV0KCkgaGFzTGl0ZXJhbDogYm9vbGVhbjtcbiAgQElucHV0KCkgaGlnaGxpZ2h0Q29uZGl0aW9uOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHNldCBoaWdobGlnaHRMaXN0KGxpc3Q6IHN0cmluZykge1xuICAgIHRoaXMuX2hpZ2hsaWdodFF1ZXJ5ID0gSlNPTi5wYXJzZShsaXN0KTtcbiAgfVxuICB0YXJnZXQ6IHN0cmluZztcbiAgcmVwbGFjZSA9IGZhbHNlO1xuICB0ZXh0OiBzdHJpbmc7XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHRydW5TZXJ2aWNlOiBOZ3hUcnVuY2F0ZVNlcnZpY2UpIHtcbiAgICAoPGFueT53aW5kb3cpLnRydW4gPSB0aGlzO1xuICAgIC8vIGVsUmVmIHdpbGwgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHdoZXJlXG4gICAgLy8gdGhlIGRpcmVjdGl2ZSBpcyBwbGFjZWRcbiAgICB0aGlzLmVsZW1lbnQgPSBlbFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vLiDYp9ix2LPYp9mEINmF24wg2LTZiNmG2K8gaGlnaGxpZ2h0TGlzdCDZhtiy2YjZhNuMINqp2LHYr9mGINqp2YTZhdin2Kog2KjYsSDYp9iz2KfYsyDYt9mI2YQg2KLZhtmH2KfYjCAg2qnZhNmF2KfYqtuMINqp2Ycg2K/YsVxuICAgIC8vLtin2KjYqtiv2Kcg2KjYp9uM2K8g2qnZhNmF2KfYqiDYqNinINi32YjZhCDYqNuM2LTYqtixINix2Kcg2b7bjNiv2Kcg2qnZhtivIHJlcGxhY2Ug2KjZhyDYr9mE24zZhCDYp9uM2YbaqdmHINiq2KfYqNi5XG4gICAgdGhpcy5faGlnaGxpZ2h0UXVlcnkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGEuaGFzT3duUHJvcGVydHkoJ25hbWUnKSkgcmV0dXJuIGIubmFtZS5sZW5ndGggLSBhLm5hbWUubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgaWYgKChjaGFuZ2VzICYmIGNoYW5nZXMuY29udGVudCAmJiBjaGFuZ2VzLmNvbnRlbnQucHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZmlsbChjaGFuZ2VzLmNvbnRlbnQuY3VycmVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWxsKHRoaXMuZWxlbWVudC5pbm5lckhUTUwpO1xuICB9XG5cblxuICBmaWxsKHRleHQpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGl0ZXJhbCkgdGV4dCA9IHRleHQucmVwbGFjZSgvKFxcclxcblxcdHxcXG58XFxyXFx0KS9nbSwgJyAnKTtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGxldCB0b2dnbGluZyA9IGZhbHNlO1xuICAgIGxldCByZW1haW5UZXh0OiBzdHJpbmcgPSBcIlwiO1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA+IHRoaXMubnVtYmVyKSB7XG4gICAgICByZW1haW5UZXh0ID0gdGhpcy50cnVuU2VydmljZS5hcHBseUNvbmRpdGlvbih0ZXh0LCB0aGlzLm51bWJlciwgdGhpcy5jb21wbGV0ZVdvcmQsIHRoaXMuaGFzaHRhZyk7XG4gICAgICByZW1haW5UZXh0ID0gdGhpcy50cnVuU2VydmljZS5oaWdobGlnaHQocmVtYWluVGV4dCwgdGhpcy5oaWdobGlnaHRDb25kaXRpb24sIHRoaXMuX2hpZ2hsaWdodFF1ZXJ5KTtcbiAgICAgIC8vINio2LHYp9uMINmG2YXYp9uM2LQg2KfYr9in2YXZhyDbjNinINm+2YbZh9in2YZcbiAgICAgIHRvZ2dsaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gcmVtYWluVGV4dCArICcgLi4uICc7XG4gICAgICBjb25zdCBzcGFuID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICBzcGFuLmlubmVySFRNTCA9IHRoaXMubW9yZTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3BhbiwgJ2NvbG9yJywgJyNmZjAwZmYnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3BhbiwgJ2N1cnNvcicsICdwb2ludGVyJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHNwYW4sICd0b2dnbGVUZXh0Jyk7XG4gICAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gcmVtYWluVGV4dCArIFwiLi4uIFwiO1xuXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihzcGFuLCAnY2xpY2snLCAoZXZlbnQpID0+IHRoaXMucmVwbGFjZSA9PT0gdHJ1ZSA/IHRoaXMuc2hvd0Z1bGxUZXh0KGV2ZW50KSA6IHRoaXMuaGlkZVNvbWVUZXh0KGV2ZW50KSk7XG4gICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGV4dCA9IHRoaXMuaGFzaHRhZyA/IHRoaXMudHJ1blNlcnZpY2UuZmluZEhhc2h0YWcodGV4dCkgOiB0ZXh0O1xuICAgICAgdGV4dCA9IHRoaXMudHJ1blNlcnZpY2UuaGlnaGxpZ2h0KHRleHQsIHRoaXMuaGlnaGxpZ2h0Q29uZGl0aW9uLCB0aGlzLl9oaWdobGlnaHRRdWVyeSk7XG4gICAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gdGV4dDtcbiAgICB9XG4gICAgLy/Yp9i52YXYp9mEINi02YjYryDYp9uM2YYg2qnZhNin2LMg2YLYsdin2LEg2K/Yp9iv2Ycg2YXbjCDYtNmI2K8gIGh0bWwg2K/YsSBcXG4g2KjYsdin24wg2KfbjNmG2qnZhyDaqdin2LHYp9qp2KrYsSDZh9in24xcbiAgICBpZiAodGhpcy5oYXNMaXRlcmFsKVxuICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndoaXRlU3BhY2UgPSAncHJlLWxpbmUnO1xuICB9XG5cbiAgLypcbiAgKiDZhtmF2KfbjNi0INqp2KfZhdmEINmF2KrZhlxuICAqIEBwYXJhbSBtb3VzZURvd24ge21vdXNlZG93bn0gbW91c2UgZXZlbnRcbiAgKi9cbiAgc2hvd0Z1bGxUZXh0KG1vdXNlRG93bjogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IHNwYW4gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICBzcGFuLmlubmVySFRNTCA9IFwiIFwiICsgdGhpcy5sZXNzO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3BhbiwgJ2NvbG9yJywgJyNmZjAwZmYnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNwYW4sICdjdXJzb3InLCAncG9pbnRlcicpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhzcGFuLCAndG9nZ2xlVGV4dCcpO1xuICAgIGxldCBmdWxsVGV4dCA9IHRoaXMuaGFzaHRhZyA/IHRoaXMudHJ1blNlcnZpY2UuZmluZEhhc2h0YWcodGhpcy50ZXh0KSA6dGhpcy50ZXh0O1xuICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnRydW5TZXJ2aWNlLmhpZ2hsaWdodChmdWxsVGV4dCwgdGhpcy5oaWdobGlnaHRDb25kaXRpb24sIHRoaXMuX2hpZ2hsaWdodFF1ZXJ5KTtcbiAgICAvL9in2LnZhdin2YQg2LTZiNivINin24zZhiDaqdmE2KfYsyDZgtix2KfYsSDYr9in2K/ZhyDZhduMINi02YjYryAgaHRtbCDYr9ixIFxcbiDYqNix2KfbjCDYp9uM2YbaqdmHINqp2KfYsdin2qnYqtixINmH2KfbjFxuICAgIGlmICh0aGlzLmhhc0xpdGVyYWwpXG4gICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2hpdGVTcGFjZSA9ICdwcmUtbGluZSc7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihzcGFuLCAnY2xpY2snLCAoZXZlbnQpID0+IHRoaXMuaGlkZVNvbWVUZXh0KGV2ZW50KSk7XG4gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgIC8vINis2YTZiNqv24zYsduMINin2LIg2qnZhNuM2qkg2LHZiNuMINi52YbYtdixINm+2K/YsVxuICAgIG1vdXNlRG93bi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnJlcGxhY2UgPSBmYWxzZTtcbiAgfVxuICAvKlxuICAgKiDZhtmF2KfbjNi0INmC2LPZhdiq24wg2KfYsiDZhdiq2YYg2KjYsSDYp9iz2KfYsyDYqti52K/Yp9ivINqp2KfYsdin2qnYqtixINiu2YjYp9iz2KrZhyDYtNiv2YdcbiAgICogQHBhcmFtIG1vdXNlRG93biB7bW91c2Vkb3dufSBtb3VzZSBldmVudFxuICAgKi9cbiAgaGlkZVNvbWVUZXh0KG1vdXNlRG93bjogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IHRlbXAgPSB0aGlzLnRydW5TZXJ2aWNlLmFwcGx5Q29uZGl0aW9uKHRoaXMudGV4dCwgdGhpcy5udW1iZXIsIHRoaXMuY29tcGxldGVXb3JkLCB0aGlzLmhhc2h0YWcpO1xuICAgIGNvbnN0IHJlbWFpblRleHQgPSB0aGlzLnRydW5TZXJ2aWNlLmhpZ2hsaWdodCh0ZW1wLCB0aGlzLmhpZ2hsaWdodENvbmRpdGlvbiwgdGhpcy5faGlnaGxpZ2h0UXVlcnkpO1xuXG4gICAgY29uc3Qgc3BhbiA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3BhbiwgJ2NvbG9yJywgJyNmZjAwZmYnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNwYW4sICdjdXJzb3InLCAncG9pbnRlcicpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhzcGFuLCAndG9nZ2xlVGV4dCcpO1xuICAgIHNwYW4uaW5uZXJIVE1MID0gdGhpcy5tb3JlO1xuICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSByZW1haW5UZXh0ICsgJyAuLi4gJztcbiAgICAvL9in2LnZhdin2YQg2LTZiNivINin24zZhiDaqdmE2KfYsyDZgtix2KfYsSDYr9in2K/ZhyDZhduM2LTZiNivICBodG1sINiv2LEgIG4gXFzYqNix2KfbjCDYp9uM2YbaqdmHINqp2KfYsdin2qnYqtixINmH2KfbjFxuICAgIGlmICh0aGlzLmhhc0xpdGVyYWwpXG4gICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2hpdGVTcGFjZSA9ICdwcmUtbGluZSc7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihzcGFuLCAnY2xpY2snLCAoZXZlbnQpID0+IHRoaXMuc2hvd0Z1bGxUZXh0KGV2ZW50KSk7XG4gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgIC8vINis2YTZiNqv24zYsduMINin2LIg2qnZhNuM2qkg2LHZiNuMINi52YbYtdixINm+2K/YsVxuICAgIG1vdXNlRG93bi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnJlcGxhY2UgPSB0cnVlO1xuICB9XG5cblxufVxuIl19