datatracker/ietf/templates/liaisons/detail.html
Lars Eggert 5598762608
fix: add more HTML validation & fixes (#3891)
* Update vnu.jar

* Fix py2 -> py3 issue

* Run pyupgrade

* test: Add default-jdk to images

* test: Add option to also validate HTML with vnu.jar

Since it's already installed in bin. Don't do this by default, since it
increases the time needed for tests by ~50%.

* fix: Stop the urlizer from urlizing in linkified mailto: text

* More HTML fixes

* More HTML validation fixes

* And more HTML fixes

* Fix floating badge

* Ignore unicode errors

* Only URLize docs that are existing

* Final fixes

* Don't URLize everything during test-crawl

* Feed HTML into vnu using python rather than Java to speed things up

* Allow test-crawl to start vnu on a different port

* Increase retry count to vnu. Restore batch size to 30.

* More HTML validation fixes

* Use urllib3 to make requests to vnu, since overriding requests_mock is tricky

* Undo commit of unmodified file

* Also urlize ftp links

* Fix matching of file name

* More HTML fixes

* Add `is_valid_url` filter

* weekday -> data-weekday

* urlencode URLs

* Add and use vnu_fmt_message. Bump vnu max buffer.

* Simplify doc_exists

* Don't add tab link to mail archive if the URL is invalid

* Run urlize_ietf_docs before linkify

Reduces the possibility of generating incorrect HTML

* Undo superfluous change

* Runner fixes

* Consolidate vnu message filtering into vnu_filter_message

* Correctly handle multiple persons with same name

* Minimze diff

* Fix HTML nits

* Print source snippet in vnu_fmt_message

* Only escape if there is something to escape

* Fix snippet

* Skip crufty old IPR declarations

* Only include modal when needed. Add handles.

* Fix wordwrap+linkification

* Update ietf/doc/templatetags/ietf_filters.py

* Update ietf/doc/templatetags/tests_ietf_filters.py

* Don't right-align second column
2022-05-03 13:55:48 -05:00

250 lines
9.2 KiB
HTML

{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load ietf_filters person_filters textfilters %}
{% block title %}
Liaison statement:
{% include 'liaisons/liaison_title.html' %}
{% endblock %}
{% block content %}
{% origin %}
<h1>
Liaison statement
<br>
<small class="text-muted">{% include 'liaisons/liaison_title.html' %}</small>
</h1>
{% include "liaisons/detail_tabs.html" %}
<table class="table table-sm table-striped">
<tbody>
<tr>
<th scope="row">State</th>
<td>{{ liaison.state }}</td>
</tr>
<tr>
<th scope="row">Submitted Date</th>
<td>{{ liaison.submitted|date:"Y-m-d" }}</td>
</tr>
<tr>
<th scope="row">From Group{{ liaison.from_groups.all|pluralize }}</th>
<td>{{ liaison.from_groups_display }}</td>
</tr>
{% if liaison.from_contact %}
<tr>
<th scope="row">From Contact</th>
<td>{% person_link liaison.from_contact.person %}</td>
</tr>
{% endif %}
<tr>
<th scope="row">To Group{{ liaison.to_groups.all|pluralize }}</th>
<td>{{ liaison.to_groups_display }}</td>
</tr>
{% if liaison.to_contacts %}
<tr>
<th scope="row">To Contacts</th>
<td>{{ liaison.to_contacts|linkify|make_one_per_line|safe|linebreaksbr }}</td>
</tr>
{% endif %}
{% if liaison.cc_contacts %}
<tr>
<th scope="row">Cc</th>
<td>{{ liaison.cc_contacts|linkify|make_one_per_line|safe|linebreaksbr }}</td>
</tr>
{% endif %}
{% if liaison.response_contacts %}
<tr>
<th scope="row">Response Contact</th>
<td>{{ liaison.response_contacts|linkify|make_one_per_line|safe|linebreaksbr }}</td>
</tr>
{% endif %}
{% if liaison.technical_contacts %}
<tr>
<th scope="row">Technical Contact</th>
<td>{{ liaison.technical_contacts|linkify|make_one_per_line|safe|linebreaksbr }}</td>
</tr>
{% endif %}
{% if liaison.action_holder_contacts %}
<tr>
<th scope="row">Action Holder Contacts</th>
<td>{{ liaison.action_holder_contacts|linkify|make_one_per_line|safe|linebreaksbr }}</td>
</tr>
{% endif %}
<tr>
<th scope="row">Purpose</th>
<td>{{ liaison.purpose.name }}</td>
</tr>
{% if liaison.deadline %}
<tr>
<th scope="row">Deadline</th>
<td>
{{ liaison.deadline }}
{% if liaison.action_taken %}
<span class="actionTaken">Action Taken</span>
{% else %}
<span class="noActionTaken">Action Needed</span>
{% endif %}
{% if can_take_care %}
<form method="post" class="float-end">
{% csrf_token %}
<button class="btn btn-warning btn-sm"
type="submit"
name="do_action_taken">
Mark as action taken
</button>
</form>
{% endif %}
</td>
</tr>
{% endif %}
{% if relations %}
<tr>
<th scope="row">
Liaisons referring to this
</th>
<td>
{% for rel in relations %}
<a href="{% url "ietf.liaisons.views.liaison_detail" rel.pk %}">
{% if rel.title %}
{{ rel.title }}
{% else %}
Liaison #{{ rel.pk }}
{% endif %}
</a>
<br>
{% endfor %}
</td>
</tr>
{% endif %}
{% if liaison.related_to %}
{% if liaison.related_to.approved or is_approving %}
<tr>
<th scope="row">
Referenced liaison
</th>
<td>
<a href="{% url "ietf.liaisons.views.liaison_detail" liaison.related_to.pk %}">
{% if liaison.related_to.title %}
{{ liaison.related_to.title }}
{% else %}
Liaison #{{ liaison.related_to.pk }}
{% endif %}
</a>
</td>
</tr>
{% endif %}
{% endif %}
{% if liaison.other_identifiers %}
<tr>
<th scope="row">
Other Identifiers
</th>
<td>
{{ liaison.other_identifiers }}
</td>
</tr>
{% endif %}
<tr>
<th scope="row">
Attachments
</th>
<td>
{% for doc in liaison.active_attachments.all %}
<a href="{{ doc.get_href }}">
{{ doc.title }}
</a>
{% if not forloop.last %}<br>{% endif %}
{% empty %}
(None)
{% endfor %}
</td>
</tr>
{% if relations_by %}
<tr>
<th scope="row">
Liaisons referred by this one
</th>
<td>
{% for rel in relations_by %}
<a href="{% url "ietf.liaisons.views.liaison_detail" rel.pk %}">
{% if rel.title %}
{{ rel.title }}
{% else %}
Liaison #{{ rel.pk }}
{% endif %}
</a>
<br>
{% endfor %}
</td>
</tr>
{% endif %}
{% if relations_to %}
<tr>
<th scope="row">
Liaisons referring to this one
</th>
<td>
{% for rel in relations_to %}
<a href="{% url "ietf.liaisons.views.liaison_detail" rel.pk %}">
{% if rel.title %}
{{ rel.title }}
{% else %}
Liaison #{{ rel.pk }}
{% endif %}
</a>
<br>
{% endfor %}
</td>
</tr>
{% endif %}
{% if liaison.from_contact and liaison.body %}
<tr>
<th scope="row">
Body
</th>
<td>
<pre>{{ liaison.body|maybewordwrap:"80"|urlize_ietf_docs|linkify }}</pre>
</td>
</tr>
{% endif %}
</tbody>
</table>
{% if liaison.state.slug == 'pending' and can_edit or liaison.state.slug == 'dead' and can_edit %}
<form method="post">
{% csrf_token %}
{% endif %}
{% if liaison.state.slug == 'pending' and can_edit %}
<a class="btn btn-primary"
href="{% url "ietf.liaisons.views.liaison_edit" object_id=liaison.pk %}">
Edit liaison
</a>
{% elif liaison.state.slug == 'posted' and user|has_role:"Secretariat" %}
<a class="btn btn-primary"
href="{% url "ietf.liaisons.views.liaison_edit" object_id=liaison.pk %}">
Edit liaison
</a>
{% endif %}
{% if liaison.state.slug != 'dead' and can_reply %}
<a class="btn btn-primary"
href="{% url "ietf.liaisons.views.liaison_reply" object_id=liaison.pk %}">
Reply to liaison
</a>
{% endif %}
{% if liaison.state.slug == 'pending' and can_edit %}
<button class="btn btn-primary" type="submit" name="approved">Approve</button>
<button class="btn btn-primary"
type="submit"
name="dead">Mark as dead</button>
{% endif %}
{% if liaison.state.slug == 'posted' and user|has_role:"Secretariat" %}
<a class="btn btn-primary"
href="{% url "ietf.liaisons.views.liaison_resend" object_id=liaison.pk %}">
Resend statement
</a>
{% endif %}
{% if liaison.state.slug == 'dead' and can_edit %}
<button class="btn btn-primary"
type="submit"
name="resurrect">Resurrect</button>
{% endif %}
{% if liaison.state.slug == 'pending' and can_edit or liaison.state.slug == 'dead' and can_edit %}</form>{% endif %}
{% endblock %}