rental catalog with gallery and category sorting
This commit is contained in:
parent
33d0761b2b
commit
4256ed3d36
3 changed files with 71 additions and 8 deletions
|
@ -17,7 +17,30 @@
|
||||||
"deliveryPickup": "",
|
"deliveryPickup": "",
|
||||||
"installBreakdown": "$200",
|
"installBreakdown": "$200",
|
||||||
"purchaseCost": "",
|
"purchaseCost": "",
|
||||||
"cat": "Backdrops"
|
"cat": "Backdrops",
|
||||||
|
"gallery": [
|
||||||
|
{
|
||||||
|
"image": "https://placehold.co/300x200/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"image": "https://placehold.co/200x200/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"image": "https://placehold.co/400x200/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"image": "https://placehold.co/300x200/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"image": "https://placehold.co/200x200/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"image": "https://placehold.co/400x200/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"image": "https://placehold.co/400x600/"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"item": "12ft Round Arch",
|
"item": "12ft Round Arch",
|
||||||
|
|
|
@ -107,6 +107,20 @@
|
||||||
<h3 class="text-xl mb-2" id="modal-title">
|
<h3 class="text-xl mb-2" id="modal-title">
|
||||||
<strong>{{ .item }}</strong>
|
<strong>{{ .item }}</strong>
|
||||||
</h3>
|
</h3>
|
||||||
|
{{ if .gallery }}
|
||||||
|
<div
|
||||||
|
class="mt-8 columns-1 gap-2 sm:columns-2 sm:gap-4 md:columns-3 lg:columns-4 [&>img:not(:first-child)]:mt-4"
|
||||||
|
>
|
||||||
|
{{ range .gallery }}
|
||||||
|
<img
|
||||||
|
loading="lazy"
|
||||||
|
class="rounded-lg hover:scale-110 ease-in-out duration-300 transition-all shadow-xl hover:shadow-2xl"
|
||||||
|
src="{{ .image }}"
|
||||||
|
/>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
<div class="px-1 pt-4 w-full">
|
<div class="px-1 pt-4 w-full">
|
||||||
<div class="text-gray-800 text-base">
|
<div class="text-gray-800 text-base">
|
||||||
{{ if ne .quant "" }}
|
{{ if ne .quant "" }}
|
||||||
|
@ -139,11 +153,6 @@
|
||||||
<strong>Purchase Cost:</strong>
|
<strong>Purchase Cost:</strong>
|
||||||
<span>{{ .purchaseCost }}</span>
|
<span>{{ .purchaseCost }}</span>
|
||||||
</div>
|
</div>
|
||||||
{{ end }} {{ if ne .cat "" }}
|
|
||||||
<div class="flex flex-row justify-between">
|
|
||||||
<strong>Category:</strong>
|
|
||||||
<span>{{ .cat }}</span>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -171,6 +180,36 @@
|
||||||
const closeButtons = document.querySelectorAll("#close-modal");
|
const closeButtons = document.querySelectorAll("#close-modal");
|
||||||
const modals = document.querySelectorAll(".fixed");
|
const modals = document.querySelectorAll(".fixed");
|
||||||
|
|
||||||
|
function filterItems(category) {
|
||||||
|
console.log("Filtering items for category:", category);
|
||||||
|
const items = document.querySelectorAll(".grid > div");
|
||||||
|
|
||||||
|
items.forEach((item) => {
|
||||||
|
const itemCategory = item.querySelector(".bg-blue-100");
|
||||||
|
if (!itemCategory) return; // Skip if category not found
|
||||||
|
|
||||||
|
if (category === "" || itemCategory.textContent === category) {
|
||||||
|
item.classList.remove("hidden");
|
||||||
|
} else {
|
||||||
|
item.classList.add("hidden");
|
||||||
|
// Hide modal if it's open for an item that's now hidden
|
||||||
|
const modalId = item.id.replace("modal-", "");
|
||||||
|
const modal = document.getElementById(modalId);
|
||||||
|
if (modal) modal.classList.add("hidden");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const category = window.location.hash.substring(1);
|
||||||
|
console.log("Initial category:", category);
|
||||||
|
filterItems(category);
|
||||||
|
|
||||||
|
window.addEventListener("hashchange", function () {
|
||||||
|
const newCategory = window.location.hash.substring(1);
|
||||||
|
console.log("New category:", newCategory);
|
||||||
|
filterItems(newCategory);
|
||||||
|
});
|
||||||
|
|
||||||
modalButtons.forEach((button) => {
|
modalButtons.forEach((button) => {
|
||||||
button.addEventListener("click", function (e) {
|
button.addEventListener("click", function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
@ -183,7 +222,8 @@
|
||||||
closeButtons.forEach((button) => {
|
closeButtons.forEach((button) => {
|
||||||
button.addEventListener("click", function (e) {
|
button.addEventListener("click", function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
modals.forEach((modal) => modal.classList.add("hidden"));
|
const modal = this.closest(".fixed");
|
||||||
|
modal.classList.add("hidden");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
2
themes/gallo/static/css/tailwind.min.css
vendored
2
themes/gallo/static/css/tailwind.min.css
vendored
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue