From 33e3fc0c00cf0369cf0f660d3f397a8dd7b94c86 Mon Sep 17 00:00:00 2001 From: Akash Manohar J Date: Fri, 13 Apr 2012 21:22:15 +0530 Subject: [PATCH] Fakes faster messaging by clearing the textbox before saving the message Signed-off-by: Akash Manohar J --- .../backbone/broadcasters/faye.js.coffee | 2 +- .../backbone/helpers/channels.js.coffee | 26 ++++++++++++------- .../backbone/views/chatbox.js.coffee | 7 +++-- .../backbone/views/show_activity.js.coffee | 5 +++- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/backbone/broadcasters/faye.js.coffee b/app/assets/javascripts/backbone/broadcasters/faye.js.coffee index bbee52f7..b6f7134e 100644 --- a/app/assets/javascripts/backbone/broadcasters/faye.js.coffee +++ b/app/assets/javascripts/backbone/broadcasters/faye.js.coffee @@ -43,7 +43,7 @@ class Kandan.Broadcasters.FayeBroadcaster subscribe: (channel)-> subscription = @fayeClient.subscribe channel, (data)=> - Kandan.Helpers.Channels.addActivity(data) + Kandan.Helpers.Channels.addActivity(data, Kandan.Helpers.Activities.ACTIVE_STATE) subscription.errback((data)-> console.log "error", data alert "Oops! could not connect to the server" diff --git a/app/assets/javascripts/backbone/helpers/channels.js.coffee b/app/assets/javascripts/backbone/helpers/channels.js.coffee index 44a05556..529dd088 100644 --- a/app/assets/javascripts/backbone/helpers/channels.js.coffee +++ b/app/assets/javascripts/backbone/helpers/channels.js.coffee @@ -11,11 +11,9 @@ class Kandan.Helpers.Channels scrollPercentage > @options.autoScrollThreshold @scrollToLatestMessage: (channelId)-> - console.log("scrolling to last message") $(document).scrollTop($(document).height()+9000) @currentScrollPosition: (channelId)-> - console.log("current scroll position") $(document).scrollTop() @channelActivitiesEl: (channelId)-> @@ -104,23 +102,33 @@ class Kandan.Helpers.Channels @createChannelArea(new Kandan.Models.Channel(activityAttributes.channel)) - @addActivity: (activityAttributes, state)-> + @addActivity: (activityAttributes, state, local)-> + local = local || false @createChannelIfNotExists(activityAttributes) if activityAttributes.channel_id - @addMessage(activityAttributes, state) + @addMessage(activityAttributes, state, local) else @addNotification(activityAttributes) channelId = activityAttributes.channel_id || @getActiveChannelId() @scrollToLatestMessage(channelId) if @pastAutoScrollThreshold(channelId) - @addMessage: (activityAttributes, state)-> - @channelActivitiesEl(activityAttributes.channel_id) - .append(@newActivityView(activityAttributes).render().el) + + @addMessage: (activityAttributes, state, local)-> + belongsToCurrentUser = ( activityAttributes.user.id == Kandan.Data.Users.currentUser().id ) + activityExists = ( $("#activity-#{activityAttributes.id}").length == 0 ) + local = local || false + + console.log local, !belongsToCurrentUser, !activityExists + if local || (!belongsToCurrentUser || !activityExists) + @channelActivitiesEl(activityAttributes.channel_id) + .append(@newActivityView(activityAttributes).render().el) + @flushActivities(activityAttributes.channel_id) - Kandan.Helpers.Utils.notifyInTitleIfRequired() - @setPaginationData(activityAttributes.channel_id) + if not local + Kandan.Helpers.Utils.notifyInTitleIfRequired() + @setPaginationData(activityAttributes.channel_id) @addNotification: (activityAttributes)-> diff --git a/app/assets/javascripts/backbone/views/chatbox.js.coffee b/app/assets/javascripts/backbone/views/chatbox.js.coffee index 9cae079e..cefa20bd 100644 --- a/app/assets/javascripts/backbone/views/chatbox.js.coffee +++ b/app/assets/javascripts/backbone/views/chatbox.js.coffee @@ -22,8 +22,11 @@ class Kandan.Views.Chatbox extends Backbone.View 'channel_id': @channel.get('id') }) - activity.save({},{success: ()=> - $chatbox.val("") + $chatbox.val("") + Kandan.Helpers.Channels.addActivity _.extend(activity.toJSON(), {cid: activity.cid, user: Kandan.Data.Users.currentUser()}), Kandan.Helpers.Activities.ACTIVE_STATE, true + + activity.save({},{success: (model, response)-> + $("#activity-c#{model.cid}").attr("id", "activity-#{model.get('id')}") }) render: ()-> diff --git a/app/assets/javascripts/backbone/views/show_activity.js.coffee b/app/assets/javascripts/backbone/views/show_activity.js.coffee index ad4cfc5d..35987cbb 100644 --- a/app/assets/javascripts/backbone/views/show_activity.js.coffee +++ b/app/assets/javascripts/backbone/views/show_activity.js.coffee @@ -16,7 +16,10 @@ class Kandan.Views.ShowActivity extends Backbone.View @compiledTemplate = Kandan.Helpers.Activities.buildFromMessageTemplate activity $(@el).data("activity-id", activity.id) - $(@el).attr("id", "activity-#{activity.id}") + if activity.id == undefined + $(@el).attr("id", "activity-c#{activity.cid}") + else + $(@el).attr("id", "activity-#{activity.id}") $(@el).html(@compiledTemplate) #NOTE can only set the data after it's been appended to the DOM