104 lines
3.4 KiB
JavaScript
104 lines
3.4 KiB
JavaScript
(function ($) {
|
|
"use strict"; // Start of use strict
|
|
|
|
// Toggle the side navigation
|
|
$("#sidebarToggle, #sidebarToggleTop").on('click', function (e) {
|
|
$("body").toggleClass("sidebar-toggled");
|
|
$(".sidebar").toggleClass("toggled");
|
|
if ($(".sidebar").hasClass("toggled")) {
|
|
$('.sidebar .collapse').collapse('hide');
|
|
};
|
|
});
|
|
|
|
// Close any open menu accordions when window is resized below 768px
|
|
$(window).resize(function () {
|
|
if ($(window).width() < 768) {
|
|
$('.sidebar .collapse').collapse('hide');
|
|
};
|
|
|
|
// Toggle the side navigation when window is resized below 480px
|
|
if ($(window).width() < 480 && !$(".sidebar").hasClass("toggled")) {
|
|
$("body").addClass("sidebar-toggled");
|
|
$(".sidebar").addClass("toggled");
|
|
$('.sidebar .collapse').collapse('hide');
|
|
};
|
|
});
|
|
|
|
// Prevent the content wrapper from scrolling when the fixed side navigation hovered over
|
|
$('body.fixed-nav .sidebar').on('mousewheel DOMMouseScroll wheel', function (e) {
|
|
if ($(window).width() > 768) {
|
|
var e0 = e.originalEvent,
|
|
delta = e0.wheelDelta || -e0.detail;
|
|
this.scrollTop += (delta < 0 ? 1 : -1) * 30;
|
|
e.preventDefault();
|
|
}
|
|
});
|
|
|
|
// Scroll to top button appear
|
|
$(document).on('scroll', function () {
|
|
var scrollDistance = $(this).scrollTop();
|
|
if (scrollDistance > 100) {
|
|
$('.scroll-to-top').fadeIn();
|
|
} else {
|
|
$('.scroll-to-top').fadeOut();
|
|
}
|
|
});
|
|
|
|
// Smooth scrolling using jQuery easing
|
|
$(document).on('click', 'a.scroll-to-top', function (e) {
|
|
var $anchor = $(this);
|
|
$('html, body').stop().animate({
|
|
scrollTop: ($($anchor.attr('href')).offset().top)
|
|
}, 1000, 'easeInOutExpo');
|
|
e.preventDefault();
|
|
});
|
|
|
|
})(jQuery); // End of use strict
|
|
|
|
async function openRecipePdfById(id, initialUrl) {
|
|
let pdfUrl = initialUrl || '';
|
|
if (!pdfUrl) {
|
|
try {
|
|
const res = await fetch(`/HelloFresh/GetRecipesDetails?ids=${encodeURIComponent(id)}`);
|
|
if (res.ok) {
|
|
const arr = await res.json();
|
|
pdfUrl = (arr?.[0]?.pdf || arr?.[0]?.Pdf || '');
|
|
}
|
|
} catch { /* ignore */ }
|
|
}
|
|
if (!pdfUrl) { alert("Aucun PDF pour cette recette."); return; }
|
|
const proxied = `/HelloFresh/ProxyPdf?url=${encodeURIComponent(pdfUrl)}`;
|
|
showPdfModal(proxied);
|
|
}
|
|
|
|
/**
|
|
* 💶 Formate un nombre en chaîne de caractères au format français avec division par 1000.
|
|
* Exemples :
|
|
* 123456 => "123,456"
|
|
* 5000 => "5,000"
|
|
* "1000" => "1,000"
|
|
* null => "0,000"
|
|
*
|
|
* @param {number|string} valeur - Le nombre à formater (peut être une chaîne ou un nombre)
|
|
* @returns {string} Représentation formatée (ex: "1,234")
|
|
*/
|
|
function toPriceFormat(valeur) {
|
|
const nombre = parseFloat(valeur);
|
|
if (isNaN(nombre)) return "0";
|
|
|
|
return nombre.toLocaleString('fr-FR', {
|
|
minimumFractionDigits: 0,
|
|
maximumFractionDigits: 0
|
|
});
|
|
}
|
|
|
|
const video = document.getElementById("bg-video");
|
|
video.playbackRate = 0.5; // ralenti
|
|
let reverse = false;
|
|
|
|
video.addEventListener("ended", () => {
|
|
reverse = !reverse;
|
|
video.playbackRate = reverse ? -1 : 1; // négatif = lecture à l'envers
|
|
video.currentTime = reverse ? video.duration : 0; // repartir du bon côté
|
|
video.play();
|
|
}); |