Add datatables-1.9.4 and jquery-1.10.2 libraries
[proteocache.git] / webapp / resources / datatables-1.9.4 / media / src / ext / ext.paging.js
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 } );