0.2.0 • Published 10 years ago

routine v0.2.0

Weekly downloads
3
License
MIT
Repository
github
Last release
10 years ago

Routine

A simple routing engine based on Backbone's routing engine.

var routes = routine();

routes.on("", function() {
    console.log("root");
});

// A :param matches a single URL component between slashes
routes.on("search/:query", function(query) {
    // e.g. search/test
    console.log("searching", query);
});

This library does not listen for hash changes or history updates.

You can either invoke the engine on your own, e.g. on hash change:

window.addEventListener("hashchange", function() {
    var match = window.location.href.match(/#(.*)$/);
    var hash = match ? match[1] : '';

    routes.goTo(hash);
});

This will invoke the matching route.

Or, a better solution is to inject an event emitter that abstracts listening to url changes. One such library is chronicler, that emits change events when the url changes.

var history = chronicler();
var routes = routine(history);

Example

var history = chronicler();
var routes = routine(history);

routes.on("", function() {
    console.log("root");
});

// A :param matches a single URL component between slashes
routes.on("search/:query", function(query) {
    // e.g. search/test
    console.log("searching", query);
});

routes.on("search/:query/p:page", function(query, page) {
    // e.g. search/test/p2
});

// Part of a route can be made optional by surrounding
// it in parentheses (/:optional)
routes.on("search/:query(/p:page)", function(query, page) {
    // e.g. both search/test and search/test/p2
});

// Splats (*splat) can match any number of URL
// components.
routes.on(":repo/compare/*from...*to", function(repo, from, to) {
    // e.g. kjbekkelund/compare/1.0...kjbekkelund:with/slash
});

// Route can be a regexp
routes.on(/regexp$/, function() {
    // e.g. ends/with/regexp
});

// At some point if we want to stop matching routes:
routes.stop();

// We can also start listening again:
routes.start();

// Invoke a matching route
routes.goTo("some/route");

Installation

npm install routine