mirror of
https://github.com/Mottie/tablesorter.git
synced 2024-11-15 23:54:22 +00:00
added textSorter & modified sortLocaleCompare
This commit is contained in:
parent
28e9a07d59
commit
e579f93e8f
BIN
README.markdown
BIN
README.markdown
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
/*!
|
||||
* tablesorter pager plugin
|
||||
* updated 4/28/2012
|
||||
* updated 5/3/2012
|
||||
*/
|
||||
;(function($) {
|
||||
$.extend({tablesorterPager: new function() {
|
||||
|
4
addons/pager/jquery.tablesorter.pager.min.js
vendored
4
addons/pager/jquery.tablesorter.pager.min.js
vendored
File diff suppressed because one or more lines are too long
158
docs/example-locale-sort.html
Normal file
158
docs/example-locale-sort.html
Normal file
@ -0,0 +1,158 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>jQuery plugin: Tablesorter 2.0 - Sorting Accented Characters</title>
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
|
||||
|
||||
<!-- Demo stuff -->
|
||||
<link rel="stylesheet" href="css/jq.css">
|
||||
<script src="js/chili/jquery.chili-2.2.js"></script>
|
||||
<script src="js/chili/recipes.js"></script>
|
||||
<script src="js/docs.js"></script>
|
||||
|
||||
<!-- Tablesorter: required -->
|
||||
<link rel="stylesheet" href="../css/blue/style.css">
|
||||
<script src="../js/jquery.tablesorter.js"></script>
|
||||
|
||||
<script id="js">$(function() {
|
||||
|
||||
// these default equivalents were obtained from a table of equivalents
|
||||
// provided by sugar.js sorting alogrithms: http://sugarjs.com/sorting
|
||||
/*
|
||||
$.tablesorter.characterEquivalents = {
|
||||
"a" : "\u00e1\u00e0\u00e2\u00e3\u00e4", // áàâãä
|
||||
"A" : "\u00c1\u00c0\u00c2\u00c3\u00c4", // ÁÀÂÃÄ
|
||||
"c" : "\u00e7", // ç
|
||||
"C" : "\u00c7", // Ç
|
||||
"e" : "\u00e9\u00e8\u00ea\u00eb", // éèêë
|
||||
"E" : "\u00c9\u00c8\u00ca\u00cb", // ÉÈÊË
|
||||
"i" : "\u00ed\u00ec\u0130\u00ee\u00ef", // íìIîï
|
||||
"I" : "\u00cd\u00cc\u0130\u00ce\u00cf", // ÍÌIÎÏ
|
||||
"o" : "\u00f3\u00f2\u00f4\u00f5\u00f6", // óòôõö
|
||||
"O" : "\u00d3\u00d2\u00d4\u00d5\u00d6", // ÓÒÔÕÖ
|
||||
"S" : "\u00df", // ß
|
||||
"u" : "\u00fa\u00f9\u00fb\u00fc", // úùûü
|
||||
"U" : "\u00da\u00d9\u00db\u00dc" // ÚÙÛÜ
|
||||
};
|
||||
*/
|
||||
// modify the above defaults as follows
|
||||
$.extend( $.tablesorter.characterEquivalents, {
|
||||
"ae" : "\u00e6;", // expanding characters æ Æ
|
||||
"AE" : "\u00c6;",
|
||||
"oe" : "\u00f6;\u0153;", // œ Œ
|
||||
"OE" : "\u00d6;\u0152;",
|
||||
"d" : "\u00f0;", // Eth (ð Ð)
|
||||
"D" : "\u00d0;",
|
||||
"o" : "\u00f3;\u00f2;\u00f4;\u00f5;", // remove ö because it's in the oe now
|
||||
"O" : "\u00d3;\u00d2;\u00d4;\u00d5;" // remove Ö because it's in the OE now
|
||||
});
|
||||
|
||||
$("table").tablesorter({
|
||||
// Enable use of the characterEquivalents reference
|
||||
sortLocaleCompare : true,
|
||||
// upper case sorts BEFORE lower case
|
||||
ignoreCase : false
|
||||
});
|
||||
});</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="banner">
|
||||
<h1>table<em>sorter</em></h1>
|
||||
<h2>Sorting Accented Characters</h2>
|
||||
<h3>Flexible client-side table sorting</h3>
|
||||
<a href="index.html">Back to documentation</a>
|
||||
</div>
|
||||
<div id="main">
|
||||
<h1>Demo</h1>
|
||||
<div id="demo"><table class="tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Account #</th>
|
||||
<th>First Name</th>
|
||||
<th>Last Name</th>
|
||||
<th>Age</th>
|
||||
<th>Location</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>a1a10</td>
|
||||
<td>AnderE</td>
|
||||
<td>Parker</td>
|
||||
<td>28</td>
|
||||
<td>Béchar</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>a1a2</td>
|
||||
<td>Ändere</td>
|
||||
<td>Hood</td>
|
||||
<td>33</td>
|
||||
<td>Bebington</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>A1a1</td>
|
||||
<td>Andére</td>
|
||||
<td>Kent</td>
|
||||
<td>18</td>
|
||||
<td>Berlin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>A2b2</td>
|
||||
<td>CotÉ</td>
|
||||
<td>Almighty</td>
|
||||
<td>45</td>
|
||||
<td>Beckum</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>A1d2</td>
|
||||
<td>CÔte</td>
|
||||
<td>Evans</td>
|
||||
<td>56</td>
|
||||
<td>Curaçao</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>a2b11</td>
|
||||
<td>CÔtÉ</td>
|
||||
<td>Clark</td>
|
||||
<td>44</td>
|
||||
<td>Béjaïa</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>A2b1</td>
|
||||
<td>Çote</td>
|
||||
<td>Presley</td>
|
||||
<td>24</td>
|
||||
<td>Bekkevoort</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>A1b0</td>
|
||||
<td>Andéré</td>
|
||||
<td>Carter</td>
|
||||
<td>40</td>
|
||||
<td>Bègles</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
|
||||
<h1>Javascript</h1>
|
||||
<div id="javascript">
|
||||
<pre class="js"></pre>
|
||||
</div>
|
||||
<h1>HTML</h1>
|
||||
<div id="html">
|
||||
<pre class="html"></pre>
|
||||
</div>
|
||||
|
||||
<div class="next-up">
|
||||
<hr />
|
||||
Next up: <a href="example-option-digits.html">Dealing with digits! ››</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
157
docs/example-option-custom-sort.html
Normal file
157
docs/example-option-custom-sort.html
Normal file
@ -0,0 +1,157 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>jQuery plugin: Tablesorter 2.0 - Using a Custom Sort Script</title>
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
|
||||
|
||||
<!-- Demo stuff -->
|
||||
<link rel="stylesheet" href="css/jq.css">
|
||||
<script src="js/chili/jquery.chili-2.2.js"></script>
|
||||
<script src="js/chili/recipes.js"></script>
|
||||
<script src="js/docs.js"></script>
|
||||
|
||||
<!-- custom sorting script -->
|
||||
<script src="js/naturalSort.js"></script>
|
||||
|
||||
<!-- Tablesorter: required -->
|
||||
<link rel="stylesheet" href="../css/blue/style.css">
|
||||
<script src="../js/jquery.tablesorter.js"></script>
|
||||
|
||||
<script id="js">$(function() {
|
||||
$("table").tablesorter({
|
||||
textSorter : naturalSort
|
||||
});
|
||||
});</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="banner">
|
||||
<h1>table<em>sorter</em></h1>
|
||||
<h2>Using a Custom Sort Script</h2>
|
||||
<h3>Flexible client-side table sorting</h3>
|
||||
<a href="index.html">Back to documentation</a>
|
||||
</div>
|
||||
<div id="main">
|
||||
<h1>Demo</h1>
|
||||
<div id="demo"><table class="tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Account #</th>
|
||||
<th>First Name</th>
|
||||
<th>Last Name</th>
|
||||
<th>Age</th>
|
||||
<th>Total</th>
|
||||
<th>Discount</th>
|
||||
<th>Diff</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>a1a10</td>
|
||||
<td>Peter</td>
|
||||
<td>Parker</td>
|
||||
<td>28</td>
|
||||
<td>9.99</td>
|
||||
<td>20.3%</td>
|
||||
<td>+3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>a1a2</td>
|
||||
<td>John</td>
|
||||
<td>Hood</td>
|
||||
<td>33</td>
|
||||
<td>19.99</td>
|
||||
<td>25.1%</td>
|
||||
<td>-7</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>A1a1</td>
|
||||
<td>Clark</td>
|
||||
<td>Kent</td>
|
||||
<td>18</td>
|
||||
<td>2.89</td>
|
||||
<td>44.2%</td>
|
||||
<td>-15</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>A2b2</td>
|
||||
<td>Bruce</td>
|
||||
<td>Almighty</td>
|
||||
<td>45</td>
|
||||
<td>153.19</td>
|
||||
<td>44%</td>
|
||||
<td>+19</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>A1d2</td>
|
||||
<td>Bruce</td>
|
||||
<td>Evans</td>
|
||||
<td>56</td>
|
||||
<td>$153.19</td>
|
||||
<td>23%</td>
|
||||
<td>+9</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>a2b11</td>
|
||||
<td>John</td>
|
||||
<td>Clark</td>
|
||||
<td>44</td>
|
||||
<td>($19.89)</td>
|
||||
<td>25.1%</td>
|
||||
<td>(5)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>A2b1</td>
|
||||
<td>Elvis</td>
|
||||
<td>Presley</td>
|
||||
<td>24</td>
|
||||
<td>($9.99)</td>
|
||||
<td>50%</td>
|
||||
<td>(22)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>A1b0</td>
|
||||
<td>Frank</td>
|
||||
<td>Carter</td>
|
||||
<td>40</td>
|
||||
<td>-12.99</td>
|
||||
<td>20%</td>
|
||||
<td>(6)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></div>
|
||||
|
||||
|
||||
<h1>Page Head</h1>
|
||||
<div>
|
||||
<pre class="html"><!-- jQuery -->
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
|
||||
|
||||
<!-- custom sorting script -->
|
||||
<script src="js/naturalSort.js"></script>
|
||||
|
||||
<!-- Tablesorter: required -->
|
||||
<link rel="stylesheet" href="../css/blue/style.css">
|
||||
<script src="../js/jquery.tablesorter.js"></script></pre>
|
||||
</div>
|
||||
<h1>Javascript</h1>
|
||||
<div id="javascript">
|
||||
<pre class="js"></pre>
|
||||
</div>
|
||||
<h1>HTML</h1>
|
||||
<div id="html">
|
||||
<pre class="html"></pre>
|
||||
</div>
|
||||
|
||||
<div class="next-up">
|
||||
<hr />
|
||||
Next up: <a href="example-locale-sort.html">Sorting Accented Characters ››</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -107,7 +107,7 @@
|
||||
|
||||
<div class="next-up">
|
||||
<hr />
|
||||
Next up: <a href="example-option-digits.html">Dealing with digits! ››</a>
|
||||
Next up: <a href="example-option-custom-sort.html">Using a custom sort script ››</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
114
docs/index.html
114
docs/index.html
@ -15,11 +15,12 @@
|
||||
|
||||
<!-- Tablesorter: required -->
|
||||
<link href="../css/blue/style.css" rel="stylesheet">
|
||||
<script src="../js/jquery.tablesorter.min.js"></script>
|
||||
<script src="../js/jquery.tablesorter.js"></script>
|
||||
<script src="../js/jquery.tablesorter.widgets.js"></script>
|
||||
<script>
|
||||
$(function() {
|
||||
$("#tablesorter-demo").tablesorter({sortList:[[0,0],[2,1]],widgets:['zebra']});
|
||||
$("table.options").tablesorter({sortList:[[0,0]],headers:{3:{sorter:false},4:{sorter:false}}});
|
||||
$("#options").tablesorter({sortList:[[0,0]],headers:{3:{sorter:false},4:{sorter:false}},widgets:['stickyHeaders']});
|
||||
$("#methods,#events").tablesorter({sortList:[[0,0]],headers:{1:{sorter:false},2:{sorter:false}}});
|
||||
});
|
||||
</script>
|
||||
@ -94,6 +95,7 @@
|
||||
|
||||
<ul>
|
||||
<li>Multi-column sorting</li>
|
||||
<li>Multi-tbody sorting - see the <a href="#options">options</a> table below</li>
|
||||
<li>Parsers for sorting text, URIs, integers, currency, floats, IP addresses, dates (ISO, long and short formats), time. <a href="example-parsers.html">Add your own easily</a></li>
|
||||
<!--
|
||||
<li>Support for ROWSPAN and COLSPAN on TH elements</li>
|
||||
@ -290,6 +292,8 @@
|
||||
<li><a href="example-option-sortreset-sortrestart.html">Using sortReset & sortRestart options</a></li>
|
||||
<li><a href="example-option-sort-empty.html">Sorting empty cells</a> <span class="tip"><em>New!</em></span> v2.1.11</li>
|
||||
<li><a href="example-option-sort-key.html">Change the default multi-sorting key</a></li>
|
||||
<li><a href="example-option-custom-sort.html">Custom sort script</a> <span class="tip"><em>New!</em></span> v2.2</li>
|
||||
<li><a href="example-locale-sort.html">Sorting Accented Characters</a> <span class="tip"><em>New!</em></span> v2.2</li>
|
||||
</ul>
|
||||
|
||||
<h4>Parsers / Extracting Content</h4>
|
||||
@ -504,6 +508,32 @@
|
||||
<td></td>
|
||||
</tr>
|
||||
|
||||
<tr id="cssinfoblock">
|
||||
<td><a href="#" class="toggle2">cssInfoBlock</a></td>
|
||||
<td>String</td>
|
||||
<td>"tablesorter-infoOnly"</td>
|
||||
<td>All tbodies with this class name will not have its contents sorted. <span class="tip"><em>New!</em></span> v2.2
|
||||
<div class="collapsible">
|
||||
<br>
|
||||
With the addition of multiple tbody sorting in v2.2, you can now insert a non-sorting tbody within the table by adding this class to the tbody.
|
||||
<pre class="html"><tbody class="tablesorter-infoOnly">
|
||||
<tr>
|
||||
<th>The contents of this tbody</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>will not be sorted</td>
|
||||
</tr>
|
||||
</tbody></pre>
|
||||
As an example, I've split up this options table into three (3) tbodies. The first contains the active options, the second is the info block with a row that only contains the text "Deprecated Options", and the last tbody contains the deprecated options. Sort the table to see how each tbody sorts separately.
|
||||
<br>
|
||||
<p class="tip">
|
||||
<em>NOTE!</em> The pager plugin will only be applied to the first tbody, as always. I may work on modifying this behavior in the future, if I can figure out the best implementation.
|
||||
</p>
|
||||
</div>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
|
||||
<tr id="selectorremove">
|
||||
<td><a href="#" class="toggle2">selectorRemove</a></td>
|
||||
<td>String</td>
|
||||
@ -645,6 +675,14 @@
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="ignorecase">
|
||||
<td>ignoreCase</td>
|
||||
<td>Boolean</td>
|
||||
<td>true</td>
|
||||
<td>When true, text sorting will ignore the character case. If false, upper case characters will sort before lower case.</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
|
||||
<tr id="onrenderheader">
|
||||
<td><a href="#" class="toggle2">onRenderHeader</a></td>
|
||||
<td>Function</td>
|
||||
@ -780,12 +818,36 @@
|
||||
<td>Boolean</td>
|
||||
<td>false</td>
|
||||
<td>
|
||||
Boolean flag indicating whenever to use javascript <code class="hilight">String.localeCompare</code> method or not.
|
||||
Boolean flag indicating if certain accented characters within the table will be replaced with their equivalent characters. <span class="tip"><em>Modified!</em></span> v2.2.
|
||||
<div class="collapsible">
|
||||
This is only used when comparing text with international character strings. A sort using localeCompare will sort accented characters the same as their unaccented counterparts.
|
||||
<ul>
|
||||
<li>This option no longer switches the sort to use the <code class="hilight">String.localeCompare</code> method.</li>
|
||||
<li>When this option is <code class="hilight">true</code>, the text parsed from table cells will convert accented characters to their equivalent to allow the alphanumeric sort to properly sort.</li>
|
||||
<li>If <code class="hilight">false</code> (default), any accented characters are treated as their value in the standard unicode order.</li>
|
||||
<li>The following characters are replaced for both upper and lower case (information obtained from <a href="http://sugarjs.com/sorting">sugar.js sorting equivalents</a> table):
|
||||
<ul>
|
||||
<li><code class="hilight">áàâãä</code> replaced with <code class="hilight">a</code></li>
|
||||
<li><code class="hilight">ç</code> replaced with <code class="hilight">c</code></li>
|
||||
<li><code class="hilight">éèêë</code> replaced with <code class="hilight">e</code></li>
|
||||
<li><code class="hilight">íìİîï</code> replaced with <code class="hilight">i</code></li>
|
||||
<li><code class="hilight">óòôõö</code> replaced with <code class="hilight">o</code></li>
|
||||
<li><code class="hilight">úùûü</code> replaced with <code class="hilight">u</code></li>
|
||||
<li><code class="hilight">ß</code> replaced with <code class="hilight">S</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Please see the example page for instrcutions on how to modify the above equivalency table.</li>
|
||||
<li>If you would like to continuing using the <code class="hilight">String.localeCompare</code> method, then set the <code class="hilight">sortLocaleCompare</code> option to <code class="hilight">false</code> and use the new <code class="hilight">textSorter</code> option as follows:
|
||||
<pre class="js">$('table').tablesorter({
|
||||
textSorter: function(a,b) {
|
||||
return a.localeCompare(b);
|
||||
}
|
||||
});</pre></li>
|
||||
</ul>
|
||||
<del>Boolean flag indicating whenever to use javascript <code class="hilight">String.localeCompare</code> method or not.<br>
|
||||
This is only used when comparing text with international character strings. A sort using localeCompare will sort accented characters the same as their unaccented counterparts.</del>
|
||||
</div>
|
||||
</td>
|
||||
<td><a href="example-pager-ajax.html">Example</a></td>
|
||||
<td><a href="example-locale-sort.html">Example</a></td>
|
||||
</tr>
|
||||
|
||||
<tr id="sortreset">
|
||||
@ -891,6 +953,33 @@ $(function(){
|
||||
<td><a href="example-option-text-extraction.html">Example</a></td>
|
||||
</tr>
|
||||
|
||||
<tr id="textsorter">
|
||||
<td><a href="#" class="toggle2">textSorter</a></td>
|
||||
<td>Function</td>
|
||||
<td>null</td>
|
||||
<td>
|
||||
Replace the default sorting algorithm with a custom one using this option.
|
||||
<div class="collapsible">
|
||||
<br>
|
||||
Include a script like <a href="https://github.com/overset/javascript-natural-sort">naturalSort.js</a> as follows:
|
||||
<pre class="js">$(function(){
|
||||
$("table").tablesorter({
|
||||
textSorter : naturalSort
|
||||
});
|
||||
});</pre>
|
||||
or use the localeCompare sort
|
||||
<pre class="js">$(function(){
|
||||
$("table").tablesorter({
|
||||
textSorter: function(a,b) {
|
||||
return a.localeCompare(b);
|
||||
}
|
||||
});
|
||||
});</pre>There's no need to worry about reverse sorting, it's taken care of by the plugin.
|
||||
</div>
|
||||
</td>
|
||||
<td><a href="example-option-custom-sort.html">Example</a></td>
|
||||
</tr>
|
||||
|
||||
<tr id="usnumberformat">
|
||||
<td><a href="#" class="toggle2">usNumberFormat</a></td>
|
||||
<td>Boolean</td>
|
||||
@ -992,7 +1081,14 @@ $(function(){
|
||||
</td>
|
||||
<td><a href="example-widget-zebra.html">Example</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<!-- non-sorting tbody -->
|
||||
<tbody class="tablesorter-infoOnly">
|
||||
<tr><th colspan="5">Deprecated Options</th></tr>
|
||||
</tbody>
|
||||
|
||||
<tbody>
|
||||
<tr id="widgetcolumns"> <!-- added hidden zzz to sort these deprecated options at the bottom -->
|
||||
<td><span class="hidden">zzz</span><a href="#" class="toggle2 deprecated">widgetColumns</a></td>
|
||||
<td>Object with Array</td>
|
||||
@ -1340,7 +1436,7 @@ $("table").trigger("sorton", [sorting]);</pre></div>
|
||||
<br>
|
||||
Note: This is the only method the pager widget uses - the entire table is stored in the cache, but only the visible portion is actually exists in the table.
|
||||
<pre class="js">// Table data was just dynamically changed (more than one cell)
|
||||
$(table)
|
||||
$("table")
|
||||
.trigger("update")
|
||||
.trigger("appendCache");</pre></div>
|
||||
</td>
|
||||
@ -1543,15 +1639,15 @@ $(table)
|
||||
<strong id="Download-Required">Required:</strong>
|
||||
<ul>
|
||||
<li><a class="external" href="http://docs.jquery.com/Downloading_jQuery#Download_jQuery">jQuery</a> (1.2.6 or higher; some demos need jQuery 1.4.2+)</li>
|
||||
<li><a href="../js/jquery.tablesorter.min.js">jquery.tablesorter.min.js</a> (17kb, minified for production - please put the file on your server)</li>
|
||||
<li><a href="../js/jquery.tablesorter.min.js">jquery.tablesorter.min.js</a> (19kb, minified for production - please put the file on your server)</li>
|
||||
</ul>
|
||||
|
||||
<strong id="Download-Addons">Optional / Add-Ons:</strong>
|
||||
<ul>
|
||||
<li><a class="external" href="http://plugins.jquery.com/files/jquery.metadata.2.1.zip">jQuery Metadata 2.1</a> (6kb, required for setting <a href="#Examples">inline options</a>)</li>
|
||||
<li><a href="../js/jquery.tablesorter.js">jquery.tablesorter.js</a> (30kb/<a href="../js/jquery.tablesorter.min.js">17kb min</a>)</li>
|
||||
<li><a href="../js/jquery.tablesorter.js">jquery.tablesorter.js</a> (35kb/<a href="../js/jquery.tablesorter.min.js">19kb min</a>)</li>
|
||||
<li><a href="../addons/pager/jquery.tablesorter.pager.js">jquery.tablesorter.pager.js</a> (14kb/<a href="../addons/pager/jquery.tablesorter.pager.min.js">7kb min</a>, <a href="example-pager.html">demo</a>)</li>
|
||||
<li><a href="../js/jquery.tablesorter.widgets.js">jquery.tablesorter.widgets.js</a> (15kb/<a href="../js/jquery.tablesorter.widgets.min.js">7kb min</a>, includes the jQuery UI theme, columns styling, resizable columns, filter, sticky header and save sort widgets. <span class="tip"><em>Updated!</em></span> in v2.1.)</li>
|
||||
<li><a href="../js/jquery.tablesorter.widgets.js">jquery.tablesorter.widgets.js</a> (16kb/<a href="../js/jquery.tablesorter.widgets.min.js">8kb min</a>, includes the jQuery UI theme, columns styling, resizable columns, filter, sticky header and save sort widgets. <span class="tip"><em>Updated!</em></span> in v2.1.)</li>
|
||||
</ul>
|
||||
|
||||
<strong id="Download-Themes">Themes:</strong>
|
||||
|
@ -164,7 +164,7 @@ ChiliBook.recipes[ "html.js" ] =
|
||||
}
|
||||
, comment: {
|
||||
_match: /<!--[\w\W]*?-->/
|
||||
, _style: "color: #4040c2;"
|
||||
, _style: "color: gray;"
|
||||
}
|
||||
, script: {
|
||||
_match: /(<script\s+[^>]*>)([\w\W]*?)(<\/script\s*>)/
|
||||
@ -191,7 +191,7 @@ ChiliBook.recipes[ "html.js" ] =
|
||||
+ this.x( content, '/tag_attrs' )
|
||||
+ "<span class='tag_start'>" + this.x( close ) + "</span>";
|
||||
}
|
||||
, _style: "color: navy; font-weight: bold;"
|
||||
, _style: "color: navy;"
|
||||
}
|
||||
// matches an ending tag
|
||||
// like "</div>"
|
||||
@ -210,7 +210,7 @@ ChiliBook.recipes[ "html.js" ] =
|
||||
// before in $1, name in $2, between in $3, value in $4
|
||||
_match: /(\W*?)([\w-]+)(\s*=\s*)((?:\'[^\']*(?:\\.[^\']*)*\')|(?:\"[^\"]*(?:\\.[^\"]*)*\"))/
|
||||
, _replace: "$1<span class='attr_name'>$2</span>$3<span class='attr_value'>$4</span>"
|
||||
, _style: { attr_name: "color: green;", attr_value: "color: maroon;" }
|
||||
, _style: { attr_name: "color: royalBlue;", attr_value: "color: maroon;" }
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -228,7 +228,7 @@ ChiliBook.recipes[ "js.js" ] =
|
||||
}
|
||||
, sl_comment: {
|
||||
_match: /\/\/.*/
|
||||
, _style: 'color: green;'
|
||||
, _style: 'color: gray;'
|
||||
}
|
||||
, string: {
|
||||
_match: /(?:\'[^\'\\\n]*(?:\\.[^\'\\\n]*)*\')|(?:\"[^\"\\\n]*(?:\\.[^\"\\\n]*)*\")/
|
||||
@ -236,7 +236,7 @@ ChiliBook.recipes[ "js.js" ] =
|
||||
}
|
||||
, num: {
|
||||
_match: /\b[+-]?(?:\d*\.?\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?\b/
|
||||
, _style: 'color: red;'
|
||||
, _style: 'color: #a00;'
|
||||
}
|
||||
, reg_not: { //this prevents "a / b / c" to be interpreted as a reg_exp
|
||||
_match: /(?:\w+\s*)\/[^\/\\\n]*(?:\\.[^\/\\\n]*)*\/[gim]*(?:\s*\w+)/
|
||||
@ -250,7 +250,7 @@ ChiliBook.recipes[ "js.js" ] =
|
||||
}
|
||||
, brace: {
|
||||
_match: /[\{\}]/
|
||||
, _style: 'color: red; font-weight: bold;'
|
||||
, _style: 'color: #c00; font-weight: bold;'
|
||||
}
|
||||
, statement: {
|
||||
_match: /\b(with|while|var|try|throw|switch|return|if|for|finally|else|do|default|continue|const|catch|case|break)\b/
|
||||
@ -292,7 +292,7 @@ ChiliBook.recipes[ "css.js" ] =
|
||||
, _main: {
|
||||
comment: {
|
||||
_match: /\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\//
|
||||
, _style: "color: olive;"
|
||||
, _style: "color: gray;"
|
||||
}
|
||||
, directive: {
|
||||
_match: /@\w+/
|
||||
@ -352,7 +352,7 @@ ChiliBook.recipes[ "css.js" ] =
|
||||
}
|
||||
, number: {
|
||||
_match: /(?:\b[+-]?(?:\d*\.?\d+|\d+\.?\d*))(?:%|(?:(?:px|pt|em|)\b))/
|
||||
, _style: "color: red;"
|
||||
, _style: "color: maroon;"
|
||||
}
|
||||
, color : {
|
||||
_match: /(?:\#[a-fA-F0-9]{3,6})|\b(?:yellow|white|teal|silver|red|purple|olive|navy|maroon|lime|green|gray|fuchsia|blue|black|aqua|YellowGreen|Yellow|WhiteSmoke|White|Wheat|Violet|Turquoise|Tomato|Thistle|Teal|Tan|SteelBlue|SpringGreen|Snow|SlateGrey|SlateGray|SlateBlue|SkyBlue|Silver|Sienna|SeaShell|SeaGreen|SandyBrown|Salmon|SaddleBrown|RoyalBlue|RosyBrown|Red|Purple|PowderBlue|Plum|Pink|Peru|PeachPuff|PapayaWhip|PaleVioletRed|PaleTurquoise|PaleGreen|PaleGoldenRod|Orchid|OrangeRed|Orange|OliveDrab|Olive|OldLace|Navy|NavajoWhite|Moccasin|MistyRose|MintCream|MidnightBlue|MediumVioletRed|MediumTurquoise|MediumSpringGreen|MediumSlateBlue|MediumSeaGreen|MediumPurple|MediumOrchid|MediumBlue|MediumAquaMarine|Maroon|Magenta|Linen|LimeGreen|Lime|LightYellow|LightSteelBlue|LightSlateGrey|LightSlateGray|LightSkyBlue|LightSeaGreen|LightSalmon|LightPink|LightGrey|LightGreen|LightGray|LightGoldenRodYellow|LightCyan|LightCoral|LightBlue|LemonChiffon|LawnGreen|LavenderBlush|Lavender|Khaki|Ivory|Indigo|IndianRed|HotPink|HoneyDew|Grey|GreenYellow|Green|Gray|GoldenRod|Gold|GhostWhite|Gainsboro|Fuchsia|ForestGreen|FloralWhite|FireBrick|DodgerBlue|DimGrey|DimGray|DeepSkyBlue|DeepPink|Darkorange|DarkViolet|DarkTurquoise|DarkSlateGrey|DarkSlateGray|DarkSlateBlue|DarkSeaGreen|DarkSalmon|DarkRed|DarkOrchid|DarkOliveGreen|DarkMagenta|DarkKhaki|DarkGrey|DarkGreen|DarkGray|DarkGoldenRod|DarkCyan|DarkBlue|Cyan|Crimson|Cornsilk|CornflowerBlue|Coral|Chocolate|Chartreuse|CadetBlue|BurlyWood|Brown|BlueViolet|Blue|BlanchedAlmond|Black|Bisque|Beige|Azure|Aquamarine|Aqua|AntiqueWhite|AliceBlue)\b/
|
||||
|
42
docs/js/naturalSort.js
Normal file
42
docs/js/naturalSort.js
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license
|
||||
* Author: Jim Palmer (based on chunking idea from Dave Koelle)
|
||||
*/
|
||||
function naturalSort (a, b) {
|
||||
var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
|
||||
sre = /(^[ ]*|[ ]*$)/g,
|
||||
dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
|
||||
hre = /^0x[0-9a-f]+$/i,
|
||||
ore = /^0/,
|
||||
i = function(s) { return naturalSort.insensitive && (''+s).toLowerCase() || ''+s },
|
||||
// convert all to strings strip whitespace
|
||||
x = i(a).replace(sre, '') || '',
|
||||
y = i(b).replace(sre, '') || '',
|
||||
// chunk/tokenize
|
||||
xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
|
||||
yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
|
||||
// numeric, hex or date detection
|
||||
xD = parseInt(x.match(hre)) || (xN.length != 1 && x.match(dre) && Date.parse(x)),
|
||||
yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null,
|
||||
oFxNcL, oFyNcL;
|
||||
// first try and sort Hex codes or Dates
|
||||
if (yD)
|
||||
if ( xD < yD ) return -1;
|
||||
else if ( xD > yD ) return 1;
|
||||
// natural sorting through split numeric strings and default strings
|
||||
for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
|
||||
// find floats not starting with '0', string or 0 if not defined (Clint Priest)
|
||||
oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;
|
||||
oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;
|
||||
// handle numeric vs string comparison - number < string - (Kyle Adams)
|
||||
if (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return (isNaN(oFxNcL)) ? 1 : -1; }
|
||||
// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
|
||||
else if (typeof oFxNcL !== typeof oFyNcL) {
|
||||
oFxNcL += '';
|
||||
oFyNcL += '';
|
||||
}
|
||||
if (oFxNcL < oFyNcL) return -1;
|
||||
if (oFxNcL > oFyNcL) return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* TableSorter 2.1.20 - Client-side table sorting with ease!
|
||||
* TableSorter 2.2 - Client-side table sorting with ease!
|
||||
* @requires jQuery v1.2.6+
|
||||
*
|
||||
* Copyright (c) 2007 Christian Bach
|
||||
@ -18,9 +18,9 @@
|
||||
$.extend({
|
||||
tablesorter: new function() {
|
||||
|
||||
this.version = "2.1.20";
|
||||
this.version = "2.2";
|
||||
|
||||
var parsers = [], widgets = [], tbl;
|
||||
var parsers = [], widgets = [], tbl, $tbl;
|
||||
this.defaults = {
|
||||
cssHeader: "tablesorter-header",
|
||||
cssAsc: "tablesorter-headerSortUp",
|
||||
@ -34,9 +34,11 @@
|
||||
sortLocaleCompare: false,
|
||||
sortReset: false,
|
||||
sortRestart: false,
|
||||
emptyTo : "bottom", // sort empty cell to bottom
|
||||
stringTo : "max", // sort strings in numerical column as max value
|
||||
emptyTo: "bottom", // sort empty cell to bottom
|
||||
stringTo: "max", // sort strings in numerical column as max value
|
||||
textExtraction: "simple",
|
||||
textSorter: null, // use custom text sorter
|
||||
ignoreCase: true,
|
||||
parsers: {},
|
||||
widgets: [],
|
||||
headers: {},
|
||||
@ -196,13 +198,26 @@
|
||||
}
|
||||
|
||||
/* utils */
|
||||
function buildRegex(){
|
||||
var a, acc = '[', t = $.tablesorter,
|
||||
reg = t.characterEquivalents;
|
||||
t.characterRegexArray = {};
|
||||
for (a in reg) {
|
||||
if (typeof a === 'string') {
|
||||
acc += reg[a];
|
||||
t.characterRegexArray[a] = new RegExp('[' + reg[a] + ']', 'g');
|
||||
}
|
||||
}
|
||||
t.characterRegex = new RegExp(acc + ']');
|
||||
}
|
||||
|
||||
function buildCache(table) {
|
||||
var b = table.tBodies,
|
||||
tc = table.config,
|
||||
totalRows,
|
||||
totalCells,
|
||||
parsers = tc.parsers,
|
||||
t, i, j, c, cols, cacheTime;
|
||||
t, i, j, k, c, cols, cacheTime;
|
||||
tc.cache = {};
|
||||
if (tc.debug) {
|
||||
cacheTime = new Date();
|
||||
@ -267,7 +282,7 @@
|
||||
b = table.tBodies,
|
||||
rows = [],
|
||||
r, n, totalRows, checkCell,
|
||||
f, i, j, l, pos, appendTime;
|
||||
f, i, j, k, l, pos, appendTime;
|
||||
if (c.debug) {
|
||||
appendTime = new Date();
|
||||
}
|
||||
@ -277,7 +292,6 @@
|
||||
n = c.cache[k].normalized;
|
||||
totalRows = n.length;
|
||||
checkCell = totalRows ? (n[0].length - 1) : 0;
|
||||
|
||||
for (i = 0; i < totalRows; i++) {
|
||||
pos = n[i][checkCell];
|
||||
rows.push(r[pos]);
|
||||
@ -378,7 +392,7 @@
|
||||
}
|
||||
$tableHeaders = $(c.selectorHeaders, table)
|
||||
.wrapInner("<div class='tablesorter-header-inner' />")
|
||||
.each(function (index) {
|
||||
.each(function(index) {
|
||||
this.column = header_index[this.parentNode.rowIndex + "-" + this.cellIndex];
|
||||
this.order = formatSortingOrder( checkHeaderOrder(table, index) ) ? [1,0,2] : [0,1,2];
|
||||
this.count = -1; // set to -1 because clicking on the header automatically adds one
|
||||
@ -450,7 +464,7 @@
|
||||
function fixColumnWidth(table) {
|
||||
if (table.config.widthFixed) {
|
||||
var colgroup = $('<colgroup>');
|
||||
$("tr:first td", table.tBodies[0]).each(function () {
|
||||
$("tr:first td", table.tBodies[0]).each(function() {
|
||||
colgroup.append($('<col>').css('width', $(this).width()));
|
||||
});
|
||||
$(table).prepend(colgroup);
|
||||
@ -475,7 +489,7 @@
|
||||
function multisort(table, sortList) {
|
||||
var dynamicExp, col, mx = 0, dir = 0, tc = table.config,
|
||||
l = sortList.length, bl = table.tBodies.length,
|
||||
sortTime, i, j, c, cache, lc, s, e, order, orgOrderCol;
|
||||
sortTime, i, j, k, c, cache, lc, s, e, order, orgOrderCol;
|
||||
if (tc.debug) { sortTime = new Date(); }
|
||||
for (k = 0; k < bl; k++) {
|
||||
dynamicExp = "var sortWrapper = function(a,b) {";
|
||||
@ -521,10 +535,11 @@
|
||||
// Natural sort modified from: http://www.webdeveloper.com/forum/showthread.php?t=107909
|
||||
function sortText(a, b, col) {
|
||||
if (a === b) { return 0; }
|
||||
var c = tbl[0].config, cnt = 0, L, t, x, e = c.string[ (c.empties[col] || c.emptyTo ) ];
|
||||
var c = tbl.config, cnt = 0, L, t, x, e = c.string[ (c.empties[col] || c.emptyTo ) ];
|
||||
if (a === '' && e !== 0) { return (typeof(e) === 'boolean') ? (e ? -1 : 1) : -e || -1; }
|
||||
if (b === '' && e !== 0) { return (typeof(e) === 'boolean') ? (e ? 1 : -1) : e || 1; }
|
||||
if (c.sortLocaleCompare) { return a.localeCompare(b); }
|
||||
if (typeof c.textSorter === 'function') { return c.textSorter(a, b); }
|
||||
// if (c.sortLocaleCompare) { return a.localeCompare(b); }
|
||||
try {
|
||||
x = /^(\.)?\d/;
|
||||
L = Math.min(a.length, b.length) + 1;
|
||||
@ -552,11 +567,12 @@
|
||||
|
||||
function sortTextDesc(a, b, col) {
|
||||
if (a === b) { return 0; }
|
||||
var c = tbl[0].config, e = c.string[ (c.empties[col] || c.emptyTo ) ];
|
||||
var c = tbl.config, e = c.string[ (c.empties[col] || c.emptyTo ) ];
|
||||
if (a === '' && e !== 0) { return (typeof(e) === 'boolean') ? (e ? -1 : 1) : e || 1; }
|
||||
if (b === '' && e !== 0) { return (typeof(e) === 'boolean') ? (e ? 1 : -1) : -e || -1; }
|
||||
if (c.sortLocaleCompare) { return b.localeCompare(a); }
|
||||
return -sortText(a, b);
|
||||
if (typeof c.textSorter === 'function') { return c.textSorter(b, a); }
|
||||
// if (c.sortLocaleCompare) { return b.localeCompare(a); }
|
||||
return sortText(b, a);
|
||||
}
|
||||
|
||||
// return text string value by adding up ascii value
|
||||
@ -576,7 +592,7 @@
|
||||
|
||||
function sortNumeric(a, b, col, mx, d) {
|
||||
if (a === b) { return 0; }
|
||||
var c = tbl[0].config, e = c.string[ (c.empties[col] || c.emptyTo ) ];
|
||||
var c = tbl.config, e = c.string[ (c.empties[col] || c.emptyTo ) ];
|
||||
if (a === '' && e !== 0) { return (typeof(e) === 'boolean') ? (e ? -1 : 1) : -e || -1; }
|
||||
if (b === '' && e !== 0) { return (typeof(e) === 'boolean') ? (e ? 1 : -1) : e || 1; }
|
||||
if (isNaN(a)) { a = getTextValue(a, mx, d); }
|
||||
@ -586,7 +602,7 @@
|
||||
|
||||
function sortNumericDesc(a, b, col, mx, d) {
|
||||
if (a === b) { return 0; }
|
||||
var c = tbl[0].config, e = c.string[ (c.empties[col] || c.emptyTo ) ];
|
||||
var c = tbl.config, e = c.string[ (c.empties[col] || c.emptyTo ) ];
|
||||
if (a === '' && e !== 0) { return (typeof(e) === 'boolean') ? (e ? -1 : 1) : e || 1; }
|
||||
if (b === '' && e !== 0) { return (typeof(e) === 'boolean') ? (e ? 1 : -1) : -e || -1; }
|
||||
if (isNaN(a)) { a = getTextValue(a, mx, d); }
|
||||
@ -600,34 +616,37 @@
|
||||
// if no thead or tbody quit.
|
||||
if (!this.tHead || this.tBodies.length === 0) { return; }
|
||||
// declare
|
||||
var $this, $headers, config,
|
||||
totalRows, $cell, c, i, j, k, a, s, o;
|
||||
var $headers, $cell, totalRows,
|
||||
config, c, i, j, k, a, s, o;
|
||||
tbl = this;
|
||||
// new blank config object
|
||||
this.config = {};
|
||||
tbl.config = {};
|
||||
// merge and extend.
|
||||
c = config = $.extend(true, this.config, $.tablesorter.defaults, settings);
|
||||
c = config = $.extend(true, tbl.config, $.tablesorter.defaults, settings);
|
||||
// store common expression for speed
|
||||
tbl = $this = $(this).addClass(this.config.tableClass);
|
||||
$tbl = $(tbl).addClass(c.tableClass);
|
||||
// save the settings where they read
|
||||
$.data(this, "tablesorter", c);
|
||||
$.data(tbl, "tablesorter", c);
|
||||
// build up character equivalent cross-reference
|
||||
buildRegex();
|
||||
// digit sort text location; keeping max+/- for backwards compatibility
|
||||
c.string = { 'max': 1, 'min': -1, 'max+': 1, 'max-': -1, 'zero': 0, 'none': 0, 'null': 0, 'top': true, 'bottom': false };
|
||||
// build headers
|
||||
$headers = buildHeaders(this);
|
||||
$headers = buildHeaders(tbl);
|
||||
// try to auto detect column type, and store in tables config
|
||||
c.parsers = buildParserCache(this, $headers);
|
||||
c.parsers = buildParserCache(tbl, $headers);
|
||||
// build the cache for the tbody cells
|
||||
buildCache(this);
|
||||
buildCache(tbl);
|
||||
// fixate columns if the users supplies the fixedWidth option
|
||||
fixColumnWidth(this);
|
||||
fixColumnWidth(tbl);
|
||||
// apply event handling to headers
|
||||
// this is to big, perhaps break it out?
|
||||
$headers
|
||||
.click(function(e) {
|
||||
// totalRows = ($this[0].tBodies[0] && $this[0].tBodies[0].rows.length) || 0;
|
||||
// totalRows = (tbl.tBodies[0] && tbl.tBodies[0].rows.length) || 0;
|
||||
if (!this.sortDisabled) {
|
||||
// Only call sortStart if sorting is enabled.
|
||||
$this.trigger("sortStart", tbl[0]);
|
||||
$tbl.trigger("sortStart", tbl);
|
||||
// store exp, for speed
|
||||
$cell = $(this);
|
||||
k = !e[c.sortMultiSortKey];
|
||||
@ -689,10 +708,10 @@
|
||||
}
|
||||
}
|
||||
// sortBegin event triggered immediately before the sort
|
||||
$this.trigger("sortBegin", tbl[0]);
|
||||
$tbl.trigger("sortBegin", tbl);
|
||||
// set css for headers
|
||||
setHeadersCss($this[0], $headers, c.sortList);
|
||||
appendToTable($this[0], multisort($this[0], c.sortList));
|
||||
setHeadersCss(tbl, $headers, c.sortList);
|
||||
appendToTable(tbl, multisort(tbl, c.sortList));
|
||||
// stop normal event by returning false
|
||||
return false;
|
||||
}
|
||||
@ -707,7 +726,7 @@
|
||||
}
|
||||
});
|
||||
// apply easy methods that trigger binded events
|
||||
$this
|
||||
$tbl
|
||||
.bind("update", function(e, resort) {
|
||||
// remove rows/elements before update
|
||||
$(c.selectorRemove, this).remove();
|
||||
@ -715,25 +734,25 @@
|
||||
c.parsers = buildParserCache(this, $headers);
|
||||
// rebuild the cache map
|
||||
buildCache(this);
|
||||
if (resort !== false) { $this.trigger("sorton", [c.sortList]); }
|
||||
if (resort !== false) { $tbl.trigger("sorton", [c.sortList]); }
|
||||
})
|
||||
.bind("updateCell", function(e, cell, resort) {
|
||||
// get position from the dom.
|
||||
var pos = [(cell.parentNode.rowIndex - 1), cell.cellIndex],
|
||||
// update cache - format: function(s, table, cell, cellIndex)
|
||||
tbodyindex = $(cell).closest('tbody').index();
|
||||
table.cache[tbodyindex].normalized[pos[0]][pos[1]] = c.parsers[pos[1]].format(getElementText(c, cell, pos[1]), $this, cell, pos[1]);
|
||||
if (resort !== false) { $this.trigger("sorton", [c.sortList]); }
|
||||
tbodyindex = $tbl.find('tbody').index( $(cell).closest('tbody') );
|
||||
tbl.config.cache[tbodyindex].normalized[pos[0]][pos[1]] = c.parsers[pos[1]].format(getElementText(c, cell, pos[1]), tbl, cell, pos[1]);
|
||||
if (resort !== false) { $tbl.trigger("sorton", [c.sortList]); }
|
||||
})
|
||||
.bind("addRows", function(e, $row, resort) {
|
||||
var i, rows = $row.filter('tr').length,
|
||||
dat = [], l = $row[0].cells.length,
|
||||
tbodyindex = $row.closest('tbody').index();
|
||||
tbodyindex = $tbl.find('tbody').index( $row.closest('tbody') );
|
||||
// add each row
|
||||
for (i = 0; i < rows; i++) {
|
||||
// add each cell
|
||||
for (j = 0; j < l; j++) {
|
||||
dat[j] = c.parsers[j].format(getElementText(c, $row[i].cells[j], j), $this, $row[i].cells[j], j );
|
||||
dat[j] = c.parsers[j].format( getElementText(c, $row[i].cells[j], j), tbl, $row[i].cells[j], j );
|
||||
}
|
||||
// add the row index to the end
|
||||
dat.push(c.cache[tbodyindex].row.length);
|
||||
@ -743,10 +762,10 @@
|
||||
dat = [];
|
||||
}
|
||||
// resort using current settings
|
||||
if (resort !== false) { $this.trigger("sorton", [c.sortList]); }
|
||||
if (resort !== false) { $tbl.trigger("sorton", [c.sortList]); }
|
||||
})
|
||||
.bind("sorton", function(e, list) {
|
||||
$this.trigger("sortStart", tbl[0]);
|
||||
$tbl.trigger("sortStart", tbl);
|
||||
c.sortList = list;
|
||||
// update and store the sortlist
|
||||
var sortList = c.sortList;
|
||||
@ -757,13 +776,13 @@
|
||||
// sort the table and append it to the dom
|
||||
appendToTable(this, multisort(this, sortList));
|
||||
})
|
||||
.bind("appendCache", function () {
|
||||
.bind("appendCache", function() {
|
||||
appendToTable(this);
|
||||
})
|
||||
.bind("applyWidgetId", function (e, id) {
|
||||
.bind("applyWidgetId", function(e, id) {
|
||||
getWidgetById(id).format(this);
|
||||
})
|
||||
.bind("applyWidgets", function () {
|
||||
.bind("applyWidgets", function() {
|
||||
// apply widgets
|
||||
applyWidget(this);
|
||||
});
|
||||
@ -774,13 +793,13 @@
|
||||
applyWidget(this, true);
|
||||
// if user has supplied a sort list to constructor.
|
||||
if (c.sortList.length > 0) {
|
||||
$this.trigger("sorton", [c.sortList]);
|
||||
$tbl.trigger("sorton", [c.sortList]);
|
||||
} else {
|
||||
// apply widget format
|
||||
applyWidget(this);
|
||||
}
|
||||
this.hasInitialized = true;
|
||||
$this.trigger('tablesorter-initialized', this);
|
||||
$tbl.trigger('tablesorter-initialized', this);
|
||||
if (typeof c.initialized === 'function') { c.initialized(this); }
|
||||
});
|
||||
};
|
||||
@ -795,12 +814,12 @@
|
||||
parsers.push(parser);
|
||||
}
|
||||
};
|
||||
this.addWidget = function (widget) {
|
||||
this.addWidget = function(widget) {
|
||||
widgets.push(widget);
|
||||
};
|
||||
this.formatFloat = function(s) {
|
||||
if (typeof(s) !== 'string') { return s; }
|
||||
if (tbl[0].config.usNumberFormat) {
|
||||
if (tbl.config.usNumberFormat) {
|
||||
// US Format - 1,234,567.89 -> 1234567.89
|
||||
s = s.replace(/,/g,'');
|
||||
} else {
|
||||
@ -819,9 +838,37 @@
|
||||
// replace all unwanted chars and match.
|
||||
return (/^[\-+(]?\d*[)]?$/).test($.trim(s.replace(/[,.'\s]/g, '')));
|
||||
};
|
||||
this.clearTableBody = function (table) {
|
||||
// used when replacing accented characters during sorting
|
||||
this.characterEquivalents = {
|
||||
"a" : "\u00e1\u00e0\u00e2\u00e3\u00e4", // áàâãä
|
||||
"A" : "\u00c1\u00c0\u00c2\u00c3\u00c4", // ÁÀÂÃÄ
|
||||
"c" : "\u00e7", // ç
|
||||
"C" : "\u00c7", // Ç
|
||||
"e" : "\u00e9\u00e8\u00ea\u00eb", // éèêë
|
||||
"E" : "\u00c9\u00c8\u00ca\u00cb", // ÉÈÊË
|
||||
"i" : "\u00ed\u00ec\u0130\u00ee\u00ef", // íìİîï
|
||||
"I" : "\u00cd\u00cc\u0130\u00ce\u00cf", // ÍÌİÎÏ
|
||||
"o" : "\u00f3\u00f2\u00f4\u00f5\u00f6", // óòôõö
|
||||
"O" : "\u00d3\u00d2\u00d4\u00d5\u00d6", // ÓÒÔÕÖ
|
||||
"S" : "\u00df", // ß
|
||||
"u" : "\u00fa\u00f9\u00fb\u00fc", // úùûü
|
||||
"U" : "\u00da\u00d9\u00db\u00dc" // ÚÙÛÜ
|
||||
};
|
||||
this.replaceAccents = function(s) {
|
||||
if (this.characterRegex.test(s)) {
|
||||
var a, eq = this.characterEquivalents;
|
||||
for (a in eq) {
|
||||
if (typeof a === 'string') {
|
||||
s = s.replace( this.characterRegexArray[a], a );
|
||||
}
|
||||
}
|
||||
}
|
||||
return s;
|
||||
};
|
||||
this.clearTableBody = function(table) {
|
||||
$(table.tBodies).filter(':not(.' + table.config.cssInfoBlock + ')').empty();
|
||||
};
|
||||
|
||||
}
|
||||
})();
|
||||
|
||||
@ -839,8 +886,10 @@
|
||||
is: function(s) {
|
||||
return true;
|
||||
},
|
||||
format: function(s) {
|
||||
return $.trim(s.toLocaleLowerCase());
|
||||
format: function(s, table) {
|
||||
var c = table.config;
|
||||
s = $.trim( c.ignoreCase ? s.toLocaleLowerCase() : s );
|
||||
return c.sortLocaleCompare ? $.tablesorter.replaceAccents(s) : s;
|
||||
},
|
||||
type: "text"
|
||||
});
|
||||
@ -859,7 +908,7 @@
|
||||
ts.addParser({
|
||||
id: "currency",
|
||||
is: function(s) {
|
||||
return (/^\(?[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]/).test(s); // £$€¤¥¢?.
|
||||
return (/^\(?[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]/).test(s); // #$ $%"?.
|
||||
},
|
||||
format: function(s) {
|
||||
return $.tablesorter.formatFloat(s.replace(/[^0-9,. \-()]/g, ""));
|
||||
|
4
js/jquery.tablesorter.min.js
vendored
4
js/jquery.tablesorter.min.js
vendored
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
||||
/*! tableSorter 2.1 widgets - updated 4/23/2012
|
||||
/*! tableSorter 2.2 widgets - updated 5/3/2012
|
||||
*
|
||||
* jQuery UI Theme
|
||||
* Column Styles
|
||||
@ -8,7 +8,7 @@
|
||||
* Save Sort
|
||||
*
|
||||
*/
|
||||
(function($){
|
||||
;(function($){
|
||||
|
||||
// *** Store data in local storage, with a cookie fallback ***
|
||||
/* IE7 needs JSON library for JSON.stringify - (http://caniuse.com/#search=json)
|
||||
@ -125,7 +125,7 @@ $.tablesorter.addWidget({
|
||||
$.tablesorter.addWidget({
|
||||
id: "columns",
|
||||
format: function(table) {
|
||||
var $tr, $td, time, i, last, rmv, k,
|
||||
var $tr, $td, time, last, rmv, k,
|
||||
c = table.config,
|
||||
b = table.tBodies,
|
||||
list = c.sortList,
|
||||
@ -144,7 +144,7 @@ $.tablesorter.addWidget({
|
||||
for (k = 0; k < b.length; k++ ) {
|
||||
// loop through the visible rows
|
||||
$tr = $(b[k]).filter(':not(' + c.cssInfoBlock + ')').find('tr:visible:not(.' + c.cssInfoBlock + ')');
|
||||
$tr.each(function (i) {
|
||||
$tr.each(function(i) {
|
||||
$td = $(this).children().removeClass(rmv);
|
||||
// primary sort column class
|
||||
$td.eq(list[0][0]).addClass(css[0]);
|
||||
|
18
js/jquery.tablesorter.widgets.min.js
vendored
18
js/jquery.tablesorter.widgets.min.js
vendored
@ -1,10 +1,10 @@
|
||||
/*! tableSorter 2.1 widgets - updated 4/23/2012 */
|
||||
(function(b){
|
||||
b.tablesorter.storage=function(a,e,d){var c,g=!1;c={};var i=a.id||b(".tablesorter").index(b(a)),f=window.location.pathname;try{g=!!localStorage.getItem}catch(j){}b.parseJSON&&(g?c=b.parseJSON(localStorage[e])||{}:(c=document.cookie.split(/[;\s|=]/),a=b.inArray(e,c)+1,c=0!==a?b.parseJSON(c[a])||{}:{}));if(d&&JSON&&JSON.hasOwnProperty("stringify")){if(!c[f]||!c[f][i])c[f]||(c[f]={});c[f][i]=d;g?localStorage[e]=JSON.stringify(c):(a=new Date,a.setTime(a.getTime()+31536E6),document.cookie= e+"="+JSON.stringify(c).replace(/\"/g,'"')+"; expires="+a.toGMTString()+"; path=/")}else return c&&c.hasOwnProperty(f)&&c[f].hasOwnProperty(i)?c[f][i]:{}};
|
||||
b.tablesorter.addWidget({id:"uitheme",format:function(a){var e,d,c,g,i,f=b(a),j=a.config,h=j.widgetOptions,k=["ui-icon-arrowthick-2-n-s","ui-icon-arrowthick-1-s","ui-icon-arrowthick-1-n"],k=j.widgetUitheme&&j.widgetUitheme.hasOwnProperty("css")?j.widgetUitheme.css||k:h&&h.hasOwnProperty("uitheme")?h.uitheme:k;c=k.join(" ");j.debug&&(e=new Date); f.hasClass("ui-theme")||(f.addClass("ui-widget ui-widget-content ui-corner-all ui-theme"),b.each(j.headerList,function(){b(this).addClass("ui-widget-header ui-corner-all ui-state-default").append('<span class="ui-icon"/>').wrapInner('<div class="tablesorter-inner"/>').hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")})}));b.each(j.headerList,function(a){g=b(this);if(this.sortDisabled)g.find("span.ui-icon").removeClass(c+" ui-icon");else{d=g.hasClass(j.cssAsc)? k[1]:g.hasClass(j.cssDesc)?k[2]:g.hasClass(j.cssHeader)?k[0]:"";i=f.hasClass("hasStickyHeaders")?f.find("tr."+(h.stickyHeaders||"tablesorter-stickyHeader")).find("th").eq(a).add(g):g;i[d===k[0]?"removeClass":"addClass"]("ui-state-active").find("span.ui-icon").removeClass(c).addClass(d)}});j.debug&&b.tablesorter.benchmark("Applying uitheme widget",e)}});
|
||||
b.tablesorter.addWidget({id:"columns",format:function(a){var e,d,c,g,i=a.config,f=i.sortList,j=f.length,h=["primary","secondary","tertiary"],h=i.widgetColumns&& i.widgetColumns.hasOwnProperty("css")?i.widgetColumns.css||h:i.widgetOptions&&i.widgetOptions.hasOwnProperty("columns")?i.widgetOptions.columns||h:h;c=h.length-1;g=h.join(" ");i.debug&&(d=new Date);f&&f[0]?b("tr:visible",a.tBodies[0]).each(function(a){e=b(this).children().removeClass(g);e.eq(f[0][0]).addClass(h[0]);if(1<j)for(a=1;a<j;a++)e.eq(f[a][0]).addClass(h[a]||h[c])}):b("td",a.tBodies[0]).removeClass(g);i.debug&&b.tablesorter.benchmark("Applying Columns widget",d)}});
|
||||
b.tablesorter.addWidget({id:"filter", format:function(a){if(!b(a).hasClass("hasFilters")){var e,d,c,g,i,f,j,h=a.config,k=h.widgetOptions,l=k.filter_cssFilter||"tablesorter-filter",m=b(a).addClass("hasFilters"),n=m.find("tbody tr:first td").length,a='<tr class="'+l+'">',o;h.debug&&(o=new Date);for(e=0;e<n;e++)a+='<td><input type="search" data-col="'+e+'" class="'+l,a+=h.headers[e]&&h.headers[e].hasOwnProperty("filter")&&!1===h.headers[e].filter||b(h.headerList[e]).is(".filter-false")?' disabled" disabled':'"',a+="></td>";m.find("thead").append(a+= "</tr>").find("input."+l).bind("keyup search",function(){d=m.find("thead").find("input."+l).map(function(){return(b(this).val()||"").toLowerCase()}).get();""===d.join("")?m.find("tr").show():m.find("tbody").find("tr:not(."+h.cssChildRow+")").each(function(){c=!0;f=b(this).nextUntil("tr:not(."+h.cssChildRow+")");g=f.length&&(k&&k.hasOwnProperty("filter_childRows")&&"undefined"!==typeof k.filter_childRows?k.filter_childRows:1)?f.text():"";j=b(this).find("td");for(e=0;e<n;e++)i=b.trim(j.eq(e).text()+ g).toLowerCase().indexOf(d[e]),""!==d[e]&&(!k.filter_startsWith&&0<=i||k.filter_startsWith&&0===i)?c=c?!0:!1:""!==d[e]&&(c=!1);b(this)[c?"show":"hide"]();if(f.length)f[c?"show":"hide"]()});m.trigger("applyWidgets")});h.debug&&b.tablesorter.benchmark("Applying Filter widget",o)}}});
|
||||
b.tablesorter.addWidget({id:"stickyHeaders",format:function(a){if(!b(a).hasClass("hasStickyHeaders")){var e=b(a).addClass("hasStickyHeaders"),d=a.config.widgetOptions,c=b(window),g=b(a).find("thead"),i=g.find("tr:not(.sticky-false)").children(), f=d.stickyHeaders||"tablesorter-stickyHeader",j=i.eq(0),h=g.find("tr.tablesorter-header:not(.sticky-false)").clone().removeClass("tablesorter-header").addClass(f).css({width:g.outerWidth(!0),position:"fixed",left:j.offset().left,margin:0,top:0,visibility:"hidden",zIndex:10}),k=h.children(),l="";e.bind("sortEnd",function(a,c){var d=b(c).find("thead tr"),e=d.filter("."+f).children();d.filter(":not(."+f+")").children().each(function(a){e.eq(a).attr("class",b(this).attr("class"))})}).bind("pagerComplete", function(){c.resize()});i.each(function(a){var c=b(this);k.eq(a).bind("click",function(b){c.trigger(b)}).bind("mousedown",function(){this.onselectstart=function(){return!1};return!1}).find(".tablesorter-header-inner").width(c.find(".tablesorter-header-inner").width())});g.prepend(h);c.scroll(function(){var b=j.offset(),a=c.scrollTop(),a=a>b.top&&a<b.top+e.find("tbody").height()?"visible":"hidden";h.css({left:b.left-c.scrollLeft(),visibility:a});a!==l&&(c.resize(),l=a)}).resize(function(){var a=0; h.css({left:j.offset().left-c.scrollLeft(),width:g.outerWidth()}).each(function(c){b(this).css("top",a);a+=g.find("tr").eq(c).outerHeight()});k.find(".tablesorter-header-inner").each(function(a){b(this).width(i.eq(a).find(".tablesorter-header-inner").width())})})}}});
|
||||
b.tablesorter.addWidget({id:"resizable",format:function(a){if(!b(a).hasClass("hasResizable")){b(a).addClass("hasResizable");var e,d,c=a.config,g=b(c.headerList).filter(":gt(0)"),i=0,f=null,j=null,h=function(){i=0;f=j=null;b(window).trigger("resize")}; if(d=b.tablesorter.storage?b.tablesorter.storage(a,"tablesorter-resizable"):"")for(e in d)!isNaN(e)&&e<c.headerList.length&&b(c.headerList[e]).width(d[e]);g.each(function(){b(this).append('<div class="tablesorter-resizer" style="cursor:w-resize;position:absolute;height:100%;width:20px;left:-20px;top:0;z-index:1;"></div>').wrapInner('<div style="position:relative;height:100%;width:100%"></div>')}).bind("mousemove",function(a){if(0!==i&&f){var b=a.pageX-i;f.width()<-b||j&&j.width()<=b||(j.width(j.width()+ b),i=a.pageX)}}).bind("mouseup",function(){d&&b.tablesorter.storage&&f&&(d[j.index()]=j.width(),b.tablesorter.storage(a,"tablesorter-resizable",d));h();return!1}).find(".tablesorter-resizer").bind("mousedown",function(a){f=b(a.target).closest("th");j=f.prev();i=a.pageX});b(a).find("thead").bind("mouseup mouseleave",function(){h()})}}});
|
||||
b.tablesorter.addWidget({id:"saveSort",init:function(a,b,d){d.format(a,!0)},format:function(a,e){var d,c,g=a.config;d={sortList:g.sortList};g.debug&&(c=new Date);b(a).hasClass("hasSaveSort")? a.hasInitialized&&b.tablesorter.storage&&(b.tablesorter.storage(a,"tablesorter-savesort",d),g.debug&&b.tablesorter.benchmark("saveSort widget: Saving last sort: "+g.sortList,c)):(b(a).addClass("hasSaveSort"),d="",b.tablesorter.storage&&(d=(d=b.tablesorter.storage(a,"tablesorter-savesort"))&&d.hasOwnProperty("sortList")&&b.isArray(d.sortList)?d.sortList:"",g.debug&&b.tablesorter.benchmark("saveSort: Last sort loaded: "+d,c)),e&&d&&0<d.length?g.sortList=d:a.hasInitialized&&d&&0<d.length&&b(a).trigger("sorton",[d]))}})
|
||||
/*! tableSorter 2.1 widgets - updated 5/3/2012 */
|
||||
;(function(b){
|
||||
b.tablesorter.storage=function(a,f,d){var c,g=!1;c={};var i=a.id||b(".tablesorter").index(b(a)),e=window.location.pathname;try{g=!!localStorage.getItem}catch(h){}b.parseJSON&&(g?c=b.parseJSON(localStorage[f])||{}:(c=document.cookie.split(/[;\s|=]/),a=b.inArray(f,c)+1,c=0!==a?b.parseJSON(c[a])||{}:{}));if(d&&JSON&&JSON.hasOwnProperty("stringify")){if(!c[e]||!c[e][i])c[e]||(c[e]={});c[e][i]=d;g?localStorage[f]=JSON.stringify(c):(a=new Date,a.setTime(a.getTime()+31536E6),document.cookie= f+"="+JSON.stringify(c).replace(/\"/g,'"')+"; expires="+a.toGMTString()+"; path=/")}else return c&&c.hasOwnProperty(e)&&c[e].hasOwnProperty(i)?c[e][i]:{}};
|
||||
b.tablesorter.addWidget({id:"uitheme",format:function(a){var f,d,c,g,i,e=b(a),h=a.config,j=h.widgetOptions,k=["ui-icon-arrowthick-2-n-s","ui-icon-arrowthick-1-s","ui-icon-arrowthick-1-n"],k=h.widgetUitheme&&h.widgetUitheme.hasOwnProperty("css")?h.widgetUitheme.css||k:j&&j.hasOwnProperty("uitheme")?j.uitheme:k;c=k.join(" ");h.debug&&(f=new Date); e.hasClass("ui-theme")||(e.addClass("ui-widget ui-widget-content ui-corner-all ui-theme"),b.each(h.headerList,function(){b(this).addClass("ui-widget-header ui-corner-all ui-state-default").append('<span class="ui-icon"/>').wrapInner('<div class="tablesorter-inner"/>').hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")})}));b.each(h.headerList,function(a){g=b(this);if(this.sortDisabled)g.find("span.ui-icon").removeClass(c+" ui-icon");else{d=g.hasClass(h.cssAsc)? k[1]:g.hasClass(h.cssDesc)?k[2]:g.hasClass(h.cssHeader)?k[0]:"";i=e.hasClass("hasStickyHeaders")?e.find("tr."+(j.stickyHeaders||"tablesorter-stickyHeader")).find("th").eq(a).add(g):g;i[d===k[0]?"removeClass":"addClass"]("ui-state-active").find("span.ui-icon").removeClass(c).addClass(d)}});h.debug&&b.tablesorter.benchmark("Applying uitheme widget",f)}});
|
||||
b.tablesorter.addWidget({id:"columns",format:function(a){var f,d,c,g,i,e=a.config,h=a.tBodies,j=e.sortList,k=j.length,l=["primary","secondary","tertiary"], l=e.widgetColumns&&e.widgetColumns.hasOwnProperty("css")?e.widgetColumns.css||l:e.widgetOptions&&e.widgetOptions.hasOwnProperty("columns")?e.widgetOptions.columns||l:l;c=l.length-1;g=l.join(" ");e.debug&&(d=new Date);if(j&&j[0])for(i=0;i<h.length;i++)a=b(h[i]).filter(":not("+e.cssInfoBlock+")").find("tr:visible:not(."+e.cssInfoBlock+")"),a.each(function(a){f=b(this).children().removeClass(g);f.eq(j[0][0]).addClass(l[0]);if(1<k)for(a=1;a<k;a++)f.eq(j[a][0]).addClass(l[a]||l[c])});else b("td",a).removeClass(g); e.debug&&b.tablesorter.benchmark("Applying Columns widget",d)}});
|
||||
b.tablesorter.addWidget({id:"filter",format:function(a){if(!b(a).hasClass("hasFilters")){var f,d,c,g,i,e,h,j=a.config,k=j.widgetOptions,l=k.filter_cssFilter||"tablesorter-filter",m=b(a).addClass("hasFilters"),n=m.find("tbody tr:first td").length,a='<tr class="'+l+'">',o;j.debug&&(o=new Date);for(f=0;f<n;f++)a+='<td><input type="search" data-col="'+f+'" class="'+l,a+=j.headers[f]&&j.headers[f].hasOwnProperty("filter")&&!1===j.headers[f].filter|| b(j.headerList[f]).is(".filter-false")?' disabled" disabled':'"',a+="></td>";m.find("thead").append(a+="</tr>").find("input."+l).bind("keyup search",function(){d=m.find("thead").find("input."+l).map(function(){return(b(this).val()||"").toLowerCase()}).get();""===d.join("")?m.find("tr").show():m.find("tbody").find("tr:not(."+j.cssChildRow+"):not(."+j.cssInfoBlock+")").each(function(){c=!0;e=b(this).nextUntil("tr:not(."+j.cssChildRow+")");g=e.length&&(k&&k.hasOwnProperty("filter_childRows")&&"undefined"!== typeof k.filter_childRows?k.filter_childRows:1)?e.text():"";h=b(this).find("td");for(f=0;f<n;f++)i=b.trim(h.eq(f).text()+g).toLowerCase().indexOf(d[f]),""!==d[f]&&(!k.filter_startsWith&&0<=i||k.filter_startsWith&&0===i)?c=c?!0:!1:""!==d[f]&&(c=!1);b(this)[c?"show":"hide"]();if(e.length)e[c?"show":"hide"]()});m.trigger("applyWidgets")});j.debug&&b.tablesorter.benchmark("Applying Filter widget",o)}}});
|
||||
b.tablesorter.addWidget({id:"stickyHeaders",format:function(a){if(!b(a).hasClass("hasStickyHeaders")){var f= b(a).addClass("hasStickyHeaders"),d=a.config.widgetOptions,c=b(window),g=b(a).find("thead"),i=g.find("tr:not(.sticky-false)").children(),e=d.stickyHeaders||"tablesorter-stickyHeader",h=i.eq(0),j=f.find("tfoot"),k=g.find("tr.tablesorter-header:not(.sticky-false)").clone().removeClass("tablesorter-header").addClass(e).css({width:g.outerWidth(!0),position:"fixed",left:h.offset().left,margin:0,top:0,visibility:"hidden",zIndex:10}),l=k.children(),m="";f.bind("sortEnd",function(a,c){var d=b(c).find("thead tr"), f=d.filter("."+e).children();d.filter(":not(."+e+")").children().each(function(a){f.eq(a).attr("class",b(this).attr("class"))})}).bind("pagerComplete",function(){c.resize()});i.each(function(a){var c=b(this);l.eq(a).bind("click",function(a){c.trigger(a)}).bind("mousedown",function(){this.onselectstart=function(){return!1};return!1}).find(".tablesorter-header-inner").width(c.find(".tablesorter-header-inner").width())});g.prepend(k);c.scroll(function(){var a=h.offset(),b=c.scrollTop(),d=f.height()- (h.height()+(j.height()||0)),b=b>a.top&&b<a.top+d?"visible":"hidden";k.css({left:a.left-c.scrollLeft(),visibility:b});b!==m&&(c.resize(),m=b)}).resize(function(){var a=0;k.css({left:h.offset().left-c.scrollLeft(),width:g.outerWidth()}).each(function(c){b(this).css("top",a);a+=g.find("tr").eq(c).outerHeight()});l.find(".tablesorter-header-inner").each(function(a){b(this).width(i.eq(a).find(".tablesorter-header-inner").width())})})}}});
|
||||
b.tablesorter.addWidget({id:"resizable",format:function(a){if(!b(a).hasClass("hasResizable")){b(a).addClass("hasResizable"); var f,d,c=a.config,g=b(c.headerList).filter(":gt(0)"),i=0,e=null,h=null,j=function(){i=0;e=h=null;b(window).trigger("resize")};if(d=b.tablesorter.storage?b.tablesorter.storage(a,"tablesorter-resizable"):"")for(f in d)!isNaN(f)&&f<c.headerList.length&&b(c.headerList[f]).width(d[f]);g.each(function(){b(this).append('<div class="tablesorter-resizer" style="cursor:w-resize;position:absolute;height:100%;width:20px;left:-20px;top:0;z-index:1;"></div>').wrapInner('<div style="position:relative;height:100%;width:100%"></div>')}).bind("mousemove", function(a){if(0!==i&&e){var b=a.pageX-i;e.width()<-b||h&&h.width()<=b||(h.width(h.width()+b),i=a.pageX)}}).bind("mouseup",function(){d&&(b.tablesorter.storage&&e)&&(d[h.index()]=h.width(),b.tablesorter.storage(a,"tablesorter-resizable",d));j();return!1}).find(".tablesorter-resizer").bind("mousedown",function(a){e=b(a.target).closest("th");h=e.prev();i=a.pageX});b(a).find("thead").bind("mouseup mouseleave",function(){j()})}}});
|
||||
b.tablesorter.addWidget({id:"saveSort",init:function(a,b,d){d.format(a, !0)},format:function(a,f){var d,c,g=a.config;d={sortList:g.sortList};g.debug&&(c=new Date);b(a).hasClass("hasSaveSort")?a.hasInitialized&&b.tablesorter.storage&&(b.tablesorter.storage(a,"tablesorter-savesort",d),g.debug&&b.tablesorter.benchmark("saveSort widget: Saving last sort: "+g.sortList,c)):(b(a).addClass("hasSaveSort"),d="",b.tablesorter.storage&&(d=(d=b.tablesorter.storage(a,"tablesorter-savesort"))&&d.hasOwnProperty("sortList")&&b.isArray(d.sortList)?d.sortList:"",g.debug&&b.tablesorter.benchmark("saveSort: Last sort loaded: "+ d,c)),f&&d&&0<d.length?g.sortList=d:a.hasInitialized&&(d&&0<d.length)&&b(a).trigger("sorton",[d]))}})
|
||||
})(jQuery);
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tablesorter",
|
||||
"version": "2.1.20",
|
||||
"version": "2.2",
|
||||
"title": "tablesorter",
|
||||
"author": {
|
||||
"name": "Christian Bach",
|
||||
|
Loading…
Reference in New Issue
Block a user