From 8d7086a7a857545473fcc0acc0afc41e180e4723 Mon Sep 17 00:00:00 2001 From: Rob Dawson Date: Sun, 17 Nov 2013 17:33:12 +0000 Subject: [PATCH] Update tablesorter.js --- tablesorter.js | 181 ++++++++++++++++++++++++------------------------- 1 file changed, 88 insertions(+), 93 deletions(-) diff --git a/tablesorter.js b/tablesorter.js index c81bee3..dfca681 100755 --- a/tablesorter.js +++ b/tablesorter.js @@ -1,18 +1,26 @@ function forEach(arr, fnDoThis){ - var len = arr.length; - for (var i=0; i < len; i++){ + var len = arr.length, i; + for (i=0; i < len; i++){ fnDoThis(arr[i], i); } } function forEachObject(obj, fnDoThis){ - for (var item in obj){ + var item; + for (item in obj){ if (obj.hasOwnProperty(item)){ fnDoThis(obj[item]); } } } +var makeNumFromText = (function(){ + var regexNonNumeric = /[^0-9\.+\-]+/; + return function(txt){ + return parseFloat(txt.replace(',', '').replace(regexNonNumeric, ' ')); + }; +}()); + function processAllTables(){ forEach(document.getElementsByTagName("TABLE"), function(table){ processTable(table); @@ -20,18 +28,13 @@ function processAllTables(){ } function processTable(tableElement){ + var rowObjects = [], currentSortColIndex = null, currentSortAscending = null, linkTds = [], rowWithArrows, rowWithOptions, colCount = 0, sortTypes, currentSortType; + if ( !checkTableStructureOk(tableElement) ){ - return null; + return; } - // State is initialised here - var rowObjects = []; - var currentSortColIndex = null; - var currentSortAscending = null; - var linkTds = []; - var rowWithArrows, rowWithOptions; - var colCount = 0; - var sortTypes = { + sortTypes = { 'NONE' : { 'text' : 'none', 'fn' : sortRestore @@ -45,7 +48,7 @@ function processTable(tableElement){ 'fn' : sortColByNum } }; - var currentSortType = sortTypes.NONE; + currentSortType = sortTypes.NONE; function sortRestore(){ @@ -59,49 +62,44 @@ function processTable(tableElement){ if (col bItem){ - return 1 * multiplier; + return multiplier; } else if (aItem < bItem){ return -1 * multiplier; - } else { - return 0; } - } else { - return 1 * multiplier; - } - } else { - if (bItem){ - return -1 * multiplier; - } else { return 0; } + return multiplier; + + } + if (bItem){ + return -1 * multiplier; } + return 0; }); } redraw(); } function sortColByNum(col, ascending){ - function makeNumFromText(txt){ - return parseFloat(txt.replace(/,/g, '').replace(/[^0-9\.+\-]+/, ' ')); - } + var multiplier, aNum, bNum; if (col 0){ return false; } // tables that have less than 2 rows are not processed... - var rows = tableElement.getElementsByTagName("TR"); + rows = tableElement.getElementsByTagName("TR"); if (rows.length < 2){ return false; } // tables that don't have any text nodes are not processed... function checkForTextNodeChildren(item){ - var childNodes = item.childNodes; + var i, l, text, childNode, TEXT_NODE_TYPE = 3, childNodes = item.childNodes, TRIM_REGEX = /^\s+|\s+$/; if (!childNodes){ return false; } - var childNode; - var TEXT_NODE_TYPE = 3; - var TRIM_REGEX = /^\s+|\s+$/; - for (var i=0, l=childNodes.length; i 0){ return true; @@ -172,37 +167,32 @@ function processTable(tableElement){ } function buildRowObject(trElement, index){ + var tdElements, obj = {}, parent = trElement.parentNode, cellToElementMappingArray = [], cellIndex=0; if (trElement.parentNode.tagName==='THEAD'){ // Any rows inside a header are ignored return null; } - var tdElements = trElement.getElementsByTagName("TD"); + tdElements = trElement.getElementsByTagName("TD"); if (tdElements.length===0){ // Rows without any TDs are ignored, these are usually headers with THs instead return null; } - var obj = {}; - obj.getTr = function(){ return trElement; }; - var parent = trElement.parentNode; - var cellToElementMappingArray = []; - var cellIndex=0; - /* Produces a mapping from 'virtual' cells to TD elements so if the third cell has colspan='3' then virtual cells 2,3 and 4 all map to TD 2 |A|B| C | [0,1,2,2,2] */ forEach(tdElements, function(item, i){ - var colSpan = +(item.colSpan); + var j, colSpan = +(item.colSpan); if (isNaN(colSpan) || colSpan===0){ colSpan = 1; } - for(var j=0; j= cellToElementMappingArray.length){ return null; - } else { - var tdIndex = cellToElementMappingArray[index]; + } + tdIndex = cellToElementMappingArray[index]; - var cellContent = tdElements[tdIndex].innerHTML; - // This might contain markup, eg