Skip to content

Instantly share code, notes, and snippets.

@jaekwon
Created November 21, 2013 03:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jaekwon/7575612 to your computer and use it in GitHub Desktop.
Save jaekwon/7575612 to your computer and use it in GitHub Desktop.
simple routing
//////////// ROUTER
//////////// ROUTER
$(function() {
window.onhashchange = function() {
if (location.hash) {
gotoRoute((location.path||'')+location.hash, false);
} else {
gotoRoute(location.path||'', false);
}
}
});
function gotoRoute(hashPath, doPushState) {
console.log("gotoRoute:", hashPath);
var parsed = parsePath(hashPath);
var path = parsed.path;
var pathParts = path.split("/");
var params = parsed.params;
if (doPushState !== false && history.pushState) {
history.pushState(0, 0, hashPath);
}
switch (pathParts[0]) {
case "":
showHome();
break;
case "#register":
showRegister();
break;
case "#create-store":
showCreateStore();
break;
case "#get-started":
showGetStarted();
break;
case "#list-stores":
showListStores();
break;
case "#store":
showStore(pathParts[1]);
break;
default:
console.log("Unknown route:", hashPath, "pathParts:", pathParts, "params:", params);
break;
}
}
//////////// UTILS
//////////// UTILS
function parsePath(path) {
var params = {};
if (path.indexOf("?") == -1) {
return {path:path, params:params};
}
var pathPath = path.substring(0, path.indexOf("?"));
var pathParams = path.substring(path.indexOf("?")+1);
var parts = pathParams.split("&");
for (var i=0; i<parts.length; i++) {
var part = parts[i];
if (part.indexOf("=") == -1 ) {
params[decodeURIComponent(part)] = true;
} else {
var name = part.substring(0, part.indexOf("="));
var value = part.substring(part.indexOf("=")+1);
params[decodeURIComponent(name)] = decodeURIComponent(value);
}
}
return {path:pathPath, params:params};
}
function makePath(path, params) {
if (path instanceof Array) {
path = path.join("/");
}
var paramParts = [];
for (var name in params) {
var value = params[name];
if (value) {
paramParts.push(encodeURIComponent(name)+"="+encodeURIComponent(value));
} else {
paramParts.push(encodeURIComponent(name));
}
}
if (paramParts.length > 0) {
path = path + "?" + paramParts.join("&");
}
return path;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment