Working route objects
Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/63e10fce Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/63e10fce Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/63e10fce Branch: refs/heads/route-events Commit: 63e10fce4b2a48f6d37f097f578f11b74acf250c Parents: 2f138a9 Author: Russell Branca <[email protected]> Authored: Mon Apr 8 22:08:07 2013 -0400 Committer: Garren Smith <[email protected]> Committed: Thu May 9 09:59:58 2013 +0200 ---------------------------------------------------------------------- src/fauxton/app/api.js | 56 ++++++++++++++++++++++ src/fauxton/app/modules/databases/routes.js | 53 ++++++++++++++++++++- 2 files changed, 107 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb/blob/63e10fce/src/fauxton/app/api.js ---------------------------------------------------------------------- diff --git a/src/fauxton/app/api.js b/src/fauxton/app/api.js index 52e8611..c44efa1 100644 --- a/src/fauxton/app/api.js +++ b/src/fauxton/app/api.js @@ -96,6 +96,62 @@ function(app, Fauxton) { } }); + FauxtonAPI.RouteObject = function(options) { + this._options = options; + + this._configure(options || {}); + this.initialize.apply(this, arguments); + this.addEvents(); + }; + + var routeObjectOptions = ["views", "routes", "events", "data", "crumbs", "layout", "apiUrl", "establish"]; + + _.extend(FauxtonAPI.RouteObject.prototype, Backbone.Events, { + // Should these be default vals or empty funcs? + views: {}, + routes: {}, + events: {}, + data: {}, + crumbs: [], + layout: null, + apiUrl: null, + establish: null + }, { + route: function() {}, + initialize: function() {}, + renderWith: function(layout) { + }, + get: function(key) { + return _.isFunction(this[key]) ? this[key]() : this[key]; + }, + addEvents: function(events) { + events = events || this.get('events'); + _.each(events, function(method, event) { + if (!_.isFunction(method) && !_.isFunction(this[method])) { + throw new Error("Invalid method: "+method); + } + method = _.isFunction(method) ? method : this[method]; + + this.on(event, method); + }, this); + }, + _configure: function(options) { + /* + _.each(_.intersection(_.keys(options), routeObjectOptions), function(key) { + this[key] = options[key]; + }, this); + */ + _.each(options, function(val, key) { this[key] = val; }, this); + }, + setView: function(selector, view) { + this.views[selector] = view; + return view; + }, + getViews: function() { + return this.views; + } + }); + app.fauxtonAPI = FauxtonAPI; return app.fauxtonAPI; }); http://git-wip-us.apache.org/repos/asf/couchdb/blob/63e10fce/src/fauxton/app/modules/databases/routes.js ---------------------------------------------------------------------- diff --git a/src/fauxton/app/modules/databases/routes.js b/src/fauxton/app/modules/databases/routes.js index 2ba59d7..f6a6226 100644 --- a/src/fauxton/app/modules/databases/routes.js +++ b/src/fauxton/app/modules/databases/routes.js @@ -16,10 +16,59 @@ define([ "api", // Modules - "modules/databases/resources" + "modules/databases/resources", + // TODO:: fix the include flow modules so we don't have to require views here + "modules/databases/views" ], -function(app, FauxtonAPI, Databases) { +function(app, FauxtonAPI, Databases, Views) { + var allDbsRouteObject = Databases.AllDbsRouteObject = new FauxtonAPI.RouteObject({ + layout: "with_sidebar", + + crumbs: [ + {"name": "Databases", "link": "/_all_dbs"} + ], + + apiUrl: function() { + return this.databases.url(); + }, + + initialize: function() { + this.databases = new Databases.List(); + this.deferred = FauxtonAPI.Deferred(); + + this.setView("#dashboard-content", new Views.List({ + collection: this.databases + })); + this.setView("#sidebar-content", new Views.Sidebar({ + collection: this.databases + })); + }, + + establish: function() { + var databases = this.databases; + var deferred = this.deferred; + + databases.fetch().done(function(resp) { + $.when.apply(null, databases.map(function(database) { + return database.status.fetch(); + })).done(function(resp) { + deferred.resolve(); + }); + }); + + return [deferred]; + }, + + mrEvent: function() { + console.log("Triggering a most excellent event!!!!"); + }, + + events: { + "myrandom_event": "mrEvent" + } + }); + var allDbsCallback = function() { var data = { databases: new Databases.List()
