weaver 0.1.9 → 0.2.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/data/weaver/css/bootstrap.css +647 -205
- data/data/weaver/css/bootstrap.css.map +1 -0
- data/data/weaver/css/bootstrap.min.css +3 -3
- data/data/weaver/css/crossfade_style.css +19 -0
- data/data/weaver/css/patterns/1.png +0 -0
- data/data/weaver/css/patterns/2.png +0 -0
- data/data/weaver/css/patterns/3.png +0 -0
- data/data/weaver/css/patterns/4.png +0 -0
- data/data/weaver/css/patterns/5.png +0 -0
- data/data/weaver/css/patterns/6.png +0 -0
- data/data/weaver/css/patterns/7.png +0 -0
- data/data/weaver/css/plugins/awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css +251 -0
- data/data/weaver/css/plugins/chartist/chartist.min.css +773 -0
- data/data/weaver/css/plugins/clockpicker/clockpicker.css +168 -0
- data/data/weaver/css/plugins/dataTables/dataTables.bootstrap.css +118 -190
- data/data/weaver/css/plugins/dataTables/dataTables.tableTools.min.css +1 -1
- data/data/weaver/css/plugins/daterangepicker/daterangepicker-bs3.css +335 -0
- data/data/weaver/css/plugins/footable/fonts/footable.eot +0 -0
- data/data/weaver/css/plugins/footable/fonts/footable.svg +78 -0
- data/data/weaver/css/plugins/footable/fonts/footable.ttf +0 -0
- data/data/weaver/css/plugins/footable/fonts/footable.woff +0 -0
- data/data/weaver/css/plugins/footable/footable.core.css +178 -0
- data/data/weaver/css/plugins/select2/select2.min.css +1 -0
- data/data/weaver/css/plugins/slick/ajax-loader.gif +0 -0
- data/data/weaver/css/plugins/slick/fonts/slick.eot +0 -0
- data/data/weaver/css/plugins/slick/fonts/slick.svg +14 -0
- data/data/weaver/css/plugins/slick/fonts/slick.ttf +0 -0
- data/data/weaver/css/plugins/slick/fonts/slick.woff +0 -0
- data/data/weaver/css/plugins/slick/slick-theme.css +201 -0
- data/data/weaver/css/plugins/slick/slick.css +119 -0
- data/data/weaver/css/plugins/sweetalert/sweetalert.css +715 -0
- data/data/weaver/css/style.css +4352 -1310
- data/data/weaver/css/style.min.css +1 -1
- data/data/weaver/fonts/glyphicons-halflings-regular.eot +0 -0
- data/data/weaver/fonts/glyphicons-halflings-regular.svg +273 -214
- data/data/weaver/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/data/weaver/fonts/glyphicons-halflings-regular.woff +0 -0
- data/data/weaver/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/data/weaver/js/bootstrap.js +299 -212
- data/data/weaver/js/bootstrap.min.js +5 -5
- data/data/weaver/js/inspinia.js +184 -42
- data/data/weaver/js/plugins/chartist/chartist.min.js +9 -0
- data/data/weaver/js/plugins/chartist/chartist.min.js.map +1 -0
- data/data/weaver/js/plugins/clockpicker/clockpicker.js +729 -0
- data/data/weaver/js/plugins/dataTables/dataTables.bootstrap.js +195 -234
- data/data/weaver/js/plugins/dataTables/dataTables.tableTools.min.js +46 -45
- data/data/weaver/js/plugins/dataTables/jquery.dataTables.js +628 -373
- data/data/weaver/js/plugins/dataTables/swf/copy_csv_xls.swf +0 -0
- data/data/weaver/js/plugins/dataTables/swf/copy_csv_xls_pdf.swf +0 -0
- data/data/weaver/js/plugins/daterangepicker/daterangepicker.js +1304 -0
- data/data/weaver/js/plugins/diff_match_patch/COPYING +177 -0
- data/data/weaver/js/plugins/diff_match_patch/README.txt +43 -0
- data/data/weaver/js/plugins/diff_match_patch/javascript/diff_match_patch.js +49 -0
- data/data/weaver/js/plugins/footable/footable.all.min.js +14 -0
- data/data/weaver/js/plugins/fullcalendar/moment.min.js +3 -3
- data/data/weaver/js/plugins/idle-timer/idle-timer.min.js +2 -0
- data/data/weaver/js/plugins/jvectormap/jquery-jvectormap-2.0.2.css +130 -0
- data/data/weaver/js/plugins/jvectormap/jquery-jvectormap-2.0.2.min.js +3328 -0
- data/data/weaver/js/plugins/masonary/masonry.pkgd.min.js +9 -0
- data/data/weaver/js/plugins/metisMenu/jquery.metisMenu.js +3 -113
- data/data/weaver/js/plugins/morris/morris.js +27 -23
- data/data/weaver/js/plugins/pace/pace.min.js +2 -2
- data/data/weaver/js/plugins/preetyTextDiff/jquery.pretty-text-diff.min.js +76 -0
- data/data/weaver/js/plugins/select2/select2.full.min.js +3 -0
- data/data/weaver/js/plugins/slick/slick.min.js +18 -0
- data/data/weaver/js/plugins/slimscroll/jquery.slimscroll.js +96 -90
- data/data/weaver/js/plugins/slimscroll/jquery.slimscroll.min.js +10 -10
- data/data/weaver/js/plugins/sweetalert/sweetalert.min.js +1 -0
- data/data/weaver/js/plugins/tinycon/tinycon.min.js +8 -0
- data/data/weaver/js/plugins/wow/wow.min.js +2 -0
- data/{bin → exe}/weaver +3 -2
- data/lib/weaver.rb +236 -53
- data/lib/weaver/version.rb +1 -1
- data/weaver.gemspec +2 -2
- metadata +50 -7
- data/data/weaver/js/plugins/jvectormap/jquery-jvectormap-1.2.2.min.js +0 -8
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/*! DataTables 1.10.
|
|
1
|
+
/*! DataTables 1.10.8
|
|
2
2
|
* ©2008-2014 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.8
|
|
9
9
|
* @file jquery.dataTables.js
|
|
10
10
|
* @author SpryMedia Ltd (www.sprymedia.co.uk)
|
|
11
11
|
* @contact www.sprymedia.co.uk/contact
|
|
@@ -22,7 +22,7 @@
|
|
|
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,
|
|
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,_fnScrollBarWidth,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/
|
|
26
26
|
|
|
27
27
|
(/** @lends <global> */function( window, document, undefined ) {
|
|
28
28
|
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
// Define as an AMD module if possible
|
|
34
34
|
define( 'datatables', ['jquery'], factory );
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
else if ( typeof exports === 'object' ) {
|
|
37
|
+
// Node/CommonJS
|
|
38
|
+
module.exports = factory( require( 'jquery' ) );
|
|
39
|
+
}
|
|
40
40
|
else if ( jQuery && !jQuery.fn.dataTable ) {
|
|
41
41
|
// Define using browser globals otherwise
|
|
42
42
|
// Prevent multiple instantiations if the script is loaded twice
|
|
@@ -111,9 +111,17 @@
|
|
|
111
111
|
// Escape regular expression special characters
|
|
112
112
|
var _re_escape_regex = new RegExp( '(\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ].join('|\\') + ')', 'g' );
|
|
113
113
|
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
|
|
114
|
+
// http://en.wikipedia.org/wiki/Foreign_exchange_market
|
|
115
|
+
// - \u20BD - Russian ruble.
|
|
116
|
+
// - \u20a9 - South Korean Won
|
|
117
|
+
// - \u20BA - Turkish Lira
|
|
118
|
+
// - \u20B9 - Indian Rupee
|
|
119
|
+
// - R - Brazil (R$) and South Africa
|
|
120
|
+
// - fr - Swiss Franc
|
|
121
|
+
// - kr - Swedish krona, Norwegian krone and Danish krone
|
|
122
|
+
// - \u2009 is thin space and \u202F is narrow no-break space, both used in many
|
|
123
|
+
// standards as thousands separators.
|
|
124
|
+
var _re_formatted_numeric = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi;
|
|
117
125
|
|
|
118
126
|
|
|
119
127
|
var _empty = function ( d ) {
|
|
@@ -142,6 +150,13 @@
|
|
|
142
150
|
var _isNumber = function ( d, decimalPoint, formatted ) {
|
|
143
151
|
var strType = typeof d === 'string';
|
|
144
152
|
|
|
153
|
+
// If empty return immediately so there must be a number if it is a
|
|
154
|
+
// formatted string (this stops the string "k", or "kr", etc being detected
|
|
155
|
+
// as a formatted number for currency
|
|
156
|
+
if ( _empty( d ) ) {
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
|
|
145
160
|
if ( decimalPoint && strType ) {
|
|
146
161
|
d = _numToDecimal( d, decimalPoint );
|
|
147
162
|
}
|
|
@@ -150,7 +165,7 @@
|
|
|
150
165
|
d = d.replace( _re_formatted_numeric, '' );
|
|
151
166
|
}
|
|
152
167
|
|
|
153
|
-
return
|
|
168
|
+
return !isNaN( parseFloat(d) ) && isFinite( d );
|
|
154
169
|
};
|
|
155
170
|
|
|
156
171
|
|
|
@@ -452,6 +467,11 @@
|
|
|
452
467
|
_fnCompatMap( init, 'pageLength', 'iDisplayLength' );
|
|
453
468
|
_fnCompatMap( init, 'searching', 'bFilter' );
|
|
454
469
|
|
|
470
|
+
// Boolean initialisation of x-scrolling
|
|
471
|
+
if ( typeof init.sScrollX === 'boolean' ) {
|
|
472
|
+
init.sScrollX = init.sScrollX ? '100%' : '';
|
|
473
|
+
}
|
|
474
|
+
|
|
455
475
|
// Column search objects are in an array, so it needs to be converted
|
|
456
476
|
// element by element
|
|
457
477
|
var searchCols = init.aoSearchCols;
|
|
@@ -478,6 +498,12 @@
|
|
|
478
498
|
_fnCompatMap( init, 'orderData', 'aDataSort' );
|
|
479
499
|
_fnCompatMap( init, 'orderSequence', 'asSorting' );
|
|
480
500
|
_fnCompatMap( init, 'orderDataType', 'sortDataType' );
|
|
501
|
+
|
|
502
|
+
// orderData can be given as an integer
|
|
503
|
+
var dataSort = init.aDataSort;
|
|
504
|
+
if ( dataSort && ! $.isArray( dataSort ) ) {
|
|
505
|
+
init.aDataSort = [ dataSort ];
|
|
506
|
+
}
|
|
481
507
|
}
|
|
482
508
|
|
|
483
509
|
|
|
@@ -493,7 +519,7 @@
|
|
|
493
519
|
// Scrolling feature / quirks detection
|
|
494
520
|
var n = $('<div/>')
|
|
495
521
|
.css( {
|
|
496
|
-
position: '
|
|
522
|
+
position: 'fixed',
|
|
497
523
|
top: 0,
|
|
498
524
|
left: 0,
|
|
499
525
|
height: 1,
|
|
@@ -528,7 +554,10 @@
|
|
|
528
554
|
|
|
529
555
|
// In rtl text layout, some browsers (most, but not all) will place the
|
|
530
556
|
// scrollbar on the left, rather than the right.
|
|
531
|
-
browser.bScrollbarLeft = test.offset().left !== 1;
|
|
557
|
+
browser.bScrollbarLeft = Math.round( test.offset().left ) !== 1;
|
|
558
|
+
|
|
559
|
+
// IE8- don't provide height and width for getBoundingClientRect
|
|
560
|
+
browser.bBounding = n[0].getBoundingClientRect().width ? true : false;
|
|
532
561
|
|
|
533
562
|
n.remove();
|
|
534
563
|
}
|
|
@@ -595,7 +624,7 @@
|
|
|
595
624
|
searchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );
|
|
596
625
|
|
|
597
626
|
// Use the default column options function to initialise classes etc
|
|
598
|
-
_fnColumnOptions( oSettings, iCol,
|
|
627
|
+
_fnColumnOptions( oSettings, iCol, $(nTh).data() );
|
|
599
628
|
}
|
|
600
629
|
|
|
601
630
|
|
|
@@ -658,7 +687,7 @@
|
|
|
658
687
|
/* iDataSort to be applied (backwards compatibility), but aDataSort will take
|
|
659
688
|
* priority if defined
|
|
660
689
|
*/
|
|
661
|
-
if (
|
|
690
|
+
if ( oOptions.iDataSort !== undefined )
|
|
662
691
|
{
|
|
663
692
|
oCol.aDataSort = [ oOptions.iDataSort ];
|
|
664
693
|
}
|
|
@@ -987,7 +1016,8 @@
|
|
|
987
1016
|
/* Create the object for storing information about this new row */
|
|
988
1017
|
var iRow = oSettings.aoData.length;
|
|
989
1018
|
var oData = $.extend( true, {}, DataTable.models.oRow, {
|
|
990
|
-
src: nTr ? 'dom' : 'data'
|
|
1019
|
+
src: nTr ? 'dom' : 'data',
|
|
1020
|
+
idx: iRow
|
|
991
1021
|
} );
|
|
992
1022
|
|
|
993
1023
|
oData._aData = aDataIn;
|
|
@@ -1010,6 +1040,11 @@
|
|
|
1010
1040
|
/* Add to the display array */
|
|
1011
1041
|
oSettings.aiDisplayMaster.push( iRow );
|
|
1012
1042
|
|
|
1043
|
+
var id = oSettings.rowIdFn( aDataIn );
|
|
1044
|
+
if ( id !== undefined ) {
|
|
1045
|
+
oSettings.aIds[ id ] = oData;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1013
1048
|
/* Create the DOM information, or register it if already present */
|
|
1014
1049
|
if ( nTr || ! oSettings.oFeatures.bDeferRender )
|
|
1015
1050
|
{
|
|
@@ -1153,7 +1188,7 @@
|
|
|
1153
1188
|
*/
|
|
1154
1189
|
function _fnSplitObjNotation( str )
|
|
1155
1190
|
{
|
|
1156
|
-
return $.map( str.match(/(\\.|[^\.])+/g), function ( s ) {
|
|
1191
|
+
return $.map( str.match(/(\\.|[^\.])+/g) || [''], function ( s ) {
|
|
1157
1192
|
return s.replace(/\\./g, '.');
|
|
1158
1193
|
} );
|
|
1159
1194
|
}
|
|
@@ -1519,7 +1554,7 @@
|
|
|
1519
1554
|
}
|
|
1520
1555
|
|
|
1521
1556
|
// Update DataTables special `DT_*` attributes for the row
|
|
1522
|
-
_fnRowAttributes( row );
|
|
1557
|
+
_fnRowAttributes( settings, row );
|
|
1523
1558
|
}
|
|
1524
1559
|
}
|
|
1525
1560
|
|
|
@@ -1614,12 +1649,18 @@
|
|
|
1614
1649
|
else {
|
|
1615
1650
|
// Existing row object passed in
|
|
1616
1651
|
tds = row.anCells;
|
|
1617
|
-
|
|
1652
|
+
|
|
1618
1653
|
for ( var j=0, jen=tds.length ; j<jen ; j++ ) {
|
|
1619
1654
|
cellProcess( tds[j] );
|
|
1620
1655
|
}
|
|
1621
1656
|
}
|
|
1622
1657
|
|
|
1658
|
+
// Read the ID from the DOM if present
|
|
1659
|
+
var id = row.getAttribute( 'id' );
|
|
1660
|
+
if ( id ) {
|
|
1661
|
+
_fnSetObjectDataFn( settings.rowId )( d, id );
|
|
1662
|
+
}
|
|
1663
|
+
|
|
1623
1664
|
return {
|
|
1624
1665
|
data: d,
|
|
1625
1666
|
cells: tds
|
|
@@ -1657,7 +1698,7 @@
|
|
|
1657
1698
|
nTr._DT_RowIndex = iRow;
|
|
1658
1699
|
|
|
1659
1700
|
/* Special parameters can be given by the data source to be used on the row */
|
|
1660
|
-
_fnRowAttributes( row );
|
|
1701
|
+
_fnRowAttributes( oSettings, row );
|
|
1661
1702
|
|
|
1662
1703
|
/* Process each column */
|
|
1663
1704
|
for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
|
|
@@ -1709,17 +1750,20 @@
|
|
|
1709
1750
|
/**
|
|
1710
1751
|
* Add attributes to a row based on the special `DT_*` parameters in a data
|
|
1711
1752
|
* source object.
|
|
1753
|
+
* @param {object} settings DataTables settings object
|
|
1712
1754
|
* @param {object} DataTables row object for the row to be modified
|
|
1713
1755
|
* @memberof DataTable#oApi
|
|
1714
1756
|
*/
|
|
1715
|
-
function _fnRowAttributes( row )
|
|
1757
|
+
function _fnRowAttributes( settings, row )
|
|
1716
1758
|
{
|
|
1717
1759
|
var tr = row.nTr;
|
|
1718
1760
|
var data = row._aData;
|
|
1719
1761
|
|
|
1720
1762
|
if ( tr ) {
|
|
1721
|
-
|
|
1722
|
-
|
|
1763
|
+
var id = settings.rowIdFn( data );
|
|
1764
|
+
|
|
1765
|
+
if ( id ) {
|
|
1766
|
+
tr.id = id;
|
|
1723
1767
|
}
|
|
1724
1768
|
|
|
1725
1769
|
if ( data.DT_RowClass ) {
|
|
@@ -1734,6 +1778,10 @@
|
|
|
1734
1778
|
.addClass( data.DT_RowClass );
|
|
1735
1779
|
}
|
|
1736
1780
|
|
|
1781
|
+
if ( data.DT_RowAttr ) {
|
|
1782
|
+
$(tr).attr( data.DT_RowAttr );
|
|
1783
|
+
}
|
|
1784
|
+
|
|
1737
1785
|
if ( data.DT_RowData ) {
|
|
1738
1786
|
$(tr).data( data.DT_RowData );
|
|
1739
1787
|
}
|
|
@@ -1780,7 +1828,7 @@
|
|
|
1780
1828
|
}
|
|
1781
1829
|
}
|
|
1782
1830
|
|
|
1783
|
-
if ( column.sTitle != cell.
|
|
1831
|
+
if ( column.sTitle != cell[0].innerHTML ) {
|
|
1784
1832
|
cell.html( column.sTitle );
|
|
1785
1833
|
}
|
|
1786
1834
|
|
|
@@ -2252,6 +2300,7 @@
|
|
|
2252
2300
|
|
|
2253
2301
|
/* Built our DOM structure - replace the holding div with what we want */
|
|
2254
2302
|
holding.replaceWith( insert );
|
|
2303
|
+
oSettings.nHolding = null;
|
|
2255
2304
|
}
|
|
2256
2305
|
|
|
2257
2306
|
|
|
@@ -2367,8 +2416,6 @@
|
|
|
2367
2416
|
return aReturn;
|
|
2368
2417
|
}
|
|
2369
2418
|
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
2419
|
/**
|
|
2373
2420
|
* Create an Ajax call based on the table's settings, taking into account that
|
|
2374
2421
|
* parameters can have multiple forms, and backwards compatibility.
|
|
@@ -2411,16 +2458,20 @@
|
|
|
2411
2458
|
var ajaxData;
|
|
2412
2459
|
var ajax = oSettings.ajax;
|
|
2413
2460
|
var instance = oSettings.oInstance;
|
|
2461
|
+
var callback = function ( json ) {
|
|
2462
|
+
_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );
|
|
2463
|
+
fn( json );
|
|
2464
|
+
};
|
|
2414
2465
|
|
|
2415
2466
|
if ( $.isPlainObject( ajax ) && ajax.data )
|
|
2416
2467
|
{
|
|
2417
2468
|
ajaxData = ajax.data;
|
|
2418
2469
|
|
|
2419
2470
|
var newData = $.isFunction( ajaxData ) ?
|
|
2420
|
-
ajaxData( data ) : // fn can manipulate data or return
|
|
2421
|
-
ajaxData;
|
|
2471
|
+
ajaxData( data, oSettings ) : // fn can manipulate data or return
|
|
2472
|
+
ajaxData; // an object object or array to merge
|
|
2422
2473
|
|
|
2423
|
-
// If the function returned
|
|
2474
|
+
// If the function returned something, use that alone
|
|
2424
2475
|
data = $.isFunction( ajaxData ) && newData ?
|
|
2425
2476
|
newData :
|
|
2426
2477
|
$.extend( true, data, newData );
|
|
@@ -2435,24 +2486,25 @@
|
|
|
2435
2486
|
"success": function (json) {
|
|
2436
2487
|
var error = json.error || json.sError;
|
|
2437
2488
|
if ( error ) {
|
|
2438
|
-
|
|
2489
|
+
_fnLog( oSettings, 0, error );
|
|
2439
2490
|
}
|
|
2440
2491
|
|
|
2441
2492
|
oSettings.json = json;
|
|
2442
|
-
|
|
2443
|
-
fn( json );
|
|
2493
|
+
callback( json );
|
|
2444
2494
|
},
|
|
2445
2495
|
"dataType": "json",
|
|
2446
2496
|
"cache": false,
|
|
2447
2497
|
"type": oSettings.sServerMethod,
|
|
2448
2498
|
"error": function (xhr, error, thrown) {
|
|
2449
|
-
var
|
|
2499
|
+
var ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );
|
|
2450
2500
|
|
|
2451
|
-
if (
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2501
|
+
if ( $.inArray( true, ret ) === -1 ) {
|
|
2502
|
+
if ( error == "parsererror" ) {
|
|
2503
|
+
_fnLog( oSettings, 0, 'Invalid JSON response', 1 );
|
|
2504
|
+
}
|
|
2505
|
+
else if ( xhr.readyState === 4 ) {
|
|
2506
|
+
_fnLog( oSettings, 0, 'Ajax error', 7 );
|
|
2507
|
+
}
|
|
2456
2508
|
}
|
|
2457
2509
|
|
|
2458
2510
|
_fnProcessingDisplay( oSettings, false );
|
|
@@ -2473,7 +2525,7 @@
|
|
|
2473
2525
|
$.map( data, function (val, key) { // Need to convert back to 1.9 trad format
|
|
2474
2526
|
return { name: key, value: val };
|
|
2475
2527
|
} ),
|
|
2476
|
-
|
|
2528
|
+
callback,
|
|
2477
2529
|
oSettings
|
|
2478
2530
|
);
|
|
2479
2531
|
}
|
|
@@ -2487,7 +2539,7 @@
|
|
|
2487
2539
|
else if ( $.isFunction( ajax ) )
|
|
2488
2540
|
{
|
|
2489
2541
|
// Is a function - let the caller define what needs to be done
|
|
2490
|
-
oSettings.jqXHR = ajax.call( instance, data,
|
|
2542
|
+
oSettings.jqXHR = ajax.call( instance, data, callback, oSettings );
|
|
2491
2543
|
}
|
|
2492
2544
|
else
|
|
2493
2545
|
{
|
|
@@ -2653,6 +2705,7 @@
|
|
|
2653
2705
|
return json[old] !== undefined ? json[old] : json[modern];
|
|
2654
2706
|
};
|
|
2655
2707
|
|
|
2708
|
+
var data = _fnAjaxDataSrc( settings, json );
|
|
2656
2709
|
var draw = compat( 'sEcho', 'draw' );
|
|
2657
2710
|
var recordsTotal = compat( 'iTotalRecords', 'recordsTotal' );
|
|
2658
2711
|
var recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );
|
|
@@ -2669,7 +2722,6 @@
|
|
|
2669
2722
|
settings._iRecordsTotal = parseInt(recordsTotal, 10);
|
|
2670
2723
|
settings._iRecordsDisplay = parseInt(recordsFiltered, 10);
|
|
2671
2724
|
|
|
2672
|
-
var data = _fnAjaxDataSrc( settings, json );
|
|
2673
2725
|
for ( var i=0, ien=data.length ; i<ien ; i++ ) {
|
|
2674
2726
|
_fnAddData( settings, data[i] );
|
|
2675
2727
|
}
|
|
@@ -2712,7 +2764,6 @@
|
|
|
2712
2764
|
json;
|
|
2713
2765
|
}
|
|
2714
2766
|
|
|
2715
|
-
|
|
2716
2767
|
/**
|
|
2717
2768
|
* Generate the node required for filtering text
|
|
2718
2769
|
* @returns {node} Filter control element
|
|
@@ -2993,7 +3044,7 @@
|
|
|
2993
3044
|
*
|
|
2994
3045
|
* ^(?=.*?\bone\b)(?=.*?\btwo three\b)(?=.*?\bfour\b).*$
|
|
2995
3046
|
*/
|
|
2996
|
-
var a = $.map( search.match( /"[^"]+"|[^ ]+/g ) || '', function ( word ) {
|
|
3047
|
+
var a = $.map( search.match( /"[^"]+"|[^ ]+/g ) || [''], function ( word ) {
|
|
2997
3048
|
if ( word.charAt(0) === '"' ) {
|
|
2998
3049
|
var m = word.match( /^"(.*)"$/ );
|
|
2999
3050
|
word = m ? m[1] : word;
|
|
@@ -3238,6 +3289,7 @@
|
|
|
3238
3289
|
var i, iLen, iAjaxStart=settings.iInitDisplayStart;
|
|
3239
3290
|
var columns = settings.aoColumns, column;
|
|
3240
3291
|
var features = settings.oFeatures;
|
|
3292
|
+
var deferLoading = settings.bDeferLoading; // value modified by the draw
|
|
3241
3293
|
|
|
3242
3294
|
/* Ensure that the table data is fully initialised */
|
|
3243
3295
|
if ( ! settings.bInitialised ) {
|
|
@@ -3269,6 +3321,8 @@
|
|
|
3269
3321
|
}
|
|
3270
3322
|
}
|
|
3271
3323
|
|
|
3324
|
+
_fnCallbackFire( settings, null, 'preInit', [settings] );
|
|
3325
|
+
|
|
3272
3326
|
// If there is default sorting required - let's do it. The sort function
|
|
3273
3327
|
// will do the drawing for us. Otherwise we draw the table regardless of the
|
|
3274
3328
|
// Ajax source - this allows the table to look initialised for Ajax sourcing
|
|
@@ -3277,7 +3331,7 @@
|
|
|
3277
3331
|
|
|
3278
3332
|
// Server-side processing init complete is done by _fnAjaxUpdateDraw
|
|
3279
3333
|
var dataSrc = _fnDataSource( settings );
|
|
3280
|
-
if ( dataSrc != 'ssp' ) {
|
|
3334
|
+
if ( dataSrc != 'ssp' || deferLoading ) {
|
|
3281
3335
|
// if there is an ajax source load the data
|
|
3282
3336
|
if ( dataSrc == 'ajax' ) {
|
|
3283
3337
|
_fnBuildAjax( settings, [], function(json) {
|
|
@@ -3318,9 +3372,9 @@
|
|
|
3318
3372
|
{
|
|
3319
3373
|
settings._bInitComplete = true;
|
|
3320
3374
|
|
|
3321
|
-
//
|
|
3322
|
-
// sizing
|
|
3323
|
-
if ( json ) {
|
|
3375
|
+
// When data was added after the initialisation (data or Ajax) we need to
|
|
3376
|
+
// calculate the column sizing
|
|
3377
|
+
if ( json || settings.oInit.aaData ) {
|
|
3324
3378
|
_fnAdjustColumnSizing( settings );
|
|
3325
3379
|
}
|
|
3326
3380
|
|
|
@@ -3660,8 +3714,8 @@
|
|
|
3660
3714
|
.append(
|
|
3661
3715
|
$(_div, { 'class': classes.sScrollBody } )
|
|
3662
3716
|
.css( {
|
|
3717
|
+
position: 'relative',
|
|
3663
3718
|
overflow: 'auto',
|
|
3664
|
-
height: size( scrollY ),
|
|
3665
3719
|
width: size( scrollX )
|
|
3666
3720
|
} )
|
|
3667
3721
|
.append( table )
|
|
@@ -3697,7 +3751,7 @@
|
|
|
3697
3751
|
|
|
3698
3752
|
// When the body is scrolled, then we also want to scroll the headers
|
|
3699
3753
|
if ( scrollX ) {
|
|
3700
|
-
$(scrollBody).
|
|
3754
|
+
$(scrollBody).on( 'scroll.DT', function (e) {
|
|
3701
3755
|
var scrollLeft = this.scrollLeft;
|
|
3702
3756
|
|
|
3703
3757
|
scrollHead.scrollLeft = scrollLeft;
|
|
@@ -3708,6 +3762,11 @@
|
|
|
3708
3762
|
} );
|
|
3709
3763
|
}
|
|
3710
3764
|
|
|
3765
|
+
$(scrollBody).css(
|
|
3766
|
+
scrollY && scroll.bCollapse ? 'max-height' : 'height',
|
|
3767
|
+
scrollY
|
|
3768
|
+
);
|
|
3769
|
+
|
|
3711
3770
|
settings.nScrollHead = scrollHead;
|
|
3712
3771
|
settings.nScrollBody = scrollBody;
|
|
3713
3772
|
settings.nScrollFoot = scrollFoot;
|
|
@@ -3824,13 +3883,6 @@
|
|
|
3824
3883
|
}, footerSrcEls );
|
|
3825
3884
|
}
|
|
3826
3885
|
|
|
3827
|
-
// If scroll collapse is enabled, when we put the headers back into the body for sizing, we
|
|
3828
|
-
// will end up forcing the scrollbar to appear, making our measurements wrong for when we
|
|
3829
|
-
// then hide it (end of this function), so add the header height to the body scroller.
|
|
3830
|
-
if ( scroll.bCollapse && scrollY !== "" ) {
|
|
3831
|
-
divBodyStyle.height = (divBody[0].offsetHeight + header[0].offsetHeight)+"px";
|
|
3832
|
-
}
|
|
3833
|
-
|
|
3834
3886
|
// Size the table as a whole
|
|
3835
3887
|
sanityWidth = table.outerWidth();
|
|
3836
3888
|
if ( scrollX === "" ) {
|
|
@@ -3845,32 +3897,17 @@
|
|
|
3845
3897
|
) {
|
|
3846
3898
|
tableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);
|
|
3847
3899
|
}
|
|
3900
|
+
|
|
3901
|
+
// Recalculate the sanity width
|
|
3902
|
+
sanityWidth = table.outerWidth();
|
|
3848
3903
|
}
|
|
3849
|
-
else
|
|
3850
|
-
|
|
3851
|
-
|
|
3852
|
-
if ( scrollXInner !== "" ) {
|
|
3853
|
-
// x scroll inner has been given - use it
|
|
3854
|
-
tableStyle.width = _fnStringToCss(scrollXInner);
|
|
3855
|
-
}
|
|
3856
|
-
else if ( sanityWidth == divBody.width() && divBody.height() < table.height() ) {
|
|
3857
|
-
// There is y-scrolling - try to take account of the y scroll bar
|
|
3858
|
-
tableStyle.width = _fnStringToCss( sanityWidth-barWidth );
|
|
3859
|
-
if ( table.outerWidth() > sanityWidth-barWidth ) {
|
|
3860
|
-
// Not possible to take account of it
|
|
3861
|
-
tableStyle.width = _fnStringToCss( sanityWidth );
|
|
3862
|
-
}
|
|
3863
|
-
}
|
|
3864
|
-
else {
|
|
3865
|
-
// When all else fails
|
|
3866
|
-
tableStyle.width = _fnStringToCss( sanityWidth );
|
|
3867
|
-
}
|
|
3868
|
-
}
|
|
3904
|
+
else if ( scrollXInner !== "" ) {
|
|
3905
|
+
// legacy x scroll inner has been given - use it
|
|
3906
|
+
tableStyle.width = _fnStringToCss(scrollXInner);
|
|
3869
3907
|
|
|
3870
|
-
|
|
3871
|
-
|
|
3872
|
-
|
|
3873
|
-
sanityWidth = table.outerWidth();
|
|
3908
|
+
// Recalculate the sanity width
|
|
3909
|
+
sanityWidth = table.outerWidth();
|
|
3910
|
+
}
|
|
3874
3911
|
|
|
3875
3912
|
// Hidden header should have zero height, so remove padding and borders. Then
|
|
3876
3913
|
// set the width based on the real headers
|
|
@@ -3978,18 +4015,6 @@
|
|
|
3978
4015
|
}
|
|
3979
4016
|
}
|
|
3980
4017
|
|
|
3981
|
-
if ( scrollY && scroll.bCollapse ) {
|
|
3982
|
-
divBodyStyle.height = _fnStringToCss( scrollY );
|
|
3983
|
-
|
|
3984
|
-
var iExtra = (scrollX && tableEl.offsetWidth > divBodyEl.offsetWidth) ?
|
|
3985
|
-
barWidth :
|
|
3986
|
-
0;
|
|
3987
|
-
|
|
3988
|
-
if ( tableEl.offsetHeight < divBodyEl.offsetHeight ) {
|
|
3989
|
-
divBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+iExtra );
|
|
3990
|
-
}
|
|
3991
|
-
}
|
|
3992
|
-
|
|
3993
4018
|
/* Finally set the width's of the header and footer tables */
|
|
3994
4019
|
var iOuterWidth = table.outerWidth();
|
|
3995
4020
|
divHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );
|
|
@@ -4078,10 +4103,17 @@
|
|
|
4078
4103
|
columnCount = columns.length,
|
|
4079
4104
|
visibleColumns = _fnGetColumns( oSettings, 'bVisible' ),
|
|
4080
4105
|
headerCells = $('th', oSettings.nTHead),
|
|
4081
|
-
tableWidthAttr = table.getAttribute('width'),
|
|
4106
|
+
tableWidthAttr = table.getAttribute('width'), // from DOM element
|
|
4082
4107
|
tableContainer = table.parentNode,
|
|
4083
4108
|
userInputs = false,
|
|
4084
|
-
i, column, columnIdx, width, outerWidth
|
|
4109
|
+
i, column, columnIdx, width, outerWidth,
|
|
4110
|
+
browser = oSettings.oBrowser,
|
|
4111
|
+
ie67 = browser.bScrollOversize;
|
|
4112
|
+
|
|
4113
|
+
var styleWidth = table.style.width;
|
|
4114
|
+
if ( styleWidth && styleWidth.indexOf('%') !== -1 ) {
|
|
4115
|
+
tableWidthAttr = styleWidth;
|
|
4116
|
+
}
|
|
4085
4117
|
|
|
4086
4118
|
/* Convert any user input sizes into pixel sizes */
|
|
4087
4119
|
for ( i=0 ; i<visibleColumns.length ; i++ ) {
|
|
@@ -4099,9 +4131,9 @@
|
|
|
4099
4131
|
* the web- browser. No custom sizes can be set in order for this to happen,
|
|
4100
4132
|
* nor scrolling used
|
|
4101
4133
|
*/
|
|
4102
|
-
if ( ! userInputs && ! scrollX && ! scrollY &&
|
|
4103
|
-
|
|
4104
|
-
|
|
4134
|
+
if ( ie67 || ! userInputs && ! scrollX && ! scrollY &&
|
|
4135
|
+
columnCount == _fnVisbleColumns( oSettings ) &&
|
|
4136
|
+
columnCount == headerCells.length
|
|
4105
4137
|
) {
|
|
4106
4138
|
for ( i=0 ; i<columnCount ; i++ ) {
|
|
4107
4139
|
columns[i].sWidth = _fnStringToCss( headerCells.eq(i).width() );
|
|
@@ -4109,22 +4141,29 @@
|
|
|
4109
4141
|
}
|
|
4110
4142
|
else
|
|
4111
4143
|
{
|
|
4112
|
-
// Otherwise construct a single row table with the widest
|
|
4113
|
-
// data, assign any user defined widths, then insert it into
|
|
4114
|
-
// allow the browser to do all the hard work of calculating
|
|
4144
|
+
// Otherwise construct a single row, worst case, table with the widest
|
|
4145
|
+
// node in the data, assign any user defined widths, then insert it into
|
|
4146
|
+
// the DOM and allow the browser to do all the hard work of calculating
|
|
4147
|
+
// table widths
|
|
4115
4148
|
var tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table
|
|
4116
|
-
.empty()
|
|
4117
4149
|
.css( 'visibility', 'hidden' )
|
|
4118
|
-
.removeAttr( 'id' )
|
|
4119
|
-
|
|
4120
|
-
|
|
4121
|
-
|
|
4150
|
+
.removeAttr( 'id' );
|
|
4151
|
+
|
|
4152
|
+
// Clean up the table body
|
|
4153
|
+
tmpTable.find('tbody tr').remove();
|
|
4154
|
+
var tr = $('<tr/>').appendTo( tmpTable.find('tbody') );
|
|
4155
|
+
|
|
4156
|
+
// Clone the table header and footer - we can't use the header / footer
|
|
4157
|
+
// from the cloned table, since if scrolling is active, the table's
|
|
4158
|
+
// real header and footer are contained in different table tags
|
|
4159
|
+
tmpTable.find('thead, tfoot').remove();
|
|
4160
|
+
tmpTable
|
|
4161
|
+
.append( $(oSettings.nTHead).clone() )
|
|
4162
|
+
.append( $(oSettings.nTFoot).clone() );
|
|
4122
4163
|
|
|
4123
4164
|
// Remove any assigned widths from the footer (from scrolling)
|
|
4124
4165
|
tmpTable.find('tfoot th, tfoot td').css('width', '');
|
|
4125
4166
|
|
|
4126
|
-
var tr = tmpTable.find( 'tbody tr' );
|
|
4127
|
-
|
|
4128
4167
|
// Apply custom sizing to the cloned header
|
|
4129
4168
|
headerCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );
|
|
4130
4169
|
|
|
@@ -4149,8 +4188,24 @@
|
|
|
4149
4188
|
}
|
|
4150
4189
|
}
|
|
4151
4190
|
|
|
4152
|
-
// Table has been built, attach to the document so we can work with it
|
|
4153
|
-
|
|
4191
|
+
// Table has been built, attach to the document so we can work with it.
|
|
4192
|
+
// A holding element is used, positioned at the top of the container
|
|
4193
|
+
// with minimal height, so it has no effect on if the container scrolls
|
|
4194
|
+
// or not. Otherwise it might trigger scrolling when it actually isn't
|
|
4195
|
+
// needed
|
|
4196
|
+
var holder = $('<div/>').css( scrollX || scrollY ?
|
|
4197
|
+
{
|
|
4198
|
+
position: 'absolute',
|
|
4199
|
+
top: 0,
|
|
4200
|
+
left: 0,
|
|
4201
|
+
height: 1,
|
|
4202
|
+
right: 0,
|
|
4203
|
+
overflow: 'hidden'
|
|
4204
|
+
} :
|
|
4205
|
+
{}
|
|
4206
|
+
)
|
|
4207
|
+
.append( tmpTable )
|
|
4208
|
+
.appendTo( tableContainer );
|
|
4154
4209
|
|
|
4155
4210
|
// When scrolling (X or Y) we want to set the width of the table as
|
|
4156
4211
|
// appropriate. However, when not scrolling leave the table width as it
|
|
@@ -4161,20 +4216,17 @@
|
|
|
4161
4216
|
else if ( scrollX ) {
|
|
4162
4217
|
tmpTable.css( 'width', 'auto' );
|
|
4163
4218
|
|
|
4164
|
-
if ( tmpTable.width() < tableContainer.
|
|
4165
|
-
tmpTable.width( tableContainer.
|
|
4219
|
+
if ( tmpTable.width() < tableContainer.clientWidth ) {
|
|
4220
|
+
tmpTable.width( tableContainer.clientWidth );
|
|
4166
4221
|
}
|
|
4167
4222
|
}
|
|
4168
4223
|
else if ( scrollY ) {
|
|
4169
|
-
tmpTable.width( tableContainer.
|
|
4224
|
+
tmpTable.width( tableContainer.clientWidth );
|
|
4170
4225
|
}
|
|
4171
4226
|
else if ( tableWidthAttr ) {
|
|
4172
4227
|
tmpTable.width( tableWidthAttr );
|
|
4173
4228
|
}
|
|
4174
4229
|
|
|
4175
|
-
// Take into account the y scrollbar
|
|
4176
|
-
_fnScrollingWidthAdjust( oSettings, tmpTable[0] );
|
|
4177
|
-
|
|
4178
4230
|
// Browsers need a bit of a hand when a width is assigned to any columns
|
|
4179
4231
|
// when x-scrolling as they tend to collapse the table to the min-width,
|
|
4180
4232
|
// even if we sent the column widths. So we need to keep track of what
|
|
@@ -4186,7 +4238,12 @@
|
|
|
4186
4238
|
|
|
4187
4239
|
for ( i=0 ; i<visibleColumns.length ; i++ ) {
|
|
4188
4240
|
column = columns[ visibleColumns[i] ];
|
|
4189
|
-
|
|
4241
|
+
|
|
4242
|
+
// Much prefer to use getBoundingClientRect due to its sub-pixel
|
|
4243
|
+
// resolution, but IE8- do not support the width property.
|
|
4244
|
+
outerWidth = browser.bBounding ?
|
|
4245
|
+
headerCells[i].getBoundingClientRect().width :
|
|
4246
|
+
$(headerCells[i]).outerWidth();
|
|
4190
4247
|
|
|
4191
4248
|
total += column.sWidthOrig === null ?
|
|
4192
4249
|
outerWidth :
|
|
@@ -4210,7 +4267,7 @@
|
|
|
4210
4267
|
table.style.width = _fnStringToCss( tmpTable.css('width') );
|
|
4211
4268
|
|
|
4212
4269
|
// Finished with the table - ditch it
|
|
4213
|
-
|
|
4270
|
+
holder.remove();
|
|
4214
4271
|
}
|
|
4215
4272
|
|
|
4216
4273
|
// If there is a width attr, we want to attach an event listener which
|
|
@@ -4222,9 +4279,20 @@
|
|
|
4222
4279
|
}
|
|
4223
4280
|
|
|
4224
4281
|
if ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {
|
|
4225
|
-
|
|
4226
|
-
|
|
4227
|
-
|
|
4282
|
+
var bindResize = function () {
|
|
4283
|
+
$(window).bind('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {
|
|
4284
|
+
_fnAdjustColumnSizing( oSettings );
|
|
4285
|
+
} ) );
|
|
4286
|
+
};
|
|
4287
|
+
|
|
4288
|
+
// IE6/7 will crash if we bind a resize event handler on page load.
|
|
4289
|
+
// To be removed in 1.11 which drops IE6/7 support
|
|
4290
|
+
if ( ie67 ) {
|
|
4291
|
+
setTimeout( bindResize, 1000 );
|
|
4292
|
+
}
|
|
4293
|
+
else {
|
|
4294
|
+
bindResize();
|
|
4295
|
+
}
|
|
4228
4296
|
|
|
4229
4297
|
oSettings._reszEvt = true;
|
|
4230
4298
|
}
|
|
@@ -4259,12 +4327,9 @@
|
|
|
4259
4327
|
fn.apply( that, args );
|
|
4260
4328
|
}, frequency );
|
|
4261
4329
|
}
|
|
4262
|
-
else if ( last ) {
|
|
4263
|
-
last = now;
|
|
4264
|
-
fn.apply( that, args );
|
|
4265
|
-
}
|
|
4266
4330
|
else {
|
|
4267
4331
|
last = now;
|
|
4332
|
+
fn.apply( that, args );
|
|
4268
4333
|
}
|
|
4269
4334
|
};
|
|
4270
4335
|
}
|
|
@@ -4294,27 +4359,6 @@
|
|
|
4294
4359
|
}
|
|
4295
4360
|
|
|
4296
4361
|
|
|
4297
|
-
/**
|
|
4298
|
-
* Adjust a table's width to take account of vertical scroll bar
|
|
4299
|
-
* @param {object} oSettings dataTables settings object
|
|
4300
|
-
* @param {node} n table node
|
|
4301
|
-
* @memberof DataTable#oApi
|
|
4302
|
-
*/
|
|
4303
|
-
|
|
4304
|
-
function _fnScrollingWidthAdjust ( settings, n )
|
|
4305
|
-
{
|
|
4306
|
-
var scroll = settings.oScroll;
|
|
4307
|
-
|
|
4308
|
-
if ( scroll.sX || scroll.sY ) {
|
|
4309
|
-
// When y-scrolling only, we want to remove the width of the scroll bar
|
|
4310
|
-
// so the table + scroll bar will fit into the area available, otherwise
|
|
4311
|
-
// we fix the table at its current size with no adjustment
|
|
4312
|
-
var correction = ! scroll.sX ? scroll.iBarWidth : 0;
|
|
4313
|
-
n.style.width = _fnStringToCss( $(n).outerWidth() - correction );
|
|
4314
|
-
}
|
|
4315
|
-
}
|
|
4316
|
-
|
|
4317
|
-
|
|
4318
4362
|
/**
|
|
4319
4363
|
* Get the widest node
|
|
4320
4364
|
* @param {object} settings dataTables settings object
|
|
@@ -4395,41 +4439,28 @@
|
|
|
4395
4439
|
{
|
|
4396
4440
|
// On first run a static variable is set, since this is only needed once.
|
|
4397
4441
|
// Subsequent runs will just use the previously calculated value
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
padding: 0
|
|
4403
|
-
} )[0];
|
|
4404
|
-
|
|
4405
|
-
var outer = $('<div/>')
|
|
4406
|
-
.css( {
|
|
4442
|
+
var width = DataTable.__scrollbarWidth;
|
|
4443
|
+
|
|
4444
|
+
if ( width === undefined ) {
|
|
4445
|
+
var sizer = $('<p/>').css( {
|
|
4407
4446
|
position: 'absolute',
|
|
4408
4447
|
top: 0,
|
|
4409
4448
|
left: 0,
|
|
4410
|
-
width:
|
|
4449
|
+
width: '100%',
|
|
4411
4450
|
height: 150,
|
|
4412
4451
|
padding: 0,
|
|
4413
|
-
overflow: '
|
|
4452
|
+
overflow: 'scroll',
|
|
4414
4453
|
visibility: 'hidden'
|
|
4415
4454
|
} )
|
|
4416
|
-
.
|
|
4417
|
-
.appendTo( 'body' );
|
|
4455
|
+
.appendTo('body');
|
|
4418
4456
|
|
|
4419
|
-
|
|
4420
|
-
|
|
4421
|
-
var w2 = inner.offsetWidth;
|
|
4457
|
+
width = sizer[0].offsetWidth - sizer[0].clientWidth;
|
|
4458
|
+
DataTable.__scrollbarWidth = width;
|
|
4422
4459
|
|
|
4423
|
-
|
|
4424
|
-
w2 = outer[0].clientWidth;
|
|
4425
|
-
}
|
|
4426
|
-
|
|
4427
|
-
outer.remove();
|
|
4428
|
-
|
|
4429
|
-
DataTable.__scrollbarWidth = w1 - w2;
|
|
4460
|
+
sizer.remove();
|
|
4430
4461
|
}
|
|
4431
4462
|
|
|
4432
|
-
return
|
|
4463
|
+
return width;
|
|
4433
4464
|
}
|
|
4434
4465
|
|
|
4435
4466
|
|
|
@@ -4720,6 +4751,10 @@
|
|
|
4720
4751
|
// Yes, modify the sort
|
|
4721
4752
|
nextSortIdx = next( sorting[sortIdx], true );
|
|
4722
4753
|
|
|
4754
|
+
if ( nextSortIdx === null && sorting.length === 1 ) {
|
|
4755
|
+
nextSortIdx = 0; // can't remove sorting completely
|
|
4756
|
+
}
|
|
4757
|
+
|
|
4723
4758
|
if ( nextSortIdx === null ) {
|
|
4724
4759
|
sorting.splice( sortIdx, 1 );
|
|
4725
4760
|
}
|
|
@@ -4954,31 +4989,43 @@
|
|
|
4954
4989
|
|
|
4955
4990
|
// Restore key features - todo - for 1.11 this needs to be done by
|
|
4956
4991
|
// subscribed events
|
|
4957
|
-
|
|
4958
|
-
|
|
4959
|
-
|
|
4960
|
-
|
|
4992
|
+
if ( state.start !== undefined ) {
|
|
4993
|
+
settings._iDisplayStart = state.start;
|
|
4994
|
+
settings.iInitDisplayStart = state.start;
|
|
4995
|
+
}
|
|
4996
|
+
if ( state.length !== undefined ) {
|
|
4997
|
+
settings._iDisplayLength = state.length;
|
|
4998
|
+
}
|
|
4961
4999
|
|
|
4962
5000
|
// Order
|
|
4963
|
-
|
|
4964
|
-
settings.aaSorting
|
|
4965
|
-
|
|
4966
|
-
col
|
|
4967
|
-
|
|
4968
|
-
|
|
5001
|
+
if ( state.order !== undefined ) {
|
|
5002
|
+
settings.aaSorting = [];
|
|
5003
|
+
$.each( state.order, function ( i, col ) {
|
|
5004
|
+
settings.aaSorting.push( col[0] >= columns.length ?
|
|
5005
|
+
[ 0, col[1] ] :
|
|
5006
|
+
col
|
|
5007
|
+
);
|
|
5008
|
+
} );
|
|
5009
|
+
}
|
|
4969
5010
|
|
|
4970
5011
|
// Search
|
|
4971
|
-
|
|
5012
|
+
if ( state.search !== undefined ) {
|
|
5013
|
+
$.extend( settings.oPreviousSearch, _fnSearchToHung( state.search ) );
|
|
5014
|
+
}
|
|
4972
5015
|
|
|
4973
5016
|
// Columns
|
|
4974
5017
|
for ( i=0, ien=state.columns.length ; i<ien ; i++ ) {
|
|
4975
5018
|
var col = state.columns[i];
|
|
4976
5019
|
|
|
4977
5020
|
// Visibility
|
|
4978
|
-
|
|
5021
|
+
if ( col.visible !== undefined ) {
|
|
5022
|
+
columns[i].bVisible = col.visible;
|
|
5023
|
+
}
|
|
4979
5024
|
|
|
4980
5025
|
// Search
|
|
4981
|
-
|
|
5026
|
+
if ( col.search !== undefined ) {
|
|
5027
|
+
$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );
|
|
5028
|
+
}
|
|
4982
5029
|
}
|
|
4983
5030
|
|
|
4984
5031
|
_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, state] );
|
|
@@ -5013,7 +5060,7 @@
|
|
|
5013
5060
|
function _fnLog( settings, level, msg, tn )
|
|
5014
5061
|
{
|
|
5015
5062
|
msg = 'DataTables warning: '+
|
|
5016
|
-
(settings
|
|
5063
|
+
(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;
|
|
5017
5064
|
|
|
5018
5065
|
if ( tn ) {
|
|
5019
5066
|
msg += '. For more information about this error, please see '+
|
|
@@ -5025,12 +5072,19 @@
|
|
|
5025
5072
|
var ext = DataTable.ext;
|
|
5026
5073
|
var type = ext.sErrMode || ext.errMode;
|
|
5027
5074
|
|
|
5075
|
+
if ( settings ) {
|
|
5076
|
+
_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );
|
|
5077
|
+
}
|
|
5078
|
+
|
|
5028
5079
|
if ( type == 'alert' ) {
|
|
5029
5080
|
alert( msg );
|
|
5030
5081
|
}
|
|
5031
|
-
else {
|
|
5082
|
+
else if ( type == 'throw' ) {
|
|
5032
5083
|
throw new Error(msg);
|
|
5033
5084
|
}
|
|
5085
|
+
else if ( typeof type == 'function' ) {
|
|
5086
|
+
type( settings, tn, msg );
|
|
5087
|
+
}
|
|
5034
5088
|
}
|
|
5035
5089
|
else if ( window.console && console.log ) {
|
|
5036
5090
|
console.log( msg );
|
|
@@ -5173,13 +5227,13 @@
|
|
|
5173
5227
|
* @param {object} settings dataTables settings object
|
|
5174
5228
|
* @param {string} callbackArr Name of the array storage for the callbacks in
|
|
5175
5229
|
* oSettings
|
|
5176
|
-
* @param {string}
|
|
5177
|
-
* trigger is fired
|
|
5230
|
+
* @param {string} eventName Name of the jQuery custom event to trigger. If
|
|
5231
|
+
* null no trigger is fired
|
|
5178
5232
|
* @param {array} args Array of arguments to pass to the callback function /
|
|
5179
5233
|
* trigger
|
|
5180
5234
|
* @memberof DataTable#oApi
|
|
5181
5235
|
*/
|
|
5182
|
-
function _fnCallbackFire( settings, callbackArr,
|
|
5236
|
+
function _fnCallbackFire( settings, callbackArr, eventName, args )
|
|
5183
5237
|
{
|
|
5184
5238
|
var ret = [];
|
|
5185
5239
|
|
|
@@ -5189,8 +5243,12 @@
|
|
|
5189
5243
|
} );
|
|
5190
5244
|
}
|
|
5191
5245
|
|
|
5192
|
-
if (
|
|
5193
|
-
|
|
5246
|
+
if ( eventName !== null ) {
|
|
5247
|
+
var e = $.Event( eventName+'.dt' );
|
|
5248
|
+
|
|
5249
|
+
$(settings.nTable).trigger( e, args );
|
|
5250
|
+
|
|
5251
|
+
ret.push( e.result );
|
|
5194
5252
|
}
|
|
5195
5253
|
|
|
5196
5254
|
return ret;
|
|
@@ -5602,8 +5660,8 @@
|
|
|
5602
5660
|
this.fnDraw = function( complete )
|
|
5603
5661
|
{
|
|
5604
5662
|
// Note that this isn't an exact match to the old call to _fnDraw - it takes
|
|
5605
|
-
// into account the new data, but can
|
|
5606
|
-
this.api( true ).draw(
|
|
5663
|
+
// into account the new data, but can hold position.
|
|
5664
|
+
this.api( true ).draw( complete );
|
|
5607
5665
|
};
|
|
5608
5666
|
|
|
5609
5667
|
|
|
@@ -6051,6 +6109,7 @@
|
|
|
6051
6109
|
var sId = this.getAttribute( 'id' );
|
|
6052
6110
|
var bInitHandedOff = false;
|
|
6053
6111
|
var defaults = DataTable.defaults;
|
|
6112
|
+
var $this = $(this);
|
|
6054
6113
|
|
|
6055
6114
|
|
|
6056
6115
|
/* Sanity check */
|
|
@@ -6069,30 +6128,34 @@
|
|
|
6069
6128
|
_fnCamelToHungarian( defaults.column, defaults.column, true );
|
|
6070
6129
|
|
|
6071
6130
|
/* Setting up the initialisation object */
|
|
6072
|
-
_fnCamelToHungarian( defaults, oInit );
|
|
6131
|
+
_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ) );
|
|
6132
|
+
|
|
6133
|
+
|
|
6073
6134
|
|
|
6074
6135
|
/* Check to see if we are re-initialising a table */
|
|
6075
6136
|
var allSettings = DataTable.settings;
|
|
6076
6137
|
for ( i=0, iLen=allSettings.length ; i<iLen ; i++ )
|
|
6077
6138
|
{
|
|
6139
|
+
var s = allSettings[i];
|
|
6140
|
+
|
|
6078
6141
|
/* Base check on table node */
|
|
6079
|
-
if (
|
|
6142
|
+
if ( s.nTable == this || s.nTHead.parentNode == this || (s.nTFoot && s.nTFoot.parentNode == this) )
|
|
6080
6143
|
{
|
|
6081
6144
|
var bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;
|
|
6082
6145
|
var bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;
|
|
6083
6146
|
|
|
6084
6147
|
if ( emptyInit || bRetrieve )
|
|
6085
6148
|
{
|
|
6086
|
-
return
|
|
6149
|
+
return s.oInstance;
|
|
6087
6150
|
}
|
|
6088
6151
|
else if ( bDestroy )
|
|
6089
6152
|
{
|
|
6090
|
-
|
|
6153
|
+
s.oInstance.fnDestroy();
|
|
6091
6154
|
break;
|
|
6092
6155
|
}
|
|
6093
6156
|
else
|
|
6094
6157
|
{
|
|
6095
|
-
_fnLog(
|
|
6158
|
+
_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );
|
|
6096
6159
|
return;
|
|
6097
6160
|
}
|
|
6098
6161
|
}
|
|
@@ -6102,7 +6165,7 @@
|
|
|
6102
6165
|
* instance by simply deleting it. This is under the assumption that the table has been
|
|
6103
6166
|
* destroyed by other methods. Anyone using non-id selectors will need to do this manually
|
|
6104
6167
|
*/
|
|
6105
|
-
if (
|
|
6168
|
+
if ( s.sTableId == this.id )
|
|
6106
6169
|
{
|
|
6107
6170
|
allSettings.splice( i, 1 );
|
|
6108
6171
|
break;
|
|
@@ -6118,18 +6181,19 @@
|
|
|
6118
6181
|
|
|
6119
6182
|
/* Create the settings object for this table and set some of the default parameters */
|
|
6120
6183
|
var oSettings = $.extend( true, {}, DataTable.models.oSettings, {
|
|
6121
|
-
"
|
|
6122
|
-
"oApi": _that.internal,
|
|
6123
|
-
"oInit": oInit,
|
|
6124
|
-
"sDestroyWidth": $(this)[0].style.width,
|
|
6184
|
+
"sDestroyWidth": $this[0].style.width,
|
|
6125
6185
|
"sInstance": sId,
|
|
6126
6186
|
"sTableId": sId
|
|
6127
6187
|
} );
|
|
6188
|
+
oSettings.nTable = this;
|
|
6189
|
+
oSettings.oApi = _that.internal;
|
|
6190
|
+
oSettings.oInit = oInit;
|
|
6191
|
+
|
|
6128
6192
|
allSettings.push( oSettings );
|
|
6129
6193
|
|
|
6130
6194
|
// Need to add the instance after the instance after the settings object has been added
|
|
6131
6195
|
// to the settings array, so we can self reference the table instance if more than one
|
|
6132
|
-
oSettings.oInstance = (_that.length===1) ? _that : $
|
|
6196
|
+
oSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();
|
|
6133
6197
|
|
|
6134
6198
|
// Backwards compatibility, before we apply all the defaults
|
|
6135
6199
|
_fnCompatOpts( oInit );
|
|
@@ -6185,6 +6249,7 @@
|
|
|
6185
6249
|
"fnStateSaveCallback",
|
|
6186
6250
|
"renderer",
|
|
6187
6251
|
"searchDelay",
|
|
6252
|
+
"rowId",
|
|
6188
6253
|
[ "iCookieDuration", "iStateDuration" ], // backwards compat
|
|
6189
6254
|
[ "oSearch", "oPreviousSearch" ],
|
|
6190
6255
|
[ "aoSearchCols", "aoPreSearchCols" ],
|
|
@@ -6212,6 +6277,8 @@
|
|
|
6212
6277
|
_fnCallbackReg( oSettings, 'aoInitComplete', oInit.fnInitComplete, 'user' );
|
|
6213
6278
|
_fnCallbackReg( oSettings, 'aoPreDrawCallback', oInit.fnPreDrawCallback, 'user' );
|
|
6214
6279
|
|
|
6280
|
+
oSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );
|
|
6281
|
+
|
|
6215
6282
|
var oClasses = oSettings.oClasses;
|
|
6216
6283
|
|
|
6217
6284
|
// @todo Remove in 1.11
|
|
@@ -6239,16 +6306,13 @@
|
|
|
6239
6306
|
{
|
|
6240
6307
|
$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );
|
|
6241
6308
|
}
|
|
6242
|
-
$
|
|
6309
|
+
$this.addClass( oClasses.sTable );
|
|
6243
6310
|
|
|
6244
6311
|
/* Calculate the scroll bar width and cache it for use later on */
|
|
6245
6312
|
if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" )
|
|
6246
6313
|
{
|
|
6247
6314
|
oSettings.oScroll.iBarWidth = _fnScrollBarWidth();
|
|
6248
6315
|
}
|
|
6249
|
-
if ( oSettings.oScroll.sX === true ) { // Easy initialisation of x-scrolling
|
|
6250
|
-
oSettings.oScroll.sX = '100%';
|
|
6251
|
-
}
|
|
6252
6316
|
|
|
6253
6317
|
if ( oSettings.iInitDisplayStart === undefined )
|
|
6254
6318
|
{
|
|
@@ -6305,7 +6369,7 @@
|
|
|
6305
6369
|
|
|
6306
6370
|
/* Remove row stripe classes if they are already on the table row */
|
|
6307
6371
|
var stripeClasses = oSettings.asStripeClasses;
|
|
6308
|
-
var rowOne = $('tbody
|
|
6372
|
+
var rowOne = $this.children('tbody').find('tr').eq(0);
|
|
6309
6373
|
if ( $.inArray( true, $.map( stripeClasses, function(el, i) {
|
|
6310
6374
|
return rowOne.hasClass(el);
|
|
6311
6375
|
} ) ) !== -1 ) {
|
|
@@ -6356,7 +6420,7 @@
|
|
|
6356
6420
|
*/
|
|
6357
6421
|
if ( rowOne.length ) {
|
|
6358
6422
|
var a = function ( cell, name ) {
|
|
6359
|
-
return cell.getAttribute( 'data-'+name ) ? name : null;
|
|
6423
|
+
return cell.getAttribute( 'data-'+name ) !== null ? name : null;
|
|
6360
6424
|
};
|
|
6361
6425
|
|
|
6362
6426
|
$.each( _fnGetRowElements( oSettings, rowOne[0] ).cells, function (i, cell) {
|
|
@@ -6445,25 +6509,25 @@
|
|
|
6445
6509
|
_fnBrowserDetect( oSettings );
|
|
6446
6510
|
|
|
6447
6511
|
// Work around for Webkit bug 83867 - store the caption-side before removing from doc
|
|
6448
|
-
var captions = $
|
|
6449
|
-
this._captionSide = $
|
|
6512
|
+
var captions = $this.children('caption').each( function () {
|
|
6513
|
+
this._captionSide = $this.css('caption-side');
|
|
6450
6514
|
} );
|
|
6451
6515
|
|
|
6452
|
-
var thead = $
|
|
6516
|
+
var thead = $this.children('thead');
|
|
6453
6517
|
if ( thead.length === 0 )
|
|
6454
6518
|
{
|
|
6455
6519
|
thead = $('<thead/>').appendTo(this);
|
|
6456
6520
|
}
|
|
6457
6521
|
oSettings.nTHead = thead[0];
|
|
6458
6522
|
|
|
6459
|
-
var tbody = $
|
|
6523
|
+
var tbody = $this.children('tbody');
|
|
6460
6524
|
if ( tbody.length === 0 )
|
|
6461
6525
|
{
|
|
6462
6526
|
tbody = $('<tbody/>').appendTo(this);
|
|
6463
6527
|
}
|
|
6464
6528
|
oSettings.nTBody = tbody[0];
|
|
6465
6529
|
|
|
6466
|
-
var tfoot = $
|
|
6530
|
+
var tfoot = $this.children('tfoot');
|
|
6467
6531
|
if ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") )
|
|
6468
6532
|
{
|
|
6469
6533
|
// If we are a scrolling table, and no footer has been given, then we need to create
|
|
@@ -6472,7 +6536,7 @@
|
|
|
6472
6536
|
}
|
|
6473
6537
|
|
|
6474
6538
|
if ( tfoot.length === 0 || tfoot.children().length === 0 ) {
|
|
6475
|
-
$
|
|
6539
|
+
$this.addClass( oClasses.sNoFooter );
|
|
6476
6540
|
}
|
|
6477
6541
|
else if ( tfoot.length > 0 ) {
|
|
6478
6542
|
oSettings.nTFoot = tfoot[0];
|
|
@@ -6681,10 +6745,8 @@
|
|
|
6681
6745
|
*/
|
|
6682
6746
|
_Api = function ( context, data )
|
|
6683
6747
|
{
|
|
6684
|
-
if ( ! this instanceof _Api ) {
|
|
6685
|
-
|
|
6686
|
-
// or should it do the 'new' for the caller?
|
|
6687
|
-
// return new _Api.apply( this, arguments );
|
|
6748
|
+
if ( ! (this instanceof _Api) ) {
|
|
6749
|
+
return new _Api( context, data );
|
|
6688
6750
|
}
|
|
6689
6751
|
|
|
6690
6752
|
var settings = [];
|
|
@@ -6725,24 +6787,24 @@
|
|
|
6725
6787
|
DataTable.Api = _Api;
|
|
6726
6788
|
|
|
6727
6789
|
_Api.prototype = /** @lends DataTables.Api */{
|
|
6728
|
-
|
|
6729
|
-
|
|
6730
|
-
|
|
6731
|
-
|
|
6732
|
-
|
|
6733
|
-
|
|
6734
|
-
* @type method
|
|
6735
|
-
* @param {*} value1 Arrays and/or values to concatenate.
|
|
6736
|
-
* @param {*} [...] Additional arrays and/or values to concatenate.
|
|
6737
|
-
* @returns {DataTables.Api} New API instance, comprising of the combined
|
|
6738
|
-
* array.
|
|
6739
|
-
*/
|
|
6790
|
+
any: function ()
|
|
6791
|
+
{
|
|
6792
|
+
return this.count() !== 0;
|
|
6793
|
+
},
|
|
6794
|
+
|
|
6795
|
+
|
|
6740
6796
|
concat: __arrayProto.concat,
|
|
6741
6797
|
|
|
6742
6798
|
|
|
6743
6799
|
context: [], // array of table settings objects
|
|
6744
6800
|
|
|
6745
6801
|
|
|
6802
|
+
count: function ()
|
|
6803
|
+
{
|
|
6804
|
+
return this.flatten().length;
|
|
6805
|
+
},
|
|
6806
|
+
|
|
6807
|
+
|
|
6746
6808
|
each: function ( fn )
|
|
6747
6809
|
{
|
|
6748
6810
|
for ( var i=0, ien=this.length ; i<ien; i++ ) {
|
|
@@ -6803,7 +6865,6 @@
|
|
|
6803
6865
|
return -1;
|
|
6804
6866
|
},
|
|
6805
6867
|
|
|
6806
|
-
// Note that `alwaysNew` is internal - use iteratorNew externally
|
|
6807
6868
|
iterator: function ( flatten, type, fn, alwaysNew ) {
|
|
6808
6869
|
var
|
|
6809
6870
|
a = [], ret,
|
|
@@ -6977,7 +7038,7 @@
|
|
|
6977
7038
|
_Api.extend = function ( scope, obj, ext )
|
|
6978
7039
|
{
|
|
6979
7040
|
// Only extend API instances and static properties of the API
|
|
6980
|
-
if ( ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {
|
|
7041
|
+
if ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {
|
|
6981
7042
|
return;
|
|
6982
7043
|
}
|
|
6983
7044
|
|
|
@@ -7226,15 +7287,21 @@
|
|
|
7226
7287
|
|
|
7227
7288
|
/**
|
|
7228
7289
|
* Redraw the tables in the current context.
|
|
7229
|
-
*
|
|
7230
|
-
* @param {boolean} [reset=true] Reset (default) or hold the current paging
|
|
7231
|
-
* position. A full re-sort and re-filter is performed when this method is
|
|
7232
|
-
* called, which is why the pagination reset is the default action.
|
|
7233
|
-
* @returns {DataTables.Api} this
|
|
7234
7290
|
*/
|
|
7235
|
-
_api_register( 'draw()', function (
|
|
7291
|
+
_api_register( 'draw()', function ( paging ) {
|
|
7236
7292
|
return this.iterator( 'table', function ( settings ) {
|
|
7237
|
-
|
|
7293
|
+
if ( paging === 'page' ) {
|
|
7294
|
+
_fnDraw( settings );
|
|
7295
|
+
}
|
|
7296
|
+
else {
|
|
7297
|
+
if ( typeof paging === 'string' ) {
|
|
7298
|
+
paging = paging === 'full-hold' ?
|
|
7299
|
+
false :
|
|
7300
|
+
true;
|
|
7301
|
+
}
|
|
7302
|
+
|
|
7303
|
+
_fnReDraw( settings, paging===false );
|
|
7304
|
+
}
|
|
7238
7305
|
} );
|
|
7239
7306
|
} );
|
|
7240
7307
|
|
|
@@ -7308,7 +7375,8 @@
|
|
|
7308
7375
|
"end": settings.fnDisplayEnd(),
|
|
7309
7376
|
"length": len,
|
|
7310
7377
|
"recordsTotal": settings.fnRecordsTotal(),
|
|
7311
|
-
"recordsDisplay": visRecords
|
|
7378
|
+
"recordsDisplay": visRecords,
|
|
7379
|
+
"serverSide": _fnDataSource( settings ) === 'ssp'
|
|
7312
7380
|
};
|
|
7313
7381
|
} );
|
|
7314
7382
|
|
|
@@ -7343,13 +7411,28 @@
|
|
|
7343
7411
|
|
|
7344
7412
|
|
|
7345
7413
|
var __reload = function ( settings, holdPosition, callback ) {
|
|
7414
|
+
// Use the draw event to trigger a callback
|
|
7415
|
+
if ( callback ) {
|
|
7416
|
+
var api = new _Api( settings );
|
|
7417
|
+
|
|
7418
|
+
api.one( 'draw', function () {
|
|
7419
|
+
callback( api.ajax.json() );
|
|
7420
|
+
} );
|
|
7421
|
+
}
|
|
7422
|
+
|
|
7346
7423
|
if ( _fnDataSource( settings ) == 'ssp' ) {
|
|
7347
7424
|
_fnReDraw( settings, holdPosition );
|
|
7348
7425
|
}
|
|
7349
7426
|
else {
|
|
7350
|
-
// Trigger xhr
|
|
7351
7427
|
_fnProcessingDisplay( settings, true );
|
|
7352
7428
|
|
|
7429
|
+
// Cancel an existing request
|
|
7430
|
+
var xhr = settings.jqXHR;
|
|
7431
|
+
if ( xhr && xhr.readyState !== 4 ) {
|
|
7432
|
+
xhr.abort();
|
|
7433
|
+
}
|
|
7434
|
+
|
|
7435
|
+
// Trigger xhr
|
|
7353
7436
|
_fnBuildAjax( settings, [], function( json ) {
|
|
7354
7437
|
_fnClearTable( settings );
|
|
7355
7438
|
|
|
@@ -7362,16 +7445,6 @@
|
|
|
7362
7445
|
_fnProcessingDisplay( settings, false );
|
|
7363
7446
|
} );
|
|
7364
7447
|
}
|
|
7365
|
-
|
|
7366
|
-
// Use the draw event to trigger a callback, regardless of if it is an async
|
|
7367
|
-
// or sync draw
|
|
7368
|
-
if ( callback ) {
|
|
7369
|
-
var api = new _Api( settings );
|
|
7370
|
-
|
|
7371
|
-
api.one( 'draw', function () {
|
|
7372
|
-
callback( api.ajax.json() );
|
|
7373
|
-
} );
|
|
7374
|
-
}
|
|
7375
7448
|
};
|
|
7376
7449
|
|
|
7377
7450
|
|
|
@@ -7487,7 +7560,7 @@
|
|
|
7487
7560
|
|
|
7488
7561
|
|
|
7489
7562
|
|
|
7490
|
-
var _selector_run = function ( selector,
|
|
7563
|
+
var _selector_run = function ( type, selector, selectFn, settings, opts )
|
|
7491
7564
|
{
|
|
7492
7565
|
var
|
|
7493
7566
|
out = [], res,
|
|
@@ -7506,7 +7579,7 @@
|
|
|
7506
7579
|
[ selector[i] ];
|
|
7507
7580
|
|
|
7508
7581
|
for ( j=0, jen=a.length ; j<jen ; j++ ) {
|
|
7509
|
-
res =
|
|
7582
|
+
res = selectFn( typeof a[j] === 'string' ? $.trim(a[j]) : a[j] );
|
|
7510
7583
|
|
|
7511
7584
|
if ( res && res.length ) {
|
|
7512
7585
|
out.push.apply( out, res );
|
|
@@ -7514,6 +7587,14 @@
|
|
|
7514
7587
|
}
|
|
7515
7588
|
}
|
|
7516
7589
|
|
|
7590
|
+
// selector extensions
|
|
7591
|
+
var ext = _ext.selector[ type ];
|
|
7592
|
+
if ( ext.length ) {
|
|
7593
|
+
for ( i=0, ien=ext.length ; i<ien ; i++ ) {
|
|
7594
|
+
out = ext[i]( settings, opts, out );
|
|
7595
|
+
}
|
|
7596
|
+
}
|
|
7597
|
+
|
|
7517
7598
|
return out;
|
|
7518
7599
|
};
|
|
7519
7600
|
|
|
@@ -7526,15 +7607,15 @@
|
|
|
7526
7607
|
|
|
7527
7608
|
// Backwards compatibility for 1.9- which used the terminology filter rather
|
|
7528
7609
|
// than search
|
|
7529
|
-
if ( opts.filter &&
|
|
7610
|
+
if ( opts.filter && opts.search === undefined ) {
|
|
7530
7611
|
opts.search = opts.filter;
|
|
7531
7612
|
}
|
|
7532
7613
|
|
|
7533
|
-
return {
|
|
7534
|
-
search:
|
|
7535
|
-
order:
|
|
7536
|
-
page:
|
|
7537
|
-
};
|
|
7614
|
+
return $.extend( {
|
|
7615
|
+
search: 'none',
|
|
7616
|
+
order: 'current',
|
|
7617
|
+
page: 'all'
|
|
7618
|
+
}, opts );
|
|
7538
7619
|
};
|
|
7539
7620
|
|
|
7540
7621
|
|
|
@@ -7546,6 +7627,7 @@
|
|
|
7546
7627
|
// Assign the first element to the first item in the instance
|
|
7547
7628
|
// and truncate the instance and context
|
|
7548
7629
|
inst[0] = inst[i];
|
|
7630
|
+
inst[0].length = 1;
|
|
7549
7631
|
inst.length = 1;
|
|
7550
7632
|
inst.context = [ inst.context[i] ];
|
|
7551
7633
|
|
|
@@ -7632,7 +7714,7 @@
|
|
|
7632
7714
|
|
|
7633
7715
|
var __row_selector = function ( settings, selector, opts )
|
|
7634
7716
|
{
|
|
7635
|
-
|
|
7717
|
+
var run = function ( sel ) {
|
|
7636
7718
|
var selInt = _intVal( sel );
|
|
7637
7719
|
var i, ien;
|
|
7638
7720
|
|
|
@@ -7675,6 +7757,26 @@
|
|
|
7675
7757
|
}
|
|
7676
7758
|
}
|
|
7677
7759
|
|
|
7760
|
+
// ID selector. Want to always be able to select rows by id, regardless
|
|
7761
|
+
// of if the tr element has been created or not, so can't rely upon
|
|
7762
|
+
// jQuery here - hence a custom implementation. This does not match
|
|
7763
|
+
// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,
|
|
7764
|
+
// but to select it using a CSS selector engine (like Sizzle or
|
|
7765
|
+
// querySelect) it would need to need to be escaped for some characters.
|
|
7766
|
+
// DataTables simplifies this for row selectors since you can select
|
|
7767
|
+
// only a row. A # indicates an id any anything that follows is the id -
|
|
7768
|
+
// unescaped.
|
|
7769
|
+
if ( typeof sel === 'string' && sel.charAt(0) === '#' ) {
|
|
7770
|
+
// get row index from id
|
|
7771
|
+
var rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];
|
|
7772
|
+
if ( rowObj !== undefined ) {
|
|
7773
|
+
return [ rowObj.idx ];
|
|
7774
|
+
}
|
|
7775
|
+
|
|
7776
|
+
// need to fall through to jQuery in case there is DOM id that
|
|
7777
|
+
// matches
|
|
7778
|
+
}
|
|
7779
|
+
|
|
7678
7780
|
// Selector - jQuery selector string, array of nodes or jQuery object/
|
|
7679
7781
|
// As jQuery's .filter() allows jQuery objects to be passed in filter,
|
|
7680
7782
|
// it also allows arrays, so this will cope with all three options
|
|
@@ -7684,13 +7786,12 @@
|
|
|
7684
7786
|
return this._DT_RowIndex;
|
|
7685
7787
|
} )
|
|
7686
7788
|
.toArray();
|
|
7687
|
-
}
|
|
7789
|
+
};
|
|
7790
|
+
|
|
7791
|
+
return _selector_run( 'row', selector, run, settings, opts );
|
|
7688
7792
|
};
|
|
7689
7793
|
|
|
7690
7794
|
|
|
7691
|
-
/**
|
|
7692
|
-
*
|
|
7693
|
-
*/
|
|
7694
7795
|
_api_register( 'rows()', function ( selector, opts ) {
|
|
7695
7796
|
// argument shifting
|
|
7696
7797
|
if ( selector === undefined ) {
|
|
@@ -7714,7 +7815,6 @@
|
|
|
7714
7815
|
return inst;
|
|
7715
7816
|
} );
|
|
7716
7817
|
|
|
7717
|
-
|
|
7718
7818
|
_api_register( 'rows().nodes()', function () {
|
|
7719
7819
|
return this.iterator( 'row', function ( settings, row ) {
|
|
7720
7820
|
return settings.aoData[ row ].nTr || undefined;
|
|
@@ -7746,10 +7846,25 @@
|
|
|
7746
7846
|
}, 1 );
|
|
7747
7847
|
} );
|
|
7748
7848
|
|
|
7849
|
+
_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {
|
|
7850
|
+
var a = [];
|
|
7851
|
+
var context = this.context;
|
|
7852
|
+
|
|
7853
|
+
// `iterator` will drop undefined values, but in this case we want them
|
|
7854
|
+
for ( var i=0, ien=context.length ; i<ien ; i++ ) {
|
|
7855
|
+
for ( var j=0, jen=this[i].length ; j<jen ; j++ ) {
|
|
7856
|
+
var id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );
|
|
7857
|
+
a.push( (hash === true ? '#' : '' )+ id );
|
|
7858
|
+
}
|
|
7859
|
+
}
|
|
7860
|
+
|
|
7861
|
+
return new _Api( context, a );
|
|
7862
|
+
} );
|
|
7863
|
+
|
|
7749
7864
|
_api_registerPlural( 'rows().remove()', 'row().remove()', function () {
|
|
7750
7865
|
var that = this;
|
|
7751
7866
|
|
|
7752
|
-
|
|
7867
|
+
this.iterator( 'row', function ( settings, row, thatIdx ) {
|
|
7753
7868
|
var data = settings.aoData;
|
|
7754
7869
|
|
|
7755
7870
|
data.splice( row, 1 );
|
|
@@ -7761,9 +7876,6 @@
|
|
|
7761
7876
|
}
|
|
7762
7877
|
}
|
|
7763
7878
|
|
|
7764
|
-
// Remove the target row from the search array
|
|
7765
|
-
var displayIndex = $.inArray( row, settings.aiDisplay );
|
|
7766
|
-
|
|
7767
7879
|
// Delete from the display arrays
|
|
7768
7880
|
_fnDeleteIndex( settings.aiDisplayMaster, row );
|
|
7769
7881
|
_fnDeleteIndex( settings.aiDisplay, row );
|
|
@@ -7772,6 +7884,14 @@
|
|
|
7772
7884
|
// Check for an 'overflow' they case for displaying the table
|
|
7773
7885
|
_fnLengthOverflow( settings );
|
|
7774
7886
|
} );
|
|
7887
|
+
|
|
7888
|
+
this.iterator( 'table', function ( settings ) {
|
|
7889
|
+
for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
|
|
7890
|
+
settings.aoData[i].idx = i;
|
|
7891
|
+
}
|
|
7892
|
+
} );
|
|
7893
|
+
|
|
7894
|
+
return this;
|
|
7775
7895
|
} );
|
|
7776
7896
|
|
|
7777
7897
|
|
|
@@ -7868,6 +7988,14 @@
|
|
|
7868
7988
|
// Convert to array of TR elements
|
|
7869
7989
|
var rows = [];
|
|
7870
7990
|
var addRow = function ( r, k ) {
|
|
7991
|
+
// Recursion to allow for arrays of jQuery objects
|
|
7992
|
+
if ( $.isArray( r ) || r instanceof $ ) {
|
|
7993
|
+
for ( var i=0, ien=r.length ; i<ien ; i++ ) {
|
|
7994
|
+
addRow( r[i], k );
|
|
7995
|
+
}
|
|
7996
|
+
return;
|
|
7997
|
+
}
|
|
7998
|
+
|
|
7871
7999
|
// If we get a TR element, then just add it directly - up to the dev
|
|
7872
8000
|
// to add the correct number of columns etc
|
|
7873
8001
|
if ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {
|
|
@@ -7885,14 +8013,7 @@
|
|
|
7885
8013
|
}
|
|
7886
8014
|
};
|
|
7887
8015
|
|
|
7888
|
-
|
|
7889
|
-
for ( var i=0, ien=data.length ; i<ien ; i++ ) {
|
|
7890
|
-
addRow( data[i], klass );
|
|
7891
|
-
}
|
|
7892
|
-
}
|
|
7893
|
-
else {
|
|
7894
|
-
addRow( data, klass );
|
|
7895
|
-
}
|
|
8016
|
+
addRow( data, klass );
|
|
7896
8017
|
|
|
7897
8018
|
if ( row._details ) {
|
|
7898
8019
|
row._details.remove();
|
|
@@ -7914,7 +8035,7 @@
|
|
|
7914
8035
|
if ( ctx.length ) {
|
|
7915
8036
|
var row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];
|
|
7916
8037
|
|
|
7917
|
-
if ( row._details ) {
|
|
8038
|
+
if ( row && row._details ) {
|
|
7918
8039
|
row._details.remove();
|
|
7919
8040
|
|
|
7920
8041
|
row._detailsShow = undefined;
|
|
@@ -8117,7 +8238,7 @@
|
|
|
8117
8238
|
names = _pluck( columns, 'sName' ),
|
|
8118
8239
|
nodes = _pluck( columns, 'nTh' );
|
|
8119
8240
|
|
|
8120
|
-
|
|
8241
|
+
var run = function ( s ) {
|
|
8121
8242
|
var selInt = _intVal( s );
|
|
8122
8243
|
|
|
8123
8244
|
// Selector - all
|
|
@@ -8183,7 +8304,9 @@
|
|
|
8183
8304
|
} )
|
|
8184
8305
|
.toArray();
|
|
8185
8306
|
}
|
|
8186
|
-
}
|
|
8307
|
+
};
|
|
8308
|
+
|
|
8309
|
+
return _selector_run( 'column', selector, run, settings, opts );
|
|
8187
8310
|
};
|
|
8188
8311
|
|
|
8189
8312
|
|
|
@@ -8246,9 +8369,6 @@
|
|
|
8246
8369
|
};
|
|
8247
8370
|
|
|
8248
8371
|
|
|
8249
|
-
/**
|
|
8250
|
-
*
|
|
8251
|
-
*/
|
|
8252
8372
|
_api_register( 'columns()', function ( selector, opts ) {
|
|
8253
8373
|
// argument shifting
|
|
8254
8374
|
if ( selector === undefined ) {
|
|
@@ -8272,42 +8392,28 @@
|
|
|
8272
8392
|
return inst;
|
|
8273
8393
|
} );
|
|
8274
8394
|
|
|
8275
|
-
|
|
8276
|
-
/**
|
|
8277
|
-
*
|
|
8278
|
-
*/
|
|
8279
8395
|
_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {
|
|
8280
8396
|
return this.iterator( 'column', function ( settings, column ) {
|
|
8281
8397
|
return settings.aoColumns[column].nTh;
|
|
8282
8398
|
}, 1 );
|
|
8283
8399
|
} );
|
|
8284
8400
|
|
|
8285
|
-
|
|
8286
|
-
/**
|
|
8287
|
-
*
|
|
8288
|
-
*/
|
|
8289
8401
|
_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {
|
|
8290
8402
|
return this.iterator( 'column', function ( settings, column ) {
|
|
8291
8403
|
return settings.aoColumns[column].nTf;
|
|
8292
8404
|
}, 1 );
|
|
8293
8405
|
} );
|
|
8294
8406
|
|
|
8295
|
-
|
|
8296
|
-
/**
|
|
8297
|
-
*
|
|
8298
|
-
*/
|
|
8299
8407
|
_api_registerPlural( 'columns().data()', 'column().data()', function () {
|
|
8300
8408
|
return this.iterator( 'column-rows', __columnData, 1 );
|
|
8301
8409
|
} );
|
|
8302
8410
|
|
|
8303
|
-
|
|
8304
8411
|
_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {
|
|
8305
8412
|
return this.iterator( 'column', function ( settings, column ) {
|
|
8306
8413
|
return settings.aoColumns[column].mData;
|
|
8307
8414
|
}, 1 );
|
|
8308
8415
|
} );
|
|
8309
8416
|
|
|
8310
|
-
|
|
8311
8417
|
_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {
|
|
8312
8418
|
return this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {
|
|
8313
8419
|
return _pluck_order( settings.aoData, rows,
|
|
@@ -8316,15 +8422,12 @@
|
|
|
8316
8422
|
}, 1 );
|
|
8317
8423
|
} );
|
|
8318
8424
|
|
|
8319
|
-
|
|
8320
8425
|
_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {
|
|
8321
8426
|
return this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {
|
|
8322
8427
|
return _pluck_order( settings.aoData, rows, 'anCells', column ) ;
|
|
8323
8428
|
}, 1 );
|
|
8324
8429
|
} );
|
|
8325
8430
|
|
|
8326
|
-
|
|
8327
|
-
|
|
8328
8431
|
_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {
|
|
8329
8432
|
return this.iterator( 'column', function ( settings, column ) {
|
|
8330
8433
|
if ( vis === undefined ) {
|
|
@@ -8334,8 +8437,6 @@
|
|
|
8334
8437
|
} );
|
|
8335
8438
|
} );
|
|
8336
8439
|
|
|
8337
|
-
|
|
8338
|
-
|
|
8339
8440
|
_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {
|
|
8340
8441
|
return this.iterator( 'column', function ( settings, column ) {
|
|
8341
8442
|
return type === 'visible' ?
|
|
@@ -8344,28 +8445,12 @@
|
|
|
8344
8445
|
}, 1 );
|
|
8345
8446
|
} );
|
|
8346
8447
|
|
|
8347
|
-
|
|
8348
|
-
// _api_register( 'columns().show()', function () {
|
|
8349
|
-
// var selector = this.selector;
|
|
8350
|
-
// return this.columns( selector.cols, selector.opts ).visible( true );
|
|
8351
|
-
// } );
|
|
8352
|
-
|
|
8353
|
-
|
|
8354
|
-
// _api_register( 'columns().hide()', function () {
|
|
8355
|
-
// var selector = this.selector;
|
|
8356
|
-
// return this.columns( selector.cols, selector.opts ).visible( false );
|
|
8357
|
-
// } );
|
|
8358
|
-
|
|
8359
|
-
|
|
8360
|
-
|
|
8361
8448
|
_api_register( 'columns.adjust()', function () {
|
|
8362
8449
|
return this.iterator( 'table', function ( settings ) {
|
|
8363
8450
|
_fnAdjustColumnSizing( settings );
|
|
8364
8451
|
}, 1 );
|
|
8365
8452
|
} );
|
|
8366
8453
|
|
|
8367
|
-
|
|
8368
|
-
// Convert from one column index type, to another type
|
|
8369
8454
|
_api_register( 'column.index()', function ( type, idx ) {
|
|
8370
8455
|
if ( this.context.length !== 0 ) {
|
|
8371
8456
|
var ctx = this.context[0];
|
|
@@ -8379,7 +8464,6 @@
|
|
|
8379
8464
|
}
|
|
8380
8465
|
} );
|
|
8381
8466
|
|
|
8382
|
-
|
|
8383
8467
|
_api_register( 'column()', function ( selector, opts ) {
|
|
8384
8468
|
return _selector_first( this.columns( selector, opts ) );
|
|
8385
8469
|
} );
|
|
@@ -8397,7 +8481,7 @@
|
|
|
8397
8481
|
var columns = settings.aoColumns.length;
|
|
8398
8482
|
var a, i, ien, j, o, host;
|
|
8399
8483
|
|
|
8400
|
-
|
|
8484
|
+
var run = function ( s ) {
|
|
8401
8485
|
var fnSelector = typeof s === 'function';
|
|
8402
8486
|
|
|
8403
8487
|
if ( s === null || s === undefined || fnSelector ) {
|
|
@@ -8417,7 +8501,7 @@
|
|
|
8417
8501
|
// Selector - function
|
|
8418
8502
|
host = settings.aoData[ row ];
|
|
8419
8503
|
|
|
8420
|
-
if ( s( o, _fnGetCellData(settings, row, j), host.anCells[j] ) ) {
|
|
8504
|
+
if ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {
|
|
8421
8505
|
a.push( o );
|
|
8422
8506
|
}
|
|
8423
8507
|
}
|
|
@@ -8448,7 +8532,9 @@
|
|
|
8448
8532
|
};
|
|
8449
8533
|
} )
|
|
8450
8534
|
.toArray();
|
|
8451
|
-
}
|
|
8535
|
+
};
|
|
8536
|
+
|
|
8537
|
+
return _selector_run( 'cell', selector, run, settings, opts );
|
|
8452
8538
|
};
|
|
8453
8539
|
|
|
8454
8540
|
|
|
@@ -8458,14 +8544,16 @@
|
|
|
8458
8544
|
// Argument shifting
|
|
8459
8545
|
if ( $.isPlainObject( rowSelector ) ) {
|
|
8460
8546
|
// Indexes
|
|
8461
|
-
if (
|
|
8462
|
-
|
|
8463
|
-
columnSelector = null;
|
|
8464
|
-
}
|
|
8465
|
-
else {
|
|
8547
|
+
if ( rowSelector.row === undefined ) {
|
|
8548
|
+
// Selector options in first parameter
|
|
8466
8549
|
opts = rowSelector;
|
|
8467
8550
|
rowSelector = null;
|
|
8468
8551
|
}
|
|
8552
|
+
else {
|
|
8553
|
+
// Cell index objects in first parameter
|
|
8554
|
+
opts = columnSelector;
|
|
8555
|
+
columnSelector = null;
|
|
8556
|
+
}
|
|
8469
8557
|
}
|
|
8470
8558
|
if ( $.isPlainObject( columnSelector ) ) {
|
|
8471
8559
|
opts = columnSelector;
|
|
@@ -8826,7 +8914,10 @@
|
|
|
8826
8914
|
var is = false;
|
|
8827
8915
|
|
|
8828
8916
|
$.each( DataTable.settings, function (i, o) {
|
|
8829
|
-
|
|
8917
|
+
var head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;
|
|
8918
|
+
var foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;
|
|
8919
|
+
|
|
8920
|
+
if ( o.nTable === t || head === t || foot === t ) {
|
|
8830
8921
|
is = true;
|
|
8831
8922
|
}
|
|
8832
8923
|
} );
|
|
@@ -8853,11 +8944,22 @@
|
|
|
8853
8944
|
*/
|
|
8854
8945
|
DataTable.tables = DataTable.fnTables = function ( visible )
|
|
8855
8946
|
{
|
|
8856
|
-
|
|
8947
|
+
var api = false;
|
|
8948
|
+
|
|
8949
|
+
if ( $.isPlainObject( visible ) ) {
|
|
8950
|
+
api = visible.api;
|
|
8951
|
+
visible = visible.visible;
|
|
8952
|
+
}
|
|
8953
|
+
|
|
8954
|
+
var a = $.map( DataTable.settings, function (o) {
|
|
8857
8955
|
if ( !visible || (visible && $(o.nTable).is(':visible')) ) {
|
|
8858
8956
|
return o.nTable;
|
|
8859
8957
|
}
|
|
8860
8958
|
} );
|
|
8959
|
+
|
|
8960
|
+
return api ?
|
|
8961
|
+
new _Api( a ) :
|
|
8962
|
+
a;
|
|
8861
8963
|
};
|
|
8862
8964
|
|
|
8863
8965
|
|
|
@@ -8954,6 +9056,12 @@
|
|
|
8954
9056
|
} );
|
|
8955
9057
|
|
|
8956
9058
|
|
|
9059
|
+
_api_register( 'init()', function () {
|
|
9060
|
+
var ctx = this.context;
|
|
9061
|
+
return ctx.length ? ctx[0].oInit : null;
|
|
9062
|
+
} );
|
|
9063
|
+
|
|
9064
|
+
|
|
8957
9065
|
_api_register( 'data()', function () {
|
|
8958
9066
|
return this.iterator( 'table', function ( settings ) {
|
|
8959
9067
|
return _pluck( settings.aoData, '_aData' );
|
|
@@ -9006,10 +9114,6 @@
|
|
|
9006
9114
|
jqTable.append( tfoot );
|
|
9007
9115
|
}
|
|
9008
9116
|
|
|
9009
|
-
// Remove the DataTables generated nodes, events and classes
|
|
9010
|
-
jqTable.detach();
|
|
9011
|
-
jqWrapper.detach();
|
|
9012
|
-
|
|
9013
9117
|
settings.aaSorting = [];
|
|
9014
9118
|
settings.aaSortingFixed = [];
|
|
9015
9119
|
_fnSortingClasses( settings );
|
|
@@ -9029,30 +9133,36 @@
|
|
|
9029
9133
|
} );
|
|
9030
9134
|
}
|
|
9031
9135
|
|
|
9032
|
-
if ( ! remove && orig ) {
|
|
9033
|
-
// insertBefore acts like appendChild if !arg[1]
|
|
9034
|
-
orig.insertBefore( table, settings.nTableReinsertBefore );
|
|
9035
|
-
}
|
|
9036
|
-
|
|
9037
9136
|
// Add the TR elements back into the table in their original order
|
|
9038
9137
|
jqTbody.children().detach();
|
|
9039
9138
|
jqTbody.append( rows );
|
|
9040
9139
|
|
|
9041
|
-
//
|
|
9042
|
-
|
|
9043
|
-
jqTable
|
|
9044
|
-
|
|
9045
|
-
.removeClass( classes.sTable );
|
|
9140
|
+
// Remove the DataTables generated nodes, events and classes
|
|
9141
|
+
var removedMethod = remove ? 'remove' : 'detach';
|
|
9142
|
+
jqTable[ removedMethod ]();
|
|
9143
|
+
jqWrapper[ removedMethod ]();
|
|
9046
9144
|
|
|
9047
|
-
// If
|
|
9048
|
-
|
|
9049
|
-
|
|
9050
|
-
|
|
9145
|
+
// If we need to reattach the table to the document
|
|
9146
|
+
if ( ! remove && orig ) {
|
|
9147
|
+
// insertBefore acts like appendChild if !arg[1]
|
|
9148
|
+
orig.insertBefore( table, settings.nTableReinsertBefore );
|
|
9051
9149
|
|
|
9052
|
-
|
|
9053
|
-
|
|
9054
|
-
|
|
9055
|
-
|
|
9150
|
+
// Restore the width of the original table - was read from the style property,
|
|
9151
|
+
// so we can restore directly to that
|
|
9152
|
+
jqTable
|
|
9153
|
+
.css( 'width', settings.sDestroyWidth )
|
|
9154
|
+
.removeClass( classes.sTable );
|
|
9155
|
+
|
|
9156
|
+
// If the were originally stripe classes - then we add them back here.
|
|
9157
|
+
// Note this is not fool proof (for example if not all rows had stripe
|
|
9158
|
+
// classes - but it's a good effort without getting carried away
|
|
9159
|
+
ien = settings.asDestroyStripes.length;
|
|
9160
|
+
|
|
9161
|
+
if ( ien ) {
|
|
9162
|
+
jqTbody.children().each( function (i) {
|
|
9163
|
+
$(this).addClass( settings.asDestroyStripes[i % ien] );
|
|
9164
|
+
} );
|
|
9165
|
+
}
|
|
9056
9166
|
}
|
|
9057
9167
|
|
|
9058
9168
|
/* Remove the settings object from the settings array */
|
|
@@ -9063,6 +9173,48 @@
|
|
|
9063
9173
|
} );
|
|
9064
9174
|
} );
|
|
9065
9175
|
|
|
9176
|
+
|
|
9177
|
+
// Add the `every()` method for rows, columns and cells in a compact form
|
|
9178
|
+
$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {
|
|
9179
|
+
_api_register( type+'s().every()', function ( fn ) {
|
|
9180
|
+
return this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {
|
|
9181
|
+
// Rows and columns:
|
|
9182
|
+
// arg1 - index
|
|
9183
|
+
// arg2 - table counter
|
|
9184
|
+
// arg3 - loop counter
|
|
9185
|
+
// arg4 - undefined
|
|
9186
|
+
// Cells:
|
|
9187
|
+
// arg1 - row index
|
|
9188
|
+
// arg2 - column index
|
|
9189
|
+
// arg3 - table counter
|
|
9190
|
+
// arg4 - loop counter
|
|
9191
|
+
fn.call(
|
|
9192
|
+
new _Api( settings )[ type ]( arg1, type==='cell' ? arg2 : undefined ),
|
|
9193
|
+
arg1, arg2, arg3, arg4
|
|
9194
|
+
);
|
|
9195
|
+
} );
|
|
9196
|
+
} );
|
|
9197
|
+
} );
|
|
9198
|
+
|
|
9199
|
+
|
|
9200
|
+
// i18n method for extensions to be able to use the language object from the
|
|
9201
|
+
// DataTable
|
|
9202
|
+
_api_register( 'i18n()', function ( token, def, plural ) {
|
|
9203
|
+
var ctx = this.context[0];
|
|
9204
|
+
var resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );
|
|
9205
|
+
|
|
9206
|
+
if ( resolved === undefined ) {
|
|
9207
|
+
resolved = def;
|
|
9208
|
+
}
|
|
9209
|
+
|
|
9210
|
+
if ( plural !== undefined && $.isPlainObject( resolved ) ) {
|
|
9211
|
+
resolved = resolved[ plural ] !== undefined ?
|
|
9212
|
+
resolved[ plural ] :
|
|
9213
|
+
resolved._;
|
|
9214
|
+
}
|
|
9215
|
+
|
|
9216
|
+
return resolved.replace( '%d', plural ); // nb: plural might be undefined,
|
|
9217
|
+
} );
|
|
9066
9218
|
|
|
9067
9219
|
/**
|
|
9068
9220
|
* Version string for plug-ins to check compatibility. Allowed format is
|
|
@@ -9072,7 +9224,7 @@
|
|
|
9072
9224
|
* @type string
|
|
9073
9225
|
* @default Version number
|
|
9074
9226
|
*/
|
|
9075
|
-
DataTable.version = "1.10.
|
|
9227
|
+
DataTable.version = "1.10.8";
|
|
9076
9228
|
|
|
9077
9229
|
/**
|
|
9078
9230
|
* Private data store, containing all of the settings objects that are
|
|
@@ -9224,7 +9376,16 @@
|
|
|
9224
9376
|
* @default null
|
|
9225
9377
|
* @private
|
|
9226
9378
|
*/
|
|
9227
|
-
"src": null
|
|
9379
|
+
"src": null,
|
|
9380
|
+
|
|
9381
|
+
/**
|
|
9382
|
+
* Index in the aoData array. This saves an indexOf lookup when we have the
|
|
9383
|
+
* object, but want to know the index
|
|
9384
|
+
* @type integer
|
|
9385
|
+
* @default -1
|
|
9386
|
+
* @private
|
|
9387
|
+
*/
|
|
9388
|
+
"idx": -1
|
|
9228
9389
|
};
|
|
9229
9390
|
|
|
9230
9391
|
|
|
@@ -11665,7 +11826,18 @@
|
|
|
11665
11826
|
* @name DataTable.defaults.renderer
|
|
11666
11827
|
*
|
|
11667
11828
|
*/
|
|
11668
|
-
"renderer": null
|
|
11829
|
+
"renderer": null,
|
|
11830
|
+
|
|
11831
|
+
|
|
11832
|
+
/**
|
|
11833
|
+
* Set the data property name that DataTables should use to get a row's id
|
|
11834
|
+
* to set as the `id` property in the node.
|
|
11835
|
+
* @type string
|
|
11836
|
+
* @default DT_RowId
|
|
11837
|
+
*
|
|
11838
|
+
* @name DataTable.defaults.rowId
|
|
11839
|
+
*/
|
|
11840
|
+
"rowId": "DT_RowId"
|
|
11669
11841
|
};
|
|
11670
11842
|
|
|
11671
11843
|
_fnHungarianMap( DataTable.defaults );
|
|
@@ -12764,7 +12936,14 @@
|
|
|
12764
12936
|
* @type boolean
|
|
12765
12937
|
* @default false
|
|
12766
12938
|
*/
|
|
12767
|
-
"bScrollbarLeft": false
|
|
12939
|
+
"bScrollbarLeft": false,
|
|
12940
|
+
|
|
12941
|
+
/**
|
|
12942
|
+
* Flag for if `getBoundingClientRect` is fully supported or not
|
|
12943
|
+
* @type boolean
|
|
12944
|
+
* @default false
|
|
12945
|
+
*/
|
|
12946
|
+
"bBounding": false
|
|
12768
12947
|
},
|
|
12769
12948
|
|
|
12770
12949
|
|
|
@@ -12809,6 +12988,13 @@
|
|
|
12809
12988
|
*/
|
|
12810
12989
|
"aiDisplayMaster": [],
|
|
12811
12990
|
|
|
12991
|
+
/**
|
|
12992
|
+
* Map of row ids to data indexes
|
|
12993
|
+
* @type object
|
|
12994
|
+
* @default {}
|
|
12995
|
+
*/
|
|
12996
|
+
"aIds": {},
|
|
12997
|
+
|
|
12812
12998
|
/**
|
|
12813
12999
|
* Store information about each column that is in use
|
|
12814
13000
|
* @type array
|
|
@@ -13417,7 +13603,21 @@
|
|
|
13417
13603
|
* @type object
|
|
13418
13604
|
* @default {}
|
|
13419
13605
|
*/
|
|
13420
|
-
"oPlugins": {}
|
|
13606
|
+
"oPlugins": {},
|
|
13607
|
+
|
|
13608
|
+
/**
|
|
13609
|
+
* Function used to get a row's id from the row's data
|
|
13610
|
+
* @type function
|
|
13611
|
+
* @default null
|
|
13612
|
+
*/
|
|
13613
|
+
"rowIdFn": null,
|
|
13614
|
+
|
|
13615
|
+
/**
|
|
13616
|
+
* Data location where to store a row's id
|
|
13617
|
+
* @type string
|
|
13618
|
+
* @default null
|
|
13619
|
+
*/
|
|
13620
|
+
"rowId": null
|
|
13421
13621
|
};
|
|
13422
13622
|
|
|
13423
13623
|
/**
|
|
@@ -13446,6 +13646,17 @@
|
|
|
13446
13646
|
* @namespace
|
|
13447
13647
|
*/
|
|
13448
13648
|
DataTable.ext = _ext = {
|
|
13649
|
+
/**
|
|
13650
|
+
* Buttons. For use with the Buttons extension for DataTables. This is
|
|
13651
|
+
* defined here so other extensions can define buttons regardless of load
|
|
13652
|
+
* order. It is _not_ used by DataTables core.
|
|
13653
|
+
*
|
|
13654
|
+
* @type object
|
|
13655
|
+
* @default {}
|
|
13656
|
+
*/
|
|
13657
|
+
buttons: {},
|
|
13658
|
+
|
|
13659
|
+
|
|
13449
13660
|
/**
|
|
13450
13661
|
* Element class names
|
|
13451
13662
|
*
|
|
@@ -13458,10 +13669,10 @@
|
|
|
13458
13669
|
/**
|
|
13459
13670
|
* Error reporting.
|
|
13460
13671
|
*
|
|
13461
|
-
* How should DataTables report an error. Can take the value 'alert'
|
|
13462
|
-
* 'throw'
|
|
13672
|
+
* How should DataTables report an error. Can take the value 'alert',
|
|
13673
|
+
* 'throw', 'none' or a function.
|
|
13463
13674
|
*
|
|
13464
|
-
* @type string
|
|
13675
|
+
* @type string|function
|
|
13465
13676
|
* @default alert
|
|
13466
13677
|
*/
|
|
13467
13678
|
errMode: "alert",
|
|
@@ -13568,6 +13779,37 @@
|
|
|
13568
13779
|
search: [],
|
|
13569
13780
|
|
|
13570
13781
|
|
|
13782
|
+
/**
|
|
13783
|
+
* Selector extensions
|
|
13784
|
+
*
|
|
13785
|
+
* The `selector` option can be used to extend the options available for the
|
|
13786
|
+
* selector modifier options (`selector-modifier` object data type) that
|
|
13787
|
+
* each of the three built in selector types offer (row, column and cell +
|
|
13788
|
+
* their plural counterparts). For example the Select extension uses this
|
|
13789
|
+
* mechanism to provide an option to select only rows, columns and cells
|
|
13790
|
+
* that have been marked as selected by the end user (`{selected: true}`),
|
|
13791
|
+
* which can be used in conjunction with the existing built in selector
|
|
13792
|
+
* options.
|
|
13793
|
+
*
|
|
13794
|
+
* Each property is an array to which functions can be pushed. The functions
|
|
13795
|
+
* take three attributes:
|
|
13796
|
+
*
|
|
13797
|
+
* * Settings object for the host table
|
|
13798
|
+
* * Options object (`selector-modifier` object type)
|
|
13799
|
+
* * Array of selected item indexes
|
|
13800
|
+
*
|
|
13801
|
+
* The return is an array of the resulting item indexes after the custom
|
|
13802
|
+
* selector has been applied.
|
|
13803
|
+
*
|
|
13804
|
+
* @type object
|
|
13805
|
+
*/
|
|
13806
|
+
selector: {
|
|
13807
|
+
cell: [],
|
|
13808
|
+
column: [],
|
|
13809
|
+
row: []
|
|
13810
|
+
},
|
|
13811
|
+
|
|
13812
|
+
|
|
13571
13813
|
/**
|
|
13572
13814
|
* Internal functions, exposed for used in plug-ins.
|
|
13573
13815
|
*
|
|
@@ -14061,7 +14303,7 @@
|
|
|
14061
14303
|
numbers.splice( 0, 0, 0 );
|
|
14062
14304
|
}
|
|
14063
14305
|
else {
|
|
14064
|
-
numbers = _range( page-
|
|
14306
|
+
numbers = _range( page-half+2, page+half-1 );
|
|
14065
14307
|
numbers.push( 'ellipsis' );
|
|
14066
14308
|
numbers.push( pages-1 );
|
|
14067
14309
|
numbers.splice( 0, 0, 'ellipsis' );
|
|
@@ -14082,6 +14324,10 @@
|
|
|
14082
14324
|
return [ 'first', 'previous', 'next', 'last' ];
|
|
14083
14325
|
},
|
|
14084
14326
|
|
|
14327
|
+
numbers: function ( page, pages ) {
|
|
14328
|
+
return [ _numbers(page, pages) ];
|
|
14329
|
+
},
|
|
14330
|
+
|
|
14085
14331
|
simple_numbers: function ( page, pages ) {
|
|
14086
14332
|
return [ 'previous', _numbers(page, pages), 'next' ];
|
|
14087
14333
|
},
|
|
@@ -14092,6 +14338,8 @@
|
|
|
14092
14338
|
|
|
14093
14339
|
// For testing and plug-ins to use
|
|
14094
14340
|
_numbers: _numbers,
|
|
14341
|
+
|
|
14342
|
+
// Number of number buttons (including ellipsis) to show. _Must be odd!_
|
|
14095
14343
|
numbers_length: 7
|
|
14096
14344
|
} );
|
|
14097
14345
|
|
|
@@ -14118,12 +14366,12 @@
|
|
|
14118
14366
|
attach( inner, button );
|
|
14119
14367
|
}
|
|
14120
14368
|
else {
|
|
14121
|
-
btnDisplay =
|
|
14369
|
+
btnDisplay = null;
|
|
14122
14370
|
btnClass = '';
|
|
14123
14371
|
|
|
14124
14372
|
switch ( button ) {
|
|
14125
14373
|
case 'ellipsis':
|
|
14126
|
-
container.append('<span
|
|
14374
|
+
container.append('<span class="ellipsis">…</span>');
|
|
14127
14375
|
break;
|
|
14128
14376
|
|
|
14129
14377
|
case 'first':
|
|
@@ -14157,7 +14405,7 @@
|
|
|
14157
14405
|
break;
|
|
14158
14406
|
}
|
|
14159
14407
|
|
|
14160
|
-
if ( btnDisplay ) {
|
|
14408
|
+
if ( btnDisplay !== null ) {
|
|
14161
14409
|
node = $('<a>', {
|
|
14162
14410
|
'class': classes.sPageButton+' '+btnClass,
|
|
14163
14411
|
'aria-controls': settings.sTableId,
|
|
@@ -14183,20 +14431,22 @@
|
|
|
14183
14431
|
// IE9 throws an 'unknown error' if document.activeElement is used
|
|
14184
14432
|
// inside an iframe or frame. Try / catch the error. Not good for
|
|
14185
14433
|
// accessibility, but neither are frames.
|
|
14434
|
+
var activeEl;
|
|
14435
|
+
|
|
14186
14436
|
try {
|
|
14187
14437
|
// Because this approach is destroying and recreating the paging
|
|
14188
14438
|
// elements, focus is lost on the select button which is bad for
|
|
14189
14439
|
// accessibility. So we want to restore focus once the draw has
|
|
14190
14440
|
// completed
|
|
14191
|
-
|
|
14441
|
+
activeEl = $(host).find(document.activeElement).data('dt-idx');
|
|
14442
|
+
}
|
|
14443
|
+
catch (e) {}
|
|
14192
14444
|
|
|
14193
|
-
|
|
14445
|
+
attach( $(host).empty(), buttons );
|
|
14194
14446
|
|
|
14195
|
-
|
|
14196
|
-
|
|
14197
|
-
}
|
|
14447
|
+
if ( activeEl ) {
|
|
14448
|
+
$(host).find( '[data-dt-idx='+activeEl+']' ).focus();
|
|
14198
14449
|
}
|
|
14199
|
-
catch (e) {}
|
|
14200
14450
|
}
|
|
14201
14451
|
}
|
|
14202
14452
|
} );
|
|
@@ -14486,11 +14736,12 @@
|
|
|
14486
14736
|
*
|
|
14487
14737
|
* * `number` - Will format numeric data (defined by `columns.data`) for
|
|
14488
14738
|
* display, retaining the original unformatted data for sorting and filtering.
|
|
14489
|
-
* It takes
|
|
14739
|
+
* It takes 5 parameters:
|
|
14490
14740
|
* * `string` - Thousands grouping separator
|
|
14491
14741
|
* * `string` - Decimal point indicator
|
|
14492
14742
|
* * `integer` - Number of decimal points to show
|
|
14493
14743
|
* * `string` (optional) - Prefix.
|
|
14744
|
+
* * `string` (optional) - Postfix (/suffix).
|
|
14494
14745
|
*
|
|
14495
14746
|
* @example
|
|
14496
14747
|
* // Column definition using the number renderer
|
|
@@ -14502,9 +14753,13 @@
|
|
|
14502
14753
|
* @namespace
|
|
14503
14754
|
*/
|
|
14504
14755
|
DataTable.render = {
|
|
14505
|
-
number: function ( thousands, decimal, precision, prefix ) {
|
|
14756
|
+
number: function ( thousands, decimal, precision, prefix, postfix ) {
|
|
14506
14757
|
return {
|
|
14507
14758
|
display: function ( d ) {
|
|
14759
|
+
if ( typeof d !== 'number' && typeof d !== 'string' ) {
|
|
14760
|
+
return d;
|
|
14761
|
+
}
|
|
14762
|
+
|
|
14508
14763
|
var negative = d < 0 ? '-' : '';
|
|
14509
14764
|
d = Math.abs( parseFloat( d ) );
|
|
14510
14765
|
|
|
@@ -14517,7 +14772,8 @@
|
|
|
14517
14772
|
intPart.toString().replace(
|
|
14518
14773
|
/\B(?=(\d{3})+(?!\d))/g, thousands
|
|
14519
14774
|
) +
|
|
14520
|
-
floatPart
|
|
14775
|
+
floatPart +
|
|
14776
|
+
(postfix||'');
|
|
14521
14777
|
}
|
|
14522
14778
|
};
|
|
14523
14779
|
}
|
|
@@ -14621,7 +14877,6 @@
|
|
|
14621
14877
|
_fnCalculateColumnWidths: _fnCalculateColumnWidths,
|
|
14622
14878
|
_fnThrottle: _fnThrottle,
|
|
14623
14879
|
_fnConvertToWidth: _fnConvertToWidth,
|
|
14624
|
-
_fnScrollingWidthAdjust: _fnScrollingWidthAdjust,
|
|
14625
14880
|
_fnGetWidestNode: _fnGetWidestNode,
|
|
14626
14881
|
_fnGetMaxLenString: _fnGetMaxLenString,
|
|
14627
14882
|
_fnStringToCss: _fnStringToCss,
|