From ed30521e14f4673814271b6f3c16528373cba0ae Mon Sep 17 00:00:00 2001
From: Lars Eggert
'.join(['%s' % (reverse('admin:liaisons_liaisonstatement_change', None, (i.target.id, )), str(i.target)) for i in obj.source_of_set.select_related('target').all()])
+ return '
'.join(['%s' % (reverse('admin:liaisons_liaisonstatement_change', None, (i.target.id, )), str(i.target)) for i in obj.source_of_set.select_related('target').all()])
related_to.allow_tags = True # type: ignore # https://github.com/python/mypy/issues/2087
class LiaisonStatementAttachmentAdmin(admin.ModelAdmin):
@@ -50,4 +50,4 @@ class LiaisonStatementEventAdmin(admin.ModelAdmin):
raw_id_fields = ["statement", "by"]
admin.site.register(LiaisonStatement, LiaisonStatementAdmin)
-admin.site.register(LiaisonStatementEvent, LiaisonStatementEventAdmin)
+admin.site.register(LiaisonStatementEvent, LiaisonStatementEventAdmin)
\ No newline at end of file
diff --git a/ietf/liaisons/forms.py b/ietf/liaisons/forms.py
index f72becd78..b4aaa386c 100644
--- a/ietf/liaisons/forms.py
+++ b/ietf/liaisons/forms.py
@@ -211,13 +211,13 @@ class CustomModelMultipleChoiceField(forms.ModelMultipleChoiceField):
class LiaisonModelForm(BetterModelForm):
'''Specify fields which require a custom widget or that are not part of the model.
- NOTE: from_groups and to_groups are marked as not required because select2 has
- a problem with validating
'''
from_groups = forms.ModelMultipleChoiceField(queryset=Group.objects.all(),label='Groups',required=False)
+ from_groups.widget.attrs["class"] = "select2-field"
from_contact = forms.EmailField() # type: Union[forms.EmailField, SearchableEmailField]
to_contacts = forms.CharField(label="Contacts", widget=forms.Textarea(attrs={'rows':'3', }), strip=False)
to_groups = forms.ModelMultipleChoiceField(queryset=Group.objects,label='Groups',required=False)
+ to_groups.widget.attrs["class"] = "select2-field"
deadline = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={"autoclose": "1" }, label='Deadline', required=True)
related_to = SearchableLiaisonStatementsField(label='Related Liaison Statement', required=False)
submitted_date = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={"autoclose": "1" }, label='Submission date', required=True, initial=datetime.date.today())
@@ -247,8 +247,8 @@ class LiaisonModelForm(BetterModelForm):
self.person = get_person_for_user(user)
self.is_new = not self.instance.pk
- self.fields["from_groups"].widget.attrs["placeholder"] = "Type in name to search for group"
- self.fields["to_groups"].widget.attrs["placeholder"] = "Type in name to search for group"
+ self.fields["from_groups"].widget.attrs["data-placeholder"] = "Type in name to search for group"
+ self.fields["to_groups"].widget.attrs["data-placeholder"] = "Type in name to search for group"
self.fields["to_contacts"].label = 'Contacts'
self.fields["other_identifiers"].widget.attrs["rows"] = 2
@@ -449,7 +449,7 @@ class IncomingLiaisonForm(LiaisonModelForm):
else:
queryset = Group.objects.filter(type="sdo", state="active", role__person=self.person, role__name__in=("liaiman", "auth")).distinct().order_by('name')
self.fields['from_contact'].initial = self.person.role_set.filter(group=queryset[0]).first().email.address
- self.fields['from_contact'].widget.attrs['readonly'] = True
+ self.fields['from_contact'].widget.attrs['disabled'] = True
self.fields['from_groups'].queryset = queryset
self.fields['from_groups'].widget.submitter = str(self.person)
@@ -504,7 +504,7 @@ class OutgoingLiaisonForm(LiaisonModelForm):
else:
email = self.person.email_address()
self.fields['from_contact'].initial = email
- self.fields['from_contact'].widget.attrs['readonly'] = True
+ self.fields['from_contact'].widget.attrs['disabled'] = True
def set_to_fields(self):
'''Set to_groups and to_contacts options and initial value based on user
@@ -551,7 +551,7 @@ class EditLiaisonForm(LiaisonModelForm):
queryset = Group.objects.filter(type="sdo").order_by('name')
else:
queryset = Group.objects.filter(type="sdo", role__person=self.person, role__name__in=("liaiman", "auth")).distinct().order_by('name')
- self.fields['from_contact'].widget.attrs['readonly'] = True
+ self.fields['from_contact'].widget.attrs['disabled'] = True
self.fields['from_groups'].queryset = queryset
def set_to_fields(self):
@@ -571,5 +571,4 @@ class EditLiaisonForm(LiaisonModelForm):
class EditAttachmentForm(forms.Form):
- title = forms.CharField(max_length=255)
-
+ title = forms.CharField(max_length=255)
\ No newline at end of file
diff --git a/ietf/liaisons/widgets.py b/ietf/liaisons/widgets.py
index fe0f15e36..db27c3780 100644
--- a/ietf/liaisons/widgets.py
+++ b/ietf/liaisons/widgets.py
@@ -25,7 +25,7 @@ class ButtonWidget(Widget):
html += ' ' % conditional_escape(i)
required_str = 'Please fill in %s to attach a new file' % conditional_escape(self.required_label)
html += ' ' % conditional_escape(required_str)
- html += '' % conditional_escape(self.label)
+ html += '' % conditional_escape(self.label)
return mark_safe(html)
@@ -39,8 +39,8 @@ class ShowAttachmentsWidget(Widget):
html += '%s ' % (conditional_escape(attachment.document.get_href()), conditional_escape(attachment.document.title))
html += 'Edit '.format(urlreverse("ietf.liaisons.views.liaison_edit_attachment", kwargs={'object_id':attachment.statement.pk,'doc_id':attachment.document.pk}))
html += 'Delete '.format(urlreverse("ietf.liaisons.views.liaison_delete_attachment", kwargs={'object_id':attachment.statement.pk,'attach_id':attachment.pk}))
- html += '
'
+ html += '
'
else:
html += 'No files attached'
html += ''
- return mark_safe(html)
+ return mark_safe(html)
\ No newline at end of file
diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py
index 289c20a60..047f374d4 100644
--- a/ietf/meeting/tests_views.py
+++ b/ietf/meeting/tests_views.py
@@ -3941,7 +3941,7 @@ class EditScheduleListTests(TestCase):
self.assertTrue(r.status_code, 200)
q = PyQuery(r.content)
- self.assertEqual(len(q(".schedule-diffs tr")), 3)
+ self.assertEqual(len(q(".schedule-diffs tr")), 3+1)
def test_delete_schedule(self):
url = urlreverse('ietf.meeting.views.delete_schedule',
@@ -5758,14 +5758,14 @@ class MaterialsTests(TestCase):
r = self.client.get(session_overview_url)
self.assertEqual(r.status_code,200)
q = PyQuery(r.content)
- self.assertFalse(q('#uploadslides'))
- self.assertFalse(q('#proposeslides'))
+ self.assertFalse(q('.uploadslides'))
+ self.assertFalse(q('.proposeslides'))
self.client.login(username=newperson.user.username,password=newperson.user.username+"+password")
r = self.client.get(session_overview_url)
self.assertEqual(r.status_code,200)
q = PyQuery(r.content)
- self.assertTrue(q('#proposeslides'))
+ self.assertTrue(q('.proposeslides'))
self.client.logout()
login_testing_unauthorized(self,newperson.user.username,propose_url)
@@ -5783,7 +5783,7 @@ class MaterialsTests(TestCase):
r = self.client.get(session_overview_url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
- self.assertEqual(len(q('#proposedslidelist p')), 1)
+ self.assertEqual(len(q('.proposedslidelist p')), 1)
SlideSubmissionFactory(session = session)
@@ -5792,7 +5792,7 @@ class MaterialsTests(TestCase):
r = self.client.get(session_overview_url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
- self.assertEqual(len(q('#proposedslidelist p')), 2)
+ self.assertEqual(len(q('.proposedslidelist p')), 2)
self.client.logout()
def test_disapprove_proposed_slides(self):
diff --git a/ietf/person/tests.py b/ietf/person/tests.py
index 7054bb676..bd754194d 100644
--- a/ietf/person/tests.py
+++ b/ietf/person/tests.py
@@ -92,7 +92,7 @@ class PersonTests(TestCase):
#debug.show('person.photo_name()')
self.assertContains(r, person.photo_name(), status_code=200)
q = PyQuery(r.content)
- self.assertIn("Photo of %s"%person, q("div.bio-text img").attr("alt"))
+ self.assertIn("Photo of %s"%person.name, q("div.bio-text img").attr("alt"))
bio_text = q("div.bio-text").text()
self.assertIsNotNone(bio_text)
diff --git a/ietf/secr/announcement/forms.py b/ietf/secr/announcement/forms.py
index 92383631b..3aacbfe62 100644
--- a/ietf/secr/announcement/forms.py
+++ b/ietf/secr/announcement/forms.py
@@ -73,7 +73,7 @@ def get_to_choices():
class AnnounceForm(forms.ModelForm):
nomcom = forms.ModelChoiceField(queryset=Group.objects.filter(acronym__startswith='nomcom',type='nomcom',state='active'),required=False)
- to_custom = MultiEmailField(required=False,label='')
+ to_custom = MultiEmailField(required=False)
class Meta:
model = Message
@@ -131,4 +131,4 @@ class AnnounceForm(forms.ModelForm):
if nomcom:
message.related_groups.add(nomcom)
- return message
+ return message
\ No newline at end of file
diff --git a/ietf/secr/templates/base_site.html b/ietf/secr/templates/base_site.html
index 2c258efe4..f75b41d06 100644
--- a/ietf/secr/templates/base_site.html
+++ b/ietf/secr/templates/base_site.html
@@ -24,9 +24,7 @@
{% block footer %}
-{% endblock %}
+{% endblock %}
\ No newline at end of file
diff --git a/ietf/secr/templates/base_site_bootstrap.html b/ietf/secr/templates/base_site_bootstrap.html
index c8edb0124..d1ab1dfde 100644
--- a/ietf/secr/templates/base_site_bootstrap.html
+++ b/ietf/secr/templates/base_site_bootstrap.html
@@ -24,9 +24,7 @@
{% block footer %}
-{% endblock %}
+{% endblock %}
\ No newline at end of file
diff --git a/ietf/secr/templates/groups/people.html b/ietf/secr/templates/groups/people.html
index 817a614d2..ebcc1aeeb 100644
--- a/ietf/secr/templates/groups/people.html
+++ b/ietf/secr/templates/groups/people.html
@@ -28,16 +28,18 @@
Action
-
- {% for role in group.role_set.all %}
-
-
- {% endfor %}
-
+ {% if group.role_set.all %}
+
+ {% for role in group.role_set.all %}
+ {{ role.name }}
- {{ role.person }}
- {{ role.email }}
- Delete
-
+
+ {% endfor %}
+
+ {% endif %}
-{% endblock %}
+{% endblock %}
\ No newline at end of file
diff --git a/ietf/secr/templates/groups/search.html b/ietf/secr/templates/groups/search.html
index e5a8d9a70..a60455302 100644
--- a/ietf/secr/templates/groups/search.html
+++ b/ietf/secr/templates/groups/search.html
@@ -7,8 +7,6 @@
-{% endblock %}{% endblock %}
-
{% endblock %}
{% block breadcrumbs %}{{ block.super }}
diff --git a/ietf/secr/templates/groups/view.html b/ietf/secr/templates/groups/view.html
index 40cbc80b0..a1c2e9ae3 100644
--- a/ietf/secr/templates/groups/view.html
+++ b/ietf/secr/templates/groups/view.html
@@ -63,38 +63,46 @@
{{ role.name }}
+ {{ role.person }}
+ {{ role.email }}
+ Delete
+
\ No newline at end of file
diff --git a/ietf/secr/templates/includes/search_results_table.html b/ietf/secr/templates/includes/search_results_table.html
index 7ee860226..ba7dfd787 100644
--- a/ietf/secr/templates/includes/search_results_table.html
+++ b/ietf/secr/templates/includes/search_results_table.html
@@ -6,13 +6,15 @@
ID
-
- {% for item in results %}
-
-
- {% endfor %}
-
-
+ {% if results %}
+
+ {% for item in results %}
+ {{item.name}}
- {{item.person.email_address}}
- {{item.person.id}}
-
+
+ {% endfor %}
+
+ {% endif %}
+
\ No newline at end of file
diff --git a/ietf/secr/templates/includes/sessions_footer.html b/ietf/secr/templates/includes/sessions_footer.html
index ab26d53a4..a41a8b8db 100755
--- a/ietf/secr/templates/includes/sessions_footer.html
+++ b/ietf/secr/templates/includes/sessions_footer.html
@@ -1,4 +1,6 @@
+{{item.name}}
+ {{item.person.email_address}}
+ {{item.person.id}}
+
\ No newline at end of file
diff --git a/ietf/secr/templates/includes/upload_footer.html b/ietf/secr/templates/includes/upload_footer.html
index 8a32f8820..d2faf02c9 100755
--- a/ietf/secr/templates/includes/upload_footer.html
+++ b/ietf/secr/templates/includes/upload_footer.html
@@ -1,4 +1,6 @@
+
\ No newline at end of file
diff --git a/ietf/secr/templates/proceedings/main.html b/ietf/secr/templates/proceedings/main.html
index e95de3620..33c1971c9 100644
--- a/ietf/secr/templates/proceedings/main.html
+++ b/ietf/secr/templates/proceedings/main.html
@@ -22,15 +22,17 @@
IETF Meeting
-
- {% for meeting in meetings %}
-
-
- {% endfor %}
-
+ {% if meetings %}
+
+ {% for meeting in meetings %}
+
- {{ meeting.number }}
-
-
+
+ {% endfor %}
+
+ {% endif %}
{% if user|has_role:"Secretariat" %}
@@ -94,13 +96,15 @@
+ {{ meeting.number }}
+
+ Filename
-
- {% for file in unmatched_recordings %}
-
-
- {% endfor %}
-
+ {% if unmatched_recordings %}
+
+ {% for file in unmatched_recordings %}
+ {{ file }}
-
+
+ {% endfor %}
+
+ {% endif %}
{% endif %}
@@ -112,4 +116,4 @@
{% block footer-extras %}
{% include "includes/upload_footer.html" %}
-{% endblock %}
+{% endblock %}
\ No newline at end of file
diff --git a/ietf/secr/templates/roles/main.html b/ietf/secr/templates/roles/main.html
index 84db0c85d..8033709e0 100755
--- a/ietf/secr/templates/roles/main.html
+++ b/ietf/secr/templates/roles/main.html
@@ -50,14 +50,11 @@
{{ file }}
+
diff --git a/ietf/secr/templates/sreq/main.html b/ietf/secr/templates/sreq/main.html
index 0244e9ab9..b62a751db 100755
--- a/ietf/secr/templates/sreq/main.html
+++ b/ietf/secr/templates/sreq/main.html
@@ -39,13 +39,14 @@
(Currently, this group does not plan to hold a session at IETF {{ meeting.number }})
{% endif %}
+ {% empty %}
+ NONE
{% endfor %}
diff --git a/ietf/templates/api/index.html b/ietf/templates/api/index.html
index 82accb076..760b9cef5 100644
--- a/ietf/templates/api/index.html
+++ b/ietf/templates/api/index.html
@@ -154,11 +154,11 @@ $ curl 'https://datatracker.ietf.org/api/v1/doc/document/?limit=0&name__cont
available for all documents at the relative url doc.json
, e.g.,
{% url 'ietf.doc.views_doc.document_json' name='draft-ietf-poised95-std-proc-3' %}
-
+
.
You can also specify an RFC: {% url 'ietf.doc.views_doc.document_json' name='rfc2026' %}
-
+
.
No API key is needed to access this.