diff --git a/Changelog.md b/Changelog.md index 1a6bfc5fc..22e0b39c6 100644 --- a/Changelog.md +++ b/Changelog.md @@ -158,6 +158,7 @@ before. ## Refactor * Removed the publisher from a user's photo stream due to various issues [#6851](https://github.com/diaspora/diaspora/pull/6851) +* Don't implicitly ignore missing templateName in app.views.Base [#6877](https://github.com/diaspora/diaspora/pull/6877) ## Bug fixes diff --git a/app/assets/javascripts/app/pages/profile.js b/app/assets/javascripts/app/pages/profile.js index 90ea5ed87..5bc6bd416 100644 --- a/app/assets/javascripts/app/pages/profile.js +++ b/app/assets/javascripts/app/pages/profile.js @@ -1,6 +1,8 @@ // @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later app.pages.Profile = app.views.Base.extend({ + templateName: false, + events: { "click #block_user_button": "blockPerson", "click #unblock_user_button": "unblockPerson" diff --git a/app/assets/javascripts/app/views.js b/app/assets/javascripts/app/views.js index fe1f54eda..d5befff44 100644 --- a/app/assets/javascripts/app/views.js +++ b/app/assets/javascripts/app/views.js @@ -38,11 +38,19 @@ app.views.Base = Backbone.View.extend({ renderTemplate : function(){ var presenter = _.isFunction(this.presenter) ? this.presenter() : this.presenter; this.template = HandlebarsTemplates[this.templateName+"_tpl"]; - if(!this.template) { - console.log(this.templateName ? ("no template for " + this.templateName) : "no templateName specified"); + + if (this.templateName === false) { return; } + if (!this.templateName) { + throw new Error("No templateName set, set to false to ignore."); + } + + if (!this.template) { + throw new Error("Invalid templateName provided: " + this.templateName); + } + this.$el .html(this.template(presenter)) .attr("data-template", _.last(this.templateName.split("/"))); diff --git a/spec/javascripts/app/views_spec.js b/spec/javascripts/app/views_spec.js index 7fb340b35..e11e4cdef 100644 --- a/spec/javascripts/app/views_spec.js +++ b/spec/javascripts/app/views_spec.js @@ -10,6 +10,30 @@ describe("app.views.Base", function(){ this.view.render(); }); + it("throws an exception if no templateName was provided", function() { + expect(function() { + new app.views.Base().render(); + }).toThrow(new Error("No templateName set, set to false to ignore.")); + }); + + it("does not throw an exception if templateName is set to false", function() { + var ViewClass = app.views.Base.extend({ + templateName: false + }); + + new ViewClass().render(); + }); + + it("throws an exception if an invalid templateName was provided", function() { + expect(function() { + var ViewClass = app.views.Base.extend({ + templateName: "noiamnotavalidtemplate" + }); + + new ViewClass().render(); + }).toThrow(new Error("Invalid templateName provided: noiamnotavalidtemplate")); + }); + it("renders the template with the presenter", function(){ expect($(this.view.el).text().trim()).toBe("model attributes are in the default presenter"); });