Superfilter

A Superfilter allows you to define a complex, tiered, dropdown checkbox filter.

Filter Foods By:
Markup Details
                            {{ attach_library('goizueta_theme/superfilter') }}
<div class="superfilter" id="superfilter-{{ filter.id }}">
  <section class="sticky-container wide">
    <div class="sticky-container__inner">
      <div class="superfilter__filter-section">
        <div class="filter-narrow">
          <div class="filter-narrow__trigger">
            <button class="filter-narrow__trigger-button"
              aria-controls="{{ filter.id ~ '-items-narrow' }}" aria-expanded="false">
              {{ filter.trigger.narrow.label }}
            </button>
          </div>
          {% if filter.inline_filters or filter.display_switcher.narrow %}
            <div class="filter-narrow__extra-options">
              {% if filter.inline_filters %}
                {% for inline_filter in filter.inline_filters %}
                <div class="filter__inline-filter filter-narrow__inline-filter">
                  <input type="checkbox" class="inline-filter-checkbox"
                    id="inline-filter-narrow-{{ inline_filter.key }}" value="{{ inline_filter.key }}"
                    {% if inline_filter.default %}checked{% endif %}/>
                  <label for="inline-filter-narrow-{{ inline_filter.key }}" class="option">
                    {{ inline_filter.value }}
                  </label>
                </div>
                {% endfor %}
              {% endif %}
              {% if filter.display_switcher.narrow %}
                {{ filter.display_switcher.narrow }}
              {% endif %}
            </div>
          {% endif %}
          <div class="filter-narrow__filter-items" id="{{ filter.id ~ '-items-narrow' }}" style="display: none" hidden>
            <div class="filter-narrow__filter-options">
              {% for section in filter.dropdown_sections %}
                <button class="filter-narrow__section-head{% if section.prefilter %} prefilter{% endif %}"
                  aria-controls="{{ filter.id ~ '-narrow-section-' ~ section.key }}" aria-expanded="false">
                  {{ section.title }}
                </button>
                <div class="filter-narrow__section-filters {% if section.prefilter %} prefilter{% endif %}"
                  id="{{ filter.id ~ '-narrow-section-' ~ section.key }}"
                  data-key="{{ section.key }}" style="display: none" hidden>
                  <ul class="superfilter-checkboxes">
                  {% for option in section.options %}
                    <li class="superfilter-checkbox">
                      <input type="checkbox" id="{{ filter.id ~ '-narrow-checkbox-' ~ option.key }}" value="{{ option.key }}"
                        {% if section.prefilter %}
                          disabled
                          {% if section.prefilter == option.key %}checked{% endif %}
                        {% endif %}
                        />
                      <label for="{{ filter.id ~ '-narrow-checkbox-' ~ option.key }}" class="option">
                        {{ option.value }}
                      </label>
                    </li>
                  {% endfor %}
                  </ul>
                </div>
              {% endfor %}
            </div>
            {% if filter.widgets.narrow.inside_bottom %}
              <div class="filter-narrow__inside-bottom">
                {% for widget in filter.widgets.narrow.inside_bottom %}
                  {{ widget }}
                {% endfor %}
              </div>
            {% endif %}
            <div class="filter-narrow__bottom">
              {% if filter.inline_filters %}
                {% for inline_filter in filter.inline_filters %}
                <div class="filter__inline-filter filter-narrow__inline-filter">
                  <input type="checkbox" class="inline-filter-checkbox"
                    id="inline-filter-narrow-bottom-{{ inline_filter.key }}" value="{{ inline_filter.key }}"
                    {% if inline_filter.default %}checked{% endif %}/>
                  <label for="inline-filter-narrow-bottom-{{ inline_filter.key }}" class="option">
                    {{ inline_filter.value }}
                  </label>
                </div>
                {% endfor %}
              {% endif %}
              <div class="filter-narrow__actions">
                <button class="filter-narrow__clear button button--light" type="button">
                  <div class="button--inner">
                    <span class="button__text">
                      {{ "Clear"|t }}
                    </span>
                  </div>
                </button>
                <button class="filter-narrow__apply button button--light" type="button">
                  <div class="button--inner">
                    <span class="button__text">
                      {{ "Apply"|t }}
                    </span>
                  </div>
                </button>
              </div>
            </div>
          </div>
        </div>
        <div class="filter-wide">
          <div class="filter-wide__trigger">
            <div class="filter-wide__trigger-legend">{{ filter.trigger.wide.label }}:</div>
            {% for section in filter.dropdown_sections %}
              <button class="filter-wide__dropdown-trigger button button--light{% if section.prefilter %} prefilter{% endif %}"
                aria-controls="filter-wide__dropdown" aria-expanded="false"
                {% if section.prefilter %}disabled{% endif %}
                >
                <div class="button--inner">
                  <span class="button__text">
                    {{ section.title }}
                  </span>
                </div>
              </button>
            {% endfor %}
            {% if filter.inline_filters %}
            <div class="filter-wide__inline">
              {% for inline_filter in filter.inline_filters %}
                <div class="filter__inline-filter filter-wide__inline-filter">
                  <input type="checkbox" class="inline-filter-checkbox"
                    id="inline-filter-wide-{{ inline_filter.key }}" value="{{ inline_filter.key }}"
                    {% if inline_filter.default %}checked{% endif %}/>
                  <label for="inline-filter-wide-{{ inline_filter.key }}" class="option">
                    {{ inline_filter.value }}
                  </label>
                </div>
                {% endfor %}
            </div>
          {% endif %}
          {% if filter.display_switcher.wide %}
            <div class="filter-wide__display-switcher">
              {{ filter.display_switcher.wide }}
            </div>
          {% endif %}
          </div>
          <div class="filter-wide__dropdown" style="display: none" hidden>
            <div class="filter-wide__dropdown-inner">
            {% for section in filter.dropdown_sections %}
              <div class="filter-wide__dropdown-section{% if section.prefilter %} prefilter{% endif %}" data-key="{{ section.key }}">
                <div class="section-legend">{{ section.title }}</div>
                <ul class="superfilter-checkboxes">
                {% for option in section.options %}
                  <li class="superfilter-checkbox">
                    <input type="checkbox" id="{{ filter.id ~ '-wide-checkbox-' ~ option.key }}" value="{{ option.key }}"
                      {% if section.prefilter %}
                        disabled
                        {% if section.prefilter == option.key %}checked{% endif %}
                      {% endif %}
                    />
                    <label for="{{ filter.id ~ '-wide-checkbox-' ~ option.key }}" class="option">
                      {{ option.value }}
                    </label>
                  </li>
                {% endfor %}
              </div>
            {% endfor %}
            </div>
            <button class="filter-wide__dropdown-close">
              <span class="sr-only">{{ "Close"|t }}</span>
            </button>
          </div>
        </div>
      </div>
    </div>
  </section>
  <div class="superfilter__content-section">
    {% if filter.widgets.narrow.content_top %}
      <div class="filter-narrow__content-top">
        {% for widget in filter.widgets.narrow.content_top %}
          {{ widget }}
        {% endfor %}
      </div>
    {% endif %}
    {% if filter.widgets.wide.content_top %}
      <div class="filter-wide__content-top">
        {% for widget in filter.widgets.wide.content_top %}
          {{ widget }}
        {% endfor %}
      </div>
    {% endif %}
    {{ content }}
  </div>
</div>