You are here

class SettingsForm in The CodeMirror Editor 8

CodeMirror editor settings form.

Hierarchy

Expanded class hierarchy of SettingsForm

1 string reference to 'SettingsForm'
codemirror_editor.routing.yml in ./codemirror_editor.routing.yml
codemirror_editor.routing.yml

File

src/Form/SettingsForm.php, line 17

Namespace

Drupal\codemirror_editor\Form
View source
class SettingsForm extends ConfigFormBase {

  /**
   * The cache tags invalidator.
   *
   * @var \Drupal\Core\Cache\CacheTagsInvalidatorInterface
   */
  protected $cacheTagsInvalidator;

  /**
   * The language mode manager.
   *
   * @var \Drupal\codemirror_editor\CodemirrorModeManagerInterface
   */
  protected $modeManager;

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'codemirror_editor_settings';
  }

  /**
   * {@inheritdoc}
   */
  protected function getEditableConfigNames() {
    return [
      'codemirror_editor.settings',
    ];
  }

  /**
   * Constructs a \Drupal\system\ConfigFormBase object.
   *
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The factory for configuration objects.
   * @param \Drupal\Core\Cache\CacheTagsInvalidatorInterface $cache_tags_invalidator
   *   The cache tags invalidator.
   * @param \Drupal\codemirror_editor\CodemirrorModeManagerInterface $mode_manager
   *   The language mode manager.
   */
  public function __construct(ConfigFactoryInterface $config_factory, CacheTagsInvalidatorInterface $cache_tags_invalidator, CodemirrorModeManagerInterface $mode_manager) {
    parent::__construct($config_factory);
    $this->cacheTagsInvalidator = $cache_tags_invalidator;
    $this->modeManager = $mode_manager;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('config.factory'), $container
      ->get('cache_tags.invalidator'), $container
      ->get('plugin.manager.codemirror_mode'));
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $settings = $this
      ->config('codemirror_editor.settings')
      ->get();
    $form['cdn'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Load the library from CDN'),
      '#default_value' => $settings['cdn'],
    ];
    $form['minified'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Use minified version of the library'),
      '#default_value' => $settings['minified'],
    ];
    $codemirror_themes = static::getCodeMirrorThemes();
    $form['theme'] = [
      '#type' => 'select',
      '#title' => $this
        ->t('Theme'),
      '#options' => $codemirror_themes,
      '#default_value' => $settings['theme'],
    ];
    $form['language_modes_wrapper'] = [
      '#type' => 'details',
      '#title' => $this
        ->t('Language modes'),
      '#open' => TRUE,
    ];
    $header = [
      'label' => $this
        ->t('Mode'),
      'mime_types' => [
        'data' => $this
          ->t('Mime types'),
        'class' => [
          RESPONSIVE_PRIORITY_LOW,
        ],
      ],
      'dependencies' => $this
        ->t('Dependencies'),
      'usage' => $this
        ->t('Usage'),
    ];
    $options = [];
    $definitions = $this->modeManager
      ->getDefinitions();
    foreach ($definitions as $mode => $definition) {
      $url = Url::fromUri(sprintf('https://codemirror.net/mode/%s/index.html', $mode), [
        'attributes' => [
          'target' => '_blank',
        ],
      ]);
      $dependency_labels = [];
      foreach ($definition['dependencies'] as $dependency) {
        $dependency_labels[] = $definitions[$dependency]['label'];
      }
      $options[$mode] = [
        'label' => Link::fromTextAndUrl($definition['label'], $url),
        'mime_types' => implode(', ', $definition['mime_types']),
        'dependencies' => implode(', ', $dependency_labels),
        'usage' => implode(', ', $definition['usage']),
      ];
    }
    $form['language_modes_wrapper']['language_modes'] = [
      '#type' => 'tableselect',
      '#header' => $header,
      '#options' => $options,
      '#default_value' => array_fill_keys($settings['language_modes'], TRUE),
      '#suffix' => $this
        ->t('Language modes required by modules are always loaded.'),
    ];
    return parent::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $values = $form_state
      ->getValues();
    $this
      ->config('codemirror_editor.settings')
      ->set('cdn', $values['cdn'])
      ->set('minified', $values['minified'])
      ->set('theme', $values['theme'])
      ->set('language_modes', array_values(array_filter($values['language_modes'])))
      ->save();

    // Invalidate discovery caches to rebuild asserts.
    $this->cacheTagsInvalidator
      ->invalidateTags([
      'library_info',
    ]);
    parent::submitForm($form, $form_state);
  }

  /**
   * Returns available CodeMirror themes.
   *
   * @return array
   *   CodeMirror themes.
   */
  protected static function getCodeMirrorThemes() {
    return [
      'default' => 'Default',
      '3024-day' => '3024 day',
      '3024-night' => '3024 night',
      'abcdef' => 'ABCDEF',
      'ambiance' => 'Ambiance',
      'base16-dark' => 'Base16 dark',
      'base16-light' => 'Base16 light',
      'bespin' => 'Bespin',
      'blackboard' => 'Black board',
      'cobalt' => 'Cobalt',
      'colorforth' => 'Color forth',
      'darcula' => 'Darcula',
      'dracula' => 'Dracula',
      'duotone-dark' => 'Duotone dark',
      'eclipse' => 'Eclipse',
      'elegant' => 'Elegant',
      'erlang-dark' => 'Erlang dark',
      'gruvbox-dark' => 'Gruvbox dark',
      'hopscotch' => 'Hopscotch',
      'icecoder' => 'Ice coder',
      'idea' => 'Idea',
      'isotope' => 'Isotope',
      'lesser-dark' => 'Lesser dark',
      'liquibyte' => 'Liquibyte',
      'lucario' => 'Lucario',
      'material' => 'Material',
      'mbo' => 'MBO',
      'mdn-like' => 'MDN like',
      'midnight' => 'Midnight',
      'monokai' => 'Monokai',
      'neat' => 'Neat',
      'neo' => 'Neo',
      'night' => 'Night',
      'oceanic-next' => 'Oceanic next',
      'panda-syntax' => 'Panda syntax',
      'paraiso-dark' => 'Paraiso dark',
      'paraiso-light' => 'Paraiso light',
      'pastel-on-dark' => 'Pastel on dark',
      'railscasts' => 'Rails casts',
      'rubyblue' => 'Ruby blue',
      'seti' => 'Seti',
      'shadowfox' => 'Shadow fox',
      'solarized-dark' => 'Solarized dark',
      'solarized-light' => 'Solarized light',
      'the-matrix' => 'The matrix',
      'tomorrow-night-bright' => 'Tomorrow night bright',
      'tomorrow-night-eighties' => 'Tomorrow night eighties',
      'ttcn' => 'TTCN',
      'twilight' => 'Twilight',
      'vibrant-ink' => 'Vibrant ink',
      'xq-dark' => 'XQ dark',
      'xq-light' => 'XQ light',
      'yeti' => 'Yeti',
      'zenburn' => 'Zenburn',
    ];
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ConfigFormBaseTrait::config protected function Retrieves a configuration object.
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
FormBase::$configFactory protected property The config factory. 1
FormBase::$requestStack protected property The request stack. 1
FormBase::$routeMatch protected property The route match.
FormBase::configFactory protected function Gets the config factory for this form. 1
FormBase::container private function Returns the service container.
FormBase::currentUser protected function Gets the current user.
FormBase::getRequest protected function Gets the request object.
FormBase::getRouteMatch protected function Gets the route match.
FormBase::logger protected function Gets the logger for a specific channel.
FormBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
FormBase::resetConfigFactory public function Resets the configuration factory.
FormBase::setConfigFactory public function Sets the config factory for this form.
FormBase::setRequestStack public function Sets the request stack object to use.
FormBase::validateForm public function Form validation handler. Overrides FormInterface::validateForm 62
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
SettingsForm::$cacheTagsInvalidator protected property The cache tags invalidator.
SettingsForm::$modeManager protected property The language mode manager.
SettingsForm::buildForm public function Form constructor. Overrides ConfigFormBase::buildForm
SettingsForm::create public static function Instantiates a new instance of this class. Overrides ConfigFormBase::create
SettingsForm::getCodeMirrorThemes protected static function Returns available CodeMirror themes.
SettingsForm::getEditableConfigNames protected function Gets the configuration names that will be editable. Overrides ConfigFormBaseTrait::getEditableConfigNames
SettingsForm::getFormId public function Returns a unique string identifying the form. Overrides FormInterface::getFormId
SettingsForm::submitForm public function Form submission handler. Overrides ConfigFormBase::submitForm
SettingsForm::__construct public function Constructs a \Drupal\system\ConfigFormBase object. Overrides ConfigFormBase::__construct
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.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.