Skip to content

Instantly share code, notes, and snippets.

@lukelex
Created December 8, 2012 21:58
Show Gist options
  • Save lukelex/4242153 to your computer and use it in GitHub Desktop.
Save lukelex/4242153 to your computer and use it in GitHub Desktop.
Generic table item sorter in coffeescript & jquery
$ ->
$('dt .iconFilter').click (e) ->
e.preventDefault()
objTable = $(@).closest('dl')
order = $(@).attr('class').match(/(a|de)sc/)[0]
sortTable {
clicked: $(@),
table: objTable,
order: order,
elemType: 'dd',
tableHeader: 'dt'
}
$('.tableDetails .iconFilter').click (e) ->
e.preventDefault()
objTable = $(@).closest('table')
order = $(@).attr('class').match(/(a|de)sc/)[0]
sortTable {
clicked: $(@),
table: objTable,
order: order,
elemType: 'tr:not(:first):not(.total_line)',
tableHeader: '.tableDetails'
}
total_line = objTable.find('.total_line')
total_line.remove()
objTable.append total_line
sortTable = (config) ->
table = config.table
order = config.order
lines = table.find(config.elemType)
clicked = config.clicked
clickedParent = clicked.parent().get(0)
clickedParentName = clickedParent.tagName
headers = $("#{config.tableHeader} #{clickedParentName}")
column = jQuery.inArray(clickedParent, headers)
result = {'desc': [-1,0,1], 'asc': [1,0,-1]}
lines.sort (a,b) ->
if isNaN(moeda2float(a.children[column].innerHTML))
firstText = a.children[column].innerHTML
secondText = b.children[column].innerHTML
else
firstText = +moeda2float(a.children[column].innerHTML)
secondText = +moeda2float(b.children[column].innerHTML)
if firstText < secondText
return result[order][0]
else if firstText is secondText
return result[order][1]
else if firstText > secondText
return result[order][2]
table.find(config.elemType).remove()
table.append lines
$('.iconFilter').removeClass('active')
clicked.toggleClass('asc desc').addClass('active')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment