ng2-google-charts
Version:
Google Charts module for Angular 2 and beyond
121 lines • 17.5 kB
JavaScript
import { Directive, EventEmitter, Output, } from '@angular/core';
import * as i0 from "@angular/core";
export class GoogleChartsDataTable {
constructor(opt) {
this.opt = opt;
this.dataTableChanged = new EventEmitter();
if (opt) {
this._setDataTable(opt.dataTable, opt.firstRowIsData);
}
}
send() {
if (this.query === undefined) {
return;
}
this.query.send((queryResponse) => {
this.setDataTable(queryResponse.getDataTable());
if (this.opt.queryCallback) {
this.opt.queryCallback(queryResponse);
}
});
}
init(opt) {
if (opt) {
this.opt = opt;
}
if (this.tid !== undefined) {
// doesn't work, see https://github.com/google/google-visualization-issues/issues/2381
// this.query.abort();
window.clearInterval(this.tid);
this.tid = undefined;
}
if (this.opt.dataSourceUrl) {
this.query = new google.visualization.Query(this.opt.dataSourceUrl);
if (this.opt.query) {
this.query.setQuery(this.opt.query);
}
if (this.opt.timeout !== undefined) {
this.query.setTimeout(this.opt.timeout);
}
if (this.opt.refreshInterval) {
// this.query.setRefreshInterval(this.opt.refreshInterval);
this.tid = window.setInterval(() => {
this.send();
}, this.opt.refreshInterval * 1000);
}
this.send();
}
else {
this.setDataTable(this.opt.dataTable);
}
}
/**
* @returns Underlying google.visualization.DataTable
*/
getDataTable() {
return this.dataTable;
}
setDataTable(dt, firstRowIsData) {
if (firstRowIsData === undefined) {
firstRowIsData = this.opt.firstRowIsData;
}
this._setDataTable(dt, firstRowIsData);
this.dataTableChanged.emit(this.dataTable);
}
_setDataTable(dt, firstRowIsData) {
if (Array.isArray(dt)) {
dt = google.visualization.arrayToDataTable(dt, firstRowIsData);
}
this.dataTable = dt;
this.reformat();
}
/**
* Applies formatters to data columns, if defined
*/
reformat() {
const dt = this.dataTable;
if (dt === undefined) {
return;
}
if (this.opt.formatters === undefined) {
return;
}
for (const formatterConfig of this.opt.formatters) {
let formatter;
if (formatterConfig.type === 'PatternFormat') {
const fmtOptions = formatterConfig.options;
formatter = new google.visualization.PatternFormat(fmtOptions.pattern);
formatter.format(dt, formatterConfig.columns, fmtOptions.dstColumnIndex);
continue;
}
const formatterConstructor = google.visualization[formatterConfig.type];
const formatterOptions = formatterConfig.options;
formatter = new formatterConstructor(formatterOptions);
if (formatterConfig.type === 'ColorFormat' && formatterOptions) {
const fmtOptions = formatterOptions;
if (fmtOptions.ranges) {
for (const range of fmtOptions.ranges) {
if (typeof (range.fromBgColor) !== 'undefined'
&& typeof (range.toBgColor) !== 'undefined') {
formatter.addGradientRange(range.from, range.to, range.color, range.fromBgColor, range.toBgColor);
}
else {
formatter.addRange(range.from, range.to, range.color, range.bgcolor);
}
}
}
}
for (const col of formatterConfig.columns) {
formatter.format(dt, col);
}
}
}
}
GoogleChartsDataTable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.14", ngImport: i0, type: GoogleChartsDataTable, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
GoogleChartsDataTable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.14", type: GoogleChartsDataTable, outputs: { dataTableChanged: "dataTableChanged" }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.14", ngImport: i0, type: GoogleChartsDataTable, decorators: [{
type: Directive
}], ctorParameters: function () { return [{ type: undefined }]; }, propDecorators: { dataTableChanged: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWNoYXJ0cy1kYXRhdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItZ29vZ2xlLWNoYXJ0cy9zcmMvbGliL2dvb2dsZS1jaGFydHMtZGF0YXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNGQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7O0FBR3ZCLE1BQU0sT0FBTyxxQkFBcUI7SUFPaEMsWUFBb0IsR0FBbUM7UUFBbkMsUUFBRyxHQUFILEdBQUcsQ0FBZ0M7UUFGN0MscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHakUsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVPLElBQUk7UUFDVixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQzVCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDaEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDdkM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxJQUFJLENBQUMsR0FBb0M7UUFDOUMsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztTQUNoQjtRQUVELElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDMUIsc0ZBQXNGO1lBQ3RG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dUdBQXJCLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQURqQyxTQUFTOzZGQU1FLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgdmFyIGdvb2dsZTogYW55O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFycm93Rm9ybWF0SW50ZXJmYWNlIHtcbiAgYmFzZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhckZvcm1hdEludGVyZmFjZSB7XG4gIGJhc2U/OiBudW1iZXI7XG4gIGNvbG9yTmVnYXRpdmU/OiBzdHJpbmc7XG4gIGNvbG9yUG9zaXRpdmU/OiBzdHJpbmc7XG4gIGRyYXdaZXJvTGluZT86IGJvb2xlYW47XG4gIG1heD86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyO1xuICBzaG93VmFsdWU/OiBib29sZWFuO1xuICB3aWR0aD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYW5nZUludGVyZmFjZSB7XG4gIGZyb206IG51bWJlciB8IERhdGUgfCBudW1iZXJbXTtcbiAgdG86IG51bWJlciB8IERhdGUgfCBudW1iZXJbXTtcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGJnY29sb3I/OiBzdHJpbmc7XG4gIGZyb21CZ0NvbG9yPzogc3RyaW5nO1xuICB0b0JnQ29sb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JGb3JtYXRJbnRlcmZhY2Uge1xuICByYW5nZXM/OiBSYW5nZUludGVyZmFjZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVGb3JtYXQge1xuICBmb3JtYXRUeXBlPzogc3RyaW5nO1xuICBwYXR0ZXJuPzogc3RyaW5nO1xuICB0aW1lWm9uZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOdW1iZXJGb3JtYXRJbnRlcmZhY2Uge1xuICBkZWNpbWFsU3ltYm9sPzogc3RyaW5nO1xuICBmcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbiAgZ3JvdXBpbmdTeW1ib2w/OiBzdHJpbmc7XG4gIG5lZ2F0aXZlQ29sb3I/OiBzdHJpbmc7XG4gIG5lZ2F0aXZlUGFyZW5zPzogYm9vbGVhbjtcbiAgcGF0dGVybj86IHN0cmluZztcbiAgcHJlZml4Pzogc3RyaW5nO1xuICBzdWZmaXg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF0dGVybkZvcm1hdEludGVyZmFjZSB7XG4gIHBhdHRlcm46IHN0cmluZztcbiAgZHN0Q29sdW1uSW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0dGVySW50ZXJmYWNlIHtcbiAgdHlwZTogc3RyaW5nO1xuICBvcHRpb25zPzogKFxuICAgIEFycm93Rm9ybWF0SW50ZXJmYWNlXG4gICAgfCBCYXJGb3JtYXRJbnRlcmZhY2VcbiAgICB8IENvbG9yRm9ybWF0SW50ZXJmYWNlXG4gICAgfCBEYXRlRm9ybWF0XG4gICAgfCBOdW1iZXJGb3JtYXRJbnRlcmZhY2VcbiAgICB8IFBhdHRlcm5Gb3JtYXRJbnRlcmZhY2VcbiAgKTtcbiAgY29sdW1uczogbnVtYmVyW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR29vZ2xlQ2hhcnRzRGF0YVRhYmxlSW50ZXJmYWNlIHtcbiAgZGF0YVRhYmxlPzogYW55O1xuICBmaXJzdFJvd0lzRGF0YT86IGJvb2xlYW47XG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICBkYXRhU291cmNlVXJsPzogc3RyaW5nO1xuXG4gIC8qKiBSZWZyZXNoIGludGVydmFsLCBpbiBzZWNvbmRzLCB3aGVuIHVzaW5nIHJlbW90ZSBkYXRhIHNvdXJjZS4gKi9cbiAgcmVmcmVzaEludGVydmFsPzogbnVtYmVyO1xuXG4gIC8qKiBUaW1lb3V0IGluIHNlY29uZHMsIHdoZW4gdXNpbmcgcmVtb3RlIGRhdGEgc291cmNlICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLyoqIENhbGxlZCBhZnRlciBxdWVyeSBleGVjdXRlZC4gRGF0YVRhYmxlIGlzIHVwZGF0ZWQgYXV0b21hdGljYWxseS5cbiAgICogQHBhcmFtIHF1ZXJ5UmVzcG9uc2UgZ29vZ2xlLnZpc3VhbGl6YXRpb24uUXVlcnlSZXNwb25zZVxuICAgKi9cbiAgcXVlcnlDYWxsYmFjaz86IChxdWVyeVJlc3BvbnNlOiBhbnkpID0+IGFueTtcblxuICBmb3JtYXR0ZXJzPzogRm9ybWF0dGVySW50ZXJmYWNlW107XG4gIHZpZXc/OiBzdHJpbmcgfCBvYmplY3QgfCBvYmplY3RbXTtcbn1cblxuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIEdvb2dsZUNoYXJ0c0RhdGFUYWJsZSB7XG4gIHByaXZhdGUgZGF0YVRhYmxlOiBhbnk7XG4gIHB1YmxpYyBxdWVyeTogYW55O1xuICBwdWJsaWMgdGlkOiBhbnk7XG5cbiAgQE91dHB1dCgpIGRhdGFUYWJsZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3B0OiBHb29nbGVDaGFydHNEYXRhVGFibGVJbnRlcmZhY2UpIHtcbiAgICBpZiAob3B0KSB7XG4gICAgICB0aGlzLl9zZXREYXRhVGFibGUob3B0LmRhdGFUYWJsZSwgb3B0LmZpcnN0Um93SXNEYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbmQoKSB7XG4gICAgaWYgKHRoaXMucXVlcnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5LnNlbmQoKHF1ZXJ5UmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zZXREYXRhVGFibGUocXVlcnlSZXNwb25zZS5nZXREYXRhVGFibGUoKSk7XG4gICAgICBpZiAodGhpcy5vcHQucXVlcnlDYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9wdC5xdWVyeUNhbGxiYWNrKHF1ZXJ5UmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGluaXQob3B0PzogR29vZ2xlQ2hhcnRzRGF0YVRhYmxlSW50ZXJmYWNlKSB7XG4gICAgaWYgKG9wdCkge1xuICAgICAgdGhpcy5vcHQgPSBvcHQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGRvZXNuJ3Qgd29yaywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvZ29vZ2xlLXZpc3VhbGl6YXRpb24taXNzdWVzL2lzc3Vlcy8yMzgxXG4gICAgICAvLyB0aGlzLnF1ZXJ5LmFib3J0KCk7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnRpZCk7XG4gICAgICB0aGlzLnRpZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHQuZGF0YVNvdXJjZVVybCkge1xuICAgICAgdGhpcy5xdWVyeSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5RdWVyeSh0aGlzLm9wdC5kYXRhU291cmNlVXJsKTtcbiAgICAgIGlmICh0aGlzLm9wdC5xdWVyeSkge1xuICAgICAgICB0aGlzLnF1ZXJ5LnNldFF1ZXJ5KHRoaXMub3B0LnF1ZXJ5KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdC50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5xdWVyeS5zZXRUaW1lb3V0KHRoaXMub3B0LnRpbWVvdXQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0LnJlZnJlc2hJbnRlcnZhbCkge1xuICAgICAgICAvLyB0aGlzLnF1ZXJ5LnNldFJlZnJlc2hJbnRlcnZhbCh0aGlzLm9wdC5yZWZyZXNoSW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLnRpZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZW5kKCk7XG4gICAgICAgIH0sIHRoaXMub3B0LnJlZnJlc2hJbnRlcnZhbCAqIDEwMDApO1xuICAgICAgfVxuICAgICAgdGhpcy5zZW5kKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RGF0YVRhYmxlKHRoaXMub3B0LmRhdGFUYWJsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFVuZGVybHlpbmcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlXG4gICAqL1xuXG4gIHB1YmxpYyBnZXREYXRhVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVRhYmxlO1xuICB9XG5cbiAgcHVibGljIHNldERhdGFUYWJsZShkdDogYW55LCBmaXJzdFJvd0lzRGF0YT86IGJvb2xlYW4pIHtcbiAgICBpZiAoZmlyc3RSb3dJc0RhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlyc3RSb3dJc0RhdGEgPSB0aGlzLm9wdC5maXJzdFJvd0lzRGF0YTtcbiAgICB9XG4gICAgdGhpcy5fc2V0RGF0YVRhYmxlKGR0LCBmaXJzdFJvd0lzRGF0YSk7XG4gICAgdGhpcy5kYXRhVGFibGVDaGFuZ2VkLmVtaXQodGhpcy5kYXRhVGFibGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RGF0YVRhYmxlKGR0OiBhbnksIGZpcnN0Um93SXNEYXRhPzogYm9vbGVhbikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGR0KSkge1xuICAgICAgZHQgPSBnb29nbGUudmlzdWFsaXphdGlvbi5hcnJheVRvRGF0YVRhYmxlKGR0LCBmaXJzdFJvd0lzRGF0YSk7XG4gICAgfVxuICAgIHRoaXMuZGF0YVRhYmxlID0gZHQ7XG4gICAgdGhpcy5yZWZvcm1hdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZm9ybWF0dGVycyB0byBkYXRhIGNvbHVtbnMsIGlmIGRlZmluZWRcbiAgICovXG5cbiAgcHVibGljIHJlZm9ybWF0KCkge1xuICAgIGNvbnN0IGR0ID0gdGhpcy5kYXRhVGFibGU7XG4gICAgaWYgKGR0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHQuZm9ybWF0dGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmb3JtYXR0ZXJDb25maWcgb2YgdGhpcy5vcHQuZm9ybWF0dGVycykge1xuICAgICAgbGV0IGZvcm1hdHRlcjogYW55O1xuICAgICAgaWYgKGZvcm1hdHRlckNvbmZpZy50eXBlID09PSAnUGF0dGVybkZvcm1hdCcpIHtcbiAgICAgICAgY29uc3QgZm10T3B0aW9ucyA9IGZvcm1hdHRlckNvbmZpZy5vcHRpb25zIGFzIFBhdHRlcm5Gb3JtYXRJbnRlcmZhY2U7XG4gICAgICAgIGZvcm1hdHRlciA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5QYXR0ZXJuRm9ybWF0KGZtdE9wdGlvbnMucGF0dGVybik7XG4gICAgICAgIGZvcm1hdHRlci5mb3JtYXQoZHQsIGZvcm1hdHRlckNvbmZpZy5jb2x1bW5zLCBmbXRPcHRpb25zLmRzdENvbHVtbkluZGV4KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdHRlckNvbnN0cnVjdG9yID0gZ29vZ2xlLnZpc3VhbGl6YXRpb25bZm9ybWF0dGVyQ29uZmlnLnR5cGVdO1xuICAgICAgY29uc3QgZm9ybWF0dGVyT3B0aW9ucyA9IGZvcm1hdHRlckNvbmZpZy5vcHRpb25zO1xuICAgICAgZm9ybWF0dGVyID0gbmV3IGZvcm1hdHRlckNvbnN0cnVjdG9yKGZvcm1hdHRlck9wdGlvbnMpO1xuICAgICAgaWYgKGZvcm1hdHRlckNvbmZpZy50eXBlID09PSAnQ29sb3JGb3JtYXQnICYmIGZvcm1hdHRlck9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZm10T3B0aW9ucyA9IGZvcm1hdHRlck9wdGlvbnMgYXMgQ29sb3JGb3JtYXRJbnRlcmZhY2U7XG4gICAgICAgIGlmIChmbXRPcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIGZvciAoY29uc3QgcmFuZ2Ugb2YgZm10T3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHJhbmdlLmZyb21CZ0NvbG9yKSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAmJiB0eXBlb2YgKHJhbmdlLnRvQmdDb2xvcikgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGZvcm1hdHRlci5hZGRHcmFkaWVudFJhbmdlKHJhbmdlLmZyb20sIHJhbmdlLnRvLFxuICAgICAgICAgICAgICAgIHJhbmdlLmNvbG9yLCByYW5nZS5mcm9tQmdDb2xvciwgcmFuZ2UudG9CZ0NvbG9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvcm1hdHRlci5hZGRSYW5nZShyYW5nZS5mcm9tLCByYW5nZS50bywgcmFuZ2UuY29sb3IsIHJhbmdlLmJnY29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGNvbCBvZiBmb3JtYXR0ZXJDb25maWcuY29sdW1ucykge1xuICAgICAgICBmb3JtYXR0ZXIuZm9ybWF0KGR0LCBjb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19