Merge pull request #65 from toy/stop_key_events

Stop key events
This commit is contained in:
Samuel Cochran 2012-10-28 19:48:18 -07:00
commit c24e075d6f
2 changed files with 48 additions and 9 deletions

View File

@ -62,23 +62,29 @@ class MailCatcher
id = @selectedMessage() || 1 id = @selectedMessage() || 1
id -= 1 if id > 1 id -= 1 if id > 1
@loadMessage(id) @loadMessage(id)
false
key 'down', => key 'down', =>
id = @selectedMessage() || @messagesCount() id = @selectedMessage() || @messagesCount()
id += 1 if id < @messagesCount() id += 1 if id < @messagesCount()
@loadMessage(id) @loadMessage(id)
false
key '⌘+up, ctrl+up', => key '⌘+up, ctrl+up', =>
@loadMessage(1) @loadMessage(1)
false
key '⌘+down, ctrl+down', => key '⌘+down, ctrl+down', =>
@loadMessage @messagesCount() @loadMessage @messagesCount()
false
key 'left', => key 'left', =>
@openTab @previousTab() @openTab @previousTab()
false
key 'right', => key 'right', =>
@openTab @nextTab() @openTab @nextTab()
false
@refresh() @refresh()
@subscribe() @subscribe()
@ -155,13 +161,24 @@ class MailCatcher
.append($('<td/>').text(message.subject or "No subject").toggleClass("blank", !message.subject)) .append($('<td/>').text(message.subject or "No subject").toggleClass("blank", !message.subject))
.append($('<td/>').text @formatDate message.created_at) .append($('<td/>').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) -> loadMessage: (id) ->
id = id.id if id?.id? id = id.id if id?.id?
id ||= $('#messages tr.selected').attr 'data-message-id' id ||= $('#messages tr.selected').attr 'data-message-id'
if id? if id?
$('#messages tbody tr:not([data-message-id="'+id+'"])').removeClass 'selected' $('#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) => $.getJSON '/messages/' + id + '.json', (message) =>
$('#message .metadata dd.created_at').text @formatDate message.created_at $('#message .metadata dd.created_at').text @formatDate message.created_at

View File

@ -90,25 +90,31 @@
var id; var id;
id = _this.selectedMessage() || 1; id = _this.selectedMessage() || 1;
if (id > 1) id -= 1; if (id > 1) id -= 1;
return _this.loadMessage(id); _this.loadMessage(id);
return false;
}); });
key('down', function() { key('down', function() {
var id; var id;
id = _this.selectedMessage() || _this.messagesCount(); id = _this.selectedMessage() || _this.messagesCount();
if (id < _this.messagesCount()) id += 1; if (id < _this.messagesCount()) id += 1;
return _this.loadMessage(id); _this.loadMessage(id);
return false;
}); });
key('⌘+up, ctrl+up', function() { key('⌘+up, ctrl+up', function() {
return _this.loadMessage(1); _this.loadMessage(1);
return false;
}); });
key('⌘+down, ctrl+down', function() { key('⌘+down, ctrl+down', function() {
return _this.loadMessage(_this.messagesCount()); _this.loadMessage(_this.messagesCount());
return false;
}); });
key('left', function() { key('left', function() {
return _this.openTab(_this.previousTab()); _this.openTab(_this.previousTab());
return false;
}); });
key('right', function() { key('right', function() {
return _this.openTab(_this.nextTab()); _this.openTab(_this.nextTab());
return false;
}); });
this.refresh(); this.refresh();
this.subscribe(); this.subscribe();
@ -212,13 +218,29 @@
return $('#messages tbody').append($('<tr />').attr('data-message-id', message.id.toString()).append($('<td/>').text(message.sender || "No sender").toggleClass("blank", !message.sender)).append($('<td/>').text((message.recipients || []).join(', ') || "No receipients").toggleClass("blank", !message.recipients.length)).append($('<td/>').text(message.subject || "No subject").toggleClass("blank", !message.subject)).append($('<td/>').text(this.formatDate(message.created_at)))); return $('#messages tbody').append($('<tr />').attr('data-message-id', message.id.toString()).append($('<td/>').text(message.sender || "No sender").toggleClass("blank", !message.sender)).append($('<td/>').text((message.recipients || []).join(', ') || "No receipients").toggleClass("blank", !message.recipients.length)).append($('<td/>').text(message.subject || "No subject").toggleClass("blank", !message.subject)).append($('<td/>').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) { MailCatcher.prototype.loadMessage = function(id) {
var _this = this; var messageRow,
_this = this;
if ((id != null ? id.id : void 0) != null) id = id.id; if ((id != null ? id.id : void 0) != null) id = id.id;
id || (id = $('#messages tr.selected').attr('data-message-id')); id || (id = $('#messages tr.selected').attr('data-message-id'));
if (id != null) { if (id != null) {
$('#messages tbody tr:not([data-message-id="' + id + '"])').removeClass('selected'); $('#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) { return $.getJSON('/messages/' + id + '.json', function(message) {
var $ul; var $ul;
$('#message .metadata dd.created_at').text(_this.formatDate(message.created_at)); $('#message .metadata dd.created_at').text(_this.formatDate(message.created_at));