datatracker/ietf/templates/group/group_about.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

337 lines
14 KiB
HTML

{% extends "group/group_base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load ietf_filters %}
{% load markup_tags %}
{% load textfilters group_filters %}
{% block group_content %}
{% origin %}
{% if group.state_id == "conclude" %}
<p class="alert alert-warning my-3">
<b>Note:</b> The data for concluded {{ group.type.name }}s is occasionally incorrect.
</p>
{% endif %}
<table class="my-3 table table-sm table-borderless">
<tbody class="meta border-top">
<tr>
<th scope="row">{{ group.type.name }}</th>
<th scope="row">Name</th>
<td class="edit">
{% if can_edit_group %}
<a class="btn btn-primary btn-sm"
href="{% url 'ietf.group.views.edit' acronym=group.acronym field='name' %}">Edit</a>
{% endif %}
</td>
<th scope="row">{{ group.name }}</th>
</tr>
<tr>
<td></td>
<th scope="row">Acronym</th>
<td class="edit"></td>
<td>{{ group.acronym }}</td>
</tr>
<tr>
<td></td>
{% if group.parent and group.parent.type_id == "area" %}
<th scope="row">{{ group.parent.type.name }}</th>
<td class="edit"></td>
<td>
{{ group.parent.name }}
<a href="{% url "ietf.group.views.group_home" acronym=group.parent.acronym %}">({{ group.parent.acronym }})</a>
</td>
{% else %}
<td></td>
<td class="edit"></td>
<td></td>
{% endif %}
</tr>
<tr>
<td></td>
<th scope="row">State</th>
<td class="edit">
{% if can_edit_group %}
<a class="btn btn-primary btn-sm"
href="{% url 'ietf.group.views.edit' acronym=group.acronym field='state' %}">Edit</a>
{% endif %}
</td>
<td>
<span class="{% if group.state.name|slugify == 'active' %}text-success{% elif group.state.name|slugify == 'concluded' %}text-danger{% endif %}">{{ group.state.name }}</span>
{% if requested_close %}<div class="badge bg-info">Being closed</div>{% endif %}
</td>
</tr>
{% if group.features.has_chartering_process %}
<tr>
<td></td>
<th scope="row">Charter</th>
<td class="edit"></td>
<td>
{% if group.charter %}
<a href="{% url "ietf.doc.views_doc.document_main" name=group.charter.name %}">
{{ group.charter.name }}-{{ group.charter.rev }}</a>
<span class="badge bg-info">{{ group.charter.get_state.name }}</span>
{% else %}
<span class="text-muted">(None)</span>
{% if user|has_role:"Area Director,Secretariat" %}
<a class="btn btn-warning btn-sm" href="{{ charter_submit_url }}">Submit charter</a>
{% endif %}
{% endif %}
</td>
</tr>
{% endif %}
{% if can_provide_status_update or status_update %}
<tr id="status_update">
<td>
</td>
<th scope="row">
Status update
</th>
<td class="edit">
{% if can_provide_status_update %}
<a class="btn btn-primary btn-sm"
href="{% url "ietf.group.views.group_about_status_edit" acronym=group.acronym %}">
Edit
</a>
{% endif %}
</td>
<td>
{% if status_update %}
<a class="btn btn-primary btn-sm"
href="{% url "ietf.group.views.group_about_status" acronym=group.acronym %}">
Show
</a>
<span class="badge bg-secondary">
Changed {{ status_update.time|date:"Y-m-d" }}
</span>
{% else %}
<span class="text-muted">
(None)
</span>
{% endif %}
</td>
</tr>
{% endif %}
{% if group.features.has_documents %}
<tr id="dependency_graph">
<td>
</td>
<th scope="row">
Document dependencies
</th>
<td class="edit">
</td>
<td>
<a class="btn btn-primary btn-sm"
href="{% url 'ietf.group.views.dependencies' group_type=group.type_id acronym=group.acronym output_type='svg' %}">
SVG <i class="bi bi-diagram-3"></i>
</a>
</td>
</tr>
{% endif %}
{% with group.groupextresource_set.all as resources %}
{% if resources or can_edit_group %}
<tr>
<td>
</td>
<th scope="row">
Additional resources
</th>
<td class="edit">
{% if can_edit_group %}
<a class="btn btn-primary btn-sm"
href="{% url 'ietf.group.views.edit' acronym=group.acronym field='resources' %}">
Edit
</a>
{% endif %}
</td>
<td>
{% if resources %}
{% for resource in resources|dictsort:"display_name" %}
{# Maybe make how a resource displays itself a method on the class so templates aren't doing this switching #}
{% if resource.name.type.slug == 'url' or resource.name.type.slug == 'email' %}
<a href="{{ resource.value|urlencode }}" title="{{ resource.name.name }}">
{% firstof resource.display_name resource.name.name %}</a>{% else %}
<span title="{{ resource.name.name }}">
{% firstof resource.display_name resource.name.name %}: {{ resource.value|escape }}
</span>{% endif %}{% if not forloop.last %}{% if resource.display_name|length < 15 and resource.name.name|length < 15 and resources|length <= 3 %},{% else %}<br>{% endif %}{% endif %}
{% endfor %}
{% endif %}
</td>
</tr>
{% endif %}
{% endwith %}
</tbody>
{% if group.personnel %}
<tbody class="meta border-top">
{% for slug, label, roles in group.personnel %}
<tr>
{% if forloop.first %}
<th scope="row">
Personnel
</th>
{% else %}
<td>
</td>
{% endif %}
<th scope="row">
{{ label }}
</th>
<td class="edit">
{% if can_edit_group and slug in editable_roles %}
<a class="btn btn-primary btn-sm"
href="{% url 'ietf.group.views.edit' acronym=group.acronym field=slug %}">
Edit
</a>
{% endif %}
</td>
<td>
{% for r in roles %}
{% role_person_link r %}{% if not forloop.last %}{% if roles|length > 3%}<br>{% else %},{% endif %}{% endif %}
{% endfor %}
</td>
</tr>
{% endfor %}
</tbody>
{% endif %}
{% if group.list_email %}
<tbody class="meta border-top">
<tr>
<th scope="row">
Mailing list
</th>
<th scope="row">
Address
</th>
<td class="edit">
{% if can_edit_group %}
<a class="btn btn-primary btn-sm"
href="{% url 'ietf.group.views.edit' acronym=group.acronym field='list_email' %}">
Edit
</a>
{% endif %}
</td>
<td>
{{ group.list_email|linkify }}
</td>
</tr>
<tr>
<td>
</td>
<th scope="row">
To subscribe
</th>
<td class="edit">
{% if can_edit_group %}
<a class="btn btn-primary btn-sm"
href="{% url 'ietf.group.views.edit' acronym=group.acronym field='list_subscribe' %}">
Edit
</a>
{% endif %}
</td>
<td>
{{ group.list_subscribe|linkify }}
</td>
</tr>
<tr>
<td>
</td>
<th scope="row">
Archive
</th>
<td class="edit">
{% if can_edit_group %}
<a class="btn btn-primary btn-sm"
href="{% url 'ietf.group.views.edit' acronym=group.acronym field='list_archive' %}">
Edit
</a>
{% endif %}
</td>
<td>
{{ group.list_archive|linkify }}
</td>
</tr>
</tbody>
{% endif %}
{% if group.state_id != "conclude" and group.features.has_default_jabber %}
<tbody class="meta border-top">
<tr>
<th scope="row">
Jabber chat
</th>
<th scope="row">
Room address
</th>
<td class="edit">
</td>
<td>
<a href="xmpp:{{ group.acronym }}@jabber.ietf.org?join">
xmpp:{{ group.acronym }}@jabber.ietf.org?join
</a>
</td>
</tr>
<tr>
<td>
</td>
<th scope="row">
Logs
</th>
<td class="edit">
</td>
<td>
<a href="https://jabber.ietf.org/jabber/logs/{{ group.acronym }}/">
https://jabber.ietf.org/jabber/logs/{{ group.acronym }}/
</a>
</td>
</tr>
</tbody>
{% endif %}
</table>
{% if requested_close or group.state_id == "conclude" %}
{% if closing_note and closing_note.desc != "(Closing note deleted)" %}
<div class="my-3 alert alert-info">
<h2>
Closing note for {{ group.type.desc.title|default:group.acronym }}
</h2>
{{ closing_note.desc }}
</div>
{% endif %}
{% if user|has_role:"Secretariat" %}
<a class="btn btn-primary mb-3"
href="{% url 'ietf.group.views.edit' acronym=group.acronym field='closing_note' %}">
Edit closing note
</a>
{% endif %}
{% endif %}
{% if group.features.has_chartering_process %}
<h2 class="mt-3">
{% if requested_close or group.state_id == "conclude" %}Final{% endif %}
Charter for
{% if group.state_id == "proposed" %}proposed{% endif %}
{{ group.type.desc.title }}
</h2>
{# the linebreaks filter adds <p>, no surrounding <p> necessary: #}
{{ group.charter_text|urlize_ietf_docs|linkify|linebreaks }}
{% else %}
<h2 class="mt-3">
{% if requested_close or group.state_id == "conclude" %}Final{% endif %}
Group description
</h2>
{% comment %}{{ group.description|default:"No description yet."|linebreaks }}{% endcomment %}
{{ group.description|default:"No description yet."| apply_markup:"restructuredtext" }}
{% if can_edit_group %}
<a class="btn btn-primary mb-3"
href="{% url 'ietf.group.views.edit' acronym=group.acronym field='description' %}">
Edit group description
</a>
{% endif %}
{% endif %}
{% if group.features.has_milestones %}
{% include "group/milestones.html" with milestones=group.milestones heading=True %}
{% if milestones_in_review %}
<p>
{{ milestones_in_review|length }} new milestone{{ milestones_in_review|pluralize }}
currently in {{ milestone_reviewer }} review.
</p>
{% endif %}
{% endif %}
{% endblock %}