CoffeeScript stylistic changes

This commit is contained in:
Samuel Cochran 2014-03-26 12:08:52 +11:00
parent 903e3ad2fb
commit 5812eadddb
1 changed files with 102 additions and 104 deletions

View File

@ -6,34 +6,34 @@
#= require xslt
# Add a new jQuery selector expression which does a case-insensitive :contains
jQuery.expr[':'].icontains = (a, i, m) ->
jQuery.expr[":"].icontains = (a, i, m) ->
(a.textContent ? a.innerText ? "").toUpperCase().indexOf(m[3].toUpperCase()) >= 0
class MailCatcher
constructor: ->
$('#messages tr').live 'click', (e) =>
$("#messages tr").live "click", (e) =>
e.preventDefault()
@loadMessage $(e.currentTarget).attr 'data-message-id'
@loadMessage $(e.currentTarget).attr("data-message-id")
$('input[name=search]').keyup (e) =>
$("input[name=search]").keyup (e) =>
query = $.trim $(e.currentTarget).val()
if query
@searchMessages query
else
@clearSearch()
$('#message .views .format.tab a').live 'click', (e) =>
$("#message .views .format.tab a").live "click", (e) =>
e.preventDefault()
@loadMessageBody @selectedMessage(), $($(e.currentTarget).parent('li')).data 'message-format'
@loadMessageBody @selectedMessage(), $($(e.currentTarget).parent("li")).data("message-format")
$('#message .views .analysis.tab a').live 'click', (e) =>
$("#message .views .analysis.tab a").live "click", (e) =>
e.preventDefault()
@loadMessageAnalysis @selectedMessage()
$('#message iframe').load =>
$("#message iframe").load =>
@decorateMessageBody()
$('#resizer').live
$("#resizer").live
mousedown: (e) =>
e.preventDefault()
$(window).bind events =
@ -46,66 +46,66 @@ class MailCatcher
@resizeToSaved()
$('nav.app .clear a').live 'click', (e) =>
$("nav.app .clear a").live "click", (e) =>
e.preventDefault()
if confirm "You will lose all your received messages.\n\nAre you sure you want to clear all messages?"
$.ajax
url: '/messages'
type: 'DELETE'
url: "/messages"
type: "DELETE"
success: =>
@unselectMessage()
error: ->
alert 'Error while clearing all messages.'
alert "Error while clearing all messages."
$('nav.app .quit a').live 'click', (e) =>
$("nav.app .quit a").live "click", (e) =>
e.preventDefault()
if confirm "You will lose all your received messages.\n\nAre you sure you want to quit?"
$.ajax
type: 'DELETE'
type: "DELETE"
success: ->
location.replace $('body > header h1 a').attr('href')
location.replace $("body > header h1 a").attr("href")
error: ->
alert 'Error while quitting.'
alert "Error while quitting."
key 'up', =>
key "up", =>
if @selectedMessage()
@loadMessage $('#messages tr.selected').prev().data('message-id')
@loadMessage $("#messages tr.selected").prev().data("message-id")
else
@loadMessage $('#messages tbody tr[data-message-id]:first').data('message-id')
@loadMessage $("#messages tbody tr[data-message-id]:first").data("message-id")
false
key 'down', =>
key "down", =>
if @selectedMessage()
@loadMessage $('#messages tr.selected').next().data('message-id')
@loadMessage $("#messages tr.selected").next().data("message-id")
else
@loadMessage $('#messages tbody tr[data-message-id]:first').data('message-id')
@loadMessage $("#messages tbody tr[data-message-id]:first").data("message-id")
false
key '⌘+up, ctrl+up', =>
@loadMessage $('#messages tbody tr[data-message-id]:first').data('message-id')
key "⌘+up, ctrl+up", =>
@loadMessage $("#messages tbody tr[data-message-id]:first").data("message-id")
false
key '⌘+down, ctrl+down', =>
@loadMessage $('#messages tbody tr[data-message-id]:last').data('message-id')
key "⌘+down, ctrl+down", =>
@loadMessage $("#messages tbody tr[data-message-id]:last").data("message-id")
false
key 'left', =>
key "left", =>
@openTab @previousTab()
false
key 'right', =>
key "right", =>
@openTab @nextTab()
false
key 'backspace, delete', =>
key "backspace, delete", =>
id = @selectedMessage()
if id?
$.ajax
url: '/messages/' + id
type: 'DELETE'
url: "/messages/" + id
type: "DELETE"
success: =>
messageRow = $("#messages tbody tr[data-message-id='#{id}']")
switchTo = messageRow.next().data('message-id') || messageRow.prev().data('message-id')
messageRow = $("""#messages tbody tr[data-message-id="#{id}"]""")
switchTo = messageRow.next().data("message-id") || messageRow.prev().data("message-id")
messageRow.remove()
if switchTo
@loadMessage switchTo
@ -113,7 +113,7 @@ class MailCatcher
@unselectMessage()
error: ->
alert 'Error while removing message.'
alert "Error while removing message."
false
@refresh()
@ -137,19 +137,19 @@ class MailCatcher
date &&= date.toString("dddd, d MMM yyyy h:mm:ss tt")
messagesCount: ->
$('#messages tr').length - 1
$("#messages tr").length - 1
tabs: ->
$('#message ul').children('.tab')
$("#message ul").children(".tab")
getTab: (i) =>
$(@tabs()[i])
selectedTab: =>
@tabs().index($('#message li.tab.selected'))
@tabs().index($("#message li.tab.selected"))
openTab: (i) =>
@getTab(i).children('a').click()
@getTab(i).children("a").click()
previousTab: (tab)=>
i = if tab || tab is 0 then tab else @selectedTab() - 1
@ -157,7 +157,7 @@ class MailCatcher
if @getTab(i).is(":visible")
i
else
@previousTab(i-1)
@previousTab(i - 1)
nextTab: (tab) =>
i = if tab then tab else @selectedTab() + 1
@ -165,87 +165,87 @@ class MailCatcher
if @getTab(i).is(":visible")
i
else
@nextTab(i+1)
@nextTab(i + 1)
haveMessage: (message) ->
message = message.id if message.id?
$("#messages tbody tr[data-message-id=\"#{message}\"]").length > 0
$("""#messages tbody tr[data-message-id="#{message}"]""").length > 0
selectedMessage: ->
$('#messages tr.selected').data 'message-id'
$("#messages tr.selected").data "message-id"
searchMessages: (query) ->
selector = (":icontains('#{token}')" for token in query.split /\s+/).join ""
selector = (":icontains('#{token}')" for token in query.split /\s+/).join("")
$rows = $("#messages tbody tr")
$rows.not(selector).hide()
$rows.filter(selector).show()
clearSearch: ->
$('#messages tbody tr').show()
$("#messages tbody tr").show()
addMessage: (message) ->
$('<tr />').attr('data-message-id', message.id.toString())
.append($('<td/>').text(message.sender or "No sender").toggleClass("blank", !message.sender))
.append($('<td/>').text((message.recipients || []).join(', ') or "No receipients").toggleClass("blank", !message.recipients.length))
.append($('<td/>').text(message.subject or "No subject").toggleClass("blank", !message.subject))
.append($('<td/>').text(@formatDate(message.created_at)))
.prependTo($('#messages tbody'))
$("<tr />").attr("data-message-id", message.id.toString())
.append($("<td/>").text(message.sender or "No sender").toggleClass("blank", !message.sender))
.append($("<td/>").text((message.recipients || []).join(", ") or "No receipients").toggleClass("blank", !message.recipients.length))
.append($("<td/>").text(message.subject or "No subject").toggleClass("blank", !message.subject))
.append($("<td/>").text(@formatDate(message.created_at)))
.prependTo($("#messages tbody"))
scrollToRow: (row) ->
relativePosition = row.offset().top - $('#messages').offset().top
relativePosition = row.offset().top - $("#messages").offset().top
if relativePosition < 0
$('#messages').scrollTop($('#messages').scrollTop() + relativePosition - 20)
$("#messages").scrollTop($("#messages").scrollTop() + relativePosition - 20)
else
overflow = relativePosition + row.height() - $('#messages').height()
overflow = relativePosition + row.height() - $("#messages").height()
if overflow > 0
$('#messages').scrollTop($('#messages').scrollTop() + overflow + 20)
$("#messages").scrollTop($("#messages").scrollTop() + overflow + 20)
unselectMessage: ->
$('#messages tbody, #message .metadata dd').empty()
$('#message .metadata .attachments').hide()
$('#message iframe').attr 'src', 'about:blank'
$("#messages tbody, #message .metadata dd").empty()
$("#message .metadata .attachments").hide()
$("#message iframe").attr("src", "about:blank")
null
loadMessage: (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?
$("#messages tbody tr:not([data-message-id='#{id}'])").removeClass 'selected'
$("#messages tbody tr:not([data-message-id='#{id}'])").removeClass("selected")
messageRow = $("#messages tbody tr[data-message-id='#{id}']")
messageRow.addClass 'selected'
messageRow.addClass("selected")
@scrollToRow(messageRow)
$.getJSON "/messages/#{id}.json", (message) =>
$('#message .metadata dd.created_at').text @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 (i, el) ->
$("#message .metadata dd.created_at").text(@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 (i, el) ->
$el = $(el)
format = $el.attr 'data-message-format'
format = $el.attr("data-message-format")
if $.inArray(format, message.formats) >= 0
$el.find('a').attr('href', "/messages/#{id}.#{format}")
$el.find("a").attr("href", "/messages/#{id}.#{format}")
$el.show()
else
$el.hide()
if $("#message .views .tab.selected:not(:visible)").length
$("#message .views .tab.selected").removeClass "selected"
$("#message .views .tab:visible:first").addClass "selected"
$("#message .views .tab.selected").removeClass("selected")
$("#message .views .tab:visible:first").addClass("selected")
if message.attachments.length
$ul = $('<ul/>').appendTo($('#message .metadata dd.attachments').empty())
$ul = $("<ul/>").appendTo($("#message .metadata dd.attachments").empty())
$.each message.attachments, (i, attachment) ->
$ul.append($('<li>').append($('<a>').attr('href', attachment['href']).addClass(attachment['type'].split('/', 1)[0]).addClass(attachment['type'].replace('/', '-')).text(attachment['filename'])));
$('#message .metadata .attachments').show()
$ul.append($("<li>").append($("<a>").attr("href", attachment["href"]).addClass(attachment["type"].split("/", 1)[0]).addClass(attachment["type"].replace("/", "-")).text(attachment["filename"])))
$("#message .metadata .attachments").show()
else
$('#message .metadata .attachments').hide()
$("#message .metadata .attachments").hide()
$('#message .views .download a').attr 'href', "/messages/#{id}.eml"
$("#message .views .download a").attr("href", "/messages/#{id}.eml")
if $('#message .views .tab.analysis.selected').length
if $("#message .views .tab.analysis.selected").length
@loadMessageAnalysis()
else
@loadMessageBody()
@ -254,40 +254,38 @@ class MailCatcher
loadMessageBody: (id, format) ->
id ||= @selectedMessage()
format ||= $('#message .views .tab.format.selected').attr 'data-message-format'
format ||= 'html'
format ||= $("#message .views .tab.format.selected").attr("data-message-format")
format ||= "html"
$("#message .views .tab[data-message-format=\"#{format}\"]:not(.selected)").addClass 'selected'
$("#message .views .tab:not([data-message-format=\"#{format}\"]).selected").removeClass 'selected'
$("""#message .views .tab[data-message-format="#{format}"]:not(.selected)""").addClass("selected")
$("""#message .views .tab:not([data-message-format="#{format}"]).selected""").removeClass("selected")
if id?
$('#message iframe').attr "src", "/messages/#{id}.#{format}"
app = this
$("#message iframe").attr("src", "/messages/#{id}.#{format}")
decorateMessageBody: ->
format = $('#message .views .tab.format.selected').attr 'data-message-format'
format = $("#message .views .tab.format.selected").attr("data-message-format")
switch format
when 'html'
body = $('#message iframe').contents().find('body')
when "html"
body = $("#message iframe").contents().find("body")
$("a", body).attr("target", "_blank")
when 'plain'
message_iframe = $('#message iframe').contents()
when "plain"
message_iframe = $("#message iframe").contents()
text = message_iframe.text()
text = text.replace(/((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?)/g, '<a href="$1" target="_blank">$1</a>')
text = text.replace(/\n/g, '<br/>')
message_iframe.find('html').html('<html><body>' + text + '</html></body>')
text = text.replace(/((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?)/g, """<a href="$1" target="_blank">$1</a>""")
text = text.replace(/\n/g, "<br/>")
message_iframe.find("html").html("<html><body>#{text}</html></body>")
loadMessageAnalysis: (id) ->
id ||= @selectedMessage()
$("#message .views .analysis.tab:not(.selected)").addClass 'selected'
$("#message .views :not(.analysis).tab.selected").removeClass 'selected'
$("#message .views .analysis.tab:not(.selected)").addClass("selected")
$("#message .views :not(.analysis).tab.selected").removeClass("selected")
if id?
# Makes a new iframe and populate it with a quick intro and a button
$iframe = $('#message iframe').contents().children()
$iframe = $("#message iframe").contents().children()
.html("""
<html>
<head>
@ -304,16 +302,16 @@ class MailCatcher
</body>
</html>
""")
$form = $iframe.find('form')
$form = $iframe.find("form")
.submit (e) ->
e.preventDefault()
$(this)
.find('input[type="submit"]').attr('disabled', 'disabled').end()
.find('.loading').show()
$('#message iframe').contents().find('body').xslt("/messages/#{id}/analysis.xml", "/stylesheets/analysis.xsl")
.find("""input[type="submit"]""").attr("disabled", "disabled").end()
.find(".loading").show()
$("#message iframe").contents().find("body").xslt("/messages/#{id}/analysis.xml", "/stylesheets/analysis.xsl")
refresh: ->
$.getJSON '/messages', (messages) =>
$.getJSON "/messages", (messages) =>
$.each messages, (i, message) =>
unless @haveMessage message
@addMessage message
@ -325,8 +323,8 @@ class MailCatcher
@subscribePoll()
subscribeWebSocket: ->
secure = window.location.scheme == 'https'
@websocket = new WebSocket("#{if secure then 'wss' else 'ws'}://#{window.location.host}/messages")
secure = window.location.scheme == "https"
@websocket = new WebSocket("#{if secure then "wss" else "ws"}://#{window.location.host}/messages")
@websocket.onmessage = (event) =>
@addMessage $.parseJSON event.data
@ -334,11 +332,11 @@ class MailCatcher
unless @refreshInterval?
@refreshInterval = setInterval (=> @refresh()), 1000
resizeToSavedKey: 'mailcatcherSeparatorHeight'
resizeToSavedKey: "mailcatcherSeparatorHeight"
resizeTo: (height) ->
$('#messages').css
height: height - $('#messages').offset().top
$("#messages").css
height: height - $("#messages").offset().top
window.localStorage?.setItem(@resizeToSavedKey, height)
resizeToSaved: ->