1 /* Set the defaults for DataTables initialisation */
2 $.extend( true, $.fn.dataTable.defaults, {
3 "sDom": "<'row'<'col-sm-12'<'pull-right'f><'pull-left'l>r<'clearfix'>>>t<'row'<'col-sm-12'<'pull-left'i><'pull-right'p><'clearfix'>>>",
4 "sPaginationType": "bs_normal",
6 "sLengthMenu": "Show _MENU_ Rows",
11 /* Default class modification */
12 $.extend( $.fn.dataTableExt.oStdClasses, {
13 "sWrapper": "dataTables_wrapper form-inline"
16 /* API method to get paging information */
17 $.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
20 "iStart": oSettings._iDisplayStart,
21 "iEnd": oSettings.fnDisplayEnd(),
22 "iLength": oSettings._iDisplayLength,
23 "iTotal": oSettings.fnRecordsTotal(),
24 "iFilteredTotal": oSettings.fnRecordsDisplay(),
25 "iPage": oSettings._iDisplayLength === -1 ?
26 0 : Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
27 "iTotalPages": oSettings._iDisplayLength === -1 ?
28 0 : Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
32 /* Bootstrap style pagination control */
33 $.extend( $.fn.dataTableExt.oPagination, {
35 "fnInit": function( oSettings, nPaging, fnDraw ) {
36 var oLang = oSettings.oLanguage.oPaginate;
37 var fnClickHandler = function ( e ) {
39 if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
44 '<ul class="pagination">'+
45 '<li class="prev disabled"><a href="#"><span class="glyphicon glyphicon-chevron-left"></span> '+oLang.sPrevious+'</a></li>'+
46 '<li class="next disabled"><a href="#">'+oLang.sNext+' <span class="glyphicon glyphicon-chevron-right"></span></a></li>'+
49 var els = $('a', nPaging);
50 $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
51 $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler );
53 "fnUpdate": function ( oSettings, fnDraw ) {
55 var oPaging = oSettings.oInstance.fnPagingInfo();
56 var an = oSettings.aanFeatures.p;
57 var i, ien, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
58 if ( oPaging.iTotalPages < iListLength) {
60 iEnd = oPaging.iTotalPages;
62 else if ( oPaging.iPage <= iHalf ) {
65 } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
66 iStart = oPaging.iTotalPages - iListLength + 1;
67 iEnd = oPaging.iTotalPages;
69 iStart = oPaging.iPage - iHalf + 1;
70 iEnd = iStart + iListLength - 1;
72 for ( i=0, ien=an.length ; i<ien ; i++ ) {
73 $('li:gt(0)', an[i]).filter(':not(:last)').remove();
74 for ( j=iStart ; j<=iEnd ; j++ ) {
75 sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
76 $('<li '+sClass+'><a href="#">'+j+'</a></li>')
77 .insertBefore( $('li:last', an[i])[0] )
78 .bind('click', function (e) {
80 oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
84 if ( oPaging.iPage === 0 ) {
85 $('li:first', an[i]).addClass('disabled');
87 $('li:first', an[i]).removeClass('disabled');
90 if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
91 $('li:last', an[i]).addClass('disabled');
93 $('li:last', an[i]).removeClass('disabled');
99 "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
101 var oLang = oSettings.oLanguage.oPaginate;
102 var oClasses = oSettings.oClasses;
103 var fnClickHandler = function ( e ) {
104 if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
106 fnCallbackDraw( oSettings );
109 var sAppend = '<ul class="pagination">'+
110 '<li class="prev"><a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="glyphicon glyphicon-chevron-left"></span> '+oLang.sPrevious+'</a></li>'+
111 '<li class="next"><a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+' <span class="glyphicon glyphicon-chevron-right"></span></a></li>'+
113 $(nPaging).append( sAppend );
114 var els = $('a', nPaging);
115 var nPrevious = els[0],
117 oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler );
118 oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
119 if ( !oSettings.aanFeatures.p )
121 nPaging.id = oSettings.sTableId+'_paginate';
122 nPrevious.id = oSettings.sTableId+'_previous';
123 nNext.id = oSettings.sTableId+'_next';
124 nPrevious.setAttribute('aria-controls', oSettings.sTableId);
125 nNext.setAttribute('aria-controls', oSettings.sTableId);
128 "fnUpdate": function ( oSettings, fnCallbackDraw )
130 if ( !oSettings.aanFeatures.p )
134 var oPaging = oSettings.oInstance.fnPagingInfo();
135 var oClasses = oSettings.oClasses;
136 var an = oSettings.aanFeatures.p;
138 for ( var i=0, iLen=an.length ; i<iLen ; i++ )
140 if ( oPaging.iPage === 0 ) {
141 $('li:first', an[i]).addClass('disabled');
143 $('li:first', an[i]).removeClass('disabled');
146 if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
147 $('li:last', an[i]).addClass('disabled');
149 $('li:last', an[i]).removeClass('disabled');
155 "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
157 var oLang = oSettings.oLanguage.oPaginate;
158 var oClasses = oSettings.oClasses;
159 var fnClickHandler = function ( e ) {
160 if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
162 fnCallbackDraw( oSettings );
166 '<ul class="pagination">'+
167 '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'"><span class="glyphicon glyphicon-backward"></span> '+oLang.sFirst+'</a></li>'+
168 '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'"><span class="glyphicon glyphicon-chevron-left"></span> '+oLang.sPrevious+'</a></li>'+
169 '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+' <span class="glyphicon glyphicon-chevron-right"></span></a></li>'+
170 '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+' <span class="glyphicon glyphicon-forward"></span></a></li>'+
173 var els = $('a', nPaging);
178 oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler );
179 oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler );
180 oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
181 oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler );
182 if ( !oSettings.aanFeatures.p )
184 nPaging.id = oSettings.sTableId+'_paginate';
185 nFirst.id =oSettings.sTableId+'_first';
186 nPrev.id =oSettings.sTableId+'_previous';
187 nNext.id =oSettings.sTableId+'_next';
188 nLast.id =oSettings.sTableId+'_last';
191 "fnUpdate": function ( oSettings, fnCallbackDraw )
193 if ( !oSettings.aanFeatures.p )
197 var oPaging = oSettings.oInstance.fnPagingInfo();
198 var oClasses = oSettings.oClasses;
199 var an = oSettings.aanFeatures.p;
201 for ( var i=0, iLen=an.length ; i<iLen ; i++ )
203 if ( oPaging.iPage === 0 ) {
204 $('li:eq(0)', an[i]).addClass('disabled');
205 $('li:eq(1)', an[i]).addClass('disabled');
207 $('li:eq(0)', an[i]).removeClass('disabled');
208 $('li:eq(1)', an[i]).removeClass('disabled');
211 if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
212 $('li:eq(2)', an[i]).addClass('disabled');
213 $('li:eq(3)', an[i]).addClass('disabled');
215 $('li:eq(2)', an[i]).removeClass('disabled');
216 $('li:eq(3)', an[i]).removeClass('disabled');
222 "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
224 var oLang = oSettings.oLanguage.oPaginate;
225 var oClasses = oSettings.oClasses;
226 var fnClickHandler = function ( e ) {
227 if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
229 fnCallbackDraw( oSettings );
233 '<ul class="pagination">'+
234 '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'">'+oLang.sFirst+'</a></li>'+
235 '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a></li>'+
236 '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a></li>'+
237 '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'</a></li>'+
240 var els = $('a', nPaging);
245 oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler );
246 oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler );
247 oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
248 oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler );
249 if ( !oSettings.aanFeatures.p )
251 nPaging.id = oSettings.sTableId+'_paginate';
252 nFirst.id =oSettings.sTableId+'_first';
253 nPrev.id =oSettings.sTableId+'_previous';
254 nNext.id =oSettings.sTableId+'_next';
255 nLast.id =oSettings.sTableId+'_last';
258 "fnUpdate": function ( oSettings, fnCallbackDraw )
260 if ( !oSettings.aanFeatures.p )
264 var oPaging = oSettings.oInstance.fnPagingInfo();
265 var iPageCount = $.fn.dataTableExt.oPagination.iFullNumbersShowPages;
266 var iPageCountHalf = Math.floor(iPageCount / 2);
267 var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength);
268 var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;
270 var iStartButton, iEndButton, i, iLen;
271 var oClasses = oSettings.oClasses;
272 var anButtons, anStatic, nPaginateList, nNode;
273 var an = oSettings.aanFeatures.p;
274 var fnBind = function (j) {
275 oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) {
276 oSettings.oApi._fnPageChange( oSettings, e.data.page );
277 fnCallbackDraw( oSettings );
281 if ( oSettings._iDisplayLength === -1 )
287 else if (iPages < iPageCount)
292 else if (iCurrentPage <= iPageCountHalf)
295 iEndButton = iPageCount;
297 else if (iCurrentPage >= (iPages - iPageCountHalf))
299 iStartButton = iPages - iPageCount + 1;
304 iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
305 iEndButton = iStartButton + iPageCount - 1;
307 for ( i=iStartButton ; i<=iEndButton ; i++ )
309 sList += (iCurrentPage !== i) ?
310 '<li><a tabindex="'+oSettings.iTabIndex+'">'+oSettings.fnFormatNumber(i)+'</a></li>' :
311 '<li class="active"><a tabindex="'+oSettings.iTabIndex+'">'+oSettings.fnFormatNumber(i)+'</a></li>';
313 for ( i=0, iLen=an.length ; i<iLen ; i++ )
316 if ( !nNode.hasChildNodes() )
320 $('li:gt(1)', an[i]).filter(':not(li:eq(-2))').filter(':not(li:eq(-1))').remove();
321 if ( oPaging.iPage === 0 ) {
322 $('li:eq(0)', an[i]).addClass('disabled');
323 $('li:eq(1)', an[i]).addClass('disabled');
325 $('li:eq(0)', an[i]).removeClass('disabled');
326 $('li:eq(1)', an[i]).removeClass('disabled');
328 if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
329 $('li:eq(-1)', an[i]).addClass('disabled');
330 $('li:eq(-2)', an[i]).addClass('disabled');
332 $('li:eq(-1)', an[i]).removeClass('disabled');
333 $('li:eq(-2)', an[i]).removeClass('disabled');
336 .insertBefore('li:eq(-2)', an[i])
337 .bind('click', function (e) {
339 oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
340 fnCallbackDraw( oSettings );
349 * TableTools Bootstrap compatibility
350 * Required TableTools 2.1+
352 if ( $.fn.DataTable.TableTools ) {
353 // Set the classes that TableTools uses to something suitable for Bootstrap
354 $.extend( true, $.fn.DataTable.TableTools.classes, {
355 "container": "DTTT btn-group",
358 "disabled": "disabled"
361 "container": "DTTT_dropdown dropdown-menu",
364 "disabled": "disabled"
368 "info": "DTTT_print_info modal"
375 // Have the collection use a bootstrap compatible dropdown
376 $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {