Skip to content

Commit 8a91ca5

Browse files
committed
Fix assets globals
1 parent dd2a3e1 commit 8a91ca5

File tree

4 files changed

+212
-13
lines changed

4 files changed

+212
-13
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ requires = ["setuptools"]
44

55
[project]
66
name = "jx"
7-
version = "0.5.0"
7+
version = "0.5.1"
88
description = "Replace your HTML templates with Python server-Side components"
99
authors = [
1010
{name = "Juan Pablo Scaletti", email = "[email protected]"},

src/jx/catalog.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -172,17 +172,15 @@ def render(
172172
co = self.get_component(relpath)
173173

174174
globals = globals or {}
175-
globals.update(
176-
{
177-
"assets": {
178-
"css": co.collect_css,
179-
"js": co.collect_js,
180-
"render_css": co.render_css,
181-
"render_js": co.render_js,
182-
"render": co.render_assets,
183-
},
175+
globals.update({
176+
"assets": {
177+
"collect_css": co.collect_css,
178+
"collect_js": co.collect_js,
179+
"render_css": co.render_css,
180+
"render_js": co.render_js,
181+
"render": co.render_assets,
184182
}
185-
)
183+
})
186184
co.globals = globals
187185

188186
return co.render(**kwargs)

tests/test_component.py

Lines changed: 202 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ def test_render_assets(folder):
310310
""".strip()
311311

312312

313-
def test_render_assets_in_layout(folder):
313+
def test_global_assets_render(folder):
314314
(folder / "layout.jinja").write_text("""
315315
{# css "layout.css" #}
316316
{# js "layout.js", "https://example.com/layout.js" #}
@@ -339,6 +339,207 @@ def test_render_assets_in_layout(folder):
339339
""".strip()
340340

341341

342+
def test_global_assets_render_string(folder):
343+
(folder / "layout.jinja").write_text("""
344+
{# css "layout.css" #}
345+
{# js "layout.js", "https://example.com/layout.js" #}
346+
{{ assets.render() }}
347+
<div>{{ content }}</div>
348+
""")
349+
350+
source ="""
351+
{# import "layout.jinja" as Layout #}
352+
{# css "main.css", "/static/common/main.css" #}
353+
{# js "main.js" #}
354+
<Layout>Hello</Layout>
355+
"""
356+
357+
cat = Catalog(folder)
358+
html = cat.render_string(source)
359+
print(html)
360+
assert html.strip() == """
361+
<link rel="stylesheet" href="main.css">
362+
<link rel="stylesheet" href="/static/common/main.css">
363+
<link rel="stylesheet" href="layout.css">
364+
<script type="module" src="main.js"></script>
365+
<script type="module" src="layout.js"></script>
366+
<script type="module" src="https://example.com/layout.js"></script>
367+
<div>Hello</div>
368+
""".strip()
369+
370+
371+
def test_global_assets_render_js(folder):
372+
(folder / "layout.jinja").write_text("""
373+
{# css "layout.css" #}
374+
{# js "layout.js", "https://example.com/layout.js" #}
375+
{{ assets.render_js() }}
376+
<div>{{ content }}</div>
377+
""")
378+
379+
(folder / "main.jinja").write_text("""
380+
{# import "layout.jinja" as Layout #}
381+
{# css "main.css", "/static/common/main.css" #}
382+
{# js "main.js" #}
383+
<Layout>Hello</Layout>
384+
""")
385+
386+
cat = Catalog(folder)
387+
html = cat.render("main.jinja")
388+
print(html)
389+
assert html.strip() == """
390+
<script type="module" src="main.js"></script>
391+
<script type="module" src="layout.js"></script>
392+
<script type="module" src="https://example.com/layout.js"></script>
393+
<div>Hello</div>
394+
""".strip()
395+
396+
397+
def test_global_assets_render_js_string(folder):
398+
(folder / "layout.jinja").write_text("""
399+
{# css "layout.css" #}
400+
{# js "layout.js", "https://example.com/layout.js" #}
401+
{{ assets.render_js() }}
402+
<div>{{ content }}</div>
403+
""")
404+
405+
source = """
406+
{# import "layout.jinja" as Layout #}
407+
{# css "main.css", "/static/common/main.css" #}
408+
{# js "main.js" #}
409+
<Layout>Hello</Layout>
410+
"""
411+
412+
cat = Catalog(folder)
413+
html = cat.render_string(source)
414+
print(html)
415+
assert html.strip() == """
416+
<script type="module" src="main.js"></script>
417+
<script type="module" src="layout.js"></script>
418+
<script type="module" src="https://example.com/layout.js"></script>
419+
<div>Hello</div>
420+
""".strip()
421+
422+
423+
def test_global_assets_render_css(folder):
424+
(folder / "layout.jinja").write_text("""
425+
{# css "layout.css" #}
426+
{# js "layout.js", "https://example.com/layout.js" #}
427+
{{ assets.render_css() }}
428+
<div>{{ content }}</div>
429+
""")
430+
431+
(folder / "main.jinja").write_text("""
432+
{# import "layout.jinja" as Layout #}
433+
{# css "main.css", "/static/common/main.css" #}
434+
{# js "main.js" #}
435+
<Layout>Hello</Layout>
436+
""")
437+
438+
cat = Catalog(folder)
439+
html = cat.render("main.jinja")
440+
print(html)
441+
assert html.strip() == """
442+
<link rel="stylesheet" href="main.css">
443+
<link rel="stylesheet" href="/static/common/main.css">
444+
<link rel="stylesheet" href="layout.css">
445+
<div>Hello</div>
446+
""".strip()
447+
448+
449+
def test_global_assets_render_css_string(folder):
450+
(folder / "layout.jinja").write_text("""
451+
{# css "layout.css" #}
452+
{# js "layout.js", "https://example.com/layout.js" #}
453+
{{ assets.render_css() }}
454+
<div>{{ content }}</div>
455+
""")
456+
457+
source = """
458+
{# import "layout.jinja" as Layout #}
459+
{# css "main.css", "/static/common/main.css" #}
460+
{# js "main.js" #}
461+
<Layout>Hello</Layout>
462+
"""
463+
464+
cat = Catalog(folder)
465+
html = cat.render_string(source)
466+
print(html)
467+
assert html.strip() == """
468+
<link rel="stylesheet" href="main.css">
469+
<link rel="stylesheet" href="/static/common/main.css">
470+
<link rel="stylesheet" href="layout.css">
471+
<div>Hello</div>
472+
""".strip()
473+
474+
475+
def test_global_assets_collect(folder):
476+
(folder / "layout.jinja").write_text("""
477+
{# css "layout.css" #}
478+
{# js "layout.js", "https://example.com/layout.js" #}
479+
{% for url in assets.collect_css() -%}
480+
<link href="{{ url }}" rel="stylesheet">
481+
{% endfor -%}
482+
{% for url in assets.collect_js() -%}
483+
<script src="{{ url }}" type="module"></script>
484+
{% endfor -%}
485+
<div>{{ content }}</div>
486+
""")
487+
488+
(folder / "main.jinja").write_text("""
489+
{# import "layout.jinja" as Layout #}
490+
{# css "main.css", "/static/common/main.css" #}
491+
{# js "main.js" #}
492+
<Layout>Hello</Layout>
493+
""")
494+
495+
cat = Catalog(folder)
496+
html = cat.render("main.jinja")
497+
print(html)
498+
assert html.strip() == """
499+
<link href="main.css" rel="stylesheet">
500+
<link href="/static/common/main.css" rel="stylesheet">
501+
<link href="layout.css" rel="stylesheet">
502+
<script src="main.js" type="module"></script>
503+
<script src="layout.js" type="module"></script>
504+
<script src="https://example.com/layout.js" type="module"></script>
505+
<div>Hello</div>
506+
""".strip()
507+
508+
509+
def test_global_assets_collect_string(folder):
510+
(folder / "layout.jinja").write_text("""
511+
{# css "layout.css" #}
512+
{# js "layout.js", "https://example.com/layout.js" #}
513+
{% for url in assets.collect_css() -%}
514+
<link href="{{ url }}" rel="stylesheet">
515+
{% endfor -%}
516+
{% for url in assets.collect_js() -%}
517+
<script src="{{ url }}" type="module"></script>
518+
{% endfor -%}
519+
<div>{{ content }}</div>
520+
""")
521+
522+
source = """
523+
{# import "layout.jinja" as Layout #}
524+
{# css "main.css", "/static/common/main.css" #}
525+
{# js "main.js" #}
526+
<Layout>Hello</Layout>
527+
"""
528+
529+
cat = Catalog(folder)
530+
html = cat.render_string(source)
531+
print(html)
532+
assert html.strip() == """
533+
<link href="main.css" rel="stylesheet">
534+
<link href="/static/common/main.css" rel="stylesheet">
535+
<link href="layout.css" rel="stylesheet">
536+
<script src="main.js" type="module"></script>
537+
<script src="layout.js" type="module"></script>
538+
<script src="https://example.com/layout.js" type="module"></script>
539+
<div>Hello</div>
540+
""".strip()
541+
542+
342543
def test_recursive_component(folder):
343544
(folder / "recu.jinja").write_text("""
344545
{# import "recu.jinja" as Recu #}

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)