diff --git a/date.module b/date.module index 1fb6615..69c116c 100644 --- a/date.module +++ b/date.module @@ -71,6 +71,7 @@ function date_theme() { ); $themes = array( 'date_combo' => $base + array('render element' => 'element'), + 'date_form_element' => $base + array('render element' => 'element'), 'date_text_parts' => $base + array('render element' => 'element'), 'date' => $base + array('render element' => 'element'), 'date_display_single' => $base + array( diff --git a/date.theme b/date.theme index a1f7d93..05d44f4 100644 --- a/date.theme +++ b/date.theme @@ -375,7 +375,7 @@ function theme_date_combo($variables) { '#title' => field_filter_xss(t($element['#title'])) . ' ' . ($element['#delta'] > 0 ? intval($element['#delta'] + 1) : ''), '#value' => '', '#description' => !empty($element['#fieldset_description']) ? $element['#fieldset_description'] : '', - '#attributes' => array(), + '#attributes' => array('class' => array('date-combo')), '#children' => $element['#children'], ); // Add marker to required date fields. @@ -408,4 +408,35 @@ function theme_date_text_parts($variables) { } } +/** + * Render a date combo as a form element. + */ +function theme_date_form_element($variables) { + $element = &$variables['element']; + + // Detect whether element is multiline. + $count = preg_match_all('`<(?:div|span)\b[^>]* class="[^"]*\b(?:date-no-float|date-clear)\b`', $element['#children'], $matches, PREG_OFFSET_CAPTURE); + $multiline = FALSE; + if ($count > 1) { + $multiline = TRUE; + } + elseif ($count) { + $before = substr($element['#children'], 0, $matches[0][0][1]); + if (preg_match('`<(?:div|span)\b[^>]* class="[^"]*\bdate-float\b`', $before)) { + $multiline = TRUE; + } + } + + // Detect if there is more than one subfield. + $count = count(explode(''. $element['#children'] .''; + + return theme('form_element', $variables); +} + /** @} End of addtogroup themeable */ diff --git a/date_admin.inc b/date_admin.inc index b18c271..27fb6f9 100644 --- a/date_admin.inc +++ b/date_admin.inc @@ -427,6 +427,13 @@ function _date_field_widget_settings_form($field, $instance) { } } + $form['advanced']['no_fieldset'] = array( + '#type' => 'checkbox', + '#title' => t('Render as a regular field'), + '#default_value' => !empty($settings['no_fieldset']), + '#description' => t('Whether to render this field as a regular field instead of a fieldset. The date field elements are wrapped in a fieldset by default, and may not display well without it.'), + ); + $context = array( 'field' => $field, 'instance' => $instance, diff --git a/date_api/date.css b/date_api/date.css index 9b72ecd..ee40109 100644 --- a/date_api/date.css +++ b/date_api/date.css @@ -15,9 +15,11 @@ .container-inline-date > .form-item { display: inline-block; margin-right: 0.5em; /* LTR */ - margin-bottom: 10px; vertical-align: top; } +fieldset.date-combo .container-inline-date > .form-item { + margin-bottom: 10px; +} .container-inline-date .form-item .form-item { float: left; /* LTR */ } @@ -52,9 +54,11 @@ /* The exposed Views form doesn't need some of these styles */ .container-inline-date .date-padding { - padding: 10px; float: left; } +fieldset.date-combo .container-inline-date .date-padding { + padding: 10px; +} .views-exposed-form .container-inline-date .date-padding { padding: 0; } @@ -173,6 +177,10 @@ div.date-calendar-day span.year { padding: 2px; } +.date-form-element-content-multiline { + padding: 10px; + border: 1px solid #CCC; +} /* Admin styling */ .form-item.form-item-instance-widget-settings-input-format-custom, .form-item.form-item-field-settings-enddate-required { diff --git a/date_api/date_api_elements.inc b/date_api/date_api_elements.inc index 52464d6..756d093 100644 --- a/date_api/date_api_elements.inc +++ b/date_api/date_api_elements.inc @@ -331,6 +331,13 @@ function date_text_element_process($element, &$form_state, $form) { ))); $element['date']['#ajax'] = !empty($element['#ajax']) ? $element['#ajax'] : FALSE; + // Make changes if instance is set to be rendered as a regular field. + if (!empty($element['#instance']['widget']['settings']['no_fieldset']) && $element['#field']['cardinality'] == 1) { + $element['date']['#title'] = check_plain($element['#instance']['label']); + $element['date']['#title_display'] = $element['#title_display']; + $element['date']['#required'] = $element['#required']; + } + // Keep the system from creating an error message for the sub-element. // We'll set our own message on the parent element. // $element['date']['#required'] = $element['#required']; diff --git a/date_elements.inc b/date_elements.inc index 31f97ff..e9cd1ff 100644 --- a/date_elements.inc +++ b/date_elements.inc @@ -124,6 +124,12 @@ function date_field_widget_form(&$form, &$form_state, $field, $instance, $langco ); } + // Make changes if instance is set to be rendered as a regular field. + if (!empty($instance['widget']['settings']['no_fieldset'])) { + $element['#title'] = check_plain($instance['label']); + $element['#theme_wrappers'] = ($field['cardinality'] == 1) ? array('date_form_element') : array(); + } + return $element; } @@ -408,6 +414,14 @@ function date_combo_element_process($element, &$form_state, $form) { $element[$from_field]['#date_title'] = t('@field_name', array('@field_name' => $instance['label'])); } + // Make changes if instance is set to be rendered as a regular field. + if (!empty($instance['widget']['settings']['no_fieldset'])) { + unset($element[$from_field]['#description']); + if (!empty($field['settings']['todate']) && isset($element['#description'])) { + $element['#description'] .= ' '. t("Empty 'End date' values will use the 'Start date' values.") .''; + } + } + $context = array( 'field' => $field, 'instance' => $instance, diff --git a/date_popup/date_popup.module b/date_popup/date_popup.module index 0dcb59b..11876f7 100644 --- a/date_popup/date_popup.module +++ b/date_popup/date_popup.module @@ -320,6 +320,18 @@ function date_popup_element_process($element, &$form_state, $form) { $element['date'] = date_popup_process_date_part($element); $element['time'] = date_popup_process_time_part($element); + // Make changes if instance is set to be rendered as a regular field. + if (!empty($element['#instance']['widget']['settings']['no_fieldset']) && $element['#field']['cardinality'] == 1) { + if (!empty($element['date']) && empty($element['time'])) { + $element['date']['#title'] = check_plain($element['#instance']['label']); + $element['date']['#required'] = $element['#required']; + } + elseif (empty($element['date']) && !empty($element['time'])) { + $element['time']['#title'] = check_plain($element['#instance']['label']); + $element['time']['#required'] = $element['#required']; + } + } + if (isset($element['#element_validate'])) { array_push($element['#element_validate'], 'date_popup_validate'); } diff --git a/date_repeat_field/date_repeat_field.module b/date_repeat_field/date_repeat_field.module index 21027e0..d4d4c90 100644 --- a/date_repeat_field/date_repeat_field.module +++ b/date_repeat_field/date_repeat_field.module @@ -284,6 +284,13 @@ function date_repeat_field_field_widget_form_alter(&$element, &$form_state, $con '#suffix' => '', '#default_value' => isset($items[$delta]['rrule']) && !empty($items[$delta]['rrule']) ? 1 : 0, ); + + // Make changes if instance is set to be rendered as a regular field. + if (!empty($instance['widget']['settings']['no_fieldset'])) { + $element['#title'] = check_plain($instance['label']); + $element['#description'] = field_filter_xss($instance['description']); + $element['#theme_wrappers'] = array('date_form_element'); + } } } }