text: /*! DataTables Bootstrap 3 integration
   * ©2011-2014 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(window, document, undefined){
  
  var factory = function( $, DataTable ) {
  "use strict";
  
  
  /* Set the defaults for DataTables initialisation */
  $.extend( true, DataTable.defaults, {
  	dom:
  		//"<'tables-title'<'float-left'l><'table-title-btns'f>>" +
  		"<'row'tr>" +
  		"<'row'i<'pagination-wrap'p>>",
  	renderer: 'bootstrap',
  	language: {
  		"sProcessing": "处理中...",
          "sLengthMenu": "每页显示 _MENU_ ",
          "sZeroRecords": "没有匹配结果",
          "sInfo": "第 _START_ 至 _END_ 条记录，共 _TOTAL_ 条记录",
          "sInfoEmpty": "共 0 条记录",
          "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
          "sInfoPostFix": "",
          "sSearch": "搜索:",
          "sUrl": "",
          "sEmptyTable": "表中数据为空",
          "sLoadingRecords": "载入中...",
          "sInfoThousands": ",",
          "oPaginate": {
              "sFirst": "首页",
              "sPrevious": "上一页",
              "sNext": "下一页",
              "sLast": "末页"
          },
          "oAria": {
              "sSortAscending": ": 以升序排列此列",
              "sSortDescending": ": 以降序排列此列"
          }
  	}
  } );
  
  
  /* Default class modification */
  $.extend( DataTable.ext.classes, {
  	sWrapper:      "dataTables_wrapper",
  	sFilterInput:  "form-control smallsize",
  	sLengthSelect: "form-control smallsize"
  } );
  
  
  /* 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 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 ).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 = '&hellip;';
  						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,
  								'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 ) {
  		$(host).find( '[data-dt-idx='+activeEl+']' ).focus();
  	}
  };
  
  
  /*
   * TableTools Bootstrap compatibility
   * Required TableTools 2.1+
   */
  if ( DataTable.TableTools ) {
  	// Set the classes that TableTools uses to something suitable for Bootstrap
  	$.extend( true, DataTable.TableTools.classes, {
  		"container": "DTTT btn-group",
  		"buttons": {
  			"normal": "btn btn-default",
  			"disabled": "disabled"
  		},
  		"collection": {
  			"container": "DTTT_dropdown dropdown-menu",
  			"buttons": {
  				"normal": "",
  				"disabled": "disabled"
  			}
  		},
  		"print": {
  			"info": "DTTT_print_info"
  		},
  		"select": {
  			"row": "active"
  		}
  	} );
  
  	// Have the collection use a bootstrap compatible drop down
  	$.extend( true, DataTable.TableTools.DEFAULTS.oTags, {
  		"collection": {
  			"container": "ul",
  			"button": "li",
  			"liner": "a"
  		}
  	} );
  }
  
  }; // /factory
  
  
  // Define as an AMD module if possible
  if ( typeof define === 'function' && define.amd ) {
  	define( ['jquery', 'datatables'], factory );
  }
  else if ( typeof exports === 'object' ) {
      // Node/CommonJS
      factory( require('jquery'), require('datatables') );
  }
  else if ( jQuery ) {
  	// Otherwise simply initialise as normal, stopping multiple evaluation
  	factory( jQuery, jQuery.fn.dataTable );
  }
  
  
  })(window, document);
  
  