- {{#if Discourse.currentUser.admin}}
+ {{#if currentUser.admin}}
{{i18n admin.user.refresh_browsers}}
diff --git a/app/assets/javascripts/discourse/controllers/composer_controller.js b/app/assets/javascripts/discourse/controllers/composer_controller.js
index 5a4c96210ea..5ec3d47a599 100644
--- a/app/assets/javascripts/discourse/controllers/composer_controller.js
+++ b/app/assets/javascripts/discourse/controllers/composer_controller.js
@@ -93,10 +93,12 @@ Discourse.ComposerController = Discourse.Controller.extend({
}).then(function(opts) {
opts = opts || {};
_this.close();
+
+ var currentUser = Discourse.User.current();
if (composer.get('creatingTopic')) {
- Discourse.set('currentUser.topic_count', Discourse.User.current('topic_count') + 1);
+ currentUser.set('topic_count', currentUser.get('topic_count') + 1);
} else {
- Discourse.set('currentUser.reply_count', Discourse.User.current('reply_count') + 1);
+ currentUser.set('reply_count', currentUser.get('reply_count') + 1);
}
Discourse.URL.routeTo(opts.post.get('url'));
}, function(error) {
@@ -151,7 +153,8 @@ Discourse.ComposerController = Discourse.Controller.extend({
Discourse.ajax("/education/" + educationKey, {dataType: 'html'}).then(function(result) {
composerController.set('educationContents', result);
});
- }.observes('typedReply', 'content.creatingTopic', 'Discourse.currentUser.reply_count'),
+
+ }.observes('typedReply', 'content.creatingTopic', 'currentUser.reply_count'),
checkReplyLength: function() {
this.set('typedReply', this.present('content.reply'));
diff --git a/app/assets/javascripts/discourse/controllers/controller.js b/app/assets/javascripts/discourse/controllers/controller.js
index 73e1e696623..ce298bced04 100644
--- a/app/assets/javascripts/discourse/controllers/controller.js
+++ b/app/assets/javascripts/discourse/controllers/controller.js
@@ -1,12 +1,10 @@
/**
A base controller for Discourse that includes Presence support.
- @class Controller
+ @class Controller
@extends Ember.Controller
@namespace Discourse
@uses Discourse.Presence
@module Discourse
-**/
-Discourse.Controller = Ember.Controller.extend(Discourse.Presence);
-
-
+**/
+Discourse.Controller = Ember.Controller.extend(Discourse.Presence, Discourse.HasCurrentUser);
diff --git a/app/assets/javascripts/discourse/controllers/list_controller.js b/app/assets/javascripts/discourse/controllers/list_controller.js
index ab19926dc5c..6eacd7f59cb 100644
--- a/app/assets/javascripts/discourse/controllers/list_controller.js
+++ b/app/assets/javascripts/discourse/controllers/list_controller.js
@@ -7,7 +7,6 @@
@module Discourse
**/
Discourse.ListController = Discourse.Controller.extend({
- currentUserBinding: 'Discourse.currentUser',
categoryBinding: 'topicList.category',
canCreateCategory: false,
canCreateTopic: false,
diff --git a/app/assets/javascripts/discourse/controllers/object_controller.js b/app/assets/javascripts/discourse/controllers/object_controller.js
index 32ae3f9ab2a..966c9c52fde 100644
--- a/app/assets/javascripts/discourse/controllers/object_controller.js
+++ b/app/assets/javascripts/discourse/controllers/object_controller.js
@@ -1,12 +1,12 @@
/**
A custom object controller for Discourse
- @class ObjectController
+ @class ObjectController
@extends Ember.ObjectController
@namespace Discourse
@uses Discourse.Presence
@module Discourse
-**/
-Discourse.ObjectController = Ember.ObjectController.extend(Discourse.Presence);
+**/
+Discourse.ObjectController = Ember.ObjectController.extend(Discourse.Presence, Discourse.HasCurrentUser);
diff --git a/app/assets/javascripts/discourse/controllers/topic_controller.js b/app/assets/javascripts/discourse/controllers/topic_controller.js
index 66da2a60236..a41d81aa2e5 100644
--- a/app/assets/javascripts/discourse/controllers/topic_controller.js
+++ b/app/assets/javascripts/discourse/controllers/topic_controller.js
@@ -334,7 +334,7 @@ Discourse.TopicController = Discourse.ObjectController.extend(Discourse.Selected
},
/**
- Clears the pin from a topic for the currentUser
+ Clears the pin from a topic for the currently logged in user
@method clearPin
**/
diff --git a/app/assets/javascripts/discourse/mixins/has_current_user.js b/app/assets/javascripts/discourse/mixins/has_current_user.js
new file mode 100644
index 00000000000..b23d3a28761
--- /dev/null
+++ b/app/assets/javascripts/discourse/mixins/has_current_user.js
@@ -0,0 +1,31 @@
+/**
+ This mixin provides a `currentUser` property that can be used to retrieve information
+ about the currently logged in user. It is mostly useful to controllers so it can be
+ exposted to templates.
+
+ Outside of templates, code should probably use `Discourse.User.current()` instead of
+ this property.
+
+ @class Discourse.HasCurrentUser
+ @extends Ember.Mixin
+ @namespace Discourse
+ @module HasCurrentUser
+**/
+Discourse.HasCurrentUser = Em.Mixin.create({
+
+ /**
+ Returns a reference to the currently logged in user.
+
+ @method currentUser
+ @return {Discourse.User} the currently logged in user if present.
+ */
+ currentUser: function() {
+ return Discourse.User.current();
+ }.property().volatile()
+
+});
+
+
+
+
+
diff --git a/app/assets/javascripts/discourse/models/topic.js b/app/assets/javascripts/discourse/models/topic.js
index 812fa300935..28fbfe09de7 100644
--- a/app/assets/javascripts/discourse/models/topic.js
+++ b/app/assets/javascripts/discourse/models/topic.js
@@ -338,7 +338,7 @@ Discourse.Topic = Discourse.Model.extend({
},
/**
- Clears the pin from a topic for the currentUser
+ Clears the pin from a topic for the currently logged in user
@method clearPin
**/
diff --git a/app/assets/javascripts/discourse/models/user.js b/app/assets/javascripts/discourse/models/user.js
index 001a91408da..a4af0adc8cc 100644
--- a/app/assets/javascripts/discourse/models/user.js
+++ b/app/assets/javascripts/discourse/models/user.js
@@ -160,8 +160,8 @@ Discourse.User = Discourse.Model.extend({
type: 'PUT'
}).then(function(data) {
user.set('bio_excerpt',data.user.bio_excerpt);
- Discourse.set('currentUser.enable_quoting', user.get('enable_quoting'));
- Discourse.set('currentUser.external_links_in_new_tab', user.get('external_links_in_new_tab'));
+ Discourse.User.current().set('enable_quoting', user.get('enable_quoting'));
+ Discourse.User.current().set('external_links_in_new_tab', user.get('external_links_in_new_tab'));
});
},
diff --git a/app/assets/javascripts/discourse/routes/application_route.js b/app/assets/javascripts/discourse/routes/application_route.js
deleted file mode 100644
index 6ca976d481d..00000000000
--- a/app/assets/javascripts/discourse/routes/application_route.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- The base Application route
-
- @class ApplicationRoute
- @extends Discourse.Route
- @namespace Discourse
- @module Discourse
-**/
-Discourse.ApplicationRoute = Discourse.Route.extend({
- setupController: function(controller) {
- Discourse.set('currentUser', Discourse.User.current());
- }
-});
diff --git a/app/assets/javascripts/discourse/templates/composer.js.handlebars b/app/assets/javascripts/discourse/templates/composer.js.handlebars
index 551803f96f5..102ff4b3195 100644
--- a/app/assets/javascripts/discourse/templates/composer.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/composer.js.handlebars
@@ -66,7 +66,7 @@
- {{#if Discourse.currentUser}}
+ {{#if currentUser}}
{{{content.toggleText}}}
{{#if view.loadingImage}}
@@ -77,7 +77,7 @@
{{/if}}
- {{#if Discourse.currentUser}}
+ {{#if currentUser}}