Issue #1809836 by danillonunes: Fixed theme_item_list() is broken when 'items' variab...
authorDavid Rothstein
Mon, 5 Nov 2012 04:19:40 +0000 (23:19 -0500)
committerDavid Rothstein
Mon, 5 Nov 2012 04:19:40 +0000 (23:19 -0500)
CHANGELOG.txt
includes/theme.inc
modules/simpletest/tests/theme.test

index 10980a1..17e4024 100644 (file)
@@ -1,6 +1,8 @@
 
 Drupal 7.17, xxxx-xx-xx (development version)
 -----------------------
+- Made it possible to use associative arrays for the 'items' variable in
+  theme_item_list().
 - Fixed a bug which prevented required form elements without a title from being
   given an "error" class when the form fails validation.
 - Prevented duplicate HTML IDs from appearing when two forms are displayed on
index 1f8dfcf..777922f 100644 (file)
@@ -2069,10 +2069,12 @@ function theme_item_list($variables) {
   if (!empty($items)) {
     $output .= "<$type" . drupal_attributes($attributes) . '>';
     $num_items = count($items);
-    foreach ($items as $i => $item) {
+    $i = 0;
+    foreach ($items as $item) {
       $attributes = array();
       $children = array();
       $data = '';
+      $i++;
       if (is_array($item)) {
         foreach ($item as $key => $value) {
           if ($key == 'data') {
@@ -2093,10 +2095,10 @@ function theme_item_list($variables) {
         // Render nested list.
         $data .= theme_item_list(array('items' => $children, 'title' => NULL, 'type' => $type, 'attributes' => $attributes));
       }
-      if ($i == 0) {
+      if ($i == 1) {
         $attributes['class'][] = 'first';
       }
-      if ($i == $num_items - 1) {
+      if ($i == $num_items) {
         $attributes['class'][] = 'last';
       }
       $output .= '<li' . drupal_attributes($attributes) . '>' . $data . "</li>\n";
index 27a8e47..0ee473e 100644 (file)
@@ -230,18 +230,19 @@ class ThemeItemListUnitTest extends DrupalWebTestCase {
   }
 
   /**
-   * Test nested list rendering.
+   * Test item list rendering.
    */
-  function testNestedList() {
-    $items = array('a', array('data' => 'b', 'children' => array('c', 'd')), 'e');
+  function testItemList() {
+    $items = array('a', array('data' => 'b', 'children' => array('c' => 'c', 'd' => 'd', 'e' => 'e')), 'f');
     $expected = '<div class="item-list"><ul><li class="first">a</li>
 <li>b<div class="item-list"><ul><li class="first">c</li>
-<li class="last">d</li>
-</ul></div></li>
+<li>d</li>
 <li class="last">e</li>
+</ul></div></li>
+<li class="last">f</li>
 </ul></div>';
     $output = theme('item_list', array('items' => $items));
-    $this->assertIdentical($expected, $output, 'Nested list is rendered correctly.');
+    $this->assertIdentical($expected, $output, 'Item list is rendered correctly.');
   }
 }