diff --git a/app/assets/javascripts/admin/models/admin_user.js b/app/assets/javascripts/admin/models/admin_user.js index 227659d21a7..6f836cbf3ad 100644 --- a/app/assets/javascripts/admin/models/admin_user.js +++ b/app/assets/javascripts/admin/models/admin_user.js @@ -67,7 +67,7 @@ Discourse.AdminUser = Discourse.User.extend({ }, trustLevels: function() { - return Discourse.Site.instance().get('trustLevels'); + return Discourse.Site.currentProp('trustLevels'); }.property(), dirty: Discourse.computed.propertyNotEqual('originalTrustLevel', 'trustLevel.id'), diff --git a/app/assets/javascripts/discourse.js b/app/assets/javascripts/discourse.js index b95625eb429..b947839b381 100644 --- a/app/assets/javascripts/discourse.js +++ b/app/assets/javascripts/discourse.js @@ -198,7 +198,7 @@ Discourse = Ember.Application.createWithMixins(Discourse.Ajax, { }), user.notification_channel_position); bus.subscribe("/categories", function(data){ - var site = Discourse.Site.instance(); + var site = Discourse.Site.current(); _.each(data.categories,function(c){ site.updateCategory(c); }); diff --git a/app/assets/javascripts/discourse/components/screen_track.js b/app/assets/javascripts/discourse/components/screen_track.js index ab15f7dde9b..00760df4739 100644 --- a/app/assets/javascripts/discourse/components/screen_track.js +++ b/app/assets/javascripts/discourse/components/screen_track.js @@ -165,23 +165,13 @@ Discourse.ScreenTrack = Ember.Object.extend({ }); -Discourse.ScreenTrack.reopenClass({ +Discourse.ScreenTrack.reopenClass(Discourse.Singleton, { // Don't send events if we haven't scrolled in a long time PAUSE_UNLESS_SCROLLED: 1000 * 60 * 3, // After 6 minutes stop tracking read position on post - MAX_TRACKING_TIME: 1000 * 60 * 6, - - - /** - Returns a Screen Tracking singleton - **/ - instance: function() { - if (this.screenTrack) { return this.screenTrack; } - this.screenTrack = Discourse.ScreenTrack.create(); - return this.screenTrack; - } + MAX_TRACKING_TIME: 1000 * 60 * 6 }); diff --git a/app/assets/javascripts/discourse/controllers/login_controller.js b/app/assets/javascripts/discourse/controllers/login_controller.js index 55c3c309886..4b25e8f6179 100644 --- a/app/assets/javascripts/discourse/controllers/login_controller.js +++ b/app/assets/javascripts/discourse/controllers/login_controller.js @@ -13,7 +13,7 @@ Discourse.LoginController = Discourse.Controller.extend(Discourse.ModalFunctiona loggingIn: false, site: function() { - return Discourse.Site.instance(); + return Discourse.Site.current(); }.property(), /** diff --git a/app/assets/javascripts/discourse/controllers/topic_controller.js b/app/assets/javascripts/discourse/controllers/topic_controller.js index 0533d47eed1..b8479d67072 100644 --- a/app/assets/javascripts/discourse/controllers/topic_controller.js +++ b/app/assets/javascripts/discourse/controllers/topic_controller.js @@ -222,7 +222,7 @@ Discourse.TopicController = Discourse.ObjectController.extend(Discourse.Selected }, resetRead: function() { - Discourse.ScreenTrack.instance().reset(); + Discourse.ScreenTrack.current().reset(); this.unsubscribe(); var topicController = this; diff --git a/app/assets/javascripts/discourse/models/archetype.js b/app/assets/javascripts/discourse/models/archetype.js index a975334c8ea..cfbc88c4182 100644 --- a/app/assets/javascripts/discourse/models/archetype.js +++ b/app/assets/javascripts/discourse/models/archetype.js @@ -11,7 +11,7 @@ Discourse.Archetype = Discourse.Model.extend({ hasOptions: Em.computed.gt('options.length', 0), site: function() { - return Discourse.Site.instance(); + return Discourse.Site.current(); }.property(), isDefault: Discourse.computed.propertyEqual('id', 'site.default_archetype'), diff --git a/app/assets/javascripts/discourse/models/category.js b/app/assets/javascripts/discourse/models/category.js index 029fca27e66..d53acdc19dc 100644 --- a/app/assets/javascripts/discourse/models/category.js +++ b/app/assets/javascripts/discourse/models/category.js @@ -125,7 +125,7 @@ Discourse.Category.reopenClass({ }, list: function() { - return Discourse.Site.instance().get('categories'); + return Discourse.Site.currentProp('categories'); }, findBySlugOrId: function(slugOrId) { diff --git a/app/assets/javascripts/discourse/models/composer.js b/app/assets/javascripts/discourse/models/composer.js index c85bcbb00e0..72cbff882f3 100644 --- a/app/assets/javascripts/discourse/models/composer.js +++ b/app/assets/javascripts/discourse/models/composer.js @@ -22,7 +22,7 @@ var CLOSED = 'closed', Discourse.Composer = Discourse.Model.extend({ archetypes: function() { - return Discourse.Site.instance().get('archetypes'); + return Discourse.Site.currentProp('archetypes'); }.property(), creatingTopic: Em.computed.equal('action', CREATE_TOPIC), @@ -254,7 +254,7 @@ Discourse.Composer = Discourse.Model.extend({ this._super(); var val = Discourse.KeyValueStore.get('composer.showPreview') || 'true'; this.set('showPreview', val === 'true'); - this.set('archetypeId', Discourse.Site.instance().get('default_archetype')); + this.set('archetypeId', Discourse.Site.currentProp('default_archetype')); }, /** @@ -329,7 +329,7 @@ Discourse.Composer = Discourse.Model.extend({ this.setProperties({ categoryName: opts.categoryName || this.get('topic.category.name'), - archetypeId: opts.archetypeId || Discourse.Site.instance().get('default_archetype'), + archetypeId: opts.archetypeId || Discourse.Site.currentProp('default_archetype'), metaData: opts.metaData ? Em.Object.create(opts.metaData) : null, reply: opts.reply || this.get("reply") || "" }); @@ -453,7 +453,7 @@ Discourse.Composer = Discourse.Model.extend({ user_id: currentUser.get('id'), metaData: this.get('metaData'), archetype: this.get('archetypeId'), - post_type: Discourse.Site.instance().get('post_types.regular'), + post_type: Discourse.Site.currentProp('post_types.regular'), target_usernames: this.get('targetUsernames'), actions_summary: Em.A(), moderator: currentUser.get('moderator'), diff --git a/app/assets/javascripts/discourse/models/nav_item.js b/app/assets/javascripts/discourse/models/nav_item.js index f6caeae2591..c4df6c42dc9 100644 --- a/app/assets/javascripts/discourse/models/nav_item.js +++ b/app/assets/javascripts/discourse/models/nav_item.js @@ -23,7 +23,7 @@ Discourse.NavItem = Discourse.Model.extend({ categorySlug: function() { var split = this.get('name').split('/'); if (split[0] === 'category' && split[1]) { - var cat = Discourse.Site.instance().categories.findProperty('name', split[1]); + var cat = Discourse.Site.current().categories.findProperty('name', split[1]); return cat ? Discourse.Category.slugFor(cat) : null; } return null; diff --git a/app/assets/javascripts/discourse/models/notification.js b/app/assets/javascripts/discourse/models/notification.js index d7a557f7234..fd2ce09b73a 100644 --- a/app/assets/javascripts/discourse/models/notification.js +++ b/app/assets/javascripts/discourse/models/notification.js @@ -19,7 +19,7 @@ Discourse.Notification = Discourse.Model.extend({ }.property(), rendered: function() { - var notificationName = Discourse.Site.instance().get('notificationLookup')[this.notification_type]; + var notificationName = Discourse.Site.currentProp('notificationLookup')[this.notification_type]; return I18n.t("notifications." + notificationName, { username: this.data.display_username, link: "" + this.data.topic_title + "" diff --git a/app/assets/javascripts/discourse/models/post.js b/app/assets/javascripts/discourse/models/post.js index bec021326eb..0fe6af36974 100644 --- a/app/assets/javascripts/discourse/models/post.js +++ b/app/assets/javascripts/discourse/models/post.js @@ -125,7 +125,7 @@ Discourse.Post = Discourse.Model.extend({ flagsAvailable: function() { var post = this, - flags = Discourse.Site.instance().get('flagTypes').filter(function(item) { + flags = Discourse.Site.currentProp('flagTypes').filter(function(item) { return post.get("actionByName." + (item.get('name_key')) + ".can_act"); }); return flags; @@ -155,7 +155,7 @@ Discourse.Post = Discourse.Model.extend({ }).then(function(result) { // If we received a category update, update it self.set('version', result.post.version); - if (result.category) Discourse.Site.instance().updateCategory(result.category); + if (result.category) Discourse.Site.current().updateCategory(result.category); if (complete) complete(Discourse.Post.create(result.post)); }, function(result) { // Post failed to update @@ -295,7 +295,7 @@ Discourse.Post = Discourse.Model.extend({ _.each(obj.actions_summary,function(a) { var actionSummary; a.post = post; - a.actionType = Discourse.Site.instance().postActionTypeById(a.id); + a.actionType = Discourse.Site.current().postActionTypeById(a.id); actionSummary = Discourse.ActionSummary.create(a); post.get('actions_summary').pushObject(actionSummary); lookup.set(a.actionType.get('name_key'), actionSummary); @@ -354,7 +354,7 @@ Discourse.Post.reopenClass({ var lookup = Em.Object.create(); result.actions_summary = result.actions_summary.map(function(a) { a.post = result; - a.actionType = Discourse.Site.instance().postActionTypeById(a.id); + a.actionType = Discourse.Site.current().postActionTypeById(a.id); var actionSummary = Discourse.ActionSummary.create(a); lookup.set(a.actionType.get('name_key'), actionSummary); return actionSummary; diff --git a/app/assets/javascripts/discourse/models/site.js b/app/assets/javascripts/discourse/models/site.js index 45c1d2c0965..27dc151f8f2 100644 --- a/app/assets/javascripts/discourse/models/site.js +++ b/app/assets/javascripts/discourse/models/site.js @@ -32,12 +32,16 @@ Discourse.Site = Discourse.Model.extend({ } }); -Discourse.Site.reopenClass({ +Discourse.Site.reopenClass(Discourse.Singleton, { - instance: function() { - if ( this._site ) return this._site; - this._site = Discourse.Site.create(PreloadStore.get('site')); - return this._site; + /** + The current singleton will retrieve its attributes from the `PreloadStore`. + + @method createCurrent + @returns {Discourse.Site} the site + **/ + createCurrent: function() { + return Discourse.Site.create(PreloadStore.get('site')); }, create: function(obj) { diff --git a/app/assets/javascripts/discourse/models/topic.js b/app/assets/javascripts/discourse/models/topic.js index dc49503529a..e6c1686c8d0 100644 --- a/app/assets/javascripts/discourse/models/topic.js +++ b/app/assets/javascripts/discourse/models/topic.js @@ -130,7 +130,7 @@ Discourse.Topic = Discourse.Model.extend({ }.property('views'), archetypeObject: function() { - return Discourse.Site.instance().get('archetypes').findProperty('id', this.get('archetype')); + return Discourse.Site.currentProp('archetypes').findProperty('id', this.get('archetype')); }.property('archetype'), isPrivateMessage: Em.computed.equal('archetype', 'private_message'), diff --git a/app/assets/javascripts/discourse/models/user.js b/app/assets/javascripts/discourse/models/user.js index 9225966ab66..4cf9bf28979 100644 --- a/app/assets/javascripts/discourse/models/user.js +++ b/app/assets/javascripts/discourse/models/user.js @@ -109,7 +109,7 @@ Discourse.User = Discourse.Model.extend({ @type {Integer} **/ trustLevel: function() { - return Discourse.Site.instance().get('trustLevels').findProperty('id', parseInt(this.get('trust_level'), 10)); + return Discourse.Site.currentProp('trustLevels').findProperty('id', parseInt(this.get('trust_level'), 10)); }.property('trust_level'), /** diff --git a/app/assets/javascripts/discourse/routes/application_route.js b/app/assets/javascripts/discourse/routes/application_route.js index dd8212fe567..d28e6b09c5e 100644 --- a/app/assets/javascripts/discourse/routes/application_route.js +++ b/app/assets/javascripts/discourse/routes/application_route.js @@ -49,7 +49,7 @@ Discourse.ApplicationRoute = Em.Route.extend({ router.controllerFor('editCategory').set('selectedTab', 'general'); } else { Discourse.Category.findBySlugOrId(category.get('slug') || category.get('id')).then(function (c) { - Discourse.Site.instance().updateCategory(c); + Discourse.Site.current().updateCategory(c); Discourse.Route.showModal(router, 'editCategory', c); router.controllerFor('editCategory').set('selectedTab', 'general'); }); diff --git a/app/assets/javascripts/discourse/routes/list_categories_route.js b/app/assets/javascripts/discourse/routes/list_categories_route.js index 1d27ae3004c..bc05096ca70 100644 --- a/app/assets/javascripts/discourse/routes/list_categories_route.js +++ b/app/assets/javascripts/discourse/routes/list_categories_route.js @@ -14,7 +14,7 @@ Discourse.ListCategoriesRoute = Discourse.Route.extend({ createCategory: function() { Discourse.Route.showModal(this, 'editCategory', Discourse.Category.create({ color: 'AB9364', text_color: 'FFFFFF', hotness: 5, group_permissions: [{group_name: "everyone", permission_type: 1}], - available_groups: Discourse.Site.instance().group_names + available_groups: Discourse.Site.current().group_names })); this.controllerFor('editCategory').set('selectedTab', 'general'); } diff --git a/app/assets/javascripts/discourse/routes/topic_route.js b/app/assets/javascripts/discourse/routes/topic_route.js index 04e752e2d0e..8e7a01cccd3 100644 --- a/app/assets/javascripts/discourse/routes/topic_route.js +++ b/app/assets/javascripts/discourse/routes/topic_route.js @@ -88,7 +88,7 @@ Discourse.TopicRoute = Discourse.Route.extend({ topicController.set('multiSelect', false); topicController.unsubscribe(); this.controllerFor('composer').set('topic', null); - Discourse.ScreenTrack.instance().stop(); + Discourse.ScreenTrack.current().stop(); var headerController; if (headerController = this.controllerFor('header')) { @@ -112,7 +112,7 @@ Discourse.TopicRoute = Discourse.Route.extend({ controller.subscribe(); // We reset screen tracking every time a topic is entered - Discourse.ScreenTrack.instance().start(model.get('id')); + Discourse.ScreenTrack.current().start(model.get('id')); } }); diff --git a/app/assets/javascripts/discourse/views/embedded_post_view.js b/app/assets/javascripts/discourse/views/embedded_post_view.js index 2a9c0082d04..b7c807fb17c 100644 --- a/app/assets/javascripts/discourse/views/embedded_post_view.js +++ b/app/assets/javascripts/discourse/views/embedded_post_view.js @@ -11,11 +11,11 @@ Discourse.EmbeddedPostView = Discourse.GroupedView.extend({ classNames: ['reply'], didInsertElement: function() { - Discourse.ScreenTrack.instance().track(this.get('elementId'), this.get('post.post_number')); + Discourse.ScreenTrack.current().track(this.get('elementId'), this.get('post.post_number')); }, willDestroyElement: function() { - Discourse.ScreenTrack.instance().stopTracking(this.get('elementId')); + Discourse.ScreenTrack.current().stopTracking(this.get('elementId')); } }); diff --git a/app/assets/javascripts/discourse/views/post_view.js b/app/assets/javascripts/discourse/views/post_view.js index 7329cdd4c69..272266e7f2b 100644 --- a/app/assets/javascripts/discourse/views/post_view.js +++ b/app/assets/javascripts/discourse/views/post_view.js @@ -16,7 +16,7 @@ Discourse.PostView = Discourse.GroupedView.extend({ postBinding: 'content', postTypeClass: function() { - return this.get('post.post_type') === Discourse.Site.instance().get('post_types.moderator_action') ? 'moderator' : 'regular'; + return this.get('post.post_type') === Discourse.Site.currentProp('post_types.moderator_action') ? 'moderator' : 'regular'; }.property('post.post_type'), // If the cooked content changed, add the quote controls @@ -153,7 +153,7 @@ Discourse.PostView = Discourse.GroupedView.extend({ }, willDestroyElement: function() { - Discourse.ScreenTrack.instance().stopTracking(this.$().prop('id')); + Discourse.ScreenTrack.current().stopTracking(this.$().prop('id')); }, didInsertElement: function() { @@ -162,7 +162,7 @@ Discourse.PostView = Discourse.GroupedView.extend({ this.showLinkCounts(); // Track this post - Discourse.ScreenTrack.instance().track(this.$().prop('id'), this.get('post.post_number')); + Discourse.ScreenTrack.current().track(this.$().prop('id'), this.get('post.post_number')); // Add syntax highlighting Discourse.SyntaxHighlighting.apply($post); diff --git a/app/assets/javascripts/discourse/views/topic_view.js b/app/assets/javascripts/discourse/views/topic_view.js index 1eca0ff9605..eece4e34fc4 100644 --- a/app/assets/javascripts/discourse/views/topic_view.js +++ b/app/assets/javascripts/discourse/views/topic_view.js @@ -193,7 +193,7 @@ Discourse.TopicView = Discourse.View.extend(Discourse.Scrolling, { }, throttledPositionUpdate: Discourse.debounce(function() { - Discourse.ScreenTrack.instance().scrolled(); + Discourse.ScreenTrack.current().scrolled(); var model = this.get('controller.model'); if (model && this.get('nextPositionUpdate')) { this.set('controller.currentPost', this.get('nextPositionUpdate')); diff --git a/test/javascripts/models/nav_item_test.js b/test/javascripts/models/nav_item_test.js index ecc6763c036..82647d67c10 100644 --- a/test/javascripts/models/nav_item_test.js +++ b/test/javascripts/models/nav_item_test.js @@ -1,7 +1,7 @@ module("Discourse.NavItem", { setup: function() { - this.site = Discourse.Site.instance(); - this.originalCategories = Discourse.Site.instance().get('categories') || []; + this.site = Discourse.Site.current(); + this.originalCategories = Discourse.Site.currentProp('categories') || []; this.site.set('categories', this.originalCategories.concat( [Discourse.Category.create({name: '确实是这样', id: 343434})] )); }, diff --git a/test/javascripts/models/site_test.js b/test/javascripts/models/site_test.js index b0cdd42962a..435d8341050 100644 --- a/test/javascripts/models/site_test.js +++ b/test/javascripts/models/site_test.js @@ -2,7 +2,7 @@ module("Discourse.Site"); test('instance', function(){ - var site = Discourse.Site.instance(); + var site = Discourse.Site.current(); present(site, "We have a current site singleton"); present(site.get('categories'), "The instance has a list of categories");