Mercurial > libervia-templates
comparison sat_templates/default/input/xmlui.html @ 147:33c7ce833d3f
install: setup.py fix + moved "default" dir in a "sat_templates" dir:
the merge request at https://bugs.goffi.org/mr/view/3 was a good basis, but not fully working ("default" dir was removed), this patch fixes it, and do some improvments:
- moved "default" in "sat_templates" dir, which correspond to the python module, so it can be found easily from python
- added VERSION, and mercurial hash detection, in the same way as for Cagou and backend
- slight modification of classifiers
- replaces tabs coming from MR by spaces
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 02 Jun 2018 17:25:43 +0200 |
parents | default/input/xmlui.html@eabfb53f7777 |
children |
comparison
equal
deleted
inserted
replaced
146:7dc00829c32f | 147:33c7ce833d3f |
---|---|
1 {% import 'input/field.html' as field %} | |
2 | |
3 {# generate methods #} | |
4 | |
5 {% macro generate_container(cont, config) %} | |
6 {% if cont.type == 'vertical' %} | |
7 {{ vertical_container(cont, config) }} | |
8 {% elif cont.type == 'pairs' %} | |
9 {{ pairs_container(cont, config) }} | |
10 {% elif cont.type == 'label' %} | |
11 {{ label_container(cont, config) }} | |
12 {% endif %} | |
13 {% endmacro %} | |
14 | |
15 {% macro generate_widget(wid, config, id=none) %} | |
16 {% if wid.type == 'text' %} | |
17 {{ text_widget(wid, config, id=id) }} | |
18 {% elif wid.type == 'label' %} | |
19 {{ label_widget(wid, config) }} | |
20 {% elif wid.type == 'string' %} | |
21 {{ string_widget(wid, config, id=id) }} | |
22 {% elif wid.type == 'jid' %} | |
23 {# TODO: proper JID widget #} | |
24 {{ string_widget(wid, config, id=id) }} | |
25 {% elif wid.type == 'textbox' %} | |
26 {{ textbox_widget(wid, config, id=id) }} | |
27 {% elif wid.type == 'list' %} | |
28 {{ list_widget(wid, config, id=id) }} | |
29 {% endif %} | |
30 {% endmacro %} | |
31 | |
32 {% macro generate_children(cont, config) %} | |
33 {% for child in cont.children %} | |
34 {% if child.category == 'container' %} | |
35 {{ generate_container(child, config) }} | |
36 {% else %} | |
37 {{ generate_widget(child, config) }} | |
38 {% endif %} | |
39 {% endfor %} | |
40 | |
41 {% endmacro %} | |
42 | |
43 {% macro generate(xmlui, form=true, filters=none, attributes=none) %} | |
44 {# generate HTML from XMLUI | |
45 @param xmlui(template_xmlui.XMLUIPanel): xmlui to use | |
46 @param form(bool): if true will generate form elements | |
47 @param filters(dict,none): filters as expected by item_filter | |
48 @param attributes(dict,none): extra attributes to put on named widgets | |
49 #} | |
50 {% set config = {'form':form, 'filters':filters or {}, 'attrs': attributes or {}} %} | |
51 {{ generate_container(xmlui.main_cont, config) }} | |
52 {% endmacro %} | |
53 | |
54 {% macro generate_table(xmlui_items, fields, formatters, tr_class_fields, on_click) %} | |
55 {# generate a HTML table from requested widgets names | |
56 @param xmlui_items(iterable[unicode]): list of xmlui to show (one per row) | |
57 @param fields(tuple[unicode,unicode]): fields to show (name, label) | |
58 @param formatters(dict): dictionary of templates to format values: | |
59 field_name => template | |
60 if no formatter is set (or None is used) for a field, it will be used unmodified. | |
61 current xmlui items will be set as "item" key | |
62 @param tr_class_fields(iterable[unicode]): name of fields to use as class | |
63 class will be "{name}_{value}" where name is field name, and value field value | |
64 all lowercase/stripped | |
65 @param on_click(data_objects.OnClick): thing to do when clicking on a row | |
66 #} | |
67 {% if formatters is undefined %} | |
68 {% set formatters = {} %} | |
69 {% endif %} | |
70 {% if on_click is undefined %} | |
71 {% set on_click = {} %} | |
72 {% endif %} | |
73 <table> | |
74 <thead> | |
75 <tr> | |
76 {% for name,label in fields %} | |
77 <th>{{ label }}</th> | |
78 {% endfor %} | |
79 </tr> | |
80 </thead> | |
81 <tbody> | |
82 {% for xmlui in xmlui_items %} | |
83 {% set link=on_click.formatUrl(item=xmlui.widget_value) if on_click.url else none %} | |
84 <tr {{ {'class': xmlui|xmlui_class(tr_class_fields)}|xmlattr }}> | |
85 | |
86 {% for name,label in fields %} | |
87 <td {{ {'class': 'td_'+name}|xmlattr }}> | |
88 {% for value in xmlui.widgets[name].values %} | |
89 <a {{ {'href':link}|xmlattr }}>{{ value|adv_format(formatters.get(name),item=xmlui.widget_value) }}</a> | |
90 {% endfor %} | |
91 </td> | |
92 {% endfor %} | |
93 </tr> | |
94 {% endfor %} | |
95 </tbody> | |
96 </table> | |
97 {% endmacro %} | |
98 | |
99 | |
100 | |
101 | |
102 {% macro generate_list(xmlui_items, fields, formatters, item_class_fields, on_click) %} | |
103 {# generate a list of rendered XMLUI from requested widgets names | |
104 very similar to generate_table but generate a list instead of a tabme | |
105 @param xmlui_items(iterable[unicode]): list of xmlui to show | |
106 @param fields(tuple[unicode,unicode]): fields to show (name, label) | |
107 @param formatters(dict): dictionary of templates to format values: | |
108 field_name => template | |
109 if no formatter is set (or None is used) for a field, it will be used unmodified. | |
110 current xmlui items will be set as "item" key for the template | |
111 @param item_class_fields(iterable[unicode]): name of fields to use as class | |
112 class will be "{name}_{value}" where name is field name, and value field value | |
113 all lowercase/stripped | |
114 @param on_click(data_objects.OnClick): thing to do when clicking on a row | |
115 #} | |
116 {% if formatters is undefined %} | |
117 {% set formatters = {} %} | |
118 {% endif %} | |
119 {% if on_click is undefined %} | |
120 {% set on_click = {} %} | |
121 {% endif %} | |
122 <ul class="xmlui_list"> | |
123 {% for xmlui in xmlui_items %} | |
124 <li> | |
125 {% set link=on_click.formatUrl(item=xmlui.widget_value) if on_click.url else none %} | |
126 <a {{ {'class': xmlui|xmlui_class(item_class_fields), | |
127 'href':link}|xmlattr }}> | |
128 {% for name,label in fields %} | |
129 <span {{ {'class': 'xmlui_field__'+name}|xmlattr }}> | |
130 {% for label in xmlui.widgets.get(name, {}).labels %} | |
131 <span>{{ label|adv_format(formatters.get(name),item=xmlui.widget_value) }}</span> | |
132 {% endfor %} | |
133 </span> | |
134 {% endfor %} | |
135 </a> | |
136 </li> | |
137 {% endfor %} | |
138 </ul> | |
139 {% endmacro %} | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 {# containers #} | |
146 | |
147 {% macro vertical_container(cont, config) %} | |
148 <div class="xmlui_cont xmlui_cont_vertical"> | |
149 {{ generate_children(cont, config) }} | |
150 </div> | |
151 {% endmacro %} | |
152 | |
153 {% macro pairs_container(cont, config) %} | |
154 {# TODO: proper impelmentation (do the same as vertical container for now #} | |
155 <div class="xmlui_cont xmlui_cont_vertical"> | |
156 {{ generate_children(cont, config) }} | |
157 </div> | |
158 {% endmacro %} | |
159 | |
160 {% macro label_container(cont, config) %} | |
161 <div class="xmlui_cont xmlui_cont_vertical"> | |
162 {% for child in cont.children %} | |
163 {% if loop.index is odd %} | |
164 {# label #} | |
165 {% if child.type == 'label' %} | |
166 {% set for_ = ('wid_' + (child.for_name or child.name or '_noname'))|next_gidx %} | |
167 {{ label_widget(child, config, for=for_) }} | |
168 {% endif %} | |
169 {% else %} | |
170 {# widget #} | |
171 {% set id = ('wid_' + (child.name or '_noname'))|cur_gidx %} | |
172 {{ generate_widget(child, config, id=id) }} | |
173 {% endif %} | |
174 {% endfor %} | |
175 </div> | |
176 {% endmacro %} | |
177 | |
178 | |
179 {# widgets #} | |
180 | |
181 {% macro text_widget(wid, config, id=none) %} | |
182 <p class="xmlui_widget xmlui_text" {{ {'id':id}|xmlattr }}> | |
183 {{- wid|item_filter(config.filters)|default('\u00A0',true) -}} | |
184 </p> | |
185 {% endmacro%} | |
186 | |
187 {% macro label_widget(wid, config, for=none) %} | |
188 {% if config.form %} | |
189 <label class="xmlui_widget xmlui_label" {{ {'for':for}|xmlattr }}> | |
190 {{wid|item_filter(config.filters)}} | |
191 </label> | |
192 {% else %} | |
193 <span class="xmlui_widget xmlui_label" {{ {'id':none if not for else 'label_%s'|format(for)}|xmlattr }}>{{wid|item_filter(config.filters)}}</span> | |
194 {% endif %} | |
195 {% endmacro%} | |
196 | |
197 {% macro string_widget(wid, config, id=none) %} | |
198 {% if config.form %} | |
199 <input class="xmlui_widget xmlui_string" type="text" {{ {'name':wid.name, 'id':id, 'value':wid|item_filter(config.filters)}|dict_ext(config.attrs, wid.name)|xmlattr }}> | |
200 {% else %} | |
201 <div class="xmlui_widget xmlui_string" {{ {'id':id}|xmlattr }}> | |
202 {{- wid|item_filter(config.filters)|default('\u00A0',true) -}} | |
203 </div> | |
204 {% endif %} | |
205 {% endmacro%} | |
206 | |
207 {% macro textbox_widget(wid, config, id=none) %} | |
208 {% if config.form %} | |
209 <textarea class="xmlui_widget xmlui_textbox" rows="10" cols="50" {{ {'name':wid.name, 'id':id}|dict_ext(config.attrs, wid.name)|xmlattr }}> | |
210 {{- wid|item_filter(config.filters) -}} | |
211 </textarea> | |
212 {% else %} | |
213 <p class="xmlui_widget xmlui_textbox" {{ {'id':id}|xmlattr }}> | |
214 {{- wid|item_filter(config.filters) -}} | |
215 </p> | |
216 {% endif %} | |
217 {% endmacro%} | |
218 | |
219 {% macro list_widget(wid, config, id=none) %} | |
220 {% if config.form %} | |
221 <select class="xmlui_widget xmlui_list" {{ {'name':wid.name, 'id':id}|dict_ext(config.attrs, wid.name)|xmlattr }}> | |
222 {% for value,label in wid.options %} | |
223 <option {{ {'value':value}|xmlattr }} {{ 'selected' if value in wid.selected }}> | |
224 {{- label -}} | |
225 </option> | |
226 {% endfor %} | |
227 </select> | |
228 {% else %} | |
229 <div class="xmlui_widget xmlui_list" {{ {'id':id}|xmlattr }}> | |
230 {% for value,label in wid.items %} | |
231 <span class="xmlui_list_item value_{{value|attr_escape}}"> | |
232 {{- label -}} | |
233 </span> | |
234 {% endfor %} | |
235 </div> | |
236 {% endif %} | |
237 {% endmacro%} |