diff --git includes/form.inc includes/form.inc index a57d7ba..85c0c28 100644 --- includes/form.inc +++ includes/form.inc @@ -3045,33 +3045,28 @@ function theme_form_element($variables) { $output = '
' . "\n"; - if (isset($element['#field_prefix'])) { - $output .= '' . $element['#field_prefix'] . ' '; - } + $prefix = isset($element['#field_prefix']) ? '' . $element['#field_prefix'] . ' ' : ''; + $suffix = isset($element['#field_suffix']) ? ' ' . $element['#field_suffix'] . '' : ''; switch ($element['#title_display']) { case 'before': $output .= ' ' . theme('form_element_label', $variables); - $output .= ' ' . $element['#children'] . "\n"; + $output .= ' ' . $prefix . $element['#children'] . $suffix . "\n"; break; case 'invisible': case 'after': - $output .= ' ' . $element['#children']; + $output .= ' ' . $prefix . $element['#children'] . $suffix; $output .= ' ' . theme('form_element_label', $variables) . "\n"; break; case 'none': case 'attribute': // Output no label and no required marker, only the children. - $output .= ' ' . $element['#children'] . "\n"; + $output .= ' ' . $prefix . $element['#children'] . $suffix . "\n"; break; } - if (isset($element['#field_suffix'])) { - $output .= ' ' . $element['#field_suffix'] . ''; - } - if (!empty($element['#description'])) { $output .= '
' . $element['#description'] . "
\n"; } diff --git modules/simpletest/tests/form.test modules/simpletest/tests/form.test index cf4765f..924c4c4 100644 --- modules/simpletest/tests/form.test +++ modules/simpletest/tests/form.test @@ -341,6 +341,14 @@ class FormsElementsLabelsTestCase extends DrupalWebTestCase { $elements = $this->xpath('//label[@for="edit-form-textfield-test-title-no-show"]'); $this->assertFalse(isset($elements[0]), t("No label tag when title set not to display.")); + + $elements = $this->xpath('//div[@id="form-test-radios-prefix"]/following-sibling::label[@for="form-test-radios-test"]'); + debug($elements); + $this->assertTrue(isset($elements[0]), t("Properly placed the #prefix element after the label.")); + + $elements = $this->xpath('//div[@id="form-test-radios-suffix"]/following-sibling::div[@class="form-item-form-radios-test"]'); + debug($elements); + $this->assertTrue(isset($elements[0]), t("Properly places the #suffix element immediately after the form item.")); } } diff --git modules/simpletest/tests/form_test.module modules/simpletest/tests/form_test.module index 9f8094c..1bede19 100644 --- modules/simpletest/tests/form_test.module +++ modules/simpletest/tests/form_test.module @@ -529,6 +529,9 @@ function form_label_test_form() { 'second-radio' => t('Second radio'), 'third-radio' => t('Third radio'), ), + // Test #prefix and #suffix placement. + '#prefix' => '
' . t('Radios #prefix element') . '
', + '#suffix' => '
' . t('Radios #suffix element') . '
', ); $form['form_checkbox_test'] = array( '#type' => 'checkbox', @@ -550,11 +553,17 @@ function form_label_test_form() { '#type' => 'textfield', '#title' => t('Textfield test for title only'), // Not required. + // Test #prefix and #suffix placement. + '#prefix' => '
' . t('Textfield #prefix element') . '
', + '#suffix' => '
' . t('Textfield #suffix element') . '
', ); $form['form_textfield_test_title_after'] = array( '#type' => 'textfield', '#title' => t('Textfield test for title after element'), '#title_display' => 'after', + // Test #prefix and #suffix placement. + '#prefix' => '
' . t('Textfield (title after) #prefix element') . '
', + '#suffix' => '
' . t('Textfield (title after) #suffix element') . '
', ); $form['form_textfield_test_title_invisible'] = array( '#type' => 'textfield',