UNPKG

ionic4-emoji-picker

Version:

Emoji picker with slides and tabs (like emoji picker on Whatsapp) This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.14.

173 lines 15.8 kB
/** * @fileoverview added by tsickle * Generated from: lib/ionic4-emoji-picker.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ViewChild, ElementRef, EventEmitter, Output, Input } from '@angular/core'; import { EMOJIS } from '../data/emoji.data'; import { IonSlides, ModalController } from '@ionic/angular'; var Ionic4EmojiPickerComponent = /** @class */ (function () { function Ionic4EmojiPickerComponent(modalCtrl) { this.modalCtrl = modalCtrl; this.emojiCategories = []; this.mainEmojiData = EMOJIS; this.currentEmojiList = []; this.currentCategoryName = ''; this.isInModal = false; //To determine whether this componet is created using a modal or not //To determine whether this componet is created using a modal or not this.selectionEvent = new EventEmitter(); //TO emmit event when an emoji is selected } /** * @return {?} */ Ionic4EmojiPickerComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.getEmojiCategories(); }; /** * @return {?} */ Ionic4EmojiPickerComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { var _this = this; console.log('ngAfterViewInit'); this.setActiveCategorySlide(); this.slides.ionSlideDidChange.subscribe((/** * @param {?} data * @return {?} */ function (data) { console.log('Slide changed data', data); _this.setActiveCategorySlide(); })); }; /** * @return {?} */ Ionic4EmojiPickerComponent.prototype.getEmojiCategories = /** * @return {?} */ function () { var _this = this; this.mainEmojiData.forEach((/** * @param {?} category * @return {?} */ function (category) { _this.emojiCategories.push(category); })); this.currentCategoryName = this.emojiCategories[0].name; this.currentEmojiList = this.emojiCategories[0].emojis; }; /** * @param {?} selectedEmojiList * @param {?} categoryIndex * @return {?} */ Ionic4EmojiPickerComponent.prototype.categoryChanged = /** * @param {?} selectedEmojiList * @param {?} categoryIndex * @return {?} */ function (selectedEmojiList, categoryIndex) { this.currentEmojiList = selectedEmojiList.emojis; this.currentCategoryName = selectedEmojiList.name; this.slides.slideTo(categoryIndex); this.setActiveCategorySlide(); }; /** * @param {?} code * @return {?} */ Ionic4EmojiPickerComponent.prototype.selectEmoji = /** * @param {?} code * @return {?} */ function (code) { /** @type {?} */ var selectionData = { data: code }; this.selectionEvent.emit(selectionData); if (this.isInModal) { this.modalCtrl.dismiss(selectionData); //Dismiss the modal with data } }; /** * @return {?} */ Ionic4EmojiPickerComponent.prototype.setActiveCategorySlide = /** * @return {?} */ function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.slides.getActiveIndex().then((/** * @param {?} index * @return {?} */ function (index) { _this.currentCategoryName = _this.emojiCategories[index].name; console.log(_this.currentCategoryName); /** @type {?} */ var categoryDiv = _this.categoryContainer.nativeElement.children.item(index); _this.categoryContainer.nativeElement.scrollLeft = categoryDiv.offsetLeft - 20; }))]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; Ionic4EmojiPickerComponent.decorators = [ { type: Component, args: [{ selector: 'emoji-picker', template: "<ion-content>\n \n <ion-row>\n <ion-col size=\"12\">\n <!--EMOJI CATEGORIES-->\n\n <div class=\"categoryContainer\" #categoryDiv>\n <div class=\"category\" [class.selectedCategory]=\"currentCategoryName==item.name\" *ngFor=\"let item of emojiCategories;let i=index;\" (click)=\"categoryChanged(item,i)\">\n <p>{{item.icon[0]}}</p>\n <p>{{item.name}}</p>\n </div>\n </div>\n\n </ion-col>\n <ion-col size=\"12\">\n <!--CATEGORY CONTENT-->\n\n <ion-slides #slides pager=\"false\">\n <ion-slide *ngFor=\"let item of emojiCategories\">\n <ion-row>\n <ion-col size=\"1.5\" *ngFor=\"let childItem of item.emojis\" (click)=\"selectEmoji(childItem[0])\">\n <p style=\"margin:1px;\">{{childItem[0]}}</p>\n </ion-col>\n </ion-row>\n </ion-slide>\n </ion-slides>\n \n\n\n </ion-col>\n </ion-row>\n</ion-content>", styles: [".categoryContainer\n {\n overflow: scroll;\n white-space: nowrap;\n }\n\n .category\n {\n display: inline-block;\n padding: 10px;\n text-align: center;\n }\n \n .selectedCategory\n {\n border-bottom: 2px solid var(--ion-color-primary);\n }"] }] } ]; /** @nocollapse */ Ionic4EmojiPickerComponent.ctorParameters = function () { return [ { type: ModalController } ]; }; Ionic4EmojiPickerComponent.propDecorators = { slides: [{ type: ViewChild, args: ['slides', { static: false },] }], categoryContainer: [{ type: ViewChild, args: ['categoryDiv', { static: false },] }], isInModal: [{ type: Input, args: ['isInModal',] }], selectionEvent: [{ type: Output, args: ['onEmojiSelect',] }] }; return Ionic4EmojiPickerComponent; }()); export { Ionic4EmojiPickerComponent }; if (false) { /** @type {?} */ Ionic4EmojiPickerComponent.prototype.slides; /** @type {?} */ Ionic4EmojiPickerComponent.prototype.categoryContainer; /** @type {?} */ Ionic4EmojiPickerComponent.prototype.emojiCategories; /** @type {?} */ Ionic4EmojiPickerComponent.prototype.mainEmojiData; /** @type {?} */ Ionic4EmojiPickerComponent.prototype.currentEmojiList; /** @type {?} */ Ionic4EmojiPickerComponent.prototype.currentCategoryName; /** @type {?} */ Ionic4EmojiPickerComponent.prototype.isInModal; /** @type {?} */ Ionic4EmojiPickerComponent.prototype.selectionEvent; /** * @type {?} * @private */ Ionic4EmojiPickerComponent.prototype.modalCtrl; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9uaWM0LWVtb2ppLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pb25pYzQtZW1vamktcGlja2VyLyIsInNvdXJjZXMiOlsibGliL2lvbmljNC1lbW9qaS1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RDtJQWlFSSxvQ0FBb0IsU0FBeUI7UUFBekIsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFQL0Msb0JBQWUsR0FBTyxFQUFFLENBQUM7UUFDekIsa0JBQWEsR0FBQyxNQUFNLENBQUM7UUFDckIscUJBQWdCLEdBQU8sRUFBRSxDQUFDO1FBQzFCLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUVWLGNBQVMsR0FBQyxLQUFLLENBQUMsQ0FBQyxvRUFBb0U7O1FBQ2hGLG1CQUFjLEdBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDLDBDQUEwQztJQUlwRyxDQUFDOzs7O0lBRUQsNkNBQVE7OztJQUFSO1FBRUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQzs7OztJQUVELG9EQUFlOzs7SUFBZjtRQUFBLGlCQVNDO1FBUEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUzs7OztRQUFDLFVBQUEsSUFBSTtZQUV4QyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLEtBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hDLENBQUMsRUFBQyxDQUFBO0lBQ04sQ0FBQzs7OztJQUVELHVEQUFrQjs7O0lBQWxCO1FBQUEsaUJBU0M7UUFQQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLFFBQVE7WUFFL0IsS0FBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxFQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEdBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdEQsSUFBSSxDQUFDLGdCQUFnQixHQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBRXpELENBQUM7Ozs7OztJQUVELG9EQUFlOzs7OztJQUFmLFVBQWdCLGlCQUFpQixFQUFDLGFBQWE7UUFFN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUMvQyxJQUFJLENBQUMsbUJBQW1CLEdBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7Ozs7O0lBRUQsZ0RBQVc7Ozs7SUFBWCxVQUFZLElBQUk7O1lBRVYsYUFBYSxHQUFDO1lBQ2hCLElBQUksRUFBQyxJQUFJO1NBQ1Y7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4QyxJQUFHLElBQUksQ0FBQyxTQUFTLEVBQ2pCO1lBQ0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyw2QkFBNkI7U0FDckU7SUFDSCxDQUFDOzs7O0lBQ0ssMkRBQXNCOzs7SUFBNUI7Ozs7OzRCQUdDLHFCQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSTs7Ozt3QkFBQyxVQUFBLEtBQUs7NEJBRXhDLEtBQUksQ0FBQyxtQkFBbUIsR0FBQyxLQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQzs0QkFDMUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQzs7Z0NBQ25DLFdBQVcsR0FBQyxLQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDOzRCQUN6RSxLQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBQyxXQUFXLENBQUMsVUFBVSxHQUFDLEVBQUUsQ0FBQzt3QkFFM0UsQ0FBQyxFQUFDLEVBQUE7O3dCQVBMLFNBT0ssQ0FBQzs7Ozs7S0FFTjs7Z0JBaklKLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsUUFBUSxFQUFDLHM3QkErQkk7NkJBQ0osd1JBZ0JQO2lCQUNIOzs7O2dCQXJEbUIsZUFBZTs7O3lCQXlEaEMsU0FBUyxTQUFDLFFBQVEsRUFBQyxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUM7b0NBQ2pDLFNBQVMsU0FBQyxhQUFhLEVBQUMsRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDOzRCQU90QyxLQUFLLFNBQUMsV0FBVztpQ0FDakIsTUFBTSxTQUFDLGVBQWU7O0lBb0V6QixpQ0FBQztDQUFBLEFBcElELElBb0lDO1NBaEZZLDBCQUEwQjs7O0lBR3JDLDRDQUFxRDs7SUFDckQsdURBQXNFOztJQUV0RSxxREFBeUI7O0lBQ3pCLG1EQUFxQjs7SUFDckIsc0RBQTBCOztJQUMxQix5REFBOEI7O0lBRTlCLCtDQUFvQzs7SUFDcEMsb0RBQTJEOzs7OztJQUM3QywrQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVNT0pJUyB9IGZyb20gJy4uL2RhdGEvZW1vamkuZGF0YSc7XG5pbXBvcnQgeyBJb25TbGlkZXMsIE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW1vamktcGlja2VyJyxcbiAgdGVtcGxhdGU6YDxpb24tY29udGVudD5cbiBcbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCI+XG4gICAgICA8IS0tRU1PSkkgQ0FURUdPUklFUy0tPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnlDb250YWluZXJcIiAjY2F0ZWdvcnlEaXY+XG4gICAgICAgIDxkaXYgIGNsYXNzPVwiY2F0ZWdvcnlcIiBbY2xhc3Muc2VsZWN0ZWRDYXRlZ29yeV09XCJjdXJyZW50Q2F0ZWdvcnlOYW1lPT1pdGVtLm5hbWVcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBlbW9qaUNhdGVnb3JpZXM7bGV0IGk9aW5kZXg7XCIgKGNsaWNrKT1cImNhdGVnb3J5Q2hhbmdlZChpdGVtLGkpXCI+XG4gICAgICAgICAgPHA+e3tpdGVtLmljb25bMF19fTwvcD5cbiAgICAgICAgICA8cD57e2l0ZW0ubmFtZX19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIHNpemU9XCIxMlwiPlxuICAgICAgPCEtLUNBVEVHT1JZIENPTlRFTlQtLT5cblxuICAgICAgPGlvbi1zbGlkZXMgI3NsaWRlcyBwYWdlcj1cImZhbHNlXCI+XG4gICAgICAgIDxpb24tc2xpZGUgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZW1vamlDYXRlZ29yaWVzXCI+XG4gICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiMS41XCIgKm5nRm9yPVwibGV0IGNoaWxkSXRlbSBvZiBpdGVtLmVtb2ppc1wiIChjbGljayk9XCJzZWxlY3RFbW9qaShjaGlsZEl0ZW1bMF0pXCI+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOjFweDtcIj57e2NoaWxkSXRlbVswXX19PC9wPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgPC9pb24tc2xpZGU+XG4gICAgICA8L2lvbi1zbGlkZXM+XG4gICAgICBcblxuXG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG48L2lvbi1jb250ZW50PmAsXG4gIHN0eWxlczogW2AuY2F0ZWdvcnlDb250YWluZXJcbiAge1xuICAgICAgb3ZlcmZsb3c6IHNjcm9sbDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAuY2F0ZWdvcnlcbiAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICBcbiAgLnNlbGVjdGVkQ2F0ZWdvcnlcbiAge1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgfWBdLFxufSlcbmV4cG9ydCBjbGFzcyBJb25pYzRFbW9qaVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cblxuICBAVmlld0NoaWxkKCdzbGlkZXMnLHtzdGF0aWM6ZmFsc2V9KSBzbGlkZXM6SW9uU2xpZGVzO1xuICBAVmlld0NoaWxkKCdjYXRlZ29yeURpdicse3N0YXRpYzpmYWxzZX0pIGNhdGVnb3J5Q29udGFpbmVyOkVsZW1lbnRSZWY7XG4gIFxuICBlbW9qaUNhdGVnb3JpZXM6YW55W109W107XG4gIG1haW5FbW9qaURhdGE9RU1PSklTO1xuICBjdXJyZW50RW1vamlMaXN0OmFueVtdPVtdO1xuICBjdXJyZW50Q2F0ZWdvcnlOYW1lOnN0cmluZz0nJztcbiAgXG4gIEBJbnB1dCgnaXNJbk1vZGFsJykgaXNJbk1vZGFsPWZhbHNlOyAvL1RvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgY29tcG9uZXQgaXMgY3JlYXRlZCB1c2luZyBhIG1vZGFsIG9yIG5vdFxuICBAT3V0cHV0KCdvbkVtb2ppU2VsZWN0Jykgc2VsZWN0aW9uRXZlbnQ9bmV3IEV2ZW50RW1pdHRlcigpOyAvL1RPIGVtbWl0IGV2ZW50IHdoZW4gYW4gZW1vamkgaXMgc2VsZWN0ZWRcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsQ3RybDpNb2RhbENvbnRyb2xsZXIpIFxuICAgIHtcbiAgXG4gICAgfVxuICBcbiAgICBuZ09uSW5pdCgpIFxuICAgIHtcbiAgICAgIHRoaXMuZ2V0RW1vamlDYXRlZ29yaWVzKCk7XG4gICAgfVxuICBcbiAgICBuZ0FmdGVyVmlld0luaXQoKVxuICAgIHtcbiAgICAgIGNvbnNvbGUubG9nKCduZ0FmdGVyVmlld0luaXQnKTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQ2F0ZWdvcnlTbGlkZSgpO1xuICAgICAgdGhpcy5zbGlkZXMuaW9uU2xpZGVEaWRDaGFuZ2Uuc3Vic2NyaWJlKGRhdGE9PlxuICAgICAgICB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1NsaWRlIGNoYW5nZWQgZGF0YScsZGF0YSk7XG4gICAgICAgICAgdGhpcy5zZXRBY3RpdmVDYXRlZ29yeVNsaWRlKCk7XG4gICAgICAgIH0pXG4gICAgfVxuICBcbiAgICBnZXRFbW9qaUNhdGVnb3JpZXMoKVxuICAgIHtcbiAgICAgIHRoaXMubWFpbkVtb2ppRGF0YS5mb3JFYWNoKGNhdGVnb3J5PT5cbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuZW1vamlDYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2F0ZWdvcnlOYW1lPXRoaXMuZW1vamlDYXRlZ29yaWVzWzBdLm5hbWU7XG4gICAgICAgIHRoaXMuY3VycmVudEVtb2ppTGlzdD10aGlzLmVtb2ppQ2F0ZWdvcmllc1swXS5lbW9qaXM7XG4gICAgICBcbiAgICB9XG4gIFxuICAgIGNhdGVnb3J5Q2hhbmdlZChzZWxlY3RlZEVtb2ppTGlzdCxjYXRlZ29yeUluZGV4KVxuICAgIHtcbiAgICAgIHRoaXMuY3VycmVudEVtb2ppTGlzdD1zZWxlY3RlZEVtb2ppTGlzdC5lbW9qaXM7XG4gICAgICB0aGlzLmN1cnJlbnRDYXRlZ29yeU5hbWU9c2VsZWN0ZWRFbW9qaUxpc3QubmFtZTtcbiAgICAgIHRoaXMuc2xpZGVzLnNsaWRlVG8oY2F0ZWdvcnlJbmRleCk7XG4gICAgICB0aGlzLnNldEFjdGl2ZUNhdGVnb3J5U2xpZGUoKTtcbiAgICB9XG4gIFxuICAgIHNlbGVjdEVtb2ppKGNvZGUpXG4gICAge1xuICAgICAgbGV0IHNlbGVjdGlvbkRhdGE9e1xuICAgICAgICBkYXRhOmNvZGVcbiAgICAgIH07XG4gIFxuICAgICAgdGhpcy5zZWxlY3Rpb25FdmVudC5lbWl0KHNlbGVjdGlvbkRhdGEpO1xuICAgICAgaWYodGhpcy5pc0luTW9kYWwpXG4gICAgICB7XG4gICAgICAgIHRoaXMubW9kYWxDdHJsLmRpc21pc3Moc2VsZWN0aW9uRGF0YSk7IC8vRGlzbWlzcyB0aGUgbW9kYWwgd2l0aCBkYXRhXG4gICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHNldEFjdGl2ZUNhdGVnb3J5U2xpZGUoKVxuICAgIHtcbiAgXG4gICAgIGF3YWl0IHRoaXMuc2xpZGVzLmdldEFjdGl2ZUluZGV4KCkudGhlbihpbmRleD0+XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDYXRlZ29yeU5hbWU9dGhpcy5lbW9qaUNhdGVnb3JpZXNbaW5kZXhdLm5hbWU7XG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy5jdXJyZW50Q2F0ZWdvcnlOYW1lKTtcbiAgICAgICAgIGxldCBjYXRlZ29yeURpdj10aGlzLmNhdGVnb3J5Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4uaXRlbShpbmRleCk7IC8vR2UgaXRlbSBhdCB0aGlzIGluZGV4XG4gICAgICAgICB0aGlzLmNhdGVnb3J5Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdD1jYXRlZ29yeURpdi5vZmZzZXRMZWZ0LTIwO1xuICBcbiAgICAgICAgfSk7XG4gICAgXG4gICAgfVxuICBcblxufVxuIl19