Skip to content

Commit

Permalink
Slight refactoring; added comments about what is going on. :)
Browse files Browse the repository at this point in the history
  • Loading branch information
mjtko committed Mar 16, 2013
1 parent 828cd54 commit 4338246
Showing 1 changed file with 32 additions and 28 deletions.
60 changes: 32 additions & 28 deletions app/assets/javascripts/backbone/kandan.js.coffee
Expand Up @@ -61,11 +61,9 @@ window.Kandan =
Kandan.Helpers.Utils.browserTabFocused = false
)


initBroadcasterAndSubscribe: ()->
Kandan.broadcaster = eval "new Kandan.Broadcasters.#{@options().broadcaster.name}Broadcaster()"
Kandan.broadcaster.subscribe "/channels/*"
@registerAppEvents()

initTabs: ()->
$('#kandan').tabs({
Expand Down Expand Up @@ -107,54 +105,60 @@ window.Kandan =
chatArea = new Kandan.Views.ChatArea({channels: channels})
$(".main-area").append(chatArea.render().el)


onFetchUsers: (callback) ->
(users) =>
Kandan.Helpers.Users.setFromCollection(users)
onFetchChannels: (callback) ->
(channels) ->
Kandan.Helpers.Channels.setCollection(channels)
callback()

onFetchActiveUsers: (callback) ->
(activeUsers) =>
(activeUsers) ->
if not Kandan.Helpers.ActiveUsers.collectionHasCurrentUser(activeUsers)
activeUsers.add([Kandan.Helpers.Users.currentUser()])
Kandan.Helpers.ActiveUsers.setFromCollection(activeUsers)
callback()

onFetchUsers: (callback) ->
(users) ->
Kandan.Helpers.Users.setFromCollection(users)
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()
asyncInitializers = [
(callback) => new Kandan.Collections.Channels().fetch { success: @onFetchChannels(callback) }
(callback) => new Kandan.Collections.ActiveUsers().fetch { success: @onFetchActiveUsers(callback) }
(callback) => new Kandan.Collections.Users().fetch { success: @onFetchUsers(callback) }
]
# The initializer callback should only be called after all
# asynchronous initialization has been completed.
syncInitializer = @callAfter asyncInitializers.length, =>
@registerPlugins()
Kandan.Plugins.initAll()
Kandan.initChatArea(Kandan.Helpers.Channels.getCollection())
Kandan.initTabs()
@initChatArea(Kandan.Helpers.Channels.getCollection())
@initTabs()
Kandan.Widgets.initAll()
Kandan.Helpers.Channels.scrollToLatestMessage()
Kandan.Plugins.Mentions.initUsersMentions(Kandan.Helpers.ActiveUsers.all())
Kandan.Plugins.Emojis.attachToChatbox()
return

new Kandan.Collections.Channels().fetch {
success: @onFetchChannels(initializer)
}
new Kandan.Collections.ActiveUsers().fetch {
success: @onFetchActiveUsers(initializer)
}
new Kandan.Collections.Users().fetch {
success: @onFetchUsers(initializer)
}

# Call the asynchronous initializers, passing the synchronous
# initializer in as the callback to execute after all asynchrnous
# initialization is complete.
_(asyncInitializers).each (f) -> f.call(@, syncInitializer)

# The following intiialization routines don't require deferred
# initialization and can be executed immediately.
@registerUtilityEvents()
@initBroadcasterAndSubscribe()
@registerAppEvents()

createCallback: (limit, callback)->
# Create a function that is fired only after it has been attempted
# `limit` times.
callAfter: (limit, callback) ->
finishedCalls = 0
-> callback() if ++finishedCalls == limit

onFetchChannels: (callback) ->
(channels) =>
Kandan.Helpers.Channels.setCollection(channels)
callback()

0 comments on commit 4338246

Please sign in to comment.