118 Commits

Author SHA1 Message Date
0f233d9309 header sans animation 2025-12-09 13:15:40 +01:00
9986179153 header sans animation 2025-12-09 12:54:21 +01:00
ee51632b85 initial slide timeline 2025-12-01 23:40:54 +01:00
04a47789f7 anim header 2025-12-01 23:29:54 +01:00
ff4fabba70 toggle actu sur H2 2025-12-01 22:09:06 +01:00
fa2352b00f animation header plus rappide 2025-12-01 21:45:16 +01:00
6fe9fe1a54 animation header plus rappide 2025-12-01 20:38:17 +01:00
4e8fe4fb2d carte ressources va directement sur mission photo 2025-12-01 14:04:26 +01:00
ad9c0349c7 new fichier ressuorces.je 2025-12-01 13:35:51 +01:00
b266b73176 responsive node site 2025-12-01 12:54:44 +01:00
b1d2acd246 responsive node site 2025-12-01 12:52:32 +01:00
1f0f540268 responsive force presenteaiton femré 2025-12-01 12:29:02 +01:00
5edb071b35 responsive node projet 2025-12-01 12:16:35 +01:00
1f377f9b60 responsive node projet 2025-12-01 12:14:39 +01:00
446a8f2288 responsive node projet 2025-12-01 12:03:02 +01:00
53b935bd07 responsive node projet 2025-12-01 11:44:53 +01:00
c53e9461dd responsive /lesprojets 2025-12-01 10:47:35 +01:00
8a8ecbb3e4 responsive node ressource 2025-12-01 10:43:44 +01:00
cbc0053467 equipe panel toggle en js 2025-12-01 10:02:04 +01:00
02231b8e17 annule max-height presentation en js 2025-12-01 09:50:04 +01:00
811e6b5ca8 max-height presentation en js 2025-12-01 09:37:55 +01:00
fa8e32bef9 max-height presentation laureat 1500px 2025-12-01 09:19:12 +01:00
ebabc21095 css .islaureat 2025-11-28 11:44:52 +01:00
2b03838407 twig /lesprojets .islaureat 2025-11-28 11:43:45 +01:00
863f248656 fix bug ouverture actu home 2025-11-28 11:30:47 +01:00
66fe1c4adf position top badge 2025-11-28 10:57:00 +01:00
30b82fd22b Merge branch 'master' into stage 2025-11-28 10:52:10 +01:00
0b2ba2e1fd agrandir zone lien 2025-11-28 10:51:58 +01:00
ee2f83324c agrandir zone lien 2025-11-28 10:39:40 +01:00
50de82d79c Merge branch 'master' of gitea-figureslibres.io:bachir/drupal-quartiersdedemain into stage 2025-11-28 10:30:34 +01:00
3eb54aae88 badge laureat css 2025-11-28 10:29:46 +01:00
c3874cfee6 Merge branch 'master' of gitea-figureslibres.io:bachir/drupal-quartiersdedemain into stage 2025-11-28 10:24:56 +01:00
1e02cc5587 badge laureat twig et css 2025-11-28 10:22:43 +01:00
d58970f7d7 Merge branch 'master' into stage 2025-11-27 22:21:04 +01:00
bdeacad925 Home node actu cliquable pur toggle 2025-11-27 22:11:33 +01:00
ecb40418aa En savoir + clicable entièrement 2025-11-27 22:11:33 +01:00
dc661c6139 padding buton liens home 2025-11-27 22:11:33 +01:00
3641c9feff margin et padding bottom top ressources 2025-11-27 22:09:47 +01:00
45d6f1ba04 Home node actu cliquable pur toggle 2025-11-27 22:09:47 +01:00
b68b573e94 En savoir + clicable entièrement 2025-11-27 22:09:47 +01:00
7251762137 padding buton liens home 2025-11-27 22:09:47 +01:00
fb590bfee2 poid videos 2025-11-27 22:01:28 +01:00
eab3cabde3 ponderation sites 2025-11-27 21:54:22 +01:00
c0ccf25959 projets finalistes 2025-11-27 21:42:36 +01:00
a85122bbc7 Sur le même site de projet 2025-11-27 21:40:25 +01:00
21e92aee1d lauréat 2025-11-27 21:39:11 +01:00
a26f9140ce intro ressources 2025-11-27 21:34:30 +01:00
c94ec553eb interactivité carte ressource 2025-11-27 19:04:38 +01:00
7ba0a0ec05 js timelin et header séparé 2025-11-27 18:43:33 +01:00
e3a31427d3 js lightbox séparé 2025-11-27 18:11:14 +01:00
7a8abd9b5e taille et légende img lightbox 2025-11-27 17:42:02 +01:00
fd8584a9a6 change class mission photo 2025-11-27 17:15:40 +01:00
2cb4716015 header right langue switcher hidden 2025-11-27 17:04:29 +01:00
2666e046a9 enlever 2 dernière formes bleu dan shome 2025-11-27 16:57:47 +01:00
d947fa7aab desactive 2e partie enjeux sur home 2025-11-27 16:23:25 +01:00
15778d737d fleche ouverture presentation equipe 2025-11-25 19:02:26 +01:00
9c873c3b67 fleche ouverture presentation equipe 2025-11-25 18:58:06 +01:00
d7026f45e7 fleche ouverture presentation equipe 2025-11-25 18:55:24 +01:00
6272ac893c homogénéisation link ressources 2025-11-25 18:42:45 +01:00
fabad3ca5b bug js 2025-11-25 17:42:30 +01:00
6715b83031 bug js 2025-11-25 17:39:58 +01:00
c5748a9a30 webpack 2025-11-25 17:35:52 +01:00
3bfcc5e288 webpack 2025-11-25 17:26:05 +01:00
f05fee5e4c carte interactive sur page node projet 2025-11-25 17:04:11 +01:00
ed3e38a2ce flex element node site tableau et autre 2025-11-25 16:11:02 +01:00
df649e92f8 font size 2025-11-25 15:55:45 +01:00
facf991325 #3531 2025-11-25 15:51:41 +01:00
5e74afc829 #3528 block third node site 2025-11-25 15:47:58 +01:00
534497eed2 #3526 block third node projet 2025-11-25 15:33:29 +01:00
b745de55f2 #3533 nom equip euppercase 2025-11-25 15:22:27 +01:00
d77cfbb9e3 #3525 margin legend 2025-11-25 15:17:46 +01:00
bf71300dfe #3523 2025-11-25 15:03:21 +01:00
f0f9ad9455 tâche #3522 2025-11-25 14:55:29 +01:00
a48f97ed45 tâche #3521 home map 2025-11-25 14:46:43 +01:00
8586386637 css blockquote 2025-11-24 23:15:23 +01:00
c22e4e8d9d scroll reveal node-type-projet elements desactive 2025-11-24 22:58:26 +01:00
fa81c5ad9a scroll reveal node-type-projet elements 2025-11-24 22:53:44 +01:00
597501f29e /nope projet badge laureat only 2025-11-24 22:35:23 +01:00
0e1679fccd photo equipe caption 2025-11-24 22:11:24 +01:00
c25e8bdd06 site image blured fix 2025-11-24 21:15:54 +01:00
9c10542a1c editor can delete contents 2025-11-24 21:14:20 +01:00
396892f939 deactivated vistor acount creation 2025-11-24 21:11:08 +01:00
f4933f6c45 30 projet order by poid 2025-11-24 21:07:18 +01:00
97af3e2945 chemin map .css 2025-11-24 20:22:53 +01:00
5c99cdd665 revert to [200~ 2025-11-24 20:12:26 +01:00
2686bc5f4a js 2025-11-24 19:52:52 +01:00
9a6938d231 remove js carte point rouge car bug 2025-11-24 19:04:55 +01:00
cdb0d15a43 point rouge carte node ressource 2025-11-24 15:26:00 +01:00
3f2eb70271 point rouge carte node projet 2025-11-24 15:16:07 +01:00
cfa90f9bcb décalage tieline sur décembre 2025-11-24 14:17:36 +01:00
f3ad0386ee margin infos equipes 2025-11-24 14:06:54 +01:00
e53a8ac4e7 toggle partenaires without srcollreveal 2025-11-24 13:52:43 +01:00
ac219a3d83 toggle partenaires 2025-11-24 13:39:34 +01:00
b28ebc5438 size site map dasn node projet et margin/padding block first et second 2025-11-24 13:11:23 +01:00
b2265482d2 size site map dasn node projet et margin/padding block first et second 2025-11-24 12:56:13 +01:00
ede64a7b73 #3510 hover effet zoom sur page node projet aside right 2025-11-24 12:34:18 +01:00
9a57827acd #3506 ajustement width logo QDD / aisde left 2025-11-24 12:30:39 +01:00
61cdbe6114 #3507 font style /lesprojets 2025-11-24 12:14:32 +01:00
d9f370e1fa btn toggle border 2025-11-24 12:12:16 +01:00
a4a031100f margin top node projet 2025-11-24 12:08:00 +01:00
aa386780bf debrousaillage node projet responsive 2025-11-24 11:35:23 +01:00
f85a68b9af merge 2025-11-24 10:28:16 +01:00
db5ddbcd27 Merge branch 'stage' 2025-11-18 10:22:58 +01:00
f72c779266 traduction projet 2025-11-18 10:21:20 +01:00
c3e4e9f4ec bouton retours ressources 2025-11-18 10:21:17 +01:00
6b59c0babb traduction projet 2025-11-18 10:13:57 +01:00
fbf0f74bc2 bouton retours ressources 2025-11-18 09:55:47 +01:00
413df5f8e9 bouton retours ressources 2025-11-18 09:53:24 +01:00
2e228484db width map node projet 2025-11-17 23:25:23 +01:00
7b687d2bae with map nnode projet 2025-11-17 23:08:12 +01:00
c169bbd3fb merge 2025-11-17 23:02:34 +01:00
ed77181289 css & js galerie photo 2025-11-17 21:56:31 +01:00
31769ed721 display none bouton voir equipe 2025-11-17 16:03:39 +01:00
6dbf6696c8 bouton togle présentation équipe 2025-11-17 16:03:38 +01:00
c3ef6663cf display none bouton voir equipe 2025-11-17 16:03:09 +01:00
a2b238504f bouton togle présentation équipe 2025-11-17 16:03:09 +01:00
6c82eafd3d Merge branch 'master' into stage 2025-11-17 15:26:40 +01:00
11b87d5ac9 galeries photo retour aux ressources 2025-11-17 15:26:27 +01:00
94 changed files with 4937 additions and 2240 deletions

View File

@@ -0,0 +1,17 @@
uuid: 480abc89-4c77-4260-a432-043c122cc0de
langcode: fr
status: true
dependencies: { }
id: intro_ressources
label: 'Intro ressources'
token: true
context:
show_warning: true
group:
language: true
fallback:
language: ''
menu:
path: /edit/ressources
weight: 0
description: ''

View File

@@ -0,0 +1,18 @@
uuid: d92dd104-030a-4e96-9932-4607371f7551
langcode: fr
status: true
dependencies:
config:
- block_content.type.link
id: block_content.link.changed
field_name: changed
entity_type: block_content
bundle: link
label: Modifié
description: "L'heure à laquelle le bloc de contenu a été modifié pour la dernière fois."
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: changed

View File

@@ -0,0 +1,18 @@
uuid: 85cc2a14-7008-4248-82bf-503226d66d8c
langcode: fr
status: true
dependencies:
config:
- block_content.type.link
id: block_content.link.info
field_name: info
entity_type: block_content
bundle: link
label: 'Description du bloc'
description: 'Une brève description de votre bloc.'
required: true
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: string

View File

@@ -0,0 +1,20 @@
uuid: 120b2f25-e7b2-4f66-bcdf-acbf7669f597
langcode: fr
status: true
dependencies:
config:
- block_content.type.link
module:
- metatag
id: block_content.link.metatag
field_name: metatag
entity_type: block_content
bundle: link
label: 'Metatags (Hidden field for JSON support)'
description: 'The computed meta tags for the entity.'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: metatag_computed

View File

@@ -0,0 +1,22 @@
uuid: 889fcb21-234f-4911-a70d-f7391535b8ea
langcode: fr
status: true
dependencies:
config:
- block_content.type.link
id: block_content.link.status
field_name: status
entity_type: block_content
bundle: link
label: Publié
description: ''
required: false
translatable: false
default_value:
-
value: 1
default_value_callback: ''
settings:
on_label: Activé
off_label: Désactivé
field_type: boolean

View File

@@ -0,0 +1,18 @@
uuid: 45bdc104-a814-4de3-92d7-c25d2c2bfb13
langcode: fr
status: true
dependencies:
config:
- block_content.type.live_youtube
id: block_content.live_youtube.changed
field_name: changed
entity_type: block_content
bundle: live_youtube
label: Modifié
description: "L'heure à laquelle le bloc de contenu a été modifié pour la dernière fois."
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: changed

View File

@@ -0,0 +1,18 @@
uuid: d04e24e6-8cea-46f6-8e57-1ec72beb3f6c
langcode: fr
status: true
dependencies:
config:
- block_content.type.live_youtube
id: block_content.live_youtube.info
field_name: info
entity_type: block_content
bundle: live_youtube
label: 'Description du bloc'
description: 'Une brève description de votre bloc.'
required: true
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: string

View File

@@ -0,0 +1,20 @@
uuid: efc48857-a4cc-43cc-8687-75fb316b4009
langcode: fr
status: true
dependencies:
config:
- block_content.type.live_youtube
module:
- metatag
id: block_content.live_youtube.metatag
field_name: metatag
entity_type: block_content
bundle: live_youtube
label: 'Metatags (Hidden field for JSON support)'
description: 'The computed meta tags for the entity.'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: metatag_computed

View File

@@ -0,0 +1,22 @@
uuid: 243ea018-54d0-421c-bbb5-fa3eb51f15de
langcode: fr
status: true
dependencies:
config:
- block_content.type.live_youtube
id: block_content.live_youtube.status
field_name: status
entity_type: block_content
bundle: live_youtube
label: Publié
description: ''
required: false
translatable: false
default_value:
-
value: 1
default_value_callback: ''
settings:
on_label: Activé
off_label: Désactivé
field_type: boolean

View File

@@ -0,0 +1,18 @@
uuid: 99816590-8aca-481f-9acb-78f627c048c4
langcode: fr
status: true
dependencies:
config:
- paragraphs.paragraphs_type.projet_diapo
id: paragraph.projet_diapo.created
field_name: created
entity_type: paragraph
bundle: projet_diapo
label: 'Écrit le'
description: 'Heure de création du paragraphe.'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: created

View File

@@ -0,0 +1,22 @@
uuid: 95f833dc-2c91-419d-be8a-3a8992776459
langcode: fr
status: true
dependencies:
config:
- paragraphs.paragraphs_type.projet_diapo
id: paragraph.projet_diapo.status
field_name: status
entity_type: paragraph
bundle: projet_diapo
label: Publié
description: ''
required: false
translatable: false
default_value:
-
value: 1
default_value_callback: ''
settings:
on_label: Activé
off_label: Désactivé
field_type: boolean

View File

@@ -0,0 +1,18 @@
uuid: 89e0b4cb-3467-43dd-ac7d-c204a42a5c37
langcode: fr
status: true
dependencies:
config:
- paragraphs.paragraphs_type.projet_info
id: paragraph.projet_info.created
field_name: created
entity_type: paragraph
bundle: projet_info
label: 'Écrit le'
description: 'Heure de création du paragraphe.'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: created

View File

@@ -0,0 +1,22 @@
uuid: a5d583a1-4104-4129-952b-be04093864c4
langcode: fr
status: true
dependencies:
config:
- paragraphs.paragraphs_type.projet_info
id: paragraph.projet_info.status
field_name: status
entity_type: paragraph
bundle: projet_info
label: Publié
description: ''
required: false
translatable: false
default_value:
-
value: 1
default_value_callback: ''
settings:
on_label: Activé
off_label: Désactivé
field_type: boolean

View File

@@ -0,0 +1,18 @@
uuid: 460c5e92-f134-4e12-a66c-0d748623ba10
langcode: fr
status: true
dependencies:
config:
- paragraphs.paragraphs_type.projet_partie_texte
id: paragraph.projet_partie_texte.created
field_name: created
entity_type: paragraph
bundle: projet_partie_texte
label: 'Écrit le'
description: 'Heure de création du paragraphe.'
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: created

View File

@@ -0,0 +1,22 @@
uuid: 4cc6a442-5e28-4ad2-89ee-4542e940f2e2
langcode: fr
status: true
dependencies:
config:
- paragraphs.paragraphs_type.projet_partie_texte
id: paragraph.projet_partie_texte.status
field_name: status
entity_type: paragraph
bundle: projet_partie_texte
label: Publié
description: ''
required: false
translatable: false
default_value:
-
value: 1
default_value_callback: ''
settings:
on_label: Activé
off_label: Désactivé
field_type: boolean

View File

@@ -0,0 +1,24 @@
uuid: dcde5806-938b-46b8-80f5-ce7e8b065dfc
langcode: fr
status: true
dependencies:
config:
- config_pages.type.intro_ressources
- field.field.config_pages.intro_ressources.field_intro
module:
- text
id: config_pages.intro_ressources.default
targetEntityType: config_pages
bundle: intro_ressources
mode: default
content:
field_intro:
type: text_textarea
weight: 0
region: content
settings:
rows: 5
placeholder: ''
third_party_settings: { }
hidden:
label: true

View File

@@ -294,6 +294,11 @@ content:
size: 60
placeholder: ''
third_party_settings: { }
translation:
weight: 10
region: content
settings: { }
third_party_settings: { }
uid:
type: entity_reference_autocomplete
weight: 31

View File

@@ -10,6 +10,7 @@ dependencies:
- field.field.node.ressource.field_images
- field.field.node.ressource.field_liens
- field.field.node.ressource.field_mots_clefs
- field.field.node.ressource.field_poid
- field.field.node.ressource.field_site
- field.field.node.ressource.field_sous_titre
- field.field.node.ressource.field_tous_les_sites
@@ -34,6 +35,7 @@ third_party_settings:
- field_author
- field_type_de_ressource
- field_mots_clefs
- field_poid
- status
- promote
- path
@@ -183,6 +185,13 @@ content:
size: 60
placeholder: ''
third_party_settings: { }
field_poid:
type: number
weight: 41
region: content
settings:
placeholder: ''
third_party_settings: { }
field_site:
type: entity_reference_autocomplete
weight: 45
@@ -222,20 +231,20 @@ content:
third_party_settings: { }
path:
type: path
weight: 43
weight: 44
region: content
settings: { }
third_party_settings: { }
promote:
type: boolean_checkbox
weight: 42
weight: 43
region: content
settings:
display_label: true
third_party_settings: { }
status:
type: boolean_checkbox
weight: 41
weight: 42
region: content
settings:
display_label: true

View File

@@ -0,0 +1,23 @@
uuid: d7ddf5cc-556b-4b0e-9b4d-be805337b385
langcode: fr
status: true
dependencies:
config:
- config_pages.type.intro_ressources
- field.field.config_pages.intro_ressources.field_intro
module:
- text
id: config_pages.intro_ressources.default
targetEntityType: config_pages
bundle: intro_ressources
mode: default
content:
field_intro:
type: text_default
label: visually_hidden
settings: { }
third_party_settings: { }
weight: 0
region: content
hidden:
search_api_excerpt: true

View File

@@ -10,6 +10,7 @@ dependencies:
- field.field.node.ressource.field_images
- field.field.node.ressource.field_liens
- field.field.node.ressource.field_mots_clefs
- field.field.node.ressource.field_poid
- field.field.node.ressource.field_site
- field.field.node.ressource.field_sous_titre
- field.field.node.ressource.field_tous_les_sites
@@ -93,6 +94,15 @@ content:
third_party_settings: { }
weight: 103
region: content
field_poid:
type: number_integer
label: above
settings:
thousand_separator: ''
prefix_suffix: true
third_party_settings: { }
weight: 108
region: content
field_site:
type: entity_reference_label
label: visually_hidden

View File

@@ -11,6 +11,7 @@ dependencies:
- field.field.node.ressource.field_images
- field.field.node.ressource.field_liens
- field.field.node.ressource.field_mots_clefs
- field.field.node.ressource.field_poid
- field.field.node.ressource.field_site
- field.field.node.ressource.field_sous_titre
- field.field.node.ressource.field_tous_les_sites
@@ -79,6 +80,7 @@ hidden:
field_date_ressource: true
field_documents: true
field_mots_clefs: true
field_poid: true
field_sous_titre: true
field_tous_les_sites: true
field_type_de_ressource: true

View File

@@ -11,6 +11,7 @@ dependencies:
- field.field.node.ressource.field_images
- field.field.node.ressource.field_liens
- field.field.node.ressource.field_mots_clefs
- field.field.node.ressource.field_poid
- field.field.node.ressource.field_site
- field.field.node.ressource.field_sous_titre
- field.field.node.ressource.field_tous_les_sites
@@ -67,11 +68,11 @@ content:
label: visually_hidden
settings:
deltas: '0'
image_style: wide
deltas_reversed: false
image_link: content
image_style: wide
image_loading:
attribute: lazy
deltas_reversed: 0
third_party_settings: { }
weight: 0
region: content
@@ -122,6 +123,7 @@ content:
region: content
hidden:
created: true
field_poid: true
field_tous_les_sites: true
field_type_de_ressource: true
field_video: true

View File

@@ -1,3 +1,4 @@
_core:
default_config_hash: k024s6lEcCjGqAq_82KNi-RRCCc37Jxo5frFNChAqao
login_with_username: false
require_username_on_registration: false

View File

@@ -0,0 +1,24 @@
uuid: 8b9c2799-90e2-4409-93fd-a087cf0b33d3
langcode: fr
status: true
dependencies:
config:
- config_pages.type.intro_ressources
- field.storage.config_pages.field_intro
- filter.format.wysiwyg
module:
- text
id: config_pages.intro_ressources.field_intro
field_name: field_intro
entity_type: config_pages
bundle: intro_ressources
label: Intro
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
allowed_formats:
- wysiwyg
field_type: text_long

View File

@@ -6,7 +6,14 @@ dependencies:
- field.storage.node.field_fichiers
- node.type.actualite
module:
- content_translation
- file
third_party_settings:
content_translation:
translation_sync:
target_id: target_id
display: display
description: description
id: node.actualite.field_fichiers
field_name: field_fichiers
entity_type: node

View File

@@ -14,6 +14,7 @@ third_party_settings:
alt: alt
title: title
file: '0'
caption: '0'
id: node.partenaire.field_logo
field_name: field_logo
entity_type: node

View File

@@ -15,7 +15,7 @@ bundle: projet
label: 'Présentation équipe'
description: ''
required: false
translatable: false
translatable: true
default_value: { }
default_value_callback: ''
settings:

View File

@@ -0,0 +1,25 @@
uuid: 9f3c0cbe-5562-4660-b4bc-fc9787491962
langcode: fr
status: true
dependencies:
config:
- field.storage.node.field_poid
- node.type.ressource
id: node.ressource.field_poid
field_name: field_poid
entity_type: node
bundle: ressource
label: Poid
description: ''
required: false
translatable: false
default_value:
-
value: 0
default_value_callback: ''
settings:
min: -20
max: 20
prefix: ''
suffix: ''
field_type: integer

View File

@@ -6,7 +6,14 @@ dependencies:
- field.storage.node.field_documents
- node.type.site
module:
- content_translation
- file
third_party_settings:
content_translation:
translation_sync:
target_id: target_id
display: display
description: description
id: node.site.field_documents
field_name: field_documents
entity_type: node

View File

@@ -36,6 +36,6 @@ settings:
width: null
height: null
caption: ''
caption_field: 1
caption_field_required: 0
caption_field: true
caption_field_required: false
field_type: image

View File

@@ -6,7 +6,14 @@ dependencies:
- field.storage.node.field_pieces_jointes
- node.type.static
module:
- content_translation
- file
third_party_settings:
content_translation:
translation_sync:
target_id: target_id
display: display
description: description
id: node.static.field_pieces_jointes
field_name: field_pieces_jointes
entity_type: node

View File

@@ -12,7 +12,7 @@ bundle: projet_info
label: Contenu
description: ''
required: false
translatable: false
translatable: true
default_value: { }
default_value_callback: ''
settings: { }

View File

@@ -12,7 +12,7 @@ bundle: projet_info
label: Label
description: ''
required: false
translatable: false
translatable: true
default_value: { }
default_value_callback: ''
settings: { }

View File

@@ -15,7 +15,7 @@ bundle: projet_partie_texte
label: 'Texte partie texte projet'
description: ''
required: false
translatable: false
translatable: true
default_value: { }
default_value_callback: ''
settings:

View File

@@ -12,7 +12,7 @@ bundle: projet_partie_texte
label: 'Titre partie texte projet'
description: ''
required: false
translatable: false
translatable: true
default_value: { }
default_value_callback: ''
settings: { }

View File

@@ -14,6 +14,7 @@ third_party_settings:
alt: alt
title: title
file: '0'
caption: '0'
id: paragraph.static_parts.field_picto
field_name: field_picto
entity_type: paragraph
@@ -43,6 +44,6 @@ settings:
width: null
height: null
caption: ''
caption_field: 0
caption_field_required: 0
caption_field: false
caption_field_required: false
field_type: image

View File

@@ -4,6 +4,13 @@ status: true
dependencies:
config:
- block_content.type.link
module:
- content_translation
third_party_settings:
content_translation:
enabled: false
bundle_settings:
untranslatable_fields_hide: '0'
id: block_content.link
target_entity_type_id: block_content
target_bundle: link

View File

@@ -4,6 +4,13 @@ status: true
dependencies:
config:
- block_content.type.live_youtube
module:
- content_translation
third_party_settings:
content_translation:
enabled: false
bundle_settings:
untranslatable_fields_hide: '0'
id: block_content.live_youtube
target_entity_type_id: block_content
target_bundle: live_youtube

View File

@@ -4,6 +4,13 @@ status: true
dependencies:
config:
- node.type.projet
module:
- content_translation
third_party_settings:
content_translation:
enabled: true
bundle_settings:
untranslatable_fields_hide: '0'
id: node.projet
target_entity_type_id: node
target_bundle: projet

View File

@@ -9,6 +9,8 @@ dependencies:
third_party_settings:
content_translation:
enabled: true
bundle_settings:
untranslatable_fields_hide: '0'
id: node.ressource
target_entity_type_id: node
target_bundle: ressource

View File

@@ -0,0 +1,18 @@
uuid: ef5ff94b-e3b2-4d1f-adfc-36730ad9c2b0
langcode: fr
status: true
dependencies:
config:
- paragraphs.paragraphs_type.projet_diapo
module:
- content_translation
third_party_settings:
content_translation:
enabled: false
bundle_settings:
untranslatable_fields_hide: '0'
id: paragraph.projet_diapo
target_entity_type_id: paragraph
target_bundle: projet_diapo
default_langcode: site_default
language_alterable: false

View File

@@ -0,0 +1,18 @@
uuid: aebb649a-e1e4-4f07-b2f1-6c8ce7250592
langcode: fr
status: true
dependencies:
config:
- paragraphs.paragraphs_type.projet_info
module:
- content_translation
third_party_settings:
content_translation:
enabled: true
bundle_settings:
untranslatable_fields_hide: '0'
id: paragraph.projet_info
target_entity_type_id: paragraph
target_bundle: projet_info
default_langcode: site_default
language_alterable: true

View File

@@ -0,0 +1,18 @@
uuid: 2af531bf-0a98-407a-9255-9c6dca393d37
langcode: fr
status: true
dependencies:
config:
- paragraphs.paragraphs_type.projet_partie_texte
module:
- content_translation
third_party_settings:
content_translation:
enabled: true
bundle_settings:
untranslatable_fields_hide: '0'
id: paragraph.projet_partie_texte
target_entity_type_id: paragraph
target_bundle: projet_partie_texte
default_langcode: site_default
language_alterable: true

View File

@@ -9,6 +9,8 @@ dependencies:
third_party_settings:
content_translation:
enabled: true
bundle_settings:
untranslatable_fields_hide: '0'
id: taxonomy_term.type_de_ressources
target_entity_type_id: taxonomy_term
target_bundle: type_de_ressources

View File

@@ -290,7 +290,7 @@ variant_settings:
css_styles: ''
0e71ab04-a5cc-4eca-a7c2-a18fc9d0b7e1:
id: 'entity_field:node:field_projets_lie'
label: 'Les projets sélectionnés'
label: 'Projets finalistes'
label_display: visible
provider: ctools_block
context_mapping:

View File

@@ -245,12 +245,12 @@ variant_settings:
context_mapping:
entity: node
formatter:
type: image
type: image_caption
weight: 0
label: visually_hidden
settings:
image_link: ''
image_style: wide
image_link: ''
image_loading:
attribute: lazy
third_party_settings: { }

View File

@@ -104,3 +104,212 @@ blocks:
height: '444'
caption: null
caption_format: null
menus:
-
menu_name: admin
title: 'Intro ressources'
parent: system.admin_content
uri: 'internal:/edit/ressources'
link_title: ''
description: null
enabled: true
expanded: false
weight: 0
langcode: fr
uuid: e28fb66f-21c1-42d3-9d85-ee19e1a28d14
options:
attributes:
class:
- ''
-
menu_name: entete
title: Partenaires
parent: null
uri: 'internal:/partenaires'
link_title: ''
description: null
enabled: true
expanded: false
weight: -46
langcode: fr
uuid: 608ba43c-1931-4ee1-9b6c-bc3637f2a0dc
options:
attributes:
class:
- ''
-
menu_name: entete
title: Contacts
parent: null
uri: 'entity:node/2'
link_title: ''
description: null
enabled: true
expanded: false
weight: -45
langcode: fr
uuid: efdff74d-685c-4f20-8e16-4351cd4f929c
options:
attributes:
class:
- ''
-
menu_name: entete
title: 'Mentions légales'
parent: null
uri: 'entity:node/1'
link_title: ''
description: null
enabled: false
expanded: false
weight: -44
langcode: fr
uuid: 1b21428d-c068-48b3-8cb6-ba3c1113bb59
options:
attributes:
class:
- ''
-
menu_name: entete
title: Présentation
parent: null
uri: 'entity:node/6'
link_title: ''
description: null
enabled: false
expanded: false
weight: -50
langcode: fr
uuid: a833cd74-00fa-46a0-950b-aedc100c908f
options:
attributes:
class:
- ''
-
menu_name: entete
title: 'La consultation'
parent: null
uri: 'entity:node/7'
link_title: ''
description: null
enabled: true
expanded: true
weight: -49
langcode: fr
uuid: 1415f75a-0c82-4d29-9b67-8f0eff863069
options:
attributes:
class:
- ''
-
menu_name: entete
title: 'les 10 Sites'
parent: null
uri: 'internal:/lessites'
link_title: ''
description: null
enabled: true
expanded: false
weight: -48
langcode: fr
uuid: 0c6fa9f3-65f6-403d-a357-6338c532b95e
options:
attributes:
class:
- ''
-
menu_name: entete
title: 'Pour candidater'
parent: null
uri: 'entity:node/44'
link_title: ''
description: null
enabled: false
expanded: false
weight: -47
langcode: fr
uuid: e466f110-e5f7-4a38-bd20-b1be732d9179
options:
attributes:
class:
- ''
-
menu_name: entete
title: 'Les 30 projets'
parent: null
uri: 'internal:/lesprojets'
link_title: ''
description: null
enabled: true
expanded: true
weight: -48
langcode: fr
uuid: da75c27c-9a00-4f16-980a-10f5467bf0ac
options:
attributes:
class:
- ''
-
menu_name: footer
title: 'Mentions légales'
parent: null
uri: 'entity:node/1'
link_title: ''
description: null
enabled: true
expanded: false
weight: -46
langcode: fr
uuid: d95fd71b-4146-4328-b5b5-1e5c66919596
options:
attributes:
class:
- ''
-
menu_name: footer
title: Contacts
parent: null
uri: 'entity:node/2'
link_title: ''
description: null
enabled: true
expanded: false
weight: -47
langcode: fr
uuid: 55c4cb76-62cf-4d80-ad13-84481430b74d
options:
attributes:
class:
- ''
-
menu_name: footer
title: Accueil
parent: null
uri: 'internal:/'
link_title: ''
description: null
enabled: true
expanded: false
weight: -50
langcode: fr
uuid: c1f56a2d-5e1f-492a-92a5-4902ba4eb343
options:
attributes:
class:
- ''
-
menu_name: footer
title: 'La consultation'
parent: null
uri: 'entity:node/7'
link_title: ''
description: null
enabled: true
expanded: false
weight: -49
langcode: fr
uuid: 5e39cdc7-1bf4-4684-869b-87ce57b7dae4
options:
attributes:
class:
- ''

View File

@@ -12,4 +12,4 @@ page:
admin_compact_mode: false
weight_select_max: 100
default_langcode: fr
mail_notification: null
mail_notification: ''

View File

@@ -3,20 +3,7 @@ _core:
langcode: fr
cancel_confirm:
subject: "Demande d'annulation du compte [user:display-name] sur [site:name]"
body: |-
[user:display-name],
A request to cancel your account has been made at [site:name].
You may now cancel your account on [site:url-brief] by clicking this link or copying and pasting it into your browser:
[user:cancel-url]
NOTE: The cancellation of your account is not reversible.
This link expires in one day and nothing will happen if it is not used.
-- [site:name] team
body: "[user:display-name],\r\n\r\nA request to cancel your account has been made at [site:name].\r\n\r\nYou may now cancel your account on [site:url-brief] by clicking this link or copying and pasting it into your browser:\r\n\r\n[user:cancel-url]\r\n\r\nNOTE: The cancellation of your account is not reversible.\r\n\r\nThis link expires in one day and nothing will happen if it is not used.\r\n\r\n-- [site:name] team"
password_reset:
subject: 'Modification des informations de connexion pour [user:display-name] sur [site:name]'
body: "[user:display-name],\r\n\r\nUne demande de réinitialisation de votre mot de passe pour votre compte a été faite sur [site:name].\r\n\r\nVous pouvez maintenant vous connecter en cliquant sur le lien ci-dessous ou en le copiant dans votre navigateur : \r\n\r\n[user:one-time-login-url]\r\n\r\nCe lien ne peut être utilisé qu'une seule fois pour vous connecter et vous mènera à la page pour changer votre mot de passe. Il expirera dans un jour et rien ne se passera s'il n'est pas utilisé.\r\n\r\n-- L'équipe de [site:name]"

View File

@@ -73,6 +73,7 @@ permissions:
- 'edit deroulement config page entity'
- 'edit diaporama_home config page entity'
- 'edit intro_partenaires config page entity'
- 'edit intro_ressources config page entity'
- 'execute entity:save_action menu_link_content'
- 'execute entity:save_action node'
- 'execute entity:save_action taxonomy_term'

View File

@@ -18,3 +18,4 @@ permissions:
- 'view deroulement config page entity'
- 'view diaporama_home config page entity'
- 'view intro_partenaires config page entity'
- 'view intro_ressources config page entity'

View File

@@ -20,3 +20,4 @@ permissions:
- 'view deroulement config page entity'
- 'view diaporama_home config page entity'
- 'view intro_partenaires config page entity'
- 'view intro_ressources config page entity'

View File

@@ -43,7 +43,10 @@ permissions:
- 'create site content'
- 'create static content'
- 'delete any actualite content'
- 'delete any partenaire content'
- 'delete any projet content'
- 'delete any ressource content'
- 'delete any site content'
- 'delete partenaire revisions'
- 'delete ressource revisions'
- 'delete site revisions'
@@ -56,6 +59,7 @@ permissions:
- 'edit deroulement config page entity'
- 'edit diaporama_home config page entity'
- 'edit intro_partenaires config page entity'
- 'edit intro_ressources config page entity'
- 'execute entity:save_action node'
- 'execute node_make_sticky_action node'
- 'execute node_make_unsticky_action node'

View File

@@ -1,5 +1,6 @@
_core:
default_config_hash: fbROM54Y8G4Yfeq1G2NbNX6K9ovDAP55c7YM9dTaSWQ
langcode: fr
anonymous: Anonyme
verify_mail: false
notify:
@@ -11,8 +12,7 @@ notify:
register_admin_created: true
register_no_approval_required: true
register_pending_approval: true
register: visitors
register: admin_only
cancel_method: user_cancel_block
password_reset_timeout: 86400
password_strength: true
langcode: fr

View File

@@ -3,6 +3,7 @@ langcode: fr
status: true
dependencies:
config:
- field.storage.node.field_laureats
- field.storage.node.field_nom_de_l_equipe
- node.type.projet
module:
@@ -23,8 +24,73 @@ display:
display_plugin: default
position: 0
display_options:
title: 'Les autres projets sélectionnés'
title: 'Sur le même site de projet'
fields:
field_laureats:
id: field_laureats
table: node__field_laureats
field: field_laureats
relationship: none
group_type: group
admin_label: ''
plugin_id: field
label: ''
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: false
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: boolean
settings:
format: custom
format_custom_false: ''
format_custom_true: Lauréat
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
title:
id: title
table: node_field_data
@@ -368,6 +434,7 @@ display:
- 'user.node_grants:view'
- user.permissions
tags:
- 'config:field.storage.node.field_laureats'
- 'config:field.storage.node.field_nom_de_l_equipe'
block_1:
id: block_1
@@ -409,4 +476,5 @@ display:
- 'user.node_grants:view'
- user.permissions
tags:
- 'config:field.storage.node.field_laureats'
- 'config:field.storage.node.field_nom_de_l_equipe'

View File

@@ -19,6 +19,8 @@ dependencies:
- system.menu.entete
- taxonomy.vocabulary.mots_clefs
- taxonomy.vocabulary.type_de_ressources
content:
- 'config_pages:intro_ressources:85c7dc7e-0448-4073-9c7e-58ab7a809374'
module:
- datetime
- formatter_suite
@@ -1426,6 +1428,33 @@ display:
label: ''
field_identifier: ''
exposed: false
field_poid_value:
id: field_poid_value
table: node__field_poid
field: field_poid_value
relationship: none
group_type: group
admin_label: ''
plugin_id: standard
order: ASC
expose:
label: ''
field_identifier: ''
exposed: false
field_date_ressource_value:
id: field_date_ressource_value
table: node__field_date_ressource
field: field_date_ressource_value
relationship: none
group_type: group
admin_label: ''
plugin_id: datetime
order: ASC
expose:
label: ''
field_identifier: ''
exposed: false
granularity: second
arguments: { }
filters:
status:
@@ -1744,7 +1773,20 @@ display:
admin_label: 'field_type_de_ressource : Terme de taxonomie'
plugin_id: standard
required: true
header: { }
header:
entity_config_pages:
id: entity_config_pages
table: views
field: entity_config_pages
relationship: none
group_type: group
admin_label: ''
plugin_id: entity
empty: false
target: 85c7dc7e-0448-4073-9c7e-58ab7a809374
view_mode: default
tokenize: true
bypass_access: false
footer: { }
display_extenders: { }
cache_metadata:

View File

@@ -7,7 +7,7 @@ dependencies:
- field.storage.node.field_images
- field.storage.node.field_projets_lie
- field.storage.node.field_sous_titre
- image.style.thumbnail
- image.style.wide
- node.type.site
module:
- geofield
@@ -213,7 +213,7 @@ display:
type: image
settings:
image_link: content
image_style: thumbnail
image_style: wide
image_loading:
attribute: lazy
group_column: ''
@@ -494,6 +494,19 @@ display:
options: { }
empty: { }
sorts:
field_poid_value:
id: field_poid_value
table: node__field_poid
field: field_poid_value
relationship: none
group_type: group
admin_label: ''
plugin_id: standard
order: ASC
expose:
label: ''
field_identifier: ''
exposed: false
created:
id: created
table: node_field_data

View File

@@ -18,18 +18,19 @@
@media (max-width: 810px) {
#sites-map-container {
width: 80%;
}
}
@media (max-width: 530px) {
#sites-map-container {
width: 100%;
height: 485px;
height:396px;
}
}
@media (max-width: 400px) {
#sites-map-container {
width: 100%;
height: 430px;
}
}
#sites-map-container .site-link:hover {
@@ -109,7 +110,7 @@
padding-left: 0;
position: relative;
/* margin-top: 2rem; */
font-size: 0.6rem !important;
font-size: 0.5rem !important;
padding-top: calc(1.8rem / 8); /* même valeur que ton margin-top */
}
@@ -130,7 +131,17 @@
font-family: "gilroy-semibold";
padding-top: 0.3rem;
padding-bottom: 0.5rem;
text-transform: uppercase;
/* background-color: #f6f7f3; */
transition: transform 0.4s ease-in-out;
}
#popup-content ul li:hover {
transform: scale(1.03);
}
#popup-content ul li .site-link {
text-transform: none;
}
#popup-content ul li::after {
@@ -152,7 +163,7 @@
/* Spécifique au li .laureat */
#popup-content ul li.laureat {
--badge-size: 1.8rem; /* taille du badge */
margin-top: calc(var(--badge-size) / 2); /* on réserve de la place au-dessus */
margin-top: calc(var(--badge-size) / 1.5); /* on réserve de la place au-dessus */
padding-left: 0rem; /* place à gauche pour le badge */
}

View File

@@ -9,6 +9,9 @@ const isHomePage = document.querySelector('main#home') !== null;
const isLessitesPage = document.querySelector('div#lessites') !== null;
const isNodeTypeSitePage = document.body.classList.contains('node-type-site');
const isCandidaturePage = document.querySelector('main#pour_candidater') !== null;
const isNodeTypeProjetPage = document.body.classList.contains('node-type-projet');
const isNodeTypeRessourcePage = document.body.classList.contains('node-type-ressource');
// Identifier le cercle de la page courante pour node-type-site
let currentPageCircle = null;
@@ -25,6 +28,53 @@ if (isNodeTypeSitePage) {
}
}
}
// Identifier le cercle du SITE lié quand on est sur une page node-type-projet
if (isNodeTypeProjetPage && svgElement) {
// On récupère le lien vers le site lié dans le bloc "Site lié"
const linkedSiteLink = document.querySelector('.field_field_site_projet article.node-type-site a[href*="/sites/"]');
if (linkedSiteLink) {
// On normalise le chemin (sans domaine) de l'URL du site
const sitePath = new URL(linkedSiteLink.getAttribute('href'), window.location.origin).pathname;
// On cherche le cercle dont le data-url pointe vers le même site
const correspondingCircle = Array.from(svgElement.querySelectorAll('circle.site-link')).find(circle => {
const circleUrl = circle.getAttribute('data-url');
if (!circleUrl) return false;
const circlePath = new URL(circleUrl, window.location.origin).pathname;
return circlePath === sitePath;
});
if (correspondingCircle) {
currentPageCircle = correspondingCircle;
currentPageCircle.setAttribute('fill', 'red'); // Met en rouge le cercle du site lié
}
}
}
// Identifier le cercle du SITE lié quand on est sur une page node-type-ressource
if (isNodeTypeRessourcePage && svgElement) {
// On récupère le nom du site dans le bloc "Site(s)"
const siteField = document.querySelector('.field_field_site');
if (siteField && siteField.children[1]) {
// children[0] = label "Site(s)", children[1] = wrapper du nom
const siteName = siteField.children[1].textContent.trim(); // ex : "Corbeil-Essonnes, quartier des Tarterêts"
// On cherche le cercle dont le data-content contient ce nom
const correspondingCircle = Array.from(svgElement.querySelectorAll('circle.site-link')).find(circle => {
const content = circle.getAttribute('data-content') || '';
return content.includes(siteName);
});
if (correspondingCircle) {
currentPageCircle = correspondingCircle;
currentPageCircle.setAttribute('fill', 'red'); // Met en rouge le cercle du site lié
}
}
}
// Fonction pour afficher le popup
@@ -113,17 +163,58 @@ svgElement.addEventListener('mouseout', function(event) {
});
// Gérer les clics pour la page node-type-site uniquement
svgElement.addEventListener('click', function(event) {
if (isNodeTypeSitePage) {
if (event.target.classList.contains('site-link')) {
const targetUrl = event.target.getAttribute('data-url');
if (targetUrl) {
window.location.href = targetUrl; // Redirige vers le data-url correspondant
}
// Gérer les clics sur les cercles de la carte
if (svgElement) {
svgElement.addEventListener('click', function(event) {
const target = event.target;
if (!target.classList || !target.classList.contains('site-link')) {
return;
}
// On récupère les URLs
const missionUrl = target.getAttribute('data-mission-photo-url');
const fallbackUrl = target.getAttribute('data-url');
// 1) Page RESSOURCE : priorité à la mission photo
if (isNodeTypeRessourcePage) {
event.preventDefault(); // empêche le <a href="..."> d'agir
if (missionUrl) {
window.location.href = missionUrl; // Aller directement à la mission photo
} else if (fallbackUrl) {
window.location.href = fallbackUrl; // Sinon, on garde le comportement actuel
}
}
});
return;
}
// 2) Page SITE : comportement actuel
if (isNodeTypeSitePage) {
if (fallbackUrl) {
event.preventDefault();
window.location.href = fallbackUrl;
}
return;
}
// 3) Page PROJET : comportement actuel
if (isNodeTypeProjetPage) {
if (fallbackUrl) {
event.preventDefault();
window.location.href = fallbackUrl;
}
return;
}
// 4) Autres pages : si tu veux un comportement par défaut
// if (fallbackUrl) {
// event.preventDefault();
// window.location.href = fallbackUrl;
// }
});
}
// Fonction pour gérer l'agrandissement de views-row au survol des cercles
if (isLessitesPage) {

View File

@@ -34,6 +34,34 @@ class GaleriePhotoMap extends BlockBase {
$vp_w = 600;
$vp_h = 600;
// Charger toutes les ressources de type "Mission photo" (type de ressource = 17)
$all_mission_photos = \Drupal::entityTypeManager()
->getStorage('node')
->loadByProperties([
'type' => 'ressource', // adapte si ton type machine est différent
'status' => 1,
'field_type_de_ressource' => 17, // même ID que dans la query de la vue
]);
// Indexer les missions photo par ID de site
$mission_by_site = [];
foreach ($all_mission_photos as $mission) {
if (!$mission->hasField('field_site') || $mission->get('field_site')->isEmpty()) {
continue;
}
// Un même node peut être lié à plusieurs sites : on en prend un par site
foreach ($mission->get('field_site') as $ref) {
$site_id = $ref->target_id;
if (!isset($mission_by_site[$site_id])) {
$mission_by_site[$site_id] = $mission;
}
}
}
// Coordonnées géographiques des coins de la carte (France)
$latTop = 52.0; // Nord-Ouest (coin supérieur gauche)
$lonLeft = -6.0;
@@ -60,6 +88,24 @@ class GaleriePhotoMap extends BlockBase {
// $subtitle = $site->get('field_sous_titre')->getString();
$subtitle = $site->hasTranslation($language) ? $site->getTranslation($language)->get('field_sous_titre')->getString() : $site->get('field_sous_titre')->getString();
// URL directe de la mission photo liée à ce site (si trouvée)
$mission_photo_url = '';
if (isset($mission_by_site[$site->id()])) {
$mission_node = $mission_by_site[$site->id()];
// Respecter la langue courante si traduction existe
if ($mission_node->hasTranslation($language)) {
$mission_node = $mission_node->getTranslation($language);
}
$mission_photo_url = $mission_node->toUrl('canonical', [
'absolute' => TRUE,
'language' => \Drupal::languageManager()->getLanguage($langcode),
])->toString();
}
$link_options = ['absolute' => TRUE, 'attributes' => ['class' => 'ressource-link'], 'language' => \Drupal::languageManager()->getLanguage($langcode)]; // Passer 'absolute' à TRUE
// $site_url = $site->toUrl('canonical', $link_options)->toString(); // URL absolue pour le data-url
$site_link_object = Link::createFromRoute(t("Voir le site"), 'entity.node.canonical', ['node' => $site->id()], $link_options);
@@ -93,6 +139,7 @@ class GaleriePhotoMap extends BlockBase {
class="site-link"
data-content="$datacontent"
data-url="$url"
data-mission-photo-url="$mission_photo_url"
cx="0" cy="0" r="$r"
style="fill-opacity:1;fill-rule:nonzero;" />
<path

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="14.947381"
height="18.174984"
viewBox="0 0 4.497851 5.4690765"
version="1.1"
id="svg1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<g
id="layer1"
transform="translate(-102.76452,-145.67101)">
<path
d="m 107.0214,148.83607 -1.86476,1.82265 v -4.84236 a 0.14436835,0.14436835 0 1 0 -0.28873,0 v 4.84236 l -1.86476,-1.82265 a 0.14436835,0.14436835 0 0 0 -0.19851,0 0.1503837,0.1503837 0 0 0 0,0.20452 l 2.10537,2.06326 a 0.1624144,0.1624144 0 0 0 0.20452,0 l 2.10538,-2.06326 a 0.14436835,0.14436835 0 0 0 0,-0.20452 0.14436835,0.14436835 0 0 0 -0.19851,0 z"
id="path2-2"
style="fill:#ffffff;stroke-width:0.0601533" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 872 B

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="14.947379"
height="18.174984"
viewBox="0 0 4.4978504 5.4690765"
version="1.1"
id="svg1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<g
id="layer1"
transform="translate(-102.76452,-145.67101)">
<path
d="m 103.00549,147.97502 1.86476,-1.82265 v 4.84236 a 0.14436835,0.14436835 0 1 0 0.28873,0 v -4.84236 l 1.86476,1.82265 a 0.14436835,0.14436835 0 0 0 0.19851,0 0.1503837,0.1503837 0 0 0 0,-0.20452 l -2.10537,-2.06326 a 0.1624144,0.1624144 0 0 0 -0.20452,0 l -2.10538,2.06326 a 0.14436835,0.14436835 0 0 0 0,0.20452 0.14436835,0.14436835 0 0 0 0.19851,0 z"
id="path2-2"
style="fill:#ffffff;stroke-width:0.0601533" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 872 B

View File

@@ -5,41 +5,10 @@
version="1.1"
id="svg1"
width="1801.0212"
height="4029.4231"
viewBox="0 0 1801.0212 4029.4232"
sodipodi:docname="formes-animees.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
height="4008.7539"
viewBox="0 0 1801.0212 4008.754"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="0.22209622"
inkscape:cx="900.51061"
inkscape:cy="1339.5095"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="36"
inkscape:window-maximized="1"
inkscape:current-layer="g2">
<inkscape:page
x="0"
y="0"
width="1801.0212"
height="4029.4231"
id="page2"
margin="0"
bleed="0" />
</sodipodi:namedview>
<defs
id="defs1">
<clipPath
@@ -72,21 +41,15 @@
transform="translate(-299.16899,-2519.6031)">
<g
id="g1"
transform="translate(0.17944336,-2.9196463)"
inkscape:export-filename="formes-animees.svg"
inkscape:export-xdpi="300"
inkscape:export-ydpi="300">
transform="translate(0.17944336,-2.9196463)">
<path
id="path256"
d="m 321.27266,3436.1817 182.91889,175.8201"
style="fill:none;stroke:#0833c2;stroke-width:64.3111;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="formes-animees.svg"
inkscape:export-xdpi="300"
inkscape:export-ydpi="300" />
style="fill:none;stroke:#0833c2;stroke-width:64.3111;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path256-3"
d="m 1852.1683,6336.9184 -163.0856,194.3583"
style="fill:none;stroke:#0833c2;stroke-width:64.3111;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;stroke:none;stroke-width:64.3111;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path257"
d="M 0,0 C -205.098,0 -371.361,-166.265 -371.361,-371.362"
@@ -102,7 +65,7 @@
<path
id="path302"
d="M 0,0 C 0,126.805 -102.795,229.6 -229.6,229.6"
style="fill:none;stroke:#0833c2;stroke-width:85;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:none;stroke:none;stroke-width:85;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(0.82260013,0,0,-0.82260013,2051.1937,5635.4927)"
clip-path="url(#clipPath303)" />
<path
@@ -117,7 +80,7 @@
width="1550.348"
height="201.3089"
x="122.31378"
y="-9.4031076e-13" />
y="-2.4338836e-20" />
<rect
style="fill:none;stroke:none;stroke-width:0;paint-order:fill markers stroke"
id="rect1"
@@ -137,9 +100,6 @@
id="rect4"
width="1801.0212"
height="442.35608"
x="1.3299257e-06"
y="7.8992786"
inkscape:export-filename="formes-animees.svg"
inkscape:export-xdpi="300"
inkscape:export-ydpi="300" />
x="1.1471996e-08"
y="7.8992786" />
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="18.174984"
height="14.947381"
viewBox="0 0 5.4690765 4.497851"
version="1.1"
id="svg1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<g
id="layer1"
transform="translate(-102.27891,-146.15662)">
<path
d="m 104.58292,146.39759 -1.82265,1.86476 h 4.84236 a 0.14436835,0.14436835 0 1 1 0,0.28873 h -4.84236 l 1.82265,1.86476 a 0.14436835,0.14436835 0 0 1 0,0.19851 0.1503837,0.1503837 0 0 1 -0.20452,0 l -2.06326,-2.10537 a 0.1624144,0.1624144 0 0 1 0,-0.20452 l 2.06326,-2.10538 a 0.14436835,0.14436835 0 0 1 0.20452,0 0.14436835,0.14436835 0 0 1 0,0.19851 z"
id="path2-2"
style="fill:#ffffff;stroke-width:0.0601533" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 871 B

View File

@@ -13,7 +13,8 @@
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"watch": "webpack --watch"
"watch": "webpack --watch",
"build": "webpack --mode production"
},
"keywords": [],
"author": "",

View File

@@ -1,4 +1,4 @@
a<<?php
<?php
use Drupal\Core\Url;

View File

@@ -0,0 +1,347 @@
// // document.addEventListener('DOMContentLoaded', function() {
// // const header = document.querySelector('header[role="banner"]');
// // const headerNavContainer = document.querySelector('.header_nav_container');
// // const threshold = 100;
// // let lastScrollTop = 0;
// // let isHidden = false;
// // let introDone = true; // ✅ plus d'intro, donc on considère qu'elle est "déjà finie"
// // /* -------------------
// // Animations nav
// // ------------------- */
// // function slideOut() {
// // headerNavContainer.animate([
// // { transform: 'translateX(0)' },
// // { transform: 'translateX(-100%)' }
// // ], {
// // duration: 300,
// // fill: 'forwards'
// // });
// // isHidden = true;
// // }
// // function slideIn() {
// // headerNavContainer.animate([
// // { transform: 'translateX(-100%)' },
// // { transform: 'translateX(0)' }
// // ], {
// // duration: 300,
// // fill: 'forwards'
// // });
// // isHidden = false;
// // }
// // function slideDown() {
// // headerNavContainer.animate([
// // { transform: 'translateY(-100%)' },
// // { transform: 'translateY(0%)' }
// // ], {
// // duration: 300,
// // fill: 'forwards'
// // });
// // isHidden = false;
// // }
// // function slideUp() {
// // headerNavContainer.animate([
// // { transform: 'translateY(0%)' },
// // { transform: 'translateY(-100%)' }
// // ], {
// // duration: 300,
// // fill: 'forwards'
// // });
// // isHidden = true;
// // }
// // function initNavPosition() {
// // if (window.pageYOffset <= threshold) {
// // if (window.innerWidth < 811) {
// // slideDown();
// // } else {
// // slideIn();
// // }
// // } else {
// // if (window.innerWidth < 811) {
// // slideUp();
// // } else {
// // slideIn();
// // }
// // }
// // }
// // /* -------------------
// // Scroll / resize header
// // ------------------- */
// // function adjustHeaderHeight() {
// // if (window.scrollY > 0) {
// // header.classList.add('shrink');
// // } else {
// // header.classList.remove('shrink');
// // }
// // }
// // function handleScroll() {
// // if (!introDone) return; // ici ça passe, introDone = true
// // let scrollTop = window.pageYOffset || document.documentElement.scrollTop;
// // const isMobile = window.innerWidth < 811;
// // if (scrollTop > threshold && !isHidden) {
// // if (isMobile) {
// // slideUp();
// // } else {
// // slideOut();
// // }
// // } else if (scrollTop <= threshold && isHidden) {
// // if (isMobile) {
// // slideDown();
// // } else {
// // slideIn();
// // }
// // }
// // lastScrollTop = scrollTop <= 0 ? 0 : scrollTop;
// // }
// // function handleTouchAndMouseEnter() {
// // if (!introDone) return;
// // if (isHidden) {
// // if (window.innerWidth < 811) {
// // slideDown();
// // } else {
// // slideIn();
// // }
// // }
// // }
// // function handleTouchAndMouseLeave() {
// // if (!introDone) return;
// // if (lastScrollTop > threshold && !isHidden) {
// // if (window.innerWidth < 811) {
// // slideUp();
// // } else {
// // slideOut();
// // }
// // }
// // }
// // // ✅ on n'a plus besoin de masquer la nav au début
// // if (headerNavContainer) {
// // headerNavContainer.style.visibility = 'visible';
// // }
// // window.addEventListener('scroll', handleScroll);
// // window.addEventListener('scroll', adjustHeaderHeight);
// // header.addEventListener('mouseenter', handleTouchAndMouseEnter);
// // header.addEventListener('mouseleave', handleTouchAndMouseLeave);
// // header.addEventListener('touchstart', handleTouchAndMouseEnter);
// // header.addEventListener('touchend', handleTouchAndMouseLeave);
// // // ✅ position initiale de la nav
// // initNavPosition();
// // });
// document.addEventListener('DOMContentLoaded', function() {
// const header = document.querySelector('header[role="banner"]');
// const headerNavContainer = document.querySelector('.header_nav_container');
// if (!header || !headerNavContainer) return;
// const threshold = 100;
// let lastScrollTop = 0;
// let isHidden = false;
// let introDone = true; // ✅ pas d'intro, donc direct prêt
// /* -------------------
// Helpers show / hide
// ------------------- */
// function hideNav() {
// headerNavContainer.classList.add('nav-hidden');
// isHidden = true;
// }
// function showNav() {
// headerNavContainer.classList.remove('nav-hidden');
// isHidden = false;
// }
// function isMobile() {
// return window.innerWidth < 811;
// }
// /* -------------------
// Position initiale
// ------------------- */
// function initNavPosition() {
// if (window.pageYOffset <= threshold) {
// showNav(); // en haut de page → nav visible
// } else {
// if (isMobile()) {
// hideNav(); // mobile scrollé → nav cachée
// } else {
// showNav(); // desktop : nav visible même en bas
// }
// }
// }
// /* -------------------
// Scroll / resize header
// ------------------- */
// function adjustHeaderHeight() {
// if (window.scrollY > 0) {
// header.classList.add('shrink');
// } else {
// header.classList.remove('shrink');
// }
// }
// function handleScroll() {
// if (!introDone) return;
// let scrollTop = window.pageYOffset || document.documentElement.scrollTop;
// if (scrollTop > threshold && !isHidden) {
// // on cache la nav
// hideNav();
// } else if (scrollTop <= threshold && isHidden) {
// // on ré-affiche la nav
// showNav();
// }
// lastScrollTop = scrollTop <= 0 ? 0 : scrollTop;
// }
// function handleTouchAndMouseEnter() {
// if (!introDone) return;
// if (isHidden) {
// showNav();
// }
// }
// function handleTouchAndMouseLeave() {
// if (!introDone) return;
// if (lastScrollTop > threshold && !isHidden) {
// hideNav();
// }
// }
// // Rendre la nav visible (plus de visibility:hidden)
// headerNavContainer.style.visibility = 'visible';
// window.addEventListener('scroll', handleScroll);
// window.addEventListener('scroll', adjustHeaderHeight);
// header.addEventListener('mouseenter', handleTouchAndMouseEnter);
// header.addEventListener('mouseleave', handleTouchAndMouseLeave);
// header.addEventListener('touchstart', handleTouchAndMouseEnter);
// header.addEventListener('touchend', handleTouchAndMouseLeave);
// // Position de départ
// initNavPosition();
// adjustHeaderHeight();
// });
document.addEventListener('DOMContentLoaded', function () {
const header = document.querySelector('header[role="banner"]');
const headerNavContainer = document.querySelector('.header_nav_container');
if (!header || !headerNavContainer) return;
const threshold = 100;
let lastScrollTop = 0;
let isHidden = false; // au chargement : nav visible
function isMobile() {
return window.innerWidth < 811;
}
/* --- helpers --- */
function hideNav() {
headerNavContainer.classList.add('nav-hidden');
isHidden = true;
}
function showNav() {
headerNavContainer.classList.remove('nav-hidden');
isHidden = false;
}
/* --- init : nav visible au chargement --- */
headerNavContainer.style.visibility = 'visible';
showNav();
/* --- shrink header --- */
function adjustHeaderHeight() {
if (window.scrollY > 0) {
header.classList.add('shrink');
} else {
header.classList.remove('shrink');
}
}
/* --- scroll : cache / montre la nav --- */
function handleScroll() {
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
if (scrollTop > threshold && !isHidden) {
// on cache la nav (desktop & mobile)
hideNav();
} else if (scrollTop <= threshold && isHidden) {
// on la remonte en haut de page
showNav();
}
lastScrollTop = scrollTop <= 0 ? 0 : scrollTop;
}
/* --- hover / touch sur le header : on montre la nav --- */
function handleEnter() {
if (isHidden) {
showNav();
}
}
function handleLeave() {
if (lastScrollTop > threshold && !isHidden) {
hideNav();
}
}
window.addEventListener('scroll', handleScroll, { passive: true });
window.addEventListener('scroll', adjustHeaderHeight, { passive: true });
header.addEventListener('mouseenter', handleEnter);
header.addEventListener('mouseleave', handleLeave);
header.addEventListener('touchstart', handleEnter);
header.addEventListener('touchend', handleLeave);
// init
adjustHeaderHeight();
});

View File

@@ -0,0 +1,126 @@
//////////////// start lightbox galerie image page site////////////////////////
// Sélection des images à ouvrir dans la lightbox
let images = document.querySelectorAll('.paragraph--type--site-diapo .lightbox-trigger, .paragraph--type--projet-diapo .lightbox-trigger, .field_field_images .lightbox-trigger');
let currentIndex;
// Création de la lightbox
const lightbox = document.createElement('div');
lightbox.id = 'lightbox';
lightbox.classList.add('lightbox');
document.body.appendChild(lightbox);
// Image affichée dans la lightbox
const img = document.createElement('img');
img.classList.add('lightbox-content');
lightbox.appendChild(img);
// Légende
const caption = document.createElement('p');
caption.classList.add('caption');
lightbox.appendChild(caption);
// Bouton de fermeture
const closeBtn = document.createElement('span');
closeBtn.classList.add('close');
closeBtn.innerHTML = '&times;';
lightbox.appendChild(closeBtn);
// Bouton précédent avec image
const prevBtn = document.createElement('a');
prevBtn.classList.add('prev');
const prevImg = document.createElement('img');
prevImg.src = "/themes/custom/quartiers_de_demain/dist/assets/img/prev-blanc.svg"; // 🔁 adapte ce chemin
prevImg.alt = 'Précédent';
prevBtn.appendChild(prevImg);
lightbox.appendChild(prevBtn);
// Bouton suivant avec image
const nextBtn = document.createElement('a');
nextBtn.classList.add('next');
const nextImg = document.createElement('img');
nextImg.src = '/themes/custom/quartiers_de_demain/dist/assets/img/next-blanc.svg'; // 🔁 adapte ce chemin
nextImg.alt = 'Suivant';
nextBtn.appendChild(nextImg);
lightbox.appendChild(nextBtn);
// Fonction d'affichage
function showImage(index) {
if (index < 0) index = images.length - 1;
if (index >= images.length) index = 0;
currentIndex = index;
const currentImg = images[currentIndex];
// 👉 1. Utiliser l'IMAGE ORIGINALE (href du <a>) si possible
const parentLink = currentImg.closest('a');
if (parentLink && parentLink.getAttribute('href')) {
img.src = parentLink.getAttribute('href');
} else {
img.src = currentImg.getAttribute('src');
}
// 👉 2. Trouver le conteneur qui porte la légende
// - Cas 1 : <div><div class="cadre-img-zoom"><img></div><blockquote class="image-field-caption">...</blockquote></div>
// - Cas 2 : <div class="images"><a><img></a><blockquote class="image-field-caption">...</blockquote></div>
const wrapper =
currentImg.closest('.cadre-img-zoom')?.parentElement || // cas 1
currentImg.closest('.images'); // cas 2
let captionText =
wrapper?.querySelector('.image-field-caption p')?.textContent ||
currentImg.alt || // fallback si pas de blockquote
'';
caption.textContent = captionText;
lightbox.style.display = 'flex';
}
// Clic sur une image
images.forEach((image, index) => {
image.addEventListener('click', (e) => {
e.preventDefault(); // empêche le <a> de s'ouvrir
e.stopPropagation(); // empêche des comportements externes
showImage(index);
});
// 🔒 Empêche le clic sur le <a> parent d'agir aussi
const parentLink = image.closest('a');
if (parentLink) {
parentLink.addEventListener('click', (e) => {
e.preventDefault();
e.stopPropagation();
});
}
});
// Navigation & fermeture
closeBtn.addEventListener('click', () => lightbox.style.display = 'none');
prevBtn.addEventListener('click', (e) => {
e.stopPropagation();
showImage(currentIndex - 1);
});
nextBtn.addEventListener('click', (e) => {
e.stopPropagation();
showImage(currentIndex + 1);
});
// Clic en dehors de l'image pour fermer
lightbox.addEventListener('click', (e) => {
if (e.target === lightbox) lightbox.style.display = 'none';
});
// Clavier
document.addEventListener('keydown', (e) => {
if (lightbox.style.display === 'flex') {
if (e.key === 'Escape') lightbox.style.display = 'none';
else if (e.key === 'ArrowLeft') showImage(currentIndex - 1);
else if (e.key === 'ArrowRight') showImage(currentIndex + 1);
}
});
//////////////// end lightbox galerie image page site////////////////////////

View File

@@ -14,212 +14,6 @@
} (Drupal));
//////// start header ////////////
document.addEventListener('DOMContentLoaded', function() {
const header = document.querySelector('header[role="banner"]');
const logo = document.querySelector('#block-quartiers-de-demain-logoquartiersdedemain > div:nth-child(1) > div:nth-child(1) > a:nth-child(1) > svg:nth-child(1)');
const headerNavContainer = document.querySelector('.header_nav_container');
const isFirstLoad = !performance.getEntriesByType("navigation")[0].type.includes('back_forward');
const isTargetPath = window.location.pathname === '/';
// Fonction pour démarrer l'animation du logo SVG
function startLogoAnimation() {
logo.classList.add('animated');
}
// Fonction pour arrêter l'animation du logo SVG
function stopLogoAnimation() {
logo.classList.remove('animated');
}
// Vérifier si le header a la classe header--collapse
function checkHeaderCollapse() {
if (header.classList.contains('header--collapsed')) {
stopLogoAnimation();
} else if (header.classList.contains('header--collapsed-already')) {
stopLogoAnimation();
} else {
startLogoAnimation();
}
}
// Appeler la fonction au chargement initial
checkHeaderCollapse();
// Observer les changements de classe sur le header
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.attributeName === 'class') {
checkHeaderCollapse();
}
});
});
observer.observe(header, { attributes: true });
// Si ce n'est pas la première charge ou si le chemin n'est pas le chemin cible, ajouter la classe immédiatement
if (!isFirstLoad || !isTargetPath) {
header.classList.add('header--collapsed-already');
// logo.classList.remove('animated');
stopLogoAnimation();
// } else {
// // Sinon, appliquer la transition après un délai
// setTimeout(() => {
// header.classList.add('header--collapsed');
// }, 5000);
// }
} else {
// Sinon, appliquer la transition après un délai, sauf si scroll
let collapseTimeout = setTimeout(() => {
header.classList.add('header--collapsed');
}, 5000);
function interruptCollapseOnScroll() {
if (!header.classList.contains('header--collapsed')) {
clearTimeout(collapseTimeout); // annule l'animation
header.classList.add('header--collapsed');
}
window.removeEventListener('scroll', interruptCollapseOnScroll); // une seule fois
}
window.addEventListener('scroll', interruptCollapseOnScroll);
}
//////////////////////////////////////
let lastScrollTop = 0;
let threshold = 100; // Change this value as needed
let isHidden = false;
function slideOut() {
headerNavContainer.animate([
{ transform: 'translateX(0)' },
{ transform: 'translateX(-100%)' }
], {
duration: 300,
fill: 'forwards'
});
isHidden = true;
}
function slideIn() {
headerNavContainer.animate([
{ transform: 'translateX(-100%)' },
{ transform: 'translateX(0)' }
], {
duration: 300,
fill: 'forwards'
});
isHidden = false;
}
function slideDown() {
// headerNavContainer.style.display = 'block';
headerNavContainer.animate([
{ transform: 'translateY(0%)' },
{ transform: 'translateY(+100%)' }
], {
duration: 300,
fill: 'forwards'
});
isHidden = false;
}
function slideUp() {
headerNavContainer.animate([
{ transform: 'translateY(100%)' },
{ transform: 'translateY(0%)' }
], {
duration: 300,
fill: 'forwards'
}).onfinish = function() {
// headerNavContainer.style.display = 'none';
};
isHidden = true;
}
// Fonction pour ajuster la hauteur du header lors du défilement
function adjustHeaderHeight() {
if (window.scrollY > 0) {
header.classList.add('shrink');
} else {
header.classList.remove('shrink');
}
}
function handleScroll() {
let scrollTop = window.pageYOffset || document.documentElement.scrollTop;
const isMobile = window.innerWidth < 811;
if (scrollTop > threshold && !isHidden) {
if (isMobile) {
slideUp();
} else {
slideOut();
}
} else if (scrollTop <= threshold && isHidden) {
if (isMobile) {
slideDown();
} else {
slideIn();
}
}
lastScrollTop = scrollTop <= 0 ? 0 : scrollTop; // For Mobile or negative scrolling
}
function handleTouchAndMouseEnter() {
if (isHidden) {
if (window.innerWidth < 811) {
slideDown();
} else {
slideIn();
}
}
}
function handleTouchAndMouseLeave() {
if (lastScrollTop > threshold && !isHidden) {
if (window.innerWidth < 811) {
slideUp();
} else {
slideOut();
}
}
}
window.addEventListener('scroll', handleScroll);
window.addEventListener('scroll', adjustHeaderHeight);
// Mouse events for desktop
header.addEventListener('mouseenter', handleTouchAndMouseEnter);
header.addEventListener('mouseleave', handleTouchAndMouseLeave);
// Touch events for tablets and mobile devices
header.addEventListener('touchstart', handleTouchAndMouseEnter);
header.addEventListener('touchend', handleTouchAndMouseLeave);
// Initial check to see if we're at the top of the page
if (window.pageYOffset <= threshold) {
if (window.innerWidth < 811) {
slideDown();
} else {
slideIn();
}
} else {
if (window.innerWidth < 811) {
slideUp();
} else {
slideIn();
}
}
});
//////// end header ////////////
@@ -243,17 +37,21 @@ document.addEventListener('DOMContentLoaded', function() {
//////////////////////// start script smooth apparition des textes /////////////////
// div.view-rows-wrapper:nth-child(3) > div:nth-child(2) > article:nth-child(1) > div:nth-child(3)
// html.js.sr body div.dialog-off-canvas-main-canvas div.layout-container.partenaires main div.layout-content div.content_container div.views-element-container div.js-view-dom-id-92e061b83776a5ae5f470b8d32637dba5a87d248e6f275adc7abe863e5c527c3.view div.view-rows-wrapper div.views-row article.node-type-partenaire div.field_body
function scrollReaveal(){
const nodes = {
logo : document.querySelectorAll('#logo-animated-container'),
chapeau : document.querySelectorAll('.field_body'),
chapeau : document.querySelectorAll('.field_body:not(article.node-type-partenaire div.field_body)'),
paragraph: document.querySelectorAll('.field_field_textes .paragraph--type--static-parts'),
enjeux : document.querySelectorAll('.field_field_textes .paragraph--type--static-parts .enjeux'),
// mapHome : document.querySelectorAll('.field_field_map_block #block-sitesmapblock'),
// mapSite : document.querySelectorAll('#sites-map-container'),
lienDoc : document.querySelectorAll('.field_field_documents'),
lienURL : document.querySelectorAll('.field_field_liens_site'),
lienURL : document.querySelectorAll('.field_field_liens_site, .field_field_liens'),
// nodeProjet : document.querySelectorAll('.node-type-projet .field_field_infos, .btn-equipe-toggle, .field_field_nom_de_l_equipe, .node-type-projet .field_field_texte_partie_texte_projet, .node-type-projet .field_field_titre_partie_texte_projet, .node-type-projet .field_field_images_projet'),
}
const showUp = {
@@ -280,6 +78,7 @@ document.addEventListener('DOMContentLoaded', function() {
// ScrollReveal().reveal(nodes.mapSite, showUp);
ScrollReveal().reveal(nodes.lienDoc, showUp);
ScrollReveal().reveal(nodes.lienURL, showUp);
// ScrollReveal().reveal(nodes.nodeProjet, showUp);
}
@@ -290,99 +89,11 @@ document.addEventListener('DOMContentLoaded', function() {
//////////////////////// end script smooth apparition des textes /////////////////
// //////////////////// start Timeline script ///////////////////////
// Update month field to only show the first 3 letters
document.querySelectorAll('.paragraph--type--phase-deroulement').forEach(function(paragraph) {
const monthField = paragraph.querySelector('.field_field_date_de_moi div:nth-of-type(2)');
if (monthField) {
const monthText = monthField.textContent.trim();
if (monthText === "juillet") {
monthField.textContent = monthText.slice(0, 4);
monthField.classList.add('after');
} else if (monthText === "juin") {
monthField.textContent = monthText.slice(0, 4);
} else if (monthText.length > 3) {
monthField.textContent = monthText.slice(0, 3);
monthField.classList.add('after');
}
}
});
// Fonction pour ajouter ou retirer la classe .only
function updateDateClasses() {
document.querySelectorAll('.paragraph--type--phase-deroulement .date').forEach(function(dateElement) {
const date2Element = dateElement.querySelector('.date2');
const yearElement = dateElement.querySelector('.field_field_date_de_annee');
if (date2Element && !date2Element.textContent.trim()) {
if (yearElement) {
yearElement.classList.add('only');
}
} else {
if (yearElement) {
yearElement.classList.remove('only');
}
}
});
}
// Exécuter la fonction une première fois pour le contenu déjà présent
updateDateClasses();
// MutationObserver pour surveiller les changements dans le DOM
const observer = new MutationObserver(function(mutationsList, observer) {
for(let mutation of mutationsList) {
if (mutation.type === 'childList') {
updateDateClasses();
}
}
});
// ////////////////////// start calendrier home /////////////////////////////////
$(document).ready(function(){
// Aller au 9e élément à l'initialisation
$('.__timeline-content').on('init', function(event, slick){
slick.slickGoTo(9); // Index 8 = 9e item
});
$('.__timeline-content').slick({
slidesToShow: 3,
slidesToScroll: 1,
dots: false,
arrows: true,
centerMode: false,
draggable: true,
infinite: false,
responsive: [
{
breakpoint: 810,
settings: {
slidesToShow: 1,
adaptiveHeight: false,
arrows: true,
draggable: true,
centerMode: false,
infinite: false,
}
}]
});
console.log('salut slick calendrier');
});
//////////////////////// end calendrier home /////////////////////////////////
//////////////////////// end Timeline script /////////////////////////////////////////////
//////////// start slideshow images home //////////////////////////
$(document).ready(function () {
$(document).ready(function(){
let diapohome = $('.config_pages--type--diaporama-home .diaporama');
if (diapohome.length) {
@@ -412,12 +123,12 @@ $(document).ready(function () {
});
}
});
//////////// end slideshow images home //////////////////////////
//////////// start slideshow /actualites //////////////////////////
$(document).ready(function(){
// Vérifier si on N'EST PAS sur la page #home
if (!$("#page-node").length) {
let actuview2 = $('.content-wrapper-actu .field_field_images .actu-diaporama');
@@ -453,103 +164,6 @@ $(document).ready(function(){
//////////////// start lightbox galerie image page site////////////////////////
// Sélection des images à ouvrir dans la lightbox
let images = document.querySelectorAll('.paragraph--type--site-diapo .lightbox-trigger, .paragraph--type--projet-diapo .lightbox-trigger, .field_field_images .lightbox-trigger');
let currentIndex;
// Création de la lightbox
const lightbox = document.createElement('div');
lightbox.id = 'lightbox';
lightbox.classList.add('lightbox');
document.body.appendChild(lightbox);
// Image affichée dans la lightbox
const img = document.createElement('img');
img.classList.add('lightbox-content');
lightbox.appendChild(img);
// Légende
const caption = document.createElement('p');
caption.classList.add('caption');
lightbox.appendChild(caption);
// Bouton de fermeture
const closeBtn = document.createElement('span');
closeBtn.classList.add('close');
closeBtn.innerHTML = '&times;';
lightbox.appendChild(closeBtn);
// Bouton précédent avec image
const prevBtn = document.createElement('a');
prevBtn.classList.add('prev');
const prevImg = document.createElement('img');
prevImg.src = "/themes/custom/quartiers_de_demain/dist/assets/img/prev-blanc.svg"; // 🔁 adapte ce chemin
prevImg.alt = 'Précédent';
prevBtn.appendChild(prevImg);
lightbox.appendChild(prevBtn);
// Bouton suivant avec image
const nextBtn = document.createElement('a');
nextBtn.classList.add('next');
const nextImg = document.createElement('img');
nextImg.src = '/themes/custom/quartiers_de_demain/dist/assets/img/next-blanc.svg'; // 🔁 adapte ce chemin
nextImg.alt = 'Suivant';
nextBtn.appendChild(nextImg);
lightbox.appendChild(nextBtn);
// Fonction d'affichage
function showImage(index) {
if (index < 0) index = images.length - 1;
if (index >= images.length) index = 0;
currentIndex = index;
img.src = images[currentIndex].getAttribute('src');
const captionText = images[currentIndex]
.closest('.cadre-img-zoom')
?.nextElementSibling?.querySelector('.image-field-caption p')
?.textContent || '';
caption.textContent = captionText;
lightbox.style.display = 'flex';
}
// Clic sur une image
images.forEach((image, index) => {
image.addEventListener('click', () => {
showImage(index);
});
});
// Navigation & fermeture
closeBtn.addEventListener('click', () => lightbox.style.display = 'none');
prevBtn.addEventListener('click', (e) => {
e.stopPropagation();
showImage(currentIndex - 1);
});
nextBtn.addEventListener('click', (e) => {
e.stopPropagation();
showImage(currentIndex + 1);
});
// Clic en dehors de l'image pour fermer
lightbox.addEventListener('click', (e) => {
if (e.target === lightbox) lightbox.style.display = 'none';
});
// Clavier
document.addEventListener('keydown', (e) => {
if (lightbox.style.display === 'flex') {
if (e.key === 'Escape') lightbox.style.display = 'none';
else if (e.key === 'ArrowLeft') showImage(currentIndex - 1);
else if (e.key === 'ArrowRight') showImage(currentIndex + 1);
}
});
//////////////// end lightbox galerie image page site////////////////////////
//////////////////// start wrapper views-row lessites /////////////////////////
@@ -582,12 +196,8 @@ if (container) {
//////////////////// start div infos site ////////////////////////
// Vérifie si la page a la classe 'node-type-site' dans le <body>
if (document.body.classList.contains('node-type-site')) {
// Sélectionne le conteneur principal
const blockRegion = document.querySelector('.block-region-second');
// Liste des classes spécifiques à cibler
const fieldClasses = [
'.field_field_region',
'.field_field_nom_du_qpv_nb_d_hab',
@@ -607,9 +217,7 @@ fieldClasses.forEach(className => {
}
});
// Vérifie que des éléments ont été trouvés
if (elementsToWrap.length > 0) {
// Crée le conteneur avec la classe 'infos'
const infosContainer = document.createElement('div');
infosContainer.className = 'infos';
@@ -686,6 +294,8 @@ if (documentsLiensWrapper && blockRegionThird) {
}
});
/////////////////// start langswitcher position responsive//////////////////////
document.addEventListener("DOMContentLoaded", function () {
// Fonction pour déplacer le bloc en fonction de la taille de l'écran
@@ -712,133 +322,53 @@ window.addEventListener("resize", moveLanguageSwitcher);
/////////////////// end langswitcher position responsive///////////////////////////////////////////////////////////
/////////////// start class à view-rows-ressources ////////
$(document).ready(function () {
$(".view-rows-wrapper").each(function () {
let h3Container = $(this).prev("h3").find("div[class^='type-']");
let classToAdd = h3Container.attr("class"); // Récupère la classe complète (ex: "type-Documentation")
if (classToAdd) {
$(this).addClass(classToAdd); // Ajoute cette classe à .view-rows-wrapper
}
});
});
////////////////// end class à view-rows-wrapper ////////////////
/////////////////// start voir plus... ressources ////////////////////
$(document).ready(function () {
// Vérifier si on est sur la page avec l'ID #ressources
if ($("#ressources").length > 0) {
$(".view-rows-wrapper").each(function () {
let container = $(this); // Cible uniquement cette section
let items = container.find(".views-row"); // Les éléments à afficher progressivement
let visibleCount = 4; // Nombre d'éléments visibles au départ (par défaut)
// Récupérer la classe `type-XXX`
let typeClass = container.attr("class").split(" ").find(cls => cls.startsWith("type-"));
let typeName = typeClass ? typeClass.replace("type-", "").replace(/-/g, " ") : "contenu"; // Nettoyer le nom
// >>> Exception : tout afficher pour type-Galerie-photos (pas de bouton)
if (typeClass && typeClass.toLowerCase() === "type-galerie-photos") {
items.show(); // aucun masquage
return; // on sort : pas de "voir plus"
}
// Ajuster le nombre d'éléments visibles en fonction du type
if (typeClass && (typeClass === "type-podcast" || typeClass.toLowerCase() === "type-vidéo")) {
visibleCount = 2; // Pour Podcast et Vidéo
} else if (typeClass === "type-kit-de-communication") {
visibleCount = 1; // Pour Kit de Communication
}
// Si le nombre total d'éléments est inférieur ou égal à la limite, ne pas ajouter le bouton
if (items.length <= visibleCount) {
return; // Sortir de la boucle
}
// Ajouter le bouton dynamiquement après chaque `.view-rows-wrapper`
let button = $("<button>")
.addClass("voir-plus")
.text("Voir plus de " + typeName)
.insertAfter(container);
// Cacher tous les éléments sauf ceux définis par `visibleCount`
items.hide().slice(0, visibleCount).show();
// Action sur le bouton
button.on("click", function () {
let hiddenItems = container.find(".views-row:hidden").slice(0, 4); // Prochains éléments à afficher
if ($(this).text().includes("Voir plus")) {
hiddenItems.slideDown(); // Afficher avec un effet de glissement
if (container.find(".views-row:hidden").length === 0) {
$(this).text("Voir moins de " + typeName); // Changer le texte du bouton si tout est affiché
}
} else {
container.find(".views-row").slice(visibleCount).slideUp(); // Replier les éléments
$(this).text("Voir plus de " + typeName); // Revenir à l'état initial
}
});
});
// slimselect
let ressource_type_select = new SlimSelect({
select: '#edit-field-type-de-ressource-target-id--2',
settings:{
placeholderText: 'choisir',
searchPlaceholder: 'choisir'
}
})
let ressource_motscles_select = new SlimSelect({
select: '#edit-field-mots-clefs-target-id--2',
settings:{
placeholderText: 'choisir',
searchPlaceholder: 'choisir'
}
})
let ressource_sites_select = new SlimSelect({
select: '#edit-field-site-target-id-verf--2',
settings:{
placeholderText: 'choisir',
searchPlaceholder: 'choisir'
}
})
// console.log(('sites_select'), sites_select);
}
});
/////////////////// end voir plus... ressources ////////////////////
/////////////////// start voir plus... actualite dans /actualites & /home ////////////////////
$(document).ready(function () {
if ($("#actualites" ).length > 0 || $("#home").length > 0) {
$(".node-type-actualite").each(function () {
let article = $(this);
let body = article.find(".field_body");
let links = article.find(".field_field_liens");
body.hide();
links.hide();
let toggleButton = $("<button>")
.addClass("toggle-actualite")
.insertAfter(article);
toggleButton.on("click", function () {
// Fonction de toggle (à utiliser partout)
function toggleActu() {
body.slideToggle();
links.slideToggle();
$(this).toggleClass("open");
toggleButton.toggleClass("open");
}
// Clic sur le bouton
toggleButton.on("click", function (e) {
e.stopPropagation();
toggleActu();
});
});
// Clic sur le node entier sauf liens
article.on("click", function (e) {
if ($(e.target).closest("a").length) {
return;
}
toggleActu();
});
// 👉 Clic aussi sur le H2
article.find("h2").on("click", function (e) {
e.stopPropagation();
toggleActu();
});
});
// slimselect
// duplicated due to embeded view (archives)
let actu_type_select = new SlimSelect({
@@ -870,25 +400,122 @@ $(document).ready(function () {
}
})
}
});
/////////////////// end voir plus... actualite dans /actualites & /home ////////////////////
//////////////start toggle partenaire //////////////////
$(".node-type-partenaire").each(function () {
let article = $(this);
/////////////// start class à view-rows-ressources ////////
$(document).ready(function () {
$(".view-rows-wrapper").each(function () {
let h3Container = $(this).prev("h3").find("div[class^='type-']");
let classToAdd = h3Container.attr("class"); // Récupère la classe complète (ex: "type-Documentation")
let body = article.find(".field_body");
let links = article.find(".field_field_lien");
if (classToAdd) {
$(this).addClass(classToAdd); // Ajoute cette classe à .view-rows-wrapper
}
body.hide();
links.hide();
let toggleButton = $("<button>")
.addClass("toggle-partenaire")
.appendTo(article);
toggleButton.on("click", function () {
body.slideToggle();
links.slideToggle();
$(this).toggleClass("open");
});
});
});
////////////////// end class à view-rows-wrapper ////////////////
//////////////start toggle partenaire //////////////////
////////////// start toggle page node projet //////////////////
document.addEventListener('DOMContentLoaded', function () {
const photo = document.querySelector('.field_field_equipe_photo');
const pres = document.querySelector('.field_field_equipe_presentation');
if (!photo || !pres) return;
// 🔒 Forcer l'état FERMÉ au chargement
photo.classList.remove('is-open');
pres.classList.remove('is-open');
// 1. Créer un wrapper autour de photo + présentation
const panel = document.createElement('div');
panel.className = 'equipe-panel';
// Insérer le panel avant la photo, puis y déplacer photo + pres
photo.parentNode.insertBefore(panel, photo);
panel.appendChild(photo);
panel.appendChild(pres);
// 2. Préparer le panel pour l'animation
panel.style.overflow = 'hidden';
panel.style.maxHeight = '0px';
// 3. Création du bouton
const btn = document.createElement('button');
btn.className = 'btn-equipe-toggle';
btn.textContent = "EN SAVOIR PLUS SUR L'ÉQUIPE";
btn.setAttribute('aria-expanded', 'false');
// Insertion du bouton juste après le panel (et plus après "pres")
panel.insertAdjacentElement('afterend', btn);
// Ligne de séparation après le bouton
const separator = document.createElement('div');
separator.className = 'equipe-separator';
btn.insertAdjacentElement('afterend', separator);
// --- Fonctions ouverture / fermeture ---
function openPanel() {
panel.classList.add('is-open');
photo.classList.add('is-open');
pres.classList.add('is-open');
const fullHeight = panel.scrollHeight; // inclut photo + texte
panel.style.maxHeight = fullHeight + 'px';
btn.textContent = "FERMER LA PRÉSENTATION DE L'ÉQUIPE";
btn.setAttribute('aria-expanded', 'true');
}
function closePanel() {
const fullHeight = panel.scrollHeight;
panel.style.maxHeight = fullHeight + 'px';
requestAnimationFrame(() => {
panel.style.maxHeight = '0px';
panel.classList.remove('is-open');
photo.classList.remove('is-open');
pres.classList.remove('is-open');
});
btn.textContent = "EN SAVOIR PLUS SUR L'ÉQUIPE";
btn.setAttribute('aria-expanded', 'false');
}
// --- Toggle bouton ---
btn.addEventListener('click', function () {
const isOpen = btn.getAttribute('aria-expanded') === 'true';
if (isOpen) {
closePanel();
} else {
openPanel();
}
});
});
//////////////end toggle page node projet //////////////////

View File

@@ -0,0 +1,151 @@
/**
* @file
* quartiers_de_demain behaviors.
*/
(function (Drupal) {
'use strict';
Drupal.behaviors.quartiers_de_demain = {
attach: function (context, settings) {
console.log('It works!');
}
};
} (Drupal));
(function($, window) {
$(document).ready(function () {
/////////////// start class à view-rows-ressources ////////
$(".view-rows-wrapper").each(function () {
let h3Container = $(this).prev("h3").find("div[class^='type-']");
let classToAdd = h3Container.attr("class"); // Récupère la classe complète (ex: "type-Documentation")
if (classToAdd) {
$(this).addClass(classToAdd); // Ajoute cette classe à .view-rows-wrapper
}
});
////////////////// end class à view-rows-wrapper ////////////////
/////////////////// start voir plus... ressources ////////////////////
// Vérifier si on est sur la page avec l'ID #ressources
if ($("#ressources").length > 0) {
$(".view-rows-wrapper").each(function () {
let container = $(this); // Cible uniquement cette section
let items = container.find(".views-row"); // Les éléments à afficher progressivement
let visibleCount = 4; // Nombre d'éléments visibles au départ (par défaut)
// Récupérer la classe `type-XXX`
let typeClass = container.attr("class").split(" ").find(cls => cls.startsWith("type-"));
let typeName = typeClass ? typeClass.replace("type-", "").replace(/-/g, " ") : "contenu"; // Nettoyer le nom
// >>> Exception : tout afficher pour type-Galerie-photos (pas de bouton)
if (typeClass && typeClass.toLowerCase() === "type-mission-photo") {
items.show(); // aucun masquage
return; // on sort : pas de "voir plus"
}
// Ajuster le nombre d'éléments visibles en fonction du type
if (typeClass && (typeClass === "type-podcast" || typeClass.toLowerCase() === "type-vidéo")) {
visibleCount = 2; // Pour Podcast et Vidéo
} else if (typeClass === "type-kit-de-communication") {
visibleCount = 1; // Pour Kit de Communication
}
// Si le nombre total d'éléments est inférieur ou égal à la limite, ne pas ajouter le bouton
if (items.length <= visibleCount) {
return; // Sortir de la boucle
}
// Ajouter le bouton dynamiquement après chaque `.view-rows-wrapper`
let button = $("<button>")
.addClass("voir-plus")
.text("Voir plus de " + typeName)
.insertAfter(container);
// Cacher tous les éléments sauf ceux définis par `visibleCount`
items.hide().slice(0, visibleCount).show();
// Action sur le bouton
button.on("click", function () {
let hiddenItems = container.find(".views-row:hidden").slice(0, 4); // Prochains éléments à afficher
if ($(this).text().includes("Voir plus")) {
hiddenItems.slideDown(); // Afficher avec un effet de glissement
if (container.find(".views-row:hidden").length === 0) {
$(this).text("Voir moins de " + typeName); // Changer le texte du bouton si tout est affiché
}
} else {
container.find(".views-row").slice(visibleCount).slideUp(); // Replier les éléments
$(this).text("Voir plus de " + typeName); // Revenir à l'état initial
}
});
});
// slimselect
let ressource_type_select = new SlimSelect({
select: '#edit-field-type-de-ressource-target-id--2',
settings:{
placeholderText: 'choisir',
searchPlaceholder: 'choisir'
}
})
let ressource_motscles_select = new SlimSelect({
select: '#edit-field-mots-clefs-target-id--2',
settings:{
placeholderText: 'choisir',
searchPlaceholder: 'choisir'
}
})
let ressource_sites_select = new SlimSelect({
select: '#edit-field-site-target-id-verf--2',
settings:{
placeholderText: 'choisir',
searchPlaceholder: 'choisir'
}
})
// console.log(('sites_select'), sites_select);
}
/////////////////// end voir plus... ressources ////////////////////
///////////////////////// start ressource img clicable mission photo //////////////////////
$('.view-rows-wrapper.type-Mission-photo .views-row').each(function () {
var $row = $(this);
// Lien cible : d'abord le titre, sinon "Voir la gallerie photo"
var $link = $row.find('.views-field-views-conditional-field-1 a, .views-field-views-conditional-field a').first();
// L'image
var $img = $row.find('.views-field-field-images img').first();
if ($link.length && $img.length && !$img.data('missionPhotoBound')) {
console.log('→ Bind click sur image pour', $link.attr('href'));
$img.css('cursor', 'pointer');
$img.on('click', function () {
window.location.href = $link.attr('href');
});
// éviter de binder plusieurs fois (si AJAX / re-init)
$img.data('missionPhotoBound', true);
}
});
///////////////////////// end ressource img clicable mission photo //////////////////////
});
})(jQuery, window);

View File

@@ -0,0 +1,93 @@
(function($, window) {
// //////////////////// start Timeline script ///////////////////////
// Update month field to only show the first 3 letters
document.querySelectorAll('.paragraph--type--phase-deroulement').forEach(function(paragraph) {
const monthField = paragraph.querySelector('.field_field_date_de_moi div:nth-of-type(2)');
if (monthField) {
const monthText = monthField.textContent.trim();
if (monthText === "juillet") {
monthField.textContent = monthText.slice(0, 4);
monthField.classList.add('after');
} else if (monthText === "juin") {
monthField.textContent = monthText.slice(0, 4);
} else if (monthText.length > 3) {
monthField.textContent = monthText.slice(0, 3);
monthField.classList.add('after');
}
}
});
// Fonction pour ajouter ou retirer la classe .only
function updateDateClasses() {
document.querySelectorAll('.paragraph--type--phase-deroulement .date').forEach(function(dateElement) {
const date2Element = dateElement.querySelector('.date2');
const yearElement = dateElement.querySelector('.field_field_date_de_annee');
if (date2Element && !date2Element.textContent.trim()) {
if (yearElement) {
yearElement.classList.add('only');
}
} else {
if (yearElement) {
yearElement.classList.remove('only');
}
}
});
}
// Exécuter la fonction une première fois pour le contenu déjà présent
updateDateClasses();
// MutationObserver pour surveiller les changements dans le DOM
const observer = new MutationObserver(function(mutationsList, observer) {
for(let mutation of mutationsList) {
if (mutation.type === 'childList') {
updateDateClasses();
}
}
});
$(document).ready(function(){
// ////////////////////// start calendrier home /////////////////////////////////
// // Aller au 9e élément à l'initialisation
// $('.__timeline-content').on('init', function(event, slick){
// slick.slickGoTo(11); // Index 8 = 9e item
// });
$('.__timeline-content').slick({
slidesToShow: 3,
slidesToScroll: 1,
dots: false,
arrows: true,
centerMode: false,
draggable: true,
infinite: false,
initialSlide: 13,
responsive: [
{
breakpoint: 810,
settings: {
slidesToShow: 1,
adaptiveHeight: false,
arrows: true,
draggable: true,
centerMode: false,
infinite: false,
initialSlide: 13,
}
}]
});
console.log('salut slick calendrier');
});
//////////////////////// end calendrier home /////////////////////////////////
//////////////////////// end Timeline script /////////////////////////////////////////////
})(jQuery, window);

View File

@@ -106,6 +106,7 @@
align-items: center;
padding: 1rem;
margin-bottom: 1rem;
margin-left: 8rem;
@media(max-width: 500px){
width: 90%;
}

View File

@@ -64,13 +64,13 @@
}
.field_body{ ///// texte de présentation
// width: 80%;
width: 65%;
width: 60%;
margin: auto;
display: flex;
flex-direction: row;
flex-wrap: wrap ;
position: relative;
margin-left: 14rem;
margin-left: 15rem;
@media(max-width: 1090px){
flex-direction: column;
width: 90%;
@@ -130,6 +130,8 @@
text-transform: uppercase;
font-size: 0.5rem;
padding-left: 0.5rem;
padding-top: 0.1rem;
padding-bottom: 0.1rem;
svg{
display: none;
}
@@ -305,6 +307,7 @@
}
.enjeux{
display: none !important;
display: flex;
flex-direction: row;
flex-wrap: wrap;

View File

@@ -2,6 +2,9 @@ main{
background-color: #f6f7f3;
}
#lesprojets{
#header_right_container{
visibility: hidden !important;
}
.content_container{
// background-color: red;
display: flex;
@@ -56,7 +59,13 @@ main{
margin-bottom: 2rem;
font-size: 0.4rem;
position: relative;
@media(max-width: 810px){
font-size: 1rem;
}
transition: transform 0.4s ease-in-out;
&:hover {
transform: scale(1.05);
}
&::before {
content: "";
position: absolute;
@@ -107,6 +116,7 @@ main{
object-fit: cover;
}
.views-field-view-node{
visibility: hidden;
width: fit-content;
padding-left: 0.5rem;
background: black;
@@ -162,13 +172,13 @@ main{
transition: transform 0.4s ease-in-out; // animation plus fluide
&:hover {
transform: scale(1.05); /* effet de zoom léger */
}
}
position: relative;
&:has(.laureat:not(:empty)){
&.is-laureat{
z-index: 0;
}
&:has(.laureat:not(:empty))::before {
&.is-laureat::before {
content: "";
position: absolute;
// display: block;
@@ -209,17 +219,23 @@ main{
}
.node-projet-title{
order: 3;
font-size: 0.7rem;
font-size: 0.6rem;
margin-bottom: 0.3rem;
margin-top: 0.3rem;
font-family: "gilroy-regular";
font-family: "gilroy-bold";
@media(max-width: 810px){
font-size: 1rem;
}
}
.field_field_nom_de_l_equipe{
order: 4;
h3{
font-size: 0.6rem;
font-size: 0.5rem;
margin: 0;
text-transform: uppercase;
@media(max-width: 810px){
font-size: 0.8rem;
}
}
}
.field_field_intro{

View File

@@ -5,45 +5,69 @@
.content_container{
width: 100% !important;
@media(max-width:810px){
margin-top: 12rem !important;
}
}
}
.layout--threecol-25-50-25{
// flex-wrap: nowrap;
// @media(max-width: 810px){
// display: flex;
// flex-direction: column;
// width: 100%;
// }
flex-wrap: nowrap;
@media(max-width: 810px){
display: flex;
flex-direction: column;
width: 100%;
}
.layout__region--first{
flex: 0 1 25%;
// margin-top: 1rem;
position: relative;
@media(max-width: 810px){
flex: 0 1 100%;
}
.block-region-first{
position:fixed;
width: 30% !important;
// position:fixed;
// width: 20% !important;
margin-top: 1rem;
display: flex;
flex-direction: column;
// align-items: center;
// margin-left: 2rem;
// @media(max-width: 810px){
// position: relative;
// width: 100% !important;
// }
@media(max-width: 810px){
position: relative;
width: 100% !important;
margin-left: 0rem;
margin-top: 0;
}
#sites-map-container{
width: 100% !important;
padding-left: 1rem;
h2{
display: none;
}
@media(max-width: 810px){
// width: 50% !important;
margin: auto;
margin-top: 3rem;
}
}
.field_field_site_projet{
.node-type-site{
width: 80%;
width: 65%;
margin: auto;
padding-left: 2rem;
@media(max-width: 810px){
padding-left: 0rem;
width: 80%;
margin-bottom: 1rem;
}
.field_title{
h2{
text-transform: none;
font-size: 0.60rem;
@media(max-width: 810px){
font-size:1rem;
margin: 0;
margin-bottom: 0.5rem;
}
a{
color: $blue_QDD;
font-weight: 700;
@@ -53,14 +77,21 @@
.field_field_sous_titre{
p{
font-size: 0.55rem;
@media(max-width: 810px){
font-size:0.8rem ;
margin: 0;
margin-bottom: 0.5rem;
}
}
}
.more-link{
width: fit-content;
display: inline-flex;
// padding-left: 0.5rem;
background: black;
@media (max-width:810px) {
margin-left: 0;
}
a{
display: inline-flex;
@@ -70,6 +101,9 @@
text-transform: uppercase;
font-size: 0.5rem;
padding-left: 0.5rem;
@media(max-width: 810px){
font-size:0.7rem;
}
svg{
display: none;
@@ -94,23 +128,30 @@
}
.layout__region--second{
flex: 0 1 45% !important;
flex: 0 1 50% !important;
margin-top: 1rem;
max-width: 45%;
margin-left: 3rem;
max-width: 50%;
@media(max-width: 810px){
max-width: 80% !important;
margin: auto;
}
.block-region-second{
// margin-left: 3rem;
position: relative;
// margin-right: 3rem;
margin-top: 1rem;
display: flex;
flex-direction: column;
padding-left: 2rem;
@media(max-width: 810px){
padding-left: 0rem;
}
.field_field_laureats{
::before{
&.is-laureat::before {
content: "";
position: absolute;
top:0rem;
left: -1.3rem;
// display: block;
top:-0.1rem;
left: 0.5rem;
width: 2.5rem;
height: 2.5rem;
background-image: url("../img/laureat-ouvert.svg");
@@ -118,33 +159,51 @@
background-position: center;
background-size: contain;
z-index: 0;
@media(max-width: 810px){
left: -1.5rem;
top:0.5rem;
}
}
.laureat{
font-size: 0;
}
}
.field_title{
@media(max-width: 810px){
font-size: 1.3rem;
}
}
.field_field_nom_de_l_equipe{
border-top: solid black 1px;
padding-bottom: 0.5rem;
text-transform: uppercase;
@media(max-width: 810px){
font-size: 1.3rem;
}
}
.field_field_infos{
display: flex;
flex-direction: column;
flex-wrap: wrap;
height: 400px;
border-bottom: solid black 1px;
column-count: 3;
column-gap: 1.5rem;
.infos-projet{
width: 25%;
margin-bottom: 1rem;
break-inside: avoid;
margin-bottom: 0.5rem !important;
margin: 0;
h4{
margin: 0;
font-size: 0.7em;
font-family: 'gilroy-light';
@media(max-width: 810px){
font-size:0.8rem;
}
}
.field_field_contenu{
font-size: 0.8em;
font-family: 'gilroy-bold';
@media(max-width: 810px){
font-size:0.8rem;
}
}
}
}
@@ -155,11 +214,86 @@
object-fit: cover;
height: 16rem;
}
.image-field-caption{
// margin-top: 0;
margin-left: 0;
font-size: 0.5rem;
font-family: "gilroy-light";
@media(max-width: 810px){
font-size:0.8rem;
}
p{
margin-top: 0;
font-size: 0.5rem;
@media(max-width: 810px){
font-size:0.8rem;
}
}
}
}
.field_field_equipe_presentation p{
font-family: "gilroy-light";
font-size: 0.6rem;
.field_field_equipe_presentation {
p{
font-family: "gilroy-light";
font-size: 0.6rem;
@media(max-width: 810px){
font-size:0.8rem;
}
}
}
.equipe-panel {
overflow: hidden;
max-height: 0;
opacity: 0;
margin-top: 1rem;
transition:
max-height 1s ease,
opacity 0.8s ease;
}
.equipe-panel.is-open {
// max-height: 1500px;
opacity: 1;
}
.btn-equipe-toggle{
justify-content: space-between;
align-items: center;
color: white;
text-transform: uppercase;
font-size: 0.5rem;
background-color: black;
padding-left: 0.5rem;
margin: auto;
display: flex;
border: none;
// margin-top: 1rem;
@media(max-width: 810px){
font-size:0.8rem;
}
svg{
display: none;
}
&::after{
display: inline-flex;
content: url("../img/arrow-down-white.svg");
padding-right: 0.2rem;
padding-left: 0.2rem;
height: 12px;
}
margin-bottom: 1rem;
}
.btn-equipe-toggle[aria-expanded="true"]::after {
content: url("../img/arrow-up-white.svg");
}
.equipe-separator {
border-bottom: 1px solid black;
margin: 20px 0;
width: 100%;
}
.field_field_parties_projet{
margin-top: 2rem;
@@ -176,6 +310,9 @@
p{
font-family: "gilroy-light";
font-size: 0.6rem;
@media(max-width: 810px){
font-size:0.8rem;
}
}
}
}
@@ -198,6 +335,10 @@
object-fit: cover;
width: 220px;
height: 145px;
@media (max-width:810px){
width: 100%;
height: auto;
}
}
}
.image-field-caption{
@@ -207,6 +348,9 @@
margin-top: 0;
font-size: 0.5rem;
font-family: 'gilroy-light';
@media(max-width: 810px){
font-size:0.8rem;
}
}
}
@@ -230,6 +374,9 @@
color: white;
text-transform: uppercase;
font-size: 0.5rem;
@media(max-width: 810px){
font-size:0.8rem;
}
svg{
display: none;
}
@@ -277,93 +424,125 @@
flex: 0 1 24%;
.block-region-third{
position:relative;
// width: 23% !important;
margin-top: 2rem;
margin-top: 4.5rem;
margin-left: 2rem;
@media(max-width: 810px){
position: relative;
margin-left: 0;
margin-top: 2rem;
}
div{
display: flex;
flex-direction: column;
@media(max-width: 810px){
justify-content: center;
margin: auto;
margin-bottom: 1rem;
width: fit-content;
}
@media(max-width: 500px){
justify-content: center;
margin: auto;
margin-bottom: 1rem;
width: fit-content;
margin-bottom: 0rem;
}
h2{
font-family: "gilroy-light";
text-transform: uppercase;
font-size: 0.8rem;
font-size: 0.6rem;
@media(max-width: 810px){
font-size:0.8rem;
margin: auto;
margin-bottom: 1rem;
width: 80%;
}
&::after{
content: " :";
}
}
.views-row{
width: 80%;
border-bottom: solid black 1px;
padding-bottom: 1rem;
.views-field-title {
h2 {
font-size: 0.7rem;
margin-bottom: 0rem;
// margin-top: 0.3rem;
text-transform: none;
font-family: "gilroy-regular";
&::after{
content: "";
}
}
.view-rows-wrapper{
@media(max-width: 810px){
width: 80%;
margin: auto;
}
.views-field-field-nom-de-l-equipe{
h3 {
margin-bottom: 0.3rem;
margin-top:0.3rem;
.views-row{
width: 80%;
border-bottom: solid black 1px;
padding-bottom: 0.5rem;
padding-top: 0.5rem;
@media(max-width: 810px){
width: 80%;
justify-content: start;
padding-top: 1rem;
}
font-size: 0.6rem;
p{
font-family: "gilroy-semibold";
margin-bottom: 0.5rem;
font-size: 0.6rem;
}
}
.views-field-view-node{
width: fit-content;
padding-left: 0.5rem;
background: black;
@media (max-width:810px) {
margin-left: 0;
}
a{
display: inline-flex;
justify-content: space-between;
align-items: center;
color: white;
text-transform: uppercase;
font-size: 0.5rem;
svg{
display: none;
transition: transform 0.4s ease-in-out;
&:hover {
transform: scale(1.05);
}
&::after{
display: inline-flex;
content: url("../img/noun-arrow-to-right.svg");
padding-right: 0.2rem;
padding-left: 0.2rem;
// padding-bottom: 0.2rem;
height: 25px;
.is-laureat{
position: relative;
padding-top: 1.5rem;
::before {
content: "";
position: absolute;
top: 0.5rem;
left: -1.4rem;
width: 2.5rem;
height: 2.5rem;
background-image: url("../img/laureat-ouvert.svg");
background-repeat: no-repeat;
background-position: center;
background-size: contain;
z-index: 0;
margin-top: 0.2rem;
@media(max-width: 810px){
top: 0rem;
// left: -11.4rem;
}
}
}
.field-content{
font-size: 0;
}
}
.views-field-title {
@media (max-width:810px){
width: fit-content;
margin: 0;
}
h2 {
font-size: 0.5rem;
margin-bottom: 0rem;
text-transform: none;
font-family: "gilroy-regular";
&::after{
content: "";
}
@media(max-width: 810px){
font-size:0.8rem;
width: 100% !important;
}
}
}
.views-field-field-nom-de-l-equipe{
@media (max-width:810px){
width: fit-content;
margin: 0;
}
h3 {
margin-bottom: 0.3rem;
margin-top:0.3rem;
text-transform: uppercase;
}
font-size: 0.4rem;
@media(max-width: 810px){
font-size:0.7rem;
}
p{
font-family: "gilroy-semibold";
margin-bottom: 0.5rem;
}
}
.views-field-view-node{
display: none;
}
}
}
.field_field_laureats{
color: red;

View File

@@ -13,23 +13,89 @@
display: flex;
flex-direction: column;
width: 100%;
}
.layout__region--first{
@media(max-width: 810px){
order:2
}
.block-region-first{
#sites-map-container{
width: 100% !important;
padding-left: 1rem;
margin-top: 3rem;
h2{
font-family: "gilroy-light";
text-transform: uppercase;
font-size: 0.6rem;
&::after{
content: " :";
}
@media(max-width: 810px){
font-size: 1rem;
}
}
}
.field_field_link{
div{
display: flex;
justify-content: center;
}
a{
display: inline-flex;
justify-content: space-between;
align-items: center;
color: white;
text-transform: uppercase;
font-size: 0.5rem;
padding-right: 0.5rem;
background-color: black;
padding-bottom: 0.2rem;
padding-top: 0.2rem;
padding-left: 0.2rem;
@media(max-width: 810px){
font-size: 1rem;
}
// svg{
// display: none;
// }
&::before{
display: inline-flex;
content: url("../img/noun-arrow-to-left.svg");
padding-right: 0.2rem;
padding-left: 0.2rem;
// padding-bottom: 0.2rem;
height: 12px;
}
}
}
}
}
.layout__region--second{
margin: auto;
flex: 0 1 70% !important;
margin-top: 1rem;
margin-top: 3rem;
margin-right: 2rem;
// width: 60%;
@media(max-width: 810px){
order:1;
margin-top: 3rem;
margin-right: 0;
}
.block-region-second{
display: flex;
flex-direction: column;
flex-wrap: wrap;
margin-left: 2rem;
margin-right: 3rem;
@media(max-width: 500px){
margin-left: 0.5rem;
margin-top: 1rem;
@media(max-width: 810px){
margin-left: 00rem;
margin-top: 0rem;
margin-right: 0rem;
}
.field_title,
.field_field_sous_titre{
@@ -127,9 +193,10 @@
background: black;
padding-left: 0.5rem;
text-transform: uppercase;
font-size: 0.6rem;
font-size: 0.5rem;
margin-bottom: 0.3rem;
padding: 0.3rem;
padding: 0.2rem 0.5rem;
svg{
display: none;
@@ -147,7 +214,7 @@
background: black;
padding-left: 0.5rem;
text-transform: uppercase;
font-size: 0.6rem;
font-size: 0.5rem;
margin-bottom: 0.3rem;
svg{
@@ -158,6 +225,7 @@
content: url("../img/noun-arrow-to-right.svg");
padding-right: 0.2rem;
padding-left: 0.2rem;
height: 25px;
}
a{
color: white;
@@ -167,6 +235,7 @@
div:has(.field_field_images){
order: 10;
width: 100%;
.diaporama{
display: flex !important;
flex-direction: row !important;
@@ -179,10 +248,17 @@
}
.images{
// margin: auto;
@media (max-width:810px){
margin: auto;
}
img{
object-fit: cover;
width: 220px !important;
height: 145px;
@media (max-width:810px){
width: 100% !important;
height: auto;
}
}
}
.image-field-caption{
@@ -192,6 +268,9 @@
margin-top: 0;
font-size: 0.5rem;
font-family: 'gilroy-light';
@media (max-width:810px){
font-size: 1rem;
}
}
}
}

View File

@@ -2,8 +2,14 @@
.layout-content{
margin-top: 2rem;
max-width: 100vw;
@media(max-width:810px){
// margin-top: 12rem !important;
}
.content_container{
width: 90% !important;
@media(max-width:810px){
margin-top: 12rem !important;
}
}
}
.layout--threecol-25-50-25{
@@ -234,14 +240,6 @@
flex: 1 1 auto;
min-width: 25%;
}
// div .field_field_porteur_s_de_site{
// border-bottom: none;
// padding-bottom: 0;
// }
// div .field_field_nom_de_la_commune_nb_d_hab{
// border-bottom: none;
// padding-bottom: 0;
// }
div:has(.field_field_region){
border-bottom: none;
padding-bottom: 0;
@@ -319,7 +317,7 @@
gap: 20px;
flex-wrap: wrap;
margin-bottom: 2rem;
@media(max-width: 500px){
@media(max-width: 810px){
flex-direction: column !important;
}
.cadre-img-zoom{
@@ -328,6 +326,10 @@
object-fit: cover;
width: 220px;
height: 145px;
@media(max-width: 810px){
width: 100%;
height: auto;
}
}
}
.image-field-caption{
@@ -337,6 +339,9 @@
margin-top: 0;
font-size: 0.5rem;
font-family: 'gilroy-light';
@media(max-width: 810px){
font-size: 0.8rem;
}
}
}
}
@@ -345,6 +350,7 @@
div:has(.field--name-field-documents){
order: 5;
margin-top: 0.5rem;
width: 100%;
.field--name-field-documents{
a{
display: inline-flex;
@@ -392,24 +398,13 @@
// width: 80%;
@media(max-width: 810px){
position: relative;
margin-left: 1rem;
margin-top: 3rem;
}
div{
display: flex;
flex-direction: column;
// margin-bottom: 1rem;
@media(max-width: 810px){
justify-content: center;
margin: auto;
margin-bottom: 1rem;
width: fit-content;
}
@media(max-width: 500px){
justify-content: center;
margin: auto;
margin-bottom: 1rem;
width: fit-content;
}
div:has(h2){
border-bottom: solid black 1px;
padding-left: 0.3rem;
@@ -418,87 +413,119 @@
width: 80%;
font-family: "gilroy-light";
text-transform: uppercase;
font-size: 0.7rem;
font-size: 0.6rem;
margin-bottom: 1rem;
margin-top: 1rem;
border-bottom: solid black 1px;
margin-left: 0.5rem;
padding-bottom: 0.5rem;
@media(max-width: 810px){
font-size:0.8rem;
margin: 0;
margin-bottom: 1rem;
}
&::after{
content: " :";
}
}
.node-type-projet {
position: relative;
&:has(.laureat:not(:empty)){
padding-top: 1.5rem;
}
&:has(.laureat:not(:empty))::before {
content: "";
position: absolute;
// display: block;
top: -0.1rem; // adapte la position selon ton visuel
left: -1rem;
width: 2.5rem;
height: 2.5rem;
// background-color: #f6f7f3;
background-image: url("../img/laureat-ouvert.svg");
background-repeat: no-repeat;
background-position: center;
background-size: contain;
z-index: 0;
margin-top: 0.3rem;
}
.node-projet-title{
.field_field_projets_lie{
@media(max-width: 810px){
width: 80%;
padding-left: 0.5rem;
font-size: 0.5rem;
margin: 0;
background-color: #f6f7f3;
font-family: "gilroy-regular";
justify-content: start;
// padding-top: 1rem;
}
.field_field_nom_de_l_equipe{
width: 80%;
padding-left: 0.5rem;
font-size: 0.5rem;
background-color: #f6f7f3;
div{
border-bottom: solid black 1px;
margin-bottom: 0.5rem;
.node-type-projet {
position: relative;
transition: transform 0.4s ease-in-out;
&.is-laureat{
padding-top: 1.2rem;
}
p{
font-family: "gilroy-semibold";
margin-bottom: 0.5rem;
&:hover {
transform: scale(1.05);
}
.node-projet-title{
width: 80%;
padding-left: 0.5rem;
font-size: 0.5rem;
margin-top: 0.2rem;
}
div.more-link{
margin-bottom: 1rem;
padding-left: 0rem;
a{
font-size: 0.5rem;
margin: 0;
background-color: #f6f7f3;
font-family: "gilroy-regular";
@media(max-width: 810px){
font-size:0.8rem;
width: 100% !important;
}
}
}
.field_field_laureats{
color:$red_QDD;
text-transform: uppercase;
display: inline-flex;
align-items: flex-start;
height: auto;
font-size: 0px;
}
}
.field_field_nom_de_l_equipe{
width: 80%;
padding-left: 0.5rem;
font-size: 0.4rem;
background-color: #f6f7f3;
text-transform: uppercase;
@media(max-width: 810px){
font-size:0.8rem;
width: 100% !important;
}
div{
border-bottom: solid black 1px;
margin-bottom: 0.5rem;
}
p{
font-family: "gilroy-semibold";
margin-bottom: 0.5rem;
font-size: 0.5rem;
margin-top: 0.2rem;
@media(max-width: 810px){
font-size:0.8rem;
width: 100% !important;
}
}
div.more-link{
display: none;
margin-bottom: 1rem;
padding-left: 0rem;
a{
font-size: 0.5rem;
}
}
}
.field_field_laureats{
color:$red_QDD;
text-transform: uppercase;
display: inline-flex;
align-items: flex-start;
height: auto;
font-size: 0px;
&.is-laureat{
position: relative;
}
&.is-laureat::before {
content: "";
position: absolute;
top: -4.2rem;
left: -1rem;
width: 2.5rem;
height: 2.5rem;
background-image: url("../img/laureat-ouvert.svg");
background-repeat: no-repeat;
background-position: center;
background-size: contain;
z-index: 0;
margin-top: 0.3rem;
@media(max-width: 810px){
top: -6rem;
}
}
}
}
}
}
.prevnext{
display: none;
flex-direction: row;
margin-bottom: 0rem;
.prev-site{

View File

@@ -121,6 +121,27 @@
}
}
}
.toggle-partenaire {
display: block;
grid-column: 7;
grid-row: 1;
width: 40px;
height: 40px;
margin: 1rem auto;
border: none;
background-color: transparent;
background-image: url("../img/fleche-bas.svg");
background-size: contain;
background-repeat: no-repeat;
background-position: center;
cursor: pointer;
transition: transform 0.3s ease;
}
.toggle-partenaire.open {
transform: rotate(180deg);
}
}

View File

@@ -21,7 +21,7 @@
margin-top: 3rem;
margin-left: 15%;
margin-bottom: 1rem;
width: 70%;
width: 65%;
@media(max-width: 810px){
display: flex;
margin:auto;
@@ -199,7 +199,16 @@
@media(max-width: 810px){
width: 50%;
}
.views-field-field-documents a{
h2{margin-bottom: 0.2rem;}
.views-field-field-date-ressource{
padding-top: 0.3rem;
}
.views-field-body-1 p{
margin-top: 0.2rem;
margin-bottom: 0.2rem;
}
.views-field-field-documents a,
.views-field-field-liens a{
display: inline-flex;
align-items: center;
@@ -311,7 +320,7 @@
width: 100%;
background-color: $blue_QDD;
}
&.type-Galerie-photos{
&.type-Mission-photo{
justify-content: space-between;
.views-row{
width: 18%;

View File

@@ -22,6 +22,7 @@
}
}
.content-actus{
width: 100%;
.slick-list{
padding-bottom: 1rem;
@media(max-width: 810px){
@@ -31,7 +32,7 @@
.view-rows-wrapper{
margin-left: 25%;
width: 65%;
width: 55%;
display: flex;
flex-direction: column;
flex-wrap: wrap;
@@ -54,6 +55,7 @@
.node-type-actualite{
width: 85%;
// padding-bottom: 2rem;
cursor: pointer;
.content-wrapper-actu{
display: grid;
@@ -250,21 +252,32 @@
display: inline-flex;
align-items: center;
a{
width: 5em;
display: block;
display: inline-flex;
overflow: hidden;
white-space: nowrap;
font-size: 0px;
align-items: baseline;
&::before{
content: "En savoir";
display: block;
// width: 20px;
padding-left: 0.4rem;
font-size: 0.7rem;
height: fit-content;
}
&::after{
content: " +";
display: flex;
padding-left: 0.3rem;
font-size: 1rem;
height: 26px;
margin: auto;
align-items: center;
}
}
&::after{
content: "+";
display: block;
// width: 20px;
padding-left: 0.4rem;
font-size: 1.8rem;
height: fit-content;
}
}
.field_field_liens{
order: 7;
@@ -281,7 +294,8 @@
text-transform: uppercase;
font-size: 0.5rem;
margin-bottom: 0.5rem;
padding-top: 0.1rem;
padding-bottom: 0.1rem;
svg{
display: none;
}
@@ -330,8 +344,8 @@
display: flex;
flex-direction: row;
padding-left: 0.5rem;
// padding-top: 0.2rem;
// padding-bottom: 0.2rem;
padding-top: 0.1rem;
padding-bottom: 0.1rem;
display: inline-flex;
align-items: center;
color: white;

View File

@@ -3,39 +3,42 @@ header{
.field_field_logo{
.qdd-header{
opacity: 0;
animation-delay: 0.9s;
animation-name: scale;
animation-duration: 2.8s;
&.animated{
opacity: 1;
transform: scale(2);
transform: scale(2);
@media(max-width:820px) {
transform: scale(1);
}
.blink-blue {
opacity: 0;
// animation: blink 3s 3;
animation-delay: 0.2s;
animation-delay: 0.1s;
animation-name: blink;
animation-duration: 10s;
animation-duration: 5s;
}
.blink-red {
opacity: 0;
animation-delay: 0.8s;
animation-delay: 0.3s;
animation-name: blink;
animation-duration: 10s;
animation-duration: 5s;
}
.blink-black {
opacity: 0;
animation-delay: 1.5s;
animation-delay: 0.5s;
animation-name: blink;
animation-duration: 10s;
animation-duration: 5s;
}
.blink-black2 {
opacity: 0;
animation-delay: 2s;
animation-delay: 0.7s;
animation-name: blink;
animation-duration: 10s;
animation-duration: 5s;
}
@keyframes blink {
0%, 100% {
@@ -49,8 +52,8 @@ header{
.consultation{
display: none;
animation-name: slideIn;
animation-delay: 1s;
animation-duration: 3s;
animation-delay: 0.5s;
animation-duration: 1s;
}
@keyframes slideIn {
@@ -62,15 +65,14 @@ header{
}
}
// @keyframes scale {
// 0%{
// transform: scale(2);
// }
// 90%{transform: scale(2);}
// 100% {
// transform: scale(1);
// }
// }
@keyframes scale {
0%{
transform: scale(2);
}
100% {
transform: scale(1);
}
}
}
@@ -78,4 +80,6 @@ header{
}
}
}
}

View File

@@ -32,7 +32,7 @@
#block-quartiers-de-demain-formulaireexposeactuspage-1{
background-color: white;
padding: 0.3rem 0.5rem 1rem 1rem;
width: 100%;
width: 111%;
@media(max-width: 810px){
display: flex;
flex-direction: column;

View File

@@ -43,7 +43,7 @@
flex-direction: column;
height: fit-content;
}
.paragraph--type--phase-deroulement::after {
content: '';
position: absolute;
@@ -211,6 +211,9 @@
background: black;
text-transform: uppercase;
font-size: 0.6rem;
margin: auto;
padding-top: 0.1rem;
padding-bottom: 0.1rem;
@media (max-width:810px) {
margin-left: 0;
margin: auto;

View File

@@ -15,6 +15,7 @@
@import "global/layout";
@import "global/reset";
@import "global/mediaquerries";
// @import "global/_animated-logo";
@@ -24,12 +25,12 @@
@import "partials/header";
@import "partials/footer";
@import "partials/aside";
@import "partials/animation-logo";
// @import "partials/animation-logo";
@import "partials/slick-theme";
@import "partials/slick";
@import "partials/timeline";
@import "partials/actu-caroussel-home";
@import "partials/animation-logo-header";
// @import "partials/animation-logo-header";
@import "partials/formes-animees";
@import "partials/animation-pilliers";
@import "partials/map";
@@ -55,4 +56,4 @@
@import "pages/ressources";
@import "pages/actualites";
@import "/home/ouidade/Developer/docker-quartiersdedemain/src/web/modules/custom/q2d_mod/assets/css/carte-interactive-qdd.css";
@import "/modules/custom/q2d_mod/assets/css/carte-interactive-qdd.css";

View File

@@ -432,9 +432,9 @@
{% for item in items %}
<div{{ item.attributes }}>
<a class='logo-qdd' href="{{ ancre_href1 }}">
{# <a class='logo-qdd' href="{{ ancre_href1 }}">
{{ svg_icon|raw }}
</a>
</a> #}
<a clas='other-logo' href="{{ ancre_href }}">
{{ item.content }}

View File

@@ -50,6 +50,15 @@
{%
set ancre_href = '#paragraph-id--' ~ paragraph.id()
%}
{# Vrai si au moins un item a du contenu (donc booléen "vrai") #}
{% set is_laureat = false %}
{% for item in items %}
{% if item.content|render|trim is not empty %}
{% set is_laureat = true %}
{% endif %}
{% endfor %}
{% if label_hidden %}
{% if multiple %}
<div{{ attributes }}>
@@ -63,17 +72,16 @@
{% endfor %}
{% endif %}
{% else %}
<div{{ attributes }}>
<div{{ attributes.addClass(is_laureat ? 'is-laureat') }}>
<div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div>
{% if multiple %}
<div>
{% endif %}
{% for item in items %}
{# {% for item in items %}
<div class="laureat"{{ item.attributes }}>{{ item.content }}</div>
{% endfor %}
{% endfor %} #}
{% if multiple %}
</div>
{% endif %}
</div>
{% endif %}
{% endif %}

View File

@@ -62,7 +62,10 @@
* @ingroup themeable
*/
#}
<article{{ attributes }}>
{# On calcule une variable Twig pour savoir si le node est lauréat #}
{% set is_laureat = node.field_laureats.value ?? 0 %}
<article{{ attributes.addClass(is_laureat ? 'is-laureat' : '') }}>
{{ title_prefix }}
{% if label and not page %}

View File

@@ -62,7 +62,11 @@
* @ingroup themeable
*/
#}
<article{{ attributes }}>
{# Le node est lauréat si field_laureats vaut "1" #}
{% set is_laureat = node.field_laureats is defined and node.field_laureats.value == '1' %}
<article{{ attributes.addClass(is_laureat ? 'is-laureat') }}>
{{ title_prefix }}
{% if label and not page %}
@@ -89,14 +93,35 @@
{% set node_title = node.label %}
{% set node_url = (url is defined and url) ? url : path('entity.node.canonical', {'node': node.id}) %}
{% if node_title %}
{# {% if node_title %}
{{ title_prefix }}
<h3{{ title_attributes }} class="node-projet-title">
<a href="{{ node_url }}" rel="bookmark">{{ node_title }}</a>
</h3>
{{ title_suffix }}
{% endif %}
{{ content }}
{{ content }} #}
{% if node_title %}
{{ title_prefix }}
<a href="{{ node_url }}" rel="bookmark" class="node-projet-link">
<h3{{ title_attributes.addClass('node-projet-title') }}>
{{ node_title }}
</h3>
{# Champ "Nom de l'équipe" inclus dans le lien #}
{% if content.field_nom_de_l_equipe is defined %}
{{ content.field_nom_de_l_equipe }}
{% endif %}
</a>
{{ title_suffix }}
{# On affiche le reste des champs, sans field_nom_de_l_equipe #}
{{ content|without('field_nom_de_l_equipe') }}
{% else %}
{{ content }}
{% endif %}
</div>

View File

@@ -31,7 +31,7 @@
* @ingroup themeable
*/
#}
{#
{% for field in fields -%}
@@ -54,5 +54,45 @@
{%- if field.wrapper_element -%}
</{{ field.wrapper_element }}>
{%- endif %}
{%- endfor %}
{%- endfor %} #}
{# Vrai si le champ field_laureats a une valeur brute #}
{# On récupère la valeur brute du champ field_laureats sur l'entité #}
{% set laureat_value = row._entity.field_laureats.value ?? null %}
{% set laureat_value = row._entity.field_laureats.value ?? null %}
{% for id, field in fields -%}
{{ field.separator }}
{%- if field.wrapper_element -%}
{# On part des attributs existants du wrapper #}
{% set wrapper_attributes = field.wrapper_attributes %}
{# Si c'est le champ field_laureats ET qu'il a une valeur, on ajoute la classe #}
{% if id == 'field_laureats' and laureat_value %}
{% set wrapper_attributes = wrapper_attributes.addClass('is-laureat') %}
{% endif %}
<{{ field.wrapper_element }}{{ wrapper_attributes }}>
{%- endif %}
{%- if field.label -%}
{%- if field.label_element -%}
<{{ field.label_element }}{{ field.label_attributes }}>{{ field.label }}{{ field.label_suffix }}</{{ field.label_element }}>
{%- else -%}
{{ field.label }}{{ field.label_suffix }}
{%- endif %}
{%- endif %}
{%- if field.element_type -%}
<{{ field.element_type }}{{ field.element_attributes }}>
{{ field.content }}
</{{ field.element_type }}>
{%- endif %}
{%- if field.wrapper_element -%}
</{{ field.wrapper_element }}>
{%- endif %}
{%- endfor %}

View File

@@ -9,6 +9,10 @@ let config = {
// "./src/assets/js/animated_logo.js",
"./src/assets/js/animated_formes.js",
"./src/assets/js/lightbox.js",
"./src/assets/js/header.js",
"./src/assets/js/timeline.js",
"./src/assets/js/ressources.js",
"./src/assets/scss/quartiers_de_demain.scss",
// "./src/assets/fonts/*",
// "./src/assets/css/animated_logo.css",
@@ -66,11 +70,18 @@ let config = {
],
}
},
externals: {
drupal: 'Drupal',
Drupal: 'Drupal',
},
}
module.exports = config;
module.exports = config;