<section class="efl-learner-profile__section bookmark-list efl-learner-profile-bookmark" data-behavior="create-bookmark-list" data-edit-bookmark-id="2">
    <div class="efl-learner-profile-bookmark__list">
        <div class="efl-learner-profile__section--header">
            <h3 class="bookmark-list">Defending list</h3>
            <button aria-label="edit or delete bookmark of Defending list" class="efl-learner-profile__section--dot" aria-expanded="false"></button>
            <div class="efl-learner-profile-bookmark__list--manage hidden">
                <button class="edit-list" aria-label="edit list bookmark">Rename list</button>
                <button class="delete-list" aria-label="delete list bookmark">Delete list</button>
            </div>
        </div>
        <div class="efl-learner-profile-bookmark__tags">
            <span>1 Articles</span>
            <span>1 Sessions</span>
        </div>
        <div class="efl-learner-profile-bookmark__items">
            <div class="efl-learner-profile-bookmark__items--img" data-bookmark-page-id="08619b1b8cc34f5a95eb809ec15837ad">
                <img src="/assets/example-content/news-horizontal-1.jpg" alt="" loading="lazy" />
            </div>
            <div class="efl-learner-profile-bookmark__items--img" data-bookmark-page-id="08619b1b8cc34f5a95eb809ec15837ad">
                <img src="/assets/example-content/news-horizontal-1.jpg" alt="" loading="lazy" />
            </div>
            <div class="efl-learner-profile-bookmark__items--img" data-bookmark-page-id="08619b1b8cc34f5a95eb809ec15837ad">
                <img src="/assets/example-content/news-horizontal-1.jpg" alt="" loading="lazy" />
            </div>
        </div>
        <button class="cta cta--primary  view-bookmark-list" aria-label="view list bookmark of Defending list">view list</button>
    </div>
    <div class="efl-learner-profile-bookmark__details hidden">
        <div class="efl-learner-profile__section--header">
            <h3 class="bookmark-list">Defending list</h3>
            <div class="efl-learner-profile__section--sort">
                <button aria-label="sort bookmark list" class="efl-learner-profile__section--sort__link">Sort by: &nbsp; <span> All</span></button>
                <div aria-expanded="false" role="list" class="efl-learner-profile__section--sort__list">
                    <ul>
                        <li tabindex="0" data-value="All">All</li>
                        <li tabindex="0" data-value="Articles">Articles</li>
                        <li tabindex="0" data-value="Sessions">Sessions</li>
                    </ul>
                </div>
                <select class="efl-learner-profile__section--sort__select">
                    <option value="All">All</option>
                    <option value="Articles">Articles</option>
                    <option value="Sessions">Sessions</option>
                </select>
            </div>
        </div>
        <div class="efl-learner-profile-bookmark__details--list">
            <div class="bookmark-item" data-bookmark-page-id="08619b1b8cc34f5a95eb809ec15837ad">
                <a class="bookmark-item__link">
                    <div class="bookmark-item__link--img">
                        <img src="/assets/example-content/news-horizontal-1.jpg" alt="" loading="lazy" />
                    </div>
                    <div class="bookmark-item__link--content">
                        <p>Article</p>
                        <h5>How to create a great matchday experience</h5>
                    </div>
                </a>
                <button class="bookmark-item__bookmarkflag" aria-label="bookmark flag"></button>
            </div>
            <div class="bookmark-item" data-bookmark-page-id="8ed119426dd847cbb99a4b22baba296e">
                <a class="bookmark-item__link">
                    <div class="bookmark-item__link--img">
                        <img src="/assets/example-content/news-horizontal-1.jpg" alt="" loading="lazy" />
                    </div>
                    <div class="bookmark-item__link--content">
                        <p>Article</p>
                        <h5>How to create a great matchday experience</h5>
                    </div>
                </a>
                <button class="bookmark-item__bookmarkflag" aria-label="bookmark flag"></button>
            </div>
        </div>
    </div>
</section>

No notes defined.

{
  "modifier": "bookmark-list",
  "heading": "Defending list",
  "create-bookmark-list": false,
  "create-new-bookmark": {
    "href": "#",
    "copy": "Create list",
    "additionalClass": "create-new-bookmark-list",
    "id": "create-new-bookmark-list"
  },
  "create-list": {
    "href": "#",
    "copy": "create",
    "additionalClass": "create-new-bookmark"
  },
  "edit-list": {
    "href": "#",
    "copy": "save",
    "additionalClass": "edit-bookmark-list hidden"
  },
  "cancel-create": {
    "href": "#",
    "copy": "cancel",
    "additionalClass": "cancel-create-bookmark"
  },
  "exist-name": {
    "href": "#",
    "copy": "Edit name",
    "additionalClass": "edit-bookmark-name"
  },
  "delete-list": {
    "href": "#",
    "copy": "yes delete",
    "additionalClass": "delete-bookmark-list"
  },
  "cancel-delete": {
    "href": "#",
    "copy": "No, back to list",
    "additionalClass": "cancel-bookmark-delete"
  },
  "isMultiList": true,
  "edit-bookmark-id": 2,
  "view-list": {
    "href": "#",
    "copy": "view list",
    "additionalClass": "view-bookmark-list"
  },
  "bookmark-img": [
    {
      "img": "/assets/example-content/news-horizontal-1.jpg"
    },
    {
      "img": "/assets/example-content/news-horizontal-1.jpg"
    },
    {
      "img": "/assets/example-content/news-horizontal-1.jpg"
    }
  ]
}
  • Content:
    import { Dialog } from '../lightbox-overlay/lightbox-overlay';
    
    export default parentElement => {
      const DIALOG_ID = 'manage-bookmark-dialog';
      const createBookmark = parentElement.querySelector(
        '.create-new-bookmark-list'
      );
      const viewList = parentElement.querySelectorAll('.view-bookmark-list');
      const backCta = document.querySelector('.efl-learner-profile-bookmark__back');
      const container = document.querySelector(
        '[data-page="bookmarks"] .efl-learner-profile'
      );
      const bookmarkList = container.querySelectorAll(
        '.efl-learner-profile-bookmark'
      );
      const MOBILE_BREAKPOINT = 820;
      const { fanid } = document.querySelector(
        '.efl-profile-hero-banner__content--profile__picture--dp'
      ).dataset;
    
      const updatePopupDetails = option => {
        const popupDiv = document.querySelector(
          '.efl-learner-profile-bookmark__popup'
        );
        const step = popupDiv.querySelector('.step1');
        const heading = step.querySelector('h4');
        const createCta = step.querySelector('.create-new-bookmark');
        const editCta = step.querySelector('.edit-bookmark-list');
        const cancelCta = step.querySelector('.cancel-create-bookmark');
        const bookmarkDescCta = popupDiv.querySelector('.bookmark-add-desc');
        const subheading = step.querySelector(
          '.efl-learner-profile-bookmark__popup--copy'
        );
        const { createHeading, editHeading } = heading.dataset;
        const { createText, updateText } = subheading.dataset;
    
        if (option === 'create') {
          heading.innerHTML = createHeading;
          subheading.innerHTML = createText;
          createCta.classList.remove('hidden');
          editCta.classList.add('hidden');
          cancelCta.classList.remove('hidden');
          bookmarkDescCta.classList.remove('hidden');
        } else {
          heading.innerHTML = editHeading;
          subheading.innerHTML = updateText;
          createCta.classList.add('hidden');
          editCta.classList.remove('hidden');
          cancelCta.classList.add('hidden');
          bookmarkDescCta.classList.add('hidden');
        }
      };
    
      const generateLightBox = (labelId, option) => {
        const createBookmarkSection = document.querySelector(
          '.create-bookmark-list.efl-learner-profile-bookmark'
        );
        const popupDiv = createBookmarkSection.querySelector(
          '.efl-learner-profile-bookmark__popup'
        );
    
        if (option === 'remove-bookmark') {
          popupDiv.querySelector('.step1').classList.add('hidden');
          popupDiv.querySelector('.step2').classList.add('hidden');
          popupDiv.querySelector('.step3').classList.add('hidden');
          popupDiv.querySelector('.step5').classList.add('hidden');
          popupDiv.querySelector('.step4').classList.remove('hidden');
        } else if (option === 'delete') {
          popupDiv.querySelector('.step1').classList.add('hidden');
          popupDiv.querySelector('.step2').classList.add('hidden');
          popupDiv.querySelector('.step4').classList.add('hidden');
          popupDiv.querySelector('.step5').classList.add('hidden');
          popupDiv.querySelector('.step3').classList.remove('hidden');
        } else if (option !== 'delete') {
          updatePopupDetails(option);
          popupDiv.querySelector('.step1').classList.remove('hidden');
          popupDiv.querySelector('.step2').classList.add('hidden');
          popupDiv.querySelector('.step3').classList.add('hidden');
          popupDiv.querySelector('.step4').classList.add('hidden');
          popupDiv.querySelector('.step5').classList.add('hidden');
        }
    
        let html = popupDiv.outerHTML;
    
        html = html.replace(
          'efl-learner-profile-bookmark__popup hidden',
          'efl-learner-profile-bookmark__popup'
        );
    
        return `
        <div role="dialog" id="${DIALOG_ID}" aria-labelledby="${labelId}" aria-modal="true" class="lightbox-overlay">
          <div class="efl-learner-profile">
          ${html}
          </div>
        </div>`;
      };
    
      const removeLightBox = () => {
        if (document.getElementById(DIALOG_ID)) {
          document.getElementById(DIALOG_ID).remove();
        }
      };
    
      function getBookmarkListCount() {
        if (localStorage.getItem('bookmarkListData')) {
          const bookmarkListData = JSON.parse(
            localStorage.getItem('bookmarkListData')
          );
    
          return bookmarkListData.eflBookmarks.length - 1;
        }
        return 0;
      }
    
      const removeBookmarkItem = e => {
        e.preventDefault();
        const { editBookmarkId } = e.target.closest('section').dataset;
        const { bookmarkPageId } = e.target.closest('.bookmark-item').dataset;
    
        // eslint-disable-next-line no-use-before-define
        openLightbox(e.target, 'remove-bookmark', bookmarkPageId, editBookmarkId);
      };
    
      const removeBookmarkItemEvent = () => {
        const bookmarkItems = container.querySelectorAll(
          '.bookmark-item__bookmarkflag'
        );
    
        bookmarkItems.forEach(item => {
          item.addEventListener('click', removeBookmarkItem);
          item.addEventListener('keydown', event => {
            if (event.keyCode === 13) {
              event.preventDefault();
              item.click('click', removeBookmarkItem);
            }
          });
        });
      };
    
      const formateBookmarkItem = (sortedJson, target) => {
        const bookmarkItemList = target
          .closest('section')
          .querySelector('.efl-learner-profile-bookmark__details--list');
    
        bookmarkItemList.innerHTML = '';
    
        sortedJson.forEach(item => {
          const bookmarkItem = `
            <div class="bookmark-item" data-bookmark-page-id="${item.pageId}">
                <a class="bookmark-item__link" href="${item.bookmarkLink}">
                    <div class="bookmark-item__link--img">
                        <img src="${item.bookmarkImage}" alt="" loading="lazy" />
                    </div>
                    <div class="bookmark-item__link--content">
                        <p>${item.categoryTagName}</p>
                        <h5>${item.bookmarkHeadline}</h5>
                    </div>
                </a>
                <button class="bookmark-item__bookmarkflag" aria-label="bookmark flag"></button>
            </div>`;
    
          bookmarkItemList.insertAdjacentHTML('beforeend', bookmarkItem);
        });
        removeBookmarkItemEvent();
      };
    
      const sortBookmarkList = target => {
        const sortBy = target.value;
        const selectedBookmark = target
          .closest('section')
          .querySelector('h3.bookmark-list').innerText;
        const bookmarkListData = localStorage.getItem('bookmarkListData');
    
        // console.log(sortBy);
    
        if (bookmarkListData) {
          const bookmarkListJson = JSON.parse(bookmarkListData);
          let sortedJson = [];
    
          // console.log(selectedBookmark);
          bookmarkListJson.eflBookmarks.forEach(bookmark => {
            if (
              bookmark.tag === selectedBookmark ||
              (bookmark.tag === '' &&
                selectedBookmark.toLowerCase() === 'my bookmark list')
            ) {
              const sortBookmarkJson = [];
              const articleJson = [];
              const sessionJson = [];
    
              sortedJson = [];
    
              sortBookmarkJson.push(bookmark.bookmarks);
    
              // console.log(sortBookmarkJson);
    
              if (sortBy === 'Articles') {
                sortBookmarkJson[0].forEach(item => {
                  if (item.categoryTagName === 'Article') {
                    articleJson.push(item);
                  } else {
                    sessionJson.push(item);
                  }
                });
    
                sortedJson = articleJson.concat(sessionJson);
              } else if (sortBy === 'Sessions') {
                sortBookmarkJson[0].forEach(item => {
                  if (item.categoryTagName === 'Session') {
                    sessionJson.push(item);
                  } else {
                    articleJson.push(item);
                  }
                });
    
                sortedJson = sessionJson.concat(articleJson);
              } else if (sortBy === 'All') {
                // eslint-disable-next-line prefer-destructuring
                sortedJson = sortBookmarkJson[0];
              }
    
              // console.log(sortedJson);
            }
          });
    
          formateBookmarkItem(sortedJson, target);
        }
      };
    
      const toolTipEvent = () => {
        const bookmarkListSection = container.querySelectorAll(
          '.efl-learner-profile-bookmark'
        );
    
        if (window.innerWidth >= MOBILE_BREAKPOINT) {
          // bookmark function for desktop
          bookmarkListSection.forEach(list => {
            const dotcta = list.querySelector('.efl-learner-profile__section--dot');
            const editcta = list.querySelector(
              '.efl-learner-profile-bookmark__list--manage .edit-list'
            );
            const deletecta = list.querySelector(
              '.efl-learner-profile-bookmark__list--manage .delete-list'
            );
            const sortby = list.querySelector(
              '.efl-learner-profile__section--sort__link'
            );
            const dropdownListItems = list.querySelectorAll(
              '.efl-learner-profile__section--sort__list li'
            );
            const select = list.querySelector(
              '.efl-learner-profile__section--sort__select'
            );
            const dropdown = list.querySelector(
              '.efl-learner-profile__section--sort__list'
            );
    
            if (dotcta) {
              dotcta.addEventListener('click', e => {
                e.preventDefault();
    
                if (e.target.nextElementSibling.classList.contains('hidden')) {
                  e.target.nextElementSibling.classList.remove('hidden');
                  e.target.setAttribute('aria-expanded', 'true');
                  setTimeout(() => {
                    editcta.focus();
                  }, 50);
                }
              });
    
              dotcta.addEventListener('keydown', event => {
                if (event.keyCode === 13) {
                  dotcta.click();
                } else if (event.keyCode === 27) {
                  if (!dotcta.nextElementSibling.classList.contains('hidden')) {
                    dotcta.nextElementSibling.classList.add('hidden');
                    dotcta.setAttribute('aria-expanded', 'false');
                  }
                }
    
                setTimeout(() => {
                  editcta.focus();
                }, 10);
              });
    
              dotcta.addEventListener('mouseover', e => {
                e.target.nextElementSibling.classList.remove('hidden');
                e.target.nextElementSibling.addEventListener('mouseover', event => {
                  event.target.classList.add('active');
                });
                e.target.nextElementSibling.addEventListener(
                  'mouseleave',
                  event => {
                    event.target.classList.remove('active');
                    e.target.nextElementSibling.classList.add('hidden');
                  }
                );
              });
    
              dotcta.addEventListener('mouseleave', e => {
                setTimeout(() => {
                  if (!e.target.nextElementSibling.classList.contains('active')) {
                    e.target.nextElementSibling.classList.add('hidden');
                  }
                }, 500);
              });
            }
    
            if (editcta) {
              editcta.addEventListener('click', e => {
                e.preventDefault();
                const div = e.target.closest('.efl-learner-profile-bookmark__list');
                const title = div.querySelector('.bookmark-list').innerHTML;
                const { editBookmarkId } = e.target.closest('section').dataset;
    
                // eslint-disable-next-line no-use-before-define
                openLightbox(editcta, 'edit', title, editBookmarkId);
              });
    
              editcta.addEventListener('keydown', event => {
                if (event.keyCode === 13) {
                  editcta.click();
                } else if (event.keyCode === 27) {
                  if (!dotcta.nextElementSibling.classList.contains('hidden')) {
                    dotcta.nextElementSibling.classList.add('hidden');
                    dotcta.setAttribute('aria-expanded', 'false');
                    setTimeout(() => {
                      dotcta.focus();
                    }, 10);
                  }
                }
              });
            }
    
            if (deletecta) {
              deletecta.addEventListener('click', e => {
                e.preventDefault();
                const { editBookmarkId } = e.target.closest('section').dataset;
    
                // eslint-disable-next-line no-use-before-define
                openLightbox(deletecta, 'delete', '', editBookmarkId);
              });
    
              deletecta.addEventListener('keyup', event => {
                if (event.keyCode === 13) {
                  deletecta.click();
                } else if (event.keyCode === 27) {
                  if (!dotcta.nextElementSibling.classList.contains('hidden')) {
                    dotcta.nextElementSibling.classList.add('hidden');
                    dotcta.setAttribute('aria-expanded', 'false');
                    setTimeout(() => {
                      dotcta.focus();
                    }, 10);
                  }
                }
              });
            }
    
            if (sortby) {
              sortby.addEventListener('click', e => {
                e.preventDefault();
                dropdown.setAttribute('aria-expanded', 'true');
              });
    
              const closeList = () => {
                // selectDiv.classList.remove('active');
                dropdown.setAttribute('aria-expanded', 'false');
              };
    
              const setSelectedListItem = e => {
                const { target } = e;
    
                // selectDiv.innerText = target.getAttribute('data-value');
                dropdownListItems.forEach(item => {
                  item.classList.remove('active');
                });
                select.value = target.getAttribute('data-value');
                target.classList.add('active');
                select.dispatchEvent(new Event('change'));
              };
    
              dropdownListItems.forEach(item => {
                item.addEventListener('click', e => {
                  setSelectedListItem(e);
                  closeList();
                });
                item.addEventListener('keydown', event => {
                  if (event.keyCode === 13) {
                    item.click();
                  }
                });
              });
    
              select.addEventListener('change', event => {
                const { target } = event;
    
                sortby.querySelector('span').innerText = target.value;
    
                sortBookmarkList(target);
              });
            }
          });
    
          document.addEventListener('click', e => {
            if (!e.target.closest('.efl-learner-profile__section--sort')) {
              const bookmarkSort = document.querySelector(
                '.efl-learner-profile-bookmark:not(.hidden)'
              );
    
              if (bookmarkSort) {
                const sortDropDown = bookmarkSort.querySelector(
                  '.efl-learner-profile__section--sort__list'
                );
    
                if (sortDropDown) {
                  sortDropDown.setAttribute('aria-expanded', 'false');
                }
              }
            }
    
            if (
              !(
                e.target.closest('.efl-learner-profile-bookmark__list--manage') ||
                e.target.closest('.efl-learner-profile__section--dot')
              )
            ) {
              bookmarkListSection.forEach(list => {
                const tooltip = list.querySelector(
                  '.efl-learner-profile-bookmark__list--manage'
                );
                const dotcta = list.querySelector(
                  '.efl-learner-profile__section--dot'
                );
    
                if (tooltip) {
                  dotcta.nextElementSibling.classList.add('hidden');
                  dotcta.setAttribute('aria-expanded', 'false');
                }
              });
            }
          });
        } else {
          // bookmark function for mobile
          bookmarkListSection.forEach(list => {
            const dotcta = list.querySelector('.efl-learner-profile__section--dot');
            const editcta = list.querySelector(
              '.efl-learner-profile-bookmark__list--manage .edit-list'
            );
            const deletecta = list.querySelector(
              '.efl-learner-profile-bookmark__list--manage .delete-list'
            );
            const select = list.querySelector(
              '.efl-learner-profile__section--sort__select'
            );
            const sortby = list.querySelector(
              '.efl-learner-profile__section--sort__link'
            );
    
            if (dotcta) {
              dotcta.addEventListener('click', e => {
                e.preventDefault();
                document.body.classList.add('efl-profile-dark-overlay');
                e.target.nextElementSibling.classList.remove('hidden');
                e.target.setAttribute('aria-expanded', 'true');
                setTimeout(() => {
                  e.target.nextElementSibling.classList.add('add-animation');
                  editcta.focus();
                }, 50);
              });
    
              dotcta.addEventListener('keydown', event => {
                if (event.keyCode === 13) {
                  dotcta.click();
                } else if (event.keyCode === 27) {
                  if (!dotcta.nextElementSibling.classList.contains('hidden')) {
                    document.body.classList.remove('efl-profile-dark-overlay');
                    dotcta.nextElementSibling.classList.add('hidden');
                    dotcta.setAttribute('aria-expanded', 'false');
                    setTimeout(() => {
                      dotcta.nextElementSibling.classList.remove('add-animation');
                      dotcta.focus();
                    }, 50);
                  }
                }
              });
            }
    
            if (editcta) {
              editcta.addEventListener('click', e => {
                e.preventDefault();
                const div = e.target.closest('.efl-learner-profile-bookmark__list');
                const title = div.querySelector('.bookmark-list').innerHTML;
                const { editBookmarkId } = e.target.closest('section').dataset;
    
                // eslint-disable-next-line no-use-before-define
                openLightbox(editcta, 'edit', title, editBookmarkId);
                setTimeout(() => {
                  editcta.focus();
                }, 10);
              });
    
              editcta.addEventListener('keydown', event => {
                if (event.keyCode === 13) {
                  editcta.click();
                } else if (event.keyCode === 27) {
                  if (!dotcta.nextElementSibling.classList.contains('hidden')) {
                    document.body.classList.remove('efl-profile-dark-overlay');
                    dotcta.nextElementSibling.classList.add('hidden');
                    dotcta.setAttribute('aria-expanded', 'false');
                    setTimeout(() => {
                      dotcta.nextElementSibling.classList.remove('add-animation');
                      dotcta.focus();
                    }, 50);
                  }
                }
              });
            }
    
            if (deletecta) {
              deletecta.addEventListener('click', e => {
                e.preventDefault();
                const { editBookmarkId } = e.target.closest('section').dataset;
    
                // eslint-disable-next-line no-use-before-define
                openLightbox(deletecta, 'delete', '', editBookmarkId);
              });
    
              deletecta.addEventListener('keyup', event => {
                if (event.keyCode === 13) {
                  deletecta.click();
                } else if (event.keyCode === 27) {
                  if (!dotcta.nextElementSibling.classList.contains('hidden')) {
                    document.body.classList.remove('efl-profile-dark-overlay');
                    dotcta.nextElementSibling.classList.add('hidden');
                    dotcta.setAttribute('aria-expanded', 'false');
                    setTimeout(() => {
                      dotcta.nextElementSibling.classList.remove('add-animation');
                      dotcta.focus();
                    }, 50);
                  }
                }
              });
            }
    
            if (select) {
              select.addEventListener('change', event => {
                const { target } = event;
    
                sortby.querySelector('span').innerText = target.value;
                sortBookmarkList(target);
              });
            }
          });
    
          document.addEventListener('click', e => {
            if (
              !(
                e.target.closest('.efl-learner-profile-bookmark__list--manage') ||
                e.target.closest('.efl-learner-profile__section--dot')
              )
            ) {
              document.body.classList.remove('efl-profile-dark-overlay');
              bookmarkListSection.forEach(list => {
                const tooltip = list.querySelector(
                  '.efl-learner-profile-bookmark__list--manage'
                );
                const dotcta = list.querySelector(
                  '.efl-learner-profile__section--dot'
                );
    
                if (tooltip) {
                  tooltip.classList.remove('add-animation');
                  dotcta.setAttribute('aria-expanded', 'false');
                  setTimeout(() => {
                    tooltip.classList.add('hidden');
                  }, 300);
                }
              });
            }
          });
        }
      };
    
      const swithScreen = screen => {
        const lightbox = document.querySelector(`#${DIALOG_ID}`);
        const allSteps = lightbox.querySelectorAll('.steps');
        const activeStep = lightbox.querySelector(`.${screen}`);
    
        allSteps.forEach(steps => {
          steps.classList.add('hidden');
        });
        activeStep.classList.remove('hidden');
      };
    
      function generateBookmarkSection(
        listName,
        listDesc,
        articleLink,
        sessionLink
      ) {
        const bookmarkListCount = getBookmarkListCount();
        const bookmarkHtml = `
          <section class="efl-learner-profile__section bookmark-list efl-learner-profile-bookmark" data-behavior="create-bookmark-list" data-edit-bookmark-id="${bookmarkListCount}">
              <div class="efl-learner-profile-bookmark__list">
                  <div class="efl-learner-profile__section--header">
                      <h3 class="bookmark-list">${listName}</h3>
                      <button aria-label="edit or delete bookmark of ${listName}" class="efl-learner-profile__section--dot"></button>
                      <div class="efl-learner-profile-bookmark__list--manage hidden">
                          <button class="edit-list" aria-label="edit bookmark list">Rename list</button>
                          <button class="delete-list" aria-label="delete bookmark list">Delete list</button>
                      </div>
                  </div>
                  <div class="efl-learner-profile__section--nocourse-copy no-bookmark-list">
                      This list is empty. To add content, check out our <a href="${articleLink}">articles</a> and <a href="${sessionLink}">sessions</a> pages.
                  </div>
              </div>
          </section>`;
    
        /* const wrapper = document.createElement('div');
        const childEle = container.querySelector('*:nth-child(3)');
        wrapper.innerHTML= bookmarkHtml;
        console.log(wrapper.firstChild); */
    
        container.insertAdjacentHTML('beforeend', bookmarkHtml);
        // container.insertBefore(wrapper.innerHTML, container.querySelector('*:nth-child(3)'));
        // container.insertBefore(wrapper.firstChild, container.nextSibling);
      }
    
      const cardGridStyle = () => {
        bookmarkList.forEach(list => {
          const item = list.querySelector('.efl-learner-profile-bookmark__items');
    
          if (item) {
            const image = item.querySelectorAll(
              '.efl-learner-profile-bookmark__items--img'
            ).length;
    
            item.className = 'efl-learner-profile-bookmark__items';
            item.classList.add(`card-${image}`);
          }
        });
      };
    
      async function updateBookmarkListCallback(updateBookmark) {
        // console.log(oldBookmark);
    
        const url = `/Personalisation/UpdateUserBookmark`;
        // eslint-disable-next-line compat/compat
        const response = await fetch(url, {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
            'Cache-Control': 'no-cache',
            Pragma: 'no-cache',
            Expires: '0',
          },
          body: JSON.stringify(updateBookmark),
        });
    
        return response.json();
      }
    
      function updateBookmarkList(
        listName,
        listDesc,
        type,
        editId,
        removeItemId,
        articleLink,
        sessionLink,
        saveButton
      ) {
        try {
          let oldBookmark = [];
          let updateBookmark = [];
    
          if (saveButton) {
            saveButton.classList.add('loading-bar');
            saveButton.setAttribute('aria-disabled', 'true');
          }
    
          if (type === 'add') {
            const newBookmarkDetail = `{
              "tag": "${listName}",
              "description": "${listDesc}",
              "bookmarks": []
              }`;
    
            // console.log(oldBookmark);
            if (localStorage.getItem('bookmarkListData')) {
              oldBookmark = JSON.parse(localStorage.getItem('bookmarkListData'));
              updateBookmark = JSON.parse(
                localStorage.getItem('bookmarkListUpdateData')
              );
              const bookmarLength = oldBookmark.eflBookmarks.length;
    
              oldBookmark.eflBookmarks[bookmarLength] = JSON.parse(
                newBookmarkDetail
              );
              updateBookmark.eflBookmarks[bookmarLength] = JSON.parse(
                newBookmarkDetail
              );
            } else {
              const defaultBookmark = `{
                "bookmark": {
                  "id": "${fanid}",
                  "eflBookmarks": [${newBookmarkDetail}]
                }
              }`;
    
              oldBookmark = JSON.parse(defaultBookmark);
              updateBookmark = JSON.parse(defaultBookmark);
            }
          } else if (type === 'update') {
            oldBookmark = JSON.parse(localStorage.getItem('bookmarkListData'));
            updateBookmark = JSON.parse(
              localStorage.getItem('bookmarkListUpdateData')
            );
            oldBookmark.eflBookmarks[editId].tag = listName;
            updateBookmark.eflBookmarks[editId].tag = listName;
          } else if (type === 'delete') {
            oldBookmark = JSON.parse(localStorage.getItem('bookmarkListData'));
            updateBookmark = JSON.parse(
              localStorage.getItem('bookmarkListUpdateData')
            );
            oldBookmark.eflBookmarks.splice(editId, 1);
            updateBookmark.eflBookmarks.splice(editId, 1);
          } else if (type === 'remove-bookmark') {
            oldBookmark = JSON.parse(localStorage.getItem('bookmarkListData'));
            updateBookmark = JSON.parse(
              localStorage.getItem('bookmarkListUpdateData')
            );
            // console.log(oldBookmark);
            oldBookmark.eflBookmarks[editId].bookmarks.forEach((e, i) => {
              if (e.pageId === removeItemId) {
                oldBookmark.eflBookmarks[editId].bookmarks.splice(i, 1);
              }
            });
    
            updateBookmark.eflBookmarks[editId].bookmarks.forEach((e, i) => {
              if (e.pageId === removeItemId) {
                updateBookmark.eflBookmarks[editId].bookmarks.splice(i, 1);
              }
            });
            updateBookmark.eflBookmarks[editId].bookmarks.filter(
              e => e.pageId !== removeItemId
            );
            // console.log(oldBookmark);
          }
    
          // isAjaxRuning = true;
          updateBookmarkListCallback(
            updateBookmark
            // eslint-disable-next-line complexity
          ).then(response => {
            if (
              response &&
              response.FAIWFResponse &&
              response.FAIWFResponse.IsAbusive
            ) {
              if (type === 'add' || type === 'update') {
                swithScreen('step5');
                saveButton.classList.remove('loading-bar');
                saveButton.setAttribute('aria-disabled', 'false');
              }
            } else if (response && !response.FAIWFResponse && response.Error) {
              if (type === 'add' || type === 'update') {
                swithScreen('step6');
                saveButton.classList.remove('loading-bar');
                saveButton.setAttribute('aria-disabled', 'false');
              }
            } else {
              localStorage.setItem('bookmarkListData', JSON.stringify(oldBookmark));
              localStorage.setItem(
                'bookmarkListUpdateData',
                JSON.stringify(updateBookmark)
              );
    
              if (type === 'add') {
                generateBookmarkSection(
                  listName,
                  listDesc,
                  articleLink,
                  sessionLink
                );
                toolTipEvent();
                removeLightBox();
              } else if (type === 'update') {
                const section = document.querySelector(
                  `.efl-learner-profile-bookmark[data-edit-bookmark-id="${editId}"]`
                );
                const viewDetails = section.querySelector(
                  '.efl-learner-profile-bookmark__details'
                );
    
                section.querySelector('h3.bookmark-list').innerText = listName;
    
                if (viewDetails) {
                  viewDetails.querySelector(
                    'h3.bookmark-list'
                  ).innerText = listName;
                }
    
                removeLightBox();
              } else if (type === 'delete') {
                const section = document.querySelector(
                  `.efl-learner-profile-bookmark[data-edit-bookmark-id="${editId}"]`
                );
    
                section.remove();
    
                // reset edit section id
                const bookmarkSection = container.querySelectorAll(
                  '.efl-learner-profile-bookmark'
                );
    
                bookmarkSection.forEach((list, index) => {
                  if (index) {
                    list.setAttribute('data-edit-bookmark-id', index - 1);
                  }
                });
    
                toolTipEvent();
                removeLightBox();
              } else if (type === 'remove-bookmark') {
                const bookmarkListSection = container.querySelector(
                  `.efl-learner-profile-bookmark[data-edit-bookmark-id="${editId}"]`
                );
                const bookmarkListItem = bookmarkListSection.querySelector(
                  `.bookmark-item[data-bookmark-page-id="${removeItemId}"]`
                );
                const bookmarkImg = bookmarkListSection.querySelector(
                  `.efl-learner-profile-bookmark__items--img[data-bookmark-page-id="${removeItemId}"]`
                );
    
                bookmarkListItem.classList.add('removing');
                setTimeout(() => {
                  bookmarkListItem.remove();
                  if (bookmarkImg) {
                    bookmarkImg.remove();
                    // eslint-disable-next-line no-unused-vars
                    cardGridStyle();
                  }
                }, 400);
              }
            }
          });
        } catch (e) {
          if (saveButton) {
            saveButton.classList.remove('loading-bar');
            saveButton.setAttribute('aria-disabled', 'false');
          }
          throw new Error('Unable to update bookmark data ::', e);
        }
      }
    
      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 curtop;
      };
    
      const checkNameExist = name => {
        const bookmarkLists = localStorage.getItem('bookmarkListData');
    
        if (bookmarkLists) {
          const bookmarkListJson = JSON.parse(bookmarkLists);
          const bookmarkJson = [];
    
          bookmarkListJson.eflBookmarks.forEach(bookmark => {
            bookmarkJson.push(bookmark.tag);
          });
    
          if (bookmarkJson.includes(name)) {
            return true;
          }
        }
        return false;
      };
    
      const removeBookmarkListItem = (bookmarkPageId, editBookmarkId) => {
        updateBookmarkList(
          '',
          '',
          'remove-bookmark',
          editBookmarkId,
          bookmarkPageId,
          '',
          '',
          ''
        );
      };
    
      const openLightbox = (focusBtn, option, title, updateId) => {
        // Create the lightbox
        const lightboxContainer = document.createElement('div');
    
        if (document.getElementById(DIALOG_ID)) {
          return;
        }
    
        lightboxContainer.innerHTML = generateLightBox(
          {
            labelId: focusBtn.getAttribute('id'),
          },
          option
        );
        document.body.appendChild(lightboxContainer);
        // eslint-disable-next-line no-new
        new Dialog({
          dialogId: DIALOG_ID,
          focusAfterClosed: focusBtn,
          focusFirst: 'close',
          closeCallBack: () => removeLightBox(),
        });
    
        const createList = lightboxContainer.querySelector('.create-new-bookmark');
        const cancelList = lightboxContainer.querySelector(
          '.cancel-create-bookmark'
        );
        const bookmarkName = lightboxContainer.querySelector('.bookmark-list-name');
        const bookmarkDescCta = lightboxContainer.querySelector(
          '.bookmark-add-desc'
        );
        const editBookmarkCta = lightboxContainer.querySelector(
          '.edit-bookmark-name'
        );
        const errorBookmarkCta = lightboxContainer.querySelector(
          '.error-bookmark-name'
        );
        const serverErrorBookmarkCta = lightboxContainer.querySelector(
          '.server-error-bookmark'
        );
        const deleteBookmarkCta = lightboxContainer.querySelector(
          '.delete-bookmark-list'
        );
        const cancelDeleteCta = lightboxContainer.querySelector(
          '.cancel-bookmark-delete'
        );
        const updateBookmarkCta = lightboxContainer.querySelector(
          '.edit-bookmark-list'
        );
        const removeBookmarkCta = lightboxContainer.querySelector(
          '.remove-bookmark-item'
        );
        const cancelRemoveBookmarkCta = lightboxContainer.querySelector(
          '.cancel-remove-bookmark'
        );
        const bookmarkDesc = lightboxContainer.querySelector(
          '.bookmark-desc-wrapper'
        );
        const { addText, cancelText } = bookmarkDescCta.dataset;
        const listName = lightboxContainer.querySelector('.bookmark-list-name');
        const listCount = lightboxContainer.querySelector(
          '.bookmark-list-name-count'
        );
        const listDesc = lightboxContainer.querySelector('.bookmark-list-desc');
        const listDescCount = lightboxContainer.querySelector(
          '.bookmark-list-desc-count'
        );
        const popupForm = lightboxContainer.querySelector(
          '.efl-learner-profile-bookmark__popup'
        );
        const articleLink = lightboxContainer.querySelector(
          '.bookmark-list-article-link'
        ).value;
        const sessionLink = lightboxContainer.querySelector(
          '.bookmark-list-session-link'
        ).value;
    
        bookmarkName.value = title;
        bookmarkName.focus();
        popupForm.setAttribute('data-edit-id', updateId);
    
        if (bookmarkDescCta) {
          bookmarkDescCta.addEventListener('click', e => {
            e.preventDefault();
            bookmarkDesc.classList.toggle('hidden');
            if (bookmarkDesc.classList.contains('hidden')) {
              bookmarkDescCta.innerText = addText;
              bookmarkDescCta.ariaLabel = `${addText} button`;
            } else {
              bookmarkDescCta.innerText = cancelText;
              bookmarkDescCta.ariaLabel = `${cancelText} button`;
              listDesc.value = '';
            }
          });
          bookmarkDescCta.addEventListener('keydown', event => {
            if (event.keyCode === 13) {
              event.preventDefault();
              bookmarkDescCta.click();
            }
          });
        }
    
        listName.addEventListener('input', e => {
          listCount.innerHTML = `${e.target.value.length}`;
        });
    
        listName.addEventListener('keydown', event => {
          if (event.shiftKey && event.keyCode === 9) {
            event.preventDefault();
          }
        });
    
        listDesc.addEventListener('input', e => {
          listDescCount.innerHTML = `${e.target.value.length}`;
        });
    
        createList.addEventListener('click', e => {
          e.preventDefault();
    
          if (e.target.getAttribute('aria-disabled') === 'true') {
            return;
          }
    
          const name = listName.value;
    
          if (checkNameExist(name)) {
            swithScreen('step2');
          } else {
            updateBookmarkList(
              name,
              listDesc.value,
              'add',
              0,
              0,
              articleLink,
              sessionLink,
              createList
            );
          }
    
          createBookmark.focus();
        });
    
        updateBookmarkCta.addEventListener('click', e => {
          e.preventDefault();
    
          if (e.target.getAttribute('aria-disabled') === 'true') {
            return;
          }
    
          const { editId } = popupForm.dataset;
    
          updateBookmarkList(
            listName.value,
            listDesc.value,
            'update',
            editId,
            0,
            '',
            '',
            updateBookmarkCta
          );
          createBookmark.focus();
        });
    
        updateBookmarkCta.addEventListener('keydown', event => {
          if (event.shiftKey && event.keyCode === 9) {
            // empty
          } else if (event.keyCode === 9) {
            event.preventDefault();
            bookmarkName.focus();
          } else if (event.keyCode === 13) {
            updateBookmarkCta.click();
          }
        });
    
        editBookmarkCta.addEventListener('click', e => {
          e.preventDefault();
          swithScreen('step1');
        });
    
        errorBookmarkCta.addEventListener('click', e => {
          e.preventDefault();
          swithScreen('step1');
        });
    
        serverErrorBookmarkCta.addEventListener('click', e => {
          e.preventDefault();
          swithScreen('step1');
        });
    
        cancelList.addEventListener('click', e => {
          e.preventDefault();
          removeLightBox();
          createBookmark.focus();
        });
    
        cancelList.addEventListener('keydown', event => {
          if (event.shiftKey && event.keyCode === 9) {
            // empty
          } else if (event.keyCode === 9) {
            event.preventDefault();
            listName.focus();
          } else if (event.keyCode === 13) {
            cancelList.click();
          }
        });
    
        editBookmarkCta.addEventListener('click', e => {
          e.preventDefault();
          swithScreen('step1');
        });
    
        if (deleteBookmarkCta) {
          deleteBookmarkCta.focus();
        }
    
        deleteBookmarkCta.addEventListener('click', e => {
          e.preventDefault();
          const { editId } = popupForm.dataset;
    
          updateBookmarkList(
            listName,
            listDesc,
            'delete',
            editId,
            0,
            '',
            '',
            deleteBookmarkCta
          );
          createBookmark.focus();
        });
    
        deleteBookmarkCta.addEventListener('keydown', event => {
          if (event.shiftKey && event.keyCode === 9) {
            event.preventDefault();
          } else if (event.keyCode === 13) {
            deleteBookmarkCta.click();
          }
        });
    
        cancelDeleteCta.addEventListener('click', e => {
          e.preventDefault();
          removeLightBox();
          createBookmark.focus();
        });
    
        cancelDeleteCta.addEventListener('keydown', event => {
          if (event.keyCode === 9) {
            event.preventDefault();
            deleteBookmarkCta.focus();
          } else if (event.keyCode === 13) {
            event.preventDefault();
            cancelDeleteCta.click();
          }
        });
    
        removeBookmarkCta.focus();
        removeBookmarkCta.addEventListener('click', e => {
          e.preventDefault();
    
          console.log(title);
          console.log(updateId);
          removeBookmarkListItem(title, updateId);
          removeLightBox();
          backCta.focus();
        });
    
        removeBookmarkCta.addEventListener('keydown', event => {
          if (event.shiftKey && event.keyCode === 9) {
            event.preventDefault();
          } else if (event.keyCode === 13) {
            removeBookmarkCta.click();
          }
        });
    
        cancelRemoveBookmarkCta.addEventListener('click', e => {
          e.preventDefault();
          removeLightBox();
          backCta.focus();
        });
    
        cancelRemoveBookmarkCta.addEventListener('keydown', event => {
          if (event.keyCode === 9) {
            event.preventDefault();
            removeBookmarkCta.focus();
          } else if (event.keyCode === 13) {
            cancelRemoveBookmarkCta.click();
          }
        });
      };
    
      if (createBookmark) {
        createBookmark.addEventListener('click', e => {
          e.preventDefault();
          openLightbox(createBookmark, 'create', '', '');
        });
      }
    
      if (viewList) {
        viewList.forEach(viewListCta => {
          viewListCta.addEventListener('click', e => {
            e.preventDefault();
            const detail = e.target.closest('.efl-learner-profile__section');
            const bookmarkContainer = container.querySelectorAll(
              '.efl-learner-profile-bookmark'
            );
    
            bookmarkContainer.forEach(list => {
              list.classList.add('hidden');
            });
            e.target
              .closest('.efl-learner-profile__section')
              .classList.remove('hidden');
            detail
              .querySelector('.efl-learner-profile-bookmark__list')
              .classList.add('hidden');
            detail
              .querySelector('.efl-learner-profile-bookmark__details')
              .classList.remove('hidden');
            container.classList.add('bookmark-back');
            backCta.classList.remove('hidden');
    
            window.scroll(0, findPos(backCta) - 115);
            setTimeout(() => {
              backCta.focus();
            }, 50);
          });
        });
      }
    
      if (backCta) {
        backCta.addEventListener('click', e => {
          e.preventDefault();
    
          container.classList.remove('bookmark-back');
          backCta.classList.add('hidden');
          bookmarkList.forEach(list => {
            list.classList.remove('hidden');
            if (!list.classList.contains('create-bookmark-list')) {
              if (list.querySelector('.efl-learner-profile-bookmark__list')) {
                list
                  .querySelector('.efl-learner-profile-bookmark__list')
                  .classList.remove('hidden');
              }
              if (list.querySelector('.efl-learner-profile-bookmark__details')) {
                list
                  .querySelector('.efl-learner-profile-bookmark__details')
                  .classList.add('hidden');
              }
            }
          });
          window.scroll(0, 0);
          createBookmark.focus();
        });
    
        backCta.addEventListener('keydown', event => {
          if (event.keyCode === 13) {
            backCta.click();
          }
        });
      }
    
      cardGridStyle();
      toolTipEvent();
      removeBookmarkItemEvent();
    };
    
  • URL: /components/raw/efl-learner-profile-bookmark/efl-learner-profile-bookmark.js
  • Filesystem Path: src/library/components/efl-learner-profile-bookmark/efl-learner-profile-bookmark.js
  • Size: 41.2 KB
  • Content:
    .efl-learner-profile-bookmark {
      h4 {
        @extend .efl-heading-4;
    
        display: flex;
        align-items: center;
        margin-bottom: 1.6rem;
        font-size: 2.4rem;
    
        &.create-bookmark-list::before {
          content: '';
          background-image: url('./assets/images/profile-icons/plus-icon-red.svg');
          width: 1.8rem;
          height: 1.8rem;
          background-size: contain;
          background-repeat: no-repeat;
          display: inline-block;
          margin-right: 0.8rem;
        }
      }
      .efl-learner-profile__section--nocourse-copy {
        &::before {
          display: none;
        }
        &.no-bookmark-list {
          &::before {
            display: flex;
            margin-bottom: 1.6rem;
          }
          a {
            color: $blue-accent3;
            text-decoration: underline;
            font-weight: 700;
          }
        }
      }
      &__popup {
        max-width: 70.6rem;
        width: calc(100% - 1.6rem);
        margin: 0 auto;
        position: relative;
        h4 {
          @extend .efl-heading-3;
    
          display: flex;
          align-items: center;
          margin-bottom: 1.6rem;
          font-size: 2.4rem;
          line-height: 3rem;
          &.exist {
            letter-spacing: 0.16em;
            text-transform: uppercase;
            font-size: 1.6rem;
            line-height: 2.4rem;
            font-weight: 700;
            &::before {
              content: '';
              background: url('./assets/images/profile-icons/alert.svg') no-repeat
                center;
              width: 1.8rem;
              height: 1.8rem;
              background-repeat: no-repeat;
              display: inline-block;
              margin-right: 0.8rem;
            }
          }
        }
        &--copy {
          @extend .efl-p-medium;
    
          margin-bottom: 0.8rem;
          &::before {
            display: none;
          }
        }
        .lightbox-overlay__close {
          top: 2.4rem;
          right: 4rem;
          width: 4rem;
          height: 4rem;
          display: none;
          padding: 0;
          &::before {
            background: url('./assets/images/search-mechanic-modal-close.svg')
              no-repeat center center;
            height: 4rem;
            width: 4rem;
            background-size: contain;
            left: 0;
          }
        }
        &--form {
          display: flex;
          flex-direction: column;
          gap: 0.8rem;
          label {
            @extend .efl-p-medium;
    
            font-weight: 700;
            color: $blue;
            display: flex;
            justify-content: space-between;
            align-items: center;
          }
          p {
            font-size: 1.4rem;
            line-height: 1.4rem;
            color: $color-interface-light;
            font-weight: 400;
            display: flex;
            justify-content: flex-end;
          }
          input,
          textarea {
            @extend .efl-p-small;
    
            padding: 1rem 1.6rem;
            color: $blue;
            border: 2px solid $light-blue;
            border-radius: 2px;
            width: 100%;
          }
          textarea {
            height: 9.5rem;
            resize: none;
          }
          .bookmark-add-desc {
            @extend .efl-p-1;
    
            color: $color-interface-light;
            cursor: pointer;
          }
          .cta {
            margin-top: 0.8rem !important;
          }
        }
        .cancel-bookmark-delete {
          margin-top: 1.6rem;
        }
      }
      .efl-learner-profile__section--dot {
        padding: 0 0.8rem;
        height: 2.4rem;
        border: none;
        background: none;
        cursor: pointer;
        &::before {
          content: '';
          background-image: url('./assets/images/profile-icons/3dot.svg');
          width: 0.4rem;
          height: 2.6rem;
          background-size: contain;
          background-repeat: no-repeat;
          display: block;
        }
      }
      &__list {
        position: relative;
        &--manage {
          position: fixed;
          display: flex;
          background: white;
          flex-direction: column;
          border-radius: 2.4rem 2.4rem 0 0;
          padding: 3.2rem;
          bottom: -30rem;
          left: 0;
          width: 100%;
          z-index: 110;
          transition: bottom 0.3s ease-in-out;
          &.add-animation {
            bottom: 0;
          }
          &::before {
            content: '';
            position: absolute;
            width: 6.4rem;
            height: 0.3rem;
            background-color: $color-interface-light;
            left: calc(50% - 3.2rem);
            top: 0.8rem;
          }
          /* stylelint-disable no-descending-specificity */
          & > button {
            @extend .efl-p-medium;
    
            font-weight: 700;
            color: $blue;
            text-decoration: none;
            border: none;
            background: none;
            text-align: unset;
            padding: 0;
            cursor: pointer;
            &::after {
              content: '';
              border-bottom: 1px solid $grey-light;
              margin-bottom: 1.6rem;
              width: 100%;
              display: flex;
              padding-top: 1.6rem;
            }
            &:last-child {
              &::after {
                display: none;
              }
            }
          }
        }
      }
      &__tags {
        display: flex;
        gap: 0.8rem;
        & > span {
          border-radius: 10rem;
          background-color: $white;
          border: 0.2rem solid $light-blue;
          padding: 0.2rem 1.2rem;
          font-family: $text-font-ef;
          font-size: 1.2rem;
          font-style: normal;
          font-weight: 400;
          line-height: 1.7rem;
          color: $blue;
        }
      }
      &__items {
        margin: 1.6rem 0;
        display: grid;
        &.card-1 {
          grid-template-columns: auto;
        }
        &.card-2 {
          grid-template-columns: 50% 50%;
        }
        &.card-3 {
          grid-template-columns: 33.3% 33.3% 33.3%;
        }
        &--img {
          width: auto;
          height: 10rem;
          max-width: unset;
          border: 1px solid $white;
          overflow: hidden;
          background: url(./assets/images/new-card-placeholder-ef.jpg) no-repeat
            center;
          background-size: cover;
          img {
            width: 100%;
            max-width: unset;
            height: 100%;
            object-fit: cover;
            object-position: center;
          }
        }
      }
      .cta {
        &.view-bookmark-list {
          margin-top: 1.6rem;
        }
      }
      .efl-learner-profile__section--sort {
        position: relative;
        min-width: 165px;
        display: flex;
        justify-content: flex-end;
        &__link {
          @extend .efl-p-medium;
    
          color: $blue;
          text-decoration: none;
          display: flex;
          border: 2px solid transparent;
          border-radius: 4px;
          padding: 3px 10px 3px 18px;
          height: 30px;
          line-height: 24px;
          align-items: center;
          background: none;
          cursor: pointer;
          &::after {
            content: '';
            background-image: url('./assets/images/profile-icons/sortby.svg');
            width: 1.6rem;
            height: 1.1rem;
            background-size: cover;
            background-repeat: no-repeat;
            display: block;
            margin: 0.2rem 0 0 0.8rem;
          }
          &:hover {
            border: 2px solid $light-blue;
          }
        }
        &__list {
          &[aria-expanded='false'] {
            display: none;
          }
          & ul {
            & li {
              @extend .efl-p-medium;
            }
          }
        }
        &__select {
          @extend .efl-p-medium;
    
          padding: 0.8rem 1.6rem;
          -webkit-appearance: none;
          -moz-appearance: none;
          appearance: none;
          width: 100%;
          opacity: 0;
          position: absolute;
          top: 0;
          option {
            padding: 0.8rem 1.6rem;
          }
          &.active {
            opacity: 1;
          }
        }
      }
      &__details {
        &--list {
          display: flex;
          flex-direction: column;
          gap: 1.6rem;
          .bookmark-item {
            display: grid;
            align-items: center;
            grid-template-columns: auto 4rem;
            border-top: 1px solid $grey-light;
            padding-top: 1.6rem;
            gap: 3rem;
            opacity: 1;
            transition: all 0.3s linear;
            &.removing {
              opacity: 0.1;
            }
            &__link {
              text-decoration: none;
              display: flex;
              gap: 1.6rem;
              &--img {
                flex-shrink: 0;
                height: 6.2rem;
                width: 6.6rem;
                overflow: hidden;
                background: url(./assets/images/new-card-placeholder-ef.jpg)
                  no-repeat center;
                background-size: cover;
                img {
                  width: 100%;
                  height: 100%;
                  object-fit: cover;
                }
              }
              &--content {
                display: flex;
                justify-content: center;
                flex-direction: column;
                row-gap: 0.6rem;
                position: relative;
                p {
                  font-family: var(--brand-text--font-family);
                  font-size: 1.2rem;
                  line-height: 1.2rem;
                  letter-spacing: 0.08em;
                  color: $red;
                  text-transform: uppercase;
                }
                h5 {
                  color: $blue;
                  font-size: 1.8rem;
                  line-height: 2.4rem;
                  letter-spacing: 0.02em;
                  margin-bottom: 0.4rem;
    
                  @include text-limit(2);
                }
              }
            }
            &__bookmarkflag {
              background: $light-blue
                url('./assets/images/profile-icons/bookmark.svg') no-repeat center;
              width: 3.2rem;
              height: 3.2rem;
              padding: 0;
              border-radius: 50%;
              border: none;
              cursor: pointer;
            }
          }
        }
      }
      &__back {
        background-color: $white;
        padding: 1.3rem 2.6rem;
        margin: 0 -1.6rem;
        & > button {
          @extend .efl-p-medium;
    
          color: $blue;
          text-decoration: none;
          display: flex;
          align-items: center;
          background: none;
          border: none;
          padding: 0;
          cursor: pointer;
          &::before {
            content: '';
            background: url('./assets/images/arrow-back.svg') no-repeat center;
            width: 1.4rem;
            height: 0.9rem;
            margin-right: 1.5rem;
          }
        }
      }
    
      @media screen and (min-width: $mq-medium) {
        h4 {
          font-size: 2.8rem;
        }
        &__popup {
          h4 {
            font-size: 2.8rem;
          }
          .lightbox-overlay__close {
            display: flex;
          }
        }
        &__list {
          position: relative;
          h3 {
            margin-bottom: 1.6rem;
          }
          &--manage {
            position: absolute;
            right: 0;
            box-shadow: 0 0 16px rgba(91, 104, 133, 0.36);
            padding: 4rem;
            top: 38px;
            transform: translateX(43%);
            min-width: 21.2rem;
            width: initial;
            left: initial;
            bottom: initial;
            border-radius: 0;
            &::before {
              content: '';
              border-left: 15px solid transparent;
              border-right: 15px solid transparent;
              border-bottom: 15px solid white;
              width: 30px;
              position: absolute;
              top: -15px;
              left: calc(50% - 10px);
              background-color: transparent;
              height: auto;
            }
          }
        }
        &__tags {
          & > span {
            padding: 0.6rem 1.6rem;
          }
        }
        &__items {
          &--img {
            height: 18.2rem;
          }
        }
        &__details {
          &--list {
            .bookmark-item {
              &__link {
                &--img {
                  width: 14rem;
                  height: 8.5rem;
                }
                &--content {
                  p {
                    font-size: 1.6rem;
                    line-height: 2rem;
                  }
                  h5 {
                    font-size: 22px;
                    line-height: 24px;
                  }
                }
              }
              &__bookmarkflag {
                width: 4rem;
                height: 4rem;
              }
            }
          }
        }
        .efl-learner-profile__section--sort {
          &__select {
            display: none;
          }
          &__list {
            border: 1px solid $grey-light;
            box-sizing: border-box;
            border-radius: 0.4rem;
            box-shadow: 0 0 16px rgba(91, 104, 133, 0.36);
            position: absolute;
            background-color: $white;
            z-index: 1;
            padding: 4rem;
            margin-top: 4.5rem;
            min-width: 21.2rem;
            transform: translateX(38%);
            &::before {
              content: '';
              border-left: 20px solid transparent;
              border-right: 20px solid transparent;
              border-bottom: 20px solid white;
              width: 40px;
              position: absolute;
              top: -20px;
              left: calc(50% - 15px);
              background-color: transparent;
              height: auto;
            }
            & > ul {
              list-style: none;
              margin: 0;
              padding: 0;
              & > li {
                color: $black;
                font-weight: 700;
                cursor: pointer;
                display: flex;
                align-items: center;
                padding-bottom: 1.6rem;
                margin-bottom: 1.6rem;
                border-bottom: 1px solid $grey-light;
                &::before {
                  content: '';
                  background: url('./assets/images/radio.svg') no-repeat center;
                  width: 2.4rem;
                  height: 2.4rem;
                  display: flex;
                  margin-right: 0.9rem;
                }
                &.active {
                  &::before {
                    background-image: url('./assets/images/radio-checked.svg');
                  }
                }
                &:last-child {
                  padding-bottom: 0;
                  margin-bottom: 0;
                  border-bottom: none;
                }
              }
            }
            &[aria-expanded='false'] {
              display: none;
            }
          }
        }
        &__back {
          border-radius: 0.8rem;
          cursor: pointer;
          margin: 0;
        }
      }
    }
    
    #manage-bookmark-dialog .efl-learner-profile {
      max-width: 70.6rem;
      width: calc(100% - 1.6rem);
    }
    
    #manage-bookmark-dialog .efl-learner-profile__section--nocourse-copy {
      &.no-border {
        &::before {
          display: none;
        }
      }
    }
    
  • URL: /components/raw/efl-learner-profile-bookmark/efl-learner-profile-bookmark.scss
  • Filesystem Path: src/library/components/efl-learner-profile-bookmark/efl-learner-profile-bookmark.scss
  • Size: 13.5 KB
<section class="efl-learner-profile__section {{modifier}} efl-learner-profile-bookmark" data-behavior="create-bookmark-list" data-edit-bookmark-id="{{edit-bookmark-id}}">
    {{#if create-bookmark-list}}
    <div class="efl-learner-profile__section--header">
        <h4 class="{{modifier}}">{{heading}}</h4>
    </div>
    <div class="efl-learner-profile__section--nocourse-copy">
        Get organised and sort your bookmarked content into separate lists.
    </div>
    <button class="cta cta--primary  create-new-bookmark-list" id="create-new-bookmark-list" aria-label="create list bookmark">Create list</button>
    {{render '@efl-learner-profile-create-bookmark'}}
    {{/if}}
    {{#unless create-bookmark-list}}
    <div class="efl-learner-profile-bookmark__list">
        <div class="efl-learner-profile__section--header">
            <h3 class="{{modifier}}">{{heading}}</h3>
            <button aria-label="edit or delete bookmark of {{heading}}" class="efl-learner-profile__section--dot" aria-expanded="false"></button>
            <div class="efl-learner-profile-bookmark__list--manage hidden">
                <button class="edit-list" aria-label="edit list bookmark">Rename list</button>
                {{#unless is-default-list}}
                <button class="delete-list" aria-label="delete list bookmark">Delete list</button>
                {{/unless}}
            </div>
        </div>
        {{#unless isEmptyList}}
            <div class="efl-learner-profile-bookmark__tags">
                <span>1 Articles</span>
                <span>1 Sessions</span>
            </div>
            <div class="efl-learner-profile-bookmark__items">
                {{#each bookmark-img}}
                <div class="efl-learner-profile-bookmark__items--img" data-bookmark-page-id="08619b1b8cc34f5a95eb809ec15837ad">
                    <img src="{{img}}" alt="" loading="lazy" />
                </div>
                {{/each}}
            </div>
            {{#unless isMultiList}}
            <div class="efl-learner-profile__section--nocourse-copy">
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla finibus, diam vel vehicula iaculis, risus nunc dictum nis.
            </div>
            {{/unless}}
            <button class="cta cta--primary  view-bookmark-list" aria-label="view list bookmark of {{heading}}">view list</button>
        {{/unless}}
        {{#if isEmptyList}}
        <div class="efl-learner-profile__section--nocourse-copy no-bookmark-list">
            This list is empty. To add content, check out our <a>articles</a> and <a>sessions</a> pages.
        </div>
        {{/if}}
    </div>
    {{#unless isEmptyList}}
    <div class="efl-learner-profile-bookmark__details hidden">
        <div class="efl-learner-profile__section--header">
            <h3 class="{{modifier}}">{{heading}}</h3>
            <div class="efl-learner-profile__section--sort">
                <button aria-label="sort bookmark list" class="efl-learner-profile__section--sort__link">Sort by: &nbsp; <span> All</span></button>
                <div aria-expanded="false" role="list" class="efl-learner-profile__section--sort__list">
                    <ul>
                        <li tabindex="0" data-value="All">All</li>
                        <li tabindex="0" data-value="Articles">Articles</li>
                        <li tabindex="0" data-value="Sessions">Sessions</li>
                    </ul>
                </div>
                <select class="efl-learner-profile__section--sort__select">
                    <option value="All">All</option>
                    <option value="Articles">Articles</option>
                    <option value="Sessions">Sessions</option>
                </select>
            </div>
        </div>
        <div class="efl-learner-profile-bookmark__details--list">
            <div class="bookmark-item" data-bookmark-page-id="08619b1b8cc34f5a95eb809ec15837ad">
                <a class="bookmark-item__link">
                    <div class="bookmark-item__link--img">
                        <img src="/assets/example-content/news-horizontal-1.jpg" alt="" loading="lazy" />
                    </div>
                    <div class="bookmark-item__link--content">
                        <p>Article</p>
                        <h5>How to create a great matchday experience</h5>
                    </div>
                </a>
                <button class="bookmark-item__bookmarkflag" aria-label="bookmark flag"></button>
            </div>
            <div class="bookmark-item" data-bookmark-page-id="8ed119426dd847cbb99a4b22baba296e">
                <a class="bookmark-item__link">
                    <div class="bookmark-item__link--img">
                        <img src="/assets/example-content/news-horizontal-1.jpg" alt="" loading="lazy" />
                    </div>
                    <div class="bookmark-item__link--content">
                        <p>Article</p>
                        <h5>How to create a great matchday experience</h5>
                    </div>
                </a>
                <button class="bookmark-item__bookmarkflag" aria-label="bookmark flag"></button>
            </div>
        </div>
    </div>
    {{/unless}}
    {{/unless}}
</section>