array( 'js' => array( 0 => array( 'type' => 'setting', 'data' => array('ajax' => 'test'), ), ), ), ); drupal_render($attached); $response = new AjaxResponse(); return $response; } /** * Menu callback: Returns an AjaxResponse; settings command set last. * * Helps verifying AjaxResponse reorders commands to ensure correct execution. * * @deprecated \Drupal\ajax_test\Controller\AjaxTestController::order() */ function ajax_test_order() { $response = new AjaxResponse(); $path = drupal_get_path('module', 'system'); // HTML insertion command. $response->addCommand(new HtmlCommand('body', 'Hello, world!')); $attached = array( '#attached' => array( 'css' => array( // Add two CSS files (order should remain the same). $path . '/css/system.admin.css' => array(), $path . '/css/system.maintenance.css' => array(), ), 'js' => array( // Add two JavaScript files (first to the footer, should appear last). $path . '/system.modules.js' => array('scope' => 'footer'), $path . '/system.js' => array(), // Finally, add a JavaScript setting. 0 => array( 'type' => 'setting', 'data' => array('ajax' => 'test'), ), ), ), ); drupal_render($attached); return $response; } /** * Menu callback: Returns AJAX element with #error property set. * * @deprecated \Drupal\ajax_test\Controller\AjaxTestController::renderError() */ function ajax_test_error() { $message = ''; $query = \Drupal::request()->query; if ($query->has('message')) { $message = $query->get('message'); } $response = new AjaxResponse(); $response->addCommand(new AlertCommand($message)); return $response; } /** * Menu callback: Renders a form elements and links with #ajax['dialog']. * * @deprecated \Drupal\ajax_test\Controller\AjaxTestController::dialog() */ function ajax_test_dialog() { // Add two wrapper elements for testing non-modal dialogs. Modal dialogs use // the global drupal-modal wrapper by default. $build['dialog_wrappers'] = array('#markup' => '
'); // Dialog behavior applied to a button. $build['form'] = drupal_get_form('ajax_test_dialog_form'); // Dialog behavior applied to a #type => 'link'. $build['link'] = array( '#type' => 'link', '#title' => 'Link 1 (modal)', '#href' => 'ajax-test/dialog-contents', '#attributes' => array( 'class' => array('use-ajax'), 'data-accepts' => 'application/vnd.drupal-modal', ), ); // Dialog behavior applied to links rendered by theme_links(). $build['links'] = array( '#theme' => 'links', '#links' => array( 'link2' => array( 'title' => 'Link 2 (modal)', 'href' => 'ajax-test/dialog-contents', 'attributes' => array( 'class' => array('use-ajax'), 'data-accepts' => 'application/vnd.drupal-modal', 'data-dialog-options' => json_encode(array( 'width' => 400, )) ), ), 'link3' => array( 'title' => 'Link 3 (non-modal)', 'href' => 'ajax-test/dialog-contents', 'attributes' => array( 'class' => array('use-ajax'), 'data-accepts' => 'application/vnd.drupal-dialog', 'data-dialog-options' => json_encode(array( 'target' => 'ajax-test-dialog-wrapper-1', 'width' => 800, )) ), ), 'link4' => array( 'title' => 'Link 4 (close non-modal if open)', 'href' => 'ajax-test/dialog-close', 'attributes' => array( 'class' => array('use-ajax'), ), ), 'link5' => array( 'title' => 'Link 5 (form)', 'href' => 'ajax-test/dialog-form', 'attributes' => array( 'class' => array('use-ajax'), 'data-accepts' => 'application/vnd.drupal-modal', ), ), 'link6' => array( 'title' => 'Link 6 (entity form)', 'href' => 'admin/structure/contact/add', 'attributes' => array( 'class' => array('use-ajax'), 'data-accepts' => 'application/vnd.drupal-modal', 'data-dialog-options' => json_encode(array( 'width' => 800, 'height' => 500, )) ), ), 'link7' => array( 'title' => 'Link 7 (non-modal, no target)', 'href' => 'ajax-test/dialog-contents', 'attributes' => array( 'class' => array('use-ajax'), 'data-accepts' => 'application/vnd.drupal-dialog', 'data-dialog-options' => json_encode(array( 'width' => 800, )) ), ), ), ); return $build; } /** * Form builder: Renders buttons with #ajax['dialog']. */ function ajax_test_dialog_form($form, &$form_state) { // In order to use WebTestBase::drupalPostAjaxForm() to POST from a link, we need // to have a dummy field we can set in WebTestBase::drupalPostForm() else it won't // submit anything. $form['textfield'] = array( '#type' => 'hidden' ); $form['button1'] = array( '#type' => 'submit', '#name' => 'button1', '#value' => 'Button 1 (modal)', '#ajax' => array( 'callback' => 'ajax_test_dialog_form_callback_modal', ), ); $form['button2'] = array( '#type' => 'submit', '#name' => 'button2', '#value' => 'Button 2 (non-modal)', '#ajax' => array( 'callback' => 'ajax_test_dialog_form_callback_nonmodal', ), ); return $form; } /** * Non-AJAX behavior of the dialog buttons. */ function ajax_test_dialog_form_submit($form, &$form_state) { $form_state['redirect_route']['route_name'] = 'ajax_test.dialog_contents'; } /** * AJAX callback handler for ajax_test_dialog_form(). */ function ajax_test_dialog_form_callback_modal($form, &$form_state) { return _ajax_test_dialog(TRUE); } /** * AJAX callback handler for ajax_test_dialog_form(). */ function ajax_test_dialog_form_callback_nonmodal($form, &$form_state) { return _ajax_test_dialog(FALSE); } /** * Util to render dialog in ajax callback. * * @param bool $is_modal * (optional) TRUE if modal, FALSE if plain dialog. Defaults to FALSE. */ function _ajax_test_dialog($is_modal = FALSE) { $content = ajax_test_dialog_contents(); $response = new AjaxResponse(); $title = t('AJAX Dialog contents'); $html = drupal_render($content); if ($is_modal) { $response->addCommand(new OpenModalDialogCommand($title, $html)); } else { $selector = '#ajax-test-dialog-wrapper-1'; $response->addCommand(new OpenDialogCommand($selector, $title, $html)); } return $response; } /** * Returns example content for dialog tests. */ function ajax_test_dialog_contents() { // This is a regular render array; the keys do not have special meaning. $content = array( 'content' => array( '#markup' => 'Example message', ), 'cancel' => array( '#type' => 'link', '#title' => 'Cancel', '#href' => '', '#attributes' => array( // This is a special class to which JavaScript assigns dialog closing // behavior. 'class' => array('dialog-cancel'), ), ), ); return $content; } /** * Menu callback: Close the ajax dialog. * * @deprecated \Drupal\ajax_test\Controller\AjaxTestController::dialogClose() */ function ajax_test_dialog_close() { $response = new AjaxResponse(); $response->addCommand(new CloseDialogCommand('#ajax-test-dialog-wrapper-1')); return $response; }