dist/famous-flex.js
function _contextResolveSize(contextNodeOrId, parentSize) {
        var contextNode = this._nodesById ? _contextGet.call(this, contextNodeOrId) : contextNodeOrId;
        var resolveSize = this._pool.resolveSize;
        if (!contextNode) {
            resolveSize[0] = 0;
            resolveSize[1] = 0;
            return resolveSize;
        }

        // Get in use size
        var renderNode = contextNode.renderNode;
        var size = renderNode.getSize();
        if (!size) {
            return parentSize;
        }

        // Check if true-size is used and it must be reavaluated.
        // This particular piece of code specifically handles true-size Surfaces in famo.us.
        // It contains portions that ensure that the true-size of a Surface is re-evaluated
        // and also workaround code that backs up the size of a Surface, so that when the surface
        // is re-added to the DOM (e.g. when scrolling) it doesn't temporarily have a size of 0.
        var configSize = _resolveConfigSize(renderNode);
        if (configSize && ((configSize.size[0] === true) || (configSize.size[1] === true))) {
            contextNode.usesTrueSize = true;
            if (configSize.renderNode instanceof Surface) {
                var backupSize = configSize.renderNode._backupSize;
                if (configSize.renderNode._contentDirty || configSize.renderNode._trueSizeCheck) {
                  this._trueSizeRequested = true;
                  contextNode.trueSizeRequested = true;
                }
                if (configSize.renderNode._trueSizeCheck) {

                    // Fix for true-size renderables. When true-size is used, the size
                    // is incorrect for one render-cycle due to the fact that Surface.commit
                    // updates the content after asking the DOM for the offsetHeight/offsetWidth.
                    // The code below backs the size up, and re-uses that when this scenario
                    // occurs.
                    if (backupSize && (configSize.size !== size)) {
                        var newWidth = (configSize.size[0] === true) ? Math.max(backupSize[0], size[0]) : size[0];
                        var newHeight = (configSize.size[1] === true) ? Math.max(backupSize[1], size[1]) : size[1];
                        backupSize[0] = newWidth;
                        backupSize[1] = newHeight;
                        size = backupSize;
                        configSize.renderNode._backupSize = undefined;
                        backupSize = undefined;
                    }
                }
                if (this._reevalTrueSize || (backupSize && ((backupSize[0] !== size[0]) || (backupSize[1] !== size[1])))) {
                    configSize.renderNode._trueSizeCheck = true; // force request of true-size from DOM
                    configSize.renderNode._sizeDirty = true;
                    this._trueSizeRequested = true;
                }

                // Backup the size of the node
                if (!backupSize) {
                    configSize.renderNode._backupSize = [0, 0];
                    backupSize = configSize.renderNode._backupSize;
                }
                backupSize[0] = size[0];
                backupSize[1] = size[1];
            }

            // Ensure re-layout when a child layout-controller is using true-size and it
            // has ben changed.
            else if (configSize.renderNode._nodes) {
                if (this._reevalTrueSize || configSize.renderNode._nodes._trueSizeRequested) {
                    contextNode.trueSizeRequested = true;
                    this._trueSizeRequested = true;
                }
            }
        }

        // Resolve 'undefined' to parent-size and true to 0
        if ((size[0] === undefined) || (size[0] === true) || (size[1] === undefined) || (size[1] === true)) {
            resolveSize[0] = size[0];
            resolveSize[1] = size[1];
            size = resolveSize;
            if (size[0] === undefined) {
                size[0] = parentSize[0];
            }
            else if (size[0] === true) {
                size[0] = 0;
                this._trueSizeRequested = true;
                contextNode.trueSizeRequested = true;
            }
            if (size[1] === undefined) {
                size[1] = parentSize[1];
            }
            else if (size[1] === true) {
                size[1] = 0;
                this._trueSizeRequested = true;
                contextNode.trueSizeRequested = true;
            }
        }
        return size;
    }
function _contextResolveSize(contextNodeOrId, parentSize) {
        var contextNode = this._nodesById ? _contextGet.call(this, contextNodeOrId) : contextNodeOrId;
        var resolveSize = this._pool.resolveSize;
        if (!contextNode) {
            resolveSize[0] = 0;
            resolveSize[1] = 0;
            return resolveSize;
        }

        // Get in use size
        var renderNode = contextNode.renderNode;
        var size = renderNode.getSize();
        if (!size) {
            return parentSize;
        }

        // Check if true-size is used and it must be reavaluated.
        // This particular piece of code specifically handles true-size Surfaces in famo.us.
        // It contains portions that ensure that the true-size of a Surface is re-evaluated
        // and also workaround code that backs up the size of a Surface, so that when the surface
        // is re-added to the DOM (e.g. when scrolling) it doesn't temporarily have a size of 0.
        var configSize = _resolveConfigSize(renderNode);
        if (configSize && ((configSize.size[0] === true) || (configSize.size[1] === true))) {
            contextNode.usesTrueSize = true;
            if (configSize.renderNode instanceof Surface) {
                var backupSize = configSize.renderNode._backupSize;
                if (configSize.renderNode._contentDirty || configSize.renderNode._trueSizeCheck) {
                  this._trueSizeRequested = true;
                  contextNode.trueSizeRequested = true;
                }
                if (configSize.renderNode._trueSizeCheck) {

                    // Fix for true-size renderables. When true-size is used, the size
                    // is incorrect for one render-cycle due to the fact that Surface.commit
                    // updates the content after asking the DOM for the offsetHeight/offsetWidth.
                    // The code below backs the size up, and re-uses that when this scenario
                    // occurs.
                    if (backupSize && (configSize.size !== size)) {
                        var newWidth = (configSize.size[0] === true) ? Math.max(backupSize[0], size[0]) : size[0];
                        var newHeight = (configSize.size[1] === true) ? Math.max(backupSize[1], size[1]) : size[1];
                        backupSize[0] = newWidth;
                        backupSize[1] = newHeight;
                        size = backupSize;
                        configSize.renderNode._backupSize = undefined;
                        backupSize = undefined;
                    }
                }
                if (this._reevalTrueSize || (backupSize && ((backupSize[0] !== size[0]) || (backupSize[1] !== size[1])))) {
                    configSize.renderNode._trueSizeCheck = true; // force request of true-size from DOM
                    configSize.renderNode._sizeDirty = true;
                    this._trueSizeRequested = true;
                }

                // Backup the size of the node
                if (!backupSize) {
                    configSize.renderNode._backupSize = [0, 0];
                    backupSize = configSize.renderNode._backupSize;
                }
                backupSize[0] = size[0];
                backupSize[1] = size[1];
            }

            // Ensure re-layout when a child layout-controller is using true-size and it
            // has ben changed.
            else if (configSize.renderNode._nodes) {
                if (this._reevalTrueSize || configSize.renderNode._nodes._trueSizeRequested) {
                    contextNode.trueSizeRequested = true;
                    this._trueSizeRequested = true;
                }
            }
        }

        // Resolve 'undefined' to parent-size and true to 0
        if ((size[0] === undefined) || (size[0] === true) || (size[1] === undefined) || (size[1] === true)) {
            resolveSize[0] = size[0];
            resolveSize[1] = size[1];
            size = resolveSize;
            if (size[0] === undefined) {
                size[0] = parentSize[0];
            }
            else if (size[0] === true) {
                size[0] = 0;
                this._trueSizeRequested = true;
                contextNode.trueSizeRequested = true;
            }
            if (size[1] === undefined) {
                size[1] = parentSize[1];
            }
            else if (size[1] === true) {
                size[1] = 0;
                this._trueSizeRequested = true;
                contextNode.trueSizeRequested = true;
            }
        }
        return size;
    }
Resolve the size of the layout-node from the renderable itsself.