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); }