From f746ed8ecc97a45db007002cd2d977cac3aad1cc Mon Sep 17 00:00:00 2001 From: David Rothstein Date: Sun, 4 Aug 2013 23:57:00 -0400 Subject: [PATCH] Issue #1959110 by a.ross, fietserwin, markabur: Fixed theme_table() outputs the 'no_striping' option as an HTML attribute. --- includes/theme.inc | 21 ++++++++++----------- modules/simpletest/tests/theme.test | 14 ++++++++++++++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/includes/theme.inc b/includes/theme.inc index 5ae0fea2042b..ee73965d963e 100644 --- a/includes/theme.inc +++ b/includes/theme.inc @@ -1987,25 +1987,24 @@ function theme_table($variables) { $flip = array('even' => 'odd', 'odd' => 'even'); $class = 'even'; foreach ($rows as $number => $row) { - $attributes = array(); - // Check if we're dealing with a simple or complex row if (isset($row['data'])) { - foreach ($row as $key => $value) { - if ($key == 'data') { - $cells = $value; - } - else { - $attributes[$key] = $value; - } - } + $cells = $row['data']; + $no_striping = isset($row['no_striping']) ? $row['no_striping'] : FALSE; + + // Set the attributes array and exclude 'data' and 'no_striping'. + $attributes = $row; + unset($attributes['data']); + unset($attributes['no_striping']); } else { $cells = $row; + $attributes = array(); + $no_striping = FALSE; } if (count($cells)) { // Add odd/even class - if (empty($row['no_striping'])) { + if (!$no_striping) { $class = $flip[$class]; $attributes['class'][] = $class; } diff --git a/modules/simpletest/tests/theme.test b/modules/simpletest/tests/theme.test index d377ef063813..519a7a90abac 100644 --- a/modules/simpletest/tests/theme.test +++ b/modules/simpletest/tests/theme.test @@ -215,6 +215,20 @@ class ThemeTableTestCase extends DrupalWebTestCase { $this->assertRaw('Header 1', 'Table header was printed.'); } + /** + * Tests that the 'no_striping' option works correctly. + */ + function testThemeTableWithNoStriping() { + $rows = array( + array( + 'data' => array(1), + 'no_striping' => TRUE, + ), + ); + $this->content = theme('table', array('rows' => $rows)); + $this->assertNoRaw('class="odd"', 'Odd/even classes were not added because $no_striping = TRUE.'); + $this->assertNoRaw('no_striping', 'No invalid no_striping HTML attribute was printed.'); + } } /**