club discount cards swiper
This commit is contained in:
parent
628769dbae
commit
fe800bebb6
7 changed files with 227 additions and 10 deletions
|
|
@ -6,6 +6,7 @@
|
|||
// * VENDOR
|
||||
@import "./vendor/ckEditorContent";
|
||||
@import "./vendor/bootstrap";
|
||||
@import "./vendor/swiper";
|
||||
|
||||
// * BASE
|
||||
@import "./base/bootstrap-overload";
|
||||
|
|
|
|||
|
|
@ -74,4 +74,17 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#swiper-discounts {
|
||||
max-width: 1400px;
|
||||
|
||||
}
|
||||
|
||||
.swiper-pagination-bullet {
|
||||
&:hover, &:focus{
|
||||
border-color: var(--bs-btn-hover-border-color) !important;
|
||||
background-color: var(--bs-btn-hover-bg) !important;
|
||||
color: var(--bs-btn-hover-color) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
background-image: url("data:image/svg+xml,%3Csvg width='349' height='211' viewBox='0 0 349 211' fill='none' preserveAspectRatio='none' version='1.1' id='svg4' xmlns='http://www.w3.org/2000/svg' xmlns:svg='http://www.w3.org/2000/svg'%3E%3Cg filter='url(%23filter0_d_9902_20837)' id='g2'%3E%3Cpath d='M33 2H149V205H33C18.09 205 6 192.91 6 178V127C20.91 127 33 114.91 33 100C33 85.09 20.91 73 6 73V29C6 14.09 18.09 2 33 2Z' fill='#{urlencodecolor($color-primary)}' id='path2' /%3E%3C/g%3E%3C/svg%3E"), url('@/images/club/card-discount-bg.svg');
|
||||
background-origin: border-box;
|
||||
background-position: center;
|
||||
background-size: auto;
|
||||
background-size: cover;
|
||||
|
||||
&.primary {
|
||||
background-image: url("data:image/svg+xml,%3Csvg width='349' height='211' viewBox='0 0 349 211' fill='none' preserveAspectRatio='none' version='1.1' id='svg4' xmlns='http://www.w3.org/2000/svg' xmlns:svg='http://www.w3.org/2000/svg'%3E%3Cg filter='url(%23filter0_d_9902_20837)' id='g2'%3E%3Cpath d='M33 2H149V205H33C18.09 205 6 192.91 6 178V127C20.91 127 33 114.91 33 100C33 85.09 20.91 73 6 73V29C6 14.09 18.09 2 33 2Z' fill='#{urlencodecolor($color-primary)}' id='path2' /%3E%3C/g%3E%3C/svg%3E"), url('@/images/club/card-discount-bg.svg');
|
||||
|
|
@ -23,6 +23,10 @@
|
|||
background-image: url("data:image/svg+xml,%3Csvg width='349' height='211' viewBox='0 0 349 211' fill='none' preserveAspectRatio='none' version='1.1' id='svg4' xmlns='http://www.w3.org/2000/svg' xmlns:svg='http://www.w3.org/2000/svg'%3E%3Cg filter='url(%23filter0_d_9902_20837)' id='g2'%3E%3Cpath d='M33 2H149V205H33C18.09 205 6 192.91 6 178V127C20.91 127 33 114.91 33 100C33 85.09 20.91 73 6 73V29C6 14.09 18.09 2 33 2Z' fill='#{urlencodecolor($color-warning)}' id='path2' /%3E%3C/g%3E%3C/svg%3E"), url('@/images/club/card-discount-bg.svg');
|
||||
}
|
||||
|
||||
&.danger {
|
||||
background-image: url("data:image/svg+xml,%3Csvg width='349' height='211' viewBox='0 0 349 211' fill='none' preserveAspectRatio='none' version='1.1' id='svg4' xmlns='http://www.w3.org/2000/svg' xmlns:svg='http://www.w3.org/2000/svg'%3E%3Cg filter='url(%23filter0_d_9902_20837)' id='g2'%3E%3Cpath d='M33 2H149V205H33C18.09 205 6 192.91 6 178V127C20.91 127 33 114.91 33 100C33 85.09 20.91 73 6 73V29C6 14.09 18.09 2 33 2Z' fill='#{urlencodecolor($color-danger)}' id='path2' /%3E%3C/g%3E%3C/svg%3E"), url('@/images/club/card-discount-bg.svg');
|
||||
}
|
||||
|
||||
.discount-product-img {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
|
|
|
|||
50
resources/sass/club/vendor/_swiper.scss
vendored
Normal file
50
resources/sass/club/vendor/_swiper.scss
vendored
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
@import '~/swiper/swiper.scss';
|
||||
@import '~/swiper/modules/autoplay.scss';
|
||||
@import '~/swiper/modules/keyboard.scss';
|
||||
@import '~/swiper/modules/pagination.scss';
|
||||
|
||||
// * CUSTOM STYLE
|
||||
.swiper {
|
||||
&-button {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
&-prev-custom {
|
||||
left: 0;
|
||||
transform: translateY(-50%) rotate(180deg);
|
||||
}
|
||||
|
||||
&-next-custom {
|
||||
right: 0;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
&-disabled {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
&-pagination-bullet {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
|
||||
&:hover, &:focus {
|
||||
background-color: $color-white !important;
|
||||
}
|
||||
|
||||
&-active {
|
||||
background-color: $color-secondary !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.swiper-pagination, .swiper-pagination-bullets-dynamic {
|
||||
transform: inherit !important;
|
||||
position: inherit !important;
|
||||
top: inherit !important;
|
||||
}
|
||||
|
|
@ -1,3 +1,87 @@
|
|||
import Swiper from "swiper";
|
||||
import { Autoplay, Keyboard, Pagination } from "swiper/modules";
|
||||
import trans from "../../modules/trans";
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
|
||||
// SWIPER
|
||||
const swiperConfig = {
|
||||
"swiper-discounts": {
|
||||
modules: [Autoplay, Keyboard, Pagination],
|
||||
grabCursor: true,
|
||||
slidesPerView: 2,
|
||||
centeredSlides: false,
|
||||
loop: true,
|
||||
spaceBetween: 0,
|
||||
breakpoints: {
|
||||
1200: {
|
||||
slidesPerView: 3,
|
||||
},
|
||||
1400: {
|
||||
slidesPerView: 4
|
||||
},
|
||||
},
|
||||
autoplay: {
|
||||
delay: 15000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
pagination: {
|
||||
el: ".swiper-discounts-pagination",
|
||||
dynamicBullets: true,
|
||||
clickable: true,
|
||||
renderBullet: function (index: number, className: string) {
|
||||
return `<button class="btn btn-tertiary rounded-circle border-0 mx-2 p-0 ${className}" title="${trans.methods.__("Aller à la slide :NUM", {"NUM": String(index)})}"></button>`;
|
||||
},
|
||||
},
|
||||
keyboard: {
|
||||
enabled: true,
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
const swiperVol = document.getElementsByClassName("swiper") as HTMLCollectionOf<HTMLElement>;
|
||||
window.__SLIDERS = new Map<string, SwiperSlider>();
|
||||
|
||||
for (const htmlElt of swiperVol) {
|
||||
if (!swiperConfig[htmlElt.id as keyof typeof swiperConfig]) {
|
||||
throw new Error(`Undefined swiper id ${htmlElt.id}`);
|
||||
}
|
||||
// @ts-ignore
|
||||
const swiper = new Swiper(htmlElt, swiperConfig[htmlElt.id as keyof typeof swiperConfig]);
|
||||
window.__SLIDERS.set(htmlElt.id, { element: htmlElt, swiper: swiper });
|
||||
|
||||
if (swiper.el.id === "swiper-main-slides") {
|
||||
const btnPlayPause = document.querySelector("#swiper-main-slides .swiper-pagination-playpause");
|
||||
btnPlayPause?.addEventListener("click", function () {
|
||||
eventBtnPlayPause(swiper, document.querySelector("#swiper-main-slides .swiper-pagination-playpause"));
|
||||
});
|
||||
swiper.on("transitionEnd", function() {
|
||||
const svgs = document.querySelector("#swiper-main-slides .swiper-pagination-playpause")?.querySelectorAll("svg");
|
||||
if (svgs) {
|
||||
svgs[0].classList.remove("d-none");
|
||||
svgs[1].classList.add("d-none");
|
||||
}
|
||||
});
|
||||
}
|
||||
if (swiper.el.id === "swiper-videos") {
|
||||
document.querySelectorAll("#swiper-videos .swiper-slide").forEach(slide => {
|
||||
if (!slide.classList.contains("swiper-slide-active")) {
|
||||
slide.setAttribute("inert", "true");
|
||||
}
|
||||
});
|
||||
swiper.on("transitionEnd", function() {
|
||||
document.querySelector("#swiper-videos .swiper-slide-active")?.removeAttribute("inert");
|
||||
document.querySelector("#swiper-videos .swiper-slide-prev")?.setAttribute("inert", "true");
|
||||
document.querySelector("#swiper-videos .swiper-slide-next")?.setAttribute("inert", "true");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function eventBtnPlayPause(swiper: Swiper, btnPlayPause: HTMLElement | null) {
|
||||
const svgs = btnPlayPause?.querySelectorAll("svg");
|
||||
svgs?.forEach(svg => {
|
||||
svg.classList.toggle("d-none");
|
||||
});
|
||||
(swiper?.autoplay.paused) ? swiper?.autoplay.start() : swiper?.autoplay.pause();
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -71,19 +71,84 @@
|
|||
title="{{ __('Go to page :page', ['page' => __('Imprimer mes coupons')]) }}">{{ __('Imprimer mes coupons') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-none d-md-block text-bg-white col-12 mt-5 text-center">
|
||||
<div class="d-none d-md-block text-bg-white col-12 mt-5 pb-5 text-center">
|
||||
<h2 class="section-title text-uppercase f-bourton-base d-none d-md-inline-flex"> <span class="text-bg-warning">
|
||||
{{ __('Économiser aujourd’hui') }}</span><span class="text-bg-danger">@money(700)</span>
|
||||
</h2>
|
||||
<span class="d-block fs-5 fw-bold mb-5">{{ __('En bons de réduction sur une sélection de produits Le Gaulois') }}</span>
|
||||
|
||||
<div>
|
||||
@include('club.partials.club-card-discount', [
|
||||
'amount' => 700,
|
||||
'color' => 'secondary',
|
||||
'productPicture' => Vite::asset('resources/assets/images/placeholders/club/discountcards/discount-product.svg'),
|
||||
'onProduct' => __('Sur l’achat d’un produit de la gamme Élevés dans les prés'),
|
||||
])
|
||||
@php
|
||||
//FIXME: replace data by discounts Model
|
||||
$discountList = [
|
||||
(object) [
|
||||
'picture' => Vite::asset('resources/assets/images/placeholders/club/discountcards/discount-product.svg'),
|
||||
'color' => 'secondary',
|
||||
'amount' => 700,
|
||||
'onProduct' => __('Sur l’achat d’un produit de la gamme Élevés dans les prés'),
|
||||
],
|
||||
(object) [
|
||||
'picture' => Vite::asset('resources/assets/images/placeholders/club/discountcards/discount-product.svg'),
|
||||
'color' => 'danger',
|
||||
'amount' => 700,
|
||||
'onProduct' => __('sur l’achat de 2 barquettes de la gamme Les milanaises'),
|
||||
],
|
||||
(object) [
|
||||
'picture' => Vite::asset('resources/assets/images/placeholders/club/discountcards/discount-product.svg'),
|
||||
'color' => 'warning',
|
||||
'amount' => 700,
|
||||
'onProduct' => __('Sur l’achat d’un produit de la gamme Élevés dans les prés'),
|
||||
],
|
||||
(object) [
|
||||
'picture' => Vite::asset('resources/assets/images/placeholders/club/discountcards/discount-product.svg'),
|
||||
'color' => 'tertiary',
|
||||
'amount' => 700,
|
||||
'onProduct' => __('sur l’achat de 2 barquettes de la gamme Les milanaises'),
|
||||
],
|
||||
(object) [
|
||||
'picture' => Vite::asset('resources/assets/images/placeholders/club/discountcards/discount-product.svg'),
|
||||
'color' => 'secondary',
|
||||
'amount' => 700,
|
||||
'onProduct' => __('Sur l’achat d’un produit de la gamme Élevés dans les prés'),
|
||||
],
|
||||
(object) [
|
||||
'picture' => Vite::asset('resources/assets/images/placeholders/club/discountcards/discount-product.svg'),
|
||||
'color' => 'danger',
|
||||
'amount' => 700,
|
||||
'onProduct' => __('sur l’achat de 2 barquettes de la gamme Les milanaises'),
|
||||
],
|
||||
(object) [
|
||||
'picture' => Vite::asset('resources/assets/images/placeholders/club/discountcards/discount-product.svg'),
|
||||
'color' => 'warning',
|
||||
'amount' => 700,
|
||||
'onProduct' => __('Sur l’achat d’un produit de la gamme Élevés dans les prés'),
|
||||
],
|
||||
(object) [
|
||||
'picture' => Vite::asset('resources/assets/images/placeholders/club/discountcards/discount-product.svg'),
|
||||
'color' => 'danger',
|
||||
'amount' => 700,
|
||||
'onProduct' => __('sur l’achat de 2 barquettes de la gamme Les milanaises'),
|
||||
],
|
||||
];
|
||||
@endphp
|
||||
<div class="d-flex mb-5">
|
||||
<div class="swiper d-none d-md-block mx-5 mb-3" id="swiper-discounts">
|
||||
<div class="swiper-wrapper w-fit">
|
||||
@foreach ($discountList as $discount)
|
||||
<div class="swiper-slide">
|
||||
@include('club.partials.club-card-discount', [
|
||||
'amount' => $discount->amount,
|
||||
'color' => $discount->color,
|
||||
'productPicture' => $discount->picture,
|
||||
'onProduct' => $discount->onProduct,
|
||||
'outerClass' => 'mx-3',
|
||||
])
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-center">
|
||||
<div class="swiper-discounts-pagination py-4"></div>
|
||||
</div>
|
||||
|
||||
<a class="btn btn-lg btn-secondary fs-3" href="#FIXME:printDiscounts"
|
||||
|
|
@ -92,7 +157,6 @@
|
|||
<div class="col-12">
|
||||
</div>
|
||||
</section>
|
||||
@include('club.partials.rounded-section-bottom', ['color' => 'secondary'])
|
||||
|
||||
{{-- CLUB INFO --}}
|
||||
<section class="row text-bg-secondary py-5">
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<div @class([
|
||||
'card card-discount rounded-5 mb-3 overflow-hidden border-0 bg-transparent',
|
||||
$color ?? 'primary',
|
||||
$outerClass ?? '',
|
||||
])>
|
||||
<div class="row g-0 h-100 w-100">
|
||||
<div class="col-5">
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue