comparison DataTables-1.9.4/media/src/ext/ext.paging.js @ 0:ac5f9272033b draft

first upload
author saskia-hiltemann
date Tue, 01 Jul 2014 11:42:23 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:ac5f9272033b
1 /*
2 * Variable: oPagination
3 * Purpose:
4 * Scope: jQuery.fn.dataTableExt
5 */
6 $.extend( DataTable.ext.oPagination, {
7 /*
8 * Variable: two_button
9 * Purpose: Standard two button (forward/back) pagination
10 * Scope: jQuery.fn.dataTableExt.oPagination
11 */
12 "two_button": {
13 /*
14 * Function: oPagination.two_button.fnInit
15 * Purpose: Initialise dom elements required for pagination with forward/back buttons only
16 * Returns: -
17 * Inputs: object:oSettings - dataTables settings object
18 * node:nPaging - the DIV which contains this pagination control
19 * function:fnCallbackDraw - draw function which must be called on update
20 */
21 "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
22 {
23 var oLang = oSettings.oLanguage.oPaginate;
24 var oClasses = oSettings.oClasses;
25 var fnClickHandler = function ( e ) {
26 if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
27 {
28 fnCallbackDraw( oSettings );
29 }
30 };
31
32 var sAppend = (!oSettings.bJUI) ?
33 '<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sPrevious+'</a>'+
34 '<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+'</a>'
35 :
36 '<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUIPrev+'"></span></a>'+
37 '<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUINext+'"></span></a>';
38 $(nPaging).append( sAppend );
39
40 var els = $('a', nPaging);
41 var nPrevious = els[0],
42 nNext = els[1];
43
44 oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler );
45 oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
46
47 /* ID the first elements only */
48 if ( !oSettings.aanFeatures.p )
49 {
50 nPaging.id = oSettings.sTableId+'_paginate';
51 nPrevious.id = oSettings.sTableId+'_previous';
52 nNext.id = oSettings.sTableId+'_next';
53
54 nPrevious.setAttribute('aria-controls', oSettings.sTableId);
55 nNext.setAttribute('aria-controls', oSettings.sTableId);
56 }
57 },
58
59 /*
60 * Function: oPagination.two_button.fnUpdate
61 * Purpose: Update the two button pagination at the end of the draw
62 * Returns: -
63 * Inputs: object:oSettings - dataTables settings object
64 * function:fnCallbackDraw - draw function to call on page change
65 */
66 "fnUpdate": function ( oSettings, fnCallbackDraw )
67 {
68 if ( !oSettings.aanFeatures.p )
69 {
70 return;
71 }
72
73 var oClasses = oSettings.oClasses;
74 var an = oSettings.aanFeatures.p;
75 var nNode;
76
77 /* Loop over each instance of the pager */
78 for ( var i=0, iLen=an.length ; i<iLen ; i++ )
79 {
80 nNode = an[i].firstChild;
81 if ( nNode )
82 {
83 /* Previous page */
84 nNode.className = ( oSettings._iDisplayStart === 0 ) ?
85 oClasses.sPagePrevDisabled : oClasses.sPagePrevEnabled;
86
87 /* Next page */
88 nNode = nNode.nextSibling;
89 nNode.className = ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ?
90 oClasses.sPageNextDisabled : oClasses.sPageNextEnabled;
91 }
92 }
93 }
94 },
95
96
97 /*
98 * Variable: iFullNumbersShowPages
99 * Purpose: Change the number of pages which can be seen
100 * Scope: jQuery.fn.dataTableExt.oPagination
101 */
102 "iFullNumbersShowPages": 5,
103
104 /*
105 * Variable: full_numbers
106 * Purpose: Full numbers pagination
107 * Scope: jQuery.fn.dataTableExt.oPagination
108 */
109 "full_numbers": {
110 /*
111 * Function: oPagination.full_numbers.fnInit
112 * Purpose: Initialise dom elements required for pagination with a list of the pages
113 * Returns: -
114 * Inputs: object:oSettings - dataTables settings object
115 * node:nPaging - the DIV which contains this pagination control
116 * function:fnCallbackDraw - draw function which must be called on update
117 */
118 "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
119 {
120 var oLang = oSettings.oLanguage.oPaginate;
121 var oClasses = oSettings.oClasses;
122 var fnClickHandler = function ( e ) {
123 if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
124 {
125 fnCallbackDraw( oSettings );
126 }
127 };
128
129 $(nPaging).append(
130 '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'">'+oLang.sFirst+'</a>'+
131 '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a>'+
132 '<span></span>'+
133 '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a>'+
134 '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'</a>'
135 );
136 var els = $('a', nPaging);
137 var nFirst = els[0],
138 nPrev = els[1],
139 nNext = els[2],
140 nLast = els[3];
141
142 oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler );
143 oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler );
144 oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
145 oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler );
146
147 /* ID the first elements only */
148 if ( !oSettings.aanFeatures.p )
149 {
150 nPaging.id = oSettings.sTableId+'_paginate';
151 nFirst.id =oSettings.sTableId+'_first';
152 nPrev.id =oSettings.sTableId+'_previous';
153 nNext.id =oSettings.sTableId+'_next';
154 nLast.id =oSettings.sTableId+'_last';
155 }
156 },
157
158 /*
159 * Function: oPagination.full_numbers.fnUpdate
160 * Purpose: Update the list of page buttons shows
161 * Returns: -
162 * Inputs: object:oSettings - dataTables settings object
163 * function:fnCallbackDraw - draw function to call on page change
164 */
165 "fnUpdate": function ( oSettings, fnCallbackDraw )
166 {
167 if ( !oSettings.aanFeatures.p )
168 {
169 return;
170 }
171
172 var iPageCount = DataTable.ext.oPagination.iFullNumbersShowPages;
173 var iPageCountHalf = Math.floor(iPageCount / 2);
174 var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength);
175 var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;
176 var sList = "";
177 var iStartButton, iEndButton, i, iLen;
178 var oClasses = oSettings.oClasses;
179 var anButtons, anStatic, nPaginateList, nNode;
180 var an = oSettings.aanFeatures.p;
181 var fnBind = function (j) {
182 oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) {
183 /* Use the information in the element to jump to the required page */
184 oSettings.oApi._fnPageChange( oSettings, e.data.page );
185 fnCallbackDraw( oSettings );
186 e.preventDefault();
187 } );
188 };
189
190 /* Pages calculation */
191 if ( oSettings._iDisplayLength === -1 )
192 {
193 iStartButton = 1;
194 iEndButton = 1;
195 iCurrentPage = 1;
196 }
197 else if (iPages < iPageCount)
198 {
199 iStartButton = 1;
200 iEndButton = iPages;
201 }
202 else if (iCurrentPage <= iPageCountHalf)
203 {
204 iStartButton = 1;
205 iEndButton = iPageCount;
206 }
207 else if (iCurrentPage >= (iPages - iPageCountHalf))
208 {
209 iStartButton = iPages - iPageCount + 1;
210 iEndButton = iPages;
211 }
212 else
213 {
214 iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
215 iEndButton = iStartButton + iPageCount - 1;
216 }
217
218
219 /* Build the dynamic list */
220 for ( i=iStartButton ; i<=iEndButton ; i++ )
221 {
222 sList += (iCurrentPage !== i) ?
223 '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+'">'+oSettings.fnFormatNumber(i)+'</a>' :
224 '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButtonActive+'">'+oSettings.fnFormatNumber(i)+'</a>';
225 }
226
227 /* Loop over each instance of the pager */
228 for ( i=0, iLen=an.length ; i<iLen ; i++ )
229 {
230 nNode = an[i];
231 if ( !nNode.hasChildNodes() )
232 {
233 continue;
234 }
235
236 /* Build up the dynamic list first - html and listeners */
237 $('span:eq(0)', nNode)
238 .html( sList )
239 .children('a').each( fnBind );
240
241 /* Update the permanent button's classes */
242 anButtons = nNode.getElementsByTagName('a');
243 anStatic = [
244 anButtons[0], anButtons[1],
245 anButtons[anButtons.length-2], anButtons[anButtons.length-1]
246 ];
247
248 $(anStatic).removeClass( oClasses.sPageButton+" "+oClasses.sPageButtonActive+" "+oClasses.sPageButtonStaticDisabled );
249 $([anStatic[0], anStatic[1]]).addClass(
250 (iCurrentPage==1) ?
251 oClasses.sPageButtonStaticDisabled :
252 oClasses.sPageButton
253 );
254 $([anStatic[2], anStatic[3]]).addClass(
255 (iPages===0 || iCurrentPage===iPages || oSettings._iDisplayLength===-1) ?
256 oClasses.sPageButtonStaticDisabled :
257 oClasses.sPageButton
258 );
259 }
260 }
261 }
262 } );