")
+ .addClass("button")
+ .text("Ok")
+ .on("click", function() {
+ lightbox.close();
+ })
+ )
+ )
+ }(jQuery));
+ // Validation de la lightbox avec le bouton entrée
+ $(document).on("keyup", function(event) {
+ if(event.keyCode === 13) {
+ lightbox.close();
+ }
+ });
+ return false;
+};
+
+/**
+ * Génère des variations d'une couleur
+ */
+core.colorVariants = function(rgba) {
+ rgba = rgba.match(/\(+(.*)\)/);
+ rgba = rgba[1].split(", ");
+ return {
+ "normal": "rgba(" + rgba[0] + "," + rgba[1] + "," + rgba[2] + "," + rgba[3] + ")",
+ "darken": "rgba(" + Math.max(0, rgba[0] - 15) + "," + Math.max(0, rgba[1] - 15) + "," + Math.max(0, rgba[2] - 15) + "," + rgba[3] + ")",
+ "veryDarken": "rgba(" + Math.max(0, rgba[0] - 20) + "," + Math.max(0, rgba[1] - 20) + "," + Math.max(0, rgba[2] - 20) + "," + rgba[3] + ")",
+ "text": core.relativeLuminanceW3C(rgba) > .22 ? "#222" : "#DDD"
+ };
+};
+
+/**
+ * Crée un message de confirmation
+ */
+core.confirm = function(text, yesCallback, noCallback) {
+ var lightbox = lity(function($) {
+ return $("")
+ .addClass("lightbox")
+ .append(
+ $("
").text(text),
+ $("")
+ .addClass("lightboxButtons")
+ .append(
+ $("
")
+ .addClass("button grey")
+ .text("")
+ .on("click", function() {
+ lightbox.options('button', true);
+ lightbox.close();
+ if(typeof noCallback !== "undefined") {
+ noCallback();
+ }
+ }),
+ $("")
+ .addClass("button")
+ .text("")
+ .on("click", function() {
+ lightbox.options('button', true);
+ lightbox.close();
+ if(typeof yesCallback !== "undefined") {
+ yesCallback();
+ }
+ })
+ )
+ )
+ }(jQuery));
+ // Callback lors d'un clic sur le fond et sur la croix de fermeture
+ lightbox.options('button', false);
+ $(document).on('lity:close', function(event, instance) {
+ if(
+ instance.options('button') === false
+ && typeof noCallback !== "undefined"
+ ) {
+ noCallback();
+ }
+ });
+ // Validation de la lightbox avec le bouton entrée
+ $(document).on("keyup", function(event) {
+ if(event.keyCode === 13) {
+ lightbox.close();
+ if(typeof yesCallback !== "undefined") {
+ yesCallback();
+ }
+ }
+ });
+ return false;
+};
+
+/**
+ * Scripts à exécuter en dernier
+ */
+core.end = function() {
+ /**
+ * Modifications non enregistrées du formulaire
+ */
+ var formDOM = $("form");
+ // Ignore :
+ // - TinyMCE car il gère lui même le message
+ // - Les champs avec data-no-dirty
+ var inputsDOM = formDOM.find("input:not([data-no-dirty]), select:not([data-no-dirty]), textarea:not(.editorWysiwyg):not([data-no-dirty])");
+ var inputSerialize = inputsDOM.serialize();
+ $(window).on("beforeunload", function() {
+ if(inputsDOM.serialize() !== inputSerialize) {
+ message = "";
+ return message;
+ }
+ });
+ formDOM.submit(function() {
+ $(window).off("beforeunload");
+ });
+};
+$(function() {
+ core.end();
+});
+
+/**
+ * Ajoute une notice
+ */
+core.noticeAdd = function(id, notice) {
+ $("#" + id + "Notice").text(notice).removeClass("displayNone");
+ $("#" + id).addClass("notice");
+};
+
+/**
+ * Supprime une notice
+ */
+core.noticeRemove = function(id) {
+ $("#" + id + "Notice").text("").addClass("displayNone");
+ $("#" + id).removeClass("notice");
+};
+
+/**
+ * Scripts à exécuter en premier
+ */
+core.start = function() {
+ /**
+ * Remonter en haut au clic sur le bouton
+ */
+ var backToTopDOM = $("#backToTop");
+ backToTopDOM.on("click", function() {
+ $("body, html").animate({scrollTop: 0}, "400");
+ });
+ /**
+ * Affiche / Cache le bouton pour remonter en haut
+ */
+ $(window).on("scroll", function() {
+ if($(this).scrollTop() > 200) {
+ backToTopDOM.fadeIn();
+ }
+ else {
+ backToTopDOM.fadeOut();
+ }
+ });
+ /**
+ * Cache les notifications
+ */
+ var notificationTimer;
+ $("#notification")
+ .on("mouseenter", function() {
+ clearTimeout(notificationTimer);
+ $("#notificationProgress")
+ .stop()
+ .width("100%");
+ })
+ .on("mouseleave", function() {
+ // Disparition de la notification
+ notificationTimer = setTimeout(function() {
+ $("#notification").fadeOut();
+ }, 3000);
+ // Barre de progression
+ $("#notificationProgress").animate({
+ "width": "0%"
+ }, 3000, "linear");
+ })
+ .trigger("mouseleave");
+ $("#notificationClose").on("click", function() {
+ clearTimeout(notificationTimer);
+ $("#notification").fadeOut();
+ $("#notificationProgress").stop();
+ });
+
+ /**
+ * Traitement du formulaire cookies
+ */
+ $("#cookieForm").submit(function(event){
+
+ // Variables des cookies
+ var getUrl = window.location;
+ var domain = "domain=" + getUrl.hostname + ";";
+ var e = new Date();
+ e.setFullYear(e.getFullYear() + 1);
+ var expires = "expires=" + e.toUTCString();
+
+ // Stocke le cookie d'acceptation
+ document.cookie = "ZWII_COOKIE_CONSENT=true;samesite=strict;" + domain + expires;
+ });
+
+
+ /**
+ * Fermeture de la popup des cookies
+ */
+ $("#cookieConsent .cookieClose").on("click", function() {
+ $('#cookieConsent').addClass("displayNone");
+ });
+
+ /**
+ * Commande de gestion des cookies dans le footer
+ */
+
+ $("#footerLinkCookie").on("click", function() {
+ $("#cookieConsent").removeClass("displayNone");
+ });
+
+ /**
+ * Affiche / Cache le menu en mode responsive
+ */
+ var menuDOM = $("#menu");
+ $("#toggle").on("click", function() {
+ menuDOM.slideToggle();
+ });
+ $(window).on("resize", function() {
+ if($(window).width() > 768) {
+ menuDOM.css("display", "");
+ }
+ });
+
+ /**
+ * Choix de page dans la barre de membre
+ */
+ $("#barSelectPage").on("change", function() {
+ var pageUrl = $(this).val();
+ if(pageUrl) {
+ $(location).attr("href", pageUrl);
+ }
+ });
+ /**
+ * Champs d'upload de fichiers
+ */
+ // Mise à jour de l'affichage des champs d'upload
+ $(".inputFileHidden").on("change", function() {
+ var inputFileHiddenDOM = $(this);
+ var fileName = inputFileHiddenDOM.val();
+ if(fileName === "") {
+ fileName = "Choisissez un fichier";
+ $(inputFileHiddenDOM).addClass("disabled");
+ }
+ else {
+ $(inputFileHiddenDOM).removeClass("disabled");
+ }
+ inputFileHiddenDOM.parent().find(".inputFileLabel").text(fileName);
+ }).trigger("change");
+ // Suppression du fichier contenu dans le champ
+ $(".inputFileDelete").on("click", function() {
+ $(this).parents(".inputWrapper").find(".inputFileHidden").val("").trigger("change");
+ });
+ // Suppression de la date contenu dans le champ
+ $(".inputDateDelete").on("click", function() {
+ $(this).parents(".inputWrapper").find(".datepicker").val("").trigger("change");
+ });
+ // Confirmation de mise à jour
+ $("#barUpdate").on("click", function() {
+ message = "";
+ return core.confirm(message, function() {
+ $(location).attr("href", $("#barUpdate").attr("href"));
+ });
+ });
+ // Confirmation de déconnexion
+ $("#barLogout").on("click", function() {
+ message = "";
+ return core.confirm(message, function() {
+ $(location).attr("href", $("#barLogout").attr("href"));
+ });
+ });
+ /**
+ * Bloque la multi-soumission des boutons
+ */
+ $("form").on("submit", function() {
+ $(this).find(".uniqueSubmission")
+ .addClass("disabled")
+ .prop("disabled", true)
+ .empty()
+ .append(
+ $("").addClass("zwiico-spin animate-spin")
+ )
+ });
+ /**
+ * Check adresse email
+ */
+ $("[type=email]").on("change", function() {
+ var _this = $(this);
+ var pattern = /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.)+([a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.?$/i;
+ if(pattern.test(_this.val())) {
+ core.noticeRemove(_this.attr("id"));
+ }
+ else {
+ message = "";
+ core.noticeAdd(_this.attr("id"), message);
+ }
+ });
+
+ /**
+ * Iframes et vidéos responsives
+ */
+ var elementDOM = $("iframe, video, embed, object");
+ // Calcul du ratio et suppression de la hauteur / largeur des iframes
+ elementDOM.each(function() {
+ var _this = $(this);
+ _this
+ .data("ratio", _this.height() / _this.width())
+ .data("maxwidth", _this.width())
+ .removeAttr("width height");
+ });
+ // Prend la largeur du parent et détermine la hauteur à l'aide du ratio lors du resize de la fenêtre
+ $(window).on("resize", function() {
+ elementDOM.each(function() {
+ var _this = $(this);
+ var width = _this.parent().first().width();
+ if (width > _this.data("maxwidth")){ width = _this.data("maxwidth");}
+ _this
+ .width(width)
+ .height(width * _this.data("ratio"));
+ });
+ }).trigger("resize");
+
+ /*
+ * Header responsive
+ */
+ $(window).on("resize", function() {
+ var responsive = "getdata(['theme','header','imageContainer']);?>";
+ if (responsive === "cover" || responsive === "contain" ) {
+ var widthpx = "getdata(['theme','site','width']);?>";
+ var width = widthpx.substr(0,widthpx.length-2);
+ var heightpx = "getdata(['theme','header','height']);?>";
+ var height = heightpx.substr(0,heightpx.length-2);
+ var ratio = width / height;
+ if ( ($(window).width() / ratio) <= height) {
+ $("header").height( $(window).width() / ratio );
+ }
+ }
+ }).trigger("resize");
+
+};
+
+
+core.start();
+
+/**
+ * Confirmation de suppression
+*/
+$("#pageDelete").on("click", function() {
+ var _this = $(this);
+ message = "";
+ return core.confirm(message, function() {
+ $(location).attr("href", _this.attr("href"));
+ });
+});
+
+
+/**
+ * Calcul de la luminance relative d'une couleur
+ */
+core.relativeLuminanceW3C = function(rgba) {
+ // Conversion en sRGB
+ var RsRGB = rgba[0] / 255;
+ var GsRGB = rgba[1] / 255;
+ var BsRGB = rgba[2] / 255;
+ // Ajout de la transparence
+ var RsRGBA = rgba[3] * RsRGB + (1 - rgba[3]);
+ var GsRGBA = rgba[3] * GsRGB + (1 - rgba[3]);
+ var BsRGBA = rgba[3] * BsRGB + (1 - rgba[3]);
+ // Calcul de la luminance
+ var R = (RsRGBA <= .03928) ? RsRGBA / 12.92 : Math.pow((RsRGBA + .055) / 1.055, 2.4);
+ var G = (GsRGBA <= .03928) ? GsRGBA / 12.92 : Math.pow((GsRGBA + .055) / 1.055, 2.4);
+ var B = (BsRGBA <= .03928) ? BsRGBA / 12.92 : Math.pow((BsRGBA + .055) / 1.055, 2.4);
+ return .2126 * R + .7152 * G + .0722 * B;
+};
+
+
+
+$(document).ready(function(){
+ /**
+ * Affiche le sous-menu quand il est sticky
+ */
+ $("nav").mouseenter(function(){
+ $("#navfixedlogout .navSub").css({ 'pointer-events' : 'auto' });
+ $("#navfixedconnected .navSub").css({ 'pointer-events' : 'auto' });
+ });
+ $("nav").mouseleave(function(){
+ $("#navfixedlogout .navSub").css({ 'pointer-events' : 'none' });
+ $("#navfixedconnected .navSub").css({ 'pointer-events' : 'none' });
+ });
+
+ /**
+ * Chargement paresseux des images et des iframes
+ */
+ $("img,picture,iframe").attr("loading","lazy");
+
+ /**
+ * Effet accordéon
+ */
+ $('.accordion').each(function(e) {
+ // on stocke l'accordéon dans une variable locale
+ var accordion = $(this);
+ // on récupère la valeur data-speed si elle existe
+ var toggleSpeed = accordion.attr('data-speed') || 100;
+
+ // fonction pour afficher un élément
+ function open(item, speed) {
+ // on récupère tous les éléments, on enlève l'élément actif de ce résultat, et on les cache
+ accordion.find('.accordion-item').not(item).removeClass('active')
+ .find('.accordion-content').slideUp(speed);
+ // on affiche l'élément actif
+ item.addClass('active')
+ .find('.accordion-content').slideDown(speed);
+ }
+ function close(item, speed) {
+ accordion.find('.accordion-item').removeClass('active')
+ .find('.accordion-content').slideUp(speed);
+ }
+
+ // on initialise l'accordéon, sans animation
+ open(accordion.find('.active:first'), 0);
+
+ // au clic sur un titre...
+ accordion.on('click', '.accordion-title', function(ev) {
+ ev.preventDefault();
+ // Masquer l'élément déjà actif
+ if ($(this).closest('.accordion-item').hasClass('active')) {
+ close($(this).closest('.accordion-item'), toggleSpeed);
+ } else {
+ // ...on lance l'affichage de l'élément, avec animation
+ open($(this).closest('.accordion-item'), toggleSpeed);
+ }
+ });
+ });
+
+ /**
+ * Icône du Menu Burger
+ */
+ $("#toggle").click(function() {
+ var changeIcon = $('#toggle').children("span");
+ if ( $(changeIcon).hasClass('zwiico-menu') ) {
+ $(changeIcon).removeClass('zwiico-menu').addClass('zwiico-cancel');
+ }
+ else {
+ $(changeIcon).addClass('zwiico-menu');
+ };
+ });
+
+ /**
+ * Remove ID Facebook from URL
+ */
+ if(/^\?fbclid=/.test(location.search))
+ location.replace(location.href.replace(/\?fbclid.+/, ""));
+});
diff --git a/core/core.php b/core/core.php
index a16a74fb..ba93b1a0 100644
--- a/core/core.php
+++ b/core/core.php
@@ -49,7 +49,7 @@ class common
// Numéro de version
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/update/raw/branch/master/';
- const ZWII_VERSION = '12.0.09';
+ const ZWII_VERSION = '12.0.10';
const ZWII_UPDATE_CHANNEL = "v12";
public static $actions = [];