@@ -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+
342543def test_recursive_component (folder ):
343544 (folder / "recu.jinja" ).write_text ("""
344545{# import "recu.jinja" as Recu #}
0 commit comments