Run tidy as part of tests, and fix HTML issues it finds.
- Legacy-Id: 19904
This commit is contained in:
parent
a507b31669
commit
64d2ba2558
|
@ -38,6 +38,7 @@ RUN apt-get install -qy \
|
|||
less \
|
||||
libmagic-dev \
|
||||
libmariadb-dev \
|
||||
libtidy-dev \
|
||||
locales \
|
||||
mariadb-client \
|
||||
netcat \
|
||||
|
|
|
@ -363,7 +363,7 @@ def add_links_in_new_revision_events(doc, events, diff_revisions):
|
|||
links += ""
|
||||
|
||||
if prev != None:
|
||||
links += ' (<a href="%s?url1=%s&url2=%s">diff from previous</a>)' % (settings.RFCDIFF_BASE_URL, quote(prev, safe="~"), quote(diff_url, safe="~"))
|
||||
links += ' (<a href="%s?url1=%s&url2=%s">diff from previous</a>)' % (settings.RFCDIFF_BASE_URL, quote(prev, safe="~"), quote(diff_url, safe="~"))
|
||||
|
||||
# replace the bold filename part
|
||||
e.desc = re.sub(r"<b>(.+-[0-9][0-9].txt)</b>", links, e.desc)
|
||||
|
@ -1087,7 +1087,7 @@ def build_doc_supermeta_block(doc):
|
|||
items.append(f'[<a href="{urlreverse("ietf.group.views.group_home",kwargs=dict(acronym=doc.group.acronym))}" title="The working group handling this document">WG</a>]')
|
||||
items.append(f'[<a href="mailto:{doc.name}@ietf.org?subject={doc.name}" title="Send email to the document authors">Email</a>]')
|
||||
if doc.rev != "00":
|
||||
items.append(f'[<a href="{settings.RFCDIFF_BASE_URL}?difftype=--hwdiff&url2={doc.name}-{doc.rev}.txt" title="Inline diff (wdiff)">Diff1</a>]')
|
||||
items.append(f'[<a href="{settings.RFCDIFF_BASE_URL}?difftype=--hwdiff&url2={doc.name}-{doc.rev}.txt" title="Inline diff (wdiff)">Diff1</a>]')
|
||||
items.append(f'[<a href="{settings.RFCDIFF_BASE_URL}?url2={doc.name}-{doc.rev}.txt" title="Side-by-side diff">Diff2</a>]')
|
||||
items.append(f'[<a href="{settings.IDNITS_BASE_URL}?url={settings.IETF_ID_ARCHIVE_URL}{doc.name}-{doc.rev}.txt" title="Run an idnits check of this document">Nits</a>]')
|
||||
|
||||
|
@ -1321,4 +1321,4 @@ def fuzzy_find_documents(name, rev=None):
|
|||
rev = None # found a doc by name with rev = None, so update that
|
||||
|
||||
FoundDocuments = namedtuple('FoundDocuments', 'documents matched_name matched_rev')
|
||||
return FoundDocuments(docs, name, rev)
|
||||
return FoundDocuments(docs, name, rev)
|
|
@ -14,7 +14,7 @@ from django.template.defaultfilters import striptags
|
|||
from django.template.loader import render_to_string
|
||||
from django.urls import reverse as urlreverse
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
|
||||
from django.utils.html import escape
|
||||
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
|
@ -527,7 +527,7 @@ def lastcalltext(request, name):
|
|||
if not existing:
|
||||
existing = generate_last_call_announcement(request, doc)
|
||||
|
||||
form = LastCallTextForm(initial=dict(last_call_text=existing.text))
|
||||
form = LastCallTextForm(initial=dict(last_call_text=escape(existing.text)))
|
||||
|
||||
if request.method == 'POST':
|
||||
if "save_last_call_text" in request.POST or "send_last_call_request" in request.POST:
|
||||
|
@ -612,7 +612,7 @@ def ballot_writeupnotes(request, name):
|
|||
if not existing:
|
||||
existing = generate_ballot_writeup(request, doc)
|
||||
|
||||
form = BallotWriteupForm(initial=dict(ballot_writeup=existing.text))
|
||||
form = BallotWriteupForm(initial=dict(ballot_writeup=escape(existing.text)))
|
||||
|
||||
if request.method == 'POST' and "save_ballot_writeup" in request.POST or "issue_ballot" in request.POST:
|
||||
form = BallotWriteupForm(request.POST)
|
||||
|
@ -727,7 +727,7 @@ def ballot_rfceditornote(request, name):
|
|||
if not existing or (existing.text == ""):
|
||||
existing = generate_ballot_rfceditornote(request, doc)
|
||||
|
||||
form = BallotRfcEditorNoteForm(auto_id=False, initial=dict(rfc_editor_note=existing.text))
|
||||
form = BallotRfcEditorNoteForm(auto_id=False, initial=dict(rfc_editor_note=escape(existing.text)))
|
||||
|
||||
if request.method == 'POST' and "save_ballot_rfceditornote" in request.POST:
|
||||
form = BallotRfcEditorNoteForm(request.POST)
|
||||
|
@ -791,7 +791,7 @@ def ballot_approvaltext(request, name):
|
|||
if not existing:
|
||||
existing = generate_approval_mail(request, doc)
|
||||
|
||||
form = ApprovalTextForm(initial=dict(approval_text=existing.text))
|
||||
form = ApprovalTextForm(initial=dict(approval_text=escape(existing.text)))
|
||||
|
||||
if request.method == 'POST':
|
||||
if "save_approval_text" in request.POST:
|
||||
|
@ -1206,4 +1206,4 @@ def irsg_ballot_status(request):
|
|||
|
||||
docs.append(doc)
|
||||
|
||||
return render(request, 'doc/irsg_ballot_status.html', {'docs':docs})
|
||||
return render(request, 'doc/irsg_ballot_status.html', {'docs':docs})
|
|
@ -10,7 +10,7 @@ from django.contrib.auth.decorators import login_required
|
|||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.template.loader import render_to_string
|
||||
from django.urls import reverse as urlreverse
|
||||
|
||||
from django.utils.html import escape
|
||||
|
||||
from ietf.doc.mails import (email_bofreq_title_changed, email_bofreq_editors_changed,
|
||||
email_bofreq_new_revision, email_bofreq_responsible_changed)
|
||||
|
@ -172,7 +172,7 @@ def new_bof_request(request):
|
|||
return redirect('ietf.doc.views_doc.document_main', name=bofreq.name)
|
||||
|
||||
else:
|
||||
init = {'bofreq_content':render_to_string('doc/bofreq/bofreq_template.md',{}),
|
||||
init = {'bofreq_content':escape(render_to_string('doc/bofreq/bofreq_template.md',{})),
|
||||
'bofreq_submission':'enter',
|
||||
}
|
||||
form = NewBofreqForm(initial=init)
|
||||
|
|
|
@ -17,6 +17,7 @@ from django.conf import settings
|
|||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.html import escape
|
||||
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
|
@ -507,7 +508,7 @@ def review_announcement_text(request, name):
|
|||
existing_new_work.text = derive_new_work_text(existing.text,group)
|
||||
existing_new_work.time = datetime.datetime.now()
|
||||
|
||||
form = ReviewAnnouncementTextForm(initial=dict(announcement_text=existing.text,new_work_text=existing_new_work.text))
|
||||
form = ReviewAnnouncementTextForm(initial=dict(announcement_text=escape(existing.text),new_work_text=escape(existing_new_work.text)))
|
||||
|
||||
if request.method == 'POST':
|
||||
form = ReviewAnnouncementTextForm(request.POST)
|
||||
|
@ -588,7 +589,7 @@ def action_announcement_text(request, name):
|
|||
if not existing:
|
||||
raise Http404
|
||||
|
||||
form = ActionAnnouncementTextForm(initial=dict(announcement_text=existing.text))
|
||||
form = ActionAnnouncementTextForm(initial=dict(announcement_text=escape(existing.text)))
|
||||
|
||||
if request.method == 'POST':
|
||||
form = ActionAnnouncementTextForm(request.POST)
|
||||
|
@ -650,7 +651,7 @@ def ballot_writeupnotes(request, name):
|
|||
|
||||
reissue = charter.latest_event(DocEvent, type="sent_ballot_announcement")
|
||||
|
||||
form = BallotWriteupForm(initial=dict(ballot_writeup=existing.text))
|
||||
form = BallotWriteupForm(initial=dict(ballot_writeup=escape(existing.text)))
|
||||
|
||||
if request.method == 'POST' and ("save_ballot_writeup" in request.POST or "send_ballot" in request.POST):
|
||||
form = BallotWriteupForm(request.POST)
|
||||
|
@ -802,7 +803,7 @@ def approve(request, name):
|
|||
|
||||
return render(request, 'doc/charter/approve.html',
|
||||
dict(charter=charter,
|
||||
announcement=announcement))
|
||||
announcement=escape(announcement)))
|
||||
|
||||
def charter_with_milestones_txt(request, name, rev):
|
||||
charter = get_object_or_404(Document, type="charter", docalias__name=name)
|
||||
|
@ -833,4 +834,4 @@ def charter_with_milestones_txt(request, name, rev):
|
|||
return render(request, 'doc/charter/charter_with_milestones.txt',
|
||||
dict(charter_text=charter_text,
|
||||
milestones=milestones),
|
||||
content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
|
||||
content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
|
|
@ -12,6 +12,7 @@ from django.http import HttpResponseRedirect, Http404
|
|||
from django.urls import reverse
|
||||
from django.template.loader import render_to_string
|
||||
from django.conf import settings
|
||||
from django.utils.html import escape
|
||||
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
|
@ -215,7 +216,7 @@ def submit(request, name):
|
|||
|
||||
elif "reset_text" in request.POST:
|
||||
|
||||
init = { "content": render_to_string("doc/conflict_review/review_choices.txt",dict())}
|
||||
init = { "content": escape(render_to_string("doc/conflict_review/review_choices.txt",dict()))}
|
||||
form = UploadForm(initial=init)
|
||||
|
||||
# Protect against handcrufted malicious posts
|
||||
|
@ -229,9 +230,9 @@ def submit(request, name):
|
|||
init = { "content": ""}
|
||||
|
||||
if not_uploaded_yet:
|
||||
init["content"] = render_to_string("doc/conflict_review/review_choices.txt",
|
||||
init["content"] = escape(render_to_string("doc/conflict_review/review_choices.txt",
|
||||
dict(),
|
||||
)
|
||||
))
|
||||
else:
|
||||
filename = os.path.join(settings.CONFLICT_REVIEW_PATH, '%s-%s.txt' % (review.canonical_name(), review.rev))
|
||||
try:
|
||||
|
@ -358,7 +359,7 @@ def approve_conflict_review(request, name):
|
|||
|
||||
else:
|
||||
|
||||
init = { "announcement_text" : default_approval_text(review) }
|
||||
init = { "announcement_text" : escape(default_approval_text(review)) }
|
||||
form = AnnouncementForm(initial=init)
|
||||
|
||||
return render(request, 'doc/conflict_review/approve.html',
|
||||
|
@ -522,4 +523,4 @@ def start_review_as_stream_owner(request, name):
|
|||
{'form': form,
|
||||
'doc_to_review': doc_to_review,
|
||||
},
|
||||
)
|
||||
)
|
|
@ -16,6 +16,7 @@ from django.urls import reverse
|
|||
from django.template.loader import render_to_string
|
||||
from django.conf import settings
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.html import escape
|
||||
|
||||
import debug # pyflakes:ignore
|
||||
from ietf.doc.mails import email_ad_approved_status_change
|
||||
|
@ -396,7 +397,7 @@ def approve(request, name):
|
|||
|
||||
init = []
|
||||
for rel in status_change.relateddocument_set.filter(relationship__slug__in=STATUSCHANGE_RELATIONS):
|
||||
init.append({"announcement_text" : default_approval_text(status_change,rel),
|
||||
init.append({"announcement_text" : escape(default_approval_text(status_change,rel)),
|
||||
"label": "Announcement text for %s to %s"%(rel.target.document.canonical_name(),newstatus(rel)),
|
||||
})
|
||||
formset = AnnouncementFormSet(initial=init)
|
||||
|
@ -674,7 +675,7 @@ def last_call(request, name):
|
|||
if not last_call_event:
|
||||
last_call_event = generate_last_call_text(request, status_change)
|
||||
|
||||
form = LastCallTextForm(initial=dict(last_call_text=last_call_event.text))
|
||||
form = LastCallTextForm(initial=dict(last_call_text=escape(last_call_event.text)))
|
||||
|
||||
if request.method == 'POST':
|
||||
if "save_last_call_text" in request.POST or "send_last_call_request" in request.POST:
|
||||
|
@ -724,4 +725,4 @@ def last_call(request, name):
|
|||
last_call_form = form,
|
||||
),
|
||||
)
|
||||
|
||||
|
|
@ -244,7 +244,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
q = PyQuery(response.content)
|
||||
self.assertEqual(len(q("#id_rooms_table tr input[type='checkbox']")),meeting.room_set.count())
|
||||
self.assertEqual(len(q("#id_rooms_table tr input[type='checkbox']")),meeting.room_set.count()+1)
|
||||
|
||||
# test delete
|
||||
# first unschedule sessions so we can delete
|
||||
|
@ -441,4 +441,4 @@ class SecrMeetingTestCase(TestCase):
|
|||
times = get_times(meeting,day)
|
||||
values = [ x[0] for x in times ]
|
||||
self.assertTrue(times)
|
||||
self.assertTrue(timeslot.time.strftime('%H%M') in values)
|
||||
self.assertTrue(timeslot.time.strftime('%H%M') in values)
|
|
@ -52,17 +52,11 @@
|
|||
<!-- END Breadcrumbs -->
|
||||
{% endif %}
|
||||
|
||||
{% comment %}
|
||||
<!-- Removed per Glen 08-04-2010 -->
|
||||
<!-- Javascript Warning -->
|
||||
<noscript class="errornote"> You have Javascript disabled. Javascript is required for this application.</noscript>
|
||||
{% endcomment %}
|
||||
|
||||
<!-- Django Messages -->
|
||||
{% if messages %}
|
||||
<ul class="messages">
|
||||
{% for message in messages %}
|
||||
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
|
||||
<li {% if message.tags %}class="{{ message.tags }}"{% endif %}>{{ message }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
@ -83,6 +77,5 @@
|
|||
{% block footer %}<div id="footer"></div>{% endblock %}
|
||||
</div>
|
||||
<!-- END Container -->
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -53,12 +53,6 @@
|
|||
<!-- END Breadcrumbs -->
|
||||
{% endif %}
|
||||
|
||||
{% comment %}
|
||||
<!-- Removed per Glen 08-04-2010 -->
|
||||
<!-- Javascript Warning -->
|
||||
<noscript class="errornote"> You have Javascript disabled. Javascript is required for this application.</noscript>
|
||||
{% endcomment %}
|
||||
|
||||
<!-- Django Messages -->
|
||||
{% if messages %}
|
||||
<ul class="messages">
|
||||
|
|
|
@ -4,7 +4,11 @@
|
|||
{% block title %}Groups - Search{% endblock %}
|
||||
|
||||
{% block extrahead %}{{ block.super }}
|
||||
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
|
||||
<script src="{% static 'secr/js/utils.js' %}"></script>
|
||||
<script src="{% static "ietf/js/list.js" %}"></script>
|
||||
{% endblock %}{% endblock %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
|
@ -31,4 +35,4 @@
|
|||
</div> <!-- inline-group -->
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -57,8 +57,8 @@
|
|||
{% endif %}
|
||||
<td width="320">{{ cname|title }}</td>
|
||||
<td><input type="text" value="{{ value }}" maxlength="255" class="wg_constraint" disabled><br>{{ field }} {{ field.label }}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td colspan="2">BOF Sessions:</td>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<li><a href="https://www.ietf.org/instructions/meeting_materials_tool.html" target="_blank">Instructions</a>.</li>
|
||||
<li>If you require assistance in using this tool, or wish to report a bug, then please send a message to <a href="mailto:{{settings.SECRETARIAT_ACTION_EMAIL}}">ietf-action@ietf.org</a>.</li>
|
||||
<li>To submit your materials via email, please send agendas to <a href="mailto:agenda@ietf.org">agenda@ietf.org</a> and minutes/presentation slides to <a href="mailto:proceedings@ietf.org">proceedings@ietf.org</a>.</li>
|
||||
<li><bold>Note:</bold> Normal session materials materials management is now performed using the {% if meeting.number %}<a href="{% url 'ietf.meeting.views.materials' num=meeting.number %}">{% endif %}materials page{% if meeting.number %}</a>{% endif %}
|
||||
|
||||
<li><b>Note:</b> Normal session materials materials management is now performed using the {% if meeting.number %}<a href="{% url 'ietf.meeting.views.materials' num=meeting.number %}">{% endif %}materials page{% if meeting.number %}</a>{% endif %}
|
|
@ -10,29 +10,37 @@
|
|||
<tr valign="top">
|
||||
<td>
|
||||
<h3>IESG</h3>
|
||||
<li> <a href="{% url 'ietf.secr.announcement.views.main' %}"><b>Announcement</b></a></li><br>
|
||||
<li> <a href="{% url 'ietf.secr.telechat.views.main' %}"><b>Telechat</b></a></li><br>
|
||||
<li> <a href="{% url 'ietf.secr.console.views.main' %}"><b>Console</b></a></li><br>
|
||||
<ul>
|
||||
<li> <a href="{% url 'ietf.secr.announcement.views.main' %}"><b>Announcement</b></a></li>
|
||||
<li> <a href="{% url 'ietf.secr.telechat.views.main' %}"><b>Telechat</b></a></li>
|
||||
<li> <a href="{% url 'ietf.secr.console.views.main' %}"><b>Console</b></a></li>
|
||||
</ul>
|
||||
</td>
|
||||
<td>
|
||||
<h3>IDs and WGs Process</h3>
|
||||
<li> <a href="{% url "ietf.secr.areas.views.list_areas" %}"><b>Areas</b></a></li><br>
|
||||
<li> <a href="{% url 'ietf.secr.groups.views.search' %}"><b>Groups</b></a></li><br>
|
||||
<li> <a href="{% url 'ietf.secr.rolodex.views.search' %}"><b>Rolodex</b></a></li><br>
|
||||
<li> <a href="{% url 'ietf.secr.roles.views.main' %}"><b>Roles</b></a></li><br>
|
||||
<ul>
|
||||
<li> <a href="{% url "ietf.secr.areas.views.list_areas" %}"><b>Areas</b></a></li>
|
||||
<li> <a href="{% url 'ietf.secr.groups.views.search' %}"><b>Groups</b></a></li>
|
||||
<li> <a href="{% url 'ietf.secr.rolodex.views.search' %}"><b>Rolodex</b></a></li>
|
||||
<li> <a href="{% url 'ietf.secr.roles.views.main' %}"><b>Roles</b></a></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<h3>Meetings and Proceedings</h3>
|
||||
<li> <a href="{% url "ietf.secr.sreq.views.main" %}"><b>Session Requests</b></a></li><br>
|
||||
<li> <a href="{% url 'ietf.secr.proceedings.views.main' %}"><b>Meeting Materials Manager (Proceedings)</b></a></li><br>
|
||||
<li> <a href="{% url "ietf.secr.meetings.views.main" %}"><b>Meeting Manager</b></a></li><br>
|
||||
<li> <a href="{% url "ietf.secr.meetings.views.blue_sheet_redirect" %}"><b>Blue Sheets</b></a></li><br>
|
||||
<ul>
|
||||
<li> <a href="{% url "ietf.secr.sreq.views.main" %}"><b>Session Requests</b></a></li>
|
||||
<li> <a href="{% url 'ietf.secr.proceedings.views.main' %}"><b>Meeting Materials Manager (Proceedings)</b></a></li>
|
||||
<li> <a href="{% url "ietf.secr.meetings.views.main" %}"><b>Meeting Manager</b></a></li>
|
||||
<li> <a href="{% url "ietf.secr.meetings.views.blue_sheet_redirect" %}"><b>Blue Sheets</b></a></li>
|
||||
</ul>
|
||||
</td>
|
||||
<td>
|
||||
<h3>IPR</h3>
|
||||
<li> <a href="{% url 'ietf.ipr.views.admin' state='pending' %}"><b>IPR Admin</b></a></li><br>
|
||||
<ul>
|
||||
<li> <a href="{% url 'ietf.ipr.views.admin' state='pending' %}"><b>IPR Admin</b></a></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@ -43,9 +51,11 @@
|
|||
<tr valign="top">
|
||||
<td>
|
||||
<h3>Section 1</h3>
|
||||
<li> <a href="{% url "ietf.secr.sreq.views.main" %}"><b>Session Requests</b></a></li><br>
|
||||
<li> <a href="{% url 'ietf.secr.proceedings.views.main' %}"><b>Meeting Material Manager</b></a></li><br>
|
||||
<li> <a href="{% url 'ietf.secr.announcement.views.main' %}"><b>Announcements</b></a></li><br>
|
||||
<ul>
|
||||
<li> <a href="{% url "ietf.secr.sreq.views.main" %}"><b>Session Requests</b></a></li>
|
||||
<li> <a href="{% url 'ietf.secr.proceedings.views.main' %}"><b>Meeting Material Manager</b></a></li>
|
||||
<li> <a href="{% url 'ietf.secr.announcement.views.main' %}"><b>Announcements</b></a></li>
|
||||
</ul>
|
||||
</td>
|
||||
<td>
|
||||
<h3>Section 2</h3>
|
||||
|
@ -64,4 +74,4 @@
|
|||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -14,9 +14,6 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<noscript class="errornote"> You have javascript disabled. Javascript is required for this application.</noscript>
|
||||
|
||||
<div class="module">
|
||||
<h2>Proceedings - Add</h2>
|
||||
<form id="proceedings-add-form" enctype="multipart/form-data" action="" method="post">{% csrf_token %}
|
||||
|
@ -27,5 +24,4 @@
|
|||
</form>
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% endblock %}
|
|
@ -28,12 +28,12 @@
|
|||
|
||||
<br>
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<p>
|
||||
<table>
|
||||
{{ form }}
|
||||
<input type="submit" value="Select" />
|
||||
</p>
|
||||
</table>
|
||||
<input type="submit" value="Select" />
|
||||
</form>
|
||||
</div> <!-- inline-related -->
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<div class="module interim-container">
|
||||
<h2>Meeting - {{ meeting }}</h2>
|
||||
<p><h3>Session: {{ slot.name }}</h3></p>
|
||||
<h3>Session: {{ slot.name }}</h3>
|
||||
<form id="misc-session-edit-form" enctype="multipart/form-data" action="." method="post">{% csrf_token %}
|
||||
<table class="full-width amstable">
|
||||
{{ form.as_table }}
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
|
||||
<div>
|
||||
<form id="timeslot-form" action="" method="post">{% csrf_token %}
|
||||
<table id="timeslot-form" class="full-width amstable">
|
||||
<table class="full-width amstable">
|
||||
<col width="150">
|
||||
{{ form.as_table }}
|
||||
<tr><td colspan="2" align="center"><input type="submit" name="submit" value="Add" /></td></tr>
|
||||
|
@ -69,7 +69,6 @@
|
|||
</ul>
|
||||
</div> <!-- button-group -->
|
||||
|
||||
</form>
|
||||
</div> <!-- module -->
|
||||
|
||||
|
||||
|
|
|
@ -40,7 +40,6 @@
|
|||
{{ form }}
|
||||
</table>
|
||||
</div> <!-- inline-related -->
|
||||
</div> <!-- inline-group -->
|
||||
|
||||
<div class="button-group">
|
||||
<ul>
|
||||
|
@ -57,25 +56,4 @@
|
|||
|
||||
{% block footer-extras %}
|
||||
{% include "includes/meetings_footer.html" %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
|
@ -16,6 +16,7 @@
|
|||
<table id="id_rooms_table" class="full-width">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
{% for field in formset.forms.0.visible_fields %}
|
||||
<th>{{ field.label|capfirst }}</th>
|
||||
{% endfor %}
|
||||
|
@ -27,9 +28,11 @@
|
|||
<tr><td colspan="3">{{ form.non_field_errors }}</td></tr>
|
||||
{% endif %}
|
||||
<tr class="{% cycle 'row1' 'row2' %}">
|
||||
<td>
|
||||
{% for hidden in form.hidden_fields %}
|
||||
{{ hidden }}
|
||||
{% endfor %}
|
||||
</td>
|
||||
{% for field in form.visible_fields %}
|
||||
<td>
|
||||
{{ field.errors }}
|
||||
|
@ -38,16 +41,15 @@
|
|||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% if options_form %}{{ options_form }}{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if options_form %}{{ options_form }}{% endif %}
|
||||
{% include "includes/buttons_save.html" %}
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -52,7 +52,6 @@
|
|||
</ul>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -40,13 +40,12 @@
|
|||
{% block content %}
|
||||
|
||||
<div class="module interim-container">
|
||||
<form id="roles-form" action="" method="post">{% csrf_token %}
|
||||
<h2>Role Tool</h2>
|
||||
<div class="inline-related">
|
||||
<h3><b>Select Group</b></h3>
|
||||
<p>Select a Group to change roles.</p>
|
||||
<form id="roles-form".>
|
||||
{{ group_form.as_p }}
|
||||
</form>
|
||||
</div> <!-- inline-related -->
|
||||
<br>
|
||||
|
||||
|
@ -61,20 +60,19 @@
|
|||
<h2></h2>
|
||||
<h3>Add Role</h3>
|
||||
{% with role_form as form %}
|
||||
<form id="roles-form" action="" method="post">{% csrf_token %}
|
||||
{{ role_form.non_field_errors }}
|
||||
<table class="full-width">
|
||||
<tr>
|
||||
{{ form.group_acronym.errors }}{{ form.group_acronym }}
|
||||
<td>{{ form.group_acronym.errors }}{{ form.group_acronym }}</td>
|
||||
<td>{{ form.name.errors }}{{ form.name }}</td>
|
||||
<td>{{ form.person.errors }}{{ form.person }}{% if form.person.help_text %}<br>{{ form.person.help_text }}{% endif %}</td>
|
||||
<td>{{ form.email.errors }}{{ form.email }}{% if form.email.help_text %}<br>{{ form.email.help_text }}{% endif %}</td>
|
||||
<td><input type="submit" name="submit" value="Add" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{% endwith %}
|
||||
</div> <!-- inline-related -->
|
||||
</form>
|
||||
|
||||
<div class="button-group">
|
||||
<ul>
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
<table id="rolodex-email-table" class="full-width">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
{% for field in email_formset.forms.0 %}
|
||||
{% if not field.is_hidden %}
|
||||
<th>{{ field.label }}</th>
|
||||
|
@ -40,10 +41,12 @@
|
|||
{% for form in email_formset.forms %}
|
||||
{% if form.non_field_errors %}{{ form.non_field_errors }}{% endif %}
|
||||
<tr class="{% cycle 'row1' 'row2' %}">
|
||||
<td>
|
||||
{# Include the hidden fields in the form #}
|
||||
{% for hidden in form.hidden_fields %}
|
||||
{{ hidden }}
|
||||
{% endfor %}
|
||||
</td>
|
||||
{% for field in form.visible_fields %}
|
||||
<td>
|
||||
{{ field.errors }}
|
||||
|
@ -59,8 +62,8 @@
|
|||
|
||||
{% include "includes/buttons_save_cancel.html" %}
|
||||
|
||||
</form>
|
||||
</div> <!-- module -->
|
||||
</form>
|
||||
|
||||
</div> <!-- module -->
|
||||
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -17,9 +17,9 @@
|
|||
<tr><td>Name:</td><td>{{ person.name }}</td></tr>
|
||||
<tr><td>Ascii Name:</td><td>{{ person.ascii }}</td></tr>
|
||||
<tr><td>Short Name:</td><td>{{ person.ascii_short }}</td></tr>
|
||||
<tr><td>Aliases:</td><td>{% for alias in person.alias_set.all %}{% if not forloop.first %}, {% endif %}{{ alias.name }}{% endfor %}
|
||||
<tr><td>Aliases:</td><td>{% for alias in person.alias_set.all %}{% if not forloop.first %}, {% endif %}{{ alias.name }}{% endfor %}</td>
|
||||
<tr><td>User:</td><td>{{ person.user }}</td></tr>
|
||||
<tr></tr>
|
||||
<tr><td></td><td></td></tr>
|
||||
{% for email in person.emails %}
|
||||
<tr><td>Email {{ forloop.counter }}:</td><td>{{ email }}</td></tr>
|
||||
{% endfor %}
|
||||
|
@ -66,4 +66,4 @@
|
|||
</div> <!-- view-buttons -->
|
||||
|
||||
</div> <!-- view-container -->
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -19,14 +19,6 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<noscript>
|
||||
<div style="position: fixed; top: 0px; left: 0px; z-index: 3000;
|
||||
height: 100%; width: 100%; background-color: #FFFFFF">
|
||||
<p style="margin-left: 10px">This page requires JavaScript.</p>
|
||||
</div>
|
||||
</noscript>
|
||||
|
||||
<div class="module interim-container">
|
||||
<h2>IETF {{ meeting.number }}: Edit Session Request</h2>
|
||||
<div class="inline-related">
|
||||
|
@ -35,9 +27,9 @@
|
|||
{% include "includes/sessions_request_form.html" %}
|
||||
|
||||
</div> <!-- module -->
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer-extras %}
|
||||
{% include "includes/sessions_footer.html" %}
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -19,14 +19,6 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<noscript>
|
||||
<div style="position: fixed; top: 0px; left: 0px; z-index: 3000;
|
||||
height: 100%; width: 100%; background-color: #FFFFFF">
|
||||
<p style="margin-left: 10px">This page requires JavaScript.</p>
|
||||
</div>
|
||||
</noscript>
|
||||
|
||||
<div class="module interim-container">
|
||||
<h2>IETF {{ meeting.number }}: New {% if is_virtual %}Virtual {% endif %}Session Request</h2>
|
||||
<div class="inline-related">
|
||||
|
@ -35,7 +27,7 @@
|
|||
<li><button onclick="if (window.confirm('A message will be sent to agenda@ietf.com as well as to the area director(s).\n\nContinue?')) { window.location='{% url "ietf.secr.sreq.views.no_session" acronym=group.acronym %}'};">Send a notification that the group does not plan to hold a session at IETF {{ meeting.number }}</button></li>
|
||||
<li><button onclick="window.location='{% url "ietf.secr.sreq.views.new" acronym=group.acronym %}?previous'">Retrieve all information from previous meeting</button></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
{% include "includes/sessions_request_form.html" %}
|
||||
|
||||
</div> <!-- module -->
|
||||
|
@ -44,4 +36,4 @@
|
|||
|
||||
{% block footer-extras %}
|
||||
{% include "includes/sessions_footer.html" %}
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -32,9 +32,8 @@
|
|||
{% else %}
|
||||
<div>None</div>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
@ -61,4 +60,4 @@
|
|||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -46,7 +46,7 @@
|
|||
{% endwith %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<div class="telechat-button">
|
||||
<ul><li><button type="submit" name="submit" value="update_ballot">Update Ballot</button></li></ul>
|
||||
|
@ -98,4 +98,4 @@
|
|||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -1,7 +1,7 @@
|
|||
{% extends "telechat/base_telechat.html" %}
|
||||
|
||||
{% block subsection %}
|
||||
<div id="telechat-main">
|
||||
<div id="telechat-main-DUPLICATE">
|
||||
<h3>Select a Telechat</h3>
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
{{ form.date.label_tag }} {{ form.date }} <button type="submit" name="submit" value="Select">Select</button>
|
||||
|
@ -9,4 +9,4 @@
|
|||
<br>
|
||||
<a href="/admin/iesg/telechatdate/" target="_blank">Add a new Telechat Date</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -16,6 +16,8 @@ table .sort:hover {
|
|||
table .sort:after {
|
||||
white-space: nowrap;
|
||||
font-family: 'bootstrap-icons';
|
||||
font-size: larger;
|
||||
color: $secondary;
|
||||
content: '\f283'; // chevron-expand
|
||||
float: right;
|
||||
padding-right: .25em;
|
||||
|
|
|
@ -95,13 +95,13 @@ $(document)
|
|||
}
|
||||
attachTo.append(menu.join(""));
|
||||
}
|
||||
|
||||
if (!("ontouchstart" in document.documentElement)) {
|
||||
$("ul.nav li.dropdown, ul.nav li.dropend")
|
||||
.on("mouseenter mouseleave", dropdown_hover);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (!("ontouchstart" in document.documentElement)) {
|
||||
$("ul.nav li.dropdown, ul.nav li.dropend")
|
||||
.on("mouseenter mouseleave", dropdown_hover);
|
||||
}
|
||||
});
|
||||
|
||||
// Automatically add a navigation pane to long pages
|
||||
|
|
|
@ -99,13 +99,13 @@
|
|||
<ul>
|
||||
<li>
|
||||
If a document has an rfc-editor state, you can select for it by asking for, e.g.,
|
||||
<a href="https://datatracker.ietf.org/api/v1/doc/document/?limit=0&name__contains=-v6ops-&states__type__slug__in=draft-rfceditor">
|
||||
<a href="https://datatracker.ietf.org/api/v1/doc/document/?limit=0&name__contains=-v6ops-&states__type__slug__in=draft-rfceditor">
|
||||
v6ops documents which match <code>states__type__slug__in=draft-rfceditor</code>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
If a document has an IESG state, you can select for it by asking for, e.g.,
|
||||
<a href="https://datatracker.ietf.org/api/v1/doc/document/?name__contains=-v6ops&states__type__slug__in=draft-iesg">
|
||||
<a href="https://datatracker.ietf.org/api/v1/doc/document/?name__contains=-v6ops&states__type__slug__in=draft-iesg">
|
||||
v6ops documents which match <code>states__type__slug__in=draft-iesg</code>
|
||||
</a>
|
||||
</li>
|
||||
|
@ -127,22 +127,22 @@
|
|||
You could either fetch and remember the different state groups of interest to you
|
||||
with queries like
|
||||
<pre>
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/state/?format=json&limit=0&type__slug__in=draft-rfceditor'
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/state/?format=json&limit=0&type__slug__in=draft-iesg'
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/state/?format=json&limit=0&type__slug__in=draft-stream-ietf'
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/state/?format=json&limit=0&type__slug__in=draft-rfceditor'
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/state/?format=json&limit=0&type__slug__in=draft-iesg'
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/state/?format=json&limit=0&type__slug__in=draft-stream-ietf'
|
||||
</pre>
|
||||
and then match the listed "resource_uri" of the results to the states listed for each
|
||||
document when you ask for
|
||||
<pre>
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/document/?limit=0&name__contains=-v6ops-'
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/document/?limit=0&name__contains=-v6ops-'
|
||||
</pre>
|
||||
</li>
|
||||
<li>
|
||||
Or alternatively you could do a series of queries asking for matches to the RFC Editor
|
||||
state first, then the IESG state, then the Stream state, and exclude earlier hits:
|
||||
<pre>
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/document/?limit=0&name__contains=-v6ops-&states__type__slug__in=draft-rfceditor' ...
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/document/?limit=0&name__contains=-v6ops-&states__type__slug__in=draft-iesg' ...
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/document/?limit=0&name__contains=-v6ops-&states__type__slug__in=draft-rfceditor' ...
|
||||
$ curl 'https://datatracker.ietf.org/api/v1/doc/document/?limit=0&name__contains=-v6ops-&states__type__slug__in=draft-iesg' ...
|
||||
</pre>
|
||||
etc.
|
||||
</li>
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
<div class="pt-3 container-fluid">
|
||||
<div class="row">
|
||||
{% if request.COOKIES.left_menu == "on" and not hide_menu %}
|
||||
<div class="col-1 d-none d-md-block border-end lh-sm leftmenu small">
|
||||
<div class="col-1 d-none d-md-block bg-light py-3 lh-sm leftmenu small">
|
||||
<ul class="nav nav-pills flex-column">
|
||||
{% include "base/menu.html" with flavor="left" %}
|
||||
</ul>
|
||||
|
|
|
@ -19,394 +19,406 @@
|
|||
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
|
||||
{% else %}
|
||||
<span class="fw-bolder">Groups</span>
|
||||
{% endif %}
|
||||
{% if flavor == 'top' %}<li class="dropdown-header">By area/parent</li>{% endif %}
|
||||
{% wg_menu flavor %}
|
||||
<li class="dropend">
|
||||
<a class="dropdown-item dropdown-toggle {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.active_groups" %}">
|
||||
Other
|
||||
</a>
|
||||
{% active_groups_menu flavor %}
|
||||
</li>
|
||||
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>New work</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.chartering_groups" %}">
|
||||
Chartering groups
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.bofs" group_type="wg" %}">
|
||||
BOFs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.doc.views_bofreq.bof_requests" %}">
|
||||
BOF Requests
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>Other groups</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.concluded_groups" %}">
|
||||
Concluded groups
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.mailinglists.views.nonwg' %}">
|
||||
Non-WG lists
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == "top" %}</ul>{% endif %}
|
||||
{% endif %}
|
||||
{% if flavor == 'top' %}<li class="dropdown-header">By area/parent</li>{% endif %}
|
||||
{% wg_menu flavor %}
|
||||
<li class="dropend">
|
||||
<a class="dropdown-item dropdown-toggle {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.active_groups" %}">
|
||||
Other
|
||||
</a>
|
||||
{% active_groups_menu flavor %}
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
{% if flavor == "top" %}
|
||||
<a href="#"
|
||||
class="nav-link dropdown-toggle"
|
||||
role="button"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
Documents
|
||||
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>New work</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.chartering_groups" %}">
|
||||
Chartering groups
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.bofs" group_type="wg" %}">
|
||||
BOFs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.doc.views_bofreq.bof_requests" %}">
|
||||
BOF Requests
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>Other groups</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.concluded_groups" %}">
|
||||
Concluded groups
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.mailinglists.views.nonwg' %}">
|
||||
Non-WG lists
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == "top" %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="nav-item dropdown">
|
||||
{% if flavor == "top" %}
|
||||
<a href="#"
|
||||
class="nav-link dropdown-toggle"
|
||||
role="button"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
Documents
|
||||
</a>
|
||||
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
|
||||
{% else %}
|
||||
<span class="fw-bolder">Documents</span>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.doc.views_search.search" %}">
|
||||
Search
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.doc.views_search.recent_drafts" %}">
|
||||
Recent drafts
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.submit.views.upload_submission" %}">
|
||||
Draft submission
|
||||
</a>
|
||||
</li>
|
||||
{% if user and user.is_authenticated %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.community.views.view_list" user.username %}">
|
||||
My tracked docs
|
||||
</a>
|
||||
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
|
||||
{% else %}
|
||||
<span class="fw-bolder">Documents</span>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% if user|has_role:"Area Director,Secretariat" %}
|
||||
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.doc.views_search.search" %}">
|
||||
Search
|
||||
href="{% url 'ietf.doc.views_status_change.rfc_status_changes' %}">
|
||||
RFC status changes
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.doc.views_ballot.irsg_ballot_status' %}">
|
||||
IRSG ballot status
|
||||
</a>
|
||||
</li>
|
||||
{% if user|has_role:"WG Chair,RG Chair" %}
|
||||
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>Manage</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.doc.views_search.recent_drafts" %}">
|
||||
Recent drafts
|
||||
href="{% url "ietf.submit.views.approvals" %}">
|
||||
Approve a draft
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.submit.views.upload_submission" %}">
|
||||
Draft submission
|
||||
</a>
|
||||
</li>
|
||||
{% if user and user.is_authenticated %}
|
||||
{% for g in user|docman_groups %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.community.views.view_list" user.username %}">
|
||||
My tracked docs
|
||||
href="{% url "ietf.group.views.group_documents" g.acronym %}">
|
||||
{{ g.acronym }} {{ g.type.slug }} docs
|
||||
</a>
|
||||
</li>
|
||||
{% if user|has_role:"Area Director,Secretariat" %}
|
||||
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.doc.views_status_change.rfc_status_changes' %}">
|
||||
RFC status changes
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
|
||||
{% endfor %}
|
||||
{% for g in user|matman_groups %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.doc.views_ballot.irsg_ballot_status' %}">
|
||||
IRSG ballot status
|
||||
href="{% url "ietf.group.views.meetings" g.acronym %}">
|
||||
{{ g.acronym }} {{ g.type.slug }} meetings
|
||||
</a>
|
||||
</li>
|
||||
{% if user|has_role:"WG Chair,RG Chair" %}
|
||||
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>Manage</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.submit.views.approvals" %}">
|
||||
Approve a draft
|
||||
</a>
|
||||
</li>
|
||||
{% for g in user|docman_groups %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.group_documents" g.acronym %}">
|
||||
{{ g.acronym }} {{ g.type.slug }} docs
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% for g in user|matman_groups %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.meetings" g.acronym %}">
|
||||
{{ g.acronym }} {{ g.type.slug }} meetings
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if user|has_role:"Review Team Secretary" %}
|
||||
{% if flavor == 'top' %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
Review Teams
|
||||
</li>
|
||||
{% for g in user|managed_review_groups %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.review_requests" g.acronym %}">
|
||||
{{ g.acronym }} reviews
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if user|active_nomcoms %}
|
||||
{% if flavor == 'top' %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
NomComs
|
||||
</li>
|
||||
{% for g in user|active_nomcoms %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.nomcom.views.private_index" g.nomcom_set.first.year %}">
|
||||
{{ g.acronym|capfirst }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if user|has_role:"Review Team Secretary" %}
|
||||
{% if flavor == 'top' %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
RFC streams
|
||||
Review Teams
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.stream_documents" acronym="iab" %}">
|
||||
IAB
|
||||
</a>
|
||||
{% for g in user|managed_review_groups %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.review_requests" g.acronym %}">
|
||||
{{ g.acronym }} reviews
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if user|active_nomcoms %}
|
||||
{% if flavor == 'top' %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
NomComs
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.stream_documents" acronym="irtf" %}">
|
||||
IRTF
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.stream_documents" acronym="ise" %}">
|
||||
ISE
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}</ul>{% endif %}
|
||||
{% for g in user|active_nomcoms %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.nomcom.views.private_index" g.nomcom_set.first.year %}">
|
||||
{{ g.acronym|capfirst }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if flavor == 'top' %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
{% if flavor == "top" %}
|
||||
<a href="#"
|
||||
class="nav-link dropdown-toggle"
|
||||
role="button"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
RFC streams
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.stream_documents" acronym="iab" %}">
|
||||
IAB
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.stream_documents" acronym="irtf" %}">
|
||||
IRTF
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.group.views.stream_documents" acronym="ise" %}">
|
||||
ISE
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="nav-item dropdown">
|
||||
{% if flavor == "top" %}
|
||||
<a href="#"
|
||||
class="nav-link dropdown-toggle"
|
||||
role="button"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
Meetings
|
||||
</a>
|
||||
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
|
||||
{% else %}
|
||||
<span class="fw-bolder">
|
||||
Meetings
|
||||
</span>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/agenda/">
|
||||
Agenda
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/materials/">
|
||||
Materials
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/floor-plan/">
|
||||
Floor plan
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="https://www.ietf.org/how/meetings/register/">
|
||||
Registration
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.meeting.views.important_dates' %}">
|
||||
Important dates
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/secr/sreq/">
|
||||
Request a session
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/requests">
|
||||
Session requests
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}
|
||||
{% if flavor == 'top' %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
Upcoming meetings
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/upcoming">
|
||||
Upcoming meetings
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}
|
||||
{% if flavor == 'top' %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
Past meetings
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/past">
|
||||
Past meetings
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="https://www.ietf.org/how/meetings/past/">
|
||||
Meeting proceedings
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="nav-item dropdown">
|
||||
{% if flavor == "top" %}
|
||||
<a href="#"
|
||||
class="nav-link dropdown-toggle"
|
||||
role="button"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
Other
|
||||
</a>
|
||||
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
|
||||
{% else %}
|
||||
<span class="fw-bolder">
|
||||
Other
|
||||
</span>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/ipr/">
|
||||
IPR disclosures
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/liaison/">
|
||||
Liaison statements
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/iesg/agenda/">
|
||||
IESG agenda
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.nomcom.views.index' %}">
|
||||
NomComs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/doc/downref/">
|
||||
Downref registry
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.stats.views.stats_index" %}">
|
||||
Statistics
|
||||
</a>
|
||||
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.stats.views.document_stats' %}">
|
||||
Drafts/RFCs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.stats.views.meeting_stats' %}">
|
||||
Meetings
|
||||
</a>
|
||||
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
|
||||
{% else %}
|
||||
<span class="fw-bolder">
|
||||
Meetings
|
||||
</span>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/agenda/">
|
||||
Agenda
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/materials/">
|
||||
Materials
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/floor-plan/">
|
||||
Floor plan
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="https://www.ietf.org/how/meetings/register/">
|
||||
Registration
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.meeting.views.important_dates' %}">
|
||||
Important dates
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/secr/sreq/">
|
||||
Request a session
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/requests">
|
||||
Session requests
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}
|
||||
{% if flavor == 'top' %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
Upcoming meetings
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/upcoming">
|
||||
Upcoming meetings
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}
|
||||
{% if flavor == 'top' %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li {% if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
Past meetings
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/meeting/past">
|
||||
Past meetings
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="https://www.ietf.org/how/meetings/past/">
|
||||
Meeting proceedings
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}</ul>{% endif %}
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
{% if flavor == "top" %}
|
||||
<a href="#"
|
||||
class="nav-link dropdown-toggle"
|
||||
role="button"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
Other
|
||||
{% if user and user.is_authenticated %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.stats.views.review_stats' %}">
|
||||
Reviews
|
||||
</a>
|
||||
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
|
||||
{% else %}
|
||||
<span class="fw-bolder">
|
||||
Other
|
||||
</span>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/ipr/">
|
||||
IPR disclosures
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/liaison/">
|
||||
Liaison statements
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/iesg/agenda/">
|
||||
IESG agenda
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.nomcom.views.index' %}">
|
||||
NomComs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/doc/downref/">
|
||||
Downref registry
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.stats.views.stats_index" %}">
|
||||
Statistics
|
||||
</a>
|
||||
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.stats.views.document_stats' %}">
|
||||
Drafts/RFCs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.stats.views.meeting_stats' %}">
|
||||
Meetings
|
||||
</a>
|
||||
</li>
|
||||
{% if user and user.is_authenticated %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.stats.views.review_stats' %}">
|
||||
Reviews
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/group/edu/materials/">
|
||||
Tutorials
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/api/">
|
||||
API Help
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.release.views.release' %}">
|
||||
Release notes
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="https://trac.ietf.org/trac/ietfdb/newticket">
|
||||
<span class="bi bi-bug">
|
||||
</span>
|
||||
Report a bug
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}</ul>{% endif %}
|
||||
</li>
|
||||
{% if flavor == 'top' %}
|
||||
{% include "base/menu_user.html" %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/group/edu/materials/">
|
||||
Tutorials
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="/api/">
|
||||
API Help
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.release.views.release' %}">
|
||||
Release notes
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
|
||||
href="https://trac.ietf.org/trac/ietfdb/newticket">
|
||||
<span class="bi bi-bug">
|
||||
</span>
|
||||
Report a bug
|
||||
</a>
|
||||
</li>
|
||||
{% if flavor == 'top' %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if flavor == 'top' %}
|
||||
{% include "base/menu_user.html" %}
|
||||
{% endif %}
|
|
@ -2,7 +2,7 @@
|
|||
{# Copyright The IETF Trust 2015, All Rights Reserved #}
|
||||
{% load origin %}
|
||||
{% origin %}
|
||||
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
|
||||
<ul class="dropdown-menu ms-n1">
|
||||
{% for p in parents %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %}text-wrap{% endif %}"
|
||||
|
@ -15,4 +15,4 @@
|
|||
href="{{ o.menu_url }}">{{ o.acronym|upper }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</ul>
|
||||
|
|
|
@ -16,299 +16,213 @@
|
|||
User
|
||||
{% endif %}
|
||||
</a>
|
||||
<ul class="dropdown-menu
|
||||
{% if flavor == 'top' %}
|
||||
mt-n1
|
||||
{% else %}
|
||||
ms-n1
|
||||
{% endif %}">
|
||||
<ul class="dropdown-menu {% if flavor == 'top' %} mt-n1 {% else %} ms-n1 {% endif %}">
|
||||
{% else %}
|
||||
<span class="fw-bolder">User</span>
|
||||
{% endif %}
|
||||
{% if request.get_full_path == "/accounts/logout/" %}
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if request.get_full_path == "/accounts/logout/" %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/login {% if "/accounts/logout/" not in request.get_full_path %} /?next={{ request.get_full_path|urlencode }}{% endif %}">
|
||||
Sign in
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
{% if user.is_authenticated %}
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/login
|
||||
{% if "/accounts/logout/" not in request.get_full_path %}
|
||||
/?next={{ request.get_full_path|urlencode }}
|
||||
{% endif %}">
|
||||
href="/accounts/logout/">
|
||||
Sign out
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/profile/">
|
||||
Account info
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="/person/{{ user.person.name|urlencode }}">
|
||||
Public profile page
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.cookies.views.preferences" %}"
|
||||
rel="nofollow">
|
||||
Preferences
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.ietfauth.views.apikey_index" %}"
|
||||
rel="nofollow">
|
||||
API keys
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/password/">
|
||||
Change password
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/username/">
|
||||
Change username
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/login/?next={{ request.get_full_path|urlencode }}">
|
||||
Sign in
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
{% if user.is_authenticated %}
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/logout/">
|
||||
Sign out
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/profile/">
|
||||
Account info
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="/person/{{ user.person.name|urlencode }}">
|
||||
Public profile page
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.cookies.views.preferences" %}"
|
||||
rel="nofollow">
|
||||
Preferences
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.ietfauth.views.apikey_index" %}"
|
||||
rel="nofollow">
|
||||
API keys
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/password/">
|
||||
Change password
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/username/">
|
||||
Change username
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/login/?next={{ request.get_full_path|urlencode }}">
|
||||
Sign in
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/reset/">
|
||||
Password reset
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.cookies.views.preferences" %}"
|
||||
rel="nofollow">
|
||||
Preferences
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url 'personal-information' %}">
|
||||
Handling of personal information
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
rel="nofollow"
|
||||
href="/accounts/reset/">
|
||||
Password reset
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.cookies.views.preferences" %}"
|
||||
rel="nofollow">
|
||||
Preferences
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if not request.user.is_authenticated %}
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.ietfauth.views.create_account" %}">
|
||||
New account
|
||||
</a>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url 'personal-information' %}">
|
||||
Handling of personal information
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if not request.user.is_authenticated %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.ietfauth.views.create_account" %}">
|
||||
New account
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if user|has_role:"Reviewer" %}
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.ietfauth.views.review_overview" %}">
|
||||
My reviews
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if user|has_role:"Area Director" %}
|
||||
{% if flavor == "top" %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li {% if flavor == "top" %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>AD dashboard</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url 'ietf.doc.views_search.docs_for_ad' name=user.person.full_name_as_key %}">
|
||||
My docs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.iesg.views.agenda_documents" %}">
|
||||
Next telechat
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.iesg.views.discusses" %}">
|
||||
Discusses
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.iesg.views.milestones_needing_review" %}">
|
||||
Milestone review
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.doc.views_search.drafts_in_last_call" %}">
|
||||
Last Call docs
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
{% if flavor == "top" %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li {% if flavor == "top" %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
IETF secretariat
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="/admin/iesg/telechatdate/">
|
||||
Telechat dates
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="/admin/iesg/telechatagendaitem/">
|
||||
Management items
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.iesg.views.milestones_needing_review" %}">
|
||||
Milestones
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.sync.views.discrepancies" %}">
|
||||
Sync discrepancies
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.ietfauth.views.add_account_whitelist" %}">
|
||||
Account whitelist
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if user|has_role:"IANA" %}
|
||||
{% if flavor == "top" %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if user|has_role:"Reviewer" %}
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.ietfauth.views.review_overview" %}">
|
||||
My reviews
|
||||
</a>
|
||||
<li {% if flavor == "top" %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
IANA
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.sync.views.discrepancies" %}">
|
||||
Sync discrepancies
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if user|has_role:"RFC Editor" %}
|
||||
{% if flavor == "top" %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if user|has_role:"Area Director" %}
|
||||
{% if flavor == "top" %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li {% if flavor == "top" %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>AD dashboard</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url 'ietf.doc.views_search.docs_for_ad' name=user.person.full_name_as_key %}">
|
||||
My docs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.iesg.views.agenda_documents" %}">
|
||||
Next telechat
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.iesg.views.discusses" %}">
|
||||
Discusses
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.iesg.views.milestones_needing_review" %}">
|
||||
Milestone review
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.doc.views_search.drafts_in_last_call" %}">
|
||||
Last Call docs
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
{% if flavor == "top" %}<li class="dropdown-divider"></li>{% endif %}
|
||||
<li {% if flavor == "top" %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
IETF secretariat
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="/admin/iesg/telechatdate/">
|
||||
Telechat dates
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="/admin/iesg/telechatagendaitem/">
|
||||
Management items
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.iesg.views.milestones_needing_review" %}">
|
||||
Milestones
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.sync.views.discrepancies" %}">
|
||||
Sync discrepancies
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.ietfauth.views.add_account_whitelist" %}">
|
||||
Account whitelist
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if user|has_role:"IANA" %}
|
||||
{% if flavor == "top" %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li {% if flavor == "top" %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
IANA
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.sync.views.discrepancies" %}">
|
||||
Sync discrepancies
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if user|has_role:"RFC Editor" %}
|
||||
{% if flavor == "top" %}
|
||||
<li class="dropdown-divider">
|
||||
</li>
|
||||
{% endif %}
|
||||
<li {% if flavor == "top" %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
RFC Editor
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item
|
||||
{% if flavor != 'top' %}
|
||||
text-wrap link-primary
|
||||
{% endif %}"
|
||||
href="{% url "ietf.sync.views.discrepancies" %}">
|
||||
Sync discrepancies
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if flavor == "top" %}</ul>{% endif %}
|
||||
</li>
|
||||
<li {% if flavor == "top" %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>
|
||||
RFC Editor
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
|
||||
href="{% url "ietf.sync.views.discrepancies" %}">
|
||||
Sync discrepancies
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if flavor == "top" %}</ul>{% endif %}
|
||||
|
|
|
@ -9,4 +9,4 @@
|
|||
{{ p.short_name }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
|
|
@ -76,7 +76,7 @@
|
|||
{% for l in origin.4 %}
|
||||
<table>
|
||||
<tr>
|
||||
<td class="{% if forloop.counter0 == origin.5 %} current{% endif %}"> {{l }}</td>
|
||||
<td class="{% if forloop.counter0 == origin.5 %} current{% endif %}">{{ l }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endfor %}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
{% bootstrap_form session_form %}
|
||||
{% bootstrap_form version_form %}
|
||||
{% bootstrap_button button_type="submit" name="save" content="Save" %}
|
||||
<a class="btn btn-primary"
|
||||
href="{% url 'ietf.doc.views_doc.all_presentations' name=doc.name %}">Cancel</a>
|
||||
<a class="btn btn-secondary float-end"
|
||||
href="{% url 'ietf.doc.views_doc.all_presentations' name=doc.name %}">Back</a>
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -27,9 +27,9 @@
|
|||
{% if field.name == "discuss" %}<div id="div_id_discuss">{% endif %}
|
||||
{% bootstrap_field field %}
|
||||
{% if field.name == "discuss" and old_pos and old_pos.discuss_time %}
|
||||
<div class="form-text">Last edited {{ old_pos.discuss_time }}</div>
|
||||
<div class="form-text mt-n3 mb-3">Last edited {{ old_pos.discuss_time }}</div>
|
||||
{% elif field.name == "comment" and old_pos and old_pos.comment_time %}
|
||||
<div class="form-text">Last edited {{ old_pos.comment_time }}</div>
|
||||
<div class="form-text mt-n3 mb-3">Last edited {{ old_pos.comment_time }}</div>
|
||||
{% endif %}
|
||||
{% if field.name == "discuss" %}</div>{% endif %}
|
||||
{% endfor %}
|
||||
|
@ -73,7 +73,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
$("input[name=position]").click(function () {
|
||||
$("input[name=position]").on("click", function () {
|
||||
discussToggle($(this).val());
|
||||
});
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
{% csrf_token %}
|
||||
{# curly percent bootstrap_form approval_text_form curly percent #}
|
||||
Due date for this ballot:
|
||||
<input type="text" data-provide="datepicker" data-date-format="yyyy-mm-dd" placeholder={{ fillerdate }} name="duedate">
|
||||
<input type="text" data-provide="datepicker" data-date-format="yyyy-mm-dd" placeholder="{{ fillerdate }}" name="duedate">
|
||||
<button type="submit" class="btn btn-primary" name="irsg_button" value="Yes">Yes</button>
|
||||
<button type="submit" class="btn btn-primary" name="irsg_button" value="No">No</button>
|
||||
</form>
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
{% load origin %}
|
||||
{% origin %}
|
||||
{% load ietf_filters %}
|
||||
<html lang=en>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset=utf-8>
|
||||
<meta charset="utf-8">
|
||||
<title>Ballot for {{ doc.name }}</title>
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
{% for req in req_group.list %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href={% url 'ietf.doc.views_doc.document_main' name=req.name %}>{{ req.name }}-{{ req.rev }}</a>
|
||||
<a href="{% url 'ietf.doc.views_doc.document_main' name=req.name %}">{{ req.name }}-{{ req.rev }}</a>
|
||||
</td>
|
||||
<td>{{ req.latest_revision_event.time|date:"Y-m-d" }}</td>
|
||||
<td>{{ req.title }}</td>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
{% csrf_token %}
|
||||
{% bootstrap_form form layout="horizontal" %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-secondary float-end" href="{{ doc.get_absolute_url }}">Cancel</a>
|
||||
<a class="btn btn-secondary float-end" href="{% url "ietf.doc.views_bofreq.bof_requests" %}">Back</a>
|
||||
</form>
|
||||
{% endblock %}
|
||||
{% block js %}
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
{% csrf_token %}
|
||||
{% bootstrap_form form layout="horizontal" %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-secondary float-end" href="{{ doc.get_absolute_url }}">Cancel</a>
|
||||
<a class="btn btn-secondary float-end" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
</form>
|
||||
{% endblock %}
|
||||
{% block js %}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
{% csrf_token %}
|
||||
{% bootstrap_form announcement_text_form %}
|
||||
<button type="submit" class="btn btn-primary" name="save_text" value="Save">Submit</button>
|
||||
<button type="submit" class="btn btn-warning" name="regenerate_text" value="Regenerate"">Regenerate
|
||||
<button type="submit" class="btn btn-warning" name="regenerate_text" value="Regenerate">Regenerate
|
||||
</button>
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
<a type="submit"
|
||||
|
|
|
@ -16,21 +16,18 @@
|
|||
{% csrf_token %}
|
||||
{% bootstrap_form announcement_text_form %}
|
||||
<button type="submit" class="btn btn-primary" name="save_text" value="Save">Submit</button>
|
||||
<button type="submit" class="btn btn-warning" name="regenerate_text" value="Regenerate"">Regenerate
|
||||
<button type="submit" class="btn btn-warning" name="regenerate_text" value="Regenerate">Regenerate
|
||||
</button>
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
<input type="submit"
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
name="send_annc_only"
|
||||
value="Send only to IETF-Announce"/>
|
||||
<input type="submit"
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
name="send_nw_only"
|
||||
value="Send only to New-Work"/>
|
||||
<input type="submit"
|
||||
type="submit"
|
||||
class="btn btn-primary"
|
||||
name="send_both"
|
||||
value="Send to both"/>
|
||||
|
|
|
@ -139,7 +139,7 @@
|
|||
{{ doc.name }}-{{ doc.rev }}
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<pre> {{ content|sanitize|maybewordwrap|safe }}</pre>
|
||||
{{ content|sanitize|maybewordwrap|safe }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
{% endif %}
|
||||
{% endfor %}
|
||||
<a class="btn btn-secondary float-end"
|
||||
href="{% url "ietf.doc.views_downref.downref_registry" %}">Cancel</a>
|
||||
href="{% url "ietf.doc.views_downref.downref_registry" %}">Back</a>
|
||||
</p>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[# bs5ok #}
|
||||
{# bs5ok #}
|
||||
{% extends "base.html" %}
|
||||
{# Copyright The IETF Trust 2015, All Rights Reserved #}
|
||||
{% load origin %}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<form name="review-suggested-replaces" role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
<a class="btn btn-secondary float-end" href="{{ doc.get_absolute_url }}">Cancel</a>
|
||||
<a class="btn btn-secondary float-end" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
<button type="submit" value="Save" class="btn btn-primary">Save</button>
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -56,7 +56,7 @@
|
|||
<br>
|
||||
Action holder{{ doc.documentactionholder_set.all|pluralize }}:
|
||||
{% for action_holder in doc.documentactionholder_set.all %}
|
||||
{% person_link action_holder.person title=action_holder.role_for_doc %} {{ action_holder|action_holder_badge }}
|
||||
{% person_link action_holder.person title=action_holder.role_for_doc %} {{ action_holder|action_holder_badge }}
|
||||
{% if not forloop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
|
|
@ -143,7 +143,6 @@
|
|||
{% block content_end %}{% endblock %}
|
||||
</div>
|
||||
{% block footer %}{% endblock %}
|
||||
</div>
|
||||
{% block js %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
|
@ -2,6 +2,9 @@
|
|||
{% extends "base.html" %}
|
||||
{# Copyright The IETF Trust 2015, All Rights Reserved #}
|
||||
{% load origin static %}
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
|
||||
{% endblock %}
|
||||
{% block title %}Document Search{% endblock %}
|
||||
{% block content %}
|
||||
{% origin %}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
{% load ballot_icon %}
|
||||
{% load person_filters %}
|
||||
{% load django_bootstrap5 %}
|
||||
<tr {% spaceless %}
|
||||
<tr{% spaceless %}
|
||||
{% if color_ad_position %} {% with doc|ballotposition:user as pos %} {% if pos %}class="position-{{ pos.slug }}-row"{% endif %}
|
||||
{% endwith %}
|
||||
{% endif %}
|
||||
|
@ -112,7 +112,7 @@
|
|||
{% if doc.rev != "00" %}
|
||||
<a href="{{ rfcdiff_base_url }}?url2={{ doc.name }}-{{ doc.rev }}">
|
||||
{% elif doc.replaces %}
|
||||
<a href="{{ rfcdiff_base_url }}?url1={{ doc.replaces_canonical_name }}&url2={{ doc.name }}-{{ doc.rev }}">
|
||||
<a href="{{ rfcdiff_base_url }}?url1={{ doc.replaces_canonical_name }}&url2={{ doc.name }}-{{ doc.rev }}">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if doc.get_state_slug == "rfc" %}
|
||||
|
|
|
@ -3,9 +3,6 @@
|
|||
{% load origin %}
|
||||
{% origin %}
|
||||
{% load ietf_filters static %}
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
|
||||
{% endblock %}
|
||||
{% if not docs %}
|
||||
{% if not skip_no_matches_warning %}<div class="alert alert-info my-3">No documents match your query.</div>{% endif %}
|
||||
{% endif %}
|
||||
|
@ -62,7 +59,4 @@
|
|||
{% endfor %}
|
||||
</tbody>
|
||||
{% endfor %}
|
||||
{% if end_table %}</table>{% endif %}
|
||||
{% block js %}
|
||||
<script src="{% static "ietf/js/list.js" %}"></script>
|
||||
{% endblock %}
|
||||
{% if end_table %}</table>{% endif %}
|
|
@ -23,7 +23,7 @@
|
|||
class="btn btn-primary"
|
||||
name="submit_response"
|
||||
value="Submit">Submit</button>
|
||||
<a class="btn btn-secondary float-end" href="{{ back_url }}">Back</a>
|
||||
<a class="btn btn-secondary float-end" href="{% url 'ietf.doc.views_status_change.rfc_status_changes' %}">Back</a>
|
||||
</form>
|
||||
{% endblock %}
|
||||
{% block js %}
|
||||
|
|
|
@ -81,7 +81,6 @@
|
|||
indicates the document might not be ready for submission. Please check each instance carefully to see if changes need to be made to the document's state before submitting.
|
||||
</p>
|
||||
{% endif %}
|
||||
<p>
|
||||
Upon submission:
|
||||
<ul>
|
||||
<li>the document will be placed into the IESG '{{ target_state.iesg }}' state</li>
|
||||
|
@ -91,7 +90,6 @@
|
|||
<li>an entry will be made noting the publication request in the document's history</li>
|
||||
<li>an email message will be sent to the working group chairs, the secretariat, and everyone listed above</li>
|
||||
</ul>
|
||||
</p>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
<input type="submit"
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
{% for grouptype in grouped_groups %}
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan=2 class="table-info">
|
||||
<th colspan="2" class="table-info">
|
||||
Active {% firstof grouptype.grouper.verbose_name grouptype.grouper.name 'Top-level Administration' %}
|
||||
</th>
|
||||
</tr>
|
||||
|
|
|
@ -36,14 +36,14 @@
|
|||
</p>
|
||||
<p>
|
||||
The IESG decides which areas working groups belong to. The charter of each area is listed below:
|
||||
<ul>
|
||||
{% for area in areas %}
|
||||
<li>
|
||||
<a href="#id-{{ area.acronym|slugify }}">{{ area.acronym|upper }} – {{ area.name }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</p>
|
||||
<ul>
|
||||
{% for area in areas %}
|
||||
<li>
|
||||
<a href="#id-{{ area.acronym|slugify }}">{{ area.acronym|upper }} – {{ area.name }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% for area in areas %}
|
||||
<h2 class="mt-3" id="id-{{ area.acronym|slugify }}">
|
||||
{{ area.name }}
|
||||
|
|
|
@ -12,12 +12,12 @@
|
|||
<table class="table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-sort"team">Team</th>
|
||||
<th data-sort"name">Name</th>
|
||||
<th data-sort"area">Area</th>
|
||||
<th data-sort"ad">AD</th>
|
||||
<th data-sort"secretaries">Secretaries</th>
|
||||
<th data-sort"chairs">Chairs</th>
|
||||
<th data-sort="team">Team</th>
|
||||
<th data-sort="name">Name</th>
|
||||
<th data-sort="area">Area</th>
|
||||
<th data-sort="ad">AD</th>
|
||||
<th data-sort="secretaries">Secretaries</th>
|
||||
<th data-sort="chairs">Chairs</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
</form>
|
||||
</div>
|
||||
<h2 class="mt-5">History of settings</h2>
|
||||
<div id="history">
|
||||
<div id="history-settings">
|
||||
<table class="table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -115,15 +115,15 @@
|
|||
</table>
|
||||
</div>
|
||||
<h2 class="mt-5">History of unavailable periods</h2>
|
||||
<div id="history">
|
||||
<div id="history-unavail">
|
||||
<table class="table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th dta-sort="date">Date</th>
|
||||
<th dta-sort="by">
|
||||
<th data-sort="date">Date</th>
|
||||
<th data-sort="by">
|
||||
By
|
||||
</th>
|
||||
<th dta-sort="description">
|
||||
<th data-sort="description">
|
||||
Description
|
||||
</th>
|
||||
</tr>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
Note that the information on historical groups may be inaccurate.
|
||||
</p>
|
||||
{% for label, groups in sections.items %}
|
||||
<h2 class="mt-5" id="{{ label }}">{{ label }}</h2>
|
||||
<h2 class="mt-5" id="{{ label|slugify }}">{{ label }}</h2>
|
||||
{% if label == "WGs" %}
|
||||
{% elif label == "RGs" %}
|
||||
<p class="alert alert-info my-3">
|
||||
|
@ -24,8 +24,8 @@
|
|||
</p>
|
||||
{% endif %}
|
||||
{% if not groups %}
|
||||
<p>
|
||||
<b>No groups found.</b>
|
||||
<p class="alert alert-info my-3">
|
||||
No groups found.
|
||||
</p>
|
||||
{% else %}
|
||||
{% regroup groups by parent as grouped_by_areas %}
|
||||
|
|
|
@ -76,8 +76,8 @@
|
|||
<label>Select the next states:</label>
|
||||
{% for checked, default, s in state.next_states_checkboxes %}
|
||||
<div class="form-check {% if not s.used %}inactive{% endif %}">
|
||||
<input class="form-check-input" type="checkbox" name="next_states" value="{{ s.pk }}" id="value="{{ s.pk }}"" {% if checked %} checked{% endif %}>
|
||||
<label class="form-check-label" for="{{ s.pk }}">
|
||||
<input class="form-check-input" type="checkbox" name="next_states" value="{{ s.pk }}" {% if checked %} checked{% endif %}>
|
||||
<label class="form-check-label">
|
||||
{{ s.name }}
|
||||
{% if default %}<span class="badge bg-secondary">Default</span>{% endif %}
|
||||
</label>
|
||||
|
|
|
@ -28,9 +28,8 @@
|
|||
<div class="col-md-6 rightpanel">
|
||||
<div class="h2 text-center bg-info">Markdown rendering</div>
|
||||
<div class="border-bottom text-center">
|
||||
<label for="exampleFormControlInput1" class="form-label">Constrain width</label>
|
||||
<input type="checkbox" class="form-check-input" name="widthconstraint">
|
||||
Constrain width
|
||||
</input>
|
||||
</div>
|
||||
<div class="rightcontent">{{ rendered|sanitize|safe }}</div>
|
||||
</div>
|
||||
|
|
|
@ -12,9 +12,11 @@
|
|||
<h1>Other RFC streams</h1>
|
||||
<table class="my-3 table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<th data-sort="stream">Stream</th>
|
||||
<th data-sort="owner">Owner</th>
|
||||
<th data-sort="manager">Stream manager</th>
|
||||
<tr>
|
||||
<th data-sort="stream">Stream</th>
|
||||
<th data-sort="owner">Owner</th>
|
||||
<th data-sort="manager">Stream manager</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for stream in streams %}
|
||||
|
|
|
@ -101,7 +101,7 @@
|
|||
-{{ alatest.reviewed_rev }}
|
||||
</a>
|
||||
{% if alatest.reviewed_rev != r.doc.rev %}
|
||||
(<a href="{{ rfcdiff_base_url }}?url1={{ rlatest.doc.name }}-{{ alatest.reviewed_rev }}&url2={{ r.doc.name }}-{{ r.doc.rev }}">diff</a>)
|
||||
(<a href="{{ rfcdiff_base_url }}?url1={{ rlatest.doc.name }}-{{ alatest.reviewed_rev }}&url2={{ r.doc.name }}-{{ r.doc.rev }}">diff</a>)
|
||||
{% endif %}
|
||||
:
|
||||
<a href="{{ alatest.review.get_absolute_url }}">
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
<h2 class="mt-5" id="closed-review-requests">Unassigned and open review requests and assignments</h2>
|
||||
<h2 class="mt-5" id="unassigned-and-open-review-requests">Unassigned and open review requests and assignments</h2>
|
||||
<table class="table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -33,7 +33,7 @@
|
|||
{% if unassigned_review_requests %}
|
||||
<thead>
|
||||
<tr class="table-info" id="unassigned-review-requests">
|
||||
<th colspan=7>Unassigned review requests</th>
|
||||
<th colspan="7">Unassigned review requests</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -84,7 +84,7 @@
|
|||
{% if open_review_assignments %}
|
||||
<thead>
|
||||
<tr class="table-info" id="open_review_assignments">
|
||||
<th colspan=7>Open review requests</th>
|
||||
<th colspan="7">Open review requests</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -166,7 +166,7 @@
|
|||
{% if closed_review_requests %}
|
||||
<thead>
|
||||
<tr class="table-info">
|
||||
<th colspan=8>
|
||||
<th colspan="8">
|
||||
Closed review requests
|
||||
</th>
|
||||
</tr>
|
||||
|
@ -206,7 +206,7 @@
|
|||
{% if closed_review_assignments %}
|
||||
<thead>
|
||||
<tr class="table-info">
|
||||
<th colspan=8>
|
||||
<th colspan="8">
|
||||
Closed review assignments
|
||||
</th>
|
||||
</tr>
|
||||
|
@ -244,8 +244,8 @@
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</table>
|
||||
{% endblock %}
|
||||
{% block js %}
|
||||
<script src="{% static "ietf/js/list.js" %}">
|
||||
|
|
|
@ -62,7 +62,6 @@
|
|||
{% person_link person %}
|
||||
{% if person.settings_url %}
|
||||
<a href="{{ person.settings_url }}" class="btn btn-primary btn-small float-end"
|
||||
}
|
||||
title="{{ person.settings.expertise }}">Edit
|
||||
</a>
|
||||
{% endif %}
|
||||
|
@ -92,7 +91,7 @@
|
|||
</td>
|
||||
<td>
|
||||
{% if assignment_to_closure_days != None %}
|
||||
{{ assignment_to_closure_days }} day{{ assignment_to_closure_days|pluralize }}
|
||||
{{ assignment_to_closure_days }} day{{ assignment_to_closure_days|pluralize }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<a class="interim-meeting-link"
|
||||
href="{% url 'ietf.meeting.views.interim_request_details' number=meeting.number %}">
|
||||
{{ meeting.number }}
|
||||
{% if meeting.interim_meeting_cancelled %} <span class="badge bg-warning">CANCELLED</span>{% endif %}
|
||||
{% if meeting.interim_meeting_cancelled %}<span class="ms-1 badge bg-warning">CANCELLED</span>{% endif %}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
|
@ -52,4 +52,4 @@
|
|||
<script src="{% static 'ietf/js/select2.js' %}"></script>
|
||||
<script src="{% static 'ietf/js/select2.js' %}"></script>
|
||||
<script src="{% static 'ietf/js/meeting-interim-request.js' %}"></script>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -139,6 +139,7 @@
|
|||
<h2>Completion status and completion time</h2>
|
||||
<table class="review-stats table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-sort="{{ level }}">
|
||||
{% if level == "team" %}
|
||||
Team
|
||||
|
@ -167,13 +168,13 @@
|
|||
Avg. compl. days
|
||||
{% if count == "pages" %}/page{% endif %}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for row in data %}
|
||||
{% if forloop.first %}
|
||||
<tbody>
|
||||
{% elif forloop.last %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
{% if forloop.last %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td>{{ row.obj }}</td>
|
||||
|
@ -193,7 +194,7 @@
|
|||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</foot>
|
||||
</tfoot>
|
||||
</table>
|
||||
{% elif stats_type == "results" %}
|
||||
<h2>
|
||||
|
@ -201,6 +202,7 @@
|
|||
</h2>
|
||||
<table class="review-stats table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-sort="{{ level }}">
|
||||
{% if level == "team" %}
|
||||
Team
|
||||
|
@ -213,13 +215,13 @@
|
|||
{{ r.name }}
|
||||
</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
{% for row in data %}
|
||||
{% if forloop.first %}
|
||||
<tbody>
|
||||
{% elif forloop.last %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
{% if forloop.last %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -240,6 +242,7 @@
|
|||
</h2>
|
||||
<table class="review-stats table table-sm table-striped tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-sort="{{ level }}">
|
||||
{% if level == "team" %}
|
||||
Team
|
||||
|
@ -252,13 +255,13 @@
|
|||
{{ s.name }}
|
||||
</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
{% for row in data %}
|
||||
{% if forloop.first %}
|
||||
<tbody>
|
||||
{% elif forloop.last %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tbody>
|
||||
{% if forloop.last %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<th>Group</th>
|
||||
<td>
|
||||
{{ submission.group|default:"Individual Submission" }}
|
||||
{% if submission.group %}<a href="{{ doc.group.about_url }}">({{ submission.group.acronym|upper }})</a>{% endif %}
|
||||
{% if submission.group %}<a href="{{ submission.group.about_url }}">({{ submission.group.acronym|upper }})</a>{% endif %}
|
||||
{% if errors.group %}
|
||||
<p class="mt-1 mb-0 text-danger">
|
||||
<b>{{ errors.group }}</b> (Note: the Secretariat will be notified of this)
|
||||
|
@ -93,9 +93,7 @@
|
|||
type="submit"
|
||||
value="Submit for manual posting">
|
||||
</form>
|
||||
<p>
|
||||
{% include "submit/problem-reports-footer.html" %}
|
||||
</p>
|
||||
{% include "submit/problem-reports-footer.html" %}
|
||||
{% endblock %}
|
||||
{% block js %}
|
||||
{{ all_forms|merge_media:'js' }}<script src="{% static "ietf/js/draft-submit.js" %}"></script>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<br>
|
||||
<small class="text-muted">{{ submission.name }}</small>
|
||||
</h1>
|
||||
<form method="post" class="show-required" class="my-3">
|
||||
<form method="post" class="show-required my-3">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
<button type="submit" class="btn btn-primary">Send email</button>
|
||||
|
|
|
@ -204,7 +204,7 @@
|
|||
<th>Group</th>
|
||||
<td>
|
||||
{{ submission.group|default:"Individual Submission" }}
|
||||
{% if submission.group %}<a href="{{ doc.group.about_url }}">({{ submission.group.acronym|upper }})</a>{% endif %}
|
||||
{% if submission.group %}<a href="{{ submission.group.about_url }}">({{ submission.group.acronym|upper }})</a>{% endif %}
|
||||
{% if errors.group %}
|
||||
<p class="mt-1 mb-0 text-danger">
|
||||
{{ errors.group }}
|
||||
|
|
|
@ -49,7 +49,6 @@
|
|||
aria-controls="other-formats">
|
||||
<input class="form-check-input"
|
||||
id="checkbox"
|
||||
type="checkbox"
|
||||
type="checkbox"/>
|
||||
Submit other formats
|
||||
</label>
|
||||
|
|
|
@ -47,8 +47,10 @@ from bs4 import BeautifulSoup
|
|||
from contextlib import contextmanager
|
||||
from pathlib import Path
|
||||
from tempfile import NamedTemporaryFile
|
||||
from tidylib import tidy_document
|
||||
|
||||
import django.test
|
||||
from django.test.client import Client
|
||||
from django.conf import settings
|
||||
from django.utils.text import slugify
|
||||
|
||||
|
@ -151,6 +153,44 @@ class ReverseLazyTest(django.test.TestCase):
|
|||
response = self.client.get('/ipr/update/')
|
||||
self.assertRedirects(response, "/ipr/", status_code=301)
|
||||
|
||||
class VerifyingClient(Client):
|
||||
def __init__(self, test):
|
||||
super(VerifyingClient, self).__init__()
|
||||
self.test = test
|
||||
|
||||
def get(self, path, *args, **extra):
|
||||
r = super(VerifyingClient, self).get(path, *args, **extra)
|
||||
# print(path, r.status_code, r["content-type"].lower())
|
||||
if r.status_code < 300 and r["content-type"].lower().startswith(
|
||||
"text/html"
|
||||
):
|
||||
document, errors = tidy_document(
|
||||
r.content, options={"drop-empty-elements": False}
|
||||
)
|
||||
|
||||
errors = "\n".join(
|
||||
[
|
||||
e
|
||||
for e in errors.splitlines()
|
||||
# FIXME-LARS: django-bootstrap5 incorrectly sets a "required"
|
||||
# proprietray attribute on some DIVs; remove those errors
|
||||
if not re.match(r'.*proprietary attribute "required"', e)
|
||||
# FIXME-LARS: some secretariat templates have this issue, ignore
|
||||
and not re.match(r".*id and name attribute value mismatch", e)
|
||||
]
|
||||
)
|
||||
|
||||
if errors:
|
||||
n = 1
|
||||
print("\n")
|
||||
for line in r.content.decode().splitlines():
|
||||
print(f"{n: 6}: {line}")
|
||||
n += 1
|
||||
print(path)
|
||||
self.test.maxDiff = None
|
||||
self.test.assertEqual("", errors)
|
||||
return r
|
||||
|
||||
class TestCase(django.test.TestCase):
|
||||
"""IETF TestCase class
|
||||
|
||||
|
@ -261,6 +301,7 @@ class TestCase(django.test.TestCase):
|
|||
def setUp(self):
|
||||
# Replace settings paths with temporary directories.
|
||||
super().setUp()
|
||||
self.client = VerifyingClient(self) # Set up the HTML verifier
|
||||
self._ietf_temp_dirs = {} # trashed during tearDown, DO NOT put paths you care about in this
|
||||
for setting in self.settings_temp_path_overrides:
|
||||
self._ietf_temp_dirs[setting] = self.tempdir(slugify(setting))
|
||||
|
@ -271,4 +312,4 @@ class TestCase(django.test.TestCase):
|
|||
self._ietf_saved_context.disable()
|
||||
for dir in self._ietf_temp_dirs.values():
|
||||
shutil.rmtree(dir)
|
||||
super().tearDown()
|
||||
super().tearDown()
|
130
package-lock.json
generated
130
package-lock.json
generated
|
@ -1871,9 +1871,9 @@
|
|||
"peer": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "17.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.12.tgz",
|
||||
"integrity": "sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA==",
|
||||
"version": "17.0.14",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.14.tgz",
|
||||
"integrity": "sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/parse-json": {
|
||||
|
@ -2200,9 +2200,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/bootstrap-icons": {
|
||||
"version": "1.7.2",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.7.2.tgz",
|
||||
"integrity": "sha512-NiR2PqC73AQOPdVSu6GJfnk+hN2z6powcistXk1JgPnKuoV2FSdSl26w931Oz9HYbKCcKUSB6ncZTYJAYJl3QQ==",
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.8.0.tgz",
|
||||
"integrity": "sha512-plaZQb8tReUULAwQ9M98PyWh5H912eKGVC6etMtc6VqmPmp9Eq0s7Wd0qvPoPLHh0VhXxzdLk1ta5W7lwPIdCQ==",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
|
@ -2431,9 +2431,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001303",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001303.tgz",
|
||||
"integrity": "sha512-/Mqc1oESndUNszJP0kx0UaQU9kEv9nNtJ7Kn8AdA0mNnH8eR1cj0kG+NbNuC1Wq/b21eA8prhKRA3bbkjONegQ==",
|
||||
"version": "1.0.30001304",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz",
|
||||
"integrity": "sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ==",
|
||||
"dev": true,
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
|
@ -3159,9 +3159,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.4.54",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.54.tgz",
|
||||
"integrity": "sha512-jRAoneRdSxnpRHO0ANpnEUtQHXxlgfVjrLOnQSisw1ryjXJXvS0pJaR/v2B7S++/tRjgEDp4Sjn5nmgb6uTySw==",
|
||||
"version": "1.4.59",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.59.tgz",
|
||||
"integrity": "sha512-AOJ3cAE0TWxz4fQ9zkND5hWrQg16nsZKVz9INOot1oV//u4wWu5xrj9CQMmPTYskkZRunSRc9sAnr4EkexXokg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/elliptic": {
|
||||
|
@ -3321,9 +3321,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/eslint": {
|
||||
"version": "8.7.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz",
|
||||
"integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==",
|
||||
"version": "8.8.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz",
|
||||
"integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@eslint/eslintrc": "^1.0.5",
|
||||
|
@ -4016,9 +4016,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/highcharts": {
|
||||
"version": "9.3.2",
|
||||
"resolved": "https://registry.npmjs.org/highcharts/-/highcharts-9.3.2.tgz",
|
||||
"integrity": "sha512-I/48gNMvs3hZxZnPRUqLbnlrGZJJ7YPPVr1+fYeZ35p4pSZAOwTmAGbptrjBr7JlF52HmJH9zMbt/I4TPLu9Pg=="
|
||||
"version": "9.3.3",
|
||||
"resolved": "https://registry.npmjs.org/highcharts/-/highcharts-9.3.3.tgz",
|
||||
"integrity": "sha512-QeOvm6cifeZYYdTLm4IxZsXcOE9c4xqfs0z0OJJ0z7hhA9WG0rmcVAyuIp5HBl/znjA/ayYHmpYjBYD/9PG4Fg=="
|
||||
},
|
||||
"node_modules/highlight.js": {
|
||||
"version": "10.4.1",
|
||||
|
@ -5552,14 +5552,14 @@
|
|||
}
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.4.5",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
|
||||
"integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
|
||||
"version": "8.4.6",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
|
||||
"integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"nanoid": "^3.1.30",
|
||||
"nanoid": "^3.2.0",
|
||||
"picocolors": "^1.0.0",
|
||||
"source-map-js": "^1.0.1"
|
||||
"source-map-js": "^1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >=14"
|
||||
|
@ -5570,9 +5570,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/postcss-calc": {
|
||||
"version": "8.2.2",
|
||||
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz",
|
||||
"integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==",
|
||||
"version": "8.2.3",
|
||||
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.3.tgz",
|
||||
"integrity": "sha512-EGM2EBBWqP57N0E7N7WOLT116PJ39dwHVU01WO4XPPQLJfkL2xVgkMZ+TZvCfapj/uJH07UEfKHQNPHzSw/14Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"postcss-selector-parser": "^6.0.2",
|
||||
|
@ -6108,9 +6108,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/preact": {
|
||||
"version": "10.6.4",
|
||||
"resolved": "https://registry.npmjs.org/preact/-/preact-10.6.4.tgz",
|
||||
"integrity": "sha512-WyosM7pxGcndU8hY0OQlLd54tOU+qmG45QXj2dAYrL11HoyU/EzOSTlpJsirbBr1QW7lICxSsVJJmcmUglovHQ==",
|
||||
"version": "10.6.5",
|
||||
"resolved": "https://registry.npmjs.org/preact/-/preact-10.6.5.tgz",
|
||||
"integrity": "sha512-i+LXM6JiVjQXSt2jG2vZZFapGpCuk1fl8o6ii3G84MA3xgj686FKjs4JFDkmUVhtxyq21+4ay74zqPykz9hU6w==",
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/preact"
|
||||
|
@ -6415,9 +6415,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/sass": {
|
||||
"version": "1.49.0",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.49.0.tgz",
|
||||
"integrity": "sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw==",
|
||||
"version": "1.49.4",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.49.4.tgz",
|
||||
"integrity": "sha512-xUU5ZlppOjgfEyIIcHpnmY+f+3/ieaadp25S/OqZ5+jBPeTAMJJblkhM6UD9jb4j/lzglz7VOL5kglYt+CvNdQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"chokidar": ">=3.0.0 <4.0.0",
|
||||
|
@ -6428,7 +6428,7 @@
|
|||
"sass": "sass.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.9.0"
|
||||
"node": ">=12.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/select2": {
|
||||
|
@ -8524,9 +8524,9 @@
|
|||
"peer": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "17.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.12.tgz",
|
||||
"integrity": "sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA==",
|
||||
"version": "17.0.14",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.14.tgz",
|
||||
"integrity": "sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/parse-json": {
|
||||
|
@ -8779,9 +8779,9 @@
|
|||
}
|
||||
},
|
||||
"bootstrap-icons": {
|
||||
"version": "1.7.2",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.7.2.tgz",
|
||||
"integrity": "sha512-NiR2PqC73AQOPdVSu6GJfnk+hN2z6powcistXk1JgPnKuoV2FSdSl26w931Oz9HYbKCcKUSB6ncZTYJAYJl3QQ=="
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.8.0.tgz",
|
||||
"integrity": "sha512-plaZQb8tReUULAwQ9M98PyWh5H912eKGVC6etMtc6VqmPmp9Eq0s7Wd0qvPoPLHh0VhXxzdLk1ta5W7lwPIdCQ=="
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
|
@ -8970,9 +8970,9 @@
|
|||
}
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001303",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001303.tgz",
|
||||
"integrity": "sha512-/Mqc1oESndUNszJP0kx0UaQU9kEv9nNtJ7Kn8AdA0mNnH8eR1cj0kG+NbNuC1Wq/b21eA8prhKRA3bbkjONegQ==",
|
||||
"version": "1.0.30001304",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz",
|
||||
"integrity": "sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ==",
|
||||
"dev": true
|
||||
},
|
||||
"chalk": {
|
||||
|
@ -9539,9 +9539,9 @@
|
|||
}
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.4.54",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.54.tgz",
|
||||
"integrity": "sha512-jRAoneRdSxnpRHO0ANpnEUtQHXxlgfVjrLOnQSisw1ryjXJXvS0pJaR/v2B7S++/tRjgEDp4Sjn5nmgb6uTySw==",
|
||||
"version": "1.4.59",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.59.tgz",
|
||||
"integrity": "sha512-AOJ3cAE0TWxz4fQ9zkND5hWrQg16nsZKVz9INOot1oV//u4wWu5xrj9CQMmPTYskkZRunSRc9sAnr4EkexXokg==",
|
||||
"dev": true
|
||||
},
|
||||
"elliptic": {
|
||||
|
@ -9669,9 +9669,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"eslint": {
|
||||
"version": "8.7.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz",
|
||||
"integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==",
|
||||
"version": "8.8.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz",
|
||||
"integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@eslint/eslintrc": "^1.0.5",
|
||||
|
@ -10205,9 +10205,9 @@
|
|||
}
|
||||
},
|
||||
"highcharts": {
|
||||
"version": "9.3.2",
|
||||
"resolved": "https://registry.npmjs.org/highcharts/-/highcharts-9.3.2.tgz",
|
||||
"integrity": "sha512-I/48gNMvs3hZxZnPRUqLbnlrGZJJ7YPPVr1+fYeZ35p4pSZAOwTmAGbptrjBr7JlF52HmJH9zMbt/I4TPLu9Pg=="
|
||||
"version": "9.3.3",
|
||||
"resolved": "https://registry.npmjs.org/highcharts/-/highcharts-9.3.3.tgz",
|
||||
"integrity": "sha512-QeOvm6cifeZYYdTLm4IxZsXcOE9c4xqfs0z0OJJ0z7hhA9WG0rmcVAyuIp5HBl/znjA/ayYHmpYjBYD/9PG4Fg=="
|
||||
},
|
||||
"highlight.js": {
|
||||
"version": "10.4.1",
|
||||
|
@ -11321,20 +11321,20 @@
|
|||
"dev": true
|
||||
},
|
||||
"postcss": {
|
||||
"version": "8.4.5",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
|
||||
"integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
|
||||
"version": "8.4.6",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
|
||||
"integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"nanoid": "^3.1.30",
|
||||
"nanoid": "^3.2.0",
|
||||
"picocolors": "^1.0.0",
|
||||
"source-map-js": "^1.0.1"
|
||||
"source-map-js": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"postcss-calc": {
|
||||
"version": "8.2.2",
|
||||
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz",
|
||||
"integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==",
|
||||
"version": "8.2.3",
|
||||
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.3.tgz",
|
||||
"integrity": "sha512-EGM2EBBWqP57N0E7N7WOLT116PJ39dwHVU01WO4XPPQLJfkL2xVgkMZ+TZvCfapj/uJH07UEfKHQNPHzSw/14Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"postcss-selector-parser": "^6.0.2",
|
||||
|
@ -11678,9 +11678,9 @@
|
|||
}
|
||||
},
|
||||
"preact": {
|
||||
"version": "10.6.4",
|
||||
"resolved": "https://registry.npmjs.org/preact/-/preact-10.6.4.tgz",
|
||||
"integrity": "sha512-WyosM7pxGcndU8hY0OQlLd54tOU+qmG45QXj2dAYrL11HoyU/EzOSTlpJsirbBr1QW7lICxSsVJJmcmUglovHQ=="
|
||||
"version": "10.6.5",
|
||||
"resolved": "https://registry.npmjs.org/preact/-/preact-10.6.5.tgz",
|
||||
"integrity": "sha512-i+LXM6JiVjQXSt2jG2vZZFapGpCuk1fl8o6ii3G84MA3xgj686FKjs4JFDkmUVhtxyq21+4ay74zqPykz9hU6w=="
|
||||
},
|
||||
"prelude-ls": {
|
||||
"version": "1.2.1",
|
||||
|
@ -11899,9 +11899,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"sass": {
|
||||
"version": "1.49.0",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.49.0.tgz",
|
||||
"integrity": "sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw==",
|
||||
"version": "1.49.4",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.49.4.tgz",
|
||||
"integrity": "sha512-xUU5ZlppOjgfEyIIcHpnmY+f+3/ieaadp25S/OqZ5+jBPeTAMJJblkhM6UD9jb4j/lzglz7VOL5kglYt+CvNdQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chokidar": ">=3.0.0 <4.0.0",
|
||||
|
|
|
@ -73,4 +73,5 @@ Unidecode>=0.4.18,<1.2.0
|
|||
xml2rfc>=2.35.0
|
||||
xym>=0.4.4,!=0.4.7,<1.0
|
||||
#zxcvbn-python>=4.4.14 # Not needed until we do back-end password entropy validation
|
||||
djhtml>=1.4.11 # To auto-indent templates via "djlint --profile django --reformat"
|
||||
djhtml>=1.4.11 # To auto-indent templates via "djlint --profile django --reformat"
|
||||
pytidylib>=0.3.2 # Used during tests to check validity of generated HTML
|
Loading…
Reference in a new issue