From 407ab793573ce82c93cfdc86e5a0a7fa804f60f5 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Tue, 14 Oct 2025 07:50:16 -0400 Subject: [PATCH 1/2] Pinned "New contributor" GitHub action to v1. Later versions misidentify all contributors as new ones if the project does not enable issues. Follow-up to b7507bad7730e5f6558cfcce29976f65890083ca. --- .github/workflows/new_contributor_pr.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/new_contributor_pr.yml b/.github/workflows/new_contributor_pr.yml index 163348595d74..fd09c27f5fc2 100644 --- a/.github/workflows/new_contributor_pr.yml +++ b/.github/workflows/new_contributor_pr.yml @@ -12,7 +12,8 @@ jobs: name: Hello new contributor runs-on: ubuntu-latest steps: - - uses: actions/first-interaction@v3 + # Pin to v1: https://github.com/actions/first-interaction/issues/369 + - uses: actions/first-interaction@v1 with: repo_token: ${{ secrets.GITHUB_TOKEN }} issue_message: | From bc03f1064e10fa247a46d4e8a98ba9b26aa4790d Mon Sep 17 00:00:00 2001 From: antoliny0919 Date: Thu, 22 May 2025 15:56:51 +0900 Subject: [PATCH 2/2] Fixed #34041 -- Added aria-current attribute to admin breadcrumbs. Co-authored by: farita1699 --- .../contrib/admin/static/admin/css/base.css | 26 ++++++++++++++++--- django/contrib/admin/templates/admin/500.html | 8 +++--- .../admin/templates/admin/app_index.html | 12 ++++----- .../admin/auth/user/change_password.html | 14 +++++----- .../contrib/admin/templates/admin/base.html | 8 +++--- .../admin/templates/admin/change_form.html | 12 ++++----- .../admin/templates/admin/change_list.html | 10 +++---- .../templates/admin/delete_confirmation.html | 14 +++++----- .../admin/delete_selected_confirmation.html | 12 ++++----- .../admin/templates/admin/invalid_setup.html | 8 +++--- .../admin/templates/admin/object_history.html | 14 +++++----- .../templates/registration/logged_out.html | 7 ++++- .../registration/password_change_done.html | 8 +++--- .../registration/password_change_form.html | 8 +++--- .../registration/password_reset_complete.html | 8 +++--- .../registration/password_reset_confirm.html | 8 +++--- .../registration/password_reset_done.html | 8 +++--- .../registration/password_reset_form.html | 8 +++--- .../templates/admin_doc/bookmarklets.html | 10 +++---- .../admindocs/templates/admin_doc/index.html | 8 +++--- .../templates/admin_doc/missing_docutils.html | 8 +++--- .../templates/admin_doc/model_detail.html | 12 ++++----- .../templates/admin_doc/model_index.html | 10 +++---- .../templates/admin_doc/template_detail.html | 12 ++++----- .../admin_doc/template_filter_index.html | 10 +++---- .../admin_doc/template_tag_index.html | 10 +++---- .../templates/admin_doc/view_detail.html | 12 ++++----- .../templates/admin_doc/view_index.html | 10 +++---- tests/admin_views/test_nav_sidebar.py | 1 - tests/admin_views/tests.py | 2 +- tests/auth_tests/test_views.py | 8 ++++-- 31 files changed, 166 insertions(+), 140 deletions(-) diff --git a/django/contrib/admin/static/admin/css/base.css b/django/contrib/admin/static/admin/css/base.css index a3ddccdd91f2..ee67fe7cd501 100644 --- a/django/contrib/admin/static/admin/css/base.css +++ b/django/contrib/admin/static/admin/css/base.css @@ -754,19 +754,37 @@ td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { /* BREADCRUMBS */ -div.breadcrumbs { +ol.breadcrumbs { background: var(--breadcrumbs-bg); padding: 10px 40px; border: none; color: var(--breadcrumbs-fg); - text-align: left; + margin-top: 0; + margin-bottom: 0; +} + +ol.breadcrumbs li { + display: inline-block; + font-size: 0.875rem; + padding: 0; + line-height: 0; +} + +ol.breadcrumbs li:not([aria-current="page"])::after { + content: ' \203A ' / ''; +} + +ol.breadcrumbs li a[aria-current="page"] { + color: var(--breadcrumbs-fg); + text-decoration: none !important; + cursor: default; } -div.breadcrumbs a { +ol.breadcrumbs a { color: var(--breadcrumbs-link-fg); } -div.breadcrumbs a:focus, div.breadcrumbs a:hover { +ol.breadcrumbs a:focus, ol.breadcrumbs a:hover { color: var(--breadcrumbs-fg); } diff --git a/django/contrib/admin/templates/admin/500.html b/django/contrib/admin/templates/admin/500.html index b5ac5c3b6c2c..61e459356cb5 100644 --- a/django/contrib/admin/templates/admin/500.html +++ b/django/contrib/admin/templates/admin/500.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Server error (500)' %}{% endblock %} diff --git a/django/contrib/admin/templates/admin/app_index.html b/django/contrib/admin/templates/admin/app_index.html index 727f72b190ef..ff4188cb6655 100644 --- a/django/contrib/admin/templates/admin/app_index.html +++ b/django/contrib/admin/templates/admin/app_index.html @@ -6,13 +6,13 @@ {% if not is_popup %} {% block nav-breadcrumbs %} {% endblock %} {% endif %} diff --git a/django/contrib/admin/templates/admin/auth/user/change_password.html b/django/contrib/admin/templates/admin/auth/user/change_password.html index 01c357d8c76a..08d191b765e4 100644 --- a/django/contrib/admin/templates/admin/auth/user/change_password.html +++ b/django/contrib/admin/templates/admin/auth/user/change_password.html @@ -11,13 +11,13 @@ {% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.model_name }} change-form{% endblock %} {% if not is_popup %} {% block breadcrumbs %} - + {% endblock %} {% endif %} {% block content %}
diff --git a/django/contrib/admin/templates/admin/base.html b/django/contrib/admin/templates/admin/base.html index ac72935f2911..16c1808a0ca4 100644 --- a/django/contrib/admin/templates/admin/base.html +++ b/django/contrib/admin/templates/admin/base.html @@ -72,10 +72,10 @@ {% block nav-breadcrumbs %} {% endblock %} diff --git a/django/contrib/admin/templates/admin/change_form.html b/django/contrib/admin/templates/admin/change_form.html index 8e7ced9a4844..f6edffb4d4f6 100644 --- a/django/contrib/admin/templates/admin/change_form.html +++ b/django/contrib/admin/templates/admin/change_form.html @@ -15,12 +15,12 @@ {% if not is_popup %} {% block breadcrumbs %} - + {% endblock %} {% endif %} diff --git a/django/contrib/admin/templates/admin/change_list.html b/django/contrib/admin/templates/admin/change_list.html index b12f8ec58371..42e157a85ef7 100644 --- a/django/contrib/admin/templates/admin/change_list.html +++ b/django/contrib/admin/templates/admin/change_list.html @@ -29,11 +29,11 @@ {% if not is_popup %} {% block breadcrumbs %} - + {% endblock %} {% endif %} diff --git a/django/contrib/admin/templates/admin/delete_confirmation.html b/django/contrib/admin/templates/admin/delete_confirmation.html index 2ccf719e053f..1d04008cc081 100644 --- a/django/contrib/admin/templates/admin/delete_confirmation.html +++ b/django/contrib/admin/templates/admin/delete_confirmation.html @@ -10,13 +10,13 @@ {% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/admin/delete_selected_confirmation.html b/django/contrib/admin/templates/admin/delete_selected_confirmation.html index 2414e790950b..c6d0566883ae 100644 --- a/django/contrib/admin/templates/admin/delete_selected_confirmation.html +++ b/django/contrib/admin/templates/admin/delete_selected_confirmation.html @@ -10,12 +10,12 @@ {% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation delete-selected-confirmation{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/admin/invalid_setup.html b/django/contrib/admin/templates/admin/invalid_setup.html index 1ef7c71434c9..ed686f7e3076 100644 --- a/django/contrib/admin/templates/admin/invalid_setup.html +++ b/django/contrib/admin/templates/admin/invalid_setup.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/admin/object_history.html b/django/contrib/admin/templates/admin/object_history.html index 40aaecc40a1d..130232666f23 100644 --- a/django/contrib/admin/templates/admin/object_history.html +++ b/django/contrib/admin/templates/admin/object_history.html @@ -2,13 +2,13 @@ {% load i18n admin_urls %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/registration/logged_out.html b/django/contrib/admin/templates/registration/logged_out.html index e9a554502448..759ec734c7e4 100644 --- a/django/contrib/admin/templates/registration/logged_out.html +++ b/django/contrib/admin/templates/registration/logged_out.html @@ -1,7 +1,12 @@ {% extends "admin/base_site.html" %} {% load i18n %} -{% block breadcrumbs %}{% endblock %} +{% block breadcrumbs %} + +{% endblock %} {% block nav-sidebar %}{% endblock %} diff --git a/django/contrib/admin/templates/registration/password_change_done.html b/django/contrib/admin/templates/registration/password_change_done.html index 784ab37278c1..e8e019fca9d1 100644 --- a/django/contrib/admin/templates/registration/password_change_done.html +++ b/django/contrib/admin/templates/registration/password_change_done.html @@ -9,10 +9,10 @@ {% include "admin/color_theme_toggle.html" %} {% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/registration/password_change_form.html b/django/contrib/admin/templates/registration/password_change_form.html index 3d66aeb16231..d377c201ce1e 100644 --- a/django/contrib/admin/templates/registration/password_change_form.html +++ b/django/contrib/admin/templates/registration/password_change_form.html @@ -12,10 +12,10 @@ {% include "admin/color_theme_toggle.html" %} {% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %}
diff --git a/django/contrib/admin/templates/registration/password_reset_complete.html b/django/contrib/admin/templates/registration/password_reset_complete.html index e6a383fcfecc..1e30fdf4b82a 100644 --- a/django/contrib/admin/templates/registration/password_reset_complete.html +++ b/django/contrib/admin/templates/registration/password_reset_complete.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/registration/password_reset_confirm.html b/django/contrib/admin/templates/registration/password_reset_confirm.html index 5e1478be83ab..2ad675da24f3 100644 --- a/django/contrib/admin/templates/registration/password_reset_confirm.html +++ b/django/contrib/admin/templates/registration/password_reset_confirm.html @@ -4,10 +4,10 @@ {% block title %}{% if form.new_password1.errors or form.new_password2.errors %}{% translate "Error:" %} {% endif %}{{ block.super }}{% endblock %} {% block extrastyle %}{{ block.super }}{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/registration/password_reset_done.html b/django/contrib/admin/templates/registration/password_reset_done.html index 8b1971a76e21..194217638f69 100644 --- a/django/contrib/admin/templates/registration/password_reset_done.html +++ b/django/contrib/admin/templates/registration/password_reset_done.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/registration/password_reset_form.html b/django/contrib/admin/templates/registration/password_reset_form.html index e12189af5420..3737414d81b3 100644 --- a/django/contrib/admin/templates/registration/password_reset_form.html +++ b/django/contrib/admin/templates/registration/password_reset_form.html @@ -4,10 +4,10 @@ {% block title %}{% if form.email.errors %}{% translate "Error:" %} {% endif %}{{ block.super }}{% endblock %} {% block extrastyle %}{{ block.super }}{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admindocs/templates/admin_doc/bookmarklets.html b/django/contrib/admindocs/templates/admin_doc/bookmarklets.html index 04b329e6e3ac..598827ef19ed 100644 --- a/django/contrib/admindocs/templates/admin_doc/bookmarklets.html +++ b/django/contrib/admindocs/templates/admin_doc/bookmarklets.html @@ -2,11 +2,11 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate "Documentation bookmarklets" %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/index.html b/django/contrib/admindocs/templates/admin_doc/index.html index 1b95a210b35b..e602255b3234 100644 --- a/django/contrib/admindocs/templates/admin_doc/index.html +++ b/django/contrib/admindocs/templates/admin_doc/index.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Documentation' %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/missing_docutils.html b/django/contrib/admindocs/templates/admin_doc/missing_docutils.html index 56c063b129c9..9bbf76f6c21a 100644 --- a/django/contrib/admindocs/templates/admin_doc/missing_docutils.html +++ b/django/contrib/admindocs/templates/admin_doc/missing_docutils.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Please install docutils' %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/model_detail.html b/django/contrib/admindocs/templates/admin_doc/model_detail.html index 1cbde0e44a2f..6cf05d8f1b6a 100644 --- a/django/contrib/admindocs/templates/admin_doc/model_detail.html +++ b/django/contrib/admindocs/templates/admin_doc/model_detail.html @@ -10,12 +10,12 @@ {% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% blocktranslate %}Model: {{ name }}{% endblocktranslate %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/model_index.html b/django/contrib/admindocs/templates/admin_doc/model_index.html index b3ecb7ce9c2b..590cb34b953c 100644 --- a/django/contrib/admindocs/templates/admin_doc/model_index.html +++ b/django/contrib/admindocs/templates/admin_doc/model_index.html @@ -4,11 +4,11 @@ {% block coltype %}colSM{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Models' %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/template_detail.html b/django/contrib/admindocs/templates/admin_doc/template_detail.html index 3dadaa631a85..7dae783edb74 100644 --- a/django/contrib/admindocs/templates/admin_doc/template_detail.html +++ b/django/contrib/admindocs/templates/admin_doc/template_detail.html @@ -2,12 +2,12 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% blocktranslate %}Template: {{ name }}{% endblocktranslate %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/template_filter_index.html b/django/contrib/admindocs/templates/admin_doc/template_filter_index.html index c66b7ed3d3d4..5e9aa2ff9ba4 100644 --- a/django/contrib/admindocs/templates/admin_doc/template_filter_index.html +++ b/django/contrib/admindocs/templates/admin_doc/template_filter_index.html @@ -3,11 +3,11 @@ {% block coltype %}colSM{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Template filters' %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/template_tag_index.html b/django/contrib/admindocs/templates/admin_doc/template_tag_index.html index 17b930e337ae..aa36016dd4fe 100644 --- a/django/contrib/admindocs/templates/admin_doc/template_tag_index.html +++ b/django/contrib/admindocs/templates/admin_doc/template_tag_index.html @@ -3,11 +3,11 @@ {% block coltype %}colSM{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Template tags' %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/view_detail.html b/django/contrib/admindocs/templates/admin_doc/view_detail.html index 5a5b47247ecc..a9dd9a5ecc8a 100644 --- a/django/contrib/admindocs/templates/admin_doc/view_detail.html +++ b/django/contrib/admindocs/templates/admin_doc/view_detail.html @@ -2,12 +2,12 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% blocktranslate %}View: {{ name }}{% endblocktranslate %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/view_index.html b/django/contrib/admindocs/templates/admin_doc/view_index.html index 873303f2b23c..e754fdf587df 100644 --- a/django/contrib/admindocs/templates/admin_doc/view_index.html +++ b/django/contrib/admindocs/templates/admin_doc/view_index.html @@ -3,11 +3,11 @@ {% block coltype %}colSM{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Views' %}{% endblock %} diff --git a/tests/admin_views/test_nav_sidebar.py b/tests/admin_views/test_nav_sidebar.py index 1875a2f7a188..74fd648ab0de 100644 --- a/tests/admin_views/test_nav_sidebar.py +++ b/tests/admin_views/test_nav_sidebar.py @@ -93,7 +93,6 @@ def test_sidebar_aria_current_page_missing_without_request_context_processor(sel ) # Does not include aria-current attribute. self.assertContains(response, 'Users' % url) - self.assertNotContains(response, "aria-current") @override_settings(DEBUG=True) def test_included_app_list_template_context_fully_set(self): diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index ad37416cbfcb..868b616d765a 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -2579,7 +2579,7 @@ def test_add_view(self): # Add user may login and POST to add view, then redirect to admin root self.client.force_login(self.adduser) addpage = self.client.get(reverse("admin:admin_views_article_add")) - change_list_link = '› Articles' % reverse( + change_list_link = 'Articles' % reverse( "admin:admin_views_article_changelist" ) self.assertNotContains( diff --git a/tests/auth_tests/test_views.py b/tests/auth_tests/test_views.py index 23dc858ddd4b..a3863b6233c0 100644 --- a/tests/auth_tests/test_views.py +++ b/tests/auth_tests/test_views.py @@ -1548,7 +1548,9 @@ def test_user_with_usable_password_change_password(self): ) # Breadcrumb. self.assertContains( - response, f"{self.admin.username}\n› Change password" + response, + f'{self.admin.username}\n
  • ' + "Change password
  • ", ) # Usable password field. self.assertContains( @@ -1648,7 +1650,9 @@ def test_user_with_unusable_password_change_password(self): self.assertContains(response, f"

    Set password: {test_user.username}

    ") # Breadcrumb. self.assertContains( - response, f"{test_user.username}\n› Set password" + response, + f'{test_user.username}\n
  • ' + "Set password
  • ", ) # Submit buttons self.assertContains(response, '