ng-masonry-layout
Version:
Angular Module for displaying a feed of items in a masonry layout using https://github.com/desandro/masonry
220 lines • 15.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, Output, ElementRef, EventEmitter, PLATFORM_ID, Inject } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
/** @type {?} */
var imagesLoaded;
/** @type {?} */
var masonryConstructor;
var NgxMasonryComponent = /** @class */ (function () {
function NgxMasonryComponent(platformId, _element) {
this.platformId = platformId;
this._element = _element;
this.useImagesLoaded = false;
this.updateLayout = false;
// Outputs
this.layoutComplete = new EventEmitter();
this.removeComplete = new EventEmitter();
}
/**
* @return {?}
*/
NgxMasonryComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
// if (this.useImagesLoaded && imagesLoaded === undefined) {
// imagesLoaded = require('imagesloaded');
// }
var _this = this;
if (isPlatformBrowser(this.platformId) && masonryConstructor === undefined) {
masonryConstructor = require('masonry-layout');
}
// Create masonry options object
if (!this.options) {
this.options = {};
}
// Set default itemSelector
if (!this.options.itemSelector) {
this.options.itemSelector = '[ngxMasonryItem], ngxMasonryItem';
}
if (isPlatformBrowser(this.platformId)) {
// Initialize Masonry
this._msnry = new masonryConstructor(this._element.nativeElement, this.options);
// Bind to events
this._msnry.on('layoutComplete', (/**
* @param {?} items
* @return {?}
*/
function (items) {
_this.layoutComplete.emit(items);
}));
this._msnry.on('removeComplete', (/**
* @param {?} items
* @return {?}
*/
function (items) {
_this.removeComplete.emit(items);
}));
}
};
/**
* @param {?} changes
* @return {?}
*/
NgxMasonryComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
// only update layout if it's not the first change
if (changes.updateLayout) {
if (!changes.updateLayout.firstChange) {
this.layout();
}
}
};
/**
* @return {?}
*/
NgxMasonryComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this._msnry) {
this._msnry.destroy();
}
};
/**
* @return {?}
*/
NgxMasonryComponent.prototype.layout = /**
* @return {?}
*/
function () {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
_this._msnry.layout();
}));
};
/**
* @return {?}
*/
NgxMasonryComponent.prototype.reloadItems = /**
* @return {?}
*/
function () {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
_this._msnry.reloadItems();
}));
};
// public add(element: HTMLElement, prepend: boolean = false) {
// public add(element: HTMLElement, prepend: boolean = false) {
/**
* @param {?} element
* @return {?}
*/
NgxMasonryComponent.prototype.add =
// public add(element: HTMLElement, prepend: boolean = false) {
/**
* @param {?} element
* @return {?}
*/
function (element) {
/** @type {?} */
var isFirstItem = false;
// Check if first item
if (this._msnry.items.length === 0) {
isFirstItem = true;
}
if (this.useImagesLoaded) {
// imagesLoaded(element, (instance: any) => {
// this._element.nativeElement.appendChild(element);
// // Tell Masonry that a child element has been added
// this._msnry.appended(element);
// // layout if first item
// if (isFirstItem) {
// this.layout();
// }
// });
// this._element.nativeElement.removeChild(element);
}
else {
// Tell Masonry that a child element has been added
this._msnry.appended(element);
// layout if first item
if (isFirstItem) {
this.layout();
}
}
};
/**
* @param {?} element
* @return {?}
*/
NgxMasonryComponent.prototype.remove = /**
* @param {?} element
* @return {?}
*/
function (element) {
// Tell Masonry that a child element has been removed
this._msnry.remove(element);
// Layout items
this.layout();
};
NgxMasonryComponent.decorators = [
{ type: Component, args: [{
selector: '[ngx-masonry], ngx-masonry',
template: '<ng-content></ng-content>',
styles: ["\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t}\n\t"]
}] }
];
/** @nocollapse */
NgxMasonryComponent.ctorParameters = function () { return [
{ type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] },
{ type: ElementRef }
]; };
NgxMasonryComponent.propDecorators = {
options: [{ type: Input }],
useImagesLoaded: [{ type: Input }],
updateLayout: [{ type: Input }],
layoutComplete: [{ type: Output }],
removeComplete: [{ type: Output }]
};
return NgxMasonryComponent;
}());
export { NgxMasonryComponent };
if (false) {
/** @type {?} */
NgxMasonryComponent.prototype._msnry;
/** @type {?} */
NgxMasonryComponent.prototype.options;
/** @type {?} */
NgxMasonryComponent.prototype.useImagesLoaded;
/** @type {?} */
NgxMasonryComponent.prototype.updateLayout;
/** @type {?} */
NgxMasonryComponent.prototype.layoutComplete;
/** @type {?} */
NgxMasonryComponent.prototype.removeComplete;
/**
* @type {?}
* @private
*/
NgxMasonryComponent.prototype.platformId;
/**
* @type {?}
* @private
*/
NgxMasonryComponent.prototype._element;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hc29ucnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctbWFzb25yeS1sYXlvdXQvIiwic291cmNlcyI6WyJsaWIvbmd4LW1hc29ucnkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUtULEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztJQUdoRCxZQUFpQjs7SUFDakIsa0JBQXVCO0FBSTNCO0lBWUUsNkJBQXlDLFVBQWUsRUFBVSxRQUFvQjtRQUE3QyxlQUFVLEdBQVYsVUFBVSxDQUFLO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQU10RSxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUN4QyxpQkFBWSxHQUFZLEtBQUssQ0FBQzs7UUFHN0IsbUJBQWMsR0FBd0IsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUNoRSxtQkFBYyxHQUF3QixJQUFJLFlBQVksRUFBUyxDQUFDO0lBWGUsQ0FBQzs7OztJQWExRixzQ0FBUTs7O0lBQVI7UUFDRSw0REFBNEQ7UUFDNUQsNENBQTRDO1FBQzVDLElBQUk7UUFITixpQkErQkM7UUExQkMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFO1lBQzFFLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1NBQ25CO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxrQ0FBa0MsQ0FBQztTQUNoRTtRQUVELElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RDLHFCQUFxQjtZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWhGLGlCQUFpQjtZQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0I7Ozs7WUFBRSxVQUFDLEtBQVU7Z0JBQzFDLEtBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLENBQUMsRUFBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCOzs7O1lBQUUsVUFBQyxLQUFVO2dCQUMxQyxLQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxDQUFDLEVBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7Ozs7SUFFRCx5Q0FBVzs7OztJQUFYLFVBQVksT0FBc0I7UUFDaEMsa0RBQWtEO1FBQ2xELElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTtZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNmO1NBQ0Y7SUFDSCxDQUFDOzs7O0lBRUQseUNBQVc7OztJQUFYO1FBQ0UsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7Ozs7SUFFTSxvQ0FBTTs7O0lBQWI7UUFBQSxpQkFJQztRQUhDLFVBQVU7OztRQUFDO1lBQ1QsS0FBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFFTSx5Q0FBVzs7O0lBQWxCO1FBQUEsaUJBSUM7UUFIQyxVQUFVOzs7UUFBQztZQUNULEtBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsK0RBQStEOzs7Ozs7SUFDeEQsaUNBQUc7Ozs7OztJQUFWLFVBQVcsT0FBb0I7O1lBQ3pCLFdBQVcsR0FBRyxLQUFLO1FBRXZCLHNCQUFzQjtRQUN0QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbEMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUNwQjtRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4Qiw2Q0FBNkM7WUFDN0Msc0RBQXNEO1lBRXRELHdEQUF3RDtZQUN4RCxtQ0FBbUM7WUFFbkMsNEJBQTRCO1lBQzVCLHVCQUF1QjtZQUN2QixxQkFBcUI7WUFDckIsTUFBTTtZQUNOLE1BQU07WUFFTixvREFBb0Q7U0FDckQ7YUFBTTtZQUNMLG1EQUFtRDtZQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU5Qix1QkFBdUI7WUFDdkIsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ2Y7U0FDRjtJQUNILENBQUM7Ozs7O0lBRU0sb0NBQU07Ozs7SUFBYixVQUFjLE9BQW9CO1FBQ2hDLHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1QixlQUFlO1FBQ2YsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7O2dCQTdIRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsUUFBUSxFQUFFLDJCQUEyQjs2QkFFbkMsaURBSUY7aUJBRUQ7Ozs7Z0RBRWMsTUFBTSxTQUFDLFdBQVc7Z0JBekIvQixVQUFVOzs7MEJBOEJULEtBQUs7a0NBQ0wsS0FBSzsrQkFDTCxLQUFLO2lDQUdMLE1BQU07aUNBQ04sTUFBTTs7SUF1R1QsMEJBQUM7Q0FBQSxBQTlIRCxJQThIQztTQW5IWSxtQkFBbUI7OztJQUc5QixxQ0FBbUI7O0lBR25CLHNDQUEyQzs7SUFDM0MsOENBQWlEOztJQUNqRCwyQ0FBdUM7O0lBR3ZDLDZDQUEwRTs7SUFDMUUsNkNBQTBFOzs7OztJQVg5RCx5Q0FBNEM7Ozs7O0lBQUUsdUNBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIFBMQVRGT1JNX0lELFxuICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmRlY2xhcmUgdmFyIHJlcXVpcmU6IGFueTtcbmxldCBpbWFnZXNMb2FkZWQ6IGFueTtcbmxldCBtYXNvbnJ5Q29uc3RydWN0b3I6IGFueTtcblxuaW1wb3J0IHsgTmd4TWFzb25yeU9wdGlvbnMgfSBmcm9tICcuL25neC1tYXNvbnJ5LW9wdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbbmd4LW1hc29ucnldLCBuZ3gtbWFzb25yeScsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIHN0eWxlczogW1xuICAgIGBcblx0XHQ6aG9zdCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHR9XG5cdGBcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hNYXNvbnJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogYW55LCBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmKSB7fVxuXG4gIHB1YmxpYyBfbXNucnk6IGFueTtcblxuICAvLyBJbnB1dHNcbiAgQElucHV0KCkgcHVibGljIG9wdGlvbnM6IE5neE1hc29ucnlPcHRpb25zO1xuICBASW5wdXQoKSBwdWJsaWMgdXNlSW1hZ2VzTG9hZGVkOiBCb29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVwZGF0ZUxheW91dDogQm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE91dHB1dHNcbiAgQE91dHB1dCgpIGxheW91dENvbXBsZXRlOiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZUNvbXBsZXRlOiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBpZiAodGhpcy51c2VJbWFnZXNMb2FkZWQgJiYgaW1hZ2VzTG9hZGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyAgIGltYWdlc0xvYWRlZCA9IHJlcXVpcmUoJ2ltYWdlc2xvYWRlZCcpO1xuICAgIC8vIH1cblxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpICYmIG1hc29ucnlDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXNvbnJ5Q29uc3RydWN0b3IgPSByZXF1aXJlKCdtYXNvbnJ5LWxheW91dCcpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBtYXNvbnJ5IG9wdGlvbnMgb2JqZWN0XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IGl0ZW1TZWxlY3RvclxuICAgIGlmICghdGhpcy5vcHRpb25zLml0ZW1TZWxlY3Rvcikge1xuICAgICAgdGhpcy5vcHRpb25zLml0ZW1TZWxlY3RvciA9ICdbbmd4TWFzb25yeUl0ZW1dLCBuZ3hNYXNvbnJ5SXRlbSc7XG4gICAgfVxuXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgTWFzb25yeVxuICAgICAgdGhpcy5fbXNucnkgPSBuZXcgbWFzb25yeUNvbnN0cnVjdG9yKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5vcHRpb25zKTtcblxuICAgICAgLy8gQmluZCB0byBldmVudHNcbiAgICAgIHRoaXMuX21zbnJ5Lm9uKCdsYXlvdXRDb21wbGV0ZScsIChpdGVtczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubGF5b3V0Q29tcGxldGUuZW1pdChpdGVtcyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX21zbnJ5Lm9uKCdyZW1vdmVDb21wbGV0ZScsIChpdGVtczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ29tcGxldGUuZW1pdChpdGVtcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gb25seSB1cGRhdGUgbGF5b3V0IGlmIGl0J3Mgbm90IHRoZSBmaXJzdCBjaGFuZ2VcbiAgICBpZiAoY2hhbmdlcy51cGRhdGVMYXlvdXQpIHtcbiAgICAgIGlmICghY2hhbmdlcy51cGRhdGVMYXlvdXQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5sYXlvdXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fbXNucnkpIHtcbiAgICAgIHRoaXMuX21zbnJ5LmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbGF5b3V0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fbXNucnkubGF5b3V0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkSXRlbXMoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9tc25yeS5yZWxvYWRJdGVtcygpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gcHVibGljIGFkZChlbGVtZW50OiBIVE1MRWxlbWVudCwgcHJlcGVuZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHB1YmxpYyBhZGQoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBsZXQgaXNGaXJzdEl0ZW0gPSBmYWxzZTtcblxuICAgIC8vIENoZWNrIGlmIGZpcnN0IGl0ZW1cbiAgICBpZiAodGhpcy5fbXNucnkuaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpc0ZpcnN0SXRlbSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlSW1hZ2VzTG9hZGVkKSB7XG4gICAgICAvLyBpbWFnZXNMb2FkZWQoZWxlbWVudCwgKGluc3RhbmNlOiBhbnkpID0+IHtcbiAgICAgIC8vICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXG4gICAgICAvLyAgIC8vIFRlbGwgTWFzb25yeSB0aGF0IGEgY2hpbGQgZWxlbWVudCBoYXMgYmVlbiBhZGRlZFxuICAgICAgLy8gICB0aGlzLl9tc25yeS5hcHBlbmRlZChlbGVtZW50KTtcblxuICAgICAgLy8gICAvLyBsYXlvdXQgaWYgZmlyc3QgaXRlbVxuICAgICAgLy8gICBpZiAoaXNGaXJzdEl0ZW0pIHtcbiAgICAgIC8vICAgICB0aGlzLmxheW91dCgpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcblxuICAgICAgLy8gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUZWxsIE1hc29ucnkgdGhhdCBhIGNoaWxkIGVsZW1lbnQgaGFzIGJlZW4gYWRkZWRcbiAgICAgIHRoaXMuX21zbnJ5LmFwcGVuZGVkKGVsZW1lbnQpO1xuXG4gICAgICAvLyBsYXlvdXQgaWYgZmlyc3QgaXRlbVxuICAgICAgaWYgKGlzRmlyc3RJdGVtKSB7XG4gICAgICAgIHRoaXMubGF5b3V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZShlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIC8vIFRlbGwgTWFzb25yeSB0aGF0IGEgY2hpbGQgZWxlbWVudCBoYXMgYmVlbiByZW1vdmVkXG4gICAgdGhpcy5fbXNucnkucmVtb3ZlKGVsZW1lbnQpO1xuXG4gICAgLy8gTGF5b3V0IGl0ZW1zXG4gICAgdGhpcy5sYXlvdXQoKTtcbiAgfVxufVxuIl19