anchor.diff:  
       for (OutlineItem item in _outlineItems) {
         if (item.overlapsOffset(codeOffset)) {
  +        return item;
  +      }
  +    }
  +    return null;
  +  }
  +
  +  OutlineItem _edgeItemInCodeOffsetRange(
  +      OffsetRange codeOffsetRange, {bool atBottom}) {
  +    if (_outlineItems == null) return null;
  +
  +    Iterable<OutlineItem> searchSequence =
  +        atBottom ? _outlineItems.reversed : _outlineItems;
  +    for (OutlineItem item in searchSequence) {
  +      if (item.overlapsOffsetRange(codeOffsetRange)) {
           return item;
         }
       }
  
positive.code:   }
  
    void scrollOffsetRangeIntoView(OffsetRange offsetRange) {
      OutlineItem item;
      html.ScrollAlignment alignment;
  
      if (offsetRange.centeredLower(_lastScrolledOffsetRange)) {
        // Scrolling down: give priority to the last item.
        item = _itemAtCodeOffset(offsetRange.bottom);
        alignment = html.ScrollAlignment.BOTTOM;
      } else if (offsetRange.centeredHigher(_lastScrolledOffsetRange)) {
        // Scrolling up: give priority to the first item.
        item = _itemAtCodeOffset(offsetRange.top);
        alignment = html.ScrollAlignment.TOP;
      } else {
        // Haven't scrolled enough. Do nothing.
      }
  
      if (item != null) {
        _scrollItemIntoView(item, alignment);
        _lastScrolledOffsetRange = offsetRange;
      }
    }
  
    void _scrollItemIntoView(OutlineItem item, html.ScrollAlignment alignment) {
      html.Rectangle rootListRect = _rootListDiv.getBoundingClientRect();
      html.Rectangle elementRect = item.element.getBoundingClientRect();
      // Perhaps the item is already in view.
      if (!rootListRect.containsRectangle(elementRect)) {
        // Use [item.anchor], not [item.element] to pull the minimal amount of
        // [item] into view. For example, [item.element] for OutlineClass
        // is the whole class, which may not even fit into the outline viewport.
        item.anchor.scrollIntoView(alignment);
      }
    }
  
  
negative.code:   }
  
    void scrollIntoView() => _element.scrollIntoView();
  
    @override
    String toString() =>
        "$runtimeType $displayName ($_offsetRange)";
  }
  
  abstract class OutlineTopLevelItem extends OutlineItem {
  