Skip to content
Snippets Groups Projects
Unverified Commit de15dcbd 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 067b544d
No related branches found
No related tags found
14 merge requests!8394[warning] array_flip(): Can only flip STRING and INTEGER values, when saving a non-revisionable custom content entity,!7780issue 3443822: fix for 'No route found for the specified format html. Supported formats: json, xml.',!5013Issue #3071143: Table Render Array Example Is Incorrect,!4848Issue #1566662: Update module should send notifications on Thursdays,!4792Issue #2230689: Remove redundant "Italic" style,!4220Issue #3368223: Link field > Access to internal links is not checked on display.,!3884Issue #3356842,!3870Issue #3087868,!3812Draft: Issue #3339373 by alexpott, andypost, mondrake:...,!3686Issue #3219967 against 9.5.x,!3683Issue #2939397: Clearing AliasManager cache with root path raises warning,!2205Quote all names in the regions section.,!1459Issue #3087632: menu_name max length is too long,!866Issue #2845319: The highlighting of the 'Home' menu-link does not respect query strings and fragment identifiers
......@@ -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
......
......@@ -120,6 +120,27 @@
if ($refreshRows.length) {
$refreshRows[0].value = rowNames.join(' ');
}
once('edit-refresh', 'input[data-drupal-selector="edit-refresh"]').forEach(function (input) {
var returnFocus = {
drupalSelector: null,
scrollY: null
};
$(input).on('mousedown', function () {
returnFocus = {
drupalSelector: document.activeElement.getAttribute('data-drupal-selector'),
scrollY: window.scrollY
};
});
input.addEventListener('focus', function () {
if (returnFocus.drupalSelector) {
document.querySelector("[data-drupal-selector=\"".concat(returnFocus.drupalSelector, "\"]")).focus();
window.scrollTo({
top: returnFocus.scrollY
});
returnFocus = {};
}
});
});
$('input[data-drupal-selector="edit-refresh"]').trigger('mousedown');
$(ajaxElements).prop('disabled', true);
}
......
......@@ -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