Skip to content

Commit

Permalink
Refactor to more clear and declarative way
Browse files Browse the repository at this point in the history
  • Loading branch information
vladminsky committed Apr 6, 2016
1 parent f358a1c commit 7ffe7b9
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 55 deletions.
18 changes: 10 additions & 8 deletions src/spec-transform-apply-ratio.js
Expand Up @@ -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);
}
Expand Down
94 changes: 47 additions & 47 deletions src/spec-transform-auto-layout.js
Expand Up @@ -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);
Expand Down Expand Up @@ -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)) {
Expand All @@ -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;
},

Expand Down

0 comments on commit 7ffe7b9

Please sign in to comment.