Mercurial > libervia-web
annotate libervia/pages/_browser/template.py @ 1321:eb85ef26cb4a
server: use `bulma` theme as default for default site:
`default` theme is not used for now as real default, because dev work is focusing on bulma
theme, and the default one may be broken. This should (or may not) change in the future.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 01 Aug 2020 16:56:04 +0200 |
parents | c07112ef01cd |
children | 3411ec23c389 |
rev | line source |
---|---|
1298 | 1 """Integrate templating system using nunjucks""" |
2 | |
3 from js_modules.nunjucks import nunjucks | |
4 from browser import window, document | |
5 import javascript | |
6 | |
7 | |
8 safe = nunjucks.runtime.SafeString.new | |
9 env = nunjucks.configure( | |
10 window.templates_root_url, | |
11 { | |
12 'autoescape': True, | |
13 'trimBlocks': True, | |
14 'lstripBlocks': True, | |
15 }) | |
16 | |
17 nunjucks.installJinjaCompat() | |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
18 env.addGlobal("profile", window.profile) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
19 env.addGlobal("csrf_token", window.csrf_token) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
20 # FIXME: integrate gettext or equivalent here |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
21 env.addGlobal("_", lambda txt: txt) |
1298 | 22 |
23 | |
24 class Indexer: | |
25 """Index global to a page""" | |
26 | |
27 def __init__(self): | |
28 self._indexes = {} | |
29 | |
30 def next(self, value): | |
31 if value not in self._indexes: | |
32 self._indexes[value] = 0 | |
33 return 0 | |
34 self._indexes[value] += 1 | |
35 return self._indexes[value] | |
36 | |
37 def current(self, value): | |
38 return self._indexes.get(value) | |
39 | |
40 | |
41 gidx = Indexer() | |
42 # suffix use to avoid collision with IDs generated in static page | |
43 SCRIPT_SUFF = "__script__" | |
44 | |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
45 def escape_html(txt): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
46 return ( |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
47 txt |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
48 .replace('&', '&') |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
49 .replace('<', '<') |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
50 .replace('>', '>') |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
51 .replace('"', '"') |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
52 ) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
53 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
54 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
55 def get_args(n_args, *sig_args, **sig_kwargs): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
56 """Retrieve function args when they are transmitted using nunjucks convention |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
57 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
58 cf. https://mozilla.github.io/nunjucks/templating.html#keyword-arguments |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
59 @param n_args: argument from nunjucks call |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
60 @param sig_args: expected positional arguments |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
61 @param sig_kwargs: expected keyword arguments |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
62 @return: all expected arguments, with default value if not specified in nunjucks |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
63 """ |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
64 # nunjucks set kwargs in last argument |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
65 given_args = list(n_args) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
66 try: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
67 given_kwargs = given_args.pop().to_dict() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
68 except (AttributeError, IndexError): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
69 # we don't have a dict as last argument |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
70 # that happens when there is no keyword argument |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
71 given_args = list(n_args) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
72 given_kwargs = {} |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
73 ret = given_args[:len(sig_args)] |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
74 # we check if we have remaining positional arguments |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
75 # in which case they may be specified in keyword arguments |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
76 for name in sig_args[len(given_args):]: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
77 try: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
78 value = given_kwargs.pop(name) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
79 except KeyError: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
80 raise ValueError(f"missing positional arguments {name!r}") |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
81 ret.append(value) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
82 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
83 extra_pos_args = given_args[len(sig_args):] |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
84 # and now the keyword arguments |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
85 for name, default in sig_kwargs.items(): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
86 if extra_pos_args: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
87 # kw args has been specified with a positional argument |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
88 ret.append(extra_pos_args.pop(0)) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
89 continue |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
90 value = given_kwargs.get(name, default) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
91 ret.append(value) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
92 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
93 return ret |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
94 |
1298 | 95 |
96 def _next_gidx(value): | |
97 """Use next current global index as suffix""" | |
98 next_ = gidx.next(value) | |
99 return f"{value}{SCRIPT_SUFF}" if next_ == 0 else f"{value}_{SCRIPT_SUFF}{next_}" | |
100 | |
101 env.addFilter("next_gidx", _next_gidx) | |
102 | |
103 | |
104 def _cur_gidx(value): | |
105 """Use current current global index as suffix""" | |
106 current = gidx.current(value) | |
107 return f"{value}{SCRIPT_SUFF}" if not current else f"{value}_{SCRIPT_SUFF}{current}" | |
108 | |
109 env.addFilter("cur_gidx", _cur_gidx) | |
110 | |
111 | |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
112 def _xmlattr(d, autospace=True): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
113 if not d: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
114 return |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
115 d = d.to_dict() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
116 ret = [''] if autospace else [] |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
117 for key, value in d.items(): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
118 if value is not None: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
119 ret.append(f'{escape_html(key)}="{escape_html(str(value))}"') |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
120 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
121 return safe(' '.join(ret)) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
122 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
123 env.addFilter("xmlattr", _xmlattr) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
124 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
125 |
1298 | 126 def _tojson(value): |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
127 return safe(escape_html(window.JSON.stringify(value))) |
1298 | 128 |
129 env.addFilter("tojson", _tojson) | |
130 | |
131 | |
132 def _icon_use(name, cls=""): | |
133 kwargs = cls.to_dict() | |
134 cls = kwargs.get('cls') | |
135 return safe( | |
136 '<svg class="svg-icon{cls}" xmlns="http://www.w3.org/2000/svg" ' | |
137 'viewBox="0 0 100 100">\n' | |
138 ' <use href="#{name}"/>' | |
139 '</svg>\n'.format(name=name, cls=(" " + cls) if cls else "") | |
140 ) | |
141 | |
142 env.addGlobal("icon", _icon_use) | |
143 | |
144 | |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
145 def _date_fmt( |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
146 timestamp, *args |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
147 ): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
148 """Date formatting |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
149 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
150 cf. sat.tools.common.date_utils for arguments details |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
151 """ |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
152 fmt, date_only, auto_limit, auto_old_fmt, auto_new_fmt = get_args( |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
153 args, fmt="short", date_only=False, auto_limit=7, auto_old_fmt="short", |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
154 auto_new_fmt="relative", |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
155 ) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
156 from js_modules.moment import moment |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
157 date = moment.unix(timestamp) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
158 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
159 if fmt == "auto_day": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
160 fmt, auto_limit, auto_old_fmt, auto_new_fmt = "auto", 0, "short", "HH:mm" |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
161 if fmt == "auto": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
162 limit = moment().startOf('day').subtract(auto_limit, 'days') |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
163 m_fmt = auto_old_fmt if date < limit else auto_new_fmt |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
164 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
165 if fmt == "short": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
166 m_fmt = "DD/MM/YY" if date_only else "DD/MM/YY HH:mm" |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
167 elif fmt == "medium": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
168 m_fmt = "ll" if date_only else "lll" |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
169 elif fmt == "long": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
170 m_fmt = "LL" if date_only else "LLL" |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
171 elif fmt == "full": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
172 m_fmt = "dddd, LL" if date_only else "LLLL" |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
173 elif fmt == "relative": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
174 return date.fromNow() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
175 elif fmt == "iso": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
176 if date_only: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
177 m_fmt == "YYYY-MM-DD" |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
178 else: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
179 return date.toISOString() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
180 else: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
181 raise NotImplementedError("free format is not implemented yet") |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
182 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
183 return date.format(m_fmt) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
184 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
185 env.addFilter("date_fmt", _date_fmt) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
186 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
187 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
188 class I18nExtension: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
189 """Extension to handle the {% trans %}{% endtrans %} statement""" |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
190 # FIXME: for now there is no translation, this extension only returns the string |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
191 # unmodified |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
192 tags = ['trans'] |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
193 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
194 def parse(self, parser, nodes, lexer): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
195 tok = parser.nextToken() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
196 args = parser.parseSignature(None, True) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
197 parser.advanceAfterBlockEnd(tok.value) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
198 body = parser.parseUntilBlocks('endtrans') |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
199 parser.advanceAfterBlockEnd() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
200 return nodes.CallExtension.new(self._js_ext, 'run', args, [body]) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
201 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
202 def run(self, context, *args): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
203 body = args[-1] |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
204 return body() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
205 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
206 @classmethod |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
207 def install(cls, env): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
208 ext = cls() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
209 ext_dict = { |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
210 "tags": ext.tags, |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
211 "parse": ext.parse, |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
212 "run": ext.run |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
213 } |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
214 ext._js_ext = javascript.pyobj2jsobj(ext_dict) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
215 env.addExtension(cls.__name__, ext._js_ext) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
216 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
217 I18nExtension.install(env) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
218 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
219 |
1298 | 220 class Template: |
221 | |
222 def __init__(self, tpl_name): | |
223 self._tpl = env.getTemplate(tpl_name, True) | |
224 | |
225 def render(self, context): | |
226 return self._tpl.render(context) | |
227 | |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
228 def get_elt(self, context=None): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
229 if context is None: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
230 context = {} |
1298 | 231 raw_html = self.render(context) |
232 template_elt = document.createElement('template') | |
233 template_elt.innerHTML = raw_html | |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
234 return template_elt.content.firstElementChild |