whole_func_string: function start() {
          if (router.useHashbang == null && router.useHistoryApi == null) {
              if (window.location.host  && window.history.pushState) {
                  //web access
                  router.useHistoryApi = true;
              } else {
                  // local access
                  router.useHashbang = true;
              }
          }
  
          var initPath = "";
  
          if (router.useHistoryApi) {
              initPath = window.location.pathname;
              if (_baseUrl === undefined) {
                  _baseUrl = initPath.replace(/\/$/, "");
              }
              initPath = initPath.replace(_baseUrl, "") || _homePath || "/";
          } else if (router.useHashbang) {
              initPath = window.location.hash.replace("#!", "") || _homePath || "/";
          } else {
              initPath = "/";
          }
  
          if (!initPath.startsWith("/")) {
              initPath = "/" + initPath;
          }
          /*
          eventer.on(document.body, "click", "a[href]", function(e) {
              var elm = e.currentTarget,
                  url = elm.getAttribute("href");
  
              if (url == "#") {
                  return;
              }
              if (url && langx.isSameOrigin(elm.href)) {
                  if (url.indexOf(_baseUrl) === 0) {
                      url = url.substr(_baseUrl.length);
                      eventer.stop(e);
                      url = url.replace('#!', '');
                      go(url);
                  }
              }
          });
          */
          if (router.useHistoryApi) {
              window.addEventListener("popstate", function(e) {
                  if(e.state) dispatch(e.state);
                  e.preventDefault();
              });
          } else if (router.useHashbang) {
              window.addEventListener("hashchange", function(e) {
                  dispatch({
                      path: window.location.hash.replace(/^#!/, "")
                  });
                  e.preventDefault();
              });
          }
  
          go(initPath);
      }
func_code_string: function start() {
          if (router.useHashbang == null && router.useHistoryApi == null) {
              if (window.location.host  && window.history.pushState) {
                  //web access
                  router.useHistoryApi = true;
              } else {
                  // local access
                  router.useHashbang = true;
              }
          }
  
          var initPath = "";
  
          if (router.useHistoryApi) {
              initPath = window.location.pathname;
              if (_baseUrl === undefined) {
                  _baseUrl = initPath.replace(/\/$/, "");
              }
              initPath = initPath.replace(_baseUrl, "") || _homePath || "/";
          } else if (router.useHashbang) {
              initPath = window.location.hash.replace("#!", "") || _homePath || "/";
          } else {
              initPath = "/";
          }
  
          if (!initPath.startsWith("/")) {
              initPath = "/" + initPath;
          }
          /*
          eventer.on(document.body, "click", "a[href]", function(e) {
              var elm = e.currentTarget,
                  url = elm.getAttribute("href");
  
              if (url == "#") {
                  return;
              }
              if (url && langx.isSameOrigin(elm.href)) {
                  if (url.indexOf(_baseUrl) === 0) {
                      url = url.substr(_baseUrl.length);
                      eventer.stop(e);
                      url = url.replace('#!', '');
                      go(url);
                  }
              }
          });
          */
          if (router.useHistoryApi) {
              window.addEventListener("popstate", function(e) {
                  if(e.state) dispatch(e.state);
                  e.preventDefault();
              });
          } else if (router.useHashbang) {
              window.addEventListener("hashchange", function(e) {
                  dispatch({
                      path: window.location.hash.replace(/^#!/, "")
                  });
                  e.preventDefault();
              });
          }
  
          go(initPath);
      }
func_documentation_string: starts routing urls