anchor.diff:      // only respond to this event when the element we're going to is
       // not a child of the element the event was attached to
       if((event.currentTarget as Element).contains(event.toElement)) return;
  -    
  +
       _logger.fine("got mouse out event for ${event.currentTarget.hashCode}");
  -    
  +
       // do actual start in case we were pending before
       _pendingToDrag();
  -    
  +
       // send out event
       _dragOutStreamController.add(new DragOutEvent(this, _currentTarget, event, event.currentTarget));
     }
     void _mouseMoveHandler(MouseEvent event) {
       _logger.finest("got mouse move event");
  -    
  +
       // do actual start in case we were pending before
       _pendingToDrag();
   
       // send drag event
       _dragStreamController.add(new DragMoveEvent(this, _currentTarget, event));
     }
  -  
  +
     // the method that will be called on mouse up events when autostop is on
     void _autoStopUpHandler(MouseEvent event) {
       // stop the drag
  
positive.code:   Stream<DragEvent> get onDragEnd => _dragEndStreamController.stream;
    Stream<DragEvent> get onDragOut => _dragOutStreamController.stream;
    Stream<DragEvent> get onDragOver => _dragOverStreamController.stream;
    
    /// The function to call to determine if the drag should be allowed to start on mouse down
    AllowDragStart dragConditions;
    
    // methods to subscribe / unsubscribe safely
    void _listen(String event, Node element, [bool useCapture = false]) {
      var subscriptions, handler, provider;
  
negative.code: library drag_handler;
  
  import "dart:html";
  import "dart:async";
  import "package:logging/logging.dart";
  
  // type of a function that determines if a drag should be allowed to start
  typedef bool AllowDragStart(DragHandler dragHandler, Element element, MouseEvent event);
  