reverted: --- b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php +++ a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php @@ -337,22 +337,7 @@ * @param string $view_mode * The view mode that should be used to prepare the entity. */ + protected function alterBuild(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {} - protected function alterBuild(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) { - if (!$entity->isNew() && $entity instanceof ContentEntityInterface && $entity->hasLinkTemplate('canonical') && $entity->toUrl()->isRouted()) { - if (($entity->isDefaultRevision()) || !$entity->getEntityType()->isRevisionable()) { - $key = $entity->getEntityTypeId(); - } - else { - $key = $entity->getEntityTypeId() . '_revision'; - } - $build['#contextual_links'][$key] = [ - 'route_parameters' => $entity->toUrl()->getRouteParameters(), - ]; - if ($entity instanceof EntityChangedInterface) { - $build['#contextual_links'][$key]['metadata'] = ['changed' => $entity->getChangedTime()]; - } - } - } /** * {@inheritdoc} diff -u b/core/modules/block_content/src/BlockContentViewBuilder.php b/core/modules/block_content/src/BlockContentViewBuilder.php --- b/core/modules/block_content/src/BlockContentViewBuilder.php +++ b/core/modules/block_content/src/BlockContentViewBuilder.php @@ -2,13 +2,13 @@ namespace Drupal\block_content; +use Drupal\Core\Entity\ContentEntityViewBuilder; use Drupal\Core\Entity\EntityInterface; -use Drupal\Core\Entity\EntityViewBuilder; /** * View builder handler for custom blocks. */ -class BlockContentViewBuilder extends EntityViewBuilder { +class BlockContentViewBuilder extends ContentEntityViewBuilder { /** * {@inheritdoc} diff -u b/core/modules/node/src/NodeViewBuilder.php b/core/modules/node/src/NodeViewBuilder.php --- b/core/modules/node/src/NodeViewBuilder.php +++ b/core/modules/node/src/NodeViewBuilder.php @@ -2,14 +2,14 @@ namespace Drupal\node; +use Drupal\Core\Entity\ContentEntityViewBuilder; use Drupal\Core\Entity\EntityInterface; -use Drupal\Core\Entity\EntityViewBuilder; use Drupal\node\Entity\Node; /** * View builder handler for nodes. */ -class NodeViewBuilder extends EntityViewBuilder { +class NodeViewBuilder extends ContentEntityViewBuilder { /** * {@inheritdoc} diff -u b/core/modules/taxonomy/src/TermViewBuilder.php b/core/modules/taxonomy/src/TermViewBuilder.php --- b/core/modules/taxonomy/src/TermViewBuilder.php +++ b/core/modules/taxonomy/src/TermViewBuilder.php @@ -5,6 +5,6 @@ -use Drupal\Core\Entity\EntityViewBuilder; +use Drupal\Core\Entity\ContentEntityViewBuilder; /** * View builder handler for taxonomy terms. */ -class TermViewBuilder extends EntityViewBuilder {} +class TermViewBuilder extends ContentEntityViewBuilder {} only in patch2: unchanged: --- /dev/null +++ b/core/lib/Drupal/Core/Entity/ContentEntityViewBuilder.php @@ -0,0 +1,37 @@ +isNew()) { + $key = $entity->getEntityTypeId(); + if ($entity->isDefaultRevision() || !$entity->getEntityType()->isRevisionable()) { + $build['#contextual_links'][$key] = [ + 'route_parameters' => $entity->toUrl()->getRouteParameters(), + ]; + } + else { + $key .= '_revision'; + $build['#contextual_links'][$key] = [ + 'route_parameters' => $entity->toUrl('revision')->getRouteParameters(), + ]; + } + if ($entity instanceof EntityChangedInterface) { + $build['#contextual_links'][$key]['metadata'] = [ + 'changed' => $entity->getChangedTime(), + ]; + } + } + } + +}