Add support for Twitch CDN URLs in picture tag, returning simple img tag
This commit is contained in:
parent
7c4bb9acca
commit
b6699f3a2a
2 changed files with 66 additions and 0 deletions
|
|
@ -72,6 +72,19 @@ def picture( # noqa: PLR0913, PLR0917
|
|||
if not src:
|
||||
return SafeString("")
|
||||
|
||||
# For Twitch CDN URLs, skip format conversion and use simple img tag
|
||||
if "static-cdn.jtvnw.net" in src:
|
||||
return format_html(
|
||||
format_string='<img src="{src}"{width}{height}{loading}{css_class}{style}{alt} />',
|
||||
src=src,
|
||||
width=format_html(' width="{}"', width) if width else "",
|
||||
height=format_html(' height="{}"', height) if height else "",
|
||||
loading=format_html(' loading="{}"', loading) if loading else "",
|
||||
css_class=format_html(' class="{}"', css_class) if css_class else "",
|
||||
style=format_html(' style="{}"', style) if style else "",
|
||||
alt=format_html(' alt="{}"', alt) if alt is not None else "",
|
||||
)
|
||||
|
||||
# Generate URLs for modern formats
|
||||
avif_url: str = get_format_url(src, "avif")
|
||||
webp_url: str = get_format_url(src, "webp")
|
||||
|
|
|
|||
|
|
@ -185,6 +185,59 @@ class TestPictureTag:
|
|||
assert "https://cdn.example.com/images/photo.webp" in result
|
||||
assert "https://cdn.example.com/images/photo.jpg" in result
|
||||
|
||||
def test_twitch_cdn_url_simple_img(self) -> None:
|
||||
"""Test that Twitch CDN URLs return simple img tag without picture element."""
|
||||
result: SafeString = picture("https://static-cdn.jtvnw.net/ttv-boxart/1292861145.jpg")
|
||||
|
||||
# Should NOT have picture element
|
||||
assert "<picture>" not in result
|
||||
assert "</picture>" not in result
|
||||
|
||||
# Should NOT have source tags for format conversion
|
||||
assert "<source" not in result
|
||||
|
||||
# Should have simple img tag
|
||||
assert 'src="https://static-cdn.jtvnw.net/ttv-boxart/1292861145.jpg"' in result
|
||||
assert 'loading="lazy"' in result
|
||||
|
||||
def test_twitch_cdn_url_with_attributes(self) -> None:
|
||||
"""Test Twitch CDN URL with optional attributes."""
|
||||
result: SafeString = picture(
|
||||
"https://static-cdn.jtvnw.net/ttv-boxart/1292861145.jpg",
|
||||
alt="Game art",
|
||||
width=300,
|
||||
height=400,
|
||||
loading="eager",
|
||||
css_class="game-cover",
|
||||
style="border-radius: 8px",
|
||||
)
|
||||
|
||||
# Should still be simple img tag
|
||||
assert "<picture>" not in result
|
||||
assert "</picture>" not in result
|
||||
assert "<source" not in result
|
||||
|
||||
# Should have all attributes
|
||||
assert 'src="https://static-cdn.jtvnw.net/ttv-boxart/1292861145.jpg"' in result
|
||||
assert 'alt="Game art"' in result
|
||||
assert 'width="300"' in result
|
||||
assert 'height="400"' in result
|
||||
assert 'loading="eager"' in result
|
||||
assert 'class="game-cover"' in result
|
||||
assert 'style="border-radius: 8px"' in result
|
||||
|
||||
def test_twitch_cdn_url_with_png(self) -> None:
|
||||
"""Test Twitch CDN URL with PNG format."""
|
||||
result: SafeString = picture("https://static-cdn.jtvnw.net/badges/v1/1234567.png")
|
||||
|
||||
# Should NOT have picture element or source tags
|
||||
assert "<picture>" not in result
|
||||
assert "</picture>" not in result
|
||||
assert "<source" not in result
|
||||
|
||||
# Should have simple img tag
|
||||
assert 'src="https://static-cdn.jtvnw.net/badges/v1/1234567.png"' in result
|
||||
|
||||
|
||||
class TestPictureTagTemplate:
|
||||
"""Tests for the picture tag used in templates."""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue