Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. HTMLRestrictions.php

function HTMLRestrictions::resolveWildcards

Resolves the wildcard tags (this consumes the wildcard tags).

Parameters

\Drupal\ckeditor5\HTMLRestrictions $r: A set of HTML restrictions.

Return value

\Drupal\ckeditor5\HTMLRestrictions The concrete interpretation of the given set of HTML restrictions. All wildcard tag restrictions are resolved into restrictions on concrete elements, if concrete elements are allowed that correspond to the wildcard tags.

See also

::getWildcardTags()

2 calls to HTMLRestrictions::resolveWildcards()
HTMLRestrictions::applyOperation in core/modules/ckeditor5/src/HTMLRestrictions.php
Applies an operation (difference/intersection/union) with wildcard support.
HTMLRestrictions::toFilterHtmlAllowedTagsString in core/modules/ckeditor5/src/HTMLRestrictions.php
Transforms into the Drupal HTML filter's "allowed_html" representation.

File

core/modules/ckeditor5/src/HTMLRestrictions.php, line 1136

Class

HTMLRestrictions
Represents a set of HTML restrictions.

Namespace

Drupal\ckeditor5

Code

private static function resolveWildcards(HTMLRestrictions $r) : HTMLRestrictions {
    // Start by resolving the wildcards in a naive, simple way: generate
    // tags, attributes and attribute values they support.
    $naively_resolved_wildcard_elements = [];
    foreach ($r->elements as $tag_name => $tag_config) {
        if (self::isWildcardTag($tag_name)) {
            $wildcard_tags = self::getWildcardTags($tag_name);
            // Do not resolve to all tags supported by the wildcard tag, but only
            // those which are explicitly supported. Because wildcard tags only
            // allow declaring support for additional attributes and attribute
            // values on already supported tags.
            foreach ($wildcard_tags as $wildcard_tag) {
                if (isset($r->elements[$wildcard_tag])) {
                    $naively_resolved_wildcard_elements[$wildcard_tag] = $tag_config;
                }
            }
        }
    }
    $naive_resolution = new self($naively_resolved_wildcard_elements);
    // Now merge the naive resolution's elements with the original elements, to
    // let ::merge() pick the most permissive one.
    // This is necessary because resolving wildcards may result in concrete tags
    // becoming either more permissive:
    // - if $r is `<p> <$text-container class="foo">`
    // - then $naive will be `<p class="foo">`
    // - merging them yields `<p class="foo"> <$text-container class="foo">`
    // - diffing the wildcard subsets yields just `<p class="foo">`
    // Or it could result in concrete tags being unaffected by the resolved
    // wildcards:
    // - if $r is `<p class> <$text-container class="foo">`
    // - then $naive will be `<p class="foo">`
    // - merging them yields `<p class> <$text-container class="foo">`
    //   again
    // - diffing the wildcard subsets yields just `<p class>`
    return $r->merge($naive_resolution)
        ->doDiff($r->getWildcardSubset());
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal