Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

updated textExtraction

  • Loading branch information...
commit c0273a4e3c4f0b452be5b0f1583f0f870699a79a 1 parent 80024cd
Rob G authored
20 README.markdown
View
@@ -28,6 +28,26 @@ Included all original [document pages](http://mottie.github.com/tablesorter/docs
View the [complete listing here](http://mottie.github.com/tablesorter/changelog.txt).
+#### Version 2.0.12 (2011-08-19)
+
+* Updated the `textExtraction` functionality
+ * The original textExtraction function was only able to be applied to all cells.
+ * Apparently the ability to define textExtraction on a per column basis was misinterpreted by me, so now I've added it.
+ * Use the option as follows:
+
+ ```javascript
+ $("table").tablesorter({
+ textExtraction: {
+ 0: function(node) { return $(node).find(selector1).text(); },
+ 1: function(node) { return $(node).find(selector2).text(); },
+ // etc
+ }
+ });
+ ```
+
+ * Updated the [Dealing with markup inside cells](http://mottie.github.com/tablesorter/docs/example-option-text-extraction.html) demo.
+ * Thanks to Eugene Ivakhiv for bringing this issue to my attention in my blog.
+
#### Version 2.0.11 (2011-08-04)
* Added the ability to set a column parser using a class name
52 changelog.txt
View
@@ -1,6 +1,27 @@
-###TableSorter Change Log
+TableSorter Change Log
-#### Version 2.0.11 (2011-08-04)
+Version 2.0.12 (2011-08-19)
+============================
+
+* Updated the `textExtraction` functionality
+ * The original textExtraction function was only able to be applied to all the cells in the table.
+ * Apparently the ability to define textExtraction on a per column basis was misinterpreted by me, so now I've added it.
+ * Use the option as follows:
+
+ $("table").tablesorter({
+ textExtraction: {
+ 0: function(node) { return $(node).find(selector1).text(); },
+ 1: function(node) { return $(node).find(selector2).text(); },
+ // etc
+ }
+ });
+
+ * Updated the [Dealing with markup inside cells](http://mottie.github.com/tablesorter/docs/example-option-text-extraction.html) demo.
+ * Thanks to Eugene Ivakhiv for reporting this issue to my attention in my blog.
+
+
+Version 2.0.11 (2011-08-04)
+============================
* Added the ability to set a column parser using a class name
* When setting the parser, start the class name with "sorter-" followed by the parser name, e.g. "sorter-text" or "sorter-digit"
@@ -8,7 +29,8 @@
* [Demo page](http://mottie.github.com/tablesorter/docs/example-parsers-class-name.html) included.
* Custom parsers can also be used - see the updated [writing custom parsers demo](http://mottie.github.com/tablesorter/docs/example-parsers.html).
-#### Version 2.0.10 (2011-07-31)
+Version 2.0.10 (2011-07-31)
+============================
* Modified the numeric sort with a new method to deal with non-numeric content:
* When sorting columns with numeric values, by default any non-numeric or empty cells are treated as if they have a zero value. This puts the text between negative and positive values in a column.
@@ -18,7 +40,8 @@
* Changed UI theme widget code to use "ui-widget-header" instead of "ui-widget-default" to better match the themes.
* Renamed changelog.markdown to changelog.txt to prevent downloading when clicking on the link
-#### Version 2.0.9 (2011-07-27)
+Version 2.0.9 (2011-07-27)
+============================
* Added a jQuery UI theme and widget example. To apply the jQuery UI theme:
* Include any jQuery UI theme on your page.
@@ -41,14 +64,16 @@
* If false (the default setting), the pager arrows class names will not change.
* Please see the updated [pager demo](http://mottie.github.com/tablesorter/docs/example-pager.html) to see this working.
-#### Version 2.0.8 (2011-07-21)
+Version 2.0.8 (2011-07-21)
+============================
* Fixed parsers for currency and digits to work with number values separated by commas. Thanks to Josh Renaud for the information!
* Fixed "lockedOrder" header option and added documentation and an example on how to use it.
* Made the sort order "desc" only trigger off of the first letter, so any word/abbreviation starting with "d" will set the descending sort order, all other letters will set the order to ascending (shhh, because I'm a bad speller :P)
* Modified the "sortInitialOrder" option so it can also be set in the headers option.
-#### Version 2.0.7 (2011-07-17)
+Version 2.0.7 (2011-07-17)
+============================
* Added "pagerChange" and "pagerComplete" events to the pager plugin which trigger on the table. See the [pager demo](http://mottie.github.com/tablesorter/docs/example-pager.html) for an example on how to bind to them.
* Added the "sortAppend" since the option was there, but apparently the code wasn't.
@@ -58,7 +83,8 @@
* Fixed the minified version. Apparently sorting functions called by the eval were removed by the Google Closure Compiler. Resolved by using "Whitespace only" optimization.
* Fixed syntax highlighting; updated Chili.
-#### Version 2.0.6 (2011-06-22)
+Version 2.0.6 (2011-06-22)
+============================
* Forked original files and docs from [tablesorter.com](http://tablesorter.com) to GitHub.
* Replaced alphabetical sort with an alphanumeric sort
@@ -73,7 +99,8 @@
* Although, this might just be extra markup with the advent of multiple background images and gradient backgrounds available in CSS3.
* Reformatted the code to make jSLint "happier".
-#### Version 2.0.5b (?)
+Version 2.0.5b (?)
+============================
* General
* Added "cssChildRow" option - attach a child row to its parent.
@@ -82,11 +109,13 @@
* Added "selectorHeaders" option to target the the header cells.
* Changed multisort function
-#### Version 2.0.3 (2008-03-17)
+Version 2.0.3 (2008-03-17)
+============================
* Bug fixes - Missing semicolon, broke the minified version.
-#### Version 2.0.2 (2008-03-14)
+Version 2.0.2 (2008-03-14)
+============================
* General
* Added support for the new metadata plugin.
@@ -98,7 +127,8 @@
* Bug fixes
* Sort force (Thanks to David Lynch).
-#### Version 2.0.1 (2007-09-17)
+Version 2.0.1 (2007-09-17)
+============================
* General
* Removed the need for Dimensions plugin when using the pagnation plugin thanks to offset being included in the jQuery 1.2 core.
1  docs/css/jq.css
View
@@ -20,6 +20,7 @@ pre.normal{background-color:transparent;border:none;border-left-width:0;overflow
#main{margin:0 20px 20px;padding:0 15px 15px 0;}
#content{padding:20px;}
#busy{background-color:#e95555;border:1px ridge #ccc;color:#eee;display:none;padding:3px;position:absolute;right:7px;top:7px;}
+#demo strong{color:#a00;}
hr{height:1px;}
code{font-size:108%;font-style:normal;padding:0;}
ul{color:#333;list-style:square;}
81 docs/example-option-text-extraction.html
View
@@ -22,11 +22,22 @@
// call the tablesorter plugin
$("table").tablesorter({
- // define a custom text extraction function
+ /*
+ // define an overall custom text extraction function
textExtraction: function(node) {
- // extract data from markup and return it
return $(node).text();
}
+ */
+
+ // define a custom text extraction function for each column
+ textExtraction: {
+ 0: function(node) { return $(node).find("strong").text(); },
+ 1: function(node) { return $(node).find("div").text(); },
+ 2: function(node) { return $(node).find("span").text(); },
+ 3: function(node) { return $(node).find("em").text(); },
+ 4: function(node) { return $(node).find("a").text(); },
+ 5: function(node) { return $(node).find("u").text(); }
+ }
});
@@ -35,13 +46,17 @@
<body>
<div id="banner">
- <h1>table<em>sorter</em></h1>
+ <h1>table<strong>sorter</strong></h1>
<h2>Dealing with markup inside cells</h2>
<h3>Flexible client-side table sorting</h3>
<a href="index.html">Back to documentation</a>
</div>
<div id="main">
+ <p class="tip">
+ <em>NOTE!</em> The "First Name" column is sorting by the contents of the &lt;strong&gt; tag (in red).
+ </p>
+
<h1>Demo</h1>
<div id="demo"><table class="tablesorter">
<thead>
@@ -56,44 +71,44 @@
</thead>
<tbody>
<tr>
- <td><strong><em>Peter</em></strong></td>
- <td><strong><em>Parker</em></strong></td>
- <td><strong><em>28</em></strong></td>
- <td><strong><em>$9.99</em></strong></td>
- <td><strong><em>20%</em></strong></td>
- <td><strong><em>Jul 6, 2006 8:14 AM</em></strong></td>
+ <td>Mr. <strong>Peter</strong></td>
+ <td><div>Parker</div></td>
+ <td><span>28</span></td>
+ <td><em>$9.99</em></td>
+ <td><a href="#">20%</a></td>
+ <td><u>Jul 6, 2006 8:14 AM</u></td>
</tr>
<tr>
- <td><strong><em>John</em></strong></td>
- <td><strong><em>Hood</em></strong></td>
- <td><strong><em>33</em></strong></td>
- <td><strong><em>$19.99</em></strong></td>
- <td><strong><em>25%</em></strong></td>
- <td><strong><em>Dec 10, 2002 5:14 AM</em></strong></td>
+ <td>Dr. <strong>John</strong></td>
+ <td><div>Hood</div></td>
+ <td><span>33</span></td>
+ <td><em>$19.99</em></td>
+ <td><a href="#">25%</a></td>
+ <td><u>Dec 10, 2002 5:14 AM</u></td>
</tr>
<tr>
- <td><strong><em>Clark</em></strong></td>
- <td><strong><em>Kent</em></strong></td>
- <td><strong><em>18</em></strong></td>
- <td><strong><em>$15.89</em></strong></td>
- <td><strong><em>44%</em></strong></td>
- <td><strong><em>Jan 12, 2003 11:14 AM</em></strong></td>
+ <td>Rep <strong>Clark</strong></td>
+ <td><div>Kent</div></td>
+ <td><span>18</span></td>
+ <td><em>$15.89</em></td>
+ <td><a href="#">44%</a></td>
+ <td><u>Jan 12, 2003 11:14 AM</u></td>
</tr>
<tr>
- <td><strong><em>Bruce</em></strong></td>
- <td><strong><em>Almighty</em></strong></td>
- <td><strong><em>45</em></strong></td>
- <td><strong><em>$153.19</em></strong></td>
- <td><strong><em>44%</em></strong></td>
- <td><strong><em>Jan 18, 2001 9:12 AM</em></strong></td>
+ <td>Rev <strong>Bruce</strong></td>
+ <td><div>Almighty</div></td>
+ <td><span>45</span></td>
+ <td><em>$153.19</em></td>
+ <td><a href="#">44%</a></td>
+ <td><u>Jan 18, 2001 9:12 AM</u></td>
</tr>
<tr>
- <td><strong><em>Bruce</em></strong></td>
- <td><strong><em>Evans</em></strong></td>
- <td><strong><em>22</em></strong></td>
- <td><strong><em>$13.19</em></strong></td>
- <td><strong><em>11%</em></strong></td>
- <td><strong><em>Jan 18, 2007 9:12 AM</em></strong></td>
+ <td>Capt <strong>Bruce</strong></td>
+ <td><div>Evans</div></td>
+ <td><span>22</span></td>
+ <td><em>$13.19</em></td>
+ <td><a href="#">11%</a></td>
+ <td><u>Jan 18, 2007 9:12 AM</u></td>
</tr>
</tbody>
</table></div>
2  docs/index.html
View
@@ -36,7 +36,7 @@
</div>
<p>
<strong>Author:</strong> <a class="external" href="http://lovepeacenukes.com">Christian Bach</a><br>
- <strong>Version:</strong> 2.0.11 (<a href="../changelog.txt">changelog</a>)<br>
+ <strong>Version:</strong> 2.0.12 (<a href="../changelog.txt">changelog</a>)<br>
<strong>Licence:</strong>
Dual licensed under <a class="external" href="http://www.opensource.org/licenses/mit-license.php">MIT</a>
or <a class="external" href="http://www.opensource.org/licenses/gpl-license.php">GPL</a> licenses.
24 js/jquery.tablesorter.js
View
@@ -1,6 +1,6 @@
/*
* TableSorter 2.0 - Client-side table sorting with ease!
-* Version 2.0.11
+* Version 2.0.12
* @requires jQuery v1.2.3
*
* Copyright (c) 2007 Christian Bach
@@ -121,11 +121,11 @@
this.benchmark = benchmark;
- function getElementText(config, node) {
- var text = "";
+ function getElementText(config, node, cellIndex) {
+ var text = "", te = config.textExtraction;
if (!node) { return ""; }
if (!config.supportsTextContent) { config.supportsTextContent = node.textContent || false; }
- if (config.textExtraction === "simple") {
+ if (te === "simple") {
if (config.supportsTextContent) {
text = node.textContent;
} else {
@@ -136,8 +136,10 @@
}
}
} else {
- if (typeof(config.textExtraction) === "function") {
- text = config.textExtraction(node);
+ if (typeof(te) === "function") {
+ text = te(node);
+ } else if (typeof(te) === "object" && te.hasOwnProperty(cellIndex)){
+ text = config.textExtraction[cellIndex](node);
} else {
text = $(node).text();
}
@@ -160,8 +162,8 @@
return rows[rowIndex].cells[cellIndex];
}
- function trimAndGetNodeText(config, node) {
- return $.trim(getElementText(config, node));
+ function trimAndGetNodeText(config, node, cellIndex) {
+ return $.trim(getElementText(config, node, cellIndex));
}
function detectParserForColumn(table, rows, rowIndex, cellIndex) {
@@ -173,7 +175,7 @@
rowIndex++;
if (rows[rowIndex]) {
node = getNodeFromRowAndCellIndex(rows, rowIndex, cellIndex);
- nodeValue = trimAndGetNodeText(table.config, node);
+ nodeValue = trimAndGetNodeText(table.config, node, cellIndex);
if (table.config.debug) {
log('Checking if value was empty on row:' + rowIndex);
}
@@ -248,7 +250,7 @@
}
cache.row.push(c);
for (j = 0; j < totalCells; ++j) {
- cols.push(parsers[j].format(getElementText(table.config, c[0].cells[j]), table, c[0].cells[j]));
+ cols.push(parsers[j].format(getElementText(table.config, c[0].cells[j], j), table, c[0].cells[j]));
}
cols.push(cache.normalized.length); // add position for rowCache
cache.normalized.push(cols);
@@ -706,7 +708,7 @@
// get position from the dom.
pos = [(cell.parentNode.rowIndex - 1), cell.cellIndex];
// update cache
- cache.normalized[pos[0]][pos[1]] = config.parsers[pos[1]].format(getElementText(config, cell), cell);
+ cache.normalized[pos[0]][pos[1]] = config.parsers[pos[1]].format(getElementText(config, cell, pos[1]), cell);
})
.bind("sorton", function(e, list) {
$(this).trigger("sortStart", tbl[0]);
4 js/jquery.tablesorter.min.js
View
@@ -1,7 +1,7 @@
/*
* TableSorter 2.0 - Client-side table sorting with ease!
-* Version 2.0.11
+* Version 2.0.12
* Copyright (c) 2007 Christian Bach
*/
-(function($){$.extend({tablesorter:new function(){var parsers=[],widgets=[],tbl;this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",cssChildRow:"expand-child",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,sortLocaleCompare:false,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",onRenderHeader:null,selectorHeaders:"thead th", tableClass:"tablesorter",debug:false};function log(s){if(typeof console!=="undefined"&&typeof console.debug!=="undefined")console.log(s);else alert(s)}function benchmark(s,d){log(s+","+((new Date).getTime()-d.getTime())+"ms")}this.benchmark=benchmark;function getElementText(config,node){var text="";if(!node)return"";if(!config.supportsTextContent)config.supportsTextContent=node.textContent||false;if(config.textExtraction==="simple")if(config.supportsTextContent)text=node.textContent;else if(node.childNodes[0]&& node.childNodes[0].hasChildNodes())text=node.childNodes[0].innerHTML;else text=node.innerHTML;else if(typeof config.textExtraction==="function")text=config.textExtraction(node);else text=$(node).text();return text}function getParserById(name){var i,l=parsers.length;for(i=0;i<l;i++)if(parsers[i].id.toLowerCase()===name.toLowerCase())return parsers[i];return false}function getNodeFromRowAndCellIndex(rows,rowIndex,cellIndex){return rows[rowIndex].cells[cellIndex]}function trimAndGetNodeText(config,node){return $.trim(getElementText(config, node))}function detectParserForColumn(table,rows,rowIndex,cellIndex){var i,l=parsers.length,node=false,nodeValue="",keepLooking=true;while(nodeValue===""&&keepLooking){rowIndex++;if(rows[rowIndex]){node=getNodeFromRowAndCellIndex(rows,rowIndex,cellIndex);nodeValue=trimAndGetNodeText(table.config,node);if(table.config.debug)log("Checking if value was empty on row:"+rowIndex)}else keepLooking=false}for(i=1;i<l;i++)if(parsers[i].is(nodeValue,table,node))return parsers[i];return parsers[0]}function buildParserCache(table, $headers){if(table.tBodies.length===0)return;var rows=table.tBodies[0].rows,list,cells,l,i,p,parsersDebug="";if(rows[0]){list=[];cells=rows[0].cells;l=cells.length;for(i=0;i<l;i++){p=false;if($.metadata&&$($headers[i]).metadata()&&$($headers[i]).metadata().sorter)p=getParserById($($headers[i]).metadata().sorter);else if(table.config.headers[i]&&table.config.headers[i].sorter)p=getParserById(table.config.headers[i].sorter);else if($($headers[i]).attr("class").match("sorter-"))p=getParserById($($headers[i]).attr("class").match(/sorter-(\w+)/)[1]|| "");if(!p)p=detectParserForColumn(table,rows,-1,i);if(table.config.debug)parsersDebug+="column:"+i+" parser:"+p.id+"\n";list.push(p)}}if(table.config.debug)log(parsersDebug);return list}function buildCache(table){var totalRows=table.tBodies[0]&&table.tBodies[0].rows.length||0,totalCells=table.tBodies[0].rows[0]&&table.tBodies[0].rows[0].cells.length||0,parsers=table.config.parsers,cache={row:[],normalized:[]},i,j,c,cols,cacheTime;if(table.config.debug)cacheTime=new Date;for(i=0;i<totalRows;++i){c= $(table.tBodies[0].rows[i]);cols=[];if(c.hasClass(table.config.cssChildRow)){cache.row[cache.row.length-1]=cache.row[cache.row.length-1].add(c);continue}cache.row.push(c);for(j=0;j<totalCells;++j)cols.push(parsers[j].format(getElementText(table.config,c[0].cells[j]),table,c[0].cells[j]));cols.push(cache.normalized.length);cache.normalized.push(cols);cols=null}if(table.config.debug)benchmark("Building cache for "+totalRows+" rows:",cacheTime);return cache}function getWidgetById(name){var i,l=widgets.length; for(i=0;i<l;i++)if(widgets[i].id.toLowerCase()===name.toLowerCase())return widgets[i]}function applyWidget(table){var c=table.config.widgets,i,l=c.length;for(i=0;i<l;i++)getWidgetById(c[i]).format(table)}function appendToTable(table,cache){var c=cache,r=c.row,n=c.normalized,totalRows=n.length,checkCell=n[0].length-1,tableBody=$(table.tBodies[0]),rows=[],i,j,l,pos,appendTime;if(table.config.debug)appendTime=new Date;for(i=0;i<totalRows;i++){pos=n[i][checkCell];rows.push(r[pos]);if(!table.config.appender){l= r[pos].length;for(j=0;j<l;j++)tableBody[0].appendChild(r[pos][j])}}if(table.config.appender)table.config.appender(table,rows);rows=null;if(table.config.debug)benchmark("Rebuilt table:",appendTime);applyWidget(table);setTimeout(function(){$(table).trigger("sortEnd",table)},0)}function computeTableHeaderCellIndexes(t){var matrix=[],lookup={},thead=t.getElementsByTagName("THEAD")[0],trs=thead.getElementsByTagName("TR"),i,j,k,l,c,cells,rowIndex,cellId,rowSpan,colSpan,firstAvailCol,matrixrow;for(i=0;i< trs.length;i++){cells=trs[i].cells;for(j=0;j<cells.length;j++){c=cells[j];rowIndex=c.parentNode.rowIndex;cellId=rowIndex+"-"+c.cellIndex;rowSpan=c.rowSpan||1;colSpan=c.colSpan||1;if(typeof matrix[rowIndex]==="undefined")matrix[rowIndex]=[];for(k=0;k<matrix[rowIndex].length+1;k++)if(typeof matrix[rowIndex][k]==="undefined"){firstAvailCol=k;break}lookup[cellId]=firstAvailCol;for(k=rowIndex;k<rowIndex+rowSpan;k++){if(typeof matrix[k]==="undefined")matrix[k]=[];matrixrow=matrix[k];for(l=firstAvailCol;l< firstAvailCol+colSpan;l++)matrixrow[l]="x"}}}return lookup}function formatSortingOrder(v){if(typeof v!=="number")return v.toLowerCase().charAt(0)==="d"?1:0;else return v===1?1:0}function checkHeaderMetadata(cell){return $.metadata&&$(cell).metadata().sorter===false}function checkHeaderOptions(table,i){return table.config.headers[i]&&table.config.headers[i].sorter===false}function checkHeaderLocked(table,i){if(table.config.headers[i]&&table.config.headers[i].lockedOrder!==null)return table.config.headers[i].lockedOrder; return false}function checkHeaderOrder(table,i){if(table.config.headers[i]&&table.config.headers[i].sortInitialOrder)return table.config.headers[i].sortInitialOrder;return table.config.sortInitialOrder}function buildHeaders(table){var meta=$.metadata?true:false,header_index=computeTableHeaderCellIndexes(table),$th,lock,time,$tableHeaders;if(table.config.debug)time=new Date;$tableHeaders=$(table.config.selectorHeaders,table).wrapInner("<span/>").each(function(index){this.column=header_index[this.parentNode.rowIndex+ "-"+this.cellIndex];this.order=formatSortingOrder(checkHeaderOrder(table,index));this.count=this.order;if(checkHeaderMetadata(this)||checkHeaderOptions(table,index)||$(this).is(".sorter-false"))this.sortDisabled=true;this.lockedOrder=false;lock=checkHeaderLocked(table,index);if(typeof lock!=="undefined"&&lock!==false)this.order=this.lockedOrder=formatSortingOrder(lock);if(!this.sortDisabled){$th=$(this).addClass(table.config.cssHeader);if(table.config.onRenderHeader)table.config.onRenderHeader.apply($th, [index])}table.config.headerList[index]=this});if(table.config.debug){benchmark("Built headers:",time);log($tableHeaders)}return $tableHeaders}function checkCellColSpan(table,rows,row){var i,cell,arr=[],r=table.tHead.rows,c=r[row].cells;for(i=0;i<c.length;i++){cell=c[i];if(cell.colSpan>1)arr=arr.concat(checkCellColSpan(table,rows,row++));else if(table.tHead.length===1||cell.rowSpan>1||!r[row+1])arr.push(cell)}return arr}function isValueInArray(v,a){var i,l=a.length;for(i=0;i<l;i++)if(a[i][0]===v)return true; return false}function setHeadersCss(table,$headers,list,css){$headers.removeClass(css[0]).removeClass(css[1]);var h=[],i,l;$headers.each(function(offset){if(!this.sortDisabled)h[this.column]=$(this)});l=list.length;for(i=0;i<l;i++)h[list[i][0]].addClass(css[list[i][1]])}function fixColumnWidth(table,$headers){var c=table.config,colgroup;if(c.widthFixed){colgroup=$("<colgroup>");$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($("<col>").css("width",$(this).width()))});$(table).prepend(colgroup)}} function updateHeaderSortCount(table,sortList){var i,s,o,c=table.config,l=sortList.length;for(i=0;i<l;i++){s=sortList[i];o=c.headerList[s[0]];o.count=s[1];o.count++}}function getCachedSortType(parsers,i){return parsers[i].type}function multisort(table,sortList,cache){var dynamicExp="var sortWrapper = function(a,b) {",col,mx=0,dir=0,tc=table.config,lc=cache.normalized.length,l=sortList.length,sortTime,i,j,c,s,e,order,orgOrderCol;if(tc.debug)sortTime=new Date;for(i=0;i<l;i++){c=sortList[i][0];order= sortList[i][1];s=getCachedSortType(tc.parsers,c)==="text"?order===0?"sortText":"sortTextDesc":order===0?"sortNumeric":"sortNumericDesc";e="e"+i;if(/Numeric/.test(s)&&tc.headers[c]&&tc.headers[c].string){for(j=0;j<lc;j++){col=Math.abs(parseFloat(cache.normalized[j][c]));mx=Math.max(mx,isNaN(col)?0:col)}dir=tc.headers[c]?tc.string[tc.headers[c].string]||0:0}dynamicExp+="var "+e+" = "+s+"(a["+c+"],b["+c+"],"+mx+","+dir+"); ";dynamicExp+="if ("+e+") { return "+e+"; } ";dynamicExp+="else { "}orgOrderCol= cache.normalized[0].length-1;dynamicExp+="return a["+orgOrderCol+"]-b["+orgOrderCol+"];";for(i=0;i<l;i++)dynamicExp+="}; ";dynamicExp+="return 0; ";dynamicExp+="}; ";eval(dynamicExp);cache.normalized.sort(sortWrapper);if(tc.debug)benchmark("Sorting on "+sortList.toString()+" and dir "+order+" time:",sortTime);return cache}function sortText(a,b){if($.data(tbl[0],"tablesorter").sortLocaleCompare)return a.localeCompare(b);if(a===b)return 0;try{var cnt=0,ax,t,x=/^(\.)?\d/,L=Math.min(a.length,b.length)+ 1;while(cnt<L&&a.charAt(cnt)===b.charAt(cnt)&&x.test(b.substring(cnt))===false&&x.test(a.substring(cnt))===false)cnt++;a=a.substring(cnt);b=b.substring(cnt);if(x.test(a)||x.test(b))if(x.test(a)===false)return a?1:-1;else if(x.test(b)===false)return b?-1:1;else{t=parseFloat(a)-parseFloat(b);if(t!==0)return t;else t=a.search(/[^\.\d]/);if(t===-1)t=b.search(/[^\.\d]/);a=a.substring(t);b=b.substring(t)}return a>b?1:-1}catch(er){return 0}}function sortTextDesc(a,b){if($.data(tbl[0],"tablesorter").sortLocaleCompare)return b.localeCompare(a); return-sortText(a,b)}function getTextValue(a,mx,d){if(a==="")return(d||0)*Number.MAX_VALUE;if(mx){var i,l=a.length,n=mx+d;for(i=0;i<l;i++)n+=a.charCodeAt(i);return d*n}return 0}function sortNumeric(a,b,mx,d){if(a===""||isNaN(a))a=getTextValue(a,mx,d);if(b===""||isNaN(b))b=getTextValue(b,mx,d);return a-b}function sortNumericDesc(a,b,mx,d){if(a===""||isNaN(a))a=getTextValue(a,mx,d);if(b===""||isNaN(b))b=getTextValue(b,mx,d);return b-a}this.construct=function(settings){return this.each(function(){if(!this.tHead|| !this.tBodies)return;var $this,$document,$headers,cache,config,shiftDown=0,sortOrder,sortCSS,totalRows,$cell,i,j,a,s,o;this.config={};config=$.extend(this.config,$.tablesorter.defaults,settings);tbl=$this=$(this).addClass(this.config.tableClass);$.data(this,"tablesorter",config);$headers=buildHeaders(this);this.config.parsers=buildParserCache(this,$headers);this.config.string={max:1,"max+":1,"max-":-1,none:0};cache=buildCache(this);sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){totalRows= $this[0].tBodies[0]&&$this[0].tBodies[0].rows.length||0;if(!this.sortDisabled&&totalRows>0){$this.trigger("sortStart",tbl[0]);$cell=$(this);i=this.column;this.order=this.count++%2;if(typeof this.lockedOrder!=="undefined"&&this.lockedOrder!==false)this.order=this.lockedOrder;if(!e[config.sortMultiSortKey]){config.sortList=[];if(config.sortForce!==null){a=config.sortForce;for(j=0;j<a.length;j++)if(a[j][0]!==i)config.sortList.push(a[j])}config.sortList.push([i,this.order])}else if(isValueInArray(i,config.sortList))for(j= 0;j<config.sortList.length;j++){s=config.sortList[j];o=config.headerList[s[0]];if(s[0]===i){o.count=s[1];o.count++;s[1]=o.count%2}}else config.sortList.push([i,this.order]);if(config.sortAppend!==null){a=config.sortAppend;for(j=0;j<a.length;j++)if(a[j][0]!==i)config.sortList.push(a[j])}setTimeout(function(){setHeadersCss($this[0],$headers,config.sortList,sortCSS);appendToTable($this[0],multisort($this[0],config.sortList,cache))},1);return false}}).mousedown(function(){if(config.cancelSelection){this.onselectstart= function(){return false};return false}});$this.bind("update",function(){var me=this;setTimeout(function(){me.config.parsers=buildParserCache(me,$headers);cache=buildCache(me)},1)}).bind("updateCell",function(e,cell){var config=this.config,pos=[cell.parentNode.rowIndex-1,cell.cellIndex];cache.normalized[pos[0]][pos[1]]=config.parsers[pos[1]].format(getElementText(config,cell),cell)}).bind("sorton",function(e,list){$(this).trigger("sortStart",tbl[0]);config.sortList=list;var sortList=config.sortList; updateHeaderSortCount(this,sortList);setHeadersCss(this,$headers,sortList,sortCSS);appendToTable(this,multisort(this,sortList,cache))}).bind("appendCache",function(){appendToTable(this,cache)}).bind("applyWidgetId",function(e,id){getWidgetById(id).format(this)}).bind("applyWidgets",function(){applyWidget(this)});if($.metadata&&$(this).metadata()&&$(this).metadata().sortlist)config.sortList=$(this).metadata().sortlist;if(config.sortList.length>0)$this.trigger("sorton",[config.sortList]);applyWidget(this)})}; this.addParser=function(parser){var i,l=parsers.length,a=true;for(i=0;i<l;i++)if(parsers[i].id.toLowerCase()===parser.id.toLowerCase())a=false;if(a)parsers.push(parser)};this.addWidget=function(widget){widgets.push(widget)};this.formatFloat=function(s){var i=parseFloat(s);return isNaN(i)?$.trim(s):i};this.isDigit=function(s){return/^[\-+]?\d*$/.test($.trim(s.replace(/[,.']/g,"")))};this.clearTableBody=function(table){if($.browser.msie){var empty=function(){while(this.firstChild)this.removeChild(this.firstChild)}; empty.apply(table.tBodies[0])}else table.tBodies[0].innerHTML=""}}})();$.fn.extend({tablesorter:$.tablesorter.construct});var ts=$.tablesorter;ts.addParser({id:"text",is:function(s){return true},format:function(s){return $.trim(s.toLocaleLowerCase())},type:"text"});ts.addParser({id:"digit",is:function(s){return $.tablesorter.isDigit(s.replace(/,/g,""))},format:function(s){return $.tablesorter.formatFloat(s.replace(/,/g,""))},type:"numeric"});ts.addParser({id:"currency",is:function(s){return/^[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]/.test(s)}, format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9.\-]/g),""))},type:"numeric"});ts.addParser({id:"ipAddress",is:function(s){return/^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s)},format:function(s){var i,item,a=s.split("."),r="",l=a.length;for(i=0;i<l;i++){item=a[i];if(item.length===2)r+="0"+item;else r+=item}return $.tablesorter.formatFloat(r)},type:"numeric"});ts.addParser({id:"url",is:function(s){return/^(https?|ftp|file):\/\/$/.test(s)},format:function(s){return $.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//), ""))},type:"text"});ts.addParser({id:"isoDate",is:function(s){return/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(s)},format:function(s){return $.tablesorter.formatFloat(s!==""?(new Date(s.replace(new RegExp(/-/g),"/"))).getTime():"0")},type:"numeric"});ts.addParser({id:"percent",is:function(s){return/\%$/.test($.trim(s))},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""))},type:"numeric"});ts.addParser({id:"usLongDate",is:function(s){return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/))}, format:function(s){return $.tablesorter.formatFloat((new Date(s)).getTime())},type:"numeric"});ts.addParser({id:"shortDate",is:function(s){return/\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s)},format:function(s,table){var c=table.config;s=s.replace(/\-/g,"/");if(c.dateFormat==="us")s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$1/$2");else if(c.dateFormat==="uk")s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$2/$1");else if(c.dateFormat==="dd/mm/yy"||c.dateFormat==="dd-mm-yy")s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, "$1/$2/$3");return $.tablesorter.formatFloat((new Date(s)).getTime())},type:"numeric"});ts.addParser({id:"time",is:function(s){return/^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s)},format:function(s){return $.tablesorter.formatFloat((new Date("2000/01/01 "+s)).getTime())},type:"numeric"});ts.addParser({id:"metadata",is:function(s){return false},format:function(s,table,cell){var c=table.config,p=!c.parserMetadataName?"sortValue":c.parserMetadataName;return $(cell).metadata()[p]}, type:"numeric"});ts.addWidget({id:"zebra",format:function(table){var $tr,row=-1,odd,time;if(table.config.debug)time=new Date;$("tr:visible",table.tBodies[0]).each(function(i){$tr=$(this);if(!$tr.hasClass(table.config.cssChildRow))row++;odd=row%2===0;$tr.removeClass(table.config.widgetZebra.css[odd?0:1]).addClass(table.config.widgetZebra.css[odd?1:0])});if(table.config.debug)$.tablesorter.benchmark("Applying Zebra widget",time)}})})(jQuery);
+(function($){$.extend({tablesorter:new function(){var parsers=[],widgets=[],tbl;this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",cssChildRow:"expand-child",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,sortLocaleCompare:false,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",onRenderHeader:null,selectorHeaders:"thead th", tableClass:"tablesorter",debug:false};function log(s){if(typeof console!=="undefined"&&typeof console.debug!=="undefined")console.log(s);else alert(s)}function benchmark(s,d){log(s+","+((new Date).getTime()-d.getTime())+"ms")}this.benchmark=benchmark;function getElementText(config,node,cellIndex){var text="",te=config.textExtraction;if(!node)return"";if(!config.supportsTextContent)config.supportsTextContent=node.textContent||false;if(te==="simple")if(config.supportsTextContent)text=node.textContent; else if(node.childNodes[0]&&node.childNodes[0].hasChildNodes())text=node.childNodes[0].innerHTML;else text=node.innerHTML;else if(typeof te==="function")text=te(node);else if(typeof te==="object"&&te.hasOwnProperty(cellIndex))text=config.textExtraction[cellIndex](node);else text=$(node).text();return text}function getParserById(name){var i,l=parsers.length;for(i=0;i<l;i++)if(parsers[i].id.toLowerCase()===name.toLowerCase())return parsers[i];return false}function getNodeFromRowAndCellIndex(rows,rowIndex, cellIndex){return rows[rowIndex].cells[cellIndex]}function trimAndGetNodeText(config,node,cellIndex){return $.trim(getElementText(config,node,cellIndex))}function detectParserForColumn(table,rows,rowIndex,cellIndex){var i,l=parsers.length,node=false,nodeValue="",keepLooking=true;while(nodeValue===""&&keepLooking){rowIndex++;if(rows[rowIndex]){node=getNodeFromRowAndCellIndex(rows,rowIndex,cellIndex);nodeValue=trimAndGetNodeText(table.config,node,cellIndex);if(table.config.debug)log("Checking if value was empty on row:"+ rowIndex)}else keepLooking=false}for(i=1;i<l;i++)if(parsers[i].is(nodeValue,table,node))return parsers[i];return parsers[0]}function buildParserCache(table,$headers){if(table.tBodies.length===0)return;var rows=table.tBodies[0].rows,list,cells,l,i,p,parsersDebug="";if(rows[0]){list=[];cells=rows[0].cells;l=cells.length;for(i=0;i<l;i++){p=false;if($.metadata&&$($headers[i]).metadata()&&$($headers[i]).metadata().sorter)p=getParserById($($headers[i]).metadata().sorter);else if(table.config.headers[i]&& table.config.headers[i].sorter)p=getParserById(table.config.headers[i].sorter);else if($($headers[i]).attr("class").match("sorter-"))p=getParserById($($headers[i]).attr("class").match(/sorter-(\w+)/)[1]||"");if(!p)p=detectParserForColumn(table,rows,-1,i);if(table.config.debug)parsersDebug+="column:"+i+" parser:"+p.id+"\n";list.push(p)}}if(table.config.debug)log(parsersDebug);return list}function buildCache(table){var totalRows=table.tBodies[0]&&table.tBodies[0].rows.length||0,totalCells=table.tBodies[0].rows[0]&& table.tBodies[0].rows[0].cells.length||0,parsers=table.config.parsers,cache={row:[],normalized:[]},i,j,c,cols,cacheTime;if(table.config.debug)cacheTime=new Date;for(i=0;i<totalRows;++i){c=$(table.tBodies[0].rows[i]);cols=[];if(c.hasClass(table.config.cssChildRow)){cache.row[cache.row.length-1]=cache.row[cache.row.length-1].add(c);continue}cache.row.push(c);for(j=0;j<totalCells;++j)cols.push(parsers[j].format(getElementText(table.config,c[0].cells[j],j),table,c[0].cells[j]));cols.push(cache.normalized.length); cache.normalized.push(cols);cols=null}if(table.config.debug)benchmark("Building cache for "+totalRows+" rows:",cacheTime);return cache}function getWidgetById(name){var i,l=widgets.length;for(i=0;i<l;i++)if(widgets[i].id.toLowerCase()===name.toLowerCase())return widgets[i]}function applyWidget(table){var c=table.config.widgets,i,l=c.length;for(i=0;i<l;i++)getWidgetById(c[i]).format(table)}function appendToTable(table,cache){var c=cache,r=c.row,n=c.normalized,totalRows=n.length,checkCell=n[0].length- 1,tableBody=$(table.tBodies[0]),rows=[],i,j,l,pos,appendTime;if(table.config.debug)appendTime=new Date;for(i=0;i<totalRows;i++){pos=n[i][checkCell];rows.push(r[pos]);if(!table.config.appender){l=r[pos].length;for(j=0;j<l;j++)tableBody[0].appendChild(r[pos][j])}}if(table.config.appender)table.config.appender(table,rows);rows=null;if(table.config.debug)benchmark("Rebuilt table:",appendTime);applyWidget(table);setTimeout(function(){$(table).trigger("sortEnd",table)},0)}function computeTableHeaderCellIndexes(t){var matrix= [],lookup={},thead=t.getElementsByTagName("THEAD")[0],trs=thead.getElementsByTagName("TR"),i,j,k,l,c,cells,rowIndex,cellId,rowSpan,colSpan,firstAvailCol,matrixrow;for(i=0;i<trs.length;i++){cells=trs[i].cells;for(j=0;j<cells.length;j++){c=cells[j];rowIndex=c.parentNode.rowIndex;cellId=rowIndex+"-"+c.cellIndex;rowSpan=c.rowSpan||1;colSpan=c.colSpan||1;if(typeof matrix[rowIndex]==="undefined")matrix[rowIndex]=[];for(k=0;k<matrix[rowIndex].length+1;k++)if(typeof matrix[rowIndex][k]==="undefined"){firstAvailCol= k;break}lookup[cellId]=firstAvailCol;for(k=rowIndex;k<rowIndex+rowSpan;k++){if(typeof matrix[k]==="undefined")matrix[k]=[];matrixrow=matrix[k];for(l=firstAvailCol;l<firstAvailCol+colSpan;l++)matrixrow[l]="x"}}}return lookup}function formatSortingOrder(v){if(typeof v!=="number")return v.toLowerCase().charAt(0)==="d"?1:0;else return v===1?1:0}function checkHeaderMetadata(cell){return $.metadata&&$(cell).metadata().sorter===false}function checkHeaderOptions(table,i){return table.config.headers[i]&&table.config.headers[i].sorter=== false}function checkHeaderLocked(table,i){if(table.config.headers[i]&&table.config.headers[i].lockedOrder!==null)return table.config.headers[i].lockedOrder;return false}function checkHeaderOrder(table,i){if(table.config.headers[i]&&table.config.headers[i].sortInitialOrder)return table.config.headers[i].sortInitialOrder;return table.config.sortInitialOrder}function buildHeaders(table){var meta=$.metadata?true:false,header_index=computeTableHeaderCellIndexes(table),$th,lock,time,$tableHeaders;if(table.config.debug)time= new Date;$tableHeaders=$(table.config.selectorHeaders,table).wrapInner("<span/>").each(function(index){this.column=header_index[this.parentNode.rowIndex+"-"+this.cellIndex];this.order=formatSortingOrder(checkHeaderOrder(table,index));this.count=this.order;if(checkHeaderMetadata(this)||checkHeaderOptions(table,index)||$(this).is(".sorter-false"))this.sortDisabled=true;this.lockedOrder=false;lock=checkHeaderLocked(table,index);if(typeof lock!=="undefined"&&lock!==false)this.order=this.lockedOrder=formatSortingOrder(lock); if(!this.sortDisabled){$th=$(this).addClass(table.config.cssHeader);if(table.config.onRenderHeader)table.config.onRenderHeader.apply($th,[index])}table.config.headerList[index]=this});if(table.config.debug){benchmark("Built headers:",time);log($tableHeaders)}return $tableHeaders}function checkCellColSpan(table,rows,row){var i,cell,arr=[],r=table.tHead.rows,c=r[row].cells;for(i=0;i<c.length;i++){cell=c[i];if(cell.colSpan>1)arr=arr.concat(checkCellColSpan(table,rows,row++));else if(table.tHead.length=== 1||cell.rowSpan>1||!r[row+1])arr.push(cell)}return arr}function isValueInArray(v,a){var i,l=a.length;for(i=0;i<l;i++)if(a[i][0]===v)return true;return false}function setHeadersCss(table,$headers,list,css){$headers.removeClass(css[0]).removeClass(css[1]);var h=[],i,l;$headers.each(function(offset){if(!this.sortDisabled)h[this.column]=$(this)});l=list.length;for(i=0;i<l;i++)h[list[i][0]].addClass(css[list[i][1]])}function fixColumnWidth(table,$headers){var c=table.config,colgroup;if(c.widthFixed){colgroup= $("<colgroup>");$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($("<col>").css("width",$(this).width()))});$(table).prepend(colgroup)}}function updateHeaderSortCount(table,sortList){var i,s,o,c=table.config,l=sortList.length;for(i=0;i<l;i++){s=sortList[i];o=c.headerList[s[0]];o.count=s[1];o.count++}}function getCachedSortType(parsers,i){return parsers[i].type}function multisort(table,sortList,cache){var dynamicExp="var sortWrapper = function(a,b) {",col,mx=0,dir=0,tc=table.config, lc=cache.normalized.length,l=sortList.length,sortTime,i,j,c,s,e,order,orgOrderCol;if(tc.debug)sortTime=new Date;for(i=0;i<l;i++){c=sortList[i][0];order=sortList[i][1];s=getCachedSortType(tc.parsers,c)==="text"?order===0?"sortText":"sortTextDesc":order===0?"sortNumeric":"sortNumericDesc";e="e"+i;if(/Numeric/.test(s)&&tc.headers[c]&&tc.headers[c].string){for(j=0;j<lc;j++){col=Math.abs(parseFloat(cache.normalized[j][c]));mx=Math.max(mx,isNaN(col)?0:col)}dir=tc.headers[c]?tc.string[tc.headers[c].string]|| 0:0}dynamicExp+="var "+e+" = "+s+"(a["+c+"],b["+c+"],"+mx+","+dir+"); ";dynamicExp+="if ("+e+") { return "+e+"; } ";dynamicExp+="else { "}orgOrderCol=cache.normalized[0].length-1;dynamicExp+="return a["+orgOrderCol+"]-b["+orgOrderCol+"];";for(i=0;i<l;i++)dynamicExp+="}; ";dynamicExp+="return 0; ";dynamicExp+="}; ";eval(dynamicExp);cache.normalized.sort(sortWrapper);if(tc.debug)benchmark("Sorting on "+sortList.toString()+" and dir "+order+" time:",sortTime);return cache}function sortText(a,b){if($.data(tbl[0], "tablesorter").sortLocaleCompare)return a.localeCompare(b);if(a===b)return 0;try{var cnt=0,ax,t,x=/^(\.)?\d/,L=Math.min(a.length,b.length)+1;while(cnt<L&&a.charAt(cnt)===b.charAt(cnt)&&x.test(b.substring(cnt))===false&&x.test(a.substring(cnt))===false)cnt++;a=a.substring(cnt);b=b.substring(cnt);if(x.test(a)||x.test(b))if(x.test(a)===false)return a?1:-1;else if(x.test(b)===false)return b?-1:1;else{t=parseFloat(a)-parseFloat(b);if(t!==0)return t;else t=a.search(/[^\.\d]/);if(t===-1)t=b.search(/[^\.\d]/); a=a.substring(t);b=b.substring(t)}return a>b?1:-1}catch(er){return 0}}function sortTextDesc(a,b){if($.data(tbl[0],"tablesorter").sortLocaleCompare)return b.localeCompare(a);return-sortText(a,b)}function getTextValue(a,mx,d){if(a==="")return(d||0)*Number.MAX_VALUE;if(mx){var i,l=a.length,n=mx+d;for(i=0;i<l;i++)n+=a.charCodeAt(i);return d*n}return 0}function sortNumeric(a,b,mx,d){if(a===""||isNaN(a))a=getTextValue(a,mx,d);if(b===""||isNaN(b))b=getTextValue(b,mx,d);return a-b}function sortNumericDesc(a, b,mx,d){if(a===""||isNaN(a))a=getTextValue(a,mx,d);if(b===""||isNaN(b))b=getTextValue(b,mx,d);return b-a}this.construct=function(settings){return this.each(function(){if(!this.tHead||!this.tBodies)return;var $this,$document,$headers,cache,config,shiftDown=0,sortOrder,sortCSS,totalRows,$cell,i,j,a,s,o;this.config={};config=$.extend(this.config,$.tablesorter.defaults,settings);tbl=$this=$(this).addClass(this.config.tableClass);$.data(this,"tablesorter",config);$headers=buildHeaders(this);this.config.parsers= buildParserCache(this,$headers);this.config.string={max:1,"max+":1,"max-":-1,none:0};cache=buildCache(this);sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){totalRows=$this[0].tBodies[0]&&$this[0].tBodies[0].rows.length||0;if(!this.sortDisabled&&totalRows>0){$this.trigger("sortStart",tbl[0]);$cell=$(this);i=this.column;this.order=this.count++%2;if(typeof this.lockedOrder!=="undefined"&&this.lockedOrder!==false)this.order=this.lockedOrder;if(!e[config.sortMultiSortKey]){config.sortList= [];if(config.sortForce!==null){a=config.sortForce;for(j=0;j<a.length;j++)if(a[j][0]!==i)config.sortList.push(a[j])}config.sortList.push([i,this.order])}else if(isValueInArray(i,config.sortList))for(j=0;j<config.sortList.length;j++){s=config.sortList[j];o=config.headerList[s[0]];if(s[0]===i){o.count=s[1];o.count++;s[1]=o.count%2}}else config.sortList.push([i,this.order]);if(config.sortAppend!==null){a=config.sortAppend;for(j=0;j<a.length;j++)if(a[j][0]!==i)config.sortList.push(a[j])}setTimeout(function(){setHeadersCss($this[0], $headers,config.sortList,sortCSS);appendToTable($this[0],multisort($this[0],config.sortList,cache))},1);return false}}).mousedown(function(){if(config.cancelSelection){this.onselectstart=function(){return false};return false}});$this.bind("update",function(){var me=this;setTimeout(function(){me.config.parsers=buildParserCache(me,$headers);cache=buildCache(me)},1)}).bind("updateCell",function(e,cell){var config=this.config,pos=[cell.parentNode.rowIndex-1,cell.cellIndex];cache.normalized[pos[0]][pos[1]]= config.parsers[pos[1]].format(getElementText(config,cell,pos[1]),cell)}).bind("sorton",function(e,list){$(this).trigger("sortStart",tbl[0]);config.sortList=list;var sortList=config.sortList;updateHeaderSortCount(this,sortList);setHeadersCss(this,$headers,sortList,sortCSS);appendToTable(this,multisort(this,sortList,cache))}).bind("appendCache",function(){appendToTable(this,cache)}).bind("applyWidgetId",function(e,id){getWidgetById(id).format(this)}).bind("applyWidgets",function(){applyWidget(this)}); if($.metadata&&$(this).metadata()&&$(this).metadata().sortlist)config.sortList=$(this).metadata().sortlist;if(config.sortList.length>0)$this.trigger("sorton",[config.sortList]);applyWidget(this)})};this.addParser=function(parser){var i,l=parsers.length,a=true;for(i=0;i<l;i++)if(parsers[i].id.toLowerCase()===parser.id.toLowerCase())a=false;if(a)parsers.push(parser)};this.addWidget=function(widget){widgets.push(widget)};this.formatFloat=function(s){var i=parseFloat(s);return isNaN(i)?$.trim(s):i};this.isDigit= function(s){return/^[\-+]?\d*$/.test($.trim(s.replace(/[,.']/g,"")))};this.clearTableBody=function(table){if($.browser.msie){var empty=function(){while(this.firstChild)this.removeChild(this.firstChild)};empty.apply(table.tBodies[0])}else table.tBodies[0].innerHTML=""}}})();$.fn.extend({tablesorter:$.tablesorter.construct});var ts=$.tablesorter;ts.addParser({id:"text",is:function(s){return true},format:function(s){return $.trim(s.toLocaleLowerCase())},type:"text"});ts.addParser({id:"digit",is:function(s){return $.tablesorter.isDigit(s.replace(/,/g, ""))},format:function(s){return $.tablesorter.formatFloat(s.replace(/,/g,""))},type:"numeric"});ts.addParser({id:"currency",is:function(s){return/^[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]/.test(s)},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9.\-]/g),""))},type:"numeric"});ts.addParser({id:"ipAddress",is:function(s){return/^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s)},format:function(s){var i,item,a=s.split("."),r="",l=a.length;for(i=0;i<l;i++){item=a[i];if(item.length=== 2)r+="0"+item;else r+=item}return $.tablesorter.formatFloat(r)},type:"numeric"});ts.addParser({id:"url",is:function(s){return/^(https?|ftp|file):\/\/$/.test(s)},format:function(s){return $.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//),""))},type:"text"});ts.addParser({id:"isoDate",is:function(s){return/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(s)},format:function(s){return $.tablesorter.formatFloat(s!==""?(new Date(s.replace(new RegExp(/-/g),"/"))).getTime():"0")},type:"numeric"});ts.addParser({id:"percent", is:function(s){return/\%$/.test($.trim(s))},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""))},type:"numeric"});ts.addParser({id:"usLongDate",is:function(s){return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/))},format:function(s){return $.tablesorter.formatFloat((new Date(s)).getTime())},type:"numeric"});ts.addParser({id:"shortDate",is:function(s){return/\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s)}, format:function(s,table){var c=table.config;s=s.replace(/\-/g,"/");if(c.dateFormat==="us")s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$1/$2");else if(c.dateFormat==="uk")s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$2/$1");else if(c.dateFormat==="dd/mm/yy"||c.dateFormat==="dd-mm-yy")s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/,"$1/$2/$3");return $.tablesorter.formatFloat((new Date(s)).getTime())},type:"numeric"});ts.addParser({id:"time",is:function(s){return/^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s)}, format:function(s){return $.tablesorter.formatFloat((new Date("2000/01/01 "+s)).getTime())},type:"numeric"});ts.addParser({id:"metadata",is:function(s){return false},format:function(s,table,cell){var c=table.config,p=!c.parserMetadataName?"sortValue":c.parserMetadataName;return $(cell).metadata()[p]},type:"numeric"});ts.addWidget({id:"zebra",format:function(table){var $tr,row=-1,odd,time;if(table.config.debug)time=new Date;$("tr:visible",table.tBodies[0]).each(function(i){$tr=$(this);if(!$tr.hasClass(table.config.cssChildRow))row++; odd=row%2===0;$tr.removeClass(table.config.widgetZebra.css[odd?0:1]).addClass(table.config.widgetZebra.css[odd?1:0])});if(table.config.debug)$.tablesorter.benchmark("Applying Zebra widget",time)}})})(jQuery);
Please sign in to comment.
Something went wrong with that request. Please try again.