view default/ticket/item.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 18d00a8afc4d
children da8f1ba9034d
line wrap: on
line source

{# display a single ticket

    @variable item(xmlui_item): ticket to display
    @variable comments(data_object.BlogItems): comments of the ticket
    @variable comments_service(unicode): service for adding comments
    @variable comments_node(unicode): node for adding comments
#}

{% set category_menu = [('tickets_list', url_tickets_list),
                         ('ticket_new', url_tickets_new)] %}
{% if not embedded %}{% extends 'base/base.html' %}{% endif %}
{% import 'input/xmlui.html' as xmlui with context %}
{% import 'blog/macros.html' as blog with context %}
{% import 'input/comment.html' as comment with context %}

{% block title %}{{item|adv_format('[{value.widget_value.id}] {value.widget_value.title}') }}{% endblock %}

{% block confirm_message %}
    {% trans %}Your comment has been sent{% endtrans %}
{% endblock confirm_message %}

{% block body %}
<div id="{{ item.widget_value['id'] }}" class="view single ticket box">
    {{ xmlui.generate(item,
        form=false,
        filters={'created': {'filters': ['date_fmt'], 'filters_args':[{'fmt': 'short'}]},
                 'updated': {'filters': ['date_fmt'], 'filters_args':[{'fmt': 'short'}]},
                 'body': {'filters': ['urlize'], 'filters_args':[{'nofollow': True, 'rel': 'noopener noreferrer'}]}},
        )}}
</div>
{% if comments is defined %}
<div id="blog_items">
    {{ blog.show_items(comments|reverse, expanded=true) }}
</div>
{% endif %}
{% if comments_node is defined %}
    <div class="comment_post">
        {{- comment.comment_or_login(service=comments_service, node=comments_node) -}}
    </div>
{% endif %}
{% endblock body %}