core/themes/stable/stable.theme | 64 ++++++++++++++++++++++ core/themes/stable/templates/field/image.html.twig | 1 - 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/core/themes/stable/stable.theme b/core/themes/stable/stable.theme index 456a4ad..b927056 100644 --- a/core/themes/stable/stable.theme +++ b/core/themes/stable/stable.theme @@ -23,3 +23,67 @@ function stable_preprocess_links(&$variables) { } } } + + +/** + * Prepares variables for image templates. + * + * Default template: image.html.twig. + * + * @param array $variables + * An associative array containing: + * - uri: Either the path of the image file (relative to base_path()) or a + * full URL. + * - width: The width of the image (if known). + * - height: The height of the image (if known). + * - alt: The alternative text for text-based browsers. HTML 4 and XHTML 1.0 + * always require an alt attribute. The HTML 5 draft allows the alt + * attribute to be omitted in some cases. Therefore, this variable defaults + * to an empty string, but can be set to NULL for the attribute to be + * omitted. Usually, neither omission nor an empty string satisfies + * accessibility requirements, so it is strongly encouraged for code + * building variables for image.html.twig templates to pass a meaningful + * value for this variable. + * - http://www.w3.org/TR/REC-html40/struct/objects.html#h-13.8 + * - http://www.w3.org/TR/xhtml1/dtds.html + * - http://dev.w3.org/html5/spec/Overview.html#alt + * - title: The title text is displayed when the image is hovered in some + * popular browsers. + * - attributes: Associative array of attributes to be placed in the img tag. + * - srcset: Array of multiple URIs and sizes/multipliers. + * - sizes: The sizes attribute for viewport-based selection of images. + * - http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content.html#introduction-3:viewport-based-selection-2 + */ +function stable_preprocess_image(&$variables) { + if (!empty($variables['uri'])) { + $variables['attributes']['src'] = file_url_transform_relative(file_create_url($variables['uri'])); + } + // Generate a srcset attribute conforming to the spec at + // http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#attr-img-srcset + if (!empty($variables['srcset'])) { + $srcset = array(); + foreach ($variables['srcset'] as $src) { + // URI is mandatory. + $source = file_url_transform_relative(file_create_url($src['uri'])); + if (isset($src['width']) && !empty($src['width'])) { + $source .= ' ' . $src['width']; + } + elseif (isset($src['multiplier']) && !empty($src['multiplier'])) { + $source .= ' ' . $src['multiplier']; + } + $srcset[] = $source; + } + $variables['attributes']['srcset'] = implode(', ', $srcset); + } + + foreach (array('width', 'height', 'alt', 'title', 'sizes') as $key) { + if (isset($variables[$key])) { + // If the property has already been defined in the attributes, + // do not override, including NULL. + if (array_key_exists($key, $variables['attributes'])) { + continue; + } + $variables['attributes'][$key] = $variables[$key]; + } + } +} diff --git a/core/themes/stable/templates/field/image.html.twig b/core/themes/stable/templates/field/image.html.twig index 71f1e20..484268d 100644 --- a/core/themes/stable/templates/field/image.html.twig +++ b/core/themes/stable/templates/field/image.html.twig @@ -1,4 +1,3 @@ -{% extends "@system/image.html.twig" %} {# /** * @file