fix: typo in html_attrs defaults dict fetching (#513)

Co-authored-by: Juro Oravec <juraj.oravec.josefson@gmail.com>
This commit is contained in:
Zach Bellay 2024-05-29 23:29:57 -07:00 committed by GitHub
parent 95f6554f4c
commit 0101f6dae6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 8 deletions

View file

@ -11,6 +11,9 @@ from django.utils.safestring import SafeString, mark_safe
from django_components.template_parser import process_aggregate_kwargs
HTML_ATTRS_DEFAULTS_KEY = "defaults"
HTML_ATTRS_ATTRS_KEY = "attrs"
class HtmlAttrsNode(Node):
def __init__(
@ -30,12 +33,12 @@ class HtmlAttrsNode(Node):
# Resolve kwargs, while also extracting attrs and defaults keys
for key, value in self.kwargs:
resolved_value = value.resolve(context)
if key.startswith("attrs:") or key.startswith("defaults:"):
if key.startswith(f"{HTML_ATTRS_ATTRS_KEY}:") or key.startswith(f"{HTML_ATTRS_DEFAULTS_KEY}:"):
attrs_and_defaults_from_kwargs[key] = resolved_value
continue
# NOTE: These were already extracted into separate variables, so
# ignore them here.
elif key == "attrs" or key == "defaults":
elif key == HTML_ATTRS_ATTRS_KEY or key == HTML_ATTRS_DEFAULTS_KEY:
continue
append_attrs.append((key, resolved_value))
@ -46,16 +49,16 @@ class HtmlAttrsNode(Node):
# So by assigning the `attrs` and `defaults` keys, users are forced to use only
# one approach or the other, but not both simultaneously.
if self.attributes:
attrs_and_defaults_from_kwargs["attrs"] = self.attributes.resolve(context)
attrs_and_defaults_from_kwargs[HTML_ATTRS_ATTRS_KEY] = self.attributes.resolve(context)
if self.default_attrs:
attrs_and_defaults_from_kwargs["defaults"] = self.default_attrs.resolve(context)
attrs_and_defaults_from_kwargs[HTML_ATTRS_DEFAULTS_KEY] = self.default_attrs.resolve(context)
# Turn `{"attrs:blabla": 1}` into `{"attrs": {"blabla": 1}}`
attrs_and_defaults_from_kwargs = process_aggregate_kwargs(attrs_and_defaults_from_kwargs)
# NOTE: We want to allow to use `html_attrs` even without `attrs` or `defaults` params
attrs = attrs_and_defaults_from_kwargs.get("attrs", {})
default_attrs = attrs_and_defaults_from_kwargs.get("defualts", {})
attrs = attrs_and_defaults_from_kwargs.get(HTML_ATTRS_ATTRS_KEY, {})
default_attrs = attrs_and_defaults_from_kwargs.get(HTML_ATTRS_DEFAULTS_KEY, {})
final_attrs = {**default_attrs, **attrs}
final_attrs = append_attributes(*final_attrs.items(), *append_attrs)

View file

@ -274,12 +274,11 @@ class HtmlAttrsTests(BaseTestCase):
self.assertHTMLEqual(
rendered,
"""
<div class="added_class another-class" data-id=123>
<div class="added_class another-class override-me" data-id=123>
content
</div>
""",
)
self.assertNotIn("override-me", rendered)
def test_tag_no_defaults(self):
@component.register("test")