Uname: Linux webm016.cluster127.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Software: Apache
PHP version: 7.4.33 [ PHP INFO ] PHP os: Linux
Server Ip: 54.36.31.145
Your Ip: 216.73.216.182
User: homesquasz (91404) | Group: users (100)
Safe Mode: OFF
Disable Function:
_dyuweyrj4,_dyuweyrj4r,dl

name : FilterControls.ts
import Filterizr from './Filterizr';
import { debounce } from './utils';
import EventReceiver from './EventReceiver';
import { Destructible } from './types/interfaces';

export default class FilterControls implements Destructible {
  private filterControls: EventReceiver;
  private filterizr: Filterizr;
  private multiFilterControls: EventReceiver;
  private searchControls: EventReceiver;
  private selector: string;
  private shuffleControls: EventReceiver;
  private sortAscControls: EventReceiver;
  private sortDescControls: EventReceiver;

  /**
   * @param filterizr keep a ref to the Filterizr object to control actions
   * @param selector selector of controls in case of multiple Filterizr instances
   */
  public constructor(filterizr: Filterizr, selector: string = '') {
    this.filterizr = filterizr;
    this.selector = selector;

    this.filterControls = new EventReceiver(
      document.querySelectorAll(`${selector}[data-filter]`)
    );
    this.multiFilterControls = new EventReceiver(
      document.querySelectorAll(`${selector}[data-multifilter]`)
    );
    this.shuffleControls = new EventReceiver(
      document.querySelectorAll(`${selector}[data-shuffle]`)
    );
    this.searchControls = new EventReceiver(
      document.querySelectorAll(`${selector}[data-search]`)
    );
    this.sortAscControls = new EventReceiver(
      document.querySelectorAll(`${selector}[data-sortAsc]`)
    );
    this.sortDescControls = new EventReceiver(
      document.querySelectorAll(`${selector}[data-sortDesc]`)
    );

    this.initialize();
  }

  public destroy(): void {
    this.filterControls.destroy();
    this.multiFilterControls.destroy();
    this.shuffleControls.destroy();
    this.searchControls.destroy();
    this.sortAscControls.destroy();
    this.sortDescControls.destroy();
  }

  private initialize(): void {
    const { filterizr, selector } = this;

    // Filter EventReceiver
    this.filterControls.on('click', (evt): void => {
      const ctrl: Element = evt.currentTarget as Element;
      const targetFilter: string = ctrl.getAttribute('data-filter');
      filterizr.filter(targetFilter);
    });
    this.multiFilterControls.on('click', (evt): void => {
      const ctrl: Element = evt.target as Element;
      const targetFilter = ctrl.getAttribute('data-multifilter');
      filterizr.toggleFilter(targetFilter);
    });

    // Shuffle EventReceiver
    this.shuffleControls.on('click', filterizr.shuffle.bind(filterizr));

    // Search EventReceiver
    this.searchControls.on('keyup', debounce(
      (evt: Event): void => {
        const textfield: HTMLInputElement = evt.target as HTMLInputElement;
        const searchTerm = textfield.value;
        filterizr.search(searchTerm);
      },
      250,
      false
    ) as EventListener);

    // Sort EventReceiver
    this.sortAscControls.on('click', (): void => {
      const sortAttr: string = (document.querySelector(
        `${selector}[data-sortOrder]`
      ) as HTMLInputElement).value;
      filterizr.sort(sortAttr, 'asc');
    });
    this.sortDescControls.on('click', (): void => {
      const sortAttr = (document.querySelector(
        `${selector}[data-sortOrder]`
      ) as HTMLInputElement).value;
      filterizr.sort(sortAttr, 'desc');
    });
  }
}
© 2026 GrazzMean