Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Ajax/OpenDialogCommand.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 7a779792577d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Ajax/OpenDialogCommand.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,140 @@ +<?php + +namespace Drupal\Core\Ajax; + +use Drupal\Component\Render\PlainTextOutput; + +/** + * 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 = [], $settings = NULL) { + $title = PlainTextOutput::renderFromHtml($title); + $dialog_options += ['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 [ + 'command' => 'openDialog', + 'selector' => $this->selector, + 'settings' => $this->settings, + 'data' => $this->getRenderedContent(), + 'dialogOptions' => $this->dialogOptions, + ]; + } + +}