anchor.diff:    number.nextHandler = date;
     date.nextHandler = text;
   
  -  var subscription =
  -    container.
  -    onChange.
  -    listen(number.processRequest);
  -
  -  var c = new StreamController();
  +  var c = new StreamController.broadcast();
     container.onChange.listen(c.add);
     container.onClick.listen(c.add);
   
  -  c.stream.listen(number.processRequest);
  -
  -
  +  var subscription = c.stream.
  +    listen(number.processRequest);
   
     query('#no-numbers').onChange.listen((e){
       var el = e.target;
       if (el.checked) {
         subscription.cancel();
  -      subscription = container.
  -        onChange.
  +      subscription = c.stream.
           listen(date.processRequest);
       }
       else {
         subscription.cancel();
  -      subscription = container.
  -        onChange.
  +      subscription = c.stream.
           listen(number.processRequest);
       }
     });
  
positive.code: }
  
  class NumberFormatter extends CellFormatter {
    bool handleRequest(Event e) {
      var input = e.target;
      RegExp exp = new RegExp(r"^\s*[\d\.]+\s*$");
      if (!exp.hasMatch(input.value)) return false;
  
negative.code: }
  
  class TextFormatter extends CellFormatter {
    bool _handleRequest(Event e) {
      var input = e.target;
      input.style.textAlign = 'left';
      return true;
  