Source: backbone-x/source/router.js

/*jshint indent:2, curly:true, eqeqeq:true, immed:true, latedef:true,
newcap:true, noarg:true, regexp:true, undef:true, trailing:true,
white:true*/
/*global XT:true, XM:true, _:true, XV:true, Backbone:true, console:true */

(function () {

  XM.BackboneRouter = Backbone.Router.extend({

    routes: {
      "list/:listName": "list",
      "list/:listName/": "list",
      "workspace/:recordType/:id": "workspace",
      "workspace/:recordType/:id/:action": "workspace"
    },

    list: function (listName) {
      var listKind = "XV." + listName.charAt(0).toUpperCase() +
        listName.slice(1).camelize();
      XV.navigateToList(XT.app, listKind);
    },

    /**
      @objectName {String} in format sales-order

      @param action {String} the first use-case, in inventory, goes as follows:
      https://host/dev/app#workspace/sales-order/50218/popup-signature
     */
    workspace: function (objectName, id, action) {
      var recordType = "XM." + objectName.charAt(0).toUpperCase() +
        objectName.slice(1).camelize();

      var inEvent = {
        workspace: XV.getWorkspace(recordType),
        id: id,
        success: function () {
          if (action && _.isFunction(this[action.camelize()])) {
            this[action.camelize()]();
          }
        }
      };
      XT.app.waterfallWorkspace(null, inEvent);
    }

  });
  XM.backboneRouter = new XM.BackboneRouter();

}());