jquery-datatables-rails 3.3.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/dataTables/bootstrap/3/jquery.dataTables.bootstrap.js +64 -29
- data/app/assets/javascripts/dataTables/extras/dataTables.autoFill.js +806 -648
- data/app/assets/javascripts/dataTables/extras/dataTables.buttons.js +1607 -0
- data/app/assets/javascripts/dataTables/extras/dataTables.colReorder.js +220 -267
- data/app/assets/javascripts/dataTables/extras/dataTables.fixedColumns.js +164 -69
- data/app/assets/javascripts/dataTables/extras/dataTables.fixedHeader.js +469 -870
- data/app/assets/javascripts/dataTables/extras/dataTables.keyTable.js +636 -972
- data/app/assets/javascripts/dataTables/extras/dataTables.responsive.js +472 -187
- data/app/assets/javascripts/dataTables/extras/dataTables.rowReorder.js +619 -0
- data/app/assets/javascripts/dataTables/extras/dataTables.scroller.js +146 -111
- data/app/assets/javascripts/dataTables/extras/dataTables.select.js +1038 -0
- data/app/assets/javascripts/dataTables/jquery.dataTables.api.fnGetColumnData.js +0 -0
- data/app/assets/javascripts/dataTables/jquery.dataTables.api.fnReloadAjax.js +0 -0
- data/app/assets/javascripts/dataTables/jquery.dataTables.foundation.js +37 -61
- data/app/assets/javascripts/dataTables/jquery.dataTables.js +720 -387
- data/app/assets/javascripts/dataTables/jquery.dataTables.sorting.ipAddress.js +44 -0
- data/app/assets/javascripts/dataTables/jquery.dataTables.sorting.numbersHtml.js +0 -0
- data/app/assets/javascripts/dataTables/jquery.dataTables.typeDetection.numbersHtml.js +0 -0
- data/app/assets/stylesheets/dataTables/jquery.dataTables.scss +34 -66
- data/app/assets/stylesheets/dataTables/src/demo_table.css +1 -1
- data/app/assets/stylesheets/dataTables/src/demo_table_jui.css.scss +4 -4
- data/lib/jquery/datatables/rails/version.rb +1 -1
- metadata +24 -19
File without changes
|
File without changes
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*! DataTables Foundation integration
|
2
|
-
* ©2011-
|
2
|
+
* ©2011-2015 SpryMedia Ltd - datatables.net/license
|
3
3
|
*/
|
4
4
|
|
5
5
|
/**
|
@@ -10,14 +10,39 @@
|
|
10
10
|
* controls using Foundation. See http://datatables.net/manual/styling/foundation
|
11
11
|
* for further information.
|
12
12
|
*/
|
13
|
-
(function(
|
13
|
+
(function( factory ){
|
14
|
+
if ( typeof define === 'function' && define.amd ) {
|
15
|
+
// AMD
|
16
|
+
define( ['jquery', 'datatables.net'], function ( $ ) {
|
17
|
+
return factory( $, window, document );
|
18
|
+
} );
|
19
|
+
}
|
20
|
+
else if ( typeof exports === 'object' ) {
|
21
|
+
// CommonJS
|
22
|
+
module.exports = function (root, $) {
|
23
|
+
if ( ! root ) {
|
24
|
+
root = window;
|
25
|
+
}
|
26
|
+
|
27
|
+
if ( ! $ || ! $.fn.dataTable ) {
|
28
|
+
$ = require('datatables.net')(root, $).$;
|
29
|
+
}
|
14
30
|
|
15
|
-
|
16
|
-
|
31
|
+
return factory( $, root, root.document );
|
32
|
+
};
|
33
|
+
}
|
34
|
+
else {
|
35
|
+
// Browser
|
36
|
+
factory( jQuery, window, document );
|
37
|
+
}
|
38
|
+
}(function( $, window, document, undefined ) {
|
39
|
+
'use strict';
|
40
|
+
var DataTable = $.fn.dataTable;
|
17
41
|
|
18
42
|
|
19
43
|
$.extend( DataTable.ext.classes, {
|
20
|
-
sWrapper:
|
44
|
+
sWrapper: "dataTables_wrapper dt-foundation",
|
45
|
+
sProcessing: "dataTables_processing panel"
|
21
46
|
} );
|
22
47
|
|
23
48
|
|
@@ -36,14 +61,15 @@ DataTable.ext.renderer.pageButton.foundation = function ( settings, host, idx, b
|
|
36
61
|
var api = new DataTable.Api( settings );
|
37
62
|
var classes = settings.oClasses;
|
38
63
|
var lang = settings.oLanguage.oPaginate;
|
64
|
+
var aria = settings.oLanguage.oAria.paginate || {};
|
39
65
|
var btnDisplay, btnClass;
|
40
66
|
|
41
67
|
var attach = function( container, buttons ) {
|
42
68
|
var i, ien, node, button;
|
43
69
|
var clickHandler = function ( e ) {
|
44
70
|
e.preventDefault();
|
45
|
-
if ( e.
|
46
|
-
api.page( e.data.action ).draw(
|
71
|
+
if ( !$(e.currentTarget).hasClass('unavailable') && api.page() != e.data.action ) {
|
72
|
+
api.page( e.data.action ).draw( 'page' );
|
47
73
|
}
|
48
74
|
};
|
49
75
|
|
@@ -59,7 +85,7 @@ DataTable.ext.renderer.pageButton.foundation = function ( settings, host, idx, b
|
|
59
85
|
|
60
86
|
switch ( button ) {
|
61
87
|
case 'ellipsis':
|
62
|
-
btnDisplay = '
|
88
|
+
btnDisplay = '…';
|
63
89
|
btnClass = 'unavailable';
|
64
90
|
break;
|
65
91
|
|
@@ -98,6 +124,7 @@ DataTable.ext.renderer.pageButton.foundation = function ( settings, host, idx, b
|
|
98
124
|
node = $('<li>', {
|
99
125
|
'class': classes.sPageButton+' '+btnClass,
|
100
126
|
'aria-controls': settings.sTableId,
|
127
|
+
'aria-label': aria[ button ],
|
101
128
|
'tabindex': settings.iTabIndex,
|
102
129
|
'id': idx === 0 && typeof button === 'string' ?
|
103
130
|
settings.sTableId +'_'+ button :
|
@@ -125,56 +152,5 @@ DataTable.ext.renderer.pageButton.foundation = function ( settings, host, idx, b
|
|
125
152
|
};
|
126
153
|
|
127
154
|
|
128
|
-
|
129
|
-
|
130
|
-
* Required TableTools 2.1+
|
131
|
-
*/
|
132
|
-
if ( DataTable.TableTools ) {
|
133
|
-
// Set the classes that TableTools uses to something suitable for Foundation
|
134
|
-
$.extend( true, DataTable.TableTools.classes, {
|
135
|
-
"container": "DTTT button-group",
|
136
|
-
"buttons": {
|
137
|
-
"normal": "button small",
|
138
|
-
"disabled": "disabled"
|
139
|
-
},
|
140
|
-
"collection": {
|
141
|
-
"container": "DTTT_dropdown dropdown-menu",
|
142
|
-
"buttons": {
|
143
|
-
"normal": "",
|
144
|
-
"disabled": "disabled"
|
145
|
-
}
|
146
|
-
},
|
147
|
-
"select": {
|
148
|
-
"row": "active"
|
149
|
-
}
|
150
|
-
} );
|
151
|
-
|
152
|
-
// Have the collection use a bootstrap compatible dropdown
|
153
|
-
$.extend( true, DataTable.TableTools.DEFAULTS.oTags, {
|
154
|
-
"collection": {
|
155
|
-
"container": "ul",
|
156
|
-
"button": "li",
|
157
|
-
"liner": "a"
|
158
|
-
}
|
159
|
-
} );
|
160
|
-
}
|
161
|
-
|
162
|
-
}; // /factory
|
163
|
-
|
164
|
-
|
165
|
-
// Define as an AMD module if possible
|
166
|
-
if ( typeof define === 'function' && define.amd ) {
|
167
|
-
define( ['jquery', 'datatables'], factory );
|
168
|
-
}
|
169
|
-
else if ( typeof exports === 'object' ) {
|
170
|
-
// Node/CommonJS
|
171
|
-
factory( require('jquery'), require('datatables') );
|
172
|
-
}
|
173
|
-
else if ( jQuery ) {
|
174
|
-
// Otherwise simply initialise as normal, stopping multiple evaluation
|
175
|
-
factory( jQuery, jQuery.fn.dataTable );
|
176
|
-
}
|
177
|
-
|
178
|
-
|
179
|
-
})(window, document);
|
180
|
-
|
155
|
+
return DataTable;
|
156
|
+
}));
|
@@ -1,15 +1,15 @@
|
|
1
|
-
/*! DataTables 1.10.
|
2
|
-
* ©2008-
|
1
|
+
/*! DataTables 1.10.10
|
2
|
+
* ©2008-2015 SpryMedia Ltd - datatables.net/license
|
3
3
|
*/
|
4
4
|
|
5
5
|
/**
|
6
6
|
* @summary DataTables
|
7
7
|
* @description Paginate, search and order HTML tables
|
8
|
-
* @version 1.10.
|
8
|
+
* @version 1.10.10
|
9
9
|
* @file jquery.dataTables.js
|
10
10
|
* @author SpryMedia Ltd (www.sprymedia.co.uk)
|
11
11
|
* @contact www.sprymedia.co.uk/contact
|
12
|
-
* @copyright Copyright 2008-
|
12
|
+
* @copyright Copyright 2008-2015 SpryMedia Ltd.
|
13
13
|
*
|
14
14
|
* This source file is free software, available under the following license:
|
15
15
|
* MIT license - http://datatables.net/license
|
@@ -22,28 +22,41 @@
|
|
22
22
|
*/
|
23
23
|
|
24
24
|
/*jslint evil: true, undef: true, browser: true */
|
25
|
-
/*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,
|
26
|
-
|
27
|
-
(/** @lends <global> */function( window, document, undefined ) {
|
25
|
+
/*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*/
|
28
26
|
|
29
27
|
(function( factory ) {
|
30
28
|
"use strict";
|
31
29
|
|
32
30
|
if ( typeof define === 'function' && define.amd ) {
|
33
|
-
//
|
34
|
-
define(
|
31
|
+
// AMD
|
32
|
+
define( ['jquery'], function ( $ ) {
|
33
|
+
return factory( $, window, document );
|
34
|
+
} );
|
35
35
|
}
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
36
|
+
else if ( typeof exports === 'object' ) {
|
37
|
+
// CommonJS
|
38
|
+
module.exports = function (root, $) {
|
39
|
+
if ( ! root ) {
|
40
|
+
// CommonJS environments without a window global must pass a
|
41
|
+
// root. This will give an error otherwise
|
42
|
+
root = window;
|
43
|
+
}
|
44
|
+
|
45
|
+
if ( ! $ ) {
|
46
|
+
$ = typeof window !== 'undefined' ? // jQuery's factory checks for a global window
|
47
|
+
require('jquery') :
|
48
|
+
require('jquery')( root );
|
49
|
+
}
|
50
|
+
|
51
|
+
return factory( $, root, root.document );
|
52
|
+
};
|
53
|
+
}
|
54
|
+
else {
|
55
|
+
// Browser
|
56
|
+
factory( jQuery, window, document );
|
44
57
|
}
|
45
58
|
}
|
46
|
-
(
|
59
|
+
(function( $, window, document, undefined ) {
|
47
60
|
"use strict";
|
48
61
|
|
49
62
|
/**
|
@@ -467,6 +480,14 @@
|
|
467
480
|
_fnCompatMap( init, 'pageLength', 'iDisplayLength' );
|
468
481
|
_fnCompatMap( init, 'searching', 'bFilter' );
|
469
482
|
|
483
|
+
// Boolean initialisation of x-scrolling
|
484
|
+
if ( typeof init.sScrollX === 'boolean' ) {
|
485
|
+
init.sScrollX = init.sScrollX ? '100%' : '';
|
486
|
+
}
|
487
|
+
if ( typeof init.scrollX === 'boolean' ) {
|
488
|
+
init.scrollX = init.scrollX ? '100%' : '';
|
489
|
+
}
|
490
|
+
|
470
491
|
// Column search objects are in an array, so it needs to be converted
|
471
492
|
// element by element
|
472
493
|
var searchCols = init.aoSearchCols;
|
@@ -509,49 +530,75 @@
|
|
509
530
|
*/
|
510
531
|
function _fnBrowserDetect( settings )
|
511
532
|
{
|
512
|
-
|
533
|
+
// We don't need to do this every time DataTables is constructed, the values
|
534
|
+
// calculated are specific to the browser and OS configuration which we
|
535
|
+
// don't expect to change between initialisations
|
536
|
+
if ( ! DataTable.__browser ) {
|
537
|
+
var browser = {};
|
538
|
+
DataTable.__browser = browser;
|
539
|
+
|
540
|
+
// Scrolling feature / quirks detection
|
541
|
+
var n = $('<div/>')
|
542
|
+
.css( {
|
543
|
+
position: 'fixed',
|
544
|
+
top: 0,
|
545
|
+
left: 0,
|
546
|
+
height: 1,
|
547
|
+
width: 1,
|
548
|
+
overflow: 'hidden'
|
549
|
+
} )
|
550
|
+
.append(
|
551
|
+
$('<div/>')
|
552
|
+
.css( {
|
553
|
+
position: 'absolute',
|
554
|
+
top: 1,
|
555
|
+
left: 1,
|
556
|
+
width: 100,
|
557
|
+
overflow: 'scroll'
|
558
|
+
} )
|
559
|
+
.append(
|
560
|
+
$('<div/>')
|
561
|
+
.css( {
|
562
|
+
width: '100%',
|
563
|
+
height: 10
|
564
|
+
} )
|
565
|
+
)
|
566
|
+
)
|
567
|
+
.appendTo( 'body' );
|
513
568
|
|
514
|
-
|
515
|
-
|
516
|
-
.css( {
|
517
|
-
position: 'absolute',
|
518
|
-
top: 0,
|
519
|
-
left: 0,
|
520
|
-
height: 1,
|
521
|
-
width: 1,
|
522
|
-
overflow: 'hidden'
|
523
|
-
} )
|
524
|
-
.append(
|
525
|
-
$('<div/>')
|
526
|
-
.css( {
|
527
|
-
position: 'absolute',
|
528
|
-
top: 1,
|
529
|
-
left: 1,
|
530
|
-
width: 100,
|
531
|
-
overflow: 'scroll'
|
532
|
-
} )
|
533
|
-
.append(
|
534
|
-
$('<div class="test"/>')
|
535
|
-
.css( {
|
536
|
-
width: '100%',
|
537
|
-
height: 10
|
538
|
-
} )
|
539
|
-
)
|
540
|
-
)
|
541
|
-
.appendTo( 'body' );
|
569
|
+
var outer = n.children();
|
570
|
+
var inner = outer.children();
|
542
571
|
|
543
|
-
|
572
|
+
// Numbers below, in order, are:
|
573
|
+
// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth
|
574
|
+
//
|
575
|
+
// IE6 XP: 100 100 100 83
|
576
|
+
// IE7 Vista: 100 100 100 83
|
577
|
+
// IE 8+ Windows: 83 83 100 83
|
578
|
+
// Evergreen Windows: 83 83 100 83
|
579
|
+
// Evergreen Mac with scrollbars: 85 85 100 85
|
580
|
+
// Evergreen Mac without scrollbars: 100 100 100 100
|
544
581
|
|
545
|
-
|
546
|
-
|
547
|
-
// element is contained without forcing scrolling
|
548
|
-
browser.bScrollOversize = test[0].offsetWidth === 100;
|
582
|
+
// Get scrollbar width
|
583
|
+
browser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;
|
549
584
|
|
550
|
-
|
551
|
-
|
552
|
-
|
585
|
+
// IE6/7 will oversize a width 100% element inside a scrolling element, to
|
586
|
+
// include the width of the scrollbar, while other browsers ensure the inner
|
587
|
+
// element is contained without forcing scrolling
|
588
|
+
browser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;
|
553
589
|
|
554
|
-
|
590
|
+
// In rtl text layout, some browsers (most, but not all) will place the
|
591
|
+
// scrollbar on the left, rather than the right.
|
592
|
+
browser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;
|
593
|
+
|
594
|
+
// IE8- don't provide height and width for getBoundingClientRect
|
595
|
+
browser.bBounding = n[0].getBoundingClientRect().width ? true : false;
|
596
|
+
|
597
|
+
n.remove();
|
598
|
+
}
|
599
|
+
|
600
|
+
$.extend( settings.oBrowser, DataTable.__browser );
|
601
|
+
settings.oScroll.iBarWidth = DataTable.__browser.barWidth;
|
555
602
|
}
|
556
603
|
|
557
604
|
|
@@ -1008,7 +1055,8 @@
|
|
1008
1055
|
/* Create the object for storing information about this new row */
|
1009
1056
|
var iRow = oSettings.aoData.length;
|
1010
1057
|
var oData = $.extend( true, {}, DataTable.models.oRow, {
|
1011
|
-
src: nTr ? 'dom' : 'data'
|
1058
|
+
src: nTr ? 'dom' : 'data',
|
1059
|
+
idx: iRow
|
1012
1060
|
} );
|
1013
1061
|
|
1014
1062
|
oData._aData = aDataIn;
|
@@ -1017,20 +1065,21 @@
|
|
1017
1065
|
/* Create the cells */
|
1018
1066
|
var nTd, sThisType;
|
1019
1067
|
var columns = oSettings.aoColumns;
|
1068
|
+
|
1069
|
+
// Invalidate the column types as the new data needs to be revalidated
|
1020
1070
|
for ( var i=0, iLen=columns.length ; i<iLen ; i++ )
|
1021
1071
|
{
|
1022
|
-
// When working with a row, the data source object must be populated. In
|
1023
|
-
// all other cases, the data source object is already populated, so we
|
1024
|
-
// don't overwrite it, which might break bindings etc
|
1025
|
-
if ( nTr ) {
|
1026
|
-
_fnSetCellData( oSettings, iRow, i, _fnGetCellData( oSettings, iRow, i ) );
|
1027
|
-
}
|
1028
1072
|
columns[i].sType = null;
|
1029
1073
|
}
|
1030
1074
|
|
1031
1075
|
/* Add to the display array */
|
1032
1076
|
oSettings.aiDisplayMaster.push( iRow );
|
1033
1077
|
|
1078
|
+
var id = oSettings.rowIdFn( aDataIn );
|
1079
|
+
if ( id !== undefined ) {
|
1080
|
+
oSettings.aIds[ id ] = oData;
|
1081
|
+
}
|
1082
|
+
|
1034
1083
|
/* Create the DOM information, or register it if already present */
|
1035
1084
|
if ( nTr || ! oSettings.oFeatures.bDeferRender )
|
1036
1085
|
{
|
@@ -1119,7 +1168,7 @@
|
|
1119
1168
|
if ( settings.iDrawError != draw && defaultContent === null ) {
|
1120
1169
|
_fnLog( settings, 0, "Requested unknown parameter "+
|
1121
1170
|
(typeof col.mData=='function' ? '{function}' : "'"+col.mData+"'")+
|
1122
|
-
" for row "+rowIdx, 4 );
|
1171
|
+
" for row "+rowIdx+", column "+colIdx, 4 );
|
1123
1172
|
settings.iDrawError = draw;
|
1124
1173
|
}
|
1125
1174
|
return defaultContent;
|
@@ -1174,7 +1223,7 @@
|
|
1174
1223
|
*/
|
1175
1224
|
function _fnSplitObjNotation( str )
|
1176
1225
|
{
|
1177
|
-
return $.map( str.match(/(\\.|[^\.])+/g), function ( s ) {
|
1226
|
+
return $.map( str.match(/(\\.|[^\.])+/g) || [''], function ( s ) {
|
1178
1227
|
return s.replace(/\\./g, '.');
|
1179
1228
|
} );
|
1180
1229
|
}
|
@@ -1257,8 +1306,10 @@
|
|
1257
1306
|
innerSrc = a.join('.');
|
1258
1307
|
|
1259
1308
|
// Traverse each entry in the array getting the properties requested
|
1260
|
-
|
1261
|
-
|
1309
|
+
if ( $.isArray( data ) ) {
|
1310
|
+
for ( var j=0, jLen=data.length ; j<jLen ; j++ ) {
|
1311
|
+
out.push( fetchData( data[j], type, innerSrc ) );
|
1312
|
+
}
|
1262
1313
|
}
|
1263
1314
|
|
1264
1315
|
// If a string is given in between the array notation indicators, that
|
@@ -1358,11 +1409,21 @@
|
|
1358
1409
|
innerSrc = b.join('.');
|
1359
1410
|
|
1360
1411
|
// Traverse each entry in the array setting the properties requested
|
1361
|
-
|
1412
|
+
if ( $.isArray( val ) )
|
1362
1413
|
{
|
1363
|
-
|
1364
|
-
|
1365
|
-
|
1414
|
+
for ( var j=0, jLen=val.length ; j<jLen ; j++ )
|
1415
|
+
{
|
1416
|
+
o = {};
|
1417
|
+
setData( o, val[j], innerSrc );
|
1418
|
+
data[ a[i] ].push( o );
|
1419
|
+
}
|
1420
|
+
}
|
1421
|
+
else
|
1422
|
+
{
|
1423
|
+
// We've been asked to save data to an array, but it
|
1424
|
+
// isn't array data to be saved. Best that can be done
|
1425
|
+
// is to just save the value.
|
1426
|
+
data[ a[i] ] = val;
|
1366
1427
|
}
|
1367
1428
|
|
1368
1429
|
// The inner call to setData has already traversed through the remainder
|
@@ -1435,6 +1496,7 @@
|
|
1435
1496
|
settings.aoData.length = 0;
|
1436
1497
|
settings.aiDisplayMaster.length = 0;
|
1437
1498
|
settings.aiDisplay.length = 0;
|
1499
|
+
settings.aIds = {};
|
1438
1500
|
}
|
1439
1501
|
|
1440
1502
|
|
@@ -1540,7 +1602,7 @@
|
|
1540
1602
|
}
|
1541
1603
|
|
1542
1604
|
// Update DataTables special `DT_*` attributes for the row
|
1543
|
-
_fnRowAttributes( row );
|
1605
|
+
_fnRowAttributes( settings, row );
|
1544
1606
|
}
|
1545
1607
|
}
|
1546
1608
|
|
@@ -1572,7 +1634,11 @@
|
|
1572
1634
|
objectRead = settings._rowReadObject;
|
1573
1635
|
|
1574
1636
|
// Allow the data object to be passed in, or construct
|
1575
|
-
d = d
|
1637
|
+
d = d !== undefined ?
|
1638
|
+
d :
|
1639
|
+
objectRead ?
|
1640
|
+
{} :
|
1641
|
+
[];
|
1576
1642
|
|
1577
1643
|
var attr = function ( str, td ) {
|
1578
1644
|
if ( typeof str === 'string' ) {
|
@@ -1635,12 +1701,23 @@
|
|
1635
1701
|
else {
|
1636
1702
|
// Existing row object passed in
|
1637
1703
|
tds = row.anCells;
|
1638
|
-
|
1704
|
+
|
1639
1705
|
for ( var j=0, jen=tds.length ; j<jen ; j++ ) {
|
1640
1706
|
cellProcess( tds[j] );
|
1641
1707
|
}
|
1642
1708
|
}
|
1643
1709
|
|
1710
|
+
// Read the ID from the DOM if present
|
1711
|
+
var rowNode = row.firstChild ? row : row.nTr;
|
1712
|
+
|
1713
|
+
if ( rowNode ) {
|
1714
|
+
var id = rowNode.getAttribute( 'id' );
|
1715
|
+
|
1716
|
+
if ( id ) {
|
1717
|
+
_fnSetObjectDataFn( settings.rowId )( d, id );
|
1718
|
+
}
|
1719
|
+
}
|
1720
|
+
|
1644
1721
|
return {
|
1645
1722
|
data: d,
|
1646
1723
|
cells: tds
|
@@ -1678,7 +1755,7 @@
|
|
1678
1755
|
nTr._DT_RowIndex = iRow;
|
1679
1756
|
|
1680
1757
|
/* Special parameters can be given by the data source to be used on the row */
|
1681
|
-
_fnRowAttributes( row );
|
1758
|
+
_fnRowAttributes( oSettings, row );
|
1682
1759
|
|
1683
1760
|
/* Process each column */
|
1684
1761
|
for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
|
@@ -1686,6 +1763,11 @@
|
|
1686
1763
|
oCol = oSettings.aoColumns[i];
|
1687
1764
|
|
1688
1765
|
nTd = nTrIn ? anTds[i] : document.createElement( oCol.sCellType );
|
1766
|
+
nTd._DT_CellIndex = {
|
1767
|
+
row: iRow,
|
1768
|
+
column: i
|
1769
|
+
};
|
1770
|
+
|
1689
1771
|
cells.push( nTd );
|
1690
1772
|
|
1691
1773
|
// Need to create the HTML if new, or if a rendering function is defined
|
@@ -1730,17 +1812,20 @@
|
|
1730
1812
|
/**
|
1731
1813
|
* Add attributes to a row based on the special `DT_*` parameters in a data
|
1732
1814
|
* source object.
|
1815
|
+
* @param {object} settings DataTables settings object
|
1733
1816
|
* @param {object} DataTables row object for the row to be modified
|
1734
1817
|
* @memberof DataTable#oApi
|
1735
1818
|
*/
|
1736
|
-
function _fnRowAttributes( row )
|
1819
|
+
function _fnRowAttributes( settings, row )
|
1737
1820
|
{
|
1738
1821
|
var tr = row.nTr;
|
1739
1822
|
var data = row._aData;
|
1740
1823
|
|
1741
1824
|
if ( tr ) {
|
1742
|
-
|
1743
|
-
|
1825
|
+
var id = settings.rowIdFn( data );
|
1826
|
+
|
1827
|
+
if ( id ) {
|
1828
|
+
tr.id = id;
|
1744
1829
|
}
|
1745
1830
|
|
1746
1831
|
if ( data.DT_RowClass ) {
|
@@ -1805,7 +1890,7 @@
|
|
1805
1890
|
}
|
1806
1891
|
}
|
1807
1892
|
|
1808
|
-
if ( column.sTitle != cell.
|
1893
|
+
if ( column.sTitle != cell[0].innerHTML ) {
|
1809
1894
|
cell.html( column.sTitle );
|
1810
1895
|
}
|
1811
1896
|
|
@@ -2277,6 +2362,7 @@
|
|
2277
2362
|
|
2278
2363
|
/* Built our DOM structure - replace the holding div with what we want */
|
2279
2364
|
holding.replaceWith( insert );
|
2365
|
+
oSettings.nHolding = null;
|
2280
2366
|
}
|
2281
2367
|
|
2282
2368
|
|
@@ -2435,7 +2521,7 @@
|
|
2435
2521
|
var ajax = oSettings.ajax;
|
2436
2522
|
var instance = oSettings.oInstance;
|
2437
2523
|
var callback = function ( json ) {
|
2438
|
-
_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json] );
|
2524
|
+
_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );
|
2439
2525
|
fn( json );
|
2440
2526
|
};
|
2441
2527
|
|
@@ -2462,7 +2548,7 @@
|
|
2462
2548
|
"success": function (json) {
|
2463
2549
|
var error = json.error || json.sError;
|
2464
2550
|
if ( error ) {
|
2465
|
-
|
2551
|
+
_fnLog( oSettings, 0, error );
|
2466
2552
|
}
|
2467
2553
|
|
2468
2554
|
oSettings.json = json;
|
@@ -2472,13 +2558,15 @@
|
|
2472
2558
|
"cache": false,
|
2473
2559
|
"type": oSettings.sServerMethod,
|
2474
2560
|
"error": function (xhr, error, thrown) {
|
2475
|
-
var
|
2561
|
+
var ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );
|
2476
2562
|
|
2477
|
-
if (
|
2478
|
-
|
2479
|
-
|
2480
|
-
|
2481
|
-
|
2563
|
+
if ( $.inArray( true, ret ) === -1 ) {
|
2564
|
+
if ( error == "parsererror" ) {
|
2565
|
+
_fnLog( oSettings, 0, 'Invalid JSON response', 1 );
|
2566
|
+
}
|
2567
|
+
else if ( xhr.readyState === 4 ) {
|
2568
|
+
_fnLog( oSettings, 0, 'Ajax error', 7 );
|
2569
|
+
}
|
2482
2570
|
}
|
2483
2571
|
|
2484
2572
|
_fnProcessingDisplay( oSettings, false );
|
@@ -2907,7 +2995,7 @@
|
|
2907
2995
|
// So the array reference doesn't break set the results into the
|
2908
2996
|
// existing array
|
2909
2997
|
displayRows.length = 0;
|
2910
|
-
|
2998
|
+
$.merge( displayRows, rows );
|
2911
2999
|
}
|
2912
3000
|
}
|
2913
3001
|
|
@@ -3018,7 +3106,7 @@
|
|
3018
3106
|
*
|
3019
3107
|
* ^(?=.*?\bone\b)(?=.*?\btwo three\b)(?=.*?\bfour\b).*$
|
3020
3108
|
*/
|
3021
|
-
var a = $.map( search.match( /"[^"]+"|[^ ]+/g ) || '', function ( word ) {
|
3109
|
+
var a = $.map( search.match( /"[^"]+"|[^ ]+/g ) || [''], function ( word ) {
|
3022
3110
|
if ( word.charAt(0) === '"' ) {
|
3023
3111
|
var m = word.match( /^"(.*)"$/ );
|
3024
3112
|
word = m ? m[1] : word;
|
@@ -3263,6 +3351,7 @@
|
|
3263
3351
|
var i, iLen, iAjaxStart=settings.iInitDisplayStart;
|
3264
3352
|
var columns = settings.aoColumns, column;
|
3265
3353
|
var features = settings.oFeatures;
|
3354
|
+
var deferLoading = settings.bDeferLoading; // value modified by the draw
|
3266
3355
|
|
3267
3356
|
/* Ensure that the table data is fully initialised */
|
3268
3357
|
if ( ! settings.bInitialised ) {
|
@@ -3294,6 +3383,8 @@
|
|
3294
3383
|
}
|
3295
3384
|
}
|
3296
3385
|
|
3386
|
+
_fnCallbackFire( settings, null, 'preInit', [settings] );
|
3387
|
+
|
3297
3388
|
// If there is default sorting required - let's do it. The sort function
|
3298
3389
|
// will do the drawing for us. Otherwise we draw the table regardless of the
|
3299
3390
|
// Ajax source - this allows the table to look initialised for Ajax sourcing
|
@@ -3302,7 +3393,7 @@
|
|
3302
3393
|
|
3303
3394
|
// Server-side processing init complete is done by _fnAjaxUpdateDraw
|
3304
3395
|
var dataSrc = _fnDataSource( settings );
|
3305
|
-
if ( dataSrc != 'ssp' ) {
|
3396
|
+
if ( dataSrc != 'ssp' || deferLoading ) {
|
3306
3397
|
// if there is an ajax source load the data
|
3307
3398
|
if ( dataSrc == 'ajax' ) {
|
3308
3399
|
_fnBuildAjax( settings, [], function(json) {
|
@@ -3343,12 +3434,13 @@
|
|
3343
3434
|
{
|
3344
3435
|
settings._bInitComplete = true;
|
3345
3436
|
|
3346
|
-
//
|
3347
|
-
// sizing
|
3348
|
-
if ( json ) {
|
3437
|
+
// When data was added after the initialisation (data or Ajax) we need to
|
3438
|
+
// calculate the column sizing
|
3439
|
+
if ( json || settings.oInit.aaData ) {
|
3349
3440
|
_fnAdjustColumnSizing( settings );
|
3350
3441
|
}
|
3351
3442
|
|
3443
|
+
_fnCallbackFire( settings, null, 'plugin-init', [settings, json] );
|
3352
3444
|
_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );
|
3353
3445
|
}
|
3354
3446
|
|
@@ -3625,17 +3717,6 @@
|
|
3625
3717
|
return !s ? null : _fnStringToCss( s );
|
3626
3718
|
};
|
3627
3719
|
|
3628
|
-
// This is fairly messy, but with x scrolling enabled, if the table has a
|
3629
|
-
// width attribute, regardless of any width applied using the column width
|
3630
|
-
// options, the browser will shrink or grow the table as needed to fit into
|
3631
|
-
// that 100%. That would make the width options useless. So we remove it.
|
3632
|
-
// This is okay, under the assumption that width:100% is applied to the
|
3633
|
-
// table in CSS (it is in the default stylesheet) which will set the table
|
3634
|
-
// width as appropriate (the attribute and css behave differently...)
|
3635
|
-
if ( scroll.sX && table.attr('width') === '100%' ) {
|
3636
|
-
table.removeAttr('width');
|
3637
|
-
}
|
3638
|
-
|
3639
3720
|
if ( ! footer.length ) {
|
3640
3721
|
footer = null;
|
3641
3722
|
}
|
@@ -3685,8 +3766,8 @@
|
|
3685
3766
|
.append(
|
3686
3767
|
$(_div, { 'class': classes.sScrollBody } )
|
3687
3768
|
.css( {
|
3769
|
+
position: 'relative',
|
3688
3770
|
overflow: 'auto',
|
3689
|
-
height: size( scrollY ),
|
3690
3771
|
width: size( scrollX )
|
3691
3772
|
} )
|
3692
3773
|
.append( table )
|
@@ -3733,6 +3814,11 @@
|
|
3733
3814
|
} );
|
3734
3815
|
}
|
3735
3816
|
|
3817
|
+
$(scrollBody).css(
|
3818
|
+
scrollY && scroll.bCollapse ? 'max-height' : 'height',
|
3819
|
+
scrollY
|
3820
|
+
);
|
3821
|
+
|
3736
3822
|
settings.nScrollHead = scrollHead;
|
3737
3823
|
settings.nScrollBody = scrollBody;
|
3738
3824
|
settings.nScrollFoot = scrollFoot;
|
@@ -3805,6 +3891,20 @@
|
|
3805
3891
|
style.height = 0;
|
3806
3892
|
};
|
3807
3893
|
|
3894
|
+
// If the scrollbar visibility has changed from the last draw, we need to
|
3895
|
+
// adjust the column sizes as the table width will have changed to account
|
3896
|
+
// for the scrollbar
|
3897
|
+
var scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;
|
3898
|
+
|
3899
|
+
if ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {
|
3900
|
+
settings.scrollBarVis = scrollBarVis;
|
3901
|
+
_fnAdjustColumnSizing( settings );
|
3902
|
+
return; // adjust column sizing will call this function again
|
3903
|
+
}
|
3904
|
+
else {
|
3905
|
+
settings.scrollBarVis = scrollBarVis;
|
3906
|
+
}
|
3907
|
+
|
3808
3908
|
/*
|
3809
3909
|
* 1. Re-create the table inside the scrolling div
|
3810
3910
|
*/
|
@@ -3849,13 +3949,6 @@
|
|
3849
3949
|
}, footerSrcEls );
|
3850
3950
|
}
|
3851
3951
|
|
3852
|
-
// If scroll collapse is enabled, when we put the headers back into the body for sizing, we
|
3853
|
-
// will end up forcing the scrollbar to appear, making our measurements wrong for when we
|
3854
|
-
// then hide it (end of this function), so add the header height to the body scroller.
|
3855
|
-
if ( scroll.bCollapse && scrollY !== "" ) {
|
3856
|
-
divBodyStyle.height = (divBody[0].offsetHeight + header[0].offsetHeight)+"px";
|
3857
|
-
}
|
3858
|
-
|
3859
3952
|
// Size the table as a whole
|
3860
3953
|
sanityWidth = table.outerWidth();
|
3861
3954
|
if ( scrollX === "" ) {
|
@@ -3870,32 +3963,17 @@
|
|
3870
3963
|
) {
|
3871
3964
|
tableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);
|
3872
3965
|
}
|
3966
|
+
|
3967
|
+
// Recalculate the sanity width
|
3968
|
+
sanityWidth = table.outerWidth();
|
3873
3969
|
}
|
3874
|
-
else
|
3875
|
-
|
3876
|
-
|
3877
|
-
if ( scrollXInner !== "" ) {
|
3878
|
-
// x scroll inner has been given - use it
|
3879
|
-
tableStyle.width = _fnStringToCss(scrollXInner);
|
3880
|
-
}
|
3881
|
-
else if ( sanityWidth == divBody.width() && divBody.height() < table.height() ) {
|
3882
|
-
// There is y-scrolling - try to take account of the y scroll bar
|
3883
|
-
tableStyle.width = _fnStringToCss( sanityWidth-barWidth );
|
3884
|
-
if ( table.outerWidth() > sanityWidth-barWidth ) {
|
3885
|
-
// Not possible to take account of it
|
3886
|
-
tableStyle.width = _fnStringToCss( sanityWidth );
|
3887
|
-
}
|
3888
|
-
}
|
3889
|
-
else {
|
3890
|
-
// When all else fails
|
3891
|
-
tableStyle.width = _fnStringToCss( sanityWidth );
|
3892
|
-
}
|
3893
|
-
}
|
3970
|
+
else if ( scrollXInner !== "" ) {
|
3971
|
+
// legacy x scroll inner has been given - use it
|
3972
|
+
tableStyle.width = _fnStringToCss(scrollXInner);
|
3894
3973
|
|
3895
|
-
|
3896
|
-
|
3897
|
-
|
3898
|
-
sanityWidth = table.outerWidth();
|
3974
|
+
// Recalculate the sanity width
|
3975
|
+
sanityWidth = table.outerWidth();
|
3976
|
+
}
|
3899
3977
|
|
3900
3978
|
// Hidden header should have zero height, so remove padding and borders. Then
|
3901
3979
|
// set the width based on the real headers
|
@@ -4003,18 +4081,6 @@
|
|
4003
4081
|
}
|
4004
4082
|
}
|
4005
4083
|
|
4006
|
-
if ( scrollY && scroll.bCollapse ) {
|
4007
|
-
divBodyStyle.height = _fnStringToCss( scrollY );
|
4008
|
-
|
4009
|
-
var iExtra = (scrollX && tableEl.offsetWidth > divBodyEl.offsetWidth) ?
|
4010
|
-
barWidth :
|
4011
|
-
0;
|
4012
|
-
|
4013
|
-
if ( tableEl.offsetHeight < divBodyEl.offsetHeight ) {
|
4014
|
-
divBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+iExtra );
|
4015
|
-
}
|
4016
|
-
}
|
4017
|
-
|
4018
4084
|
/* Finally set the width's of the header and footer tables */
|
4019
4085
|
var iOuterWidth = table.outerWidth();
|
4020
4086
|
divHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );
|
@@ -4106,7 +4172,9 @@
|
|
4106
4172
|
tableWidthAttr = table.getAttribute('width'), // from DOM element
|
4107
4173
|
tableContainer = table.parentNode,
|
4108
4174
|
userInputs = false,
|
4109
|
-
i, column, columnIdx, width, outerWidth
|
4175
|
+
i, column, columnIdx, width, outerWidth,
|
4176
|
+
browser = oSettings.oBrowser,
|
4177
|
+
ie67 = browser.bScrollOversize;
|
4110
4178
|
|
4111
4179
|
var styleWidth = table.style.width;
|
4112
4180
|
if ( styleWidth && styleWidth.indexOf('%') !== -1 ) {
|
@@ -4129,32 +4197,43 @@
|
|
4129
4197
|
* the web- browser. No custom sizes can be set in order for this to happen,
|
4130
4198
|
* nor scrolling used
|
4131
4199
|
*/
|
4132
|
-
if ( ! userInputs && ! scrollX && ! scrollY &&
|
4133
|
-
|
4134
|
-
|
4200
|
+
if ( ie67 || ! userInputs && ! scrollX && ! scrollY &&
|
4201
|
+
columnCount == _fnVisbleColumns( oSettings ) &&
|
4202
|
+
columnCount == headerCells.length
|
4135
4203
|
) {
|
4136
4204
|
for ( i=0 ; i<columnCount ; i++ ) {
|
4137
|
-
|
4205
|
+
var colIdx = _fnVisibleToColumnIndex( oSettings, i );
|
4206
|
+
|
4207
|
+
if ( colIdx !== null ) {
|
4208
|
+
columns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );
|
4209
|
+
}
|
4138
4210
|
}
|
4139
4211
|
}
|
4140
4212
|
else
|
4141
4213
|
{
|
4142
|
-
// Otherwise construct a single row table with the widest
|
4143
|
-
// data, assign any user defined widths, then insert it into
|
4144
|
-
// allow the browser to do all the hard work of calculating
|
4214
|
+
// Otherwise construct a single row, worst case, table with the widest
|
4215
|
+
// node in the data, assign any user defined widths, then insert it into
|
4216
|
+
// the DOM and allow the browser to do all the hard work of calculating
|
4217
|
+
// table widths
|
4145
4218
|
var tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table
|
4146
|
-
.empty()
|
4147
4219
|
.css( 'visibility', 'hidden' )
|
4148
|
-
.removeAttr( 'id' )
|
4149
|
-
|
4150
|
-
|
4151
|
-
|
4220
|
+
.removeAttr( 'id' );
|
4221
|
+
|
4222
|
+
// Clean up the table body
|
4223
|
+
tmpTable.find('tbody tr').remove();
|
4224
|
+
var tr = $('<tr/>').appendTo( tmpTable.find('tbody') );
|
4225
|
+
|
4226
|
+
// Clone the table header and footer - we can't use the header / footer
|
4227
|
+
// from the cloned table, since if scrolling is active, the table's
|
4228
|
+
// real header and footer are contained in different table tags
|
4229
|
+
tmpTable.find('thead, tfoot').remove();
|
4230
|
+
tmpTable
|
4231
|
+
.append( $(oSettings.nTHead).clone() )
|
4232
|
+
.append( $(oSettings.nTFoot).clone() );
|
4152
4233
|
|
4153
4234
|
// Remove any assigned widths from the footer (from scrolling)
|
4154
4235
|
tmpTable.find('tfoot th, tfoot td').css('width', '');
|
4155
4236
|
|
4156
|
-
var tr = tmpTable.find( 'tbody tr' );
|
4157
|
-
|
4158
4237
|
// Apply custom sizing to the cloned header
|
4159
4238
|
headerCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );
|
4160
4239
|
|
@@ -4164,6 +4243,19 @@
|
|
4164
4243
|
headerCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?
|
4165
4244
|
_fnStringToCss( column.sWidthOrig ) :
|
4166
4245
|
'';
|
4246
|
+
|
4247
|
+
// For scrollX we need to force the column width otherwise the
|
4248
|
+
// browser will collapse it. If this width is smaller than the
|
4249
|
+
// width the column requires, then it will have no effect
|
4250
|
+
if ( column.sWidthOrig && scrollX ) {
|
4251
|
+
$( headerCells[i] ).append( $('<div/>').css( {
|
4252
|
+
width: column.sWidthOrig,
|
4253
|
+
margin: 0,
|
4254
|
+
padding: 0,
|
4255
|
+
border: 0,
|
4256
|
+
height: 1
|
4257
|
+
} ) );
|
4258
|
+
}
|
4167
4259
|
}
|
4168
4260
|
|
4169
4261
|
// Find the widest cell for each column and put it into the table
|
@@ -4179,8 +4271,24 @@
|
|
4179
4271
|
}
|
4180
4272
|
}
|
4181
4273
|
|
4182
|
-
// Table has been built, attach to the document so we can work with it
|
4183
|
-
|
4274
|
+
// Table has been built, attach to the document so we can work with it.
|
4275
|
+
// A holding element is used, positioned at the top of the container
|
4276
|
+
// with minimal height, so it has no effect on if the container scrolls
|
4277
|
+
// or not. Otherwise it might trigger scrolling when it actually isn't
|
4278
|
+
// needed
|
4279
|
+
var holder = $('<div/>').css( scrollX || scrollY ?
|
4280
|
+
{
|
4281
|
+
position: 'absolute',
|
4282
|
+
top: 0,
|
4283
|
+
left: 0,
|
4284
|
+
height: 1,
|
4285
|
+
right: 0,
|
4286
|
+
overflow: 'hidden'
|
4287
|
+
} :
|
4288
|
+
{}
|
4289
|
+
)
|
4290
|
+
.append( tmpTable )
|
4291
|
+
.appendTo( tableContainer );
|
4184
4292
|
|
4185
4293
|
// When scrolling (X or Y) we want to set the width of the table as
|
4186
4294
|
// appropriate. However, when not scrolling leave the table width as it
|
@@ -4190,57 +4298,50 @@
|
|
4190
4298
|
}
|
4191
4299
|
else if ( scrollX ) {
|
4192
4300
|
tmpTable.css( 'width', 'auto' );
|
4301
|
+
tmpTable.removeAttr('width');
|
4193
4302
|
|
4194
|
-
|
4195
|
-
|
4303
|
+
// If there is no width attribute or style, then allow the table to
|
4304
|
+
// collapse
|
4305
|
+
if ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {
|
4306
|
+
tmpTable.width( tableContainer.clientWidth );
|
4196
4307
|
}
|
4197
4308
|
}
|
4198
4309
|
else if ( scrollY ) {
|
4199
|
-
tmpTable.width( tableContainer.
|
4310
|
+
tmpTable.width( tableContainer.clientWidth );
|
4200
4311
|
}
|
4201
4312
|
else if ( tableWidthAttr ) {
|
4202
4313
|
tmpTable.width( tableWidthAttr );
|
4203
4314
|
}
|
4204
4315
|
|
4205
|
-
//
|
4206
|
-
|
4207
|
-
|
4208
|
-
//
|
4209
|
-
//
|
4210
|
-
//
|
4211
|
-
|
4212
|
-
|
4213
|
-
|
4214
|
-
|
4215
|
-
var total = 0;
|
4216
|
-
|
4217
|
-
for ( i=0 ; i<visibleColumns.length ; i++ ) {
|
4218
|
-
column = columns[ visibleColumns[i] ];
|
4219
|
-
outerWidth = $(headerCells[i]).outerWidth();
|
4220
|
-
|
4221
|
-
total += column.sWidthOrig === null ?
|
4222
|
-
outerWidth :
|
4223
|
-
parseInt( column.sWidth, 10 ) + outerWidth - $(headerCells[i]).width();
|
4224
|
-
}
|
4316
|
+
// Get the width of each column in the constructed table - we need to
|
4317
|
+
// know the inner width (so it can be assigned to the other table's
|
4318
|
+
// cells) and the outer width so we can calculate the full width of the
|
4319
|
+
// table. This is safe since DataTables requires a unique cell for each
|
4320
|
+
// column, but if ever a header can span multiple columns, this will
|
4321
|
+
// need to be modified.
|
4322
|
+
var total = 0;
|
4323
|
+
for ( i=0 ; i<visibleColumns.length ; i++ ) {
|
4324
|
+
var cell = $(headerCells[i]);
|
4325
|
+
var border = cell.outerWidth() - cell.width();
|
4225
4326
|
|
4226
|
-
|
4227
|
-
|
4228
|
-
|
4327
|
+
// Use getBounding... where possible (not IE8-) because it can give
|
4328
|
+
// sub-pixel accuracy, which we then want to round up!
|
4329
|
+
var bounding = browser.bBounding ?
|
4330
|
+
Math.ceil( headerCells[i].getBoundingClientRect().width ) :
|
4331
|
+
cell.outerWidth();
|
4229
4332
|
|
4230
|
-
|
4231
|
-
|
4232
|
-
|
4233
|
-
width = $(headerCells[i]).width();
|
4333
|
+
// Total is tracked to remove any sub-pixel errors as the outerWidth
|
4334
|
+
// of the table might not equal the total given here (IE!).
|
4335
|
+
total += bounding;
|
4234
4336
|
|
4235
|
-
|
4236
|
-
|
4237
|
-
}
|
4337
|
+
// Width for each column to use
|
4338
|
+
columns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );
|
4238
4339
|
}
|
4239
4340
|
|
4240
|
-
table.style.width = _fnStringToCss(
|
4341
|
+
table.style.width = _fnStringToCss( total );
|
4241
4342
|
|
4242
4343
|
// Finished with the table - ditch it
|
4243
|
-
|
4344
|
+
holder.remove();
|
4244
4345
|
}
|
4245
4346
|
|
4246
4347
|
// If there is a width attr, we want to attach an event listener which
|
@@ -4252,9 +4353,20 @@
|
|
4252
4353
|
}
|
4253
4354
|
|
4254
4355
|
if ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {
|
4255
|
-
|
4256
|
-
|
4257
|
-
|
4356
|
+
var bindResize = function () {
|
4357
|
+
$(window).bind('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {
|
4358
|
+
_fnAdjustColumnSizing( oSettings );
|
4359
|
+
} ) );
|
4360
|
+
};
|
4361
|
+
|
4362
|
+
// IE6/7 will crash if we bind a resize event handler on page load.
|
4363
|
+
// To be removed in 1.11 which drops IE6/7 support
|
4364
|
+
if ( ie67 ) {
|
4365
|
+
setTimeout( bindResize, 1000 );
|
4366
|
+
}
|
4367
|
+
else {
|
4368
|
+
bindResize();
|
4369
|
+
}
|
4258
4370
|
|
4259
4371
|
oSettings._reszEvt = true;
|
4260
4372
|
}
|
@@ -4321,27 +4433,6 @@
|
|
4321
4433
|
}
|
4322
4434
|
|
4323
4435
|
|
4324
|
-
/**
|
4325
|
-
* Adjust a table's width to take account of vertical scroll bar
|
4326
|
-
* @param {object} oSettings dataTables settings object
|
4327
|
-
* @param {node} n table node
|
4328
|
-
* @memberof DataTable#oApi
|
4329
|
-
*/
|
4330
|
-
|
4331
|
-
function _fnScrollingWidthAdjust ( settings, n )
|
4332
|
-
{
|
4333
|
-
var scroll = settings.oScroll;
|
4334
|
-
|
4335
|
-
if ( scroll.sX || scroll.sY ) {
|
4336
|
-
// When y-scrolling only, we want to remove the width of the scroll bar
|
4337
|
-
// so the table + scroll bar will fit into the area available, otherwise
|
4338
|
-
// we fix the table at its current size with no adjustment
|
4339
|
-
var correction = ! scroll.sX ? scroll.iBarWidth : 0;
|
4340
|
-
n.style.width = _fnStringToCss( $(n).outerWidth() - correction );
|
4341
|
-
}
|
4342
|
-
}
|
4343
|
-
|
4344
|
-
|
4345
4436
|
/**
|
4346
4437
|
* Get the widest node
|
4347
4438
|
* @param {object} settings dataTables settings object
|
@@ -4377,6 +4468,7 @@
|
|
4377
4468
|
for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
|
4378
4469
|
s = _fnGetCellData( settings, i, colIdx, 'display' )+'';
|
4379
4470
|
s = s.replace( __re_html_remove, '' );
|
4471
|
+
s = s.replace( / /g, ' ' );
|
4380
4472
|
|
4381
4473
|
if ( s.length > max ) {
|
4382
4474
|
max = s.length;
|
@@ -4413,40 +4505,6 @@
|
|
4413
4505
|
}
|
4414
4506
|
|
4415
4507
|
|
4416
|
-
/**
|
4417
|
-
* Get the width of a scroll bar in this browser being used
|
4418
|
-
* @returns {int} width in pixels
|
4419
|
-
* @memberof DataTable#oApi
|
4420
|
-
*/
|
4421
|
-
function _fnScrollBarWidth ()
|
4422
|
-
{
|
4423
|
-
// On first run a static variable is set, since this is only needed once.
|
4424
|
-
// Subsequent runs will just use the previously calculated value
|
4425
|
-
var width = DataTable.__scrollbarWidth;
|
4426
|
-
|
4427
|
-
if ( width === undefined ) {
|
4428
|
-
var sizer = $('<p/>').css( {
|
4429
|
-
position: 'absolute',
|
4430
|
-
top: 0,
|
4431
|
-
left: 0,
|
4432
|
-
width: '100%',
|
4433
|
-
height: 150,
|
4434
|
-
padding: 0,
|
4435
|
-
overflow: 'scroll',
|
4436
|
-
visibility: 'hidden'
|
4437
|
-
} )
|
4438
|
-
.appendTo('body');
|
4439
|
-
|
4440
|
-
width = sizer[0].offsetWidth - sizer[0].clientWidth;
|
4441
|
-
DataTable.__scrollbarWidth = width;
|
4442
|
-
|
4443
|
-
sizer.remove();
|
4444
|
-
}
|
4445
|
-
|
4446
|
-
return width;
|
4447
|
-
}
|
4448
|
-
|
4449
|
-
|
4450
4508
|
|
4451
4509
|
function _fnSortFlatten ( settings )
|
4452
4510
|
{
|
@@ -4466,7 +4524,7 @@
|
|
4466
4524
|
}
|
4467
4525
|
else {
|
4468
4526
|
// 2D array
|
4469
|
-
|
4527
|
+
$.merge( nestedSort, a );
|
4470
4528
|
}
|
4471
4529
|
};
|
4472
4530
|
|
@@ -5043,7 +5101,7 @@
|
|
5043
5101
|
function _fnLog( settings, level, msg, tn )
|
5044
5102
|
{
|
5045
5103
|
msg = 'DataTables warning: '+
|
5046
|
-
(settings
|
5104
|
+
(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;
|
5047
5105
|
|
5048
5106
|
if ( tn ) {
|
5049
5107
|
msg += '. For more information about this error, please see '+
|
@@ -5055,7 +5113,9 @@
|
|
5055
5113
|
var ext = DataTable.ext;
|
5056
5114
|
var type = ext.sErrMode || ext.errMode;
|
5057
5115
|
|
5058
|
-
|
5116
|
+
if ( settings ) {
|
5117
|
+
_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );
|
5118
|
+
}
|
5059
5119
|
|
5060
5120
|
if ( type == 'alert' ) {
|
5061
5121
|
alert( msg );
|
@@ -5208,13 +5268,13 @@
|
|
5208
5268
|
* @param {object} settings dataTables settings object
|
5209
5269
|
* @param {string} callbackArr Name of the array storage for the callbacks in
|
5210
5270
|
* oSettings
|
5211
|
-
* @param {string}
|
5212
|
-
* trigger is fired
|
5271
|
+
* @param {string} eventName Name of the jQuery custom event to trigger. If
|
5272
|
+
* null no trigger is fired
|
5213
5273
|
* @param {array} args Array of arguments to pass to the callback function /
|
5214
5274
|
* trigger
|
5215
5275
|
* @memberof DataTable#oApi
|
5216
5276
|
*/
|
5217
|
-
function _fnCallbackFire( settings, callbackArr,
|
5277
|
+
function _fnCallbackFire( settings, callbackArr, eventName, args )
|
5218
5278
|
{
|
5219
5279
|
var ret = [];
|
5220
5280
|
|
@@ -5224,8 +5284,12 @@
|
|
5224
5284
|
} );
|
5225
5285
|
}
|
5226
5286
|
|
5227
|
-
if (
|
5228
|
-
|
5287
|
+
if ( eventName !== null ) {
|
5288
|
+
var e = $.Event( eventName+'.dt' );
|
5289
|
+
|
5290
|
+
$(settings.nTable).trigger( e, args );
|
5291
|
+
|
5292
|
+
ret.push( e.result );
|
5229
5293
|
}
|
5230
5294
|
|
5231
5295
|
return ret;
|
@@ -6226,6 +6290,7 @@
|
|
6226
6290
|
"fnStateSaveCallback",
|
6227
6291
|
"renderer",
|
6228
6292
|
"searchDelay",
|
6293
|
+
"rowId",
|
6229
6294
|
[ "iCookieDuration", "iStateDuration" ], // backwards compat
|
6230
6295
|
[ "oSearch", "oPreviousSearch" ],
|
6231
6296
|
[ "aoSearchCols", "aoPreSearchCols" ],
|
@@ -6253,6 +6318,11 @@
|
|
6253
6318
|
_fnCallbackReg( oSettings, 'aoInitComplete', oInit.fnInitComplete, 'user' );
|
6254
6319
|
_fnCallbackReg( oSettings, 'aoPreDrawCallback', oInit.fnPreDrawCallback, 'user' );
|
6255
6320
|
|
6321
|
+
oSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );
|
6322
|
+
|
6323
|
+
/* Browser support detection */
|
6324
|
+
_fnBrowserDetect( oSettings );
|
6325
|
+
|
6256
6326
|
var oClasses = oSettings.oClasses;
|
6257
6327
|
|
6258
6328
|
// @todo Remove in 1.11
|
@@ -6282,14 +6352,6 @@
|
|
6282
6352
|
}
|
6283
6353
|
$this.addClass( oClasses.sTable );
|
6284
6354
|
|
6285
|
-
/* Calculate the scroll bar width and cache it for use later on */
|
6286
|
-
if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" )
|
6287
|
-
{
|
6288
|
-
oSettings.oScroll.iBarWidth = _fnScrollBarWidth();
|
6289
|
-
}
|
6290
|
-
if ( oSettings.oScroll.sX === true ) { // Easy initialisation of x-scrolling
|
6291
|
-
oSettings.oScroll.sX = '100%';
|
6292
|
-
}
|
6293
6355
|
|
6294
6356
|
if ( oSettings.iInitDisplayStart === undefined )
|
6295
6357
|
{
|
@@ -6400,7 +6462,7 @@
|
|
6400
6462
|
return cell.getAttribute( 'data-'+name ) !== null ? name : null;
|
6401
6463
|
};
|
6402
6464
|
|
6403
|
-
|
6465
|
+
$( rowOne[0] ).children('th, td').each( function (i, cell) {
|
6404
6466
|
var col = oSettings.aoColumns[i];
|
6405
6467
|
|
6406
6468
|
if ( col.mData === i ) {
|
@@ -6482,9 +6544,6 @@
|
|
6482
6544
|
* Cache the header, body and footer as required, creating them if needed
|
6483
6545
|
*/
|
6484
6546
|
|
6485
|
-
/* Browser support detection */
|
6486
|
-
_fnBrowserDetect( oSettings );
|
6487
|
-
|
6488
6547
|
// Work around for Webkit bug 83867 - store the caption-side before removing from doc
|
6489
6548
|
var captions = $this.children('caption').each( function () {
|
6490
6549
|
this._captionSide = $this.css('caption-side');
|
@@ -6722,17 +6781,15 @@
|
|
6722
6781
|
*/
|
6723
6782
|
_Api = function ( context, data )
|
6724
6783
|
{
|
6725
|
-
if ( ! this instanceof _Api ) {
|
6726
|
-
|
6727
|
-
// or should it do the 'new' for the caller?
|
6728
|
-
// return new _Api.apply( this, arguments );
|
6784
|
+
if ( ! (this instanceof _Api) ) {
|
6785
|
+
return new _Api( context, data );
|
6729
6786
|
}
|
6730
6787
|
|
6731
6788
|
var settings = [];
|
6732
6789
|
var ctxSettings = function ( o ) {
|
6733
6790
|
var a = _toSettings( o );
|
6734
6791
|
if ( a ) {
|
6735
|
-
settings.
|
6792
|
+
settings = settings.concat( a );
|
6736
6793
|
}
|
6737
6794
|
};
|
6738
6795
|
|
@@ -6750,7 +6807,7 @@
|
|
6750
6807
|
|
6751
6808
|
// Initial data
|
6752
6809
|
if ( data ) {
|
6753
|
-
|
6810
|
+
$.merge( this, data );
|
6754
6811
|
}
|
6755
6812
|
|
6756
6813
|
// selector
|
@@ -6765,25 +6822,27 @@
|
|
6765
6822
|
|
6766
6823
|
DataTable.Api = _Api;
|
6767
6824
|
|
6768
|
-
|
6769
|
-
|
6770
|
-
|
6771
|
-
|
6772
|
-
|
6773
|
-
|
6774
|
-
|
6775
|
-
|
6776
|
-
|
6777
|
-
* @param {*} [...] Additional arrays and/or values to concatenate.
|
6778
|
-
* @returns {DataTables.Api} New API instance, comprising of the combined
|
6779
|
-
* array.
|
6780
|
-
*/
|
6825
|
+
// Don't destroy the existing prototype, just extend it. Required for jQuery 2's
|
6826
|
+
// isPlainObject.
|
6827
|
+
$.extend( _Api.prototype, {
|
6828
|
+
any: function ()
|
6829
|
+
{
|
6830
|
+
return this.count() !== 0;
|
6831
|
+
},
|
6832
|
+
|
6833
|
+
|
6781
6834
|
concat: __arrayProto.concat,
|
6782
6835
|
|
6783
6836
|
|
6784
6837
|
context: [], // array of table settings objects
|
6785
6838
|
|
6786
6839
|
|
6840
|
+
count: function ()
|
6841
|
+
{
|
6842
|
+
return this.flatten().length;
|
6843
|
+
},
|
6844
|
+
|
6845
|
+
|
6787
6846
|
each: function ( fn )
|
6788
6847
|
{
|
6789
6848
|
for ( var i=0, ien=this.length ; i<ien; i++ ) {
|
@@ -6844,7 +6903,6 @@
|
|
6844
6903
|
return -1;
|
6845
6904
|
},
|
6846
6905
|
|
6847
|
-
// Note that `alwaysNew` is internal - use iteratorNew externally
|
6848
6906
|
iterator: function ( flatten, type, fn, alwaysNew ) {
|
6849
6907
|
var
|
6850
6908
|
a = [], ret,
|
@@ -7012,7 +7070,7 @@
|
|
7012
7070
|
|
7013
7071
|
|
7014
7072
|
unshift: __arrayProto.unshift
|
7015
|
-
};
|
7073
|
+
} );
|
7016
7074
|
|
7017
7075
|
|
7018
7076
|
_Api.extend = function ( scope, obj, ext )
|
@@ -7267,15 +7325,21 @@
|
|
7267
7325
|
|
7268
7326
|
/**
|
7269
7327
|
* Redraw the tables in the current context.
|
7270
|
-
*
|
7271
|
-
* @param {boolean} [reset=true] Reset (default) or hold the current paging
|
7272
|
-
* position. A full re-sort and re-filter is performed when this method is
|
7273
|
-
* called, which is why the pagination reset is the default action.
|
7274
|
-
* @returns {DataTables.Api} this
|
7275
7328
|
*/
|
7276
|
-
_api_register( 'draw()', function (
|
7329
|
+
_api_register( 'draw()', function ( paging ) {
|
7277
7330
|
return this.iterator( 'table', function ( settings ) {
|
7278
|
-
|
7331
|
+
if ( paging === 'page' ) {
|
7332
|
+
_fnDraw( settings );
|
7333
|
+
}
|
7334
|
+
else {
|
7335
|
+
if ( typeof paging === 'string' ) {
|
7336
|
+
paging = paging === 'full-hold' ?
|
7337
|
+
false :
|
7338
|
+
true;
|
7339
|
+
}
|
7340
|
+
|
7341
|
+
_fnReDraw( settings, paging===false );
|
7342
|
+
}
|
7279
7343
|
} );
|
7280
7344
|
} );
|
7281
7345
|
|
@@ -7338,7 +7402,7 @@
|
|
7338
7402
|
var
|
7339
7403
|
settings = this.context[0],
|
7340
7404
|
start = settings._iDisplayStart,
|
7341
|
-
len = settings._iDisplayLength,
|
7405
|
+
len = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,
|
7342
7406
|
visRecords = settings.fnRecordsDisplay(),
|
7343
7407
|
all = len === -1;
|
7344
7408
|
|
@@ -7349,7 +7413,8 @@
|
|
7349
7413
|
"end": settings.fnDisplayEnd(),
|
7350
7414
|
"length": len,
|
7351
7415
|
"recordsTotal": settings.fnRecordsTotal(),
|
7352
|
-
"recordsDisplay": visRecords
|
7416
|
+
"recordsDisplay": visRecords,
|
7417
|
+
"serverSide": _fnDataSource( settings ) === 'ssp'
|
7353
7418
|
};
|
7354
7419
|
} );
|
7355
7420
|
|
@@ -7397,9 +7462,15 @@
|
|
7397
7462
|
_fnReDraw( settings, holdPosition );
|
7398
7463
|
}
|
7399
7464
|
else {
|
7400
|
-
// Trigger xhr
|
7401
7465
|
_fnProcessingDisplay( settings, true );
|
7402
7466
|
|
7467
|
+
// Cancel an existing request
|
7468
|
+
var xhr = settings.jqXHR;
|
7469
|
+
if ( xhr && xhr.readyState !== 4 ) {
|
7470
|
+
xhr.abort();
|
7471
|
+
}
|
7472
|
+
|
7473
|
+
// Trigger xhr
|
7403
7474
|
_fnBuildAjax( settings, [], function( json ) {
|
7404
7475
|
_fnClearTable( settings );
|
7405
7476
|
|
@@ -7527,7 +7598,7 @@
|
|
7527
7598
|
|
7528
7599
|
|
7529
7600
|
|
7530
|
-
var _selector_run = function ( selector,
|
7601
|
+
var _selector_run = function ( type, selector, selectFn, settings, opts )
|
7531
7602
|
{
|
7532
7603
|
var
|
7533
7604
|
out = [], res,
|
@@ -7546,15 +7617,23 @@
|
|
7546
7617
|
[ selector[i] ];
|
7547
7618
|
|
7548
7619
|
for ( j=0, jen=a.length ; j<jen ; j++ ) {
|
7549
|
-
res =
|
7620
|
+
res = selectFn( typeof a[j] === 'string' ? $.trim(a[j]) : a[j] );
|
7550
7621
|
|
7551
7622
|
if ( res && res.length ) {
|
7552
|
-
out.
|
7623
|
+
out = out.concat( res );
|
7553
7624
|
}
|
7554
7625
|
}
|
7555
7626
|
}
|
7556
7627
|
|
7557
|
-
|
7628
|
+
// selector extensions
|
7629
|
+
var ext = _ext.selector[ type ];
|
7630
|
+
if ( ext.length ) {
|
7631
|
+
for ( i=0, ien=ext.length ; i<ien ; i++ ) {
|
7632
|
+
out = ext[i]( settings, opts, out );
|
7633
|
+
}
|
7634
|
+
}
|
7635
|
+
|
7636
|
+
return _unique( out );
|
7558
7637
|
};
|
7559
7638
|
|
7560
7639
|
|
@@ -7566,15 +7645,15 @@
|
|
7566
7645
|
|
7567
7646
|
// Backwards compatibility for 1.9- which used the terminology filter rather
|
7568
7647
|
// than search
|
7569
|
-
if ( opts.filter &&
|
7648
|
+
if ( opts.filter && opts.search === undefined ) {
|
7570
7649
|
opts.search = opts.filter;
|
7571
7650
|
}
|
7572
7651
|
|
7573
|
-
return {
|
7574
|
-
search:
|
7575
|
-
order:
|
7576
|
-
page:
|
7577
|
-
};
|
7652
|
+
return $.extend( {
|
7653
|
+
search: 'none',
|
7654
|
+
order: 'current',
|
7655
|
+
page: 'all'
|
7656
|
+
}, opts );
|
7578
7657
|
};
|
7579
7658
|
|
7580
7659
|
|
@@ -7586,6 +7665,7 @@
|
|
7586
7665
|
// Assign the first element to the first item in the instance
|
7587
7666
|
// and truncate the instance and context
|
7588
7667
|
inst[0] = inst[i];
|
7668
|
+
inst[0].length = 1;
|
7589
7669
|
inst.length = 1;
|
7590
7670
|
inst.context = [ inst.context[i] ];
|
7591
7671
|
|
@@ -7672,7 +7752,7 @@
|
|
7672
7752
|
|
7673
7753
|
var __row_selector = function ( settings, selector, opts )
|
7674
7754
|
{
|
7675
|
-
|
7755
|
+
var run = function ( sel ) {
|
7676
7756
|
var selInt = _intVal( sel );
|
7677
7757
|
var i, ien;
|
7678
7758
|
|
@@ -7715,6 +7795,26 @@
|
|
7715
7795
|
}
|
7716
7796
|
}
|
7717
7797
|
|
7798
|
+
// ID selector. Want to always be able to select rows by id, regardless
|
7799
|
+
// of if the tr element has been created or not, so can't rely upon
|
7800
|
+
// jQuery here - hence a custom implementation. This does not match
|
7801
|
+
// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,
|
7802
|
+
// but to select it using a CSS selector engine (like Sizzle or
|
7803
|
+
// querySelect) it would need to need to be escaped for some characters.
|
7804
|
+
// DataTables simplifies this for row selectors since you can select
|
7805
|
+
// only a row. A # indicates an id any anything that follows is the id -
|
7806
|
+
// unescaped.
|
7807
|
+
if ( typeof sel === 'string' && sel.charAt(0) === '#' ) {
|
7808
|
+
// get row index from id
|
7809
|
+
var rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];
|
7810
|
+
if ( rowObj !== undefined ) {
|
7811
|
+
return [ rowObj.idx ];
|
7812
|
+
}
|
7813
|
+
|
7814
|
+
// need to fall through to jQuery in case there is DOM id that
|
7815
|
+
// matches
|
7816
|
+
}
|
7817
|
+
|
7718
7818
|
// Selector - jQuery selector string, array of nodes or jQuery object/
|
7719
7819
|
// As jQuery's .filter() allows jQuery objects to be passed in filter,
|
7720
7820
|
// it also allows arrays, so this will cope with all three options
|
@@ -7724,7 +7824,9 @@
|
|
7724
7824
|
return this._DT_RowIndex;
|
7725
7825
|
} )
|
7726
7826
|
.toArray();
|
7727
|
-
}
|
7827
|
+
};
|
7828
|
+
|
7829
|
+
return _selector_run( 'row', selector, run, settings, opts );
|
7728
7830
|
};
|
7729
7831
|
|
7730
7832
|
|
@@ -7782,23 +7884,49 @@
|
|
7782
7884
|
}, 1 );
|
7783
7885
|
} );
|
7784
7886
|
|
7887
|
+
_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {
|
7888
|
+
var a = [];
|
7889
|
+
var context = this.context;
|
7890
|
+
|
7891
|
+
// `iterator` will drop undefined values, but in this case we want them
|
7892
|
+
for ( var i=0, ien=context.length ; i<ien ; i++ ) {
|
7893
|
+
for ( var j=0, jen=this[i].length ; j<jen ; j++ ) {
|
7894
|
+
var id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );
|
7895
|
+
a.push( (hash === true ? '#' : '' )+ id );
|
7896
|
+
}
|
7897
|
+
}
|
7898
|
+
|
7899
|
+
return new _Api( context, a );
|
7900
|
+
} );
|
7901
|
+
|
7785
7902
|
_api_registerPlural( 'rows().remove()', 'row().remove()', function () {
|
7786
7903
|
var that = this;
|
7787
7904
|
|
7788
|
-
|
7905
|
+
this.iterator( 'row', function ( settings, row, thatIdx ) {
|
7789
7906
|
var data = settings.aoData;
|
7907
|
+
var rowData = data[ row ];
|
7908
|
+
var i, ien, j, jen;
|
7909
|
+
var loopRow, loopCells;
|
7790
7910
|
|
7791
7911
|
data.splice( row, 1 );
|
7792
7912
|
|
7793
|
-
// Update the
|
7794
|
-
for (
|
7795
|
-
|
7796
|
-
|
7913
|
+
// Update the cached indexes
|
7914
|
+
for ( i=0, ien=data.length ; i<ien ; i++ ) {
|
7915
|
+
loopRow = data[i];
|
7916
|
+
loopCells = loopRow.anCells;
|
7917
|
+
|
7918
|
+
// Rows
|
7919
|
+
if ( loopRow.nTr !== null ) {
|
7920
|
+
loopRow.nTr._DT_RowIndex = i;
|
7797
7921
|
}
|
7798
|
-
}
|
7799
7922
|
|
7800
|
-
|
7801
|
-
|
7923
|
+
// Cells
|
7924
|
+
if ( loopCells !== null ) {
|
7925
|
+
for ( j=0, jen=loopCells.length ; j<jen ; j++ ) {
|
7926
|
+
loopCells[j]._DT_CellIndex.row = i;
|
7927
|
+
}
|
7928
|
+
}
|
7929
|
+
}
|
7802
7930
|
|
7803
7931
|
// Delete from the display arrays
|
7804
7932
|
_fnDeleteIndex( settings.aiDisplayMaster, row );
|
@@ -7807,7 +7935,21 @@
|
|
7807
7935
|
|
7808
7936
|
// Check for an 'overflow' they case for displaying the table
|
7809
7937
|
_fnLengthOverflow( settings );
|
7938
|
+
|
7939
|
+
// Remove the row's ID reference if there is one
|
7940
|
+
var id = settings.rowIdFn( rowData._aData );
|
7941
|
+
if ( id !== undefined ) {
|
7942
|
+
delete settings.aIds[ id ];
|
7943
|
+
}
|
7810
7944
|
} );
|
7945
|
+
|
7946
|
+
this.iterator( 'table', function ( settings ) {
|
7947
|
+
for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
|
7948
|
+
settings.aoData[i].idx = i;
|
7949
|
+
}
|
7950
|
+
} );
|
7951
|
+
|
7952
|
+
return this;
|
7811
7953
|
} );
|
7812
7954
|
|
7813
7955
|
|
@@ -7833,7 +7975,7 @@
|
|
7833
7975
|
// Return an Api.rows() extended instance, so rows().nodes() etc can be used
|
7834
7976
|
var modRows = this.rows( -1 );
|
7835
7977
|
modRows.pop();
|
7836
|
-
|
7978
|
+
$.merge( modRows, newRows );
|
7837
7979
|
|
7838
7980
|
return modRows;
|
7839
7981
|
} );
|
@@ -7951,7 +8093,7 @@
|
|
7951
8093
|
if ( ctx.length ) {
|
7952
8094
|
var row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];
|
7953
8095
|
|
7954
|
-
if ( row._details ) {
|
8096
|
+
if ( row && row._details ) {
|
7955
8097
|
row._details.remove();
|
7956
8098
|
|
7957
8099
|
row._detailsShow = undefined;
|
@@ -8154,7 +8296,7 @@
|
|
8154
8296
|
names = _pluck( columns, 'sName' ),
|
8155
8297
|
nodes = _pluck( columns, 'nTh' );
|
8156
8298
|
|
8157
|
-
|
8299
|
+
var run = function ( s ) {
|
8158
8300
|
var selInt = _intVal( s );
|
8159
8301
|
|
8160
8302
|
// Selector - all
|
@@ -8220,7 +8362,9 @@
|
|
8220
8362
|
} )
|
8221
8363
|
.toArray();
|
8222
8364
|
}
|
8223
|
-
}
|
8365
|
+
};
|
8366
|
+
|
8367
|
+
return _selector_run( 'column', selector, run, settings, opts );
|
8224
8368
|
};
|
8225
8369
|
|
8226
8370
|
|
@@ -8277,7 +8421,7 @@
|
|
8277
8421
|
}
|
8278
8422
|
}
|
8279
8423
|
|
8280
|
-
_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis] );
|
8424
|
+
_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, recalc] );
|
8281
8425
|
|
8282
8426
|
_fnSaveState( settings );
|
8283
8427
|
};
|
@@ -8395,7 +8539,7 @@
|
|
8395
8539
|
var columns = settings.aoColumns.length;
|
8396
8540
|
var a, i, ien, j, o, host;
|
8397
8541
|
|
8398
|
-
|
8542
|
+
var run = function ( s ) {
|
8399
8543
|
var fnSelector = typeof s === 'function';
|
8400
8544
|
|
8401
8545
|
if ( s === null || s === undefined || fnSelector ) {
|
@@ -8413,9 +8557,9 @@
|
|
8413
8557
|
|
8414
8558
|
if ( fnSelector ) {
|
8415
8559
|
// Selector - function
|
8416
|
-
host =
|
8560
|
+
host = data[ row ];
|
8417
8561
|
|
8418
|
-
if ( s( o, _fnGetCellData(settings, row, j), host.anCells[j] ) ) {
|
8562
|
+
if ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {
|
8419
8563
|
a.push( o );
|
8420
8564
|
}
|
8421
8565
|
}
|
@@ -8438,15 +8582,15 @@
|
|
8438
8582
|
return allCells
|
8439
8583
|
.filter( s )
|
8440
8584
|
.map( function (i, el) {
|
8441
|
-
|
8442
|
-
|
8443
|
-
|
8444
|
-
|
8445
|
-
column: $.inArray( el, data[ row ].anCells )
|
8446
|
-
};
|
8585
|
+
return { // use a new object, in case someone changes the values
|
8586
|
+
row: el._DT_CellIndex.row,
|
8587
|
+
column: el._DT_CellIndex.column
|
8588
|
+
};
|
8447
8589
|
} )
|
8448
8590
|
.toArray();
|
8449
|
-
}
|
8591
|
+
};
|
8592
|
+
|
8593
|
+
return _selector_run( 'cell', selector, run, settings, opts );
|
8450
8594
|
};
|
8451
8595
|
|
8452
8596
|
|
@@ -8658,6 +8802,24 @@
|
|
8658
8802
|
} );
|
8659
8803
|
|
8660
8804
|
|
8805
|
+
_api_register( 'order.fixed()', function ( set ) {
|
8806
|
+
if ( ! set ) {
|
8807
|
+
var ctx = this.context;
|
8808
|
+
var fixed = ctx.length ?
|
8809
|
+
ctx[0].aaSortingFixed :
|
8810
|
+
undefined;
|
8811
|
+
|
8812
|
+
return $.isArray( fixed ) ?
|
8813
|
+
{ pre: fixed } :
|
8814
|
+
fixed;
|
8815
|
+
}
|
8816
|
+
|
8817
|
+
return this.iterator( 'table', function ( settings ) {
|
8818
|
+
settings.aaSortingFixed = $.extend( true, {}, set );
|
8819
|
+
} );
|
8820
|
+
} );
|
8821
|
+
|
8822
|
+
|
8661
8823
|
// Order by the selected column(s)
|
8662
8824
|
_api_register( [
|
8663
8825
|
'columns().order()',
|
@@ -8856,11 +9018,22 @@
|
|
8856
9018
|
*/
|
8857
9019
|
DataTable.tables = DataTable.fnTables = function ( visible )
|
8858
9020
|
{
|
8859
|
-
|
9021
|
+
var api = false;
|
9022
|
+
|
9023
|
+
if ( $.isPlainObject( visible ) ) {
|
9024
|
+
api = visible.api;
|
9025
|
+
visible = visible.visible;
|
9026
|
+
}
|
9027
|
+
|
9028
|
+
var a = $.map( DataTable.settings, function (o) {
|
8860
9029
|
if ( !visible || (visible && $(o.nTable).is(':visible')) ) {
|
8861
9030
|
return o.nTable;
|
8862
9031
|
}
|
8863
9032
|
} );
|
9033
|
+
|
9034
|
+
return api ?
|
9035
|
+
new _Api( a ) :
|
9036
|
+
a;
|
8864
9037
|
};
|
8865
9038
|
|
8866
9039
|
|
@@ -9015,10 +9188,6 @@
|
|
9015
9188
|
jqTable.append( tfoot );
|
9016
9189
|
}
|
9017
9190
|
|
9018
|
-
// Remove the DataTables generated nodes, events and classes
|
9019
|
-
jqTable.detach();
|
9020
|
-
jqWrapper.detach();
|
9021
|
-
|
9022
9191
|
settings.aaSorting = [];
|
9023
9192
|
settings.aaSortingFixed = [];
|
9024
9193
|
_fnSortingClasses( settings );
|
@@ -9038,30 +9207,36 @@
|
|
9038
9207
|
} );
|
9039
9208
|
}
|
9040
9209
|
|
9041
|
-
if ( ! remove && orig ) {
|
9042
|
-
// insertBefore acts like appendChild if !arg[1]
|
9043
|
-
orig.insertBefore( table, settings.nTableReinsertBefore );
|
9044
|
-
}
|
9045
|
-
|
9046
9210
|
// Add the TR elements back into the table in their original order
|
9047
9211
|
jqTbody.children().detach();
|
9048
9212
|
jqTbody.append( rows );
|
9049
9213
|
|
9050
|
-
//
|
9051
|
-
|
9052
|
-
jqTable
|
9053
|
-
|
9054
|
-
|
9214
|
+
// Remove the DataTables generated nodes, events and classes
|
9215
|
+
var removedMethod = remove ? 'remove' : 'detach';
|
9216
|
+
jqTable[ removedMethod ]();
|
9217
|
+
jqWrapper[ removedMethod ]();
|
9218
|
+
|
9219
|
+
// If we need to reattach the table to the document
|
9220
|
+
if ( ! remove && orig ) {
|
9221
|
+
// insertBefore acts like appendChild if !arg[1]
|
9222
|
+
orig.insertBefore( table, settings.nTableReinsertBefore );
|
9055
9223
|
|
9056
|
-
|
9057
|
-
|
9058
|
-
|
9059
|
-
|
9224
|
+
// Restore the width of the original table - was read from the style property,
|
9225
|
+
// so we can restore directly to that
|
9226
|
+
jqTable
|
9227
|
+
.css( 'width', settings.sDestroyWidth )
|
9228
|
+
.removeClass( classes.sTable );
|
9060
9229
|
|
9061
|
-
|
9062
|
-
|
9063
|
-
|
9064
|
-
|
9230
|
+
// If the were originally stripe classes - then we add them back here.
|
9231
|
+
// Note this is not fool proof (for example if not all rows had stripe
|
9232
|
+
// classes - but it's a good effort without getting carried away
|
9233
|
+
ien = settings.asDestroyStripes.length;
|
9234
|
+
|
9235
|
+
if ( ien ) {
|
9236
|
+
jqTbody.children().each( function (i) {
|
9237
|
+
$(this).addClass( settings.asDestroyStripes[i % ien] );
|
9238
|
+
} );
|
9239
|
+
}
|
9065
9240
|
}
|
9066
9241
|
|
9067
9242
|
/* Remove the settings object from the settings array */
|
@@ -9076,13 +9251,51 @@
|
|
9076
9251
|
// Add the `every()` method for rows, columns and cells in a compact form
|
9077
9252
|
$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {
|
9078
9253
|
_api_register( type+'s().every()', function ( fn ) {
|
9079
|
-
|
9080
|
-
|
9081
|
-
|
9254
|
+
var opts = this.selector.opts;
|
9255
|
+
var api = this;
|
9256
|
+
|
9257
|
+
return this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {
|
9258
|
+
// Rows and columns:
|
9259
|
+
// arg1 - index
|
9260
|
+
// arg2 - table counter
|
9261
|
+
// arg3 - loop counter
|
9262
|
+
// arg4 - undefined
|
9263
|
+
// Cells:
|
9264
|
+
// arg1 - row index
|
9265
|
+
// arg2 - column index
|
9266
|
+
// arg3 - table counter
|
9267
|
+
// arg4 - loop counter
|
9268
|
+
fn.call(
|
9269
|
+
api[ type ](
|
9270
|
+
arg1,
|
9271
|
+
type==='cell' ? arg2 : opts,
|
9272
|
+
type==='cell' ? opts : undefined
|
9273
|
+
),
|
9274
|
+
arg1, arg2, arg3, arg4
|
9275
|
+
);
|
9082
9276
|
} );
|
9083
9277
|
} );
|
9084
9278
|
} );
|
9085
9279
|
|
9280
|
+
|
9281
|
+
// i18n method for extensions to be able to use the language object from the
|
9282
|
+
// DataTable
|
9283
|
+
_api_register( 'i18n()', function ( token, def, plural ) {
|
9284
|
+
var ctx = this.context[0];
|
9285
|
+
var resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );
|
9286
|
+
|
9287
|
+
if ( resolved === undefined ) {
|
9288
|
+
resolved = def;
|
9289
|
+
}
|
9290
|
+
|
9291
|
+
if ( plural !== undefined && $.isPlainObject( resolved ) ) {
|
9292
|
+
resolved = resolved[ plural ] !== undefined ?
|
9293
|
+
resolved[ plural ] :
|
9294
|
+
resolved._;
|
9295
|
+
}
|
9296
|
+
|
9297
|
+
return resolved.replace( '%d', plural ); // nb: plural might be undefined,
|
9298
|
+
} );
|
9086
9299
|
|
9087
9300
|
/**
|
9088
9301
|
* Version string for plug-ins to check compatibility. Allowed format is
|
@@ -9092,7 +9305,7 @@
|
|
9092
9305
|
* @type string
|
9093
9306
|
* @default Version number
|
9094
9307
|
*/
|
9095
|
-
DataTable.version = "1.10.
|
9308
|
+
DataTable.version = "1.10.10";
|
9096
9309
|
|
9097
9310
|
/**
|
9098
9311
|
* Private data store, containing all of the settings objects that are
|
@@ -9244,7 +9457,16 @@
|
|
9244
9457
|
* @default null
|
9245
9458
|
* @private
|
9246
9459
|
*/
|
9247
|
-
"src": null
|
9460
|
+
"src": null,
|
9461
|
+
|
9462
|
+
/**
|
9463
|
+
* Index in the aoData array. This saves an indexOf lookup when we have the
|
9464
|
+
* object, but want to know the index
|
9465
|
+
* @type integer
|
9466
|
+
* @default -1
|
9467
|
+
* @private
|
9468
|
+
*/
|
9469
|
+
"idx": -1
|
9248
9470
|
};
|
9249
9471
|
|
9250
9472
|
|
@@ -11685,7 +11907,18 @@
|
|
11685
11907
|
* @name DataTable.defaults.renderer
|
11686
11908
|
*
|
11687
11909
|
*/
|
11688
|
-
"renderer": null
|
11910
|
+
"renderer": null,
|
11911
|
+
|
11912
|
+
|
11913
|
+
/**
|
11914
|
+
* Set the data property name that DataTables should use to get a row's id
|
11915
|
+
* to set as the `id` property in the node.
|
11916
|
+
* @type string
|
11917
|
+
* @default DT_RowId
|
11918
|
+
*
|
11919
|
+
* @name DataTable.defaults.rowId
|
11920
|
+
*/
|
11921
|
+
"rowId": "DT_RowId"
|
11689
11922
|
};
|
11690
11923
|
|
11691
11924
|
_fnHungarianMap( DataTable.defaults );
|
@@ -12784,7 +13017,21 @@
|
|
12784
13017
|
* @type boolean
|
12785
13018
|
* @default false
|
12786
13019
|
*/
|
12787
|
-
"bScrollbarLeft": false
|
13020
|
+
"bScrollbarLeft": false,
|
13021
|
+
|
13022
|
+
/**
|
13023
|
+
* Flag for if `getBoundingClientRect` is fully supported or not
|
13024
|
+
* @type boolean
|
13025
|
+
* @default false
|
13026
|
+
*/
|
13027
|
+
"bBounding": false,
|
13028
|
+
|
13029
|
+
/**
|
13030
|
+
* Browser scrollbar width
|
13031
|
+
* @type integer
|
13032
|
+
* @default 0
|
13033
|
+
*/
|
13034
|
+
"barWidth": 0
|
12788
13035
|
},
|
12789
13036
|
|
12790
13037
|
|
@@ -12829,6 +13076,13 @@
|
|
12829
13076
|
*/
|
12830
13077
|
"aiDisplayMaster": [],
|
12831
13078
|
|
13079
|
+
/**
|
13080
|
+
* Map of row ids to data indexes
|
13081
|
+
* @type object
|
13082
|
+
* @default {}
|
13083
|
+
*/
|
13084
|
+
"aIds": {},
|
13085
|
+
|
12832
13086
|
/**
|
12833
13087
|
* Store information about each column that is in use
|
12834
13088
|
* @type array
|
@@ -13437,7 +13691,21 @@
|
|
13437
13691
|
* @type object
|
13438
13692
|
* @default {}
|
13439
13693
|
*/
|
13440
|
-
"oPlugins": {}
|
13694
|
+
"oPlugins": {},
|
13695
|
+
|
13696
|
+
/**
|
13697
|
+
* Function used to get a row's id from the row's data
|
13698
|
+
* @type function
|
13699
|
+
* @default null
|
13700
|
+
*/
|
13701
|
+
"rowIdFn": null,
|
13702
|
+
|
13703
|
+
/**
|
13704
|
+
* Data location where to store a row's id
|
13705
|
+
* @type string
|
13706
|
+
* @default null
|
13707
|
+
*/
|
13708
|
+
"rowId": null
|
13441
13709
|
};
|
13442
13710
|
|
13443
13711
|
/**
|
@@ -13486,6 +13754,14 @@
|
|
13486
13754
|
classes: {},
|
13487
13755
|
|
13488
13756
|
|
13757
|
+
/**
|
13758
|
+
* DataTables build type (expanded by the download builder)
|
13759
|
+
*
|
13760
|
+
* @type string
|
13761
|
+
*/
|
13762
|
+
builder: "-source-",
|
13763
|
+
|
13764
|
+
|
13489
13765
|
/**
|
13490
13766
|
* Error reporting.
|
13491
13767
|
*
|
@@ -13599,6 +13875,37 @@
|
|
13599
13875
|
search: [],
|
13600
13876
|
|
13601
13877
|
|
13878
|
+
/**
|
13879
|
+
* Selector extensions
|
13880
|
+
*
|
13881
|
+
* The `selector` option can be used to extend the options available for the
|
13882
|
+
* selector modifier options (`selector-modifier` object data type) that
|
13883
|
+
* each of the three built in selector types offer (row, column and cell +
|
13884
|
+
* their plural counterparts). For example the Select extension uses this
|
13885
|
+
* mechanism to provide an option to select only rows, columns and cells
|
13886
|
+
* that have been marked as selected by the end user (`{selected: true}`),
|
13887
|
+
* which can be used in conjunction with the existing built in selector
|
13888
|
+
* options.
|
13889
|
+
*
|
13890
|
+
* Each property is an array to which functions can be pushed. The functions
|
13891
|
+
* take three attributes:
|
13892
|
+
*
|
13893
|
+
* * Settings object for the host table
|
13894
|
+
* * Options object (`selector-modifier` object type)
|
13895
|
+
* * Array of selected item indexes
|
13896
|
+
*
|
13897
|
+
* The return is an array of the resulting item indexes after the custom
|
13898
|
+
* selector has been applied.
|
13899
|
+
*
|
13900
|
+
* @type object
|
13901
|
+
*/
|
13902
|
+
selector: {
|
13903
|
+
cell: [],
|
13904
|
+
column: [],
|
13905
|
+
row: []
|
13906
|
+
},
|
13907
|
+
|
13908
|
+
|
13602
13909
|
/**
|
13603
13910
|
* Internal functions, exposed for used in plug-ins.
|
13604
13911
|
*
|
@@ -14113,6 +14420,10 @@
|
|
14113
14420
|
return [ 'first', 'previous', 'next', 'last' ];
|
14114
14421
|
},
|
14115
14422
|
|
14423
|
+
numbers: function ( page, pages ) {
|
14424
|
+
return [ _numbers(page, pages) ];
|
14425
|
+
},
|
14426
|
+
|
14116
14427
|
simple_numbers: function ( page, pages ) {
|
14117
14428
|
return [ 'previous', _numbers(page, pages), 'next' ];
|
14118
14429
|
},
|
@@ -14134,6 +14445,7 @@
|
|
14134
14445
|
_: function ( settings, host, idx, buttons, page, pages ) {
|
14135
14446
|
var classes = settings.oClasses;
|
14136
14447
|
var lang = settings.oLanguage.oPaginate;
|
14448
|
+
var aria = settings.oLanguage.oAria.paginate || {};
|
14137
14449
|
var btnDisplay, btnClass, counter=0;
|
14138
14450
|
|
14139
14451
|
var attach = function( container, buttons ) {
|
@@ -14151,7 +14463,7 @@
|
|
14151
14463
|
attach( inner, button );
|
14152
14464
|
}
|
14153
14465
|
else {
|
14154
|
-
btnDisplay =
|
14466
|
+
btnDisplay = null;
|
14155
14467
|
btnClass = '';
|
14156
14468
|
|
14157
14469
|
switch ( button ) {
|
@@ -14190,10 +14502,11 @@
|
|
14190
14502
|
break;
|
14191
14503
|
}
|
14192
14504
|
|
14193
|
-
if ( btnDisplay ) {
|
14505
|
+
if ( btnDisplay !== null ) {
|
14194
14506
|
node = $('<a>', {
|
14195
14507
|
'class': classes.sPageButton+' '+btnClass,
|
14196
14508
|
'aria-controls': settings.sTableId,
|
14509
|
+
'aria-label': aria[ button ],
|
14197
14510
|
'data-dt-idx': counter,
|
14198
14511
|
'tabindex': settings.iTabIndex,
|
14199
14512
|
'id': idx === 0 && typeof button === 'string' ?
|
@@ -14223,7 +14536,7 @@
|
|
14223
14536
|
// elements, focus is lost on the select button which is bad for
|
14224
14537
|
// accessibility. So we want to restore focus once the draw has
|
14225
14538
|
// completed
|
14226
|
-
activeEl = $(document.activeElement).data('dt-idx');
|
14539
|
+
activeEl = $(host).find(document.activeElement).data('dt-idx');
|
14227
14540
|
}
|
14228
14541
|
catch (e) {}
|
14229
14542
|
|
@@ -14521,11 +14834,14 @@
|
|
14521
14834
|
*
|
14522
14835
|
* * `number` - Will format numeric data (defined by `columns.data`) for
|
14523
14836
|
* display, retaining the original unformatted data for sorting and filtering.
|
14524
|
-
* It takes
|
14837
|
+
* It takes 5 parameters:
|
14525
14838
|
* * `string` - Thousands grouping separator
|
14526
14839
|
* * `string` - Decimal point indicator
|
14527
14840
|
* * `integer` - Number of decimal points to show
|
14528
14841
|
* * `string` (optional) - Prefix.
|
14842
|
+
* * `string` (optional) - Postfix (/suffix).
|
14843
|
+
* * `text` - Escape HTML to help prevent XSS attacks. It has no optional
|
14844
|
+
* parameters.
|
14529
14845
|
*
|
14530
14846
|
* @example
|
14531
14847
|
* // Column definition using the number renderer
|
@@ -14537,7 +14853,7 @@
|
|
14537
14853
|
* @namespace
|
14538
14854
|
*/
|
14539
14855
|
DataTable.render = {
|
14540
|
-
number: function ( thousands, decimal, precision, prefix ) {
|
14856
|
+
number: function ( thousands, decimal, precision, prefix, postfix ) {
|
14541
14857
|
return {
|
14542
14858
|
display: function ( d ) {
|
14543
14859
|
if ( typeof d !== 'number' && typeof d !== 'string' ) {
|
@@ -14545,7 +14861,15 @@
|
|
14545
14861
|
}
|
14546
14862
|
|
14547
14863
|
var negative = d < 0 ? '-' : '';
|
14548
|
-
|
14864
|
+
var flo = parseFloat( d );
|
14865
|
+
|
14866
|
+
// If NaN then there isn't much formatting that we can do - just
|
14867
|
+
// return immediately
|
14868
|
+
if ( isNaN( flo ) ) {
|
14869
|
+
return d;
|
14870
|
+
}
|
14871
|
+
|
14872
|
+
d = Math.abs( flo );
|
14549
14873
|
|
14550
14874
|
var intPart = parseInt( d, 10 );
|
14551
14875
|
var floatPart = precision ?
|
@@ -14556,7 +14880,18 @@
|
|
14556
14880
|
intPart.toString().replace(
|
14557
14881
|
/\B(?=(\d{3})+(?!\d))/g, thousands
|
14558
14882
|
) +
|
14559
|
-
floatPart
|
14883
|
+
floatPart +
|
14884
|
+
(postfix||'');
|
14885
|
+
}
|
14886
|
+
};
|
14887
|
+
},
|
14888
|
+
|
14889
|
+
text: function () {
|
14890
|
+
return {
|
14891
|
+
display: function ( d ) {
|
14892
|
+
return typeof d === 'string' ?
|
14893
|
+
d.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"') :
|
14894
|
+
d;
|
14560
14895
|
}
|
14561
14896
|
};
|
14562
14897
|
}
|
@@ -14660,11 +14995,9 @@
|
|
14660
14995
|
_fnCalculateColumnWidths: _fnCalculateColumnWidths,
|
14661
14996
|
_fnThrottle: _fnThrottle,
|
14662
14997
|
_fnConvertToWidth: _fnConvertToWidth,
|
14663
|
-
_fnScrollingWidthAdjust: _fnScrollingWidthAdjust,
|
14664
14998
|
_fnGetWidestNode: _fnGetWidestNode,
|
14665
14999
|
_fnGetMaxLenString: _fnGetMaxLenString,
|
14666
15000
|
_fnStringToCss: _fnStringToCss,
|
14667
|
-
_fnScrollBarWidth: _fnScrollBarWidth,
|
14668
15001
|
_fnSortFlatten: _fnSortFlatten,
|
14669
15002
|
_fnSort: _fnSort,
|
14670
15003
|
_fnSortAria: _fnSortAria,
|
@@ -14693,6 +15026,9 @@
|
|
14693
15026
|
// jQuery access
|
14694
15027
|
$.fn.dataTable = DataTable;
|
14695
15028
|
|
15029
|
+
// Provide access to the host jQuery object (circular reference)
|
15030
|
+
DataTable.$ = $;
|
15031
|
+
|
14696
15032
|
// Legacy aliases
|
14697
15033
|
$.fn.dataTableSettings = DataTable.settings;
|
14698
15034
|
$.fn.dataTableExt = DataTable.ext;
|
@@ -14874,6 +15210,3 @@
|
|
14874
15210
|
|
14875
15211
|
return $.fn.dataTable;
|
14876
15212
|
}));
|
14877
|
-
|
14878
|
-
}(window, document));
|
14879
|
-
|