diff --git a/ietf/doc/tests_bofreq.py b/ietf/doc/tests_bofreq.py
index 05a966944..375b4d5ee 100644
--- a/ietf/doc/tests_bofreq.py
+++ b/ietf/doc/tests_bofreq.py
@@ -8,7 +8,7 @@ from pathlib import Path
from pyquery import PyQuery
from random import randint
from tempfile import NamedTemporaryFile
-from html import escape
+from html import escape, unescape
from django.conf import settings
from django.urls import reverse as urlreverse
@@ -191,7 +191,7 @@ This test section has some text.
self.client.login(username=username,password=username+'+password')
r = self.client.get(url)
self.assertEqual(r.status_code,200)
- unescaped = unicontent(r).encode('utf-8').decode('unicode-escape')
+ unescaped = unescape(unicontent(r).encode('utf-8').decode('unicode-escape'))
for editor in previous_editors:
self.assertIn(editor.name,unescaped)
new_editors = set(previous_editors)
@@ -231,9 +231,9 @@ This test section has some text.
self.client.login(username=username,password=username+'+password')
r = self.client.get(url)
self.assertEqual(r.status_code,200)
- unescaped = unicontent(r).encode('utf-8').decode('unicode-escape')
+ unescaped = unescape(unicontent(r).encode('utf-8').decode('unicode-escape'))
for responsible in previous_responsible:
- self.assertIn(escape(responsible.name), unescaped)
+ self.assertIn(responsible.name, unescaped)
new_responsible = set(previous_responsible)
new_responsible.add(RoleFactory(group__type_id='area',name_id='ad').person)
postdict = dict(responsible=[str(p.pk) for p in new_responsible])
diff --git a/ietf/liaisons/admin.py b/ietf/liaisons/admin.py
index bedb1d69f..c7cb7a4da 100644
--- a/ietf/liaisons/admin.py
+++ b/ietf/liaisons/admin.py
@@ -29,7 +29,7 @@ class LiaisonStatementAdmin(admin.ModelAdmin):
inlines = [ RelatedLiaisonStatementInline, LiaisonStatementAttachmentInline ]
def related_to(self, obj):
- 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()])
+ 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 %}
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.
diff --git a/ietf/templates/base.html b/ietf/templates/base.html
index ba4887891..2623e4a27 100644
--- a/ietf/templates/base.html
+++ b/ietf/templates/base.html
@@ -7,16 +7,16 @@
{% load django_bootstrap5 %}
-
-
+
+