This makes (more) sure the table sort chevron doesn't wrap, by removing trailing whitespace from table headers. It also fixes various whitespace nits related to buttonlists.
1192 lines
57 KiB
HTML
1192 lines
57 KiB
HTML
{% extends "base.html" %}
|
|
{# Copyright The IETF Trust 2016-2020, All Rights Reserved #}
|
|
{% load origin %}
|
|
{% load static %}
|
|
{% load ietf_filters %}
|
|
{% load person_filters %}
|
|
{% load textfilters %}
|
|
{% block pagehead %}
|
|
<link rel="alternate"
|
|
type="application/atom+xml"
|
|
title="Document changes"
|
|
href="/feed/document-changes/{{ name }}/">
|
|
<meta name="description"
|
|
content="{{ doc.title }} {% if doc.get_state_slug == 'rfc' and not snapshot %}(RFC {{ rfc_number }}{% if published %}, {{ published.time|date:'F Y' }}{% endif %}{% if obsoleted_by %}; obsoleted by {{ obsoleted_by|join:', ' }}{% endif %}){% else %}(Internet-Draft, {{ doc.time|date:'Y' }}){% endif %}">
|
|
{% endblock %}
|
|
{% block morecss %}.inline { display: inline; }{% endblock %}
|
|
{% block title %}
|
|
{% if doc.get_state_slug == "rfc" and not snapshot %}
|
|
RFC {{ rfc_number }} - {{ doc.title }}
|
|
{% else %}
|
|
{{ name }}-{{ doc.rev }} - {{ doc.title }}
|
|
{% endif %}
|
|
{% endblock %}
|
|
{% block content %}
|
|
{% origin %}
|
|
{{ top|safe }}
|
|
{% include "doc/revisions_list.html" %}
|
|
<div id="timeline"></div>
|
|
{% if doc.rev != latest_rev %}
|
|
<div class="alert alert-warning my-3">The information below is for an old version of the document.</div>
|
|
{% else %}
|
|
{% if doc.get_state_slug == "rfc" and snapshot %}
|
|
<div class="alert alert-warning my-3">
|
|
The information below is for an old version of the document that is already published as an RFC.
|
|
</div>
|
|
{% endif %}
|
|
{% endif %}
|
|
<table class="table table-sm table-borderless">
|
|
<tbody class="meta border-top">
|
|
<tr>
|
|
<th scope="row">Document</th>
|
|
<th scope="row">Type</th>
|
|
<td class="edit"></td>
|
|
<td>
|
|
{% if doc.get_state_slug == "rfc" and not snapshot %}
|
|
<span class="text-success">RFC - {{ doc.std_level }}</span>
|
|
{% if published %}
|
|
({{ published.time|date:"F Y" }})
|
|
{% else %}
|
|
(Publication date unknown)
|
|
{% endif %}
|
|
{% if has_verified_errata %}
|
|
<a class="badge rounded-pill bg-danger text-decoration-none text-light"
|
|
href="https://www.rfc-editor.org/errata_search.php?rfc={{ doc.rfc_number }}" title="Click to view errata." rel="nofollow">
|
|
Errata
|
|
</a>
|
|
{% elif has_errata %}
|
|
<a class="badge rounded-pill bg-warning text-decoration-none text-light"
|
|
href="https://www.rfc-editor.org/errata_search.php?rfc={{ doc.rfc_number }}" title="Click to view errata." rel="nofollow">
|
|
Errata
|
|
</a>
|
|
{% endif %}
|
|
{% if obsoleted_by %}<div>Obsoleted by {{ obsoleted_by|urlize_related_source_list|join:", " }}</div>{% endif %}
|
|
{% if updated_by %}<div>Updated by {{ updated_by|urlize_related_source_list|join:", " }}</div>{% endif %}
|
|
{% if obsoletes %}<div>Obsoletes {{ obsoletes|urlize_related_target_list|join:", " }}</div>{% endif %}
|
|
{% if updates %}<div>Updates {{ updates|urlize_related_target_list|join:", " }}</div>{% endif %}
|
|
{% if status_changes %}
|
|
<div>Status changed by {{ status_changes|urlize_related_source_list|join:", " }}</div>
|
|
{% endif %}
|
|
{% if proposed_status_changes %}
|
|
<div>Proposed status changed by {{ proposed_status_changes|urlize_related_source_list|join:", " }}</div>
|
|
{% endif %}
|
|
{% if rfc_aliases %}<div>Also known as {{ rfc_aliases|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
|
{% if draft_name %}
|
|
<div>
|
|
Was
|
|
<a href="/doc/{{ draft_name }}/">{{ draft_name }}</a>
|
|
{% if submission %}({{ submission|safe }}){% endif %}
|
|
</div>
|
|
{% endif %}
|
|
{% else %}
|
|
{% if snapshot and doc.doc.get_state_slug == 'rfc' %}
|
|
<span>This is an older version of an Internet-Draft that was ultimately published as an RFC.</span>
|
|
{% elif snapshot and doc.rev != latest_rev %}
|
|
<span>This is an older version of an Internet-Draft whose latest revision is {{ doc.doc.get_state }}</span>
|
|
{% else %}
|
|
<span class="{% if doc.get_state_slug == 'active' %}text-success{% elif doc.get_state_slug == 'expired' %}text-danger{% endif %}">{% if snapshot and doc.rev == latest_rev %}{{ doc.doc.get_state }}{% else %}{{ doc.get_state }}{% endif %} Internet-Draft</span>
|
|
{% if submission %}({{ submission|safe }}){% endif %}
|
|
{% if resurrected_by %}- resurrect requested by {{ resurrected_by }}{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">Author{{ doc.authors|pluralize }}</th>
|
|
<td class="edit">
|
|
{% if can_edit_authors %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_doc.edit_authors' name=doc.name %}">Edit</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{# Implementation that uses the current primary email for each author #}
|
|
{% for author in doc.authors %}
|
|
{% person_link author %}{% if not forloop.last %},{% endif %}
|
|
{% endfor %}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">Last updated</th>
|
|
<td class="edit"></td>
|
|
<td>
|
|
{{ doc.time|date:"Y-m-d" }}
|
|
{% if latest_revision and latest_revision.time.date != doc.time.date %}
|
|
<span class="text-muted">(Latest revision {{ latest_revision.time|date:"Y-m-d" }})</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% if replaces or can_edit_stream_info %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">Replaces</th>
|
|
<td class="edit">
|
|
{% if can_edit_stream_info and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.replaces' name=doc.name %}">Edit</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if replaces %}
|
|
{{ replaces|urlize_related_target_list|join:", " }}
|
|
{% else %}
|
|
<span class="text-muted">(None)</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if replaced_by %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Replaced by
|
|
</th>
|
|
<td class="edit">
|
|
</td>
|
|
<td>
|
|
{{ replaced_by|urlize_related_source_list|join:", " }}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if can_view_possibly_replaces %}
|
|
{% if possibly_replaces %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Possibly Replaces
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_replaces and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.review_possibly_replaces' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{{ possibly_replaces|urlize_related_target_list|join:", " }}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if possibly_replaced_by %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Possibly Replaced By
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_replaces and not snapshot %}
|
|
{% comment %}<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.review_possibly_replaces' name=doc.name %}">Edit</a>{% endcomment %}
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{{ possibly_replaced_by|urlize_related_source_list|join:", " }}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% endif %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Stream
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_change_stream and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.change_stream' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td {% if stream_desc == "(None)" %}class="text-muted"{%endif%}>
|
|
{{ stream_desc }}
|
|
</td>
|
|
</tr>
|
|
{% if doc.get_state_slug != "rfc" and not snapshot %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Intended RFC status
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_stream_info and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.change_intention' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if doc.intended_std_level %}
|
|
{{ doc.intended_std_level }}
|
|
{% else %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Formats
|
|
</th>
|
|
<td class="edit">
|
|
</td>
|
|
<td>
|
|
{% if doc.get_state_slug != "active" and doc.get_state_slug != "rfc" %}
|
|
<div class="float-end badge bg-warning">
|
|
Expired & archived
|
|
</div>
|
|
{% endif %}
|
|
{% if file_urls %}
|
|
<div class="buttonlist">
|
|
{% for label, url in file_urls %}
|
|
<a class="btn btn-primary btn-sm" href="{{ url }}">
|
|
<i class="bi bi-file-{% if label == 'pdf' %}pdf{% elif label == 'xml' or label == 'htmlized' or label == 'html' %}code{% elif label == 'bibtex' %}ruled{% elif label == 'plain text' %}text{% endif %}">
|
|
</i>
|
|
{{ label }}
|
|
</a>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
(not online)
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% for check in doc.submission.latest_checks %}
|
|
{% if check.passed != None and check.symbol.strip %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
{{ check.checker|title }}
|
|
</th>
|
|
<td class="edit">
|
|
</td>
|
|
<td>
|
|
{% if check.errors or check.warnings %}
|
|
<span class="checker-warning"
|
|
data-bs-toggle="modal"
|
|
data-bs-target="#check-{{ check.pk }}"
|
|
title="{{ check.checker|title }} returned warnings or errors.">
|
|
{{ check.symbol|safe }}
|
|
</span>
|
|
{% else %}
|
|
<span class="checker-success"
|
|
data-bs-toggle="modal"
|
|
data-bs-target="#check-{{ check.pk }}"
|
|
title="{{ check.checker|title }} passed">
|
|
{{ check.symbol|safe }}
|
|
</span>
|
|
{% endif %}
|
|
<a href="#"
|
|
data-bs-toggle="modal"
|
|
data-bs-target="#check-{{ check.pk }}">
|
|
{{ check.errors }} errors, {{ check.warnings }} warnings
|
|
</a>
|
|
{% include "doc/yang-check-modal-overlay.html" %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% if review_assignments or can_request_review %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Reviews
|
|
</th>
|
|
<td class="edit">
|
|
</td>
|
|
<td>
|
|
{% for review_assignment in review_assignments %}
|
|
{% include "doc/review_assignment_summary.html" with current_doc_name=doc.name current_rev=doc.rev %}
|
|
{% endfor %}
|
|
{% if no_review_from_teams %}
|
|
{% for team in no_review_from_teams %}
|
|
{{ team.acronym.upper }}{% if not forloop.last %},{% endif %}
|
|
{% endfor %}
|
|
will not review this version
|
|
{% endif %}
|
|
{% if can_request_review or can_submit_unsolicited_review_for_teams %}
|
|
<div {% if review_assignments or no_review_from_teams %} class="mt-3"{% endif %}>
|
|
{% if can_request_review %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url "ietf.doc.views_review.request_review" doc.name %}">
|
|
<i class="bi bi-check-circle">
|
|
</i>
|
|
Request review
|
|
</a>
|
|
{% endif %}
|
|
{% if can_submit_unsolicited_review_for_teams|length == 1 %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url "ietf.doc.views_review.complete_review" doc.name can_submit_unsolicited_review_for_teams.0.acronym %}">
|
|
<i class="bi bi-pencil-square">
|
|
</i>
|
|
Submit unsolicited review
|
|
</a>
|
|
{% elif can_submit_unsolicited_review_for_teams %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url "ietf.doc.views_review.submit_unsolicited_review_choose_team" doc.name %}">
|
|
<i class="bi bi-pencil-square">
|
|
</i>
|
|
Submit unsolicited review
|
|
</a>
|
|
{% endif %}
|
|
</div>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if conflict_reviews %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
IETF conflict review
|
|
</th>
|
|
<td class="edit">
|
|
</td>
|
|
<td>
|
|
{{ conflict_reviews|join:", "|urlize_ietf_docs }}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% with doc.docextresource_set.all as resources %}
|
|
{% if resources or can_edit_stream_info or can_edit_individual %}
|
|
<tr>
|
|
<td>
|
|
</td>
|
|
<th scope="row">
|
|
Additional resources
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_stream_info or can_edit_individual %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.edit_doc_extresources' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if resources or doc.group and doc.group.list_archive %}
|
|
{% for resource in resources|dictsort:"display_name" %}
|
|
{% if resource.name.type.slug == 'url' or resource.name.type.slug == 'email' %}
|
|
<a href="{{ resource.value }}" title="{{ resource.name.name }}">
|
|
{% firstof resource.display_name resource.name.name %}
|
|
</a>
|
|
<br>
|
|
{# Maybe make how a resource displays itself a method on the class so templates aren't doing this switching #}
|
|
{% else %}
|
|
<span title="{{ resource.name.name }}">
|
|
{% firstof resource.display_name resource.name.name %}: {{ resource.value|escape }}
|
|
</span>
|
|
<br>
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% if doc.group and doc.group.list_archive %}
|
|
{% if doc.group.list_archive|startswith:settings.MAILING_LIST_ARCHIVE_URL %}
|
|
<a href="{{ doc.group.list_archive }}?q={{ doc.name }}">
|
|
Mailing list discussion
|
|
</a>
|
|
{% elif doc.group.list_archive|is_valid_url %}
|
|
<a href="{{ doc.group.list_archive }}">
|
|
Mailing list discussion
|
|
</a>
|
|
{% else %}
|
|
{{ doc.group.list_archive|urlencode }}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% endwith %}
|
|
</tbody>
|
|
<tbody class="meta border-top">
|
|
<tr>
|
|
<th scope="row">
|
|
Stream
|
|
</th>
|
|
{% if doc.stream %}
|
|
<th scope="row">
|
|
{% if doc.stream.slug != "legacy" %}
|
|
<a href="{% url "ietf.help.views.state" doc=doc.type.slug type=doc.stream.slug %}">
|
|
{% if doc.stream_id == 'ietf' %}
|
|
WG
|
|
{% else %}
|
|
{{ doc.stream }}
|
|
{% endif %}
|
|
state
|
|
</a>
|
|
{% else %}
|
|
Legacy state
|
|
{% endif %}
|
|
</th>
|
|
<td class="edit">
|
|
{% if doc.stream and can_edit_stream_info and doc.stream.slug != "legacy" and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.change_stream_state' name=doc.name state_type=stream_state_type_slug %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if stream_state %}
|
|
<span class="{% if stream_state|slugify|slice:"6" == 'active' %}text-success{% endif %}">
|
|
{{ stream_state }}
|
|
</span>
|
|
{% else %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% endif %}
|
|
{% if stream_tags %}
|
|
<div class="stream-tags">
|
|
{% for tag in stream_tags %}
|
|
{{ tag.name }}{% if not forloop.last %},{% endif %}
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
{% if due_date %}
|
|
<span class="text-muted">(Due date {{ due_date }})</span>
|
|
{% endif %}
|
|
</td>
|
|
{% else %}
|
|
<th scope="row">
|
|
Stream state
|
|
</th>
|
|
<td class="edit">
|
|
</td>
|
|
<td>
|
|
<span class="text-muted">(No stream defined)</span>
|
|
</td>
|
|
{% endif %}
|
|
</tr>
|
|
{% if milestones %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Associated
|
|
{% if doc.stream_id == 'ietf' %}
|
|
WG
|
|
{% else %}
|
|
{{ doc.stream }}
|
|
{% endif %} milestone{{ milestones|pluralize }}</th>
|
|
<td class="edit"></td>
|
|
<td>
|
|
<dl class="row">
|
|
{% for m in milestones %}
|
|
<dt class="col-sm-2 my-0">{{ m.due|date:"M Y" }}</dt>
|
|
<dd class="col-sm-10 my-0">{{ m.desc }}</dd>
|
|
{% endfor %}
|
|
</dl>
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if consensus and not doc.stream_id == 'ietf' %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Consensus boilerplate
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_stream_info and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.edit_consensus' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
<span class="{% if consensus != "Yes" %}text-danger{% else %}text-success{% endif %}"
|
|
title="Whether the document is the result of a community consensus process as defined in RFC 5741">
|
|
{{ consensus }}
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if presentations or user|has_role:"Secretariat,Area Director,WG Chair,WG Secretary,RG Chair,RG Secretary,IRTF Chair,Team Chair" or can_edit_stream_info %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
On agenda
|
|
</th>
|
|
<td class="edit">
|
|
{% if not snapshot %}
|
|
{% if user|has_role:"Secretariat,Area Director,WG Chair,WG Secretary,RG Chair,RG Secretary,IRTF Chair,Team Chair" or can_edit_stream_info %}
|
|
{% doc_edit_button "ietf.doc.views_doc.all_presentations" name=doc.name %}
|
|
{% endif %}
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if presentations %}
|
|
{% for pres in presentations %}
|
|
<a href="{% url 'ietf.meeting.views.agenda_ical' num=pres.session.meeting.number session_id=pres.session.id %}">
|
|
<i class="bi bi-calendar">
|
|
</i>
|
|
</a>
|
|
{{ pres.session.short_name }} at {{ pres.session.meeting }}
|
|
{% if pres.rev and pres.rev != doc.rev %}(version -{{ pres.rev }}){% endif %}{% if not forloop.last %},{% endif %}
|
|
{% endfor %}
|
|
{% else %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if doc.stream_id == 'ietf' or doc.stream_id == 'ise' or doc.stream_id == 'irtf' %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Document shepherd
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_stream_info and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.edit_shepherd' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% elif is_shepherd %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.change_shepherd_email' name=doc.name %}">
|
|
Change Email
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if doc.shepherd %}
|
|
{% person_link doc.shepherd.person %}
|
|
{% else %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% if shepherd_writeup or can_edit_shepherd_writeup %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Shepherd write-up
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_shepherd_writeup %}
|
|
{% url 'ietf.doc.views_draft.edit_shepherd_writeup' name=doc.name as doc_edit_url %}
|
|
{% if doc_edit_url %}
|
|
<a class="btn btn-primary btn-sm" href="{{ doc_edit_url }}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if shepherd_writeup %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_doc.document_shepherd_writeup' name=doc.name %}">
|
|
Show
|
|
</a>
|
|
<span class="badge rounded-pill bg-secondary">Last changed {{ shepherd_writeup.time|date:"Y-m-d" }}</span>
|
|
{% else %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% else %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
RFC Editor Note
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_stream_info %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_ballot.ballot_rfceditornote' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if doc.has_rfc_editor_note %}
|
|
(last changed {{ doc.has_rfc_editor_note|date:"Y-m-d" }})
|
|
{% else %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if published and started_iesg_process and published.time < started_iesg_process.time %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="col" colspan="3" class="warning">
|
|
This information refers to IESG processing after the RFC was initially published:
|
|
</th>
|
|
</tr>
|
|
{% endif %}
|
|
</tbody>
|
|
{% if not doc.stream_id == 'iab' %}
|
|
<tbody class="meta border-top">
|
|
<tr>
|
|
<th scope="row">
|
|
IESG
|
|
</th>
|
|
<th scope="row">
|
|
<a href="{% url "ietf.help.views.state" doc=doc.type.slug type="iesg" %}">
|
|
IESG state
|
|
</a>
|
|
</th>
|
|
<td class="edit">
|
|
{% if iesg_state.slug != 'idexists' and can_edit %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.change_state' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
<span class="{% if iesg_state_summary|slugify == 'expired' %}text-danger{% endif %}">
|
|
{% if iesg_state_summary|striptags == iesg_state_summary %}
|
|
{{ iesg_state_summary|default:"I-D Exists"|urlize_ietf_docs }}
|
|
{% else %}
|
|
{{ iesg_state_summary|default:"I-D Exists" }}
|
|
{% endif %}
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
{% if doc.action_holders_enabled %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Action Holder{{ doc.documentactionholder_set.all|pluralize }}
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_doc.edit_action_holders' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
<div>
|
|
{% if doc.action_holders.exists %}
|
|
{% for action_holder in doc.documentactionholder_set.all %}
|
|
<div>
|
|
{% person_link action_holder.person title=action_holder.role_for_doc %} {{ action_holder|action_holder_badge }}
|
|
</div>
|
|
{% endfor %}
|
|
{% if can_edit %}
|
|
<a class="btn btn-primary btn-sm mt-3"
|
|
href="{% url "ietf.doc.views_doc.remind_action_holders" name=doc.name %}">
|
|
<i class="bi bi-envelope">
|
|
</i>
|
|
Send reminder email
|
|
</a>
|
|
{% endif %}
|
|
{% else %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% endif %}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if consensus and doc.stream_id == 'ietf' %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Consensus boilerplate
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit or can_edit_stream_info and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.edit_consensus' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
<span class="{% if consensus != "Yes" %}text-danger{% else %}text-success{% endif %}"
|
|
title="Whether the document is the result of a community consensus process as defined in RFC 5741">
|
|
{{ consensus }}
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Telechat date
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_doc.telechat_date' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if telechat %}
|
|
On agenda of {{ telechat.telechat_date }} IESG telechat
|
|
{% if telechat.returning_item %}(returning item){% endif %}
|
|
{% else %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% endif %}
|
|
{% if iesg_ballot_summary %}
|
|
<br>
|
|
<i>{{ iesg_ballot_summary }}</i>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Responsible AD
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.edit_ad' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if doc.ad %}
|
|
{% person_link doc.ad %}
|
|
{% else %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% if iesg_state.slug != 'idexists' %}
|
|
{% if doc.note or can_edit %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
IESG note
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.edit_iesg_note' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if doc.note %}
|
|
{{ doc.note|linebreaksbr }}
|
|
{% else %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% endif %}
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Send notices to
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_notify and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_doc.edit_notify' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if doc.notify %}
|
|
{{ doc.notify|linkify }}
|
|
{% else %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
{% endif %}
|
|
{% if can_edit_iana_state or iana_review_state or iana_experts_state or iana_experts_comment %}
|
|
<tbody class="meta border-top">
|
|
{% if iana_review_state or can_edit_iana_state %}
|
|
<tr>
|
|
<th scope="row">
|
|
IANA
|
|
</th>
|
|
<th scope="row">
|
|
<a href="{% url "ietf.help.views.state" doc=doc.type.slug type="iana-review" %}">
|
|
IANA review state
|
|
</a>
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_iana_state and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.change_iana_state' name=doc.name state_type="iana-review" %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td class="{% if iana_review_state|slugify|slice:7 != "iana-ok" %}text-danger{% else %}text-success{% endif %}">
|
|
{% if not iana_review_state %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% else %}
|
|
{{ iana_review_state }}
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if iana_action_state or can_edit_iana_state %}
|
|
<tr>
|
|
<th scope="row">
|
|
{% if not can_edit_iana_state and not iana_review_state %}IANA{% endif %}
|
|
</th>
|
|
<th scope="row">
|
|
<a href="{% url "ietf.help.views.state" doc=doc.type.slug type="iana-action" %}">
|
|
IANA action state
|
|
</a>
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_iana_state and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.change_iana_state' name=doc.name state_type="iana-action" %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if not iana_action_state %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% else %}
|
|
{{ iana_action_state }}
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if iana_experts_state or can_edit_iana_state %}
|
|
<tr>
|
|
<th scope="row">
|
|
{% if not can_edit_iana_state and not iana_review_state and not iana_action_state %}IANA{% endif %}
|
|
</th>
|
|
<th scope="row">
|
|
<a href="{% url "ietf.help.views.state" doc=doc.type.slug type="iana-experts" %}">
|
|
IANA expert review state
|
|
</a>
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_iana_state and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.change_iana_state' name=doc.name state_type="iana-experts" %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td class="{% if iana_experts_state|slugify|slice:"-2:" != "ok" %}text-danger{% else %}text-success{% endif %}">
|
|
{% if not iana_experts_state %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% else %}
|
|
{{ iana_experts_state }}
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if iana_experts_comment or can_edit_iana_state %}
|
|
<tr>
|
|
<th scope="row">
|
|
{% if not can_edit_iana_state and not iana_review_state and not iana_action_state and not iana_experts_state %}
|
|
IANA
|
|
{% endif %}
|
|
</th>
|
|
<th scope="row">
|
|
IANA expert review comments
|
|
</th>
|
|
<td class="edit">
|
|
{% if can_edit_iana_state and not snapshot %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_draft.add_iana_experts_comment' name=doc.name %}">
|
|
Edit
|
|
</a>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if not iana_experts_comment %}
|
|
<span class="text-muted">
|
|
(None)
|
|
</span>
|
|
{% else %}
|
|
{{ iana_experts_comment }}
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
</tbody>
|
|
{% endif %}
|
|
{% if rfc_editor_state %}
|
|
<tbody class="meta border-top">
|
|
<tr>
|
|
<th scope="row">
|
|
RFC Editor
|
|
</th>
|
|
<th scope="row">
|
|
<a href="{% url "ietf.help.views.state" doc=doc.type.slug type="rfceditor" %}">
|
|
RFC Editor state
|
|
</a>
|
|
</th>
|
|
<td class="edit">
|
|
</td>
|
|
<td>
|
|
{{ rfc_editor_state }}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<th scope="row">
|
|
Details
|
|
</th>
|
|
<td class="edit">
|
|
</td>
|
|
<td>
|
|
<div>
|
|
<a href="https://www.rfc-editor.org/queue2.html#{{ doc.name }}">
|
|
Publication queue entry
|
|
</a>
|
|
</div>
|
|
{% if rfc_editor_auth48_url %}
|
|
<div>
|
|
<a href="{{ rfc_editor_auth48_url }}">
|
|
Auth48 status
|
|
</a>
|
|
</div>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
{% endif %}
|
|
</table>
|
|
<div class="buttonlist">
|
|
<a class="btn btn-primary btn-sm"
|
|
href="mailto:{{ doc.name }}@ietf.org?subject=Mail%20regarding%20{{ doc.name }}">
|
|
<i class="bi bi-envelope">
|
|
</i>
|
|
Email authors
|
|
</a>
|
|
{% if doc.group.type.slug == 'wg' or doc.group.type.slug == 'rg' %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="mailto:{{ doc.group.list_email }}?subject=Mail%20regarding%20{{ doc.name }}">
|
|
<i class="bi bi-envelope">
|
|
</i>
|
|
Email {{ doc.group.type }}
|
|
</a>
|
|
{% endif %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url "ietf.ipr.views.search" %}?submit=draft&id={{ doc.name }}"
|
|
rel="nofollow">
|
|
<i class="bi bi-lightning">
|
|
</i>
|
|
IPR
|
|
{% if doc.related_ipr %}
|
|
<span class="badge rounded-pill">
|
|
{{ doc.related_ipr|length }}
|
|
</span>
|
|
{% endif %}
|
|
</a>
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_doc.document_references' doc.canonical_name %}"
|
|
rel="nofollow">
|
|
<i class="bi bi-arrow-left">
|
|
</i>
|
|
References
|
|
</a>
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_doc.document_referenced_by' doc.canonical_name %}"
|
|
rel="nofollow">
|
|
<i class="bi bi-arrow-right">
|
|
</i>
|
|
Referenced by
|
|
</a>
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{{ settings.IDNITS_BASE_URL }}?url=https://www.ietf.org/archive/id/{{ doc.filename_with_rev }}"
|
|
rel="nofollow"
|
|
target="_blank">
|
|
<i class="bi bi-exclamation">
|
|
</i>
|
|
Nits
|
|
</a>
|
|
<div class="dropdown inline">
|
|
<button class="btn btn-primary btn-sm dropdown-toggle"
|
|
type="button"
|
|
id="ddSearchMenu"
|
|
data-bs-toggle="dropdown"
|
|
aria-expanded="true">
|
|
<i class="bi bi-search">
|
|
</i>
|
|
Search lists
|
|
</button>
|
|
<ul class="dropdown-menu" role="menu">
|
|
<li role="presentation">
|
|
<a class="dropdown-item"
|
|
href="https://mailarchive.ietf.org/arch/search?q=%22{{ doc.name }}%22"
|
|
rel="nofollow"
|
|
target="_blank">
|
|
IETF Mail Archive
|
|
</a>
|
|
</li>
|
|
<li role="presentation">
|
|
<a class="dropdown-item"
|
|
href="https://www.google.com/search?as_q={{ doc.name }}&as_sitesearch={{ search_archive }}"
|
|
rel="nofollow"
|
|
target="_blank">
|
|
Google
|
|
</a>
|
|
</li>
|
|
{% if user|has_role:"Area Director" %}
|
|
<li role="presentation">
|
|
<a class="dropdown-item"
|
|
href="https://www.iesg.org/bin/c5i?mid=6&rid=77&target={{ doc.name }}"
|
|
rel="nofollow"
|
|
target="_blank">
|
|
ARO
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
</ul>
|
|
</div>
|
|
{% if user.is_authenticated %}
|
|
<a class="btn btn-primary btn-sm track-untrack-doc {% if not doc.tracked_in_personal_community_list %}hide{% endif %}"
|
|
href="{% url "ietf.community.views.untrack_document" username=user.username name=doc.name %}"
|
|
title="Remove from your personal ID list">
|
|
<i class="bi bi-bookmark-check-fill">
|
|
</i>
|
|
Untrack
|
|
</a>
|
|
<a class="btn btn-primary btn-sm track-untrack-doc {% if doc.tracked_in_personal_community_list %}hide{% endif %}"
|
|
href="{% url "ietf.community.views.track_document" username=user.username name=doc.name %}"
|
|
title="Add to your personal ID list">
|
|
<i class="bi bi-bookmark">
|
|
</i>
|
|
Track
|
|
</a>
|
|
{% endif %}
|
|
{% if user.review_teams %}
|
|
<a class="btn btn-primary btn-sm review-wish-add-remove-doc ajax {% if not doc.has_review_wish %}hide{% endif %}"
|
|
href="{% url "ietf.doc.views_review.review_wishes_remove" name=doc.name %}?next={{ request.get_full_path|urlencode }}"
|
|
title="Remove from your review wishes for all teams">
|
|
<i class="bi bi-chat-left-heart-fill">
|
|
</i>
|
|
Remove review wishes
|
|
</a>
|
|
<a class="btn btn-primary btn-sm review-wish-add-remove-doc {% if user.review_teams|length_is:"1" %}ajax {% endif %}{% if doc.has_review_wish %}hide{% endif %}"
|
|
href="{% url "ietf.doc.views_review.review_wish_add" name=doc.name %}?next={{ request.get_full_path|urlencode }}"
|
|
title="Add to your review wishes">
|
|
<i class="bi bi-chat-left-heart">
|
|
</i>
|
|
Add review wish
|
|
</a>
|
|
{% endif %}
|
|
{% if can_edit and iesg_state.slug != 'idexists' %}
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_ballot.lastcalltext' name=doc.name %}">
|
|
Last call text
|
|
</a>
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_ballot.ballot_writeupnotes' name=doc.name %}">
|
|
Ballot text
|
|
</a>
|
|
<a class="btn btn-primary btn-sm"
|
|
href="{% url 'ietf.doc.views_ballot.ballot_approvaltext' name=doc.name %}">
|
|
Announcement text
|
|
</a>
|
|
{% endif %}
|
|
{% if actions %}
|
|
{% for label, url in actions %}
|
|
<a class="btn btn-primary btn-sm" href="{{ url }}">
|
|
{{ label|capfirst_allcaps }}
|
|
</a>
|
|
{% endfor %}
|
|
{% endif %}
|
|
</div>
|
|
{% if doc.get_state_slug == "active" or doc.get_state_slug == "rfc" %}
|
|
<div class="card mt-5">
|
|
<div class="card-header">
|
|
{% if doc.get_state_slug == "rfc" and not snapshot %}
|
|
RFC {{ rfc_number }}
|
|
{% else %}
|
|
{{ name }}-{{ doc.rev }}
|
|
{% endif %}
|
|
</div>
|
|
<div class="card-body">
|
|
<pre>{{ content|sanitize|safe|default:"(Unavailable)" }}</pre>
|
|
</div>
|
|
</div>
|
|
{% if split_content %}
|
|
<a class="btn btn-primary my-3" href="?include_text=1">
|
|
<i class="bi bi-caret-down">
|
|
</i>
|
|
Show full document
|
|
</a>
|
|
{% endif %}
|
|
{% else %}
|
|
<div class="card border-warning mt-5">
|
|
<div class="card-header bg-warning">
|
|
<b>This Internet-Draft is no longer active. A copy of
|
|
the expired Internet-Draft can be found at:</b>
|
|
<br>
|
|
<a href="{{ doc.get_href }}">
|
|
{{ doc.get_href }}
|
|
</a>
|
|
</div>
|
|
<div class="card-body">
|
|
<p class="h5 card-title">
|
|
Abstract
|
|
</p>
|
|
<p class="card-text">
|
|
{{ doc.abstract }}
|
|
</p>
|
|
<p class="h5 card-title">
|
|
Authors
|
|
</p>
|
|
<p class="card-text">
|
|
{% for author in doc.documentauthor_set.all %}
|
|
{% person_link author.person %}
|
|
{% if not forloop.last %}<br>{% endif %}
|
|
{% endfor %}
|
|
</p>
|
|
<p class="text-muted card-text">
|
|
(Note: The e-mail addresses provided for the authors of this Internet-Draft may no longer be valid.)
|
|
</p>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
{% endblock %}
|
|
{% block js %}
|
|
<script src="{% static 'ietf/js/d3.js' %}">
|
|
</script>
|
|
<script src="{% static 'ietf/js/document_timeline.js' %}">
|
|
</script>
|
|
{% endblock %}
|