anchor.diff:  }
   
   class DateFormatter extends CellFormatter {
  +  DateFormatter([nextHandler]) : super(nextHandler);
  +
     bool _handleRequest(Event e) {
       var input = e.target;
       RegExp exp = new RegExp(r"^\s*[\d/-]+\s*$");
  
positive.code: abstract class CellFormatter {
    CellFormatter nextHandler;
  
    void processRequest(Event e) {
      if (!isCell(e)) return;
      if (_handleRequest(e)) return;
      if (nextHandler == null) return;
  
      nextHandler.processRequest(e);
    }
  
    // Subclasses handle requests as needed
  
negative.code: main() {
    var container = query('.container');
  
    var textFormat = new TextFormatter();
    var dateFormat = new DateFormatter(textFormat);
    var numberFormat = new NumberFormatter(dateFormat);
  
    var c = new StreamController.broadcast();
    container.onChange.listen(c.add);
    container.onClick.listen(c.add);
  
    var subscription = c.stream.
      listen(numberFormat);
  
    query('#no-numbers').onChange.listen((e){
      var el = e.target;
      if (el.checked) {
        subscription.cancel();
        subscription = c.stream.
          listen(dateFormat);
      }
      else {
        subscription.cancel();
        subscription = c.stream.
          listen(numberFormat);
      }
    });
  
    query('#no-text').onChange.listen((e){
      var el = e.target;
      if (el.checked) {
        dateFormat.nextHandler = null;
      }
      else {
        dateFormat.nextHandler = textFormat;
      }
    });
  }
  