view default/blog/macros.html @ 84:b2ef34e602cf

base, js (websocket), css (main style): dynamic pages implementation, first draft: this patch introduces the browser part of dynamic pages. Dynamic pages work by establishing a websocket between server and the current page, if requested by server (which means that needed arguments are present in template). Once the connection is established, the server can, for now, reload the page, append HTML elements, or receive arbitrary data (without reloading the page, in opposition to data post). If connection can't be established, a popup will be displayed and connection will be retried many times after variable timeouts. The browser will finally give up and display an alert to client if the number of retries is too high (20 for now).
author Goffi <goffi@goffi.org>
date Wed, 03 Jan 2018 01:12:16 +0100
parents f19e9f5e43b0
children 2963996373fa
line wrap: on
line source

{% import 'input/comment.html' as comment with context %}

{% macro show_items(items, comments=False, expanded=false, dates_fmt=none) %}
    {# show items and comments items if present after each item,
        then post form if allow_commenting is set
        @param items(BlogItems): items to show
        @param comments(bool): True items are comments
            if False, a div with "main_article" class will be added
        @param expanded(bool): initial state of items
    #}
    {% if dates_format is undefined %}
        {% set dates_format = dates_fmt or 'short' %}
    {% endif %}
    {% for item in items %}
        {% if not comments %}<div class="main_article">{% endif %}
            {% include 'blog/item.html' %}
        {% if not comments %}</div>{% endif %}

        {# we recursively display comments for all comments nodes (usually there's only one) #}
        {% for comments_items in item.comments_items_list %}
            <button class="comments_btn" onclick="clicked_mh_fix('{{comments_panel|next_gidx}}');clicked_cls(this)">
                <span class='show'>{% trans %}show comments{% endtrans %}</span>
                <span class='hide'>{% trans %}hide comments{% endtrans %}</span>
                ({{comments_items|count}})
            </button>
            <div id="{{comments_panel|cur_gidx}}" class="comments_panel">
                {% if allow_commenting %}
                    <div class="comment_post">
                        {{- comment.comment(service=comments_items.service, node=comments_items.node) -}}
                    </div>
                {% endif %}

                <div class="comments">
                    {{show_items(comments_items, comments=True)}}
                </div>
            </div>

        {% endfor %}

    {% endfor %}
{% endmacro %}