Make Media.css and Media.js optional.

This commit is contained in:
Emil Stenström 2023-02-09 22:15:47 +01:00
parent 9103eda2f4
commit 36237f0752
2 changed files with 59 additions and 4 deletions

View file

@ -27,21 +27,21 @@ class SimplifiedInterfaceMediaDefiningClass(MediaDefiningClass):
media = attrs["Media"]
# Allow: class Media: css = "style.css"
if isinstance(media.css, str):
if hasattr(media, "css") and isinstance(media.css, str):
media.css = [media.css]
# Allow: class Media: css = ["style.css"]
if isinstance(media.css, list):
if hasattr(media, "css") and isinstance(media.css, list):
media.css = {"all": media.css}
# Allow: class Media: css = {"all": "style.css"}
if isinstance(media.css, dict):
if hasattr(media, "css") and isinstance(media.css, dict):
for media_type, path_list in media.css.items():
if isinstance(path_list, str):
media.css[media_type] = [path_list]
# Allow: class Media: js = "script.js"
if isinstance(media.js, str):
if hasattr(media, "js") and isinstance(media.js, str):
media.js = [media.js]
return super().__new__(mcs, name, bases, attrs)

View file

@ -56,6 +56,61 @@ class ComponentTest(SimpleTestCase):
).lstrip(),
)
def test_css_only_component(self):
class SimpleComponent(component.Component):
template_name = "simple_template.html"
class Media:
css = "style.css"
comp = SimpleComponent("simple_component")
self.assertHTMLEqual(
comp.render_dependencies(),
dedent(
"""
<link href="style.css" media="all" rel="stylesheet">
"""
).strip(),
)
def test_js_only_component(self):
class SimpleComponent(component.Component):
template_name = "simple_template.html"
class Media:
js = "script.js"
comp = SimpleComponent("simple_component")
self.assertHTMLEqual(
comp.render_dependencies(),
dedent(
"""
<script src="script.js"></script>
"""
).strip(),
)
def test_empty_media_component(self):
class SimpleComponent(component.Component):
template_name = "simple_template.html"
class Media:
pass
comp = SimpleComponent("simple_component")
self.assertHTMLEqual(comp.render_dependencies(), "")
def test_missing_media_component(self):
class SimpleComponent(component.Component):
template_name = "simple_template.html"
comp = SimpleComponent("simple_component")
self.assertHTMLEqual(comp.render_dependencies(), "")
def test_component_with_list_of_styles(self):
class MultistyleComponent(component.Component):
class Media: