class SourceEditing
Same name in other branches
- 9 core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/SourceEditing.php \Drupal\ckeditor5\Plugin\CKEditor5Plugin\SourceEditing
- 11.x core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/SourceEditing.php \Drupal\ckeditor5\Plugin\CKEditor5Plugin\SourceEditing
CKEditor 5 Source Editing plugin configuration.
@internal Plugin classes are internal.
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements \Drupal\Component\Plugin\PluginInspectionInterface, \Drupal\Component\Plugin\DerivativeInspectionInterface
- class \Drupal\Core\Plugin\PluginBase extends \Drupal\Component\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait
- class \Drupal\ckeditor5\Plugin\CKEditor5PluginDefault extends \Drupal\Core\Plugin\PluginBase implements \Drupal\ckeditor5\Plugin\CKEditor5PluginInterface
- class \Drupal\ckeditor5\Plugin\CKEditor5Plugin\SourceEditing extends \Drupal\ckeditor5\Plugin\CKEditor5PluginDefault implements \Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface, \Drupal\ckeditor5\Plugin\CKEditor5PluginElementsSubsetInterface uses \Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait
- class \Drupal\ckeditor5\Plugin\CKEditor5PluginDefault extends \Drupal\Core\Plugin\PluginBase implements \Drupal\ckeditor5\Plugin\CKEditor5PluginInterface
- class \Drupal\Core\Plugin\PluginBase extends \Drupal\Component\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait
Expanded class hierarchy of SourceEditing
1 file declares its use of SourceEditing
- SourceEditingPluginTest.php in core/
modules/ ckeditor5/ tests/ src/ Unit/ SourceEditingPluginTest.php
21 string references to 'SourceEditing'
- ckeditor5.ckeditor5.yml in core/
modules/ ckeditor5/ ckeditor5.ckeditor5.yml - core/modules/ckeditor5/ckeditor5.ckeditor5.yml
- CKEditor5UpdateImageToolbarItemTest::test in core/
modules/ ckeditor5/ tests/ src/ Functional/ Update/ CKEditor5UpdateImageToolbarItemTest.php - Tests that `uploadImage` toolbar item is updated to `drupalInsertImage`.
- ckeditor5_post_update_image_toolbar_item in core/
modules/ ckeditor5/ ckeditor5.post_update.php - The image toolbar item changed from `uploadImage` to `drupalInsertImage`.
- Core::mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem in core/
modules/ ckeditor5/ src/ Plugin/ CKEditor4To5Upgrade/ Core.php - Maps a CKEditor 4 button to the CKEditor 5 equivalent, if it exists.
- editor.editor.basic_html.yml in core/
profiles/ standard/ config/ install/ editor.editor.basic_html.yml - core/profiles/standard/config/install/editor.editor.basic_html.yml
File
-
core/
modules/ ckeditor5/ src/ Plugin/ CKEditor5Plugin/ SourceEditing.php, line 21
Namespace
Drupal\ckeditor5\Plugin\CKEditor5PluginView source
class SourceEditing extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface, CKEditor5PluginElementsSubsetInterface {
use CKEditor5PluginConfigurableTrait;
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['allowed_tags'] = [
'#type' => 'textarea',
'#title' => $this->t('Manually editable HTML tags'),
'#default_value' => implode(' ', $this->configuration['allowed_tags']),
'#description' => $this->t('A list of HTML tags that can be used while editing source. It is only necessary to add tags that are not already supported by other enabled plugins. For example, if "Bold" is enabled, it is not necessary to add the <code><strong></code> tag, but it may be necessary to add <code><dl><dt><dd></code> in a format that does not have a definition list plugin, but requires definition list markup.'),
];
return $form;
}
/**
* {@inheritdoc}
*/
public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
// Match the config schema structure at
// ckeditor5.plugin.ckeditor5_sourceEditing.
$form_value = $form_state->getValue('allowed_tags');
assert(is_string($form_value));
$config_value = HTMLRestrictions::fromString($form_value)->toCKEditor5ElementsArray();
$form_state->setValue('allowed_tags', $config_value);
}
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$this->configuration['allowed_tags'] = $form_state->getValue('allowed_tags');
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'allowed_tags' => [],
];
}
/**
* {@inheritdoc}
*/
public function getElementsSubset() : array {
// Drupal needs to know which plugin can create a particular <tag>, and not
// just a particular attribute on a tag: <tag attr>.
// SourceEditing enables every tag a plugin lists, even if it's only there
// to add support for an attribute. So, compute a list of only the tags.
// F.e.: <foo attr>, <bar>, <baz bar> would result in <foo>, <bar>, <baz>.
$r = HTMLRestrictions::fromString(implode(' ', $this->configuration['allowed_tags']));
$plain_tags = $r->extractPlainTagsSubset()
->toCKEditor5ElementsArray();
// Return the union of the "tags only" list and the original configuration,
// but omit duplicates (the entries that were already "tags only").
// F.e.: merging the tags only list of <foo>, <bar>, <baz> with the original
// list of <foo attr>, <bar>, <baz bar> would result in <bar> having a
// duplicate.
$subset = array_unique(array_merge($plain_tags, $this->configuration['allowed_tags']));
return $subset;
}
/**
* {@inheritdoc}
*/
public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor) : array {
$restrictions = HTMLRestrictions::fromString(implode(' ', $this->configuration['allowed_tags']));
// Only handle concrete HTML elements to allow the Wildcard HTML support
// plugin to handle wildcards.
// @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::getCKEditor5PluginConfig()
$concrete_restrictions = $restrictions->getConcreteSubset();
return [
'htmlSupport' => [
'allow' => $concrete_restrictions->toGeneralHtmlSupportConfig(),
// Any manually created elements are explicitly allowed to be empty.
'allowEmpty' => array_keys($concrete_restrictions->getAllowedElements()),
],
];
}
}
Members
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.