function SourceEditingRedundantTagsConstraintValidator::pluginsSupplyingTagsMessage

Same name in other branches
  1. 10 core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php \Drupal\ckeditor5\Plugin\Validation\Constraint\SourceEditingRedundantTagsConstraintValidator::pluginsSupplyingTagsMessage()
  2. 11.x core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php \Drupal\ckeditor5\Plugin\Validation\Constraint\SourceEditingRedundantTagsConstraintValidator::pluginsSupplyingTagsMessage()

Creates a message listing plugins and the overlapping tags they provide.

Parameters

\Drupal\ckeditor5\HTMLRestrictions $overlap: An array of overlapping tags.

\Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition[] $plugin_definitions: An array of plugin definitions where overlap was found.

\Drupal\ckeditor5\HTMLRestrictions $enabled_plugin_restrictions: The set of HTML restrictions for all already enabled CKEditor 5 plugins.

Return value

string A list of plugins that provide the overlapping tags.

1 call to SourceEditingRedundantTagsConstraintValidator::pluginsSupplyingTagsMessage()
SourceEditingRedundantTagsConstraintValidator::validate in core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php

File

core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php, line 177

Class

SourceEditingRedundantTagsConstraintValidator
Ensures tags already available via plugin are not be added to Source Editing.

Namespace

Drupal\ckeditor5\Plugin\Validation\Constraint

Code

private function pluginsSupplyingTagsMessage(HTMLRestrictions $overlap, array $plugin_definitions, HTMLRestrictions $enabled_plugin_restrictions) : string {
    $message_array = [];
    $message_string = '';
    foreach ($plugin_definitions as $definition) {
        if ($definition->hasElements()) {
            $plugin_capabilities = HTMLRestrictions::fromString(implode(' ', $definition->getElements()));
            // If this plugin supports wildcards, resolve them.
            if (!$plugin_capabilities->getWildcardSubset()
                ->allowsNothing()) {
                $plugin_capabilities = $plugin_capabilities->merge($enabled_plugin_restrictions)
                    ->diff($enabled_plugin_restrictions);
            }
            // Skip plugins that provide a subset, only mention the plugin that
            // actually provides the overlap.
            // For example: avoid listing the image alignment/captioning plugins
            // when matching `<img src>`; only lists the main image plugin.
            if (!$overlap->diff($plugin_capabilities)
                ->allowsNothing()) {
                continue;
            }
            foreach ($plugin_capabilities->intersect($overlap)
                ->toCKEditor5ElementsArray() as $element) {
                $message_array[(string) $definition->label()][] = $element;
            }
        }
    }
    foreach ($message_array as $plugin_label => $tag_list) {
        $tags_string = implode(', ', $tag_list);
        $message_string .= "{$plugin_label} ({$tags_string}), ";
    }
    return trim($message_string, ' ,');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.