Problem/Motivation

SourceEditingRedundantTagsConstraintValidator currently only ensures that tags listed explicitly for source editing indeed has no available CKEditor 5 plugin that supports that tag.

We need to do the same for attributes and attribute values.

With the introduction of #3228334: Refactor HTMLRestrictionsUtilities to a HtmlRestrictions value object, that becomes simple.

Steps to reproduce

Proposed resolution

Remaining tasks

User interface changes

API changes

Data model changes

Release notes snippet

CommentFileSizeAuthor
#58 3260857-58-9.3.x.patch16.84 KBWim Leers
#51 3260857-51-9.3.patch16.84 KBWim Leers
#51 3260857-51.patch16.82 KBWim Leers
#51 interdiff.txt3.19 KBWim Leers
#51 Screenshot 2022-03-25 at 14.26.02.png151.26 KBWim Leers
#51 Screenshot 2022-03-25 at 14.22.26.png140.19 KBWim Leers
#45 3260857-44-9.3.patch16.24 KBWim Leers
#44 3260857-44.patch16.22 KBWim Leers
#40 38-3-proof-proper-FAIL.patch18.51 KBWim Leers
#40 38-3-proof-proper.txt1.34 KBWim Leers
#39 3260857-39.patch18.83 KBWim Leers
#39 interdiff.txt1.48 KBWim Leers
#39 38-3-proof-FAIL.patch18.85 KBWim Leers
#39 38-3-proof.txt1.62 KBWim Leers
#35 3260857-35.patch18.57 KBWim Leers
#35 interdiff.txt1.21 KBWim Leers
#34 3260857-34.patch18.33 KBWim Leers
#34 interdiff.txt1.29 KBWim Leers
#30 3260857-30.patch18.35 KBWim Leers
#30 interdiff.txt4.28 KBWim Leers
#29 3260857-29.patch16.11 KBWim Leers
#29 interdiff.txt2.03 KBWim Leers
#28 3260857-28.patch14.9 KBWim Leers
#28 interdiff.txt3.74 KBWim Leers
#26 3260857-26.patch14.68 KBWim Leers
#26 interdiff.txt1.05 KBWim Leers
#24 3260857-24.patch14.3 KBWim Leers
#24 interdiff.txt2.03 KBWim Leers
#22 3260857-22.patch13.4 KBWim Leers
#22 interdiff.txt3.77 KBWim Leers
#20 3260857-20.patch12.53 KBWim Leers
#20 interdiff.txt1.42 KBWim Leers
#18 3260857-18.patch12.01 KBWim Leers
#18 interdiff.txt1.1 KBWim Leers
#16 3260857-16.patch10.97 KBWim Leers
#16 interdiff.txt2.12 KBWim Leers
#12 3260857-8-correct.patch10.49 KBWim Leers
#12 3260857-7-correct.patch5.78 KBWim Leers
#8 3260857-8.patch9.63 KBWim Leers
#8 interdiff.txt5.36 KBWim Leers
#7 3260857-6.patch4.34 KBWim Leers
#7 interdiff.txt1.69 KBWim Leers
#6 3260857-5.patch4.11 KBWim Leers
#6 interdiff.txt2.6 KBWim Leers
#3 3260857-3.patch1.49 KBWim Leers
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

Wim Leers created an issue. See original summary.

Wim Leers’s picture

Status: Active » Postponed
Wim Leers’s picture

Title: [PP-1] Expand SourceEditingRedundantTagsConstraintValidator to also check attributes and attribute values » Expand SourceEditingRedundantTagsConstraintValidator to also check attributes and attribute values
Status: Postponed » Needs review
Issue tags: +Needs tests
FileSize
1.49 KB

#3228334: Refactor HTMLRestrictionsUtilities to a HtmlRestrictions value object is in!

We can now proceed here. This patch is for now just deleting the early return that was necessary up until we'd start working on this issue. We should begin with adding more test coverage.

Status: Needs review » Needs work

The last submitted patch, 3: 3260857-3.patch, failed testing. View results

Wim Leers’s picture

Assigned: Unassigned » Wim Leers
Issue tags: +stable blocker
Parent issue: » #3238333: Roadmap to CKEditor 5 stable in Drupal 9
Wim Leers’s picture

Status: Needs work » Needs review
FileSize
2.6 KB
4.11 KB

Only CKE5 tests.

Should fail just like #3, perhaps in more places, because >1 month worth of new tests have been added since then.

Wim Leers’s picture

Test attribute already provided by enabled plugin.

❌ This new test should fail!

Note: this is not yet enough to remove Needs tests — we also still need to test the "disabled plugin" case.

Wim Leers’s picture

Support attribute detection.

✅ Should pass the test added in #7.

The last submitted patch, 6: 3260857-5.patch, failed testing. View results

The last submitted patch, 7: 3260857-6.patch, failed testing. View results

Status: Needs review » Needs work

The last submitted patch, 8: 3260857-8.patch, failed testing. View results

Wim Leers’s picture

Huh, the patches in #7 and #8 are wrong, but the interdiffs are right 🙈

The last submitted patch, 12: 3260857-7-correct.patch, failed testing. View results

Status: Needs review » Needs work

The last submitted patch, 12: 3260857-8-correct.patch, failed testing. View results

Wim Leers’s picture

That's better 😊😅

We can see now that the (correct) #7 patch causes one additional failure thanks to its extra test coverage, and the (correct) #8 patch fixes that one failure.

Progress! 🥳

Wim Leers’s picture

Status: Needs work » Needs review
Issue tags: -Needs tests
FileSize
2.12 KB
10.97 KB

Now it's time to add the test coverage that #7 mentioned is still needed. Which allows us to remove the Needs tests tag.

❌ This new test should fail!

Note: this not only tests the "support for this manually enabled attribute can be provided by some disabled plugin" case, but simultaneously verifies that SourceEditingRedundantTagsConstraintValidator finds such plugins even if it's provided by a wildcard element. 👍

Status: Needs review » Needs work

The last submitted patch, 16: 3260857-16.patch, failed testing. View results

Wim Leers’s picture

Status: Needs work » Needs review
FileSize
1.1 KB
12.01 KB

Make the SmartDefaultSettingsTest failures easier to debug.

(This copies the pattern from \Drupal\Tests\ckeditor5\Kernel\ValidatorsTest::test().)

Status: Needs review » Needs work

The last submitted patch, 18: 3260857-18.patch, failed testing. View results

Wim Leers’s picture

Status: Needs work » Needs review
FileSize
1.42 KB
12.53 KB

#18 made it clear that \Drupal\ckeditor5\Plugin\Validation\Constraint\SourceEditingRedundantTagsConstraintValidator::validate() is too eager.

Status: Needs review » Needs work

The last submitted patch, 20: 3260857-20.patch, failed testing. View results

Wim Leers’s picture

Status: Needs work » Needs review
FileSize
3.77 KB
13.4 KB

We're almost there — it seems all of the failures are for the tricky wildcard case that #16 added.

This also made me realize that the existing test coverage is not clear enough and does not yet quite cover all edge cases. Expand it.

(For this interdiff, git diff --color-words would've been a lot clearer.)

Status: Needs review » Needs work

The last submitted patch, 22: 3260857-22.patch, failed testing. View results

Wim Leers’s picture

Status: Needs work » Needs review
FileSize
2.03 KB
14.3 KB

#22 caused ValidatorsTest to fail … "harder".

This will make the <img src> test case added in #22 pass, so that we're back at the same exact set of failures as in #20. But now more firmly in the final stretch 🤓

Status: Needs review » Needs work

The last submitted patch, 24: 3260857-24.patch, failed testing. View results

Wim Leers’s picture

Status: Needs work » Needs review
FileSize
1.05 KB
14.68 KB

In scrutinizing #24 I realized there was one more missing test that would not need a violation message: the case of an attribute not supported by any plugin.

Status: Needs review » Needs work

The last submitted patch, 26: 3260857-26.patch, failed testing. View results

Wim Leers’s picture

Status: Needs work » Needs review
FileSize
3.74 KB
14.9 KB

CKEditor5AllowedTagsTest::testFullHtml() has been failing because <img src alt height width data-entity-type data-entity-uuid data-align data-caption> is in the source editing list, because SmartDefaultSettings cannot enable it. This has been the case all along, but we simply didn't have the validation logic nor the test coverage up until now!

It resulted in a validation error like this: The following tag(s) are already supported by available plugins and should not be added to the Source Editing "Manually editable HTML tags" field. Instead, enable the following plugins to support these tags: .

First, let's add a kernel test equivalent of CKEditor5AllowedTagsTest::testFullHtml() — to test explicitly what was tested implicitly until now.

Wim Leers’s picture

The fix for CKEditor5AllowedTagsTest::testFullHtml() and the test case added in #28.

Wim Leers’s picture

And finally, the fix for the tricky edge case for which a failing test was added in #16!

✅ Should pass all tests now!

The last submitted patch, 28: 3260857-28.patch, failed testing. View results

The last submitted patch, 29: 3260857-29.patch, failed testing. View results

Status: Needs review » Needs work

The last submitted patch, 30: 3260857-30.patch, failed testing. View results

Wim Leers’s picture

Status: Needs work » Needs review
FileSize
1.29 KB
18.33 KB

The two remaining failures in the one failing test have existed since the beginning, since #3. They're very similar:

--- Expected
+++ Actual
@@ @@
-Array &0 ()
+Array &0 (
+    'settings.plugins.ckeditor5_sourceEditing.allowed_tags.13' => 'The following attribute(s) are already supported by enabled plugins and should not be added to the Source Editing "Manually editable HTML tags" field: Image caption (&lt;img data-caption&gt;).'
+)

+

--- Expected
+++ Actual
@@ @@
-Array &0 ()
+Array &0 (
+    'settings.plugins.ckeditor5_sourceEditing.allowed_tags.13' => 'The following attribute(s) are already supported by enabled plugins and should not be added to the Source Editing "Manually editable HTML tags" field: Image align (&lt;img data-align&gt;).'
+)

in both cases, the validation constraint is complaining that a particular plugin is already enabled. But … that is impossible.

Turns out that this has been a subtle bug in SmartDefaultSettingsTest for all this time! 🙃 The bug: it was using the stored FilterFormat rather than the updated one.

Wim Leers’s picture

… and #34 fixed the two failing test cases, but it broke two others. Turns out that there's been another bug hiding in SmartDefaultSettingsTest's infrastructure for a long time! 🙃

A bug never comes alone.

Wim Leers’s picture

Assigned: Wim Leers » Unassigned

🤓🤓🤓🤓🤓🤓🤓🤓 All of this is reminding me an awful lot about SmartDefaultSettings.

Just look at this:

+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
@@ -57,32 +70,64 @@ public function validate($value, Constraint $constraint) {
+    $disabled_plugin_overlap = $disabled_plugin_tags
+      // Merge the enabled plugin tags, to allow wildcards to be resolved.
+      ->merge($enabled_plugin_tags)
+      // Compute the overlap.
+      ->intersect($source_enabled_tags)
+      // Avoid including the overlap known to exist for just enabled plugins.
+      ->diff($enabled_plugin_overlap);
     foreach ([$enabled_plugin_overlap, $disabled_plugin_overlap] as $overlap) {
       $checking_enabled = $overlap === $enabled_plugin_overlap;
       if (!$overlap->isEmpty()) {

Especially now that we just finished #3231328: SmartDefaultSettings should select the CKE5 plugin that minimizes creation of HTML restriction supersets.

+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
@@ -90,16 +135,34 @@ public function validate($value, Constraint $constraint) {
+        // 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)->isEmpty()) {
+          continue;
+        }

… and this is pretty much a less advanced version of \Drupal\ckeditor5\SmartDefaultSettings::computeNetNewElementsForPlugin()!

What SourceEditingRedundantTagsConstraintValidator does is basically the same thing as SmartDefaultSettings: the "needed" elements are the ones configured by the user as "manually editable tags"; the goal is to find enabled or disabled plugins that meet those needs, because that would mean that a better solution exists, and hence that should be the validation error.

While we could do that, perhaps that's best left as a follow-up? I think that'd be too much of a scope increase. Especially because it would require refactoring SmartDefaultSettings, to intentionally open up some private methods.

The last submitted patch, 34: 3260857-34.patch, failed testing. View results

lauriii’s picture

Status: Needs review » Needs work

#36 seems like something that could be handled by a follow-up.

  1. index 413272eff3..79c65f54a6 100644
    --- a/core/drupalci.yml
    

    Should revert changes to this file 😇

  2. +++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
    @@ -57,32 +70,64 @@ public function validate($value, Constraint $constraint) {
    +        // If the entirety (so not just the tag but also the attributes, and not
    +        // just some of the attribute values, but all of them) of the HTML
    

    Should we explicitly document what this means for plugins that support a superset?

  3. +++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
    @@ -90,16 +135,34 @@ public function validate($value, Constraint $constraint) {
    +        if (!$plugin_capabilities->getWildcardSubset()->isEmpty()) {
    

    Do we have test coverage for this? 🤓

    The reason I'm wondering that is because it's unclear what's the expected behavior here.

  4. +++ b/core/package.json
    @@ -22,7 +22,7 @@
    -    "test:nightwatch": "cross-env BABEL_ENV=development node -r dotenv-safe/config -r @babel/register ./node_modules/.bin/nightwatch --config ./tests/Drupal/Nightwatch/nightwatch.conf.js",
    +    "test:nightwatch": "cross-env BABEL_ENV=development node -r dotenv-safe/config -r @babel/register ./node_modules/.bin/nightwatch --config ./tests/Drupal/Nightwatch/nightwatch.conf.js --tag ckeditor5",
    

    Probably should be reverted

Wim Leers’s picture

Status: Needs work » Needs review
FileSize
1.62 KB
18.85 KB
1.48 KB
18.83 KB

#38

  • 1+4: Of course — just wanted to keep this fast to iterate on initially :D
  • 2: ✅ Note that this is just for generating a message, not for actually enabling some plugin. But yes, in principle this should take into account how much "surplus" would be added, and that then is basically the same as \Drupal\ckeditor5\SmartDefaultSettings::computeSurplusScore() — in other words: all the more reason to do what I proposed in #36 … 🤓
  • 3: ✅ Yes, the INVALID Source Editable tag already provided by plugin and another available in a not enabled plugin test case in ValidatorsTest::testPair(). Attached a patch here to prove that without this, tests fail.
Wim Leers’s picture

phpcs getting in the way just when proving something … 😬

Status: Needs review » Needs work

The last submitted patch, 40: 38-3-proof-proper-FAIL.patch, failed testing. View results

lauriii’s picture

+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
@@ -97,8 +97,11 @@ public function validate($value, Constraint $constraint) {
+        // exact match (`<foo bar baz>`) or a superset (`<foo bar baz qux>`) can
+        // trigger a violation, not subsets (`<foo>`).

This is what I was wondering, what if the user doesn't want to enable the plugin because it provides a superset?

Wim Leers’s picture

#36 seems like something that could be handled by a follow-up.

Follow-up created: #3271179: Update SourceEditingRedundantTagsConstraintValidator to reuse SmartDefaultSettings. Already posted PoCs there that are largely passing tests.

Wim Leers’s picture

  1. The failing test in #40 proved what I wrote in #39, in response to #38.3.
  2. #42: That's a pre-existing limitation. Dealing with such nuance is out of scope here; the scope here was only to make it actually inspect attributes too. And actually … #3271179: Update SourceEditingRedundantTagsConstraintValidator to reuse SmartDefaultSettings would make that 10x simpler to do, because SmartDefaultSettings already contains this kind of logic! I'm happy to include that in that scope too.
  3. Attached patch runs all tests again, not just CKE5.
Wim Leers’s picture

Huh, apparently the patch does not apply to 9.3 due to a slight difference in 9.3 caused by #3106216: Remove unused variables from core 😬

$ git diff origin/9.3.x origin/9.4.x
   private function pluginsSupplyingTagsMessage(HTMLRestrictions $overlap, array $plugin_definitions): string {
     $message_array = [];
     $message_string = '';
-    foreach ($plugin_definitions as $plugin_id => $definition) {
+    foreach ($plugin_definitions as $definition) {
       if ($definition->hasElements()) {
         $plugin_capabilities = HTMLRestrictions::fromString(implode(' ', $definition->getElements()));
         foreach ($plugin_capabilities->intersect($overlap)->toCKEditor5ElementsArray() as $element) {

git apply -3 applies the patch in #44 just fine … but here's a 9.3-specific one anyway.

Status: Needs review » Needs work

The last submitted patch, 45: 3260857-44-9.3.patch, failed testing. View results

Wim Leers’s picture

Status: Needs work » Needs review

The 9.3 patch only fails because #3263384: Add ckeditor5-code-block package and CodeBlock plugin has not yet been committed to 9.3, which will happen in #3269651: Update Drupal 9.3.x to CKEditor 5 v34.0.0 along with other un-backported issues. IMHO we should apply the same strategy here: commit to 10+9.4, and cherry-pick the commit in #3269651, along with #3263384.

Wim Leers’s picture

lauriii’s picture

Status: Needs review » Reviewed & tested by the community

#44.2 Makes sense, let's work on that in the follow-up then.

The 9.4.x and 10.0.x patch in #44 is RTBC.

bnjmnm’s picture

Status: Reviewed & tested by the community » Needs work

I looked at everything other than ValidatorsTest.php - I don't expect much (if any) feedback on that, so here's what I have before I sign off for the day:

  1. +++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
    @@ -37,11 +40,21 @@ public function validate($value, Constraint $constraint) {
    +    $disabled_plugin_tags = new HTMLRestrictions($this->pluginManager->getProvidedElements(array_keys($disabled_plugins), $text_editor, FALSE));
    

    And we don't have to worry about unsetting a disabled ckeditor5_sourcediting (that may have config from prior use) because this validation only runs if it is enabled, yea?

  2. +++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
    @@ -57,32 +70,67 @@ public function validate($value, Constraint $constraint) {
    +      // Avoid including the overlap known to exist for just enabled plugins.
    

    This phrasing is unclear due to the flexible nature of the word 'just'. Two valid readings could be does "plugins that were very recently enabled" and "only plugins that are enabled".

    There's also "A plugin with high moral integrity", but that one is pretty easy to rule out via context 🙂.

  3. +++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
    @@ -57,32 +70,67 @@ public function validate($value, Constraint $constraint) {
           }
    

    I'd like to position the comments closer to the code they reference, here's a suggestion:

    // If there is overlap, but some attribute/attribute value is still not
            // supported, exit this iteration without generating a violation
            // message. Essentially: when assessing a particular value
            // (for example `<foo bar baz>`), only CKEditor 5 plugins providing an
            // exact match (`<foo bar baz>`) or a superset (`<foo bar baz qux>`) can
            // trigger a violation, not subsets (`<foo>`).
            if (!$source_enabled_tags->diff($overlap)->isEmpty()) {
              continue;
            }
    
            // If we reach this code, it means the entirety (so not just the tag
            // but also the attributes, and not some of the attribute values, but
            // all of them) of the HTML elements in the Source Editing plugin's
            // 'allowed_tags' configuration is supported by a CKEditor 5 plugin.
            // This earns a violation.
  4. +++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
    @@ -90,16 +138,34 @@ public function validate($value, Constraint $constraint) {
    +        // Interpret plugins with wildcard correctly.
    

    The 'correctly' reads oddly, as if we'd intentionally done it wrong earlier in the method.

  5. +++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
    @@ -90,16 +138,34 @@ public function validate($value, Constraint $constraint) {
    +            ->diff($enabled_plugin_restrictions);
    

    Is there a risk here of unwanted filtering if the plugin includes a combination of wildcards and concrete tags?

  6. +++ b/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
    @@ -334,11 +334,13 @@ public function test(string $format_id, array $filters_to_drop, array $expected_
    +    // have been checked above; whatever remains is expected.
    

    This comment doesn't quite line up with the unset of something keyed with an empty string (and is it necessary to isset that?).

    Based on context, I assume any remaining fundamental errors are in '', but that's just a guess.

None of these strike me as significant enough to require a 2nd reviewer to RTBC. Whoever makes the changes is welcome to re-RTBC if they're inclined.

Wim Leers’s picture

  1. ✅ Correct!
  2. ✅ Clarified :)
  3. ✅ Great suggestion — followed your example exactly :)
  4. ✅ Clarified :)
  5. ✅ No. We start with the evaluated plugin's capabilities ($plugin_capabilities). If it has wildcards, we first merge the elements already allowed by enabled plugins ($enabled_plugin_restrictions). This allows the wildcards of $plugin_capabilities to resolve into concrete tags. Then when we omit the $enabled_plugin_restrictions again, the resolved tags remain. These are the tags that would actually be added.

    I first thoguht you meant "what if there is a combination of wildcard and concrete tags" in $enabled_plugin_restrictions. This shows that that is not the case:

    Then I realized you might've meant $plugin_capabilities instead. Well, this shows that that is also not the case:

    As you can see, in both cases, the result in $test contains the net new HTML elements supported by adding the new plugin whose capabilities are shown in $plugin_capabilities.

    I tried to be thorough 🤓

  6. ✅ Fundamental compatibility errors do not have a property path on the text editor object. That's why the "path" of the violation is the empty string. Examples:
    '' => 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are not allowed by the "<em class="placeholder">Limit allowed HTML tags and correct faulty HTML</em>" (<em class="placeholder">filter_html</em>) filter.',
    
            '' => [
              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.',
            ],
    

    See \Drupal\ckeditor5\Plugin\Editor\CKEditor5::validatePair(), which contains:

        if (!$all_compatibility_problems) {
          foreach ($violations as $i => $violation) {
            // Remove all violations that are not fundamental — these are at the
            // root (property path '').
            if ($violation->getPropertyPath() !== '') {
              $violations->remove($i);
            }
          }
        }
    
    Based on context, I assume any remaining fundamental errors are in '', but that's just a guess.

    That's right! The difference is that \Drupal\Tests\ckeditor5\Kernel\CKEditor5ValidationTestTrait::validatePairToViolationsArray() doesn't omit anything (because in tests we want to be as strict and complete as possible), whereas \Drupal\ckeditor5\Plugin\Editor\CKEditor5::validatePair() allows you to omit those :)

Status: Reviewed & tested by the community » Needs work

The last submitted patch, 51: 3260857-51-9.3.patch, failed testing. View results

  • bnjmnm committed 7270091 on 10.0.x
    Issue #3260857 by Wim Leers, lauriii: Expand...

  • bnjmnm committed 163afde on 9.4.x
    Issue #3260857 by Wim Leers, lauriii: Expand...
bnjmnm’s picture

Status: Needs work » Fixed

Committed to 10.0.x and cherry-picked to 9.4.x. There is a failing test on 9.3.x, which appears to be expecting Code Block, a recent update that is postponed on being added to 9.3 #3263384: Add ckeditor5-code-block package and CodeBlock plugin.

I added this as a proposed backport in the 9.3 + CK 33 issue #3269651: Update Drupal 9.3.x to CKEditor 5 v34.0.0 along with other un-backported issues, and I'll label this as fixed.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.

catch’s picture

Version: 9.4.x-dev » 9.3.x-dev
Status: Closed (fixed) » Needs work

Re-opening for 9.3.x backport.

Wim Leers’s picture

Status: Needs work » Needs review
FileSize
16.84 KB

#51's 9.3.x patch failed only due to #3263384: Add ckeditor5-code-block package and CodeBlock plugin not yet having been cherry-picked. Let's verify that that is true.

  • lauriii committed e678d0c on 9.3.x
    Issue #3260857 by Wim Leers, lauriii: Expand...
lauriii’s picture

Status: Needs review » Fixed

Committed e678d0c and pushed to 9.3.x. Thanks!

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.