Skip to content
Snippets Groups Projects
Verified Commit e8d2c22a authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #3347721 by Wim Leers, dabley, lauriii, smustgrave, witeksocha, Reinmar,...

Issue #3347721 by Wim Leers, dabley, lauriii, smustgrave, witeksocha, Reinmar, thatipudir: [Style] Warn the user about styles for unsupported elements
parent ba666c8d
Branches
Tags
37 merge requests!8528Issue #3456871 by Tim Bozeman: Support NULL services,!8323Fix source code editing and in place front page site studio editing.,!6278Issue #3187770 by godotislate, smustgrave, catch, quietone: Views Rendered...,!3878Removed unused condition head title for views,!38582585169-10.1.x,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3668Resolve #3347842 "Deprecate the trusted",!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3546refactored dialog.pcss file,!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3502Issue #3335308: Confusing behavior with FormState::setFormState and FormState::setMethod,!3452Issue #3332701: Refactor Claro's tablesort-indicator stylesheet,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3147Issue #3328457: Replace most substr($a, $i) where $i is negative with str_ends_with(),!3146Issue #3328456: Replace substr($a, 0, $i) with str_starts_with(),!3133core/modules/system/css/components/hidden.module.css,!2964Issue #2865710 : Dependencies from only one instance of a widget are used in display modes,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2614Issue #2981326: Replace non-test usages of \Drupal::logger() with IoC injection,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2062Issue #3246454: Add weekly granularity to views date sort,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!877Issue #2708101: Default value for link text is not saved,!844Resolve #3036010 "Updaters",!673Issue #3214208: FinishResponseSubscriber could create duplicate headers,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493
Pipeline #51599 canceled
Pipeline: drupal

#51600

    ......@@ -39,4 +39,11 @@ class StyleSensibleElementConstraint extends Constraint {
    */
    public $conflictingDisabledPluginMessage = 'A style must only specify classes not supported by other plugins. The <code>@classes</code> classes on <code>@tag</code> are supported by the %plugin plugin. Remove this style and enable that plugin instead.';
    /**
    * When a Style is defined for a plugin that does not yet support Style.
    *
    * @var string
    */
    public $unsupportedTagMessage = 'The <code>@tag</code> tag is not yet supported by the Style plugin.';
    }
    ......@@ -26,6 +26,41 @@ class StyleSensibleElementConstraintValidator extends ConstraintValidator implem
    use PluginManagerDependentValidatorTrait;
    use TextEditorObjectDependentValidatorTrait;
    /**
    * Tags whose plugins are known to not yet integrate with the Style plugin.
    *
    * To prevent the user from configuring the Style plugin and reasonably
    * expecting it to work correctly for tags of plugins that are known to
    * yet integrate with the Style plugin, generate a validation error for these.
    */
    protected const KNOWN_UNSUPPORTED_TAGS = [
    // @see https://www.drupal.org/project/drupal/issues/3117172
    '<drupal-media>',
    // @see https://github.com/ckeditor/ckeditor5/issues/13778
    '<img>',
    // @see https://github.com/ckeditor/ckeditor5/blob/39ad30090ead9dd2d54c3ac53d7f446ade9fd8ce/packages/ckeditor5-html-support/src/schemadefinitions.ts#L12-L50
    '<keygen>',
    '<applet>',
    '<basefont>',
    '<isindex>',
    '<hr>',
    '<br>',
    '<area>',
    '<command>',
    '<map>',
    '<wbr>',
    '<colgroup>',
    '<col>',
    '<datalist>',
    '<track>',
    '<source>',
    '<option>',
    '<param>',
    '<optgroup>',
    '<link>',
    '<noscript>',
    ];
    /**
    * {@inheritdoc}
    *
    ......@@ -83,6 +118,16 @@ public function validate($element, Constraint $constraint) {
    ->setParameter('%plugin', $this->findStyleConflictingPluginLabel($style_element))
    ->addViolation();
    }
    // Finally, while the configuration is technically valid if this point was
    // reached, there are some known compatibility issues. Inform the user that
    // for that reason, this configuration must be considered invalid.
    $unsupported = $style_element->intersect(HTMLRestrictions::fromString(implode(' ', static::KNOWN_UNSUPPORTED_TAGS)));
    if (!$unsupported->allowsNothing()) {
    $this->context->buildViolation($constraint->unsupportedTagMessage)
    ->setParameter('@tag', sprintf("<%s>", $tag))
    ->addViolation();
    }
    }
    /**
    ......
    ......@@ -457,6 +457,40 @@ public function provider(): array {
    'settings.plugins.ckeditor5_style.styles.0.element' => 'A style must only specify classes not supported by other plugins. The <code>text-align-justify</code> classes on <code>&lt;p&gt;</code> are already supported by the enabled <em class="placeholder">Alignment</em> plugin.',
    ],
    ];
    $data['INVALID: Style plugin configured to add class to plugin-supported tag known to not work with Style … yet'] = [
    'settings' => [
    'toolbar' => [
    'items' => [
    'drupalInsertImage',
    'style',
    ],
    ],
    'plugins' => [
    'ckeditor5_imageResize' => [
    'allow_resize' => FALSE,
    ],
    'ckeditor5_style' => [
    'styles' => [
    // @see https://github.com/ckeditor/ckeditor5/issues/13778
    [
    'label' => 'Featured image',
    'element' => '<img class="featured">',
    ],
    // @see https://www.drupal.org/project/drupal/issues/3398223
    // @see https://github.com/ckeditor/ckeditor5/blob/39ad30090ead9dd2d54c3ac53d7f446ade9fd8ce/packages/ckeditor5-html-support/src/schemadefinitions.ts#L12-L50
    [
    'label' => 'Fancy linebreak',
    'element' => '<br class="fancy">',
    ],
    ],
    ],
    ],
    ],
    'violations' => [
    'settings.plugins.ckeditor5_style.styles.0.element' => 'The <code>&lt;img&gt;</code> tag is not yet supported by the Style plugin.',
    'settings.plugins.ckeditor5_style.styles.1.element' => 'The <code>&lt;br&gt;</code> tag is not yet supported by the Style plugin.',
    ],
    ];
    $data['INVALID: Style plugin has multiple styles with same label'] = [
    'settings' => [
    'toolbar' => [
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment