function Internal::generateFormatTagsSetting

Same name and namespace in other branches
  1. 9 core/modules/ckeditor/src/Plugin/CKEditorPlugin/Internal.php \Drupal\ckeditor\Plugin\CKEditorPlugin\Internal::generateFormatTagsSetting()

Builds the "format_tags" configuration part of the CKEditor JS settings.

Parameters

\Drupal\editor\Entity\Editor $editor: A configured text editor object.

Return value

array An array containing the "format_tags" configuration.

See also

getConfig()

1 call to Internal::generateFormatTagsSetting()
Internal::getConfig in core/modules/ckeditor/src/Plugin/CKEditorPlugin/Internal.php
Returns the additions to CKEDITOR.config for a specific CKEditor instance.

File

core/modules/ckeditor/src/Plugin/CKEditorPlugin/Internal.php, line 350

Class

Internal
Defines the "internal" plugin (i.e. core plugins part of our CKEditor build).

Namespace

Drupal\ckeditor\Plugin\CKEditorPlugin

Code

protected function generateFormatTagsSetting(Editor $editor) {
  // When no text format is associated yet, assume no tag is allowed.
  // @see \Drupal\editor\EditorInterface::hasAssociatedFilterFormat()
  if (!$editor->hasAssociatedFilterFormat()) {
    return [];
  }
  $format = $editor->getFilterFormat();
  $cid = 'ckeditor_internal_format_tags:' . $format->id();
  if ($cached = $this->cache
    ->get($cid)) {
    $format_tags = $cached->data;
  }
  else {
    // The <p> tag is always allowed — HTML without <p> tags is nonsensical.
    $format_tags = [
      'p',
    ];
    // Given the list of possible format tags, automatically determine whether
    // the current text format allows this tag, and thus whether it should show
    // up in the "Format" dropdown.
    $possible_format_tags = [
      'h1',
      'h2',
      'h3',
      'h4',
      'h5',
      'h6',
      'pre',
    ];
    foreach ($possible_format_tags as $tag) {
      $input = '<' . $tag . '>TEST</' . $tag . '>';
      $output = trim(check_markup($input, $editor->id()));
      if (Html::load($output)->getElementsByTagName($tag)->length !== 0) {
        $format_tags[] = $tag;
      }
    }
    $format_tags = implode(';', $format_tags);
    // Cache the "format_tags" configuration. This cache item is infinitely
    // valid; it only changes whenever the text format is changed, hence it's
    // tagged with the text format's cache tag.
    $this->cache
      ->set($cid, $format_tags, Cache::PERMANENT, $format->getCacheTags());
  }
  return $format_tags;
}

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