Skip to content
Snippets Groups Projects
Verified Commit 8149f97c authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #3351356 by bnjmnm, longwave, dww, jan kellermann, smustgrave: Reduce...

Issue #3351356 by bnjmnm, longwave, dww, jan kellermann, smustgrave: Reduce toolbar user button related browser reflow
parent a56ce007
Branches
Tags
25 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,!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,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!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
...@@ -238,6 +238,7 @@ ...@@ -238,6 +238,7 @@
Drupal.toolbar.models.toolbarModel.on( Drupal.toolbar.models.toolbarModel.on(
'change:activeTab change:orientation change:isOriented change:isTrayToggleVisible change:offsets', 'change:activeTab change:orientation change:isOriented change:isTrayToggleVisible change:offsets',
function () { function () {
const userButton = document.querySelector('#toolbar-item-user');
const hasActiveTab = !!$(this.get('activeTab')).length > 0; const hasActiveTab = !!$(this.get('activeTab')).length > 0;
const previousToolbarState = sessionStorage.getItem( const previousToolbarState = sessionStorage.getItem(
'Drupal.toolbar.toolbarState', 'Drupal.toolbar.toolbarState',
...@@ -255,6 +256,7 @@ ...@@ -255,6 +256,7 @@
activeTray: $(this.get('activeTab')).attr('data-toolbar-tray'), activeTray: $(this.get('activeTab')).attr('data-toolbar-tray'),
isOriented: this.get('isOriented'), isOriented: this.get('isOriented'),
isFixed: this.get('isFixed'), isFixed: this.get('isFixed'),
userButtonMinWidth: userButton ? userButton.clientWidth : 0,
}; };
// Store toolbar UI state in session storage, so it can be accessed // Store toolbar UI state in session storage, so it can be accessed
// by JavaScript that executes before the first paint. // by JavaScript that executes before the first paint.
......
...@@ -54,6 +54,14 @@ public function testToolbarStoredState() { ...@@ -54,6 +54,14 @@ public function testToolbarStoredState() {
$this->getSession()->evaluateScript("sessionStorage.getItem('Drupal.toolbar.toolbarState')") $this->getSession()->evaluateScript("sessionStorage.getItem('Drupal.toolbar.toolbarState')")
); );
// The userButtonMinWidth property will differ depending on the length of
// the test-generated username, so it is checked differently and the value
// is copied to the expected value array.
$this->assertNotNull($toolbar_stored_state['userButtonMinWidth']);
$this->assertIsNumeric($toolbar_stored_state['userButtonMinWidth']);
$this->assertGreaterThan(60, $toolbar_stored_state['userButtonMinWidth']);
$expected['userButtonMinWidth'] = $toolbar_stored_state['userButtonMinWidth'];
$this->assertSame($expected, $toolbar_stored_state); $this->assertSame($expected, $toolbar_stored_state);
$page->clickLink('toolbar-item-user'); $page->clickLink('toolbar-item-user');
......
...@@ -76,6 +76,7 @@ function toolbar_page_attachments(array &$page) { ...@@ -76,6 +76,7 @@ function toolbar_page_attachments(array &$page) {
activeTray, activeTray,
activeTabId, activeTabId,
isOriented, isOriented,
userButtonMinWidth
} = toolbarState; } = toolbarState;
classesToAdd.push( classesToAdd.push(
...@@ -114,6 +115,12 @@ classesToAdd.push('toolbar-oriented'); ...@@ -114,6 +115,12 @@ classesToAdd.push('toolbar-oriented');
style.textContent = styleContent; style.textContent = styleContent;
style.setAttribute('data-toolbar-anti-flicker-loading', true); style.setAttribute('data-toolbar-anti-flicker-loading', true);
document.querySelector('head').appendChild(style); document.querySelector('head').appendChild(style);
if (userButtonMinWidth) {
const userButtonStyle = document.createElement('style');
userButtonStyle.textContent = `#toolbar-item-user {min-width: ` + userButtonMinWidth +`px;}`
document.querySelector('head').appendChild(userButtonStyle);
}
} }
} }
document.querySelector('html').classList.add(...classesToAdd); document.querySelector('html').classList.add(...classesToAdd);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment