From bbf088e18bc9be3594ffa8a48d2c91464783dce7 Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Tue, 8 Feb 2022 17:29:15 +0000 Subject: [PATCH] Hopefully the final check-ins. - Legacy-Id: 19909 --- docker/configs/settings_local.py | 20 +- ietf/doc/fields.py | 9 +- ietf/doc/templatetags/ietf_filters.py | 25 +- ietf/doc/tests.py | 2 +- ietf/doc/tests_bofreq.py | 6 +- ietf/doc/tests_js.py | 10 +- ietf/doc/views_search.py | 2 +- ietf/iesg/agenda.py | 6 +- ietf/meeting/tests_js.py | 8 +- ietf/meeting/tests_views.py | 6 +- ietf/person/templatetags/person_filters.py | 68 +- ietf/static/css/ietf.scss | 6 +- ietf/static/js/ietf.js | 2 +- ietf/static/js/room-view.js | 130 +-- ietf/static/js/select2.js | 5 +- ietf/static/js/week-view.js | 12 +- ietf/templates/401.html | 1 - ietf/templates/403.html | 1 - ietf/templates/404.html | 1 - ietf/templates/500.html | 1 - .../admin/group/group/change_form.html | 1 - .../admin/group/group/change_list.html | 1 - .../admin/group/group/send_sdo_reminder.html | 1 - ietf/templates/api/index.html | 1 - ietf/templates/api/openid-issuer.html | 1 - ietf/templates/base.html | 25 +- ietf/templates/base/menu.html | 1 - ietf/templates/base/menu_active_groups.html | 1 - ietf/templates/base/menu_user.html | 1 - ietf/templates/base/menu_wg.html | 1 - ietf/templates/community/list_menu.html | 1 - ietf/templates/community/manage_list.html | 1 - ietf/templates/community/subscription.html | 1 - ietf/templates/community/track_document.html | 1 - .../templates/community/untrack_document.html | 1 - ietf/templates/community/view_list.html | 1 - ietf/templates/cookies/settings.html | 1 - ietf/templates/debug.html | 1 - ietf/templates/doc/add_comment.html | 1 - .../doc/add_sessionpresentation.html | 1 - ietf/templates/doc/ballot/approvaltext.html | 1 - ietf/templates/doc/ballot/approve_ballot.html | 1 - .../doc/ballot/approve_downrefs.html | 1 - ietf/templates/doc/ballot/ballot_issued.html | 1 - ietf/templates/doc/ballot/clear_ballot.html | 1 - ietf/templates/doc/ballot/defer_ballot.html | 1 - ietf/templates/doc/ballot/edit_position.html | 1 - .../doc/ballot/irsg_ballot_approve.html | 1 - .../doc/ballot/irsg_ballot_close.html | 1 - ietf/templates/doc/ballot/lastcalltext.html | 1 - ietf/templates/doc/ballot/rfceditornote.html | 1 - .../doc/ballot/send_ballot_comment.html | 1 - ietf/templates/doc/ballot/undefer_ballot.html | 1 - ietf/templates/doc/ballot/writeupnotes.html | 1 - ietf/templates/doc/ballot_popup.html | 1 - ietf/templates/doc/bofreq/bof_requests.html | 1 - ietf/templates/doc/bofreq/change_editors.html | 1 - .../doc/bofreq/change_responsible.html | 1 - ietf/templates/doc/bofreq/new_bofreq.html | 1 - ietf/templates/doc/bofreq/upload_content.html | 1 - ietf/templates/doc/change_ad.html | 1 - ietf/templates/doc/change_shepherd.html | 1 - ietf/templates/doc/change_shepherd_email.html | 1 - ietf/templates/doc/change_state.html | 1 - ietf/templates/doc/change_title.html | 1 - .../doc/charter/action_announcement_text.html | 1 - ietf/templates/doc/charter/approve.html | 1 - ietf/templates/doc/charter/ballot_issued.html | 1 - .../doc/charter/ballot_writeupnotes.html | 1 - ietf/templates/doc/charter/change_ad.html | 1 - ietf/templates/doc/charter/change_state.html | 1 - ietf/templates/doc/charter/change_title.html | 1 - .../doc/charter/review_announcement_text.html | 1 - ietf/templates/doc/charter/submit.html | 1 - .../doc/conflict_review/approve.html | 1 - ietf/templates/doc/conflict_review/start.html | 1 - .../templates/doc/conflict_review/submit.html | 1 - ietf/templates/doc/document_ballot.html | 1 - .../doc/document_ballot_content.html | 1 - ietf/templates/doc/document_bofreq.html | 5 +- ietf/templates/doc/document_charter.html | 13 +- .../doc/document_conflict_review.html | 3 +- ietf/templates/doc/document_draft.html | 56 +- ietf/templates/doc/document_email.html | 7 +- ietf/templates/doc/document_history.html | 3 +- ietf/templates/doc/document_html.html | 1 - ietf/templates/doc/document_material.html | 3 +- .../templates/doc/document_referenced_by.html | 1 - ietf/templates/doc/document_references.html | 1 - ietf/templates/doc/document_review.html | 1 - .../templates/doc/document_status_change.html | 3 +- ietf/templates/doc/document_top.html | 1 - ietf/templates/doc/document_writeup.html | 1 - ietf/templates/doc/downref.html | 1 - ietf/templates/doc/downref_add.html | 1 - .../doc/draft/add_iana_experts_comment.html | 1 - ietf/templates/doc/draft/adopt_draft.html | 1 - ietf/templates/doc/draft/change_ad.html | 1 - .../templates/doc/draft/change_consensus.html | 1 - .../doc/draft/change_iana_state.html | 1 - .../doc/draft/change_intended_status.html | 1 - ietf/templates/doc/draft/change_replaces.html | 1 - .../doc/draft/change_shepherd_writeup.html | 1 - ietf/templates/doc/draft/change_state.html | 1 - ietf/templates/doc/draft/change_stream.html | 1 - .../doc/draft/change_stream_state.html | 1 - ietf/templates/doc/draft/edit_iesg_note.html | 1 - ietf/templates/doc/draft/edit_info.html | 1 - .../doc/draft/last_call_requested.html | 1 - ietf/templates/doc/draft/make_last_call.html | 1 - ietf/templates/doc/draft/release_draft.html | 1 - .../doc/draft/request_publication.html | 1 - .../doc/draft/request_resurrect.html | 1 - ietf/templates/doc/draft/resurrect.html | 1 - .../doc/draft/review_possibly_replaces.html | 1 - .../draft/rfceditor_note_duplicate_error.html | 1 - .../rfceditor_post_approved_draft_failed.html | 1 - ietf/templates/doc/drafts_for_ad.html | 1 - .../templates/doc/drafts_in_iesg_process.html | 1 - ietf/templates/doc/drafts_in_last_call.html | 1 - ietf/templates/doc/edit_action_holders.html | 1 - ietf/templates/doc/edit_authors.html | 1 - ietf/templates/doc/edit_field.html | 1 - ietf/templates/doc/edit_notify.html | 1 - .../doc/edit_sessionpresentation.html | 1 - ietf/templates/doc/edit_telechat_date.html | 1 - ietf/templates/doc/email_aliases.html | 1 - ietf/templates/doc/frontpage.html | 1 - ietf/templates/doc/htmlized_base.html | 1 - ietf/templates/doc/index_active_drafts.html | 1 - ietf/templates/doc/index_all_drafts.html | 1 - ietf/templates/doc/irsg_ballot_status.html | 1 - .../doc/material/all_presentations.html | 1 - .../doc/material/choose_material_type.html | 1 - .../templates/doc/material/edit_material.html | 1 - .../doc/material/presentations-row.html | 1 - ietf/templates/doc/recent_drafts.html | 1 - ietf/templates/doc/relationship_help.html | 1 - ietf/templates/doc/remind_action_holders.html | 1 - .../doc/remove_sessionpresentation.html | 1 - .../templates/doc/review/assign_reviewer.html | 1 - ietf/templates/doc/review/close_request.html | 1 - .../templates/doc/review/complete_review.html | 1 - .../doc/review/edit_request_comment.html | 1 - .../doc/review/edit_request_deadline.html | 1 - .../mark_reviewer_assignment_no_response.html | 1 - .../review/reject_reviewer_assignment.html | 1 - ietf/templates/doc/review/request_info.html | 11 +- ietf/templates/doc/review/request_review.html | 1 - ietf/templates/doc/review/review_request.html | 1 - .../templates/doc/review/review_wish_add.html | 1 - .../doc/review/review_wishes_remove.html | 1 - .../doc/review/submit_unsolicited_review.html | 1 - .../review/withdraw_reviewer_assignment.html | 1 - .../doc/review_assignment_summary.html | 26 +- ietf/templates/doc/revisions_list.html | 1 - ietf/templates/doc/search/search.html | 1 - ietf/templates/doc/search/search_form.html | 1 - .../doc/search/search_result_row.html | 5 +- ietf/templates/doc/search/search_results.html | 1 - ietf/templates/doc/search/status_columns.html | 1 - ietf/templates/doc/shepherd_writeup.html | 1 - ietf/templates/doc/state_help.html | 1 - ietf/templates/doc/stats/highstock.html | 1 - ietf/templates/doc/status_change/approve.html | 1 - .../doc/status_change/edit_related_rows.html | 1 - .../doc/status_change/edit_relations.html | 1 - .../doc/status_change/last_call.html | 1 - .../doc/status_change/make_last_call.html | 1 - ietf/templates/doc/status_change/start.html | 1 - .../doc/status_change/status_changes.html | 1 - ietf/templates/doc/status_change/submit.html | 1 - ietf/templates/doc/submit_to_iesg.html | 1 - .../doc/yang-check-modal-overlay.html | 1 - ietf/templates/email_failed.html | 1 - ietf/templates/form.html | 1 - ietf/templates/googlea30ad1dacffb5e5b.html | 1 - ietf/templates/group/active_adm.html | 1 - ietf/templates/group/active_ags.html | 1 - ietf/templates/group/active_areas.html | 1 - ietf/templates/group/active_dirs.html | 1 - ietf/templates/group/active_groups.html | 1 - ietf/templates/group/active_iabgroups.html | 1 - ietf/templates/group/active_rags.html | 1 - ietf/templates/group/active_review_dirs.html | 1 - ietf/templates/group/active_rgs.html | 1 - ietf/templates/group/active_teams.html | 1 - ietf/templates/group/active_wgs.html | 1 - ietf/templates/group/add_comment.html | 1 - ietf/templates/group/all_photos.html | 1 - ietf/templates/group/all_status.html | 1 - ietf/templates/group/bofs.html | 3 +- .../change_review_secretary_settings.html | 1 - .../group/change_reviewer_settings.html | 1 - ietf/templates/group/chartering_groups.html | 1 - ietf/templates/group/conclude.html | 1 - ietf/templates/group/concluded_groups.html | 1 - ietf/templates/group/customize_workflow.html | 1 - ietf/templates/group/edit.html | 1 - ietf/templates/group/edit_milestones.html | 5 +- ietf/templates/group/email.html | 1 - ietf/templates/group/email_aliases.html | 1 - .../group/email_open_review_assignments.html | 1 - .../group/feed_item_description.html | 1 - ietf/templates/group/group_about.html | 20 +- .../group/group_about_rendertest.html | 1 - ietf/templates/group/group_about_status.html | 1 - .../group/group_about_status_edit.html | 1 - .../group/group_about_status_meeting.html | 1 - ietf/templates/group/group_base.html | 7 +- ietf/templates/group/group_documents.html | 1 - ietf/templates/group/group_photos.html | 1 - ietf/templates/group/history.html | 1 - ietf/templates/group/index.html | 1 - .../group/manage_review_requests.html | 3 +- ietf/templates/group/materials.html | 1 - ietf/templates/group/meetings-row.html | 1 - ietf/templates/group/meetings.html | 3 +- ietf/templates/group/milestone_form.html | 1 - ietf/templates/group/milestones.html | 5 +- .../group/reset_charter_milestones.html | 1 - ietf/templates/group/reset_next_reviewer.html | 1 - ietf/templates/group/review_requests.html | 27 +- ietf/templates/group/reviewer_overview.html | 1 - ietf/templates/group/stream_documents.html | 1 - ietf/templates/group/stream_edit.html | 1 - ietf/templates/help/personal-information.html | 2 +- ietf/templates/help/state_index.html | 1 - ietf/templates/help/states.html | 1 - ietf/templates/iesg/agenda.html | 1 - ietf/templates/iesg/agenda_charter.html | 1 - ietf/templates/iesg/agenda_conflict_doc.html | 1 - ietf/templates/iesg/agenda_doc.html | 1 - ietf/templates/iesg/agenda_documents.html | 1 - ietf/templates/iesg/discusses.html | 1 - .../templates/iesg/feed_item_description.html | 1 - .../iesg/milestones_needing_review.html | 1 - ietf/templates/iesg/moderator_charter.html | 1 - .../iesg/moderator_conflict_doc.html | 1 - ietf/templates/iesg/moderator_doc.html | 1 - ietf/templates/iesg/moderator_package.html | 1 - ietf/templates/iesg/nav.html | 1 - ietf/templates/iesg/past_documents.html | 1 - ietf/templates/iesg/photos.html | 1 - ietf/templates/iesg/review_decisions.html | 1 - ietf/templates/ietfauth/apikeys.html | 1 - ietf/templates/ietfauth/edit_field.html | 1 - ietf/templates/ietfauth/review_overview.html | 1 - ietf/templates/ietfauth/testemail.html | 1 - ietf/templates/ietfauth/whitelist_form.html | 1 - ietf/templates/ipr/add_comment.html | 1 - ietf/templates/ipr/add_email.html | 1 - ietf/templates/ipr/admin_list.html | 1 - ietf/templates/ipr/details_edit.html | 1 - ietf/templates/ipr/details_history.html | 3 +- ietf/templates/ipr/details_tabs.html | 1 - ietf/templates/ipr/details_view.html | 1 - ietf/templates/ipr/disclosure.html | 1 - ietf/templates/ipr/email.html | 1 - ietf/templates/ipr/ipr_intro.html | 1 - ietf/templates/ipr/ipr_table.html | 1 - ietf/templates/ipr/list.html | 1 - ietf/templates/ipr/notify.html | 1 - ietf/templates/ipr/removed.html | 1 - ietf/templates/ipr/search.html | 1 - ietf/templates/ipr/search_doc_list.html | 1 - ietf/templates/ipr/search_doc_result.html | 1 - .../templates/ipr/search_doctitle_result.html | 1 - ietf/templates/ipr/search_error.html | 1 - ietf/templates/ipr/search_form.html | 1 - ietf/templates/ipr/search_holder_result.html | 1 - .../templates/ipr/search_iprtitle_result.html | 1 - ietf/templates/ipr/search_patent_result.html | 1 - ietf/templates/ipr/search_result.html | 1 - ietf/templates/ipr/search_wg_result.html | 1 - ietf/templates/ipr/state.html | 1 - ietf/templates/ipr/submitted.html | 1 - ietf/templates/liaisons/add_comment.html | 1 - ietf/templates/liaisons/detail.html | 1 - ietf/templates/liaisons/detail_history.html | 1 - ietf/templates/liaisons/detail_tabs.html | 1 - ietf/templates/liaisons/edit.html | 3 +- ietf/templates/liaisons/edit_attachment.html | 1 - .../liaisons/feed_item_description.html | 1 - ietf/templates/liaisons/field_help.html | 1 - ietf/templates/liaisons/guide_from_ietf.html | 1 - ietf/templates/liaisons/guide_to_ietf.html | 1 - ietf/templates/liaisons/help.html | 1 - ietf/templates/liaisons/liaison_base.html | 1 - ietf/templates/liaisons/liaison_table.html | 3 +- ietf/templates/liaisons/liaison_title.html | 1 - ietf/templates/liaisons/search_form.html | 1 - .../mailinglists/group_archives.html | 1 - ietf/templates/mailinglists/nonwg.html | 1 - ietf/templates/mailtrigger/recipient.html | 1 - ietf/templates/mailtrigger/trigger.html | 1 - .../templates/meeting/add_session_drafts.html | 1 - ietf/templates/meeting/agenda.html | 6 +- ietf/templates/meeting/agenda_by_room.html | 1 - ietf/templates/meeting/agenda_by_type.html | 1 - ietf/templates/meeting/agenda_filter.html | 1 - .../agenda_personalize_buttonlist.html | 1 - .../meeting/approve_proposed_slides.html | 1 - ietf/templates/meeting/create_timeslot.html | 1 - ietf/templates/meeting/delete_schedule.html | 1 - ietf/templates/meeting/diff_schedules.html | 1 - .../meeting/edit_materials_button.html | 1 - .../meeting/edit_meeting_schedule.html | 1 - .../edit_meeting_schedule_session.html | 1 - ...t_meeting_timeslots_and_misc_sessions.html | 1 - ietf/templates/meeting/edit_session.html | 1 - ietf/templates/meeting/edit_timeslot.html | 1 - .../templates/meeting/edit_timeslot_form.html | 1 - .../templates/meeting/edit_timeslot_type.html | 1 - ietf/templates/meeting/finalize.html | 1 - ietf/templates/meeting/floor-plan.html | 1 - ietf/templates/meeting/group_materials.html | 1 - ietf/templates/meeting/group_proceedings.html | 1 - ietf/templates/meeting/important-dates.html | 1 - ietf/templates/meeting/interim_announce.html | 1 - ietf/templates/meeting/interim_nav.html | 1 - ietf/templates/meeting/interim_pending.html | 5 +- ietf/templates/meeting/interim_request.html | 1 - .../meeting/interim_request_cancel.html | 1 - .../meeting/interim_request_details.html | 1 - .../meeting/interim_request_edit.html | 1 - .../meeting/interim_send_announcement.html | 1 - .../meeting/interim_session_buttons.html | 1 - .../meeting/interim_skip_announce.html | 1 - .../meeting/make_schedule_official.html | 1 - ietf/templates/meeting/materials.html | 1 - .../meeting/materials_editable_groups.html | 1 - .../meeting/materials_upload_closed.html | 1 - ietf/templates/meeting/meeting_heading.html | 1 - .../meeting/new_meeting_schedule.html | 1 - ietf/templates/meeting/no-agenda.html | 1 - ietf/templates/meeting/past.html | 3 +- .../meeting/previously_approved_slides.html | 1 - ietf/templates/meeting/private_schedule.html | 1 - ietf/templates/meeting/proceedings.html | 1 - .../meeting/proceedings/edit_material.html | 1 - .../proceedings/edit_material_base.html | 1 - .../proceedings/edit_meetinghosts.html | 1 - .../meeting/proceedings/introduction.html | 1 - .../meeting/proceedings/material_details.html | 1 - .../meeting/proceedings/materials_table.html | 1 - .../proceedings/remove_restore_material.html | 1 - ietf/templates/meeting/proceedings/title.html | 1 - .../meeting/proceedings/upload_material.html | 1 - .../meeting/proceedings_acknowledgements.html | 1 - .../meeting/proceedings_attendees.html | 1 - .../meeting/proceedings_attendees_table.html | 1 - .../meeting/proceedings_overview.html | 1 - .../meeting/proceedings_progress_report.html | 1 - ietf/templates/meeting/properties_edit.html | 1 - .../meeting/propose_session_slides.html | 1 - .../meeting/remove_sessionpresentation.html | 1 - ietf/templates/meeting/request_minutes.html | 1 - ietf/templates/meeting/requests.html | 1 - ietf/templates/meeting/room-view.html | 39 +- ietf/templates/meeting/schedule_list.html | 9 +- .../meeting/session_agenda_include.html | 1 - .../meeting/session_buttons_include.html | 1 - ietf/templates/meeting/session_details.html | 1 - .../meeting/session_details_form.html | 1 - .../meeting/session_details_panel.html | 3 +- ietf/templates/meeting/session_materials.html | 1 - ietf/templates/meeting/timeslot_edit.html | 1 - .../meeting/timeslot_edit_timeslot.html | 1 - .../templates/meeting/timeslot_start_end.html | 1 - ietf/templates/meeting/tz-display.html | 1 - ietf/templates/meeting/upcoming.html | 3 +- .../meeting/upload_session_agenda.html | 1 - .../meeting/upload_session_bluesheets.html | 1 - .../meeting/upload_session_minutes.html | 1 - .../meeting/upload_session_slides.html | 1 - ietf/templates/meeting/week-view.html | 5 +- ietf/templates/message/message.html | 1 - ietf/templates/nomcom/announcements.html | 1 - ietf/templates/nomcom/chair_help.html | 1 - ietf/templates/nomcom/delete_nomcom.html | 1 - ietf/templates/nomcom/edit_nomcom.html | 1 - ietf/templates/nomcom/edit_nominee.html | 1 - ietf/templates/nomcom/edit_position.html | 1 - ietf/templates/nomcom/edit_template.html | 1 - ietf/templates/nomcom/edit_topic.html | 1 - ietf/templates/nomcom/eligible.html | 1 - ietf/templates/nomcom/email_list_panel.html | 1 - .../templates/nomcom/extract_email_lists.html | 1 - ietf/templates/nomcom/feedback.html | 1 - ietf/templates/nomcom/history.html | 1 - .../nomcom/iesg_position_requirements.html | 1 - ietf/templates/nomcom/index.html | 1 - ietf/templates/nomcom/list_positions.html | 1 - ietf/templates/nomcom/list_templates.html | 1 - ietf/templates/nomcom/list_topics.html | 1 - ietf/templates/nomcom/new_edit_members.html | 1 - .../templates/nomcom/nomcom_private_base.html | 1 - ietf/templates/nomcom/nomcom_public_base.html | 24 +- .../nomcom/private_feedback_email.html | 1 - ietf/templates/nomcom/private_index.html | 1 - ietf/templates/nomcom/private_key.html | 1 - .../nomcom/private_merge_nominee.html | 1 - .../nomcom/private_merge_person.html | 1 - ietf/templates/nomcom/private_nominate.html | 1 - .../nomcom/private_questionnaire.html | 1 - .../nomcom/process_nomination_status.html | 1 - ietf/templates/nomcom/public_nominate.html | 1 - ietf/templates/nomcom/questionnaires.html | 25 +- ietf/templates/nomcom/remove_position.html | 1 - ietf/templates/nomcom/remove_topic.html | 1 - ietf/templates/nomcom/requirements.html | 23 +- ietf/templates/nomcom/send_reminder_mail.html | 1 - ietf/templates/nomcom/show_template.html | 1 - ietf/templates/nomcom/view_feedback.html | 1 - .../nomcom/view_feedback_nominee.html | 23 +- .../nomcom/view_feedback_pending.html | 1 - .../templates/nomcom/view_feedback_topic.html | 23 +- .../nomcom/view_feedback_unrelated.html | 23 +- ietf/templates/nomcom/volunteer.html | 1 - ietf/templates/nomcom/volunteers.html | 1 - .../nomcom/volunteers_not_accepted.html | 1 - ietf/templates/nomcom/year_index.html | 1 - ietf/templates/oidc_provider/authorize.html | 1 - ietf/templates/oidc_provider/error.html | 1 - ietf/templates/person/merge.html | 1 - ietf/templates/person/person_info.html | 1 - ietf/templates/person/person_link.html | 15 +- ietf/templates/person/photo.html | 1 - ietf/templates/person/profile.html | 1 - .../registration/change_password.html | 1 - .../registration/change_username.html | 1 - .../registration/confirm_account.html | 1 - .../registration/confirm_new_email.html | 1 - .../registration/confirm_profile_update.html | 1 - ietf/templates/registration/create.html | 1 - ietf/templates/registration/edit_profile.html | 1 - ietf/templates/registration/index.html | 1 - ietf/templates/registration/logged_out.html | 1 - ietf/templates/registration/login.html | 1 - ietf/templates/registration/manual.html | 1 - .../registration/missing_person.html | 1 - .../registration/password_reset.html | 1 - ietf/templates/release/about.html | 1 - ietf/templates/release/release.html | 1 - ietf/templates/release/stats.html | 1 - ietf/templates/review/unavailable_table.html | 1 - ietf/templates/stats/document_stats.html | 1 - .../document_stats_author_affiliation.html | 1 - .../document_stats_author_citations.html | 1 - .../document_stats_author_continent.html | 1 - .../stats/document_stats_author_country.html | 1 - .../document_stats_author_documents.html | 1 - .../stats/document_stats_author_hindex.html | 1 - .../stats/document_stats_authors.html | 1 - .../stats/document_stats_format.html | 1 - .../stats/document_stats_formlang.html | 1 - .../templates/stats/document_stats_pages.html | 1 - .../templates/stats/document_stats_words.html | 1 - .../stats/document_stats_yearly.html | 1 - .../includes/number_with_details_cell.html | 1 - ietf/templates/stats/index.html | 1 - .../templates/stats/known_countries_list.html | 1 - ietf/templates/stats/meeting_stats.html | 1 - .../stats/meeting_stats_continent.html | 1 - .../stats/meeting_stats_country.html | 1 - .../stats/meeting_stats_overview.html | 1 - ietf/templates/stats/review_stats.html | 1 - ietf/templates/submit/add_preapproval.html | 1 - ietf/templates/submit/add_submit_email.html | 1 - ietf/templates/submit/api_submit_info.html | 1 - ietf/templates/submit/approvals.html | 1 - ietf/templates/submit/cancel_preapproval.html | 1 - ietf/templates/submit/confirm_submission.html | 1 - ietf/templates/submit/edit_submission.html | 1 - ietf/templates/submit/email.html | 1 - ietf/templates/submit/extresources_form.html | 1 - ietf/templates/submit/manual_post.html | 1 - .../submit/problem-reports-footer.html | 1 - ietf/templates/submit/replaces_form.html | 1 - ietf/templates/submit/search_submission.html | 1 - ietf/templates/submit/submission_email.html | 1 - ietf/templates/submit/submission_files.html | 1 - ietf/templates/submit/submission_status.html | 1 - ietf/templates/submit/submit_base.html | 1 - ietf/templates/submit/submitter_form.html | 1 - ietf/templates/submit/tool_instructions.html | 1 - ietf/templates/submit/upload_submission.html | 1 - ietf/templates/sync/discrepancies.html | 1 - ietf/templates/sync/notify.html | 1 - ietf/templates/sync/rfceditor_undo.html | 1 - ietf/templates/utf8_4byte_failed.html | 1 - ietf/utils/test_utils.py | 13 +- ietf/utils/tests.py | 4 +- package-lock.json | 918 ++++++++---------- 495 files changed, 858 insertions(+), 1304 deletions(-) diff --git a/docker/configs/settings_local.py b/docker/configs/settings_local.py index 2f6207c90..70a398d43 100644 --- a/docker/configs/settings_local.py +++ b/docker/configs/settings_local.py @@ -41,7 +41,7 @@ EMAIL_PORT=2025 TRAC_WIKI_DIR_PATTERN = "test/wiki/%s" TRAC_SVN_DIR_PATTERN = "test/svn/%s" -MEDIA_BASE_DIR = 'test' +MEDIA_BASE_DIR = 'data/developers' MEDIA_ROOT = MEDIA_BASE_DIR + '/media/' MEDIA_URL = '/media/' @@ -59,4 +59,20 @@ SUBMIT_YANG_RFC_MODEL_DIR = 'data/developers/ietf-ftp/yang/rfcmod/' # Set INTERNAL_IPS for use within Docker. See https://knasmueller.net/fix-djangos-debug-toolbar-not-showing-inside-docker import socket hostname, _, ips = socket.gethostbyname_ex(socket.gethostname()) -INTERNAL_IPS = [".".join(ip.split(".")[:-1] + ["1"]) for ip in ips] \ No newline at end of file +INTERNAL_IPS = [".".join(ip.split(".")[:-1] + ["1"]) for ip in ips] + +# DEV_TEMPLATE_CONTEXT_PROCESSORS = [ +# 'ietf.context_processors.sql_debug', +# ] + +DOCUMENT_PATH_PATTERN = 'data/developers/ietf-ftp/{doc.type_id}/' +INTERNET_DRAFT_PATH = 'data/developers/ietf-ftp/internet-drafts/' +CHARTER_PATH = 'data/developers/ietf-ftp/charter/' +BOFREQ_PATH = 'data/developers/ietf-ftp/bofreq/' +CONFLICT_REVIEW_PATH = 'data/developers/ietf-ftp/conflict-reviews/' +STATUS_CHANGE_PATH = 'data/developers/ietf-ftp/status-changes/' +INTERNET_DRAFT_ARCHIVE_DIR = 'data/developers/ietf-ftp/internet-drafts/' +INTERNET_ALL_DRAFTS_ARCHIVE_DIR = 'data/developers/ietf-ftp/internet-drafts/' + +NOMCOM_PUBLIC_KEYS_DIR = 'data/nomcom_keys/public_keys/' +SLIDE_STAGING_PATH = 'test/staging/' \ No newline at end of file diff --git a/ietf/doc/fields.py b/ietf/doc/fields.py index 213f16ca7..fde519950 100644 --- a/ietf/doc/fields.py +++ b/ietf/doc/fields.py @@ -17,15 +17,16 @@ from ietf.doc.models import Document, DocAlias from ietf.doc.utils import uppercase_std_abbreviated_name from ietf.utils.fields import SearchableField -def select2_id_doc_name(objs): +def select2_id_doc_name(model, objs): return [{ "id": o.pk, + "url": o.get_absolute_url() if model == Document else o.document.get_absolute_url(), "text": escape(uppercase_std_abbreviated_name(o.name)), } for o in objs] if objs else [] -def select2_id_doc_name_json(objs): - return json.dumps(select2_id_doc_name(objs)) +def select2_id_doc_name_json(model, objs): + return json.dumps(select2_id_doc_name(model, objs)) class SearchableDocumentsField(SearchableField): @@ -55,7 +56,7 @@ class SearchableDocumentsField(SearchableField): def make_select2_data(self, model_instances): """Get select2 data items""" - return select2_id_doc_name(model_instances) + return select2_id_doc_name(self.model, model_instances) def ajax_url(self): """Get the URL for AJAX searches""" diff --git a/ietf/doc/templatetags/ietf_filters.py b/ietf/doc/templatetags/ietf_filters.py index f755ed004..7c3595796 100644 --- a/ietf/doc/templatetags/ietf_filters.py +++ b/ietf/doc/templatetags/ietf_filters.py @@ -226,13 +226,14 @@ def urlize_ietf_docs(string, autoescape=None): """ if autoescape and not isinstance(string, SafeData): string = escape(string) - string = re.sub(r"(?)(RFC\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) - string = re.sub(r"(?)(BCP\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) - string = re.sub(r"(?)(STD\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) - string = re.sub(r"(?)(FYI\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) - string = re.sub(r"(?)(draft-[-0-9a-zA-Z._+]+)", "\\1", string, flags=re.IGNORECASE) - string = re.sub(r"(?)(conflict-review-[-0-9a-zA-Z._+]+)", "\\1", string, flags=re.IGNORECASE) - string = re.sub(r"(?)(status-change-[-0-9a-zA-Z._+]+)", "\\1", string, flags=re.IGNORECASE) + string = re.sub(r"(RFC\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) + string = re.sub(r"(BCP\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) + string = re.sub(r"(STD\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) + string = re.sub(r"(FYI\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) + string = re.sub(r"(draft-[-0-9a-zA-Z._+]+)", "\\1", string, flags=re.IGNORECASE) + string = re.sub(r"(conflict-review-[-0-9a-zA-Z._+]+)", "\\1", string, flags=re.IGNORECASE) + string = re.sub(r"(status-change-[-0-9a-zA-Z._+]+)", "\\1", string, flags=re.IGNORECASE) + string = re.sub(r"(charter-[-0-9a-zA-Z._+]+)", "\\1", string, flags=re.IGNORECASE) return mark_safe(string) urlize_ietf_docs = stringfilter(urlize_ietf_docs) @@ -240,9 +241,15 @@ urlize_ietf_docs = stringfilter(urlize_ietf_docs) def urlize_related_source_list(related, autoescape=None): """Convert a list of DocumentRelations into list of links using the source document's canonical name""" links = [] + names = set() + titles = set() for rel in related: name=rel.source.canonical_name() title = rel.source.title + if name in names and title in titles: + continue + names.add(name) + titles.add(title) url = urlreverse('ietf.doc.views_doc.document_main', kwargs=dict(name=name)) if autoescape: name = escape(name) @@ -409,7 +416,9 @@ 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) - full = urlize_ietf_docs(full) + if "" not in full: + full = urlize_ietf_docs(full) + full = bleach.linkify(full, parse_email=True) return format_snippet(full, trunc_words) diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index 3d8979e2e..6259f0656 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -2384,7 +2384,7 @@ class FieldTests(TestCase): self.assertCountEqual(decoded_ids, [str(doc.id) for doc in docs]) for doc in docs: self.assertEqual( - dict(id=doc.pk, selected=True, text=escape(uppercase_std_abbreviated_name(doc.name))), + dict(id=doc.pk, selected=True, url=doc.get_absolute_url(), text=escape(uppercase_std_abbreviated_name(doc.name))), decoded[str(doc.pk)], ) diff --git a/ietf/doc/tests_bofreq.py b/ietf/doc/tests_bofreq.py index 375b4d5ee..52e55d5e2 100644 --- a/ietf/doc/tests_bofreq.py +++ b/ietf/doc/tests_bofreq.py @@ -191,7 +191,8 @@ 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 = unescape(unicontent(r).encode('utf-8').decode('unicode-escape')) + # Yes, unescape is needed twice, for names like "O'Connor" + unescaped = unescape(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,7 +232,8 @@ 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 = unescape(unicontent(r).encode('utf-8').decode('unicode-escape')) + # Yes, unescape is needed twice, for names like "O'Connor" + unescaped = unescape(unescape(unicontent(r).encode('utf-8').decode('unicode-escape'))) for responsible in previous_responsible: self.assertIn(responsible.name, unescaped) new_responsible = set(previous_responsible) diff --git a/ietf/doc/tests_js.py b/ietf/doc/tests_js.py index 9cdbe6b60..02daaae90 100644 --- a/ietf/doc/tests_js.py +++ b/ietf/doc/tests_js.py @@ -33,9 +33,9 @@ class EditAuthorsTests(IetfSeleniumTestCase): person_span = form_elt.find_element(By.CLASS_NAME, 'select2-selection') self.scroll_to_element(person_span) person_span.click() - input = self.driver.find_element(By.CLASS_NAME, 'select2-search__field') + input = self.driver.find_element(By.CSS_SELECTOR, '.select2-search__field[aria-controls*=author]') input.send_keys(name) - result_selector = 'ul.select2-results__options > li.select2-results__option--selectable' + result_selector = 'ul.select2-results__options[id*=author] > li.select2-results__option--selectable' self.wait.until( expected_conditions.text_to_be_present_in_element( (By.CSS_SELECTOR, result_selector), @@ -94,9 +94,9 @@ class EditAuthorsTests(IetfSeleniumTestCase): # get the "add author" button so we can add blank author forms add_author_button = self.driver.find_element(By.ID, 'add-author-button') for index, auth in enumerate(authors): - self.driver.execute_script("arguments[0].scrollIntoView();", add_author_button) # FIXME-LARS: no idea why this fails: + self.driver.execute_script("arguments[0].scrollIntoView();", add_author_button) # FIXME: no idea why this fails: # self.scroll_to_element(add_author_button) # Can only click if it's in view! - self.driver.execute_script("arguments[0].click();", add_author_button) # FIXME-LARS: no idea why this fails: + self.driver.execute_script("arguments[0].click();", add_author_button) # FIXME: no idea why this fails: # add_author_button.click() # Create a new form. Automatically scrolls to it. author_forms = authors_list.find_elements(By.CLASS_NAME, 'author-panel') authors_added = index + 1 @@ -119,7 +119,7 @@ class EditAuthorsTests(IetfSeleniumTestCase): self.driver.find_element(By.ID, 'id_basis').send_keys('change testing') # Now click the 'submit' button and check that the update was accepted. submit_button = self.driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]') - self.driver.execute_script("arguments[0].click();", submit_button) # FIXME-LARS: no idea why this fails: + self.driver.execute_script("arguments[0].click();", submit_button) # FIXME: no idea why this fails: # self.scroll_to_element(submit_button) # submit_button.click() # Wait for redirect to the document_main view diff --git a/ietf/doc/views_search.py b/ietf/doc/views_search.py index 9c1498bbc..64fa0dc41 100644 --- a/ietf/doc/views_search.py +++ b/ietf/doc/views_search.py @@ -583,4 +583,4 @@ def ajax_select2_search_docs(request, model_name, doc_type): objs = qs.distinct().order_by("name")[:20] - return HttpResponse(select2_id_doc_name_json(objs), content_type='application/json') + return HttpResponse(select2_id_doc_name_json(model, objs), content_type='application/json') \ No newline at end of file diff --git a/ietf/iesg/agenda.py b/ietf/iesg/agenda.py index 3783ad25e..e923c1bab 100644 --- a/ietf/iesg/agenda.py +++ b/ietf/iesg/agenda.py @@ -26,8 +26,7 @@ def get_agenda_date(date=None): return datetime.date.today() else: try: - # FIXME: .active() - return TelechatDate.objects.all().get(date=datetime.datetime.strptime(date, "%Y-%m-%d").date()).date + return TelechatDate.objects.active().get(date=datetime.datetime.strptime(date, "%Y-%m-%d").date()).date except (ValueError, TelechatDate.DoesNotExist): raise Http404 @@ -221,5 +220,4 @@ def agenda_data(date=None): fill_in_agenda_docs(date, sections) fill_in_agenda_management_issues(date, sections) - return { 'date': date.isoformat(), 'sections': sections } - + return { 'date': date.isoformat(), 'sections': sections } \ No newline at end of file diff --git a/ietf/meeting/tests_js.py b/ietf/meeting/tests_js.py index e8ea6d09f..cd16b8e05 100644 --- a/ietf/meeting/tests_js.py +++ b/ietf/meeting/tests_js.py @@ -266,7 +266,7 @@ class EditMeetingScheduleTests(IetfSeleniumTestCase): # hide timeslots modal_open = self.driver.find_element(By.CSS_SELECTOR, "#timeslot-toggle-modal-open") - self.driver.execute_script("arguments[0].click();", modal_open) # FIXME-LARS: not working: + self.driver.execute_script("arguments[0].click();", modal_open) # FIXME: not working: # modal_open.click() self.assertTrue(self.driver.find_element(By.CSS_SELECTOR, "#timeslot-group-toggles-modal").is_displayed()) @@ -589,7 +589,7 @@ class EditMeetingScheduleTests(IetfSeleniumTestCase): # option to swap. If we used the first or last day, a fencepost error in # disabling options by date might be hidden. clicked_index = 1 - self.driver.execute_script("arguments[0].click();", future_swap_ts_buttons[clicked_index]) # FIXME-LARS: not working: + self.driver.execute_script("arguments[0].click();", future_swap_ts_buttons[clicked_index]) # FIXME: not working: # future_swap_ts_buttons[clicked_index].click() try: modal = wait.until( @@ -1520,7 +1520,7 @@ class AgendaTests(IetfSeleniumTestCase): ), 'Modal open button not found or not clickable', ) - # FIXME-LARS: no idea why we need js instead of the following: + # FIXME: 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) @@ -1761,7 +1761,7 @@ class AgendaTests(IetfSeleniumTestCase): farfut_button = self.driver.find_element(By.CSS_SELECTOR, 'button[data-filter-item="farfut"]') break_checkbox = self.driver.find_element(By.CSS_SELECTOR, 'input[type="checkbox"][name="selected-sessions"][data-filter-item="secretariat-sessb"]') registration_checkbox = self.driver.find_element(By.CSS_SELECTOR, 'input[type="checkbox"][name="selected-sessions"][data-filter-item="secretariat-sessa"]') - self.driver.execute_script("arguments[0].click();", mars_sessa_checkbox) # select mars session; FIXME: no idea why a simple mars_sessa_checkbox.click() doesn't work + self.driver.execute_script("arguments[0].click();", mars_sessa_checkbox) # select mars session; FIXME: no idea why a simple mars_sessa_checkbox.click() doesn't work try: wait.until( diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index 047f374d4..c19137cad 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -4280,8 +4280,8 @@ class InterimTests(TestCase): self.assertContains(r, 'IETF-%02d'%int(ietf.meeting.number)) q = PyQuery(r.content) #id="-%s" % interim.group.acronym - #self.assertIn('CANCELLED', q('[id*="'+id+'"]').text()) - self.assertIn('CANCELLED', q('tr>td>a>span').text()) + #self.assertIn('Cancelled', q('[id*="'+id+'"]').text()) + self.assertIn('Cancelled', q('tr>td>a>span').text()) def do_upcoming_test(self, querystring=None, create_meeting=True): if create_meeting: @@ -4304,7 +4304,7 @@ class InterimTests(TestCase): self.assertContains(r, 'IETF 72') # cancelled session q = PyQuery(r.content) - self.assertIn('CANCELLED', q('tr>td.text-end>span').text()) + self.assertIn('Cancelled', q('tr>td.text-end>span').text()) # test_upcoming_filters_ignored removed - we _don't_ want to ignore filters now, and the test passed because it wasn't testing the filtering anyhow (which requires testing the js). diff --git a/ietf/person/templatetags/person_filters.py b/ietf/person/templatetags/person_filters.py index e3b7e632f..b3daa010e 100644 --- a/ietf/person/templatetags/person_filters.py +++ b/ietf/person/templatetags/person_filters.py @@ -4,55 +4,83 @@ import datetime from django import template -import debug # pyflakes:ignore +import debug # pyflakes:ignore -from ietf.nomcom.utils import is_eligible +from ietf.nomcom.utils import is_eligible from ietf.person.models import Alias register = template.Library() + @register.filter def is_nomcom_eligible(person, date=datetime.date.today()): - return is_eligible(person=person,date=date) + return is_eligible(person=person, date=date) + @register.filter def person_by_name(name): "Look up a person record from name" - if not isinstance(name, (type(b''), type(u''))): + if not isinstance(name, (type(b""), type(""))): return None alias = Alias.objects.filter(name=name).first() return alias.person if alias else None + # CLEANUP: There are several hundred Person objects with no Alias object, -# violating the expectiations of the code. The check for the existance of an +# violating the expectations of the code. The check for the existence of an # alias object below matching the person's name avoids presenting a link that # we know will 404. When the database is corrected and we can expect that the # Alias for the person's name to always be there, we can remove this extra # database query (or leave it as a safeguard until it becomes a performance # issue.) - -@register.inclusion_tag('person/person_link.html') + + +@register.inclusion_tag("person/person_link.html") def person_link(person, **kwargs): - title = kwargs.get('title', '') - cls = kwargs.get('class', '') - with_email = kwargs.get('with_email', True) - nowrap = kwargs.get('nowrap', True) + title = kwargs.get("title", "") + cls = kwargs.get("class", "") + with_email = kwargs.get("with_email", True) + nowrap = kwargs.get("nowrap", True) if person: - name = person.name if person.alias_set.filter(name=person.name).exists() else '' plain_name = person.plain_name() + name = ( + person.name + if person.alias_set.filter(name=person.name).exists() + else plain_name + ) email = person.email_address() - return {'name': name, 'plain_name': plain_name, 'email': email, 'title': title, 'class': cls, 'with_email': with_email, 'nowrap': nowrap} + return { + "name": name, + "plain_name": plain_name, + "email": email, + "title": title, + "class": cls, + "with_email": with_email, + "nowrap": nowrap, + } else: return {} -@register.inclusion_tag('person/person_link.html') +@register.inclusion_tag("person/person_link.html") def email_person_link(email, **kwargs): - title = kwargs.get('title', '') - cls = kwargs.get('class', '') - with_email = kwargs.get('with_email', True) - nowrap = kwargs.get('nowrap', True) - name = email.person.name if email.person.alias_set.filter(name=email.person.name).exists() else '' + title = kwargs.get("title", "") + cls = kwargs.get("class", "") + with_email = kwargs.get("with_email", True) + nowrap = kwargs.get("nowrap", True) plain_name = email.person.plain_name() + name = ( + email.person.name + if email.person.alias_set.filter(name=email.person.name).exists() + else plain_name + ) email = email.address - return {'name': name, 'plain_name': plain_name, 'email': email, 'title': title, 'class': cls, 'with_email': with_email, 'nowrap': nowrap} \ No newline at end of file + return { + "name": name, + "plain_name": plain_name, + "email": email, + "title": title, + "class": cls, + "with_email": with_email, + "nowrap": nowrap, + } \ No newline at end of file diff --git a/ietf/static/css/ietf.scss b/ietf/static/css/ietf.scss index 55c14bf82..625ea3f1f 100644 --- a/ietf/static/css/ietf.scss +++ b/ietf/static/css/ietf.scss @@ -143,12 +143,12 @@ pre { } #timeline .bar text { - fill: white; + fill: black; dominant-baseline: central; pointer-events: none; } -$timeline-odd-color: $primary; +$timeline-odd-color: $info; $timeline-odd-hover-color: shift-color($timeline-odd-color, $link-shade-percentage) !default; #timeline .bar:nth-child(odd) rect { @@ -160,7 +160,7 @@ $timeline-odd-hover-color: shift-color($timeline-odd-color, $link-shade-percenta fill: $timeline-odd-hover-color; } -$timeline-even-color: $success; +$timeline-even-color: $warning; $timeline-even-hover-color: shift-color($timeline-even-color, $link-shade-percentage) !default; #timeline .bar:nth-child(even) rect { diff --git a/ietf/static/js/ietf.js b/ietf/static/js/ietf.js index f72d7dfbe..769a75efe 100644 --- a/ietf/static/js/ietf.js +++ b/ietf/static/js/ietf.js @@ -75,7 +75,7 @@ $(document) } attachTo.find(".dropdown-menu") .remove(); - var menu = ['