nl_tokens: Get the first or last visible item in the view .
pl_tokens: function _getVisibleItem ( first ) { var result = { } ; var diff ; var prevDiff = 10000000 ; var diffDelta = ( first && this . options . alignment ) ? - this . _contextSizeCache [ this . _direction ] : ( ( ! first && ! this . options . alignment ) ? this . _contextSizeCache [ this . _direction ] : 0 ) ; var scrollOffset = this . _scroll . unnormalizedScrollOffset ; var node = this . _nodes . getStartEnumNode ( true ) ; while ( node ) { if ( ! node . _invalidated || ( node . scrollLength === undefined ) ) { break ; } if ( node . _viewSequence ) { diff = Math . abs ( diffDelta - ( scrollOffset + ( ! first ? node . scrollLength : 0 ) ) ) ; if ( diff >= prevDiff ) { break ; } prevDiff = diff ; result . scrollOffset = scrollOffset ; result . _node = node ; scrollOffset += <mask> . scrollLength ; } node = node . _next ; } scrollOffset = this . _scroll . unnormalizedScrollOffset ; node = this . _nodes . getStartEnumNode ( false ) ; while ( node ) { if ( ! node . _invalidated || ( node . scrollLength === undefined ) ) { break ; } if ( node . _viewSequence ) { scrollOffset -= node . scrollLength ; diff = Math . abs ( diffDelta - ( scrollOffset + ( ! first ? node . scrollLength : 0 ) ) ) ; if ( diff >= prevDiff ) { break ; } prevDiff = diff ; result . scrollOffset = scrollOffset ; result . _node = node ; } node = node . _prev ; } if ( ! result . _node ) { return undefined ; } result . scrollLength = result . _node . scrollLength ; if ( this . options . alignment ) { result . visiblePerc = ( Math . min ( result . scrollOffset + result . scrollLength , 0 ) - Math . max ( result . scrollOffset , - this . _contextSizeCache [ this . _direction ] ) ) / result . scrollLength ; } else { result . visiblePerc = ( Math . min ( result . scrollOffset + result . scrollLength , this . _contextSizeCache [ this . _direction ] ) - Math . max ( result . scrollOffset , 0 ) ) / result . scrollLength ; } result . index = result . _node . _viewSequence . getIndex ( ) ; result . viewSequence = result . _node . _viewSequence ; result . renderNode = result . _node . renderNode ; return result ; }