UNPKG

topola

Version:

Topola – online genealogy visualization

129 lines (128 loc) 4.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createChart = createChart; var d3_selection_1 = require("d3-selection"); var api_1 = require("./api"); var data_1 = require("./data"); var DEFAULT_SVG_SELECTOR = 'svg'; function createChartOptions(chartOptions, renderOptions, options) { var data = new data_1.JsonDataProvider(chartOptions.json); var indiHrefFunc = chartOptions.indiUrl ? function (id) { return chartOptions.indiUrl.replace('${id}', id); } : undefined; var famHrefFunc = chartOptions.famUrl ? function (id) { return chartOptions.famUrl.replace('${id}', id); } : undefined; // If startIndi nor startFam is provided, select the first indi in the data. if (!renderOptions.startIndi && !renderOptions.startFam) { renderOptions.startIndi = chartOptions.json.indis[0].id; } var animate = !options.initialRender && chartOptions.animate; var rendererOptions = { data: data }; if (indiHrefFunc) { rendererOptions.indiHrefFunc = indiHrefFunc; } if (famHrefFunc) { rendererOptions.famHrefFunc = famHrefFunc; } if (chartOptions.indiCallback) { rendererOptions.indiCallback = chartOptions.indiCallback; } if (chartOptions.famCallback) { rendererOptions.famCallback = chartOptions.famCallback; } if (chartOptions.horizontal !== undefined) { rendererOptions.horizontal = chartOptions.horizontal; } if (chartOptions.colors !== undefined) { rendererOptions.colors = chartOptions.colors; } if (animate !== undefined) { rendererOptions.animate = animate; } if (chartOptions.locale) { rendererOptions.locale = chartOptions.locale; } var renderer = new chartOptions.renderer(rendererOptions); var resultChartOptions = { data: data, renderer: renderer, svgSelector: chartOptions.svgSelector || DEFAULT_SVG_SELECTOR, }; if (renderOptions.startIndi) { resultChartOptions.startIndi = renderOptions.startIndi; } if (renderOptions.startFam) { resultChartOptions.startFam = renderOptions.startFam; } if (chartOptions.horizontal !== undefined) { resultChartOptions.horizontal = chartOptions.horizontal; } if (renderOptions.baseGeneration !== undefined) { resultChartOptions.baseGeneration = renderOptions.baseGeneration; } if (animate !== undefined) { resultChartOptions.animate = animate; } if (chartOptions.expanders !== undefined) { resultChartOptions.expanders = chartOptions.expanders; } return resultChartOptions; } var SimpleChartHandle = /** @class */ (function () { function SimpleChartHandle(options) { this.options = options; this.initialRender = true; this.collapsedIndi = new Set(); this.collapsedSpouse = new Set(); this.collapsedFamily = new Set(); } SimpleChartHandle.prototype.render = function (renderOptions) { var _this = this; if (renderOptions === void 0) { renderOptions = {}; } this.chartOptions = createChartOptions(this.options, renderOptions, { initialRender: this.initialRender, }); this.chartOptions.collapsedFamily = this.collapsedFamily; this.chartOptions.collapsedIndi = this.collapsedIndi; this.chartOptions.collapsedSpouse = this.collapsedSpouse; this.chartOptions.expanderCallback = function (id, direction) { return _this.expanderCallback(id, direction, renderOptions); }; this.initialRender = false; var chart = new this.options.chartType(this.chartOptions); var info = chart.render(); if (this.options.updateSvgSize !== false) { (0, d3_selection_1.select)(this.chartOptions.svgSelector) .attr('width', info.size[0]) .attr('height', info.size[1]); } return info; }; SimpleChartHandle.prototype.expanderCallback = function (id, direction, renderOptions) { var set = direction === api_1.ExpanderDirection.FAMILY ? this.collapsedFamily : direction === api_1.ExpanderDirection.INDI ? this.collapsedIndi : this.collapsedSpouse; if (set.has(id)) { set.delete(id); } else { set.add(id); } this.render(renderOptions); }; /** * Updates the chart input data. * This is useful when the data is dynamically loaded and a different subset * of data will be displayed. */ SimpleChartHandle.prototype.setData = function (json) { this.options.json = json; }; return SimpleChartHandle; }()); function createChart(options) { return new SimpleChartHandle(options); }