diff --git a/core/includes/form.inc b/core/includes/form.inc index 3ceb5e3..caaaa63 100644 --- a/core/includes/form.inc +++ b/core/includes/form.inc @@ -1507,18 +1507,19 @@ function form_process_container($element, &$form_state) { } /** - * Returns HTML for a table with radio buttons or checkboxes. + * Prepares a 'tableselect' #type element for rendering. * - * @param $variables - * An associative array containing: - * - element: An associative array containing the properties and children of - * the tableselect element. Properties used: #header, #options, #empty, - * and #js_select. The #options property is an array of selection options; - * each array element of #options is an array of properties. These - * properties can include #attributes, which is added to the - * table row's HTML attributes; see theme_table(). An example of per-row - * options: - * @code + * Adds a column of radio buttons or checkboxes for each row of a table. + * + * @param array $element + * An associative array containing the properties and children of + * the tableselect element. Properties used: #header, #options, #empty, + * and #js_select. The #options property is an array of selection options; + * each array element of #options is an array of properties. These + * properties can include #attributes, which is added to the + * table row's HTML attributes; see table.html.twig. An example of per-row + * options: + * @code * $options = array( * array( * 'title' => 'How to Learn Drupal', @@ -1544,15 +1545,12 @@ function form_process_container($element, &$form_state) { * '#options' => $options, * '#empty' => t('No content available.'), * ); - * @endcode + * @endcode * - * @ingroup themeable + * @return array + * The processed element. */ -function theme_tableselect($variables) { - $element = $variables['element']; - $table = array( - '#type' => 'table', - ); +function form_pre_render_tableselect($element) { $rows = array(); $header = $element['#header']; if (!empty($element['#options'])) { @@ -1592,7 +1590,7 @@ function theme_tableselect($variables) { // checkboxes/radios in the first table column. if ($element['#js_select']) { // Add a "Select all" checkbox. - $table['#attached']['library'][] = 'core/drupal.tableselect'; + $element['#attached']['library'][] = 'core/drupal.tableselect'; array_unshift($header, array('class' => array('select-all'))); } else { @@ -1601,14 +1599,11 @@ function theme_tableselect($variables) { array_unshift($header, ''); } } - $table += array( - '#header' => $header, - '#rows' => $rows, - '#empty' => $element['#empty'], - '#attributes' => $element['#attributes'], - ); - return drupal_render($table); + $element['#header'] = $header; + $element['#rows'] = $rows; + + return $element; } /** @@ -1700,7 +1695,7 @@ function form_process_tableselect($element) { * The processed element. * * @see form_process_tableselect() - * @see theme_tableselect() + * @see form_pre_render_tableselect() */ function form_process_table($element, &$form_state) { if ($element['#tableselect']) { diff --git a/core/includes/theme.inc b/core/includes/theme.inc index 248c795..1a0d107 100644 --- a/core/includes/theme.inc +++ b/core/includes/theme.inc @@ -2675,9 +2675,6 @@ function drupal_common_theme() { 'render element' => 'element', 'template' => 'textarea', ), - 'tableselect' => array( - 'render element' => 'element', - ), 'form_element' => array( 'render element' => 'element', 'template' => 'form-element', diff --git a/core/modules/system/system.module b/core/modules/system/system.module index 117dc49..375f691 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -544,10 +544,13 @@ function system_element_info() { '#input' => TRUE, '#js_select' => TRUE, '#multiple' => TRUE, + '#responsive' => TRUE, + '#sticky' => FALSE, + '#pre_render' => array('drupal_pre_render_table', 'form_pre_render_tableselect'), '#process' => array('form_process_tableselect'), '#options' => array(), '#empty' => '', - '#theme' => 'tableselect', + '#theme' => 'table__tableselect', ); // Form structure.