'AJAX forms simple form test', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_forms_test_simple_form'), 'access callback' => TRUE, ); $items['ajax_forms_test_ajax_commands_form'] = array( 'title' => 'AJAX forms AJAX commands test', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_forms_test_ajax_commands_form'), 'access callback' => TRUE, ); $items['ajax_validation_test'] = array( 'title' => 'AJAX Validation Test', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_forms_test_validation_form'), 'access callback' => TRUE, ); $items['ajax_forms_test_lazy_load_form'] = array( 'title' => 'AJAX forms lazy load test', 'page callback' => 'drupal_get_form', 'page arguments' => array('ajax_forms_test_lazy_load_form'), 'access callback' => TRUE, ); return $items; } /** * A basic form used to test form_state['values'] during callback. */ function ajax_forms_test_simple_form($form, &$form_state) { $form = array(); $form['select'] = array( '#type' => 'select', '#options' => array( 'red' => 'red', 'green' => 'green', 'blue' => 'blue'), '#ajax' => array( 'callback' => 'ajax_forms_test_simple_form_select_callback', ), '#suffix' => '
No color yet selected
', ); $form['checkbox'] = array( '#type' => 'checkbox', '#title' => t('Test checkbox'), '#ajax' => array( 'callback' => 'ajax_forms_test_simple_form_checkbox_callback', ), '#suffix' => '
No action yet
', ); $form['submit'] = array( '#type' => 'submit', '#value' => t('submit'), ); return $form; } /** * Ajax callback triggered by select. */ function ajax_forms_test_simple_form_select_callback($form, $form_state) { $commands = array(); $commands[] = ajax_command_html('#ajax_selected_color', $form_state['values']['select']); $commands[] = ajax_command_data('#ajax_selected_color', 'form_state_value_select', $form_state['values']['select']); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback triggered by checkbox. */ function ajax_forms_test_simple_form_checkbox_callback($form, $form_state) { $commands = array(); $commands[] = ajax_command_html('#ajax_checkbox_value', (int) $form_state['values']['checkbox']); $commands[] = ajax_command_data('#ajax_checkbox_value', 'form_state_value_select', (int) $form_state['values']['checkbox']); return array('#type' => 'ajax', '#commands' => $commands); } /** * Form to display the Ajax Commands. */ function ajax_forms_test_ajax_commands_form($form, &$form_state) { $form = array(); // Shows the 'after' command with a callback generating commands. $form['after_command_example'] = array( '#value' => t("AJAX 'After': Click to put something after the div"), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_after_callback', ), '#suffix' => '
Something can be inserted after this
', ); // Shows the 'alert' command. $form['alert_command_example'] = array( '#value' => t("AJAX 'Alert': Click to alert"), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_alert_callback', ), ); // Shows the 'append' command. $form['append_command_example'] = array( '#value' => t("AJAX 'Append': Click to append something"), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_append_callback', ), '#suffix' => '
Append inside this div
', ); // Shows the 'before' command. $form['before_command_example'] = array( '#value' => t("AJAX 'before': Click to put something before the div"), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_before_callback', ), '#suffix' => '
Insert something before this.
', ); // Shows the 'changed' command without asterisk. $form['changed_command_example'] = array( '#value' => t("AJAX changed: Click to mark div changed."), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_changed_callback', ), '#suffix' => '
This div can be marked as changed or not.
', ); // Shows the 'changed' command adding the asterisk. $form['changed_command_asterisk_example'] = array( '#value' => t("AJAX changed: Click to mark div changed with asterisk."), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_changed_asterisk_callback', ), ); // Shows the Ajax 'css' command. $form['css_command_example'] = array( '#value' => t("Set the the '#box' div to be blue."), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_css_callback', ), '#suffix' => '
box
', ); // Shows the Ajax 'data' command. But there is no use of this information, // as this would require a javascript client to use the data. $form['data_command_example'] = array( '#value' => t("AJAX data command: Issue command."), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_data_callback', ), '#suffix' => '
Data attached to this div.
', ); // Shows the Ajax 'invoke' command. $form['invoke_command_example'] = array( '#value' => t("AJAX invoke command: Invoke addClass() method."), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_invoke_callback', ), '#suffix' => '
Original contents
', ); // Shows the Ajax 'html' command. $form['html_command_example'] = array( '#value' => t("AJAX html: Replace the HTML in a selector."), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_html_callback', ), '#suffix' => '
Original contents
', ); // Shows the Ajax 'insert' command. $form['insert_command_example'] = array( '#value' => t("AJAX insert: Let client insert based on #ajax['method']."), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_insert_callback', 'method' => 'prepend', ), '#suffix' => '
Original contents
', ); // Shows the Ajax 'prepend' command. $form['prepend_command_example'] = array( '#value' => t("AJAX 'prepend': Click to prepend something"), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_prepend_callback', ), '#suffix' => '
Something will be prepended to this div.
', ); // Shows the Ajax 'remove' command. $form['remove_command_example'] = array( '#value' => t("AJAX 'remove': Click to remove text"), '#type' => 'submit', '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_remove_callback', ), '#suffix' => '
text to be removed
', ); // Shows the Ajax 'restripe' command. $form['restripe_command_example'] = array( '#type' => 'submit', '#value' => t("AJAX 'restripe' command"), '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_restripe_callback', ), '#suffix' => '
first row
second row
', ); // Demonstrates the Ajax 'settings' command. The 'settings' command has // nothing visual to "show", but it can be tested via SimpleTest and via // Firebug. $form['settings_command_example'] = array( '#type' => 'submit', '#value' => t("AJAX 'settings' command"), '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_settings_callback', ), ); // Shows the Ajax 'add_css' command. $form['add_css_command_example'] = array( '#type' => 'submit', '#value' => t("AJAX 'add_css' command"), '#ajax' => array( 'callback' => 'ajax_forms_test_advanced_commands_add_css_callback', ), ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), ); return $form; } /** * Ajax callback for 'after'. */ function ajax_forms_test_advanced_commands_after_callback($form, $form_state) { $selector = '#after_div'; $commands = array(); $commands[] = ajax_command_after($selector, "This will be placed after"); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'alert'. */ function ajax_forms_test_advanced_commands_alert_callback($form, $form_state) { $commands = array(); $commands[] = ajax_command_alert("Alert"); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'append'. */ function ajax_forms_test_advanced_commands_append_callback($form, $form_state) { $selector = '#append_div'; $commands = array(); $commands[] = ajax_command_append($selector, "Appended text"); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'before'. */ function ajax_forms_test_advanced_commands_before_callback($form, $form_state) { $selector = '#before_div'; $commands = array(); $commands[] = ajax_command_before($selector, "Before text"); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'changed'. */ function ajax_forms_test_advanced_commands_changed_callback($form, $form_state) { $commands[] = ajax_command_changed('#changed_div'); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'changed' with asterisk marking inner div. */ function ajax_forms_test_advanced_commands_changed_asterisk_callback($form, $form_state) { $commands = array(); $commands[] = ajax_command_changed('#changed_div', '#changed_div_mark_this'); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'css'. */ function ajax_forms_test_advanced_commands_css_callback($form, $form_state) { $selector = '#css_div'; $color = 'blue'; $commands = array(); $commands[] = ajax_command_css($selector, array('background-color' => $color)); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'data'. */ function ajax_forms_test_advanced_commands_data_callback($form, $form_state) { $selector = '#data_div'; $commands = array(); $commands[] = ajax_command_data($selector, 'testkey', 'testvalue'); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'invoke'. */ function ajax_forms_test_advanced_commands_invoke_callback($form, $form_state) { $commands = array(); $commands[] = ajax_command_invoke('#invoke_div', 'addClass', array('error')); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'html'. */ function ajax_forms_test_advanced_commands_html_callback($form, $form_state) { $commands = array(); $commands[] = ajax_command_html('#html_div', 'replacement text'); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'insert'. */ function ajax_forms_test_advanced_commands_insert_callback($form, $form_state) { $commands = array(); $commands[] = ajax_command_insert('#insert_div', 'insert replacement text'); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'prepend'. */ function ajax_forms_test_advanced_commands_prepend_callback($form, $form_state) { $commands = array(); $commands[] = ajax_command_prepend('#prepend_div', "prepended text"); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'remove'. */ function ajax_forms_test_advanced_commands_remove_callback($form, $form_state) { $commands = array(); $commands[] = ajax_command_remove('#remove_text'); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'restripe'. */ function ajax_forms_test_advanced_commands_restripe_callback($form, $form_state) { $commands = array(); $commands[] = ajax_command_restripe('#restripe_table'); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'settings'. */ function ajax_forms_test_advanced_commands_settings_callback($form, $form_state) { $commands = array(); $setting['ajax_forms_test']['foo'] = 42; $commands[] = ajax_command_settings($setting); return array('#type' => 'ajax', '#commands' => $commands); } /** * Ajax callback for 'add_css'. */ function ajax_forms_test_advanced_commands_add_css_callback($form, $form_state) { $commands = array(); $commands[] = ajax_command_add_css('my/file.css'); return array('#type' => 'ajax', '#commands' => $commands); } /** * This form and its related submit and callback functions demonstrate * not validating another form element when a single Ajax element is triggered. * * The "drivertext" element is an Ajax-enabled textfield, free-form. * The "required_field" element is a textfield marked required. * * The correct behavior is that the Ajax-enabled drivertext element should * be able to trigger without causing validation of the "required_field". */ function ajax_forms_test_validation_form($form, &$form_state) { $form['drivertext'] = array( '#title' => t('AJAX-enabled textfield.'), '#description' => t("When this one AJAX-triggers and the spare required field is empty, you should not get an error."), '#type' => 'textfield', '#default_value' => !empty($form_state['values']['drivertext']) ? $form_state['values']['drivertext'] : "", '#ajax' => array( 'callback' => 'ajax_forms_test_validation_form_callback', 'wrapper' => 'message_area', 'method' => 'replace', ), '#suffix' => '
', ); $form['spare_required_field'] = array( '#title' => t("Spare Required Field"), '#type' => 'textfield', '#required' => TRUE, ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), ); return $form; } /** * Submit handler for the validation form. */ function ajax_forms_test_validation_form_submit($form, $form_state) { drupal_set_message(t("Validation form submitted")); } /** * Ajax callback for the 'drivertext' element of the validation form. */ function ajax_forms_test_validation_form_callback($form, $form_state) { drupal_set_message("ajax_forms_test_validation_form_callback invoked"); drupal_set_message(t("Callback: drivertext=%drivertext, spare_required_field=%spare_required_field", array('%drivertext' => $form_state['values']['drivertext'], '%spare_required_field' => $form_state['values']['spare_required_field']))); return '
ajax_forms_test_validation_form_callback at ' . date('c') . '
'; } /** * Form builder: Builds a form that triggers a simple AJAX callback. */ function ajax_forms_test_lazy_load_form($form, &$form_state) { $form['add_files'] = array( '#type' => 'checkbox', '#default_value' => FALSE, ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), '#ajax' => array( 'callback' => 'ajax_forms_test_lazy_load_form_ajax', ), ); return $form; } /** * Form submit handler: Adds JavaScript and CSS that wasn't on the original form. */ function ajax_forms_test_lazy_load_form_submit($form, &$form_state) { if ($form_state['values']['add_files']) { drupal_add_js(array('ajax_forms_test_lazy_load_form_submit' => 'executed'), 'setting'); drupal_add_css(drupal_get_path('module', 'system') . '/system.admin.css'); drupal_add_js(drupal_get_path('module', 'system') . '/system.js'); } $form_state['rebuild'] = TRUE; } /** * AJAX callback for the ajax_forms_test_lazy_load_form() form. * * This function returns nothing, because all we're interested in testing is * ajax_render() adding commands for JavaScript and CSS added during the page * request, such as the ones added in ajax_forms_test_lazy_load_form_submit(). */ function ajax_forms_test_lazy_load_form_ajax($form, &$form_state) { return NULL; }