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));