diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 04098d88..820d682c 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -10,6 +10,34 @@ //= require_self //= require ordering +// function for sorting DOM elements +$.fn.sorter = (function(){ + // Thanks to James Padolsey and Avi Deitcher + // http://james.padolsey.com/javascript/sorting-elements-with-jquery/#comment-29400 + var sort = [].sort; + + return function(comparator, getSortable) { + getSortable = getSortable || function(){return this;}; + + var sorted = sort.call(this, comparator); // sort all elements in memory + var prevElmt = null; + for(i=sorted.length-1; i>=0; --i) { // loop starting from last + var criterionElmt = sorted[i]; + var curElmt = ( 'function' === typeof getSortable ) ? ( getSortable.call(criterionElmt) ) : ( criterionElmt ); + var parent = curElmt.parentNode; + if (!prevElmt) { + parent.appendChild(curElmt); // place last element to the end + } else { + parent.insertBefore(curElmt, prevElmt); // move each element before the previous one + } + prevElmt = curElmt; + } + return sorted; + + }; + +})(); + // Load following statements, when DOM is ready $(function() { @@ -100,17 +128,74 @@ $(function() { // Use bootstrap datepicker for dateinput $('.datepicker').datepicker({format: 'yyyy-mm-dd', weekStart: 1, language: 'de'}); + + // Init table sorting + var myBars = $('span.sorter-bar'); + myBars.html(''); + $('button:nth-child(1)', myBars).click(function(e) {sortTable(e, false);}).attr('title', 'Sortiere aufsteigend'); + $('button:nth-child(2)', myBars).click(function(e) {sortTable(e, true);}).attr('title', 'Sortiere absteigend (umgekehrt)'); + + $('span.sorter-bar.default-sort-asc button:nth-child(1)').trigger('click'); + $('span.sorter-bar.default-sort-desc button:nth-child(2)').trigger('click'); }); +// parse a string to a float +function myFloatParse(input) { + var number = input.trim(); + number = number.split(' ')[0]; + number = number.replace(',', '.'); + number = parseFloat(number, 10); + return number; +} + +// compare two elements interpreted as text +function compareText(a, b) { + return $.trim(a.textContent).toLowerCase() < $.trim(b.textContent).toLowerCase() ? -1 : 1; +} + +// compare two elements interpreted as float +function compareFloat(a, b) { + a = myFloatParse( $(a).text() ); + b = myFloatParse( $(b).text() ); + return ( a