diff --git a/public/javascripts/application.coffee b/public/javascripts/application.coffee index cd5e100..9844d50 100644 --- a/public/javascripts/application.coffee +++ b/public/javascripts/application.coffee @@ -161,13 +161,24 @@ class MailCatcher .append($('').text(message.subject or "No subject").toggleClass("blank", !message.subject)) .append($('').text @formatDate message.created_at) + scrollToRow: (row) -> + relativePosition = row.offset().top - $('#messages').offset().top + if relativePosition < 0 + $('#messages').scrollTop($('#messages').scrollTop() + relativePosition - 20) + else + overflow = relativePosition + row.height() - $('#messages').height() + if overflow > 0 + $('#messages').scrollTop($('#messages').scrollTop() + overflow + 20) + loadMessage: (id) -> id = id.id if id?.id? id ||= $('#messages tr.selected').attr 'data-message-id' if id? $('#messages tbody tr:not([data-message-id="'+id+'"])').removeClass 'selected' - $('#messages tbody tr[data-message-id="'+id+'"]').addClass 'selected' + messageRow = $('#messages tbody tr[data-message-id="'+id+'"]') + messageRow.addClass 'selected' + @scrollToRow(messageRow) $.getJSON '/messages/' + id + '.json', (message) => $('#message .metadata dd.created_at').text @formatDate message.created_at diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 3bfb166..ea8dc13 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -218,13 +218,29 @@ return $('#messages tbody').append($('').attr('data-message-id', message.id.toString()).append($('').text(message.sender || "No sender").toggleClass("blank", !message.sender)).append($('').text((message.recipients || []).join(', ') || "No receipients").toggleClass("blank", !message.recipients.length)).append($('').text(message.subject || "No subject").toggleClass("blank", !message.subject)).append($('').text(this.formatDate(message.created_at)))); }; + MailCatcher.prototype.scrollToRow = function(row) { + var overflow, relativePosition; + relativePosition = row.offset().top - $('#messages').offset().top; + if (relativePosition < 0) { + return $('#messages').scrollTop($('#messages').scrollTop() + relativePosition - 20); + } else { + overflow = relativePosition + row.height() - $('#messages').height(); + if (overflow > 0) { + return $('#messages').scrollTop($('#messages').scrollTop() + overflow + 20); + } + } + }; + MailCatcher.prototype.loadMessage = function(id) { - var _this = this; + var messageRow, + _this = this; if ((id != null ? id.id : void 0) != null) id = id.id; id || (id = $('#messages tr.selected').attr('data-message-id')); if (id != null) { $('#messages tbody tr:not([data-message-id="' + id + '"])').removeClass('selected'); - $('#messages tbody tr[data-message-id="' + id + '"]').addClass('selected'); + messageRow = $('#messages tbody tr[data-message-id="' + id + '"]'); + messageRow.addClass('selected'); + this.scrollToRow(messageRow); return $.getJSON('/messages/' + id + '.json', function(message) { var $ul; $('#message .metadata dd.created_at').text(_this.formatDate(message.created_at));