Skip to content
Snippets Groups Projects
Commit 6808c401 authored by catch's avatar catch
Browse files

Issue #1987606 by vijaycs85, mparker17, InternetDevels, rdickert: Convert...

Issue #1987606 by vijaycs85, mparker17, InternetDevels, rdickert: Convert ajax_test_dialog() to a new style controller.
parent 118a4a02
Branches
Tags
2 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!789Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
......@@ -7,7 +7,7 @@
namespace Drupal\system\Tests\Ajax;
use Drupal\ajax_test\AjaxTestForm;
use Drupal\ajax_test\Form\AjaxTestForm;
/**
* Tests use of dialogs as wrappers for Ajax responses.
......
......@@ -97,171 +97,6 @@ function ajax_test_error() {
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' => '<div id="ajax-test-dialog-wrapper-1"></div><div id="ajax-test-dialog-wrapper-2"></div>');
// 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.
*/
......
......@@ -10,7 +10,7 @@ ajax_test.dialog_form:
path: '/ajax-test/dialog-form'
defaults:
_title: 'Ajax Form contents'
_form: '\Drupal\ajax_test\AjaxTestForm'
_form: '\Drupal\ajax_test\Form\AjaxTestForm'
requirements:
_access: 'TRUE'
......
......@@ -45,7 +45,93 @@ public function renderError() {
* @todo Remove ajax_test_dialog().
*/
public function dialog() {
return 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' => '<div id="ajax-test-dialog-wrapper-1"></div><div id="ajax-test-dialog-wrapper-2"></div>');
// Dialog behavior applied to a button.
$build['form'] = \Drupal::formBuilder()->getForm('Drupal\ajax_test\Form\AjaxTestDialogForm');
// 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;
}
/**
......
<?php
/**
* @file
* Contains \Drupal\ajax_test\Form\AjaxTestDialogForm.
*/
namespace Drupal\ajax_test\Form;
use Drupal\Core\Form\FormInterface;
use Drupal\Core\Form\FormBase;
use Drupal\Component\Utility\String;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\OpenModalDialogCommand;
use Drupal\Core\Ajax\OpenDialogCommand;
/**
* Dummy form for testing DialogController with _form routes.
*/
class AjaxTestDialogForm extends FormBase {
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'ajax_test_dialog_form';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, array &$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' => array($this, 'modal'),
),
);
$form['button2'] = array(
'#type' => 'submit',
'#name' => 'button2',
'#value' => 'Button 2 (non-modal)',
'#ajax' => array(
'callback' => array($this, 'nonModal'),
),
);
return $form;
}
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, array &$form_state) {
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, array &$form_state) {
$form_state['redirect'] = 'ajax-test/dialog-contents';
}
/**
* AJAX callback handler for AjaxTestDialogForm.
*/
public function modal(&$form, &$form_state) {
return $this->dialog(TRUE);
}
/**
* AJAX callback handler for AjaxTestDialogForm.
*/
public function nonModal(&$form, &$form_state) {
return $this->dialog(FALSE);
}
/**
* Util to render dialog in ajax callback.
*
* @param bool $is_modal
* (optional) TRUE if modal, FALSE if plain dialog. Defaults to FALSE.
*
* @return \Drupal\Core\Ajax\AjaxResponse
* An ajax response object.
*/
protected function dialog($is_modal = FALSE) {
$content = ajax_test_dialog_contents();
$response = new AjaxResponse();
$title = $this->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;
}
}
......@@ -2,10 +2,10 @@
/**
* @file
* Contains \Drupal\ajax_test\AjaxTestForm.
* Contains \Drupal\ajax_test\Form\AjaxTestForm.
*/
namespace Drupal\ajax_test;
namespace Drupal\ajax_test\Form;
use Drupal\Core\Form\FormInterface;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment