Spaces:
Running
Running
/*! DataTables Bootstrap 3 integration | |
* ©2011-2015 SpryMedia Ltd - datatables.net/license | |
*/ | |
/** | |
* DataTables integration for Bootstrap 3. This requires Bootstrap 3 and | |
* DataTables 1.10 or newer. | |
* | |
* This file sets the defaults and adds options to DataTables to style its | |
* controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap | |
* for further information. | |
*/ | |
(function( factory ){ | |
if ( typeof define === 'function' && define.amd ) { | |
// AMD | |
define( ['jquery', 'datatables.net'], function ( $ ) { | |
return factory( $, window, document ); | |
} ); | |
} | |
else if ( typeof exports === 'object' ) { | |
// CommonJS | |
module.exports = function (root, $) { | |
if ( ! root ) { | |
root = window; | |
} | |
if ( ! $ || ! $.fn.dataTable ) { | |
// Require DataTables, which attaches to jQuery, including | |
// jQuery if needed and have a $ property so we can access the | |
// jQuery object that is used | |
$ = require('datatables.net')(root, $).$; | |
} | |
return factory( $, root, root.document ); | |
}; | |
} | |
else { | |
// Browser | |
factory( jQuery, window, document ); | |
} | |
}(function( $, window, document, undefined ) { | |
; | |
var DataTable = $.fn.dataTable; | |
/* Set the defaults for DataTables initialisation */ | |
$.extend( true, DataTable.defaults, { | |
dom: | |
"<'row'<'col-sm-6'l><'col-sm-6'f>>" + | |
"<'row'<'col-sm-12'tr>>" + | |
"<'row'<'col-sm-5'i><'col-sm-7'p>>", | |
renderer: 'bootstrap' | |
} ); | |
/* Default class modification */ | |
$.extend( DataTable.ext.classes, { | |
sWrapper: "dataTables_wrapper form-inline dt-bootstrap", | |
sFilterInput: "form-control input-sm", | |
sLengthSelect: "form-control input-sm", | |
sProcessing: "dataTables_processing panel panel-default" | |
} ); | |
/* Bootstrap paging button renderer */ | |
DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { | |
var api = new DataTable.Api( settings ); | |
var classes = settings.oClasses; | |
var lang = settings.oLanguage.oPaginate; | |
var aria = settings.oLanguage.oAria.paginate || {}; | |
var btnDisplay, btnClass, counter=0; | |
var attach = function( container, buttons ) { | |
var i, ien, node, button; | |
var clickHandler = function ( e ) { | |
e.preventDefault(); | |
if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) { | |
api.page( e.data.action ).draw( 'page' ); | |
} | |
}; | |
for ( i=0, ien=buttons.length ; i<ien ; i++ ) { | |
button = buttons[i]; | |
if ( $.isArray( button ) ) { | |
attach( container, button ); | |
} | |
else { | |
btnDisplay = ''; | |
btnClass = ''; | |
switch ( button ) { | |
case 'ellipsis': | |
btnDisplay = '…'; | |
btnClass = 'disabled'; | |
break; | |
case 'first': | |
btnDisplay = lang.sFirst; | |
btnClass = button + (page > 0 ? | |
'' : ' disabled'); | |
break; | |
case 'previous': | |
btnDisplay = lang.sPrevious; | |
btnClass = button + (page > 0 ? | |
'' : ' disabled'); | |
break; | |
case 'next': | |
btnDisplay = lang.sNext; | |
btnClass = button + (page < pages-1 ? | |
'' : ' disabled'); | |
break; | |
case 'last': | |
btnDisplay = lang.sLast; | |
btnClass = button + (page < pages-1 ? | |
'' : ' disabled'); | |
break; | |
default: | |
btnDisplay = button + 1; | |
btnClass = page === button ? | |
'active' : ''; | |
break; | |
} | |
if ( btnDisplay ) { | |
node = $('<li>', { | |
'class': classes.sPageButton+' '+btnClass, | |
'id': idx === 0 && typeof button === 'string' ? | |
settings.sTableId +'_'+ button : | |
null | |
} ) | |
.append( $('<a>', { | |
'href': '#', | |
'aria-controls': settings.sTableId, | |
'aria-label': aria[ button ], | |
'data-dt-idx': counter, | |
'tabindex': settings.iTabIndex | |
} ) | |
.html( btnDisplay ) | |
) | |
.appendTo( container ); | |
settings.oApi._fnBindAction( | |
node, {action: button}, clickHandler | |
); | |
counter++; | |
} | |
} | |
} | |
}; | |
// IE9 throws an 'unknown error' if document.activeElement is used | |
// inside an iframe or frame. | |
var activeEl; | |
try { | |
// Because this approach is destroying and recreating the paging | |
// elements, focus is lost on the select button which is bad for | |
// accessibility. So we want to restore focus once the draw has | |
// completed | |
activeEl = $(host).find(document.activeElement).data('dt-idx'); | |
} | |
catch (e) {} | |
attach( | |
$(host).empty().html('<ul class="pagination"/>').children('ul'), | |
buttons | |
); | |
if ( activeEl !== undefined ) { | |
$(host).find( '[data-dt-idx='+activeEl+']' ).focus(); | |
} | |
}; | |
return DataTable; | |
})); | |