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',