def resp_img()

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)