|
// retoor <retoor@molodetz.nl>
|
|
|
|
import "jinja" for Environment, DictLoader
|
|
|
|
System.print("=" * 60)
|
|
System.print("JINJA BASICS - Variables, Filters, and Expressions")
|
|
System.print("=" * 60)
|
|
|
|
var templates = {
|
|
"variable_simple": "Hello, {{ name }}!",
|
|
"variable_nested": "User: {{ user.name }}, Age: {{ user.age }}, City: {{ user.address.city }}",
|
|
"variable_subscript": "First item: {{ items[0] }}, Last item: {{ items[-1] }}",
|
|
"variable_default": "Name: {{ name|default(\"Anonymous\") }}, Role: {{ role|default(\"Guest\") }}",
|
|
|
|
"literal_string": "String: {{ \"hello world\" }}",
|
|
"literal_number": "Number: {{ 42 }}, Float: {{ 3.14159 }}",
|
|
"literal_bool": "True: {{ true }}, False: {{ false }}",
|
|
"literal_list": "List: {{ [1, 2, 3]|join(\", \") }}",
|
|
|
|
"expr_math": "Addition: {{ 10 + 5 }}, Subtraction: {{ 10 - 5 }}, Multiplication: {{ 10 * 5 }}, Division: {{ 10 / 4 }}",
|
|
"expr_modulo": "Modulo: {{ 17 \% 5 }}",
|
|
"expr_negative": "Negative: {{ -42 }}, Double negative: {{ --42 }}",
|
|
"expr_parens": "With parens: {{ (2 + 3) * 4 }}, Without: {{ 2 + 3 * 4 }}",
|
|
"expr_concat": "Concat: {{ first ~ \" \" ~ last }}",
|
|
|
|
"expr_compare": "Equal: {{ 5 == 5 }}, Not equal: {{ 5 != 3 }}, Less: {{ 3 < 5 }}, Greater: {{ 5 > 3 }}",
|
|
"expr_logic": "And: {{ true and false }}, Or: {{ true or false }}, Not: {{ not false }}",
|
|
"expr_in": "In list: {{ 2 in [1, 2, 3] }}, In string: {{ \"o\" in \"hello\" }}",
|
|
|
|
"filter_upper": "{{ text|upper }}",
|
|
"filter_lower": "{{ text|lower }}",
|
|
"filter_capitalize": "{{ text|capitalize }}",
|
|
"filter_title": "{{ text|title }}",
|
|
"filter_trim": "[{{ text|trim }}]",
|
|
"filter_length": "Length: {{ items|length }}",
|
|
"filter_first": "First: {{ items|first }}",
|
|
"filter_last": "Last: {{ items|last }}",
|
|
"filter_reverse": "Reversed: {{ items|reverse|join(\", \") }}",
|
|
"filter_sort": "Sorted: {{ items|sort|join(\", \") }}",
|
|
"filter_unique": "Unique: {{ items|unique|join(\", \") }}",
|
|
"filter_join": "Joined: {{ items|join(\" | \") }}",
|
|
"filter_replace": "{{ text|replace(\"world\", \"universe\") }}",
|
|
"filter_truncate": "{{ text|truncate(20) }}",
|
|
"filter_abs": "Absolute: {{ num|abs }}",
|
|
"filter_round": "Rounded: {{ num|round(2) }}",
|
|
"filter_int": "Integer: {{ num|int }}",
|
|
"filter_chain": "{{ text|trim|upper|replace(\"HELLO\", \"HI\") }}",
|
|
|
|
"filter_batch": "{\% for row in items|batch(3) \%}[{\% for i in row \%}{{ i }}{\% endfor \%}]{\% endfor \%}",
|
|
"filter_map": "Names: {{ users|map(\"name\")|join(\", \") }}",
|
|
"filter_sum": "Sum: {{ numbers|sum }}",
|
|
"filter_min": "Min: {{ numbers|min }}",
|
|
"filter_max": "Max: {{ numbers|max }}",
|
|
|
|
"filter_striptags": "{{ html|striptags }}",
|
|
"filter_urlencode": "{{ text|urlencode }}",
|
|
"filter_wordcount": "Word count: {{ text|wordcount }}",
|
|
"filter_center": "[{{ text|center(20) }}]",
|
|
|
|
"escape_auto": "Auto-escaped: {{ html }}",
|
|
"escape_safe": "Safe (no escape): {{ html|safe }}",
|
|
|
|
"tojson_simple": "{{ data|tojson }}",
|
|
"tojson_complex": "{{ complex|tojson }}"
|
|
}
|
|
|
|
var env = Environment.new(DictLoader.new(templates))
|
|
|
|
System.print("\n--- Simple Variables ---")
|
|
System.print(env.getTemplate("variable_simple").render({"name": "World"}))
|
|
System.print(env.getTemplate("variable_nested").render({
|
|
"user": {
|
|
"name": "Alice",
|
|
"age": 28,
|
|
"address": {"city": "New York", "zip": "10001"}
|
|
}
|
|
}))
|
|
System.print(env.getTemplate("variable_subscript").render({"items": ["apple", "banana", "cherry", "date"]}))
|
|
System.print(env.getTemplate("variable_default").render({"name": "Bob"}))
|
|
|
|
System.print("\n--- Literals ---")
|
|
System.print(env.getTemplate("literal_string").render({}))
|
|
System.print(env.getTemplate("literal_number").render({}))
|
|
System.print(env.getTemplate("literal_bool").render({}))
|
|
System.print(env.getTemplate("literal_list").render({}))
|
|
|
|
System.print("\n--- Mathematical Expressions ---")
|
|
System.print(env.getTemplate("expr_math").render({}))
|
|
System.print(env.getTemplate("expr_modulo").render({}))
|
|
System.print(env.getTemplate("expr_negative").render({}))
|
|
System.print(env.getTemplate("expr_parens").render({}))
|
|
System.print(env.getTemplate("expr_concat").render({"first": "John", "last": "Doe"}))
|
|
|
|
System.print("\n--- Comparison and Logic ---")
|
|
System.print(env.getTemplate("expr_compare").render({}))
|
|
System.print(env.getTemplate("expr_logic").render({}))
|
|
System.print(env.getTemplate("expr_in").render({}))
|
|
|
|
System.print("\n--- String Filters ---")
|
|
System.print(env.getTemplate("filter_upper").render({"text": "hello world"}))
|
|
System.print(env.getTemplate("filter_lower").render({"text": "HELLO WORLD"}))
|
|
System.print(env.getTemplate("filter_capitalize").render({"text": "hello world"}))
|
|
System.print(env.getTemplate("filter_title").render({"text": "hello world"}))
|
|
System.print(env.getTemplate("filter_trim").render({"text": " padded string "}))
|
|
System.print(env.getTemplate("filter_replace").render({"text": "hello world"}))
|
|
System.print(env.getTemplate("filter_truncate").render({"text": "This is a very long string that should be truncated"}))
|
|
System.print(env.getTemplate("filter_chain").render({"text": " hello world "}))
|
|
|
|
System.print("\n--- List Filters ---")
|
|
System.print(env.getTemplate("filter_length").render({"items": [1, 2, 3, 4, 5]}))
|
|
System.print(env.getTemplate("filter_first").render({"items": ["a", "b", "c"]}))
|
|
System.print(env.getTemplate("filter_last").render({"items": ["a", "b", "c"]}))
|
|
System.print(env.getTemplate("filter_reverse").render({"items": ["a", "b", "c"]}))
|
|
System.print(env.getTemplate("filter_sort").render({"items": ["cherry", "apple", "banana"]}))
|
|
System.print(env.getTemplate("filter_unique").render({"items": ["a", "b", "a", "c", "b", "d"]}))
|
|
System.print(env.getTemplate("filter_join").render({"items": ["one", "two", "three"]}))
|
|
System.print(env.getTemplate("filter_batch").render({"items": [1, 2, 3, 4, 5, 6, 7, 8, 9]}))
|
|
|
|
System.print("\n--- Numeric Filters ---")
|
|
System.print(env.getTemplate("filter_abs").render({"num": -42}))
|
|
System.print(env.getTemplate("filter_round").render({"num": 3.14159}))
|
|
System.print(env.getTemplate("filter_int").render({"num": 3.99}))
|
|
System.print(env.getTemplate("filter_sum").render({"numbers": [1, 2, 3, 4, 5]}))
|
|
System.print(env.getTemplate("filter_min").render({"numbers": [5, 2, 8, 1, 9]}))
|
|
System.print(env.getTemplate("filter_max").render({"numbers": [5, 2, 8, 1, 9]}))
|
|
|
|
System.print("\n--- Object Filters ---")
|
|
System.print(env.getTemplate("filter_map").render({
|
|
"users": [
|
|
{"name": "Alice", "age": 25},
|
|
{"name": "Bob", "age": 30},
|
|
{"name": "Charlie", "age": 35}
|
|
]
|
|
}))
|
|
|
|
System.print("\n--- HTML/Text Filters ---")
|
|
System.print(env.getTemplate("filter_striptags").render({"html": "<p>Hello <b>World</b></p>"}))
|
|
System.print(env.getTemplate("filter_urlencode").render({"text": "hello world & more"}))
|
|
System.print(env.getTemplate("filter_wordcount").render({"text": "The quick brown fox jumps"}))
|
|
System.print(env.getTemplate("filter_center").render({"text": "Hi"}))
|
|
|
|
System.print("\n--- HTML Escaping ---")
|
|
System.print(env.getTemplate("escape_auto").render({"html": "<script>alert('XSS')</script>"}))
|
|
System.print(env.getTemplate("escape_safe").render({"html": "<b>Bold text</b>"}))
|
|
|
|
System.print("\n--- JSON Output ---")
|
|
System.print(env.getTemplate("tojson_simple").render({"data": {"name": "Test", "value": 42}}))
|
|
System.print(env.getTemplate("tojson_complex").render({
|
|
"complex": {
|
|
"string": "hello",
|
|
"number": 123,
|
|
"bool": true,
|
|
"null_val": null,
|
|
"array": [1, 2, 3],
|
|
"nested": {"a": 1, "b": 2}
|
|
}
|
|
}))
|
|
|
|
System.print("\n" + "=" * 60)
|
|
System.print("End of Basics Demo")
|
|
System.print("=" * 60)
|