-
+
-
+onMounted(() => {
+ handleRouteChange();
+ handleColorChange();
+ handleHrefChange();
+});
+
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/components/ImageModale.vue b/web/themes/custom/caravane/assets/js/vuejs/components/ImageModale.vue
new file mode 100644
index 0000000..85dddfb
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/components/ImageModale.vue
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/components/ModaleFooter.vue b/web/themes/custom/caravane/assets/js/vuejs/components/ModaleFooter.vue
new file mode 100644
index 0000000..ec8e280
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/components/ModaleFooter.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/components/ModaleHeader.vue b/web/themes/custom/caravane/assets/js/vuejs/components/ModaleHeader.vue
new file mode 100644
index 0000000..ca3fcde
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/components/ModaleHeader.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleCarteSensible.vue b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleCarteSensible.vue
new file mode 100644
index 0000000..4b11943
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleCarteSensible.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleChiffresCles.vue b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleChiffresCles.vue
new file mode 100644
index 0000000..315d3c5
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleChiffresCles.vue
@@ -0,0 +1,21 @@
+
+
+
+
+ Chiffres clés
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleDiaporama.vue b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleDiaporama.vue
new file mode 100644
index 0000000..014396c
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleDiaporama.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleEntretien.vue b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleEntretien.vue
new file mode 100644
index 0000000..ad859b2
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleEntretien.vue
@@ -0,0 +1,84 @@
+
+
+
+
+ Entretien
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleExergue.vue b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleExergue.vue
new file mode 100644
index 0000000..76ae371
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleExergue.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleTitreTexte.vue b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleTitreTexte.vue
new file mode 100644
index 0000000..a43ea17
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleTitreTexte.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleVideos.vue b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleVideos.vue
new file mode 100644
index 0000000..fa45647
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/components/parties/ModaleVideos.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/composables/useImageModale.js b/web/themes/custom/caravane/assets/js/vuejs/composables/useImageModale.js
new file mode 100644
index 0000000..36041b1
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/composables/useImageModale.js
@@ -0,0 +1,46 @@
+import { ref } from 'vue';
+
+export function useImageModal() {
+ const isModaleOpen = ref(false);
+ const currentImage = ref({ src: '', alt: '' });
+ const swiperPopupContent = ref([]);
+
+ const body = document.querySelector('body');
+ const hamburger = document.querySelector('#hamburger');
+ const menu = document.querySelector('#menu');
+
+ const openImageModale = (src, alt, swiperMedia) => {
+ currentImage.value = { src, alt };
+ swiperPopupContent.value = swiperMedia || [];
+ isModaleOpen.value = true;
+ toggleBodyScroll(true);
+ };
+
+ const closeImageModale = () => {
+ isModaleOpen.value = false;
+ swiperPopupContent.value = [];
+ toggleBodyScroll(false);
+ };
+
+ const toggleBodyScroll = (disableScroll) => {
+ if (disableScroll) {
+ body.classList.add('no-scroll');
+ hamburger.style.opacity = 0;
+ menu.style.display = 'none';
+ } else {
+ body.classList.remove('no-scroll');
+ menu.style.display = 'flex';
+ setTimeout(() => {
+ hamburger.style.opacity = 1;
+ }, 300);
+ }
+ };
+
+ return {
+ isModaleOpen,
+ currentImage,
+ swiperPopupContent,
+ openImageModale,
+ closeImageModale,
+ };
+}
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/js/vuejs/composables/useUtils.js b/web/themes/custom/caravane/assets/js/vuejs/composables/useUtils.js
new file mode 100644
index 0000000..e42c713
--- /dev/null
+++ b/web/themes/custom/caravane/assets/js/vuejs/composables/useUtils.js
@@ -0,0 +1,21 @@
+export function useUtils() {
+ const isObjectEmpty = (obj) => {
+ if (!obj || typeof obj !== 'object') return true;
+
+ return !Object.keys(obj).some((key) => {
+ const value = obj[key];
+ if (Array.isArray(value)) return value.length > 0;
+ if (typeof value === 'object') return !isObjectEmpty(value);
+ return value !== null && value !== undefined && value !== '';
+ });
+ };
+
+ const scrollTop = () => {
+ window.scrollTo({ top: 0, behavior: 'smooth' });
+ };
+
+ return {
+ isObjectEmpty,
+ scrollTop,
+ };
+}
\ No newline at end of file
diff --git a/web/themes/custom/caravane/assets/scss/main.scss b/web/themes/custom/caravane/assets/scss/main.scss
index 551b693..65602d2 100644
--- a/web/themes/custom/caravane/assets/scss/main.scss
+++ b/web/themes/custom/caravane/assets/scss/main.scss
@@ -5,6 +5,7 @@ $body-margin-y: 5px;
$body-margin-bottom: 4vh;
$modale-x-padding: 5vw;
+$modale-bottom-padding: 180px;
$sm-font-size: 0.8rem;
$m-font-size: 1.4rem;
@@ -233,6 +234,7 @@ body{
align-items: center;
height: 100%;
> .layout__region--first {
+ display: none;
padding-left: $body-margin-x;
grid-column: 1 / span 4;
position: relative;
@@ -588,7 +590,6 @@ body{
> #content-modale {
> div:not(.image-viewer-wrapper, .image-modale) {
padding-bottom: 40vh;
- background-color: red;
> .content-wrapper {
left: 25vw;
width: 50vw;
@@ -596,6 +597,7 @@ body{
z-index: 2;
position: relative;
background-color: white;
+ padding-bottom: $modale-bottom-padding;
img {
width: 100%;
height: auto;
@@ -606,7 +608,7 @@ body{
overflow: hidden;
}
> header {
- // margin-bottom: 3rem;
+ margin-bottom: 2rem;
> .cover {
max-height: 60vh;
display: flex;
@@ -670,12 +672,14 @@ body{
width: 100%;
padding: 0 $modale-x-padding;
box-sizing: border-box;
- > #sensible-map {
- width: calc(100% + $modale-x-padding);
- margin-left: calc(($modale-x-padding / 2) * -1);
- margin-top: calc($modale-x-padding / 2);
- > figure {
+ > .partie {
+ width: 100%;
+ display: inline-block;
+ > .sensible-map {
margin: 0;
+ width: calc(100% + $modale-x-padding);
+ margin-left: calc(($modale-x-padding / 2) * -1);
+ margin-top: calc($modale-x-padding / 2);
.vh--message {
font-size: $sm-font-size;
top: 1rem;
@@ -688,12 +692,9 @@ body{
margin-left: calc($modale-x-padding / 2);
}
}
- }
- > .partie {
- width: 100%;
- display: inline-block;
> .partie-title,
- > .chiffres-cles {
+ > .chiffres-cles,
+ > .entretien {
> h3 {
position: relative;
display: inline-block;
@@ -747,16 +748,6 @@ body{
}
}
}
- > .partie-content {
- img {
- margin-top: 2rem;
- cursor: pointer;
- transition: transform 0.3s ease-out;
- &:hover {
- transform: scale(1.01);
- }
- }
- }
> .diaporama {
width: calc(100% + 2 * #{$modale-x-padding});
margin-top: 5rem;
@@ -796,87 +787,89 @@ body{
background-size: repeat;
}
}
- .pattern-bottom {
- width: calc(100% + $modale-x-padding * 2);
- margin-left: -$modale-x-padding;
- height: 180px;
- margin-top: -90px;
- }
- .related-etape-links {
- position: absolute;
- margin-top: -3rem;
- width: calc(100% - $modale-x-padding);
- margin-left: -$modale-x-padding;
- padding: 0 calc($modale-x-padding / 2);
- display: grid;
- grid-template-columns: 1fr 1fr;
- > .card {
- width: 80%;
- display: flex;
- align-items: center;
- cursor: pointer;
- transition: transform 0.3s ease-out;
- &:hover {
- transform: scale(1.05);
- }
- &.next {
- grid-column: 2 / span 1;
- justify-self: flex-end;
- }
- > .icon {
- z-index: 2;
- width: 10px;
- height: 30px;
+ > footer {
+ .pattern-bottom {
+ mask-image: linear-gradient(to top, rgba(0,0,0,1), rgba(0,0,0,0));
+ height: $modale-bottom-padding;
+ position: absolute;
+ bottom: 0;
+ }
+ .related-etape-links {
+ position: absolute;
+ bottom: calc(($modale-bottom-padding / 2) * -1);
+ width: 100%;
+ box-sizing: border-box;
+ padding: 0 calc($modale-x-padding / 2);
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ > .card {
+ width: 80%;
display: flex;
- flex-direction: column;
- justify-content: center;
align-items: center;
- > div {
- display: block;
- width: 20px;
- height: 10px;
- &:first-of-type, &:last-of-type {
- height: 8px;
- clip-path: polygon(0 0, 100% 0, 50% 100%);
- }
- &:first-of-type {
- transform: rotate(180deg);
- }
+ cursor: pointer;
+ transition: transform 0.3s ease-out;
+ &:hover {
+ transform: scale(1.05);
}
- }
- > .card-content {
- z-index: 1;
- background-color: white;
- display: flex;
- width: 100%;
- > .infos {
- width: 60%;
- text-align: center;
- > .titre {
- padding: 1rem 0.5rem;
- font-weight: bold;
- font-family: 'Joost', sans-serif;
- font-size: $m-font-size;
- > span {
- font-weight: lighter;
+ &.next {
+ grid-column: 2 / span 1;
+ justify-self: flex-end;
+ }
+ > .icon {
+ z-index: 2;
+ width: 10px;
+ height: 30px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ > div {
+ display: block;
+ width: 20px;
+ height: 10px;
+ &:first-of-type, &:last-of-type {
+ height: 8px;
+ clip-path: polygon(0 0, 100% 0, 50% 100%);
+ }
+ &:first-of-type {
+ transform: rotate(180deg);
}
}
- > .date {
- font-size: $sm-font-size;
- font-family: 'Marianne', sans-serif;
- font-weight: lighter;
- padding-bottom: 1rem;
- }
}
- > .vignette {
- width: 40%;
- position: relative;
- > img {
- top: 0;
- position: absolute;
- width: 100%;
- height: 100%;
- object-fit: cover;
+ > .card-content {
+ z-index: 1;
+ background-color: white;
+ display: flex;
+ width: 100%;
+ > .infos {
+ width: 60%;
+ text-align: center;
+ > .titre {
+ padding: 1rem 0.5rem;
+ font-weight: bold;
+ font-family: 'Joost', sans-serif;
+ font-size: $m-font-size;
+ > span {
+ font-weight: lighter;
+ }
+ }
+ > .date {
+ font-size: $sm-font-size;
+ font-family: 'Marianne', sans-serif;
+ font-weight: lighter;
+ padding-bottom: 1rem;
+ }
+ }
+ > .vignette {
+ width: 40%;
+ position: relative;
+ > img {
+ top: 0;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
}
}
}
@@ -884,112 +877,6 @@ body{
}
}
}
- > .image-viewer-wrapper {
- backdrop-filter: blur(3px);
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- z-index: 100;
- > .img-modale {
- background-color: rgba(0, 0, 0, 0.8);
- width: 100%;
- height: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
- }
- > .simple-viewer {
- > .img-wrapper {
- max-width: 60%;
- display: flex;
- flex-direction: column;
- > img {
- width: 100%;
- }
- > figcaption {
- margin: 0;
- background-color: white;
- font-size: $sm-font-size;
- padding: 0.5rem 1.5rem;
- }
- }
- }
- > .swiper-viewer {
- z-index: 1;
- > .swiper-wrapper {
- height: 100%;
- width: 100%;
- swiper-container {
- height: 95%;
- swiper-slide {
- display: flex;
- justify-content: center;
- align-items: flex-start;
- figure {
- margin-top: 3%;
- max-width: 60%;
- height: 80%;
- img {
- height: -webkit-fill-available;
- max-width: 100%;
- margin-bottom: -5px;
- object-fit: cover;
- }
- figcaption {
- margin: 0;
- background-color: white;
- font-size: $sm-font-size;
- padding: 0.5rem 1.5rem;
- }
- }
- }
- }
- }
- }
- > .close-button {
- position: fixed;
- top: 2rem;
- right: $body-margin-x;
- background-color: unset;
- border: none;
- display: block;
- height: 3rem;
- width: 3rem;
- border-radius: 1.5rem;
- cursor: pointer;
- background-color: white;
- padding: 0;
- display: flex;
- justify-content: center;
- align-items: center;
- z-index: 2;
- > div {
- display: block;
- height: 2px;
- border-radius: 4px;
- width: 60%;
- background-color: $main-color;
- position: absolute;
- transition: transform 0.3s ease;
- &:nth-of-type(1) {
- transform: rotate(45deg) scale(1);
- }
- &:nth-of-type(2) {
- transform: rotate(-45deg) scale(1);
- }
- }
- &:hover {
- > div:nth-of-type(1) {
- transform: rotate(45deg) scale(1.1);
- }
- > div:nth-of-type(2) {
- transform: rotate(-45deg) scale(1.1);
- }
- }
- }
- }
}
}
}