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