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.

272 lines 24.4 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'; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRydW5jYXRlLXRleHQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdHJ1bmNhdGUtdGV4dC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdHJ1bmNhdGUtdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RDtJQXdCRSxrQ0FBb0IsS0FBaUIsRUFDM0IsUUFBbUIsRUFDbkIsV0FBK0I7UUFGckIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQXBCakMsb0JBQWUsR0FBZSxFQUFFLENBQUM7UUFjekMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQU9kLENBQUMsbUJBQUssTUFBTSxFQUFBLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQzFCLGtEQUFrRDtRQUNsRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFoQkQsc0JBQ0ksbURBQWE7Ozs7O1FBRGpCLFVBQ2tCLElBQVk7WUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLENBQUM7OztPQUFBOzs7OztJQWVELDhDQUFXOzs7O0lBQVgsVUFBWSxPQUFzQjtRQUNoQyxnRkFBZ0Y7UUFDaEYsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSTs7Ozs7UUFBQyxVQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7Z0JBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1B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QzlDLHdFQUF3RTtRQUN4RSxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU87Ozs7UUFBRSxVQUFDLEtBQUssSUFBSyxPQUFBLEtBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQXhCLENBQXdCLEVBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQiwrQkFBK0I7UUFDL0IsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7O2dCQWpJRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtpQkFDOUI7Ozs7Z0JBTGtDLFVBQVU7Z0JBQVMsU0FBUztnQkFDdEQsa0JBQWtCOzs7dUJBVXhCLEtBQUs7dUJBQ0wsS0FBSzt5QkFDTCxLQUFLOytCQUNMLEtBQUs7MEJBQ0wsS0FBSzs2QkFDTCxLQUFLO3FDQUNMLEtBQUs7Z0NBQ0wsS0FBSzs7SUFxSFIsK0JBQUM7Q0FBQSxBQXBJRCxJQW9JQztTQWpJWSx3QkFBd0I7Ozs7OztJQUVuQywyQ0FBNkI7Ozs7O0lBQzdCLG1EQUF5Qzs7SUFFekMsd0NBQXNCOztJQUN0Qix3Q0FBc0I7O0lBQ3RCLDBDQUF3Qjs7SUFDeEIsZ0RBQStCOztJQUMvQiwyQ0FBMEI7O0lBQzFCLDhDQUE2Qjs7SUFDN0Isc0RBQW9DOztJQUtwQywwQ0FBZTs7SUFDZiwyQ0FBZ0I7O0lBQ2hCLHdDQUFhOzs7OztJQUdELHlDQUF5Qjs7Ozs7SUFDbkMsNENBQTJCOzs7OztJQUMzQiwrQ0FBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFRydW5jYXRlU2VydmljZSB9IGZyb20gJy4vbmd4LXRydW5jYXRlLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmd4VHJ1bmNhdGVUZXh0XSdcbn0pXG5leHBvcnQgY2xhc3MgTmd4VHJ1bmNhdGVUZXh0RGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHJpdmF0ZSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0UXVlcnk6IEFycmF5PGFueT4gPSBbXTtcblxuICBASW5wdXQoKSBtb3JlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxlc3M6IHN0cmluZztcbiAgQElucHV0KCkgbnVtYmVyOiBudW1iZXI7XG4gIEBJbnB1dCgpIGNvbXBsZXRlV29yZDogYm9vbGVhbjtcbiAgQElucHV0KCkgaGFzaHRhZzogYm9vbGVhbjtcbiAgQElucHV0KCkgaGFzTGl0ZXJhbDogYm9vbGVhbjtcbiAgQElucHV0KCkgaGlnaGxpZ2h0Q29uZGl0aW9uOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHNldCBoaWdobGlnaHRMaXN0KGxpc3Q6IHN0cmluZykge1xuICAgIHRoaXMuX2hpZ2hsaWdodFF1ZXJ5ID0gSlNPTi5wYXJzZShsaXN0KTtcbiAgfVxuICB0YXJnZXQ6IHN0cmluZztcbiAgcmVwbGFjZSA9IGZhbHNlO1xuICB0ZXh0OiBzdHJpbmc7XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHRydW5TZXJ2aWNlOiBOZ3hUcnVuY2F0ZVNlcnZpY2UpIHtcbiAgICAoPGFueT53aW5kb3cpLnRydW4gPSB0aGlzO1xuICAgIC8vIGVsUmVmIHdpbGwgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHdoZXJlXG4gICAgLy8gdGhlIGRpcmVjdGl2ZSBpcyBwbGFjZWRcbiAgICB0aGlzLmVsZW1lbnQgPSBlbFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vLiDYp9ix2LPYp9mEINmF24wg2LTZiNmG2K8gaGlnaGxpZ2h0TGlzdCDZhtiy2YjZhNuMINqp2LHYr9mGINqp2YTZhdin2Kog2KjYsSDYp9iz2KfYsyDYt9mI2YQg2KLZhtmH2KfYjCAg2qnZhNmF2KfYqtuMINqp2Ycg2K/YsVxuICAgIC8vLtin2KjYqtiv2Kcg2KjYp9uM2K8g2qnZhNmF2KfYqiDYqNinINi32YjZhCDYqNuM2LTYqtixINix2Kcg2b7bjNiv2Kcg2qnZhtivIHJlcGxhY2Ug2KjZhyDYr9mE24zZhCDYp9uM2YbaqdmHINiq2KfYqNi5XG4gICAgdGhpcy5faGlnaGxpZ2h0UXVlcnkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGEuaGFzT3duUHJvcGVydHkoJ25hbWUnKSkgcmV0dXJuIGIubmFtZS5sZW5ndGggLSBhLm5hbWUubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgaWYgKChjaGFuZ2VzICYmIGNoYW5nZXMuY29udGVudCAmJiBjaGFuZ2VzLmNvbnRlbnQucHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZmlsbChjaGFuZ2VzLmNvbnRlbnQuY3VycmVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWxsKHRoaXMuZWxlbWVudC5pbm5lckhUTUwpO1xuICB9XG5cblxuICBmaWxsKHRleHQpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGl0ZXJhbCkgdGV4dCA9IHRleHQucmVwbGFjZSgvKFxcclxcblxcdHxcXG58XFxyXFx0KS9nbSwgJyAnKTtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGxldCB0b2dnbGluZyA9IGZhbHNlO1xuICAgIGxldCByZW1haW5UZXh0OiBzdHJpbmcgPSBcIlwiO1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA+IHRoaXMubnVtYmVyKSB7XG4gICAgICByZW1haW5UZXh0ID0gdGhpcy50cnVuU2VydmljZS5hcHBseUNvbmRpdGlvbih0ZXh0LCB0aGlzLm51bWJlciwgdGhpcy5jb21wbGV0ZVdvcmQsIHRoaXMuaGFzaHRhZyk7XG4gICAgICByZW1haW5UZXh0ID0gdGhpcy50cnVuU2VydmljZS5oaWdobGlnaHQocmVtYWluVGV4dCwgdGhpcy5oaWdobGlnaHRDb25kaXRpb24sIHRoaXMuX2hpZ2hsaWdodFF1ZXJ5KTtcbiAgICAgIC8vINio2LHYp9uMINmG2YXYp9uM2LQg2KfYr9in2YXZhyDbjNinINm+2YbZh9in2YZcbiAgICAgIHRvZ2dsaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVwbGFjZSA9IHRydWU7XG4gICAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gcmVtYWluVGV4dCArICcgLi4uICc7XG4gICAgICBjb25zdCBzcGFuID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICBzcGFuLmlubmVySFRNTCA9IHRoaXMubW9yZTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3BhbiwgJ2NvbG9yJywgJyNmZjAwZmYnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3BhbiwgJ2N1cnNvcicsICdwb2ludGVyJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHNwYW4sICd0b2dnbGVUZXh0Jyk7XG4gICAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gcmVtYWluVGV4dCArIFwiLi4uIFwiO1xuXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihzcGFuLCAnY2xpY2snLCAoZXZlbnQpID0+IHRoaXMucmVwbGFjZSA9PT0gdHJ1ZSA/IHRoaXMuc2hvd0Z1bGxUZXh0KGV2ZW50KSA6IHRoaXMuaGlkZVNvbWVUZXh0KGV2ZW50KSk7XG4gICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGV4dCA9IHRoaXMuaGFzaHRhZyA/IHRoaXMudHJ1blNlcnZpY2UuZmluZEhhc2h0YWcodGV4dCkgOiB0ZXh0O1xuICAgICAgdGV4dCA9IHRoaXMudHJ1blNlcnZpY2UuaGlnaGxpZ2h0KHRleHQsIHRoaXMuaGlnaGxpZ2h0Q29uZGl0aW9uLCB0aGlzLl9oaWdobGlnaHRRdWVyeSk7XG4gICAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gdGV4dDtcbiAgICB9XG4gICAgLy/Yp9i52YXYp9mEINi02YjYryDYp9uM2YYg2qnZhNin2LMg2YLYsdin2LEg2K/Yp9iv2Ycg2YXbjCDYtNmI2K8gIGh0bWwg2K/YsSBcXG4g2KjYsdin24wg2KfbjNmG2qnZhyDaqdin2LHYp9qp2KrYsSDZh9in24xcbiAgICBpZiAodGhpcy5oYXNMaXRlcmFsKVxuICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndoaXRlU3BhY2UgPSAncHJlLWxpbmUnO1xuICB9XG5cbiAgLypcbiAgKiDZhtmF2KfbjNi0INqp2KfZhdmEINmF2KrZhlxuICAqIEBwYXJhbSBtb3VzZURvd24ge21vdXNlZG93bn0gbW91c2UgZXZlbnRcbiAgKi9cbiAgc2hvd0Z1bGxUZXh0KG1vdXNlRG93bjogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IHNwYW4gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICBzcGFuLmlubmVySFRNTCA9IFwiIFwiICsgdGhpcy5sZXNzO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3BhbiwgJ2NvbG9yJywgJyNmZjAwZmYnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNwYW4sICdjdXJzb3InLCAncG9pbnRlcicpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhzcGFuLCAndG9nZ2xlVGV4dCcpO1xuICAgIGxldCBmdWxsVGV4dCA9IHRoaXMuaGFzaHRhZyA/IHRoaXMudHJ1blNlcnZpY2UuZmluZEhhc2h0YWcodGhpcy50ZXh0KSA6dGhpcy50ZXh0O1xuICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnRydW5TZXJ2aWNlLmhpZ2hsaWdodChmdWxsVGV4dCwgdGhpcy5oaWdobGlnaHRDb25kaXRpb24sIHRoaXMuX2hpZ2hsaWdodFF1ZXJ5KTtcbiAgICAvL9in2LnZhdin2YQg2LTZiNivINin24zZhiDaqdmE2KfYsyDZgtix2KfYsSDYr9in2K/ZhyDZhduMINi02YjYryAgaHRtbCDYr9ixIFxcbiDYqNix2KfbjCDYp9uM2YbaqdmHINqp2KfYsdin2qnYqtixINmH2KfbjFxuICAgIGlmICh0aGlzLmhhc0xpdGVyYWwpXG4gICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2hpdGVTcGFjZSA9ICdwcmUtbGluZSc7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihzcGFuLCAnY2xpY2snLCAoZXZlbnQpID0+IHRoaXMuaGlkZVNvbWVUZXh0KGV2ZW50KSk7XG4gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgIC8vINis2YTZiNqv24zYsduMINin2LIg2qnZhNuM2qkg2LHZiNuMINi52YbYtdixINm+2K/YsVxuICAgIG1vdXNlRG93bi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnJlcGxhY2UgPSBmYWxzZTtcbiAgfVxuICAvKlxuICAgKiDZhtmF2KfbjNi0INmC2LPZhdiq24wg2KfYsiDZhdiq2YYg2KjYsSDYp9iz2KfYsyDYqti52K/Yp9ivINqp2KfYsdin2qnYqtixINiu2YjYp9iz2KrZhyDYtNiv2YdcbiAgICogQHBhcmFtIG1vdXNlRG93biB7bW91c2Vkb3dufSBtb3VzZSBldmVudFxuICAgKi9cbiAgaGlkZVNvbWVUZXh0KG1vdXNlRG93bjogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IHRlbXAgPSB0aGlzLnRydW5TZXJ2aWNlLmFwcGx5Q29uZGl0aW9uKHRoaXMudGV4dCwgdGhpcy5udW1iZXIsIHRoaXMuY29tcGxldGVXb3JkLCB0aGlzLmhhc2h0YWcpO1xuICAgIGNvbnN0IHJlbWFpblRleHQgPSB0aGlzLnRydW5TZXJ2aWNlLmhpZ2hsaWdodCh0ZW1wLCB0aGlzLmhpZ2hsaWdodENvbmRpdGlvbiwgdGhpcy5faGlnaGxpZ2h0UXVlcnkpO1xuXG4gICAgY29uc3Qgc3BhbiA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3BhbiwgJ2NvbG9yJywgJyNmZjAwZmYnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNwYW4sICdjdXJzb3InLCAncG9pbnRlcicpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhzcGFuLCAndG9nZ2xlVGV4dCcpO1xuICAgIHNwYW4uaW5uZXJIVE1MID0gdGhpcy5tb3JlO1xuICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSByZW1haW5UZXh0ICsgJyAuLi4gJztcbiAgICAvL9in2LnZhdin2YQg2LTZiNivINin24zZhiDaqdmE2KfYsyDZgtix2KfYsSDYr9in2K/ZhyDZhduM2LTZiNivICBodG1sINiv2LEgIG4gXFzYqNix2KfbjCDYp9uM2YbaqdmHINqp2KfYsdin2qnYqtixINmH2KfbjFxuICAgIGlmICh0aGlzLmhhc0xpdGVyYWwpXG4gICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2hpdGVTcGFjZSA9ICdwcmUtbGluZSc7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihzcGFuLCAnY2xpY2snLCAoZXZlbnQpID0+IHRoaXMuc2hvd0Z1bGxUZXh0KGV2ZW50KSk7XG4gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgIC8vINis2YTZiNqv24zYsduMINin2LIg2qnZhNuM2qkg2LHZiNuMINi52YbYtdixINm+2K/YsVxuICAgIG1vdXNlRG93bi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnJlcGxhY2UgPSB0cnVlO1xuICB9XG5cblxufVxuIl19