mirror of
https://github.com/DataTables/DataTables.git
synced 2025-01-18 11:52:11 +01:00
Fix: DataTables/DataTables #281 - Invalidated DOM rows and hidden columns
- When invalidating a DOM row, DataTables wasn't taking into account the fact that the columns in the row might be hidden. This means that the array of data read is shortened by the number of hidden columns, and thus the data is corrupted. - Fix is to read from the known cells if the row already exists
This commit is contained in:
parent
3516626d9a
commit
63beec6486
@ -1 +1 @@
|
||||
1ab5a4f786ab8e1a7640221e0ac29ae61977657e
|
||||
e913f38ce63cafba83be594d87269d65d56cfba5
|
||||
|
53
examples/resources/syntax/shCore.js
vendored
53
examples/resources/syntax/shCore.js
vendored
@ -1985,6 +1985,59 @@ typeof(exports) != 'undefined' ? exports.SyntaxHighlighter = SyntaxHighlighter :
|
||||
})();
|
||||
|
||||
|
||||
;(function()
|
||||
{
|
||||
// CommonJS
|
||||
SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
|
||||
|
||||
function Brush()
|
||||
{
|
||||
var funcs = 'abs avg case cast coalesce convert count current_timestamp ' +
|
||||
'current_user day isnull left lower month nullif replace right ' +
|
||||
'session_user space substring sum system_user upper user year';
|
||||
|
||||
var keywords = 'absolute action add after alter as asc at authorization begin bigint ' +
|
||||
'binary bit by cascade char character check checkpoint close collate ' +
|
||||
'column commit committed connect connection constraint contains continue ' +
|
||||
'create cube current current_date current_time cursor database date ' +
|
||||
'deallocate dec decimal declare default delete desc distinct double drop ' +
|
||||
'dynamic else end end-exec escape except exec execute false fetch first ' +
|
||||
'float for force foreign forward free from full function global goto grant ' +
|
||||
'group grouping having hour ignore index inner insensitive insert instead ' +
|
||||
'int integer intersect into is isolation key last level load local max min ' +
|
||||
'minute modify move name national nchar next no numeric of off on only ' +
|
||||
'open option order out output partial password precision prepare primary ' +
|
||||
'prior privileges procedure public read real references relative repeatable ' +
|
||||
'restrict return returns revoke rollback rollup rows rule schema scroll ' +
|
||||
'second section select sequence serializable set size smallint static ' +
|
||||
'statistics table temp temporary then time timestamp to top transaction ' +
|
||||
'translation trigger true truncate uncommitted union unique update values ' +
|
||||
'varchar varying view when where with work';
|
||||
|
||||
var operators = 'all and any between cross in join like not null or outer some';
|
||||
|
||||
this.regexList = [
|
||||
{ regex: /--(.*)$/gm, css: 'comments' }, // one line comments
|
||||
{ regex: /\/\*([^\*][\s\S]*?)?\*\//gm, css: 'comments' }, // multi line comments
|
||||
{ regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString, css: 'string' }, // double quoted strings
|
||||
{ regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString, css: 'string' }, // single quoted strings
|
||||
{ regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'color2' }, // functions
|
||||
{ regex: new RegExp(this.getKeywords(operators), 'gmi'), css: 'color1' }, // operators and such
|
||||
{ regex: new RegExp(this.getKeywords(keywords), 'gmi'), css: 'keyword' } // keyword
|
||||
];
|
||||
};
|
||||
|
||||
Brush.prototype = new SyntaxHighlighter.Highlighter();
|
||||
Brush.aliases = ['sql'];
|
||||
|
||||
SyntaxHighlighter.brushes.Sql = Brush;
|
||||
|
||||
// CommonJS
|
||||
typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
|
||||
})();
|
||||
|
||||
|
||||
|
||||
;(function()
|
||||
{
|
||||
// CommonJS
|
||||
|
64
media/js/jquery.dataTables.js
vendored
64
media/js/jquery.dataTables.js
vendored
@ -1394,7 +1394,7 @@
|
||||
// Are we reading last data from DOM or the data object?
|
||||
if ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {
|
||||
// Read the data from the DOM
|
||||
row._aData = _fnGetRowElements( settings, row.nTr ).data;
|
||||
row._aData = _fnGetRowElements( settings, row ).data;
|
||||
}
|
||||
else {
|
||||
// Reading from data object, update the DOM
|
||||
@ -1432,7 +1432,8 @@
|
||||
* cells that are in the row.
|
||||
*
|
||||
* @param {object} settings DataTables settings object
|
||||
* @param {node} TR element from which to read data
|
||||
* @param {node|object} TR element from which to read data or existing row
|
||||
* object from which to re-read the data from the cells
|
||||
* @returns {object} Object with two parameters: `data` the data read, in
|
||||
* document order, and `cells` and array of nodes (they can be useful to the
|
||||
* caller, so rather than needing a second traversal to get them, just return
|
||||
@ -1459,33 +1460,48 @@
|
||||
}
|
||||
};
|
||||
|
||||
while ( td ) {
|
||||
name = td.nodeName.toUpperCase();
|
||||
var cellProcess = function ( cell ) {
|
||||
col = columns[i];
|
||||
contents = $.trim(cell.innerHTML);
|
||||
|
||||
if ( name == "TD" || name == "TH" ) {
|
||||
col = columns[i];
|
||||
contents = $.trim(td.innerHTML);
|
||||
if ( col && col._bAttrSrc ) {
|
||||
o = {
|
||||
display: contents
|
||||
};
|
||||
|
||||
if ( col && col._bAttrSrc ) {
|
||||
o = {
|
||||
display: contents
|
||||
};
|
||||
attr( col.mData.sort, o, cell );
|
||||
attr( col.mData.type, o, cell );
|
||||
attr( col.mData.filter, o, cell );
|
||||
|
||||
attr( col.mData.sort, o, td );
|
||||
attr( col.mData.type, o, td );
|
||||
attr( col.mData.filter, o, td );
|
||||
|
||||
d.push( o );
|
||||
}
|
||||
else {
|
||||
d.push( contents );
|
||||
}
|
||||
|
||||
tds.push( td );
|
||||
i++;
|
||||
d.push( o );
|
||||
}
|
||||
else {
|
||||
d.push( contents );
|
||||
}
|
||||
|
||||
td = td.nextSibling;
|
||||
tds.push( cell );
|
||||
i++;
|
||||
};
|
||||
|
||||
if ( td ) {
|
||||
// `tr` element passed in
|
||||
while ( td ) {
|
||||
name = td.nodeName.toUpperCase();
|
||||
|
||||
if ( name == "TD" || name == "TH" ) {
|
||||
cellProcess( td );
|
||||
}
|
||||
|
||||
td = td.nextSibling;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Existing row object passed in
|
||||
tds = row.anCells;
|
||||
|
||||
for ( var j=0, jen=tds.length ; j<jen ; j++ ) {
|
||||
cellProcess( tds[j] );
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
|
Loading…
x
Reference in New Issue
Block a user