view default/input/xmlui.html @ 47:7d5cca978eeb

input/xmlui: XMLUI generation first draft
author Goffi <goffi@goffi.org>
date Sun, 24 Sep 2017 16:48:15 +0200
parents
children dfef430a26ef
line wrap: on
line source

{% import 'input/field.html' as field %}

{# generate methods #}

{% macro generate_container(cont) %}
    {% if cont.type == 'vertical' %}
        {{ vertical_container(cont) }}
    {% elif cont.type == 'pairs' %}
        {{ pairs_container(cont) }}
    {% elif cont.type == 'label' %}
        {{ label_container(cont) }}
    {% endif %}
{% endmacro %}

{% macro generate_widget(wid, id=none) %}
    {% if wid.type == 'text' %}
        {{ text_widget(wid, id=id) }}
    {% elif wid.type == 'label' %}
        {{ label_widget(wid) }}
    {% elif wid.type == 'string' %}
        {{ string_widget(wid, id=id) }}
    {% elif wid.type == 'textbox' %}
        {{ textbox_widget(wid, id=id) }}
    {% elif wid.type == 'list' %}
        {{ list_widget(wid, id=id) }}
    {% endif %}
{% endmacro %}

{% macro generate_children(cont) %}
    {% for child in cont.children %}
        {% if child.category == 'container' %}
            {{ generate_container(child) }}
        {% else %}
            {{ generate_widget(child) }}
        {% endif %}
    {% endfor %}

{% endmacro %}

{% macro generate(xmlui) %}
    {{ generate_container(xmlui.main_cont) }}
{% endmacro %}

{# containers #}

{% macro vertical_container(cont) %}
    <div class="xmlui_cont xmlui_cont_vertical">
        {{ generate_children(cont) }}
    </div>
{% endmacro %}

{% macro pairs_container(cont) %}
    {# TODO: proper impelmentation (do the same as vertical container for now #}
    <div class="xmlui_cont xmlui_cont_vertical">
        {{ generate_children(cont) }}
    </div>
{% endmacro %}

{% macro label_container(cont) %}
    <div class="xmlui_cont xmlui_cont_vertical">
        {% 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) }}
                {% endif %}
            {% else %}
                {# widget #}
                {% set id = 'widget'|cur_gidx %}
                {{ generate_widget(child, id=id) }}
            {% endif %}
        {% endfor %}
    </div>
{% endmacro %}


{# widgets #}

{% macro text_widget(wid, id=none) %}
    <p class="xmlui_widget xmlui_text" {{ {'id':id}|xmlattr }}>
        {{wid.value}}
    </p>
{% endmacro%}

{% macro label_widget(wid, for=none) %}
    <label class="xmlui_widget xmlui_label"{{ {'for':for}|xmlattr }}>
        {{wid.value}}
    </label>
{% endmacro%}

{% macro string_widget(wid, id=none) %}
    <input class="xmlui_widget xmlui_string" type="text" {{ {'name':wid.name, 'id':id, 'value':wid.value}|xmlattr }}>
{% endmacro%}

{% macro textbox_widget(wid, id=none) %}
    <textarea class="xmlui_widget xmlui_textbox" rows="10" cols="50" {{ {'name':wid.name, 'id':id}|xmlattr }}>
        {{- wid.value -}}
    </textarea>
{% endmacro%}

{% macro list_widget(wid, id=none) %}
    <select class="xmlui_widget xmlui_list"{{ {'name':wid.name, 'id':id}|xmlattr }}>
        {% for value,label in wid.options %}
            <option {{ {'value':value}|xmlattr }} {{ 'selected' if value == wid.selected }}>{{label}}</option>
        {% endfor %}
    </select>
{% endmacro%}