function AddItemToToolbar::applySingle
Same name and namespace in other branches
- main core/modules/ckeditor5/src/Plugin/ConfigAction/AddItemToToolbar.php \Drupal\ckeditor5\Plugin\ConfigAction\AddItemToToolbar::applySingle()
Adds an item to the toolbar.
Parameters
\Drupal\editor\EditorInterface $editor: The editor to which the item should be added.
string|array $value: The name of the item, or an array of options for the item.
Return value
bool TRUE if the editor settings were changed, FALSE otherwise.
1 call to AddItemToToolbar::applySingle()
- AddItemToToolbar::apply in core/
modules/ ckeditor5/ src/ Plugin/ ConfigAction/ AddItemToToolbar.php - Applies the config action.
File
-
core/
modules/ ckeditor5/ src/ Plugin/ ConfigAction/ AddItemToToolbar.php, line 91
Class
- AddItemToToolbar
- Config action plugin to add an item to the toolbar.
Namespace
Drupal\ckeditor5\Plugin\ConfigActionCode
private function applySingle(EditorInterface $editor, string|array $value) : bool {
if (is_string($value)) {
$value = [
'item_name' => $value,
];
}
$item_name = $value['item_name'] ?? NULL;
if (!is_string($item_name)) {
throw new ConfigActionException(sprintf("The %s config action requires each toolbar item to define an 'item_name' string.", $this->pluginId));
}
$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 FALSE;
}
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 this item is associated with a plugin, ensure that it's configured
// at the editor level, if necessary. A vertical separator is not
// associated with any plugin.
if ($item_name !== '|') {
/** @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);
return TRUE;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.