View source
<?php
namespace Drupal\text\Plugin\Field\FieldWidget;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\Validator\ConstraintViolationInterface;
use Drupal\Core\Field\FieldItemListInterface;
class TextareaWithSummaryWidget extends TextareaWidget {
public static function defaultSettings() {
return array(
'rows' => '9',
'summary_rows' => '3',
'placeholder' => '',
) + parent::defaultSettings();
}
public function settingsForm(array $form, FormStateInterface $form_state) {
$element = parent::settingsForm($form, $form_state);
$element['summary_rows'] = array(
'#type' => 'number',
'#title' => t('Summary rows'),
'#default_value' => $this
->getSetting('summary_rows'),
'#required' => TRUE,
'#min' => 1,
);
return $element;
}
public function settingsSummary() {
$summary = parent::settingsSummary();
$summary[] = t('Number of summary rows: @rows', array(
'@rows' => $this
->getSetting('summary_rows'),
));
return $summary;
}
function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$element = parent::formElement($items, $delta, $element, $form, $form_state);
$display_summary = $items[$delta]->summary || $this
->getFieldSetting('display_summary');
$element['summary'] = array(
'#type' => $display_summary ? 'textarea' : 'value',
'#default_value' => $items[$delta]->summary,
'#title' => t('Summary'),
'#rows' => $this
->getSetting('summary_rows'),
'#description' => t('Leave blank to use trimmed value of full text as the summary.'),
'#attached' => array(
'library' => array(
'text/drupal.text',
),
),
'#attributes' => array(
'class' => array(
'js-text-summary',
'text-summary',
),
),
'#prefix' => '<div class="js-text-summary-wrapper text-summary-wrapper">',
'#suffix' => '</div>',
'#weight' => -10,
);
return $element;
}
public function errorElement(array $element, ConstraintViolationInterface $violation, array $form, FormStateInterface $form_state) {
$element = parent::errorElement($element, $violation, $form, $form_state);
if ($element === FALSE) {
return FALSE;
}
elseif (isset($violation->arrayPropertyPath[0])) {
return $element[$violation->arrayPropertyPath[0]];
}
else {
return $element;
}
}
}