123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <?php
- namespace Drupal\Core\Field\Plugin\Field\FieldFormatter;
- use Drupal\Core\Field\AllowedTagsXssTrait;
- use Drupal\Core\Field\FormatterBase;
- use Drupal\Core\Field\FieldItemListInterface;
- use Drupal\Core\Form\FormStateInterface;
- /**
- * Parent plugin for decimal and integer formatters.
- */
- abstract class NumericFormatterBase extends FormatterBase {
- use AllowedTagsXssTrait;
- /**
- * {@inheritdoc}
- */
- public function settingsForm(array $form, FormStateInterface $form_state) {
- $options = [
- '' => t('- None -'),
- '.' => t('Decimal point'),
- ',' => t('Comma'),
- ' ' => t('Space'),
- chr(8201) => t('Thin space'),
- "'" => t('Apostrophe'),
- ];
- $elements['thousand_separator'] = [
- '#type' => 'select',
- '#title' => t('Thousand marker'),
- '#options' => $options,
- '#default_value' => $this->getSetting('thousand_separator'),
- '#weight' => 0,
- ];
- $elements['prefix_suffix'] = [
- '#type' => 'checkbox',
- '#title' => t('Display prefix and suffix'),
- '#default_value' => $this->getSetting('prefix_suffix'),
- '#weight' => 10,
- ];
- return $elements;
- }
- /**
- * {@inheritdoc}
- */
- public function settingsSummary() {
- $summary = [];
- $summary[] = $this->numberFormat(1234.1234567890);
- if ($this->getSetting('prefix_suffix')) {
- $summary[] = t('Display with prefix and suffix.');
- }
- return $summary;
- }
- /**
- * {@inheritdoc}
- */
- public function viewElements(FieldItemListInterface $items, $langcode) {
- $elements = [];
- $settings = $this->getFieldSettings();
- foreach ($items as $delta => $item) {
- $output = $this->numberFormat($item->value);
- // Account for prefix and suffix.
- if ($this->getSetting('prefix_suffix')) {
- $prefixes = isset($settings['prefix']) ? array_map(['Drupal\Core\Field\FieldFilteredMarkup', 'create'], explode('|', $settings['prefix'])) : [''];
- $suffixes = isset($settings['suffix']) ? array_map(['Drupal\Core\Field\FieldFilteredMarkup', 'create'], explode('|', $settings['suffix'])) : [''];
- $prefix = (count($prefixes) > 1) ? $this->formatPlural($item->value, $prefixes[0], $prefixes[1]) : $prefixes[0];
- $suffix = (count($suffixes) > 1) ? $this->formatPlural($item->value, $suffixes[0], $suffixes[1]) : $suffixes[0];
- $output = $prefix . $output . $suffix;
- }
- // Output the raw value in a content attribute if the text of the HTML
- // element differs from the raw value (for example when a prefix is used).
- if (isset($item->_attributes) && $item->value != $output) {
- $item->_attributes += ['content' => $item->value];
- }
- $elements[$delta] = ['#markup' => $output];
- }
- return $elements;
- }
- /**
- * Formats a number.
- *
- * @param mixed $number
- * The numeric value.
- *
- * @return string
- * The formatted number.
- */
- abstract protected function numberFormat($number);
- }
|