1
|
|
|
""" |
2
|
|
|
byceps.util.templatefilters |
3
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
4
|
|
|
|
5
|
|
|
Provide and register custom template filters. |
6
|
|
|
|
7
|
|
|
:Copyright: 2006-2021 Jochen Kupperschmidt |
8
|
|
|
:License: Revised BSD (see `LICENSE` file for details) |
9
|
|
|
""" |
10
|
|
|
|
11
|
1 |
|
from flask_babel import gettext |
12
|
1 |
|
from jinja2 import pass_eval_context |
13
|
1 |
|
from jinja2.filters import do_default, do_trim |
14
|
1 |
|
from markupsafe import Markup |
15
|
|
|
|
16
|
1 |
|
from .datetime import format as dateformat |
17
|
1 |
|
from .datetime.timezone import utc_to_local_tz |
18
|
1 |
|
from . import money |
19
|
|
|
|
20
|
|
|
|
21
|
1 |
|
@pass_eval_context |
22
|
|
|
def dim(eval_ctx, value): |
23
|
|
|
"""Render value in a way so that it looks dimmed.""" |
24
|
1 |
|
dimmed = _dim(value) |
25
|
1 |
|
return _wrap_markup_on_autoescape(eval_ctx, dimmed) |
26
|
|
|
|
27
|
|
|
|
28
|
1 |
|
def _dim(value): |
29
|
1 |
|
return f'<span class="dimmed">{value}</span>' |
30
|
|
|
|
31
|
|
|
|
32
|
1 |
|
@pass_eval_context |
33
|
1 |
|
def fallback(eval_ctx, value, fallback=None): |
34
|
1 |
|
defaulted = do_trim(do_default(value, '', True)) |
35
|
1 |
|
if defaulted: |
36
|
1 |
|
result = value |
37
|
|
|
else: |
38
|
1 |
|
if fallback is None: |
39
|
1 |
|
fallback = gettext('not specified') |
40
|
1 |
|
result = _dim(fallback) |
41
|
|
|
|
42
|
1 |
|
return _wrap_markup_on_autoescape(eval_ctx, result) |
43
|
|
|
|
44
|
|
|
|
45
|
1 |
|
def _wrap_markup_on_autoescape(eval_ctx, value): |
46
|
1 |
|
return Markup(value) if eval_ctx.autoescape else value |
47
|
|
|
|
48
|
|
|
|
49
|
1 |
|
def register(app): |
50
|
|
|
"""Make functions available as template filters.""" |
51
|
1 |
|
functions = [ |
52
|
|
|
dateformat.format_custom, |
53
|
|
|
dateformat.format_date_iso, |
54
|
|
|
dateformat.format_date_short, |
55
|
|
|
dateformat.format_date_long, |
56
|
|
|
dateformat.format_datetime_iso, |
57
|
|
|
dateformat.format_datetime_short, |
58
|
|
|
dateformat.format_datetime_long, |
59
|
|
|
dateformat.format_time, |
60
|
|
|
dim, |
61
|
|
|
fallback, |
62
|
|
|
money.format_euro_amount, |
63
|
|
|
utc_to_local_tz, |
64
|
|
|
] |
65
|
|
|
|
66
|
1 |
|
for f in functions: |
67
|
|
|
app.add_template_filter(f) |
68
|
|
|
|