From cf6cbb955ba9fce704365b83a3a379f2a2055031 Mon Sep 17 00:00:00 2001 From: Robin Ward <robin.ward@gmail.com> Date: Thu, 24 Apr 2014 17:39:34 -0400 Subject: [PATCH] REFACTOR: Introduce `Discourse.computed.setting` to create a computed property that links to a `Discourse.SiteSetting` --- .../admin/controllers/admin_user_controller.js | 9 ++------- .../discourse/components/home_logo_component.js | 13 +++---------- .../controllers/create_account_controller.js | 4 +--- .../controllers/edit_category_controller.js | 4 +--- .../controllers/poster_expansion_controller.js | 4 +--- .../controllers/preferences_controller.js | 12 +++--------- .../discourse/controllers/site_map_controller.js | 4 +--- .../controllers/user_invited_controller.js | 4 +--- app/assets/javascripts/discourse/lib/computed.js | 14 ++++++++++++++ test/javascripts/lib/computed_test.js | 11 +++++++++++ 10 files changed, 38 insertions(+), 41 deletions(-) diff --git a/app/assets/javascripts/admin/controllers/admin_user_controller.js b/app/assets/javascripts/admin/controllers/admin_user_controller.js index ec146502764..50dff9a2fe6 100644 --- a/app/assets/javascripts/admin/controllers/admin_user_controller.js +++ b/app/assets/javascripts/admin/controllers/admin_user_controller.js @@ -20,13 +20,8 @@ Discourse.AdminUserController = Discourse.ObjectController.extend({}); Discourse.AdminUserIndexController = Discourse.ObjectController.extend({ editingTitle: false, - showApproval: function() { - return Discourse.SiteSettings.must_approve_users; - }.property(), - - showBadges: function() { - return Discourse.SiteSettings.enable_badges; - }.property(), + showApproval: Discourse.computed.setting('must_approve_users'), + showBadges: Discourse.computed.setting('enable_badges'), primaryGroupDirty: Discourse.computed.propertyNotEqual('originalPrimaryGroupId', 'primary_group_id'), diff --git a/app/assets/javascripts/discourse/components/home_logo_component.js b/app/assets/javascripts/discourse/components/home_logo_component.js index 8ab855cda41..e605a42407f 100644 --- a/app/assets/javascripts/discourse/components/home_logo_component.js +++ b/app/assets/javascripts/discourse/components/home_logo_component.js @@ -9,15 +9,8 @@ Discourse.HomeLogoComponent = Ember.Component.extend({ return !Discourse.Mobile.mobileView && this.get("minimized"); }.property("minimized"), - smallLogoUrl: function() { - return Discourse.SiteSettings.logo_small_url; - }.property(), + smallLogoUrl: Discourse.computed.setting('logo_small_url'), + bigLogoUrl: Discourse.computed.setting('logo_url'), + title: Discourse.computed.setting('title'), - bigLogoUrl: function() { - return Discourse.SiteSettings.logo_url; - }.property(), - - title: function() { - return Discourse.SiteSettings.title; - }.property() }); diff --git a/app/assets/javascripts/discourse/controllers/create_account_controller.js b/app/assets/javascripts/discourse/controllers/create_account_controller.js index 28790a564b3..a04dc3c6c4f 100644 --- a/app/assets/javascripts/discourse/controllers/create_account_controller.js +++ b/app/assets/javascripts/discourse/controllers/create_account_controller.js @@ -324,9 +324,7 @@ Discourse.CreateAccountController = Discourse.Controller.extend(Discourse.ModalF }); }, - tosAcceptRequired: function() { - return Discourse.SiteSettings.tos_accept_required; - }.property(), + tosAcceptRequired: Discourse.computed.setting('tos_accept_required'), actions: { createAccount: function() { diff --git a/app/assets/javascripts/discourse/controllers/edit_category_controller.js b/app/assets/javascripts/discourse/controllers/edit_category_controller.js index cff1f1ffb5f..91790b7c903 100644 --- a/app/assets/javascripts/discourse/controllers/edit_category_controller.js +++ b/app/assets/javascripts/discourse/controllers/edit_category_controller.js @@ -58,9 +58,7 @@ Discourse.EditCategoryController = Discourse.ObjectController.extend(Discourse.M return false; }.property('saving', 'name', 'color', 'deleting'), - emailInEnabled: function() { - return Discourse.SiteSettings.email_in; - }, + emailInEnabled: Discourse.computed.setting('email_in'), deleteDisabled: function() { return (this.get('deleting') || this.get('saving') || false); diff --git a/app/assets/javascripts/discourse/controllers/poster_expansion_controller.js b/app/assets/javascripts/discourse/controllers/poster_expansion_controller.js index 99cca8f5572..d78edc4fbab 100644 --- a/app/assets/javascripts/discourse/controllers/poster_expansion_controller.js +++ b/app/assets/javascripts/discourse/controllers/poster_expansion_controller.js @@ -20,9 +20,7 @@ Discourse.PosterExpansionController = Discourse.ObjectController.extend({ hasUserFilters: Em.computed.gt('postStream.userFilters.length', 0), - showBadges: function() { - return Discourse.SiteSettings.enable_badges; - }.property(), + showBadges: Discourse.computed.setting('enable_badges'), moreBadgesCount: function() { return this.get('user.badge_count') - this.get('user.featured_user_badges.length'); diff --git a/app/assets/javascripts/discourse/controllers/preferences_controller.js b/app/assets/javascripts/discourse/controllers/preferences_controller.js index 1467b87ba97..851dce9acbb 100644 --- a/app/assets/javascripts/discourse/controllers/preferences_controller.js +++ b/app/assets/javascripts/discourse/controllers/preferences_controller.js @@ -7,13 +7,9 @@ @module Discourse **/ Discourse.PreferencesController = Discourse.ObjectController.extend({ - allowAvatarUpload: function() { - return Discourse.SiteSettings.allow_uploaded_avatars; - }.property(), - allowUserLocale: function() { - return Discourse.SiteSettings.allow_user_locale; - }.property(), + allowAvatarUpload: Discourse.computed.setting('allow_uploaded_avatars'), + allowUserLocale: Discourse.computed.setting('allow_user_locale'), selectedCategories: function(){ return [].concat(this.get("watchedCategories"), this.get("trackedCategories"), this.get("mutedCategories")); @@ -34,9 +30,7 @@ Discourse.PreferencesController = Discourse.ObjectController.extend({ cannotDeleteAccount: Em.computed.not('can_delete_account'), deleteDisabled: Em.computed.or('saving', 'deleting', 'cannotDeleteAccount'), - canEditName: function() { - return Discourse.SiteSettings.enable_names; - }.property(), + canEditName: Discourse.computed.setting('enable_names'), canSelectTitle: function() { if (!Discourse.SiteSettings.enable_badges || this.get('model.badge_count') === 0) { diff --git a/app/assets/javascripts/discourse/controllers/site_map_controller.js b/app/assets/javascripts/discourse/controllers/site_map_controller.js index 01032113862..18f105068e3 100644 --- a/app/assets/javascripts/discourse/controllers/site_map_controller.js +++ b/app/assets/javascripts/discourse/controllers/site_map_controller.js @@ -13,9 +13,7 @@ Discourse.SiteMapController = Ember.ArrayController.extend(Discourse.HasCurrentU return Discourse.SiteSettings.faq_url ? Discourse.SiteSettings.faq_url : Discourse.getURL('/faq'); }.property(), - showMobileToggle: function() { - return Discourse.SiteSettings.enable_mobile_theme; - }.property(), + showMobileToggle: Discourse.computed.setting('enable_mobile_theme'), mobileViewLinkTextKey: function() { return Discourse.Mobile.mobileView ? "desktop_view" : "mobile_view"; diff --git a/app/assets/javascripts/discourse/controllers/user_invited_controller.js b/app/assets/javascripts/discourse/controllers/user_invited_controller.js index 673e3a0ae28..dc0e82fa1de 100644 --- a/app/assets/javascripts/discourse/controllers/user_invited_controller.js +++ b/app/assets/javascripts/discourse/controllers/user_invited_controller.js @@ -31,9 +31,7 @@ Discourse.UserInvitedController = Ember.ObjectController.extend({ @property maxInvites **/ - maxInvites: function() { - return Discourse.SiteSettings.invites_shown; - }.property(), + maxInvites: Discourse.computed.setting('invites_shown'), /** Can the currently logged in user invite users to the site diff --git a/app/assets/javascripts/discourse/lib/computed.js b/app/assets/javascripts/discourse/lib/computed.js index 3cf503bd0cb..9a69bbf3c04 100644 --- a/app/assets/javascripts/discourse/lib/computed.js +++ b/app/assets/javascripts/discourse/lib/computed.js @@ -128,5 +128,19 @@ Discourse.computed = { if (typeof result !== "undefined" && result.toString() === defaultValue) { return; } return result; }).property(path); + }, + + /** + Creates a property from a SiteSetting. In the future the plan is for them to + be able to update when changed. + + @method setting + @param {String} name of site setting + **/ + setting: function(name) { + return Ember.computed(function() { + return Discourse.SiteSettings[name]; + }).property(); } + }; diff --git a/test/javascripts/lib/computed_test.js b/test/javascripts/lib/computed_test.js index 6a97ac80b44..db7c77d2393 100644 --- a/test/javascripts/lib/computed_test.js +++ b/test/javascripts/lib/computed_test.js @@ -10,6 +10,17 @@ module("Discourse.Computed", { } }); +test("setting", function() { + var t = Em.Object.extend({ + vehicle: Discourse.computed.setting('vehicle'), + missingProp: Discourse.computed.setting('madeUpThing') + }).create(); + + Discourse.SiteSettings.vehicle = "airplane"; + equal(t.get('vehicle'), "airplane", "it has the value of the site setting"); + ok(!t.get('missingProp'), "it is falsy when the site setting is not defined"); +}); + test("propertyEqual", function() { var t = Em.Object.extend({ same: Discourse.computed.propertyEqual('cookies', 'biscuits')