You are here

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\Plugin

Code

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;
}