1b08a5bca02b660dc84f0822b8e6107f14226133
[jquery.git] / sort / sort.js
1 // Work in Progress Sort Functions
2
3 $.fn.sort = function(f) {
4         cur = cur.sort(function(a,b){
5                 if ( typeof f == 'object' )
6                         var ret = f(a,b);
7                 else
8                         var ret = $.fn.genericSort(a,b,f);
9
10                 if ( a < b )
11                         b.parentNode.insertBefore( a, b );
12                 else if ( a > b )
13                         a.parentNode.insertBefore( b, a );
14                 return ret;
15         });
16         return this;
17 }
18
19 $.fn.reverse = function() {
20         cur[0].parentNode.appendChild( cur[0] );
21         for ( var i = 1; cur && i < cur.length; i++ )
22                 cur[i-1].parentNode.insertBefore( cur[i], cur[i-1] );
23         cur = cur.reverse();
24         return this;
25 }
26
27 $.fn.genericSort = function(a,b,c) {
28         if ( typeof a == "string" || typeof b == "string" ) {
29         } else if ( c != null ) {
30                 a = sibling(a.firstChild)[c].innerText;
31                 b = sibling(b.firstChild)[c].innerText;
32         } else {
33                 a = a.innerText;
34                 b = b.innerText;
35         }
36         
37         // Case insensitive
38         a = a.toLowerCase();
39         b = b.toLowerCase();
40         
41         // Figure out if it's an American-style date
42         var re = new RegExp( "^(\d{2}).(\d{2}).(\d{2,4})$" );
43         var ma = re.exec(a);
44         var mb = re.exec(b);
45         
46         if ( ma.length && mb.length ) {
47                 a = ma.reverse().join('');
48                 b = mb.reverse().join('');
49         }
50         
51         // If it contains a number, sort on that only
52         if ( a.match(/\d/) ) {
53                 var re = new RegExp("[^0-9.-]","ig");
54                 a = parseFloat( a.replace( re, "" ) );
55                 b = parseFloat( b.replace( re, "" ) );
56         }
57         
58         return ( a < b ? -1 : ( a > b ? 1 : 0 ) );
59 }