More fixes.

- Legacy-Id: 19856
This commit is contained in:
Lars Eggert 2022-01-18 20:04:55 +00:00
parent 0bfaa63722
commit 9c05373699
62 changed files with 2711 additions and 5477 deletions

View file

@ -409,17 +409,14 @@ def ad_area(user):
def format_history_text(text, trunc_words=25):
"""Run history text through some cleaning and add ellipsis if it's too long."""
full = mark_safe(text)
if text.startswith("This was part of a ballot set with:"):
full = urlize_ietf_docs(full)
full = urlize_ietf_docs(full)
return format_snippet(full, trunc_words)
@register.filter
def format_snippet(text, trunc_words=25):
# urlize if there aren't already links present
if not 'href=' in text:
text = bleach.linkify(text, parse_email=True)
text = bleach.linkify(text, parse_email=True)
full = keep_spacing(collapsebr(linebreaksbr(mark_safe(sanitize_fragment(text)))))
snippet = truncatewords_html(full, trunc_words)
if snippet != full:

View file

@ -407,7 +407,7 @@ class ReviewTests(TestCase):
login_testing_unauthorized(self, "reviewsecretary", reject_url)
r = self.client.get(reject_url)
self.assertEqual(r.status_code, 200)
self.assertContains(r, assignment.reviewer.person.plain_name())
self.assertContains(r, assignment.reviewer.person.name)
self.assertNotContains(r, 'can not be rejected')
self.assertContains(r, '<button type="submit"')

View file

@ -570,7 +570,7 @@ class IetfAuthTests(TestCase):
# Check api key list content
r = self.client.get(url)
self.assertContains(r, 'Personal API keys')
self.assertContains(r, 'API keys')
self.assertContains(r, 'Get a new personal API key')
# Check the add key form content
@ -591,7 +591,7 @@ class IetfAuthTests(TestCase):
for endpoint, display in endpoints:
self.assertContains(r, endpoint)
q = PyQuery(r.content)
self.assertEqual(len(q('td code')), len(endpoints)) # hash
self.assertEqual(len(q('td code')), len(endpoints) * 2) # hash and endpoint
self.assertEqual(len(q('td a:contains("Disable")')), len(endpoints))
# Get one of the keys
@ -612,7 +612,7 @@ class IetfAuthTests(TestCase):
url = urlreverse('ietf.ietfauth.views.apikey_index')
r = self.client.get(url)
q = PyQuery(r.content)
self.assertEqual(len(q('td code')), len(endpoints)) # key hash
self.assertEqual(len(q('td code')), len(endpoints) * 2) # key hash and endpoint
self.assertEqual(len(q('td a:contains("Disable")')), len(endpoints)-1)
def test_apikey_errors(self):

View file

@ -1492,7 +1492,7 @@ class AgendaTests(IetfSeleniumTestCase):
expected_event_count=len(sessions))
def test_session_materials_modal(self):
"""Test opening and re-opening a session materals modal
"""Test opening and re-opening a session materials modal
This currently only tests the slides to ensure that changes to these are picked up
without reloading the main agenda page. This should also test that the agenda and
@ -1517,8 +1517,10 @@ class AgendaTests(IetfSeleniumTestCase):
),
'Modal open button not found or not clickable',
)
self.scroll_to_element(open_modal_button)
open_modal_button.click()
# FIXME-LARS: no idea why we need js instead of the following:
# self.scroll_to_element(open_modal_button)
# open_modal_button.click()
self.driver.execute_script("arguments[0].click();", open_modal_button)
WebDriverWait(self.driver, 2).until(
expected_conditions.visibility_of(modal_div),
'Modal did not become visible after clicking open button',

View file

@ -498,6 +498,7 @@ BOOTSTRAP5 = {
# Set placeholder attributes to label if no placeholder is provided
'set_placeholder': False,
'required_css_class': 'required',
'error_css_class': 'is-invalid',
'success_css_class': 'is-valid',

View file

@ -87,6 +87,20 @@ pre {
font-size: inherit;
}
// Highlight required form field labels with bi-asterisk
.required>label:after {
display: inline-block;
width: .75rem;
height: .75rem;
margin-left: .1rem;
content: "";
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='text-danger' viewBox='0 0 16 16'%3E%3Cpath d='M8 0a1 1 0 0 1 1 1v5.268l4.562-2.634a1 1 0 1 1 1 1.732L10 8l4.562 2.634a1 1 0 1 1-1 1.732L9 9.732V15a1 1 0 1 1-2 0V9.732l-4.562 2.634a1 1 0 1 1-1-1.732L6 8 1.438 5.366a1 1 0 0 1 1-1.732L7 6.268V1a1 1 0 0 1 1-1z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
// Recolor black to $red, see https://codepen.io/sosuke/pen/Pjoqqp
filter: invert(35%) sepia(9%) saturate(5669%) hue-rotate(312deg) brightness(102%) contrast(117%);
font-weight: bold;
}
// Make the long dropdowns in the group menu scrollable.
.group-menu .dropdown-menu {
height: auto;

View file

@ -1,27 +1,37 @@
$(document).ready(function() {
// hack the "All States" check box
$("#id_state").addClass("list-inline");
$(document)
.ready(function () {
// hack the "All States" check box
$("#id_state")
.addClass("list-inline");
$("#id_state input[value!=all]").change(function(e) {
if (this.checked) {
$("#id_state input[value=all]").prop('checked',false);
}
});
$("#id_state input[value!=all]")
.on("change", function (e) {
if (this.checked) {
$("#id_state input[value=all]")
.prop('checked', false);
}
});
$("#id_state_0").change(function(e) {
if (this.checked) {
$("#id_state input[value!=all]").prop('checked',false);
}
});
$("#id_state_0")
.on("change", function (e) {
if (this.checked) {
$("#id_state input[value!=all]")
.prop('checked', false);
}
});
// make enter presses submit through the nearby button
$("form.ipr-search input,select").keyup(function (e) {
var submitButton = $(this).closest(".mb-3").find('button[type=submit]');
if (e.which == 13 && submitButton.length > 0) {
submitButton.click();
return false;
} else {
return true;
}
});
});
// make enter presses submit through the nearby button
// FIXME: this seems to be broken
$("form.ipr-search input,select")
.on("keyup", function (e) {
var submitButton = $(this)
.closest(".mb-3")
.find('button[type=submit]');
if (e.which == 13 && submitButton.length > 0) {
submitButton.trigger("click");
return false;
} else {
return true;
}
});
});

View file

@ -24,7 +24,8 @@ function replace_with_internal(table, internal_table, i) {
}
function field_magic(i, e, fields) {
if (fields[i] == "date" || fields[i] == "num" || fields[i] == "count") {
if ($(e)
.attr("colspan") === undefined && (fields[i] == "date" || fields[i] == "num" || fields[i] == "count" || fields[i] == "due" || fields[i] == "id")) {
$(e)
.addClass("text-end");
}

View file

@ -245,7 +245,7 @@
</p>
{% endif %}
{% if milestones %}
{% include "group/milestones.html" %}
{% include "group/milestones.html" with heading=True %}
{% else %}
<p>
No milestones for charter found.

View file

@ -325,7 +325,7 @@
{{ group.description|default:"No description yet."| apply_markup:"restructuredtext" }}
{% endif %}
{% if group.features.has_milestones %}
{% include "group/milestones.html" with milestones=group.milestones %}
{% include "group/milestones.html" with milestones=group.milestones heading=True %}
{% if milestones_in_review %}
<p>
{{ milestones_in_review|length }} new milestone{{ milestones_in_review|pluralize }}

View file

@ -5,17 +5,19 @@
{# assumes group and milestones is in context #}
{% regroup milestones by resolved as milestonegroups %}
{% for milestoneset in milestonegroups %}
<h2 class="my-3">
{% if milestoneset.grouper %}
{{ milestoneset.grouper }} milestones
{% else %}
{% if group.state_id == "proposed" %}
Proposed milestones
{% if heading %}
<h2 class="my-3">
{% if milestoneset.grouper %}
{{ milestoneset.grouper }} milestones
{% else %}
Milestones
{% if group.state_id == "proposed" %}
Proposed milestones
{% else %}
Milestones
{% endif %}
{% endif %}
{% endif %}
</h2>
</h2>
{% endif %}
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
@ -27,12 +29,13 @@
{% endif %}
</th>
<th data-sort="milestone">Milestone</th>
<th data-sort="docs">Associated documents</th>
</tr>
</thead>
<tbody>
{% for milestone in milestoneset.list reversed %}
<tr>
<td class="text-nowrap">
<td>
{% if milestone.resolved %}
<span class="badge bg-success">{{ milestone.resolved }}</span>
{% else %}
@ -44,11 +47,11 @@
{% endif %}
{% endif %}
</td>
<td>{{ milestone.desc }}</td>
<td>
{{ milestone.desc }}
{% for d in milestone.docs.all %}
<br>
<a href="{% url "ietf.doc.views_doc.document_main" name=d.name %}">{{ d.name }}</a>
<br>
{% endfor %}
</td>
</tr>

View file

@ -1,15 +1,19 @@
{# bs5ok #}
{% load ietf_filters ballot_icon %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% origin %}
{% load ietf_filters ballot_icon person_filters %}
<div class="card mb-3">
{# FIXME-LARS: just using float-end here messes up the spacing between row columns? #}
<div class="position-absolute top-0 end-0 m-3">{% ballot_icon doc %}</div>
<div class="card-body">
<div class="float-end">{% ballot_icon doc %}</div>
<div class="row">
<div class="col-sm-3 text-end fw-bold">{{ doc.group.type }} name</div>
<div class="col">
<b>{{ doc.group.name }} <a href="{{ doc.group.about_url }}">({{ doc.group.acronym|upper }})</a></b>
<b>{{ doc.group.name }}
<a href="{{ doc.group.about_url }}">({{ doc.group.acronym|upper }})</a>
</b>
</div>
</div>
<div class="row">

View file

@ -1,10 +1,12 @@
{# bs5ok #}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% origin %}
{% load ietf_filters ballot_icon person_filters %}
<div class="card mb-3">
{# FIXME-LARS: just using float-end here messes up the spacing between row columns? #}
<div class="position-absolute top-0 end-0 m-3">{% ballot_icon doc %}</div>
<div class="card-body">
<div class="float-end">{% ballot_icon doc %}</div>
{% with doc.conflictdoc as conflictdoc %}
<div class="row">
<div class="col-sm-3 text-end fw-bold">Conflict review</div>

View file

@ -1,3 +1,4 @@
{# bs5ok #}
{# Copyright The IETF Trust 2016, All Rights Reserved #}
{% load origin %}
{% origin %}
@ -18,16 +19,11 @@
</div>
<div class="col">
{% with doc.rfc_number as rfc_number %}
<a href="{% if rfc_number %}
https://www.rfc-editor.org/rfc/rfc{{ rfc_number }}/
{% else %}
{{ doc.get_href }}
{% endif %}">
<i class="bi bi-file-earmark-fill"></i>
</a>
<a href="{% if rfc_number %} https://www.rfc-editor.org/rfc/rfc{{ rfc_number }}/ {% else %} {{ doc.get_href }} {% endif %}">
<i class="bi bi-file-earmark-fill"></i>
</a>
{% endwith %}
<a href="{% url "ietf.doc.views_doc.document_main" name=doc.canonical_name %}">
{{ doc.canonical_name }}</a>
<a href="{% url "ietf.doc.views_doc.document_main" name=doc.canonical_name %}">{{ doc.canonical_name }}</a>
{% if doc.has_rfc_editor_note %}
<a href="{% url "ietf.doc.views_doc.document_main" name=doc.canonical_name %}writeup/">
<em>(Has RFC Editor Note)</em>
@ -61,7 +57,9 @@
{% if doc.iana_review_state %}
<div class="row">
<div class="col-sm-3 text-end fw-bold">IANA review</div>
<div class="col {% if doc.iana_review_state|slice:7 != "IANA OK" %}text-danger{% else %}text-success{% endif %}">{{ doc.iana_review_state }}</div>
<div class="col {% if doc.iana_review_state|slice:7 != "IANA OK" %}text-danger{% else %}text-success{% endif %}">
{{ doc.iana_review_state }}
</div>
</div>
{% endif %}
{% if doc.consensus %}

View file

@ -1,2 +1,3 @@
{# bs5ok #}
{{ obj.title }}<br>
{{ obj.abstract|truncatewords:50 }}
{{ obj.abstract|truncatewords:50 }}

View file

@ -1,28 +1,26 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% block morecss %}
.card-header {font-size:150%; }
{% load origin static %}
{% block pagehead %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
{% block title %}Milestones under review{% endblock %}
{% block content %}
{% origin %}
<h1>Milestones under review</h1>
{% for ad in ads %}
<div class="card ">
<div class="card-header">{{ ad.plain_name }}</div>
<div class="card-body">
{% for g in ad.groups_needing_review %}
<h3>{{ g.name }} ({{ g.acronym }})</h3>
{% include "group/milestones.html" with milestones=g.milestones_needing_review %}
<a class="btn btn-primary" href="{% url 'ietf.group.milestones.edit_milestones;current' group_type=g.type_id acronym=g.acronym %}">All {{ g.acronym }} milestones</a>
{% endfor %}
</div>
</div>
<h2 class="mt-5">{{ ad.plain_name }}</h2>
{% for g in ad.groups_needing_review %}
<h3 class="mt-4">{{ g.name }} ({{ g.acronym }})</h3>
{% include "group/milestones.html" with milestones=g.milestones_needing_review heading=False %}
<a class="btn btn-primary my-1"
href="{% url 'ietf.group.milestones.edit_milestones;current' group_type=g.type_id acronym=g.acronym %}">
All {{ g.acronym }} milestones
</a>
{% endfor %}
{% endfor %}
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}

View file

@ -1,4 +1,7 @@
{# Copyright The IETF Trust 2015, All Rights Reserved #}{% load origin %}{% origin %}
{# bs5ok #}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% origin %}
{% comment %}
Parts Copyright (C) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
@ -31,62 +34,84 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{% endcomment %}{% load ietf_filters %}
<p><b>{{ doc.group.name }} ({{ doc.group.acronym }})</b></p>
{% endcomment %}
{% load ietf_filters %}
<p>
<b>{{ doc.group.name }} ({{ doc.group.acronym }})</b>
</p>
{% if num|startswith:"4.1.1" %}
<p>Does anyone have an objection to the charter being sent for
EXTERNAL REVIEW?</p>
<p>If External Review APPROVED - The Secretariat will send a Working
<p>
Does anyone have an objection to the charter being sent for
EXTERNAL REVIEW?
</p>
<p>
If External Review APPROVED - The Secretariat will send a Working
Group Review Announcement with a separate message to new-work and
place it back on the agenda for the next telechat.</p>
<p>If NOT APPROVED - The Secretariat will<br>
* wait for instruction from [Name the AD].<br>
* OR Back to Internal Review.<br>
* OR Back on the Agenda next time in the same category.</p>
place it back on the agenda for the next telechat.
</p>
<p>
If NOT APPROVED - The Secretariat will
<br>
* wait for instruction from [Name the AD].
<br>
* OR Back to Internal Review.
<br>
* OR Back on the Agenda next time in the same category.
</p>
{% endif %}
{% if num|startswith:"4.1.2" %}
<p>Does anyone have an objection to the creation of this working
group?</p>
<p>IF APPROVED - The Secretariat will send a Working Group Action
announcement.</p>
<p>If NOT APPROVED - The Secretariat will<br>
* Place the charter back on the agenda for the next telechat.<br>
* OR Wait for instructions from the responsible AD.</p>
<p>
Does anyone have an objection to the creation of this working
group?
</p>
<p>
IF APPROVED - The Secretariat will send a Working Group Action
announcement.
</p>
<p>
If NOT APPROVED - The Secretariat will
<br>
* Place the charter back on the agenda for the next telechat.
<br>
* OR Wait for instructions from the responsible AD.
</p>
{% endif %}
{% if num|startswith:"4.2.1" %}
<p>Does anyone have an objection with just making the changes to the
charter?</p>
<p>If NO OBJECTION - The Secretariat will send a Working Group
Action: RECHARTER Announcement.</p>
<p>If MUST GO FOR EXTERNAL REVIEW - The Secretariat will send a
<p>
Does anyone have an objection with just making the changes to the
charter?
</p>
<p>
If NO OBJECTION - The Secretariat will send a Working Group
Action: RECHARTER Announcement.
</p>
<p>
If MUST GO FOR EXTERNAL REVIEW - The Secretariat will send a
Working Group Review: Recharter Announcement with messages to
new-work and the WG Chairs. The Secretariat will place it back on
the agenda for the next telechat.</p>
<p>If OBJECTION - IESG decides not to move forward with the
the agenda for the next telechat.
</p>
<p>
If OBJECTION - IESG decides not to move forward with the
rechartering of the working group: The Secretariat will await
further instructions regarding the charter of [insert working group
acronym].</p>
acronym].
</p>
{% endif %}
{% if num|startswith:"4.2.2" %}
<p>Does anyone have an objection to the rechartering of this working
group?</p>
<p>IF APPROVED - The Secretariat will send a Working Group Action:
RECHARTER announcement.</p>
<p>If NOT APPROVED - The Secretariat will<br>
* Place the charter back on the agenda for the next telechat.<br>
* OR Wait for instructions from the responsible AD.</p>
<p>
Does anyone have an objection to the rechartering of this working
group?
</p>
<p>
IF APPROVED - The Secretariat will send a Working Group Action:
RECHARTER announcement.
</p>
<p>
If NOT APPROVED - The Secretariat will
<br>
* Place the charter back on the agenda for the next telechat.
<br>
* OR Wait for instructions from the responsible AD.
</p>
{% endif %}

View file

@ -1,5 +1,7 @@
{# bs5ok #}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}{% origin %}
{% load origin %}
{% origin %}
{% comment %}
Some parts
Copyright (C) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
@ -38,68 +40,83 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Some parts Copyright (c) 2009 The IETF Trust, all rights reserved.
{% endcomment %}
{% load ietf_filters %}
<div>
<b>{{ doc.name }}-{{doc.rev}}</b><br>
<b>{{ doc.name }}-{{ doc.rev }}</b>
<br>
<i>({{ doc.title }})</i>
</div>
<div style="padding-left:20px">
<b>{{ doc.conflictdoc.name }}-{{ doc.conflictdoc.rev }}</b><br>
<i>({{ doc.conflictdoc.title }})</i><br>
<b>Intended status: {{ doc.conflictdoc.intended_std_level }}<br></b>
<b>{{ doc.conflictdoc.name }}-{{ doc.conflictdoc.rev }}</b>
<br>
<i>({{ doc.conflictdoc.title }})</i>
<br>
<b>Intended status: {{ doc.conflictdoc.intended_std_level }}
<br>
</b>
</div>
<div>
<b>
Token: {{ doc.ad.plain_name }}<br>
Token: {{ doc.ad.plain_name }}
<br>
{% if doc.type.slug == "draft" %}
Last call ends: {{ doc.most_recent_ietflc.expires.date|default:"(none)" }}
{% if doc.most_recent_ietflc.expires.date|timesince_days < 3 %}!!!{% endif %}
{% endif %}
</b>
</div>
{% with doc.active_ballot as ballot %}
{% if ballot %}
<small><pre>
Yes No-Objection Discuss Abstain Recuse
{% for pos in ballot.all_positions %}{% if pos.is_old_pos %}{{pos.balloter.plain_name|bracket|ljust:"22"}}{%else%}{{pos.balloter.plain_name|ljust:"22"}}{%endif%} {{pos|bracketpos:"yes"}} {{pos|bracketpos:"noobj"}} {{pos|bracketpos:"discuss"}} {{pos|bracketpos:"abstain"}} {{pos|bracketpos:"recuse"}}
{% endfor %}
</pre></small>
<p>____ active discusses<br>
[ &nbsp; ] there are [#] discusses in the tracker on this document. Do we need to talk about them now?</p>
</pre></small>
<p>
____ active discusses
<br>
[ &nbsp; ] there are [#] discusses in the tracker on this document. Do we need to talk about them now?
</p>
{% else %}
<p>(Ballot not issued)</p>
<p>
(Ballot not issued)
</p>
{% endif %}
{% endwith %}
{% if num|startswith:"3.4.1" or num|startswith:"3.4.2" %}
<p>Does anyone have an objection to the this conflict review response being sent to the {{doc.conflictdoc.stream}}?</p>
<p>
Does anyone have an objection to the this conflict review response being sent to the {{ doc.conflictdoc.stream }}?
</p>
{% endif %}
{% if num|startswith:"3.4.3" %}
<p>Who will do the review of this document?</p>
<p>
Who will do the review of this document?
</p>
{% endif %}
<p>Current State: {{ doc.friendly_state }}<br>
Next State:<br>
Sub State: </p>
<p>
Current State: {{ doc.friendly_state }}
<br>
Next State:
<br>
Sub State:
</p>
{% if num|startswith:"3.4.1" or num|startswith:"3.4.2" %}
<p>If APPROVED - The Secretariat will send a standard no problem
<p>
If APPROVED - The Secretariat will send a standard no problem
message to the RFC Editor. [Name of AD] will you supply the text for
the IESG Note?</p>
<p>If APPROVED with caveats - The Secretariat will send a standard
the IESG Note?
</p>
<p>
If APPROVED with caveats - The Secretariat will send a standard
no problem message to the RFC Editor that includes the note drafted
by [Name that AD].</p>
<p>If NOT APPROVED - The Secretariat will send the standard Do Not
Publish message to the RFC Editor.</p>
<p>If NOT APPROVED with clarifications - The Secretariat will send
by [Name that AD].
</p>
<p>
If NOT APPROVED - The Secretariat will send the standard Do Not
Publish message to the RFC Editor.
</p>
<p>
If NOT APPROVED with clarifications - The Secretariat will send
the Do Not Publish message to the RFC Editor that includes the note
drafted by[Name the AD].</p>
{% endif %}
drafted by[Name the AD].
</p>
{% endif %}

View file

@ -1,3 +1,4 @@
{# bs5ok #}
{# Copyright The IETF Trust 2015, All Rights Reserved #}{% load origin %}{% origin %}
{% comment %}
Parts copyright (C) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
@ -176,5 +177,4 @@ Parts Copyright (c) 2009 The IETF Trust, all rights reserved.
{% endif %}
{% endfor %}</p>
{% endif %}
{% endif %}
{% endif %}

View file

@ -148,11 +148,9 @@ Some parts Copyright (c) 2009 The IETF Trust, all rights reserved.
{% endif %}
{% if num == "7" %}
{% filter linebreaks_crlf %}
{% for ad in section.ads %}
<pre>[ ] {{ ad.plain_name }}</pre>
{% endfor %}
{% for ad in section.ads %}<pre>[ ] {{ ad.plain_name }}</pre>{% endfor %}
{% endfilter %}
{% endif %}
{% endfor %}
</body>
</html>
</html>

View file

@ -1,32 +1,30 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% block title %}IESG review decisions in {{ timeframe }}{% endblock %}
{% block content %}
{% origin %}
<h1>IESG review decisions in {{ timeframe }}</h1>
<p>Showing review decisions announced in {{ timeframe }}.</p>
<p>
Showing review decisions announced in {{ timeframe }}.
</p>
<p>
<b>Announcements in:</b>
{% for y in years %}
<a {% if y != year %}href="{% url "ietf.iesg.views.review_decisions" year=y %}"{% endif %}>{{ y }}</a>{% if not forloop.last %}, {% endif %}
<a {% if y != year %}href="{% url "ietf.iesg.views.review_decisions" year=y %}"{% endif %}>{{ y }}</a>
{% if not forloop.last %},{% endif %}
{% endfor %}
</p>
{% for e in events %}
{% ifchanged %}
<h2>{{ e.time|date:"F j, Y" }}</h2>
<h2 class="mt-4">{{ e.time|date:"F j, Y" }}</h2>
{% endifchanged %}
<p>
{{ e.desc }} <a href="{% url "ietf.doc.views_doc.document_main" e.doc.name %}">{{ e.doc.name }}</a>
{{ e.desc }}
<a href="{% url "ietf.doc.views_doc.document_main" e.doc.name %}">{{ e.doc.name }}</a>
{% if e.doc.intended_std_level %}({{ e.doc.intended_std_level }}){% endif %}
- {{ e.doc.title }}
</p>
{% endfor %}
{% endblock %}
{% endblock %}

View file

@ -1,24 +0,0 @@
{# Copyright The IETF Trust 2015, All Rights Reserved #}{% load origin %}{% origin %}
<li>
{{ doc.title }}
<br><a href="{% url "ietf.doc.views_doc.document_main" name=doc.canonical_name %}">{{doc.canonical_name}}</a>
<a href="{{doc.get_href}}">[txt]</a>
<div style="padding-left:20px">
{{ doc.conflictdoc.title }} ({{ doc.conflictdoc.stream }}: {{ doc.conflictdoc.intended_std_level }})
<br><a href="{% url "ietf.doc.views_doc.document_main" name=doc.conflictdoc.canonical_name %}">{{ doc.conflictdoc.canonical_name }}</a>
<a href="{{doc.conflictdoc.get_href}}">[txt]</a>
{% if doc.conflictdoc.note %}
<br>Note: {{ doc.conflictdoc.note|linebreaksbr }}
{% endif %}
{% for ipr in doc.conflictdoc.ipr %}
{% if ipr.disclosure.state.slug == "posted" %}
<br>IPR: <a href="https://{{ domain }}/ipr/{{ ipr.disclosure.id }}/">{{ ipr.disclosure.title }}</a>
{% endif %}
{% endfor %}
</div>
Token: {{ doc.ad }}
{% include "iesg/scribe_doc_ballot.html" %}
</li>

View file

@ -1,26 +0,0 @@
{# Copyright The IETF Trust 2015, All Rights Reserved #}{% load origin %}{% origin %}
<li>
{{ doc.title }} ({{ doc.intended_std_level }})
<br><a href="{% url "ietf.doc.views_doc.document_main" name=doc.canonical_name %}">{{ doc.canonical_name }}</a>
{% with doc.rfc_number as rfc_number %}
{% if rfc_number %}
<a href="http://www.rfc-editor.org/rfc/rfc{{ rfc_number }}/">[txt]</a>
{% else %}
<a href="{{doc.get_href}}">[txt]</a>
{% endif %}
{% endwith %}
<br>Token: {{ doc.ad }} ({{ doc.area_acronym }} area)
{% if doc.note %}
<br>Note: {{ doc.note|linebreaksbr }}
{% endif %}
{% for ipr in doc.ipr %}
{% if ipr.disclosure.state.slug == "posted" %}
<br>IPR: <a href="https://datatracker.ietf.org/ipr/{{ ipr.disclosure.id }}/">{{ ipr.disclosure.title }}</a>
{% endif %}
{% endfor %}
{% include "iesg/scribe_doc_ballot.html" %}
</li>

View file

@ -1,34 +0,0 @@
{# Copyright The IETF Trust 2015, All Rights Reserved #}{% load origin %}{% origin %}
{% with doc.active_ballot as ballot %}
{% if ballot %}
<br><b>Discusses/comments</b> <a href="https://datatracker.ietf.org/doc/{{doc.canonical_name}}/ballot/">[ballot]</a>:
<ul>
{% for p in ballot.active_balloter_positions.values %}
{% if p.pos %}
{% if p.discuss %}
<li>
<a href="#{{ doc.name }}+{{ p.balloter|slugify }}+discuss">{{ p.balloter }}: Discuss [{{ p.discuss_time }}]</a>:
<br>{{ p.discuss }}
</li>
{% endif %}
{% if p.comment %}
<li>
<a href="#{{ doc.name }}+{{ p.balloter|slugify }}+comment">{{ p.balloter }}: Comment [{{ p.comment_time }}]</a>:
<br>{{ p.comment }}
</li>
{% endif %}
{% endif %}
{% endfor %}
</ul>
{% endif %}
{% endwith %}
<p><b>Telechat:</b></p>
<ul>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>

View file

@ -1,51 +1,67 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load widget_tweaks django_bootstrap5 %}
{% load person_filters %}
{% load person_filters static %}
{% block pagehead %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
{% block title %}API keys for {{ user }}{% endblock %}
{% block content %}
{% origin %}
<h1>API keys for {{ user.username }}</h1>
<h1>
API keys
<br>
<small class="text-muted">{{ user.username }}</small>
</h1>
{% csrf_token %}
<div class="mb-3">
<label class="col-sm-2 col-form-label">Personal API keys</label>
<div class="col-sm-10">
<div>
<table class="table table-sm">
{% for key in person.apikeys.all %}
{% if forloop.first %}
<tr ><th>Endpoint</th><th>Created</th><th>Latest use</th><th>Count</th><th>Valid</th></tr>
{% endif %}
<tr>
<td>{{ key.endpoint }} </td>
<td>{{ key.created }} </td>
<td>{{ key.latest }} </td>
<td>{{ key.count }} </td>
<td>{{ key.valid }} </td>
</tr>
<tr>
<td style="border-top: 0" colspan="4"><code>{{ key.hash }}</code></td>
<td style="border-top: 0">
{% if key.valid %}
<a href="{%url 'ietf.ietfauth.views.apikey_disable' %}?hash={{key.hash}}" class="btn btn-warning btn-sm del-apikey">Disable</a>
{% endif %}
</td>
</tr>
{% empty %}
<tr><td>You have no personal API keys.</td></tr>
<tr><td></td></tr>
{% endfor %}
</table>
<a href="{% url 'ietf.ietfauth.views.apikey_create' %}" class="btn btn-primary btn-sm add-apikey">Get a new personal API key</a>
</div>
</div>
</div>
<table class="table table-sm tablesorter">
{% for key in person.apikeys.all %}
{% if forloop.first %}
<thead>
<tr >
<th data-sort="endpoint">Endpoint</th>
<th data-sort="created">Created</th>
<th data-sort="date">Last use</th>
<th data-sort="count">Count</th>
<th data-sort="valid">Valid</th>
<th data-sort="key">Key hash</th>
<th></th>
</tr>
</thead>
{% endif %}
<tr>
<td>
<code>{{ key.endpoint }}</code>
</td>
<td>{{ key.created }}</td>
<td>{{ key.latest }}</td>
<td>{{ key.count }}</td>
<td>{{ key.valid }}</td>
<td>
<code>{{ key.hash }}</code>
</td>
<td >
{% if key.valid %}
<a href="{% url 'ietf.ietfauth.views.apikey_disable' %}?hash={{ key.hash }}"
class="btn btn-danger btn-sm del-apikey float-end">
Disable
</a>
{% endif %}
</td>
</tr>
{% empty %}
<tr>
<td>You have no personal API keys.</td>
</tr>
{% endfor %}
</table>
<a href="{% url 'ietf.ietfauth.views.apikey_create' %}"
class="btn btn-primary add-apikey my-3">
Get a new personal API key
</a>
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}

View file

@ -1,30 +1,24 @@
{# bs5ok #}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% extends "base.html" %}
{% load origin %}
{% load django_bootstrap5 %}
{% block title %}
{{ title }} {{ person.plain_name }}
{% endblock %}
{% block title %}{{ title }} {{ person.plain_name }}{% endblock %}
{% block content %}
{% origin %}
<h1>{{ title }}</h1>
<h2>{{ person.plain_name }}</h2>
<p class="fw-bold">
<h1>
{{ title }}
<br>
<small class="text-muted">{{ person.plain_name }}</small>
</h1>
<p class="my-3 alert alert-info">
{{ info|striptags }}
</p>
<form enctype="multipart/form-data" method="post">
{% csrf_token %}
{% bootstrap_form form %}
{% bootstrap_button button_type="submit" content="Submit" %}
<a class="btn btn-secondary float-end" href="{% url "ietf.ietfauth.views.profile" %}">Back</a>
<a class="btn btn-secondary float-end"
href="{% url "ietf.ietfauth.views.profile" %}">Back</a>
</form>
{% endblock %}

View file

@ -1,40 +1,54 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015-2019, All Rights Reserved #}
{% load origin %}
{% load django_bootstrap5 static %}
{% block pagehead %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{{ review_wish_form.media.css }}
{% endblock %}
{% block title %}Review overview for {{ request.user }}{% endblock %}
{% block content %}
{% origin %}
<h1>Review overview for {{ request.user }}</h1>
<h2>Assigned reviews</h2>
<h1>
Review overview
<br>
<small class="text-muted">{{ request.user }}</small>
</h1>
<h2 class="mt-4">Assigned reviews</h2>
{% if open_review_assignments %}
<table class="table table-sm table-striped">
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<th>Document</th>
<th>Version Requested</th>
<th>Current Version</th>
<th>Team</th>
<th>Type</th>
<th>Deadline</th>
<th data-sort="document">Document</th>
<th data-sort="version">Version Requested</th>
<th data-sort="num">Current Version</th>
<th data-sort="team">Team</th>
<th data-sort="type">Type</th>
<th data-sort="date">Deadline</th>
</tr>
</thead>
<tbody>
{% for r in open_review_assignments %}
<tr>
<td><a {% if r.pk != None %}href="{% url "ietf.doc.views_review.review_request" name=r.review_request.doc.name request_id=r.review_request.pk %}"{% endif %}>{{ r.review_request.doc.name }}</a></td>
<td>{% if r.review_request.requested_rev %}{{ r.review_request.requested_rev }}{% else %}Current{% endif %}</td>
<td>{{r.review_request.doc.rev}}</td>
<td><a href="{% url 'ietf.group.views.review_requests' acronym=r.review_request.team.acronym %}">{{ r.review_request.team.acronym }}</a></td>
<td>
<a {% if r.pk != None %}href="{% url "ietf.doc.views_review.review_request" name=r.review_request.doc.name request_id=r.review_request.pk %}"{% endif %}>
{{ r.review_request.doc.name }}
</a>
</td>
<td>
{% if r.review_request.requested_rev %}
{{ r.review_request.requested_rev }}
{% else %}
Current
{% endif %}
</td>
<td>{{ r.review_request.doc.rev }}</td>
<td>
<a href="{% url 'ietf.group.views.review_requests' acronym=r.review_request.team.acronym %}">
{{ r.review_request.team.acronym }}
</a>
</td>
<td>{{ r.review_request.type.name }}</td>
<td>
{{ r.review_request.deadline|date:"Y-m-d" }}
@ -45,140 +59,226 @@
</tbody>
</table>
{% else %}
<p>You do not have any open review requests assigned.</p>
<p>
You do not have any open review requests assigned.
</p>
{% endif %}
<h2>Latest closed review assignments</h2>
<h2 class="mt-4">Latest closed review assignments</h2>
{% if closed_review_assignments %}
<table class="table table-sm table-striped">
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<th>Document</th>
<th>Version Reviewed</th>
<th>Team</th>
<th>Type</th>
<th>Deadline</th>
<th>State</th>
<th>Result</th>
<th data-sort="document">Document</th>
<th data-sort="num">Version Reviewed</th>
<th data-sort="team">Team</th>
<th data-sort="type">Type</th>
<th data-sort="date">Deadline</th>
<th data-sort="state">State</th>
<th data-sort="result">Result</th>
</tr>
</thead>
<tbody>
{% for r in closed_review_assignments %}
<tr>
<td><a {% if r.pk != None %}href="{% url "ietf.doc.views_review.review_request" name=r.review_request.doc.name request_id=r.review_request.pk %}"{% endif %}>{{ r.review_request.doc.name }}</a></td>
<td>{{r.reviewed_rev|default:"See review"}}{% if r.review_request.requested_rev %}{% if r.review_request.requested_rev != r.reviewed_rev %}({{ r.review_request.requested_rev }} requested){% endif %}{% endif %}</td>
<td><a href="{% url 'ietf.group.views.review_requests' acronym=r.review_request.team.acronym %}">{{ r.review_request.team.acronym }}</a></td>
<td>
<a {% if r.pk != None %}href="{% url "ietf.doc.views_review.review_request" name=r.review_request.doc.name request_id=r.review_request.pk %}"{% endif %}>
{{ r.review_request.doc.name }}
</a>
</td>
<td>
{{ r.reviewed_rev|default:"See review" }}
{% if r.review_request.requested_rev %}
{% if r.review_request.requested_rev != r.reviewed_rev %}({{ r.review_request.requested_rev }} requested){% endif %}
{% endif %}
</td>
<td>
<a href="{% url 'ietf.group.views.review_requests' acronym=r.review_request.team.acronym %}">
{{ r.review_request.team.acronym }}
</a>
</td>
<td>{{ r.review_request.type.name }}</td>
<td>
{{ r.review_request.deadline|date:"Y-m-d" }}
{% if r.due %}<span class="badge bg-warning">{{ r.due }} day{{ r.due|pluralize }}</span>{% endif %}
</td>
<td><span class="{% if r.state_id == "completed" or r.state_id == "part-completed" %}bg-success{% endif %}">{{ r.state.name }}</span></td>
<td>{% if r.result %}{{ r.result.name }}{% endif %}</td>
<td>
<span class="{% if r.state_id == "completed" or r.state_id == "part-completed" %}bg-success{% endif %}">{{ r.state.name }}</span>
</td>
<td>
{% if r.result %}{{ r.result.name }}{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>Did not find any closed review requests assigned to you.</p>
<p>
Did not find any closed review requests assigned to you.
</p>
{% endif %}
<h2>Review wishes</h2>
<h2 class="mt-4">
Review wishes
</h2>
{% if review_wishes %}
<p>You have indicated that you would like to review:</p>
<table class="table">
{% for w in review_wishes %}
<p>
You have indicated that you would like to review:
</p>
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<td><a href="{% url "ietf.doc.views_doc.document_main" w.doc.name %}">{{ w.doc.name }}</a></td>
<td>{{ w.team.acronym }}</td>
<td>
<form method="post">
{% csrf_token %}
<input name="wish_id" value="{{ w.pk }}" type="hidden">
<button class="btn btn-sm btn-danger" type="submit" name="action" value="delete_wish">Delete</button>
</form>
</td>
<th>
Document
</th>
<th>
Team
</th>
<th>
</th>
</tr>
{% endfor %}
</thead>
<tbody>
{% for w in review_wishes %}
<tr>
<td>
<a href="{% url "ietf.doc.views_doc.document_main" w.doc.name %}">
{{ w.doc.name }}
</a>
</td>
<td>
{{ w.team.acronym }}
</td>
<td>
<form method="post">
{% csrf_token %}
<input name="wish_id" value="{{ w.pk }}" type="hidden">
<button class="btn btn-sm btn-danger float-end"
type="submit"
name="action"
value="delete_wish">
Delete
</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>You do not have any review wishes.</p>
<p>
You do not have any review wishes.
</p>
{% endif %}
{% if teams %}
<p>Add a draft that you would like to review when it becomes available for review:</p>
<p>
Add a draft that you would like to review when it becomes available for review:
</p>
<form role="form" method="post" class="form-inline">
{% csrf_token %}
{% bootstrap_form review_wish_form %}
<button class="btn btn-primary" type="submit" name="action" value="add_wish">Add draft</button>
<button class="btn btn-primary" type="submit" name="action" value="add_wish">
Add draft
</button>
</form>
{% endif %}
{% for t in teams %}
<h2>Settings for {{ t }}</h2>
<table class="table">
<tr>
<th>Can review</th>
<td>{{ t.reviewer_settings.get_min_interval_display|default:"No max frequency set" }}</td>
</tr>
<tr>
<th>Skip next assignments</th>
<td>{{ t.reviewer_settings.skip_next }}</td>
</tr>
<tr>
<th>Filter regexp</th>
<td>{% if t.reviewer_settings.filter_re %}<code>{{ t.reviewer_settings.filter_re }}</code>{% else %}(None){% endif %}</td>
</tr>
<tr>
<th>Remind days before deadline</th>
<td>{{ t.reviewer_settings.remind_days_before_deadline|default:"(Do not remind)" }}</td>
</tr>
<tr>
<th>Periodic reminder of open reviews every X days</th>
<td>{{ t.reviewer_settings.remind_days_open_reviews|default:"(Do not remind)" }}</td>
</tr>
<tr>
<th>Select me next for an assignment</th>
<td>{{ t.reviewer_settings.request_assignment_next|yesno }}</td>
</tr>
<tr>
<th>Unavailable periods</th>
<td>
{% if t.unavailable_periods %}
{% include "review/unavailable_table.html" with unavailable_periods=t.unavailable_periods %}
{% else %}
(No periods)
{% endif %}
</td>
</table>
<div>
<a class="btn btn-primary" href="{% url "ietf.group.views.change_reviewer_settings" group_type=t.type_id acronym=t.acronym reviewer_email=t.role.email.address %}?next={{ request.get_full_path|urlencode }}">Change settings</a>
</div>
<h2 class="mt-4">
Settings for {{ t }}
</h2>
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<th>
Setting
</th>
<th>
Value
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
Can review
</th>
<td>
{{ t.reviewer_settings.get_min_interval_display|default:"No max frequency set" }}
</td>
</tr>
<tr>
<th>
Skip next assignments
</th>
<td>
{{ t.reviewer_settings.skip_next }}
</td>
</tr>
<tr>
<th>
Filter regexp
</th>
<td>
{% if t.reviewer_settings.filter_re %}
<code>{{ t.reviewer_settings.filter_re }}</code>
{% else %}
(None)
{% endif %}
</td>
</tr>
<tr>
<th>
Remind days before deadline
</th>
<td>
{{ t.reviewer_settings.remind_days_before_deadline|default:"(Do not remind)" }}
</td>
</tr>
<tr>
<th>
Periodic reminder of open reviews every X days
</th>
<td>
{{ t.reviewer_settings.remind_days_open_reviews|default:"(Do not remind)" }}
</td>
</tr>
<tr>
<th>
Select me next for an assignment
</th>
<td>
{{ t.reviewer_settings.request_assignment_next|yesno }}
</td>
</tr>
<tr>
<th>
Unavailable periods
</th>
<td>
{% if t.unavailable_periods %}
{% include "review/unavailable_table.html" with unavailable_periods=t.unavailable_periods %}
{% else %}
(No periods)
{% endif %}
</td>
</tr>
</tbody>
</table>
<div>
<a class="btn btn-primary"
href="{% url "ietf.group.views.change_reviewer_settings" group_type=t.type_id acronym=t.acronym reviewer_email=t.role.email.address %}?next={{ request.get_full_path|urlencode }}">
Change settings
</a>
</div>
{% empty %}
<h2>Settings</h2>
<p>It looks like you are not a reviewer in any active review team.</p>
<h2 class="mt-4">
Settings
</h2>
<p>
It looks like you are not a reviewer in any active review team.
</p>
{% endfor %}
{% endblock %}
{% block js %}
{{ review_wish_form.media.js }}
<script src="{% static "ietf/js/list.js" %}">
</script>
{% endblock %}

View file

@ -1,32 +1,27 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load django_bootstrap5 %}
{% block title %}Set up test email address{% endblock %}
{% block content %}
{% origin %}
<h1>Set up test email address</h1>
<p>Since this server is running in test mode, all email to be sent out
is intercepted and thrown away.</p>
<p>To receive a copy of each message before it's thrown away, you can
<p>
Since this server is running in test mode, all email to be sent out
is intercepted and thrown away.
</p>
<p>
To receive a copy of each message before it's thrown away, you can
set an email address below. The address is stored in the <code>testmailcc</code>
cookie in your browser. So make sure cookies are enabled.</p>
<p>Value of <code>testmailcc</code>: {{ cookie }}</p>
cookie in your browser. So make sure cookies are enabled.
</p>
<p>
Current value of <code>testmailcc</code> cookie: <code>{{ cookie|default:"(Unset)" }}</code>
</p>
<form role="form" method="post">
{% csrf_token %}
{% bootstrap_form form %}
<button class="btn btn-primary" type="submit">Set cookie</button>
</form>
{% endblock %}
{% endblock %}

View file

@ -1,27 +1,20 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2016, All Rights Reserved #}
{% load origin %}
{% load django_bootstrap5 %}
{% block title %}Set up test email address{% endblock %}
{% block content %}
{% origin %}
{% if success %}
<h1>Whitelist entry creation successful</h1>
<p>
Please ask the requestor to try the
<a href="{% url 'ietf.ietfauth.views.create_account'%}">account creation form</a>
<a href="{% url 'ietf.ietfauth.views.create_account' %}">account creation form</a>
again, with the whitelisted email address.
</p>
{% else %}
<h1>Add a whitelist entry for account creation.</h1>
<p>
When an email request comes in for assistance with account creation
because the automated account creation has failed, you can add the
@ -31,7 +24,6 @@
Before you do so, please complete the following 3 verification steps:
<ol>
<li>
Has the person provided relevant information in his request, or has he simply
copied the text from the account creation failure message? All genuine (non-spam)
account creation requests seen between 2009 and 2016 for tools.ietf.org have
@ -39,52 +31,41 @@
creation failure message. If there's no proper request message, step 2 below can
be performed to make sure the request is bogus, but if that also fails, no further
effort should be needed.
</li>
<li>
Google for the person's name within the ietf.org site: "Jane Doe site:ietf.org". If
found, and the email address matches an address used in drafts or discussions,
things are fine, and it's OK to add the address to the whitelist using this form,
and ask the person to please try the
<a href="{% url 'ietf.ietfauth.views.create_account' %}">account creation form</a> again.
<a href="{% url 'ietf.ietfauth.views.create_account' %}">account creation form</a>
again.
</li>
<li>
<p>
If google finds no trace of the person being an ietf participant, he or she could
still be somebody who is just getting involved in IETF work. A datatracker account
is probably not necessary, (no account is necessary to 'join' a WG -- the right thing
in that case is to join the right mailing list, and the person could be told so) --
but in case this is a legitimate request, please email the person and ask:
<i>
"Which wgs do you require a password for?"
</i>
</p>
<blockquote>
"Which wgs do you require a password for?"
</blockquote>
<p>
This is a bit of a trick question, because it is very unlikely that somebody who
isn't involved in IETF work will give a reasonable response, while almost any answer
from somebody who is doing IETF work will show that they have some clue.
</p>
<p>
Please note the exact wording. Do <b><i>not</i></b> ask about "working groups" --
that will make it easier for people to google for IETF working groups. Ask the
question as given above, with lowercase "wgs".
</p>
<p>
If the answer to this question shows clue, then add the address to the whitelist
using this form, and ask the person to please try the
<a href="{% url 'ietf.ietfauth.views.create_account' %}"> account creation form</a> again.
<a href="{% url 'ietf.ietfauth.views.create_account' %}">account creation form</a>
again.
</p>
</li>
</ol>
@ -92,12 +73,7 @@
<form role="form" method="post">
{% csrf_token %}
{% bootstrap_form form %}
<button class="btn btn-primary" type="submit">Add address to account creation whitelist</button>
</form>
{% endif %}
{% endblock %}
{% endblock %}

View file

@ -1,27 +1,24 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load django_bootstrap5 %}
{% block title %}Add comment on {{ ipr.title }}{% endblock %}
{% block content %}
{% origin %}
<h1>Add comment<br><small class="text-muted">{{ ipr }}</small></h1>
<p>The comment will be added to the history trail of the disclosure.</p>
<h1>
Add comment
<br>
<small class="text-muted">{{ ipr }}</small>
</h1>
<p>
The comment will be added to the history trail of the disclosure.
</p>
<form class="add-comment" method="post">
{% csrf_token %}
{% bootstrap_form form %}
<button type="submit" class="btn btn-primary">Add Comment</button>
<a class="btn btn-secondary float-end" href="{% url "ietf.ipr.views.history" id=ipr.id %}">Back</a>
<button type="submit" class="btn btn-primary">Add comment</button>
<a class="btn btn-secondary float-end"
href="{% url "ietf.ipr.views.history" id=ipr.id %}">Back</a>
</form>
{% endblock %}
{% endblock %}

View file

@ -1,27 +1,24 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load django_bootstrap5 %}
{% block title %}Add email on {{ ipr.title }}{% endblock %}
{% block content %}
{% origin %}
<h1>Add email<br><small class="text-muted">{{ ipr }}</small></h1>
<p>The email will be added to the history trail of the disclosure.</p>
<h1>
Add email
<br>
<small class="text-muted">{{ ipr }}</small>
</h1>
<p>
The email will be added to the history trail of the disclosure.
</p>
<form class="add-email" method="post">
{% csrf_token %}
{% bootstrap_form form %}
<button type="submit" class="btn btn-primary">Add Email</button>
<a class="btn btn-secondary float-end" href="{% url "ietf.ipr.views.history" id=ipr.id %}">Back</a>
<a class="btn btn-secondary float-end"
href="{% url "ietf.ipr.views.history" id=ipr.id %}">Back</a>
</form>
{% endblock %}
{% endblock %}

View file

@ -1,23 +1,34 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load ietf_filters static %}
{% block title %}IPR Admin - {% for s in states %}{{ s.name }}{% if not forloop.last %}/{% endif %}{% endfor %} Disclosures{% endblock %}
{% block title %}
IPR Admin -
{% for s in states %}
{{ s.name }}
{% if not forloop.last %}/{% endif %}
{% endfor %}
Disclosures
{% endblock %}
{% block pagehead %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
{% block content %}
{% origin %}
<h1>IPR Admin - {% for s in states %}{{ s.name }}{% if not forloop.last %}/{% endif %}{% endfor %} Disclosures</h1>
<h1>
IPR Admin
<br>
<small class="text-muted">
{% for s in states %}
{{ s.name }}
{% if not forloop.last %}/{% endif %}
{% endfor %}
disclosures</small>
</h1>
<p class="buttonlist">
<a class="btn btn-primary" href="{% url "ietf.ipr.views.showlist" %}">Back to IPR Disclosure Page</a>
</p>
<ul class="nav nav-tabs">
{% for name, link, selected in tabs %}
<li class="nav-item">
@ -25,11 +36,8 @@
</li>
{% endfor %}
</ul>
{% include "ipr/ipr_table.html" %}
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}

View file

@ -1,57 +1,62 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load static %}
{% load ietf_filters ipr_filters django_bootstrap5 %}
{% block title %}{% if form.instance %}Edit IPR #{{ form.instance.id }}{% else %}New IPR{% endif %}{% endblock %}
{% block pagehead %}
{{ form.media.css }}
{% block title %}
{% if form.instance %}
Edit IPR #{{ form.instance.id }}
{% else %}
New IPR
{% endif %}
{% endblock %}
{% block pagehead %}{{ form.media.css }}{% endblock %}
{% block content %}
{% origin %}
{% if form.instance|to_class_name == "HolderIprDisclosure" %}
<h1>The Patent Disclosure and Licensing Declaration Template for Specific IPR Disclosures</h1>
<p>This document is an IETF IPR Disclosure and Licensing Declaration
<p>
This document is an IETF IPR Disclosure and Licensing Declaration
Template and is submitted to inform the IETF of a) patent or patent
application information regarding the IETF document or contribution
listed in Section IV, and b) an IPR Holder's intention with respect to
the licensing of its necessary patent claims. No actual license is
implied by submission of this template. Please complete and submit a
separate template for each IETF document or contribution to which the
disclosed patent information relates.</p>
disclosed patent information relates.
</p>
{% elif form.instance|to_class_name == "ThirdPartyIprDisclosure" %}
<h1>The Patent Disclosure and Licensing Declaration Template for Third Party IPR Disclosures</h1>
<p>This form is used to let the IETF know about patent information
<p>
This form is used to let the IETF know about patent information
regarding an IETF document or contribution when the person letting the
IETF know about the patent has no relationship with the patent owners.
Click <a href="/ipr/new-specific">here</a>
Click
<a href="/ipr/new-specific">here</a>
if you want to disclose information about patents or patent
applications where you do have a relationship to the patent owners or
patent applicants.</p>
patent applicants.
</p>
{% else %}
<h1>The Patent Disclosure and Licensing Declaration Template for General IPR Disclosures</h1>
<p>This document is an IETF IPR Patent Disclosure and Licensing
<p>
This document is an IETF IPR Patent Disclosure and Licensing
Declaration Template and is submitted to inform the IETF of a) patent
or patent application information that is not related to a specific
IETF document or contribution, and b) an IPR Holder's intention with
respect to the licensing of its necessary patent claims. No actual
license is implied by submission of this template.</p>
<p><b>Note:</b> According to Section 5.4.3 of
license is implied by submission of this template.
</p>
<p>
<b>Note:</b> According to Section 5.4.3 of
<a href="https://www.ietf.org/rfc/rfc8179.txt">RFC 8179</a>,
"Intellectual Property Rights in IETF Technology," you
are still required to file specific disclosures on IPR unless your
general disclosure satisfies certain conditions. Please see the
RFC for details.</p>
RFC for details.
</p>
{% endif %}
<p>
Submissions that do not comply with the formal
requirements of Section 5, "IPR Disclosures," of
@ -64,17 +69,13 @@
rejected.
{% endif %}
</p>
<p>
If you have any questions or problems with form then please contact
<a href="mailto:ietf-ipr@ietf.org">ietf-ipr@ietf.org</a>. We do not
accept IPR disclosures by email.
</p>
<form class="ipr-form form-horizontal show-required" method="post">
{% csrf_token %}
{% if form.errors %}
<div class="alert alert-danger">
<p>
@ -82,48 +83,45 @@
</p>
{% if form.non_field_errors %}
<ul class="errorlist">
{% for error in form.non_field_errors %}
<li>{{ error }}</li>
{% endfor %}
{% for error in form.non_field_errors %}<li>{{ error }}</li>{% endfor %}
</ul>
{% endif %}
</div>
{% endif %}
<p class="form-text">Fields marked with <label class="required"></label> are required</p>
<h2>Updates</h2>
<p class="required">
Fields marked with
<label></label>
are required.
</p>
<h2 class="mt-4">Updates</h2>
{% bootstrap_field form.updates layout="horizontal" %}
{% if user|has_role:"Secretariat" %}
{% bootstrap_field form.compliant layout="horizontal" %}
{% else %}
<input type="hidden" id="id_compliant" name="compliant" value="checked" />
{% endif %}
<h2>{% cycle 'I' 'II' 'III' 'IV' 'V' 'VI' 'VII' 'VIII' as section %}.
{% if form.instance|to_class_name == "ThirdPartyIprDisclosure" %}Possible{% endif %} Patent holder/applicant ("patent holder")</h2>
<h2 class="mt-4">
{% cycle 'I' 'II' 'III' 'IV' 'V' 'VI' 'VII' 'VIII' as section %}.
{% if form.instance|to_class_name == "ThirdPartyIprDisclosure" %}Possible{% endif %}
Patent holder/applicant ("patent holder")
</h2>
{% bootstrap_field form.holder_legal_name layout='horizontal' %}
{% if form.holder_contact_name %}
<h2>{% cycle section %}. Patent holder's contact for license application</h2>
<h2 class="mt-4">{% cycle section %}. Patent holder's contact for license application</h2>
{% bootstrap_field form.holder_contact_name layout='horizontal' %}
{% bootstrap_field form.holder_contact_email layout='horizontal' %}
{% bootstrap_field form.holder_contact_info layout='horizontal' %}
{% endif %}
{% if form.ietfer_name %}
<h2>{% cycle section %}. Contact information for the IETF participant whose personal belief triggered this disclosure</h2>
<h2 class="mt-4">
{% cycle section %}. Contact information for the IETF participant whose personal belief triggered this disclosure
</h2>
{% bootstrap_field form.ietfer_name layout='horizontal' %}
{% bootstrap_field form.ietfer_contact_email layout='horizontal' %}
{% bootstrap_field form.ietfer_contact_info layout='horizontal' %}
{% endif %}
{% if type != "generic" %}
<h2>{% cycle section %}. IETF document or other contribution to which this IPR disclosure relates</h2>
<h2 class="mt-4">{% cycle section %}. IETF document or other contribution to which this IPR disclosure relates</h2>
<p class="form-text">
If an Internet-Draft or RFC includes multiple parts and it is not
reasonably apparent which part of such Internet-Draft or RFC is alleged
@ -132,42 +130,30 @@
the Internet-Draft or RFC that are alleged to be so
covered.
</p>
{{ draft_formset.management_form }}
{% for draft_form in draft_formset %}
<div class="mb-3 row draft-row {% if forloop.last %}template visually-hidden{% endif %}">
<label class="col-md-2 fw-bold" for="{{ draft_form.document.id_for_label }}">
{{ draft_form.document.label }}
</label>
<div class="row draft-row {% if forloop.last %}template visually-hidden{% endif %}">
<label class="col-md-2 fw-bold" for="{{ draft_form.document.id_for_label }}">{{ draft_form.document.label }}</label>
<div class="col-md-6">
{{ draft_form.id }}
{{ draft_form.document }}{% if draft_form.document.errors %}<div class="alert alert-danger">{{ draft_form.document.errors }}</div>{% endif %}
{{ draft_form.document }}
{% if draft_form.document.errors %}<div class="alert alert-danger">{{ draft_form.document.errors }}</div>{% endif %}
</div>
<div class="col-md-2">
{% bootstrap_field draft_form.revisions class="form-control" placeholder="Revisions, e.g., 04-07" show_help=False show_label=False %}
<label class="visually-hidden" for="{{ draft_form.revisions.id_for_label }}">{{ draft_form.revisions.label }}</label>
</div>
<div class="col-md-2">
{% bootstrap_field draft_form.sections class="form-control" placeholder="Sections" show_help=False show_label=False %}
<label class="visually-hidden" for="{{ draft_form.sections.id_for_label }}">{{ draft_form.sections.label }}</label>
</div>
</div>
{% endfor %}
{% comment %}
{% for draft_form in draft_formset %}
<div class="mb-3 row draft-row {% if forloop.last %}template{% endif %}">
<div class="col-md-2 fw-bold">
{% bootstrap_label draft_form.document.label %}
</div>
<div class="col-md-6">
{% bootstrap_field draft_form.document label_class="visually-hidden" show_help=False %}
</div>
<div class="row draft-row {% if forloop.last %}template{% endif %}">
<div class="col-md-2 fw-bold">{% bootstrap_label draft_form.document.label %}</div>
<div class="col-md-6">{% bootstrap_field draft_form.document label_class="visually-hidden" show_help=False %}</div>
<div class="col-md-2">
{% bootstrap_field draft_form.revisions placeholder="Revisions, e.g., 04-07" label_class="visually-hidden" show_help=False %}
</div>
@ -177,18 +163,21 @@
</div>
{% endfor %}
{% endcomment %}
<div class="mb-3 mb-3">
<label class="col-md-2 col-form-label"></label>
<div class="col-md-10"><a class="draft-add-row btn btn-primary"><span class="bi bi-plus" aria-hidden="true"></span> Add more</a></div>
<div class="mb-3 row">
<div class="col-md-2"></div>
<div class="col-md-10">
<a class="draft-add-row btn btn-primary">
<span class="bi bi-plus" aria-hidden="true"></span> Add more
</a>
</div>
</div>
{% bootstrap_field form.other_designations layout='horizontal' %}
{% endif %}
<h2>{% cycle section %}. Disclosure of Patent Information{% if form.instance|to_class_name == "ThirdPartyIprDicslosure" %}, if known{% endif %}
<small>i.e., patents or patent applications required to be disclosed by Section 5 of RFC8179</small></h2>
<h2 class="mt-4">
{% cycle section %}. Disclosure of Patent Information
{% if form.instance|to_class_name == "ThirdPartyIprDicslosure" %}, if known{% endif %}
<small>i.e., patents or patent applications required to be disclosed by Section 5 of RFC8179</small>
</h2>
{% if form.patent_number %}
<p>
A. For granted patents or published pending patent applications,
@ -199,27 +188,27 @@
{% bootstrap_field form.patent_title layout='horizontal' %}
{% bootstrap_field form.patent_date layout='horizontal' %}
{% bootstrap_field form.patent_notes layout='horizontal' %}
<p>B. Does your disclosure relate to an unpublished pending patent application?</p>
<p>
B. Does your disclosure relate to an unpublished pending patent application?
</p>
{% bootstrap_field form.has_patent_pending layout='horizontal' %}
{% elif form.patent_info %}
<p>
A. For granted patents or published pending patent applications,
please provide the following information:
</p>
{% bootstrap_field form.patent_info layout='horizontal' %}
<p>B. Does your disclosure relate to an unpublished pending patent application?</p>
<p>
B. Does your disclosure relate to an unpublished pending patent application?
</p>
{% bootstrap_field form.has_patent_pending layout='horizontal' %}
{% else %}
<p>This disclosure relates to an unpublished pending patent application.</p>
<p>
This disclosure relates to an unpublished pending patent application.
</p>
{% endif %}
{% if form.licensing %}
<h2>{% cycle section %}. Licensing declaration</h2>
<h2 class="mt-4">{% cycle section %}. Licensing declaration</h2>
<p>
The Patent Holder states that its position with respect
to licensing any patent claims contained in the patent(s) or patent
@ -228,60 +217,54 @@
("Necessary Patent Claims"), for the purpose of implementing such
specification, is as follows (select one licensing declaration option only):
</p>
{% bootstrap_field form.licensing layout='horizontal' %}
{% bootstrap_field form.licensing_comments layout='horizontal' %}
{% if form.submitter_claims_all_terms_disclosed %}
{% bootstrap_field form.submitter_claims_all_terms_disclosed layout='horizontal' %}
{% if form.instance|to_class_name == "GenericIprDisclosure" %}
<p class="alert alert-info">
<strong>Note</strong>: According to
<a href="https://www.ietf.org/rfc/rfc8179.txt?">RFC 8179</a>,
<a href="https://www.ietf.org/rfc/rfc8179.txt?">
RFC 8179
</a>,
Section 5.4.3, unless you check the box
above, and choose either option a) or b), you must still file specific
IPR disclosures as appropriate.
</p>
{% endif %}
{% endif %}
<p>
<strong>Note: The individual submitting this template represents and warrants
that he or she is authorized by the Patent Holder to agree to the
above-selected licensing declaration.</strong>
above-selected licensing declaration.</strong>
</p>
{% endif %}
{% if form.statement %}
<h2>{% cycle section %}. Statement</h2>
<h2 class="mt-4">
{% cycle section %}. Statement
</h2>
<p>
The statement should include any licensing information.
</p>
{% bootstrap_field form.statement layout='horizontal' %}
{% endif %}
<h2>{% cycle section %}. Contact information of submitter of this form</h2>
<h2 class="mt-4">
{% cycle section %}. Contact information of submitter of this form
</h2>
{% bootstrap_field form.same_as_ii_above layout='horizontal' %}
{% bootstrap_field form.submitter_name layout='horizontal' %}
{% bootstrap_field form.submitter_email layout='horizontal' %}
<h2>{% cycle section %}. Other notes</h2>
<h2 class="mt-4">
{% cycle section %}. Other notes
</h2>
{% bootstrap_field form.notes layout='horizontal' %}
{% bootstrap_button button_type="submit" name="submit" content="Submit" %}
</form>
{% endblock %}
{% block js %}
{{ form.media.js }}
<script src="{% static 'ietf/js/datepicker.js' %}"></script>
<script src="{% static 'ietf/js/ipr-edit.js' %}"></script>
<script src="{% static 'ietf/js/datepicker.js' %}">
</script>
<script src="{% static 'ietf/js/ipr-edit.js' %}">
</script>
{% endblock %}

View file

@ -1,63 +1,67 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load ietf_filters ipr_filters static %}
{% load ietf_filters ipr_filters static person_filters textfilters %}
{% block morecss %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
{% block title %}History for IPR - {{ ipr.title }}{% endblock %}
{% block content %}
{% origin %}
<h1>History for IPR disclosure<br><small class="text-muted">{{ ipr.title }}</small></h1>
<h1>
History for IPR disclosure
<br>
<small class="text-muted">{{ ipr.title }}</small>
</h1>
{% include "ipr/details_tabs.html" %}
{% if user|has_role:"Area Director,Secretariat,IANA,RFC Editor" %}
<p class="buttonlist">
<a class="btn btn-primary" href="{% url 'ietf.ipr.views.add_comment' id=ipr.id %}" title="Add comment to history">Add comment</a>
<a class="btn btn-primary" href="{% url 'ietf.ipr.views.add_email' id=ipr.id %}" title="Add email to history">Add email</a>
<a class="btn btn-primary"
href="{% url 'ietf.ipr.views.add_comment' id=ipr.id %}"
title="Add comment to history">
Add comment
</a>
<a class="btn btn-primary"
href="{% url 'ietf.ipr.views.add_email' id=ipr.id %}"
title="Add email to history">
Add email
</a>
</p>
{% endif %}
<table class="table table-sm table-striped history tablesorter">
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<th>Date</th>
<th>Type</th>
<th>By</th>
<th>Text</th>
<th data-sort="date">Date</th>
<th data-sort="type">Type</th>
<th data-sort="by">By</th>
<th data-sort="text">Text</th>
</tr>
</thead>
<tbody>
{% for e in events %}
<tr id="history-{{ e.pk }}">
<td class="text-nowrap">{{ e.time|date:"Y-m-d" }}</td>
<td>{{ e.type }}
<td>
{{ e.type }}
{% if e.response_due and e.response_past_due %}
<span class="bi bi-exclamation-circle" title="Response overdue"></span>
{% endif %}
</td>
<td>{{ e.by }}</td>
{% if e.message %}
<td>{{ e.message|render_message_for_history|format_history_text:"100"|safe }}
{% if e.response_due %}
<br>Response Due: {{ e.response_due|date:"Y-m-d" }}
{% endif %}
</td>
{% else %}
<td>{{ e.desc|format_history_text }}</td>
{% endif %}
<td>{% person_link e.by %}</td>
<td>
{% if e.message %}
{% if e.response_due %}<span class="badge bg-info">Response due: {{ e.response_due|date:"Y-m-d" }}</span>{% endif %}
<pre>{{ e.message|render_message_for_history|format_history_text:"100" }}</pre>
{% else %}
{{ e.desc|format_history_text }}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}

View file

@ -1,9 +1,11 @@
{# bs5ok #}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}{% origin %}
<ul class="nav nav-tabs">
{% load origin %}
{% origin %}
<ul class="nav nav-tabs my-3">
{% for name, link, selected in tabs %}
<li class="nav-item">
<a class=nav-item {% if selected %}active{% endif %}" href="{{ link }}">{{ name }}</a>
<a class="nav-link {% if selected %}active{% endif %}" href="{{ link }}">{{ name }}</a>
</li>
{% endfor %}
</ul>
</ul>

File diff suppressed because it is too large Load diff

View file

@ -1,62 +1,66 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% block title %}IPR disclosures{% endblock %}
{% block content %}
{% origin %}
<h1>IPR disclosures</h1>
{% include "ipr/ipr_intro.html" %}
<ul>
<li><a href="{% url "ietf.ipr.views.new" "specific" %}">File a disclosure about your IPR related to a specific IETF contribution</a></li>
<li><a href="{% url "ietf.ipr.views.new" "general" %}">File an IPR disclosure that is not related to a specific IETF contribution</a></li>
<li><a href="{% url "ietf.ipr.views.new" "third-party" %}">Notify the IETF of IPR other than your own</a></li>
<li>
<a href="{% url "ietf.ipr.views.new" "specific" %}">
File a disclosure about your IPR related to a specific IETF contribution
</a>
</li>
<li>
<a href="{% url "ietf.ipr.views.new" "general" %}">
File an IPR disclosure that is not related to a specific IETF contribution
</a>
</li>
<li>
<a href="{% url "ietf.ipr.views.new" "third-party" %}">Notify the IETF of IPR other than your own</a>
</li>
<li>To update an existing IPR disclosure, find the original disclosure and select "update this IPR disclosure".</li>
<li><a href="{% url "ietf.ipr.views.search" %}">Search the IPR disclosures</a></li>
<li><a href="{% url "ietf.ipr.views.showlist" %}">List of IPR disclosures</a></li>
<li>
<a href="{% url "ietf.ipr.views.search" %}">Search the IPR disclosures</a>
</li>
<li>
<a href="{% url "ietf.ipr.views.showlist" %}">List of IPR disclosures</a>
</li>
</ul>
<p>
To remove an IPR disclosure from the list, please contact the IETF Secretariat at <a href="mailto:ietf-ipr@ietf.org">ietf-ipr@ietf.org</a>.
To remove an IPR disclosure from the list, please contact the IETF Secretariat at
<a href="mailto:ietf-ipr@ietf.org">ietf-ipr@ietf.org</a>.
</p>
<hr>
<p>
<strong>IETF Contribution:</strong>
Any submission to the IETF intended by the Contributor for publication as all or part of an Internet-Draft or RFC (except for RFC Editor Contributions described below) and any statement made within the context of an IETF activity. Such statements include oral statements in IETF sessions, as well as written and electronic communications made at any time or place, which are addressed to:
</p>
<ul>
<li>the IETF plenary session,</li>
<li>any IETF working group or portion thereof,</li>
<li>the IESG, or any member thereof on behalf or the IESG,</li>
<li>the IAB or any member thereof on behalf of the IAB,</li>
<li>any IETF mailing list, including the IETF list itself, any working group or design team list, or any other list functioning under IETF auspices,</li>
<li>
any IETF mailing list, including the IETF list itself, any working group or design team list, or any other list functioning under IETF auspices,
</li>
<li>the RFC Editor or the Internet-Drafts function (except for RFC Editor Contributions described below).</li>
</ul>
<p>
Statements made outside of an IETF session, mailing list or other function, that are clearly not intended to be input to an IETF activity, group or function, are not IETF Contributions in the context of this document.
</p>
<p>
A participant in any IETF activity is deemed to accept all IETF rules of process, as documented in Best Current Practices RFCs and IESG Statements.
</p>
<p>
A participant in any IETF activity acknowledges that written, audio and video records of meetings may be made and may be available to the public.
</p>
<hr>
<p>
<strong>RFC Editor Contribution:</strong>
An Internet-Draft intended by the Contributor to be submitted to the
RFC Editor for publication as an Informational or Experimental RFC but not intended to be part of the IETF Standards Process.
</p>
{% endblock %}
{% endblock %}

View file

@ -1,33 +1,28 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load static %}
{% load django_bootstrap5 %}
{% block title %}Email submitter of {{ ipr.title }}{% endblock %}
{% block pagehead %}
<link rel="stylesheet" href="{% static 'ietf/css/datepicker.css' %}">
{% endblock %}
{% block content %}
{% origin %}
<h1>Email submitter<br><small class="text-muted">{{ ipr.title }}</small></h1>
<form method="post" class="show-required">
<h1>
Email submitter
<br>
<small class="text-muted">{{ ipr.title }}</small>
</h1>
<form method="post" class="my-3 show-required">
{% csrf_token %}
{% bootstrap_form form %}
<button type="submit" class="btn btn-primary">Send Email</button>
<a class="btn btn-secondary float-end" href="{% url "ietf.ipr.views.history" id=ipr.id %}">Back</a>
<a class="btn btn-secondary float-end"
href="{% url "ietf.ipr.views.history" id=ipr.id %}">Back</a>
</form>
{% endblock %}
{% block js %}
<script src="{% static 'ietf/js/datepicker.js' %}"></script>
{% endblock %}
{% endblock %}

View file

@ -1,28 +1,24 @@
{# bs5ok #}
<p>
This page provides a mechanism for filing disclosures about intellectual
property rights (IPR) and for finding out what IPR disclosures have been
filed. The IETF intellectual property rights rules are defined in RFC
8179, <a href="https://www.ietf.org/rfc/rfc8179.txt">"Intellectual
Property Rights in IETF Technology"</a>.
8179,
<a href="https://www.ietf.org/rfc/rfc8179.txt">
"Intellectual Property Rights in IETF Technology"</a>.
</p>
<p>
The IETF takes no position regarding the validity or scope of any
intellectual property rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in any
IETF documents or the extent to which any license under such rights might
or might not be available; nor does it represent that it has made any
independent effort to identify any such rights.
</p>
<p>
The material posted as IPR disclosures should be viewed as originating
from the source of that information, and any issue or question related to
the material should be directed to the source rather than the IETF. There
is no implied endorsement or agreement by the IETF, the IESG or any other
IETF entities with any of the material.
</p>
</p>

View file

@ -1,15 +1,17 @@
{# bs5ok #}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}{% origin %}
{% load origin %}
{% origin %}
{% load ietf_filters %}
<table class="table table-sm table-striped tablesorter ipr-table">
<thead>
<tr>
<th data-sort="date">Date</th>
<th data-sort="id">ID</th>
<th data-sort="num">ID</th>
<th data-sort="title">Title</th>
{% if administrative_list == 'pending' %}
<th data-sort="query">Query</th>
<th data-sort="due">Response Due</th>
<th data-sort="due">Response due</th>
{% endif %}
</tr>
</thead>
@ -20,30 +22,34 @@
<td class="text-end">{{ ipr.id }}</td>
<td>
{% if ipr.state_id == 'posted' or administrative_list %}
<div><a href="{% url "ietf.ipr.views.show" ipr.id %}">{{ ipr.title }}</a></div>
<div>
<a href="{% url "ietf.ipr.views.show" ipr.id %}">{{ ipr.title }}</a>
</div>
{% for item in ipr.relatedipr_source_set.all %}
{% if item.target.state_id == 'posted' %}
<div>Updates ID <a href="{% url "ietf.ipr.views.show" item.target.id %}">#{{ item.target.id }}</a>.</div>
<small>Updates ID
<a href="{% url "ietf.ipr.views.show" item.target.id %}">#{{ item.target.id }}</a>.
</small>
{% endif %}
{% endfor %}
{% for item in ipr.relatedipr_target_set.all %}
{% if item.source.state_id == "posted" %}
<div>Updated by ID <a href="{% url "ietf.ipr.views.show" item.source.id %}">#{{ item.source.id }}</a>.</div>
<small>Updated by ID
<a href="{% url "ietf.ipr.views.show" item.source.id %}">#{{ item.source.id }}</a>.
</small>
{% endif %}
{% endfor %}
{% else %}
<div>{{ ipr.title }}</div>
<div><i>This IPR disclosure was removed at the request of the submitter.</i></div>
<small><i>This IPR disclosure was removed at the request of the submitter.</i></small>
{% endif %}
</td>
{% if administrative_list == 'pending' %}
{% with ipr.get_latest_event_msgout as latest_msgout %}
<td>{% if latest_msgout %}{{ latest_msgout.time|date:"Y-m-d" }}{% endif %}</td>
<td class="text-nowrap">
<td>
{% if latest_msgout %}{{ latest_msgout.time|date:"Y-m-d" }}{% endif %}
</td>
<td>
{% if latest_msgout and latest_msgout.response_due %}
{{ latest_msgout.response_due|date:"Y-m-d" }}
{% if latest_msgout.response_past_due %}

View file

@ -1,62 +1,31 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load ietf_filters static %}
{% block title %}Intellectual property rights disclosures{% endblock %}
{% block pagehead %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
{% block content %}
{% origin %}
<div class="row">
<div class="col-md-10">
<h1>Intellectual property rights disclosures</h1>
<div class="alert alert-info">
{% include "ipr/ipr_intro.html" %}
</div>
<p class="buttonlist">
<a class="btn btn-primary" href="{% url "ietf.ipr.views.about" %}">Submit an IPR disclosure</a>
<a class="btn btn-primary" href="{% url "ietf.ipr.views.search" %}">Search IPR disclosures</a>
{% if user|has_role:"Secretariat" %}
<a class="btn btn-primary" href="{% url 'ietf.ipr.views.admin' state='pending' %}">Administrative View</a>
{% endif %}
</p>
<h2 id="generic">General IPR disclosures</h2>
{% include "ipr/ipr_table.html" with iprs=generic_disclosures %}
<h2 id="specific">Specific IPR disclosures</h2>
{% include "ipr/ipr_table.html" with iprs=specific_disclosures %}
<h2 id="notify">Specific third-party IPR disclosures</h2>
{% include "ipr/ipr_table.html" with iprs=thirdpty_disclosures %}
</div>
<div class="col-md-2 d-print-none" id="affix">
<ul class="nav nav-pills nav-stacked small" data-bs-spy="affix">
<li><a href="#generic">General IPR disclosures</a></li>
<li><a href="#specific">Specific IPR disclosures</a></li>
<li><a href="#notify">Specific third-party IPR disclosures</a></li>
</ul>
</div>
</div>
<h1>Intellectual property rights disclosures</h1>
<div class="my-3 alert alert-info">{% include "ipr/ipr_intro.html" %}</div>
<p class="buttonlist">
<a class="btn btn-primary" href="{% url "ietf.ipr.views.about" %}">Submit an IPR disclosure</a>
<a class="btn btn-primary" href="{% url "ietf.ipr.views.search" %}">Search IPR disclosures</a>
{% if user|has_role:"Secretariat" %}
<a class="btn btn-primary"
href="{% url 'ietf.ipr.views.admin' state='pending' %}">Administrative view</a>
{% endif %}
</p>
<h2 class="mt-3" id="generic">General IPR disclosures</h2>
{% include "ipr/ipr_table.html" with iprs=generic_disclosures %}
<h2 class="mt-3" id="specific">Specific IPR disclosures</h2>
{% include "ipr/ipr_table.html" with iprs=specific_disclosures %}
<h2 class="mt-3" id="notify">Specific third-party IPR disclosures</h2>
{% include "ipr/ipr_table.html" with iprs=thirdpty_disclosures %}
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}

View file

@ -1,24 +1,19 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load django_bootstrap5 %}
{% block title %}Send Notification{{ formset|pluralize }}{% endblock %}
{% block content %}
{% origin %}
<h1>Send Notification{{ formset|pluralize }}<br><small class="text-muted">{{ ipr }}</small></h1>
<form class="send-notification" method="post">
<h1>
Send Notification{{ formset|pluralize }}
<br>
<small class="text-muted">{{ ipr }}</small>
</h1>
<form class="my-3 send-notification" method="post">
{% csrf_token %}
{% bootstrap_formset formset %}
<button type="submit" class="btn btn-primary">Send Notification{{ formset|pluralize }}</button>
</form>
{% endblock %}
{% endblock %}

View file

@ -1,16 +1,12 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% block title %}{{ ipr.title }}{% endblock %}
{% block content %}
{% origin %}
<h1>{{ ipr.title }}</h1>
<p class="alert alert-info">
This IPR disclosure was removed at the submitter's request.
</p>
{% endblock %}
{% endblock %}

View file

@ -1,14 +1,13 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load static %}
{% block title %}IPR search{% endblock %}
{% block content %}
{% origin %}
{% include "ipr/search_form.html" %}
{% endblock %}
{% block js %}
<script src="{% static 'ietf/js/ipr-search.js' %}"></script>
{% endblock %}
{% endblock %}

View file

@ -1,17 +1,23 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% block title %}IPR disclosures - select Internet-Draft{% endblock %}
{% block content %}
{% origin %}
<h1>IPR disclosures - select Internet-Draft</h1>
<p>Please select one of following I-Ds:</p>
<h1>
IPR disclosures
<br>
<small class="text-muted">Select Internet-Draft</small>
</h1>
<p>
Please select one of following I-Ds:
</p>
<ul>
{% for docalias in docs %}
<li><a href="?submit=draft&id={{ docalias.name }}">{{ docalias.name }}</a></li>
<li>
<a href="?submit=draft&id={{ docalias.name }}">{{ docalias.name }}</a>
</li>
{% endfor %}
</ul>
{% endblock %}
{% endblock %}

View file

@ -1,3 +1,4 @@
{# bs5ok #}
{% extends "ipr/search_result.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}{% origin %}
@ -8,67 +9,67 @@
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
{% block search_header %}Document IPR search results <small>for {{doc}}</small>{% endblock %}
{% block search_header %}<div class="mt-5">Document IPR search results<br><small class="text-muted">{{doc}}</small></div>{% endblock %}
{% block search_result %}
<p class="alert alert-info">Total number of IPR disclosures found: <b>{{ iprs|length }}</b>.</p>
<p class="alert alert-info my-3">Total number of IPR disclosures found: <b>{{ iprs|length }}</b>.</p>
{% if iprs %}
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<th>Date</th>
<th>ID</th>
<th>Statement</th>
<th data-sort="date">Date</th>
<th data-sort="id">ID</th>
<th data-sort="statement">Statement</th>
</tr>
</thead>
<tbody>
{% for ipr in iprs %}
<tr>
<td class="text-nowrap">{{ ipr.time|date:"Y-m-d" }}</td>
<td>{{ ipr.time|date:"Y-m-d" }}</td>
<td>{{ ipr.id }}</td>
<td><a href="{% url "ietf.ipr.views.show" id=ipr.id %}">{{ ipr.title }}</a>{% if ipr.state_id == 'removed' %} (Removed) {% endif %}
{% if ipr.updates %} <br/>(Updates ID#: {% for upd in ipr.updates %}{{upd.target_id}}{% if not forloop.last %}, {% endif %}{% endfor %}){% endif %}
<td><a href="{% url "ietf.ipr.views.show" id=ipr.id %}">{{ ipr.title }}</a>{% if ipr.state_id == 'removed' %}<span class="badge bg-info">Removed</span>{% endif %}
{% if ipr.updates %} <br>(Updates ID#: {% for upd in ipr.updates %}{{upd.target_id}}{% if not forloop.last %}, {% endif %}{% endfor %}){% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if related_iprs %}
<p>
<i>IPR declarations exist for related documents, <a href="#related">see below</a>.
These cannot be assumed to apply to the current document without closer inspection.</i>
<p class="alert alert-warning my-3">
IPR declarations exist for related documents, <a href="#related">see below</a>.
These cannot be assumed to apply to the current document without closer inspection.
</p>
{% endif %}
{% endif %}
<p class="alert alert-info">Total number of documents searched: <b>{{ docs|length}}</b>.</p>
<p class="alert alert-info my-3">Total number of documents searched: <b>{{ docs|length}}</b>.</p>
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<th>Date</th>
<th>ID</th>
<th>Statement</th>
<th data-sort="date">Date</th>
<th data-sort="id">ID</th>
<th data-sort="statement">Statement</th>
</tr>
</thead>
{% for doc in docs %}
<tbody>
<thead>
<tr>
<th class="warning" colspan="3">
Results for {{ doc.name|rfcspace|lstrip:"0"|rfcnospace }} ("{{ doc.document.title }}"){% if not forloop.first %}{% if doc.related %}, that was {{ doc.relation|lower }} {{ doc.related.source|rfcspace|lstrip:"0"|rfcnospace }} ("{{ doc.related.source.title }}"){% endif %}{% endif %}:
<th class="table-info" colspan="3">
Results for {{ doc.name|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ doc.document.title }}"){% if not forloop.first %}{% if doc.related %}, which was {{ doc.relation|lower }} {{ doc.related.source|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ doc.related.source.title }}"){% endif %}{% endif %}
</th>
</tr>
</tbody>
</thead>
<tbody>
{% with doc.iprdocrel_set.all as doc_iprs %}
{% if doc_iprs %}
{% for ipr in doc_iprs %}
{% if ipr.disclosure.state_id in states %}
<tr>
<td class="text-nowrap">{{ ipr.disclosure.time|date:"Y-m-d" }}</td>
<td>{{ ipr.disclosure.time|date:"Y-m-d" }}</td>
<td>{{ ipr.disclosure.id }}</td>
<td><a href="{% url "ietf.ipr.views.show" id=ipr.disclosure.id %}">{{ ipr.disclosure.title }}</a>{% if ipr.disclosure.state_id == 'removed' %} (Removed) {% endif %}
{% if ipr.disclosure.updates %} <br/>(Updates ID#: {% for upd in ipr.disclosure.updates %}{{upd.target_id}}{% if not forloop.last %}, {% endif %}{% endfor %}){% endif %}
@ -81,7 +82,7 @@
<td></td>
<td></td>
<td>
No IPR disclosures have been submitted directly on <i>{{ doc.name|rfcspace|lstrip:"0" }}</i>{% if iprs %},
No IPR disclosures have been submitted directly on {{ doc.name|rfcspace|lstrip:"0"|urlize_ietf_docs }}{% if iprs %},
but there are disclosures on {% if docs|length == 2 %}a related document{% else %}related documents{% endif %}, listed on this page{% endif %}.
</td>
</tr>
@ -92,7 +93,7 @@
</table>
{% if related_iprs %}
<p class="alert alert-info" id="related">Total number of possibly related IPR disclosures found: <b>{{ related_iprs|length }}</b>.</p>
<p class="alert alert-info my-3" id="related">Total number of possibly related IPR disclosures found: <b>{{ related_iprs|length }}</b>.</p>
<table class="table table-sm table-striped tablesorter">
<thead>
@ -106,7 +107,7 @@
<tbody>
{% for ipr in related_iprs %}
<tr>
<td class="text-nowrap">{{ ipr.time|date:"Y-m-d" }}</td>
<td>{{ ipr.time|date:"Y-m-d" }}</td>
<td>{{ ipr.id }}</td>
<td><a href="{% url "ietf.ipr.views.show" id=ipr.id %}">{{ ipr.title }}</a>
{% if ipr.updates %} <br/>(Updates ID#: {% for upd in ipr.updates %}{{upd.target_id}}{% if not forloop.last %}, {% endif %}{% endfor %}){% endif %}
@ -122,4 +123,4 @@
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}
{% endblock %}

View file

@ -1,56 +1,63 @@
{# bs5ok #}
{% extends "ipr/search_result.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}{% origin %}
{% load origin %}
{% origin %}
{% load ietf_filters static %}
{% block pagehead %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
{% block search_header %}Search result on {{ q }}{% endblock %}
{% block search_header %}Search result on "{{ q }}"{% endblock %}
{% block search_result %}
{% if not docs %}
<p class="alert alert-info">No IPR disclosures related to a document with the words <i>{{ q }}</i> in the title have been submitted.</p>
<p class="alert alert-info my-3">
No IPR disclosures related to a document with the words "{{ q }}"" in the title have been submitted.
</p>
{% else %}
<p class="alert alert-info">Total number of IPR disclosures found: <b>{{ iprs|length }}</b>.</p>
<p class="alert alert-info my-3">
Total number of IPR disclosures found: <b>{{ iprs|length }}</b>.
</p>
<table class="table table-sm table-striped tablesorter">
<thead><th>Date</th><th>ID</th><th>Statement</th></thead>
<thead>
<th data-sort="date">Date</th>
<th data-sort="id">ID</th>
<th data-sort="statement">Statement</th>
</thead>
{% for alias in docs %}
<tbody>
<thead>
<tr>
<th class="warning" colspan="3">
IPR that is related to <i>{{ alias.name|rfcspace|lstrip:"0"|rfcnospace }} ("{{ alias.document.title }}"){% if alias.related %}</i> that was <i>{{ alias.relation|lower }} {{ alias.related.source.name|rfcspace|lstrip:"0"|rfcnospace }} ("{{ alias.related.source.title }}"){% endif %}
</i>
<th class="table-info" colspan="3">
IPR that is related to {{ alias.name|lstrip:"0"|rfcnospace|urlize_ietf_docs }} ("{{ alias.document.title }}")
{% if alias.related %}
that was {{ alias.relation|lower }} {{ alias.related.source.name|lstrip:"0"|rfcnospace|urlize_ietf_docs }} ("{{ alias.related.source.title }}")
{% endif %}
</th>
</tr>
</tbody>
</thead>
<tbody>
{% if alias.document.ipr %}
{% for ipr in alias.document.ipr %}
<tr>
<td class="text-nowrap">{{ ipr.disclosure.time|date:"Y-m-d" }}</td>
<td>{{ ipr.disclosure.time|date:"Y-m-d" }}</td>
<td>{{ ipr.disclosure.id }}</td>
<td>
{% for item in ipr.disclosure.updated_by.all %}
{% if item.source.state_id == "posted" %}
IPR disclosure #{{ item.source.id }}: <a href="{% url "ietf.ipr.views.show" item.source.id %}">{{ item.source.title }}</a><br>Updates:
IPR disclosure #{{ item.source.id }}:
<a href="{% url "ietf.ipr.views.show" item.source.id %}">{{ item.source.title }}</a>
<br>
Updates:
{% endif %}
{% endfor %}
<a href="{% url "ietf.ipr.views.show" ipr.disclosure.id %}">{{ ipr.disclosure.title }}</a>
</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td></td>
<td></td>
<td>No IPR disclosures related to <i>{{ alias.name|rfcspace|lstrip:"0" }}</i> have been submitted.</td>
<td>No IPR disclosures related to {{ alias.name|lstrip:"0"|urlize_ietf_docs }} have been submitted.</td>
</tr>
{% endif %}
</tbody>
@ -58,7 +65,6 @@
</table>
{% endif %}
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}
{% endblock %}

View file

@ -1,17 +1,17 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% block title %}IPR search result error{% endblock %}
{% block content %}
{% origin %}
<h1>IPR search result error</h1>
<div class="alert alert-danger">
<p>Your request was not processed due to the following error(s):</p>
<p><i>{{ error }}</i></p>
<p>
Your request was not processed due to the following error(s):
</p>
<p>
<i>{{ error }}</i>
</p>
</div>
{% endblock %}
{% endblock %}

View file

@ -1,116 +1,94 @@
{# bs5ok #}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load ietf_filters widget_tweaks django_bootstrap5 %}
{% load origin %}{% origin %}
{% load origin %}
{% origin %}
<h1>IPR Search</h1>
<form class="ipr-search clearfix">
<form class="ipr-search">
{% if user|has_role:"Secretariat" %}
<div class="col-md-12">
<h2>State Filter</h2>
<div class="mb-3">
{% bootstrap_label form.state.label label_for=form.state.id_for_label label_class="col-form-label" %}
{% render_field form.state %}
</div>
</div>
<h2 class="mt-4">State Filter</h2>
{% bootstrap_field form.state %}
{% endif %}
<div class="col-md-6">
<h2>Document search</h2>
<div class="mb-3">
{% bootstrap_label form.draft.label label_for=form.draft.id_for_label label_class="col-form-label" %}
<div class="input-group">
{% render_field form.draft class="form-control" placeholder="draft-..." %}
<span class="input-group-btn">
<button class="btn btn-primary" type="submit" name="submit" value="draft"><span class="bi bi-search"></span> Search</button>
</span>
</div>
</div>
<div class="mb-3">
{% bootstrap_label form.rfc.label label_for=form.rfc.id_for_label label_class="col-form-label" %}
<div class="input-group">
{% render_field form.rfc class="form-control" placeholder="123..." %}
<span class="input-group-btn">
<button class="btn btn-primary" type="submit" name="submit" value="rfc"><span class="bi bi-search"></span> Search</button>
</span>
</div>
</div>
<div class="mb-3">
{{ form.doctitle.label_tag }}
<div class="input-group">
{% render_field form.doctitle class="form-control" placeholder="protocol..." %}
<span class="input-group-btn">
<button class="btn btn-primary" type="submit" name="submit" value="doctitle"><span class="bi bi-search"></span> Search</button>
</span>
</div>
</div>
<div class="mb-3">
{{ form.group.label_tag }}
<div class="row">
<div class="col-sm-8">
{% render_field form.group class="form-control" %}
</div>
<div class="col-sm-4">
<button class="btn btn-primary btn-block" type="submit" name="submit" value="group"><span class="bi bi-search"></span> Search</button>
</div>
</div>
<h2 class="mt-4">Document search</h2>
<div class="mb-3">
{% bootstrap_label form.draft.label label_for=form.draft.id_for_label label_class="form-label" %}
<div class="input-group">
{% render_field form.draft class="form-control" placeholder="draft-..." %}
<button class="btn btn-primary" type="submit" name="submit" value="draft">
<span class="bi bi-search"></span> Search
</button>
</div>
</div>
<div class="col-md-6">
<h2>IPR search</h2>
<div class="mb-3">
{{ form.holder.label_tag }}
<div class="input-group">
{% render_field form.holder class="form-control" placeholder="John Doe..." %}
<span class="input-group-btn">
<button class="btn btn-primary" type="submit" name="submit" value="holder"><span class="bi bi-search"></span> Search</button>
</span>
</div>
</div>
<div class="mb-3">
{{ form.iprtitle.label_tag }}
<div class="input-group">
{% render_field form.iprtitle class="form-control" placeholder="protocol..." %}
<span class="input-group-btn">
<button class="btn btn-primary" type="submit" name="submit" value="iprtitle"><span class="bi bi-search"></span> Search</button>
</span>
</div>
</div>
<div class="mb-3">
{{ form.patent.label_tag }}
<div class="input-group">
{% render_field form.patent class="form-control" %}
<span class="input-group-btn">
<button class="btn btn-primary" type="submit" name="submit" value="patent"><span class="bi bi-search"></span> Search</button>
</span>
</div>
<div class="form-text">
This search string must contain at least three characters, including
at least one digit, and include punctuation marks. For best results,
please enter the entire string, or as much of it as possible.
</div>
<div class="mb-3">
{% bootstrap_label form.rfc.label label_for=form.rfc.id_for_label label_class="form-label" %}
<div class="input-group">
{% render_field form.rfc class="form-control" placeholder="123..." %}
<button class="btn btn-primary" type="submit" name="submit" value="rfc">
<span class="bi bi-search"></span> Search
</button>
</div>
</div>
<div class="p col-lg-12 col-md-12 col-sm-12 col-xs-12">
The material posted as IPR disclosures should be viewed as originating
from the source of that information, and any issue or question related
to the material should be directed to the source rather than the
IETF. There is no implied endorsement or agreement by the IETF, the
IESG or any other IETF entities with any of the material.
<div class="mb-3">
{% bootstrap_label form.doctitle.label|cut:":" label_for=form.doctitle.id_for_label label_class="form-label" %}
<div class="input-group">
{% render_field form.doctitle class="form-control" placeholder="protocol..." %}
<button class="btn btn-primary" type="submit" name="submit" value="doctitle">
<span class="bi bi-search"></span> Search
</button>
</div>
</div>
<div class="mb-3">
{% bootstrap_label form.group.label|cut:":" label_for=form.group.id_for_label label_class="form-label" %}
<div class="input-group">
{% render_field form.group class="form-select" %}
<button class="btn btn-primary btn-block"
type="submit"
name="submit"
value="group">
<span class="bi bi-search"></span> Search
</button>
</div>
</div>
<h2 class="mt-4">IPR search</h2>
<div class="mb-3">
{% bootstrap_label form.holder.label|cut:":" label_for=form.holder.id_for_label label_class="form-label" %}
<div class="input-group">
{% render_field form.holder class="form-control" placeholder="John Doe..." %}
<button class="btn btn-primary" type="submit" name="submit" value="holder">
<span class="bi bi-search"></span> Search
</button>
</div>
</div>
<div class="mb-3">
{% bootstrap_label form.iprtitle.label|cut:":" label_for=form.iprtitle.id_for_label label_class="form-label" %}
<div class="input-group">
{% render_field form.iprtitle class="form-control" placeholder="protocol..." %}
<button class="btn btn-primary" type="submit" name="submit" value="iprtitle">
<span class="bi bi-search"></span> Search
</button>
</div>
</div>
<div class="mb-3">
{% bootstrap_label form.patent.label|cut:":" label_for=form.patent.id_for_label label_class="form-label" %}
<div class="input-group">
{% render_field form.patent class="form-control" %}
<button class="btn btn-primary" type="submit" name="submit" value="patent">
<span class="bi bi-search"></span> Search
</button>
</div>
<div class="form-text">
This search string must contain at least three characters, including
at least one digit, and include punctuation marks. For best results,
please enter the entire string, or as much of it as possible.
</div>
</div>
<a class="btn btn-secondary float-end" href="{% url "ietf.ipr.views.showlist" %}">Back</a>
</form>
<p class="alert alert-info">
The material posted as IPR disclosures should be viewed as originating
from the source of that information, and any issue or question related
to the material should be directed to the source rather than the
IETF. There is no implied endorsement or agreement by the IETF, the
IESG or any other IETF entities with any of the material.
</p>
<a class="btn btn-secondary float-end"
href="{% url "ietf.ipr.views.showlist" %}">Back</a>

View file

@ -1,7 +1,8 @@
{# bs5ok #}
{% extends "ipr/search_result.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}{% origin %}
{% load origin %}
{% origin %}
{% block search_header %}
{% if not iprs %}
Search result on {{ q }}
@ -9,5 +10,4 @@
Patent owner/applicant search result
{% endif %}
{% endblock %}
{% block intro_prefix %}IPR that was submitted by <i>{{ q }}</i> and{% endblock %}
{% block intro_prefix %}IPR that was submitted by "{{ q }}" and{% endblock %}

View file

@ -1,7 +1,8 @@
{# bs5ok #}
{% extends "ipr/search_result.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}{% origin %}
{% load origin %}
{% origin %}
{% block search_header %}
{% if not iprs %}
Search result on {{ q }}
@ -9,9 +10,6 @@
IPR disclosure title search result
{% endif %}
{% endblock %}
{% block intro_prefix %}IPR that{% endblock %}
{% block intro_suffix %}and has the string <i>"{{ q }}"</i> within the IPR disclosure title:{% endblock %}
{% block search_failed %}No IPR disclosures with the word(s) "<i>{{ q }}</i>" in the title have been submitted.{% endblock %}
{% block intro_suffix %}and has the string "{{ q }}" within the IPR disclosure title:{% endblock %}
{% block search_failed %}No IPR disclosures with the word(s) "{{ q }}" in the title have been submitted.{% endblock %}

View file

@ -1,7 +1,8 @@
{# bs5ok #}
{% extends "ipr/search_result.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}{% origin %}
{% load origin %}
{% origin %}
{% block search_header %}
{% if not iprs %}
Search result on {{ q }}
@ -9,7 +10,9 @@
Patent information search result
{% endif %}
{% endblock %}
{% block search_failed %}No IPR disclosures with the word(s) "<i>{{ q }}</i>" in the Patent Information have been submitted.{% endblock %}
{% block intro_prefix %}IPR that contains the string <i>{{ q }}</i> in the "Disclosure of Patent Information" section of the form, or in the body of the text (for disclosures submitted by e-mail), and{% endblock %}
{% block search_failed %}
No IPR disclosures with the word(s) "{{ q }}" in the Patent Information have been submitted.
{% endblock %}
{% block intro_prefix %}
IPR that contains the string "{{ q }}" in the "Disclosure of Patent Information" section of the form, or in the body of the text (for disclosures submitted by e-mail), and
{% endblock %}

View file

@ -1,43 +1,50 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load static %}
{% load ietf_filters %}
{% load static %}
{% block pagehead %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
{% block title %}IPR disclosures{% endblock %}
{% block content %}
{% origin %}
{% include "ipr/search_form.html" %}
<h2>{% block search_header %}Patent owner/applicant search result{% endblock %}</h2>
<h2>
{% block search_header %}Patent owner/applicant search result{% endblock %}
</h2>
{% block search_result %}
{% if not iprs %}
<p class="alert alert-info">
{% block search_failed %}No IPR disclosures have been submitted by <i>{{ q }}</i>.{% endblock %}
{% block search_failed %}No IPR disclosures have been submitted by "{{ q }}".{% endblock %}
</p>
{% else %}
<p class="alert alert-info">
Total number of IPR disclosures found: <b>{{ iprs|length }}</b>.
</p>
<table class="table table-sm table-striped tablesorter">
<thead><th>Date</th><th>ID</th><th>Statement</th></thead>
<thead>
<th data-sort="date">Date</th>
<th data-sort="id">ID</th>
<th data-sort="statement">Statement</th>
</thead>
{% block iprlist %}
{% for ipr in iprs %}
<tbody>
{% if user|has_role:"Secretariat" %}{% ifchanged %}<tr><td colspan="3"><h3>{{ ipr.state.name }}</h3></td></tr>{% endifchanged %}{% endif %}
<tr>
<th class="warning" colspan="3">
{% block intro_prefix %}IPR that was submitted by <i>{{ q }}</i> and{% endblock %}
{% if user|has_role:"Secretariat" %}
{% ifchanged %}
<thead>
<tr class="table-warning">
<th colspan="3">{{ ipr.state.name }}</th>
</tr>
</thead>
{% endifchanged %}
{% endif %}
<thead>
<tr class="table-info">
<th colspan="3">
{% block intro_prefix %}IPR that was submitted by "{{ q }}" and{% endblock %}
{% block related %}
{% with ipr.iprdocrel_set.all as iprdocrels %}
{% if not iprdocrels %}
@ -46,7 +53,8 @@
is related to
{% for item in iprdocrels %}
{% if forloop.last and forloop.counter > 1 %}and{% endif %}
<i>{{ item.formatted_name|rfcspace }} ("{{ item.document.document.title }}")</i>{% if not forloop.last and forloop.counter > 1 %},{% endif %}
{{ item.formatted_name|urlize_ietf_docs }} ("{{ item.document.document.title }}")
{% if not forloop.last and forloop.counter > 1 %},{% endif %}
{% endfor %}
{% endif %}
{% endwith %}
@ -54,22 +62,26 @@
{% block intro_suffix %}{% endblock %}
</th>
</tr>
</tbody>
</thead>
<tbody>
<tr>
<td class="text-nowrap">{{ ipr.time|date:"Y-m-d" }}</td>
<td>{{ ipr.time|date:"Y-m-d" }}</td>
<td>{{ ipr.id }}</td>
<td><a href="{% url "ietf.ipr.views.show" id=ipr.id %}">{{ ipr.title }}</a></td>
<td>
<a href="{% url "ietf.ipr.views.show" id=ipr.id %}">{{ ipr.title }}</a>
</td>
</tr>
{% for item in ipr.updates.all %}
{% if item != ipr %}
<tr>
<td class="text-nowrap">{{ item.target.time|date:"Y-m-d" }}</td>
<td>{{ item.target.time|date:"Y-m-d" }}</td>
<td>{{ item.target.id }}</td>
<td>
IPR disclosure #{{ ipr.id }}: <a href="{% url "ietf.ipr.views.show" id=ipr.id %}">{{ ipr.title }}</a>
<br>Updates: <a href="{% url "ietf.ipr.views.show" id=item.target.id %}">{{ item.target.title }}</a>
IPR disclosure #{{ ipr.id }}:
<a href="{% url "ietf.ipr.views.show" id=ipr.id %}">{{ ipr.title }}</a>
<br>
Updates:
<a href="{% url "ietf.ipr.views.show" id=item.target.id %}">{{ item.target.title }}</a>
</td>
</tr>
{% endif %}
@ -80,13 +92,12 @@
</table>
{% endif %}
{% endblock %}
<p class="buttonlist">
<a class="btn btn-primary" href="{% url "ietf.ipr.views.showlist" %}">Back to IPR disclosure page</a>
<a class="btn btn-secondary float-end"
href="{% url "ietf.ipr.views.showlist" %}">Back</a>
</p>
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
<script src="{% static 'ietf/js/ipr-search.js' %}"></script>
{% endblock %}
{% endblock %}

View file

@ -1,68 +1,72 @@
{# bs5ok #}
{% extends "ipr/search_result.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}{% origin %}
{% load origin %}
{% origin %}
{% load ietf_filters static %}
{% block pagehead %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
{% block search_header %}Working Group search results{% endblock %}
{% block search_result %}
<p class="alert alert-info">Total number of {{ q }} WG IPR disclosures found: <b>{{ iprs|length }}</b>. </p>
<p class="alert alert-info my-3">
Total number of {{ q }} WG IPR disclosures found: <b>{{ iprs|length }}</b>.
</p>
{% if docs %}
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<th>Date</th>
<th>ID</th>
<th>Statement</th>
<th data-sort="date">Date</th>
<th data-sort="id">ID</th>
<th data-sort="statement">Statement</th>
</tr>
</thead>
{% for alias in docs %}
<tbody>
<tr>
<th class="warning" colspan="3">
IPR related to {{ alias.name|rfcspace|lstrip:"0"|rfcnospace }} ("{{ alias.document.title }}"){% if alias.related %} that was {{ alias.relation|lower }} {{ alias.related.source|rfcspace|lstrip:"0"|rfcnospace }} ("{{ alias.related.source.title|escape }}"){% endif %}{% if alias.product_of_this_wg %}, a product of the {{ q }} WG{% endif %}:
<thead>
<tr class="table-info">
<th colspan="3">
IPR related to {{ alias.name|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ alias.document.title }}")
{% if alias.related %}
that was {{ alias.relation|lower }} {{ alias.related.source|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ alias.related.source.title|escape }}")
{% endif %}
{% if alias.product_of_this_wg %}, a product of the {{ q }} WG{% endif %}
:
</th>
</tr>
</tbody>
</thead>
<tbody>
{% if alias.document.ipr %}
{% for ipr in alias.document.ipr %}
<tr>
<td class="text-nowrap">{{ ipr.disclosure.time|date:"Y-m-d" }}</td>
<td>{{ ipr.disclosure.time|date:"Y-m-d" }}</td>
<td>{{ ipr.disclosure.id }}</td>
<td>
{% for item in ipr.disclosure.updates.all %}
{% if item.target.state_id == "posted" %}
IPR disclosure #{{ item.target.id }}: <a href="{% url "ietf.ipr.views.show" item.target.id %}">{{ item.target.title }}</a><br>Updated by:
IPR disclosure #{{ item.target.id }}:
<a href="{% url "ietf.ipr.views.show" item.target.id %}">{{ item.target.title }}</a>
<br>
Updated by:
{% endif %}
{% endfor %}
<a href="{% url "ietf.ipr.views.show" ipr.disclosure.id %}">{{ ipr.disclosure.title }}</a>
</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td></td>
<td></td>
<td>No IPR disclosures related to <i>{{ alias.name|rfcspace|lstrip:"0" }}</i> have been submitted.</td>
<td>
No IPR disclosures related to <i>{{ alias.name|rfcspace|lstrip:"0" }}</i> have been submitted.
</td>
</tr>
{% endif %}
</tbody>
{% endfor %}
</table>
{% endif %}
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}
{% endblock %}

View file

@ -1,25 +1,21 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load django_bootstrap5 %}
{% block title %}Change State of {{ ipr.title }}{% endblock %}
{% block content %}
{% origin %}
<h1>Change State<br><small class="text-muted">{{ ipr }}</small></h1>
<form class="add-comment" method="post">
<h1>
Change State
<br>
<small class="text-muted">{{ ipr }}</small>
</h1>
<form class="add-comment my-3" method="post">
{% csrf_token %}
{% bootstrap_form form %}
<button type="submit" class="btn btn-primary">Save</button>
<a class="btn btn-secondary float-end" href="{% url "ietf.ipr.views.show" id=ipr.id %}">Back</a>
<a class="btn btn-secondary float-end"
href="{% url "ietf.ipr.views.show" id=ipr.id %}">Back</a>
</form>
{% endblock %}
{% endblock %}

View file

@ -1,18 +1,18 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% block title %}IPR submission successful{% endblock %}
{% block content %}
{% origin %}
<h1>IPR submission successful</h1>
<p>Your IPR disclosure has been submitted, and the IETF Secretariat has been notified.</p>
<p class="alert alert-info">Please note that it may take one business day for your IPR disclosure to be posted
on the IETF Page of Intellectual Property Rights Notices.</p>
<a class="btn btn-primary" href="{% url "ietf.ipr.views.showlist" %}">Back</a>
{% endblock %}
<p>
Your IPR disclosure has been submitted, and the IETF Secretariat has been notified.
</p>
<p class="alert alert-info my-3">
Please note that it may take one business day for your IPR disclosure to be posted
on the IETF Page of Intellectual Property Rights Notices.
</p>
<a class="btn btn-secondary float-end"
href="{% url "ietf.ipr.views.showlist" %}">Back</a>
{% endblock %}

View file

@ -2,7 +2,7 @@
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load ietf_filters person_filters %}
{% load ietf_filters person_filters textfilters %}
{% block title %}
Liaison statement:
{% include 'liaisons/liaison_title.html' %}
@ -200,7 +200,7 @@
Body
</th>
<td>
<pre>{{ liaison.body|maybewordwrap:"80" }}</pre>
<pre>{{ liaison.body|maybewordwrap:"80"|linkify|urlize_ietf_docs }}</pre>
</td>
</tr>
{% endif %}

View file

@ -1,44 +1,28 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load django_bootstrap5 widget_tweaks %}
{% load static %}
{% block title %}Edit liaison attachment{% endblock %}
{% block pagehead %}
<link rel="stylesheet" href="{% static 'ietf/css/liaisons.css' %}">
{% endblock %}
{% block morecss %}
.widget { height: auto; min-height: 34px; }
{% endblock %}
{% block content %}
{% origin %}
<h1>Edit liaison attachment</h1>
{% if form.errors %}
<div class="alert alert-danger">
<p>There were errors in the submitted form -- see below. Please correct these and resubmit.</p>
<div class="alert alert-danger my-3">
<p>
There were errors in the submitted form -- see below. Please correct these and resubmit.
</p>
</div>
{% endif %}
{% bootstrap_form_errors form %}
<form method="post">
<form method="post" class="my-3">
{% csrf_token %}
{% bootstrap_form form %}
<a class="btn btn-danger float-end" href="{% url "ietf.liaisons.views.liaison_edit" object_id=liaison.pk %}">Cancel</a>
<a class="btn btn-secondary float-end"
href="{% url "ietf.liaisons.views.liaison_edit" object_id=liaison.pk %}">
Back
</a>
<button name="save" type="submit" class="btn btn-primary">Save</button>
</form>
{% endblock %}
{% endblock %}

View file

@ -1,12 +1,19 @@
{# Copyright The IETF Trust 2015, All Rights Reserved #}{% load origin %}{% origin %}
{# bs5ok #}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% origin %}
{{ obj.body|truncatewords:"30"|wordwrap:"80"|linebreaksbr }}
<h3>Attached Document{{ attachments|pluralize }}</h3>
{% if attachments %}
<ul>
{% for doc in attachments %}
<li><a href="{{ doc.get_href }}">{{ doc.title }}</a><br>
<li>
<a href="{{ doc.get_href }}">{{ doc.title }}</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>NONE</p>
{% endif %}
<p>
(None)
</p>
{% endif %}

View file

@ -1,36 +1,50 @@
{# bs5ok #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load origin static %}
{% block pagehead %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
{% block title %}Web-based Working Group email archives{% endblock %}
{% block content %}
{% origin %}
<h1>Web-based Working Group email archives</h1>
<p>These links to the Web-based working group e-mail archives are
<p>
These links to the Web-based working group e-mail archives are
extracted from the working group charters. Please consult the
charters for more information about the mailing lists and archives
of specific working groups. Charters for active working groups are
available on
the <a href="{% url 'ietf.group.views.active_groups' group_type='wg' %}">Active IETF Working Groups</a> Web page.
the
<a href="{% url 'ietf.group.views.active_groups' group_type='wg' %}">Active IETF Working Groups</a>
Web page.
Charters for concluded working groups are available on
the <a href="{% url 'ietf.group.views.concluded_groups' %}">Concluded
Working Groups</a> Web page.</p>
<table class="table table-sm table-striped">
the
<a href="{% url 'ietf.group.views.concluded_groups' %}">
Concluded
Working Groups
</a>
Web page.
</p>
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<th>Acronym</th><th>Name</th>
<th data-sort="acronym">Acronym</th>
<th data-sort="name">Name</th>
</tr>
</thead>
<tbody>
{% for group in groups %}
<tr>
<td><a href="{{ group.list_archive }}">{{ group.acronym }}</a></td>
<td>
<a href="{{ group.list_archive }}">{{ group.acronym }}</a>
</td>
<td>{{ group.name }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}

View file

@ -1,29 +1,37 @@
{% extends "base.html" %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load origin static %}
{% load cache %}
{% block pagehead %}
<link rel="stylesheet" href="{% static "ietf/css/list.css" %}">
{% endblock %}
{% block title %}Non-Working Group email lists{% endblock %}
{% block content %}
{% origin %}
<h1>Non-Working Group email lists</h1>
{% cache 900 nonwglisttable %}
<table class="table table-sm table-striped">
<thead>
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<th data-sort="name">Name</th>
<th data-sort="description">Description</th>
<th data-sort="list">List Info</th>
</tr>
</thead>
<tbody>
{% for list in lists %}
<tr>
<th>Name</th><th>Description</th><th>List Info</th>
<td>{{ list.name.lower }}</td>
<td>{{ list.description }}</td>
<td>
<a href="{{ list.info_url }}">{{ list.info_url.lower }}</a>
</td>
</tr>
</thead>
<tbody>
{% for list in lists %}
<tr>
<td>{{ list.name.lower }}</td>
<td>{{ list.description }}</td>
<td><a href="{{ list.info_url }}">{{ list.info_url.lower }}</a></td>
</tr>
{% endfor %}
</tbody>
</table>
{% endcache %}
{% endfor %}
</tbody>
</table>
{% endcache %}
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}

4848
package-lock.json generated

File diff suppressed because it is too large Load diff