Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 126 |
AjaxTestController | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
56 | |
0.00% |
0 / 126 |
dialogContents | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 16 |
|||
render | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 11 |
|||
order | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
renderError | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 9 |
|||
dialog | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 80 |
|||
dialogClose | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\ajax_test\Controller\AjaxTestController. | |
*/ | |
namespace Drupal\ajax_test\Controller; | |
use Drupal\Core\Ajax\AjaxResponse; | |
use Drupal\Core\Ajax\AlertCommand; | |
use Drupal\Core\Ajax\CloseDialogCommand; | |
use Drupal\Core\Ajax\HtmlCommand; | |
use Drupal\Core\Url; | |
use Symfony\Component\HttpFoundation\Request; | |
/** | |
* Provides content for dialog tests. | |
*/ | |
class AjaxTestController { | |
/** | |
* Example content for dialog testing. | |
* | |
* @return array | |
* Renderable array of AJAX dialog contents. | |
*/ | |
public static function dialogContents() { | |
// This is a regular render array; the keys do not have special meaning. | |
$content = array( | |
'#title' => 'AJAX Dialog contents', | |
'content' => array( | |
'#markup' => 'Example message', | |
), | |
'cancel' => array( | |
'#type' => 'link', | |
'#title' => 'Cancel', | |
'#url' => Url::fromRoute('<front>'), | |
'#attributes' => array( | |
// This is a special class to which JavaScript assigns dialog closing | |
// behavior. | |
'class' => array('dialog-cancel'), | |
), | |
), | |
); | |
return $content; | |
} | |
/** | |
* Returns a render array that will be rendered by AjaxRenderer. | |
* | |
* Verifies that the response incorporates JavaScript settings generated | |
* during the page request by adding a dummy setting. | |
*/ | |
public function render() { | |
return [ | |
'#attached' => [ | |
'library' => [ | |
'core/drupalSettings', | |
], | |
'drupalSettings' => [ | |
'ajax' => 'test', | |
], | |
], | |
]; | |
} | |
/** | |
* Returns an AjaxResponse; settings command set last. | |
* | |
* Helps verifying AjaxResponse reorders commands to ensure correct execution. | |
*/ | |
public function order() { | |
$response = new AjaxResponse(); | |
// HTML insertion command. | |
$response->addCommand(new HtmlCommand('body', 'Hello, world!')); | |
$build['#attached']['library'][] = 'ajax_test/order'; | |
$response->setAttachments($build['#attached']); | |
return $response; | |
} | |
/** | |
* Returns an AjaxResponse with alert command. | |
* | |
* @param \Symfony\Component\HttpFoundation\Request $request | |
* The current request object. | |
* | |
* @return \Drupal\Core\Ajax\AjaxResponse | |
* The JSON response object. | |
*/ | |
public function renderError(Request $request) { | |
$message = ''; | |
$query = $request->query; | |
if ($query->has('message')) { | |
$message = $query->get('message'); | |
} | |
$response = new AjaxResponse(); | |
$response->addCommand(new AlertCommand($message)); | |
return $response; | |
} | |
/** | |
* Returns a render array of form elements and links for dialog. | |
*/ | |
public function 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)', | |
'#url' => Url::fromRoute('ajax_test.dialog_contents'), | |
'#attributes' => array( | |
'class' => array('use-ajax'), | |
'data-dialog-type' => 'modal', | |
), | |
); | |
// Dialog behavior applied to links rendered by links.html.twig. | |
$build['links'] = array( | |
'#theme' => 'links', | |
'#links' => array( | |
'link2' => array( | |
'title' => 'Link 2 (modal)', | |
'url' => Url::fromRoute('ajax_test.dialog_contents'), | |
'attributes' => array( | |
'class' => array('use-ajax'), | |
'data-dialog-type' => 'modal', | |
'data-dialog-options' => json_encode(array( | |
'width' => 400, | |
)) | |
), | |
), | |
'link3' => array( | |
'title' => 'Link 3 (non-modal)', | |
'url' => Url::fromRoute('ajax_test.dialog_contents'), | |
'attributes' => array( | |
'class' => array('use-ajax'), | |
'data-dialog-type' => '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)', | |
'url' => Url::fromRoute('ajax_test.dialog_close'), | |
'attributes' => array( | |
'class' => array('use-ajax'), | |
'data-dialog-type' => 'modal', | |
), | |
), | |
'link5' => array( | |
'title' => 'Link 5 (form)', | |
'url' => Url::fromRoute('ajax_test.dialog_form'), | |
'attributes' => array( | |
'class' => array('use-ajax'), | |
'data-dialog-type' => 'modal', | |
), | |
), | |
'link6' => array( | |
'title' => 'Link 6 (entity form)', | |
'url' => Url::fromRoute('contact.form_add'), | |
'attributes' => array( | |
'class' => array('use-ajax'), | |
'data-dialog-type' => 'modal', | |
'data-dialog-options' => json_encode(array( | |
'width' => 800, | |
'height' => 500, | |
)) | |
), | |
), | |
'link7' => array( | |
'title' => 'Link 7 (non-modal, no target)', | |
'url' => Url::fromRoute('ajax_test.dialog_contents'), | |
'attributes' => array( | |
'class' => array('use-ajax'), | |
'data-dialog-type' => 'dialog', | |
'data-dialog-options' => json_encode(array( | |
'width' => 800, | |
)) | |
), | |
), | |
), | |
); | |
return $build; | |
} | |
/** | |
* Returns an AjaxResponse with command to close dialog. | |
* | |
* @return \Drupal\Core\Ajax\AjaxResponse | |
* The JSON response object. | |
*/ | |
public function dialogClose() { | |
$response = new AjaxResponse(); | |
$response->addCommand(new CloseDialogCommand('#ajax-test-dialog-wrapper-1')); | |
return $response; | |
} | |
} |