Skip to content

Instantly share code, notes, and snippets.

@yoanmarchal
Created April 3, 2016 09:15
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 yoanmarchal/3d1c0ee722d1d29ea72d97dd92b10620 to your computer and use it in GitHub Desktop.
Save yoanmarchal/3d1c0ee722d1d29ea72d97dd92b10620 to your computer and use it in GitHub Desktop.
var router = (function () {
"use strict";
var routes = [];
function addRoute(route, handler) {
routes.push({parts: route.split('/'), handler: handler});
}
function load(route) {
window.location.hash = route;
}
function start() {
var path = window.location.hash.substr(1),
parts = path.split('/'),
partsLength = parts.length;
for (var i = 0; i < routes.length; i++) {
var route = routes[i];
if (route.parts.length === partsLength) {
var params = [];
for (var j = 0; j < partsLength; j++) {
if (route.parts[j].substr(0, 1) === ':') {
params.push(parts[j]);
} else if (route.parts[j] !== parts[j]) {
break;
}
}
if (j === partsLength) {
route.handler.apply(undefined, params);
return;
}
}
}
}
$(window).on('hashchange', start);
return {
addRoute: addRoute,
load: load,
start: start
};
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment