added rerenderView to route object to get documents working with views
Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/cf534b68 Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/cf534b68 Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/cf534b68 Branch: refs/heads/route-events Commit: cf534b682b419c27a12084acf43fcfaa9549feb0 Parents: d2ffad3 Author: Garren Smith <[email protected]> Authored: Thu Apr 25 17:24:43 2013 +0200 Committer: Garren Smith <[email protected]> Committed: Thu May 9 09:59:59 2013 +0200 ---------------------------------------------------------------------- src/fauxton/app/api.js | 8 ++- src/fauxton/app/modules/documents/routes.js | 101 ++++++++++++++++++++-- 2 files changed, 100 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb/blob/cf534b68/src/fauxton/app/api.js ---------------------------------------------------------------------- diff --git a/src/fauxton/app/api.js b/src/fauxton/app/api.js index c6c3c69..09fad0b 100644 --- a/src/fauxton/app/api.js +++ b/src/fauxton/app/api.js @@ -146,8 +146,8 @@ function(app, Fauxton) { renderWith: function(route, masterLayout, args) { var routeObject = this; - //this.route.apply(this, args); + this.masterLayout = masterLayout; masterLayout.setTemplate(this.layout); masterLayout.clearBreadcrumbs(); var crumbs = this.get('crumbs'); @@ -227,6 +227,12 @@ function(app, Fauxton) { return view; }, + rerenderView: function(selector) { + var view = this._views[selector]; + this.masterLayout.setView(selector, view); + this.masterLayout.renderView(selector); + }, + getViews: function() { return this._views; }, http://git-wip-us.apache.org/repos/asf/couchdb/blob/cf534b68/src/fauxton/app/modules/documents/routes.js ---------------------------------------------------------------------- diff --git a/src/fauxton/app/modules/documents/routes.js b/src/fauxton/app/modules/documents/routes.js index f2eaf8b..fa6164c 100644 --- a/src/fauxton/app/modules/documents/routes.js +++ b/src/fauxton/app/modules/documents/routes.js @@ -189,7 +189,7 @@ function(app, FauxtonAPI, Documents, Databases) { ]; }, - routes: ["database/:database/_all_docs(:extra)"], + routes: ["database/:database/_all_docs(:extra)", "database/:database/_design/:ddoc/_view/:view"], apiUrl: function() { return this.data.database.allDocs.url(); @@ -197,12 +197,74 @@ function(app, FauxtonAPI, Documents, Databases) { route: function(route, params) { this.databaseName = params[0]; + + if (params.length > 2) { + this.view = params[2].replace(/\?.*$/,''); + this.ddoc = params[1]; + } else { + delete this.view; + delete this.ddoc; + } + }, + + // this works for now, but it might be work considering having a renderWith function + // that only renders a specific view and setups up that views establish beforehand. + rerender: function () { + var self = this, + options = app.getParams(); + + options.include_docs = true; + this.data.database.buildAllDocs(options); + + this.updateDashboardView(); + + //this.documentsView.collection = this.data.database.allDocs; + + $.when.apply(null, this.documentsView.establish()).then(function () { + //self.documentsView.render(); + self.rerenderView('#dashboard-content'); + }); + }, + + updateDashboardView: function () { + var options = app.getParams(); + + if (this.view) { + var ddocInfo = { + id: "_design/" + this.ddoc, + currView: this.view, + designDocs: this.data.designDocs + }; + + this.data.indexedDocs = new Documents.IndexCollection(null, { + database: this.data.database, + design: this.ddoc, + view: this.view, + params: options + }); + + this.documentsView = this.setView('#dashboard-content',new Documents.Views.AllDocsList({ + collection: this.data.indexedDocs, + nestedView: Documents.Views.Row, + viewList: true, + ddocInfo: ddocInfo, + params: options + })); + + } else { + + this.documentsView = this.setView("#dashboard-content", new Documents.Views.AllDocsList({ + collection: this.data.database.allDocs + })); + } + }, views: function () { this.data = { database: new Databases.Model({id:this.databaseName}) }; + this.data.designDocs = new Documents.AllDocs(null, { database: this.data.database, params: {startkey: '"_design"', @@ -210,14 +272,41 @@ function(app, FauxtonAPI, Documents, Databases) { include_docs: true} }); + var options = app.getParams(); options.include_docs = true; this.data.database.buildAllDocs(options); - this.setView("#dashboard-content", new Documents.Views.AllDocsList({ - collection: this.data.database.allDocs - })); + if (this.view) { + var ddocInfo = { + id: "_design/" + this.ddoc, + currView: this.view, + designDocs: this.data.designDocs + }; + + this.data.indexedDocs = new Documents.IndexCollection(null, { + database: this.data.database, + design: this.ddoc, + view: this.view, + params: options + }); + + this.documentsView = this.setView('#dashboard-content',new Documents.Views.AllDocsList({ + collection: this.data.indexedDocs, + nestedView: Documents.Views.Row, + viewList: true, + ddocInfo: ddocInfo, + params: options + })); + } else { + + this.documentsView = this.setView("#dashboard-content", new Documents.Views.AllDocsList({ + collection: this.data.database.allDocs + })); + } + + this.setView("#sidebar-content", new Documents.Views.Sidebar({ collection: this.data.designDocs })); @@ -226,8 +315,6 @@ function(app, FauxtonAPI, Documents, Databases) { collection: this.data.designDocs, database: this.data.database })); - - return {}; } }); @@ -270,8 +357,6 @@ function(app, FauxtonAPI, Documents, Databases) { database: this.database, active_id: 'changes' })); - - return {}; } });
