mirror of
https://github.com/DataTables/DataTables.git
synced 2024-12-02 14:24:11 +01:00
5e34369a56
- All credit to @montrothstein for finding and fixing this - DataTables/DataTables #681
397 lines
14 KiB
JavaScript
397 lines
14 KiB
JavaScript
/*! DataTables 1.10.10-dev
|
|
* ©2008-2015 SpryMedia Ltd - datatables.net/license
|
|
*/
|
|
|
|
/**
|
|
* @summary DataTables
|
|
* @description Paginate, search and order HTML tables
|
|
* @version 1.10.10-dev
|
|
* @file jquery.dataTables.js
|
|
* @author SpryMedia Ltd (www.sprymedia.co.uk)
|
|
* @contact www.sprymedia.co.uk/contact
|
|
* @copyright Copyright 2008-2015 SpryMedia Ltd.
|
|
*
|
|
* This source file is free software, available under the following license:
|
|
* MIT license - http://datatables.net/license
|
|
*
|
|
* This source file is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
|
|
*
|
|
* For details please refer to: http://www.datatables.net
|
|
*/
|
|
|
|
/*jslint evil: true, undef: true, browser: true */
|
|
/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/
|
|
|
|
(/** @lends <global> */function( window, document, undefined ) {
|
|
|
|
(function( factory ) {
|
|
"use strict";
|
|
|
|
if ( typeof define === 'function' && define.amd ) {
|
|
// Define as an AMD module if possible
|
|
define( 'datatables', ['jquery'], factory );
|
|
}
|
|
else if ( typeof exports === 'object' ) {
|
|
// Node/CommonJS
|
|
module.exports = factory( require( 'jquery' ) );
|
|
}
|
|
else if ( jQuery && !jQuery.fn.dataTable ) {
|
|
// Define using browser globals otherwise
|
|
// Prevent multiple instantiations if the script is loaded twice
|
|
factory( jQuery );
|
|
}
|
|
}
|
|
(/** @lends <global> */function( $ ) {
|
|
"use strict";
|
|
|
|
/**
|
|
* DataTables is a plug-in for the jQuery Javascript library. It is a highly
|
|
* flexible tool, based upon the foundations of progressive enhancement,
|
|
* which will add advanced interaction controls to any HTML table. For a
|
|
* full list of features please refer to
|
|
* [DataTables.net](href="http://datatables.net).
|
|
*
|
|
* Note that the `DataTable` object is not a global variable but is aliased
|
|
* to `jQuery.fn.DataTable` and `jQuery.fn.dataTable` through which it may
|
|
* be accessed.
|
|
*
|
|
* @class
|
|
* @param {object} [init={}] Configuration object for DataTables. Options
|
|
* are defined by {@link DataTable.defaults}
|
|
* @requires jQuery 1.7+
|
|
*
|
|
* @example
|
|
* // Basic initialisation
|
|
* $(document).ready( function {
|
|
* $('#example').dataTable();
|
|
* } );
|
|
*
|
|
* @example
|
|
* // Initialisation with configuration options - in this case, disable
|
|
* // pagination and sorting.
|
|
* $(document).ready( function {
|
|
* $('#example').dataTable( {
|
|
* "paginate": false,
|
|
* "sort": false
|
|
* } );
|
|
* } );
|
|
*/
|
|
var DataTable;
|
|
|
|
require('core.internal.js');
|
|
require('core.compat.js');
|
|
require('core.columns.js');
|
|
require('core.data.js');
|
|
require('core.draw.js');
|
|
require('core.ajax.js');
|
|
require('core.filter.js');
|
|
require('core.info.js');
|
|
require('core.init.js');
|
|
require('core.length.js');
|
|
require('core.page.js');
|
|
require('core.processing.js');
|
|
require('core.scrolling.js');
|
|
require('core.sizing.js');
|
|
require('core.sort.js');
|
|
require('core.state.js');
|
|
require('core.support.js');
|
|
|
|
DataTable = function( options )
|
|
{
|
|
require('api.legacy.js');
|
|
|
|
var _that = this;
|
|
var emptyInit = options === undefined;
|
|
var len = this.length;
|
|
|
|
if ( emptyInit ) {
|
|
options = {};
|
|
}
|
|
|
|
this.oApi = this.internal = _ext.internal;
|
|
|
|
// Extend with old style plug-in API methods
|
|
for ( var fn in DataTable.ext.internal ) {
|
|
if ( fn ) {
|
|
this[fn] = _fnExternApiFunc(fn);
|
|
}
|
|
}
|
|
|
|
this.each(function() {
|
|
// For each initialisation we want to give it a clean initialisation
|
|
// object that can be bashed around
|
|
var o = {};
|
|
var oInit = len > 1 ? // optimisation for single table case
|
|
_fnExtend( o, options, true ) :
|
|
options;
|
|
|
|
require('core.constructor.js');
|
|
} );
|
|
_that = null;
|
|
return this;
|
|
};
|
|
|
|
require('api.base.js');
|
|
require('api.table.js');
|
|
require('api.draw.js');
|
|
require('api.page.js');
|
|
require('api.ajax.js');
|
|
require('api.selectors.js');
|
|
require('api.rows.js');
|
|
require('api.row.details.js');
|
|
require('api.columns.js');
|
|
require('api.cells.js');
|
|
require('api.order.js');
|
|
require('api.search.js');
|
|
require('api.state.js');
|
|
require('api.static.js');
|
|
require('api.core.js');
|
|
|
|
/**
|
|
* Version string for plug-ins to check compatibility. Allowed format is
|
|
* `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used
|
|
* only for non-release builds. See http://semver.org/ for more information.
|
|
* @member
|
|
* @type string
|
|
* @default Version number
|
|
*/
|
|
DataTable.version = "1.10.10-dev";
|
|
|
|
/**
|
|
* Private data store, containing all of the settings objects that are
|
|
* created for the tables on a given page.
|
|
*
|
|
* Note that the `DataTable.settings` object is aliased to
|
|
* `jQuery.fn.dataTableExt` through which it may be accessed and
|
|
* manipulated, or `jQuery.fn.dataTable.settings`.
|
|
* @member
|
|
* @type array
|
|
* @default []
|
|
* @private
|
|
*/
|
|
DataTable.settings = [];
|
|
|
|
/**
|
|
* Object models container, for the various models that DataTables has
|
|
* available to it. These models define the objects that are used to hold
|
|
* the active state and configuration of the table.
|
|
* @namespace
|
|
*/
|
|
DataTable.models = {};
|
|
require('model.search.js');
|
|
require('model.row.js');
|
|
require('model.column.js');
|
|
require('model.defaults.js');
|
|
require('model.defaults.columns.js');
|
|
require('model.settings.js');
|
|
|
|
/**
|
|
* Extension object for DataTables that is used to provide all extension
|
|
* options.
|
|
*
|
|
* Note that the `DataTable.ext` object is available through
|
|
* `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is
|
|
* also aliased to `jQuery.fn.dataTableExt` for historic reasons.
|
|
* @namespace
|
|
* @extends DataTable.models.ext
|
|
*/
|
|
require('ext.js');
|
|
require('ext.classes.js');
|
|
require('ext.paging.js');
|
|
require('ext.types.js');
|
|
require('ext.filter.js');
|
|
require('ext.sorting.js');
|
|
require('ext.renderer.js');
|
|
require('ext.helpers.js');
|
|
require('api.internal.js');
|
|
|
|
// jQuery access
|
|
$.fn.dataTable = DataTable;
|
|
|
|
// Legacy aliases
|
|
$.fn.dataTableSettings = DataTable.settings;
|
|
$.fn.dataTableExt = DataTable.ext;
|
|
|
|
// With a capital `D` we return a DataTables API instance rather than a
|
|
// jQuery object
|
|
$.fn.DataTable = function ( opts ) {
|
|
return $(this).dataTable( opts ).api();
|
|
};
|
|
|
|
// All properties that are available to $.fn.dataTable should also be
|
|
// available on $.fn.DataTable
|
|
$.each( DataTable, function ( prop, val ) {
|
|
$.fn.DataTable[ prop ] = val;
|
|
} );
|
|
|
|
|
|
// Information about events fired by DataTables - for documentation.
|
|
/**
|
|
* Draw event, fired whenever the table is redrawn on the page, at the same
|
|
* point as fnDrawCallback. This may be useful for binding events or
|
|
* performing calculations when the table is altered at all.
|
|
* @name DataTable#draw.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
|
*/
|
|
|
|
/**
|
|
* Search event, fired when the searching applied to the table (using the
|
|
* built-in global search, or column filters) is altered.
|
|
* @name DataTable#search.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
|
*/
|
|
|
|
/**
|
|
* Page change event, fired when the paging of the table is altered.
|
|
* @name DataTable#page.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
|
*/
|
|
|
|
/**
|
|
* Order event, fired when the ordering applied to the table is altered.
|
|
* @name DataTable#order.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
|
*/
|
|
|
|
/**
|
|
* DataTables initialisation complete event, fired when the table is fully
|
|
* drawn, including Ajax data loaded, if Ajax data is required.
|
|
* @name DataTable#init.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} oSettings DataTables settings object
|
|
* @param {object} json The JSON object request from the server - only
|
|
* present if client-side Ajax sourced data is used</li></ol>
|
|
*/
|
|
|
|
/**
|
|
* State save event, fired when the table has changed state a new state save
|
|
* is required. This event allows modification of the state saving object
|
|
* prior to actually doing the save, including addition or other state
|
|
* properties (for plug-ins) or modification of a DataTables core property.
|
|
* @name DataTable#stateSaveParams.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} oSettings DataTables settings object
|
|
* @param {object} json The state information to be saved
|
|
*/
|
|
|
|
/**
|
|
* State load event, fired when the table is loading state from the stored
|
|
* data, but prior to the settings object being modified by the saved state
|
|
* - allowing modification of the saved state is required or loading of
|
|
* state for a plug-in.
|
|
* @name DataTable#stateLoadParams.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} oSettings DataTables settings object
|
|
* @param {object} json The saved state information
|
|
*/
|
|
|
|
/**
|
|
* State loaded event, fired when state has been loaded from stored data and
|
|
* the settings object has been modified by the loaded data.
|
|
* @name DataTable#stateLoaded.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} oSettings DataTables settings object
|
|
* @param {object} json The saved state information
|
|
*/
|
|
|
|
/**
|
|
* Processing event, fired when DataTables is doing some kind of processing
|
|
* (be it, order, searcg or anything else). It can be used to indicate to
|
|
* the end user that there is something happening, or that something has
|
|
* finished.
|
|
* @name DataTable#processing.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} oSettings DataTables settings object
|
|
* @param {boolean} bShow Flag for if DataTables is doing processing or not
|
|
*/
|
|
|
|
/**
|
|
* Ajax (XHR) event, fired whenever an Ajax request is completed from a
|
|
* request to made to the server for new data. This event is called before
|
|
* DataTables processed the returned data, so it can also be used to pre-
|
|
* process the data returned from the server, if needed.
|
|
*
|
|
* Note that this trigger is called in `fnServerData`, if you override
|
|
* `fnServerData` and which to use this event, you need to trigger it in you
|
|
* success function.
|
|
* @name DataTable#xhr.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
|
* @param {object} json JSON returned from the server
|
|
*
|
|
* @example
|
|
* // Use a custom property returned from the server in another DOM element
|
|
* $('#table').dataTable().on('xhr.dt', function (e, settings, json) {
|
|
* $('#status').html( json.status );
|
|
* } );
|
|
*
|
|
* @example
|
|
* // Pre-process the data returned from the server
|
|
* $('#table').dataTable().on('xhr.dt', function (e, settings, json) {
|
|
* for ( var i=0, ien=json.aaData.length ; i<ien ; i++ ) {
|
|
* json.aaData[i].sum = json.aaData[i].one + json.aaData[i].two;
|
|
* }
|
|
* // Note no return - manipulate the data directly in the JSON object.
|
|
* } );
|
|
*/
|
|
|
|
/**
|
|
* Destroy event, fired when the DataTable is destroyed by calling fnDestroy
|
|
* or passing the bDestroy:true parameter in the initialisation object. This
|
|
* can be used to remove bound events, added DOM nodes, etc.
|
|
* @name DataTable#destroy.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
|
*/
|
|
|
|
/**
|
|
* Page length change event, fired when number of records to show on each
|
|
* page (the length) is changed.
|
|
* @name DataTable#length.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
|
* @param {integer} len New length
|
|
*/
|
|
|
|
/**
|
|
* Column sizing has changed.
|
|
* @name DataTable#column-sizing.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
|
*/
|
|
|
|
/**
|
|
* Column visibility has changed.
|
|
* @name DataTable#column-visibility.dt
|
|
* @event
|
|
* @param {event} e jQuery event object
|
|
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
|
* @param {int} column Column index
|
|
* @param {bool} vis `false` if column now hidden, or `true` if visible
|
|
*/
|
|
|
|
return $.fn.dataTable;
|
|
}));
|
|
|
|
}(window, document));
|
|
|