Loading core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php +11 −3 Original line number Diff line number Diff line Loading @@ -421,20 +421,28 @@ private function shouldHaveVisiblePluginSettingsForm(CKEditor5PluginDefinition $ // due to isEnabled() returning false, that should still have its config // form provided: // 1 - A conditionally enabled plugin that does not depend on a toolbar item // to be active AND the plugins it depends on are enabled. // to be active AND the plugins it depends on are enabled (if any) AND the // filter it depends on is enabled (if any). // 2 - A conditionally enabled plugin that does depend on a toolbar item, // and that toolbar item is active. if ($definition->hasConditions()) { $conditions = $definition->getConditions(); if (!array_key_exists('toolbarItem', $conditions)) { $conclusion = TRUE; // The filter this plugin depends on must be enabled. if (array_key_exists('filter', $conditions)) { $required_filter = $conditions['filter']; $format_filters = $editor->getFilterFormat()->filters(); $conclusion = $conclusion && $format_filters->has($required_filter) && $format_filters->get($required_filter)->status; } // The CKEditor 5 plugins this plugin depends on must be enabled. if (array_key_exists('plugins', $conditions)) { $all_plugins = $this->ckeditor5PluginManager->getDefinitions(); $dependencies = array_intersect_key($all_plugins, array_flip($conditions['plugins'])); $unmet_dependencies = array_diff_key($dependencies, $enabled_plugins); return empty($unmet_dependencies); $conclusion = $conclusion && empty($unmet_dependencies); } return TRUE; return $conclusion; } elseif (in_array($conditions['toolbarItem'], $editor->getSettings()['toolbar']['items'], TRUE)) { return TRUE; Loading core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.ckeditor5.yml +3 −0 Original line number Diff line number Diff line Loading @@ -7,3 +7,6 @@ ckeditor5_plugin_elements_subset_sneakySuperset: elements: - <foo> - <bar> # @todo Remove in https://www.drupal.org/project/drupal/issues/3269657 conditions: filter: media_embed core/modules/ckeditor5/tests/src/FunctionalJavascript/AdminUiTest.php +16 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ class AdminUiTest extends CKEditor5TestBase { protected static $modules = [ 'media_library', 'ckeditor', // @todo Remove in https://www.drupal.org/project/drupal/issues/3269657 'ckeditor5_plugin_elements_subset', 'ckeditor5_incompatible_filter_test', ]; Loading Loading @@ -219,6 +221,20 @@ public function testPluginSettingsFormSection() { // The source plugin config form should be present. $assert_session->elementExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-sourceediting"]'); // The filter-dependent configurable plugin should not be present. // @todo Change to `media_media` plugin in https://www.drupal.org/project/drupal/issues/3269657 // cSpell:disable-next-line $assert_session->elementNotExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-plugin-elements-subset-sneakysuperset"]'); // Enable the filter that the configurable plugin depends on. $this->assertTrue($page->hasUncheckedField('filters[media_embed][status]')); $page->checkField('filters[media_embed][status]'); $assert_session->assertWaitOnAjaxRequest(); // The filter-dependent configurable plugin should be present. // cSpell:disable-next-line $assert_session->elementExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-plugin-elements-subset-sneakysuperset"]'); } /** Loading Loading
core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php +11 −3 Original line number Diff line number Diff line Loading @@ -421,20 +421,28 @@ private function shouldHaveVisiblePluginSettingsForm(CKEditor5PluginDefinition $ // due to isEnabled() returning false, that should still have its config // form provided: // 1 - A conditionally enabled plugin that does not depend on a toolbar item // to be active AND the plugins it depends on are enabled. // to be active AND the plugins it depends on are enabled (if any) AND the // filter it depends on is enabled (if any). // 2 - A conditionally enabled plugin that does depend on a toolbar item, // and that toolbar item is active. if ($definition->hasConditions()) { $conditions = $definition->getConditions(); if (!array_key_exists('toolbarItem', $conditions)) { $conclusion = TRUE; // The filter this plugin depends on must be enabled. if (array_key_exists('filter', $conditions)) { $required_filter = $conditions['filter']; $format_filters = $editor->getFilterFormat()->filters(); $conclusion = $conclusion && $format_filters->has($required_filter) && $format_filters->get($required_filter)->status; } // The CKEditor 5 plugins this plugin depends on must be enabled. if (array_key_exists('plugins', $conditions)) { $all_plugins = $this->ckeditor5PluginManager->getDefinitions(); $dependencies = array_intersect_key($all_plugins, array_flip($conditions['plugins'])); $unmet_dependencies = array_diff_key($dependencies, $enabled_plugins); return empty($unmet_dependencies); $conclusion = $conclusion && empty($unmet_dependencies); } return TRUE; return $conclusion; } elseif (in_array($conditions['toolbarItem'], $editor->getSettings()['toolbar']['items'], TRUE)) { return TRUE; Loading
core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.ckeditor5.yml +3 −0 Original line number Diff line number Diff line Loading @@ -7,3 +7,6 @@ ckeditor5_plugin_elements_subset_sneakySuperset: elements: - <foo> - <bar> # @todo Remove in https://www.drupal.org/project/drupal/issues/3269657 conditions: filter: media_embed
core/modules/ckeditor5/tests/src/FunctionalJavascript/AdminUiTest.php +16 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ class AdminUiTest extends CKEditor5TestBase { protected static $modules = [ 'media_library', 'ckeditor', // @todo Remove in https://www.drupal.org/project/drupal/issues/3269657 'ckeditor5_plugin_elements_subset', 'ckeditor5_incompatible_filter_test', ]; Loading Loading @@ -219,6 +221,20 @@ public function testPluginSettingsFormSection() { // The source plugin config form should be present. $assert_session->elementExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-sourceediting"]'); // The filter-dependent configurable plugin should not be present. // @todo Change to `media_media` plugin in https://www.drupal.org/project/drupal/issues/3269657 // cSpell:disable-next-line $assert_session->elementNotExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-plugin-elements-subset-sneakysuperset"]'); // Enable the filter that the configurable plugin depends on. $this->assertTrue($page->hasUncheckedField('filters[media_embed][status]')); $page->checkField('filters[media_embed][status]'); $assert_session->assertWaitOnAjaxRequest(); // The filter-dependent configurable plugin should be present. // cSpell:disable-next-line $assert_session->elementExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-plugin-elements-subset-sneakysuperset"]'); } /** Loading