1
0
mirror of https://github.com/DataTables/DataTables.git synced 2025-03-21 13:29:04 +01:00

Fixed: When initialising multiple tables it was possible (no aoColumns given, and different number of columns) for DataTables to get confused and think one table's columns belong to another (due to a non-unique array in the initialisation object which was being wrongly used).

This commit is contained in:
Allan Jardine 2010-09-20 13:15:06 +01:00
parent 693eb5044a
commit 34aa952ec1
3 changed files with 255 additions and 9 deletions

View File

@ -6491,28 +6491,33 @@
*/
var nThead = this.getElementsByTagName('thead');
var anThs = nThead.length===0 ? [] : _fnGetUniqueThs( nThead[0] );
var aoColumnsInit;
/* If not given a column array, generate one with nulls */
if ( typeof oInit.aoColumns == 'undefined' )
{
oInit.aoColumns = [];
aoColumnsInit = [];
for ( i=0, iLen=anThs.length ; i<iLen ; i++ )
{
oInit.aoColumns.push( null );
aoColumnsInit.push( null );
}
}
else
{
aoColumnsInit = oInit.aoColumns;
}
/* Add the columns */
for ( i=0, iLen=oInit.aoColumns.length ; i<iLen ; i++ )
for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )
{
/* Check if we have column visibilty state to restore */
if ( typeof oInit.saved_aoColumns != 'undefined' && oInit.saved_aoColumns.length == iLen )
{
if ( oInit.aoColumns[i] === null )
if ( aoColumnsInit[i] === null )
{
oInit.aoColumns[i] = {};
aoColumnsInit[i] = {};
}
oInit.aoColumns[i].bVisible = oInit.saved_aoColumns[i].bVisible;
aoColumnsInit[i].bVisible = oInit.saved_aoColumns[i].bVisible;
}
_fnAddColumn( oSettings, anThs ? anThs[i] : null );
@ -6563,11 +6568,11 @@
}
/* Add options from column array - after the defs array so this has priority */
if ( typeof oInit.aoColumns != 'undefined' )
if ( typeof aoColumnsInit != 'undefined' )
{
for ( i=0, iLen=oInit.aoColumns.length ; i<iLen ; i++ )
for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )
{
_fnColumnOptions( oSettings, i, oInit.aoColumns[i] );
_fnColumnOptions( oSettings, i, aoColumnsInit[i] );
}
}

View File

@ -0,0 +1,227 @@
<?php
header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
header( 'Cache-Control: post-check=0, pre-check=0', false );
header( 'Pragma: no-cache' );
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" />
<title>DataTables unit testing</title>
<style type="text/css" title="currentStyle">
@import "../../css/demo_page.css";
@import "../../css/demo_table.css";
</style>
<script type="text/javascript" language="javascript" src="../../js/jquery.js"></script>
<script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script>
<script type="text/javascript" language="javascript" src="../unit_test.js"></script>
<?php
$aScripts = split( ":", $_GET['scripts'] );
for ( $i=0 ; $i<count($aScripts) ; $i++ )
{
echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n";
}
?>
</head>
<body id="dt_example">
<div id="container">
<div class="full_width big">
<i>DataTables</i> unit test template for two tables
</div>
<div id="demo">
<table cellpadding="0" cellspacing="0" border="0" class="display" id="example1">
<thead>
<tr>
<th>Rendering engine</th>
<th>Browser</th>
<th>Platform(s)</th>
<th>Engine version</th>
<th>CSS grade</th>
</tr>
</thead>
<tbody>
<tr class="gradeX">
<td>Trident</td>
<td>testsearchstring <br>html &amp; entity</td>
<td>Win 95+</td>
<td class="center">4</td>
<td class="center">X</td>
</tr>
<tr class="gradeC">
<td>Trident</td>
<td>Internet
Explorer 5.0</td>
<td>Win 95+</td>
<td class="center">5</td>
<td class="center">C</td>
</tr>
<tr class="gradeA">
<td>Trident</td>
<td>Internet
Explorer 5.5</td>
<td>Win 95+</td>
<td class="center">5.5</td>
<td class="center">A</td>
</tr>
<tr class="gradeA">
<td>Trident</td>
<td>Internet
Explorer 6</td>
<td>Win 98+</td>
<td class="center">6</td>
<td class="center">A</td>
</tr>
<tr class="gradeA">
<td>Trident</td>
<td>Internet Explorer 7</td>
<td>Win XP SP2+</td>
<td class="center">7</td>
<td class="center">A</td>
</tr>
<tr class="gradeA">
<td>Trident</td>
<td>AOL browser (AOL desktop)</td>
<td>Win XP</td>
<td class="center">6</td>
<td class="center">A</td>
</tr>
</tbody>
<tfoot>
<tr>
<th>Rendering engine</th>
<th>Browser</th>
<th>Platform(s)</th>
<th>Engine version</th>
<th>CSS grade</th>
</tr>
</tfoot>
</table>
<table cellpadding="0" cellspacing="0" border="0" class="display" id="example2">
<thead>
<tr>
<th>Rendering engine</th>
<th>Browser</th>
<th>Platform(s)</th>
</tr>
</thead>
<tbody>
<tr class="gradeA">
<td>Gecko</td>
<td>Firefox 1.0</td>
<td>Win 98+ / OSX.2+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Firefox 1.5</td>
<td>Win 98+ / OSX.2+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Firefox 2.0</td>
<td>Win 98+ / OSX.2+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Firefox 3.0</td>
<td>Win 2k+ / OSX.3+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Camino 1.0</td>
<td>OSX.2+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Camino 1.5</td>
<td>OSX.3+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Netscape 7.2</td>
<td>Win 95+ / Mac OS 8.6-9.2</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Netscape Browser 8</td>
<td>Win 98SE+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Netscape Navigator 9</td>
<td>Win 98+ / OSX.2+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Mozilla 1.0</td>
<td>Win 95+ / OSX.1+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Mozilla 1.1</td>
<td>Win 95+ / OSX.1+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Mozilla 1.2</td>
<td>Win 95+ / OSX.1+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Mozilla 1.3</td>
<td>Win 95+ / OSX.1+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Mozilla 1.4</td>
<td>Win 95+ / OSX.1+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Mozilla 1.5</td>
<td>Win 95+ / OSX.1+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Mozilla 1.6</td>
<td>Win 95+ / OSX.1+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Mozilla 1.7</td>
<td>Win 98+ / OSX.1+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Mozilla 1.8</td>
<td>Win 98+ / OSX.1+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Seamonkey 1.1</td>
<td>Win 98+ / OSX.2+</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Epiphany 2.20</td>
<td>Gnome</td>
</tr>
</tbody>
<tfoot>
<tr>
<th>Rendering engine</th>
<th>Browser</th>
<th>Platform(s)</th>
</tr>
</tfoot>
</table>
</div>
<div class="spacer"></div>
</div>
</body>
</html>

View File

@ -0,0 +1,14 @@
// DATA_TEMPLATE: two_tables
oTest.fnStart( "Initialise two tables" );
$(document).ready( function () {
$('table.display').dataTable();
oTest.fnTest(
"Check that initialisation was okay",
null,
function () { return true; }
);
oTest.fnComplete();
} );