in bedrock/mozorg/templatetags/misc.py [0:0]
def resp_img(ctx={}, url=None, srcset=None, sizes=None, optional_attributes=None):
alt = ""
attrs = ""
final_sizes = ""
final_srcset = ""
l10n = False
loading = ""
if optional_attributes:
l10n = optional_attributes.pop("l10n", False)
alt = optional_attributes.pop("alt", "")
# Put `loading` before `src` to avoid a bug in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=1647077)
if "loading" in optional_attributes:
loading = f'loading="{optional_attributes.pop("loading", "")}" '
if optional_attributes:
attrs = " " + " ".join(f'{attr}="{val}"' for attr, val in optional_attributes.items())
# default src
if not url.startswith("https://"):
url = l10n_img(ctx, url) if l10n else static(url)
if srcset:
srcset_last_item = list(srcset)[-1]
for image, size in srcset.items():
postfix = "" if image == srcset_last_item else ","
if not image.startswith("https://"):
image = l10n_img(ctx, image) if l10n else static(image)
final_srcset = final_srcset + image + " " + size + postfix
if sizes:
sizes_last_item = list(sizes)[-1]
for window_size, img_width in sizes.items():
postfix = "" if window_size == sizes_last_item else ","
if window_size == "default":
final_sizes = final_sizes + img_width + postfix
else:
final_sizes = final_sizes + window_size + " " + img_width + postfix
srcset_str = f'srcset="{final_srcset}" ' if final_srcset else ""
sizes_str = f'sizes="{final_sizes}" ' if final_sizes else ""
markup = f'<img {loading}src="{url}" {srcset_str}{sizes_str}alt="{alt}"{attrs}>'
return Markup(markup)