PageSourceSearch

https://wpgoplugins.com/wp-content/themes/wpgo-site-theme-0107/ass…/js/home-catalogue.js?ver=0.10.7.1791043656

js wpgoplugins.com collected 2026-10-03 20:14:26 UTC 2,946 bytes, 83 lines download raw bytes

1(() => {
2  const featuredCards = [...document.querySelectorAll(".wpgo-relaunch-featured-card")];
3
4  featuredCards.forEach((card) => {
5    card.addEventListener("click", (event) => {
6      if (event.target instanceof Element && event.target.closest("a")) return;
7
8      const link = card.querySelector(
9        ".wpgo-relaunch-featured-card__link, .wpgo-relaunch-text-link a",
10      );
11      link?.click();
12    });
13  });
14
15  const catalogue = document.querySelector("[data-wpgo-home-catalogue]");
16  if (!catalogue) return;
17
18  const filterButtons = [...catalogue.querySelectorAll("[data-filter]")];
19  const groups = [...catalogue.querySelectorAll("[data-group]")];
20  const products = [...catalogue.querySelectorAll("[data-product]")];
21  const search = catalogue.querySelector("[data-plugin-search]");
22  const sort = catalogue.querySelector("[data-plugin-sort]");
23  const count = catalogue.querySelector("[data-visible-count]");
24  const empty = catalogue.querySelector("[data-empty-state]");
25  let activeFilter = "all";
26
27  const apply = () => {
28    const query = search.value.trim().toLocaleLowerCase("en-GB");
29    const direction = sort.value;
30    let visible = 0;
31
32    groups.forEach((group) => {
33      const category = group.dataset.group;
34      const target = group.querySelector("[data-group-products]");
35      const matches = products
36        .filter((product) => product.dataset.category === category)
37        .filter((product) => {
38          const matchesFilter = activeFilter === "all" || category === activeFilter;
39          const searchable = product.textContent.toLocaleLowerCase("en-GB");
40          return matchesFilter && (!query || searchable.includes(query));
41        })
42        .sort((a, b) => {
43          if (direction === "az") return a.dataset.name.localeCompare(b.dataset.name);
44          if (direction === "za") return b.dataset.name.localeCompare(a.dataset.name);
45          return Number(a.dataset.order) - Number(b.dataset.order);
46        });
47
48      matches.forEach((product) => {
49        product.hidden = false;
50        target.append(product);
51      });
52
53      products
54        .filter((product) => product.dataset.category === category && !matches.includes(product))
55        .forEach((product) => {
56          product.hidden = true;
57          target.append(product);
58        });
59
60      group.hidden = matches.length === 0;
61      visible += matches.length;
62    });
63
64    count.textContent = String(visible);
65    empty.hidden = visible !== 0;
66  };
67
68  filterButtons.forEach((button) => {
69    button.addEventListener("click", () => {
70      activeFilter = button.dataset.filter;
71      filterButtons.forEach((candidate) => {
72        const active = candidate === button;
73        candidate.classList.toggle("is-active", active);
74        candidate.setAttribute("aria-pressed", String(active));
75      });
76      apply();
77    });
78  });
79
80  search.addEventListener("input", apply);
81  sort.addEventListener("change", apply);
82  apply();
83})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.