Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Ajax/AjaxResponse.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Ajax/AjaxResponse.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,68 @@ +<?php + +namespace Drupal\Core\Ajax; + +use Drupal\Core\Render\BubbleableMetadata; +use Drupal\Core\Render\AttachmentsInterface; +use Drupal\Core\Render\AttachmentsTrait; +use Symfony\Component\HttpFoundation\JsonResponse; + +/** + * JSON response object for AJAX requests. + * + * @ingroup ajax + */ +class AjaxResponse extends JsonResponse implements AttachmentsInterface { + + use AttachmentsTrait; + + /** + * The array of ajax commands. + * + * @var array + */ + protected $commands = []; + + /** + * Add an AJAX command to the response. + * + * @param \Drupal\Core\Ajax\CommandInterface $command + * An AJAX command object implementing CommandInterface. + * @param bool $prepend + * A boolean which determines whether the new command should be executed + * before previously added commands. Defaults to FALSE. + * + * @return AjaxResponse + * The current AjaxResponse. + */ + public function addCommand(CommandInterface $command, $prepend = FALSE) { + if ($prepend) { + array_unshift($this->commands, $command->render()); + } + else { + $this->commands[] = $command->render(); + } + if ($command instanceof CommandWithAttachedAssetsInterface) { + $assets = $command->getAttachedAssets(); + $attachments = [ + 'library' => $assets->getLibraries(), + 'drupalSettings' => $assets->getSettings(), + ]; + $attachments = BubbleableMetadata::mergeAttachments($this->getAttachments(), $attachments); + $this->setAttachments($attachments); + } + + return $this; + } + + /** + * Gets all AJAX commands. + * + * @return \Drupal\Core\Ajax\CommandInterface[] + * Returns all previously added AJAX commands. + */ + public function &getCommands() { + return $this->commands; + } + +}