From 623ff1bd613fc75f2fc0eee0fadfaa4c6cd560bc Mon Sep 17 00:00:00 2001 From: Spencer Date: Sat, 16 Feb 2013 01:34:57 -0600 Subject: [PATCH] auto scroll is working on initial load and tab switch --- .../javascripts/backbone/helpers/channels.js.coffee | 12 +++++++++--- app/assets/javascripts/backbone/kandan.js.coffee.erb | 12 +++++++++++- .../backbone/views/channel_pane.js.coffee | 3 ++- .../javascripts/backbone/views/chatbox.js.coffee | 5 +++-- app/views/main/index.html.erb | 6 +----- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/app/assets/javascripts/backbone/helpers/channels.js.coffee b/app/assets/javascripts/backbone/helpers/channels.js.coffee index 72d509c1..7cd53cbf 100644 --- a/app/assets/javascripts/backbone/helpers/channels.js.coffee +++ b/app/assets/javascripts/backbone/helpers/channels.js.coffee @@ -11,10 +11,14 @@ class Kandan.Helpers.Channels scrollPercentage > @options.autoScrollThreshold @scrollToLatestMessage: (channelId)-> - $(document).scrollTop($(document).height()+9000) + if channelId + theScrollArea = $('#channels-'+channelId) + theScrollArea.scrollTop(theScrollArea.prop('scrollHeight')) + else + $('.channels-pane').scrollTop($('.channels-pane').prop('scrollHeight')) @currentScrollPosition: (channelId)-> - $(document).scrollTop() + $('channels-pane').scrollTop() @channelActivitiesEl: (channelId)-> $("#channel-activities-#{channelId}") @@ -34,6 +38,7 @@ class Kandan.Helpers.Channels return $(document).data("active-channel-id") + @confirmDeletion: ()-> return confirm("Really delete the channel?") @@ -57,7 +62,7 @@ class Kandan.Helpers.Channels @getChannelIdByTabIndex: (tabIndex)-> $("#kandan .ui-tabs-panel") .eq(tabIndex) - .data("channel-id") + .data("channel-id") @getTabIndexByChannelId: (channelId)-> $("#channels-#{channelId}").prevAll("div").length @@ -90,6 +95,7 @@ class Kandan.Helpers.Channels view = new Kandan.Views.ChannelPane({channel: channel}) view.render $(channelArea) $(channelArea).data("channel_id", channel.get("id")) + @newActivityView: (activityAttributes)-> diff --git a/app/assets/javascripts/backbone/kandan.js.coffee.erb b/app/assets/javascripts/backbone/kandan.js.coffee.erb index 66140423..422fa5ec 100644 --- a/app/assets/javascripts/backbone/kandan.js.coffee.erb +++ b/app/assets/javascripts/backbone/kandan.js.coffee.erb @@ -72,7 +72,15 @@ window.Kandan = select: (event, ui)-> $(document).data('active-channel-id', Kandan.Helpers.Channels.getChannelIdByTabIndex(ui.index)) + + #the need for the delay feels hacky to me. + #It is there because the chat area has to render before scrollHeight can be determined. + theId = Kandan.Helpers.Channels.getActiveChannelId() + delay = (ms, func) -> setTimeout func, ms + delay 1, -> Kandan.Helpers.Channels.scrollToLatestMessage(theId) Kandan.Data.Channels.runCallbacks('change') + + add: (event, ui) -> $('.header .ui-tabs-panel:last').detach().appendTo('#channels') $('#kandan').tabs('option', 'disabled', []) @@ -92,10 +100,10 @@ window.Kandan = ''' + initChatArea: (channels)-> chatArea = new Kandan.Views.ChatArea({channels: channels}) $(".main-area").append(chatArea.render().el) - $(document).scrollTop($(document).height()+9000) onFetchActiveUsers: (channels)=> @@ -109,6 +117,8 @@ window.Kandan = Kandan.initChatArea(channels) Kandan.initTabs() Kandan.Widgets.initAll() + Kandan.Helpers.Channels.scrollToLatestMessage() + setCurrentUser: ()-> template = JST['current_user'] diff --git a/app/assets/javascripts/backbone/views/channel_pane.js.coffee b/app/assets/javascripts/backbone/views/channel_pane.js.coffee index 1740fed4..bcbf445b 100644 --- a/app/assets/javascripts/backbone/views/channel_pane.js.coffee +++ b/app/assets/javascripts/backbone/views/channel_pane.js.coffee @@ -13,7 +13,7 @@ class Kandan.Views.ChannelPane extends Backbone.View $(container).attr "id", "channels-#{@options.channel.get("id")}" $(container).attr "class", "channels-pane" $(container).data "channel-id", @options.channel.get('id') - + paginatedActivitiesView: ()-> view = new Kandan.Views.PaginatedActivities({channel: @options.channel}) view.render().el @@ -21,3 +21,4 @@ class Kandan.Views.ChannelPane extends Backbone.View chatboxView: ()-> view = new Kandan.Views.Chatbox({channel: @options.channel}) view.render().el + diff --git a/app/assets/javascripts/backbone/views/chatbox.js.coffee b/app/assets/javascripts/backbone/views/chatbox.js.coffee index a3333165..d0bc3ad8 100644 --- a/app/assets/javascripts/backbone/views/chatbox.js.coffee +++ b/app/assets/javascripts/backbone/views/chatbox.js.coffee @@ -37,8 +37,9 @@ class Kandan.Views.Chatbox extends Backbone.View ) $("#activity-c#{model.cid}").attr("id", "activity-#{model.get('id')}") - $scrollbox = $('.channels-pane') - $scrollbox.prop("scrollTop", $scrollbox.prop('scrollHeight')) + theId = Kandan.Helpers.Channels.getActiveChannelId() + Kandan.Helpers.Channels.scrollToLatestMessage(theId) + }) render: ()-> diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index c62eea03..c2efd176 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -4,9 +4,6 @@ }) <%- end %> - - -
<%= image_tag "logo.png", :class=>"logo" %> @@ -50,5 +47,4 @@ <%= link_to 'Logout', destroy_user_session_path, :method => :delete %>

<%= link_to 'About Kandan', about_path, @about %> -
- +
\ No newline at end of file