From b7861fd2dd371bd41acc0de75a53c486c110f309 Mon Sep 17 00:00:00 2001 From: Melissa Noelle Date: Fri, 22 Aug 2014 19:26:15 -0400 Subject: [PATCH] Updated JS, waiting on CSS. --- lefttabs/lefttabs.js | 122 ++++++++++++++++++++++++++++--------------- 1 file changed, 81 insertions(+), 41 deletions(-) diff --git a/lefttabs/lefttabs.js b/lefttabs/lefttabs.js index 6288b84..2314e93 100644 --- a/lefttabs/lefttabs.js +++ b/lefttabs/lefttabs.js @@ -21,23 +21,67 @@ CandyShop.LeftTabs = (function(self, Candy, $) { * Initializes the LeftTabs plugin with the default settings. */ self.init = function(){ + // Override the scrollToBottom method since our DOM is changed. + Candy.View.Pane.Room.scrollToBottom = function(roomJid) { + var messagePane = Candy.View.Pane.Room.getPane(roomJid, '.message-pane'); + messagePane.scrollTop(messagePane.prop('scrollHeight')); + }; + + Candy.View.Translation.en.dateFormat = 'mm/dd/yyyy'; + Candy.View.Translation.en.timeFormat = 'h:MM tt'; + Candy.View.Template.Roster = { + pane: '
People
', + user: '
' + + ' ' + + '
{{displayNick}}
' + }; + Candy.View.Template.Message = { + pane: '
', + item: '
  • ' + + '{{displayName}}' + + '{{time}}' + + '{{{message}}}' + + '
  • ' + }; + Candy.View.Template.Room = { + pane: '
    ' + + '
    {{> messages}}{{> form}}
    {{> roster}}
    ', + subject: '
  • ' + + '{{time}}' + + '{{_roomSubject}} {{{subject}}}' + + '
  • ', + form: '
    ' + + '
    ' + + '' + + '' + + '
    ' + + '
    ' + }; Candy.View.Template.Chat = { - pane: '
    {{> tabs}}{{> toolbar}}{{> rooms}}
    {{> modal}}', - rooms: '
    ', - tabs: '
    ', + pane: '
    {{> tabs}}{{> rooms}}{{> toolbar}}
    {{> modal}}', + rooms: '
    ', + tabs: '
    Chats
    ', tab: '
  • ' + + '\u00D7' + '{{#privateUserChat}} {{/privateUserChat}}{{name}}' + - '\u00D7' + '
  • ', modal: '
    \u00D7' + '' + - '' + + '' + '
    ', - adminMessage: '
  • {{time}}
    ' + - '{{sender}}' + - '{{subject}} {{message}}
  • ', - infoMessage: '
  • {{time}}
    ' + - '{{subject}} {{message}}
  • ', + adminMessage: '
  • ' + + '{{sender}}' + + '{{time}}' + + '{{subject}} {{{message}}}' + + '
  • ', + infoMessage: '
  • ' + + '{{time}}' + + '{{subject}} {{{message}}}' + + '
  • ', toolbar: '', soundcontrol: '' + + '' + '', Context: { menu: '
    ' + @@ -67,47 +111,43 @@ CandyShop.LeftTabs = (function(self, Candy, $) { '
    ' }; - // Make the message pane the full height of the window. - self.heights(); - - // Make sure that the window heights are the right size after the window is resized. - $(window).resize(function() { - self.heights(); - }); - - // Make sure that the window heights are the right size after a new room is added. $(Candy).on('candy:view.room.after-add', function() { - self.heights(); - if(typeof CandyShop.CreateRoom == "object") { + if(typeof CandyShop.CreateRoom === "object") { self.createRoomPluginCompatibility(); + self.resetHeight(); } }); - $(Candy).on('candy:view.message.after-show', function(ev, obj) { - if(Candy.View.Pane.Window.autoscroll) { - $('div[data-roomjid="' + obj.roomJid + '"] .message-pane').scrollTop($('div[data-roomjid="' + obj.roomJid + '"] .message-pane').prop('scrollHeight') + $('div[data-roomjid="' + obj.roomJid + '"] .message-form-wrapper').height()); + $(Candy).on('candy:view.connection.status-5', self.scheduleResetHeight); + $(Candy).on('candy:view.connection.status-8', self.scheduleResetHeight); + + $(window).resize(function() { + if($(window).width() > 992) { + self.resetHeight(); + } else { + self.resetHeight('100%'); } }); - }; - self.heights = function() { - var barless_height = $(window).height() - $('.message-form-wrapper').height(); - var message_pane_height = barless_height; - var message_pane_wrapper_height = (barless_height - parseInt($('.message-pane-wrapper').css('padding-bottom'))); - if(CandyShop.RoomBar) { - message_pane_height = barless_height - parseInt($('.roombar').css('height')); - $('.message-pane').css('margin-top', parseInt($('.roombar').css('height')) + 'px'); - } - $('.message-pane-wrapper').height(message_pane_wrapper_height + 'px'); - $('.message-pane').height(message_pane_height + 'px'); - $('.roster-pane').height(barless_height + 'px'); - } + self.scheduleResetHeight = function() { + // FIXME: Is there a better way?! + // This happens before the roster loads, but the only roster callback we get would be invoked once for each roster entry, which is far too much. + // Use this hack to correct the viewport a few seconds after login, just in case. + setTimeout(self.resetHeight, 10000); + }; self.createRoomPluginCompatibility = function() { $('#create-group-form button').addClass('btn'); $('#create-group-form .close-button').html(''); - } + }; + + self.resetHeight = function(value) { + if (typeof value === 'undefined' || value === '') { + value = $(window).height(); + } + $('.full-height').css({height: value}); + }; return self; }(CandyShop.LeftTabs || {}, Candy, jQuery));