Implements hook_element_info().
function system_element_info() {
// Top level elements.
$types['form'] = array(
'#method' => 'post',
'#action' => request_uri(),
'#theme_wrappers' => array(
'form',
),
);
$types['page'] = array(
'#show_messages' => TRUE,
'#theme' => 'page',
'#theme_wrappers' => array(
'html',
),
);
// By default, we don't want Ajax commands being rendered in the context of an
// HTML page, so we don't provide defaults for #theme or #theme_wrappers.
// However, modules can set these properties (for example, to provide an HTML
// debugging page that displays rather than executes Ajax commands).
$types['ajax'] = array(
'#header' => TRUE,
'#commands' => array(),
'#error' => NULL,
);
$types['html_tag'] = array(
'#pre_render' => array(
'drupal_pre_render_conditional_comments',
'drupal_pre_render_html_tag',
),
'#attributes' => array(),
'#value' => NULL,
);
$types['styles'] = array(
'#items' => array(),
'#pre_render' => array(
'drupal_pre_render_styles',
),
'#group_callback' => 'drupal_group_css',
'#aggregate_callback' => 'drupal_aggregate_css',
);
$types['scripts'] = array(
'#items' => array(),
'#pre_render' => array(
'drupal_pre_render_scripts',
),
'#group_callback' => 'drupal_group_js',
'#aggregate_callback' => 'drupal_aggregate_js',
);
// Input elements.
$types['submit'] = array(
'#input' => TRUE,
'#name' => 'op',
'#is_button' => TRUE,
'#executes_submit_callback' => TRUE,
'#limit_validation_errors' => FALSE,
'#process' => array(
'form_process_button',
'ajax_process_form',
),
'#pre_render' => array(
'form_pre_render_button',
),
'#theme_wrappers' => array(
'input__submit',
),
);
$types['button'] = array(
'#input' => TRUE,
'#name' => 'op',
'#is_button' => TRUE,
'#executes_submit_callback' => FALSE,
'#limit_validation_errors' => FALSE,
'#process' => array(
'form_process_button',
'ajax_process_form',
),
'#pre_render' => array(
'form_pre_render_button',
),
'#theme_wrappers' => array(
'input__button',
),
);
$types['image_button'] = array(
'#input' => TRUE,
'#is_button' => TRUE,
'#executes_submit_callback' => TRUE,
'#limit_validation_errors' => FALSE,
'#process' => array(
'form_process_button',
'ajax_process_form',
),
'#return_value' => TRUE,
'#has_garbage_value' => TRUE,
'#src' => NULL,
'#pre_render' => array(
'form_pre_render_image_button',
),
'#theme_wrappers' => array(
'input__image_button',
),
);
$types['textfield'] = array(
'#input' => TRUE,
'#size' => 60,
'#maxlength' => 128,
'#autocomplete_path' => FALSE,
'#process' => array(
'form_process_autocomplete',
'ajax_process_form',
'form_process_pattern',
),
'#pre_render' => array(
'form_pre_render_textfield',
),
'#theme' => 'input__textfield',
'#theme_wrappers' => array(
'form_element',
),
);
$types['tel'] = array(
'#input' => TRUE,
'#size' => 30,
'#maxlength' => 128,
'#autocomplete_path' => FALSE,
'#process' => array(
'form_process_autocomplete',
'ajax_process_form',
'form_process_pattern',
),
'#pre_render' => array(
'form_pre_render_tel',
),
'#theme' => 'input__tel',
'#theme_wrappers' => array(
'form_element',
),
);
$types['email'] = array(
'#input' => TRUE,
'#size' => 60,
// user.module is not loaded in case of early bootstrap errors.
'#maxlength' => defined('EMAIL_MAX_LENGTH') ? EMAIL_MAX_LENGTH : 255,
'#autocomplete_path' => FALSE,
'#process' => array(
'form_process_autocomplete',
'ajax_process_form',
'form_process_pattern',
),
'#element_validate' => array(
'form_validate_email',
),
'#pre_render' => array(
'form_pre_render_email',
),
'#theme' => 'input__email',
'#theme_wrappers' => array(
'form_element',
),
);
$types['url'] = array(
'#input' => TRUE,
'#size' => 60,
'#maxlength' => 255,
'#autocomplete_path' => FALSE,
'#process' => array(
'form_process_autocomplete',
'ajax_process_form',
'form_process_pattern',
),
'#element_validate' => array(
'form_validate_url',
),
'#pre_render' => array(
'form_pre_render_url',
),
'#theme' => 'input__url',
'#theme_wrappers' => array(
'form_element',
),
);
$types['search'] = array(
'#input' => TRUE,
'#size' => 60,
'#maxlength' => 128,
'#autocomplete_path' => FALSE,
'#process' => array(
'form_process_autocomplete',
'ajax_process_form',
),
'#pre_render' => array(
'form_pre_render_search',
),
'#theme' => 'input__search',
'#theme_wrappers' => array(
'form_element',
),
);
$types['number'] = array(
'#input' => TRUE,
'#step' => 1,
'#process' => array(
'ajax_process_form',
),
'#element_validate' => array(
'form_validate_number',
),
'#pre_render' => array(
'form_pre_render_number',
),
'#theme' => 'input__number',
'#theme_wrappers' => array(
'form_element',
),
);
$types['range'] = array(
'#input' => TRUE,
'#step' => 1,
'#min' => 0,
'#max' => 100,
'#process' => array(
'ajax_process_form',
),
'#element_validate' => array(
'form_validate_number',
),
'#pre_render' => array(
'form_pre_render_range',
),
'#theme' => 'input__range',
'#theme_wrappers' => array(
'form_element',
),
);
$types['color'] = array(
'#input' => TRUE,
'#process' => array(
'ajax_process_form',
),
'#element_validate' => array(
'form_validate_color',
),
'#pre_render' => array(
'form_pre_render_color',
),
'#theme' => 'input__color',
'#theme_wrappers' => array(
'form_element',
),
);
$types['machine_name'] = array(
'#input' => TRUE,
'#default_value' => NULL,
'#required' => TRUE,
'#maxlength' => 64,
'#size' => 60,
'#autocomplete_path' => FALSE,
'#process' => array(
'form_process_machine_name',
'form_process_autocomplete',
'ajax_process_form',
),
'#element_validate' => array(
'form_validate_machine_name',
),
'#pre_render' => array(
'form_pre_render_textfield',
),
'#theme' => 'input__textfield',
'#theme_wrappers' => array(
'form_element',
),
);
$types['password'] = array(
'#input' => TRUE,
'#size' => 60,
'#maxlength' => 128,
'#process' => array(
'ajax_process_form',
'form_process_pattern',
),
'#pre_render' => array(
'form_pre_render_password',
),
'#theme' => 'input__password',
'#theme_wrappers' => array(
'form_element',
),
);
$types['password_confirm'] = array(
'#input' => TRUE,
'#process' => array(
'form_process_password_confirm',
'user_form_process_password_confirm',
),
'#theme_wrappers' => array(
'form_element',
),
);
$types['textarea'] = array(
'#input' => TRUE,
'#cols' => 60,
'#rows' => 5,
'#resizable' => 'vertical',
'#process' => array(
'ajax_process_form',
),
'#theme' => 'textarea',
'#theme_wrappers' => array(
'form_element',
),
);
$types['radios'] = array(
'#input' => TRUE,
'#process' => array(
'form_process_radios',
),
'#theme_wrappers' => array(
'radios',
),
'#pre_render' => array(
'form_pre_render_conditional_form_element',
),
);
$types['radio'] = array(
'#input' => TRUE,
'#default_value' => NULL,
'#process' => array(
'ajax_process_form',
),
'#pre_render' => array(
'form_pre_render_radio',
),
'#theme' => 'input__radio',
'#theme_wrappers' => array(
'form_element',
),
'#title_display' => 'after',
);
$types['checkboxes'] = array(
'#input' => TRUE,
'#process' => array(
'form_process_checkboxes',
),
'#pre_render' => array(
'form_pre_render_conditional_form_element',
),
'#theme_wrappers' => array(
'checkboxes',
),
);
$types['checkbox'] = array(
'#input' => TRUE,
'#return_value' => 1,
'#process' => array(
'form_process_checkbox',
'ajax_process_form',
),
'#pre_render' => array(
'form_pre_render_checkbox',
),
'#theme' => 'input__checkbox',
'#theme_wrappers' => array(
'form_element',
),
'#title_display' => 'after',
);
$types['select'] = array(
'#input' => TRUE,
'#multiple' => FALSE,
'#process' => array(
'form_process_select',
'ajax_process_form',
),
'#theme' => 'select',
'#theme_wrappers' => array(
'form_element',
),
'#options' => array(),
);
$types['language_select'] = array(
'#input' => TRUE,
'#default_value' => Language::LANGCODE_NOT_SPECIFIED,
);
$types['weight'] = array(
'#input' => TRUE,
'#delta' => 10,
'#default_value' => 0,
'#process' => array(
'form_process_weight',
'ajax_process_form',
),
);
$types['date'] = array(
'#input' => TRUE,
'#theme' => 'date',
'#theme_wrappers' => array(
'form_element',
),
);
$types['file'] = array(
'#input' => TRUE,
'#multiple' => FALSE,
'#process' => array(
'form_process_file',
),
'#size' => 60,
'#pre_render' => array(
'form_pre_render_file',
),
'#theme' => 'input__file',
'#theme_wrappers' => array(
'form_element',
),
);
$types['tableselect'] = array(
'#input' => TRUE,
'#js_select' => TRUE,
'#multiple' => TRUE,
'#process' => array(
'form_process_tableselect',
),
'#options' => array(),
'#empty' => '',
'#theme' => 'tableselect',
);
// Form structure.
$types['item'] = array(
// Forms that show author fields to both anonymous and authenticated users
// need to dynamically switch between #type 'textfield' and #type 'item' to
// automatically take over the authenticated user's information. Therefore,
// we allow #type 'item' to receive input, which is internally assigned by
// Form API based on the #default_value or #value properties.
'#input' => TRUE,
'#markup' => '',
'#theme_wrappers' => array(
'form_element',
),
);
$types['hidden'] = array(
'#input' => TRUE,
'#process' => array(
'ajax_process_form',
),
'#pre_render' => array(
'form_pre_render_hidden',
),
'#theme' => 'input__hidden',
);
$types['token'] = array(
'#input' => TRUE,
'#pre_render' => array(
'form_pre_render_hidden',
),
'#theme' => 'input__hidden',
);
$types['value'] = array(
'#input' => TRUE,
);
$types['markup'] = array(
'#markup' => '',
);
$types['link'] = array(
'#pre_render' => array(
'drupal_pre_render_link',
),
);
$types['fieldset'] = array(
'#value' => NULL,
'#process' => array(
'form_process_group',
'ajax_process_form',
),
'#pre_render' => array(
'form_pre_render_group',
),
'#theme_wrappers' => array(
'fieldset',
),
);
$types['details'] = array(
'#collapsed' => FALSE,
'#value' => NULL,
'#process' => array(
'form_process_group',
'ajax_process_form',
),
'#pre_render' => array(
'form_pre_render_details',
'form_pre_render_group',
),
'#theme_wrappers' => array(
'details',
),
);
$types['vertical_tabs'] = array(
'#default_tab' => '',
'#process' => array(
'form_process_vertical_tabs',
),
'#pre_render' => array(
'form_pre_render_vertical_tabs',
),
'#theme_wrappers' => array(
'vertical_tabs',
'form_element',
),
);
$types['dropbutton'] = array(
'#pre_render' => array(
'drupal_pre_render_dropbutton',
),
'#theme' => 'links__dropbutton',
);
$types['operations'] = array(
'#pre_render' => array(
'drupal_pre_render_dropbutton',
),
'#theme' => 'links__dropbutton__operations',
);
$types['container'] = array(
'#process' => array(
'form_process_group',
'form_process_container',
),
'#pre_render' => array(
'form_pre_render_group',
),
'#theme_wrappers' => array(
'container',
),
);
$types['actions'] = array(
'#process' => array(
'form_pre_render_actions_dropbutton',
'form_process_actions',
'form_process_container',
),
'#weight' => 100,
'#theme_wrappers' => array(
'container',
),
);
$types['table'] = array(
'#header' => array(),
'#rows' => array(),
'#empty' => '',
// Properties for tableselect support.
'#input' => TRUE,
'#tree' => TRUE,
'#tableselect' => FALSE,
'#multiple' => TRUE,
'#js_select' => TRUE,
'#value_callback' => 'form_type_table_value',
'#process' => array(
'form_process_table',
),
'#element_validate' => array(
'form_validate_table',
),
// Properties for tabledrag support.
// The value is a list of arrays that are passed to drupal_add_tabledrag().
// drupal_pre_render_table() prepends the HTML ID of the table to each set
// of arguments.
// @see drupal_add_tabledrag()
'#tabledrag' => array(),
// Render properties.
'#pre_render' => array(
'drupal_pre_render_table',
),
'#theme' => 'table',
);
return $types;
}