issue-30 - Add cookie notice

This commit is contained in:
Sebastien Hattry 2023-10-24 12:12:23 +02:00
parent b01c6cc577
commit 4d5dc72b11
11 changed files with 885 additions and 6 deletions

9
package-lock.json generated
View file

@ -1,5 +1,5 @@
{
"name": "agis",
"name": "srcs",
"lockfileVersion": 3,
"requires": true,
"packages": {
@ -12,6 +12,7 @@
"@fortawesome/free-regular-svg-icons": "latest",
"@fortawesome/free-solid-svg-icons": "latest",
"@fortawesome/vue-fontawesome": "^3.0.3",
"@ldc-web/cookie-notice": "^3.0.9",
"@sipec/vue3-tags-input": "^3.0.4",
"@types/bootstrap": "^5.2.7",
"@types/node": "^20.8.2",
@ -2416,6 +2417,12 @@
"integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==",
"dev": true
},
"node_modules/@ldc-web/cookie-notice": {
"version": "3.0.9",
"resolved": "https://lab.s-web.fr/api/v4/projects/50/packages/npm/@ldc-web/cookie-notice/-/@ldc-web/cookie-notice-3.0.9.tgz",
"integrity": "sha1-zU6WMyLg3pHdeT0K9i25HeQ8+Ik=",
"dev": true
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",

View file

@ -20,6 +20,7 @@
"@fortawesome/free-regular-svg-icons": "latest",
"@fortawesome/free-solid-svg-icons": "latest",
"@fortawesome/vue-fontawesome": "^3.0.3",
"@ldc-web/cookie-notice": "^3.0.9",
"@sipec/vue3-tags-input": "^3.0.4",
"@types/bootstrap": "^5.2.7",
"@types/node": "^20.8.2",
@ -36,9 +37,9 @@
"bootstrap": "^5.3.2",
"chart.js": "^4.4.0",
"cropperjs": "^1.6.1",
"eslint": "latest",
"eslint-import-resolver-alias": "^1.1.2",
"eslint-plugin-vue": "latest",
"eslint": "latest",
"laravel-vite-plugin": "latest",
"postcss-discard-comments": "^6.0.0",
"prettier": "latest",
@ -46,25 +47,25 @@
"resolve-url-loader": "^5.0.0",
"sass": "latest",
"slugify": "^1.6.6",
"stylelint": "latest",
"stylelint-config-idiomatic-order": "github:ream88/stylelint-config-idiomatic-order",
"stylelint-config-sass-guidelines": "latest",
"stylelint-config-standard-scss": "latest",
"stylelint-scss": "latest",
"stylelint": "latest",
"sweetalert2": "^11.7.31",
"terser": "latest",
"toastify-js": "^1.12.0",
"ts-loader": "^9.3.1",
"typescript-eslint": "^0.0.1-alpha.0",
"typescript": "latest",
"typescript-eslint": "^0.0.1-alpha.0",
"vite": "^4.0.0",
"vite-plugin-babel": "^1.1.3",
"vite-plugin-checker": "latest",
"vite-plugin-eslint": "latest",
"vite-plugin-stylelint": "latest",
"vite": "^4.0.0",
"vue": "latest",
"vue-eslint-parser": "^9.1.0",
"vue-loader": "^16.8.3",
"vue": "latest",
"vue-tsc": "1.6.0"
}
}

View file

@ -0,0 +1,36 @@
<?php
// * Version 3.0.8
// phpcs:disable
return [
'button_customize_cookies' => 'Personnaliser les cookies',
'button_forbid' => 'Interdire',
'button_allow' => 'Autoriser',
'button_forbid_all' => 'Tout refuser',
'button_allow_all' => 'Tout accepter',
'button_customize' => 'Personnaliser',
'button_back' => 'Retour',
'banner_title' => 'Le site internet :site_name utilise des cookies !',
'banner_text_open' => 'Ce site web stocke les cookies sur votre ordinateur. :site_name utilise ces informations afin d’améliorer et de personnaliser votre expérience de navigation, ainsi que pour l’analyse et les indicateurs concernant nos visiteurs à la fois sur ce site web et sur d’autres supports. Vous pouvez cliquer sur « Accepter » si vous consentez à l’utilisation de ces cookies.',
'banner_text' => 'Nous utilisons des cookies pour nous assurer du bon fonctionnement de notre site et à des fins analytiques. En poursuivant votre navigation sur ce site ou en fermant ce bandeau, vous consentez à l’utilisationde ces cookies.',
'banner_details' => 'Si vous refusez l’utilisation des cookies, vos informations ne seront pas suivies lors de votre visite sur ce site. Un cookie sera utilisé dans votre navigateur afin de se souvenir de ne pas suivre vos préférences. Certaines fonctionnalités ne seront pas accessibles. Vous pouvez changer d’avis et modifier votre consentement à tout moment en revenant sur ce site.',
'banner_details_link' =>
'Pour en savoir plus sur les cookies que nous utilisons, consultez notre charte de confidentialité.',
'banner_details_link_title' => 'Charte de confidentialité',
'banner_more_details' => 'Plus de détails...',
'banner_less_details' => 'Moins de détails...',
'Panel_title' => 'Panneau de gestion des cookies',
'Panel_subtitle' => 'Le respect de votre vie privée est notre priorité',
'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.',
'custom' => [
'matomo' => [
'title' => 'Matomo',
'description' => 'Les services de mesure d\'audience permettent de générer des statistiques de fréquentation utiles à l\'amélioration du site.',
],
'recaptcha' => [
'title' => '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.',
]
]
];

View file

@ -6,6 +6,7 @@
// * VENDOR
@import './vendor/ckEditorContent';
@import './vendor/bootstrap';
@import "./vendor/cookie-notice";
// * BASE
@import './base/bootstrap-overload';

View file

@ -0,0 +1,621 @@
@use "sass:color";
:root {
--cs-primary-color: var();
}
$ck-primary-color: #ffd264 !default;
$ck-secondary-color: #e33f1c !default;
$ck-background-color: #fff !default;
$ck-list-background-color: #e4e4e4 !default;
$ck-borders-color: #808080 !default;
$ck-shadow-color: 0 0.1rem 1rem rgb(0 0 0 / 35%) !default;
$ck-title-font: 'Readex Pro', serif !default;
$ck-title-line-height: inherit !default;
$ck-title-size: 25px !default;
$ck-text-font: 'Rufina', serif !default;
$ck-text-size: 14px !default;
$ck-btn-background-color: #fff !default;
$ck-accept-color: #3a3 !default;
$ck-deny-color: #a33 !default;
// CN Wrapper z-index
$cn-cookie-button-z-index: 1050 !default;
// Cookie Button dimension
$cn-cookie-button-width: 2.4rem !default;
$cn-cookie-button-height: 2.4rem !default;
$cn-cookie-button-padding: 0.3rem !default;
// Cookie Button dimension (above mobile)
$cn-cookie-button-width-h: 3rem !default;
$cn-cookie-button-height-h: 3rem !default;
$cn-cookie-button-padding-h: 0.5rem !default;
// Cookie Button position
$cn-cookie-button-position-left: 0.5rem; /* Distance par rapport à la gauche de la fenêtre */
$cn-cookie-button-position-right: auto; /* Distance par rapport à la droite de la fenêtre */
$cn-cookie-button-position-bottom: 0.5rem; /* Distance par rapport au bas de la fenêtre */
$cn-cookie-animation-left: 0; /* Position gauche de base des cookies */
$cn-cookie-animation-right: auto; /* Position droite de base des cookies */
// Cookie Button position hide btn vars
$cn-cookie-button-position-right-h: auto;
$cn-cookie-button-position-bottom-h: #{$cn-cookie-button-position-bottom - 2rem};
$cn-cookie-button-position-left-h: #{$cn-cookie-button-position-left - 2rem};
$cn-cookie-button-transition-show: all 1s 6s;
$cn-cookie-button-transition-hide: all 1s;
// Buttons
$cn-button-bg-color: $ck-primary-color !default;
$cn-button-font-family: $ck-text-font !default;
$cn-button-font-size: 1rem !default;
$cn-button-line-height: 1 !default;
@import "@ldc-web/cookie-notice/src/scss/mixins";
@import "@ldc-web/cookie-notice/src/scss/reset";
/** 3.0.0 */
/* FENETRE D'ACCUEIL */
$ck-bg-color: $ck-background-color;
/* Title settings */
$ck-w1-bgcolor-title: $ck-background-color;
$ck-w1-font-family-title: $ck-title-font;
$ck-w1-line-height-title: $ck-title-line-height;
$ck-w1-font-size-title: $ck-title-size;
$ck-w1-color-title: $ck-secondary-color;
/* Text settings */
$ck-w1-font-family-txt: $ck-text-font;
$ck-w1-font-size-txt: $ck-text-size;
$ck-w1-color-txt: $color-dark;
$ck-w1-color-href-hover: $ck-secondary-color;
/* Button settings */
$ck-w1-color-btn-hover: $ck-secondary-color;
$ck-w1-font-family-btn-txt: $ck-text-font;
$ck-w1-font-size-btn-txt: $ck-text-size;
$ck-w1-color-btn-txt-hover: text($ck-secondary-color);
/* Title settings */
$ck-w2-font-family-title: $ck-title-font;
$ck-w2-font-size-title: $ck-title-size;
$ck-w2-color-title: $color-dark;
/* Text settings */
$ck-w2-font-family-txt: $ck-text-font;
$ck-w2-font-size-txt: $ck-text-size;
$ck-w2-color-txt: $color-dark;
/* Accept/Deny btn settings */
$ck-color-accept: $ck-borders-color;
$ck-color-deny: $ck-borders-color;
$ck-color-accept-hover: $ck-accept-color;
$ck-color-deny-hover: $ck-deny-color;
$ck-color-txt: #fff;
/* Cookies list settings */
$ck-bgcolor-list: $ck-list-background-color;
$ck-font-family-list: $ck-text-font;
$ck-font-size-list: $ck-text-size;
$ck-color-list: $ck-secondary-color;
$ck-color-title: $ck-secondary-color;
$breakpoint-mobile: 535px;
%nav-button {
display: flex;
height: 3rem;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 0;
background-color: text($cn-button-bg-color);
color: $cn-button-bg-color;
font-family: $ck-text-font;
font-size: 1rem;
&:hover,
&:focus {
background-color: color.adjust(
$color: $cn-button-bg-color,
$lightness: -10%
);
color: text(
color.adjust($color: $cn-button-bg-color, $lightness: -10%)
);
}
&:focus {
outline-color: text(
color.adjust($color: $cn-button-bg-color, $lightness: -10%)
);
}
}
// * Prevent click on clickable element using cookie notice
.cn-modal-bg {
display: none;
}
.cn-open .cn-modal-bg {
position: fixed;
z-index: 1030;
top: 0;
display: block;
width: 100vw;
height: 100vh;
background-color: rgb(0 0 0 / 60%);
}
.cn-disabled {
pointer-events: none;
}
#cn-wrapper {
@extend %reset-styles;
// Display over BS elements
z-index: $cn-cookie-button-z-index;
// BIG COOKIE BTN
#cn-cookie-btn {
position: fixed;
right: $cn-cookie-button-position-right;
bottom: $cn-cookie-button-position-bottom;
left: $cn-cookie-button-position-left;
width: $cn-cookie-button-width;
height: $cn-cookie-button-height;
padding: $cn-cookie-button-padding;
background-color: $ck-btn-background-color;
border-radius: 100%;
box-shadow: $ck-shadow-color;
cursor: pointer;
@media (min-width: $breakpoint-mobile) {
right: $cn-cookie-button-position-right-h;
bottom: $cn-cookie-button-position-bottom-h;
left: $cn-cookie-button-position-left-h;
width: $cn-cookie-button-width-h;
height: $cn-cookie-button-height-h;
padding: $cn-cookie-button-padding-h;
transition: $cn-cookie-button-transition-show;
&:hover {
right: $cn-cookie-button-position-right;
bottom: $cn-cookie-button-position-bottom;
left: $cn-cookie-button-position-left;
transition: $cn-cookie-button-transition-hide;
}
}
&:focus {
outline-color: color.adjust(
$color: $ck-secondary-color,
$lightness: -10%
);
}
&-icon {
path {
fill: $ck-secondary-color;
}
circle {
fill: $ck-secondary-color;
}
}
}
// COOKIE BANNER MODAL
#cn-banner {
position: fixed;
z-index: $cn-cookie-button-z-index;
top: 0;
bottom: 0;
left: 0;
display: flex;
width: 100vw;
height: 100vh;
max-height: 100vh;
flex-direction: column;
align-items: center;
justify-content: flex-end;
padding: 0;
margin: auto;
margin-bottom: 0;
background-color: $ck-bg-color;
border-radius: 0;
box-shadow: $ck-shadow-color;
line-height: initial;
opacity: 0;
// * prevent body scroll (for mobile)
pointer-events: none;
transition: 0.3s;
user-select: none;
visibility: hidden;
.cn-modal-top-line {
align-self: end;
#cn-close-modal {
width: 4rem;
height: 3rem;
border-bottom-left-radius: 0.5rem;
@media (min-width: $breakpoint-mobile) {
width: 3rem;
height: 2rem;
border-top-right-radius: 0.5rem;
}
}
}
// * allow child body scroll
> * {
pointer-events: all;
}
@media (min-width: $breakpoint-mobile) {
right: $cn-cookie-animation-right;
bottom: calc($cn-cookie-button-position-bottom + 60px);
left: $cn-cookie-animation-left;
width: 30rem;
height: auto;
max-height: 26rem;
border-radius: 0.5rem;
}
}
#cn-li-template {
display: none;
}
.d-none {
display: none !important;
}
// CONTENT WRAPPER
.cn-content {
flex-grow: 1;
padding: 0.8rem;
overflow-y: auto;
// 1rst Page BANNER
.cn-banner-content {
display: flex;
min-height: 100%;
flex-direction: column;
color: $ck-w1-color-txt;
font-family: $ck-w1-font-family-txt;
font-size: $ck-w1-font-size-txt;
@media (min-width: $breakpoint-mobile) {
flex-flow: row wrap;
align-items: center;
.cn-banner-img {
width: 33%;
}
.cn-banner-text {
width: 66%;
}
}
// LOGO
.cn-banner-img {
text-align: center;
img {
width: 90%;
object-fit: contain;
}
}
.cn-banner-text {
flex: 2;
// TITLE
.cn-banner-title {
color: $ck-w1-color-title;
font-family: $ck-w1-font-family-title;
font-size: $ck-w1-font-size-title;
font-weight: bold;
line-height: $ck-w1-line-height-title;
text-align: left;
}
.cn-banner-para-p {
margin: 6px 0;
text-align: justify;
}
}
.cn-banner-details {
display: flex;
overflow: hidden;
height: 0;
flex-direction: row;
align-items: flex-start;
justify-content: center;
text-align: justify;
transition: 0.3s;
}
.cn-banner-btn-details {
width: 100%;
margin: 1rem 0;
}
.cn-banner-btn-details-p {
@extend %nav-button;
display: inline-block;
width: 100%;
margin: 0 auto;
cursor: pointer;
font-size: 14px;
text-align: center;
}
}
// 2nd Page MODAL
.cn-modal-container {
.cn-modal-title {
color: $ck-w2-color-title;
font-family: $ck-w2-font-family-title;
font-size: $ck-w2-font-size-title;
font-weight: bold;
text-align: center;
}
.cn-modal-subtitle {
margin-bottom: 6px;
color: $ck-w2-color-txt;
color: $ck-w2-color-title;
font-family: $ck-w2-font-family-txt;
font-size: $ck-w2-font-size-txt;
text-align: center;
}
.cn-modal-description {
display: flex;
flex-direction: column;
align-items: center;
color: $ck-w2-color-txt;
font-family: $ck-w2-font-family-txt;
font-size: $ck-w2-font-size-txt;
font-weight: normal;
line-height: initial;
}
.cn-modal-wrapper {
position: relative;
display: flex;
overflow: auto;
flex-direction: column;
align-items: center;
ul {
display: flex;
flex-direction: column;
padding: 0 20px;
list-style: none;
}
.cn-cookie-wrapper {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: 20px;
border: 1px solid $ck-bgcolor-list;
margin: 10px 0;
border-radius: 20px;
}
span {
color: $ck-color-list;
font-family: $ck-font-family-list;
font-size: $ck-font-size-list;
}
a {
color: $ck-color-list;
font-family: $ck-font-family-list;
font-size: $ck-font-size-list;
}
label {
color: $ck-color-list;
font-family: $ck-font-family-list;
font-size: $ck-font-size-list;
}
}
.cn-cookie {
&-name {
color: $ck-color-title;
}
&-infos {
display: flex;
width: 100%;
flex: 1;
flex-direction: column;
span:first-of-type {
font-size: calc($ck-font-size-list * 1.25);
font-weight: bold;
}
.cn-cookie-description {
color: $ck-w2-color-txt;
}
a {
width: fit-content;
}
}
&-buttons {
display: flex;
width: 200px;
justify-content: space-around;
margin-top: 6px;
input {
display: none;
}
label {
display: block;
width: 100px;
padding: 6px 20px;
color: $ck-color-txt;
cursor: pointer;
transition: color 0.3s;
}
div {
display: table;
margin: 0.5em;
text-align: center;
}
}
}
.accept,
.deny {
label {
@extend %nav-button;
height: inherit;
background: $ck-color-accept;
}
}
.accept {
label:hover,
label:focus {
background-color: color.adjust(
$color: $ck-color-accept-hover,
$lightness: -10%
);
}
.active {
background-color: $ck-color-accept-hover;
}
}
.deny {
label:hover,
label:focus {
background-color: color.adjust(
$color: $ck-color-deny-hover,
$lightness: -10%
);
}
.active {
background-color: $ck-color-deny-hover;
}
}
// stylelint-disable-next-line selector-max-compound-selectors
.accept input:checked ~ label {
background-color: $ck-color-accept-hover;
}
// stylelint-disable-next-line selector-max-compound-selectors
.deny input:checked ~ label {
background-color: $ck-color-deny-hover;
}
}
}
// NAV BAR
.cn-nav {
display: flex;
overflow: hidden;
width: 100%;
height: 3rem * 2;
flex-shrink: 0;
flex-wrap: wrap;
align-items: center;
border-top: 1px solid $ck-borders-color;
#cn-deny-banner {
@extend %nav-button;
width: 50%;
}
#cn-accept-banner {
@extend %nav-button;
width: 50%;
border-right: 1px solid $ck-borders-color;
border-left: 1px solid $ck-borders-color;
font-weight: bolder;
}
#cn-settings-banner {
@extend %nav-button;
width: 100%;
border-top: 1px solid $ck-borders-color;
}
@media (min-width: $breakpoint-mobile) {
height: 3rem;
flex-wrap: initial;
border-bottom-left-radius: 0.5rem;
border-bottom-right-radius: 0.5rem;
#cn-deny-banner {
width: 33.33%;
}
#cn-accept-banner {
width: 33.33%;
}
#cn-settings-banner {
width: 33.33%;
border-top: initial;
}
}
}
@media (min-width: $breakpoint-mobile) {
width: 100%;
height: 100%;
}
}
// SHOW CN BANNER MODAL
.cn-open {
overflow: hidden !important;
#cn-wrapper #cn-banner {
opacity: 1;
visibility: visible;
@media (min-width: $breakpoint-mobile) {
right: $cn-cookie-button-position-right;
left: $cn-cookie-button-position-left;
}
}
#cn-wrapper #cn-cookie-btn {
@media (min-width: $breakpoint-mobile) {
right: $cn-cookie-button-position-right;
bottom: $cn-cookie-button-position-bottom;
left: $cn-cookie-button-position-left;
transition: $cn-cookie-button-transition-hide;
}
}
}

View file

@ -9,3 +9,7 @@ import "./utilities/vue-fo";
// CUSTOM
import "./base/common";
// COOKIES
import CookieNotice from "@ldc-web/cookie-notice";
window.CookieNotice = CookieNotice;

View file

@ -1,6 +1,7 @@
export {};
import { AxiosStatic } from "axios";
import type VueTagsInput from "@sipec/vue3-tags-input";
import CookieNotice from "@ldc-web/cookie-notice";
// * Enum
interface EnumInterface {
@ -74,6 +75,7 @@ declare global {
axios: AxiosStatic;
Swal: Function;
vueDebug: boolean | undefined;
CookieNotice: typeof CookieNotice;
__SYSTEM: {
_asset: string;
_locale: string;

View file

@ -26,6 +26,7 @@
</main>
@include('fo.layouts.footer')
@stack('scripts-constants')
@include('vendor.cn-cookies')
@include('modules.script-constants')
@vite(['resources/ts/fo/fo.ts'])
@stack('scripts')

View file

@ -102,6 +102,10 @@
<div class="col-12 col-lg-3 d-flex flex-column text-uppercase p-lg-3">
<span>{{ __('Branding & Web Design :') }}</span>
<span>{{ __('Agence-S') }}</span>
<a class="nav-link cn-cookie-link text-uppercase mt-2 block" data-bs-toggle="tooltip" href="#"
title="{{ __('Mentions légales') }}">
{{ __('cookie-notice.button_customize_cookies') }}
</a>
</div>
</div>
</div>

View file

@ -0,0 +1,111 @@
{{-- blade-formatter-disable --}}
@php
$site_name = Str::ucfirst(config('app.name'));
$logo_picture_url = Vite::asset('resources/assets/images/layout/logo.svg', 'build');
$logo_alt_text = "Logo {$site_name}";
// $confidentiality_page_url = route('page.confidentiality');
// TODO : Changer qd la page existera
$confidentiality_page_url = "#";
$strings = (object)[
'button_customize_cookies' => __('cookie-notice.button_customize_cookies'),
'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_back' => Str::upper(__('cookie-notice.button_back')),
'banner_title' => __('cookie-notice.banner_title', ['site_name' => $site_name]),
'banner_text_open' => __('cookie-notice.banner_text_open', ['site_name' => $site_name]),
'banner_text' => __('cookie-notice.banner_text'),
'banner_details' => __('cookie-notice.banner_details'),
'banner_details_link' => __('cookie-notice.banner_details_link'),
'banner_details_link_title' => __('cookie-notice.banner_details_link_title'),
'banner_more_details' => __('cookie-notice.banner_more_details'),
'banner_less_details' => __('cookie-notice.banner_less_details'),
'Panel_title' => __('cookie-notice.Panel_title'),
'Panel_subtitle' => __('cookie-notice.Panel_subtitle'),
'Panel_details' => __('cookie-notice.Panel_details'),
];
$cookies = [];
// RECAPTCHA
$cookies['recaptcha'] = [
'name' => __('cookie-notice.custom.recaptcha.title'),
'description' => __('cookie-notice.custom.recaptcha.description'),
'link' => 'https://policies.google.com/privacy',
'labelLink' => __('En savoir +'),
'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' => __('En savoir +'),
'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',
'confidentiality_page_url', '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,91 @@
<div id="cn-wrapper" role="dialog" 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">
<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="#e33f1c" />
<circle cx="7.58784" cy="12.8624" r="1.96503" fill="#e33f1c" />
<circle cx="8.82887" cy="19.2745" r="1.3445" fill="#e33f1c" />
<circle cx="13.6897" cy="14.5171" r="1.03423" fill="#e33f1c" />
<circle cx="11.4144" cy="7.48439" r="0.930805" fill="#e33f1c" />
<circle cx="17.5164" cy="20.3089" r="1.86161" fill="#e33f1c" />
<circle cx="21.3432" cy="6.7604" r="0.930805" fill="#e33f1c" />
<circle cx="22.1706" cy="1.89958" r="1.44792" fill="#e33f1c" />
<circle cx="26.8245" cy="8.31185" r="0.72396" fill="#e33f1c" />
</svg>
</button>
{{-- BANNER --}}
<div id="cn-banner" tabindex="-1">
<div class="cn-modal-top-line">
<button id="cn-close-modal">X</button>
</div>
{{-- CONTENT VIEW --}}
<div class="cn-content">
{{-- 1ST PAGE BANNER --}}
<div class="cn-banner-content">
<div class="cn-banner-img">
<img src="{{ $logo_picture_url }}" 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 class="cn-banner-para-p-close">{!! nl2br(e($strings->banner_text)) !!}</p>
<p class="cn-banner-para-p-open d-none">{!! nl2br(e($strings->banner_text_open)) !!}</p>
</div>
</div>
<div class="cn-banner-details">
<p>
{!! nl2br(e($strings->banner_details)) !!}<br>
<a href="{{ $confidentiality_page_url }}"
title="{{ $strings->banner_details_link_title }}">{{ $strings->banner_details_link }}</a>
</p>
</div>
<div class="cn-banner-btn-details">
<button class="cn-banner-btn-details-p" data-open="{{ $strings->banner_less_details }}"
data-close="{{ $strings->banner_more_details }}">{!! nl2br(e($strings->banner_more_details)) !!}</button>
</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">
<button class="cn-banner-btn cn-deny" id="cn-deny-banner">{{ $strings->button_forbid_all }}</button>
<button class="cn-banner-btn cn-accept" id="cn-accept-banner">{{ $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">#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>