Files
administration/wwwroot/js/site.js
2025-09-16 22:20:21 +02:00

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();
});