<div class="efl-learner-profile-tab--container">
<ul role="tablist" class="efl-learner-profile-tab">
<li>
<a id=bio role="tab" tabindex="0" aria-selected="true">
Bio
</a>
</li>
<li>
<a id=my-learning role="tab" tabindex="0" aria-selected="false">
My Learning
</a>
</li>
<li>
<a id=bookmarks role="tab" tabindex="0" aria-selected="false">
Bookmarks
</a>
</li>
<li>
<a id=bundles role="tab" tabindex="0" aria-selected="false">
Bundles
</a>
</li>
<li>
<a id=personalisation role="tab" tabindex="0" aria-selected="false">
Personalisation
</a>
</li>
</ul>
</div>
No notes defined.
{
"tabs": [
{
"copy": "Bio",
"id": "bio",
"selected": true
},
{
"copy": "My Learning",
"id": "my-learning"
},
{
"copy": "Bookmarks",
"id": "bookmarks"
},
{
"copy": "Bundles",
"id": "bundles"
},
{
"copy": "Personalisation",
"id": "personalisation"
}
]
}
export default parentElement => {
const firstNavTab = document.body.querySelector(
'.global-site-navigation > ul > li.global-site-navigation__level1:first-child'
);
const self = parentElement.firstElementChild;
const MOBILE_BREAKPOINT = 820;
let DEFAULT_SCREEN_WIDTH;
const tabLinks = parentElement.querySelectorAll('a[role=tab]');
const onBoardingJourney = document.querySelector(
'[data-behavior="efl-learner-profile-onboarding-journey"]'
);
const profileTabPanels = document.querySelectorAll(
'.efl-page-content-subpage[data-page]'
);
const loadScreen = document.querySelector(
'[data-behavior="efl-load-screen"]'
);
if (!onBoardingJourney) {
document.addEventListener('readystatechange', () => {
profileTabPanels.forEach(panel => {
panel.classList.remove('onboarding-loading');
});
});
}
const findPos = obj => {
// eslint-disable-next-line no-unused-vars
let curleft = 0;
// let curtop = 0;
if (obj.offsetParent) {
curleft = obj.offsetLeft;
// curtop = obj.offsetTop;
// eslint-disable-next-line no-param-reassign, no-cond-assign
while ((obj = obj.offsetParent)) {
curleft += obj.offsetLeft;
// curtop += obj.offsetTop;
}
}
return curleft;
};
const setTabPadding = () => {
if (
window.innerWidth !== DEFAULT_SCREEN_WIDTH &&
window.innerWidth > MOBILE_BREAKPOINT
) {
self.style.justifyContent = 'start';
self.style.paddingLeft = `${findPos(firstNavTab)}px`;
DEFAULT_SCREEN_WIDTH = window.innerWidth;
} else if (window.innerWidth < MOBILE_BREAKPOINT) {
self.style.paddingLeft = null;
}
// query param active tab
const params = new Proxy(new URLSearchParams(window.location.search), {
get: (searchParams, prop) => searchParams.get(prop),
});
if (params.tab) {
const tabId = params.tab;
const tabLink = parentElement.querySelector(`a[id=${tabId}]`);
tabLink.click();
loadScreen.style.height = `${window.innerHeight}px`;
}
};
tabLinks.forEach(link => {
link.addEventListener('click', e => {
const redirectUrl = `${window.location.origin}${
window.location.pathname
}`;
const tabId = e.target.id;
window.history.pushState({}, '', `${redirectUrl}?tab=${tabId}`);
if (tabId === 'my-learning') {
if (!loadScreen) {
return;
}
if (loadScreen.getAttribute('data-load-screen') === 'true') {
loadScreen.classList.remove('hidden');
document.body.style.overflow = 'hidden';
const headerContainer = document.querySelector(
'.global-fixed-header'
);
const profiletabHeight = document.querySelector(
'.efl-learner-profile-tab--container'
).offsetHeight;
if (!headerContainer && !profiletabHeight) {
return;
}
const screenHeight = window.innerHeight;
// eslint-disable-next-line no-param-reassign
loadScreen.style.height = `${screenHeight -
headerContainer.offsetHeight -
profiletabHeight}px`;
setTimeout(() => {
loadScreen.classList.add('hidden');
document.body.style.overflow = null;
loadScreen.setAttribute('data-load-screen', 'false');
}, 1000);
}
}
});
});
setTabPadding();
window.addEventListener('load', setTabPadding);
window.addEventListener('resize', setTabPadding);
};
$tab-padding-mob: 4rem;
.efl-learner-profile-tab {
display: flex;
justify-content: center;
overflow-x: auto;
/* Hide scrollbar for IE, Edge and Firefox */
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
/* Hide scrollbar for Chrome, Safari and Opera */
&::-webkit-scrollbar {
display: none;
}
li {
position: relative;
&:not(:last-child) {
margin-right: 3.5rem;
}
&.hidetab {
display: none;
}
a {
cursor: pointer;
display: block;
white-space: nowrap;
font-family: $text-font-ef;
font-style: normal;
font-weight: 700;
font-size: 1.4rem;
line-height: 1.6rem;
letter-spacing: 0.02em;
text-transform: uppercase;
color: $color-interface-light;
padding: 1.6rem 0;
height: 100%;
&::after {
content: '';
display: block;
position: absolute;
width: 0;
bottom: 0;
height: auto;
border-bottom: 0.2rem solid $red;
}
&[aria-selected='true'] {
color: $blue;
}
&:hover,
&[aria-selected='true'] {
&::after {
width: 100%;
transition: width 0.3s ease-in-out;
}
}
}
}
&--container {
height: 100%;
background-color: $grey-light;
}
@media screen and (min-width: $mq-medium) {
max-width: unset;
min-width: 82.3rem;
li {
&:not(:last-child) {
margin-right: 7.2rem;
}
}
&--container {
padding-left: 0;
}
}
}
<div class="efl-learner-profile-tab--container">
<ul role="tablist" class="efl-learner-profile-tab">
{{#each tabs}}
<li>
<a id={{id}}
role="tab"
tabindex="0"
{{#if selected}}aria-selected="true"
{{else}}aria-selected="false"{{/if}}
>
{{copy}}
</a>
</li>
{{/each}}
</ul>
</div>