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 if ( oSettings.oApi._fnPageChange(oSettings, parseInt($('a', this).text(),10)-1) ) {
85 if ( oPaging.iPage === 0 ) {
86 $('li:first', an[i]).addClass('disabled');
88 $('li:first', an[i]).removeClass('disabled');
91 if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
92 $('li:last', an[i]).addClass('disabled');
94 $('li:last', an[i]).removeClass('disabled');
100 "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
102 var oLang = oSettings.oLanguage.oPaginate;
103 var oClasses = oSettings.oClasses;
104 var fnClickHandler = function ( e ) {
105 if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
107 fnCallbackDraw( oSettings );
110 var sAppend = '<ul class="pagination">'+
111 '<li class="prev"><a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="glyphicon glyphicon-chevron-left"></span> '+oLang.sPrevious+'</a></li>'+
112 '<li class="next"><a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+' <span class="glyphicon glyphicon-chevron-right"></span></a></li>'+
114 $(nPaging).append( sAppend );
115 var els = $('a', nPaging);
116 var nPrevious = els[0],
118 oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler );
119 oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
120 if ( !oSettings.aanFeatures.p )
122 nPaging.id = oSettings.sTableId+'_paginate';
123 nPrevious.id = oSettings.sTableId+'_previous';
124 nNext.id = oSettings.sTableId+'_next';
125 nPrevious.setAttribute('aria-controls', oSettings.sTableId);
126 nNext.setAttribute('aria-controls', oSettings.sTableId);
129 "fnUpdate": function ( oSettings, fnCallbackDraw )
131 if ( !oSettings.aanFeatures.p )
135 var oPaging = oSettings.oInstance.fnPagingInfo();
136 var oClasses = oSettings.oClasses;
137 var an = oSettings.aanFeatures.p;
139 for ( var i=0, iLen=an.length ; i<iLen ; i++ )
141 if ( oPaging.iPage === 0 ) {
142 $('li:first', an[i]).addClass('disabled');
144 $('li:first', an[i]).removeClass('disabled');
147 if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
148 $('li:last', an[i]).addClass('disabled');
150 $('li:last', an[i]).removeClass('disabled');
156 "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
158 var oLang = oSettings.oLanguage.oPaginate;
159 var oClasses = oSettings.oClasses;
160 var fnClickHandler = function ( e ) {
162 if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
164 fnCallbackDraw( oSettings );
168 '<ul class="pagination">'+
169 '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'"><span class="glyphicon glyphicon-backward"></span> '+oLang.sFirst+'</a></li>'+
170 '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'"><span class="glyphicon glyphicon-chevron-left"></span> '+oLang.sPrevious+'</a></li>'+
171 '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+' <span class="glyphicon glyphicon-chevron-right"></span></a></li>'+
172 '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+' <span class="glyphicon glyphicon-forward"></span></a></li>'+
175 var els = $('a', nPaging);
180 oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler );
181 oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler );
182 oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
183 oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler );
184 if ( !oSettings.aanFeatures.p )
186 nPaging.id = oSettings.sTableId+'_paginate';
187 nFirst.id =oSettings.sTableId+'_first';
188 nPrev.id =oSettings.sTableId+'_previous';
189 nNext.id =oSettings.sTableId+'_next';
190 nLast.id =oSettings.sTableId+'_last';
193 "fnUpdate": function ( oSettings, fnCallbackDraw )
195 if ( !oSettings.aanFeatures.p )
199 var oPaging = oSettings.oInstance.fnPagingInfo();
200 var oClasses = oSettings.oClasses;
201 var an = oSettings.aanFeatures.p;
203 for ( var i=0, iLen=an.length ; i<iLen ; i++ )
205 if ( oPaging.iPage === 0 ) {
206 $('li:eq(0)', an[i]).addClass('disabled');
207 $('li:eq(1)', an[i]).addClass('disabled');
209 $('li:eq(0)', an[i]).removeClass('disabled');
210 $('li:eq(1)', an[i]).removeClass('disabled');
213 if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
214 $('li:eq(2)', an[i]).addClass('disabled');
215 $('li:eq(3)', an[i]).addClass('disabled');
217 $('li:eq(2)', an[i]).removeClass('disabled');
218 $('li:eq(3)', an[i]).removeClass('disabled');
224 "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
226 var oLang = oSettings.oLanguage.oPaginate;
227 var oClasses = oSettings.oClasses;
228 var fnClickHandler = function ( e ) {
229 if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) )
231 fnCallbackDraw( oSettings );
235 '<ul class="pagination">'+
236 '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'">'+oLang.sFirst+'</a></li>'+
237 '<li class="disabled"><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a></li>'+
238 '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a></li>'+
239 '<li><a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'</a></li>'+
242 var els = $('a', nPaging);
247 oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler );
248 oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler );
249 oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler );
250 oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler );
251 if ( !oSettings.aanFeatures.p )
253 nPaging.id = oSettings.sTableId+'_paginate';
254 nFirst.id =oSettings.sTableId+'_first';
255 nPrev.id =oSettings.sTableId+'_previous';
256 nNext.id =oSettings.sTableId+'_next';
257 nLast.id =oSettings.sTableId+'_last';
260 "fnUpdate": function ( oSettings, fnCallbackDraw )
262 if ( !oSettings.aanFeatures.p )
266 var oPaging = oSettings.oInstance.fnPagingInfo();
267 var iPageCount = $.fn.dataTableExt.oPagination.iFullNumbersShowPages;
268 var iPageCountHalf = Math.floor(iPageCount / 2);
269 var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength);
270 var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;
272 var iStartButton, iEndButton, i, iLen;
273 var oClasses = oSettings.oClasses;
274 var anButtons, anStatic, nPaginateList, nNode;
275 var an = oSettings.aanFeatures.p;
276 var fnBind = function (j) {
277 oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) {
278 if( oSettings.oApi._fnPageChange( oSettings, e.data.page ) ){
279 fnCallbackDraw( oSettings );
284 if ( oSettings._iDisplayLength === -1 )
290 else if (iPages < iPageCount)
295 else if (iCurrentPage <= iPageCountHalf)
298 iEndButton = iPageCount;
300 else if (iCurrentPage >= (iPages - iPageCountHalf))
302 iStartButton = iPages - iPageCount + 1;
307 iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
308 iEndButton = iStartButton + iPageCount - 1;
310 for ( i=iStartButton ; i<=iEndButton ; i++ )
312 sList += (iCurrentPage !== i) ?
313 '<li><a tabindex="'+oSettings.iTabIndex+'">'+oSettings.fnFormatNumber(i)+'</a></li>' :
314 '<li class="active"><a tabindex="'+oSettings.iTabIndex+'">'+oSettings.fnFormatNumber(i)+'</a></li>';
316 for ( i=0, iLen=an.length ; i<iLen ; i++ )
319 if ( !nNode.hasChildNodes() )
323 $('li:gt(1)', an[i]).filter(':not(li:eq(-2))').filter(':not(li:eq(-1))').remove();
324 if ( oPaging.iPage === 0 ) {
325 $('li:eq(0)', an[i]).addClass('disabled');
326 $('li:eq(1)', an[i]).addClass('disabled');
328 $('li:eq(0)', an[i]).removeClass('disabled');
329 $('li:eq(1)', an[i]).removeClass('disabled');
331 if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
332 $('li:eq(-1)', an[i]).addClass('disabled');
333 $('li:eq(-2)', an[i]).addClass('disabled');
335 $('li:eq(-1)', an[i]).removeClass('disabled');
336 $('li:eq(-2)', an[i]).removeClass('disabled');
339 .insertBefore($('li:eq(-2)', an[i]))
340 .bind('click', function (e) {
342 if ( oSettings.oApi._fnPageChange(oSettings, parseInt($('a', this).text(),10)-1) ) {
343 fnCallbackDraw( oSettings );
353 * TableTools Bootstrap compatibility
354 * Required TableTools 2.1+
356 if ( $.fn.DataTable.TableTools ) {
357 // Set the classes that TableTools uses to something suitable for Bootstrap
358 $.extend( true, $.fn.DataTable.TableTools.classes, {
359 "container": "DTTT btn-group",
362 "disabled": "disabled"
365 "container": "DTTT_dropdown dropdown-menu",
368 "disabled": "disabled"
372 "info": "DTTT_print_info modal"
379 // Have the collection use a bootstrap compatible dropdown
380 $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {