docs: function(node, event) {
  		if (!(event.isDefaultPrevented ? event.isDefaultPrevented() : event.defaultPrevented === true)) {
  			// If href has some JavaScript in it, let it run.
  			if (node.href === "javascript://") {
  				return;
  			}
  
  			// Do not pushstate if target is for blank window.
  			if (node.target === "_blank") {
  				return;
  			}
  
  			// Do not pushstate if meta key was pressed, mimicking standard browser behavior.
  			if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {
  				return;
  			}
  
  			// linksHost is a Fix for IE showing blank host, but blank host means current host.
  			var linksHost = node.host || window.location.host;
  
  			// If link is within the same domain and descendant of `root`.
  			if (window.location.host === linksHost) {
  				var root = cleanRoot(),
  					pathname,
  					href,
  					nodePathWithSearch;
  
  				if (node instanceof HTMLAnchorElement) {
  					pathname = node.pathname;
  					href = node.href;
  					nodePathWithSearch = pathname + node.search;
  				} else if (node.namespaceURI === "http://www.w3.org/1999/xlink") {
  					pathname = href = node.getAttributeNS("http://www.w3.org/1999/xlink", "href");
  					nodePathWithSearch = href;
  				}
  
  				// If the link is within the `root`.
  				if (pathname !== undefined && pathname.indexOf(root) === 0) {
  					var url = nodePathWithSearch.substr(root.length);
  
  					// If a matching route exists.
  					if (route.rule(url) !== undefined) {
  						// Makes it possible to have a link with a hash.
  						// Calling .pushState will dispatch events, causing
  						// `can-route` to update its data, and then try to set back
  						// the url without the hash.  We need to retain that.
  						if (href.indexOf("#") >= 0) {
  							this.keepHash = true;
  						}
  
  						// We do not want to call preventDefault() if the link is to the
  						// same page and just a different hash; see can-route-pushstate#75.
  						var windowPathWithSearch = window.location.pathname + window.location.search;
  						var shouldCallPreventDefault = nodePathWithSearch !== windowPathWithSearch || node.hash === window.location.hash;
  
  						// Test if you can preventDefault.
  						if (shouldCallPreventDefault && event.preventDefault) {
  							event.preventDefault();
  						}
  						return true;
  					}
  					return false;
  				}
  			}
  		}
  	}