Mercurial > repos > saskia-hiltemann > ireport
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 } ); |