From c21ace8173d9ea2d43c2894c41b909f5e0a57d4b Mon Sep 17 00:00:00 2001 From: "Mark J. Titorenko" Date: Fri, 15 Mar 2013 23:59:40 +0000 Subject: [PATCH] Better user handling; better initialization callbacks. --- .../backbone/collections/users.js.coffee | 3 +- .../backbone/helpers/channels.js.coffee | 9 +++ .../backbone/helpers/users.js.coffee | 6 ++ .../javascripts/backbone/kandan.js.coffee | 55 +++++++++++++------ 4 files changed, 54 insertions(+), 19 deletions(-) diff --git a/app/assets/javascripts/backbone/collections/users.js.coffee b/app/assets/javascripts/backbone/collections/users.js.coffee index 8b137891..9dee7475 100644 --- a/app/assets/javascripts/backbone/collections/users.js.coffee +++ b/app/assets/javascripts/backbone/collections/users.js.coffee @@ -1 +1,2 @@ - +class Kandan.Collections.Users extends Backbone.Collection + url: "users" diff --git a/app/assets/javascripts/backbone/helpers/channels.js.coffee b/app/assets/javascripts/backbone/helpers/channels.js.coffee index 796c6945..c7923cf9 100644 --- a/app/assets/javascripts/backbone/helpers/channels.js.coffee +++ b/app/assets/javascripts/backbone/helpers/channels.js.coffee @@ -1,4 +1,13 @@ class Kandan.Helpers.Channels + @all: (options)-> + $(document).data("channels") + + @getCollection: -> + $(document).data("channelsCollection") + + @setCollection: (collection)-> + $(document).data("channelsCollection", collection) + $(document).data("channels", collection.toJSON()) @options: autoScrollThreshold: 0.90 diff --git a/app/assets/javascripts/backbone/helpers/users.js.coffee b/app/assets/javascripts/backbone/helpers/users.js.coffee index b5d803b0..06f39b4d 100644 --- a/app/assets/javascripts/backbone/helpers/users.js.coffee +++ b/app/assets/javascripts/backbone/helpers/users.js.coffee @@ -1,3 +1,9 @@ class Kandan.Helpers.Users + @all: (options)-> + $(document).data("users") + + @setFromCollection: (collection)-> + $(document).data("users", collection.toJSON()) + @currentUser: ()-> $.data(document, 'current-user') \ No newline at end of file diff --git a/app/assets/javascripts/backbone/kandan.js.coffee b/app/assets/javascripts/backbone/kandan.js.coffee index 7582866a..37fe3b16 100644 --- a/app/assets/javascripts/backbone/kandan.js.coffee +++ b/app/assets/javascripts/backbone/kandan.js.coffee @@ -108,15 +108,29 @@ window.Kandan = $(".main-area").append(chatArea.render().el) - onFetchActiveUsers: (channels)=> - return (activeUsers)=> + onFetchUsers: (callback) -> + (users) => + Kandan.Helpers.Users.setFromCollection(users) + callback() + + onFetchActiveUsers: (callback) -> + (activeUsers) => if not Kandan.Helpers.ActiveUsers.collectionHasCurrentUser(activeUsers) activeUsers.add([Kandan.Helpers.Users.currentUser()]) - Kandan.Helpers.ActiveUsers.setFromCollection(activeUsers) + callback() + + registerUtilityEvents: ()-> + window.setInterval(=> + for el in $(".posted_at") + $(el).text (new Date($(el).data("timestamp"))).toRelativeTime(@options().now_threshold) + , @options().timestamp_refresh_interval) + + init: -> + initializer = @createCallback 3, => Kandan.registerPlugins() Kandan.Plugins.initAll() - Kandan.initChatArea(channels) + Kandan.initChatArea(Kandan.Helpers.Channels.getCollection()) Kandan.initTabs() Kandan.Widgets.initAll() Kandan.Helpers.Channels.scrollToLatestMessage() @@ -124,18 +138,23 @@ window.Kandan = Kandan.Plugins.Emojis.attachToChatbox() return - registerUtilityEvents: ()-> - window.setInterval(=> - for el in $(".posted_at") - $(el).text (new Date($(el).data("timestamp"))).toRelativeTime(@options().now_threshold) - , @options().timestamp_refresh_interval) - - init: -> - channels = new Kandan.Collections.Channels() - channels.fetch({ - success: (channelsCollection)=> - @initBroadcasterAndSubscribe() - activeUsers = new Kandan.Collections.ActiveUsers() - activeUsers.fetch({success: @onFetchActiveUsers(channelsCollection)}) - }) + new Kandan.Collections.Channels().fetch { + success: @onFetchChannels(initializer) + } + new Kandan.Collections.ActiveUsers().fetch { + success: @onFetchActiveUsers(initializer) + } + new Kandan.Collections.Users().fetch { + success: @onFetchUsers(initializer) + } @registerUtilityEvents() + @initBroadcasterAndSubscribe() + + createCallback: (limit, callback)-> + finishedCalls = 0 + -> callback() if ++finishedCalls == limit + + onFetchChannels: (callback) -> + (channels) => + Kandan.Helpers.Channels.setCollection(channels) + callback()