Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 44 |
| TextTrimmedFormatter | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
90 | |
0.00% |
0 / 44 |
| defaultSettings | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| settingsForm | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 11 |
|||
| settingsSummary | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| viewElements | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 1 |
|||
| anonymous function | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| preRenderSummary | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\text\Plugin\Field\FieldFormatter\TextTrimmedFormatter. | |
| */ | |
| namespace Drupal\text\Plugin\Field\FieldFormatter; | |
| use Drupal\Core\Field\FormatterBase; | |
| use Drupal\Core\Field\FieldItemListInterface; | |
| use Drupal\Core\Form\FormStateInterface; | |
| /** | |
| * Plugin implementation of the 'text_trimmed' formatter. | |
| * | |
| * Note: This class also contains the implementations used by the | |
| * 'text_summary_or_trimmed' formatter. | |
| * | |
| * @see \Drupal\text\Field\Formatter\TextSummaryOrTrimmedFormatter | |
| * | |
| * @FieldFormatter( | |
| * id = "text_trimmed", | |
| * label = @Translation("Trimmed"), | |
| * field_types = { | |
| * "text", | |
| * "text_long", | |
| * "text_with_summary" | |
| * }, | |
| * quickedit = { | |
| * "editor" = "form" | |
| * } | |
| * ) | |
| */ | |
| class TextTrimmedFormatter extends FormatterBase { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function defaultSettings() { | |
| return array( | |
| 'trim_length' => '600', | |
| ) + parent::defaultSettings(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function settingsForm(array $form, FormStateInterface $form_state) { | |
| $element['trim_length'] = array( | |
| '#title' => t('Trimmed limit'), | |
| '#type' => 'number', | |
| '#field_suffix' => t('characters'), | |
| '#default_value' => $this->getSetting('trim_length'), | |
| '#description' => t('If the summary is not set, the trimmed %label field will end at the last full sentence before this character limit.', array('%label' => $this->fieldDefinition->getLabel())), | |
| '#min' => 1, | |
| '#required' => TRUE, | |
| ); | |
| return $element; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function settingsSummary() { | |
| $summary = array(); | |
| $summary[] = t('Trimmed limit: @trim_length characters', array('@trim_length' => $this->getSetting('trim_length'))); | |
| return $summary; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function viewElements(FieldItemListInterface $items, $langcode) { | |
| $elements = array(); | |
| $render_as_summary = function (&$element) { | |
| // Make sure any default #pre_render callbacks are set on the element, | |
| // because text_pre_render_summary() must run last. | |
| $element += \Drupal::service('element_info')->getInfo($element['#type']); | |
| // Add the #pre_render callback that renders the text into a summary. | |
| $element['#pre_render'][] = '\Drupal\text\Plugin\field\FieldFormatter\TextTrimmedFormatter::preRenderSummary'; | |
| // Pass on the trim length to the #pre_render callback via a property. | |
| $element['#text_summary_trim_length'] = $this->getSetting('trim_length'); | |
| }; | |
| // The ProcessedText element already handles cache context & tag bubbling. | |
| // @see \Drupal\filter\Element\ProcessedText::preRenderText() | |
| foreach ($items as $delta => $item) { | |
| $elements[$delta] = array( | |
| '#type' => 'processed_text', | |
| '#text' => NULL, | |
| '#format' => $item->format, | |
| '#langcode' => $item->getLangcode(), | |
| ); | |
| if ($this->getPluginId() == 'text_summary_or_trimmed' && !empty($item->summary)) { | |
| $elements[$delta]['#text'] = $item->summary; | |
| } | |
| else { | |
| $elements[$delta]['#text'] = $item->value; | |
| $render_as_summary($elements[$delta]); | |
| } | |
| } | |
| return $elements; | |
| } | |
| /** | |
| * Pre-render callback: Renders a processed text element's #markup as a summary. | |
| * | |
| * @param array $element | |
| * A structured array with the following key-value pairs: | |
| * - #markup: the filtered text (as filtered by filter_pre_render_text()) | |
| * - #format: containing the machine name of the filter format to be used to | |
| * filter the text. Defaults to the fallback format. See | |
| * filter_fallback_format(). | |
| * - #text_summary_trim_length: the desired character length of the summary | |
| * (used by text_summary()) | |
| * | |
| * @return array | |
| * The passed-in element with the filtered text in '#markup' trimmed. | |
| * | |
| * @see filter_pre_render_text() | |
| * @see text_summary() | |
| */ | |
| public static function preRenderSummary(array $element) { | |
| $element['#markup'] = text_summary($element['#markup'], $element['#format'], $element['#text_summary_trim_length']); | |
| return $element; | |
| } | |
| } |