The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
[%- DEFAULT
      cats = [ 'Model', 'View', 'Role', 'Action', 'Feed' ];
%]
function dispatchByAnchor () {
    var anchor = location.hash;
    anchor = anchor.replace(/^\#/, '');
    if (savedAnchor == anchor)
        return;
    if (anchor == "") {
        anchor = 'models';
        location.hash = 'models';
    }
    var oldAnchor = savedAnchor;
    savedAnchor = anchor;

    // prevent memory leaks from dynamically created <script> nodes:
    //if (loadingCount <= 0) openresty.purge();

    loadingCount = 0;

    [%- FOREACH cat = cats %]

    if (anchor == '[% cat | lower %]s') {
        get[% cat %]s();
        return;
    }
    var match = anchor.match(/^[% cat | lower %]-([A-Za-z]\w*)$/);
    if (match) {
        var [% cat | lower %] = match[1];
        get[% cat %]([% cat | lower %]);
        return;
    }

    [%- END %]

    match = anchor.match(/^modelrows\/([A-Za-z]\w*)\/(\w+)\/(\w+)\/(\d+)(?:\/(.*))?$/);
    if (match) {
        var model = match[1];
        var col = match[2];
        var op = match[3];
        var page = match[4] || 1;
        var pattern = match[5] || '~';
        page = parseInt(page);
        //alert("Model: " + model);
        //alert("Page: " + page);
        getModelRows(model, col, op, page, pattern);
        return;
    }

    match = anchor.match(/^rolerules-([A-Za-z]\w*)$/);
    if (match) {
        var role = match[1];
        getRoleRules(role);
        return;
    }

    if (anchor == 'consoles') {
        getConsoles();
        return;
    }

    // fallback
    alert("Sorry, not implemented yet :P");
    if (!oldAnchor) {
        location.hash = 'models';
        dispatchByAnchor();
    }
}