Mercurial > libervia-web
annotate libervia/pages/_browser/template.py @ 1466:cff720e26089
pages (blog/view): activate pagination when a single item is shown:
`previous_page_url` and `next_page_url` are set when `item_id` is used. For now, they are
both activated even if there is no item before or after, as it would request to make extra
request to check it. This may be improved in 0.9 by using internal cache.
fix 399
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 30 Sep 2021 17:04:22 +0200 |
parents | 3411ec23c389 |
children | 106bae41f5c8 |
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, | |
1333
3411ec23c389
browser (template): use nunjucks cache
Goffi <goffi@goffi.org>
parents:
1306
diff
changeset
|
15 'web': {'useCache': True}, |
1298 | 16 }) |
17 | |
18 nunjucks.installJinjaCompat() | |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
19 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
|
20 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
|
21 # 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
|
22 env.addGlobal("_", lambda txt: txt) |
1298 | 23 |
24 | |
25 class Indexer: | |
26 """Index global to a page""" | |
27 | |
28 def __init__(self): | |
29 self._indexes = {} | |
30 | |
31 def next(self, value): | |
32 if value not in self._indexes: | |
33 self._indexes[value] = 0 | |
34 return 0 | |
35 self._indexes[value] += 1 | |
36 return self._indexes[value] | |
37 | |
38 def current(self, value): | |
39 return self._indexes.get(value) | |
40 | |
41 | |
42 gidx = Indexer() | |
43 # suffix use to avoid collision with IDs generated in static page | |
44 SCRIPT_SUFF = "__script__" | |
45 | |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
46 def escape_html(txt): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
47 return ( |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
48 txt |
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 .replace('"', '"') |
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 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
56 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
|
57 """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
|
58 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
59 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
|
60 @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
|
61 @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
|
62 @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
|
63 @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
|
64 """ |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
65 # 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
|
66 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
|
67 try: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
68 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
|
69 except (AttributeError, IndexError): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
70 # 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
|
71 # 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
|
72 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
|
73 given_kwargs = {} |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
74 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
|
75 # 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
|
76 # 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
|
77 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
|
78 try: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
79 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
|
80 except KeyError: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
81 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
|
82 ret.append(value) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
83 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
84 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
|
85 # 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
|
86 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
|
87 if extra_pos_args: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
88 # 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
|
89 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
|
90 continue |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
91 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
|
92 ret.append(value) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
93 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
94 return ret |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
95 |
1298 | 96 |
97 def _next_gidx(value): | |
98 """Use next current global index as suffix""" | |
99 next_ = gidx.next(value) | |
100 return f"{value}{SCRIPT_SUFF}" if next_ == 0 else f"{value}_{SCRIPT_SUFF}{next_}" | |
101 | |
102 env.addFilter("next_gidx", _next_gidx) | |
103 | |
104 | |
105 def _cur_gidx(value): | |
106 """Use current current global index as suffix""" | |
107 current = gidx.current(value) | |
108 return f"{value}{SCRIPT_SUFF}" if not current else f"{value}_{SCRIPT_SUFF}{current}" | |
109 | |
110 env.addFilter("cur_gidx", _cur_gidx) | |
111 | |
112 | |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
113 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
|
114 if not d: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
115 return |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
116 d = d.to_dict() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
117 ret = [''] if autospace else [] |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
118 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
|
119 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
|
120 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
|
121 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
122 return safe(' '.join(ret)) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
123 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
124 env.addFilter("xmlattr", _xmlattr) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
125 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
126 |
1298 | 127 def _tojson(value): |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
128 return safe(escape_html(window.JSON.stringify(value))) |
1298 | 129 |
130 env.addFilter("tojson", _tojson) | |
131 | |
132 | |
133 def _icon_use(name, cls=""): | |
134 kwargs = cls.to_dict() | |
135 cls = kwargs.get('cls') | |
136 return safe( | |
137 '<svg class="svg-icon{cls}" xmlns="http://www.w3.org/2000/svg" ' | |
138 'viewBox="0 0 100 100">\n' | |
139 ' <use href="#{name}"/>' | |
140 '</svg>\n'.format(name=name, cls=(" " + cls) if cls else "") | |
141 ) | |
142 | |
143 env.addGlobal("icon", _icon_use) | |
144 | |
145 | |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
146 def _date_fmt( |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
147 timestamp, *args |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
148 ): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
149 """Date formatting |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
150 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
151 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
|
152 """ |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
153 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
|
154 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
|
155 auto_new_fmt="relative", |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
156 ) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
157 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
|
158 date = moment.unix(timestamp) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
159 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
160 if fmt == "auto_day": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
161 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
|
162 if fmt == "auto": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
163 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
|
164 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
|
165 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
166 if fmt == "short": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
167 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
|
168 elif fmt == "medium": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
169 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
|
170 elif fmt == "long": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
171 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
|
172 elif fmt == "full": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
173 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
|
174 elif fmt == "relative": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
175 return date.fromNow() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
176 elif fmt == "iso": |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
177 if date_only: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
178 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
|
179 else: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
180 return date.toISOString() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
181 else: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
182 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
|
183 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
184 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
|
185 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
186 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
|
187 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
188 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
189 class I18nExtension: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
190 """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
|
191 # 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
|
192 # unmodified |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
193 tags = ['trans'] |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
194 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
195 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
|
196 tok = parser.nextToken() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
197 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
|
198 parser.advanceAfterBlockEnd(tok.value) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
199 body = parser.parseUntilBlocks('endtrans') |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
200 parser.advanceAfterBlockEnd() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
201 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
|
202 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
203 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
|
204 body = args[-1] |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
205 return body() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
206 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
207 @classmethod |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
208 def install(cls, env): |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
209 ext = cls() |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
210 ext_dict = { |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
211 "tags": ext.tags, |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
212 "parse": ext.parse, |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
213 "run": ext.run |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
214 } |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
215 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
|
216 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
|
217 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
218 I18nExtension.install(env) |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
219 |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
220 |
1298 | 221 class Template: |
222 | |
223 def __init__(self, tpl_name): | |
224 self._tpl = env.getTemplate(tpl_name, True) | |
225 | |
226 def render(self, context): | |
227 return self._tpl.render(context) | |
228 | |
1306
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
229 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
|
230 if context is None: |
c07112ef01cd
browser (template): adapted filters/global/extensions to manage SàT templates:
Goffi <goffi@goffi.org>
parents:
1298
diff
changeset
|
231 context = {} |
1298 | 232 raw_html = self.render(context) |
233 template_elt = document.createElement('template') | |
234 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
|
235 return template_elt.content.firstElementChild |