improvements-2.x-dev/modules/improvements_views/src/Plugin/views/display_extender/ImprovementsDisplayExtender.php
modules/improvements_views/src/Plugin/views/display_extender/ImprovementsDisplayExtender.php
<?php
namespace Drupal\improvements_views\Plugin\views\display_extender;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\druhels\ArrayHelper;
use Drupal\views\Attribute\ViewsDisplayExtender;
use Drupal\views\Plugin\views\display_extender\DisplayExtenderPluginBase;
#[ViewsDisplayExtender(
id: 'improvements_display_extender',
title: new TranslatableMarkup('Improvements display extender'),
no_ui: FALSE,
)]
class ImprovementsDisplayExtender extends DisplayExtenderPluginBase {
/**
* {@inheritDoc}
*/
public function buildOptionsForm(&$form, FormStateInterface $form_state): void {
if ($form_state->get('section') == 'css_class') {
$form['css_class']['#title'] = $this->t('Views element CSS class name(s)');
if ($this->displayHandler->getPluginId() == 'page') {
$form['page_body_css_class'] = [
'#type' => 'textfield',
'#title' => $this->t('Page body CSS class name(s)'),
'#description' => $this->t('Separate multiple classes by spaces.') . ' ' . t('Supports tokens.'),
'#default_value' => $this->options['page_body_css_class'] ?? '',
'#weight' => -1,
];
}
$form['content_css_class'] = [
'#type' => 'textfield',
'#title' => $this->t('Content CSS class name(s)'),
'#description' => $this->t('Separate multiple classes by spaces.') . ' ' . t('Supports tokens.'),
'#default_value' => $this->options['content_css_class'] ?? '',
];
}
}
/**
* {@inheritdoc}
*/
public function submitOptionsForm(&$form, FormStateInterface $form_state): void {
if ($form_state->get('section') == 'css_class') {
$this->options['page_body_css_class'] = $form_state->getValue('page_body_css_class');
$this->options['content_css_class'] = $form_state->getValue('content_css_class');
}
}
/**
* {@inheritdoc}
*/
public function optionsSummary(&$categories, &$options): void {
$options['css_class']['value'] = implode(' / ', ArrayHelper::removeEmptyElements([
$this->options['page_body_css_class'] ?? '',
$this->options['css_class'] ?? '',
$this->options['content_css_class'] ?? '',
]));
if (!$options['css_class']['value']) {
$options['css_class']['value'] = $this->t('No');
}
}
}
