Unverified Commit 266679c6 authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #3249263 by alexpott, andypost, Wim Leers: CKEditor 5 needs validate the...

Issue #3249263 by alexpott, andypost, Wim Leers: CKEditor 5 needs validate the filters in the correct order - CKEditor 5 tests fail locally

(cherry picked from commit dc51481d)
parent 6af996bb
Loading
Loading
Loading
Loading
+12 −18
Original line number Diff line number Diff line
@@ -84,7 +84,6 @@ private function checkNoMarkupFilters(FilterFormatInterface $text_format, Fundam
      $text_format,
      FilterInterface::TYPE_MARKUP_LANGUAGE
    );
    if (!empty($markup_filters)) {
    foreach ($markup_filters as $markup_filter) {
      $this->context->buildViolation($constraint->noMarkupFiltersMessage)
        ->setParameter('%filter_label', $markup_filter->getLabel())
@@ -92,7 +91,6 @@ private function checkNoMarkupFilters(FilterFormatInterface $text_format, Fundam
        ->addViolation();
    }
  }
  }

  /**
   * Checks that fundamental CKEditor 5 plugins' HTML tags are allowed.
@@ -194,25 +192,21 @@ private function checkHtmlRestrictionsMatch(EditorInterface $text_editor, Fundam
   *   conditions to be met. Must return TRUE when it meets the conditions,
   *   FALSE otherwise.
   *
   * @return \Drupal\filter\Plugin\FilterInterface[]
   *   The matched filter plugins.
   * @return iterable|\Drupal\filter\Plugin\FilterInterface[]
   *   An iterable of matched filter plugins.
   */
  private static function getFiltersInFormatOfType(FilterFormatInterface $text_format, int $filter_type, callable $extra_requirements = NULL): array {
  private static function getFiltersInFormatOfType(FilterFormatInterface $text_format, int $filter_type, callable $extra_requirements = NULL): iterable {
    assert(in_array($filter_type, [
      FilterInterface::TYPE_MARKUP_LANGUAGE,
      FilterInterface::TYPE_HTML_RESTRICTOR,
      FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
      FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
    ]));
    return array_filter($text_format->filters()->getAll(), function (FilterInterface $filter) use ($filter_type, $extra_requirements) {
      if (!$filter->status) {
        return FALSE;
    foreach ($text_format->filters() as $id => $filter) {
      if ($filter->status && $filter->getType() === $filter_type && ($extra_requirements === NULL || $extra_requirements($filter))) {
        yield $id => $filter;
      }
      if ($filter->getType() === $filter_type && ($extra_requirements === NULL || $extra_requirements($filter))) {
        return TRUE;
    }
      return FALSE;
    });
  }

  /**
+2 −2
Original line number Diff line number Diff line
@@ -517,8 +517,8 @@ public function provider() {
      'expected_superset' => '<br> <p>',
      'expected_fundamental_compatibility_violations' => [
        '' => [
          0 => 'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
          1 => 'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
          0 => 'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
          1 => 'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
        ],
      ],
      'expected_messages' => [
+40 −3
Original line number Diff line number Diff line
@@ -416,7 +416,7 @@ public function providerPair(): array {
          'id' => 'filter_url',
          'provider' => 'filter',
          'status' => TRUE,
          'weight' => 0,
          'weight' => -10,
          'settings' => [
            'filter_url_length' => 72,
          ],
@@ -429,6 +429,43 @@ public function providerPair(): array {
        ],
      ],
    ];
    $data['INVALID: non-HTML format: filter_autop + filter_url (different order)'] = [
      'settings' => [
        'toolbar' => [
          'items' => [
            'bold',
          ],
        ],
        'plugins' => [],
      ],
      'image_upload' => [
        'status' => FALSE,
      ],
      'filters' => [
        'filter_autop' => [
          'id' => 'filter_autop',
          'provider' => 'filter',
          'status' => TRUE,
          'weight' => 0,
          'settings' => [],
        ],
        'filter_url' => [
          'id' => 'filter_url',
          'provider' => 'filter',
          'status' => TRUE,
          'weight' => 10,
          'settings' => [
            'filter_url_length' => 72,
          ],
        ],
      ],
      'violations' => [
        '' => [
          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
        ],
      ],
    ];
    $data['INVALID: forbidden tags'] = [
      'settings' => [
        'toolbar' => [
@@ -456,7 +493,7 @@ public function providerPair(): array {
        '' => 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are forbidden by the "<em class="placeholder">Tag and attribute restricting filter</em>" (<em class="placeholder">filter_test_restrict_tags_and_attributes</em>) filter.',
      ],
    ];
    $restricted_html_format_filters = Yaml::parseFile('profiles/standard/config/install/filter.format.restricted_html.yml')['filters'];
    $restricted_html_format_filters = Yaml::parseFile(__DIR__ . '/../../../../../profiles/standard/config/install/filter.format.restricted_html.yml')['filters'];
    $data['INVALID: the default restricted_html text format'] = [
      'settings' => [
        'toolbar' => [
@@ -470,8 +507,8 @@ public function providerPair(): array {
      'filters' => $restricted_html_format_filters,
      'violations' => [
        '' => [
          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
        ],
      ],
    ];