/** * Created by mm28969 on 10/24/16. */ // declare let d3; import * as d3 from "d3"; import {Theme} from "../mmviz-common/index"; import {Layout, createViewModel} from "./layout"; import {LayoutScale} from "./scale"; export function histogramLayoutCreator() { //layout extender return function (dataModel, layoutScale: LayoutScale){ let yMax = d3.max(dataModel.dataArray, function(d) { return d.length; }), xDomain = [dataModel.dataArray[0].x0, dataModel.dataArray[dataModel.dataArray.length - 1].x1], yDomain = [0, yMax], yMinRange; layoutScale.extendDomainX(xDomain).extendDomainY(yDomain); yMinRange = layoutScale.yScale(0); // layouter return function(){ let w, datum, d1, dataArray = [], viewModel: any = createViewModel(), theme: Theme = Theme.getInstance(); d1 = dataModel.dataArray[0]; w = layoutScale.xScale(d1.x1) - layoutScale.xScale(d1.x0); for (let d of dataModel.dataArray) { datum = { key: d.x0 + " - " + d.x1, value: d.length, x: layoutScale.xScale(d.x0), y: layoutScale.yScale(d.length), width: layoutScale.xScale(d.x1) - layoutScale.xScale(d.x0), height: yMinRange - layoutScale.yScale(d.length), color: theme.colors.colorDefault, data: d }; if(dataModel.detailsMap){ datum.details = dataModel.detailsMap(d); } dataArray.push(datum); } viewModel.tickValues = dataModel.binRange; viewModel.xExtent = xDomain; viewModel.yExtent = yDomain; viewModel.dataArray = dataArray; return viewModel; } } }