From 8685e4079f6b649be1d156a10a571e9593ab312a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Mon, 30 Dec 2013 18:46:18 +0100 Subject: [PATCH] FEATURE: the top tab is the default for new users --- .../javascripts/discourse/lib/utilities.js | 5 ++++ .../javascripts/discourse/models/user.js | 17 ++++++++++++- .../discourse/routes/application_routes.js | 6 +++-- test/javascripts/lib/utilities_test.js | 5 ++++ test/javascripts/models/user_test.js | 24 ++++++++++++++++++- 5 files changed, 53 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/discourse/lib/utilities.js b/app/assets/javascripts/discourse/lib/utilities.js index fc9acfb55a8..f6df27c4704 100644 --- a/app/assets/javascripts/discourse/lib/utilities.js +++ b/app/assets/javascripts/discourse/lib/utilities.js @@ -342,6 +342,11 @@ Discourse.Utilities = { return (arg === '' ? null : arg); } } + }, + + defaultHomepage: function() { + // the homepage is the first item of the 'top_menu' site setting + return Discourse.SiteSettings.top_menu.split("|")[0].split(",")[0]; } }; diff --git a/app/assets/javascripts/discourse/models/user.js b/app/assets/javascripts/discourse/models/user.js index 064695ef9b6..c4141e5d4ff 100644 --- a/app/assets/javascripts/discourse/models/user.js +++ b/app/assets/javascripts/discourse/models/user.js @@ -328,7 +328,22 @@ Discourse.User = Discourse.Model.extend({ type: 'POST', data: {email: email} }); - } + }, + + /** + Homepage of the user + + @property homepage + @type {String} + **/ + homepage: function() { + // top is the default for new users + if (Discourse.SiteSettings.top_menu.indexOf("top") >= 0 && + this.get("trust_level") === 0) { + return "top"; + } + return Discourse.Utilities.defaultHomepage(); + }.property("trust_level") }); diff --git a/app/assets/javascripts/discourse/routes/application_routes.js b/app/assets/javascripts/discourse/routes/application_routes.js index 6a66b30a54e..c4cb09a6d40 100644 --- a/app/assets/javascripts/discourse/routes/application_routes.js +++ b/app/assets/javascripts/discourse/routes/application_routes.js @@ -32,8 +32,10 @@ Discourse.Route.buildRoutes(function() { router.route(filter + "Category", { path: "/category/:parentSlug/:slug/l/" + filter + "/more" }); }); - // the homepage is the first item of the 'top_menu' site setting - var homepage = Discourse.SiteSettings.top_menu.split("|")[0].split(",")[0]; + // homepage + var homepage = Discourse.User.current() ? + Discourse.User.currentProp("homepage") : + Discourse.Utilities.defaultHomepage(); this.route(homepage, { path: '/' }); // categories page diff --git a/test/javascripts/lib/utilities_test.js b/test/javascripts/lib/utilities_test.js index 1c9f804fca5..14b77eaa44a 100644 --- a/test/javascripts/lib/utilities_test.js +++ b/test/javascripts/lib/utilities_test.js @@ -133,6 +133,11 @@ test("avatarImg", function() { "it doesn't render avatars for invalid avatar template"); }); +test("defaultHomepage", function() { + Discourse.SiteSettings.top_menu = "latest|top|hot"; + equal(Discourse.Utilities.defaultHomepage(), "latest", "default homepage is the first item in the top_menu site setting"); +}); + module("Discourse.Utilities.cropAvatar with animated avatars", { setup: function() { Discourse.SiteSettings.allow_animated_avatars = true; } }); diff --git a/test/javascripts/models/user_test.js b/test/javascripts/models/user_test.js index c25ab80fb6f..d6620c0c9da 100644 --- a/test/javascripts/models/user_test.js +++ b/test/javascripts/models/user_test.js @@ -26,6 +26,28 @@ test("isAllowedToUploadAFile", function() { ok(user.isAllowedToUploadAFile("image"), "moderator can always upload a file"); }); +test("homepage when top is disabled", function() { + var newUser = Discourse.User.create({ trust_level: 0 }), + oldUser = Discourse.User.create({ trust_level: 1 }), + defaultHomepage = Discourse.Utilities.defaultHomepage(); + + Discourse.SiteSettings.top_menu = "latest"; + + ok(newUser.get("homepage") === defaultHomepage, "new user's homepage is default when top is disabled"); + ok(oldUser.get("homepage") === defaultHomepage, "old user's homepage is default when top is disabled"); +}); + +test("homepage when top is enabled", function() { + var newUser = Discourse.User.create({ trust_level: 0 }), + oldUser = Discourse.User.create({ trust_level: 1 }), + defaultHomepage = Discourse.Utilities.defaultHomepage(); + + Discourse.SiteSettings.top_menu = "latest|top"; + + ok(newUser.get("homepage") === "top", "new user's homepage is top when top is enabled"); + ok(oldUser.get("homepage") === defaultHomepage, "old user's homepage is default when top is enabled"); +}); + asyncTestDiscourse("findByUsername", function() { expect(3); @@ -36,4 +58,4 @@ asyncTestDiscourse("findByUsername", function() { equal(user.get('name'), 'Robin Ward', 'it has the full name since it has details'); start(); }); -}); \ No newline at end of file +});