You are here

class CodeMirror in CKEditor CodeMirror 8.2

Same name and namespace in other branches
  1. 8 src/Plugin/CKEditorPlugin/CodeMirror.php \Drupal\ckeditor_codemirror\Plugin\CKEditorPlugin\CodeMirror

Defines the "CodeMirror" plugin.

Plugin annotation


@CKEditorPlugin(
  id = "codemirror",
  label = @Translation("CodeMirror"),
  module = "ckeditor_codemirror"
)

Hierarchy

Expanded class hierarchy of CodeMirror

File

src/Plugin/CKEditorPlugin/CodeMirror.php, line 23

Namespace

Drupal\ckeditor_codemirror\Plugin\CKEditorPlugin
View source
class CodeMirror extends CKEditorPluginBase implements CKEditorPluginConfigurableInterface, CKEditorPluginContextualInterface, ContainerFactoryPluginInterface {

  /**
   * File system service.
   *
   * @var \Drupal\Core\File\FileSystemInterface
   */
  protected $fileSystem;

  /**
   * {@inheritdoc}
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, FileSystemInterface $file_system) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->fileSystem = $file_system;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($configuration, $plugin_id, $plugin_definition, $container
      ->get('file_system'));
  }

  /**
   * {@inheritdoc}
   */
  public function getFile() {
    return _ckeditor_codemirror_get_library_path() . '/codemirror/plugin.js';
  }

  /**
   * {@inheritdoc}
   */
  public function getDependencies(Editor $editor) : array {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function getLibraries(Editor $editor) : array {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function isInternal() : bool {
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  public function getButtons() : array {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function isEnabled(Editor $editor) : bool {
    $settings = $editor
      ->getSettings();
    if (isset($settings['plugins']['codemirror'])) {
      return $editor
        ->getSettings()['plugins']['codemirror']['enable'];
    }
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  public function getConfig(Editor $editor) : array {
    $settings = $editor
      ->getSettings()['plugins']['codemirror'];
    $config = [
      'codemirror' => [
        'enable' => $settings['enable'] ?? FALSE,
        'mode' => $settings['mode'] ?? 'htmlmixed',
        'theme' => $settings['theme'] ?? 'default',
      ],
      'startupMode' => $settings['startupMode'] ?? 'wysiwyg',
    ];
    foreach ($this
      ->options() as $option => $description) {
      $config['codemirror'][$option] = $settings['options'][$option] ?? TRUE;
    }
    return $config;
  }

  /**
   * Additional settings options.
   *
   * @return array
   *   An array of settings options and their descriptions.
   */
  private function options() : array {
    return [
      'lineNumbers' => $this
        ->t('Show line numbers.'),
      'lineWrapping' => $this
        ->t('Enable line wrapping.'),
      'matchBrackets' => $this
        ->t('Highlight matching brackets.'),
      'autoCloseTags' => $this
        ->t('Close tags automatically.'),
      'autoCloseBrackets' => $this
        ->t('Close brackets automatically.'),
      'enableSearchTools' => $this
        ->t('Enable search tools.'),
      'enableCodeFolding' => $this
        ->t('Enable code folding.'),
      'enableCodeFormatting' => $this
        ->t('Enable code formatting.'),
      'autoFormatOnStart' => $this
        ->t('Format code on start.'),
      'autoFormatOnModeChange' => $this
        ->t('Format code each time source is opened.'),
      'autoFormatOnUncomment' => $this
        ->t('Format code when a line is uncommented.'),
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function settingsForm(array $form, FormStateInterface $form_state, Editor $editor) : array {
    $editor_settings = $editor
      ->getSettings();
    if (isset($editor_settings['plugins']['codemirror'])) {
      $settings = $editor_settings['plugins']['codemirror'];
    }
    $form['#attached']['library'][] = 'ckeditor_codemirror/ckeditor_codemirror.admin';
    $form['enable'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Enable CodeMirror source view syntax highlighting.'),
      '#default_value' => $settings['enable'] ?? FALSE,
    ];
    $form['startupMode'] = [
      '#type' => 'select',
      '#title' => $this
        ->t('Editor startup Mode'),
      '#options' => [
        'wysiwyg' => $this
          ->t('WYSIWYG (default)'),
        'source' => $this
          ->t('Source'),
      ],
      '#default_value' => $settings['startupMode'] ?? 'wysiwyg',
    ];
    $form['mode'] = [
      '#type' => 'select',
      '#title' => $this
        ->t('Mode'),
      '#options' => [
        'htmlmixed' => $this
          ->t('HTML (including css, xml and javascript)'),
        'text/html' => $this
          ->t('HTML only'),
        'application/x-httpd-php' => $this
          ->t('PHP (including HTML)'),
        'text/javascript' => $this
          ->t('Javascript only'),
        'css' => $this
          ->t('CSS'),
        'text/x-scss' => $this
          ->t('SCSS'),
      ],
      '#default_value' => $settings['mode'] ?? 'htmlmixed',
    ];
    $theme_options = [
      'default' => 'default',
    ];
    $themes_directory = _ckeditor_codemirror_get_library_path() . '/codemirror/theme';
    if (is_dir($themes_directory)) {
      $theme_css_files = $this->fileSystem
        ->scanDirectory($themes_directory, '/\\.css/i');
      foreach ($theme_css_files as $file) {
        $theme_options[$file->name] = $file->name;
      }
    }
    $form['theme'] = [
      '#type' => 'select',
      '#title' => $this
        ->t('Theme'),
      '#options' => $theme_options,
      '#default_value' => $settings['theme'] ?? 'default',
    ];
    $form['options'] = [
      '#type' => 'details',
      '#title' => $this
        ->t('Additional settings'),
      '#description' => $this
        ->t('Source highlighting and code formatting options:'),
      '#open' => FALSE,
    ];
    foreach ($this
      ->options() as $setting => $description) {
      $form['options'][$setting] = [
        '#type' => 'checkbox',
        '#title' => $description,
        '#default_value' => $settings['options'][$setting] ?? TRUE,
      ];
    }
    return $form;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CodeMirror::$fileSystem protected property File system service.
CodeMirror::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
CodeMirror::getButtons public function Returns the buttons that this plugin provides, along with metadata. Overrides CKEditorPluginButtonsInterface::getButtons
CodeMirror::getConfig public function Returns the additions to CKEDITOR.config for a specific CKEditor instance. Overrides CKEditorPluginInterface::getConfig
CodeMirror::getDependencies public function Returns a list of plugins this plugin requires. Overrides CKEditorPluginBase::getDependencies
CodeMirror::getFile public function Returns the Drupal root-relative file path to the plugin JavaScript file. Overrides CKEditorPluginInterface::getFile
CodeMirror::getLibraries public function Returns a list of libraries this plugin requires. Overrides CKEditorPluginBase::getLibraries
CodeMirror::isEnabled public function Checks if this plugin should be enabled based on the editor configuration. Overrides CKEditorPluginContextualInterface::isEnabled
CodeMirror::isInternal public function Indicates if this plugin is part of the optimized CKEditor build. Overrides CKEditorPluginBase::isInternal
CodeMirror::options private function Additional settings options.
CodeMirror::settingsForm public function Returns a settings form to configure this CKEditor plugin. Overrides CKEditorPluginConfigurableInterface::settingsForm
CodeMirror::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase::__construct
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.