Skip to content

Commit

Permalink
feat(language-list): Making the list scrollable - FRONT-4564 (#3557)
Browse files Browse the repository at this point in the history
  • Loading branch information
planctus authored Aug 12, 2024
1 parent bd4bd19 commit e1bcb5b
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ exports[`Site Header EC renders correctly 1`] = `
</div>
<div
class="ecl-site-header__language-content"
data-ecl-language-list-content=""
>
<div
class="ecl-site-header__language-category"
Expand Down Expand Up @@ -1224,6 +1225,7 @@ exports[`Site Header EC renders correctly when logged in 1`] = `
</div>
<div
class="ecl-site-header__language-content"
data-ecl-language-list-content=""
>
<div
class="ecl-site-header__language-category"
Expand Down Expand Up @@ -2285,6 +2287,7 @@ exports[`Site Header EC renders correctly with extra attributes 1`] = `
</div>
<div
class="ecl-site-header__language-content"
data-ecl-language-list-content=""
>
<div
class="ecl-site-header__language-category"
Expand Down Expand Up @@ -3344,6 +3347,7 @@ exports[`Site Header EC renders correctly with extra class names 1`] = `
</div>
<div
class="ecl-site-header__language-content"
data-ecl-language-list-content=""
>
<div
class="ecl-site-header__language-category"
Expand Down Expand Up @@ -4403,6 +4407,7 @@ exports[`Site Header EU renders correctly 1`] = `
</div>
<div
class="ecl-site-header__language-content"
data-ecl-language-list-content=""
>
<div
class="ecl-site-header__language-category"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,10 @@
{% endif %}
</div>

<div class="ecl-site-header__language-content">
<div
class="ecl-site-header__language-content"
data-ecl-language-list-content
>
{# EU languages #}
{% if _language_selector.overlay.items is not empty and _language_selector.overlay.items is iterable %}
<div class="ecl-site-header__language-category" data-ecl-language-list-eu>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ $language-list: null !default;
position: static;
}

@mixin with-scrollbar {
overflow-y: auto;
scrollbar-color: var(--c-n) rgba(0, 0, 0, 0);
scrollbar-width: thin;
}

@mixin arrow-up {
background-color: map.get($theme, 'color', 'white');
border: map.get($language-switcher, 'arrow-border');
Expand Down Expand Up @@ -82,6 +88,8 @@ $language-list: null !default;
.ecl-site-header__language-content {
display: flex;
flex-direction: column;

@include with-scrollbar;
}

.ecl-site-header__language-category-title {
Expand Down
22 changes: 22 additions & 0 deletions src/implementations/vanilla/components/site-header/site-header.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ export class SiteHeader {
languageListOverlaySelector = '[data-ecl-language-list-overlay]',
languageListEuSelector = '[data-ecl-language-list-eu]',
languageListNonEuSelector = '[data-ecl-language-list-non-eu]',
languageListContentSelector = '[data-ecl-language-list-content]',
closeOverlaySelector = '[data-ecl-language-list-close]',
searchToggleSelector = '[data-ecl-search-toggle]',
searchFormSelector = '[data-ecl-search-form]',
Expand All @@ -66,6 +67,7 @@ export class SiteHeader {
this.languageListOverlaySelector = languageListOverlaySelector;
this.languageListEuSelector = languageListEuSelector;
this.languageListNonEuSelector = languageListNonEuSelector;
this.languageListContentSelector = languageListContentSelector;
this.closeOverlaySelector = closeOverlaySelector;
this.searchToggleSelector = searchToggleSelector;
this.searchFormSelector = searchFormSelector;
Expand All @@ -81,6 +83,7 @@ export class SiteHeader {
this.languageListOverlay = null;
this.languageListEu = null;
this.languageListNonEu = null;
this.languageListContent = null;
this.close = null;
this.focusTrap = null;
this.searchToggle = null;
Expand All @@ -101,6 +104,7 @@ export class SiteHeader {
this.handleKeyboardGlobal = this.handleKeyboardGlobal.bind(this);
this.handleClickGlobal = this.handleClickGlobal.bind(this);
this.handleResize = this.handleResize.bind(this);
this.setLanguageListHeight = this.setLanguageListHeight.bind(this);
}

/**
Expand Down Expand Up @@ -131,6 +135,7 @@ export class SiteHeader {
this.languageListOverlay = queryOne(this.languageListOverlaySelector);
this.languageListEu = queryOne(this.languageListEuSelector);
this.languageListNonEu = queryOne(this.languageListNonEuSelector);
this.languageListContent = queryOne(this.languageListContentSelector);
this.close = queryOne(this.closeOverlaySelector);

// Create focus trap
Expand Down Expand Up @@ -373,6 +378,22 @@ export class SiteHeader {
}
}

/**
* Set a max height for the language list content
*/
setLanguageListHeight() {
const viewportHeight = window.innerHeight;

if (this.languageListContent) {
const listTop = this.languageListContent.getBoundingClientRect().top;

const availableSpace = viewportHeight - listTop;
if (availableSpace > 0) {
this.languageListContent.style.maxHeight = `${availableSpace}px`;
}
}
}

/**
* Shows the modal language list overlay.
*/
Expand All @@ -381,6 +402,7 @@ export class SiteHeader {
this.languageListOverlay.hidden = false;
this.languageListOverlay.setAttribute('aria-modal', 'true');
this.languageLink.setAttribute('aria-expanded', 'true');
this.setLanguageListHeight();
}

/**
Expand Down

1 comment on commit e1bcb5b

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.