anchor.diff:  // Copyright (c) 2013, Samuel Hapak. All rights reserved. Use of this source
   // code is governed by a BSD-style license that can be found in the LICENSE
   // file.
  +
  +/* 
  + *   TODO Consider if neccessary: Route: map -> clean_data.Data
  + *   Timer.run()
  + *   TOVIEW: clean_data.unit_test , GWT methodology 
  + */
   
   library vacuum.router;
   import "dart:core";
   import "dart:html";
   import 'package:clean_data/clean_data.dart'; 
  +
  +//TODO consider moving to a separate file
  +/**
  + * [View] is responsible for manipulating data received from server to be used for HTML.
  + * Methods of [View] are called when [PageNavigator] matches the corresponding route or is navigated to different location. 
  + */
  +abstract class View{
  +  /**
  +   * Called when [PageNavigator] decides a new [View] should be used/displayed. 
  +   * [View] should listen do data changes. [PageNavigator] listens to each data change of [View].  
  +   * See [PageNavigator.navigate] for more. 
  +   * 
  +   * @param data Data parsed from url. 
  +   */
  +  void load(Data data);
  +  
  +  /**
  +   * Called when [PageNavigator] decides this [View] is no more necessary/to be displayed.
  +   * Here the implementation should release all unnecessary resources.  
  +   */
  +  void unload(); 
  +}
   
   /**
    * Maps [Map] of variables to [String] Url component and vice versa.
  
positive.code: /**
   * [PageNavigator] wires together [History] management, [Route] matching and
   * view rendering.
   */
  abstract class PageNavigator {
  }
  
negative.code:     this._matchExp = new RegExp(r"^" + matcherParts.join('/') + r"$");
    }
    /**
     * Matches the [url] against the [Route] pattern and returns [Map] of matched.
     * Inverse function to [Route.path]. 
     * 
     * @param url Url to be matched.  
     * @returns Parameters or [null] if the Route does not match.
     */
    Map match(String url) {
      var match = this._matchExp.firstMatch(url);
  