# HG changeset patch # User Goffi # Date 1509123325 -7200 # Node ID dfef430a26ef1843afa51f9926c41ea0097fc45b # Parent 87680eed9e250bd9296004db029191500c14c9c1 input(xmlui): added a macro to generate a table from list of XMLUI items + many improvments in item generation (see docstrings) diff -r 87680eed9e25 -r dfef430a26ef default/input/xmlui.html --- a/default/input/xmlui.html Fri Oct 27 18:54:01 2017 +0200 +++ b/default/input/xmlui.html Fri Oct 27 18:55:25 2017 +0200 @@ -2,73 +2,121 @@ {# generate methods #} -{% macro generate_container(cont) %} +{% macro generate_container(cont, config) %} {% if cont.type == 'vertical' %} - {{ vertical_container(cont) }} + {{ vertical_container(cont, config) }} {% elif cont.type == 'pairs' %} - {{ pairs_container(cont) }} + {{ pairs_container(cont, config) }} {% elif cont.type == 'label' %} - {{ label_container(cont) }} + {{ label_container(cont, config) }} {% endif %} {% endmacro %} -{% macro generate_widget(wid, id=none) %} +{% macro generate_widget(wid, config, id=none) %} {% if wid.type == 'text' %} - {{ text_widget(wid, id=id) }} + {{ text_widget(wid, config, id=id) }} {% elif wid.type == 'label' %} - {{ label_widget(wid) }} + {{ label_widget(wid, config) }} {% elif wid.type == 'string' %} - {{ string_widget(wid, id=id) }} + {{ string_widget(wid, config, id=id) }} {% elif wid.type == 'textbox' %} - {{ textbox_widget(wid, id=id) }} + {{ textbox_widget(wid, config, id=id) }} {% elif wid.type == 'list' %} - {{ list_widget(wid, id=id) }} + {{ list_widget(wid, config, id=id) }} {% endif %} {% endmacro %} -{% macro generate_children(cont) %} +{% macro generate_children(cont, config) %} {% for child in cont.children %} {% if child.category == 'container' %} - {{ generate_container(child) }} + {{ generate_container(child, config) }} {% else %} - {{ generate_widget(child) }} + {{ generate_widget(child, config) }} {% endif %} {% endfor %} {% endmacro %} -{% macro generate(xmlui) %} - {{ generate_container(xmlui.main_cont) }} +{% macro generate(xmlui, form=true, filters=none) %} +{# generate HTML from XMLUI + @param xmlui(template_xmlui.XMLUIPanel): xmlui to use + @param form(bool): if true will generate form elements + @param filters(dict,none): filters as expected by item_filter +#} + {% set config = {'form':form, 'filters':filters or {}} %} + {{ generate_container(xmlui.main_cont, config) }} +{% endmacro %} + +{% macro generate_table(xmlui_items, fields, formatters, tr_class_fields, on_click) %} +{# generate a HTML table from requested widgets names + @param xmlui_items(iterable[unicode]): list of xmlui to show (one per row) + @param fields(tuple[unicode,unicode]): fields to show (name, label) + @param formatters(dict): dictionary of templates to format values: + field_name => template + if no formatter is set (or None is used) for a field, it will be used unmodified. + current xmlui items will be set as "item" key + @param tr_class_fields(iterable[unicode]): name of fields to use as class + class will be "{name}_{value}" where name is field name, and value field value + all lowercase/stripped + @param on_click(data_objects.OnClick): thing to do when clicking on a row +#} + {% if formatters is undefined %} + {% set formatters = {} %} + {% endif %} + + + + {% for name,label in fields %} + + {% endfor %} + + + + {% for xmlui in xmlui_items %} + {% set link=on_click.formatUrl(xmlui.widget_value) if on_click.url else none %} + + + {% for name,label in fields %} + + {% endfor %} + + {% endfor %} + +
{{ label }}
+ {% for value in xmlui.widgets[name].values %} + {{ value|adv_format(formatters.get(name),item=xmlui.widget_value) }} + {% endfor %} +
{% endmacro %} {# containers #} -{% macro vertical_container(cont) %} +{% macro vertical_container(cont, config) %}
- {{ generate_children(cont) }} + {{ generate_children(cont, config) }}
{% endmacro %} -{% macro pairs_container(cont) %} +{% macro pairs_container(cont, config) %} {# TODO: proper impelmentation (do the same as vertical container for now #}
- {{ generate_children(cont) }} + {{ generate_children(cont, config) }}
{% endmacro %} -{% macro label_container(cont) %} +{% macro label_container(cont, config) %}
{% for child in cont.children %} {% if loop.index is odd %} {# label #} - {% set id = 'widget'|next_gidx %} {% if child.type == 'label' %} - {{ label_widget(child, for=id) }} + {% set for_ = ('wid_' + (child.for_name or child.name or '_noname'))|next_gidx %} + {{ label_widget(child, config, for=for_) }} {% endif %} {% else %} {# widget #} - {% set id = 'widget'|cur_gidx %} - {{ generate_widget(child, id=id) }} + {% set id = ('wid_' + (child.name or '_noname'))|cur_gidx %} + {{ generate_widget(child, config, id=id) }} {% endif %} {% endfor %}
@@ -77,32 +125,60 @@ {# widgets #} -{% macro text_widget(wid, id=none) %} +{% macro text_widget(wid, config, id=none) %}

- {{wid.value}} + {{- wid|item_filter(config.filters)|default('\u00A0',true) -}}

{% endmacro%} -{% macro label_widget(wid, for=none) %} - +{% macro label_widget(wid, config, for=none) %} + {% if config.form %} + + {% else %} + {{wid|item_filter(config.filters)}} + {% endif %} {% endmacro%} -{% macro string_widget(wid, id=none) %} - +{% macro string_widget(wid, config, id=none) %} + {% if config.form %} + + {% else %} +
+ {{- wid|item_filter(config.filters)|default('\u00A0',true) -}} +
+ {% endif %} {% endmacro%} -{% macro textbox_widget(wid, id=none) %} - +{% macro textbox_widget(wid, config, id=none) %} + {% if config.form %} + + {% else %} +

+ {{- wid|item_filter(config.filters) -}} +

+ {% endif %} {% endmacro%} -{% macro list_widget(wid, id=none) %} - +{% macro list_widget(wid, config, id=none) %} + {% if config.form %} + + {% else %} +
+ {% for value,label in wid.items %} + + {{- label -}} + + {% endfor %} +
+ {% endif %} {% endmacro%}