Issue #3021452 by Luke.Leber, jibran, ericmulder1980, phenaproxima, Martijn de Wit, alexpott, andrewmacpherson, marcoscano, pawandubey, seanB, lauriii: Add title attribute to oEmbed iframe for accessibility
parent
5cd49004e4
commit
23aa83870b
|
|
@ -229,6 +229,13 @@ class OEmbedFormatter extends FormatterBase implements ContainerFactoryPluginInt
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// An empty title attribute will disable title inheritance, so only
|
||||||
|
// add it if the resource has a title.
|
||||||
|
$title = $resource->getTitle();
|
||||||
|
if ($title) {
|
||||||
|
$element[$delta]['#attributes']['title'] = $title;
|
||||||
|
}
|
||||||
|
|
||||||
CacheableMetadata::createFromObject($resource)
|
CacheableMetadata::createFromObject($resource)
|
||||||
->addCacheTags($this->config->getCacheTags())
|
->addCacheTags($this->config->getCacheTags())
|
||||||
->applyTo($element[$delta]);
|
->applyTo($element[$delta]);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<link rel="alternate" href="video_vimeo-no-title.json"
|
||||||
|
type="application/json+oembed" title="">
|
||||||
|
</head>
|
||||||
|
<body></body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"type": "video",
|
||||||
|
"version": "1.0",
|
||||||
|
"provider_name": "Vimeo",
|
||||||
|
"provider_url": "https:\/\/vimeo.com\/",
|
||||||
|
"title": "",
|
||||||
|
"author_name": "Tendenci - The Open Source AMS",
|
||||||
|
"author_url": "https:\/\/vimeo.com\/schipul",
|
||||||
|
"html": "<iframe width=\"480\">By the power of Greyskull, Vimeo works!</iframe>",
|
||||||
|
"width": 480,
|
||||||
|
"height": 360,
|
||||||
|
"description": "Special thanks to Tendenci, formerly Schipul for sponsoring this video with training, equipment and time. The open source way. All creative however was self directed by the individuals - A. Hughes (www.schipul.com\/ahughes) featuring QCait (www.schipul.com\/qcait) - Hands On Drupal\n\nDrupal is a free software package that allows an individual or a community of users to easily publish, manage and organize a wide variety of content on a website.\n\nNeed a little Drupal help or just want to geek out with us? Visit our www.schipul.com\/drupal for more info - we'd love to connect!\n\nGo here for Drupal Common Terms and Suggested Modules : http:\/\/schipul.com\/en\/helpfiles\/v\/229",
|
||||||
|
"thumbnail_url": "internal:\/core\/misc\/druplicon.png",
|
||||||
|
"thumbnail_width": 295,
|
||||||
|
"thumbnail_height": 221
|
||||||
|
}
|
||||||
|
|
@ -58,20 +58,35 @@ class OEmbedFormatterTest extends MediaFunctionalTestBase {
|
||||||
[
|
[
|
||||||
'iframe' => [
|
'iframe' => [
|
||||||
'src' => '/media/oembed?url=https%3A//vimeo.com/7073899',
|
'src' => '/media/oembed?url=https%3A//vimeo.com/7073899',
|
||||||
'width' => 480,
|
'width' => '480',
|
||||||
'height' => 360,
|
'height' => '360',
|
||||||
|
'title' => 'Drupal Rap Video - Schipulcon09',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'Vimeo video, resized' => [
|
'Vimeo video, resized' => [
|
||||||
'https://vimeo.com/7073899',
|
'https://vimeo.com/7073899',
|
||||||
'video_vimeo.json?maxwidth=100&maxheight=100',
|
'video_vimeo.json?maxwidth=100&maxheight=100',
|
||||||
['max_width' => 100, 'max_height' => 100],
|
['max_width' => '100', 'max_height' => '100'],
|
||||||
[
|
[
|
||||||
'iframe' => [
|
'iframe' => [
|
||||||
'src' => '/media/oembed?url=https%3A//vimeo.com/7073899',
|
'src' => '/media/oembed?url=https%3A//vimeo.com/7073899',
|
||||||
'width' => 100,
|
'width' => '100',
|
||||||
'height' => 100,
|
'height' => '100',
|
||||||
|
'title' => 'Drupal Rap Video - Schipulcon09',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'Vimeo video, no title' => [
|
||||||
|
'https://vimeo.com/7073899',
|
||||||
|
'video_vimeo-no-title.json',
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
'iframe' => [
|
||||||
|
'src' => '/media/oembed?url=https%3A//vimeo.com/7073899',
|
||||||
|
'width' => '480',
|
||||||
|
'height' => '360',
|
||||||
|
'title' => NULL,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
@ -82,8 +97,8 @@ class OEmbedFormatterTest extends MediaFunctionalTestBase {
|
||||||
[
|
[
|
||||||
'iframe' => [
|
'iframe' => [
|
||||||
'src' => '/media/oembed?url=https%3A//twitter.com/drupaldevdays/status/935643039741202432',
|
'src' => '/media/oembed?url=https%3A//twitter.com/drupaldevdays/status/935643039741202432',
|
||||||
'width' => 550,
|
'width' => '550',
|
||||||
'height' => 360,
|
'height' => '360',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
@ -94,8 +109,8 @@ class OEmbedFormatterTest extends MediaFunctionalTestBase {
|
||||||
[
|
[
|
||||||
'img' => [
|
'img' => [
|
||||||
'src' => '/core/misc/druplicon.png',
|
'src' => '/core/misc/druplicon.png',
|
||||||
'width' => 88,
|
'width' => '88',
|
||||||
'height' => 100,
|
'height' => '100',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
@ -171,8 +186,14 @@ class OEmbedFormatterTest extends MediaFunctionalTestBase {
|
||||||
$assert = $this->assertSession();
|
$assert = $this->assertSession();
|
||||||
$assert->statusCodeEquals(200);
|
$assert->statusCodeEquals(200);
|
||||||
foreach ($selectors as $selector => $attributes) {
|
foreach ($selectors as $selector => $attributes) {
|
||||||
|
$element = $assert->elementExists('css', $selector);
|
||||||
foreach ($attributes as $attribute => $value) {
|
foreach ($attributes as $attribute => $value) {
|
||||||
$assert->elementAttributeContains('css', $selector, $attribute, $value);
|
if (isset($value)) {
|
||||||
|
$this->assertContains($value, $element->getAttribute($attribute));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->assertFalse($element->hasAttribute($attribute));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue