Fixed #34917 -- Underlined links in the main content area of the admin.
@ -118,6 +118,15 @@ a:focus {
|
|||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a:not(
|
||||||
|
[role="button"],
|
||||||
|
#header a,
|
||||||
|
#nav-sidebar a,
|
||||||
|
#content-main.app-list a
|
||||||
|
) {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
a img {
|
a img {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
@ -108,6 +108,7 @@
|
|||||||
const now_link = document.createElement('a');
|
const now_link = document.createElement('a');
|
||||||
now_link.href = "#";
|
now_link.href = "#";
|
||||||
now_link.textContent = gettext('Now');
|
now_link.textContent = gettext('Now');
|
||||||
|
now_link.role = 'button';
|
||||||
now_link.addEventListener('click', function(e) {
|
now_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.handleClockQuicklink(num, -1);
|
DateTimeShortcuts.handleClockQuicklink(num, -1);
|
||||||
@ -163,7 +164,7 @@
|
|||||||
// where name is the name attribute of the <input>.
|
// where name is the name attribute of the <input>.
|
||||||
const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name;
|
const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name;
|
||||||
DateTimeShortcuts.clockHours[name].forEach(function(element) {
|
DateTimeShortcuts.clockHours[name].forEach(function(element) {
|
||||||
const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'href', '#');
|
const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'role', 'button', 'href', '#');
|
||||||
time_link.addEventListener('click', function(e) {
|
time_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.handleClockQuicklink(num, element[1]);
|
DateTimeShortcuts.handleClockQuicklink(num, element[1]);
|
||||||
@ -172,7 +173,7 @@
|
|||||||
|
|
||||||
const cancel_p = quickElement('p', clock_box);
|
const cancel_p = quickElement('p', clock_box);
|
||||||
cancel_p.className = 'calendar-cancel';
|
cancel_p.className = 'calendar-cancel';
|
||||||
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#');
|
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'role', 'button', 'href', '#');
|
||||||
cancel_link.addEventListener('click', function(e) {
|
cancel_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.dismissClock(num);
|
DateTimeShortcuts.dismissClock(num);
|
||||||
@ -235,6 +236,7 @@
|
|||||||
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
|
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
|
||||||
const today_link = document.createElement('a');
|
const today_link = document.createElement('a');
|
||||||
today_link.href = '#';
|
today_link.href = '#';
|
||||||
|
today_link.role = 'button';
|
||||||
today_link.appendChild(document.createTextNode(gettext('Today')));
|
today_link.appendChild(document.createTextNode(gettext('Today')));
|
||||||
today_link.addEventListener('click', function(e) {
|
today_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@ -309,19 +311,19 @@
|
|||||||
// calendar shortcuts
|
// calendar shortcuts
|
||||||
const shortcuts = quickElement('div', cal_box);
|
const shortcuts = quickElement('div', cal_box);
|
||||||
shortcuts.className = 'calendar-shortcuts';
|
shortcuts.className = 'calendar-shortcuts';
|
||||||
let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'href', '#');
|
let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'role', 'button', 'href', '#');
|
||||||
day_link.addEventListener('click', function(e) {
|
day_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.handleCalendarQuickLink(num, -1);
|
DateTimeShortcuts.handleCalendarQuickLink(num, -1);
|
||||||
});
|
});
|
||||||
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
||||||
day_link = quickElement('a', shortcuts, gettext('Today'), 'href', '#');
|
day_link = quickElement('a', shortcuts, gettext('Today'), 'role', 'button', 'href', '#');
|
||||||
day_link.addEventListener('click', function(e) {
|
day_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.handleCalendarQuickLink(num, 0);
|
DateTimeShortcuts.handleCalendarQuickLink(num, 0);
|
||||||
});
|
});
|
||||||
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0'));
|
||||||
day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'href', '#');
|
day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'role', 'button', 'href', '#');
|
||||||
day_link.addEventListener('click', function(e) {
|
day_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.handleCalendarQuickLink(num, +1);
|
DateTimeShortcuts.handleCalendarQuickLink(num, +1);
|
||||||
@ -330,7 +332,7 @@
|
|||||||
// cancel bar
|
// cancel bar
|
||||||
const cancel_p = quickElement('p', cal_box);
|
const cancel_p = quickElement('p', cal_box);
|
||||||
cancel_p.className = 'calendar-cancel';
|
cancel_p.className = 'calendar-cancel';
|
||||||
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#');
|
const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'role', 'button', 'href', '#');
|
||||||
cancel_link.addEventListener('click', function(e) {
|
cancel_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.dismissCalendar(num);
|
DateTimeShortcuts.dismissCalendar(num);
|
||||||
|
@ -160,7 +160,7 @@ depends on core.js for utility functions like removeChildren or quickElement
|
|||||||
}
|
}
|
||||||
|
|
||||||
const cell = quickElement('td', tableRow, '', 'class', todayClass);
|
const cell = quickElement('td', tableRow, '', 'class', todayClass);
|
||||||
const link = quickElement('a', cell, currentDay, 'href', '#');
|
const link = quickElement('a', cell, currentDay, 'role', 'button', 'href', '#');
|
||||||
link.addEventListener('click', calendarMonth(year, month));
|
link.addEventListener('click', calendarMonth(year, month));
|
||||||
currentDay++;
|
currentDay++;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{% block object-tools-items %}
|
{% block object-tools-items %}
|
||||||
<li>
|
<li>
|
||||||
{% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
|
{% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
|
||||||
<a href="{% add_preserved_filters history_url %}" class="historylink">{% translate "History" %}</a>
|
<a role="button" href="{% add_preserved_filters history_url %}" class="historylink">{% translate "History" %}</a>
|
||||||
</li>
|
</li>
|
||||||
{% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% translate "View on site" %}</a></li>{% endif %}
|
{% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% translate "View on site" %}</a></li>{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
{% if has_add_permission %}
|
{% if has_add_permission %}
|
||||||
<li>
|
<li>
|
||||||
{% url cl.opts|admin_urlname:'add' as add_url %}
|
{% url cl.opts|admin_urlname:'add' as add_url %}
|
||||||
<a href="{% add_preserved_filters add_url is_popup to_field %}" class="addlink">
|
<a role="button" href="{% add_preserved_filters add_url is_popup to_field %}" class="addlink">
|
||||||
{% blocktranslate with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktranslate %}
|
{% blocktranslate with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktranslate %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<a href="{{ header.url_toggle }}" class="toggle {{ header.ascending|yesno:'ascending,descending' }}" title="{% translate "Toggle sorting" %}"></a>
|
<a href="{{ header.url_toggle }}" class="toggle {{ header.ascending|yesno:'ascending,descending' }}" title="{% translate "Toggle sorting" %}"></a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="text">{% if header.sortable %}<a href="{{ header.url_primary }}">{{ header.text|capfirst }}</a>{% else %}<span>{{ header.text|capfirst }}</span>{% endif %}</div>
|
<div class="text">{% if header.sortable %}<a role="button" href="{{ header.url_primary }}">{{ header.text|capfirst }}</a>{% else %}<span>{{ header.text|capfirst }}</span>{% endif %}</div>
|
||||||
<div class="clear"></div>
|
<div class="clear"></div>
|
||||||
</th>{% endfor %}
|
</th>{% endfor %}
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1">{% endif %}
|
{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1">{% endif %}
|
||||||
{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}">{% endif %}
|
{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}">{% endif %}
|
||||||
<input type="submit" value="{% translate 'Yes, I’m sure' %}">
|
<input type="submit" value="{% translate 'Yes, I’m sure' %}">
|
||||||
<a href="#" class="button cancel-link">{% translate "No, take me back" %}</a>
|
<a role="button" href="#" class="button cancel-link">{% translate "No, take me back" %}</a>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
<input type="hidden" name="action" value="delete_selected">
|
<input type="hidden" name="action" value="delete_selected">
|
||||||
<input type="hidden" name="post" value="yes">
|
<input type="hidden" name="post" value="yes">
|
||||||
<input type="submit" value="{% translate 'Yes, I’m sure' %}">
|
<input type="submit" value="{% translate 'Yes, I’m sure' %}">
|
||||||
<a href="#" class="button cancel-link">{% translate "No, take me back" %}</a>
|
<a role="button" href="#" class="button cancel-link">{% translate "No, take me back" %}</a>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
{% block nav-sidebar %}{% endblock %}
|
{% block nav-sidebar %}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div id="content-main">
|
<div id="content-main" class="app-list">
|
||||||
{% include "admin/app_list.html" with app_list=app_list show_changelinks=True %}
|
{% include "admin/app_list.html" with app_list=app_list show_changelinks=True %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
{% elif i == action_list.number %}
|
{% elif i == action_list.number %}
|
||||||
<span class="this-page">{{ i }}</span>
|
<span class="this-page">{{ i }}</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="?{{ page_var }}={{ i }}" {% if i == action_list.paginator.num_pages %} class="end" {% endif %}>{{ i }}</a>
|
<a role="button" href="?{{ page_var }}={{ i }}" {% if i == action_list.paginator.num_pages %} class="end" {% endif %}>{{ i }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -7,11 +7,11 @@
|
|||||||
{% if show_save_and_continue %}<input type="submit" value="{% if can_change %}{% translate 'Save and continue editing' %}{% else %}{% translate 'Save and view' %}{% endif %}" name="_continue">{% endif %}
|
{% if show_save_and_continue %}<input type="submit" value="{% if can_change %}{% translate 'Save and continue editing' %}{% else %}{% translate 'Save and view' %}{% endif %}" name="_continue">{% endif %}
|
||||||
{% if show_close %}
|
{% if show_close %}
|
||||||
{% url opts|admin_urlname:'changelist' as changelist_url %}
|
{% url opts|admin_urlname:'changelist' as changelist_url %}
|
||||||
<a href="{% add_preserved_filters changelist_url %}" class="closelink">{% translate 'Close' %}</a>
|
<a role="button" href="{% add_preserved_filters changelist_url %}" class="closelink">{% translate 'Close' %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if show_delete_link and original %}
|
{% if show_delete_link and original %}
|
||||||
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
|
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
|
||||||
<a href="{% add_preserved_filters delete_url %}" class="deletelink">{% translate "Delete" %}</a>
|
<a role="button" href="{% add_preserved_filters delete_url %}" class="deletelink">{% translate "Delete" %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -45,7 +45,7 @@ def paginator_number(cl, i):
|
|||||||
return format_html('<span class="this-page">{}</span> ', i)
|
return format_html('<span class="this-page">{}</span> ', i)
|
||||||
else:
|
else:
|
||||||
return format_html(
|
return format_html(
|
||||||
'<a href="{}"{}>{}</a> ',
|
'<a role="button" href="{}"{}>{}</a> ',
|
||||||
cl.get_query_string({PAGE_VAR: i}),
|
cl.get_query_string({PAGE_VAR: i}),
|
||||||
mark_safe(' class="end"' if i == cl.paginator.num_pages else ""),
|
mark_safe(' class="end"' if i == cl.paginator.num_pages else ""),
|
||||||
i,
|
i,
|
||||||
|
@ -4,5 +4,5 @@
|
|||||||
<strong>{{ entry.label }}</strong>{% if entry.value %}: <bdi>{{ entry.value }}</bdi>{% endif %}
|
<strong>{{ entry.label }}</strong>{% if entry.value %}: <bdi>{{ entry.value }}</bdi>{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</p>
|
</p>
|
||||||
<p><a class="button" href="{{ password_url|default:"../password/" }}">{{ button_label }}</a></p>
|
<p><a role="button" class="button" href="{{ password_url|default:"../password/" }}">{{ button_label }}</a></p>
|
||||||
</div>
|
</div>
|
||||||
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 53 KiB |
@ -1454,12 +1454,13 @@ class TestReadOnlyChangeViewInlinePermissions(TestCase):
|
|||||||
response = self.client.get(self.change_url)
|
response = self.client.get(self.change_url)
|
||||||
self.assertContains(
|
self.assertContains(
|
||||||
response,
|
response,
|
||||||
'<a href="/admin/admin_inlines/poll/" class="closelink">Close</a>',
|
'<a role="button" href="/admin/admin_inlines/poll/" class="closelink">'
|
||||||
|
"Close</a>",
|
||||||
html=True,
|
html=True,
|
||||||
)
|
)
|
||||||
delete_link = (
|
delete_link = (
|
||||||
'<a href="/admin/admin_inlines/poll/%s/delete/" class="deletelink">Delete'
|
'<a role="button" href="/admin/admin_inlines/poll/%s/delete/" '
|
||||||
"</a>"
|
'class="deletelink">Delete</a>'
|
||||||
)
|
)
|
||||||
self.assertNotContains(response, delete_link % self.poll.id, html=True)
|
self.assertNotContains(response, delete_link % self.poll.id, html=True)
|
||||||
self.assertNotContains(
|
self.assertNotContains(
|
||||||
|
@ -2683,8 +2683,8 @@ class AdminViewPermissionsTest(TestCase):
|
|||||||
self.assertContains(response, "<label>Extra form field:</label>")
|
self.assertContains(response, "<label>Extra form field:</label>")
|
||||||
self.assertContains(
|
self.assertContains(
|
||||||
response,
|
response,
|
||||||
'<a href="/test_admin/admin/admin_views/article/" class="closelink">Close'
|
'<a role="button" href="/test_admin/admin/admin_views/article/" '
|
||||||
"</a>",
|
'class="closelink">Close</a>',
|
||||||
)
|
)
|
||||||
self.assertEqual(response.context["title"], "View article")
|
self.assertEqual(response.context["title"], "View article")
|
||||||
post = self.client.post(article_change_url, change_dict)
|
post = self.client.post(article_change_url, change_dict)
|
||||||
@ -2835,8 +2835,8 @@ class AdminViewPermissionsTest(TestCase):
|
|||||||
self.assertContains(response, "<h1>View article</h1>")
|
self.assertContains(response, "<h1>View article</h1>")
|
||||||
self.assertContains(
|
self.assertContains(
|
||||||
response,
|
response,
|
||||||
'<a href="/test_admin/admin9/admin_views/article/" class="closelink">Close'
|
'<a role="button" href="/test_admin/admin9/admin_views/article/" '
|
||||||
"</a>",
|
'class="closelink">Close</a>',
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_change_view_save_as_new(self):
|
def test_change_view_save_as_new(self):
|
||||||
@ -4056,7 +4056,8 @@ class AdminViewStringPrimaryKeyTest(TestCase):
|
|||||||
args=(quote(self.pk),),
|
args=(quote(self.pk),),
|
||||||
)
|
)
|
||||||
self.assertContains(
|
self.assertContains(
|
||||||
response, '<a href="%s" class="historylink"' % escape(expected_link)
|
response,
|
||||||
|
'<a role="button" href="%s" class="historylink"' % escape(expected_link),
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_redirect_on_add_view_continue_button(self):
|
def test_redirect_on_add_view_continue_button(self):
|
||||||
@ -8313,13 +8314,14 @@ class AdminKeepChangeListFiltersTests(TestCase):
|
|||||||
|
|
||||||
# Check the history link.
|
# Check the history link.
|
||||||
history_link = re.search(
|
history_link = re.search(
|
||||||
'<a href="(.*?)" class="historylink">History</a>', response.text
|
'<a role="button" href="(.*?)" class="historylink">History</a>',
|
||||||
|
response.text,
|
||||||
)
|
)
|
||||||
self.assertURLEqual(history_link[1], self.get_history_url())
|
self.assertURLEqual(history_link[1], self.get_history_url())
|
||||||
|
|
||||||
# Check the delete link.
|
# Check the delete link.
|
||||||
delete_link = re.search(
|
delete_link = re.search(
|
||||||
'<a href="(.*?)" class="deletelink">Delete</a>', response.text
|
'<a role="button" href="(.*?)" class="deletelink">Delete</a>', response.text
|
||||||
)
|
)
|
||||||
self.assertURLEqual(delete_link[1], self.get_delete_url())
|
self.assertURLEqual(delete_link[1], self.get_delete_url())
|
||||||
|
|
||||||
@ -8359,7 +8361,7 @@ class AdminKeepChangeListFiltersTests(TestCase):
|
|||||||
self.client.force_login(viewuser)
|
self.client.force_login(viewuser)
|
||||||
response = self.client.get(self.get_change_url())
|
response = self.client.get(self.get_change_url())
|
||||||
close_link = re.search(
|
close_link = re.search(
|
||||||
'<a href="(.*?)" class="closelink">Close</a>', response.text
|
'<a role="button" href="(.*?)" class="closelink">Close</a>', response.text
|
||||||
)
|
)
|
||||||
close_link = close_link[1].replace("&", "&")
|
close_link = close_link[1].replace("&", "&")
|
||||||
self.assertURLEqual(close_link, self.get_changelist_url())
|
self.assertURLEqual(close_link, self.get_changelist_url())
|
||||||
|
@ -1089,7 +1089,9 @@ class UserChangeFormTest(TestDataMixin, TestCase):
|
|||||||
"Set password",
|
"Set password",
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
password_reset_link = r'<a class="button" href="([^"]*)">([^<]*)</a>'
|
password_reset_link = (
|
||||||
|
r'<a role="button" class="button" href="([^"]*)">([^<]*)</a>'
|
||||||
|
)
|
||||||
for username, expected_help_text, expected_button_label in cases:
|
for username, expected_help_text, expected_button_label in cases:
|
||||||
with self.subTest(username=username):
|
with self.subTest(username=username):
|
||||||
user = User.objects.get(username=username)
|
user = User.objects.get(username=username)
|
||||||
@ -1438,7 +1440,8 @@ class ReadOnlyPasswordHashTest(SimpleTestCase):
|
|||||||
" <strong>hash</strong>: "
|
" <strong>hash</strong>: "
|
||||||
" <bdi>WmCkn9**************************************</bdi>"
|
" <bdi>WmCkn9**************************************</bdi>"
|
||||||
" </p>"
|
" </p>"
|
||||||
' <p><a class="button" href="../password/">Reset password</a></p>'
|
' <p><a role="button" class="button" href="../password/">'
|
||||||
|
"Reset password</a></p>"
|
||||||
"</div>",
|
"</div>",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1532,7 +1532,7 @@ class ChangelistTests(MessagesTestMixin, AuthViewsTestCase):
|
|||||||
response = self.client.get(user_change_url)
|
response = self.client.get(user_change_url)
|
||||||
# Test the link inside password field help_text.
|
# Test the link inside password field help_text.
|
||||||
rel_link = re.search(
|
rel_link = re.search(
|
||||||
r'<a class="button" href="([^"]*)">Reset password</a>',
|
r'<a role="button" class="button" href="([^"]*)">Reset password</a>',
|
||||||
response.text,
|
response.text,
|
||||||
)[1]
|
)[1]
|
||||||
self.assertEqual(urljoin(user_change_url, rel_link), password_change_url)
|
self.assertEqual(urljoin(user_change_url, rel_link), password_change_url)
|
||||||
@ -1628,7 +1628,7 @@ class ChangelistTests(MessagesTestMixin, AuthViewsTestCase):
|
|||||||
response = self.client.get(user_change_url)
|
response = self.client.get(user_change_url)
|
||||||
# Test the link inside password field help_text.
|
# Test the link inside password field help_text.
|
||||||
rel_link = re.search(
|
rel_link = re.search(
|
||||||
r'<a class="button" href="([^"]*)">Set password</a>',
|
r'<a role="button" class="button" href="([^"]*)">Set password</a>',
|
||||||
response.text,
|
response.text,
|
||||||
)[1]
|
)[1]
|
||||||
self.assertEqual(urljoin(user_change_url, rel_link), password_change_url)
|
self.assertEqual(urljoin(user_change_url, rel_link), password_change_url)
|
||||||
|