You are here

public function CodeMirror::settingsForm 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::settingsForm()

Returns a settings form to configure this CKEditor plugin.

If the plugin's behavior depends on extensive options and/or external data, then the implementing module can choose to provide a separate, global configuration page rather than per-text-editor settings. In that case, this form should provide a link to the separate settings page.

Parameters

array $form: An empty form array to be populated with a configuration form, if any.

\Drupal\Core\Form\FormStateInterface $form_state: The state of the entire filter administration form.

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

Return value

array A render array for the settings form.

Overrides CKEditorPluginConfigurableInterface::settingsForm

File

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

Class

CodeMirror
Defines the "CodeMirror" plugin.

Namespace

Drupal\ckeditor_codemirror\Plugin\CKEditorPlugin

Code

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;
}