Skip to content
Snippets Groups Projects
Unverified Commit 09f64bf5 authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #3346300 by bnjmnm, smustgrave: After using select to change plugin or...

Issue #3346300 by bnjmnm, smustgrave: After using select to change plugin or region, element loses focus and page scrolls to bottom
parent 6bbb08f9
No related branches found
No related tags found
27 merge requests!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!4100Issue #3249600: Add support for PHP 8.1 Enums as allowed values for list_* data types,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer,!23Issue #2879087: Use comment access handler instead of hardcoding permissions
......@@ -271,6 +271,45 @@
// Fire the Ajax update.
$refreshRows[0].value = rowNames.join(' ');
}
once(
'edit-refresh',
'input[data-drupal-selector="edit-refresh"]',
).forEach((input) => {
// Keep track of the element that was focused prior to triggering the
// mousedown event on the hidden submit button.
let returnFocus = {
drupalSelector: null,
scrollY: null,
};
// Use jQuery on to listen as the mousedown event is propagated by
// jQuery trigger().
$(input).on('mousedown', () => {
returnFocus = {
drupalSelector: document.activeElement.getAttribute(
'data-drupal-selector',
),
scrollY: window.scrollY,
};
});
input.addEventListener('focus', () => {
if (returnFocus.drupalSelector) {
// Refocus the element that lost focus due to this hidden submit
// button being triggered by a mousedown event.
document
.querySelector(
`[data-drupal-selector="${returnFocus.drupalSelector}"]`,
)
.focus();
// Ensure the scroll position is the same as when the input was
// initially changed.
window.scrollTo({
top: returnFocus.scrollY,
});
returnFocus = {};
}
});
});
$('input[data-drupal-selector="edit-refresh"]').trigger('mousedown');
// Disabled elements do not appear in POST ajax data, so we mark the
......
......@@ -148,11 +148,18 @@ public function testFormatterUI() {
$this->assertEquals('hidden', $field_region->getValue());
$field_region->setValue('content');
$assert_session->assertWaitOnAjaxRequest();
// Confirm the region element retains focus after the AJAX update completes.
$this->assertJsCondition('document.activeElement === document.querySelector("[name=\'fields[field_test][region]\']")');
$button_save->click();
// Change the format for the test field.
$field_test_format_type->setValue('field_test_multiple');
$assert_session->assertWaitOnAjaxRequest();
// Confirm the format element retains focus after the AJAX update completes.
$this->assertJsCondition('document.activeElement === document.querySelector("[name=\'fields[field_test][type]\']")');
$plugin_summary = $page->find('css', '#field-test .field-plugin-summary');
$this->assertStringContainsString("test_formatter_setting_multiple: dummy test string", $plugin_summary->getText(), 'The expected summary is displayed.');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment