Drupal 8.0.0 beta 12. More info: https://www.drupal.org/node/2514176
This commit is contained in:
commit
9921556621
13277 changed files with 1459781 additions and 0 deletions
55
core/lib/Drupal/Core/Ajax/AddCssCommand.php
Normal file
55
core/lib/Drupal/Core/Ajax/AddCssCommand.php
Normal file
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\AddCssCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* An AJAX command for adding css to the page via ajax.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.add_css()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @see misc/ajax.js
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class AddCssCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* A string that contains the styles to be added to the page.
|
||||
*
|
||||
* It should include the wrapping style tag.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $styles;
|
||||
|
||||
/**
|
||||
* Constructs an AddCssCommand.
|
||||
*
|
||||
* @param string $styles
|
||||
* A string that contains the styles to be added to the page, including the
|
||||
* wrapping <style> tag.
|
||||
*/
|
||||
public function __construct($styles) {
|
||||
$this->styles = $styles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'add_css',
|
||||
'data' => $this->styles,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
42
core/lib/Drupal/Core/Ajax/AfterCommand.php
Normal file
42
core/lib/Drupal/Core/Ajax/AfterCommand.php
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\AfterCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\InsertCommand;
|
||||
|
||||
/**
|
||||
* An AJAX command for calling the jQuery after() method.
|
||||
*
|
||||
* The 'insert/after' command instructs the client to use jQuery's after()
|
||||
* method to insert the given HTML content after each element matched by the
|
||||
* given selector.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.insert()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @see http://docs.jquery.com/Manipulation/after#content
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class AfterCommand extends InsertCommand {
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'insert',
|
||||
'method' => 'after',
|
||||
'selector' => $this->selector,
|
||||
'data' => $this->getRenderedContent(),
|
||||
'settings' => $this->settings,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
78
core/lib/Drupal/Core/Ajax/AjaxResponse.php
Normal file
78
core/lib/Drupal/Core/Ajax/AjaxResponse.php
Normal file
|
@ -0,0 +1,78 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\AjaxResponse.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Asset\AttachedAssets;
|
||||
use Drupal\Core\Render\BubbleableMetadata;
|
||||
use Drupal\Core\Render\Renderer;
|
||||
use Drupal\Core\Render\AttachmentsInterface;
|
||||
use Drupal\Core\Render\AttachmentsTrait;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
/**
|
||||
* 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 = array();
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
}
|
199
core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php
Normal file
199
core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php
Normal file
|
@ -0,0 +1,199 @@
|
|||
<?php
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\AjaxResponseAttachmentsProcessor.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Asset\AssetCollectionRendererInterface;
|
||||
use Drupal\Core\Asset\AssetResolverInterface;
|
||||
use Drupal\Core\Asset\AttachedAssets;
|
||||
use Drupal\Core\Config\ConfigFactoryInterface;
|
||||
use Drupal\Core\Extension\ModuleHandlerInterface;
|
||||
use Drupal\Core\Render\AttachmentsInterface;
|
||||
use Drupal\Core\Render\AttachmentsResponseProcessorInterface;
|
||||
use Drupal\Core\Render\RendererInterface;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\RequestStack;
|
||||
|
||||
/**
|
||||
* Processes attachments of AJAX responses.
|
||||
*
|
||||
* @see \Drupal\Core\Ajax\AjaxResponse
|
||||
* @see \Drupal\Core\Render\MainContent\AjaxRenderer
|
||||
*/
|
||||
class AjaxResponseAttachmentsProcessor implements AttachmentsResponseProcessorInterface {
|
||||
|
||||
/**
|
||||
* The asset resolver service.
|
||||
*
|
||||
* @var \Drupal\Core\Asset\AssetResolverInterface
|
||||
*/
|
||||
protected $assetResolver;
|
||||
|
||||
/**
|
||||
* A config object for the system performance configuration.
|
||||
*
|
||||
* @var \Drupal\Core\Config\Config
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* The CSS asset collection renderer service.
|
||||
*
|
||||
* @var \Drupal\Core\Asset\AssetCollectionRendererInterface
|
||||
*/
|
||||
protected $cssCollectionRenderer;
|
||||
|
||||
/**
|
||||
* The JS asset collection renderer service.
|
||||
*
|
||||
* @var \Drupal\Core\Asset\AssetCollectionRendererInterface
|
||||
*/
|
||||
protected $jsCollectionRenderer;
|
||||
|
||||
/**
|
||||
* The request stack.
|
||||
*
|
||||
* @var \Symfony\Component\HttpFoundation\RequestStack
|
||||
*/
|
||||
protected $requestStack;
|
||||
|
||||
/**
|
||||
* The renderer.
|
||||
*
|
||||
* @var \Drupal\Core\Render\RendererInterface
|
||||
*/
|
||||
protected $renderer;
|
||||
|
||||
/**
|
||||
* The module handler.
|
||||
*
|
||||
* @var \Drupal\Core\Extension\ModuleHandlerInterface
|
||||
*/
|
||||
protected $moduleHandler;
|
||||
|
||||
/**
|
||||
* Constructs a AjaxResponseAttachmentsProcessor object.
|
||||
*
|
||||
* @param \Drupal\Core\Asset\AssetResolverInterface $asset_resolver
|
||||
* An asset resolver.
|
||||
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
|
||||
* A config factory for retrieving required config objects.
|
||||
* @param \Drupal\Core\Asset\AssetCollectionRendererInterface $css_collection_renderer
|
||||
* The CSS asset collection renderer.
|
||||
* @param \Drupal\Core\Asset\AssetCollectionRendererInterface $js_collection_renderer
|
||||
* The JS asset collection renderer.
|
||||
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
|
||||
* The request stack.
|
||||
* @param \Drupal\Core\Render\RendererInterface $renderer
|
||||
* The renderer.
|
||||
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
|
||||
* The module handler.
|
||||
*/
|
||||
public function __construct(AssetResolverInterface $asset_resolver, ConfigFactoryInterface $config_factory, AssetCollectionRendererInterface $css_collection_renderer, AssetCollectionRendererInterface $js_collection_renderer, RequestStack $request_stack, RendererInterface $renderer, ModuleHandlerInterface $module_handler) {
|
||||
$this->assetResolver = $asset_resolver;
|
||||
$this->config = $config_factory->get('system.performance');
|
||||
$this->cssCollectionRenderer = $css_collection_renderer;
|
||||
$this->jsCollectionRenderer = $js_collection_renderer;
|
||||
$this->requestStack = $request_stack;
|
||||
$this->renderer = $renderer;
|
||||
$this->moduleHandler = $module_handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function processAttachments(AttachmentsInterface $response) {
|
||||
// @todo Convert to assertion once https://www.drupal.org/node/2408013 lands
|
||||
if (!$response instanceof AjaxResponse) {
|
||||
throw new \InvalidArgumentException('\Drupal\Core\Ajax\AjaxResponse instance expected.');
|
||||
}
|
||||
|
||||
$request = $this->requestStack->getCurrentRequest();
|
||||
|
||||
if ($response->getContent() == '{}') {
|
||||
$response->setData($this->buildAttachmentsCommands($response, $request));
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares the AJAX commands to attach assets.
|
||||
*
|
||||
* @param \Drupal\Core\Ajax\AjaxResponse $response
|
||||
* The AJAX response to update.
|
||||
* @param \Symfony\Component\HttpFoundation\Request $request
|
||||
* The request object that the AJAX is responding to.
|
||||
*
|
||||
* @return array
|
||||
* An array of commands ready to be returned as JSON.
|
||||
*/
|
||||
protected function buildAttachmentsCommands(AjaxResponse $response, Request $request) {
|
||||
$ajax_page_state = $request->request->get('ajax_page_state');
|
||||
|
||||
// Aggregate CSS/JS if necessary, but only during normal site operation.
|
||||
$optimize_css = !defined('MAINTENANCE_MODE') && $this->config->get('css.preprocess');
|
||||
$optimize_js = !defined('MAINTENANCE_MODE') && $this->config->get('js.preprocess');
|
||||
|
||||
$attachments = $response->getAttachments();
|
||||
|
||||
// Resolve the attached libraries into asset collections.
|
||||
$assets = new AttachedAssets();
|
||||
$assets->setLibraries(isset($attachments['library']) ? $attachments['library'] : [])
|
||||
->setAlreadyLoadedLibraries(isset($ajax_page_state['libraries']) ? explode(',', $ajax_page_state['libraries']) : [])
|
||||
->setSettings(isset($attachments['drupalSettings']) ? $attachments['drupalSettings'] : []);
|
||||
$css_assets = $this->assetResolver->getCssAssets($assets, $optimize_css);
|
||||
list($js_assets_header, $js_assets_footer) = $this->assetResolver->getJsAssets($assets, $optimize_js);
|
||||
|
||||
// Render the HTML to load these files, and add AJAX commands to insert this
|
||||
// HTML in the page. Settings are handled separately, afterwards.
|
||||
$settings = [];
|
||||
if (isset($js_assets_header['drupalSettings'])) {
|
||||
$settings = $js_assets_header['drupalSettings']['data'];
|
||||
unset($js_assets_header['drupalSettings']);
|
||||
}
|
||||
if (isset($js_assets_footer['drupalSettings'])) {
|
||||
$settings = $js_assets_footer['drupalSettings']['data'];
|
||||
unset($js_assets_footer['drupalSettings']);
|
||||
}
|
||||
|
||||
// Prepend commands to add the assets, preserving their relative order.
|
||||
$resource_commands = array();
|
||||
if ($css_assets) {
|
||||
$css_render_array = $this->cssCollectionRenderer->render($css_assets);
|
||||
$resource_commands[] = new AddCssCommand($this->renderer->renderPlain($css_render_array));
|
||||
}
|
||||
if ($js_assets_header) {
|
||||
$js_header_render_array = $this->jsCollectionRenderer->render($js_assets_header);
|
||||
$resource_commands[] = new PrependCommand('head', $this->renderer->renderPlain($js_header_render_array));
|
||||
}
|
||||
if ($js_assets_footer) {
|
||||
$js_footer_render_array = $this->jsCollectionRenderer->render($js_assets_footer);
|
||||
$resource_commands[] = new AppendCommand('body', $this->renderer->renderPlain($js_footer_render_array));
|
||||
}
|
||||
foreach (array_reverse($resource_commands) as $resource_command) {
|
||||
$response->addCommand($resource_command, TRUE);
|
||||
}
|
||||
|
||||
// Prepend a command to merge changes and additions to drupalSettings.
|
||||
if (!empty($settings)) {
|
||||
// During Ajax requests basic path-specific settings are excluded from
|
||||
// new drupalSettings values. The original page where this request comes
|
||||
// from already has the right values. An Ajax request would update them
|
||||
// with values for the Ajax request and incorrectly override the page's
|
||||
// values.
|
||||
// @see system_js_settings_alter()
|
||||
unset($settings['path']);
|
||||
$response->addCommand(new SettingsCommand($settings, TRUE), TRUE);
|
||||
}
|
||||
|
||||
$commands = $response->getCommands();
|
||||
$this->moduleHandler->alter('ajax_render', $commands);
|
||||
|
||||
return $commands;
|
||||
}
|
||||
|
||||
}
|
47
core/lib/Drupal/Core/Ajax/AlertCommand.php
Normal file
47
core/lib/Drupal/Core/Ajax/AlertCommand.php
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\AlertCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* AJAX command for a javascript alert box.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class AlertCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* The text to be displayed in the alert box.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $text;
|
||||
|
||||
/**
|
||||
* Constructs an AlertCommand object.
|
||||
*
|
||||
* @param string $text
|
||||
* The text to be displayed in the alert box.
|
||||
*/
|
||||
public function __construct($text) {
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'alert',
|
||||
'text' => $this->text,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
42
core/lib/Drupal/Core/Ajax/AppendCommand.php
Normal file
42
core/lib/Drupal/Core/Ajax/AppendCommand.php
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\AppendCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\InsertCommand;
|
||||
|
||||
/**
|
||||
* An AJAX command for calling the jQuery append() method.
|
||||
*
|
||||
* The 'insert/append' command instructs the client to use jQuery's append()
|
||||
* method to append the given HTML content to the inside of each element matched
|
||||
* by the given selector.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.insert()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @see http://docs.jquery.com/Manipulation/append#content
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class AppendCommand extends InsertCommand {
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'insert',
|
||||
'method' => 'append',
|
||||
'selector' => $this->selector,
|
||||
'data' => $this->getRenderedContent(),
|
||||
'settings' => $this->settings,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
42
core/lib/Drupal/Core/Ajax/BeforeCommand.php
Normal file
42
core/lib/Drupal/Core/Ajax/BeforeCommand.php
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\BeforeCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\InsertCommand;
|
||||
|
||||
/**
|
||||
* An AJAX command for calling the jQuery before() method.
|
||||
*
|
||||
* The 'insert/before' command instructs the client to use jQuery's before()
|
||||
* method to insert the given HTML content before each of elements matched by
|
||||
* the given selector.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.insert()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @see http://docs.jquery.com/Manipulation/before#content
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class BeforeCommand extends InsertCommand {
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'insert',
|
||||
'method' => 'before',
|
||||
'selector' => $this->selector,
|
||||
'data' => $this->getRenderedContent(),
|
||||
'settings' => $this->settings,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
67
core/lib/Drupal/Core/Ajax/ChangedCommand.php
Normal file
67
core/lib/Drupal/Core/Ajax/ChangedCommand.php
Normal file
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\ChangedCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* An AJAX command for marking HTML elements as changed.
|
||||
*
|
||||
* This command instructs the client to mark each of the elements matched by the
|
||||
* given selector as 'ajax-changed'.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.changed()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class ChangedCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* A CSS selector string.
|
||||
*
|
||||
* If the command is a response to a request from an #ajax form element then
|
||||
* this value can be NULL.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $selector;
|
||||
|
||||
/**
|
||||
* An optional CSS selector for elements to which asterisks will be appended.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $asterisk;
|
||||
|
||||
/**
|
||||
* Constructs a ChangedCommand object.
|
||||
*
|
||||
* @param string $selector
|
||||
* CSS selector for elements to be marked as changed.
|
||||
* @param string $asterisk
|
||||
* CSS selector for elements to which an asterisk will be appended.
|
||||
*/
|
||||
public function __construct($selector, $asterisk = '') {
|
||||
$this->selector = $selector;
|
||||
$this->asterisk = $asterisk;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'changed',
|
||||
'selector' => $this->selector,
|
||||
'asterisk' => $this->asterisk,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
54
core/lib/Drupal/Core/Ajax/CloseDialogCommand.php
Normal file
54
core/lib/Drupal/Core/Ajax/CloseDialogCommand.php
Normal file
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\CloseDialogCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
/**
|
||||
* Defines an AJAX command that closes the current active dialog.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class CloseDialogCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* A CSS selector string of the dialog to close.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $selector;
|
||||
|
||||
/**
|
||||
* Whether to persist the dialog in the DOM or not.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $persist;
|
||||
|
||||
/**
|
||||
* Constructs a CloseDialogCommand object.
|
||||
*
|
||||
* @param string $selector
|
||||
* A CSS selector string of the dialog to close.
|
||||
* @param bool $persist
|
||||
* (optional) Whether to persist the dialog in the DOM or not.
|
||||
*/
|
||||
public function __construct($selector = NULL, $persist = FALSE) {
|
||||
$this->selector = $selector ? $selector : '#drupal-modal';
|
||||
$this->persist = $persist;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements \Drupal\Core\Ajax\CommandInterface::render().
|
||||
*/
|
||||
public function render() {
|
||||
return array(
|
||||
'command' => 'closeDialog',
|
||||
'selector' => $this->selector,
|
||||
'persist' => $this->persist,
|
||||
);
|
||||
}
|
||||
}
|
30
core/lib/Drupal/Core/Ajax/CloseModalDialogCommand.php
Normal file
30
core/lib/Drupal/Core/Ajax/CloseModalDialogCommand.php
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\CloseModalDialogCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CloseDialogCommand;
|
||||
|
||||
/**
|
||||
* Defines an AJAX command that closes the currently visible modal dialog.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class CloseModalDialogCommand extends CloseDialogCommand {
|
||||
|
||||
/**
|
||||
* Constructs a CloseModalDialogCommand object.
|
||||
*
|
||||
* @param bool $persist
|
||||
* (optional) Whether to persist the dialog in the DOM or not.
|
||||
*/
|
||||
public function __construct($persist = FALSE) {
|
||||
$this->selector = '#drupal-modal';
|
||||
$this->persist = $persist;
|
||||
}
|
||||
|
||||
}
|
24
core/lib/Drupal/Core/Ajax/CommandInterface.php
Normal file
24
core/lib/Drupal/Core/Ajax/CommandInterface.php
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\CommandInterface.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
/**
|
||||
* AJAX command interface.
|
||||
*
|
||||
* All AJAX commands passed to AjaxResponse objects should implement these
|
||||
* methods.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
interface CommandInterface {
|
||||
|
||||
/**
|
||||
* Return an array to be run through json_encode and sent to the client.
|
||||
*/
|
||||
public function render();
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\CommandWithAttachedAssetsInterface.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
/**
|
||||
* Interface for Ajax commands that render content and attach assets.
|
||||
*
|
||||
* All Ajax commands that render HTML should implement these methods
|
||||
* to be able to return attached assets to the calling AjaxResponse object.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
interface CommandWithAttachedAssetsInterface {
|
||||
|
||||
/**
|
||||
* Gets the attached assets.
|
||||
*
|
||||
* @return \Drupal\Core\Asset\AttachedAssets|null
|
||||
* The attached assets for this command.
|
||||
*/
|
||||
public function getAttachedAssets();
|
||||
|
||||
}
|
57
core/lib/Drupal/Core/Ajax/CommandWithAttachedAssetsTrait.php
Normal file
57
core/lib/Drupal/Core/Ajax/CommandWithAttachedAssetsTrait.php
Normal file
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\CommandWithAttachedAssetsTrait.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Asset\AttachedAssets;
|
||||
|
||||
/**
|
||||
* Trait for Ajax commands that render content and attach assets.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
trait CommandWithAttachedAssetsTrait {
|
||||
|
||||
/**
|
||||
* The attached assets for this Ajax command.
|
||||
*
|
||||
* @var \Drupal\Core\Asset\AttachedAssets
|
||||
*/
|
||||
protected $attachedAssets;
|
||||
|
||||
/**
|
||||
* Processes the content for output.
|
||||
*
|
||||
* If content is a render array, it may contain attached assets to be
|
||||
* processed.
|
||||
*
|
||||
* @return string
|
||||
* HTML rendered content.
|
||||
*/
|
||||
protected function getRenderedContent() {
|
||||
$this->attachedAssets = new AttachedAssets();
|
||||
if (is_array($this->content)) {
|
||||
$html = \Drupal::service('renderer')->renderRoot($this->content);
|
||||
$this->attachedAssets = AttachedAssets::createFromRenderArray($this->content);
|
||||
return $html;
|
||||
}
|
||||
else {
|
||||
return $this->content;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the attached assets.
|
||||
*
|
||||
* @return \Drupal\Core\Asset\AttachedAssets|null
|
||||
* The attached assets for this command.
|
||||
*/
|
||||
public function getAttachedAssets() {
|
||||
return $this->attachedAssets;
|
||||
}
|
||||
|
||||
}
|
84
core/lib/Drupal/Core/Ajax/CssCommand.php
Normal file
84
core/lib/Drupal/Core/Ajax/CssCommand.php
Normal file
|
@ -0,0 +1,84 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\CssCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* An AJAX command for calling the jQuery css() method.
|
||||
*
|
||||
* The 'css' command will instruct the client to use the jQuery css() method to
|
||||
* apply the CSS arguments to elements matched by the given selector.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.css() defined
|
||||
* in misc/ajax.js.
|
||||
*
|
||||
* @see http://docs.jquery.com/CSS/css#properties
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class CssCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* A CSS selector string.
|
||||
*
|
||||
* If the command is a response to a request from an #ajax form element then
|
||||
* this value can be NULL.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $selector;
|
||||
|
||||
/**
|
||||
* An array of property/value pairs to set in the CSS for the selector.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $css = array();
|
||||
|
||||
/**
|
||||
* Constructs a CssCommand object.
|
||||
*
|
||||
* @param string $selector
|
||||
* A CSS selector for elements to which the CSS will be applied.
|
||||
* @param array $css
|
||||
* An array of CSS property/value pairs to set.
|
||||
*/
|
||||
public function __construct($selector, array $css = array()) {
|
||||
$this->selector = $selector;
|
||||
$this->css = $css;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a property/value pair to the CSS to be added to this element.
|
||||
*
|
||||
* @param $property
|
||||
* The CSS property to be changed.
|
||||
* @param $value
|
||||
* The new value of the CSS property.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setProperty($property, $value) {
|
||||
$this->css[$property] = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'css',
|
||||
'selector' => $this->selector,
|
||||
'argument' => $this->css,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
81
core/lib/Drupal/Core/Ajax/DataCommand.php
Normal file
81
core/lib/Drupal/Core/Ajax/DataCommand.php
Normal file
|
@ -0,0 +1,81 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\DataCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* An AJAX command for implementing jQuery's data() method.
|
||||
*
|
||||
* This instructs the client to attach the name=value pair of data to the
|
||||
* selector via jQuery's data cache.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.data() defined
|
||||
* in misc/ajax.js.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class DataCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* A CSS selector string for elements to which data will be attached.
|
||||
*
|
||||
* If the command is a response to a request from an #ajax form element then
|
||||
* this value can be NULL.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $selector;
|
||||
|
||||
/**
|
||||
* The key of the data attached to elements matched by the selector.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* The value of the data to be attached to elements matched by the selector.
|
||||
*
|
||||
* The data is not limited to strings; it can be any format.
|
||||
*
|
||||
* @var mixed
|
||||
*/
|
||||
protected $value;
|
||||
|
||||
/**
|
||||
* Constructs a DataCommand object.
|
||||
*
|
||||
* @param string $selector
|
||||
* A CSS selector for the elements to which the data will be attached.
|
||||
* @param string $name
|
||||
* The key of the data to be attached to elements matched by the selector.
|
||||
* @param type $value
|
||||
* The value of the data to be attached to elements matched by the selector.
|
||||
*/
|
||||
public function __construct($selector, $name, $value) {
|
||||
$this->selector = $selector;
|
||||
$this->name = $name;
|
||||
$this->value = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'data',
|
||||
'selector' => $this->selector,
|
||||
'name' => $this->name,
|
||||
'value' => $this->value,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
42
core/lib/Drupal/Core/Ajax/HtmlCommand.php
Normal file
42
core/lib/Drupal/Core/Ajax/HtmlCommand.php
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\HtmlCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\InsertCommand;
|
||||
|
||||
/**
|
||||
* AJAX command for calling the jQuery html() method.
|
||||
*
|
||||
* The 'insert/html' command instructs the client to use jQuery's html() method
|
||||
* to set the HTML content of each element matched by the given selector while
|
||||
* leaving the outer tags intact.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.insert()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @see http://docs.jquery.com/Attributes/html#val
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class HtmlCommand extends InsertCommand {
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'insert',
|
||||
'method' => 'html',
|
||||
'selector' => $this->selector,
|
||||
'data' => $this->getRenderedContent(),
|
||||
'settings' => $this->settings,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
85
core/lib/Drupal/Core/Ajax/InsertCommand.php
Normal file
85
core/lib/Drupal/Core/Ajax/InsertCommand.php
Normal file
|
@ -0,0 +1,85 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\InsertCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* Generic AJAX command for inserting content.
|
||||
*
|
||||
* This command instructs the client to insert the given HTML using whichever
|
||||
* jQuery DOM manipulation method has been specified in the #ajax['method']
|
||||
* variable of the element that triggered the request.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.insert()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class InsertCommand implements CommandInterface, CommandWithAttachedAssetsInterface {
|
||||
|
||||
use CommandWithAttachedAssetsTrait;
|
||||
|
||||
/**
|
||||
* A CSS selector string.
|
||||
*
|
||||
* If the command is a response to a request from an #ajax form element then
|
||||
* this value can be NULL.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $selector;
|
||||
|
||||
/**
|
||||
* The content for the matched element(s).
|
||||
*
|
||||
* Either a render array or an HTML string.
|
||||
*
|
||||
* @var string|array
|
||||
*/
|
||||
protected $content;
|
||||
|
||||
/**
|
||||
* A settings array to be passed to any any attached JavaScript behavior.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $settings;
|
||||
|
||||
/**
|
||||
* Constructs an InsertCommand object.
|
||||
*
|
||||
* @param string $selector
|
||||
* A CSS selector.
|
||||
* @param string|array $content
|
||||
* The content that will be inserted in the matched element(s), either a
|
||||
* render array or an HTML string.
|
||||
* @param array $settings
|
||||
* An array of JavaScript settings to be passed to any attached behaviors.
|
||||
*/
|
||||
public function __construct($selector, $content, array $settings = NULL) {
|
||||
$this->selector = $selector;
|
||||
$this->content = $content;
|
||||
$this->settings = $settings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'insert',
|
||||
'method' => NULL,
|
||||
'selector' => $this->selector,
|
||||
'data' => $this->getRenderedContent(),
|
||||
'settings' => $this->settings,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
80
core/lib/Drupal/Core/Ajax/InvokeCommand.php
Normal file
80
core/lib/Drupal/Core/Ajax/InvokeCommand.php
Normal file
|
@ -0,0 +1,80 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\InvokeCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* AJAX command for invoking an arbitrary jQuery method.
|
||||
*
|
||||
* The 'invoke' command will instruct the client to invoke the given jQuery
|
||||
* method with the supplied arguments on the elements matched by the given
|
||||
* selector. Intended for simple jQuery commands, such as attr(), addClass(),
|
||||
* removeClass(), toggleClass(), etc.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.invoke()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class InvokeCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* A CSS selector string.
|
||||
*
|
||||
* If the command is a response to a request from an #ajax form element then
|
||||
* this value can be NULL.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $selector;
|
||||
|
||||
/**
|
||||
* A jQuery method to invoke.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $method;
|
||||
|
||||
/**
|
||||
* An optional list of arguments to pass to the method.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $arguments;
|
||||
|
||||
/**
|
||||
* Constructs an InvokeCommand object.
|
||||
*
|
||||
* @param string $selector
|
||||
* A jQuery selector.
|
||||
* @param string $method
|
||||
* The name of a jQuery method to invoke.
|
||||
* @param array $arguments
|
||||
* An optional array of arguments to pass to the method.
|
||||
*/
|
||||
public function __construct($selector, $method, array $arguments = array()) {
|
||||
$this->selector = $selector;
|
||||
$this->method = $method;
|
||||
$this->arguments = $arguments;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'invoke',
|
||||
'selector' => $this->selector,
|
||||
'method' => $this->method,
|
||||
'args' => $this->arguments,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
144
core/lib/Drupal/Core/Ajax/OpenDialogCommand.php
Normal file
144
core/lib/Drupal/Core/Ajax/OpenDialogCommand.php
Normal file
|
@ -0,0 +1,144 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\OpenDialogCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* Defines an AJAX command to open certain content in a dialog.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class OpenDialogCommand implements CommandInterface, CommandWithAttachedAssetsInterface {
|
||||
|
||||
use CommandWithAttachedAssetsTrait;
|
||||
|
||||
/**
|
||||
* The selector of the dialog.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $selector;
|
||||
|
||||
/**
|
||||
* The title of the dialog.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $title;
|
||||
|
||||
/**
|
||||
* The content for the dialog.
|
||||
*
|
||||
* Either a render array or an HTML string.
|
||||
*
|
||||
* @var string|array
|
||||
*/
|
||||
protected $content;
|
||||
|
||||
/**
|
||||
* Stores dialog-specific options passed directly to jQuery UI dialogs. Any
|
||||
* jQuery UI option can be used. See http://api.jqueryui.com/dialog.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $dialogOptions;
|
||||
|
||||
/**
|
||||
* Custom settings that will be passed to the Drupal behaviors on the content
|
||||
* of the dialog.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $settings;
|
||||
|
||||
/**
|
||||
* Constructs an OpenDialogCommand object.
|
||||
*
|
||||
* @param string $selector
|
||||
* The selector of the dialog.
|
||||
* @param string $title
|
||||
* The title of the dialog.
|
||||
* @param string|array $content
|
||||
* The content that will be placed in the dialog, either a render array
|
||||
* or an HTML string.
|
||||
* @param array $dialog_options
|
||||
* (optional) Options to be passed to the dialog implementation. Any
|
||||
* jQuery UI option can be used. See http://api.jqueryui.com/dialog.
|
||||
* @param array|null $settings
|
||||
* (optional) Custom settings that will be passed to the Drupal behaviors
|
||||
* on the content of the dialog. If left empty, the settings will be
|
||||
* populated automatically from the current request.
|
||||
*/
|
||||
public function __construct($selector, $title, $content, array $dialog_options = array(), $settings = NULL) {
|
||||
$dialog_options += array('title' => $title);
|
||||
$this->selector = $selector;
|
||||
$this->content = $content;
|
||||
$this->dialogOptions = $dialog_options;
|
||||
$this->settings = $settings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the dialog options.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getDialogOptions() {
|
||||
return $this->dialogOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the dialog options array.
|
||||
*
|
||||
* @param array $dialog_options
|
||||
* Options to be passed to the dialog implementation. Any jQuery UI option
|
||||
* can be used. See http://api.jqueryui.com/dialog.
|
||||
*/
|
||||
public function setDialogOptions($dialog_options) {
|
||||
$this->dialogOptions = $dialog_options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a single dialog option value.
|
||||
*
|
||||
* @param string $key
|
||||
* Key of the dialog option. Any jQuery UI option can be used.
|
||||
* See http://api.jqueryui.com/dialog.
|
||||
* @param mixed $value
|
||||
* Option to be passed to the dialog implementation.
|
||||
*/
|
||||
public function setDialogOption($key, $value) {
|
||||
$this->dialogOptions[$key] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the dialog title (an alias of setDialogOptions).
|
||||
*
|
||||
* @param string $title
|
||||
* The new title of the dialog.
|
||||
*/
|
||||
public function setDialogTitle($title) {
|
||||
$this->setDialogOptions('title', $title);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements \Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
// For consistency ensure the modal option is set to TRUE or FALSE.
|
||||
$this->dialogOptions['modal'] = isset($this->dialogOptions['modal']) && $this->dialogOptions['modal'];
|
||||
return array(
|
||||
'command' => 'openDialog',
|
||||
'selector' => $this->selector,
|
||||
'settings' => $this->settings,
|
||||
'data' => $this->getRenderedContent(),
|
||||
'dialogOptions' => $this->dialogOptions,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
43
core/lib/Drupal/Core/Ajax/OpenModalDialogCommand.php
Normal file
43
core/lib/Drupal/Core/Ajax/OpenModalDialogCommand.php
Normal file
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\OpenModalDialogCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\OpenDialogCommand;
|
||||
|
||||
/**
|
||||
* Defines an AJAX command to open certain content in a dialog in a modal dialog.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class OpenModalDialogCommand extends OpenDialogCommand {
|
||||
/**
|
||||
* Constructs an OpenModalDialog object.
|
||||
*
|
||||
* The modal dialog differs from the normal modal provided by
|
||||
* OpenDialogCommand in that a modal prevents other interactions on the page
|
||||
* until the modal has been completed. Drupal provides a built-in modal for
|
||||
* this purpose, so no selector needs to be provided.
|
||||
*
|
||||
* @param string $title
|
||||
* The title of the dialog.
|
||||
* @param string|array $content
|
||||
* The content that will be placed in the dialog, either a render array
|
||||
* or an HTML string.
|
||||
* @param array $dialog_options
|
||||
* (optional) Settings to be passed to the dialog implementation. Any
|
||||
* jQuery UI option can be used. See http://api.jqueryui.com/dialog.
|
||||
* @param array|null $settings
|
||||
* (optional) Custom settings that will be passed to the Drupal behaviors
|
||||
* on the content of the dialog. If left empty, the settings will be
|
||||
* populated automatically from the current request.
|
||||
*/
|
||||
public function __construct($title, $content, array $dialog_options = array(), $settings = NULL) {
|
||||
$dialog_options['modal'] = TRUE;
|
||||
parent::__construct('#drupal-modal', $title, $content, $dialog_options, $settings);
|
||||
}
|
||||
}
|
42
core/lib/Drupal/Core/Ajax/PrependCommand.php
Normal file
42
core/lib/Drupal/Core/Ajax/PrependCommand.php
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\PrependCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\InsertCommand;
|
||||
|
||||
/**
|
||||
* AJAX command for calling the jQuery insert() method.
|
||||
*
|
||||
* The 'insert/prepend' command instructs the client to use jQuery's prepend()
|
||||
* method to prepend the given HTML content to the inside each element matched
|
||||
* by the given selector.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.insert()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @see http://docs.jquery.com/Manipulation/prepend#content
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class PrependCommand extends InsertCommand {
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'insert',
|
||||
'method' => 'prepend',
|
||||
'selector' => $this->selector,
|
||||
'data' => $this->getRenderedContent(),
|
||||
'settings' => $this->settings,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
47
core/lib/Drupal/Core/Ajax/RedirectCommand.php
Normal file
47
core/lib/Drupal/Core/Ajax/RedirectCommand.php
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\RedirectCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* Defines an AJAX command to set the window.location, loading that URL.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class RedirectCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* The URL that will be loaded into window.location.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $url;
|
||||
|
||||
/**
|
||||
* Constructs an RedirectCommand object.
|
||||
*
|
||||
* @param string $url
|
||||
* The URL that will be loaded into window.location. This should be a full
|
||||
* URL.
|
||||
*/
|
||||
public function __construct($url) {
|
||||
$this->url = $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements \Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
return array(
|
||||
'command' => 'redirect',
|
||||
'url' => $this->url,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
55
core/lib/Drupal/Core/Ajax/RemoveCommand.php
Normal file
55
core/lib/Drupal/Core/Ajax/RemoveCommand.php
Normal file
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\RemoveCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* AJAX command for calling the jQuery remove() method.
|
||||
*
|
||||
* The 'remove' command instructs the client to use jQuery's remove() method
|
||||
* to remove each of elements matched by the given selector, and everything
|
||||
* within them.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.remove()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @see http://docs.jquery.com/Manipulation/remove#expr
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class RemoveCommand Implements CommandInterface {
|
||||
|
||||
/**
|
||||
* The CSS selector for the element(s) to be removed.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $selector;
|
||||
|
||||
/**
|
||||
* Constructs a RemoveCommand object.
|
||||
*
|
||||
* @param string $selector
|
||||
*
|
||||
*/
|
||||
public function __construct($selector) {
|
||||
$this->selector = $selector;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
return array(
|
||||
'command' => 'remove',
|
||||
'selector' => $this->selector,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
43
core/lib/Drupal/Core/Ajax/ReplaceCommand.php
Normal file
43
core/lib/Drupal/Core/Ajax/ReplaceCommand.php
Normal file
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\ReplaceCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\InsertCommand;
|
||||
|
||||
/**
|
||||
* AJAX command for calling the jQuery replace() method.
|
||||
*
|
||||
* The 'insert/replaceWith' command instructs the client to use jQuery's
|
||||
* replaceWith() method to replace each element matched matched by the given
|
||||
* selector with the given HTML.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.insert()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* See
|
||||
* @link http://docs.jquery.com/Manipulation/replaceWith#content jQuery replaceWith command @endlink
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class ReplaceCommand extends InsertCommand {
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'insert',
|
||||
'method' => 'replaceWith',
|
||||
'selector' => $this->selector,
|
||||
'data' => $this->getRenderedContent(),
|
||||
'settings' => $this->settings,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
56
core/lib/Drupal/Core/Ajax/RestripeCommand.php
Normal file
56
core/lib/Drupal/Core/Ajax/RestripeCommand.php
Normal file
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\RestripeCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* AJAX command for resetting the striping on a table.
|
||||
*
|
||||
* The 'restripe' command instructs the client to restripe a table. This is
|
||||
* usually used after a table has been modified by a replace or append command.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.restripe()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class RestripeCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* A CSS selector string.
|
||||
*
|
||||
* If the command is a response to a request from an #ajax form element then
|
||||
* this value can be NULL.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $selector;
|
||||
|
||||
/**
|
||||
* Constructs a RestripeCommand object.
|
||||
*
|
||||
* @param string $selector
|
||||
* A CSS selector for the table to be restriped.
|
||||
*/
|
||||
public function __construct($selector) {
|
||||
$this->selector = $selector;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'restripe',
|
||||
'selector' => $this->selector,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
68
core/lib/Drupal/Core/Ajax/SetDialogOptionCommand.php
Normal file
68
core/lib/Drupal/Core/Ajax/SetDialogOptionCommand.php
Normal file
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\SetDialogOptionCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
/**
|
||||
* Defines an AJAX command that sets jQuery UI dialog properties.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class SetDialogOptionCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* A CSS selector string.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $selector;
|
||||
|
||||
/**
|
||||
* A jQuery UI dialog option name.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $optionName;
|
||||
|
||||
/**
|
||||
* A jQuery UI dialog option value.
|
||||
*
|
||||
* @var mixed
|
||||
*/
|
||||
protected $optionValue;
|
||||
|
||||
/**
|
||||
* Constructs a SetDialogOptionCommand object.
|
||||
*
|
||||
* @param string $selector
|
||||
* The selector of the dialog whose title will be set. If set to an empty
|
||||
* value, the default modal dialog will be selected.
|
||||
* @param string $option_name
|
||||
* The name of the option to set. May be any jQuery UI dialog option.
|
||||
* See http://api.jqueryui.com/dialog.
|
||||
* @param mixed $option_value
|
||||
* The value of the option to be passed to the dialog.
|
||||
*/
|
||||
public function __construct($selector, $option_name, $option_value) {
|
||||
$this->selector = $selector ? $selector : '#drupal-modal';
|
||||
$this->optionName = $option_name;
|
||||
$this->optionValue = $option_value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements \Drupal\Core\Ajax\CommandInterface::render().
|
||||
*/
|
||||
public function render() {
|
||||
return array(
|
||||
'command' => 'setDialogOption',
|
||||
'selector' => $this->selector,
|
||||
'optionName' => $this->optionName,
|
||||
'optionValue' => $this->optionValue,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
33
core/lib/Drupal/Core/Ajax/SetDialogTitleCommand.php
Normal file
33
core/lib/Drupal/Core/Ajax/SetDialogTitleCommand.php
Normal file
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\SetDialogTitleCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\SetDialogOptionCommand;
|
||||
|
||||
/**
|
||||
* Defines an AJAX command that sets jQuery UI dialog properties.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class SetDialogTitleCommand extends SetDialogOptionCommand {
|
||||
|
||||
/**
|
||||
* Constructs a SetDialogTitleCommand object.
|
||||
*
|
||||
* @param string $selector
|
||||
* The selector of the dialog whose title will be set. If set to an empty
|
||||
* value, the default modal dialog will be selected.
|
||||
* @param string $title
|
||||
* The title that will be set on the dialog.
|
||||
*/
|
||||
public function __construct($selector, $title) {
|
||||
$this->selector = $selector ? $selector : '#drupal-modal';
|
||||
$this->optionName = 'title';
|
||||
$this->optionValue = $title;
|
||||
}
|
||||
}
|
71
core/lib/Drupal/Core/Ajax/SettingsCommand.php
Normal file
71
core/lib/Drupal/Core/Ajax/SettingsCommand.php
Normal file
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\SettingsCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
use Drupal\Core\Ajax\CommandInterface;
|
||||
|
||||
/**
|
||||
* AJAX command for adjusting Drupal's JavaScript settings.
|
||||
*
|
||||
* The 'settings' command instructs the client either to use the given array as
|
||||
* the settings for ajax-loaded content or to extend drupalSettings with the
|
||||
* given array, depending on the value of the $merge parameter.
|
||||
*
|
||||
* This command is implemented by Drupal.AjaxCommands.prototype.settings()
|
||||
* defined in misc/ajax.js.
|
||||
*
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class SettingsCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* An array of key/value pairs of JavaScript settings.
|
||||
*
|
||||
* This will be used for all commands after this if they do not include their
|
||||
* own settings array.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $settings;
|
||||
|
||||
/**
|
||||
* Whether the settings should be merged into the global drupalSettings.
|
||||
*
|
||||
* By default (FALSE), the settings that are passed to Drupal.attachBehaviors
|
||||
* will not include the global drupalSettings.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $merge;
|
||||
|
||||
/**
|
||||
* Constructs a SettingsCommand object.
|
||||
*
|
||||
* @param array $settings
|
||||
* An array of key/value pairs of JavaScript settings.
|
||||
* @param bool $merge
|
||||
* Whether the settings should be merged into the global drupalSettings.
|
||||
*/
|
||||
public function __construct(array $settings, $merge = FALSE) {
|
||||
$this->settings = $settings;
|
||||
$this->merge = $merge;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements Drupal\Core\Ajax\CommandInterface:render().
|
||||
*/
|
||||
public function render() {
|
||||
|
||||
return array(
|
||||
'command' => 'settings',
|
||||
'settings' => $this->settings,
|
||||
'merge' => $this->merge,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
65
core/lib/Drupal/Core/Ajax/UpdateBuildIdCommand.php
Normal file
65
core/lib/Drupal/Core/Ajax/UpdateBuildIdCommand.php
Normal file
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Core\Ajax\UpdateBuildIdCommand.
|
||||
*/
|
||||
|
||||
namespace Drupal\Core\Ajax;
|
||||
|
||||
/**
|
||||
* AJAX command for updating the value of a hidden form_build_id input element
|
||||
* on a form. It requires the form passed in to have keys for both the old build
|
||||
* ID in #build_id_old and the new build ID in #build_id.
|
||||
*
|
||||
* The primary use case for this Ajax command is to serve a new build ID to a
|
||||
* form served from the cache to an anonymous user, preventing one anonymous
|
||||
* user from accessing the form state of another anonymous user on Ajax enabled
|
||||
* forms.
|
||||
*
|
||||
* This command is implemented by
|
||||
* Drupal.AjaxCommands.prototype.update_build_id() defined in misc/ajax.js.
|
||||
*O
|
||||
* @ingroup ajax
|
||||
*/
|
||||
class UpdateBuildIdCommand implements CommandInterface {
|
||||
|
||||
/**
|
||||
* Old build id.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $old;
|
||||
|
||||
/**
|
||||
* New build id.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $new;
|
||||
|
||||
/**
|
||||
* Constructs a UpdateBuildIdCommand object.
|
||||
*
|
||||
* @param string $old
|
||||
* The old build_id.
|
||||
* @param string $new
|
||||
* The new build_id.
|
||||
*/
|
||||
public function __construct($old, $new) {
|
||||
$this->old = $old;
|
||||
$this->new = $new;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function render() {
|
||||
return [
|
||||
'command' => 'update_build_id',
|
||||
'old' => $this->old,
|
||||
'new' => $this->new,
|
||||
];
|
||||
}
|
||||
|
||||
}
|
Reference in a new issue