diff --git a/core/modules/media/src/Entity/Media.php b/core/modules/media/src/Entity/Media.php
index d175572450..9aa3a26d3d 100644
--- a/core/modules/media/src/Entity/Media.php
+++ b/core/modules/media/src/Entity/Media.php
@@ -10,6 +10,7 @@
use Drupal\media\MediaInterface;
use Drupal\media\MediaSourceEntityConstraintsInterface;
use Drupal\media\MediaSourceFieldConstraintsInterface;
+use Drupal\media\MediaViewBuilder;
use Drupal\user\UserInterface;
/**
@@ -30,7 +31,7 @@
* bundle_label = @Translation("Media type"),
* handlers = {
* "storage" = "Drupal\Core\Entity\Sql\SqlContentEntityStorage",
- * "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
+ * "view_builder" = "Drupal\media\MediaViewBuilder",
* "list_builder" = "Drupal\Core\Entity\EntityListBuilder",
* "access" = "Drupal\media\MediaAccessControlHandler",
* "form" = {
diff --git a/core/modules/media/src/MediaViewBuilder.php b/core/modules/media/src/MediaViewBuilder.php
new file mode 100644
index 0000000000..7f4890f152
--- /dev/null
+++ b/core/modules/media/src/MediaViewBuilder.php
@@ -0,0 +1,39 @@
+isNew()) {
+ if ($entity->isDefaultRevision()) {
+ $build['#contextual_links']['media'] = [
+ 'route_parameters' => ['media' => $entity->id()],
+ 'metadata' => ['changed' => $entity->getChangedTime()],
+ ];
+ }
+ else {
+ $build['#contextual_links']['media_revision'] = [
+ 'route_parameters' => [
+ 'media' => $entity->id(),
+ 'media_revision' => $entity->getRevisionId(),
+ ],
+ 'metadata' => ['changed' => $entity->getChangedTime()],
+ ];
+ }
+ }
+ }
+
+}
diff --git a/core/modules/media/templates/media.html.twig b/core/modules/media/templates/media.html.twig
index 41731992ec..805f61ac70 100644
--- a/core/modules/media/templates/media.html.twig
+++ b/core/modules/media/templates/media.html.twig
@@ -37,12 +37,11 @@
page title, so we do not display it here.
#}
{{ title_prefix }}
- {% if label and view_mode != 'full' %}
+ {% if name and view_mode != 'full' %}
- {{ label }}
+ {{ name }}
{% endif %}
{{ title_suffix }}
-
{{ content }}
diff --git a/core/modules/media/templates/media.html.twig b/core/modules/media/templates/media.html.twig.orig
similarity index 100%
copy from core/modules/media/templates/media.html.twig
copy to core/modules/media/templates/media.html.twig.orig
diff --git a/core/modules/media/tests/src/Functional/MediaContextualLinksTest.php b/core/modules/media/tests/src/Functional/MediaContextualLinksTest.php
new file mode 100644
index 0000000000..75b04a98e0
--- /dev/null
+++ b/core/modules/media/tests/src/Functional/MediaContextualLinksTest.php
@@ -0,0 +1,55 @@
+createMediaType();
+
+ // Create a media item.
+ $media = Media::create([
+ 'bundle' => $mediaType->id(),
+ 'name' => 'Unnamed',
+ ]);
+ $media->save();
+
+ $user = $this->drupalCreateUser([
+ 'administer media',
+ 'access contextual links',
+ ]);
+ $this->drupalLogin($user);
+
+ $this->drupalGet('media/' . $media->id());
+
+ $this->assertSession()->responseContains('data-contextual-id="media:media=' . $media->id() . ':');
+ }
+
+}
diff --git a/core/themes/classy/templates/content/media.html.twig b/core/themes/classy/templates/content/media.html.twig
index f36975cb9a..cd263e0afe 100644
--- a/core/themes/classy/templates/content/media.html.twig
+++ b/core/themes/classy/templates/content/media.html.twig
@@ -20,8 +20,14 @@
view_mode ? 'media--view-mode-' ~ view_mode.id()|clean_class,
]
%}
+
- {% if content %}
- {{ content }}
+ {{ title_prefix }}
+ {% if name and view_mode != 'full' %}
+
+ {{ name }}
+
{% endif %}
+ {{ title_suffix }}
+ {{ content }}
diff --git a/core/themes/stable/templates/content/media.html.twig b/core/themes/stable/templates/content/media.html.twig
index 769b7be751..e71bd968b6 100644
--- a/core/themes/stable/templates/content/media.html.twig
+++ b/core/themes/stable/templates/content/media.html.twig
@@ -13,7 +13,11 @@
*/
#}
- {% if content %}
- {{ content }}
+ {% if name and view_mode != 'full' %}
+
+ {{ name }}
+
{% endif %}
+ {{ title_suffix }}
+ {{ content }}