public function CKEditor5PluginManager::getEnabledDefinitions in Drupal 10
Filter list of definitions by enabled plugins only.
Parameters
\Drupal\editor\EditorInterface $editor: A configured text editor object.
Return value
array Enabled plugin definitions.
Overrides CKEditor5PluginManagerInterface::getEnabledDefinitions
2 calls to CKEditor5PluginManager::getEnabledDefinitions()
- CKEditor5PluginManager::getCKEditor5PluginConfig in core/
modules/ ckeditor5/ src/ Plugin/ CKEditor5PluginManager.php - Gets the configuration for the CKEditor 5 plugins enabled in this editor.
- CKEditor5PluginManager::getEnabledLibraries in core/
modules/ ckeditor5/ src/ Plugin/ CKEditor5PluginManager.php - Gets a list of libraries required for the editor.
File
- core/
modules/ ckeditor5/ src/ Plugin/ CKEditor5PluginManager.php, line 132
Class
- CKEditor5PluginManager
- Provides a CKEditor5 plugin manager.
Namespace
Drupal\ckeditor5\PluginCode
public function getEnabledDefinitions(EditorInterface $editor) : array {
$definitions = $this
->getDefinitions();
ksort($definitions);
$definitions_with_plugins_condition = [];
foreach ($definitions as $plugin_id => $definition) {
// Remove definition when plugin has conditions and they are not met.
if ($definition
->hasConditions()) {
$plugin = $this
->getPlugin($plugin_id, $editor);
if ($this
->isPluginDisabled($plugin, $editor)) {
unset($definitions[$plugin_id]);
}
else {
// The `plugins` condition can only be evaluated at the end of
// gathering enabled definitions. ::isPluginDisabled() did not yet
// evaluate that condition.
if (array_key_exists('plugins', $definition
->getConditions())) {
$definitions_with_plugins_condition[$plugin_id] = $definition;
}
}
}
elseif ($definition
->hasToolbarItems()) {
if (empty(array_intersect($editor
->getSettings()['toolbar']['items'], array_keys($definition
->getToolbarItems())))) {
unset($definitions[$plugin_id]);
}
}
}
// Only enable the arbitrary HTML Support plugin on text formats with no
// HTML restrictions.
// @see https://ckeditor.com/docs/ckeditor5/latest/api/html-support.html
// @see https://github.com/ckeditor/ckeditor5/issues/9856
if ($editor
->getFilterFormat()
->getHtmlRestrictions() !== FALSE) {
unset($definitions['ckeditor5_arbitraryHtmlSupport']);
}
// Evaluate `plugins` condition.
foreach ($definitions_with_plugins_condition as $plugin_id => $definition) {
if (!empty(array_diff($definition
->getConditions()['plugins'], array_keys($definitions)))) {
unset($definitions[$plugin_id]);
}
}
if (!isset($definitions['ckeditor5_arbitraryHtmlSupport'])) {
$restrictions = new HTMLRestrictions($this
->getProvidedElements(array_keys($definitions), $editor, FALSE));
if ($restrictions
->getWildcardSubset()
->allowsNothing()) {
// This is only reached if arbitrary HTML is not enabled. If wildcard
// tags (such as $text-container) are present, they need to
// be resolved via the wildcardHtmlSupport plugin.
// @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::getCKEditor5PluginConfig()
unset($definitions['ckeditor5_wildcardHtmlSupport']);
}
}
else {
unset($definitions['ckeditor5_wildcardHtmlSupport']);
}
return $definitions;
}