2c2 < index d7d6e77..6025106 100644 --- > index 66c2182..14ed05a 100644 5c5 < @@ -28,7 +28,7 @@ class FieldTest extends KernelTestBase { --- > @@ -30,7 +30,7 @@ class FieldTest extends KernelTestBase { 9,10c9,10 < - public static $modules = ['node', 'text', 'field', 'filter']; < + public static $modules = ['node', 'text', 'field', 'filter', 'options']; --- > - public static $modules = ['node', 'text', 'field', 'filter', 'contact']; > + public static $modules = ['node', 'text', 'field', 'filter', 'contact', 'options']; 14c14 < @@ -60,6 +60,22 @@ class FieldTest extends KernelTestBase { --- > @@ -62,6 +62,22 @@ class FieldTest extends KernelTestBase { 37c37 < @@ -68,13 +84,34 @@ class FieldTest extends KernelTestBase { --- > @@ -70,13 +86,34 @@ class FieldTest extends KernelTestBase { 73c73 < @@ -82,13 +119,36 @@ class FieldTest extends KernelTestBase { --- > @@ -84,13 +121,36 @@ class FieldTest extends KernelTestBase { 110c110 < @@ -96,7 +156,9 @@ class FieldTest extends KernelTestBase { --- > @@ -98,7 +158,9 @@ class FieldTest extends KernelTestBase { 122c122 < index 60125dc..7682e47 100644 --- > index f38955a..bb52c8b 100644 125c125 < @@ -19,6 +19,8 @@ use Drupal\menu_link_content\MenuLinkContentInterface; --- > @@ -20,6 +20,8 @@ use Drupal\menu_link_content\MenuLinkContentInterface; 134c134 < @@ -1164,6 +1166,7 @@ function field_token_info_alter(&$info) { --- > @@ -1185,6 +1187,7 @@ function field_token_info_alter(&$info) { 139c139,140 < if (!($field instanceof FieldStorageConfigInterface)) { --- > // Ensure the token type exists. > if (!isset($info['types'][$token_type])) { 141,142c142 < } < @@ -1183,7 +1186,6 @@ function field_token_info_alter(&$info) { --- > @@ -1211,7 +1214,6 @@ function field_token_info_alter(&$info) { 150c150 < @@ -1195,11 +1197,53 @@ function field_token_info_alter(&$info) { --- > @@ -1223,11 +1225,53 @@ function field_token_info_alter(&$info) { 204c204 < @@ -1239,8 +1283,6 @@ function field_tokens($type, $tokens, array $data = array(), array $options = ar --- > @@ -1269,8 +1313,6 @@ function field_tokens($type, $tokens, array $data = array(), array $options = ar 213c213 < @@ -1261,40 +1303,92 @@ function field_tokens($type, $tokens, array $data = array(), array $options = ar --- > @@ -1291,39 +1333,91 @@ function field_tokens($type, $tokens, array $data = array(), array $options = ar 235,236c235,236 < - // Do not continue if the field is empty or not a configurable field. < - if ($entity->get($name)->isEmpty() || !($entity->getFieldDefinition($name) instanceof FieldConfigInterface)) { --- > - // Do not continue if the field is empty. > - if ($entity->get($name)->isEmpty()) { 238a239,250 > - $display_options = 'token'; > - if (!$token_view_display) { > - // We don't have the token view display and should fall back on > - // default formatters. If the field has specified a specific formatter > - // to be used by default with tokens, use that, otherwise use the > - // default formatter. > - $field_type_definition = $fieldTypeManager->getDefinition($entity->getFieldDefinition($name)->getType()); > - > - $display_options = [ > - 'type' => !empty($field_type_definition['default_token_formatter']) ? $field_type_definition['default_token_formatter'] : $field_type_definition['default_formatter'], > - 'label' => 'hidden', > - ]; 255c267 < + } --- > } 257,271c269,275 < - $display_options = 'token'; < - if (!$token_view_display) { < - // We don't have the token view display and should fall back on < - // default formatters. If the field has specified a specific formatter < - // to be used by default with tokens, use that, otherwise use the < - // default formatter. < - $field_type_definition = $fieldTypeManager->getDefinition($entity->getFieldDefinition($name)->getType()); < - < - $display_options = [ < - 'type' => !empty($field_type_definition['default_token_formatter']) ? $field_type_definition['default_token_formatter'] : $field_type_definition['default_formatter'], < - 'label' => 'hidden', < - ]; < + // Render only one delta. < + if (isset($delta)) { < + if ($field_delta = $entity->{$field_name}[$delta]) { --- > - $field_output = $entity->$name->view($display_options); > - $field_output['#token_options'] = $options; > - $field_output['#pre_render'][] = 'token_pre_render_field_token'; > - $replacements[$original] = $renderer->renderPlain($field_output); > + // Render only one delta. > + if (isset($delta)) { > + if ($field_delta = $entity->{$field_name}[$delta]) { 276c280 < + continue; --- > + continue; 291,305c295,302 < + else { < + if ($field_tokens = \Drupal::token()->findWithPrefix($tokens, $field_name)) { < + $property_token_data = [ < + 'token_type' => 'field_property', < + $data['entity_type'] . '-' . $field_name => $data['entity']->$field_name, < + 'field_name' => $data['entity_type'] . '-' . $field_name, < + ]; < + $replacements += \Drupal::token()->generate($field_name, $field_tokens, $property_token_data, $options, $bubbleable_metadata); < + } < } < - < - $field_output = $entity->$name->view($display_options); < - $field_output['#token_options'] = $options; < - $field_output['#pre_render'][] = 'token_pre_render_field_token'; < - $replacements[$original] = $renderer->renderPlain($field_output); --- > + else if ($field_tokens = \Drupal::token()->findWithPrefix($tokens, $field_name)) { > + $property_token_data = [ > + 'token_type' => 'field_property', > + $data['entity_type'] . '-' . $field_name => $data['entity']->$field_name, > + 'field_name' => $data['entity_type'] . '-' . $field_name, > + ]; > + $replacements += \Drupal::token()->generate($field_name, $field_tokens, $property_token_data, $options, $bubbleable_metadata); > + } 308c305 < - --- >