Mercurial > wikked
changeset 34:bbc7f7cca5cf
Use error pages when models return an error.
Fixed a few bugs.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 06 Jan 2013 20:20:41 -0800 |
parents | 986d82afdbb8 |
children | 2b35d719f342 |
files | wikked/static/js/wikked/views.js |
diffstat | 1 files changed, 55 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/wikked/static/js/wikked/views.js Sun Jan 06 20:19:29 2013 -0800 +++ b/wikked/static/js/wikked/views.js Sun Jan 06 20:20:41 2013 -0800 @@ -160,6 +160,16 @@ this.footer.$el.appendTo(this.$el); this.footer.postRender(); }, + templateName: function() { + switch (this.model.get('error_code')) { + case 401: + return 'error-unauthorized'; + case 404: + return 'error-not-found'; + default: + return _.result(this, 'defaultTemplateName'); + } + }, _createNavigation: function(model) { return new NavigationView({ model: model }); }, @@ -169,11 +179,24 @@ }); var PageReadView = exports.PageReadView = MasterPageView.extend({ - templateName: 'read-page', + defaultTemplateName: 'read-page', initialize: function() { PageReadView.__super__.initialize.apply(this, arguments); - // Also get the current state, and show a warning - // if the page is new or modified. + return this; + }, + renderCallback: function(view, model) { + PageReadView.__super__.renderCallback.apply(this, arguments); + // Replace all wiki links with proper hyperlinks using the JS app's + // URL scheme. + this.$('a.wiki-link[data-wiki-url]').each(function(i) { + var jel = $(this); + if (jel.hasClass('missing')) + jel.attr('href', '/#/edit/' + jel.attr('data-wiki-url')); + else + jel.attr('href', '/#/read/' + jel.attr('data-wiki-url')); + }); + }, + _fetchState: function() { var stateModel = new Models.PageStateModel({ path: this.model.get('path') }); stateModel.fetch({ success: function(model, response, options) { @@ -192,24 +215,11 @@ } } }); - return this; - }, - renderCallback: function(view, model) { - PageReadView.__super__.renderCallback.apply(this, arguments); - // Replace all wiki links with proper hyperlinks using the JS app's - // URL scheme. - this.$('a.wiki-link[data-wiki-url]').each(function(i) { - var jel = $(this); - if (jel.hasClass('missing')) - jel.attr('href', '/#/edit/' + jel.attr('data-wiki-url')); - else - jel.attr('href', '/#/read/' + jel.attr('data-wiki-url')); - }); } }); var PageEditView = exports.PageEditView = MasterPageView.extend({ - templateName: 'edit-page', + defaultTemplateName: 'edit-page', renderCallback: function(view, model) { PageEditView.__super__.renderCallback.apply(this, arguments); this.$('#page-edit').submit(function(e) { @@ -224,7 +234,7 @@ }); var PageHistoryView = exports.PageHistoryView = MasterPageView.extend({ - templateName: 'history-page', + defaultTemplateName: 'history-page', renderCallback: function(view, model) { PageHistoryView.__super__.renderCallback.apply(this, arguments); this.$('#diff-page').submit(function(e) { @@ -239,36 +249,36 @@ }); var PageRevisionView = exports.PageRevisionView = MasterPageView.extend({ - templateName: 'revision-page', + defaultTemplateName: 'revision-page', titleFormat: function(title) { return title + ' [' + this.model.get('rev') + ']'; } }); var PageDiffView = exports.PageDiffView = MasterPageView.extend({ - templateName: 'diff-page', + defaultTemplateName: 'diff-page', titleFormat: function(title) { return title + ' [' + this.model.get('rev1') + '-' + this.model.get('rev2') + ']'; } }); var IncomingLinksView = exports.IncomingLinksView = MasterPageView.extend({ - templateName: 'inlinks-page', + defaultTemplateName: 'inlinks-page', titleFormat: function(title) { return 'Incoming Links: ' + title; } }); var WikiSearchView = exports.WikiSearchView = MasterPageView.extend({ - templateName: 'search-results' + defaultTemplateName: 'search-results' }); var SpecialNavigationView = exports.SpecialNavigationView = NavigationView.extend({ - templateName: 'special-nav' + defaultTemplateName: 'special-nav' }); var SpecialPagesView = exports.SpecialPagesView = MasterPageView.extend({ - templateName: 'special-pages', + defaultTemplateName: 'special-pages', _createNavigation: function(model) { model.set('show_root_link', false); return new SpecialNavigationView({ model: model }); @@ -276,7 +286,7 @@ }); var GenericSpecialPageView = exports.GenericSpecialPageView = MasterPageView.extend({ - templateName: function() { + defaultTemplateName: function() { return 'special-' + this.model.get('page'); }, _createNavigation: function(model) { @@ -285,27 +295,29 @@ }, _onModelChange: function() { var history = this.model.get('history'); - for (var i = 0; i < history.length; ++i) { - var rev = history[i]; - rev.changes = []; - for (var j = 0; j < rev.pages.length; ++j) { - var page = rev.pages[j]; - switch (page.action) { - case 'edit': - rev.changes.push({ is_edit: true, url: page.url }); - break; - case 'add': - rev.changes.push({ is_add: true, url: page.url }); - break; - case 'delete': - rev.changes.push({ is_delete: true, url: page.url }); - break; + if (history) { + for (var i = 0; i < history.length; ++i) { + var rev = history[i]; + rev.changes = []; + for (var j = 0; j < rev.pages.length; ++j) { + var page = rev.pages[j]; + switch (page.action) { + case 'edit': + rev.changes.push({ is_edit: true, url: page.url }); + break; + case 'add': + rev.changes.push({ is_add: true, url: page.url }); + break; + case 'delete': + rev.changes.push({ is_delete: true, url: page.url }); + break; + } + rev.pages[j] = page; } - rev.pages[j] = page; + history[i] = rev; } - history[i] = rev; + this.model.set('history', history); } - this.model.set('history', history); this.render(); } });