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