Added all the new documentation files.
[jquery.git] / docs / pager.js
1 $.fn.clone = function(){
2         return this.pushStack( $.map(this,"a.cloneNode(true)"), arguments );
3 };
4
5
6 $.fn.pager = function(step,fn) {
7   var types = {
8     UL: "li",
9     OL: "li",
10     DL: "dt",
11     TABLE: "tbody > tr"
12   };
13
14   return this.each(function(){
15     var pagedUI = this;
16     var rows = $(types[this.nodeName], this);
17     var curPage = 0;
18     var names = [], num = [];
19
20     if ( !step || step.constructor != Function ) {
21       step = step || 10;
22
23       if (rows.length > step)
24         for ( var i = 0; i <= rows.length; i += step ) {
25           names.push( names.length + 1 );
26           num.push( [ i * step, step ] );
27         }
28     } else {
29       var last;
30       rows.each(function(){
31         var l = step.apply( this ).substr(0,1);
32         if ( l != last ) {
33           names.push( l.toUpperCase() );
34           var pre = num.length ? num[ num.length - 1 ][0] + num[ num.length - 1 ][1] : 0;
35            
36           num.push( [ pre, 0 ] );
37           last = l;
38         }
39
40         num[ num.length - 1 ][1]++;
41       });
42     }
43
44     if ( names.length ) {
45       var pager = $("<ul class='nav-page'></ul>");
46
47       for ( var i = 0; i < names.length; i++ )
48         $("<a href=''></a>").rel( i ).html( names[i] ).click(function() {
49           return handleCrop( this.rel );
50         }).wrap("<li></li>").parent().appendTo(pager);
51
52       pager.insertBefore( this );
53
54       var prev = $("<a href=''>&laquo; Prev</a>").click(function(){
55         return handleCrop( --curPage );
56       }).wrap("<li class='prev'></li>").parent().prependTo(pager);
57
58       var next = $("<a href=''>Next &raquo;</a>").click(function(){
59         return handleCrop( ++curPage );
60       }).wrap("<li class='next'></li>").parent().appendTo(pager);
61
62       handleCrop( 0 );
63     }
64
65     function handleCrop( page ) {
66       curPage = page - 0;
67       var s = num[ curPage ][0];
68       var e = s + num[ curPage ][1];
69
70       if ( !curPage ) prev.hide();
71       else prev.show();
72
73       if ( curPage == names.length - 1 ) next.hide();
74       else next.show();
75
76       $("li",pager)
77         .removeClass("cur")
78         .eq( curPage + 1 )
79           .addClass("cur");
80
81       rows
82         .hide()
83         .gt(s - 1).lt(e)
84           .show()
85         .end().end();
86
87       if ( fn )
88         fn.apply( pagedUI, [ s, e ] );
89
90       return false;
91     }
92   });
93 };