make children always present in the layout function

This commit is contained in:
Christopher Chedeau
2014-04-18 09:54:58 -07:00
parent 99c0eb7b6b
commit 28d2e3c352

View File

@@ -8,14 +8,19 @@ function computeLayout(node) {
top: 0,
left: 0
};
(node.children || []).forEach(fillNodes);
if (!node.children) {
node.children = [];
}
node.children.forEach(fillNodes);
}
function extractNodes(node) {
var layout = node.layout;
delete node.layout;
if (node.children) {
if (node.children.length > 0) {
layout.children = node.children.map(extractNodes);
} else {
delete node.children;
}
return layout;
}
@@ -116,12 +121,9 @@ function computeLayout(node) {
return value === undefined;
}
var emptyArray = [];
function layoutNode(node) {
var mainAxis = getFlexDirection(node);
var crossAxis = mainAxis === 'row' ? 'column' : 'row';
var children = node.children || emptyArray;
var mainDimInStyle = dim[mainAxis] in node.style;
if (isUndefined(node.layout[dim[mainAxis]]) && mainDimInStyle) {
@@ -135,7 +137,7 @@ function computeLayout(node) {
var mainContentDim = 0;
var flexibleChildrenCount = 0;
children.forEach(function(child) {
node.children.forEach(function(child) {
if (isUndefined(node.layout[dim[mainAxis]]) || !getFlex(child)) {
layoutNode(child);
mainContentDim += getDimWithMargin(child, mainAxis);
@@ -154,7 +156,7 @@ function computeLayout(node) {
if (flexibleChildrenCount) {
var flexibleMainDim = remainingMainDim / flexibleChildrenCount;
children.forEach(function(child) {
node.children.forEach(function(child) {
if (getFlex(child)) {
child.layout[dim[mainAxis]] = flexibleMainDim;
layoutNode(child);
@@ -169,9 +171,9 @@ function computeLayout(node) {
} else if (justifyContent === 'center') {
leadingMainDim = remainingMainDim / 2;
} else if (justifyContent === 'space-between') {
betweenMainDim = remainingMainDim / (children.length - 1);
betweenMainDim = remainingMainDim / (node.children.length - 1);
} else if (justifyContent === 'space-around') {
betweenMainDim = remainingMainDim / children.length;
betweenMainDim = remainingMainDim / node.children.length;
leadingMainDim = betweenMainDim / 2;
}
}
@@ -179,7 +181,7 @@ function computeLayout(node) {
var crossDim = 0;
var mainPos = getPadding(node, leading[mainAxis]) + leadingMainDim;
children.forEach(function(child) {
node.children.forEach(function(child) {
child.layout[pos[mainAxis]] += mainPos;
mainPos += getDimWithMargin(child, mainAxis) + betweenMainDim;
@@ -201,7 +203,7 @@ function computeLayout(node) {
node.layout[dim[crossAxis]] = Math.max(crossDim, 0);
}
children.forEach(function(child) {
node.children.forEach(function(child) {
var alignItem = getAlignItem(node, child);
var remainingCrossDim = node.layout[dim[crossAxis]] -
getDimWithMargin(child, crossAxis) -