(function() { var MailCatcher; var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; jQuery.expr[':'].icontains = function(a, i, m) { var _ref, _ref2; return ((_ref = (_ref2 = a.textContent) != null ? _ref2 : a.innerText) != null ? _ref : "").toUpperCase().indexOf(m[3].toUpperCase()) >= 0; }; MailCatcher = (function() { function MailCatcher() { this.nextTab = __bind(this.nextTab, this);; this.previousTab = __bind(this.previousTab, this);; this.openTab = __bind(this.openTab, this);; this.selectedTab = __bind(this.selectedTab, this);; this.getTab = __bind(this.getTab, this);; $('#messages tr').live('click', __bind(function(e) { e.preventDefault(); return this.loadMessage($(e.currentTarget).attr('data-message-id')); }, this)); $('input[name=search]').keyup(__bind(function(e) { var query; query = $.trim($(e.currentTarget).val()); if (query) { return this.searchMessages(query); } else { return this.clearSearch(); } }, this)); $('#message .views .format.tab a').live('click', __bind(function(e) { e.preventDefault(); return this.loadMessageBody(this.selectedMessage(), $($(e.currentTarget).parent('li')).data('message-format')); }, this)); $('#message .views .analysis.tab a').live('click', __bind(function(e) { e.preventDefault(); return this.loadMessageAnalysis(this.selectedMessage()); }, this)); $('#resizer').live({ mousedown: function(e) { var events; e.preventDefault(); return $(window).bind(events = { mouseup: function(e) { e.preventDefault(); return $(window).unbind(events); }, mousemove: function(e) { e.preventDefault(); return $('#messages').css({ height: e.clientY - $('#messages').offset().top }); } }); } }); $('nav.app .clear a').live('click', __bind(function(e) { e.preventDefault(); if (confirm("You will lose all your received messages.\n\nAre you sure you want to clear all messages?")) { return $.ajax({ url: '/messages', type: 'DELETE', success: function() { $('#messages tbody, #message .metadata dd').empty(); $('#message .metadata .attachments').hide(); return $('#message iframe').attr('src', 'about:blank'); }, error: function() { return alert('Error while quitting.'); } }); } }, this)); $('nav.app .quit a').live('click', __bind(function(e) { e.preventDefault(); if (confirm("You will lose all your received messages.\n\nAre you sure you want to quit?")) { return $.ajax({ type: 'DELETE', success: function() { return location.replace($('body > header h1 a').attr('href')); }, error: function() { return alert('Error while quitting.'); } }); } }, this)); key('up', __bind(function() { var id; id = this.selectedMessage() || 1; if (id > 1) { id -= 1; } return this.loadMessage(id); }, this)); key('down', __bind(function() { var id; id = this.selectedMessage() || this.messagesCount(); if (id < this.messagesCount()) { id += 1; } return this.loadMessage(id); }, this)); key('⌘+up, ctrl+up', __bind(function() { return this.loadMessage(1); }, this)); key('⌘+down, ctrl+down', __bind(function() { return this.loadMessage(this.messagesCount()); }, this)); key('left', __bind(function() { return this.openTab(this.previousTab()); }, this)); key('right', __bind(function() { return this.openTab(this.nextTab()); }, this)); this.refresh(); this.subscribe(); } MailCatcher.prototype.parseDateRegexp = /^(\d{4})[-\/\\](\d{2})[-\/\\](\d{2})(?:\s+|T)(\d{2})[:-](\d{2})[:-](\d{2})(?:([ +-]\d{2}:\d{2}|\s*\S+|Z?))?$/; MailCatcher.prototype.parseDate = function(date) { var match; if (match = this.parseDateRegexp.exec(date)) { return new Date(match[1], match[2] - 1, match[3], match[4], match[5], match[6], 0); } }; MailCatcher.prototype.offsetTimeZone = function(date) { var offset; offset = Date.now().getTimezoneOffset() * 60000; date.setTime(date.getTime() - offset); return date; }; MailCatcher.prototype.formatDate = function(date) { if (typeof date === "string") { date && (date = this.parseDate(date)); } date && (date = this.offsetTimeZone(date)); return date && (date = date.toString("dddd, d MMM yyyy h:mm:ss tt")); }; MailCatcher.prototype.messagesCount = function() { return $('#messages tr').length - 1; }; MailCatcher.prototype.tabs = function() { return $('#message ul').children('.tab'); }; MailCatcher.prototype.getTab = function(i) { return $(this.tabs()[i]); }; MailCatcher.prototype.selectedTab = function() { return this.tabs().index($('#message li.tab.selected')); }; MailCatcher.prototype.openTab = function(i) { return this.getTab(i).children('a').click(); }; MailCatcher.prototype.previousTab = function(tab) { var i; i = tab || tab === 0 ? tab : this.selectedTab() - 1; if (i < 0) { i = this.tabs().length - 1; } if (this.getTab(i).is(":visible")) { return i; } else { return this.previousTab(i - 1); } }; MailCatcher.prototype.nextTab = function(tab) { var i; i = tab ? tab : this.selectedTab() + 1; if (i > this.tabs().length - 1) { i = 0; } if (this.getTab(i).is(":visible")) { return i; } else { return this.nextTab(i + 1); } }; MailCatcher.prototype.haveMessage = function(message) { if (message.id != null) { message = message.id; } return $("#messages tbody tr[data-message-id=\"" + message + "\"]").length > 0; }; MailCatcher.prototype.selectedMessage = function() { return $('#messages tr.selected').data('message-id'); }; MailCatcher.prototype.searchMessages = function(query) { var $rows, selector, token; selector = ((function() { var _i, _len, _ref, _results; _ref = query.split(/\s+/); _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { token = _ref[_i]; _results.push(":icontains('" + token + "')"); } return _results; })()).join(""); $rows = $("#messages tbody tr"); $rows.not(selector).hide(); return $rows.filter(selector).show(); }; MailCatcher.prototype.clearSearch = function() { return $('#messages tbody tr').show(); }; MailCatcher.prototype.addMessage = function(message) { 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.loadMessage = function(id) { 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'); return $.getJSON('/messages/' + id + '.json', __bind(function(message) { var $ul; $('#message .metadata dd.created_at').text(this.formatDate(message.created_at)); $('#message .metadata dd.from').text(message.sender); $('#message .metadata dd.to').text((message.recipients || []).join(', ')); $('#message .metadata dd.subject').text(message.subject); $('#message .views .tab.format').each(function(i, el) { var $el, format; $el = $(el); format = $el.attr('data-message-format'); if ($.inArray(format, message.formats) >= 0) { $el.find('a').attr('href', '/messages/' + id + '.' + format); return $el.show(); } else { return $el.hide(); } }); if ($("#message .views .tab.selected:not(:visible)").length) { $("#message .views .tab.selected").removeClass("selected"); $("#message .views .tab:visible:first").addClass("selected"); } if (message.attachments.length) { $ul = $('