'9', 'summary_rows' => '3', 'placeholder' => '', ] + parent::defaultSettings(); } /** * {@inheritdoc} */ public function settingsForm(array $form, FormStateInterface $form_state) { $element = parent::settingsForm($form, $form_state); $element['summary_rows'] = [ '#type' => 'number', '#title' => t('Summary rows'), '#default_value' => $this->getSetting('summary_rows'), '#description' => $element['rows']['#description'], '#required' => TRUE, '#min' => 1, ]; return $element; } /** * {@inheritdoc} */ public function settingsSummary() { $summary = parent::settingsSummary(); $summary[] = t('Number of summary rows: @rows', ['@rows' => $this->getSetting('summary_rows')]); return $summary; } /** * {@inheritdoc} */ public 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'] = [ '#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' => [ 'library' => ['text/drupal.text'], ], '#attributes' => ['class' => ['js-text-summary', 'text-summary']], '#prefix' => '
', '#suffix' => '
', '#weight' => -10, ]; return $element; } /** * {@inheritdoc} */ public function errorElement(array $element, ConstraintViolationInterface $violation, array $form, FormStateInterface $form_state) { $element = parent::errorElement($element, $violation, $form, $form_state); return ($element === FALSE) ? FALSE : $element[$violation->arrayPropertyPath[0]]; } }