/// /// module TF { /* An extension of Plottable.Dataset that knows how to load data from a backend. */ export class Dataset extends Plottable.Dataset { public tag: string; public run: string; private lastLoadTime: number; private lastRequest; private urlGenerator: Function; constructor(tag: string, run: string, urlGenerator: (run: string, tag: string) => string) { super([], {tag: tag, run: run}); this.tag = tag; this.run = run; this.urlGenerator = urlGenerator; } public load = _.debounce(this._load, 10); private _load() { var url = this.urlGenerator(this.tag, this.run); if (this.lastRequest != null) { this.lastRequest.abort(); } this.lastRequest = d3.json(url, (error, json) => { this.lastRequest = null; if (error) { /* tslint:disable */ console.log(error); /* tslint:enable */ throw new Error("Failure loading JSON at url: \"" + url + "\""); } else { this.data(json); } }); } } }