class AddItemToToolbar
Same name in other branches
- 10 core/modules/ckeditor5/src/Plugin/ConfigAction/AddItemToToolbar.php \Drupal\ckeditor5\Plugin\ConfigAction\AddItemToToolbar
Hierarchy
- class \Drupal\ckeditor5\Plugin\ConfigAction\AddItemToToolbar implements \Drupal\Core\Config\Action\ConfigActionPluginInterface, \Drupal\Core\Plugin\ContainerFactoryPluginInterface
Expanded class hierarchy of AddItemToToolbar
File
-
core/
modules/ ckeditor5/ src/ Plugin/ ConfigAction/ AddItemToToolbar.php, line 15
Namespace
Drupal\ckeditor5\Plugin\ConfigActionView source
final class AddItemToToolbar implements ConfigActionPluginInterface, ContainerFactoryPluginInterface {
public function __construct(ConfigManagerInterface $configManager, CKEditor5PluginManagerInterface $pluginManager, string $pluginId) {
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($container->get(ConfigManagerInterface::class), $container->get(CKEditor5PluginManagerInterface::class), $plugin_id);
}
/**
* {@inheritdoc}
*/
public function apply(string $configName, mixed $value) : void {
$editor = $this->configManager
->loadConfigEntityByName($configName);
assert($editor instanceof EditorInterface);
if ($editor->getEditor() !== 'ckeditor5') {
throw new ConfigActionException(sprintf('The %s config action only works with editors that use CKEditor 5.', $this->pluginId));
}
if (is_string($value)) {
$value = [
'item_name' => $value,
];
}
assert(is_array($value));
$item_name = $value['item_name'];
assert(is_string($item_name));
$replace = $value['replace'] ?? FALSE;
assert(is_bool($replace));
$position = $value['position'] ?? NULL;
$allow_duplicate = $value['allow_duplicate'] ?? FALSE;
assert(is_bool($allow_duplicate));
$editor_settings = $editor->getSettings();
// If the item is already in the toolbar and we're not allowing duplicate
// items, we're done.
if (in_array($item_name, $editor_settings['toolbar']['items'], TRUE) && $allow_duplicate === FALSE && $item_name !== '|') {
return;
}
if (is_int($position)) {
// If we want to replace the item at this position, then `replace`
// should be true. This would be useful if, for example, we wanted to
// replace the Image button with the Media Library.
array_splice($editor_settings['toolbar']['items'], $position, $replace ? 1 : 0, $item_name);
}
else {
$editor_settings['toolbar']['items'][] = $item_name;
}
// If we're just adding a vertical separator, there's nothing else we need
// to do at this point.
if ($item_name === '|') {
return;
}
// If this item is associated with a plugin, ensure that it's configured
// at the editor level, if necessary.
/** @var \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition $definition */
foreach ($this->pluginManager
->getDefinitions() as $id => $definition) {
if (array_key_exists($item_name, $definition->getToolbarItems())) {
// If plugin settings already exist, don't change them.
if (array_key_exists($id, $editor_settings['plugins'])) {
break;
}
elseif ($definition->isConfigurable()) {
/** @var \Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface $plugin */
$plugin = $this->pluginManager
->getPlugin($id, NULL);
$editor_settings['plugins'][$id] = $plugin->defaultConfiguration();
}
// No need to examine any other plugins.
break;
}
}
$editor->setSettings($editor_settings)
->save();
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
AddItemToToolbar::apply | public | function | Overrides ConfigActionPluginInterface::apply | |
AddItemToToolbar::create | public static | function | Overrides ContainerFactoryPluginInterface::create | |
AddItemToToolbar::__construct | public | function |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.