Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 25 |
| DialogRenderer | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
42 | |
0.00% |
0 / 25 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| renderResponse | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 10 |
|||
| determineTargetSelector | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 13 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Render\MainContent\DialogRenderer. | |
| */ | |
| namespace Drupal\Core\Render\MainContent; | |
| use Drupal\Component\Utility\Html; | |
| use Drupal\Core\Ajax\AjaxResponse; | |
| use Drupal\Core\Ajax\OpenDialogCommand; | |
| use Drupal\Core\Controller\TitleResolverInterface; | |
| use Drupal\Core\Routing\RouteMatchInterface; | |
| use Symfony\Component\HttpFoundation\Request; | |
| /** | |
| * Default main content renderer for dialog requests. | |
| */ | |
| class DialogRenderer implements MainContentRendererInterface { | |
| /** | |
| * The title resolver. | |
| * | |
| * @var \Drupal\Core\Controller\TitleResolverInterface | |
| */ | |
| protected $titleResolver; | |
| /** | |
| * Constructs a new DialogRenderer. | |
| * | |
| * @param \Drupal\Core\Controller\TitleResolverInterface $title_resolver | |
| * The title resolver. | |
| */ | |
| public function __construct(TitleResolverInterface $title_resolver) { | |
| $this->titleResolver = $title_resolver; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function renderResponse(array $main_content, Request $request, RouteMatchInterface $route_match) { | |
| $response = new AjaxResponse(); | |
| // First render the main content, because it might provide a title. | |
| $content = drupal_render_root($main_content); | |
| // Attach the library necessary for using the OpenDialogCommand and set the | |
| // attachments for this Ajax response. | |
| $main_content['#attached']['library'][] = 'core/drupal.dialog.ajax'; | |
| $response->setAttachments($main_content['#attached']); | |
| // Determine the title: use the title provided by the main content if any, | |
| // otherwise get it from the routing information. | |
| $title = isset($main_content['#title']) ? $main_content['#title'] : $this->titleResolver->getTitle($request, $route_match->getRouteObject()); | |
| // Determine the dialog options and the target for the OpenDialogCommand. | |
| $options = $request->request->get('dialogOptions', array()); | |
| $target = $this->determineTargetSelector($options, $route_match); | |
| $response->addCommand(new OpenDialogCommand($target, $title, $content, $options)); | |
| return $response; | |
| } | |
| /** | |
| * Determine the target selector for the OpenDialogCommand. | |
| * | |
| * @param array &$options | |
| * The 'target' option, if set, is used, and then removed from $options. | |
| * @param RouteMatchInterface $route_match | |
| * When no 'target' option is set in $options, $route_match is used instead | |
| * to determine the target. | |
| * | |
| * @return string | |
| * The target selector. | |
| */ | |
| protected function determineTargetSelector(array &$options, RouteMatchInterface $route_match) { | |
| // Generate the target wrapper for the dialog. | |
| if (isset($options['target'])) { | |
| // If the target was nominated in the incoming options, use that. | |
| $target = $options['target']; | |
| // Ensure the target includes the #. | |
| if (substr($target, 0, 1) != '#') { | |
| $target = '#' . $target; | |
| } | |
| // This shouldn't be passed on to jQuery.ui.dialog. | |
| unset($options['target']); | |
| } | |
| else { | |
| // Generate a target based on the route id. | |
| $route_name = $route_match->getRouteName(); | |
| $target = '#' . Html::getUniqueId("drupal-dialog-$route_name"); | |
| } | |
| return $target; | |
| } | |
| } |