dist/famous-flex.js
function _calcScrollToOffset(size, scrollOffset) {
        var scrollToRenderNode = this._scroll.scrollToRenderNode || this._scroll.ensureVisibleRenderNode;
        if (!scrollToRenderNode) {
            return;
        }

        // 1. When boundary is reached, stop scrolling in that direction
        if ((this._scroll.boundsReached === Bounds.BOTH) ||
            (!this._scroll.scrollToDirection && (this._scroll.boundsReached === Bounds.PREV)) ||
            (this._scroll.scrollToDirection && (this._scroll.boundsReached === Bounds.NEXT))) {
            return;
        }

        // 2. Find the node to scroll to
        var foundNode;
        var scrollToOffset = 0;
        var node = this._nodes.getStartEnumNode(true);
        var count = 0;
        while (node) {
            count++;
            if (!node._invalidated || (node.scrollLength === undefined)) {
                break;
            }
            if (this.options.alignment) {
                scrollToOffset -= node.scrollLength;
            }
            if (node.renderNode === scrollToRenderNode) {
                foundNode = node;
                break;
            }
            if (!this.options.alignment) {
                scrollToOffset -= node.scrollLength;
            }
            node = node._next;
        }
        if (!foundNode) {
            scrollToOffset = 0;
            node = this._nodes.getStartEnumNode(false);
            while (node) {
                if (!node._invalidated || (node.scrollLength === undefined)) {
                   break;
                }
                if (!this.options.alignment) {
                    scrollToOffset += node.scrollLength;
                }
                if (node.renderNode === scrollToRenderNode) {
                    foundNode = node;
                    break;
                }
                if (this.options.alignment) {
                    scrollToOffset += node.scrollLength;
                }
                node = node._prev;
            }
        }

        // 3. Update springs
        if (foundNode) {
            if (this._scroll.ensureVisibleRenderNode) {
                if (this.options.alignment) {
                    if ((scrollToOffset - foundNode.scrollLength) < 0) {
                        this._scroll.springPosition = scrollToOffset;
                        this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                    }
                    else if (scrollToOffset > size[this._direction]) {
                        this._scroll.springPosition = size[this._direction] - scrollToOffset;
                        this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                    }
                    else {
                        if (!foundNode.trueSizeRequested) {
                            this._scroll.ensureVisibleRenderNode = undefined;
                        }
                    }
                }
                else {
                    scrollToOffset = -scrollToOffset;
                    if (scrollToOffset < 0) {
                        this._scroll.springPosition = scrollToOffset;
                        this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                    }
                    else if ((scrollToOffset + foundNode.scrollLength) > size[this._direction]) {
                        this._scroll.springPosition = size[this._direction] - (scrollToOffset + foundNode.scrollLength);
                        this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                    }
                    else {
                        if (!foundNode.trueSizeRequested) {
                          this._scroll.ensureVisibleRenderNode = undefined;
                        }
                    }
                }
            }
            else { // scrollToSequence
                this._scroll.springPosition = scrollToOffset;
                this._scroll.springSource = SpringSource.GOTOSEQUENCE;
            }
            return;
        }

        // 4. When node not found, keep searching
        if (this._scroll.scrollToDirection) {
            this._scroll.springPosition = scrollOffset - size[this._direction];
            this._scroll.springSource = SpringSource.GOTONEXTDIRECTION;
        }
        else {
            this._scroll.springPosition = scrollOffset + size[this._direction];
            this._scroll.springSource = SpringSource.GOTOPREVDIRECTION;
        }

        // 5. In case of a VirtualViewSequnce, make sure all the view-sequence nodes are touched, so
        //    that they are not cleaned up.
        if (this._viewSequence.cleanup) {
            var viewSequence = this._viewSequence;
            while (viewSequence.get() !== scrollToRenderNode) {
                viewSequence = this._scroll.scrollToDirection ? viewSequence.getNext(true) : viewSequence.getPrevious(true);
                if (!viewSequence) {
                    break;
                }
            }
        }
    }
function _calcScrollToOffset(size, scrollOffset) {
        var scrollToRenderNode = this._scroll.scrollToRenderNode || this._scroll.ensureVisibleRenderNode;
        if (!scrollToRenderNode) {
            return;
        }

        // 1. When boundary is reached, stop scrolling in that direction
        if ((this._scroll.boundsReached === Bounds.BOTH) ||
            (!this._scroll.scrollToDirection && (this._scroll.boundsReached === Bounds.PREV)) ||
            (this._scroll.scrollToDirection && (this._scroll.boundsReached === Bounds.NEXT))) {
            return;
        }

        // 2. Find the node to scroll to
        var foundNode;
        var scrollToOffset = 0;
        var node = this._nodes.getStartEnumNode(true);
        var count = 0;
        while (node) {
            count++;
            if (!node._invalidated || (node.scrollLength === undefined)) {
                break;
            }
            if (this.options.alignment) {
                scrollToOffset -= node.scrollLength;
            }
            if (node.renderNode === scrollToRenderNode) {
                foundNode = node;
                break;
            }
            if (!this.options.alignment) {
                scrollToOffset -= node.scrollLength;
            }
            node = node._next;
        }
        if (!foundNode) {
            scrollToOffset = 0;
            node = this._nodes.getStartEnumNode(false);
            while (node) {
                if (!node._invalidated || (node.scrollLength === undefined)) {
                   break;
                }
                if (!this.options.alignment) {
                    scrollToOffset += node.scrollLength;
                }
                if (node.renderNode === scrollToRenderNode) {
                    foundNode = node;
                    break;
                }
                if (this.options.alignment) {
                    scrollToOffset += node.scrollLength;
                }
                node = node._prev;
            }
        }

        // 3. Update springs
        if (foundNode) {
            if (this._scroll.ensureVisibleRenderNode) {
                if (this.options.alignment) {
                    if ((scrollToOffset - foundNode.scrollLength) < 0) {
                        this._scroll.springPosition = scrollToOffset;
                        this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                    }
                    else if (scrollToOffset > size[this._direction]) {
                        this._scroll.springPosition = size[this._direction] - scrollToOffset;
                        this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                    }
                    else {
                        if (!foundNode.trueSizeRequested) {
                            this._scroll.ensureVisibleRenderNode = undefined;
                        }
                    }
                }
                else {
                    scrollToOffset = -scrollToOffset;
                    if (scrollToOffset < 0) {
                        this._scroll.springPosition = scrollToOffset;
                        this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                    }
                    else if ((scrollToOffset + foundNode.scrollLength) > size[this._direction]) {
                        this._scroll.springPosition = size[this._direction] - (scrollToOffset + foundNode.scrollLength);
                        this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                    }
                    else {
                        if (!foundNode.trueSizeRequested) {
                          this._scroll.ensureVisibleRenderNode = undefined;
                        }
                    }
                }
            }
            else { // scrollToSequence
                this._scroll.springPosition = scrollToOffset;
                this._scroll.springSource = SpringSource.GOTOSEQUENCE;
            }
            return;
        }

        // 4. When node not found, keep searching
        if (this._scroll.scrollToDirection) {
            this._scroll.springPosition = scrollOffset - size[this._direction];
            this._scroll.springSource = SpringSource.GOTONEXTDIRECTION;
        }
        else {
            this._scroll.springPosition = scrollOffset + size[this._direction];
            this._scroll.springSource = SpringSource.GOTOPREVDIRECTION;
        }

        // 5. In case of a VirtualViewSequnce, make sure all the view-sequence nodes are touched, so
        //    that they are not cleaned up.
        if (this._viewSequence.cleanup) {
            var viewSequence = this._viewSequence;
            while (viewSequence.get() !== scrollToRenderNode) {
                viewSequence = this._scroll.scrollToDirection ? viewSequence.getNext(true) : viewSequence.getPrevious(true);
                if (!viewSequence) {
                    break;
                }
            }
        }
    }
function _calcScrollToOffset ( size , scrollOffset ) { var scrollToRenderNode = this . _scroll . scrollToRenderNode || this . _scroll . ensureVisibleRenderNode ; if ( ! scrollToRenderNode ) { return ; } // 1. When boundary is reached, stop scrolling in that direction if ( ( this . _scroll . boundsReached === Bounds . BOTH ) || ( ! this . _scroll . scrollToDirection && ( this . _scroll . boundsReached === Bounds . PREV ) ) || ( this . _scroll . scrollToDirection && ( this . _scroll . boundsReached === Bounds . NEXT ) ) ) { return ; } // 2. Find the node to scroll to var foundNode ; var scrollToOffset = 0 ; var node = this . _nodes . getStartEnumNode ( true ) ; var count = 0 ; while ( node ) { count ++ ; if ( ! node . _invalidated || ( node . scrollLength === undefined ) ) { break ; } if ( this . options . alignment ) { scrollToOffset -= node . scrollLength ; } if ( node . renderNode === scrollToRenderNode ) { foundNode = node ; break ; } if ( ! this . options . alignment ) { scrollToOffset -= node . scrollLength ; } node = node . _next ; } if ( ! foundNode ) { scrollToOffset = 0 ; node = this . _nodes . getStartEnumNode ( false ) ; while ( node ) { if ( ! node . _invalidated || ( node . scrollLength === undefined ) ) { break ; } if ( ! this . options . alignment ) { scrollToOffset += node . scrollLength ; } if ( node . renderNode === scrollToRenderNode ) { foundNode = node ; break ; } if ( this . options . alignment ) { scrollToOffset += node . scrollLength ; } node = node . _prev ; } } // 3. Update springs if ( foundNode ) { if ( this . _scroll . ensureVisibleRenderNode ) { if ( this . options . alignment ) { if ( ( scrollToOffset - foundNode . scrollLength ) < 0 ) { this . _scroll . springPosition = scrollToOffset ; this . _scroll . springSource = SpringSource . ENSUREVISIBLE ; } else if ( scrollToOffset > size [ this . _direction ] ) { this . _scroll . springPosition = size [ this . _direction ] - scrollToOffset ; this . _scroll . springSource = SpringSource . ENSUREVISIBLE ; } else { if ( ! foundNode . trueSizeRequested ) { this . _scroll . ensureVisibleRenderNode = undefined ; } } } else { scrollToOffset = - scrollToOffset ; if ( scrollToOffset < 0 ) { this . _scroll . springPosition = scrollToOffset ; this . _scroll . springSource = SpringSource . ENSUREVISIBLE ; } else if ( ( scrollToOffset + foundNode . scrollLength ) > size [ this . _direction ] ) { this . _scroll . springPosition = size [ this . _direction ] - ( scrollToOffset + foundNode . scrollLength ) ; this . _scroll . springSource = SpringSource . ENSUREVISIBLE ; } else { if ( ! foundNode . trueSizeRequested ) { this . _scroll . ensureVisibleRenderNode = undefined ; } } } } else { // scrollToSequence this . _scroll . springPosition = scrollToOffset ; this . _scroll . springSource = SpringSource . GOTOSEQUENCE ; } return ; } // 4. When node not found, keep searching if ( this . _scroll . scrollToDirection ) { this . _scroll . springPosition = scrollOffset - size [ this . _direction ] ; this . _scroll . springSource = SpringSource . GOTONEXTDIRECTION ; } else { this . _scroll . springPosition = scrollOffset + size [ this . _direction ] ; this . _scroll . springSource = SpringSource . GOTOPREVDIRECTION ; } // 5. In case of a VirtualViewSequnce, make sure all the view-sequence nodes are touched, so //    that they are not cleaned up. if ( this . _viewSequence . cleanup ) { var viewSequence = this . _viewSequence ; while ( viewSequence . get ( ) !== scrollToRenderNode ) { viewSequence = this . _scroll . scrollToDirection ? viewSequence . getNext ( true ) : viewSequence . getPrevious ( true ) ; if ( ! viewSequence ) { break ; } } } }
Calculates the scrollto-offset to which the spring is set.
Calculates the scrollto - offset to which the spring is set .