diff --git a/app/assets/javascripts/backbone/broadcasters/faye.js.coffee b/app/assets/javascripts/backbone/broadcasters/faye.js.coffee index bbee52f..b6f7134 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 44a0555..31c712d 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 || (!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 9cae079..1e43001 100644 --- a/app/assets/javascripts/backbone/views/chatbox.js.coffee +++ b/app/assets/javascripts/backbone/views/chatbox.js.coffee @@ -11,19 +11,31 @@ class Kandan.Views.Chatbox extends Backbone.View postMessageOnEnter: (event)-> - @postMessage(event) if event.keyCode== 13 + if event.keyCode== 13 + @postMessage(event) + event.preventDefault() postMessage: (event)-> $chatbox = $(event.target).parent().find(".chat-input") + chatInput = $chatbox.val() + return false if chatInput.trim().length==0 + activity = new Kandan.Models.Activity({ - 'content': $chatbox.val(), + 'content': chatInput, 'action': 'message', '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()}, created_at: new Date()), + 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 ad4cfc5..35987cb 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