From 3234f1a121dfdf83dd3c2d3e2315a460f128e255 Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Thu, 7 Apr 2022 19:30:38 +0300 Subject: [PATCH] test: Validate HTML rendered during tests (#3782) --- .editorconfig | 31 +- .gitignore | 2 + dev/tests/Dockerfile | 5 - docker/app.Dockerfile | 5 - .../templates/dbtemplate/template_show.html | 6 +- ietf/doc/templatetags/ballot_icon.py | 7 +- ietf/doc/templatetags/ietf_filters.py | 4 +- ietf/doc/tests.py | 2 +- ietf/doc/tests_ballot.py | 6 +- ietf/doc/tests_draft.py | 6 +- ietf/doc/tests_review.py | 3 +- ietf/doc/views_ballot.py | 4 +- ietf/doc/views_charter.py | 6 +- ietf/doc/views_status_change.py | 2 +- ietf/group/tests_info.py | 2 +- ietf/ietfauth/views.py | 8 +- ietf/liaisons/tests.py | 10 +- ietf/liaisons/widgets.py | 12 +- ietf/meeting/views.py | 2 +- ietf/secr/sreq/forms.py | 4 +- ietf/secr/templates/announcement/confirm.html | 2 +- ietf/secr/templates/announcement/main.html | 6 +- ietf/secr/templates/areas/list.html | 6 +- ietf/secr/templates/areas/people.html | 15 +- ietf/secr/templates/areas/view.html | 13 +- ietf/secr/templates/base_secr.html | 23 +- ietf/secr/templates/base_secr_bootstrap.html | 25 +- ietf/secr/templates/base_site.html | 6 +- ietf/secr/templates/base_site_bootstrap.html | 6 +- ietf/secr/templates/confirm_cancel.html | 2 +- ietf/secr/templates/confirm_delete.html | 2 +- ietf/secr/templates/console/main.html | 4 +- ietf/secr/templates/groups/people.html | 22 +- ietf/secr/templates/groups/search.html | 5 +- ietf/secr/templates/groups/view.html | 11 +- ietf/secr/templates/includes/activities.html | 8 +- .../secr/templates/includes/buttons_back.html | 2 +- .../includes/group_search_results.html | 10 +- .../includes/proceedings_functions.html | 4 +- .../includes/search_results_table.html | 6 +- .../includes/sessions_request_form.html | 16 +- .../includes/sessions_request_view.html | 7 +- .../templates/includes/upload_footer.html | 4 +- ietf/secr/templates/main.html | 20 +- ietf/secr/templates/meetings/add.html | 3 + .../templates/meetings/base_rooms_times.html | 2 +- ietf/secr/templates/meetings/blue_sheet.html | 9 +- .../secr/templates/meetings/edit_meeting.html | 4 +- ietf/secr/templates/meetings/main.html | 7 +- .../templates/meetings/misc_session_edit.html | 3 + .../templates/meetings/misc_sessions.html | 32 +- .../templates/meetings/notifications.html | 27 +- .../meetings/regular_session_edit.html | 14 +- ietf/secr/templates/meetings/rooms.html | 5 +- ietf/secr/templates/meetings/sessions.html | 16 +- ietf/secr/templates/meetings/times.html | 18 +- ietf/secr/templates/meetings/times_edit.html | 5 +- ietf/secr/templates/meetings/view.html | 13 +- .../proceedings/interim_directory.html | 2 +- ietf/secr/templates/proceedings/main.html | 14 +- .../secr/templates/proceedings/recording.html | 17 +- .../templates/proceedings/recording_edit.html | 3 + ietf/secr/templates/proceedings/status.html | 9 +- ietf/secr/templates/proceedings/view.html | 12 +- ietf/secr/templates/proceedings/wait.html | 4 +- ietf/secr/templates/roles/main.html | 10 +- ietf/secr/templates/roles/roles.html | 8 +- ietf/secr/templates/rolodex/add.html | 6 +- ietf/secr/templates/rolodex/add_proceed.html | 7 +- ietf/secr/templates/rolodex/delete.html | 4 +- ietf/secr/templates/rolodex/edit.html | 7 +- ietf/secr/templates/rolodex/search.html | 4 +- ietf/secr/templates/rolodex/view.html | 23 +- ietf/secr/templates/sreq/confirm.html | 16 +- ietf/secr/templates/sreq/locked.html | 2 +- ietf/secr/templates/sreq/new.html | 4 +- ietf/secr/templates/sreq/tool_status.html | 5 +- ietf/secr/templates/sreq/view.html | 8 +- .../templates/telechat/base_telechat.html | 2 +- ietf/secr/templates/telechat/doc.html | 45 +- ietf/secr/templates/telechat/roll_call.html | 6 +- ietf/static/css/ietf.scss | 21 + ietf/static/js/agenda_materials.js | 4 +- ietf/static/js/agenda_timezone.js | 2 +- ietf/static/js/ietf.js | 2 +- ietf/static/js/liaisons.js | 2 +- ietf/static/js/list.js | 2 +- ietf/templates/401.html | 4 +- ietf/templates/403.html | 4 +- ietf/templates/404.html | 4 +- ietf/templates/500.html | 4 +- ietf/templates/api/index.html | 14 +- ietf/templates/base.html | 4 +- ietf/templates/base/menu.html | 4 +- ietf/templates/base/menu_user.html | 2 +- ietf/templates/community/manage_list.html | 18 +- ietf/templates/community/track_document.html | 4 +- .../templates/community/untrack_document.html | 6 +- ietf/templates/debug.html | 22 +- ietf/templates/doc/ballot/approve_ballot.html | 6 +- ietf/templates/doc/ballot/edit_position.html | 14 +- .../doc/ballot/irsg_ballot_approve.html | 12 +- ietf/templates/doc/ballot/rfceditornote.html | 1 + .../doc/ballot/send_ballot_comment.html | 20 +- ietf/templates/doc/ballot/writeupnotes.html | 6 +- ietf/templates/doc/ballot_popup.html | 4 +- ietf/templates/doc/bofreq/bof_requests.html | 10 +- ietf/templates/doc/charter/approve.html | 2 +- .../doc/charter/ballot_writeupnotes.html | 6 +- ietf/templates/doc/charter/change_state.html | 2 +- .../doc/charter/review_announcement_text.html | 21 +- ietf/templates/doc/charter/submit.html | 26 +- .../doc/conflict_review/approve.html | 2 +- .../doc/document_ballot_content.html | 12 +- ietf/templates/doc/document_bofreq.html | 20 +- ietf/templates/doc/document_charter.html | 30 +- .../doc/document_conflict_review.html | 16 +- ietf/templates/doc/document_draft.html | 172 +- ietf/templates/doc/document_email.html | 10 +- ietf/templates/doc/document_history.html | 8 +- ietf/templates/doc/document_html.html | 25 +- ietf/templates/doc/document_material.html | 20 +- .../templates/doc/document_referenced_by.html | 12 +- ietf/templates/doc/document_references.html | 13 +- ietf/templates/doc/document_review.html | 8 +- .../templates/doc/document_status_change.html | 30 +- ietf/templates/doc/downref.html | 4 +- ietf/templates/doc/draft/change_state.html | 8 +- .../doc/draft/change_stream_state.html | 2 +- ietf/templates/doc/draft/release_draft.html | 4 +- .../doc/draft/request_publication.html | 23 +- ietf/templates/doc/drafts_for_ad.html | 13 +- .../templates/doc/drafts_in_iesg_process.html | 16 +- ietf/templates/doc/edit_authors.html | 2 +- ietf/templates/doc/edit_notify.html | 6 +- ietf/templates/doc/email_aliases.html | 2 + ietf/templates/doc/htmlized_base.html | 2 +- ietf/templates/doc/irsg_ballot_status.html | 4 +- .../doc/material/presentations-row.html | 15 +- ietf/templates/doc/relationship_help.html | 8 +- .../templates/doc/review/complete_review.html | 16 +- ietf/templates/doc/review/request_info.html | 82 +- ietf/templates/doc/review/review_request.html | 6 +- ietf/templates/doc/search/search.html | 4 - ietf/templates/doc/search/search_form.html | 17 +- .../doc/search/search_result_row.html | 4 + ietf/templates/doc/search/search_results.html | 12 +- ietf/templates/doc/state_help.html | 14 +- ietf/templates/doc/status_change/approve.html | 2 +- .../doc/status_change/edit_related_rows.html | 14 +- .../doc/status_change/last_call.html | 2 +- .../doc/status_change/status_changes.html | 8 +- ietf/templates/doc/submit_to_iesg.html | 24 +- .../doc/yang-check-modal-overlay.html | 4 +- ietf/templates/googlea30ad1dacffb5e5b.html | 2 +- ietf/templates/group/active_adm.html | 8 +- ietf/templates/group/active_ags.html | 10 +- ietf/templates/group/active_dirs.html | 14 +- ietf/templates/group/active_groups.html | 6 +- ietf/templates/group/active_iabgroups.html | 10 +- ietf/templates/group/active_rags.html | 8 +- ietf/templates/group/active_review_dirs.html | 12 +- ietf/templates/group/active_rgs.html | 6 +- ietf/templates/group/active_teams.html | 6 +- ietf/templates/group/active_wgs.html | 8 +- ietf/templates/group/bofs.html | 6 +- .../group/change_reviewer_settings.html | 24 +- ietf/templates/group/chartering_groups.html | 8 +- ietf/templates/group/concluded_groups.html | 8 +- ietf/templates/group/customize_workflow.html | 15 +- ietf/templates/group/edit_milestones.html | 9 +- ietf/templates/group/email.html | 10 +- ietf/templates/group/email_aliases.html | 4 +- ietf/templates/group/group_about.html | 44 +- .../group/group_about_rendertest.html | 4 +- ietf/templates/group/history.html | 6 +- ietf/templates/group/index.html | 6 +- .../group/manage_review_requests.html | 2 +- ietf/templates/group/materials.html | 14 +- ietf/templates/group/meetings-row.html | 2 + ietf/templates/group/meetings.html | 25 +- ietf/templates/group/milestones.html | 6 +- .../group/reset_charter_milestones.html | 17 +- ietf/templates/group/review_requests.html | 64 +- ietf/templates/group/reviewer_overview.html | 37 +- ietf/templates/help/state_index.html | 4 +- ietf/templates/help/states.html | 8 +- ietf/templates/iesg/agenda_charter.html | 2 +- ietf/templates/iesg/agenda_conflict_doc.html | 4 +- ietf/templates/iesg/agenda_doc.html | 2 +- ietf/templates/iesg/agenda_documents.html | 14 +- ietf/templates/iesg/discusses.html | 8 +- .../iesg/moderator_conflict_doc.html | 2 +- ietf/templates/iesg/moderator_package.html | 12 +- ietf/templates/iesg/past_documents.html | 10 +- ietf/templates/ietfauth/apikeys.html | 26 +- ietf/templates/ietfauth/review_overview.html | 50 +- ietf/templates/ipr/details_history.html | 8 +- ietf/templates/ipr/details_view.html | 132 +- ietf/templates/ipr/ipr_table.html | 10 +- ietf/templates/ipr/search_doc_result.html | 22 +- .../templates/ipr/search_doctitle_result.html | 10 +- ietf/templates/ipr/search_result.html | 12 +- ietf/templates/ipr/search_wg_result.html | 10 +- ietf/templates/liaisons/detail.html | 65 +- ietf/templates/liaisons/detail_history.html | 8 +- ietf/templates/liaisons/edit.html | 2 +- ietf/templates/liaisons/field_help.html | 70 +- ietf/templates/liaisons/guide_from_ietf.html | 6 +- ietf/templates/liaisons/guide_to_ietf.html | 8 +- ietf/templates/liaisons/liaison_table.html | 10 +- ietf/templates/liaisons/search_form.html | 2 + .../mailinglists/group_archives.html | 4 +- ietf/templates/mailinglists/nonwg.html | 4 +- ietf/templates/mailtrigger/recipient.html | 8 +- ietf/templates/mailtrigger/trigger.html | 6 +- .../templates/meeting/add_session_drafts.html | 4 +- ietf/templates/meeting/agenda.html | 34 +- ietf/templates/meeting/agenda_by_type.html | 2 + ietf/templates/meeting/agenda_filter.html | 14 +- ietf/templates/meeting/delete_schedule.html | 5 +- ietf/templates/meeting/diff_schedules.html | 2 +- .../meeting/edit_meeting_schedule.html | 25 +- .../edit_meeting_schedule_session.html | 1 + ...t_meeting_timeslots_and_misc_sessions.html | 1 + ietf/templates/meeting/edit_timeslot.html | 1 + ietf/templates/meeting/floor-plan.html | 12 +- ietf/templates/meeting/import_minutes.html | 2 +- ietf/templates/meeting/important-dates.html | 8 +- ietf/templates/meeting/interim_announce.html | 10 +- ietf/templates/meeting/interim_pending.html | 8 +- ietf/templates/meeting/interim_request.html | 2 +- .../meeting/interim_request_details.html | 13 +- .../meeting/interim_request_edit.html | 2 +- .../meeting/interim_send_announcement.html | 12 +- .../meeting/interim_session_buttons.html | 16 + .../meeting/interim_skip_announce.html | 2 +- .../meeting/make_schedule_official.html | 5 +- ietf/templates/meeting/materials.html | 88 +- ietf/templates/meeting/past.html | 8 +- .../meeting/previously_approved_slides.html | 2 +- ietf/templates/meeting/proceedings.html | 60 +- .../proceedings/edit_meetinghosts.html | 2 + .../meeting/proceedings/material_details.html | 16 +- .../meeting/proceedings/materials_table.html | 6 +- .../meeting/proceedings_attendees_table.html | 8 +- .../meeting/proceedings_overview.html | 1 + .../meeting/proceedings_progress_report.html | 10 +- ietf/templates/meeting/properties_edit.html | 2 +- ietf/templates/meeting/requests.html | 18 +- ietf/templates/meeting/room-view.html | 2 +- ietf/templates/meeting/schedule_list.html | 23 +- .../meeting/session_agenda_include.html | 4 +- .../meeting/session_buttons_include.html | 22 +- ietf/templates/meeting/session_details.html | 7 +- .../meeting/session_details_form.html | 8 +- .../meeting/session_details_panel.html | 6 +- ietf/templates/meeting/session_materials.html | 2 +- ietf/templates/meeting/timeslot_edit.html | 31 +- .../meeting/timeslot_edit_timeslot.html | 2 +- ietf/templates/meeting/tz-display.html | 1 + ietf/templates/meeting/upcoming.html | 12 +- ietf/templates/meeting/week-view.html | 4 +- ietf/templates/nomcom/announcements.html | 6 +- ietf/templates/nomcom/edit_nomcom.html | 2 +- ietf/templates/nomcom/edit_nominee.html | 2 +- ietf/templates/nomcom/edit_position.html | 6 +- ietf/templates/nomcom/edit_template.html | 2 +- ietf/templates/nomcom/edit_topic.html | 7 +- ietf/templates/nomcom/eligible.html | 12 +- ietf/templates/nomcom/feedback.html | 2 +- ietf/templates/nomcom/history.html | 78 +- .../nomcom/iesg_position_requirements.html | 12 +- ietf/templates/nomcom/index.html | 6 +- .../nomcom/private_feedback_email.html | 7 +- ietf/templates/nomcom/private_index.html | 130 +- ietf/templates/nomcom/private_key.html | 7 +- .../nomcom/private_merge_nominee.html | 5 +- .../nomcom/private_merge_person.html | 5 +- .../nomcom/private_questionnaire.html | 7 +- ietf/templates/nomcom/questionnaires.html | 2 +- ietf/templates/nomcom/send_reminder_mail.html | 17 +- ietf/templates/nomcom/show_template.html | 2 +- ietf/templates/nomcom/view_feedback.html | 16 +- .../nomcom/view_feedback_nominee.html | 2 +- .../nomcom/view_feedback_pending.html | 37 +- .../templates/nomcom/view_feedback_topic.html | 2 +- .../nomcom/view_feedback_unrelated.html | 2 +- ietf/templates/nomcom/volunteers.html | 16 +- ietf/templates/nomcom/year_index.html | 1 + ietf/templates/oidc_provider/authorize.html | 5 +- ietf/templates/oidc_provider/error.html | 2 +- ietf/templates/person/person_link.html | 1 + ietf/templates/person/photo.html | 8 +- ietf/templates/person/profile.html | 18 +- .../registration/change_password.html | 6 +- .../registration/confirm_account.html | 1 + ietf/templates/registration/edit_profile.html | 32 +- ietf/templates/review/unavailable_table.html | 10 +- .../document_stats_author_affiliation.html | 10 +- .../document_stats_author_citations.html | 6 +- .../document_stats_author_continent.html | 6 +- .../stats/document_stats_author_country.html | 10 +- .../document_stats_author_documents.html | 6 +- .../stats/document_stats_author_hindex.html | 6 +- .../stats/document_stats_authors.html | 6 +- .../stats/document_stats_format.html | 6 +- .../stats/document_stats_formlang.html | 6 +- .../templates/stats/document_stats_pages.html | 6 +- .../templates/stats/document_stats_words.html | 6 +- .../templates/stats/known_countries_list.html | 4 +- .../stats/meeting_stats_continent.html | 6 +- .../stats/meeting_stats_country.html | 6 +- .../stats/meeting_stats_overview.html | 12 +- ietf/templates/stats/review_stats.html | 28 +- ietf/templates/submit/add_preapproval.html | 2 +- ietf/templates/submit/api_submit_info.html | 19 +- ietf/templates/submit/approvals.html | 16 +- ietf/templates/submit/edit_submission.html | 25 +- ietf/templates/submit/manual_post.html | 16 +- ietf/templates/submit/search_submission.html | 8 +- ietf/templates/submit/submission_status.html | 55 +- ietf/templates/submit/submitter_form.html | 9 +- ietf/templates/submit/tool_instructions.html | 34 +- ietf/templates/sync/discrepancies.html | 8 +- ietf/templates/sync/notify.html | 7 +- ietf/templates/sync/rfceditor_undo.html | 10 +- ietf/utils/response.py | 2 +- ietf/utils/test_runner.py | 214 +- ietf/utils/test_utils.py | 130 +- package-lock.json | 4074 ++++++++--------- package.json | 11 +- requirements.txt | 6 +- 333 files changed, 4120 insertions(+), 4275 deletions(-) diff --git a/.editorconfig b/.editorconfig index 95dc121e1..11e80fa69 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,59 +4,38 @@ root = true -# Settings for IETF datatracker +# Global settings for IETF datatracker # --------------------------------------------------------- # PEP8 Style [*] -indent_style = space indent_size = 4 -end_of_line = lf charset = utf-8 -# to avoid tripping Henrik's commit hook: -trim_trailing_whitespace = false -insert_final_newline = false +trim_trailing_whitespace = true +insert_final_newline = true + +# Specializations below *add to* the above defaults # Settings for .github folder # --------------------------------------------------------- # GitHub Markdown Style [.github/**] -indent_style = space indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = false -insert_final_newline = true # Settings for client-side JS / Vue files # --------------------------------------------------------- # StandardJS Style [client/**] -indent_style = space indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true [package.json] -indent_style = space indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true # Settings for cypress tests # --------------------------------------------------------- # StandardJS Style [cypress/**] -indent_style = space indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3687fc93d..d302f3208 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,8 @@ *.#* .*.swp .DS_store +datatracker.sublime-project +datatracker.sublime-workspace # Simulated Subversion default ignores end here /.coverage /.factoryboy_random_state diff --git a/dev/tests/Dockerfile b/dev/tests/Dockerfile index 8c938b891..212481c44 100644 --- a/dev/tests/Dockerfile +++ b/dev/tests/Dockerfile @@ -24,7 +24,6 @@ RUN apt-get install -qy \ build-essential \ curl \ docker-ce-cli \ - default-jdk \ enscript \ gawk \ gcc \ @@ -46,7 +45,6 @@ RUN apt-get install -qy \ libxtst6 \ libmagic-dev \ libmariadb-dev \ - libtidy-dev \ locales \ mariadb-client \ netcat \ @@ -109,9 +107,6 @@ RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requ # Turn off rsyslog kernel logging (doesn't work in Docker) RUN sed -i '/imklog/s/^/#/' /etc/rsyslog.conf -# Install the Nu Html Checker (v.Nu) -ADD https://github.com/validator/validator/releases/download/latest/vnu.jar / - # Fetch wait-for utility ADD https://raw.githubusercontent.com/eficode/wait-for/v2.1.3/wait-for /usr/local/bin/ RUN chmod +rx /usr/local/bin/wait-for diff --git a/docker/app.Dockerfile b/docker/app.Dockerfile index f153928a5..4c7875341 100644 --- a/docker/app.Dockerfile +++ b/docker/app.Dockerfile @@ -31,7 +31,6 @@ RUN apt-get install -qy \ bash \ build-essential \ curl \ - default-jdk \ docker-ce-cli \ enscript \ fish \ @@ -56,7 +55,6 @@ RUN apt-get install -qy \ libmagic-dev \ libmariadb-dev \ libmemcached-tools \ - libtidy-dev \ locales \ mariadb-client \ memcached \ @@ -125,9 +123,6 @@ RUN sed -i '/imklog/s/^/#/' /etc/rsyslog.conf # Colorize the bash shell RUN sed -i 's/#force_color_prompt=/force_color_prompt=/' /root/.bashrc -# Install the Nu Html Checker (v.Nu) -ADD https://github.com/validator/validator/releases/download/latest/vnu.jar / - ADD https://raw.githubusercontent.com/eficode/wait-for/v2.1.3/wait-for /usr/local/bin/ RUN chmod +rx /usr/local/bin/wait-for diff --git a/ietf/dbtemplate/templates/dbtemplate/template_show.html b/ietf/dbtemplate/templates/dbtemplate/template_show.html index 177b50aff..60e3bb9c7 100644 --- a/ietf/dbtemplate/templates/dbtemplate/template_show.html +++ b/ietf/dbtemplate/templates/dbtemplate/template_show.html @@ -33,8 +33,8 @@

Template content

-
-

{{ template.content }}

+
+

{{ template.content }}

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/doc/templatetags/ballot_icon.py b/ietf/doc/templatetags/ballot_icon.py index 587a25530..52b7635e9 100644 --- a/ietf/doc/templatetags/ballot_icon.py +++ b/ietf/doc/templatetags/ballot_icon.py @@ -109,14 +109,15 @@ def ballot_icon(context, doc): else: typename = "IESG" - res = ['') + res.append('>') res.append("") @@ -137,7 +138,7 @@ def ballot_icon(context, doc): res.append('') i = i + 1 - res.append("") + res.append("") res.append('' % ballot.pk) return mark_safe("".join(res)) diff --git a/ietf/doc/templatetags/ietf_filters.py b/ietf/doc/templatetags/ietf_filters.py index 21cd383cb..65e7d4264 100644 --- a/ietf/doc/templatetags/ietf_filters.py +++ b/ietf/doc/templatetags/ietf_filters.py @@ -413,13 +413,13 @@ def format_snippet(text, trunc_words=25): full = keep_spacing(collapsebr(linebreaksbr(mark_safe(sanitize_fragment(text))))) snippet = truncatewords_html(full, trunc_words) if snippet != full: - return mark_safe('
%s
%s
' % (snippet, full)) + return mark_safe('
%s
%s
' % (snippet, full)) return mark_safe(full) @register.simple_tag def doc_edit_button(url_name, *args, **kwargs): """Given URL name/args/kwargs, looks up the URL just like "url" tag and returns a properly formatted button for the document material tables.""" - return mark_safe('Edit' % (urlreverse(url_name, args=args, kwargs=kwargs))) + return mark_safe('Edit' % (urlreverse(url_name, args=args, kwargs=kwargs))) @register.filter def textify(text): diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index 56bc8a2c8..9fdc3f6b2 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -1595,7 +1595,7 @@ class DocTestCase(TestCase): href = q(f'div.balloter-name a[href$="{author_slug}"]').attr('href') ids = [ target.attr('id') - for target in q(f'h5[id$="{author_slug}"]').items() + for target in q(f'p.h5[id$="{author_slug}"]').items() ] self.assertEqual(len(ids), 1, 'Should be exactly one link for the balloter') self.assertEqual(href, f'#{ids[0]}', 'Anchor href should match ID') diff --git a/ietf/doc/tests_ballot.py b/ietf/doc/tests_ballot.py index 3d15a307a..317e4e3a1 100644 --- a/ietf/doc/tests_ballot.py +++ b/ietf/doc/tests_ballot.py @@ -1196,9 +1196,9 @@ class BallotContentTests(TestCase): ) def _assertBallotMessage(self, q, balloter, expected): - heading = q(f'h5[id$="_{slugify(balloter.plain_name())}"]') + heading = q(f'p.h5[id$="_{slugify(balloter.plain_name())}"]') self.assertEqual(len(heading), 1) - #
is followed by a panel with the message of interest, so use next() + # is followed by a panel with the message of interest, so use next() self.assertEqual( len(heading.next().find( f'*[title="{expected}"]' @@ -1379,4 +1379,4 @@ class BallotContentTests(TestCase): q = PyQuery(content) self._assertBallotMessage(q, balloters[0], 'No email send requests for this discuss') self._assertBallotMessage(q, balloters[1], 'No ballot position send log available') - self._assertBallotMessage(q, old_balloter, 'No ballot position send log available') + self._assertBallotMessage(q, old_balloter, 'No ballot position send log available') \ No newline at end of file diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index 9a4e69383..be29535d8 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -106,7 +106,7 @@ class ChangeStateTests(TestCase): self.assertEqual(len(q('form select[name=state]')), 1) if next_states: - self.assertEqual(len(q('[type=submit][value="%s"]' % next_states[0].name)), 1) + self.assertEqual(len(q('[type=submit]:contains("%s")' % next_states[0].name)), 1) # faulty post @@ -148,7 +148,7 @@ class ChangeStateTests(TestCase): r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) - self.assertEqual(len(q('form [type=submit][value="%s"]' % first_state.name)), 1) + self.assertEqual(len(q('form [type=submit]:contains("%s")' % first_state.name)), 1) def test_pull_from_rfc_queue(self): ad = Person.objects.get(user__username="ad") @@ -1383,7 +1383,7 @@ class SubmitToIesgTests(TestCase): r = self.client.get(url) self.assertEqual(r.status_code,200) q = PyQuery(r.content) - self.assertEqual(len(q('form input[name="confirm"]')),1) + self.assertEqual(len(q('form button[name="confirm"]')),1) url = urlreverse('ietf.doc.views_draft.to_iesg', kwargs=dict(name=self.docname)) diff --git a/ietf/doc/tests_review.py b/ietf/doc/tests_review.py index 44287a6ef..7e902514d 100644 --- a/ietf/doc/tests_review.py +++ b/ietf/doc/tests_review.py @@ -38,6 +38,7 @@ from ietf.utils.mail import outbox, empty_outbox, parseaddr, on_behalf_of, get_p from ietf.utils.test_utils import login_testing_unauthorized, reload_db_objects from ietf.utils.test_utils import TestCase from ietf.utils.text import strip_prefix, xslugify +from django.utils.html import escape class ReviewTests(TestCase): def setUp(self): @@ -175,7 +176,7 @@ class ReviewTests(TestCase): self.assertContains(r, review_req.team.name) try: # FIXME-LARS - self.assertContains(r, author.name) + self.assertContains(r, escape(author.name)) except: print(r.content) self.assertContains(r, author.name) diff --git a/ietf/doc/views_ballot.py b/ietf/doc/views_ballot.py index 6841e07f5..828302e81 100644 --- a/ietf/doc/views_ballot.py +++ b/ietf/doc/views_ballot.py @@ -574,7 +574,7 @@ def lastcalltext(request, name): e.save() # make sure form has the updated text - form = LastCallTextForm(initial=dict(last_call_text=e.text)) + form = LastCallTextForm(initial=dict(last_call_text=escape(e.text))) s = doc.get_state("draft-iesg") @@ -813,7 +813,7 @@ def ballot_approvaltext(request, name): e.save() # make sure form has the updated text - form = ApprovalTextForm(initial=dict(approval_text=e.text)) + form = ApprovalTextForm(initial=dict(approval_text=escape(e.text))) can_announce = doc.get_state("draft-iesg").order > 19 need_intended_status = "" diff --git a/ietf/doc/views_charter.py b/ietf/doc/views_charter.py index 29cfa7f8e..c2b88ac47 100644 --- a/ietf/doc/views_charter.py +++ b/ietf/doc/views_charter.py @@ -556,8 +556,8 @@ def review_announcement_text(request, name): (existing, existing_new_work) = default_review_text(group, charter, by) existing.save() existing_new_work.save() - form = ReviewAnnouncementTextForm(initial=dict(announcement_text=existing.text, - new_work_text=existing_new_work.text)) + form = ReviewAnnouncementTextForm(initial=dict(announcement_text=escape(existing.text), + new_work_text=escape(existing_new_work.text))) if any(x in request.POST for x in ['send_annc_only','send_nw_only','send_both']) and form.is_valid(): if any(x in request.POST for x in ['send_annc_only','send_both']): @@ -613,7 +613,7 @@ def action_announcement_text(request, name): if "regenerate_text" in request.POST: e = default_action_text(group, charter, by) e.save() - form = ActionAnnouncementTextForm(initial=dict(announcement_text=e.text)) + form = ActionAnnouncementTextForm(initial=dict(announcement_text=escape(e.text))) if "send_text" in request.POST and form.is_valid(): parsed_msg = send_mail_preformatted(request, form.cleaned_data['announcement_text']) diff --git a/ietf/doc/views_status_change.py b/ietf/doc/views_status_change.py index 2484d8645..e7679f66b 100644 --- a/ietf/doc/views_status_change.py +++ b/ietf/doc/views_status_change.py @@ -716,7 +716,7 @@ def last_call(request, name): if "regenerate_last_call_text" in request.POST: e = generate_last_call_text(request,status_change) - form = LastCallTextForm(initial=dict(last_call_text=e.text)) + form = LastCallTextForm(initial=dict(last_call_text=escape(e.text))) return render(request, 'doc/status_change/last_call.html', dict(doc=status_change, diff --git a/ietf/group/tests_info.py b/ietf/group/tests_info.py index 988956ca3..0cb9cfc62 100644 --- a/ietf/group/tests_info.py +++ b/ietf/group/tests_info.py @@ -1527,7 +1527,7 @@ class DatelessMilestoneTests(TestCase): r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) - self.assertEqual(q('#switch-date-use-form button').attr('style'), 'display:none;') + self.assertTrue(q('#switch-date-use-form button').hasClass('d-none')) ms.group.charter.rev='00-00' ms.group.charter.save() diff --git a/ietf/ietfauth/views.py b/ietf/ietfauth/views.py index 6a087145b..892e3c646 100644 --- a/ietf/ietfauth/views.py +++ b/ietf/ietfauth/views.py @@ -744,17 +744,17 @@ def login(request, extra_context=None): logout(request) response = render(request, 'registration/missing_person.html') if require_consent: - messages.warning(request, mark_safe(""" + messages.warning(request, mark_safe(''' You have personal information associated with your account which is not derived from draft submissions or other ietf work, namely: %s. Please go - to your account profile and review your + to your account profile and review your personal information, then scoll to the bottom and check the 'confirm' checkbox and submit the form, in order to to indicate that that the provided personal information may be used and displayed within the IETF datatracker. - """ % ', '.join(require_consent))) + ''' % ', '.join(require_consent))) return response @login_required @@ -816,4 +816,4 @@ def apikey_disable(request): messages.error(request, "Key validation failed; key not disabled") else: form = KeyDeleteForm(request.GET) - return render(request, 'form.html', {'form':form, 'title':"Disable a personal API key", 'description':'', 'button':'Disable key'}) \ No newline at end of file + return render(request, 'form.html', {'form':form, 'title':"Disable a personal API key", 'description':'', 'button':'Disable key'}) diff --git a/ietf/liaisons/tests.py b/ietf/liaisons/tests.py index 7f98b8d75..4e4eaa136 100644 --- a/ietf/liaisons/tests.py +++ b/ietf/liaisons/tests.py @@ -317,7 +317,7 @@ class LiaisonManagementTests(TestCase): r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) - self.assertEqual(len(q('form input[name=do_action_taken]')), 0) + self.assertEqual(len(q('form button[name=do_action_taken]')), 0) # log in and get self.client.login(username="secretary", password="secretary+password") @@ -325,13 +325,13 @@ class LiaisonManagementTests(TestCase): r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) - self.assertEqual(len(q('form input[name=do_action_taken]')), 1) + self.assertEqual(len(q('form button[name=do_action_taken]')), 1) # mark action taken r = self.client.post(url, dict(do_action_taken="1")) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) - self.assertEqual(len(q('form input[name=do_action_taken]')), 0) + self.assertEqual(len(q('form button[name=do_action_taken]')), 0) liaison = LiaisonStatement.objects.get(id=liaison.id) self.assertTrue(liaison.action_taken) @@ -357,7 +357,7 @@ class LiaisonManagementTests(TestCase): self.assertEqual(r.status_code, 200) self.assertContains(r, liaison.title) q = PyQuery(r.content) - self.assertEqual(len(q('form input[name=approved]')), 0) + self.assertEqual(len(q('form button[name=approved]')), 0) # check the detail page / authorized self.client.login(username="ulm-liaiman", password="ulm-liaiman+password") @@ -368,7 +368,7 @@ class LiaisonManagementTests(TestCase): from ietf.liaisons.utils import can_edit_liaison user = User.objects.get(username='ulm-liaiman') self.assertTrue(can_edit_liaison(user, liaison)) - self.assertEqual(len(q('form input[name=approved]')), 1) + self.assertEqual(len(q('form button[name=approved]')), 1) # approve mailbox_before = len(outbox) diff --git a/ietf/liaisons/widgets.py b/ietf/liaisons/widgets.py index 1630f9574..d6e2fe936 100644 --- a/ietf/liaisons/widgets.py +++ b/ietf/liaisons/widgets.py @@ -18,21 +18,21 @@ class ButtonWidget(Widget): super(ButtonWidget, self).__init__(*args, **kwargs) def render(self, name, value, **kwargs): - html = '' % conditional_escape(self.show_on) - html += '' % conditional_escape(self.label) + html = '%s' % conditional_escape(self.show_on) + html += '%s' % conditional_escape(self.label) if self.require: for i in self.require: - html += '' % conditional_escape(i) + html += '%s' % 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 += '%s' % conditional_escape(required_str) + html += '' % conditional_escape(self.label) return mark_safe(html) class ShowAttachmentsWidget(Widget): def render(self, name, value, **kwargs): html = '
' % name - html += '' + html += 'No files attached' html += '
' if value and isinstance(value, QuerySet): for attachment in value: diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 12b84dfaa..408b6a29c 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -3001,7 +3001,7 @@ def ajax_get_utc(request): utc_day_offset = (naive_utc_dt.date() - dt.date()).days html = "{utc} UTC".format(utc=utc) if utc_day_offset != 0: - html = html + " {0:+d} Day".format(utc_day_offset) + html = html + ' {0:+d} Day'.format(utc_day_offset) context_data = {'timezone': timezone, 'time': time, 'utc': utc, diff --git a/ietf/secr/sreq/forms.py b/ietf/secr/sreq/forms.py index dab5225e2..ecad4ce7e 100644 --- a/ietf/secr/sreq/forms.py +++ b/ietf/secr/sreq/forms.py @@ -117,7 +117,7 @@ class SessionForm(forms.Form): self._add_widget_class(constraint_field.widget, 'wg_constraint') selector_field = forms.ChoiceField(choices=group_acronym_choices, required=False) - selector_field.widget.attrs['data-slug'] = constraintname.slug # used by onChange handler + selector_field.widget.attrs['data-slug'] = constraintname.slug # used by onchange handler self._add_widget_class(selector_field.widget, 'wg_constraint_selector') cfield_id = 'constraint_{}'.format(constraintname.slug) @@ -150,7 +150,7 @@ class SessionForm(forms.Form): field_id) ) - self.fields['joint_with_groups_selector'].widget.attrs['onChange'] = "document.form_post.joint_with_groups.value=document.form_post.joint_with_groups.value + ' ' + this.options[this.selectedIndex].value; return 1;" + self.fields['joint_with_groups_selector'].widget.attrs['onchange'] = "document.form_post.joint_with_groups.value=document.form_post.joint_with_groups.value + ' ' + this.options[this.selectedIndex].value; return 1;" self.fields["resources"].choices = [(x.pk,x.desc) for x in ResourceAssociation.objects.filter(name__used=True).order_by('name__order') ] if self.hidden: diff --git a/ietf/secr/templates/announcement/confirm.html b/ietf/secr/templates/announcement/confirm.html index 8682ebb81..7ad745a09 100644 --- a/ietf/secr/templates/announcement/confirm.html +++ b/ietf/secr/templates/announcement/confirm.html @@ -33,7 +33,7 @@ Subject: {{ message.subject }}
  • -
  • +
diff --git a/ietf/secr/templates/announcement/main.html b/ietf/secr/templates/announcement/main.html index 7ff77aa24..c88b4a240 100644 --- a/ietf/secr/templates/announcement/main.html +++ b/ietf/secr/templates/announcement/main.html @@ -13,18 +13,20 @@
{% csrf_token %} + {% if form.non_field_errors %}{{ form.non_field_errors }}{% endif %} {% for field in form.visible_fields %} - + {% endfor %} +
{{ field.label_tag }}{% if field.field.required %} *{% endif %}{{ field.label_tag }}{% if field.field.required %} *{% endif %} {{ field.errors }}{{ field }}{% if field.help_text %}
{{ field.help_text }}{% endif %}
  • -
  • +
diff --git a/ietf/secr/templates/areas/list.html b/ietf/secr/templates/areas/list.html index 0079141a7..a0ed1ae4a 100644 --- a/ietf/secr/templates/areas/list.html +++ b/ietf/secr/templates/areas/list.html @@ -17,9 +17,9 @@ - - - + + + diff --git a/ietf/secr/templates/areas/people.html b/ietf/secr/templates/areas/people.html index ba30c36c3..c5598f911 100644 --- a/ietf/secr/templates/areas/people.html +++ b/ietf/secr/templates/areas/people.html @@ -3,7 +3,7 @@ {% block title %}Areas - People{% endblock %} {% block extrahead %}{{ block.super }} - + {% endblock %} @@ -21,15 +21,15 @@
NameAcronymStatusNameAcronymStatus
{% for director in directors %} {% csrf_token %} - + + {% endif %} - + {% endfor %} @@ -40,18 +40,21 @@

{% csrf_token %}

{{ director.person.name }} {% if director.name.slug == "ad" %} Voting Enabled {% else %} -
+ + {{ form.as_table }} - + +
    -
  • +
diff --git a/ietf/secr/templates/areas/view.html b/ietf/secr/templates/areas/view.html index 559bc5574..3b9598868 100644 --- a/ietf/secr/templates/areas/view.html +++ b/ietf/secr/templates/areas/view.html @@ -16,7 +16,7 @@

Area - View

- + @@ -24,23 +24,26 @@ +
Area Acronym:{{ area.acronym }}
Area Name:{{ area.name }}
Status:{{ area.state }}
Concluded Date:{{ area.concluded_date|date:"Y-m-d" }}
Last Modified Date:{{ area.time|date:"Y-m-d" }}
Comments:{{ area.comments}}
    - -
  • -
  • -
  • + +
  • +
  • +
diff --git a/ietf/secr/templates/base_secr.html b/ietf/secr/templates/base_secr.html index e840f50e6..47b893f04 100644 --- a/ietf/secr/templates/base_secr.html +++ b/ietf/secr/templates/base_secr.html @@ -1,18 +1,18 @@ - + {% load staticfiles %} - - - + + + {% block title %}{% endblock %} - - - + + + {% if not server_mode == "production" %} - + {% endif %} {% block extrastyle %}{% endblock %} @@ -20,7 +20,7 @@ {% endblock %} - {% block blockbots %}{% endblock %} + {% block blockbots %}{% endblock %} @@ -41,6 +41,7 @@ @@ -65,6 +67,7 @@
+ {% block pretitle %}{% endblock %} {% block content_title %}{% if title %}

{{ title }}

{% endif %}{% endblock %} {% block content %} @@ -72,7 +75,7 @@ {{ content }} {% endblock %} {% block sidebar %}{% endblock %} -
+
diff --git a/ietf/secr/templates/base_secr_bootstrap.html b/ietf/secr/templates/base_secr_bootstrap.html index c6ee26c71..2eee566a1 100644 --- a/ietf/secr/templates/base_secr_bootstrap.html +++ b/ietf/secr/templates/base_secr_bootstrap.html @@ -1,17 +1,17 @@ - + {% load staticfiles %} - - - + + + {% block title %}{% endblock %} - - - - + + + + {% if not server_mode == "production" %} - + {% endif %} {% block extrastyle %}{% endblock %} @@ -19,7 +19,7 @@ {% endblock %} - {% block blockbots %}{% endblock %} + {% block blockbots %}{% endblock %} @@ -40,6 +40,7 @@ @@ -64,6 +66,7 @@
+ {% block pretitle %}{% endblock %} {% block content_title %}{% if title %}

{{ title }}

{% endif %}{% endblock %} {% block content %} @@ -71,7 +74,7 @@ {{ content }} {% endblock %} {% block sidebar %}{% endblock %} -
+
diff --git a/ietf/secr/templates/base_site.html b/ietf/secr/templates/base_site.html index 3408bb34f..5a15244ab 100644 --- a/ietf/secr/templates/base_site.html +++ b/ietf/secr/templates/base_site.html @@ -7,6 +7,7 @@ {% block branding %} + +

{% if user|has_role:"Secretariat" %} Secretariat Dashboard {% else %} IETF Dashboard {% endif %}

@@ -16,6 +17,7 @@
{% endblock %} @@ -31,7 +33,7 @@
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/secr/templates/base_site_bootstrap.html b/ietf/secr/templates/base_site_bootstrap.html index b8445d25d..d50e0cb3e 100644 --- a/ietf/secr/templates/base_site_bootstrap.html +++ b/ietf/secr/templates/base_site_bootstrap.html @@ -7,6 +7,7 @@ {% block branding %} + +

{% if user|has_role:"Secretariat" %} Secretariat Dashboard {% else %} WG Chair Dashboard {% endif %}

@@ -16,6 +17,7 @@
{% endblock %} @@ -31,7 +33,7 @@ -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/secr/templates/confirm_cancel.html b/ietf/secr/templates/confirm_cancel.html index c84671239..6bae631a7 100644 --- a/ietf/secr/templates/confirm_cancel.html +++ b/ietf/secr/templates/confirm_cancel.html @@ -16,7 +16,7 @@

- + Take me back

diff --git a/ietf/secr/templates/confirm_delete.html b/ietf/secr/templates/confirm_delete.html index be89ef75a..ccfc7b1c2 100644 --- a/ietf/secr/templates/confirm_delete.html +++ b/ietf/secr/templates/confirm_delete.html @@ -16,7 +16,7 @@

- + Take me back

diff --git a/ietf/secr/templates/console/main.html b/ietf/secr/templates/console/main.html index 8fdcf60e6..5aadefc55 100644 --- a/ietf/secr/templates/console/main.html +++ b/ietf/secr/templates/console/main.html @@ -12,7 +12,9 @@

Console

- + + +
Latest DocEvent{{ latest_docevent }}
Latest DocEvent{{ latest_docevent }}
diff --git a/ietf/secr/templates/groups/people.html b/ietf/secr/templates/groups/people.html index 113f89c07..ac51beafc 100644 --- a/ietf/secr/templates/groups/people.html +++ b/ietf/secr/templates/groups/people.html @@ -4,7 +4,7 @@ {% block title %}Groups - People{% endblock %} {% block extrahead %}{{ block.super }} - + {% endblock %} @@ -22,10 +22,10 @@ - - - - + + + + {% if group.role_set.all %} @@ -49,19 +49,21 @@ {{ form.non_field_errors }} {{ form.group_acronym }}
RoleNameEmailActionRoleNameEmailAction
+ - - - - + + + + +
{{ form.name.errors }}{{ form.name }}{{ form.person.errors }}{{ form.person }}{% if form.person.help_text %}
{{ form.person.help_text }}{% endif %}
{{ form.email.errors }}{{ form.email }}{% if form.email.help_text %}
{{ form.email.help_text }}{% endif %}
{{ form.name.errors }}{{ form.name }}{{ form.person.errors }}{{ form.person }}{% if form.person.help_text %}
{{ form.person.help_text }}{% endif %}
{{ form.email.errors }}{{ form.email }}{% if form.email.help_text %}
{{ form.email.help_text }}{% endif %}
diff --git a/ietf/secr/templates/groups/search.html b/ietf/secr/templates/groups/search.html index ce70ad50b..4a1de0e4a 100644 --- a/ietf/secr/templates/groups/search.html +++ b/ietf/secr/templates/groups/search.html @@ -19,7 +19,10 @@

Groups - Search

{% csrf_token %} - {{ form.as_table }} + + + {{ form.as_table }} +
{% include "includes/buttons_search.html" %} diff --git a/ietf/secr/templates/groups/view.html b/ietf/secr/templates/groups/view.html index 6ec9be502..a0509b063 100644 --- a/ietf/secr/templates/groups/view.html +++ b/ietf/secr/templates/groups/view.html @@ -18,7 +18,7 @@

Groups - View

- + @@ -56,6 +56,7 @@ {% endif %} +
Group Acronym:{{ group.acronym }}
Group Name:{{ group.name }}
Status:{{ group.state }}
Comments:{{ group.comments }}
Last Modified Date:{{ group.time }}
@@ -109,11 +110,11 @@
    -
  • -
  • +
  • +
  • {% comment %} -
  • -
  • +
  • +
  • {% endcomment %}
diff --git a/ietf/secr/templates/includes/activities.html b/ietf/secr/templates/includes/activities.html index 723e65471..3e79c9aed 100644 --- a/ietf/secr/templates/includes/activities.html +++ b/ietf/secr/templates/includes/activities.html @@ -3,10 +3,10 @@ - - - - + + + + diff --git a/ietf/secr/templates/includes/buttons_back.html b/ietf/secr/templates/includes/buttons_back.html index 8af99be17..cd6a89adf 100644 --- a/ietf/secr/templates/includes/buttons_back.html +++ b/ietf/secr/templates/includes/buttons_back.html @@ -1,5 +1,5 @@
    -
  • +
diff --git a/ietf/secr/templates/includes/group_search_results.html b/ietf/secr/templates/includes/group_search_results.html index 81f043083..fb8b2b06e 100644 --- a/ietf/secr/templates/includes/group_search_results.html +++ b/ietf/secr/templates/includes/group_search_results.html @@ -1,11 +1,11 @@
DateTimeActionNameDateTimeActionName
- - - - - + + + + + diff --git a/ietf/secr/templates/includes/proceedings_functions.html b/ietf/secr/templates/includes/proceedings_functions.html index 4dab4cb56..33e11a148 100644 --- a/ietf/secr/templates/includes/proceedings_functions.html +++ b/ietf/secr/templates/includes/proceedings_functions.html @@ -2,12 +2,12 @@

Use this to process meeting materials files that have been converted to PDF and uploaded to the server.

  • - +   {{ ppt_count }} PowerPoint files waiting to be converted

Use this to input session recording information.

    -
  • +
diff --git a/ietf/secr/templates/includes/search_results_table.html b/ietf/secr/templates/includes/search_results_table.html index ba7dfd787..668dc23b6 100644 --- a/ietf/secr/templates/includes/search_results_table.html +++ b/ietf/secr/templates/includes/search_results_table.html @@ -1,9 +1,9 @@
Group NameGroup AcronymStatusTypeMeeting ScheduledGroup NameGroup AcronymStatusTypeMeeting Scheduled
- - - + + + {% if results %} diff --git a/ietf/secr/templates/includes/sessions_request_form.html b/ietf/secr/templates/includes/sessions_request_form.html index 1e596104e..74327d480 100755 --- a/ietf/secr/templates/includes/sessions_request_form.html +++ b/ietf/secr/templates/includes/sessions_request_form.html @@ -5,7 +5,7 @@ {{ form.non_field_errors }} {% endif %}
NameEmailIDNameEmailID
- + @@ -31,6 +31,7 @@ @@ -77,22 +79,23 @@ + @@ -106,9 +109,10 @@ {% endif %} - + +
Working Group Name:{{ group.name }} ({{ group.acronym }})
Area Name:{% if group.parent %}{{ group.parent.name }} ({{ group.parent.acronym }}){% endif %}
Number of Sessions:*{{ form.num_session.errors }}{{ form.num_session }}
Conflicts to Avoid: + @@ -40,7 +41,7 @@ {% if forloop.first %}{% endif %} @@ -64,6 +65,7 @@ +
Other WGs that included {{ group.name }} in their conflict lists: {{ session_conflicts.inbound|default:"None" }}WG Sessions:
You may select multiple WGs within each category
{{ cname|title }} {{ cselector }} -
+
{{ cfield.errors }}{{ cfield }}
BOF Sessions: If the sessions can not be found in the fields above, please enter free form requests in the Special Requests field below.
Times during which this WG can not meet: {{ form.timeranges.errors }}{{ form.timeranges }}
- Plan session adjacent with another WG:
+ Plan session adjacent with another WG:
(Immediately before or after another WG, no break in between, in the same room.)
{{ form.adjacent_with_wg.errors }}{{ form.adjacent_with_wg }}
- Joint session with:
+ Joint session with:
(To request one session for multiple WGs together.)
{{ form.joint_with_groups_selector }} -
+
{{ form.joint_with_groups.errors }}{{ form.joint_with_groups }}
Special Requests:
 
i.e. restrictions on meeting times / days, etc.
(limit 200 characters)
Special Requests:
 
i.e. restrictions on meeting times / days, etc.
(limit 200 characters)
{{ form.comments.errors }}{{ form.comments }}
diff --git a/ietf/secr/templates/includes/sessions_request_view.html b/ietf/secr/templates/includes/sessions_request_view.html index 5d30e4d64..3854651d3 100644 --- a/ietf/secr/templates/includes/sessions_request_view.html +++ b/ietf/secr/templates/includes/sessions_request_view.html @@ -1,6 +1,6 @@ {% load ams_filters %} - + @@ -15,9 +15,11 @@ @@ -57,4 +59,5 @@ {% endif %} -
Working Group Name:{{ group.name }} ({{ group.acronym }})
Area Name:{{ group.parent }}
Number of Sessions Requested:{% if session.third_session %}3{% else %}{{ session.num_session }}{% endif %}
{% if session_conflicts.outbound %} + {% for conflict in session_conflicts.outbound %} {% endfor %} +
{{ conflict.name|title }}: {{ conflict.groups }}
{% else %}None{% endif %}
Special Requests:{{ session.comments }}
\ 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 d2faf02c9..cc7858e1f 100755 --- a/ietf/secr/templates/includes/upload_footer.html +++ b/ietf/secr/templates/includes/upload_footer.html @@ -2,5 +2,5 @@
  • Instructions.
  • If you require assistance in using this tool, or wish to report a bug, then please send a message to ietf-action@ietf.org.
  • To submit your materials via email, please send agendas to agenda@ietf.org and minutes/presentation slides to proceedings@ietf.org.
  • -
  • Note: Normal session materials materials management is now performed using the {% if meeting.number %}{% endif %}materials page{% if meeting.number %}{% endif %} - \ No newline at end of file +
  • Note: Normal session materials materials management is now performed using the {% if meeting.number %}{% endif %}materials page{% if meeting.number %}{% endif %}
  • + diff --git a/ietf/secr/templates/main.html b/ietf/secr/templates/main.html index 1419579e2..dcda4718d 100644 --- a/ietf/secr/templates/main.html +++ b/ietf/secr/templates/main.html @@ -7,9 +7,10 @@ {% if user|has_role:"Secretariat" %} + + {% else %} + + {% endif %} diff --git a/ietf/secr/templates/meetings/add.html b/ietf/secr/templates/meetings/add.html index 64259bb97..12b5cd47b 100644 --- a/ietf/secr/templates/meetings/add.html +++ b/ietf/secr/templates/meetings/add.html @@ -18,7 +18,10 @@

    Proceedings - Add

    {% csrf_token %} + + {{ form.as_table }} +
    {% include "includes/buttons_save_cancel.html"%} diff --git a/ietf/secr/templates/meetings/base_rooms_times.html b/ietf/secr/templates/meetings/base_rooms_times.html index f03eaafaa..dc08e9eb5 100644 --- a/ietf/secr/templates/meetings/base_rooms_times.html +++ b/ietf/secr/templates/meetings/base_rooms_times.html @@ -4,7 +4,7 @@ {% block title %}Meetings{% endblock %} {% block extrahead %}{{ block.super }} - + diff --git a/ietf/secr/templates/meetings/blue_sheet.html b/ietf/secr/templates/meetings/blue_sheet.html index f3b01eb75..d67efd9f6 100644 --- a/ietf/secr/templates/meetings/blue_sheet.html +++ b/ietf/secr/templates/meetings/blue_sheet.html @@ -21,8 +21,8 @@

    Use this to generate blue sheets for meeting sessions.

    • -
      {% csrf_token %} - + {% csrf_token %} +
        Last run: {% if last_run %} @@ -35,15 +35,14 @@

      Use this to download the blue sheets from the server.

      • - +
      -
      +

      Use the session details page for a group to upload scanned bluesheets. The session details pages for a group can be reached from the meeting's materials page.

    {% endblock %} - diff --git a/ietf/secr/templates/meetings/edit_meeting.html b/ietf/secr/templates/meetings/edit_meeting.html index dc1599e96..0d7159346 100644 --- a/ietf/secr/templates/meetings/edit_meeting.html +++ b/ietf/secr/templates/meetings/edit_meeting.html @@ -19,7 +19,10 @@
    {% csrf_token %}

    Meetings - Edit

    + + {{ form.as_table }} +
    {% include "includes/buttons_save_cancel.html"%} @@ -28,4 +31,3 @@
    {% endblock %} - diff --git a/ietf/secr/templates/meetings/main.html b/ietf/secr/templates/meetings/main.html index 404603dc0..e4cfa5ce8 100755 --- a/ietf/secr/templates/meetings/main.html +++ b/ietf/secr/templates/meetings/main.html @@ -29,9 +29,12 @@
    {% csrf_token %} - {{ form }} + + + {{ form.as_table }} +
    - + diff --git a/ietf/secr/templates/meetings/misc_session_edit.html b/ietf/secr/templates/meetings/misc_session_edit.html index cb47b156a..af4d1bdbd 100755 --- a/ietf/secr/templates/meetings/misc_session_edit.html +++ b/ietf/secr/templates/meetings/misc_session_edit.html @@ -7,7 +7,10 @@

    Session: {{ slot.name }}

    {% csrf_token %} + + {{ form.as_table }} +
    diff --git a/ietf/secr/templates/meetings/misc_sessions.html b/ietf/secr/templates/meetings/misc_sessions.html index 16c3a86c2..9f9eb0f7a 100644 --- a/ietf/secr/templates/meetings/misc_sessions.html +++ b/ietf/secr/templates/meetings/misc_sessions.html @@ -9,17 +9,17 @@ - - - - - - - - - - - + + + + + + + + + + + @@ -51,21 +51,23 @@ {% else %}

    No timeslots exist for this meeting. Add rooms with the "duplicate timeslots" option enabled to copy timeslots from the last meeting.

    {% endif %} -

    +

    {% csrf_token %}
    DayTimeNameShort NameGroupLocationShow Loc.TypeDayTimeNameShort NameGroupLocationShow Loc.Type
    - + + {{ form.as_table }} - + +
    diff --git a/ietf/secr/templates/meetings/notifications.html b/ietf/secr/templates/meetings/notifications.html index dd96b779a..bf7099577 100644 --- a/ietf/secr/templates/meetings/notifications.html +++ b/ietf/secr/templates/meetings/notifications.html @@ -19,8 +19,8 @@

    IETF {{ meeting.number }} - Send Notifications

    {% csrf_token %}

    The following groups are in state 'schedw' (Waiting for scheduling). Pressing the Send Now button will change them to be in state 'sched' (Scheduled), and send email notifications each of them that their session has been scheduled. The last time this button was pressed was {{ last_notice.time|date:"Y-m-d" }}:

    -

    {% if not groups %}(none){% endif %}{% for group in groups %}{{ group.acronym }}{% if not forloop.last %}, {% endif %}{% endfor %}

    - +

    {% if not groups %}(none){% endif %}{% for group in groups %}{{ group.acronym }}{% if not forloop.last %}, {% endif %}{% endfor %}

    +
    {% include "includes/buttons_back.html" %} @@ -28,26 +28,3 @@ {% endblock %} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ietf/secr/templates/meetings/regular_session_edit.html b/ietf/secr/templates/meetings/regular_session_edit.html index 89531c235..479cef8af 100644 --- a/ietf/secr/templates/meetings/regular_session_edit.html +++ b/ietf/secr/templates/meetings/regular_session_edit.html @@ -20,24 +20,26 @@
    {% csrf_token %}
    - + - + - + - + - + - {{ form }} + + {{ form.as_table }} +
    Day:Day: {% if timeslot %}{{ timeslot.time|date:"l" }}{% endif %}
    Time:Time: {% if timeslot %}{{ timeslot.time|time:"H:i" }}{% endif %}
    Room:Room: {% if timeslot %}{{ timeslot.location.name }}{% endif %}
    Status:Status: {{ current_status_name }}
    diff --git a/ietf/secr/templates/meetings/rooms.html b/ietf/secr/templates/meetings/rooms.html index d707f5ee9..ea1deedb2 100644 --- a/ietf/secr/templates/meetings/rooms.html +++ b/ietf/secr/templates/meetings/rooms.html @@ -8,6 +8,7 @@
    @@ -73,7 +75,7 @@
      -
    • +
    diff --git a/ietf/secr/templates/roles/roles.html b/ietf/secr/templates/roles/roles.html index 5d0d86e17..615452a48 100644 --- a/ietf/secr/templates/roles/roles.html +++ b/ietf/secr/templates/roles/roles.html @@ -1,10 +1,10 @@ - - - - + + + + diff --git a/ietf/secr/templates/rolodex/add.html b/ietf/secr/templates/rolodex/add.html index 7e83cf313..08a979866 100644 --- a/ietf/secr/templates/rolodex/add.html +++ b/ietf/secr/templates/rolodex/add.html @@ -27,7 +27,7 @@
      -
    • +
    @@ -40,8 +40,10 @@

    Name

    {% csrf_token %}
    RoleNameEmailActionRoleNameEmailAction
    - + + {{ form.as_table }} +
    {% include "includes/buttons_proceed.html" %} diff --git a/ietf/secr/templates/rolodex/add_proceed.html b/ietf/secr/templates/rolodex/add_proceed.html index bbdcbe704..0251cc44d 100644 --- a/ietf/secr/templates/rolodex/add_proceed.html +++ b/ietf/secr/templates/rolodex/add_proceed.html @@ -8,13 +8,16 @@ {% endblock %} {% block content %} -

    Adding {{ name }}

    +

    Adding {{ name }}

    {% csrf_token %}
    -

    Rolodex - Add

    +

    Rolodex - Add

    + + {{ form.as_table }} +
    diff --git a/ietf/secr/templates/rolodex/delete.html b/ietf/secr/templates/rolodex/delete.html index 4049bae56..061e28298 100644 --- a/ietf/secr/templates/rolodex/delete.html +++ b/ietf/secr/templates/rolodex/delete.html @@ -23,7 +23,7 @@ {% csrf_token %} - - + + {% endblock %} diff --git a/ietf/secr/templates/rolodex/edit.html b/ietf/secr/templates/rolodex/edit.html index 90d716dcb..ee7a4db5e 100644 --- a/ietf/secr/templates/rolodex/edit.html +++ b/ietf/secr/templates/rolodex/edit.html @@ -18,7 +18,10 @@

    Rolodex - Edit

    + + {{ person_form.as_table }} +
    @@ -29,10 +32,10 @@ - + {% for field in email_formset.forms.0 %} {% if not field.is_hidden %} - + {% endif %} {% endfor %} diff --git a/ietf/secr/templates/rolodex/search.html b/ietf/secr/templates/rolodex/search.html index f2e5d90b0..7dcaf2824 100644 --- a/ietf/secr/templates/rolodex/search.html +++ b/ietf/secr/templates/rolodex/search.html @@ -16,8 +16,10 @@

    Rolodex - Search Add

    {% csrf_token %}
    {{ field.label }}{{ field.label }}
    - + + {{ form.as_table }} +
    {% include "includes/buttons_search.html" %} diff --git a/ietf/secr/templates/rolodex/view.html b/ietf/secr/templates/rolodex/view.html index b6e953a20..738ab3361 100644 --- a/ietf/secr/templates/rolodex/view.html +++ b/ietf/secr/templates/rolodex/view.html @@ -13,27 +13,28 @@ - + - + {% for email in person.emails %} {% endfor %} +
    Name:{{ person.name }}
    Ascii Name:{{ person.ascii }}
    Short Name:{{ person.ascii_short }}
    Aliases:{% for alias in person.alias_set.all %}{% if not forloop.first %}, {% endif %}{{ alias.name }}{% endfor %}
    Aliases:{% for alias in person.alias_set.all %}{% if not forloop.first %}, {% endif %}{{ alias.name }}{% endfor %}
    User:{{ person.user }}
    Email {{ forloop.counter }}:{{ email }}
    -
    +