<div data-behaviour="efl-index-page-filter" data-filter-type="courses" data-filter-url="">
    <div class="efl-index-page-filter">
        <div class="efl-index-page-filter__cancel">
            <a class="back-filter" tabindex="0" aria-label="back to main filter option"></a>
            <div class="filter-text">Adjust Filters</div>
            <a class="close-filter" tabindex="0">Cancel</a>
        </div>

        <div class="efl-index-page-filter__scroll">
            <div class="efl-index-page-filter__section">
                <div class="efl-index-page-filter__section--list">
                    <a class="efl-index-page-filter__section--level1 next-step" aria-expanded="false" aria-controls="filter-course-type" tabindex="0">
                        <div>
                            <div class="filterby">Filter by course type</div>
                            <div class="filtercontent">
                                <div class="title">Category</div>
                                <div class="filterslabel"></div>
                                <div class="filterscount">+<span>1</span>more</div>
                            </div>
                        </div>
                    </a>
                    <div class="efl-index-page-filter__options" id="filter-course-type">
                        <fieldset class="efl-index-page-filter__options--buttons course-type">
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-football-outfield" value="football-outfield">
                                <label for="opt-football-outfield">Football (outfield)</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-goalkeeping" value="goalkeeping">
                                <label for="opt-goalkeeping">Goalkeeping</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-futsal" value="futsal">
                                <label for="opt-futsal">Futsal</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-disability-football" value="disability-football">
                                <label for="opt-disability-football">Disability football</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-safeguarding" value="safeguarding">
                                <label for="opt-safeguarding">Safeguarding</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-medical" value="medical">
                                <label for="opt-medical">Medical</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-talent-identification" value="talent-identification">
                                <label for="opt-talent-identification">Talent Identification</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-pe-cpd" value="pe-cpd">
                                <label for="opt-pe-cpd">PE CPD</label>
                            </div>
                        </fieldset>
                    </div>
                </div>
                <div class="efl-index-page-filter__section--list">
                    <a class="efl-index-page-filter__section--level1 next-step" aria-expanded="false" aria-controls="filter-price" tabindex="0">
                        <div>
                            <div class="filterby">Filter by price</div>
                            <div class="filtercontent">
                                <div class="title">Price</div>
                                <div class="filterslabel"></div>
                                <div class="filterscount">+<span>1</span>more</div>
                            </div>
                        </div>
                    </a>
                    <div class="efl-index-page-filter__options" id="filter-price">
                        <fieldset class="efl-index-page-filter__options--buttons price">
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-free" value="free">
                                <label for="opt-free">Free</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-1-100" value="1-100">
                                <label for="opt-1-100">£1 - £100</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-101-500" value="101-500">
                                <label for="opt-101-500">£101 - £500</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-plus500" value="plus500">
                                <label for="opt-plus500">£500+</label>
                            </div>
                        </fieldset>
                    </div>
                </div>
                <div class="efl-index-page-filter__section--list">
                    <a class="efl-index-page-filter__section--level1 next-step" aria-expanded="false" aria-controls="filter-venue" tabindex="0">
                        <div>
                            <div class="filterby">Filter by venue</div>
                            <div class="filtercontent">
                                <div class="title">Venue</div>
                                <div class="filterslabel"></div>
                                <div class="filterscount">+<span>1</span>more</div>
                            </div>
                        </div>
                    </a>
                    <div class="efl-index-page-filter__options" id="filter-venue">
                        <fieldset class="efl-index-page-filter__options--buttons venue">
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-online-only" value="online-only">
                                <label for="opt-online-only">Online only</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-online-face-to-face" value="online-face-to-face">
                                <label for="opt-online-face-to-face">Online + face-to-face</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-face-to-face" value="face-to-face">
                                <label for="opt-face-to-face">Face-to-face only</label>
                            </div>
                        </fieldset>
                    </div>
                </div>
                <div class="efl-index-page-filter__section--list">
                    <a class="efl-index-page-filter__section--level1 next-step" aria-expanded="false" aria-controls="filter-level" tabindex="0">
                        <div>
                            <div class="filterby">Filter by level</div>
                            <div class="filtercontent">
                                <div class="title">Level</div>
                                <div class="filterslabel"></div>
                                <div class="filterscount">+<span>1</span>more</div>
                            </div>
                        </div>
                    </a>
                    <div class="efl-index-page-filter__options" id="filter-level">
                        <fieldset class="efl-index-page-filter__options--buttons level">
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-grassroots" value="grassroots">
                                <label for="opt-grassroots">Grassroots</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-talent-development" value="talent-development">
                                <label for="opt-talent-development">Talent development</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-senior-game" value="senior-game">
                                <label for="opt-senior-game">Senior game</label>
                            </div>
                        </fieldset>
                    </div>
                </div>
                <div class="efl-index-page-filter__section--list">
                    <a class="efl-index-page-filter__section--level1 next-step" aria-expanded="false" aria-controls="filter-your-role" tabindex="0">
                        <div>
                            <div class="filterby">Filter by your role</div>
                            <div class="filtercontent">
                                <div class="title">Job relevance</div>
                                <div class="filterslabel"></div>
                                <div class="filterscount">+<span>1</span>more</div>
                            </div>
                        </div>
                    </a>
                    <div class="efl-index-page-filter__options" id="filter-your-role">
                        <fieldset class="efl-index-page-filter__options--buttons your-role">
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-coach" value="coach">
                                <label for="opt-coach">Coach</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-medic" value="medic">
                                <label for="opt-medic">Medic</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-safeguarding-officer" value="safeguarding-officer">
                                <label for="opt-safeguarding-officer">Safeguarding officer</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-scout-talent-id" value="scout-talent-id">
                                <label for="opt-scout-talent-id">Scout / Talent ID</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-teacher" value="teacher">
                                <label for="opt-teacher">Teacher</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-club-admin" value="club-admin">
                                <label for="opt-club-admin">Club admin</label>
                            </div>
                            <div role="checkbox" aria-checked="false" class="filter-buttons">
                                <input type="checkbox" class="" id="opt-volunteer" value="volunteer">
                                <label for="opt-volunteer">Volunteer</label>
                            </div>
                        </fieldset>
                    </div>
                </div>
            </div>
        </div>

        <div class="efl-index-page-filter__button-group">
            <div class="efl-index-page-filter__button-group--results">
                <a role="button" class="result" tabindex="0">Show Me <span id="showmeresult"></span><span> Results</span></a>
                <div class="no-result hidden">Sorry there are 0 results</div>
                <a role="button" class="filter reset-filter" tabindex="0">Reset Filters</a>
            </div>
            <div class="efl-index-page-filter__button-group--apply-filter">
                <a role="button" class="result apply-filters" tabindex="0"> Apply Filters </a>
            </div>
        </div>
    </div>
    <div class="efl-index-page-filter__sticky hide-filter">
        <div role="button" class="efl-index-page-filter__sticky--content" tabindex="0">
            <div class="efl-index-page-filter__sticky--result">
                <span>Filter Results</span>
            </div>
            <div class="efl-index-page-filter__sticky--count">
                <div class="filter-count">0</div>
            </div>
        </div>
    </div>
</div>

No notes defined.

{
  "filter-type": "courses",
  "filter-url": "",
  "filters-level-1": [
    {
      "level1-label": "Filter by course type",
      "level1-title": "Category",
      "level1-category": "course-type",
      "level2-list": [
        {
          "title": "Football (outfield)",
          "level2-category": "football-outfield"
        },
        {
          "title": "Goalkeeping",
          "level2-category": "goalkeeping"
        },
        {
          "title": "Futsal",
          "level2-category": "futsal"
        },
        {
          "title": "Disability football",
          "level2-category": "disability-football"
        },
        {
          "title": "Safeguarding",
          "level2-category": "safeguarding"
        },
        {
          "title": "Medical",
          "level2-category": "medical"
        },
        {
          "title": "Talent Identification",
          "level2-category": "talent-identification"
        },
        {
          "title": "PE CPD",
          "level2-category": "pe-cpd"
        }
      ]
    },
    {
      "level1-label": "Filter by price",
      "level1-title": "Price",
      "level1-category": "price",
      "level2-list": [
        {
          "title": "Free",
          "level2-category": "free"
        },
        {
          "title": "£1 - £100",
          "level2-category": "1-100"
        },
        {
          "title": "£101 - £500",
          "level2-category": "101-500"
        },
        {
          "title": "£500+",
          "level2-category": "plus500"
        }
      ]
    },
    {
      "level1-label": "Filter by venue",
      "level1-title": "Venue",
      "level1-category": "venue",
      "level2-list": [
        {
          "title": "Online only",
          "level2-category": "online-only"
        },
        {
          "title": "Online + face-to-face",
          "level2-category": "online-face-to-face"
        },
        {
          "title": "Face-to-face only",
          "level2-category": "face-to-face"
        }
      ]
    },
    {
      "level1-label": "Filter by level",
      "level1-title": "Level",
      "level1-category": "level",
      "level2-list": [
        {
          "title": "Grassroots",
          "level2-category": "grassroots"
        },
        {
          "title": "Talent development",
          "level2-category": "talent-development"
        },
        {
          "title": "Senior game",
          "level2-category": "senior-game"
        }
      ]
    },
    {
      "level1-label": "Filter by your role",
      "level1-title": "Job relevance",
      "level1-category": "your-role",
      "level2-list": [
        {
          "title": "Coach",
          "level2-category": "coach"
        },
        {
          "title": "Medic",
          "level2-category": "medic"
        },
        {
          "title": "Safeguarding officer",
          "level2-category": "safeguarding-officer"
        },
        {
          "title": "Scout / Talent ID",
          "level2-category": "scout-talent-id"
        },
        {
          "title": "Teacher",
          "level2-category": "teacher"
        },
        {
          "title": "Club admin",
          "level2-category": "club-admin"
        },
        {
          "title": "Volunteer",
          "level2-category": "volunteer"
        }
      ]
    }
  ]
}
  • Content:
    /*eslint-disable */
    const filterOpenAnalytics = parentElement => {
      const btnName = parentElement.querySelector('.efl-index-page-filter__sticky--result').innerText;
    
      window.dataLayer.push({
        event: 'All event',
        event_name: 'filter_opened',
        link_text: btnName,
      });
    
      // Remove dataLayer event parameters after every event is fired
      window.dataLayer.push({
        event: 'Removal Tag',
        event_name: 'undefined',
        link_text: 'undefined',
      });
    };
    
    const filterCloseAnalytics = parentElement => {
      let optionSelected = '';
      const nextStep = parentElement.querySelector('.next-step[aria-expanded=true]');
    
      if (nextStep) {
        optionSelected = nextStep.querySelector('.title').innerText;
        // optionSelected = `level 1 Option ${optionSelected} selected`;
      }
    
      window.dataLayer.push({
        event: 'All event',
        event_name: 'filter_opened',
        link_text: 'Cancel',
        item_list_name: optionSelected,
      });
    
      // Remove dataLayer event parameters after every event is fired
      window.dataLayer.push({
        event: 'Removal Tag',
        event_name: 'undefined',
        link_text: 'undefined',
        item_list_name: 'undefined',
      });
    };
    
    const level1OptionAnalytics = (target) => {
      const optName = target.querySelector('.title').innerText;
    
      window.dataLayer.push({
        event: 'All event',
        event_name: 'filter_opened',
        link_text: optName,
      });
    
      // Remove dataLayer event parameters after every event is fired
      window.dataLayer.push({
        event: 'Removal Tag',
        event_name: 'undefined',
        link_text: 'undefined',
      });
    };
    
    const level2OptionAnalytics = (event, parentElement) => {
      const { target } = event;
      const opt2 = parentElement.querySelector('.next-step[aria-expanded=true]');
      const optName = target.innerText;
    
      window.dataLayer.push({
        event: 'All event',
        event_name: 'filter_selected',
        link_text: optName,
        item_list_name: opt2.querySelector('.title').innerText
      });
    
      // Remove dataLayer event parameters after every event is fired
      window.dataLayer.push({
        event: 'Removal Tag',
        event_name: 'undefined',
        link_text: 'undefined',
        item_list_name: 'undefined'
      });
    };
    
    const applyFilterAnalytics = (parentElement) => {
      const opt2 = parentElement.querySelector('.next-step[aria-expanded=true]');
    
      window.dataLayer.push({
        event: 'All event',
        event_name: 'filter_selected',
        link_text: 'Apply Filters',
        item_list_name: opt2.querySelector('.title').innerText
      });
    
      // Remove dataLayer event parameters after every event is fired
      window.dataLayer.push({
        event: 'Removal Tag',
        event_name: 'undefined',
        link_text: 'undefined',
        item_list_name: 'undefined'
      });
    };
    
    const showResultsAnalytics = (parentElement) => {
      const result = parentElement.querySelector('#showmeresult').innerText;
    
      window.dataLayer.push({
        event: 'All event',
        event_name: 'filter_selected',
        link_text: `SHOW ME ${result} RESULTS`,
      });
    
      // Remove dataLayer event parameters after every event is fired
      window.dataLayer.push({
        event: 'Removal Tag',
        event_name: 'undefined',
        link_text: 'undefined',
      });
    };
    
    const resetFilterAnalytics = () => {
      window.dataLayer.push({
        event: 'All event',
        event_name: 'filter_selected',
        link_text: `RESET FILTERS`,
      });
    
      // Remove dataLayer event parameters after every event is fired
      window.dataLayer.push({
        event: 'Removal Tag',
        event_name: 'undefined',
        link_text: 'undefined',
      });
    };
    
    const filterEvents = parentElement => {
      const allCards = document.querySelectorAll('[data-filter]');
      const applyfilter = parentElement.querySelector('.apply-filters');
      const resetfilter = parentElement.querySelector('.reset-filter');
      const backfilter = parentElement.querySelector('.back-filter');
      const closefilter = parentElement.querySelector('.close-filter');
      const resultfilter = parentElement.querySelector('.result');
      const noResult = parentElement.querySelector('.no-result');
      const linkslevel1 = parentElement.querySelectorAll('.next-step');
      const allFilters = parentElement.querySelector(
        '.efl-index-page-filter__section'
      );
      const ctaBlock = parentElement.querySelector(
        '.efl-index-page-filter__button-group'
      );
      const cancelBlock = parentElement.querySelector(
        '.efl-index-page-filter__cancel'
      );
      const event = new Event('filterupdate');
      const { filterType } = parentElement.dataset;
      let skipData = 18;
      let moreData = true;
      let isAjaxRuning = false;
    
      function showNextStep(event, obj) {
        const { target } = event;
        // console.log(typeof(target.getAttribute('aria-expanded')));
        if(obj.getAttribute('aria-expanded') === 'false') {
          obj.setAttribute('aria-expanded', 'true');
          obj.tabIndex = -1;
          ctaBlock.classList.add('active');
          cancelBlock.classList.add('active');
          allFilters.classList.add('active');
          const level2Filter = obj.nextElementSibling.querySelectorAll('input:not(.disable-buttons)');
    
          level2Filter.forEach((option, index) => {
            option.nextElementSibling.addEventListener('keydown', (e) => {
              if (e.keyCode === 40) {
                if (level2Filter[index + 1]) {
                  level2Filter[index + 1].nextElementSibling.focus();
                }
              } else if (e.keyCode === 38) {
                if (level2Filter[index - 1]) {
                  level2Filter[index - 1].nextElementSibling.focus();
                }
              } else if (e.keyCode === 13) {
                e.target.click();
              }
            });
          });
    
          // Level 1 filter options - Ananlytics
          level1OptionAnalytics(obj);
        }
      }
    
      function showFirstStep() {
        linkslevel1.forEach(link => {
          link.setAttribute('aria-expanded', 'false');
          link.tabIndex = 0;
        });
        ctaBlock.classList.remove('active');
        cancelBlock.classList.remove('active');
        allFilters.classList.remove('active');
      }
    
      function closeFilter() {
        document
          .querySelector('.efl-index-page-filter__sticky')
          .classList.remove('hide-filter');
        document
          .querySelector('.efl-index-page-filter')
          .classList.remove('add-animation');
        document.body.classList.remove('dark-overlay');
    
        filterCloseAnalytics(parentElement);
      }
    
      function resultFilter() {
        document
          .querySelector('.efl-index-page-filter')
          .classList.remove('hide-filter');
        document
          .querySelector('.efl-index-page-filter')
          .classList.remove('add-animation');
        document.body.classList.remove('dark-overlay');
    
        //show results analytics
        showResultsAnalytics(parentElement);
    
        window.scroll(0,document.querySelector('.efl-page-content__dynamic-placeholder').offsetTop);
      }
    
      function showChecked() {
        parentElement.querySelector('.filter-count').innerHTML = parentElement.querySelectorAll(
          'input:checked'
        ).length;
      }
    
      function selectedcardcount() {
        const divselectedcount = document.querySelectorAll('.efl-card');
        const cardselectedCount = [].slice.call(divselectedcount);
        const cardactiveCount = cardselectedCount.filter(function(el) {
          return !el.classList.contains('hidden');
        });
    
        parentElement.querySelector('#showmeresult').innerHTML = cardactiveCount.length;
      }
    
      function checkFilteredLabel() {
        parentElement.querySelectorAll('.next-step').forEach((level1) => {
          const firstFilterOpt = level1
            .nextElementSibling
            .querySelectorAll('input[type=checkbox]:checked');
    
          if (firstFilterOpt.length) {
            level1.querySelector('.filterslabel').innerText = firstFilterOpt[0]
              .nextElementSibling.innerText;
            level1.querySelector('.filterslabel').classList.add('active');
            level1.querySelector('.title').classList.add('hidden');
            level1.querySelector('.filterscount').classList.remove('active');
            if (firstFilterOpt.length > 1) {
              level1.querySelector('.filterscount').classList.add('active');
              level1.querySelector('.filterscount span').innerText = firstFilterOpt.length - 1;
            }
          } else {
            level1.querySelector('.filterslabel').classList.remove('active');
            level1.querySelector('.title').classList.remove('hidden');
            level1.querySelector('.filterscount').classList.remove('active');
          }
        });
      }
    
      function toggleCheckbox({ currentValue }) {
        allCards.forEach(filtercard => {
          const currentCardFilterData = JSON.parse(filtercard.dataset.filter);
    
          for (const filterdata in currentCardFilterData) {
            const data = currentCardFilterData[filterdata].split('|');
            if (
              currentValue.find(
                val =>
                data.includes(val)
              )
            ) {
              filtercard.classList.remove('hidden');
              break;
            } else {
              if (currentValue.length) {
                filtercard.classList.add('hidden');
              } else {
                filtercard.classList.remove('hidden');
              }
            }
          }
        });
    
        selectedcardcount();
        checkFilteredLabel();
        reRenderLayout();
        // Dispatch the event.
        window.dispatchEvent(event);
      }
    
      function reRenderLayout() {
        const cardlist = document.querySelectorAll('.efl-card-list__inner');
        cardlist.forEach((list) => {
          const eflCards = list.querySelectorAll('.efl-card:not(.hidden)');
          if (!eflCards.length) {
            list.closest('.efl-card-list').classList.add('hidden');
          } else {
            list.closest('.efl-card-list').classList.remove('hidden');
            resetClass(eflCards);
            selectClass(eflCards, eflCards.length);
            //displaySessionCount(eflCards.length)
            list.classList.remove(...list.classList);
            list.classList.add('efl-card-list__inner', `efl-card-list__inner--${eflCards.length}`);
          }
        })
      }
    
      // const displaySessionCount = (cardsLength) => {
      //   const firstCardList = document.querySelector('.efl-card-list');
      //   const titleContainer = firstCardList.querySelector('.efl-card-list__title');
      //   const howManySessions = firstCardList.createElement('div');
    
      //   howManySessions.innerHTML = `Showing ${cardsLength} Courses`;
      //   howManySessions.className = "efl-card-list--how-many-sessions";
    
      //   titleContainer.appendChild(howManySessions);
      // };
    
      function resetClass(cards) {
        cards.forEach(card => {
          if (!card.classList.contains('efl-card--1--full-width')) {
            // eslint-disable-next-line no-param-reassign
            card.className = '';
            card.classList.add('efl-card', 'efl-card--vertical');
            card.classList.remove('minimised-card');
          }
        });
      }
    
      // select CSS class determined by the number of session cards
      const selectClass = (cards, cardsLength) => {
        cards.forEach((eflCardElement, index) => {
          const eflCard = eflCardElement;
    
          eflCard.classList.add(`card${index + 1}`);
        });
        switch (cardsLength) {
          case 1:
            cards[0].classList.replace(
              'efl-card--vertical',
              'efl-card--horizontal'
            );
            break;
          case 2:
            cards[0].classList.replace(
              'efl-card--vertical',
              'efl-card--horizontal'
            );
            break;
          case 3:
            cards[0].classList.replace(
              'efl-card--vertical',
              'efl-card--horizontal'
            );
            break;
          case 4:
            cards[0].classList.replace(
              'efl-card--vertical',
              'efl-card--horizontal'
            );
            break;
          case 5:
            cards[0].classList.replace(
              'efl-card--vertical',
              'efl-card--horizontal'
            );
            break;
          case 6:
            cards[0].classList.replace(
              'efl-card--vertical',
              'efl-card--horizontal'
            );
            cards[1].classList.replace(
              'efl-card--vertical',
              'efl-card--horizontal'
            );
            break;
          case 7:
            cards[0].classList.replace('efl-card--vertical', 'efl-card--single');
            break;
          case 8:
            cards[0].classList.replace(
              'efl-card--vertical',
              'efl-card--horizontal'
            );
            cards[1].classList.replace(
              'efl-card--vertical',
              'efl-card--horizontal'
            );
            break;
          default:
        }
      };
    
      function resetCards(resetValue) {
        const resetcards = document.querySelectorAll('[data-filter]');
    
        if (resetValue.length === undefined) {
          for (let i = 0; i < resetcards.length; i += 1) {
            resetcards[i].classList.remove('hidden');
          }
        }
    
        selectedcardcount();
        reRenderLayout();
      }
    
      function getQueryString(selectedOnly) {
        let queryStr = '';
        linkslevel1.forEach(link => {
          const level2opt = link.nextElementSibling.querySelectorAll('input[type=checkbox]:checked');
    
          if (selectedOnly === 'false' || level2opt.length) {
            queryStr += link.getAttribute('aria-controls').replace('filter-', '');
            queryStr += '=';
            level2opt.forEach((checkbox, index) => {
              if (index) {
                queryStr += `_${checkbox.value}`;
              } else {
                queryStr += `${checkbox.value}`;
              }
            });
            queryStr += '&';
          }
        });
        queryStr = queryStr.slice(0, -1); // to remove last &
        return queryStr;
      }
    
      function getTaxonomies() {
        const checkboxes = parentElement.querySelectorAll('input[type=checkbox]:checked');
        let taxonomies = '';
    
        checkboxes.forEach((checkbox, index) => {
          if (index) {
            taxonomies += `|${checkbox.value}`;
          } else {
            taxonomies += `${checkbox.value}`;
          }
        });
        return taxonomies;
      }
    
      function applyDefaultPageFilter(isAjax) {
        const params = new Proxy(new URLSearchParams(window.location.search), {
          get: (searchParams, prop) => searchParams.get(prop),
        });
        const selectedValue = [];
    
        linkslevel1.forEach(link => {
          const queryVar = link.getAttribute('aria-controls').replace('filter-', '');
    
          if (params[queryVar]) {
            const checkBoxs = params[queryVar].split('_');
    
            checkBoxs.forEach(checkbox => {
              selectedValue.push(checkbox);
              parentElement.querySelector(`input[value='${checkbox}'`).checked = true;
              // console.log(parentElement.querySelector(`#opt-${checkbox}`).checked);
            });
          }
        });
    
        if (selectedValue.length) {
          setTimeout (() => {
            if(isAjax === 'false') {
              showChecked();
              toggleCheckbox({
                currentValue: selectedValue,
              });
            } else {
              getSessions('true', 18, 0); // getSessions(defaultLoad, pageSize, skip);
              showChecked();
            }
          }, 500);
        }
      }
    
      function applyFilter() {
        const selectedValue = [];
        const checkboxes = parentElement.querySelectorAll('input[type=checkbox]');
    
        for (let i = 0; i < checkboxes.length; i++) {
          if (checkboxes[i].checked) {
            selectedValue.push(checkboxes[i].value);
          }
        }
    
        showChecked();
        toggleCheckbox({
          currentValue: selectedValue,
        });
        //zebraPattern();
    
        /*document
          .querySelector('.efl-index-page-filter')
          .classList.remove('hide-filter');
        document
          .querySelector('.efl-index-page-filter')
          .classList.remove('add-animation');
        document.body.classList.remove('dark-overlay');
        window.scroll(0,document.querySelector('.efl-page-content__dynamic-placeholder').offsetTop); */
    
        // apply filter analytics 
        applyFilterAnalytics(parentElement);
    
        showFirstStep();
    
        const redirectUrl = `${window.location.origin}${window.location.pathname}`;
        const queryStr = getQueryString('true');
    
        if (queryStr) {
          window.history.pushState({}, '', `${redirectUrl}?${queryStr}`);
        } else {
          window.history.pushState({}, '', `${redirectUrl}`);
        }
    
      }
    
      function resetFilter() {
        const unselectedValue = [];
        const reset = parentElement.querySelectorAll('input[type=checkbox]');
    
        for (let i = 0; i < reset.length; i++) {
          if (reset[i].checked) {
            reset[i].checked = false;
          }
        }
    
        showChecked();
        resetCards({
          resetValue: unselectedValue,
        });
    
        //zebraPattern();
    
        parentElement.querySelectorAll('.next-step').forEach((level1) => {
          level1.querySelector('.filterslabel').classList.remove('active');
          level1.querySelector('.title').classList.remove('hidden');
          level1.querySelector('.filterscount').classList.remove('active');
        });
    
        const redirectUrl = `${window.location.origin}${window.location.pathname}`;
    
        window.history.pushState({}, '', `${redirectUrl}`);
    
        // reset filter analytics
        resetFilterAnalytics();
      }
    
      function bindArticleSessionCardData(cardData, modifier) {
        const {isVideo, itemUrl, imageUrl, tagName, featuredText, title, description, readTime, publishedDate} = cardData;
        const videoClass = (isVideo) ? 'article-session-card__image--video': '';
        const modifierClass = (modifier) ? `article-session-card--${modifier}`: '';
        const dtVal = (featuredText === '') ? publishedDate: featuredText;
        return `
          <a href="${itemUrl}" class="article-session-card ${modifierClass}" aria-label="${title}">
            <div class="article-session-card__image ${videoClass}">
                <img src="${imageUrl}" loading="lazy"/>
            </div>
            <div class="article-session-card__content">
                <div class="article-session-card__inner">
                    <div class="article-session-card__content--category">${tagName}</div>
                    <div class="article-session-card__content--title">${title}</div>
                    <p class="article-session-card__content--description">${description}</p>
                </div>
                <div class="article-session-card__content--date-wrap">${readTime}&nbsp;&nbsp;–&nbsp;&nbsp;${dtVal}</div>
            </div>
        </a>`;
      }
    
      function bindSignpostData(cardData, htmlElement) {
        const {publishedDate, itemUrl, imageUrl, title, readTime} = cardData;
        htmlElement.setAttribute('href', itemUrl);
        htmlElement.querySelector('img').setAttribute('href', imageUrl);
        htmlElement.querySelector('h3').innerText = title;
        htmlElement.querySelector('p').innerHTML = `${publishedDate} <span>|</span> ${readTime}`;
      }
    
      async function getSessionsCallback(pageSize, skip) {
        const { filterUrl } = parentElement.dataset;
        const url = `/Resources/SearchArticles/?taxonomies=${getTaxonomies()}&startingNo=${skip}&pageSize=${pageSize}`;
        // eslint-disable-next-line compat/compat
        const response = await fetch(url, {
          headers: {
            'Content-Type': 'application/json',
          }
        });
    
        return response.json();
      }
    
      function clearPageData() {
        let pageElement = document.querySelector('.article-session-index');
        let singleCard = pageElement.querySelector('.article-session-card-list__single');
        let verticalCard = pageElement.querySelector('.article-session-card-list__vertical');
        let firstHorz = pageElement.querySelector('.article-session-card-list .article-session-card-list__horizontal');
        let signPost1 = pageElement.querySelector('.large-signpost-article:first-of-type');
        let signPost2 = pageElement.querySelector('.large-signpost-article:last-of-type');
        let eightCard = pageElement.querySelector('.article-session-index__eight');
        let eightFirst = eightCard.querySelector('.article-session-card-list__horizontal:first-child');
        let eightLast = eightCard.querySelector('.article-session-card-list__horizontal:last-child');
        let moreCard = pageElement.querySelector('.article-session-index__scroll');
    
        singleCard.innerHTML = '';
        verticalCard.innerHTML = '';
        firstHorz.innerHTML = '';
        if (eightFirst) {
          eightFirst.innerHTML = '';
        }
        if (eightLast) {
          eightLast.innerHTML = '';
        }
        if (signPost1) {
          signPost1.classList.add('hidden');
        }
        if (signPost2) {
          signPost2.classList.add('hidden');
        }
        if (moreCard) {
          moreCard.innerHTML = '';
          moreCard.classList.add('ajax');
        }
      }
    
      function renderSessionPage(response) {
        let pageElement = document.querySelector('.article-session-index');
        let singleVerCard = pageElement.querySelector('.article-session-card-list__single-vertical');
        let singleCard = pageElement.querySelector('.article-session-card-list__single');
        let verticalCard = pageElement.querySelector('.article-session-card-list__vertical');
        let firstHorz = pageElement.querySelector('.article-session-card-list .article-session-card-list__horizontal');
        let signPost1 = pageElement.querySelector('.large-signpost-article:first-of-type');
        let signPost2 = pageElement.querySelector('.large-signpost-article:last-of-type');
        let eightCard = pageElement.querySelector('.article-session-index__eight');
        let eightFirst = eightCard.querySelector('.article-session-card-list__horizontal:first-child');
        let eightLast = eightCard.querySelector('.article-session-card-list__horizontal:last-child');
    
        if (response && response!== 'null' && response.searchResults.length) {
          response.searchResults.forEach((cardData, index) => {
            if (response.searchResults.length === 1) {
              singleVerCard.classList.add('single-card-fullwidth');
            } else {
              singleVerCard.classList.remove('single-card-fullwidth');
            }
            if (index === 0) {
              // replace single card data
              singleCard.innerHTML = bindArticleSessionCardData(cardData, 'single');
            }
            else if (index > 0 && index < 4) {
              // replace vertical card data
              const verticalCardData = bindArticleSessionCardData(cardData, 'vertical');
    
              verticalCard.insertAdjacentHTML('beforeend', verticalCardData);
            }
            else if (index >= 4 && index < 8) {
              // replace horizontal card data
              const horzCardData = bindArticleSessionCardData(cardData, 'horizontal');
    
              firstHorz.insertAdjacentHTML('beforeend', horzCardData);
            }
            else if (index === 8) {
              signPost1.classList.remove('hidden');
              bindSignpostData(cardData, signPost1);
            }
            else if (index >= 9 && index <= 12) {
              const horzCardData = bindArticleSessionCardData(cardData, 'horizontal');
    
              eightFirst.insertAdjacentHTML('beforeend', horzCardData);
            }
            else if (index >= 13 && index <= 16) {
              const horzCardData = bindArticleSessionCardData(cardData, 'horizontal');
    
              eightLast.insertAdjacentHTML('beforeend', horzCardData);
            }
            else if (index === 17) {
              signPost2.classList.remove('hidden');
              bindSignpostData(cardData, signPost2);
            }
          });
        }
      }
    
      const removeLoading = () => {
        const loading = document.querySelector('.loading');
    
        if (loading) {
          loading.classList.remove('show');
        }
      };
    
      const showLoading = () => {
        const loading = document.querySelector('.loading');
    
        if (loading) {
          loading.classList.add('show');
        }
      };
    
      function renderMoreSession(response) {
        if (response && response!== 'null' && response.searchResults.length) {
          let moreItem = document.createElement('div');
          let moreCard = document.querySelector('.article-session-index__scroll');
    
          moreItem.classList.add('article-session-card-list__horizontal');
          response.searchResults.forEach((cardData, index) => {
            if (index < 4) {
              const horzCardData = bindArticleSessionCardData(cardData, 'horizontal');
              moreItem.insertAdjacentHTML('beforeend', horzCardData);
            }
          });
          moreCard.appendChild(moreItem);
        } else {
          moreData = false;
        }
      }
    
      function getSessions(defaultLoad, pageSize, skip) {
        try {
          showLoading();
          isAjaxRuning = true;
          if (!skip) {
            moreData = true;
            skipData = pageSize;
            clearPageData();
          }
          getSessionsCallback(pageSize, skip).then(response => {
            removeLoading();
            isAjaxRuning = false;
            if (response && response!== 'null' &&  response.filterCount) {
              parentElement.querySelector('#showmeresult').innerHTML = response.filterCount;
              resultfilter.classList.remove('hidden');
              noResult.classList.add('hidden');
            } else {
              if (defaultLoad === 'true') {
                parentElement.querySelector('#showmeresult').innerHTML = 0;
                resultfilter.classList.add('hidden');
                noResult.classList.remove('hidden');
              }
            }
            if (defaultLoad === 'true') {
              if (response && response!== 'null' &&  response.searchResults.length < 18) {
                moreData = false;
              }
              renderSessionPage(response);
            } else {
              if (response && response!== 'null' &&  response.searchResults.length < 4) {
                moreData = false;
              } else if (response && response!== 'null' &&  response.filterCount <= skip + pageSize) {
                moreData = false;
              }
              renderMoreSession(response);
            }
          });
        } catch (e) {
          throw new Error('Uable to retrive the sessions ::', e);
        }
      }
    
      function applySessionFilter() {
        getSessions('true', 18, 0); // getSessions(defaultLoad, pageSize, skip)
        showChecked();
        checkFilteredLabel();
    
    
        /*document
          .querySelector('.efl-index-page-filter')
          .classList.remove('hide-filter');
        document
          .querySelector('.efl-index-page-filter')
          .classList.remove('add-animation');
        document.body.classList.remove('dark-overlay');
        window.scroll(0,document.querySelector('.article-session-index').offsetTop);*/
    
        // apply filter analytics 
        applyFilterAnalytics(parentElement);
    
        showFirstStep();
    
        const redirectUrl = `${window.location.origin}${window.location.pathname}`;
        const queryStr = getQueryString('true');
    
        if (queryStr) {
          window.history.pushState({}, '', `${redirectUrl}?${queryStr}`);
        } else {
          window.history.pushState({}, '', `${redirectUrl}`);
          location.href = redirectUrl;
        }
      }
    
      function resetSessionFilter() {
        // const reset = parentElement.querySelectorAll('input[type=checkbox]');
    
        // for (let i = 0; i < reset.length; i++) {
        //   if (reset[i].checked) {
        //     reset[i].checked = false;
        //   }
        // }
        // skipData = 18;
        // moreData = true;
        // getSessions('true', 18, 0); 
        // showChecked();
    
        // parentElement.querySelectorAll('.next-step').forEach((level1) => {
        //   level1.querySelector('.filterslabel').classList.remove('active');
        //   level1.querySelector('.title').classList.remove('hidden');
        //   level1.querySelector('.filterscount').classList.remove('active');
        // });
    
        const redirectUrl = `${window.location.origin}${window.location.pathname}`;
    
        // reset filter analytics
        resetFilterAnalytics();
    
        window.history.pushState({}, '', `${redirectUrl}`);
        location.href = redirectUrl;
      }
    
      const zebraPattern = () => {
        setTimeout(() => {
          const page = document.querySelectorAll('.efl-card-list:not(.hidden)')
    
          page.forEach((section, index) => {
            if (index % 2 !== 0) {
              section.classList.add('efl-card-list--section-bg');
            } else {
              section.classList.remove('efl-card-list--section-bg');
            }
          })
        }, 650)
      }
    
      window.addEventListener('scroll', () => {
        const { scrollTop, scrollHeight, clientHeight } = document.documentElement;
        const scrollEle = document.querySelector(
          '.article-session-index__scroll'
        );
    
        if(scrollEle && !scrollEle.classList.contains('ajax')) {
          return;
        } else if (!scrollEle) {
          return;
        }
    
        if (
          clientHeight + scrollTop >= scrollHeight - 5 &&
          moreData &&
          !isAjaxRuning
        ) {
          getSessions('false', 4, skipData + 1);
          skipData += 4;
        }
    
      });
    
      backfilter.addEventListener('click', showFirstStep);
      backfilter.addEventListener('keydown', (e) => {
        if (e.keyCode === 13) {
          e.preventDefault();
          showFirstStep();
        }
      });
    
      closefilter.addEventListener('click', closeFilter);
      closefilter.addEventListener('keydown', (e) => {
        if (e.keyCode === 13) {
          e.preventDefault();
          closeFilter();
        }
      });
    
      resultfilter.addEventListener('click', resultFilter);
    
      resultfilter.addEventListener('keydown', (e) => {
        if (e.keyCode === 13) {
          e.preventDefault();
          resultFilter();
          openFilter.focus();
        }
      });
    
      linkslevel1.forEach(link => {
        link.addEventListener('click', (e) => {
          showNextStep(e, link);
        });
    
        link.addEventListener('keydown', (e) => {
          if (e.keyCode === 13) {
            e.preventDefault();
            showNextStep(e, link);
            setTimeout(() => {
              e.target.nextElementSibling.querySelector('label').focus();
            }, 100);
          }
        });
      });
    
    
      if (filterType === 'sessions' || filterType === 'articles') {
        applyfilter.addEventListener('click', () => {
          applySessionFilter();
          resultfilter.focus();
        });
        applyfilter.addEventListener('keydown', (e) => {
          if (e.keyCode === 13) {
            e.preventDefault();
            applySessionFilter();
            resultfilter.focus();
          }
        });
        resetfilter.addEventListener('click', () => {
          resetSessionFilter();
          resultfilter.focus();
        });
        resetfilter.addEventListener('keydown', (e) => {
          if (e.keyCode === 13) {
            e.preventDefault();
            resetSessionFilter();
            resultfilter.focus();
          }
        });
        window.addEventListener('DOMContentLoaded', () => {
          applyDefaultPageFilter('true');
    
          const totalCard = document.querySelectorAll(
            '.article-session-card,.large-signpost-article'
          ).length;
          parentElement.querySelector('#showmeresult').innerHTML = totalCard;
        });
      } else {
        applyfilter.addEventListener('click', (e) => {
          applyFilter();
          resultfilter.focus();
        });
        applyfilter.addEventListener('keydown', (e) => {
          if (e.keyCode === 13) {
            e.preventDefault();
            applyFilter();
            resultfilter.focus();
          }
        });
        resetfilter.addEventListener('click', () => {
          resetFilter();
          resultfilter.focus();
        });
        resetfilter.addEventListener('keydown', (e) => {
          if (e.keyCode === 13) {
            e.preventDefault();
            resetFilter();
            resultfilter.focus();
          }
        });
        window.addEventListener('DOMContentLoaded', () => {
          applyDefaultPageFilter('false');
          //zebraPattern();
        });
      }
    
    
    };
    
    const disablefilter = (parentElement) => {
      const allCards = document.querySelectorAll('[data-filter]');
      const allFilters = parentElement.querySelectorAll(
        'input[type=checkbox]'
      );
      const checkboxValue = [];
    
      allFilters.forEach(checkbox => {
        checkbox.checked = false;
        checkboxValue.push(checkbox.value);
        checkbox.disabled = true;
        checkbox.classList.add('disable-buttons');
        checkbox.nextElementSibling.tabIndex = '-1';
      });
      window.addEventListener('DOMContentLoaded', () => {
        const cardCount = document.querySelectorAll('.efl-card').length;
        const allData = [];
    
        parentElement.querySelector('#showmeresult').innerHTML = cardCount;
    
        allCards.forEach(filtercard => {
          const currentCardData = JSON.parse(filtercard.dataset.filter);
    
          for (const filterdata in currentCardData) {
            const splitData = currentCardData[filterdata].split('|');
            splitData.forEach((data) => {
              if (!allData.includes(data)) {
                allData.push(data); 
              }
            });
          }
        });
    
        allData.forEach(availData => {
          if (checkboxValue.find(val => val === availData)) {
            parentElement.querySelector(`#opt-${availData}`).disabled = false;
            parentElement.querySelector(`#opt-${availData}`).classList.remove('disable-buttons');
            parentElement.querySelector(`#opt-${availData}`).nextElementSibling.tabIndex = '0';
          }
        });
        // console.log(allData);
      });
    };
    
    const disableSessionfilter = (parentElement) => {
      const allCards = document.querySelectorAll('[data-filter]');
      const allFilters = parentElement.querySelectorAll(
        'input[type=checkbox]'
      );
      const checkboxValue = [];
    
      allFilters.forEach(checkbox => {
        checkbox.checked = false;
        checkboxValue.push(checkbox.value);
        checkbox.disabled = true;
        checkbox.classList.add('disable-buttons');
        checkbox.nextElementSibling.tabIndex = '-1';
      });
      window.addEventListener('DOMContentLoaded', () => {
        const allData = [];
    
        allCards.forEach(filtercard => {
          const currentCardData = filtercard.dataset.filter;     
          const splitData = currentCardData.split('|');
    
          splitData.forEach((data) => {
            if (!allData.includes(data)) {
              allData.push(data); 
            }
          });
    
        });
    
        allData.forEach(availData => {
          if (checkboxValue.find(val => val === availData)) {
            parentElement.querySelector(`input[value='${availData}'`).disabled = false;
            parentElement.querySelector(`input[value='${availData}'`).classList.remove('disable-buttons');
            parentElement.querySelector(`input[value='${availData}'`).nextElementSibling.tabIndex = '0';
          }
        });
        // console.log(allData);
      });
    };
    
    export default parentElement => {
      const openFilter = parentElement.querySelector(
        '.efl-index-page-filter__sticky--content'
      );
      const closeFilter = document.querySelector('.close-filter');
      const stickyFilter = parentElement.querySelector('.efl-index-page-filter__sticky');
      const { filterType } = parentElement.dataset;
    
      const updateCheckboxLabel = () => {
        const checkboxes = parentElement.querySelectorAll('input[type=checkbox]');
    
        checkboxes.forEach(checkboxElement => {
          const checkbox = checkboxElement;
          if (checkbox.parentElement.classList.contains('filter-buttons')) {
            const checkboxContainer = checkbox.parentElement;
            checkbox.addEventListener('change', () => {
              if (checkbox.checked) {
                checkboxContainer.ariaChecked = true;
              } else {
                checkboxContainer.ariaChecked = false;
              }
            })
          }
        })
      }
    
      updateCheckboxLabel();
    
      const scrollFuncup = () => {
        if (
          window.scrollY + document.querySelector('.efl-index-page-filter__sticky').offsetTop > document.querySelector('.footer-section').offsetTop
        ) {
          stickyFilter.classList.add('hide-filter');
        } else {
          stickyFilter.classList.remove('hide-filter');
        }
      };
    
      const showFilterPanel = () => {
        const linkslevel1 = parentElement.querySelectorAll('.next-step');
        const allFilters = parentElement.querySelector(
          '.efl-index-page-filter__section'
        );
        const ctaBlock = parentElement.querySelector(
          '.efl-index-page-filter__button-group'
        );
        const cancelBlock = parentElement.querySelector(
          '.efl-index-page-filter__cancel'
        );
    
        stickyFilter.classList.add('hide-filter');
        document
          .querySelector('.efl-index-page-filter')
          .classList.add('add-animation');
        document.body.classList.add('dark-overlay');
        document.querySelector('.back-filter').classList.remove('active');
    
        linkslevel1.forEach(link => {
          link.setAttribute('aria-expanded', 'false');
          link.tabIndex = 0;
        });
        ctaBlock.classList.remove('active');
        cancelBlock.classList.remove('active');
        allFilters.classList.remove('active');
    
        filterOpenAnalytics(parentElement);
        setTimeout(() => {
          parentElement.querySelector('.close-filter').focus();
        },350);
      };
    
      /* const hideFilterPanel = () => {
        document
          .querySelector('.efl-index-page-filter')
          .classList.remove('add-animation');
        stickyFilter.classList.remove('hide-filter');
        document.body.classList.remove('dark-overlay');
    
        filterCloseAnalytics(parentElement);
      }; */
    
      document.addEventListener('click', (e) => {
        if(!(e.target.closest('.efl-index-page-filter__sticky') ||  e.target.closest('.efl-index-page-filter'))) {
          const filterpop = document.querySelector('.efl-index-page-filter');
    
          if (filterpop.classList.contains('add-animation')) {
            filterCloseAnalytics(parentElement);
          }
          document
            .querySelector('.efl-index-page-filter__sticky')
            .classList.remove('hide-filter');
          document
            .querySelector('.efl-index-page-filter')
            .classList.remove('add-animation');
          document.body.classList.remove('dark-overlay');
        }
      });
    
    
      openFilter.addEventListener('click', showFilterPanel);
    
      openFilter.addEventListener('keydown', (e) => {
        if (e.keyCode === 13) {
          e.preventDefault();
          showFilterPanel();
          setTimeout(() => {
            parentElement.querySelector('.close-filter').focus();
          },350);
        }
      });
    
      // closeFilter.addEventListener('click', hideFilterPanel);
      window.addEventListener('scroll', scrollFuncup);
    
      filterEvents(parentElement);
      // filtersectionEvents(parentElement);
      if (filterType === 'sessions' || filterType === 'articles') {
        // console.log('session');
        disableSessionfilter(parentElement);
      } else {
        disablefilter(parentElement);
      }
    
      window.addEventListener('DOMContentLoaded', () => {
        const filterOpts = parentElement.querySelectorAll('.filter-buttons > input:not(.disable-buttons)');
    
        filterOpts.forEach(filterOpt => {
          filterOpt.nextElementSibling.addEventListener('click', event => {
            level2OptionAnalytics(event, parentElement);
          });
        });
        scrollFuncup();
      });
    };
    
  • URL: /components/raw/efl-index-page-filter/efl-index-page-filter.js
  • Filesystem Path: src/library/components/efl-index-page-filter/efl-index-page-filter.js
  • Size: 37.5 KB
  • Content:
    .efl-index-page-filter {
      &__sticky {
        cursor: pointer;
        position: fixed;
        left: 50%;
        bottom: 4rem;
        visibility: visible;
        opacity: 1;
        transition: bottom 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);
        transform: translateX(-50%);
        z-index: 5;
    
        &.hide-filter {
          bottom: -5.8rem;
        }
    
        &--content {
          display: flex;
          align-items: center;
          box-shadow: 0 0.2rem 1.2rem rgba(57, 48, 48, 0.15);
          max-width: 32.7rem;
          width: calc(100vw - 5.2rem);
          height: 5.8rem;
          margin: 0 auto;
          -webkit-transition: all 200ms ease-in;
          -webkit-transform: scale(1);
          -ms-transition: all 200ms ease-in;
          -ms-transform: scale(1);
          -moz-transition: all 200ms ease-in;
          -moz-transform: scale(1);
          transition: all 200ms ease-in;
          transform: scale(1);
          border-radius: 5rem;
          background-color: $blue;
          &:focus-within,
          &:focus {
            outline-color: $red;
            outline-width: 2px;
          }
        }
    
        &--result {
          font-size: 2rem;
          line-height: 1.6rem;
          font-family: $ef-font;
          letter-spacing: 0.02em;
          font-weight: 700;
          text-transform: uppercase;
          width: 26.2rem;
          display: flex;
          align-items: center;
          justify-content: left;
          background: $blue;
          color: $white;
          border-radius: 5rem 0 0 5rem;
          height: 5.8rem;
          transition: all 0.3s ease;
          padding-left: 3rem;
    
          &::before {
            content: '';
            background: url(./assets/images/filter-icon.svg) no-repeat center;
            display: inline-block;
            width: 2rem;
            height: 1.5rem;
            margin-right: 1.7rem;
          }
        }
    
        &--count {
          background: $blue;
          padding: 1rem 1.4rem;
          border-radius: 0 5rem 5rem 0;
          transition: all 0.3s ease;
    
          .filter-count {
            font-family: $ef-font;
            font-size: 2rem;
            line-height: 3.2rem;
            background: $blue;
            width: 3.8rem;
            height: 3.8rem;
            color: $white;
            border-radius: 50%;
            align-items: center;
            display: flex;
            border: 0.5rem solid $white;
            justify-content: space-around;
            transition: all 0.3s ease;
          }
        }
        &:hover {
          .efl-index-page-filter__sticky--result {
            background: $white;
            color: $blue;
            border-top: 1px solid $crest-blue;
            border-bottom: 1px solid $crest-blue;
            border-left: 1px solid $crest-blue;
            &::before {
              background: url(./assets/images/filter-icon-blue.svg) no-repeat center;
            }
          }
          .efl-index-page-filter__sticky--count {
            background: $white;
            border-top: 1px solid $crest-blue;
            border-bottom: 1px solid $crest-blue;
            border-right: 1px solid $crest-blue;
            padding: 0.9rem 1.4rem;
            .filter-count {
              border-color: $crest-blue;
              color: $crest-blue;
              background: $white;
            }
          }
          .efl-index-page-filter__sticky--content {
            -webkit-transition: all 0.3s ease;
            -webkit-transform: scale(0.95);
            -ms-transition: all 0.3s ease;
            -ms-transform: scale(0.95);
            -moz-transition: all 0.3s ease;
            -moz-transform: scale(0.95);
            transition: all 0.3s ease;
            transform: scale(0.95);
            background-color: $white;
          }
        }
      }
    
      background: $crest-blue;
      height: 100%;
      width: 37.5rem;
      visibility: hidden;
      top: 0;
      left: -37.5rem;
      overflow: hidden;
      position: fixed;
      z-index: 110;
      opacity: 0;
      transition: all 0.25s;
      -webkit-transition: all 0.25s;
    
      &.add-animation {
        visibility: visible;
        opacity: 1;
        left: 0;
      }
    
      &__cancel {
        background: $white;
        display: flex;
        align-items: center;
        padding: 2.3rem 2rem 1.6rem 2.6rem;
        position: relative;
    
        .filter-text {
          @extend .efl-p-1;
    
          color: $black;
        }
    
        .close-filter {
          @extend .efl-p-1;
    
          color: $color-interface-light;
          display: flex;
          cursor: pointer;
          position: absolute;
          right: 2.2rem;
          &:focus,
          &:focus-visible {
            outline: auto;
          }
    
          &::after {
            content: '';
            background: url(./assets/images/icon-close.svg) no-repeat center;
            display: inline-block;
            width: 2rem;
            height: 2rem;
            margin-left: 1.6rem;
            position: relative;
            top: 0.1rem;
          }
        }
    
        .back-filter {
          font-size: 1.4rem;
          color: $blue;
          display: none;
          cursor: pointer;
    
          &::before {
            content: '';
            background: url(./assets/images/arrow-back.svg) no-repeat center;
            display: inline-block;
            width: 2rem;
            height: 2rem;
            margin-right: 1.8rem;
            position: relative;
            top: 0.2rem;
          }
        }
        &.active {
          .back-filter {
            display: block;
          }
          & + div {
            height: calc(100vh - 140px);
          }
        }
      }
    
      &__scroll {
        overflow-y: scroll;
        height: calc(100vh - 213px);
        width: 100%;
        overflow-x: hidden;
      }
    
      &__section {
        overflow-x: hidden;
        width: 100%;
        padding-bottom: 10rem;
        &--level1 {
          display: flex;
          justify-content: space-between;
          padding: 2.4rem 3rem 2.6rem 3.3rem;
          border-bottom: 1px solid rgba(236, 238, 243, 0.2);
          margin-bottom: 2px;
    
          .filterby {
            font-size: 1.4rem;
            line-height: 2rem;
            font-family: $ef-font;
            color: $white;
            opacity: 0.7;
            text-decoration: none;
            letter-spacing: 0.02em;
          }
    
          .title,
          .filterslabel {
            @extend .efl-heading-5;
    
            color: $white;
            text-decoration: none;
            text-transform: capitalize;
            margin-top: 0.6rem;
            font-weight: 700;
          }
          .filterslabel {
            display: none;
            &.active {
              display: block;
            }
          }
    
          .filtercontent {
            display: flex;
            align-items: center;
          }
    
          .filterscount {
            @extend .efl-heading-5;
    
            display: none;
            color: $white;
            text-decoration: none;
            padding-left: 0.5rem;
            margin-top: 0.6rem;
            font-weight: 500;
    
            span {
              padding: 0 0.5rem;
            }
            &.active {
              display: block;
            }
          }
          &[aria-expanded='false'] {
            &::after {
              content: '';
              background: url(./assets/images/arrow-next-white.svg) no-repeat center;
              display: inline-block;
              width: 2rem;
              height: 2rem;
              margin-top: 1rem;
              -webkit-transition: transform 0.3s ease-out;
              -moz-transition: transform 0.3s ease-out;
              -ms-transition: transform 0.3s ease-out;
              -o-transition: transform 0.3s ease-out;
              transition: transform 0.3s ease-out;
            }
            &:hover {
              border-bottom: 1px solid rgba(236, 238, 243, 0.7);
              .title,
              .filterslabel {
                font-weight: 700;
              }
              &::after {
                -webkit-transform: translateX(0.8rem);
                -moz-transform: translateX(0.8rem);
                -ms-transform: translateX(0.8rem);
                -o-transform: translateX(0.8rem);
                transform: translateX(0.8rem);
              }
            }
            & + div {
              display: none;
            }
          }
          &[aria-expanded='true'] {
            cursor: default;
            border-bottom: 3px solid rgba(236, 238, 243, 0.2);
            margin-bottom: 0;
          }
          &:focus-visible,
          &:focus {
            outline-color: $white;
          }
        }
    
        &--list {
          cursor: pointer;
          transition: 0.5s;
    
          .active-line {
            position: relative;
    
            &::after {
              content: '';
              background: $white;
              opacity: 0.2;
              height: 0.3rem;
              backdrop-filter: blur(81.5485px);
              position: absolute;
              margin: 0 auto;
              width: 100%;
            }
          }
    
          &:hover .efl-index-page-filter__section--level1 {
            &:hover {
              &::after {
                -webkit-transform: translateX(0.8rem);
                -moz-transform: translateX(0.8rem);
                -ms-transform: translateX(0.8rem);
                -o-transform: translateX(0.8rem);
                transform: translateX(0.8rem);
              }
            }
          }
        }
        &.active {
          .next-step {
            &[aria-expanded='false'] {
              display: none;
            }
            &[aria-expanded='true'] {
              position: fixed;
              width: 100%;
              background: #004f9f;
              z-index: 1;
            }
          }
        }
      }
    
      &__button-group {
        position: absolute;
        padding-bottom: 2.4rem;
        bottom: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        width: 100%;
        background: $crest-blue;
        padding-top: 2.4rem;
    
        &--results {
          display: flex;
          align-items: center;
          row-gap: 1.6rem;
          flex-direction: column;
          width: calc(100% - 6rem);
    
          .result {
            background: $red;
            border-radius: 0.2rem;
            width: 100%;
            height: 4.4rem;
            color: $white;
            padding: 0.8rem 1.2rem;
            font-family: $ef-font;
            font-size: 1.4rem;
            line-height: 2.8rem;
            text-align: center;
            letter-spacing: 0.01em;
            text-transform: uppercase;
            text-decoration: none;
            display: block;
            cursor: pointer;
    
            span {
              letter-spacing: 0.06em;
              &:first-child {
                margin-left: 0.3rem;
              }
            }
          }
    
          .no-result {
            background: $grey-light;
            border-radius: 0.2rem;
            width: 100%;
            height: 4.4rem;
            color: $blue;
            padding: 0.8rem 1.2rem;
            font-family: $ef-font;
            font-size: 1.4rem;
            line-height: 2.8rem;
            text-align: center;
            letter-spacing: 0.01em;
            text-transform: uppercase;
            text-decoration: none;
          }
    
          .filter {
            width: 100%;
            height: 4.4rem;
            color: $white;
            padding: 0.8rem 1.2rem;
            font-family: $ef-font;
            font-size: 1.4rem;
            line-height: 2.8rem;
            text-align: center;
            letter-spacing: 0.01em;
            background: transparent;
            border: 0.1rem solid $white;
            box-sizing: border-box;
            border-radius: 0.2rem;
            text-transform: uppercase;
            cursor: pointer;
          }
        }
    
        &--apply-filter {
          display: none;
    
          .result {
            background: $red;
            border-radius: 0.2rem;
            width: 33.5rem;
            height: 4.4rem;
            color: $white;
            padding: 0.8rem 1.2rem;
            font-family: $ef-font;
            font-size: 1.4rem;
            line-height: 2.8rem;
            text-align: center;
            letter-spacing: 0.01em;
            text-transform: uppercase;
            text-decoration: none;
            display: block;
            cursor: pointer;
          }
        }
        &.active {
          .efl-index-page-filter__button-group--results {
            display: none;
          }
          .efl-index-page-filter__button-group--apply-filter {
            display: block;
          }
        }
        &::before {
          content: '';
          background: $grey-light;
          opacity: 0.2;
          height: 0.1rem;
          backdrop-filter: blur(81.5485px);
          position: inherit;
          margin: 0 auto;
          width: 100%;
          top: 0;
        }
      }
    
      &__options {
        overflow-y: scroll;
        height: auto;
        padding-top: 10.5rem;
    
        &--buttons {
          /* display: none; */
    
          .filter-buttons {
            padding: 2rem 3.3rem 2rem 3.3rem;
            position: relative;
    
            input {
              display: none;
              cursor: pointer;
            }
    
            label {
              @extend .efl-p-1;
    
              position: relative;
              cursor: pointer;
              display: flex;
              letter-spacing: 0.02em;
              color: $white;
              justify-content: space-between;
              order: 2;
              user-select: none;
            }
    
            label::before {
              content: '';
              background: url(./assets/images/filter-selector.svg) no-repeat center;
              width: 3rem;
              height: 3rem;
              padding: 1rem;
              display: inline-block;
              position: relative;
              cursor: pointer;
              order: 2;
              transition: 0.4s;
            }
    
            &:hover label::before {
              background: url(./assets/images/filter-selector-hover.svg) no-repeat
                center;
              width: 3rem;
              height: 3rem;
              padding: 1rem;
              display: inline-block;
              position: relative;
              cursor: pointer;
            }
    
            .disable-buttons + label {
              opacity: 0.5;
              cursor: default;
            }
    
            .disable-buttons + label::before {
              display: none;
            }
    
            input:checked + label::before {
              background: url(./assets/images/filter-selector-selected.svg)
                no-repeat center;
              width: 3rem;
              height: 3rem;
              display: inline-block;
              position: relative;
              cursor: pointer;
              order: 1;
            }
    
            input:checked + label::after {
              content: '';
              background: url(./assets/images/filter-selector-tick.svg) no-repeat
                center;
              width: 1.04rem;
              height: 0.88rem;
              display: flex;
              align-items: center;
              justify-content: space-around;
              position: absolute;
              bottom: 1.1rem;
              right: 0.95rem;
            }
            &::after {
              content: '';
              background: $grey-light;
              opacity: 0.2;
              height: 0.1rem;
              width: 100%;
              position: absolute;
              left: 0;
              bottom: 0;
            }
            &:hover {
              &::after {
                opacity: 0.7;
              }
            }
          }
        }
      }
    
      &__options::-webkit-scrollbar {
        width: 0.2rem;
      }
    
      &__options::-webkit-scrollbar-track {
        background-color: $crest-blue;
        -webkit-border-radius: 1rem;
        border-radius: 1rem;
      }
    
      @media screen and (max-width: $mq-small) {
        width: 100%;
      }
    
      // 400% Zoom
      @media screen and (max-height: $mq-small) and (max-width: $mq-small) {
        &__sticky {
          bottom: 1rem;
        }
      }
    
      @media screen and (min-width: $mq-small) {
        &__options {
          padding-top: 10.5rem;
        }
        &__scroll {
          width: calc(100% + 25px);
          overflow-x: hidden;
          height: calc(100vh - 21.5rem);
        }
        &__cancel {
          &.active {
            & + div {
              padding-bottom: 0;
              height: calc(100vh - 155px);
            }
          }
        }
        &__section {
          overflow-x: hidden;
          width: 37.5rem;
          padding-bottom: 0;
          &--list {
            width: calc(100% + 18px);
          }
          &--level1 {
            margin-right: 18px;
          }
          &.active {
            .next-step {
              &[aria-expanded='true'] {
                position: fixed;
                width: 37.5rem;
                background: #004f9f;
                z-index: 1;
              }
            }
          }
        }
      }
    
      @media screen and (min-width: $mq-medium) {
        &__sticky {
          &--content {
            max-width: 67.9rem;
          }
          &--result {
            width: 61.3rem;
          }
        }
      }
    }
    
    .dark-overlay {
      overflow: hidden;
    
      &::after {
        content: '';
        display: block;
        position: fixed;
        width: 100%;
        height: 100%;
        top: 0;
        left: 0;
        background-color: rgba(black, 0.7);
        z-index: 101;
      }
    }
    
  • URL: /components/raw/efl-index-page-filter/efl-index-page-filter.scss
  • Filesystem Path: src/library/components/efl-index-page-filter/efl-index-page-filter.scss
  • Size: 16.1 KB
<div data-behaviour="efl-index-page-filter" data-filter-type="{{filter-type}}" data-filter-url="{{filter-url}}">
  <div class="efl-index-page-filter">
    <div class="efl-index-page-filter__cancel">
      <a class="back-filter" tabindex="0" aria-label="back to main filter option"></a>
      <div class="filter-text">Adjust Filters</div>
      <a class="close-filter" tabindex="0">Cancel</a>
    </div>

    <div class="efl-index-page-filter__scroll">
      <div class="efl-index-page-filter__section">
        {{#each filters-level-1}}
          <div class="efl-index-page-filter__section--list">
            <a class="efl-index-page-filter__section--level1 next-step" aria-expanded="false"
                    aria-controls="filter-{{level1-category}}" tabindex="0">
              <div>
                <div class="filterby">{{level1-label}}</div>
                <div class="filtercontent">
                  <div class="title">{{level1-title}}</div>
                  <div class="filterslabel"></div>
                  <div class="filterscount">+<span>1</span>more</div>
                </div>
              </div>
            </a>
            <div class="efl-index-page-filter__options" id="filter-{{level1-category}}">
              <fieldset class="efl-index-page-filter__options--buttons {{level1-category}}">
                {{#each level2-list}}
                <div role="checkbox" aria-checked="false" class="filter-buttons">
                  <input type="checkbox" class="" id="opt-{{level2-category}}" value="{{level2-category}}">
                  <label for="opt-{{level2-category}}">{{title}}</label>
                </div>
                {{/each}}
              </fieldset>
            </div>
          </div>
        {{/each}}
      </div>
    </div>

    <div class="efl-index-page-filter__button-group">
      <div class="efl-index-page-filter__button-group--results">
        <a role="button" class="result" tabindex="0">Show Me <span id="showmeresult"></span><span> Results</span></a>
        <div class="no-result hidden">Sorry there are 0 results</div>
        <a role="button" class="filter reset-filter" tabindex="0">Reset Filters</a>
      </div>
      <div class="efl-index-page-filter__button-group--apply-filter">
        <a role="button" class="result apply-filters" tabindex="0"> Apply Filters </a>
      </div>
    </div>
  </div>
  <div class="efl-index-page-filter__sticky hide-filter">
        <div role="button" class="efl-index-page-filter__sticky--content" tabindex="0">
            <div class="efl-index-page-filter__sticky--result">
                <span>Filter Results</span>
            </div>
            <div class="efl-index-page-filter__sticky--count">
                <div class="filter-count">0</div>
            </div>
        </div>
    </div>
</div>
  • Handle: @efl-index-page-filter
  • Preview:
  • Filesystem Path: src/library/components/efl-index-page-filter/efl-index-page-filter.hbs