diff --git a/src/spec-transform-apply-ratio.js b/src/spec-transform-apply-ratio.js index 0771354e2..aebe46c98 100644 --- a/src/spec-transform-apply-ratio.js +++ b/src/spec-transform-apply-ratio.js @@ -76,21 +76,23 @@ export class SpecTransformApplyRatio { traverse(spec.unit, enterIterator, (() => 0)); - var toScaleConfig = ((scaleName) => spec.scales[scaleName]); - var isValidScale = ((scale) => ((scale.source === '/') && !scale.ratio && !scale.fitToFrameByDims)); - var isOrdinalScale = ((scale) => { - return scale.type === 'ordinal' || (scale.type === 'period' && !scale.period); + var isValidScale = ((scaleName) => { + var scale = spec.scales[scaleName]; + return ((scale.source === '/') && !scale.ratio && !scale.fitToFrameByDims); }); - var realXs = xs.map(toScaleConfig).filter(isValidScale); - var realYs = ys.map(toScaleConfig).filter(isValidScale); + var isDiscreteScale = ((scaleName) => (chartInstance.getScaleInfo(scaleName).discrete)); + + var realXs = xs.filter(isValidScale); + var realYs = ys.filter(isValidScale); var xyProd = 2; if ([realXs.length, realYs.length].some(l => l === xyProd)) { let exDim = ((s) => s.dim); let scalesIterator = ((s, i, list) => (s.fitToFrameByDims = list.slice(0, i).map(exDim))); - let tryApplyRatioToScales = (axis, scalesRef) => { - if (scalesRef.filter(isOrdinalScale).length === xyProd) { + let tryApplyRatioToScales = (axis, scalesNames) => { + if (scalesNames.filter(isDiscreteScale).length === xyProd) { + var scalesRef = scalesNames.map((s) => spec.scales[s]); scalesRef.forEach(scalesIterator); scalesRef[0].ratio = utils.generateRatioFunction(axis, scalesRef.map(exDim), chartInstance); } diff --git a/src/spec-transform-auto-layout.js b/src/spec-transform-auto-layout.js index 8da4d04f5..8936da19a 100644 --- a/src/spec-transform-auto-layout.js +++ b/src/spec-transform-auto-layout.js @@ -439,18 +439,7 @@ var SpecEngineTypeMap = { return unit; } - if (!unit.guide.hasOwnProperty('showGridLines')) { - unit.guide.showGridLines = selectorPredicates.isLeafParent ? 'xy' : ''; - } - var isFacetUnit = (!selectorPredicates.isLeaf && !selectorPredicates.isLeafParent); - if (isFacetUnit) { - // unit is a facet! - unit.guide.x.cssClass += ' facet-axis'; - unit.guide.x.avoidCollisions = true; - unit.guide.y.cssClass += ' facet-axis'; - unit.guide.y.avoidCollisions = false; - } var dimX = meta.dimension(unit.x); var dimY = meta.dimension(unit.y); @@ -494,18 +483,12 @@ var SpecEngineTypeMap = { var isXVertical = !isFacetUnit && (Boolean(dimX.dimType) && dimX.dimType !== 'measure'); - unit.guide.x.padding = xIsEmptyAxis ? 0 : xAxisPadding; - unit.guide.y.padding = yIsEmptyAxis ? 0 : yAxisPadding; - unit.guide.x.rotate = isXVertical ? 90 : 0; unit.guide.x.textAnchor = isXVertical ? 'start' : unit.guide.x.textAnchor; var xTickWidth = xIsEmptyAxis ? 0 : settings.xTickWidth; var yTickWidth = yIsEmptyAxis ? 0 : settings.yTickWidth; - unit.guide.x.tickFormatWordWrapLimit = settings.xAxisTickLabelLimit; - unit.guide.y.tickFormatWordWrapLimit = settings.yAxisTickLabelLimit; - var maxXTickH = isXVertical ? maxXTickSize.width : maxXTickSize.height; if (!isXContinues && (maxXTickH > settings.xAxisTickLabelLimit)) { @@ -528,54 +511,71 @@ var SpecEngineTypeMap = { var xAxisPad = xTickWidth + maxXTickH; var yAxisPad = yTickWidth + (Math.cos((unit.guide.y.rotate / 180) * Math.PI) * maxYTickW); - var xFontLabelHeight = settings.xFontLabelHeight; - var yFontLabelHeight = settings.yFontLabelHeight; - - var distToXAxisLabel = settings.distToXAxisLabel; - var distToYAxisLabel = settings.distToYAxisLabel; - var xTickLabelW = Math.min( settings.xAxisTickLabelLimit, (isXVertical ? maxXTickSize.height : maxXTickSize.width) ); - unit.guide.x.density = xTickLabelW + xDensityPadding * 2; var guessLinesCount = Math.ceil(maxYTickSize.width / settings.yAxisTickLabelLimit); var koeffLinesCount = Math.min(guessLinesCount, settings.yTickWordWrapLinesLimit); var yTickLabelH = Math.min(settings.yAxisTickLabelLimit, koeffLinesCount * maxYTickSize.height); - unit.guide.y.density = yTickLabelH + yDensityPadding * 2; - unit.guide.x.label.padding = (unit.guide.x.label.text) ? (xAxisPad + distToXAxisLabel) : 0; - unit.guide.y.label.padding = (unit.guide.y.label.text) ? (yAxisPad + distToYAxisLabel) : 0; + unit.guide.x.label.padding = (unit.guide.x.label.text) ? (xAxisPad + settings.distToXAxisLabel) : 0; + unit.guide.y.label.padding = (unit.guide.y.label.text) ? (yAxisPad + settings.distToYAxisLabel) : 0; var xLabelPadding = (unit.guide.x.label.text) ? - (unit.guide.x.label.padding + xFontLabelHeight) : + (unit.guide.x.label.padding + settings.xFontLabelHeight) : (xAxisPad); var yLabelPadding = (unit.guide.y.label.text) ? - (unit.guide.y.label.padding + yFontLabelHeight) : + (unit.guide.y.label.padding + settings.yFontLabelHeight) : (yAxisPad); - unit.guide.padding.b = ((unit.guide.x.hide) ? - (0) : - (xAxisPadding + xLabelPadding)); - unit.guide.padding.l = ((unit.guide.y.hide) ? - (0) : - (yAxisPadding + yLabelPadding)); - - unit.guide.x.tickFontHeight = maxXTickSize.height; - unit.guide.y.tickFontHeight = maxYTickSize.height; - - unit.guide.x.$minimalDomain = xValues.length; - unit.guide.y.$minimalDomain = yValues.length; - - unit.guide.x.$maxTickTextW = maxXTickSize.width; - unit.guide.x.$maxTickTextH = maxXTickSize.height; - - unit.guide.y.$maxTickTextW = maxYTickSize.width; - unit.guide.y.$maxTickTextH = maxYTickSize.height; + unit.guide = _.extend( + (unit.guide), + { + showGridLines: ((unit.guide.hasOwnProperty('showGridLines')) ? + (unit.guide.showGridLines) : + (selectorPredicates.isLeafParent ? 'xy' : '')) + }); + + unit.guide.padding = _.extend( + (unit.guide.padding), + { + b: ((unit.guide.x.hide) ? (0) : (xAxisPadding + xLabelPadding)), + l: ((unit.guide.y.hide) ? (0) : (yAxisPadding + yLabelPadding)) + }); + + unit.guide.x = _.extend( + (unit.guide.x), + { + cssClass: (isFacetUnit) ? (unit.guide.x.cssClass + ' facet-axis') : (unit.guide.x.cssClass), + avoidCollisions: (isFacetUnit) ? true : (unit.guide.x.avoidCollisions), + tickFormatWordWrapLimit: settings.xAxisTickLabelLimit, + density: (xTickLabelW + xDensityPadding * 2), + padding: (xIsEmptyAxis ? 0 : xAxisPadding), + tickFontHeight: maxXTickSize.height, + $minimalDomain: xValues.length, + $maxTickTextW: maxXTickSize.width, + $maxTickTextH: maxXTickSize.height + }); + + unit.guide.y = _.extend( + (unit.guide.y), + { + cssClass: (isFacetUnit) ? (unit.guide.y.cssClass + ' facet-axis') : (unit.guide.y.cssClass), + avoidCollisions: (isFacetUnit) ? false : (unit.guide.y.avoidCollisions), + tickFormatWordWrapLimit: settings.yAxisTickLabelLimit, + density: (yTickLabelH + yDensityPadding * 2), + padding: (yIsEmptyAxis ? 0 : yAxisPadding), + tickFontHeight: maxYTickSize.height, + $minimalDomain: yValues.length, + $maxTickTextW: maxYTickSize.width, + $maxTickTextH: maxYTickSize.height + }); return unit; }); + return spec; },