Updated cookie notice to 4.0.0 and replaced analytics by matomo

This commit is contained in:
Noah Lancien 2024-01-02 13:28:49 +01:00 • committed by Jérémy Munsch
parent 3cb9a29afb
commit 997aa67ae7
No known key found for this signature in database
GPG key ID: 18361AF3BFEC0FEC
19 changed files with 1392 additions and 2155 deletions

1
.gitignore vendored
View file

@ -14,3 +14,4 @@ npm-debug.log
yarn-error.log
/.idea
auth.json
.npmrc

View file

@ -45,20 +45,8 @@ class SecureHeaders
$cspPolicies = [
// "default-src 'none';",
"manifest-src 'self';",
"connect-src 'self' blob: " . \implode(' ', [
'https://*.google-analytics.com',
'https://*.analytics.google.com',
'https://*.googletagmanager.com',
'https://*.g.doubleclick.net',
'https://*.google.com',
]) . ';',
"img-src * data: blob: " . \implode(' ', [
'https://*.google-analytics.com',
'https://*.analytics.google.com',
'https://*.googletagmanager.com',
'https://*.g.doubleclick.net',
'https://*.google.com',
]) . ';',
"connect-src 'self' https://yl.s-web.fr blob:;",
"img-src * https://yl.s-web.fr data: blob:;",
'frame-src ' . implode(' ', [
'https://www.google.com/recaptcha/',
'https://recaptcha.google.com/recaptcha/',
@ -77,6 +65,7 @@ class SecureHeaders
'https://*.googletagmanager.com',
'https://cdn.ckeditor.com',
'https://cdn.jsdelivr.net',
'https://yl.s-web.fr',
]) . ' ' . $jsDev . ';'
];
$response->headers->set(

View file

@ -38,4 +38,7 @@ return [
]
],
'matomo' => [
'site_id' => env('MATOMO_SITE_ID')
],
];

1592
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -12,6 +12,7 @@
"devDependencies": {
"animate.css": "^4.1.1",
"axios": "^1.6.5",
"@ldc-web/cookie-notice": "^4.0.0",
"bootstrap": "^5.1.3",
"clean-webpack-plugin": "^3.0.0",
"jquery": "^3.6",

View file

@ -1,8 +1,8 @@
// cookie notice
import { LdcwebCn } from "./ldcweb-cn.js";
window.LdcwebCn = LdcwebCn;
import CookieNotice from "@ldc-web/cookie-notice";
window.CookieNotice = CookieNotice;
import { Carrousel } from "./caroussel.js"
import { Carrousel } from "./caroussel.js";
window.Carrousel = Carrousel;
require('./custom');
require("./custom");

View file

@ -1,426 +0,0 @@
/**
* LDC Service Web
* Version 1.3
*/
export class LdcwebCn {
constructor(config) {
this.config = config;
this.cookieContainer = document.getElementById("ldcweb-cn");
this.bannerContainer = document.querySelector(".ldcweb-cn-banner");
this.bannerBtn = document.querySelector(".ldcweb-banner-btnDetails-p");
this.ldcwebBtn = document.querySelector(".ldcweb-btn");
this.ldcwebBannerParaP = document.querySelector(
".ldcweb-banner-para-p"
);
this.ldcwebBannerContent = document.querySelector(
".ldcweb-banner-content"
);
this.ldcwebBannerDetails = document.querySelector(
".ldcweb-banner-details"
);
this.ldcwebBannerBtnDetails = document.querySelector(
".ldcweb-banner-btnDetails"
);
this.modalContainer = document.getElementById("ldcweb-cn-modal");
this.acceptAllBtnBanner = document.getElementById(
"ldcweb-cn-accept-banner"
);
this.denyAllBtnBanner = document.getElementById(
"ldcweb-cn-deny-banner"
);
this.personalizeBtn = document.getElementsByClassName(
"ldcweb-cn-personalize"
);
this.personalizeBtnBanner = document.querySelector(
".ldcweb-cn-personalize"
);
this.changeBtn = document.getElementsByClassName("ldcweb-cn-change");
this.cookiesList = document.getElementById("ldcweb-cn-list");
this.cookieLink = document.querySelector(".ldcweb-cn-cookie-link");
this.modalDetails = document.querySelector(".modal-details");
this.template = document.getElementById("template").cloneNode(true);
this.modalBtnBoolean = 0;
this.bannerBtnTextBoolean = 0;
document.getElementById("template").remove();
let cookies = this.getLDCWebCookie("ldcwebcn-init");
if (cookies === undefined) {
let newCookie = [];
for (const [key] of Object.entries(this.config)) {
newCookie.push(key + "=wait");
}
this.bannerContainer.classList.add("ldcweb-cn-banner-open");
this.saveLDCWebCookie(newCookie);
} else {
let test = cookies.split(",");
test.forEach(elm => {
let test = elm.split("=");
if (test[1] === "wait") {
this.bannerContainer.classList.add("ldcweb-cn-banner-open");
}
});
}
let accept = function(e) {
e.preventDefault();
for (const [key, value] of Object.entries(this.config)) {
this.addCookie(key, value);
}
for (let acceptLabel of this.cookieContainer.querySelectorAll(
".accept > label"
)) {
acceptLabel.classList.add("active");
}
for (let denyLabel of this.cookieContainer.querySelectorAll(
".deny > label"
)) {
denyLabel.classList.remove("active");
}
this.updateAllCookiesButtonsActiveStatus();
this.bannerContainer.classList.remove("ldcweb-cn-banner-open");
}.bind(this);
this.acceptAllBtnBanner.addEventListener("click", accept);
let deny = function(e) {
e.preventDefault();
for (const [key, value] of Object.entries(this.config)) {
this.removeCookie(key, value);
}
for (let acceptLabel of this.cookieContainer.querySelectorAll(
".accept > label"
)) {
acceptLabel.classList.remove("active");
}
for (let denyLabel of this.cookieContainer.querySelectorAll(
".deny > label"
)) {
denyLabel.classList.add("active");
}
this.updateAllCookiesButtonsActiveStatus();
this.bannerContainer.classList.remove("ldcweb-cn-banner-open");
}.bind(this);
this.denyAllBtnBanner.addEventListener("click", deny);
let openLdcwebCookies = function(e) {
e.preventDefault();
this.bannerContainer.classList.add("ldcweb-cn-banner-open");
this.ldcwebBannerContent.classList.add("visibility");
this.ldcwebBannerDetails.classList.add("visibility");
this.ldcwebBannerBtnDetails.classList.add("visibility");
this.modalContainer.classList.remove("visibility");
this.personalizeBtnBanner.innerHTML = this.personalizeBtnBanner.getAttribute(
"data-open-modal"
);
this.modalBtnBoolean = 1;
this.modalDetails.scrollTop = 0;
this.openModal();
}.bind(this);
this.cookieLink.addEventListener("click", openLdcwebCookies);
let hideModal = function(e) {
e.preventDefault();
this.ldcwebBannerContent.classList.toggle("visibility");
this.ldcwebBannerDetails.classList.toggle("visibility");
this.ldcwebBannerBtnDetails.classList.toggle("visibility");
this.modalContainer.classList.toggle("visibility");
this.setCookieList();
}.bind(this);
this.personalizeBtnBanner.addEventListener("click", hideModal);
let changeBtnPersonalize = function(e) {
e.preventDefault();
this.modalDetails.scrollTop = 0;
if (this.modalBtnBoolean === 0) {
this.personalizeBtnBanner.innerHTML = this.personalizeBtnBanner.getAttribute(
"data-open-modal"
);
this.modalBtnBoolean = 1;
} else {
this.personalizeBtnBanner.innerHTML = this.personalizeBtnBanner.getAttribute(
"data-close-modal"
);
this.modalBtnBoolean = 0;
}
}.bind(this);
this.personalizeBtnBanner.addEventListener(
"click",
changeBtnPersonalize
);
this.setListenerOnChange();
let cookie = this.getLDCWebCookie("ldcwebcn-init");
let test = cookie.split(",");
test.forEach(elm => {
let test = elm.split("=");
if (test[1] === "true") {
this.config[test[0]].script();
}
});
this.updateAllCookiesButtonsActiveStatus();
let changePara = function(e) {
e.preventDefault();
this.ldcwebBannerDetails.classList.toggle(
"ldcweb-banner-details-open"
);
this.bannerBtn.classList.toggle("ldcweb-banner-btnDetails-p-open");
if (this.bannerBtnTextBoolean === 0) {
e.target.innerHTML = e.target.getAttribute("data-open");
this.ldcwebBannerParaP.innerHTML = this.ldcwebBannerParaP.getAttribute(
"data-open"
);
this.ldcwebBannerDetails.style.height =
this.ldcwebBannerDetails.children[0].clientHeight + "px";
this.bannerBtnTextBoolean = 1;
} else {
e.target.innerHTML = e.target.getAttribute("data-close");
this.ldcwebBannerParaP.innerHTML = this.ldcwebBannerParaP.getAttribute(
"data-close"
);
this.ldcwebBannerDetails.style.height = "0px";
this.bannerBtnTextBoolean = 0;
}
}.bind(this);
this.bannerBtn.addEventListener("click", changePara);
let resetVue = function(e) {
e.preventDefault();
this.bannerContainer.classList.toggle("ldcweb-cn-banner-open");
if (
this.bannerContainer.classList.contains("ldcweb-cn-banner-open")
) {
this.ldcwebBannerContent.classList.remove("visibility"),
this.ldcwebBannerDetails.classList.remove("visibility"),
this.ldcwebBannerBtnDetails.classList.remove("visibility"),
this.modalContainer.classList.add("visibility");
this.personalizeBtnBanner.innerHTML = this.personalizeBtnBanner.getAttribute(
"data-close-modal"
);
this.modalBtnBoolean = 0;
}
}.bind(this);
this.ldcwebBtn.addEventListener("click", resetVue);
}
setCookieList() {
this.cookiesList.innerHTML = "";
let cookiesSite = this.getLDCWebCookie("ldcwebcn-init");
let acceptInputEvent = function(acceptLabel, denyLabel, key, value) {
return function() {
acceptLabel.classList.add("active");
denyLabel.classList.remove("active");
this.updateAllCookiesButtonsActiveStatus();
this.addCookie(key, value);
}.bind(this, [acceptLabel, denyLabel, key, value]);
};
let denyInputEvent = function(acceptLabel, denyLabel, key, value) {
return function() {
acceptLabel.classList.remove("active");
denyLabel.classList.add("active");
this.updateAllCookiesButtonsActiveStatus();
this.removeCookie(key, value);
}.bind(this, [acceptLabel, denyLabel, key, value]);
};
for (const [key, value] of Object.entries(this.config)) {
let cookie = document.createElement("li");
cookie.append(this.template.children.item(0).cloneNode(true));
let name = cookie.querySelector("span.ldcweb-cn-name");
let description = cookie.querySelector(
"span.ldcweb-cn-description"
);
let link = cookie.querySelector("a.ldcweb-cn-link");
let acceptInput = cookie.querySelector(".accept > input");
let denyInput = cookie.querySelector(".deny > input");
let acceptLabel = cookie.querySelector(".accept > label");
let denyLabel = cookie.querySelector(".deny > label");
name.textContent = value.name;
description.textContent = value.description;
link.textContent = value.labelLink;
link.setAttribute("href", value.link);
acceptInput.id = key + "1";
acceptInput.name = key;
acceptInput.dataset.name = key;
acceptLabel.htmlFor = key + "1";
denyInput.id = key + "2";
denyInput.name = key;
denyInput.dataset.name = key;
denyLabel.htmlFor = key + "2";
acceptInput.addEventListener(
"click",
acceptInputEvent.apply(this, [
acceptLabel,
denyLabel,
key,
value
])
);
denyInput.addEventListener(
"click",
denyInputEvent.apply(this, [acceptLabel, denyLabel, key, value])
);
this.cookiesList.append(cookie);
let cookiesArray = cookiesSite.split(",");
for (const cookieEl of cookiesArray) {
let name = cookieEl.slice(0, cookieEl.indexOf("="));
let status = cookieEl.slice(cookieEl.indexOf("=") + 1);
if (name === key) {
acceptLabel.classList.remove("active");
denyLabel.classList.remove("active");
switch (status) {
case "true":
acceptLabel.classList.add("active");
break;
case "false":
denyLabel.classList.add("active");
break;
}
}
}
}
this.setListenerOnChange();
}
updateAllCookiesButtonsActiveStatus() {
let acceptsButtons = this.cookieContainer.querySelectorAll(
"div.accept > label"
);
let deniesButtons = this.cookieContainer.querySelectorAll(
"div.deny > label"
);
let activeAcceptsButtons = this.cookieContainer.querySelectorAll(
"div.accept > label.active"
);
let activeDeniesButtons = this.cookieContainer.querySelectorAll(
"div.deny > label.active"
);
if (
acceptsButtons.length &&
acceptsButtons.length === activeAcceptsButtons.length
) {
}
if (
deniesButtons.length &&
deniesButtons.length === activeDeniesButtons.length
) {
}
}
addCookie(key, value) {
if (value.script) {
value.script();
}
this.changeStatus(key, "true");
}
removeCookie(key, value) {
for (let cookieName of value.cookies) {
this.deleteBrowserCookie(cookieName, "/", "." + location.host);
}
if (document.getElementById(key)) {
document.getElementById(key).remove();
}
this.changeStatus(key, "false");
}
setListenerOnChange() {
this.changeBtn = document.getElementsByClassName("ldcweb-cn-change");
let itemClick = function(item) {
return function() {
this.changeStatus(
item.getAttribute("data-name"),
item.getAttribute("data-status")
);
}.bind(this);
};
for (let item of this.changeBtn) {
this.addEvent(item, "click", itemClick.bind(this, [item]));
}
}
changeStatus(name, status) {
let newCookie = [];
let cookie = this.getLDCWebCookie("ldcwebcn-init");
let test = cookie.split(",");
test.forEach(elm => {
let test = elm.split("=");
if (test[0] === name) {
newCookie.push(name + "=" + status);
if (status === "false") {
this.config[test[0]].cookies.forEach(elm => {
let cookies = this.getLDCWebCookie(elm);
if (cookies !== undefined) {
document.cookie =
elm +
"=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=" +
document.domain +
"; path=/";
document.cookie =
elm +
"=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=." +
document.domain +
"; path=/";
}
});
}
} else {
newCookie.push(elm);
}
});
this.saveLDCWebCookie(newCookie);
}
deleteBrowserCookie(name, path, domain) {
if (this.getLDCWebCookie(name)) {
document.cookie =
name +
"=" +
(path ? ";path=" + path : "") +
(domain ? ";domain=" + domain : "") +
";expires=Thu, 01 Jan 1970 00:00:01 GMT";
}
}
getLDCWebCookie(name) {
let matches = document.cookie.match(
new RegExp(
"(?:^|; )" +
name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, "\\$1") +
"=([^;]*)"
)
);
return matches ? decodeURIComponent(matches[1]) : undefined;
}
addEvent(element, evnt, funct) {
if (element.attachEvent) return element.attachEvent("on" + evnt, funct);
else return element.addEventListener(evnt, funct, false);
}
saveLDCWebCookie(content) {
let date = new Date();
let newDate = new Date(date.setMonth(date.getMonth() + 13));
document.cookie =
"ldcwebcn-init=" +
content +
"; expires=" +
newDate.toUTCString() +
"; path=/;";
}
openModal() {
this.setCookieList();
this.updateAllCookiesButtonsActiveStatus();
}
}

View file

@ -72,5 +72,32 @@
"Nous Rejoindre": "Join us",
"<span class=\"color-red\">les questions<\/span><br><span class=\"color-blue\">utiles<\/span>": "<span class=\"color-red\">Usefull<\/span><br><span class=\"color-blue\">questions<\/span>",
"Nos nouveautés": "",
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": ""
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": "",
"cookie-notice.button_customize_cookies": "Customize cookies",
"cookie-notice.button_close_cookies": "Close cookie window",
"cookie-notice.button_forbid": "Prohibit",
"cookie-notice.button_allow": "Allow",
"cookie-notice.button_forbid_all": "Reject all",
"cookie-notice.button_allow_all": "Accept all",
"cookie-notice.button_forbid_all_title": "Refuse all cookies and close the cookies panel",
"cookie-notice.button_allow_all_title": "Accept all cookies and close the cookies panel",
"cookie-notice.button_customize": "Customize",
"cookie-notice.button_back": "Back",
"cookie-notice.button_title_open_new_tab": "Open link in new tab",
"cookie-notice.banner_title": "The :site_name website uses cookies!",
"cookie-notice.banner_text": "We use cookies to ensure the proper functioning of our site and for analytical purposes.\r You can change your mind at any time by clicking on the icon on any page of our site.\r By authorizing these third-party services, you agree to the deposit and reading of cookies and the use of tracking technologies necessary for their proper operation.",
"cookie-notice.modal_title": "Cookie management window",
"cookie-notice.panel_title": "Cookie management panel",
"cookie-notice.panel_content": "Cookie management panel content",
"cookie-notice.panel_subtitle": "Your privacy is our priority",
"cookie-notice.panel_details": "The functionalities of this site are based on services provided by third parties. If you accept, these third parties will deposit cookies that will enable you to view content on the site hosted by these third parties. Through these cookies, these third parties will collect and use your browsing data for their own purposes, in accordance with their privacy policy (link below). This page allows you to give or withdraw your consent, either globally or service by service.",
"cookie-notice.picture_cookie_title": "Image of a nice big cookie",
"cookie-notice.navigation_title": "Cookies panel navigation",
"cookie-notice.custom.matomo.title": "Matomo",
"cookie-notice.custom.matomo.description": "Audience measurement services are used to generate traffic statistics, which are useful for improving the site.",
"cookie-notice.custom.matomo.labelLink": "Learn more",
"cookie-notice.custom.recaptcha.title": "reCAPTACHA",
"cookie-notice.custom.recaptcha.description": "The purpose of the cookies placed on forms via the recaptcha is to prevent them from being submitted by robots.",
"cookie-notice.custom.recaptcha.labelLink": "Learn more",
"cookie-notice.custom.recaptcha.warning": "You must accept cookies to send the form"
}

View file

@ -72,5 +72,32 @@
"Nous Rejoindre": "Únete a nosotros",
"<span class=\"color-red\">les questions<\/span><br><span class=\"color-blue\">utiles<\/span>": "<span class=\"color-red\">Preguntas<\/span><br><span class=\"color-blue\">útiles<\/span>",
"Nos nouveautés": "nuestras novedades",
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": "Seguimos trabajando para mejorar nuestras recetas y proponer productos de mejor calidad"
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": "Seguimos trabajando para mejorar nuestras recetas y proponer productos de mejor calidad",
"cookie-notice.button_customize_cookies": "Personalizar las cookies",
"cookie-notice.button_close_cookies": "Cerrar la ventana de cookies",
"cookie-notice.button_forbid": "Prohibir",
"cookie-notice.button_allow": "Autorizar",
"cookie-notice.button_forbid_all": "Rechazar todo",
"cookie-notice.button_allow_all": "Aceptar todo",
"cookie-notice.button_forbid_all_title": "Rechazar todas las cookies y cerrar el panel de cookies",
"cookie-notice.button_allow_all_title": "Aceptar todas las cookies y cerrar el panel de cookies",
"cookie-notice.button_customize": "Personalizar",
"cookie-notice.button_back": "Volver",
"cookie-notice.button_title_open_new_tab": "Abrir el enlace en una nueva pestaña",
"cookie-notice.banner_title": "El sitio web :site_name utiliza cookies.",
"cookie-notice.banner_text": "Utilizamos cookies para garantizar que nuestro sitio funciona correctamente y con fines analíticos.\r Puede cambiar de opinión en cualquier momento haciendo clic en el icono de cualquier página de nuestro sitio.\r Al autorizar estos servicios de terceros, acepta el depósito y la lectura de cookies y el uso de tecnologías de seguimiento necesarias para su correcto funcionamiento.",
"cookie-notice.modal_title": "Ventana de gestión de cookies",
"cookie-notice.panel_title": "Panel de gestión de cookies",
"cookie-notice.panel_content": "Contenido del panel de cookies",
"cookie-notice.panel_subtitle": "Su privacidad es nuestra prioridad",
"cookie-notice.panel_details": "Las funcionalidades de este sitio se basan en servicios ofrecidos por terceros. Si acepta, estos terceros depositarán cookies que le permitirán ver en el sitio contenidos alojados por estos terceros. A través de estas cookies, estos terceros recopilarán y utilizarán sus datos de navegación para sus propios fines, de conformidad con su política de privacidad (enlace más abajo). Esta página le permite dar o retirar su consentimiento, globalmente o servicio por servicio.",
"cookie-notice.picture_cookie_title": "Imagen de una buena galleta grande",
"cookie-notice.navigation_title": "Navegación por el panel de cookies",
"cookie-notice.custom.matomo.title": "Matomo",
"cookie-notice.custom.matomo.description": "Los servicios de medición de audiencia se utilizan para generar estadísticas de visitas, útiles para mejorar el sitio.",
"cookie-notice.custom.matomo.labelLink": "Más información",
"cookie-notice.custom.recaptcha.title": "reCAPTACHA",
"cookie-notice.custom.recaptcha.description": "Las cookies colocadas en los formularios que utilizan el recaptcha están diseñadas para evitar que los formularios sean enviados por robots.",
"cookie-notice.custom.recaptcha.labelLink": "Más información",
"cookie-notice.custom.recaptcha.warning": "Debe aceptar las cookies para enviar el formulario"
}

View file

@ -72,5 +72,32 @@
"Nous Rejoindre": "",
"<span class=\"color-red\">les questions<\/span><br><span class=\"color-blue\">utiles<\/span>": "<span class=\"color-red\">les questions<\/span><br><span class=\"color-blue\">utiles<\/span>",
"Nos nouveautés": "Produits à la une",
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": "Ne ratez aucune de nos nouveautés"
"Nous travaillons toujours pour améliorer nos recettes et proposer des produits de meilleure qualité": "Ne ratez aucune de nos nouveautés",
"cookie-notice.button_customize_cookies": "Personnaliser les cookies",
"cookie-notice.button_close_cookies": "Fermer la fenêtre des cookies",
"cookie-notice.button_forbid": "Interdire",
"cookie-notice.button_allow": "Autoriser",
"cookie-notice.button_forbid_all": "Tout refuser",
"cookie-notice.button_allow_all": "Tout accepter",
"cookie-notice.button_forbid_all_title": "Refuser tous les cookies et fermer le panneau des cookies",
"cookie-notice.button_allow_all_title": "Accepter tous les cookies et fermer le panneau des cookies",
"cookie-notice.button_customize": "Personnaliser",
"cookie-notice.button_back": "Retour",
"cookie-notice.button_title_open_new_tab": "Ouvrir le lien dans un nouvel onglet",
"cookie-notice.banner_title": "Le site internet :site_name utilise des cookies !",
"cookie-notice.banner_text": "Nous utilisons des cookies pour nous assurer du bon fonctionnement de notre site et à des fins analytiques.\r Vous pouvez changer d'avis à tout moment en cliquant sur l'icône présente sur chaque page de notre site.\r En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement.",
"cookie-notice.modal_title": "Fenêtre de gestion de cookies",
"cookie-notice.panel_title": "Panneau de gestion des cookies",
"cookie-notice.panel_content": "Contenu du panneau des cookies",
"cookie-notice.panel_subtitle": "Le respect de votre vie privée est notre priorité",
"cookie-notice.panel_details": "Les fonctionnalités de ce site s'appuient sur des services proposés par des tiers. Si vous acceptez, ces tiers déposeront des cookies qui vous permettront de visualiser sur le site du contenu hébergé par ces tiers. Via ces cookies, ces tiers collecteront et utiliseront vos données de navigation pour des finalités qui leur sont propres, conformément à leur politique de confidentialité (lien ci-dessous). Cette page vous permet de donner ou de retirer votre consentement, soit globalement soit service par service.",
"cookie-notice.picture_cookie_title": "Image d'un bon gros cookie",
"cookie-notice.navigation_title": "Navigation du panneau des cookies",
"cookie-notice.custom.matomo.title": "Matomo",
"cookie-notice.custom.matomo.description": "Les services de mesure d’audience permettent de générer des statistiques de fréquentation utiles à l’amélioration du site.",
"cookie-notice.custom.matomo.labelLink": "En apprendre plus",
"cookie-notice.custom.recaptcha.title": "reCAPTACHA",
"cookie-notice.custom.recaptcha.description": "Les cookies qui sont déposés via le recaptcha sur les formulaires ont pour finalité d’empêcher que ceux-ci ne soient soumis par des robots.",
"cookie-notice.custom.recaptcha.labelLink": "En apprendre plus",
"cookie-notice.custom.recaptcha.warning": "Vous devez accepter les cookies pour envoyer le formulaire"
}

View file

@ -28,6 +28,28 @@
}
}
.form-result_confirm {
background-color: #D1E7DD;
border: 1px solid #badbcc;
color: #0f5132;
border-radius: 0.375rem;
padding: 1rem;
margin: 1rem 0;
width: 100%;
text-align: center;
}
.form-result_error {
background-color: #f8d7da;
border: 1px solid #f5c2c7;
color: #842029;
border-radius: 0.375rem;
padding: 1rem;
margin: 1rem 0;
width: 100%;
text-align: center;
}
#products,
#values {
display: flex;

View file

@ -27,4 +27,4 @@
@import "timeline";
@import "custom";
@import "cookies-ldc";
@import "~@ldc-web/cookie-notice";

View file

@ -1,502 +0,0 @@
/* DEBUT DU PARAMETRAGE */
/* - Choix des FONTS */
/* - Changement des couleurs et des polices */
:root {
/* PARTIE A RENSEIGNER */
--primary-color: #0c1417;
--secondary-color: #ff0400;
--background-color: #fccf1d;
--shadow-color: 0 0.5rem 1rem rgb(0 0 0 / 35%);
--title-font: "barlow-bold", arial, sans-serif;
--title-size: 40px;
--text-font: "Barlow", sans-serif;
--text-size: 14px;
--accept-color: #33aa33;
--deny-color: #aa3333;
/* Position et animation des cookies */
--ldcweb-cn-position-left: 20px; /* Distance par rapport à la gauche de la fenêtre */
--ldcweb-cn-position-right: auto; /* Distance par rapport à la droite de la fenêtre */
--ldcweb-cn-animation-left: 0; /* Position gauche de base des cookies */
--ldcweb-cn-animation-right: auto; /* Position droite de base des cookies */
--ldcweb-cn-position-bottom: 20px; /* Distance par rapport au bas de la fenêtre */
--ldcweb-cn-z-index: 200;
/* PARTIE A RENSEIGNER FACULTATIF */
/* FENETRE D'ACCUEIL */
--ck-bg-color: var(--background-color);
/* Title settings */
--ck-w1-bgcolor-title: var(--background-color);
--ck-w1-font-family-title: var(--title-font);
--ck-w1-font-size-title: var(--title-size);
--ck-w1-color-title: var(--secondary-color);
/* Text settings */
--ck-w1-font-family-txt: var(--text-font);
--ck-w1-font-size-txt: var(--text-size);
--ck-w1-color-txt: var(--primary-color);
--ck-w1-color-href-hover: var(--secondary-color);
/* Button settings */
--ck-w1-color-btn: var(--secondary-color);
--ck-w1-color-btn-hover: var(--secondary-color);
--ck-w1-font-family-btn-txt: var(--text-font);
--ck-w1-font-size-btn-txt: var(--text-size);
--ck-w1-color-btn-txt: #ffffff;
--ck-w1-color-btn-txt-hover: #ffffff;
--ck-w1-color-btn-border: transparent;
--ck-w1-color-btn-border-hover: transparent;
/* FENETRE DE PERSONNALISATION */
--ck-bg-color-modal-wrapper: #ffffff;
/* Title settings */
--ck-w2-bgcolor-title: var(--background-color);
--ck-w2-font-family-title: var(--title-font);
--ck-w2-font-size-title: var(--title-size);
--ck-w2-color-title: var(--secondary-color);
/* Text settings */
--ck-w2-font-family-txt: var(--text-font);
--ck-w2-font-size-txt: var(--text-size);
--ck-w2-color-txt: var(--primary-color);
--ck-w2-color-href-hover: #000000;
/* Accept/Deny btn settings */
--ck-color-accept: #808080;
--ck-color-accept-hover: var(--accept-color);
--ck-color-deny: #808080;
--ck-color-deny-hover: var(--deny-color);
--ck-color-txt: #ffffff;
--ck-color-txt-hover: #ffffff;
/* Cookies list settings */
--ck-bgcolor-list: #e4e4e4;
--ck-font-family-list: var(--text-font);
--ck-font-size-list: var(--text-size);
--ck-color-list: #000000;
--ck-color-title: var(--secondary-color);
/* Scroll bar */
--ck-scroll-bgcolor: var(--primary-color);
--ck-scroll-barcolor: var(--secondary-color);
}
/* FIN DU PARAMETRAGE */
/* MOBILE FIRST */
#template {
display: none;
}
* {
box-sizing: border-box;
}
#ldcweb-cn.open-banner .ldcweb-cn-banner {
display: flex;
}
#ldcweb-cn.open-banner,
#ldcweb-cn.open-modal {
display: flex;
}
#ldcweb-cn p,
#ldcweb-cn a {
font-family: var(--ck-w1-font-family-txt);
font-size: var(--ck-w1-font-size-txt);
color: var(--ck-w1-color-txt);
}
#ldcweb-cn a {
text-decoration: underline;
transition: 0s;
}
#ldcweb-cn a::before {
content: none;
}
.ldcweb-cn-cookie-link {
cursor: pointer;
}
#ldcweb-cn .ldcweb-cn-banner,
#ldcweb-cn-modal .modal-wrapper {
overflow: auto;
display: flex;
flex-direction: column;
align-items: center;
}
#ldcweb-cn .ldcweb-cn-banner {
padding: 0;
margin: 0;
padding-top: 20px;
background-color: var(--ck-bg-color);
flex-direction: column;
justify-content: flex-end;
position: fixed;
left: var(--ldcweb-cn-animation-left);
right: var(--ldcweb-cn-animation-right);
bottom: calc(var(--ldcweb-cn-position-bottom) + 60px);
width: 475px;
height: auto;
max-height: 80vh;
border-radius: 10px;
z-index: var(--ldcweb-cn-z-index);
line-height: initial;
overflow: hidden;
box-shadow: var(--shadow-color);
user-select: none;
opacity: 0;
visibility: hidden;
transition: 0.3s;
}
#ldcweb-cn .ldcweb-cn-banner-open {
left: var(--ldcweb-cn-position-left);
right: var(--ldcweb-cn-position-right);
opacity: 1;
visibility: visible;
}
.ldcweb-banner-content,
.ldcweb-banner-details {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding: 0px 20px 0px 20px;
}
.ldcweb-banner-details {
height: 0;
transition: 0.3s;
text-align: justify;
overflow: hidden;
align-items: flex-start;
}
.ldcweb-banner-details-open {
margin-bottom: 6px;
}
#ldcweb-cn .ldcweb-banner-img {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: auto;
width: 150px;
padding-right: 20px;
}
#ldcweb-cn .ldcweb-banner-img img {
width: 100%;
}
#ldcweb-cn .ldcweb-banner-text {
flex: 2;
}
#ldcweb-cn .ldcweb-banner-title {
line-height: 0.9;
padding-bottom: 1rem;
}
#ldcweb-cn .ldcweb-banner-title p {
font-family: var(--ck-w1-font-family-title);
font-size: var(--ck-w1-font-size-title);
font-weight: bold;
color: var(--ck-w1-color-title);
text-align: left;
}
#ldcweb-cn .ldcweb-banner-para-p {
text-align: justify;
margin-bottom: 6px;
}
#ldcweb-cn .ldcweb-banner-btnDetails {
width: 100%;
margin: 0 0 20px 0;
}
#ldcweb-cn .ldcweb-banner-btnDetails-p {
cursor: pointer;
color: var(--secondary-color);
width: fit-content;
margin: 0 auto;
text-align: center;
}
#ldcweb-cn .ldcweb-banner-btns {
flex: 1;
display: flex;
flex-direction: row;
width: 100%;
cursor: pointer;
}
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btn-flex {
width: 66.5%;
border-top: 1px solid grey;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
text-align: center;
}
.ldcweb-banner-btn-personalize {
width: 33.5%;
border-top: 1px solid gray;
}
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btn-flex div {
width: 50%;
}
.ldcweb-banner-btn-accept {
border-left: 1px solid gray;
border-right: 1px solid gray;
}
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btn-flex .ldcweb-cn-accept {
font-weight: bolder;
color: var(--secondary-color);
}
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btns-btn {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
width: 100%;
height: 50px;
background-color: var(--background-color);
text-decoration: none;
font-family: var(--ck-w1-font-family-btn-txt);
font-size: var(--ck-w1-font-size-btn-txt);
color: var(--primary-color);
}
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btns-btn:hover {
color: var(--ck-w1-color-btn-txt-hover);
background-color: var(--ck-w1-color-btn-hover);
}
.ldcweb-btn {
position: fixed;
left: var(--ldcweb-cn-position-left);
right: var(--ldcweb-cn-position-right);
bottom: var(--ldcweb-cn-position-bottom);
z-index: var(--ldcweb-cn-z-index);
background-color: white;
padding: 8px;
border-radius: 100%;
cursor: pointer;
box-shadow: var(--shadow-color);
width: 50px;
height: 50px;
}
.ldcweb-btn-icon path {
fill: var(--secondary-color);
}
.ldcweb-btn-icon circle {
fill: var(--secondary-color);
}
.visibility {
display: none !important;
}
/* MODAL */
#ldcweb-cn-modal {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
z-index: 200;
opacity: 1;
}
#ldcweb-cn-modal .modal-wrapper {
position: relative;
max-height: 100vh;
}
#ldcweb-cn-modal .modal-wrapper > div:not(:first-of-type) {
width: 100%;
align-items: flex-end;
}
#ldcweb-cn-modal .modal-title {
padding: 0px 20px 0px 20px;
}
#ldcweb-cn-modal .modal-title * {
text-align: justify;
margin: 0;
}
#ldcweb-cn-modal .modal-title .description,
#ldcweb-cn-modal .modal-btns {
display: flex;
flex-direction: column;
align-items: center;
font-weight: normal;
line-height: initial;
}
#ldcweb-cn-modal .modal-title .description,
#ldcweb-cn-modal .modal-btns p,
#ldcweb-cn-modal .modal-btns a,
#ldcweb-cn-modal .modal-title > .subTitle {
font-family: var(--ck-w2-font-family-txt);
font-size: var(--ck-w2-font-size-txt);
color: var(--ck-w2-color-txt);
}
/* TITLE */
#ldcweb-cn-modal .modal-title .title {
font-family: var(--ck-w2-font-family-title);
font-size: var(--ck-w2-font-size-title);
font-weight: bold;
color: var(--ck-w2-color-title);
}
#ldcweb-cn-modal .modal-title > .subTitle {
color: var(--ck-w2-color-title);
margin-bottom: 6px;
}
#ldcweb-cn-modal .modal-title .title,
#ldcweb-cn-modal .modal-title > .subTitle {
text-align: center;
}
#ldcweb-cn-modal .modal-title a {
width: fit-content;
}
/* DETAILS */
#ldcweb-cn-modal .modal-details {
width: 100%;
height: 153px;
overflow-y: auto;
margin: 6px 0;
}
#ldcweb-cn-modal .modal-details ul {
display: flex;
flex-direction: column;
padding: 0 20px;
list-style: none;
}
#ldcweb-cn-modal .modal-details li > div {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
margin: 10px 0;
padding: 10px 20px;
border-radius: 20px;
border: 1px solid var(--ck-bgcolor-list);
}
#ldcweb-cn-modal .modal-details li span,
#ldcweb-cn-modal .modal-details li a,
#ldcweb-cn-modal .modal-details li label {
font-family: var(--ck-font-family-list);
font-size: var(--ck-font-size-list);
color: var(--ck-color-list);
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-name {
color: var(--ck-color-title);
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-infos {
display: flex;
flex-direction: column;
flex: 1;
width: 100%;
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-infos span:first-of-type {
font-size: var(--ck-w1-font-size-title);
font-weight: bold;
font-family: var(--ck-w1-font-family-title);
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-infos .ldcweb-cn-description {
color: var(--ck-w2-color-txt);
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-infos a {
width: fit-content;
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons {
display: flex;
justify-content: space-around;
width: 200px;
margin-top: 6px;
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons div:first-of-type,
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons div:last-of-type {
transition: all 0.3s;
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons div:first-of-type {
background: var(--ck-color-accept);
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons div:last-of-type {
background: var(--ck-color-deny);
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons div {
display: table;
text-align: center;
margin: 0.5em;
}
#ldcweb-cn-modal
.modal-details
.ldcweb-cn-buttons
div:first-of-type
input:checked
~ label,
#ldcweb-cn-modal
.modal-details
.ldcweb-cn-buttons
div:first-of-type
input
~ label.active {
background-color: var(--ck-color-deny-hover);
}
#ldcweb-cn-modal
.modal-details
.ldcweb-cn-buttons
div:last-of-type
input:checked
~ label,
#ldcweb-cn-modal
.modal-details
.ldcweb-cn-buttons
div:last-of-type
input
~ label.active {
background-color: var(--ck-color-accept-hover);
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons input {
display: none;
}
#ldcweb-cn-modal .modal-details .ldcweb-cn-buttons label {
width: 100px;
display: block;
color: var(--ck-color-txt);
transition: color 0.3s;
padding: 6px 20px;
cursor: pointer;
}
/* MEDIA QUERIES */
@media (max-width: 535px) {
.ldcweb-banner-content,
#ldcweb-cn .ldcweb-banner-btns {
flex-direction: column;
}
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btn-flex,
#ldcweb-cn .ldcweb-banner-btns .ldcweb-banner-btn-personalize {
width: 100%;
}
#ldcweb-cn
.ldcweb-banner-btns
.ldcweb-banner-btn-flex
.ldcweb-banner-btn-deny,
#ldcweb-cn
.ldcweb-banner-btns
.ldcweb-banner-btn-flex
.ldcweb-banner-btn-accept {
width: 50%;
}
.ldcweb-banner-btn-accept {
border-left: 1px solid gray;
border-right: none;
}
#ldcweb-cn .ldcweb-cn-banner {
left: 0;
bottom: 0;
}
#ldcweb-cn .ldcweb-cn-banner {
width: 100%;
max-height: 100vh;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.ldcweb-banner-details-open {
height: 0;
}
#ldcweb-cn .ldcweb-banner-title p {
text-align: center;
}
#ldcweb-cn .ldcweb-banner-img {
padding: 0 0 20px 0;
}
}

View file

@ -1,258 +1,306 @@
@extends('layouts.frontend')
@section('title', __('Nous contacter'))
@section('description', __("Découvrez DOUX, des produits de volailles françaises."))
@section('description', __('Découvrez DOUX, des produits de volailles françaises.'))
@section('content')
<section class="jumbotron">
<p class="maintitle ttu animate__animated fadeIn animate__slow">{{ __('Nous contacter') }}</p>
<img class="img-zoom" src="{{ asset('assets/images/contact.jpg') }}" alt="Nous contacter">
<div class="banner">
<svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1919.76 59.99">
<section class="jumbotron">
<p class="maintitle ttu animate__animated fadeIn animate__slow">{{ __('Nous contacter') }}</p>
<img class="img-zoom" src="{{ asset('assets/images/contact.jpg') }}" alt="Nous contacter">
<div class="banner">
<svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1919.76 59.99">
<defs>
<style>
.cls-1 {
fill: #ffffff;
}
.cls-2 {
fill: transparent;
}
</style>
</defs>
<path class="cls-1"
d="M1919.67,58c-.42.62,1,2.12-1,2-1.17-.07-2.34,0-3.5,0H0V55c3-.06,6,.08,9-.22,28.32-2.84,56.61-6,85-8.6q59.19-5.38,118.44-10c46.65-3.58,93.32-7,140-9.88,49.7-3.05,99.43-5.85,149.18-7.9,68.4-2.81,136.83-5,205.26-7.06,38.63-1.14,77.28-1.58,115.92-1.94,78.47-.74,156.93-.9,235.39.32,37.81.59,75.62,1.2,113.42,2.09q64.44,1.5,128.85,4,76.89,2.85,153.71,6.91,63.36,3.32,126.66,7.44,43.86,2.85,87.7,6,33.13,2.4,66.22,5.17,38.82,3.23,77.61,6.72c20.06,1.79,40.11,3.73,60.16,5.6Z" />
<path class="cls-2"
d="M1919.67,58l-47.21-4.36c-20-1.87-40.1-3.81-60.16-5.6q-38.79-3.47-77.61-6.72-33.09-2.74-66.22-5.17-43.83-3.18-87.7-6-63.3-4.11-126.66-7.44-76.83-4-153.71-6.91-64.41-2.4-128.85-4c-37.8-.89-75.61-1.5-113.42-2.09-78.46-1.22-156.92-1.06-235.39-.32-38.64.36-77.29.8-115.92,1.94-68.43,2-136.86,4.25-205.26,7.06-49.75,2-99.48,4.85-149.18,7.9-46.7,2.87-93.37,6.3-140,9.88q-59.27,4.54-118.44,10c-28.35,2.58-56.64,5.76-85,8.6-3,.3-6,.16-9,.22V0H1919.67Z" />
</svg>
</div>
</section>
<div class="contact-page has-bckg--grey is-flex horizontal-center container">
<svg class="p-abs" id="picto-localisation" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 171 236">
<defs>
<style>
.cls-1 {
fill: #ffffff;
}
.cls-2 {
fill: transparent;
fill-rule: evenodd;
}
</style>
</defs>
<path class="cls-1" d="M1919.67,58c-.42.62,1,2.12-1,2-1.17-.07-2.34,0-3.5,0H0V55c3-.06,6,.08,9-.22,28.32-2.84,56.61-6,85-8.6q59.19-5.38,118.44-10c46.65-3.58,93.32-7,140-9.88,49.7-3.05,99.43-5.85,149.18-7.9,68.4-2.81,136.83-5,205.26-7.06,38.63-1.14,77.28-1.58,115.92-1.94,78.47-.74,156.93-.9,235.39.32,37.81.59,75.62,1.2,113.42,2.09q64.44,1.5,128.85,4,76.89,2.85,153.71,6.91,63.36,3.32,126.66,7.44,43.86,2.85,87.7,6,33.13,2.4,66.22,5.17,38.82,3.23,77.61,6.72c20.06,1.79,40.11,3.73,60.16,5.6Z" />
<path class="cls-2" d="M1919.67,58l-47.21-4.36c-20-1.87-40.1-3.81-60.16-5.6q-38.79-3.47-77.61-6.72-33.09-2.74-66.22-5.17-43.83-3.18-87.7-6-63.3-4.11-126.66-7.44-76.83-4-153.71-6.91-64.41-2.4-128.85-4c-37.8-.89-75.61-1.5-113.42-2.09-78.46-1.22-156.92-1.06-235.39-.32-38.64.36-77.29.8-115.92,1.94-68.43,2-136.86,4.25-205.26,7.06-49.75,2-99.48,4.85-149.18,7.9-46.7,2.87-93.37,6.3-140,9.88q-59.27,4.54-118.44,10c-28.35,2.58-56.64,5.76-85,8.6-3,.3-6,.16-9,.22V0H1919.67Z" />
<path class="cls-1"
d="M85,236C60,197,0,131,0,85A84.93,84.93,0,0,1,85,0c48,0,86,38,86,85C171,131,111,197,85,236ZM85,43c24,0,43,19,43,42a42.68,42.68,0,0,1-43,43c-23,0-42-19-42-43A42.25,42.25,0,0,1,85,43Z" />
</svg>
<p>
<strong>{{ __('Adresse') }}</strong><br /><br />
DOUX FARMOR<br />
450 Route de Rosporden<br />
Le Grand Guelen<br />
29000 QUIMPER, France
</p>
</div>
</section>
<div class="container contact-page has-bckg--grey is-flex horizontal-center">
<svg id="picto-localisation" class="p-abs" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 171 236"><defs>
<style>.cls-1{fill-rule:evenodd;}</style>
</defs><path class="cls-1" d="M85,236C60,197,0,131,0,85A84.93,84.93,0,0,1,85,0c48,0,86,38,86,85C171,131,111,197,85,236ZM85,43c24,0,43,19,43,42a42.68,42.68,0,0,1-43,43c-23,0-42-19-42-43A42.25,42.25,0,0,1,85,43Z"/>
</svg>
<p>
<strong>{{ __('Adresse') }}</strong><br /><br />
DOUX FARMOR<br />
450 Route de Rosporden<br />
Le Grand Guelen<br />
29000 QUIMPER, France
</p>
</div>
<div class="container">
<div class="wrapper">
<div class="breadcrumb is-flex">
<a href="{{ route($routeprefixer . 'home') }}" class="link">{{ __('Accueil') }}</a>
</div>
<div class="header-title sectiontitle align-center p-rel">
<h2 class="punchline-module__title align-center animate__animated fadeInUp animate__slow">{!! __('Une question ? Une idée ? Un conseil ?<br>Des informations sur nos produits ?') !!}</h2>
</div>
<p class="align-center">{!! __('N\'hésitez-pas à nous contacter en renseignant le formulaire ci-dessous.<br>Nous traiterons votre demande avec la plus grande attention dans les meilleurs délais.') !!}</p>
@if(session()->has('status'))
<div class="form-result form-result_confirm">
<div class="form-result__title title title_small">{{ __('Votre message a bien été envoyé !') }}</div>
<div class="form-result__text">{{ __('Nos services mettent tout en oeuvre pour y répondre au plus vite.') }}</div>
</div>
@endif
<form id="contact-form" action="{{route($routeprefixer . 'contact.submit')}}" method="post" class="form contact__form" enctype="multipart/form-data">
@csrf
@if ($errors->any())
@foreach ($errors->all() as $error)
<div class="field__error">{{ $error }}</div>
@endforeach
<div class="container">
<div class="wrapper">
<div class="breadcrumb is-flex">
<a class="link" href="{{ route($routeprefixer . 'home') }}">{{ __('Accueil') }}</a>
</div>
<div class="header-title sectiontitle align-center p-rel">
<h2 class="punchline-module__title align-center animate__animated fadeInUp animate__slow">{!! __('Une question ? Une idée ? Un conseil ?<br>Des informations sur nos produits ?') !!}</h2>
</div>
<p class="align-center">{!! __(
'N\'hésitez-pas à nous contacter en renseignant le formulaire ci-dessous.<br>Nous traiterons votre demande avec la plus grande attention dans les meilleurs délais.',
) !!}</p>
@if (session()->has('status'))
<div class="form-result form-result_confirm">
<div class="form-result__title title title_small">{{ __('Votre message a bien été envoyé !') }}</div>
<div class="form-result__text">{{ __('Nos services mettent tout en oeuvre pour y répondre au plus vite.') }}</div>
</div>
@endif
<fieldset>
<legend>{{ __('Vos coordonnées') }} :</legend>
<form class="form contact__form" id="contact-form" action="{{ route($routeprefixer . 'contact.submit') }}" method="post"
enctype="multipart/form-data">
@csrf
@if ($errors->any())
@foreach ($errors->all() as $error)
<div class="form-result_error">{{ $error }}</div>
@endforeach
@endif
<fieldset>
<legend>{{ __('Vos coordonnées') }} :</legend>
<label class="radio-label">{{ __('Monsieur') }}
<input type="radio" checked="checked" name="civilite" value="monsieur" @if (old('civilite') === "monsieur" ) checked @endif>
<span class="checkmark"></span>
</label>
<label class="radio-label">{{ __('Madame') }}
<input type="radio" name="civilite" value="madame" @if (old('civilite') === "madame" ) checked @endif>
<span class="checkmark"></span>
</label>
<label class="radio-label">{{ __('Monsieur') }}
<input name="civilite" type="radio" value="monsieur" checked="checked"
@if (old('civilite') === 'monsieur') checked @endif>
<span class="checkmark"></span>
</label>
<label class="radio-label">{{ __('Madame') }}
<input name="civilite" type="radio" value="madame" @if (old('civilite') === 'madame') checked @endif>
<span class="checkmark"></span>
</label>
<div class="form-row">
<div class="form-group">
<label for="name">{{ __('Nom') }}* : </label>
<input type="text" name="name" id="name" minlength="2" required value="{{old('name')}}">
<div class="form-row">
<div class="form-group">
<label for="name">{{ __('Nom') }}* : </label>
<input id="name" name="name" type="text" value="{{ old('name') }}" minlength="2" required>
</div>
<div class="form-group">
<label for="lastname">{{ __('Prénom') }}* : </label>
<input id="lastname" name="lastname" type="text" value="{{ old('lastname') }}" minlength="2" required>
</div>
</div>
<div class="form-group">
<label for="lastname">{{ __('Prénom') }}* : </label>
<input type="text" name="lastname" id="lastname" minlength="2" value="{{ old('lastname') }}" required>
<div class="form-row">
<div class="form-group">
<label for="address">{{ __('Adresse') }}* : </label>
<input id="address" name="address" type="text" value="{{ old('address') }}" maxlength="255"
autocomplete="street-address" required>
</div>
<div class="form-group">
<label for="postcode">{{ __('Code postal') }}* : </label>
<input id="postcode" name="postcode" type="text" value="{{ old('postcode') }}" minlength="1" maxlength="99000"
autocomplete="postal-code" required>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="city">{{ __('Ville') }}* : </label>
<input id="city" name="city" type="text" value="{{ old('city') }}" maxlength="255"
autocomplete="address-level2" required>
</div>
<div class="form-group">
<label for="phone">{{ __('Téléphone') }}* : </label>
<input id="phone" name="phone" type="number" value="{{ old('phone') }}" min="1" max="9999999999"
autocomplete="tel" required>
</div>
<div class="form-group">
<label for="email">{{ __('Email') }}* : </label>
<input id="email" name="email" type="mail" value="{{ old('email') }}"
pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" autocomplete="email" required>
</div>
</div>
<div class="form-row">
<div class="country">
<select class="changeLength" id="country" name="country" maxlength="255" required>
<option value="" @if (!old('country')) selected @endif>{{ __('Sélectionnez un pays') }} *
</option>
@foreach ($listCountries as $country)
<option value="{{ $country->value }}" @if (old('country') == $country->value) selected @endif>
{{ __($country->label) }}</option>
@endforeach
</select>
</div>
<div class="drom">
<select class="changeLength" id="departement" name="departement" maxlength="255">
<option value="" @if (!old('departement')) selected @endif>
{{ __('Sélectionnez un département') }} *</option>
@foreach ($listDeps as $departement)
<option value="{{ $departement->value }}" @if (old('departement') === $departement->value) selected @endif>
{{ __($departement->label) }}</option>
@endforeach
</select>
</div>
</div>
</fieldset>
<fieldset>
<legend>{{ __('Préciser votre demande') }} :</legend>
<div class="ck-button">
<label>
<input class="consoRecla" name="topic" type="radio" value="Réclamation"
@if (old('topic') == 'Réclamation') checked @endif><span>{{ __('Réclamation produit') }}</span>
</label>
<label>
<input class="otherRecla" name="topic" type="radio" value="La marque"
@if (old('topic') == 'La marque') checked @endif><span>{{ __('La marque') }}</span>
</label>
<label>
<input class="otherRecla" name="topic" type="radio" value="Contact Commercial"
@if (old('topic') == 'Contact Commercial') checked @endif><span>{{ __('Contact commercial') }}</span>
</label>
<label>
<input class="otherRecla" name="topic" type="radio" value="Autre"
@if (old('topic') == 'Autre') checked @endif><span>{{ __('Autre demande') }}</span>
</label>
</div>
<div class="form-row recla_field">
<div class="form-group">
<label for="address">{{ __('Nom du produit') }}* : </label>
<input id="product_name" name="product_name" type="text" value="{{ old('product_name') }}">
</div>
<div class="form-group">
<label for="barcode">{{ __('Code barre') }}* : </label>
<input id="barcode" name="barcode" type="number" value="{{ old('barcode') }}">
</div>
</div>
<div class="form-row recla_field">
<div class="form-group">
<label for="shop">{{ __("Lieu d'achat") }}* : </label>
<input id="shop" name="shop" type="text" value="{{ old('shop') }}">
</div>
<div class="form-group">
<label for="lot">{{ __('Numéro de lot') }}* : </label>
<input id="lot" name="lot" type="number" value="{{ old('lot') }}">
</div>
</div>
<div class="form-row recla_field">
<div class="form-group">
<label for="limit_date">{{ __('Date Limite de Consommation') }}* : </label>
<input id="limit_date" name="limit_date" type="date" value="{{ old('limit_date') }}">
</div>
<div class="form-group">
<label for="consumption_date">{{ __('Date de consommation') }}* : </label>
<input id="consumption_date" name="consumption_date" type="date" value="{{ old('consumption_date') }}">
</div>
</div>
<div>
<label for="message">{{ __('Message') }}* : </label>
<textarea id="message" name="message" cols="30" rows="10">{{ old('message') }}</textarea>
</div>
<div>
<input id="file" name="file" type="file" @if ('topic' == 'Réclamation') required @endif>
<label id="lblFile" for="file"></label>
</div>
</fieldset>
<p class="is-small">{!! __('rgpd.contact.disclaimer', ['PRIVROUTE' => route($routeprefixer . 'policy')]) !!}</P>
<div class="is-small">
<input id="rgpd" name="rgpd" type="checkbox" required>
<label for="rgpd">{{ __('rgpd.contact.acceptcgu') }}</label>
</div>
<div class="form-row">
<div class="form-group">
<label for="address">{{ __('Adresse') }}* : </label>
<input type="text" name="address" id="address" maxlength="255" value="{{ old('address') }}" autocomplete="street-address" required>
</div>
<div class="form-group">
<label for="postcode">{{ __('Code postal') }}* : </label>
<input type="text" name="postcode" id="postcode" minlength="1" maxlength="99000" value="{{ old('postcode') }}" autocomplete="postal-code" required>
</div>
<a class="cn-cookie-link" id="recaptcha-warning" href="" rel="nofollow">
<strong class="text-underline text-bold text-normal text-danger">
{{ __('cookie-notice.custom.recaptcha.warning') }}
</strong>
</a>
<div class="d-flex flex-column justify-content-center align-items-center">
<div id="r_captcha"></div>
@if ($errors->has('g-recaptcha-response'))
<div class="mb-6">
<span class="text-danger">{{ $errors->first('g-recaptcha-response') }}</span>
</div>
@endif
<p>{{ __('*Champ obligatoire') }}</p>
</div>
<div class="form-row">
<div class="form-group">
<label for="city">{{ __('Ville') }}* : </label>
<input type="text" name="city" id="city" maxlength="255" value="{{ old('city') }}" autocomplete="address-level2" required>
</div>
<div class="form-group">
<label for="phone">{{ __('Téléphone') }}* : </label>
<input type="number" name="phone" id="phone" min="1" max="9999999999" value="{{ old('phone') }}" autocomplete="tel" required>
</div>
<div class="form-group">
<label for="email">{{ __('Email') }}* : </label>
<input type="mail" name="email" id="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" value="{{ old('email') }}" autocomplete="email" required>
</div>
<div class="align-center">
<div class="g-recaptcha" data-sitekey="{{ config('services.google.recaptcha.public') }}"></div>
<input type="submit" value="Envoyer">
</div>
<div class="form-row">
<div class="country">
<select id="country" class="changeLength" maxlength="255" name="country" required>
<option value="" @if(!old('country')) selected @endif>{{ __('Sélectionnez un pays') }} *</option>
@foreach($listCountries as $country)
<option value="{{ $country->value }}" @if(old('country') == $country->value) selected @endif>{{ __($country->label) }}</option>
@endforeach
</select>
</div>
<div class="drom">
<select id="departement" class="changeLength" maxlength="255" name="departement">
<option value="" @if(!old('departement')) selected @endif>{{ __('Sélectionnez un département') }} *</option>
@foreach ($listDeps as $departement)
<option value="{{ $departement->value }}" @if(old('departement') === $departement->value) selected @endif>{{ __($departement->label) }}</option>
@endforeach
</select>
</div>
</div>
</fieldset>
<fieldset>
<legend>{{ __('Préciser votre demande') }} :</legend>
<div class="ck-button">
<label>
<input class="consoRecla" type="radio" value="Réclamation" name="topic" @if (old('topic')=="Réclamation") checked @endif><span>{{ __('Réclamation produit') }}</span>
</label>
<label>
<input class="otherRecla" type="radio" value="La marque" name="topic" @if (old('topic')=="La marque") checked @endif><span>{{ __('La marque') }}</span>
</label>
<label>
<input class="otherRecla" type="radio" value="Contact Commercial" name="topic" @if (old('topic')=="Contact Commercial") checked @endif><span>{{ __('Contact commercial') }}</span>
</label>
<label>
<input class="otherRecla" type="radio" value="Autre" name="topic" @if (old('topic')=="Autre") checked @endif><span>{{ __('Autre demande') }}</span>
</label>
</div>
<div class="form-row recla_field">
<div class="form-group">
<label for="address">{{ __('Nom du produit') }}* : </label>
<input type="text" name="product_name" id="product_name" value="{{ old('product_name') }}">
</div>
<div class="form-group">
<label for="barcode">{{ __('Code barre') }}* : </label>
<input type="number" name="barcode" id="barcode" value="{{ old('barcode') }}">
</div>
</div>
<div class="form-row recla_field">
<div class="form-group">
<label for="shop">{{ __("Lieu d'achat") }}* : </label>
<input type="text" name="shop" id="shop" value="{{ old('shop') }}">
</div>
<div class="form-group">
<label for="lot">{{ __('Numéro de lot') }}* : </label>
<input type="number" name="lot" id="lot" value="{{ old('lot') }}">
</div>
</div>
<div class="form-row recla_field">
<div class="form-group">
<label for="limit_date">{{ __('Date Limite de Consommation') }}* : </label>
<input type="date" name="limit_date" id="limit_date" value="{{ old('limit_date') }}">
</div>
<div class="form-group">
<label for="consumption_date">{{ __('Date de consommation') }}* : </label>
<input type="date" name="consumption_date" id="consumption_date" value="{{ old('consumption_date') }}">
</div>
</div>
<div>
<label for="message">{{ __('Message') }}* : </label>
<textarea name="message" id="message" cols="30" rows="10">{{ old('message') }}</textarea>
</div>
<div>
<input type="file" name="file" id="file" @if ('topic'=="Réclamation" ) required @endif>
<label for="file" id="lblFile"></label>
</div>
</fieldset>
<p class="is-small">{!! __('rgpd.contact.disclaimer', ['PRIVROUTE' => route($routeprefixer . 'policy')]) !!}</P>
<div class="is-small">
<input type="checkbox" name="rgpd" id="rgpd" required>
<label for="rgpd">{{ __('rgpd.contact.acceptcgu') }}</label>
</div>
<div class="align-center">
<div class="g-recaptcha" data-sitekey="{{ config('services.google.recaptcha.public') }}"></div>
<input type="submit" value="Envoyer">
</div>
</form>
</form>
</div>
</div>
</div>
@endsection
@push('scripts')
<script nonce="{{ $nonce }}">
function showReclaFields() {
var collection = document.getElementsByClassName('recla_field');
for(let elem of collection) {
elem.style.display = 'flex';
<script nonce="{{ $nonce }}">
function showReclaFields() {
var collection = document.getElementsByClassName('recla_field');
for (let elem of collection) {
elem.style.display = 'flex';
}
document.getElementById('lblFile').innerHTML = 'Photo de l\'emballage*';
document.getElementById('file').required = true;
}
document.getElementById('lblFile').innerHTML = 'Photo de l\'emballage*';
document.getElementById('file').required = true;
}
function hideReclaFields() {
var collection = document.getElementsByClassName('recla_field');
for(let elem of collection) {
elem.style.display = 'none';
function hideReclaFields() {
var collection = document.getElementsByClassName('recla_field');
for (let elem of collection) {
elem.style.display = 'none';
}
document.getElementById('lblFile').innerHTML = 'Insérer une pièce jointe';
document.getElementById('file').required = false;
}
document.getElementById('lblFile').innerHTML = 'Insérer une pièce jointe';
document.getElementById('file').required = false;
}
function showDromField() {
const countryList = document.getElementById('country');
const departmentList = document.getElementById('departement');
if (countryList.value=='{{ \App\Enums\Country::france()->value }}') {
departmentList.style.display = 'initial';
departmentList.required = true;
} else {
departmentList.style.display = 'none';
departmentList.required = false;
function showDromField() {
const countryList = document.getElementById('country');
const departmentList = document.getElementById('departement');
if (countryList.value == '{{ \App\Enums\Country::france()->value }}') {
departmentList.style.display = 'initial';
departmentList.required = true;
} else {
departmentList.style.display = 'none';
departmentList.required = false;
}
}
}
document.addEventListener('DOMContentLoaded', function () {
hideReclaFields();
showDromField();
@if (old('topic')=="Réclamation")
showReclaFields();
@endif
document.getElementById('country').addEventListener('change', showDromField)
});
</script>
document.addEventListener('DOMContentLoaded', function() {
hideReclaFields();
showDromField();
@if (old('topic') == 'Réclamation')
showReclaFields();
@endif
document.getElementById('country').addEventListener('change', showDromField)
});
</script>
<script nonce="{{ $nonce }}">
window.__LDC_CN_Recaptcha = function() {
(function(d, t) {
let g = d.createElement(t),
s = d.getElementsByTagName(t)[0];
g.src = 'https://www.google.com/recaptcha/api.js';
s.parentNode.insertBefore(g, s)
}(document, 'script'));
};
<script nonce="{{ $nonce }}">
document.addEventListener('DOMContentLoaded', function() {
window.__CN_Recaptcha = function() {
(function(d, t) {
let g = d.createElement(t),
s = d.getElementsByTagName(t)[0];
g.src = 'https://www.google.com/recaptcha/api.js?render=explicit&onload=__CN_Recaptcha_Loaded';
s.parentNode.insertBefore(g, s)
}(document, 'script'));
};
window.__CN_Recaptcha_Loaded = function() {
grecaptcha.render('r_captcha', {
'sitekey': '{{ config('services.google.recaptcha.public') }}'
});
document.getElementById('recaptcha-warning').remove();
document.getElementById('contact-form').inert = false;
};
});
function onSubmit(token) {
document.getElementById("contact-form").submit();
}
</script>
function onSubmit(token) {
document.getElementById("contact-form").submit();
}
</script>
@endpush

View file

@ -12,7 +12,7 @@
<main>
@yield('content')
</main>
@include('layouts.frontend.cookie')
@include('vendor.cn-cookies')
@include('layouts.frontend.app-footer')
</div>

View file

@ -1,9 +1,16 @@
<footer>
<div class="footer-widgets is-flex p-rel">
<div class="footer-widgets__content wrapper is-flex p-abs @if (Route::current()->getName() == 'food') white-color @endif">
<svg id="picto-localisation" class="p-abs" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 171 236"><defs>
<style>.cls-1{fill-rule:evenodd;}</style>
</defs><path class="cls-1" d="M85,236C60,197,0,131,0,85A84.93,84.93,0,0,1,85,0c48,0,86,38,86,85C171,131,111,197,85,236ZM85,43c24,0,43,19,43,42a42.68,42.68,0,0,1-43,43c-23,0-42-19-42-43A42.25,42.25,0,0,1,85,43Z"/>
<svg class="p-abs" id="picto-localisation" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 171 236">
<defs>
<style>
.cls-1 {
fill-rule: evenodd;
}
</style>
</defs>
<path class="cls-1"
d="M85,236C60,197,0,131,0,85A84.93,84.93,0,0,1,85,0c48,0,86,38,86,85C171,131,111,197,85,236ZM85,43c24,0,43,19,43,42a42.68,42.68,0,0,1-43,43c-23,0-42-19-42-43A42.25,42.25,0,0,1,85,43Z" />
</svg>
<p>
DOUX FARMOR<br />
@ -13,26 +20,32 @@
</p>
</div>
@switch (Route::current()->getName())
@case('wasup')
<img src="{{ asset('assets/images/footer_marque.jpg') }}" alt="{{ __('Cuisiner en famille') }}" />
@break
@case('product')
<img src="{{ asset('assets/images/footer_product.jpg') }}" alt="{{ __('Poulet rôti') }}" />
@break
@case('products')
<img src="{{ asset('assets/images/footer_products.jpg') }}" alt="{{ __('Poulet rôti') }}" />
@break
@case('gammes')
<img src="{{ asset('assets/images/footer_gammes.jpg') }}" alt="{{ __('Grignottes de poulet') }}" />
@break
@case('news')
<img src="{{ asset('assets/images/footer_news.jpg') }}" alt="{{ __('Poulet rôti') }}" />
@break
@case('food')
<img src="{{ asset('assets/images/footer_food.jpg') }}" alt="{{ __('Cuisine de chef') }}" />
@break
@default
<img src="{{ asset('assets/images/footer_home.jpg') }}" alt="{{ __('Suggestion de poulet frit') }}" />
@case('wasup')
<img src="{{ asset('assets/images/footer_marque.jpg') }}" alt="{{ __('Cuisiner en famille') }}" />
@break
@case('product')
<img src="{{ asset('assets/images/footer_product.jpg') }}" alt="{{ __('Poulet rôti') }}" />
@break
@case('products')
<img src="{{ asset('assets/images/footer_products.jpg') }}" alt="{{ __('Poulet rôti') }}" />
@break
@case('gammes')
<img src="{{ asset('assets/images/footer_gammes.jpg') }}" alt="{{ __('Grignottes de poulet') }}" />
@break
@case('news')
<img src="{{ asset('assets/images/footer_news.jpg') }}" alt="{{ __('Poulet rôti') }}" />
@break
@case('food')
<img src="{{ asset('assets/images/footer_food.jpg') }}" alt="{{ __('Cuisine de chef') }}" />
@break
@default
<img src="{{ asset('assets/images/footer_home.jpg') }}" alt="{{ __('Suggestion de poulet frit') }}" />
@endswitch
<div class="banner footer">
<svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1919.76 59.99">
@ -47,20 +60,22 @@
}
</style>
</defs>
<path class="cls-1" d="M1919.67,58c-.42.62,1,2.12-1,2-1.17-.07-2.34,0-3.5,0H0V55c3-.06,6,.08,9-.22,28.32-2.84,56.61-6,85-8.6q59.19-5.38,118.44-10c46.65-3.58,93.32-7,140-9.88,49.7-3.05,99.43-5.85,149.18-7.9,68.4-2.81,136.83-5,205.26-7.06,38.63-1.14,77.28-1.58,115.92-1.94,78.47-.74,156.93-.9,235.39.32,37.81.59,75.62,1.2,113.42,2.09q64.44,1.5,128.85,4,76.89,2.85,153.71,6.91,63.36,3.32,126.66,7.44,43.86,2.85,87.7,6,33.13,2.4,66.22,5.17,38.82,3.23,77.61,6.72c20.06,1.79,40.11,3.73,60.16,5.6Z" />
<path class="cls-2" d="M1919.67,58l-47.21-4.36c-20-1.87-40.1-3.81-60.16-5.6q-38.79-3.47-77.61-6.72-33.09-2.74-66.22-5.17-43.83-3.18-87.7-6-63.3-4.11-126.66-7.44-76.83-4-153.71-6.91-64.41-2.4-128.85-4c-37.8-.89-75.61-1.5-113.42-2.09-78.46-1.22-156.92-1.06-235.39-.32-38.64.36-77.29.8-115.92,1.94-68.43,2-136.86,4.25-205.26,7.06-49.75,2-99.48,4.85-149.18,7.9-46.7,2.87-93.37,6.3-140,9.88q-59.27,4.54-118.44,10c-28.35,2.58-56.64,5.76-85,8.6-3,.3-6,.16-9,.22V0H1919.67Z" />
<path class="cls-1"
d="M1919.67,58c-.42.62,1,2.12-1,2-1.17-.07-2.34,0-3.5,0H0V55c3-.06,6,.08,9-.22,28.32-2.84,56.61-6,85-8.6q59.19-5.38,118.44-10c46.65-3.58,93.32-7,140-9.88,49.7-3.05,99.43-5.85,149.18-7.9,68.4-2.81,136.83-5,205.26-7.06,38.63-1.14,77.28-1.58,115.92-1.94,78.47-.74,156.93-.9,235.39.32,37.81.59,75.62,1.2,113.42,2.09q64.44,1.5,128.85,4,76.89,2.85,153.71,6.91,63.36,3.32,126.66,7.44,43.86,2.85,87.7,6,33.13,2.4,66.22,5.17,38.82,3.23,77.61,6.72c20.06,1.79,40.11,3.73,60.16,5.6Z" />
<path class="cls-2"
d="M1919.67,58l-47.21-4.36c-20-1.87-40.1-3.81-60.16-5.6q-38.79-3.47-77.61-6.72-33.09-2.74-66.22-5.17-43.83-3.18-87.7-6-63.3-4.11-126.66-7.44-76.83-4-153.71-6.91-64.41-2.4-128.85-4c-37.8-.89-75.61-1.5-113.42-2.09-78.46-1.22-156.92-1.06-235.39-.32-38.64.36-77.29.8-115.92,1.94-68.43,2-136.86,4.25-205.26,7.06-49.75,2-99.48,4.85-149.18,7.9-46.7,2.87-93.37,6.3-140,9.88q-59.27,4.54-118.44,10c-28.35,2.58-56.64,5.76-85,8.6-3,.3-6,.16-9,.22V0H1919.67Z" />
</svg>
</div>
</div>
<div class="container footer-content align-center @if (strpos(Route::current()->getName(), 'food') !== false) blue-bg @endif">
<div class="footer-content align-center @if (strpos(Route::current()->getName(), 'food') !== false) blue-bg @endif container">
<ul>
<li><a href="{{ route($routeprefixer . 'cgu') }}">{{ __('Mentions légales') }}</a></li>
<li><a href="{{ route($routeprefixer . 'policy') }}">{{ __('Charte de confidentialité') }}</a></li>
{{--<li><a href="{{ route($routeprefixer . 'site-map') }}">{{ __('Plan du site') }}</a></li>--}}
{{-- <li><a href="{{ route($routeprefixer . 'site-map') }}">{{ __('Plan du site') }}</a></li> --}}
<li><a href="https://recrutement.ldc.fr/fr/annonces?brands=593" target="_blank">{{ __('Nous Rejoindre') }}</a></li>
<li><a href="{{ route($routeprefixer . 'contact') }}">{{ __('Contact') }}</a></li>
<li><a href="#cookies" class="ldcweb-cn-cookie-link">{{ __('Gestion des cookies') }}</a></li>
<li><a class="cn-cookie-link" href="#cookies">{{ __('Gestion des cookies') }}</a></li>
</ul>
<span>© 2022 DOUX</span>

View file

@ -1,130 +0,0 @@
<div id="ldcweb-cn">
<a class="ldcweb-btn" title="Personnaliser les cookies">
<svg class="ldcweb-btn-icon" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M14.0001 2.93383C14.0001 4.16622 14.6159 5.25477 15.5567 5.90849C15.3526 6.46423 15.2412 7.06473 15.2412 7.69126C15.2412 10.5472 17.5564 12.8624 20.4123 12.8624C21.0807 12.8624 21.7195 12.7356 22.3059 12.5047C22.9456 13.527 24.0817 14.2069 25.3766 14.2069C26.1872 14.2069 26.9357 13.9404 27.539 13.4903C27.5453 13.6594 27.5484 13.8294 27.5484 14C27.5484 21.4826 21.4826 27.5484 14 27.5484C6.51748 27.5484 0.45166 21.4826 0.45166 14C0.45166 6.51748 6.51748 0.45166 14 0.45166C14.3209 0.45166 14.6391 0.462811 14.9543 0.484747C14.3618 1.12929 14.0001 1.98931 14.0001 2.93383ZM21.2176 2.53212C21.2195 2.54914 21.2213 2.56619 21.2229 2.58328C21.2569 2.58864 21.2909 2.59433 21.3247 2.60035C21.2891 2.57745 21.2534 2.5547 21.2176 2.53212ZM25.5171 6.86104C25.523 6.89745 25.5285 6.93399 25.5336 6.97066C25.5512 6.97141 25.5687 6.97228 25.5861 6.97328C25.5633 6.93574 25.5403 6.89833 25.5171 6.86104ZM12.5247 2.09283C12.4748 2.38291 12.4487 2.68118 12.4487 2.98553C12.4487 4.33316 12.9591 5.56158 13.7972 6.48802C13.7266 6.87842 13.6898 7.28054 13.6898 7.69126C13.6898 11.404 16.6996 14.4137 20.4123 14.4137C20.8725 14.4137 21.3219 14.3675 21.7562 14.2794C22.689 15.1941 23.9669 15.7582 25.3766 15.7582C25.5439 15.7582 25.7094 15.7503 25.8726 15.7347C25.0321 21.5385 20.0368 25.9971 14.0001 25.9971C7.37431 25.9971 2.00305 20.6258 2.00305 14.0001C2.00305 7.87378 6.59498 2.82 12.5247 2.09283Z"
fill="#FF4E4E" />
<circle cx="7.58784" cy="12.8624" r="1.96503" fill="#FF4E4E" />
<circle cx="8.82887" cy="19.2745" r="1.3445" fill="#FF4E4E" />
<circle cx="13.6897" cy="14.5171" r="1.03423" fill="#FF4E4E" />
<circle cx="11.4144" cy="7.48439" r="0.930805" fill="#FF4E4E" />
<circle cx="17.5164" cy="20.3089" r="1.86161" fill="#FF4E4E" />
<circle cx="21.3432" cy="6.7604" r="0.930805" fill="#FF4E4E" />
<circle cx="22.1706" cy="1.89958" r="1.44792" fill="#FF4E4E" />
<circle cx="26.8245" cy="8.31185" r="0.72396" fill="#FF4E4E" />
</svg>
</a>
<div id="ldcweb-banner" class="ldcweb-cn-banner">
<div class="ldcweb-banner-content">
<div class="ldcweb-banner-img">
<img src="{{ asset('assets/images/logo-doux.png') }}" alt="{{ __('Doux') }}" />
</div>
<div class="ldcweb-banner-text">
<div class="ldcweb-banner-title">
<p aria-level="h1">{{ __('rgpd.banner.title') }}</p>
</div>
<p class="ldcweb-banner-para-p" data-open="{{ __('rgpd.banner.desc.introopen') }}" data-close="{{ __('rgpd.banner.desc.introclose') }}">
{!! __('rgpd.banner.desc.introclose') !!}
</p>
</div>
</div>
<div class="ldcweb-banner-details">
<p>{!! __('rgpd.banner.desc.more', ['PRIVROUTE' => route($routeprefixer . 'policy')]) !!}</p>
</div>
<div class="ldcweb-banner-btnDetails">
<p class="ldcweb-banner-btnDetails-p" data-open="{{ __('rgpd.banner.lessdetails') }}" data-close="{{ __('rgpd.banner.moredetails') }}">{{ __('rgpd.banner.moredetails') }}</p>
</div>
<div id="ldcweb-cn-modal" class="visibility">
<div class="modal-wrapper">
<div class="modal-title">
<p class="title" aria-level="h2">{{ __('rgpd.manage.title') }}</p>
<p class="subTitle">{{ __('rgpd.manage.subtitle') }}</p>
<p class="description">{!! __('rgpd.manage.explain') !!}</p>
</div>
<div class="modal-details">
<ul id="ldcweb-cn-list">
</ul>
<div id="template">
<div>
<div class="ldcweb-cn-infos">
<span class="ldcweb-cn-name">Google Analytics (universal)</span>
<span class="ldcweb-cn-description">Ce service peut déposer 8 cookies.</span>
<a class="ldcweb-cn-link" href="#">En savoir plus</a>
</div>
<div class="ldcweb-cn-buttons">
<div class="deny" id="deny-btn">
<input type="radio" id="analytics2" name="analytics" data-name="analytics"
data-status="false">
<label for="analytics2">{{ __('rgpd.cookie.deny') }}</label>
</div>
<div class="accept" id="accept-btn">
<input type="radio" id="analytics1" name="analytics" data-name="analytics"
data-status="true">
<label for="analytics1">{{ __('rgpd.cookie.allow') }}</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="ldcweb-banner-btns">
<div class="ldcweb-banner-btn-flex">
<div class="ldcweb-banner-btn-deny">
<a id="ldcweb-cn-deny-banner" class="ldcweb-banner-btns-btn ldcweb-cn-deny">{{ __('rgpd.cookies.denyall') }}</a>
</div>
<div class="ldcweb-banner-btn-accept">
<a id="ldcweb-cn-accept-banner" class="ldcweb-banner-btns-btn ldcweb-cn-accept">{{ __('rgpd.cookies.allowall') }}</a>
</div>
</div>
<div class="ldcweb-banner-btn-personalize">
<a class="ldcweb-banner-btns-btn ldcweb-cn-personalize" data-open-modal="{{ __('rgpd.cookies.return') }}"
data-close-modal="{{ __('rgpd.cookies.personalize') }}">{{ __('rgpd.cookies.personalize') }}</a>
</div>
</div>
</div>
</div>
@push('scripts')
<script nonce="{{ $nonce }}">
window.LDCWebCN = new LdcwebCn({
'analytics': {
'name': "{!! __('rgpd.analytics.title') !!}",
'description': "{!! __('rgpd.analytics.desc') !!}",
'link': 'https://support.google.com/analytics/answer/6004245',
'cookies': ['_ga', '_gat_gtag_{{ str_replace('-', '_', config('google.analyticsKey')) }}',
'_gid'
],
'script': function() {
(function(d, t) {
var g = d.createElement(t),
s = d.getElementsByTagName(t)[0];
g.src =
'https://www.googletagmanager.com/gtag/js?id={{ config('google.analyticsKey') }}';
s.parentNode.insertBefore(g, s)
}(document, 'script'));
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', '{{ config('google.analyticsKey') }}');
}
},
'recaptcha': {
'name': "API - reCAPTACHA",
'description': 'Les cookies qui sont déposés via le recaptcha sur les formulaires ont pour finalité d\'empêcher que ceux-ci ne soient soumis par des robots.',
'link': 'https://policies.google.com/privacy',
'labelLink': 'En savoir plus',
'cookies': ['NID', '__Secure-3PAPISID', '__Secure-3PSID', '__Secure-3PSIDCC'],
'script': function() {
if (window.__LDC_CN_Recaptcha) {
window.__LDC_CN_Recaptcha();
}
}
},
});
</script>
@endpush

View file

@ -0,0 +1,111 @@
{{-- blade-formatter-disable --}}
@php
$site_name = Str::ucfirst(config('app.name'));
$logo_picture_url = asset('assets/images/logo-doux.png');
$logo_title_text = __('Logo du site :name', ['name' => $site_name]);
$logo_alt_text = __('Logo :name', ['name' => $site_name]);
$strings = (object)[
'modal_title' => __('cookie-notice.modal_title'),
'button_customize_cookies' => __('cookie-notice.button_customize_cookies'),
'button_close_cookies' => __('cookie-notice.button_close_cookies'),
'button_title_open_new_tab' => __('cookie-notice.button_title_open_new_tab'),
'button_forbid' => __('cookie-notice.button_forbid'),
'button_allow' => __('cookie-notice.button_allow'),
'button_forbid_all' => Str::upper(__('cookie-notice.button_forbid_all')),
'button_allow_all' => Str::upper(__('cookie-notice.button_allow_all')),
'button_customize' => Str::upper(__('cookie-notice.button_customize')),
'button_forbid_all_title' => __('cookie-notice.button_forbid_all_title'),
'button_allow_all_title' => __('cookie-notice.button_allow_all_title'),
'button_back' => Str::upper(__('cookie-notice.button_back')),
'banner_title' => __('cookie-notice.banner_title', ['site_name' => $site_name]),
'banner_text' => __('cookie-notice.banner_text'),
'panel_title' => __('cookie-notice.panel_title'),
'panel_content' => __('cookie-notice.panel_content'),
'panel_subtitle' => __('cookie-notice.panel_subtitle'),
'panel_details' => __('cookie-notice.panel_details'),
'picture_cookie_title' => __('cookie-notice.picture_cookie_title'),
'navigation_title' => __('cookie-notice.navigation_title'),
];
$cookies = [];
// RECAPTCHA
$cookies['recaptcha'] = [
'name' => __('cookie-notice.custom.recaptcha.title'),
'description' => __('cookie-notice.custom.recaptcha.description'),
'link' => 'https://policies.google.com/privacy',
'labelLink' => __('cookie-notice.custom.recaptcha.labelLink'),
'cookies' => ['NID', '__Secure-3PAPISID', '__Secure-3PSID', '__Secure-3PSIDCC']
];
$cookies['recaptcha']['script'] = <<<SCRIPT
function () {
if (window.__CN_Recaptcha) {
window.__CN_Recaptcha();
}
}
SCRIPT;
// MATOMO
$cookies['matomo'] = [
'name' => __('cookie-notice.custom.matomo.title'),
'description' => __('cookie-notice.custom.matomo.description'),
'link' => 'https://fr.matomo.org/gdpr-analytics/',
'labelLink' => __('cookie-notice.custom.matomo.labelLink'),
'cookies' => ['_pk']
];
$cookies['matomo']['script'] = <<<SCRIPT
function () {
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//yl.s-web.fr/";
_paq.push(['setTrackerUrl', u+'rainbow']);
_paq.push(['setSiteId', '
SCRIPT;
$cookies['matomo']['script'] .= config("services.matomo.site_id");
$cookies['matomo']['script'] .= <<<SCRIPT
']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'unicorn'; s.parentNode.insertBefore(g,s);
})();
}
SCRIPT;
@endphp
{{-- INCLUDE TEMPLATE --}}
@include('vendor.cookie-notice-templates.standard', compact(
'site_name', 'logo_picture_url', 'logo_alt_text',
'logo_title_text', 'strings'
))
@push('scripts')
<script nonce="{{ $nonce ?? '' }}">
document.addEventListener('DOMContentLoaded', function () {
window.WebCookieNotice = {};
@foreach($cookies as $index_name => $cookie)
window.WebCookieNotice['{{ $index_name }}'] = {};
window.WebCookieNotice['{{ $index_name }}'].tmp = {};
// SCRIPT
window.WebCookieNotice['{{ $index_name }}'].tmp.script = {!! strip_tags($cookie['script']) !!};
@php unset($cookie['script']); @endphp
// FALLBACK
@if(isset($cookie['fallback']))
window.WebCookieNotice['{{ $index_name }}'].tmp.fallback = {!! strip_tags($cookie['fallback']) !!};
@php unset($cookie['fallback']); @endphp
@endif
window.WebCookieNotice['{{ $index_name }}'].conf = @json($cookie);
window.WebCookieNotice['{{ $index_name }}'].conf.script = window.WebCookieNotice['{{ $index_name }}'].tmp.script;
window.WebCookieNotice['{{ $index_name }}'].conf.fallback = window.WebCookieNotice['{{ $index_name }}'].tmp.fallback;
window.WebCookieNotice['{{ $index_name }}'] = window.WebCookieNotice['{{ $index_name }}'].conf;
@endforeach
window.WebCookieNotice = new window.CookieNotice(window.WebCookieNotice);
});
</script>
@endpush

View file

@ -0,0 +1,82 @@
<div id="cn-wrapper" title="{{ $strings->modal_title }}" role="alertdialog" tabindex="-1">
<button id="cn-cookie-btn" title="{{ $strings->button_customize_cookies }}">
{{-- COOKIE SVG --}}
<svg viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg">
<title>{{ $strings->picture_cookie_title }}</title>
<path fill-rule="evenodd" clip-rule="evenodd"
d="M14.0001 2.93383C14.0001 4.16622 14.6159 5.25477 15.5567 5.90849C15.3526 6.46423 15.2412 7.06473 15.2412 7.69126C15.2412 10.5472 17.5564 12.8624 20.4123 12.8624C21.0807 12.8624 21.7195 12.7356 22.3059 12.5047C22.9456 13.527 24.0817 14.2069 25.3766 14.2069C26.1872 14.2069 26.9357 13.9404 27.539 13.4903C27.5453 13.6594 27.5484 13.8294 27.5484 14C27.5484 21.4826 21.4826 27.5484 14 27.5484C6.51748 27.5484 0.45166 21.4826 0.45166 14C0.45166 6.51748 6.51748 0.45166 14 0.45166C14.3209 0.45166 14.6391 0.462811 14.9543 0.484747C14.3618 1.12929 14.0001 1.98931 14.0001 2.93383ZM21.2176 2.53212C21.2195 2.54914 21.2213 2.56619 21.2229 2.58328C21.2569 2.58864 21.2909 2.59433 21.3247 2.60035C21.2891 2.57745 21.2534 2.5547 21.2176 2.53212ZM25.5171 6.86104C25.523 6.89745 25.5285 6.93399 25.5336 6.97066C25.5512 6.97141 25.5687 6.97228 25.5861 6.97328C25.5633 6.93574 25.5403 6.89833 25.5171 6.86104ZM12.5247 2.09283C12.4748 2.38291 12.4487 2.68118 12.4487 2.98553C12.4487 4.33316 12.9591 5.56158 13.7972 6.48802C13.7266 6.87842 13.6898 7.28054 13.6898 7.69126C13.6898 11.404 16.6996 14.4137 20.4123 14.4137C20.8725 14.4137 21.3219 14.3675 21.7562 14.2794C22.689 15.1941 23.9669 15.7582 25.3766 15.7582C25.5439 15.7582 25.7094 15.7503 25.8726 15.7347C25.0321 21.5385 20.0368 25.9971 14.0001 25.9971C7.37431 25.9971 2.00305 20.6258 2.00305 14.0001C2.00305 7.87378 6.59498 2.82 12.5247 2.09283Z"
fill="#FF4E4E" />
<circle cx="7.58784" cy="12.8624" r="1.96503" fill="#FF4E4E" />
<circle cx="8.82887" cy="19.2745" r="1.3445" fill="#FF4E4E" />
<circle cx="13.6897" cy="14.5171" r="1.03423" fill="#FF4E4E" />
<circle cx="11.4144" cy="7.48439" r="0.930805" fill="#FF4E4E" />
<circle cx="17.5164" cy="20.3089" r="1.86161" fill="#FF4E4E" />
<circle cx="21.3432" cy="6.7604" r="0.930805" fill="#FF4E4E" />
<circle cx="22.1706" cy="1.89958" r="1.44792" fill="#FF4E4E" />
<circle cx="26.8245" cy="8.31185" r="0.72396" fill="#FF4E4E" />
</svg>
</button>
{{-- BANNER --}}
<div id="cn-banner" tabindex="-1">
<div class="cn-modal-top-line">
<button id="cn-close-modal" title="{{ $strings->button_close_cookies }}">X</button>
</div>
{{-- CONTENT VIEW --}}
<div class="cn-content" title="{{ $strings->panel_content }}" tabindex="0">
{{-- 1ST PAGE BANNER --}}
<div class="cn-banner-content">
<div class="cn-banner-img">
<img src="{{ $logo_picture_url }}" title="{{ $logo_title_text }}" alt="{{ $logo_alt_text }}">
</div>
<div class="cn-banner-text">
<div class="cn-banner-title">
<span>{!! nl2br(e($strings->banner_title)) !!}</span>
</div>
<div class="cn-banner-para-p">
<p>{!! nl2br(e($strings->banner_text)) !!}</p>
</div>
</div>
</div>
{{-- 2ND PAGE CUSTOMIZE PANEL --}}
<div class="cn-modal-container d-none">
<p class="cn-modal-title" aria-level="h2">{{ $strings->panel_title }}</p>
<p class="cn-modal-subtitle">{!! nl2br(e($strings->panel_subtitle)) !!}</p>
<p class="cn-modal-description">{!! nl2br(e($strings->panel_details)) !!}</p>
<div class="cn-modal-wrapper">
{{-- COOKIES LIST --}}
<ul id="cn-modal-list"></ul>
</div>
</div>
</div>
{{-- NAV BAR --}}
<div class="cn-nav" title="{{ $strings->navigation_title }}" role="navigation">
<button class="cn-banner-btn cn-deny" id="cn-deny-banner"
title="{{ $strings->button_forbid_all_title }}">{{ $strings->button_forbid_all }}</button>
<button class="cn-banner-btn cn-accept" id="cn-accept-banner"
title="{{ $strings->button_allow_all_title }}">{{ $strings->button_allow_all }}</button>
<button class="cn-banner-btn cn-custom" id="cn-settings-banner" data-open-modal="{{ $strings->button_back }}"
data-close-modal="{{ $strings->button_customize }}">{{ $strings->button_customize }}</button>
</div>
{{-- COOKIE LIST LI TEMPLATE --}}
<div id="cn-li-template">
<div class="cn-cookie-wrapper">
<div class="cn-cookie-infos">
<span class="cn-cookie-name">#name</span>
<span class="cn-cookie-description">#description</span>
<a class="cn-cookie-link" title="{{ $strings->button_title_open_new_tab }}" target="blank">#link</a>
</div>
<div class="cn-cookie-buttons">
<div class="deny">
<input id="" name="" data-name="" data-status="false" type="radio">
<label for="" role="button" tabindex="0">{{ $strings->button_forbid }}</label>
</div>
<div class="accept">
<input id="" name="" data-name="" data-status="true" type="radio">
<label for="" role="button" tabindex="0">{{ $strings->button_allow }}</label>
</div>
</div>
</div>
</div>
</div>
</div>