<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"
    }
  ]
}
  • Content:
    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);
    };
    
  • URL: /components/raw/efl-learner-profile-tab/efl-learner-profile-tab.js
  • Filesystem Path: src/library/components/efl-learner-profile-tab/efl-learner-profile-tab.js
  • Size: 3.6 KB
  • Content:
    $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;
        }
      }
    }
    
  • URL: /components/raw/efl-learner-profile-tab/efl-learner-profile-tab.scss
  • Filesystem Path: src/library/components/efl-learner-profile-tab/efl-learner-profile-tab.scss
  • Size: 1.6 KB
<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>