feat: Hugo engine for iGaming affiliate template (layouts, assets, i18n, verified data, CI build script)
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
/* =========================================================================
|
||||
games-filter.js — Alpine.js component powering the slots library filter.
|
||||
Cards are rendered server-side by Hugo (so thumbnails go through the image
|
||||
pipeline); this component toggles their visibility via data-attributes.
|
||||
Registered on `alpine:init`, so this file must load before the Alpine CDN.
|
||||
========================================================================= */
|
||||
document.addEventListener("alpine:init", function () {
|
||||
window.Alpine.data("gamesFilter", function () {
|
||||
return {
|
||||
provider: "all",
|
||||
category: "all",
|
||||
search: "",
|
||||
visibleCount: 0,
|
||||
|
||||
get normalizedSearch() {
|
||||
return this.search.trim().toLowerCase();
|
||||
},
|
||||
|
||||
cardVisible: function (el) {
|
||||
var okProvider =
|
||||
this.provider === "all" || el.dataset.provider === this.provider;
|
||||
var okCategory =
|
||||
this.category === "all" || el.dataset.category === this.category;
|
||||
var okSearch =
|
||||
this.normalizedSearch === "" ||
|
||||
(el.dataset.title || "").indexOf(this.normalizedSearch) !== -1;
|
||||
return okProvider && okCategory && okSearch;
|
||||
},
|
||||
|
||||
recount: function () {
|
||||
var self = this;
|
||||
var cards = this.$root.querySelectorAll("[data-game]");
|
||||
var n = 0;
|
||||
Array.prototype.forEach.call(cards, function (el) {
|
||||
if (self.cardVisible(el)) n++;
|
||||
});
|
||||
this.visibleCount = n;
|
||||
},
|
||||
|
||||
reset: function () {
|
||||
this.provider = "all";
|
||||
this.category = "all";
|
||||
this.search = "";
|
||||
},
|
||||
};
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user