class Alignment

Same name and namespace in other branches
  1. 9 core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Alignment.php \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Alignment
  2. 11.x core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Alignment.php \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Alignment

CKEditor 5 Alignment plugin.

@internal Plugin classes are internal.

Hierarchy

Expanded class hierarchy of Alignment

1 file declares its use of Alignment
AlignmentPluginTest.php in core/modules/ckeditor5/tests/src/Unit/AlignmentPluginTest.php
12 string references to 'Alignment'
ckeditor5.ckeditor5.yml in core/modules/ckeditor5/ckeditor5.ckeditor5.yml
core/modules/ckeditor5/ckeditor5.ckeditor5.yml
ckeditor5.ckeditor5.yml in core/modules/ckeditor5/ckeditor5.ckeditor5.yml
core/modules/ckeditor5/ckeditor5.ckeditor5.yml
CKEditor5PluginManagerTest::testEnabledPlugins in core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php
Tests the enabling of plugins.
Core::mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem in core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Core.php
Maps a CKEditor 4 button to the CKEditor 5 equivalent, if it exists.
Grid::buildOptionsForm in core/modules/views/src/Plugin/views/style/Grid.php
Provide a form to edit options for this plugin.

... See full list

File

core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Alignment.php, line 21

Namespace

Drupal\ckeditor5\Plugin\CKEditor5Plugin
View source
class Alignment extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface, CKEditor5PluginElementsSubsetInterface {
  use CKEditor5PluginConfigurableTrait;
  
  /**
   * The default configuration for this plugin.
   *
   * @var string[][]
   */
  const DEFAULT_CONFIGURATION = [
    'enabled_alignments' => [
      'left',
      'center',
      'right',
      'justify',
    ],
  ];
  
  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return static::DEFAULT_CONFIGURATION;
  }
  
  /**
   * {@inheritdoc}
   *
   * Form for choosing which alignment types are available.
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form['enabled_alignments'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('Enabled Alignments'),
      '#description' => $this->t('These are the alignment types that will appear in the alignment dropdown.'),
    ];
    foreach ($this->getPluginDefinition()
      ->getCKEditor5Config()['alignment']['options'] as $alignment_option) {
      $name = $alignment_option['name'];
      $form['enabled_alignments'][$name] = [
        '#type' => 'checkbox',
        '#title' => $this->t($name),
        '#return_value' => $name,
        '#default_value' => in_array($name, $this->configuration['enabled_alignments'], TRUE) ? $name : NULL,
      ];
    }
    return $form;
  }
  
  /**
   * {@inheritdoc}
   */
  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
    // Match the config schema structure at ckeditor5.plugin.ckeditor5_alignment.
    $form_value = $form_state->getValue('enabled_alignments');
    $config_value = array_values(array_filter($form_value));
    $form_state->setValue('enabled_alignments', $config_value);
  }
  
  /**
   * {@inheritdoc}
   */
  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
    $this->configuration['enabled_alignments'] = $form_state->getValue('enabled_alignments');
  }
  
  /**
   * {@inheritdoc}
   *
   * Filters the alignment options to those chosen in editor config.
   */
  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor) : array {
    $enabled_alignments = $this->configuration['enabled_alignments'];
    $all_alignment_options = $static_plugin_config['alignment']['options'];
    $configured_alignment_options = array_filter($all_alignment_options, function ($option) use ($enabled_alignments) {
      return in_array($option['name'], $enabled_alignments, TRUE);
    });
    return [
      'alignment' => [
        'options' => array_values($configured_alignment_options),
      ],
    ];
  }
  
  /**
   * {@inheritdoc}
   */
  public function getElementsSubset() : array {
    $enabled_alignments = $this->configuration['enabled_alignments'];
    $plugin_definition = $this->getPluginDefinition();
    $all_elements = $plugin_definition->getElements();
    $subset = HTMLRestrictions::fromString(implode($all_elements));
    foreach ($plugin_definition->getCKEditor5Config()['alignment']['options'] as $configured_alignment) {
      if (!in_array($configured_alignment['name'], $enabled_alignments, TRUE)) {
        $element_string = '<$text-container class=' . '"' . $configured_alignment["className"] . '"' . '>';
        $subset = $subset->diff(HTMLRestrictions::fromString($element_string));
      }
    }
    return $subset->toCKEditor5ElementsArray();
  }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
Alignment::buildConfigurationForm public function Form for choosing which alignment types are available.
Alignment::defaultConfiguration public function
Alignment::DEFAULT_CONFIGURATION constant The default configuration for this plugin.
Alignment::getDynamicPluginConfig public function Filters the alignment options to those chosen in editor config. Overrides CKEditor5PluginDefault::getDynamicPluginConfig
Alignment::getElementsSubset public function Returns a configured subset of the elements supported by this plugin. Overrides CKEditor5PluginElementsSubsetInterface::getElementsSubset
Alignment::submitConfigurationForm public function
Alignment::validateConfigurationForm public function
CKEditor5PluginConfigurableTrait::getConfiguration public function
CKEditor5PluginConfigurableTrait::setConfiguration public function
CKEditor5PluginDefault::__construct public function 3
PluginInspectionInterface::getPluginDefinition public function Gets the definition of the plugin implementation. 6
PluginInspectionInterface::getPluginId public function Gets the plugin ID of the plugin instance. 2

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.