Compare commits
40 Commits
f575ae894f
...
prod
Author | SHA1 | Date | |
---|---|---|---|
d91e74f61e | |||
c5c1456e80 | |||
c2174b27c0 | |||
6f53afa8bf | |||
ac51fc987c | |||
f44fbd8d06 | |||
e85851bd4d | |||
bfb39a0259 | |||
e7a5e163ff | |||
95e1b02760 | |||
b12af44825 | |||
d90aa2726b | |||
7387ce7f50 | |||
7792005403 | |||
b538e754d2 | |||
d805ef35b1 | |||
a1916e3219 | |||
9093caa557 | |||
2ca44f2550 | |||
dffd179bc9 | |||
6ecf055060 | |||
8b2938de0e | |||
ed8edbd0c0 | |||
045a6050be | |||
d900ea5472 | |||
4f1cc2760c | |||
1b88937a6f | |||
eeb4702e96 | |||
298bafce49 | |||
2e26680eaf | |||
f20350a10a | |||
2e47c8dd1b | |||
faa98fbec0 | |||
f2d48ab583 | |||
42fb439e3d | |||
f106602e73 | |||
aca6c6b011 | |||
c11b90f235 | |||
d8785d830c | |||
ca00aa0822 |
@ -28,6 +28,8 @@
|
||||
"drupal/geocoder": "^4.24",
|
||||
"drupal/geofield": "^1.59",
|
||||
"drupal/image_field_caption": "^2.0",
|
||||
"drupal/imagestyleflush": "^1.0",
|
||||
"drupal/jsonapi_image_styles": "^3.0",
|
||||
"drupal/jsonapi_views": "^1.1",
|
||||
"drupal/leaflet": "^10.2",
|
||||
"drupal/leaflet_more_maps": "^2.2",
|
||||
|
578
composer.lock
generated
578
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,6 @@ langcode: fr
|
||||
maxlength_block_class_field: 255
|
||||
field_type: multiple_textfields
|
||||
default_case: standard
|
||||
block_classes_stored: { }
|
||||
enable_attributes: true
|
||||
enable_auto_complete: true
|
||||
qty_classes_per_block: 10
|
||||
@ -16,7 +15,7 @@ weight_attributes: 0
|
||||
weight_class: 0
|
||||
weight_id: 0
|
||||
filter_html_clean_css_identifier: ''
|
||||
maxlength_attributes: 255
|
||||
maxlength_attributes: 0
|
||||
maxlength_id: 255
|
||||
attribute_keys_stored: '[]'
|
||||
attribute_value_stored: '[]'
|
||||
|
11
config/sync/caravane.settings.yml
Normal file
11
config/sync/caravane.settings.yml
Normal file
@ -0,0 +1,11 @@
|
||||
features:
|
||||
node_user_picture: false
|
||||
comment_user_picture: true
|
||||
comment_user_verification: true
|
||||
favicon: 0
|
||||
logo:
|
||||
use_default: 0
|
||||
path: 'public://favicon-caravane_1.png'
|
||||
favicon:
|
||||
use_default: 0
|
||||
path: ''
|
@ -1,4 +1,4 @@
|
||||
uuid: b0c240c8-beea-4be3-96b8-6543b6734b25
|
||||
uuid: 39f683b9-ea9f-4e84-8dec-c30162c19b72
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies: { }
|
||||
@ -12,6 +12,6 @@ context:
|
||||
fallback:
|
||||
language: ''
|
||||
menu:
|
||||
path: /edit/partenaire
|
||||
path: /edit/partenaires
|
||||
weight: 0
|
||||
description: ''
|
||||
|
17
config/sync/config_pages.type.intro_ressource.yml
Normal file
17
config/sync/config_pages.type.intro_ressource.yml
Normal file
@ -0,0 +1,17 @@
|
||||
uuid: 67828fd5-674e-4e52-9f2f-3457e06c0baa
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies: { }
|
||||
id: intro_ressource
|
||||
label: 'intro ressource'
|
||||
token: false
|
||||
context:
|
||||
show_warning: true
|
||||
group:
|
||||
language: false
|
||||
fallback:
|
||||
language: ''
|
||||
menu:
|
||||
path: /edit/ressource
|
||||
weight: 0
|
||||
description: ''
|
22
config/sync/core.base_field_override.node.equipe.promote.yml
Normal file
22
config/sync/core.base_field_override.node.equipe.promote.yml
Normal file
@ -0,0 +1,22 @@
|
||||
uuid: 83ba5ce9-056a-4c77-8b23-0801dc5eca3b
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- node.type.equipe
|
||||
id: node.equipe.promote
|
||||
field_name: promote
|
||||
entity_type: node
|
||||
bundle: equipe
|
||||
label: "Promu en page d'accueil"
|
||||
description: ''
|
||||
required: false
|
||||
translatable: true
|
||||
default_value:
|
||||
-
|
||||
value: 0
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
on_label: Activé
|
||||
off_label: Désactivé
|
||||
field_type: boolean
|
@ -0,0 +1,22 @@
|
||||
uuid: e76cb255-d05a-4ffd-8f7e-23a17e8f25a5
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- node.type.ressource
|
||||
id: node.ressource.promote
|
||||
field_name: promote
|
||||
entity_type: node
|
||||
bundle: ressource
|
||||
label: "Promu en page d'accueil"
|
||||
description: ''
|
||||
required: false
|
||||
translatable: true
|
||||
default_value:
|
||||
-
|
||||
value: 0
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
on_label: Activé
|
||||
off_label: Désactivé
|
||||
field_type: boolean
|
@ -1,4 +1,4 @@
|
||||
uuid: c8c782e1-e597-4e4d-ac96-65142dbadedb
|
||||
uuid: 3d095235-90fe-4b5f-ae32-ef10c26c1f47
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
|
@ -0,0 +1,33 @@
|
||||
uuid: c5c09811-6a65-4cff-9936-78dc896b9adf
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- config_pages.type.intro_ressource
|
||||
- field.field.config_pages.intro_ressource.field_intro
|
||||
- field.field.config_pages.intro_ressource.field_titre
|
||||
module:
|
||||
- text
|
||||
id: config_pages.intro_ressource.default
|
||||
targetEntityType: config_pages
|
||||
bundle: intro_ressource
|
||||
mode: default
|
||||
content:
|
||||
field_intro:
|
||||
type: text_textarea
|
||||
weight: 1
|
||||
region: content
|
||||
settings:
|
||||
rows: 5
|
||||
placeholder: ''
|
||||
third_party_settings: { }
|
||||
field_titre:
|
||||
type: string_textfield
|
||||
weight: 0
|
||||
region: content
|
||||
settings:
|
||||
size: 60
|
||||
placeholder: ''
|
||||
third_party_settings: { }
|
||||
hidden:
|
||||
label: true
|
95
config/sync/core.entity_form_display.node.equipe.default.yml
Normal file
95
config/sync/core.entity_form_display.node.equipe.default.yml
Normal file
@ -0,0 +1,95 @@
|
||||
uuid: 71b2f68b-0171-41db-ba52-664ecb84b433
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.field.node.equipe.body
|
||||
- field.field.node.equipe.field_personne_s
|
||||
- field.field.node.equipe.field_poid
|
||||
- node.type.equipe
|
||||
module:
|
||||
- field_group
|
||||
- paragraphs
|
||||
- text
|
||||
third_party_settings:
|
||||
field_group:
|
||||
group_details:
|
||||
children:
|
||||
- field_poid
|
||||
- status
|
||||
label: Details
|
||||
region: content
|
||||
parent_name: ''
|
||||
weight: 3
|
||||
format_type: details_sidebar
|
||||
format_settings:
|
||||
classes: ''
|
||||
show_empty_fields: false
|
||||
id: ''
|
||||
label_as_html: false
|
||||
open: true
|
||||
description: ''
|
||||
required_fields: true
|
||||
weight: -100
|
||||
id: node.equipe.default
|
||||
targetEntityType: node
|
||||
bundle: equipe
|
||||
mode: default
|
||||
content:
|
||||
body:
|
||||
type: text_textarea_with_summary
|
||||
weight: 1
|
||||
region: content
|
||||
settings:
|
||||
rows: 9
|
||||
summary_rows: 3
|
||||
placeholder: ''
|
||||
show_summary: false
|
||||
third_party_settings: { }
|
||||
field_personne_s:
|
||||
type: paragraphs
|
||||
weight: 2
|
||||
region: content
|
||||
settings:
|
||||
title: Paragraphe
|
||||
title_plural: Paragraphs
|
||||
edit_mode: open
|
||||
closed_mode: summary
|
||||
autocollapse: none
|
||||
closed_mode_threshold: 0
|
||||
add_mode: dropdown
|
||||
form_display_mode: default
|
||||
default_paragraph_type: ''
|
||||
features:
|
||||
collapse_edit_all: collapse_edit_all
|
||||
duplicate: duplicate
|
||||
third_party_settings: { }
|
||||
field_poid:
|
||||
type: number
|
||||
weight: 12
|
||||
region: content
|
||||
settings:
|
||||
placeholder: ''
|
||||
third_party_settings: { }
|
||||
status:
|
||||
type: boolean_checkbox
|
||||
weight: 13
|
||||
region: content
|
||||
settings:
|
||||
display_label: true
|
||||
third_party_settings: { }
|
||||
title:
|
||||
type: string_textfield
|
||||
weight: 0
|
||||
region: content
|
||||
settings:
|
||||
size: 60
|
||||
placeholder: ''
|
||||
third_party_settings: { }
|
||||
hidden:
|
||||
created: true
|
||||
langcode: true
|
||||
path: true
|
||||
promote: true
|
||||
sticky: true
|
||||
uid: true
|
@ -1,3 +1,4 @@
|
||||
uuid: 4b684ae9-1a47-4712-bfbe-54da6f8555da
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
|
207
config/sync/core.entity_form_display.node.ressource.default.yml
Normal file
207
config/sync/core.entity_form_display.node.ressource.default.yml
Normal file
@ -0,0 +1,207 @@
|
||||
uuid: 4102b51d-df23-46b8-8a6f-0adee6746f5f
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.field.node.ressource.field_autheurice
|
||||
- field.field.node.ressource.field_date_ressource
|
||||
- field.field.node.ressource.field_etape
|
||||
- field.field.node.ressource.field_introduction
|
||||
- field.field.node.ressource.field_mis_en_avant
|
||||
- field.field.node.ressource.field_parties_ressource
|
||||
- field.field.node.ressource.field_thematiques
|
||||
- field.field.node.ressource.field_type_de_ressource
|
||||
- node.type.ressource
|
||||
module:
|
||||
- autocomplete_deluxe
|
||||
- datetime
|
||||
- field_group
|
||||
- paragraphs
|
||||
- path
|
||||
- text
|
||||
third_party_settings:
|
||||
field_group:
|
||||
group_details:
|
||||
children:
|
||||
- field_thematiques
|
||||
- field_etape
|
||||
- status
|
||||
- path
|
||||
- field_mis_en_avant
|
||||
- field_type_de_ressource
|
||||
label: Details
|
||||
region: content
|
||||
parent_name: ''
|
||||
weight: 6
|
||||
format_type: details_sidebar
|
||||
format_settings:
|
||||
classes: ''
|
||||
show_empty_fields: false
|
||||
id: ''
|
||||
label_as_html: false
|
||||
open: true
|
||||
description: ''
|
||||
required_fields: true
|
||||
weight: -100
|
||||
group_tabs:
|
||||
children:
|
||||
- group_infos
|
||||
- group_parties
|
||||
label: Tabs
|
||||
region: content
|
||||
parent_name: ''
|
||||
weight: 1
|
||||
format_type: tabs
|
||||
format_settings:
|
||||
classes: ''
|
||||
show_empty_fields: false
|
||||
id: ''
|
||||
label_as_html: false
|
||||
direction: horizontal
|
||||
width_breakpoint: 640
|
||||
group_infos:
|
||||
children:
|
||||
- field_autheurice
|
||||
- field_date_ressource
|
||||
- field_introduction
|
||||
label: Infos
|
||||
region: content
|
||||
parent_name: group_tabs
|
||||
weight: 20
|
||||
format_type: tab
|
||||
format_settings:
|
||||
classes: ''
|
||||
show_empty_fields: false
|
||||
id: ''
|
||||
label_as_html: false
|
||||
formatter: closed
|
||||
description: ''
|
||||
required_fields: true
|
||||
group_parties:
|
||||
children:
|
||||
- field_parties_ressource
|
||||
label: Parties
|
||||
region: content
|
||||
parent_name: group_tabs
|
||||
weight: 21
|
||||
format_type: tab
|
||||
format_settings:
|
||||
classes: ''
|
||||
show_empty_fields: false
|
||||
id: ''
|
||||
label_as_html: false
|
||||
formatter: closed
|
||||
description: ''
|
||||
required_fields: true
|
||||
id: node.ressource.default
|
||||
targetEntityType: node
|
||||
bundle: ressource
|
||||
mode: default
|
||||
content:
|
||||
field_autheurice:
|
||||
type: string_textfield
|
||||
weight: 2
|
||||
region: content
|
||||
settings:
|
||||
size: 60
|
||||
placeholder: ''
|
||||
third_party_settings: { }
|
||||
field_date_ressource:
|
||||
type: datetime_default
|
||||
weight: 3
|
||||
region: content
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
field_etape:
|
||||
type: entity_reference_autocomplete
|
||||
weight: 28
|
||||
region: content
|
||||
settings:
|
||||
match_operator: CONTAINS
|
||||
match_limit: 10
|
||||
size: 60
|
||||
placeholder: ''
|
||||
third_party_settings: { }
|
||||
field_introduction:
|
||||
type: text_textarea
|
||||
weight: 4
|
||||
region: content
|
||||
settings:
|
||||
rows: 5
|
||||
placeholder: ''
|
||||
third_party_settings: { }
|
||||
field_mis_en_avant:
|
||||
type: boolean_checkbox
|
||||
weight: 31
|
||||
region: content
|
||||
settings:
|
||||
display_label: true
|
||||
third_party_settings: { }
|
||||
field_parties_ressource:
|
||||
type: paragraphs
|
||||
weight: 5
|
||||
region: content
|
||||
settings:
|
||||
title: Paragraphe
|
||||
title_plural: Paragraphs
|
||||
edit_mode: open
|
||||
closed_mode: summary
|
||||
autocollapse: none
|
||||
closed_mode_threshold: 0
|
||||
add_mode: dropdown
|
||||
form_display_mode: default
|
||||
default_paragraph_type: ''
|
||||
features:
|
||||
collapse_edit_all: collapse_edit_all
|
||||
duplicate: duplicate
|
||||
third_party_settings: { }
|
||||
field_thematiques:
|
||||
type: autocomplete_deluxe
|
||||
weight: 27
|
||||
region: content
|
||||
settings:
|
||||
match_operator: CONTAINS
|
||||
autocomplete_route_name: autocomplete_deluxe.autocomplete
|
||||
size: 60
|
||||
selection_handler: default
|
||||
match_limit: 10
|
||||
min_length: 0
|
||||
delimiter: ''
|
||||
not_found_message_allow: false
|
||||
not_found_message: "The term '@term' will be added"
|
||||
new_terms: false
|
||||
no_empty_message: 'No terms could be found. Please type in order to add a new term.'
|
||||
third_party_settings: { }
|
||||
field_type_de_ressource:
|
||||
type: options_select
|
||||
weight: 32
|
||||
region: content
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
path:
|
||||
type: path
|
||||
weight: 30
|
||||
region: content
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
status:
|
||||
type: boolean_checkbox
|
||||
weight: 29
|
||||
region: content
|
||||
settings:
|
||||
display_label: true
|
||||
third_party_settings: { }
|
||||
title:
|
||||
type: string_textfield
|
||||
weight: 0
|
||||
region: content
|
||||
settings:
|
||||
size: 60
|
||||
placeholder: ''
|
||||
third_party_settings: { }
|
||||
hidden:
|
||||
created: true
|
||||
langcode: true
|
||||
promote: true
|
||||
sticky: true
|
||||
uid: true
|
@ -0,0 +1,70 @@
|
||||
uuid: 0f3046d1-fa2d-4286-a5a4-dcad356723f0
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.field.paragraph.document.field_autheurice_s
|
||||
- field.field.paragraph.document.field_date
|
||||
- field.field.paragraph.document.field_document
|
||||
- field.field.paragraph.document.field_sous_titre
|
||||
- field.field.paragraph.document.field_titre
|
||||
- field.field.paragraph.document.field_vignette
|
||||
- image.style.thumbnail
|
||||
- paragraphs.paragraphs_type.document
|
||||
module:
|
||||
- datetime
|
||||
- file
|
||||
- image
|
||||
id: paragraph.document.default
|
||||
targetEntityType: paragraph
|
||||
bundle: document
|
||||
mode: default
|
||||
content:
|
||||
field_autheurice_s:
|
||||
type: string_textfield
|
||||
weight: 3
|
||||
region: content
|
||||
settings:
|
||||
size: 60
|
||||
placeholder: ''
|
||||
third_party_settings: { }
|
||||
field_date:
|
||||
type: datetime_default
|
||||
weight: 4
|
||||
region: content
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
field_document:
|
||||
type: file_generic
|
||||
weight: 5
|
||||
region: content
|
||||
settings:
|
||||
progress_indicator: throbber
|
||||
third_party_settings: { }
|
||||
field_sous_titre:
|
||||
type: string_textfield
|
||||
weight: 2
|
||||
region: content
|
||||
settings:
|
||||
size: 60
|
||||
placeholder: ''
|
||||
third_party_settings: { }
|
||||
field_titre:
|
||||
type: string_textfield
|
||||
weight: 1
|
||||
region: content
|
||||
settings:
|
||||
size: 60
|
||||
placeholder: ''
|
||||
third_party_settings: { }
|
||||
field_vignette:
|
||||
type: image_image
|
||||
weight: 0
|
||||
region: content
|
||||
settings:
|
||||
progress_indicator: throbber
|
||||
preview_image_style: thumbnail
|
||||
third_party_settings: { }
|
||||
hidden:
|
||||
created: true
|
||||
status: true
|
@ -5,7 +5,6 @@ dependencies:
|
||||
config:
|
||||
- config_pages.type.intro_gouvernance
|
||||
- field.field.config_pages.intro_gouvernance.field_intro
|
||||
- field.field.config_pages.intro_gouvernance.field_titre
|
||||
module:
|
||||
- text
|
||||
id: config_pages.intro_gouvernance.default
|
||||
@ -18,15 +17,8 @@ content:
|
||||
label: visually_hidden
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
weight: 1
|
||||
region: content
|
||||
field_titre:
|
||||
type: string
|
||||
label: above
|
||||
settings:
|
||||
link_to_entity: false
|
||||
third_party_settings: { }
|
||||
weight: 0
|
||||
region: content
|
||||
hidden:
|
||||
field_titre: true
|
||||
search_api_excerpt: true
|
||||
|
@ -1,4 +1,4 @@
|
||||
uuid: a79b589c-3286-425b-b508-38744f9ebeb1
|
||||
uuid: cad2e853-7706-4477-a3cc-d810dcd76c96
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
@ -18,7 +18,7 @@ content:
|
||||
label: visually_hidden
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
weight: 1
|
||||
weight: 0
|
||||
region: content
|
||||
field_titre:
|
||||
type: string
|
||||
@ -26,7 +26,7 @@ content:
|
||||
settings:
|
||||
link_to_entity: false
|
||||
third_party_settings: { }
|
||||
weight: 0
|
||||
weight: 1
|
||||
region: content
|
||||
hidden:
|
||||
search_api_excerpt: true
|
||||
|
@ -0,0 +1,32 @@
|
||||
uuid: 342c8cdf-4085-4e41-941f-b503beb0ad1f
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- config_pages.type.intro_ressource
|
||||
- field.field.config_pages.intro_ressource.field_intro
|
||||
- field.field.config_pages.intro_ressource.field_titre
|
||||
module:
|
||||
- text
|
||||
id: config_pages.intro_ressource.default
|
||||
targetEntityType: config_pages
|
||||
bundle: intro_ressource
|
||||
mode: default
|
||||
content:
|
||||
field_intro:
|
||||
type: text_default
|
||||
label: visually_hidden
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
weight: 0
|
||||
region: content
|
||||
field_titre:
|
||||
type: string
|
||||
label: above
|
||||
settings:
|
||||
link_to_entity: false
|
||||
third_party_settings: { }
|
||||
weight: 0
|
||||
region: content
|
||||
hidden:
|
||||
search_api_excerpt: true
|
40
config/sync/core.entity_view_display.node.equipe.default.yml
Normal file
40
config/sync/core.entity_view_display.node.equipe.default.yml
Normal file
@ -0,0 +1,40 @@
|
||||
uuid: 6c5f13b3-2cff-4094-a335-ccc5c7163003
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.field.node.equipe.body
|
||||
- field.field.node.equipe.field_personne_s
|
||||
- field.field.node.equipe.field_poid
|
||||
- node.type.equipe
|
||||
module:
|
||||
- entity_reference_revisions
|
||||
- text
|
||||
- user
|
||||
id: node.equipe.default
|
||||
targetEntityType: node
|
||||
bundle: equipe
|
||||
mode: default
|
||||
content:
|
||||
body:
|
||||
type: text_default
|
||||
label: visually_hidden
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
weight: 0
|
||||
region: content
|
||||
field_personne_s:
|
||||
type: entity_reference_revisions_entity_view
|
||||
label: visually_hidden
|
||||
settings:
|
||||
view_mode: default
|
||||
link: ''
|
||||
third_party_settings: { }
|
||||
weight: 1
|
||||
region: content
|
||||
hidden:
|
||||
field_poid: true
|
||||
footnotes_group: true
|
||||
langcode: true
|
||||
links: true
|
||||
search_api_excerpt: true
|
37
config/sync/core.entity_view_display.node.equipe.teaser.yml
Normal file
37
config/sync/core.entity_view_display.node.equipe.teaser.yml
Normal file
@ -0,0 +1,37 @@
|
||||
uuid: aef5e1f6-ce57-488c-bb21-1990e7123a67
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- core.entity_view_mode.node.teaser
|
||||
- field.field.node.equipe.body
|
||||
- field.field.node.equipe.field_personne_s
|
||||
- field.field.node.equipe.field_poid
|
||||
- node.type.equipe
|
||||
module:
|
||||
- text
|
||||
- user
|
||||
id: node.equipe.teaser
|
||||
targetEntityType: node
|
||||
bundle: equipe
|
||||
mode: teaser
|
||||
content:
|
||||
body:
|
||||
type: text_summary_or_trimmed
|
||||
label: hidden
|
||||
settings:
|
||||
trim_length: 600
|
||||
third_party_settings: { }
|
||||
weight: 101
|
||||
region: content
|
||||
links:
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
weight: 100
|
||||
region: content
|
||||
hidden:
|
||||
field_personne_s: true
|
||||
field_poid: true
|
||||
footnotes_group: true
|
||||
langcode: true
|
||||
search_api_excerpt: true
|
100
config/sync/core.entity_view_display.node.ressource.default.yml
Normal file
100
config/sync/core.entity_view_display.node.ressource.default.yml
Normal file
@ -0,0 +1,100 @@
|
||||
uuid: bf3d8317-459e-4833-8e55-9745ff540413
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.field.node.ressource.field_autheurice
|
||||
- field.field.node.ressource.field_date_ressource
|
||||
- field.field.node.ressource.field_etape
|
||||
- field.field.node.ressource.field_introduction
|
||||
- field.field.node.ressource.field_mis_en_avant
|
||||
- field.field.node.ressource.field_parties_ressource
|
||||
- field.field.node.ressource.field_thematiques
|
||||
- field.field.node.ressource.field_type_de_ressource
|
||||
- node.type.ressource
|
||||
module:
|
||||
- datetime
|
||||
- entity_reference_revisions
|
||||
- options
|
||||
- text
|
||||
- user
|
||||
id: node.ressource.default
|
||||
targetEntityType: node
|
||||
bundle: ressource
|
||||
mode: default
|
||||
content:
|
||||
field_autheurice:
|
||||
type: string
|
||||
label: above
|
||||
settings:
|
||||
link_to_entity: false
|
||||
third_party_settings: { }
|
||||
weight: 103
|
||||
region: content
|
||||
field_date_ressource:
|
||||
type: datetime_default
|
||||
label: above
|
||||
settings:
|
||||
timezone_override: ''
|
||||
format_type: medium
|
||||
third_party_settings: { }
|
||||
weight: 104
|
||||
region: content
|
||||
field_etape:
|
||||
type: entity_reference_label
|
||||
label: above
|
||||
settings:
|
||||
link: true
|
||||
third_party_settings: { }
|
||||
weight: 105
|
||||
region: content
|
||||
field_introduction:
|
||||
type: text_default
|
||||
label: above
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
weight: 107
|
||||
region: content
|
||||
field_mis_en_avant:
|
||||
type: boolean
|
||||
label: above
|
||||
settings:
|
||||
format: default
|
||||
format_custom_false: ''
|
||||
format_custom_true: ''
|
||||
third_party_settings: { }
|
||||
weight: 109
|
||||
region: content
|
||||
field_parties_ressource:
|
||||
type: entity_reference_revisions_entity_view
|
||||
label: above
|
||||
settings:
|
||||
view_mode: default
|
||||
link: ''
|
||||
third_party_settings: { }
|
||||
weight: 106
|
||||
region: content
|
||||
field_thematiques:
|
||||
type: entity_reference_label
|
||||
label: visually_hidden
|
||||
settings:
|
||||
link: true
|
||||
third_party_settings: { }
|
||||
weight: 4
|
||||
region: content
|
||||
field_type_de_ressource:
|
||||
type: list_default
|
||||
label: above
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
weight: 108
|
||||
region: content
|
||||
links:
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
weight: 100
|
||||
region: content
|
||||
hidden:
|
||||
footnotes_group: true
|
||||
langcode: true
|
||||
search_api_excerpt: true
|
@ -0,0 +1,39 @@
|
||||
uuid: 1a7f54a0-6af9-4db8-994f-8784c4fa0b0d
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- core.entity_view_mode.node.teaser
|
||||
- field.field.node.ressource.field_autheurice
|
||||
- field.field.node.ressource.field_date_ressource
|
||||
- field.field.node.ressource.field_etape
|
||||
- field.field.node.ressource.field_introduction
|
||||
- field.field.node.ressource.field_mis_en_avant
|
||||
- field.field.node.ressource.field_parties_ressource
|
||||
- field.field.node.ressource.field_thematiques
|
||||
- field.field.node.ressource.field_type_de_ressource
|
||||
- node.type.ressource
|
||||
module:
|
||||
- user
|
||||
id: node.ressource.teaser
|
||||
targetEntityType: node
|
||||
bundle: ressource
|
||||
mode: teaser
|
||||
content:
|
||||
links:
|
||||
settings: { }
|
||||
third_party_settings: { }
|
||||
weight: 100
|
||||
region: content
|
||||
hidden:
|
||||
field_autheurice: true
|
||||
field_date_ressource: true
|
||||
field_etape: true
|
||||
field_introduction: true
|
||||
field_mis_en_avant: true
|
||||
field_parties_ressource: true
|
||||
field_thematiques: true
|
||||
field_type_de_ressource: true
|
||||
footnotes_group: true
|
||||
langcode: true
|
||||
search_api_excerpt: true
|
@ -0,0 +1,75 @@
|
||||
uuid: 3e7728df-de61-4949-b50a-a220db1c6c12
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.field.paragraph.document.field_autheurice_s
|
||||
- field.field.paragraph.document.field_date
|
||||
- field.field.paragraph.document.field_document
|
||||
- field.field.paragraph.document.field_sous_titre
|
||||
- field.field.paragraph.document.field_titre
|
||||
- field.field.paragraph.document.field_vignette
|
||||
- paragraphs.paragraphs_type.document
|
||||
module:
|
||||
- datetime
|
||||
- file
|
||||
- image
|
||||
id: paragraph.document.default
|
||||
targetEntityType: paragraph
|
||||
bundle: document
|
||||
mode: default
|
||||
content:
|
||||
field_autheurice_s:
|
||||
type: string
|
||||
label: visually_hidden
|
||||
settings:
|
||||
link_to_entity: false
|
||||
third_party_settings: { }
|
||||
weight: 3
|
||||
region: content
|
||||
field_date:
|
||||
type: datetime_default
|
||||
label: visually_hidden
|
||||
settings:
|
||||
timezone_override: ''
|
||||
format_type: medium
|
||||
third_party_settings: { }
|
||||
weight: 4
|
||||
region: content
|
||||
field_document:
|
||||
type: file_default
|
||||
label: above
|
||||
settings:
|
||||
use_description_as_link_text: true
|
||||
third_party_settings: { }
|
||||
weight: 5
|
||||
region: content
|
||||
field_sous_titre:
|
||||
type: string
|
||||
label: visually_hidden
|
||||
settings:
|
||||
link_to_entity: false
|
||||
third_party_settings: { }
|
||||
weight: 2
|
||||
region: content
|
||||
field_titre:
|
||||
type: string
|
||||
label: visually_hidden
|
||||
settings:
|
||||
link_to_entity: false
|
||||
third_party_settings: { }
|
||||
weight: 1
|
||||
region: content
|
||||
field_vignette:
|
||||
type: image
|
||||
label: visually_hidden
|
||||
settings:
|
||||
image_link: ''
|
||||
image_style: ''
|
||||
image_loading:
|
||||
attribute: lazy
|
||||
third_party_settings: { }
|
||||
weight: 0
|
||||
region: content
|
||||
hidden:
|
||||
search_api_excerpt: true
|
@ -4,6 +4,7 @@ module:
|
||||
actions_permissions: 0
|
||||
address: 0
|
||||
admin_toolbar: 0
|
||||
admin_toolbar_links_access_filter: 0
|
||||
advanced_text_formatter: 0
|
||||
audiofield: 0
|
||||
autocomplete_deluxe: 0
|
||||
@ -54,6 +55,7 @@ module:
|
||||
file: 0
|
||||
filter: 0
|
||||
filter_perms: 0
|
||||
flush_single_image: 0
|
||||
footnotes: 0
|
||||
formatter_suite: 0
|
||||
geocoder: 0
|
||||
@ -67,6 +69,7 @@ module:
|
||||
image_field_caption: 0
|
||||
inline_entity_form: 0
|
||||
jsonapi: 0
|
||||
jsonapi_image_styles: 0
|
||||
jsonapi_resources: 0
|
||||
jsonapi_views: 0
|
||||
language: 0
|
||||
@ -82,6 +85,7 @@ module:
|
||||
linkit: 0
|
||||
locale: 0
|
||||
maillog: 0
|
||||
matomo: 0
|
||||
maxlength: 0
|
||||
media: 0
|
||||
menu_block: 0
|
||||
|
@ -1,4 +1,4 @@
|
||||
uuid: 3035b470-e4d9-4807-acd6-24a09525f537
|
||||
uuid: 884f84e5-faeb-4719-a083-32cb215fd311
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
|
@ -1,4 +1,4 @@
|
||||
uuid: bbddf173-169d-4977-ba3f-d1ec9f5aa452
|
||||
uuid: 00096414-fab5-4bed-ac99-b819ad041ed9
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
|
@ -0,0 +1,24 @@
|
||||
uuid: e669e2a0-7ad6-4744-9bcf-efd428aa8070
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- config_pages.type.intro_ressource
|
||||
- field.storage.config_pages.field_intro
|
||||
- filter.format.wysiwyg
|
||||
module:
|
||||
- text
|
||||
id: config_pages.intro_ressource.field_intro
|
||||
field_name: field_intro
|
||||
entity_type: config_pages
|
||||
bundle: intro_ressource
|
||||
label: Intro
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
allowed_formats:
|
||||
- wysiwyg
|
||||
field_type: text_long
|
@ -0,0 +1,19 @@
|
||||
uuid: 1a5ca231-32de-4adc-b066-22a8377bf323
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- config_pages.type.intro_ressource
|
||||
- field.storage.config_pages.field_titre
|
||||
id: config_pages.intro_ressource.field_titre
|
||||
field_name: field_titre
|
||||
entity_type: config_pages
|
||||
bundle: intro_ressource
|
||||
label: titre
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings: { }
|
||||
field_type: string
|
24
config/sync/field.field.node.equipe.body.yml
Normal file
24
config/sync/field.field.node.equipe.body.yml
Normal file
@ -0,0 +1,24 @@
|
||||
uuid: 09512770-b2ed-4ca1-a548-2f59f416c789
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.node.body
|
||||
- node.type.equipe
|
||||
module:
|
||||
- text
|
||||
id: node.equipe.body
|
||||
field_name: body
|
||||
entity_type: node
|
||||
bundle: equipe
|
||||
label: Présentation
|
||||
description: ''
|
||||
required: false
|
||||
translatable: true
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
display_summary: true
|
||||
required_summary: false
|
||||
allowed_formats: { }
|
||||
field_type: text_with_summary
|
61
config/sync/field.field.node.equipe.field_personne_s.yml
Normal file
61
config/sync/field.field.node.equipe.field_personne_s.yml
Normal file
@ -0,0 +1,61 @@
|
||||
uuid: 8198a2fc-6ac0-4d39-b72f-55dbaf51fb10
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.node.field_personne_s
|
||||
- node.type.equipe
|
||||
- paragraphs.paragraphs_type.personne
|
||||
module:
|
||||
- entity_reference_revisions
|
||||
id: node.equipe.field_personne_s
|
||||
field_name: field_personne_s
|
||||
entity_type: node
|
||||
bundle: equipe
|
||||
label: Personne(s)
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
handler: 'default:paragraph'
|
||||
handler_settings:
|
||||
target_bundles:
|
||||
personne: personne
|
||||
negate: 0
|
||||
target_bundles_drag_drop:
|
||||
carte_sensible:
|
||||
weight: 12
|
||||
enabled: false
|
||||
chiffre_cle:
|
||||
weight: 14
|
||||
enabled: false
|
||||
chiffres_cles:
|
||||
weight: 13
|
||||
enabled: false
|
||||
diaporama:
|
||||
weight: 15
|
||||
enabled: false
|
||||
entretien:
|
||||
weight: 16
|
||||
enabled: false
|
||||
entretien_question_reponse:
|
||||
weight: 17
|
||||
enabled: false
|
||||
exergue:
|
||||
weight: 18
|
||||
enabled: false
|
||||
galleries:
|
||||
weight: 19
|
||||
enabled: false
|
||||
personne:
|
||||
weight: 20
|
||||
enabled: true
|
||||
titre_texte:
|
||||
weight: 21
|
||||
enabled: false
|
||||
video:
|
||||
weight: 22
|
||||
enabled: false
|
||||
field_type: entity_reference_revisions
|
25
config/sync/field.field.node.equipe.field_poid.yml
Normal file
25
config/sync/field.field.node.equipe.field_poid.yml
Normal file
@ -0,0 +1,25 @@
|
||||
uuid: a1872697-2226-4008-a585-993279d18649
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.node.field_poid
|
||||
- node.type.equipe
|
||||
id: node.equipe.field_poid
|
||||
field_name: field_poid
|
||||
entity_type: node
|
||||
bundle: equipe
|
||||
label: Poid
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value:
|
||||
-
|
||||
value: 0
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
min: -20
|
||||
max: 20
|
||||
prefix: ''
|
||||
suffix: ''
|
||||
field_type: integer
|
19
config/sync/field.field.node.ressource.field_autheurice.yml
Normal file
19
config/sync/field.field.node.ressource.field_autheurice.yml
Normal file
@ -0,0 +1,19 @@
|
||||
uuid: 42ddeda4-ef27-484f-bdc0-e385bcdc139c
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.node.field_autheurice
|
||||
- node.type.ressource
|
||||
id: node.ressource.field_autheurice
|
||||
field_name: field_autheurice
|
||||
entity_type: node
|
||||
bundle: ressource
|
||||
label: Auteur⋅ice
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings: { }
|
||||
field_type: string
|
@ -0,0 +1,21 @@
|
||||
uuid: 1c46663f-8000-4366-9150-e03675aac525
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.node.field_date_ressource
|
||||
- node.type.ressource
|
||||
module:
|
||||
- datetime
|
||||
id: node.ressource.field_date_ressource
|
||||
field_name: field_date_ressource
|
||||
entity_type: node
|
||||
bundle: ressource
|
||||
label: Date
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings: { }
|
||||
field_type: datetime
|
29
config/sync/field.field.node.ressource.field_etape.yml
Normal file
29
config/sync/field.field.node.ressource.field_etape.yml
Normal file
@ -0,0 +1,29 @@
|
||||
uuid: 42150082-682c-4f4d-892e-1544e409eb42
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.node.field_etape
|
||||
- node.type.etape
|
||||
- node.type.ressource
|
||||
id: node.ressource.field_etape
|
||||
field_name: field_etape
|
||||
entity_type: node
|
||||
bundle: ressource
|
||||
label: Etape
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
handler: 'default:node'
|
||||
handler_settings:
|
||||
target_bundles:
|
||||
etape: etape
|
||||
sort:
|
||||
field: _none
|
||||
direction: ASC
|
||||
auto_create: false
|
||||
auto_create_bundle: ''
|
||||
field_type: entity_reference
|
@ -0,0 +1,24 @@
|
||||
uuid: a2317fba-c5ee-4c63-b2d5-5d6d8aa98685
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.node.field_introduction
|
||||
- filter.format.wysiwyg
|
||||
- node.type.ressource
|
||||
module:
|
||||
- text
|
||||
id: node.ressource.field_introduction
|
||||
field_name: field_introduction
|
||||
entity_type: node
|
||||
bundle: ressource
|
||||
label: introduction
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
allowed_formats:
|
||||
- wysiwyg
|
||||
field_type: text_long
|
@ -0,0 +1,23 @@
|
||||
uuid: 3e824533-8b04-4c3c-acb4-cdf87f40e281
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.node.field_mis_en_avant
|
||||
- node.type.ressource
|
||||
id: node.ressource.field_mis_en_avant
|
||||
field_name: field_mis_en_avant
|
||||
entity_type: node
|
||||
bundle: ressource
|
||||
label: 'mis en avant'
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value:
|
||||
-
|
||||
value: 0
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
on_label: Activé
|
||||
off_label: Désactivé
|
||||
field_type: boolean
|
@ -0,0 +1,72 @@
|
||||
uuid: 3fd63e18-4bce-4e11-a6b3-3cd627c64391
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.node.field_parties_ressource
|
||||
- node.type.ressource
|
||||
- paragraphs.paragraphs_type.diaporama
|
||||
- paragraphs.paragraphs_type.document
|
||||
- paragraphs.paragraphs_type.galleries
|
||||
- paragraphs.paragraphs_type.titre_texte
|
||||
- paragraphs.paragraphs_type.video
|
||||
module:
|
||||
- entity_reference_revisions
|
||||
id: node.ressource.field_parties_ressource
|
||||
field_name: field_parties_ressource
|
||||
entity_type: node
|
||||
bundle: ressource
|
||||
label: Parties
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
handler: 'default:paragraph'
|
||||
handler_settings:
|
||||
target_bundles:
|
||||
document: document
|
||||
diaporama: diaporama
|
||||
galleries: galleries
|
||||
titre_texte: titre_texte
|
||||
video: video
|
||||
negate: 0
|
||||
target_bundles_drag_drop:
|
||||
carte_sensible:
|
||||
weight: 14
|
||||
enabled: false
|
||||
chiffre_cle:
|
||||
weight: 16
|
||||
enabled: false
|
||||
chiffres_cles:
|
||||
weight: 15
|
||||
enabled: false
|
||||
diaporama:
|
||||
weight: 17
|
||||
enabled: true
|
||||
document:
|
||||
weight: 13
|
||||
enabled: true
|
||||
entretien:
|
||||
weight: 18
|
||||
enabled: false
|
||||
entretien_question_reponse:
|
||||
weight: 19
|
||||
enabled: false
|
||||
exergue:
|
||||
weight: 20
|
||||
enabled: false
|
||||
galleries:
|
||||
weight: 21
|
||||
enabled: true
|
||||
personne:
|
||||
weight: 22
|
||||
enabled: false
|
||||
titre_texte:
|
||||
weight: 23
|
||||
enabled: true
|
||||
video:
|
||||
weight: 24
|
||||
enabled: true
|
||||
field_type: entity_reference_revisions
|
29
config/sync/field.field.node.ressource.field_thematiques.yml
Normal file
29
config/sync/field.field.node.ressource.field_thematiques.yml
Normal file
@ -0,0 +1,29 @@
|
||||
uuid: 087a6777-c29f-4d0c-aad0-98ffe3e65ab7
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.node.field_thematiques
|
||||
- node.type.ressource
|
||||
- taxonomy.vocabulary.thematiques
|
||||
id: node.ressource.field_thematiques
|
||||
field_name: field_thematiques
|
||||
entity_type: node
|
||||
bundle: ressource
|
||||
label: Thématiques
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
handler: 'default:taxonomy_term'
|
||||
handler_settings:
|
||||
target_bundles:
|
||||
thematiques: thematiques
|
||||
sort:
|
||||
field: name
|
||||
direction: asc
|
||||
auto_create: false
|
||||
auto_create_bundle: ''
|
||||
field_type: entity_reference
|
@ -0,0 +1,21 @@
|
||||
uuid: e439dc6f-3fc5-40cb-b615-f95c5a22a6f9
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.node.field_type_de_ressource
|
||||
- node.type.ressource
|
||||
module:
|
||||
- options
|
||||
id: node.ressource.field_type_de_ressource
|
||||
field_name: field_type_de_ressource
|
||||
entity_type: node
|
||||
bundle: ressource
|
||||
label: 'Type de ressource'
|
||||
description: ''
|
||||
required: true
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings: { }
|
||||
field_type: list_string
|
@ -0,0 +1,19 @@
|
||||
uuid: bf0364b9-e5ee-4bd5-b229-4935d7284e8a
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.paragraph.field_autheurice_s
|
||||
- paragraphs.paragraphs_type.document
|
||||
id: paragraph.document.field_autheurice_s
|
||||
field_name: field_autheurice_s
|
||||
entity_type: paragraph
|
||||
bundle: document
|
||||
label: Autheur⋅ice(s)
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings: { }
|
||||
field_type: string
|
21
config/sync/field.field.paragraph.document.field_date.yml
Normal file
21
config/sync/field.field.paragraph.document.field_date.yml
Normal file
@ -0,0 +1,21 @@
|
||||
uuid: 3fe468b5-dc03-47d8-a4eb-eb9fa6b51ea9
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.paragraph.field_date
|
||||
- paragraphs.paragraphs_type.document
|
||||
module:
|
||||
- datetime
|
||||
id: paragraph.document.field_date
|
||||
field_name: field_date
|
||||
entity_type: paragraph
|
||||
bundle: document
|
||||
label: Date
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings: { }
|
||||
field_type: datetime
|
@ -0,0 +1,27 @@
|
||||
uuid: 68276064-4601-4b82-a6b5-336faf39a572
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.paragraph.field_document
|
||||
- paragraphs.paragraphs_type.document
|
||||
module:
|
||||
- file
|
||||
id: paragraph.document.field_document
|
||||
field_name: field_document
|
||||
entity_type: paragraph
|
||||
bundle: document
|
||||
label: Document
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
handler: 'default:file'
|
||||
handler_settings: { }
|
||||
file_directory: '[date:custom:Y]-[date:custom:m]'
|
||||
file_extensions: 'pdf doc docx odt zip'
|
||||
max_filesize: ''
|
||||
description_field: true
|
||||
field_type: file
|
@ -0,0 +1,19 @@
|
||||
uuid: cddd8fbd-4397-41b9-9dde-5d018b91bf5f
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.paragraph.field_sous_titre
|
||||
- paragraphs.paragraphs_type.document
|
||||
id: paragraph.document.field_sous_titre
|
||||
field_name: field_sous_titre
|
||||
entity_type: paragraph
|
||||
bundle: document
|
||||
label: Sous-titre
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings: { }
|
||||
field_type: string
|
19
config/sync/field.field.paragraph.document.field_titre.yml
Normal file
19
config/sync/field.field.paragraph.document.field_titre.yml
Normal file
@ -0,0 +1,19 @@
|
||||
uuid: f697951d-0042-4a72-bc0d-53251f0f8f37
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.paragraph.field_titre
|
||||
- paragraphs.paragraphs_type.document
|
||||
id: paragraph.document.field_titre
|
||||
field_name: field_titre
|
||||
entity_type: paragraph
|
||||
bundle: document
|
||||
label: Titre
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings: { }
|
||||
field_type: string
|
@ -0,0 +1,41 @@
|
||||
uuid: 9ff673ba-4d36-4621-9eef-4c362d689788
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- field.storage.paragraph.field_vignette
|
||||
- paragraphs.paragraphs_type.document
|
||||
module:
|
||||
- image
|
||||
id: paragraph.document.field_vignette
|
||||
field_name: field_vignette
|
||||
entity_type: paragraph
|
||||
bundle: document
|
||||
label: Vignette
|
||||
description: ''
|
||||
required: false
|
||||
translatable: false
|
||||
default_value: { }
|
||||
default_value_callback: ''
|
||||
settings:
|
||||
handler: 'default:file'
|
||||
handler_settings: { }
|
||||
file_directory: '[date:custom:Y]-[date:custom:m]'
|
||||
file_extensions: 'png gif jpg jpeg webp'
|
||||
max_filesize: ''
|
||||
max_resolution: ''
|
||||
min_resolution: ''
|
||||
alt_field: true
|
||||
alt_field_required: true
|
||||
title_field: false
|
||||
title_field_required: false
|
||||
default_image:
|
||||
uuid: ''
|
||||
alt: ''
|
||||
title: ''
|
||||
width: null
|
||||
height: null
|
||||
caption: ''
|
||||
caption_field: 0
|
||||
caption_field_required: 0
|
||||
field_type: image
|
21
config/sync/field.storage.node.field_autheurice.yml
Normal file
21
config/sync/field.storage.node.field_autheurice.yml
Normal file
@ -0,0 +1,21 @@
|
||||
uuid: b296abc1-35b8-4a42-9ecc-01b24f689d64
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- node
|
||||
id: node.field_autheurice
|
||||
field_name: field_autheurice
|
||||
entity_type: node
|
||||
type: string
|
||||
settings:
|
||||
max_length: 255
|
||||
case_sensitive: false
|
||||
is_ascii: false
|
||||
module: core
|
||||
locked: false
|
||||
cardinality: 1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
20
config/sync/field.storage.node.field_date_ressource.yml
Normal file
20
config/sync/field.storage.node.field_date_ressource.yml
Normal file
@ -0,0 +1,20 @@
|
||||
uuid: 067cb21a-63e7-4ec0-9e84-d94aa05a90ad
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- datetime
|
||||
- node
|
||||
id: node.field_date_ressource
|
||||
field_name: field_date_ressource
|
||||
entity_type: node
|
||||
type: datetime
|
||||
settings:
|
||||
datetime_type: date
|
||||
module: datetime
|
||||
locked: false
|
||||
cardinality: 1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
19
config/sync/field.storage.node.field_etape.yml
Normal file
19
config/sync/field.storage.node.field_etape.yml
Normal file
@ -0,0 +1,19 @@
|
||||
uuid: 9d4c41d9-887c-4d7a-aa95-a3c02c49cb51
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- node
|
||||
id: node.field_etape
|
||||
field_name: field_etape
|
||||
entity_type: node
|
||||
type: entity_reference
|
||||
settings:
|
||||
target_type: node
|
||||
module: core
|
||||
locked: false
|
||||
cardinality: 1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
19
config/sync/field.storage.node.field_introduction.yml
Normal file
19
config/sync/field.storage.node.field_introduction.yml
Normal file
@ -0,0 +1,19 @@
|
||||
uuid: 6646cf31-1641-44c2-ad7d-776506b27e89
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- node
|
||||
- text
|
||||
id: node.field_introduction
|
||||
field_name: field_introduction
|
||||
entity_type: node
|
||||
type: text_long
|
||||
settings: { }
|
||||
module: text
|
||||
locked: false
|
||||
cardinality: 1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
18
config/sync/field.storage.node.field_mis_en_avant.yml
Normal file
18
config/sync/field.storage.node.field_mis_en_avant.yml
Normal file
@ -0,0 +1,18 @@
|
||||
uuid: e92021e0-c606-4e50-b042-012920aa6341
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- node
|
||||
id: node.field_mis_en_avant
|
||||
field_name: field_mis_en_avant
|
||||
entity_type: node
|
||||
type: boolean
|
||||
settings: { }
|
||||
module: core
|
||||
locked: false
|
||||
cardinality: 1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
21
config/sync/field.storage.node.field_parties_ressource.yml
Normal file
21
config/sync/field.storage.node.field_parties_ressource.yml
Normal file
@ -0,0 +1,21 @@
|
||||
uuid: b2aa7bc8-95a8-4260-81d3-78c515ff2fd8
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- entity_reference_revisions
|
||||
- node
|
||||
- paragraphs
|
||||
id: node.field_parties_ressource
|
||||
field_name: field_parties_ressource
|
||||
entity_type: node
|
||||
type: entity_reference_revisions
|
||||
settings:
|
||||
target_type: paragraph
|
||||
module: entity_reference_revisions
|
||||
locked: false
|
||||
cardinality: -1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
33
config/sync/field.storage.node.field_type_de_ressource.yml
Normal file
33
config/sync/field.storage.node.field_type_de_ressource.yml
Normal file
@ -0,0 +1,33 @@
|
||||
uuid: be6b9eb9-d827-4adc-9106-e7c31b94aff6
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- node
|
||||
- options
|
||||
id: node.field_type_de_ressource
|
||||
field_name: field_type_de_ressource
|
||||
entity_type: node
|
||||
type: list_string
|
||||
settings:
|
||||
allowed_values:
|
||||
-
|
||||
value: cartes_blanches
|
||||
label: 'Cartes blanches'
|
||||
-
|
||||
value: reportages
|
||||
label: Reportages
|
||||
-
|
||||
value: videos
|
||||
label: Videos
|
||||
-
|
||||
value: documents
|
||||
label: Documents
|
||||
allowed_values_function: ''
|
||||
module: options
|
||||
locked: false
|
||||
cardinality: 1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
21
config/sync/field.storage.paragraph.field_autheurice_s.yml
Normal file
21
config/sync/field.storage.paragraph.field_autheurice_s.yml
Normal file
@ -0,0 +1,21 @@
|
||||
uuid: dbcf9d2c-90f4-4678-9bba-30ea2f7ffdb3
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- paragraphs
|
||||
id: paragraph.field_autheurice_s
|
||||
field_name: field_autheurice_s
|
||||
entity_type: paragraph
|
||||
type: string
|
||||
settings:
|
||||
max_length: 255
|
||||
case_sensitive: false
|
||||
is_ascii: false
|
||||
module: core
|
||||
locked: false
|
||||
cardinality: 1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
20
config/sync/field.storage.paragraph.field_date.yml
Normal file
20
config/sync/field.storage.paragraph.field_date.yml
Normal file
@ -0,0 +1,20 @@
|
||||
uuid: 2d35b014-4b74-436b-8325-53f1cffa1ed9
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- datetime
|
||||
- paragraphs
|
||||
id: paragraph.field_date
|
||||
field_name: field_date
|
||||
entity_type: paragraph
|
||||
type: datetime
|
||||
settings:
|
||||
datetime_type: date
|
||||
module: datetime
|
||||
locked: false
|
||||
cardinality: 1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
23
config/sync/field.storage.paragraph.field_document.yml
Normal file
23
config/sync/field.storage.paragraph.field_document.yml
Normal file
@ -0,0 +1,23 @@
|
||||
uuid: 781e5561-6299-4ce5-a4e4-72211d29087a
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- file
|
||||
- paragraphs
|
||||
id: paragraph.field_document
|
||||
field_name: field_document
|
||||
entity_type: paragraph
|
||||
type: file
|
||||
settings:
|
||||
target_type: file
|
||||
display_field: true
|
||||
display_default: true
|
||||
uri_scheme: public
|
||||
module: file
|
||||
locked: false
|
||||
cardinality: 1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
21
config/sync/field.storage.paragraph.field_sous_titre.yml
Normal file
21
config/sync/field.storage.paragraph.field_sous_titre.yml
Normal file
@ -0,0 +1,21 @@
|
||||
uuid: 79dede5a-213c-470a-a235-f2813301a849
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- paragraphs
|
||||
id: paragraph.field_sous_titre
|
||||
field_name: field_sous_titre
|
||||
entity_type: paragraph
|
||||
type: string
|
||||
settings:
|
||||
max_length: 255
|
||||
case_sensitive: false
|
||||
is_ascii: false
|
||||
module: core
|
||||
locked: false
|
||||
cardinality: 1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
30
config/sync/field.storage.paragraph.field_vignette.yml
Normal file
30
config/sync/field.storage.paragraph.field_vignette.yml
Normal file
@ -0,0 +1,30 @@
|
||||
uuid: 6bfd41d2-f70a-4da3-b7a9-44182e168607
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- file
|
||||
- image
|
||||
- paragraphs
|
||||
id: paragraph.field_vignette
|
||||
field_name: field_vignette
|
||||
entity_type: paragraph
|
||||
type: image
|
||||
settings:
|
||||
target_type: file
|
||||
display_field: false
|
||||
display_default: false
|
||||
uri_scheme: public
|
||||
default_image:
|
||||
uuid: ''
|
||||
alt: ''
|
||||
title: ''
|
||||
width: null
|
||||
height: null
|
||||
module: image
|
||||
locked: false
|
||||
cardinality: 1
|
||||
translatable: true
|
||||
indexes: { }
|
||||
persist_with_no_fields: false
|
||||
custom_storage: false
|
15
config/sync/image.style.content_large.yml
Normal file
15
config/sync/image.style.content_large.yml
Normal file
@ -0,0 +1,15 @@
|
||||
uuid: 51021857-f408-4a97-96ac-95916834465c
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies: { }
|
||||
name: content_large
|
||||
label: content-large
|
||||
effects:
|
||||
9e838862-ccce-4fff-8f63-836c9dbf3da8:
|
||||
uuid: 9e838862-ccce-4fff-8f63-836c9dbf3da8
|
||||
id: image_scale
|
||||
weight: 1
|
||||
data:
|
||||
width: 2048
|
||||
height: null
|
||||
upscale: false
|
15
config/sync/image.style.content_medium.yml
Normal file
15
config/sync/image.style.content_medium.yml
Normal file
@ -0,0 +1,15 @@
|
||||
uuid: 39e71e90-a87c-43de-b679-ba663dcb1e9a
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies: { }
|
||||
name: content_medium
|
||||
label: content-medium
|
||||
effects:
|
||||
9430838c-1da4-412b-ade1-d6e02ab9ecd2:
|
||||
uuid: 9430838c-1da4-412b-ade1-d6e02ab9ecd2
|
||||
id: image_scale
|
||||
weight: 1
|
||||
data:
|
||||
width: 1024
|
||||
height: null
|
||||
upscale: false
|
15
config/sync/image.style.content_small.yml
Normal file
15
config/sync/image.style.content_small.yml
Normal file
@ -0,0 +1,15 @@
|
||||
uuid: f77750f4-4cb6-4cdb-9796-4acfa169105a
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies: { }
|
||||
name: content_small
|
||||
label: content-small
|
||||
effects:
|
||||
d2acf93c-5264-4ce5-a11c-bfaeaa7a7279:
|
||||
uuid: d2acf93c-5264-4ce5-a11c-bfaeaa7a7279
|
||||
id: image_scale
|
||||
weight: 1
|
||||
data:
|
||||
width: 512
|
||||
height: null
|
||||
upscale: false
|
15
config/sync/image.style.content_x_large.yml
Normal file
15
config/sync/image.style.content_x_large.yml
Normal file
@ -0,0 +1,15 @@
|
||||
uuid: fd11611a-e6eb-4843-b104-982932b90392
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies: { }
|
||||
name: content_x_large
|
||||
label: 'content x-large'
|
||||
effects:
|
||||
7bc2e7f9-1c41-4d60-85b3-16a795691e3e:
|
||||
uuid: 7bc2e7f9-1c41-4d60-85b3-16a795691e3e
|
||||
id: image_scale
|
||||
weight: 1
|
||||
data:
|
||||
width: 2500
|
||||
height: null
|
||||
upscale: false
|
12
config/sync/jsonapi_image_styles.settings.yml
Normal file
12
config/sync/jsonapi_image_styles.settings.yml
Normal file
@ -0,0 +1,12 @@
|
||||
_core:
|
||||
default_config_hash: wOZVD8Wsf3NSSsAU36-FVkO7zaC4TgH_Buj0Up6vHYQ
|
||||
image_styles:
|
||||
content_large: content_large
|
||||
content_medium: content_medium
|
||||
content_small: content_small
|
||||
content_x_large: content_x_large
|
||||
large: '0'
|
||||
linkit_result_thumbnail: '0'
|
||||
medium: '0'
|
||||
thumbnail: '0'
|
||||
wide: '0'
|
11
config/sync/language.content_settings.node.equipe.yml
Normal file
11
config/sync/language.content_settings.node.equipe.yml
Normal file
@ -0,0 +1,11 @@
|
||||
uuid: 04893961-9641-44e5-8b17-4d5b0bbab8c9
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- node.type.equipe
|
||||
id: node.equipe
|
||||
target_entity_type_id: node
|
||||
target_bundle: equipe
|
||||
default_langcode: site_default
|
||||
language_alterable: false
|
11
config/sync/language.content_settings.node.ressource.yml
Normal file
11
config/sync/language.content_settings.node.ressource.yml
Normal file
@ -0,0 +1,11 @@
|
||||
uuid: 0df50a36-6f55-483f-8ce0-3d7925fe9e3a
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- node.type.ressource
|
||||
id: node.ressource
|
||||
target_entity_type_id: node
|
||||
target_bundle: ressource
|
||||
default_langcode: site_default
|
||||
language_alterable: false
|
@ -0,0 +1,11 @@
|
||||
uuid: 262f5172-e9c1-4397-9181-20adc7c5d424
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
config:
|
||||
- taxonomy.vocabulary.type_de_ressource
|
||||
id: taxonomy_term.type_de_ressource
|
||||
target_entity_type_id: taxonomy_term
|
||||
target_bundle: type_de_ressource
|
||||
default_langcode: site_default
|
||||
language_alterable: false
|
59
config/sync/matomo.settings.yml
Normal file
59
config/sync/matomo.settings.yml
Normal file
@ -0,0 +1,59 @@
|
||||
_core:
|
||||
default_config_hash: mKwnhF-0ryfftZZP6jyqW8q9MEo9glyRkvRzSddrc0k
|
||||
site_id: '9'
|
||||
url_http: 'http://analytics.figureslibres.io/'
|
||||
url_https: 'https://analytics.figureslibres.io/'
|
||||
domain_mode: 0
|
||||
visibility:
|
||||
request_path_mode: 0
|
||||
request_path_pages: "/admin\r\n/admin/*\r\n/batch\r\n/node/add*\r\n/node/*/*\r\n/user/*/*"
|
||||
user_role_mode: 0
|
||||
user_role_roles: { }
|
||||
user_account_mode: 1
|
||||
track:
|
||||
mailto: true
|
||||
files: true
|
||||
files_extensions: '7z|aac|arc|arj|asf|asx|avi|bin|csv|doc(x|m)?|dot(x|m)?|exe|flv|gif|gz|gzip|hqx|jar|jpe?g|js|mp(2|3|4|e?g)|mov(ie)?|msi|msp|pdf|phps|png|ppt(x|m)?|pot(x|m)?|pps(x|m)?|ppam|sld(x|m)?|thmx|qtm?|ra(m|r)?|sea|sit|tar|tgz|torrent|txt|wav|wma|wmv|wpd|xls(x|m|b)?|xlt(x|m)|xlam|xml|z|zip'
|
||||
colorbox: true
|
||||
userid: false
|
||||
messages: { }
|
||||
site_search: false
|
||||
privacy:
|
||||
donottrack: true
|
||||
disablecookies: false
|
||||
custom:
|
||||
variable:
|
||||
1:
|
||||
slot: 1
|
||||
name: ''
|
||||
value: ''
|
||||
scope: visit
|
||||
2:
|
||||
slot: 2
|
||||
name: ''
|
||||
value: ''
|
||||
scope: visit
|
||||
3:
|
||||
slot: 3
|
||||
name: ''
|
||||
value: ''
|
||||
scope: visit
|
||||
4:
|
||||
slot: 4
|
||||
name: ''
|
||||
value: ''
|
||||
scope: visit
|
||||
5:
|
||||
slot: 5
|
||||
name: ''
|
||||
value: ''
|
||||
scope: visit
|
||||
codesnippet:
|
||||
before: ''
|
||||
after: ''
|
||||
translation_set: false
|
||||
disable_tracking: false
|
||||
cache: false
|
||||
page_title_hierarchy: false
|
||||
page_title_hierarchy_exclude_home: true
|
||||
status_codes_disabled: { }
|
17
config/sync/node.type.equipe.yml
Normal file
17
config/sync/node.type.equipe.yml
Normal file
@ -0,0 +1,17 @@
|
||||
uuid: 6e81bafe-2667-41ed-aa55-4125cbe6e4ff
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- menu_ui
|
||||
third_party_settings:
|
||||
menu_ui:
|
||||
available_menus: { }
|
||||
parent: ''
|
||||
name: Equipe
|
||||
type: equipe
|
||||
description: null
|
||||
help: null
|
||||
new_revision: true
|
||||
preview_mode: 0
|
||||
display_submitted: false
|
18
config/sync/node.type.ressource.yml
Normal file
18
config/sync/node.type.ressource.yml
Normal file
@ -0,0 +1,18 @@
|
||||
uuid: d5f38b26-d2fa-476c-a7ef-b3e010ef54c8
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- menu_ui
|
||||
third_party_settings:
|
||||
menu_ui:
|
||||
available_menus:
|
||||
- main
|
||||
parent: 'main:'
|
||||
name: Ressource
|
||||
type: ressource
|
||||
description: null
|
||||
help: null
|
||||
new_revision: true
|
||||
preview_mode: 0
|
||||
display_submitted: false
|
10
config/sync/paragraphs.paragraphs_type.document.yml
Normal file
10
config/sync/paragraphs.paragraphs_type.document.yml
Normal file
@ -0,0 +1,10 @@
|
||||
uuid: 1de180fd-c057-4065-9006-597f51b0959c
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies: { }
|
||||
id: document
|
||||
label: Document
|
||||
icon_uuid: null
|
||||
icon_default: null
|
||||
description: ''
|
||||
behavior_plugins: { }
|
@ -14,7 +14,7 @@ smtp_from: ''
|
||||
smtp_fromname: ''
|
||||
smtp_client_hostname: ''
|
||||
smtp_client_helo: ''
|
||||
smtp_allowhtml: ''
|
||||
smtp_allowhtml: false
|
||||
smtp_test_address: ''
|
||||
smtp_reroute_address: ''
|
||||
smtp_debugging: false
|
||||
|
@ -4,7 +4,7 @@ favicon:
|
||||
mimetype: image/vnd.microsoft.icon
|
||||
path: ''
|
||||
url: ''
|
||||
use_default: true
|
||||
use_default: false
|
||||
features:
|
||||
comment_user_picture: true
|
||||
comment_user_verification: true
|
||||
|
9
config/sync/taxonomy.vocabulary.type_de_ressource.yml
Normal file
9
config/sync/taxonomy.vocabulary.type_de_ressource.yml
Normal file
@ -0,0 +1,9 @@
|
||||
uuid: 53ccb1e6-b330-4dac-8eb8-8ef6f79d2c7a
|
||||
langcode: fr
|
||||
status: true
|
||||
dependencies: { }
|
||||
name: 'Type de ressource'
|
||||
vid: type_de_ressource
|
||||
description: null
|
||||
weight: 0
|
||||
new_revision: false
|
@ -20,4 +20,5 @@ permissions:
|
||||
- 'restful get rest_menu_item'
|
||||
- 'view intro_gouvernance config page entity'
|
||||
- 'view intro_partenaire config page entity'
|
||||
- 'view intro_ressource config page entity'
|
||||
- 'view media'
|
||||
|
@ -10,20 +10,23 @@ dependencies:
|
||||
module:
|
||||
- config_pages
|
||||
- filter
|
||||
- matomo
|
||||
- media
|
||||
- rest
|
||||
- system
|
||||
_core:
|
||||
default_config_hash: dJ0L2DNSj5q6XVZAGsuVDpJTh5UeYkIPwKrUOOpr8YI
|
||||
id: authenticated
|
||||
label: 'Utilisateur authentifié'
|
||||
label: 'Authenticated user'
|
||||
weight: 1
|
||||
is_admin: false
|
||||
permissions:
|
||||
- 'access content'
|
||||
- 'opt-in or out of matomo tracking'
|
||||
- 'restful get rest_menu_item'
|
||||
- 'use text format footnote'
|
||||
- 'use text format simple'
|
||||
- 'use text format wysiwyg'
|
||||
- 'view intro_gouvernance config page entity'
|
||||
- 'view intro_partenaires config page entity'
|
||||
- 'view media'
|
||||
|
@ -6,9 +6,11 @@ dependencies:
|
||||
- filter.format.footnote
|
||||
- filter.format.simple
|
||||
- filter.format.wysiwyg
|
||||
- node.type.equipe
|
||||
- node.type.etape
|
||||
- node.type.gallerie_photo
|
||||
- node.type.partenaire
|
||||
- node.type.ressource
|
||||
- node.type.static
|
||||
- taxonomy.vocabulary.saisons
|
||||
- taxonomy.vocabulary.thematiques
|
||||
@ -33,38 +35,51 @@ permissions:
|
||||
- 'administer nodes'
|
||||
- 'break content lock'
|
||||
- 'change own username'
|
||||
- 'create equipe content'
|
||||
- 'create etape content'
|
||||
- 'create gallerie_photo content'
|
||||
- 'create partenaire content'
|
||||
- 'create ressource content'
|
||||
- 'create terms in saisons'
|
||||
- 'create terms in thematiques'
|
||||
- 'delete equipe revisions'
|
||||
- 'delete etape revisions'
|
||||
- 'delete gallerie_photo revisions'
|
||||
- 'delete partenaire revisions'
|
||||
- 'delete ressource revisions'
|
||||
- 'delete static revisions'
|
||||
- 'delete terms in saisons'
|
||||
- 'delete terms in thematiques'
|
||||
- 'edit any equipe content'
|
||||
- 'edit any etape content'
|
||||
- 'edit any gallerie_photo content'
|
||||
- 'edit any partenaire content'
|
||||
- 'edit any ressource content'
|
||||
- 'edit any static content'
|
||||
- 'edit intro_gouvernance config page entity'
|
||||
- 'edit intro_partenaires config page entity'
|
||||
- 'edit own equipe content'
|
||||
- 'edit own etape content'
|
||||
- 'edit own gallerie_photo content'
|
||||
- 'edit own partenaire content'
|
||||
- 'edit own ressource content'
|
||||
- 'edit own static content'
|
||||
- 'edit terms in saisons'
|
||||
- 'edit terms in thematiques'
|
||||
- 'revert equipe revisions'
|
||||
- 'revert etape revisions'
|
||||
- 'revert gallerie_photo revisions'
|
||||
- 'revert partenaire revisions'
|
||||
- 'revert ressource revisions'
|
||||
- 'revert static revisions'
|
||||
- 'use text format footnote'
|
||||
- 'use text format simple'
|
||||
- 'use text format wysiwyg'
|
||||
- 'view equipe revisions'
|
||||
- 'view etape revisions'
|
||||
- 'view gallerie_photo revisions'
|
||||
- 'view partenaire revisions'
|
||||
- 'view ressource revisions'
|
||||
- 'view static revisions'
|
||||
- 'view the administration theme'
|
||||
- 'view unpublished paragraphs'
|
||||
|
@ -1,6 +1,7 @@
|
||||
_core:
|
||||
default_config_hash: RzCmzrx-T-Sy8JX5OmtGKV_V_MxRlrxRkrI9c9igTHI
|
||||
display_extenders: { }
|
||||
display_extenders:
|
||||
- matomo
|
||||
sql_signature: false
|
||||
ui:
|
||||
show:
|
||||
|
@ -284,7 +284,7 @@ display:
|
||||
popupAnchor:
|
||||
x: ''
|
||||
'y': ''
|
||||
html: "<div></div>\r\n<div></div>\r\n<div></div>\r\n<div class=\"url\">[node:url]</div>\r\n<div class=\"couleur\">[node:field_couleur]</div>"
|
||||
html: "<div class=\"url\">[node:url]</div>\r\n<div class=\"couleur\">[node:field_couleur]</div>"
|
||||
html_class: 'leaflet-map-divicon '
|
||||
circle_marker_options: '{"radius":100,"color":"red","fillColor":"#f03","fillOpacity":0.5}'
|
||||
leaflet_markercluster:
|
||||
@ -299,6 +299,7 @@ display:
|
||||
geocoder:
|
||||
control: false
|
||||
settings:
|
||||
popup: false
|
||||
autocomplete:
|
||||
placeholder: 'Search Address'
|
||||
title: 'Search an Address on the Map'
|
||||
@ -311,7 +312,6 @@ display:
|
||||
min_terms: 4
|
||||
delay: 800
|
||||
zoom: 16
|
||||
popup: false
|
||||
options: ''
|
||||
map_lazy_load:
|
||||
lazy_load: true
|
||||
@ -1195,7 +1195,18 @@ display:
|
||||
defaults:
|
||||
fields: false
|
||||
display_description: ''
|
||||
display_extenders: { }
|
||||
display_extenders:
|
||||
matomo:
|
||||
enabled: false
|
||||
keyword_gets: ''
|
||||
keyword_behavior: first
|
||||
keyword_concat_separator: ' '
|
||||
category_behavior: none
|
||||
category_gets: ''
|
||||
category_concat_separator: ' '
|
||||
category_fallback: ''
|
||||
category_facets: { }
|
||||
category_facets_concat_separator: ', '
|
||||
cache_metadata:
|
||||
max-age: -1
|
||||
contexts:
|
||||
|
@ -200,7 +200,7 @@ display:
|
||||
type: normal
|
||||
title: 'Les partenaires'
|
||||
description: ''
|
||||
weight: -48
|
||||
weight: -47
|
||||
expanded: false
|
||||
menu_name: main
|
||||
parent: ''
|
||||
|
4
readme.md
Normal file
4
readme.md
Normal file
@ -0,0 +1,4 @@
|
||||
## Routing flow
|
||||
|
||||

|
||||

|
@ -0,0 +1,23 @@
|
||||
export default function (L) {
|
||||
L.EdgeBuffer = {
|
||||
previousMethods: {
|
||||
getTiledPixelBounds: L.GridLayer.prototype._getTiledPixelBounds,
|
||||
}
|
||||
};
|
||||
|
||||
L.GridLayer.include({
|
||||
_getTiledPixelBounds: function (center, zoom, tileZoom) {
|
||||
var pixelBounds = L.EdgeBuffer.previousMethods.getTiledPixelBounds.call(this, center, zoom, tileZoom);
|
||||
|
||||
var edgeBufferTiles = this.options.edgeBufferTiles ?? 1;
|
||||
if (edgeBufferTiles > 0) {
|
||||
var pixelEdgeBuffer = L.GridLayer.prototype.getTileSize.call(this).multiplyBy(edgeBufferTiles);
|
||||
pixelBounds = new L.Bounds(pixelBounds.min.subtract(pixelEdgeBuffer), pixelBounds.max.add(pixelEdgeBuffer));
|
||||
}
|
||||
return pixelBounds;
|
||||
}
|
||||
});
|
||||
|
||||
return L;
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
import { initVueContentModale } from './utils/vue-setup';
|
||||
import { processClickableElements } from './utils/process-clickable-elements';
|
||||
import { handleReactiveness, setMenuToggle, setHamburgerWhenLogged } from './utils/layout-setup';
|
||||
import { handleReactiveness, setMenuToggle, setRightSectionsWhenLogged } from './utils/layout-setup';
|
||||
import { initFirstLoadRouting, handleClickableElements, handleBrowserNavigation } from './utils/handle-navigation';
|
||||
import { setupMapStore } from './utils/map-setup';
|
||||
import { setupMapStore, preloadEtapesTiles } from './utils/map-setup';
|
||||
|
||||
import initEdgeBuffer from './libs/leaflet.edgebuffer';
|
||||
|
||||
import '../scss/main.scss'
|
||||
|
||||
@ -10,44 +12,52 @@ import '../scss/main.scss'
|
||||
|
||||
(function ($, Drupal, drupalSettings) {
|
||||
const CaravaneTheme = function () {
|
||||
function init () {
|
||||
console.log('DrupalSettings', drupalSettings);
|
||||
|
||||
function init () {
|
||||
// console.log('DrupalSettings', drupalSettings);
|
||||
|
||||
const baseUrl = window.location.protocol + "//" + window.location.host;
|
||||
const siteName = document.querySelector('#site_name').innerText;
|
||||
const { store, mapStore, router, route } = initVueContentModale();
|
||||
const router = initVueContentModale();
|
||||
|
||||
handleReactiveness();
|
||||
setMenuToggle();
|
||||
setHamburgerWhenLogged(drupalSettings);
|
||||
setRightSectionsWhenLogged(drupalSettings);
|
||||
|
||||
// https://www.drupal.org/docs/extending-drupal/contributed-modules/contributed-module-documentation/leaflet/leaflet-api
|
||||
|
||||
Drupal.behaviors.customLeafletInteraction = {
|
||||
attach: function(context, settings) {
|
||||
$(context).on('leafletMapInit', function (e, settings, map, mapid, markers) {
|
||||
|
||||
initEdgeBuffer(L);
|
||||
let mapSettings = settings.leaflet[Object.keys(settings.leaflet)[0]].map;
|
||||
mapSettings.layers.layer.edgeBufferTiles = 1;
|
||||
// mapSettings.settings.fadeAnimation = false;
|
||||
|
||||
$(context).on('leafletMapInit', function (e, settings, map, mapid, markers) {
|
||||
const {
|
||||
etapeListLinks,
|
||||
generalListLinks,
|
||||
logoLink,
|
||||
mapIcons,
|
||||
mapContainer,
|
||||
} = processClickableElements();
|
||||
const clickableElements = [...etapeListLinks, ...generalListLinks, logoLink, ...mapIcons];
|
||||
const clickableElements = [...etapeListLinks, ...generalListLinks, logoLink, ...mapIcons, mapContainer];
|
||||
|
||||
setupMapStore(mapStore, map, settings);
|
||||
setupMapStore(map, settings);
|
||||
|
||||
initFirstLoadRouting(store, router, baseUrl, siteName);
|
||||
// preloadEtapesTiles(map);
|
||||
|
||||
handleClickableElements(clickableElements, store, router, baseUrl, siteName, mapStore);
|
||||
initFirstLoadRouting(router, baseUrl, siteName);
|
||||
|
||||
handleClickableElements(clickableElements, router, baseUrl, siteName);
|
||||
|
||||
window.addEventListener("popstate", () => {
|
||||
handleBrowserNavigation(store, baseUrl, siteName, mapStore);
|
||||
handleBrowserNavigation(baseUrl, siteName);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init()
|
||||
}
|
||||
CaravaneTheme()
|
||||
|
@ -1,326 +1,80 @@
|
||||
// query et traitement des contenus
|
||||
|
||||
import { defineStore } from 'pinia';
|
||||
import REST from '../api/rest-axios';
|
||||
|
||||
import { useLayoutStore } from './layout';
|
||||
import { findContentByPath } from '../utils/content/findContentByPath';
|
||||
import { fetchSingletonFullContent, fetchSingletonPartialContent } from '../utils/content/fetchSingleton';
|
||||
import { fetchMultipleFullContent, fetchMultiplePartialContent } from '../utils/content/fetchMultiple';
|
||||
|
||||
export const useContentStore = defineStore('content', {
|
||||
state: () => ({
|
||||
contentType: '',
|
||||
rawContent: {},
|
||||
pageTitle: '',
|
||||
content: {
|
||||
contentTitle: '',
|
||||
coordinates: {},
|
||||
adresse: {},
|
||||
etape_number: '',
|
||||
couleur: '',
|
||||
dates: {},
|
||||
previous : {},
|
||||
next: {},
|
||||
vignette: {},
|
||||
parties: [],
|
||||
|
||||
intro: '',
|
||||
partenaires: [],
|
||||
gouvernances: [],
|
||||
},
|
||||
content: {},
|
||||
partialLoading: false,
|
||||
loading: false,
|
||||
error: null,
|
||||
}),
|
||||
actions: {
|
||||
async fetchContentData(path) {
|
||||
// pages etape, statiques et ressource ont un seul item par page (singuliers)
|
||||
// pages gouvernance (contact), ressources et partenaire ont plusieurs items par pages (multiples)
|
||||
async fetchPartialContentData(path) {
|
||||
this.resetStore(false);
|
||||
const contentTypes = [ 'etape', 'static', 'gouvernance', 'partenaire' ];
|
||||
const contentTypes = ['etape', 'static', 'gouvernance', 'partenaire', 'ressource'];
|
||||
|
||||
try {
|
||||
const findContentByPath = async (contentTypes, path) => {
|
||||
for (let type of contentTypes) {
|
||||
const response = await REST.get(`/jsonapi/node/${type}/`);
|
||||
|
||||
const content = response.data.data.find(content =>
|
||||
content.attributes.metatag.some(tag =>
|
||||
tag.tag === "link" && tag.attributes.href === path
|
||||
)
|
||||
);
|
||||
|
||||
if (content) {
|
||||
return {
|
||||
contentType: type,
|
||||
rawContent: content,
|
||||
};
|
||||
}
|
||||
|
||||
// Handle special case for governance/partners (multiple items per page)
|
||||
const pageRequested = window.location.href.split('/').pop().replace(/s?$/, '');
|
||||
if (type === pageRequested
|
||||
|| (type === 'gouvernance' && pageRequested === 'contact')
|
||||
) {
|
||||
return {
|
||||
contentType: type,
|
||||
rawContent: response.data.data,
|
||||
};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const { contentType, rawContent } = await findContentByPath(contentTypes, path);
|
||||
|
||||
this.contentType = contentType;
|
||||
this.rawContent = rawContent;
|
||||
|
||||
// console.log(`current type: ${contentType}`);
|
||||
|
||||
|
||||
|
||||
if (this.contentType !== 'gouvernance' && this.contentType !== 'partenaire') {
|
||||
// pageTitle
|
||||
for (let tag of rawContent.attributes.metatag) {
|
||||
if (tag.tag === "meta") {
|
||||
this.pageTitle = tag.attributes.content;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// contentTitle
|
||||
this.content.contentTitle = rawContent.attributes.title;
|
||||
|
||||
// vignette
|
||||
const vignetteFetch = await this.fetchFromRelationships('field_vignette', rawContent.relationships);
|
||||
if (vignetteFetch) {
|
||||
this.content.vignette = {
|
||||
url: vignetteFetch.attributes.uri.url,
|
||||
alt: rawContent.relationships.field_vignette.data.meta.alt
|
||||
};
|
||||
}
|
||||
|
||||
if (contentType === 'etape') {
|
||||
// coordinates
|
||||
this.content.coordinates = {
|
||||
lat: rawContent.attributes.field_geofield.lat,
|
||||
lon: rawContent.attributes.field_geofield.lon,
|
||||
};
|
||||
// adresse
|
||||
this.content.adresse = rawContent.attributes.field_adresse;
|
||||
// étape number
|
||||
this.content.etape_number = rawContent.attributes.field_arret_numero;
|
||||
// couleur
|
||||
this.content.couleur = rawContent.attributes.field_couleur;
|
||||
// dates
|
||||
this.content.dates = {
|
||||
start: this.getCleanDate(rawContent.attributes.field_dates.value),
|
||||
end: this.getCleanDate(rawContent.attributes.field_dates.end_value),
|
||||
}
|
||||
// previous / next
|
||||
await this.getRelatedEtape('previous', path);
|
||||
await this.getRelatedEtape('next', path);
|
||||
}
|
||||
|
||||
// parties
|
||||
const fieldParties = contentType === 'etape' ? 'field_parties' : 'field_parties_static';
|
||||
const partiesFetch = await this.fetchFromRelationships(fieldParties, rawContent.relationships);
|
||||
|
||||
if (partiesFetch) {
|
||||
this.content.parties = [];
|
||||
for (let partie of partiesFetch) {
|
||||
const partieType = partie.type.replace(/^paragraph--/, "");
|
||||
let partieContent = {
|
||||
type: partieType,
|
||||
};
|
||||
|
||||
switch (partieType) {
|
||||
case 'carte_sensible':
|
||||
const carteSensibleFetch = await this.fetchFromRelationships('field_image_carte', partie.relationships);
|
||||
if (carteSensibleFetch) {
|
||||
partieContent.carteSensible = {
|
||||
url: carteSensibleFetch.attributes.uri.url,
|
||||
alt: partie.relationships.field_image_carte.data.meta.alt,
|
||||
};
|
||||
}
|
||||
break;
|
||||
case 'titre_texte':
|
||||
partieContent.titre = partie.attributes.field_titre;
|
||||
partieContent.texte = partie.attributes.field_texte.value;
|
||||
break;
|
||||
case 'chiffres_cles':
|
||||
const chiffresClesFetch = await this.fetchFromRelationships('field_chiffres_clefs', partie.relationships);
|
||||
if (chiffresClesFetch) {
|
||||
partieContent.chiffresCles = [];
|
||||
for (let chiffre of chiffresClesFetch) {
|
||||
partieContent.chiffresCles.push({
|
||||
chiffre: chiffre.attributes.field_chiffre,
|
||||
description: chiffre.attributes.field_description,
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'diaporama':
|
||||
const diaporamaFetch = await this.fetchFromRelationships('field_diaporama', partie.relationships);
|
||||
if (diaporamaFetch) {
|
||||
partieContent.diaporama = [];
|
||||
for (let [index, image] of diaporamaFetch.entries()) {
|
||||
partieContent.diaporama.push({
|
||||
url: image.attributes.uri.url,
|
||||
alt: partie.relationships.field_diaporama.data[index].meta.alt,
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'entretien':
|
||||
partieContent.entretien = {};
|
||||
const personnesFetch = await this.fetchFromRelationships('field_personne_s', partie.relationships);
|
||||
const questionsReponsesFetch = await this.fetchFromRelationships('field_questions_reponses', partie.relationships);
|
||||
if (personnesFetch && questionsReponsesFetch) {
|
||||
partieContent.entretien.personnes = [];
|
||||
for (let personne of personnesFetch) {
|
||||
const portraitFetch = await this.fetchFromRelationships('field_portrait', personne.relationships);
|
||||
if (portraitFetch) {
|
||||
partieContent.entretien.personnes.push({
|
||||
portrait: portraitFetch.attributes.uri.url,
|
||||
alt: personne.relationships.field_portrait.data.meta.alt,
|
||||
description: personne.attributes.field_description,
|
||||
});
|
||||
}
|
||||
}
|
||||
partieContent.entretien.questionsReponses = [];
|
||||
for (let qr of questionsReponsesFetch) {
|
||||
partieContent.entretien.questionsReponses.push({
|
||||
question: qr.attributes.field_question,
|
||||
reponse: qr.attributes.field_reponse.value,
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'exergue':
|
||||
partieContent.exergue = partie.attributes.field_texte_exergue.value;
|
||||
break;
|
||||
case 'video':
|
||||
partieContent.videos = [];
|
||||
for (let video of partie.attributes.field_videos) {
|
||||
const videoId = video.split('?v=')[1];
|
||||
const videoUrl = `https://www.youtube.com/embed/${videoId}`;
|
||||
partieContent.videos.push(videoUrl);
|
||||
}
|
||||
break;
|
||||
}
|
||||
this.content.parties.push(partieContent);
|
||||
}
|
||||
}
|
||||
if (
|
||||
this.contentType === 'etape'
|
||||
|| this.contentType === 'static'
|
||||
|| this.contentType === 'ressourceItem'
|
||||
) {
|
||||
let { pageTitle, partialContent } = fetchSingletonPartialContent(this.contentType, this.rawContent);
|
||||
this.pageTitle = pageTitle;
|
||||
this.content = partialContent;
|
||||
} else {
|
||||
// pages gouvernance (contact) et partenaire
|
||||
// ont plusieurs items par pages
|
||||
const intro = await REST.get(`/jsonapi/config_pages/intro_${this.contentType}/`);
|
||||
const introContent = intro.data.data[0];
|
||||
|
||||
this.pageTitle =
|
||||
`${introContent.attributes.field_titre} ${introContent.attributes.metatag.find(tag => tag.tag === "meta")?.attributes.content}`;
|
||||
|
||||
this.content.contentTitle = introContent.attributes.field_titre;
|
||||
this.content.intro = introContent.attributes.field_intro.value;
|
||||
|
||||
const multiItemPageArray = [];
|
||||
|
||||
if (this.contentType === 'partenaire') {
|
||||
for (let item of rawContent) {
|
||||
const logoFetch = await REST.get(item.relationships.field_logo.links.related.href);
|
||||
|
||||
multiItemPageArray.push({
|
||||
title: item.attributes.title,
|
||||
description: item.attributes.body.value,
|
||||
weight: item.attributes.field_poid,
|
||||
link_url: item.attributes.field_lien.uri ,
|
||||
logo_alt: item.relationships.field_logo.data.meta.alt,
|
||||
logo_url: logoFetch.data.data.attributes.uri.url,
|
||||
});
|
||||
}
|
||||
} else if (this.contentType === 'gouvernance') {
|
||||
for (let item of rawContent) {
|
||||
const personnesFetch = await REST.get(item.relationships.field_personne_s.links.related.href);
|
||||
let personnes = [];
|
||||
for (let personne of personnesFetch.data.data) {
|
||||
const portraitFetch = await REST.get(personne.relationships.field_portrait.links.related.href);
|
||||
personnes.push({
|
||||
nom: personne.attributes.field_nom,
|
||||
prenom: personne.attributes.field_prenom,
|
||||
description: personne.attributes.field_description,
|
||||
photo_meta: personne.relationships.field_portrait.data?.meta.alt,
|
||||
photo_url: portraitFetch.data.data?.attributes.uri.url,
|
||||
});
|
||||
}
|
||||
multiItemPageArray.push({
|
||||
title: item.attributes.title,
|
||||
weight: item.attributes.field_poid,
|
||||
personnes: personnes,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
this.content[`${this.contentType}s`] = multiItemPageArray;
|
||||
|
||||
console.log(this.content);
|
||||
let { pageTitle, partialContent } = await fetchMultiplePartialContent(this.contentType);
|
||||
this.pageTitle = pageTitle;
|
||||
this.content = partialContent;
|
||||
}
|
||||
} catch (error) {
|
||||
this.error = 'Failed to fetch data';
|
||||
console.error('Issue with getNodeData', error);
|
||||
} catch(error) {
|
||||
this.error = 'Failed to fetch partial data';
|
||||
console.error('Issue with fetchPartialContentData', error);
|
||||
} finally {
|
||||
this.partialLoading = false;
|
||||
}
|
||||
},
|
||||
async fetchFullContentData(path) {
|
||||
try {
|
||||
if (
|
||||
this.contentType === 'etape'
|
||||
|| this.contentType === 'static'
|
||||
|| this.contentType === 'ressourceItem'
|
||||
) {
|
||||
this.content = { ...this.content, ...await fetchSingletonFullContent(this.contentType, this.rawContent, path) };
|
||||
} else {
|
||||
this.content = { ...this.content, ...await fetchMultipleFullContent(this.contentType, this.rawContent) };
|
||||
}
|
||||
} catch(error) {
|
||||
this.error = 'Failed to fetch full data';
|
||||
console.error('Issue with fetchFullContentData', error);
|
||||
} finally {
|
||||
this.loading = false;
|
||||
}
|
||||
},
|
||||
getCleanDate(date) {
|
||||
return {
|
||||
d: date.split('-')[2],
|
||||
m: new Intl.DateTimeFormat('fr-FR', { month: 'long' }).format(new Date(date)),
|
||||
y: date.split('-')[0],
|
||||
}
|
||||
},
|
||||
async getRelatedEtape(direction, path) {
|
||||
const getRelatedEtapeContent = async (relatedEtapeData) => {
|
||||
if (relatedEtapeData) {
|
||||
const vignetteFetch = await REST.get(relatedEtapeData.relationships.field_vignette.links.related.href);
|
||||
if (vignetteFetch.data.data) {
|
||||
this.content[direction] = {
|
||||
url: relatedEtapeData.attributes.metatag.find(tag => tag.tag === "link")?.attributes.href,
|
||||
couleur: relatedEtapeData.attributes.field_couleur,
|
||||
title: relatedEtapeData.attributes.title,
|
||||
postalCode: relatedEtapeData.attributes.field_adresse.postal_code,
|
||||
dates: {
|
||||
start: this.getCleanDate(relatedEtapeData.attributes.field_dates.value),
|
||||
end: this.getCleanDate(relatedEtapeData.attributes.field_dates.end_value),
|
||||
},
|
||||
vignette: {
|
||||
url: vignetteFetch.data.data.attributes.uri.url,
|
||||
alt: relatedEtapeData.relationships.field_vignette.data.meta.alt,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
const allEtapesData = await REST.get('/jsonapi/views/etapes/block_1/');
|
||||
for (let [index, etape] of allEtapesData.data.data.entries()) {
|
||||
if (etape.attributes.metatag.some(tag =>
|
||||
tag.tag === "link" && tag.attributes.href === path
|
||||
)) {
|
||||
const relatedEtapeIndex = direction === 'next' ? index + 1 : index - 1;
|
||||
await getRelatedEtapeContent(allEtapesData.data.data[relatedEtapeIndex]);
|
||||
}
|
||||
}
|
||||
},
|
||||
async fetchFromRelationships(field, relationships) {
|
||||
if (relationships[field].links) {
|
||||
try {
|
||||
const contentLink = relationships[field].links.related.href;
|
||||
const contentFetch = await REST.get(contentLink);
|
||||
return contentFetch.data.data;
|
||||
} catch (error) {
|
||||
this.error = 'Failed to fetch data';
|
||||
console.error('Issue with getNodeData', error);
|
||||
}
|
||||
}
|
||||
},
|
||||
resetStore(forFrontDisplay) {
|
||||
this.contentType = '';
|
||||
this.pageTitle = '';
|
||||
this.content = {};
|
||||
this.partialLoading = !forFrontDisplay;
|
||||
this.loading = !forFrontDisplay;
|
||||
this.error = null;
|
||||
useLayoutStore().hideEtapeList(false);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -46,6 +46,30 @@ export const useLayoutStore = defineStore('layout', {
|
||||
|
||||
this.toggleEtapeListScroll(isIntersecting, listeEtape, column, headerRect.height, animationToggleRect.top);
|
||||
},
|
||||
hideEtapeList(souldListHide) {
|
||||
const etapeList = document.querySelector(window.innerWidth >= this.minDesktopWidth ? '#etapes-liste' : '.layout__region--third');
|
||||
const animationButton = document.querySelector('#animation-toggle');
|
||||
const listContainer = etapeList.parentNode;
|
||||
if (souldListHide) {
|
||||
listContainer.style.minWidth = '30vw';
|
||||
etapeList.style.opacity = '0';
|
||||
setTimeout(() => {
|
||||
etapeList.style.display = 'none';
|
||||
}, 300);
|
||||
if (window.innerWidth >= this.minDesktopWidth) {
|
||||
animationButton.style.display = 'none';
|
||||
}
|
||||
} else {
|
||||
listContainer.style.minWidth = 'unset';
|
||||
etapeList.style.display = 'block';
|
||||
setTimeout(() => {
|
||||
etapeList.style.opacity = '1';
|
||||
}, 10);
|
||||
if (window.innerWidth >= this.minDesktopWidth) {
|
||||
animationButton.style.display = 'block';
|
||||
}
|
||||
}
|
||||
},
|
||||
toggleEtapeListScroll(isIntersecting, listeEtape, column, headerHeight, animationToggleTop) {
|
||||
if (isIntersecting && !this.isEtapeListeScrollable
|
||||
|| !isIntersecting && this.isEtapeListeScrollable) {
|
||||
@ -75,12 +99,12 @@ export const useLayoutStore = defineStore('layout', {
|
||||
menuTitle.classList.remove('open');
|
||||
menuBurger.classList.remove('open');
|
||||
menuH2.classList.remove('open');
|
||||
setTimeout(() => {
|
||||
if (this.isHamburgerMenuOpen) {
|
||||
menuContainer.style.display = 'none';
|
||||
}
|
||||
}, 300);
|
||||
this.isHamburgerMenuOpen = false;
|
||||
if (this.isHamburgerMenuOpen) {
|
||||
setTimeout(() => {
|
||||
menuContainer.style.display = 'none';
|
||||
}, 300);
|
||||
this.isHamburgerMenuOpen = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -104,6 +128,14 @@ export const useLayoutStore = defineStore('layout', {
|
||||
setHeaderPosition(currentPageIsIndex) {
|
||||
const header = document.querySelector('.layout-container > header');
|
||||
header.style.position = currentPageIsIndex ? 'fixed' : 'relative';
|
||||
}
|
||||
},
|
||||
toggleModaleTransition(shouldModaleTransition, enterDelay) {
|
||||
if (shouldModaleTransition) {
|
||||
document.documentElement.style.setProperty('--modale-enter-delay', `${enterDelay}s`);
|
||||
} else {
|
||||
document.documentElement.style.setProperty('margin-top', '0');
|
||||
document.documentElement.style.setProperty('transition', 'none');
|
||||
}
|
||||
},
|
||||
},
|
||||
})
|
||||
|
@ -16,33 +16,62 @@ export const useMapStore = defineStore('mapState', {
|
||||
animationDuration: 3,
|
||||
}),
|
||||
actions: {
|
||||
zoomToPlace(lat, long) {
|
||||
if (useLayoutStore().isDesktop) long = long - 0.03;
|
||||
handleMapMovement(isModaleEtape, wasModaleEtape, lat = this.defaultMapCenter.lat, lon = this.defaultMapCenter.lng) {
|
||||
if (this.animationsAreEnabled) {
|
||||
if (isModaleEtape) {
|
||||
if (!wasModaleEtape) {
|
||||
// national -> détail
|
||||
useLayoutStore().toggleModaleTransition(true, this.animationDuration);
|
||||
this.zoomToPlace(lat, lon);
|
||||
} else {
|
||||
// détail -> détail
|
||||
useLayoutStore().toggleModaleTransition(true, this.animationDuration);
|
||||
this.zoomToPlace(lat, lon);
|
||||
}
|
||||
} else {
|
||||
if (wasModaleEtape) {
|
||||
// détail -> national
|
||||
useLayoutStore().toggleModaleTransition(true, this.animationDuration);
|
||||
this.resetMap();
|
||||
} else {
|
||||
// national -> national
|
||||
useLayoutStore().toggleModaleTransition(true, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isModaleEtape) {
|
||||
// ? -> détail
|
||||
this.zoomToPlace(lat, lon);
|
||||
} else {
|
||||
// ? -> national
|
||||
this.resetMap();
|
||||
}
|
||||
useLayoutStore().toggleModaleTransition(false);
|
||||
}
|
||||
},
|
||||
zoomToPlace(lat, long) {
|
||||
if (useLayoutStore().isDesktop) long = long - 0.03;
|
||||
this.map.flyTo(
|
||||
[lat, long],
|
||||
this.maxZoom,
|
||||
{ animate: this.animationsAreEnabled, animationDuration: this.animationDuration });
|
||||
{ animate: this.animationsAreEnabled, duration: this.animationDuration });
|
||||
this.currentZoom = this.maxZoom;
|
||||
},
|
||||
resetMap() {
|
||||
resetMap(animate = this.animationsAreEnabled, duration = this.animationDuration) {
|
||||
this.map.flyTo(
|
||||
this.defaultMapCenter,
|
||||
useLayoutStore().isDesktop ? this.defaultZoomDesktop : this.defaultZoomMobile,
|
||||
{ animate: this.animationsAreEnabled, animationDuration: this.animationDuration });
|
||||
{ animate, duration });
|
||||
this.currentZoom = useLayoutStore().isDesktop ? this.defaultZoomDesktop : this.defaultZoomMobile;
|
||||
},
|
||||
lockMap() {
|
||||
setTimeout(() => {
|
||||
this.map.options.minZoom = this.currentZoom;
|
||||
this.map.options.maxZoom = this.currentZoom;
|
||||
}, this.animationDuration * 1000 + 100);
|
||||
lockMap() {
|
||||
this.map.dragging.disable();
|
||||
this.map.touchZoom.disable();
|
||||
this.map.doubleClickZoom.disable();
|
||||
this.map.scrollWheelZoom.disable();
|
||||
this.map.boxZoom.disable();
|
||||
this.map.keyboard.disable();
|
||||
// map.tap.disable();
|
||||
this.map._controlContainer.style.display = 'none';
|
||||
},
|
||||
unlockMap() {
|
||||
this.map.options.minZoom = useLayoutStore().isDesktop ? this.defaultZoomDesktop : this.defaultZoomMobile;
|
||||
@ -53,7 +82,7 @@ export const useMapStore = defineStore('mapState', {
|
||||
this.map.scrollWheelZoom.enable();
|
||||
this.map.boxZoom.enable();
|
||||
this.map.keyboard.enable();
|
||||
// map.tap.enable();
|
||||
this.map._controlContainer.style.display = 'block';
|
||||
},
|
||||
toggleAnimation() {
|
||||
this.animationsAreEnabled = !this.animationsAreEnabled;
|
||||
|
@ -0,0 +1,176 @@
|
||||
import REST from '../../api/rest-axios';
|
||||
import { fetchFromRelationships, getCleanDate } from './contentFetchUtils';
|
||||
|
||||
|
||||
export async function getCarteSensible(partie) {
|
||||
const carteSensiblePromise = fetchFromRelationships('field_image_carte', partie.relationships);
|
||||
|
||||
const carteSensibleData = await carteSensiblePromise;
|
||||
if (carteSensibleData) {
|
||||
return {
|
||||
url: {
|
||||
original: carteSensibleData.attributes.uri.url,
|
||||
small: carteSensibleData.attributes.image_style_uri.content_small,
|
||||
medium: carteSensibleData.attributes.image_style_uri.content_medium,
|
||||
large: carteSensibleData.attributes.image_style_uri.content_large,
|
||||
xlarge: carteSensibleData.attributes.image_style_uri.content_x_large,
|
||||
},
|
||||
alt: partie.relationships.field_image_carte.data.meta.alt,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export async function getTitreTexte(partie) {
|
||||
let titre = partie.attributes.field_titre;
|
||||
let texte = partie.attributes.field_texte.value;
|
||||
|
||||
// get the resized images from the text
|
||||
const imgRegex = /<img[^>]+>/g;
|
||||
const uuidRegex = /data-entity-uuid="([^"]+)"/;
|
||||
const imgTags = texte.match(imgRegex);
|
||||
|
||||
if (imgTags) {
|
||||
const imagePromises = imgTags.map(imgTag => {
|
||||
const uuidMatch = imgTag.match(uuidRegex);
|
||||
if (uuidMatch && uuidMatch[1]) {
|
||||
return REST.get(`/jsonapi/file/file/${uuidMatch[1]}`)
|
||||
.then(response => ({
|
||||
originalTag: imgTag,
|
||||
imageData: response.data.data
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
||||
const images = await Promise.all(imagePromises);
|
||||
images.forEach(({originalTag, imageData}) => {
|
||||
const newImgTag = originalTag
|
||||
.replace(/src="[^"]+"/,`src="${imageData.attributes.image_style_uri.content_medium}"`)
|
||||
.replace('>',' data-large-src="' + imageData.attributes.image_style_uri.content_large + '">');
|
||||
texte = texte.replace(originalTag, newImgTag);
|
||||
});
|
||||
}
|
||||
|
||||
return { titre, texte };
|
||||
}
|
||||
|
||||
export async function getChiffresCles(partie) {
|
||||
const chiffresClesFetch = await fetchFromRelationships('field_chiffres_clefs', partie.relationships);
|
||||
if (chiffresClesFetch) {
|
||||
let chiffresCles = [];
|
||||
for (let chiffre of chiffresClesFetch) {
|
||||
chiffresCles.push({
|
||||
chiffre: chiffre.attributes.field_chiffre,
|
||||
description: chiffre.attributes.field_description,
|
||||
});
|
||||
}
|
||||
return chiffresCles;
|
||||
}
|
||||
}
|
||||
|
||||
export async function getDiaporama(partie) {
|
||||
const diaporamaFetch = await fetchFromRelationships('field_diaporama', partie.relationships);
|
||||
|
||||
if (diaporamaFetch) {
|
||||
const diaporamaPromises = diaporamaFetch.map((image, index) => {
|
||||
return {
|
||||
url: {
|
||||
original: image.attributes.uri.url,
|
||||
small: image.attributes.image_style_uri.content_small,
|
||||
medium: image.attributes.image_style_uri.content_medium,
|
||||
large: image.attributes.image_style_uri.content_large,
|
||||
},
|
||||
alt: partie.relationships.field_diaporama.data[index].meta.alt,
|
||||
};
|
||||
});
|
||||
|
||||
return await Promise.all(diaporamaPromises);
|
||||
}
|
||||
}
|
||||
|
||||
export async function getEntretien(partie) {
|
||||
const [personnesFetch, questionsReponsesFetch] = await Promise.all([
|
||||
fetchFromRelationships('field_personne_s', partie.relationships),
|
||||
fetchFromRelationships('field_questions_reponses', partie.relationships)
|
||||
]);
|
||||
|
||||
if (personnesFetch && questionsReponsesFetch) {
|
||||
const personnesPromises = personnesFetch.map(async (personne) => {
|
||||
const portraitFetch = await fetchFromRelationships('field_portrait', personne.relationships);
|
||||
if (portraitFetch) {
|
||||
return {
|
||||
portrait: {
|
||||
original: portraitFetch.attributes.uri.url,
|
||||
small: portraitFetch.attributes.image_style_uri.content_small,
|
||||
medium: portraitFetch.attributes.image_style_uri.content_medium,
|
||||
large: portraitFetch.attributes.image_style_uri.content_large,
|
||||
},
|
||||
alt: personne.relationships.field_portrait.data.meta.alt,
|
||||
description: personne.attributes.field_description,
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
const questionsReponses = questionsReponsesFetch.map(qr => ({
|
||||
question: qr.attributes.field_question,
|
||||
reponse: qr.attributes.field_reponse.value,
|
||||
}));
|
||||
|
||||
return {
|
||||
titre: partie.attributes.field_titre,
|
||||
personnes: await Promise.all(personnesPromises),
|
||||
questionsReponses: questionsReponses
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function getVideos(partie) {
|
||||
let videos = [];
|
||||
for (let video of partie.attributes.field_videos) {
|
||||
const videoId = video.split('?v=')[1];
|
||||
const videoUrl = `https://www.youtube.com/embed/${videoId}`;
|
||||
videos.push(videoUrl);
|
||||
}
|
||||
return videos;
|
||||
}
|
||||
|
||||
export async function getDocument(partie) {
|
||||
// const documentFetch = await fetchFromRelationships('field_document', partie.relationships);
|
||||
const uuid = partie.relationships.field_document.data?.id;
|
||||
const documentFetch = await REST.get(`/jsonapi/file/file/${uuid}`);
|
||||
const url = documentFetch.data.data?.attributes.uri.url;
|
||||
|
||||
const titre = partie.attributes.field_titre;
|
||||
const sousTitre = partie.attributes.field_sous_titre;
|
||||
const date = partie.attributes.field_date ? getCleanDate(partie.attributes.field_date) : null;
|
||||
const auteurice = partie.relationships.field_autheurice_s;
|
||||
const description = partie.relationships.field_document.data?.meta.description;
|
||||
|
||||
const vignetteFetch = await REST.get(`/jsonapi/file/file/${partie.relationships.field_vignette.data?.id}`);
|
||||
const vignette = { url: vignetteFetch.data.data?.attributes.image_style_uri.content_small, alt: partie.relationships.field_vignette.data?.meta.alt };
|
||||
|
||||
return { url, titre, sousTitre, date, auteurice, description, vignette };
|
||||
}
|
||||
|
||||
export async function getGallerie(partie) {
|
||||
const gallerieFetch = await fetchFromRelationships('field_gallerie', partie.relationships);
|
||||
|
||||
if (gallerieFetch) {
|
||||
const titre = gallerieFetch.attributes.title;
|
||||
const introduction = gallerieFetch.attributes.body?.processed;
|
||||
|
||||
const imagesFetch = await fetchFromRelationships('field_images', gallerieFetch.relationships);
|
||||
let images = [];
|
||||
imagesFetch.forEach((image, index) => {
|
||||
images.push({
|
||||
url: {
|
||||
original: image.attributes.uri.url,
|
||||
small: image.attributes.image_style_uri.content_small,
|
||||
medium: image.attributes.image_style_uri.content_medium,
|
||||
large: image.attributes.image_style_uri.content_large,
|
||||
},
|
||||
alt: gallerieFetch.relationships.field_images.data[index].meta.alt,
|
||||
});
|
||||
});
|
||||
return { titre, introduction, images };
|
||||
}
|
||||
}
|
@ -0,0 +1,150 @@
|
||||
import REST from '../../api/rest-axios';
|
||||
|
||||
export async function fetchFromRelationships(field, relationships) {
|
||||
field = relationships[field] ? field : `${field}_static`;
|
||||
|
||||
if (relationships[field]?.links) {
|
||||
const contentLink = relationships[field].links.related.href;
|
||||
return REST.get(contentLink)
|
||||
.then(contentFetch => contentFetch.data.data)
|
||||
.catch(error => {
|
||||
this.error = 'Failed to fetch data';
|
||||
console.error('Issue with getNodeData', error);
|
||||
});
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export function getCleanDate(date) {
|
||||
return {
|
||||
d: date.split('-')[2],
|
||||
m: new Intl.DateTimeFormat('fr-FR', { month: 'long' }).format(new Date(date)),
|
||||
y: date.split('-')[0],
|
||||
}
|
||||
}
|
||||
|
||||
export async function getRelatedEtape(direction, path) {
|
||||
const getRelatedEtapeContent = (relatedEtapeData) => {
|
||||
if (relatedEtapeData) {
|
||||
return fetchFromRelationships('field_vignette', relatedEtapeData.relationships)
|
||||
.then(vignetteFetch => {
|
||||
if (vignetteFetch) {
|
||||
return {
|
||||
url: relatedEtapeData.attributes.metatag.find(tag => tag.tag === "link")?.attributes.href,
|
||||
couleur: relatedEtapeData.attributes.field_couleur,
|
||||
title: relatedEtapeData.attributes.title,
|
||||
postalCode: relatedEtapeData.attributes.field_adresse.postal_code,
|
||||
dates: {
|
||||
start: getCleanDate(relatedEtapeData.attributes.field_dates.value),
|
||||
end: getCleanDate(relatedEtapeData.attributes.field_dates.end_value),
|
||||
},
|
||||
vignette: {
|
||||
url: {
|
||||
original: vignetteFetch.attributes.uri.url,
|
||||
small: vignetteFetch.attributes.image_style_uri.content_small,
|
||||
medium: vignetteFetch.attributes.image_style_uri.content_medium,
|
||||
large: vignetteFetch.attributes.image_style_uri.content_large,
|
||||
},
|
||||
alt: relatedEtapeData.relationships.field_vignette.data.meta.alt,
|
||||
},
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const allEtapesPromise = REST.get('/jsonapi/views/etapes/block_1/');
|
||||
|
||||
return allEtapesPromise.then(allEtapesData => {
|
||||
for (let [index, etape] of allEtapesData.data.data.entries()) {
|
||||
if (etape.attributes.metatag.some(tag =>
|
||||
tag.tag === "link" && tag.attributes.href === path
|
||||
)) {
|
||||
const relatedEtapeIndex = direction ? (direction === 'next' ? index + 1 : index - 1) : index;
|
||||
return getRelatedEtapeContent(allEtapesData.data.data[relatedEtapeIndex]);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export async function getRessourceItemCard(item) {
|
||||
try {
|
||||
const ressourceFetch = await REST.get(item.links.self.href);
|
||||
|
||||
const partiesFetch = await REST.get(item.relationships.field_parties_ressource?.links.related.href);
|
||||
const parties = partiesFetch.data.data;
|
||||
|
||||
const vignettePartie = parties.find(partie => partie.type !== "paragraph--titre_texte");
|
||||
|
||||
let vignette = null;
|
||||
if (vignettePartie) {
|
||||
let alt;
|
||||
switch (vignettePartie.type) {
|
||||
case 'paragraph--diaporama':
|
||||
alt = vignettePartie.relationships.field_diaporama?.data[0]?.meta.alt;
|
||||
const diaporamaFetch = await REST.get(vignettePartie.relationships.field_diaporama?.links.related.href);
|
||||
vignette = {
|
||||
url: diaporamaFetch.data.data[0].attributes.image_style_uri?.content_small,
|
||||
alt
|
||||
};
|
||||
break;
|
||||
|
||||
case 'paragraph--video':
|
||||
const videoId = vignettePartie.attributes.field_videos[0]?.split('?v=')[1];
|
||||
vignette = {
|
||||
url: `https://img.youtube.com/vi/${videoId}/0.jpg`,
|
||||
alt: item.attributes.title
|
||||
};
|
||||
break;
|
||||
|
||||
case 'paragraph--galleries':
|
||||
const gallerieFetch = await REST.get(vignettePartie.relationships.field_gallerie?.links.related.href);
|
||||
const galleryAlt = gallerieFetch.data.data.relationships.field_images?.data[0].meta.alt;
|
||||
const gallerieImageFetch = await REST.get(gallerieFetch.data.data.relationships.field_images?.links.related.href);
|
||||
vignette = {
|
||||
url: gallerieImageFetch.data.data[0].attributes.image_style_uri?.content_small,
|
||||
alt: galleryAlt
|
||||
};
|
||||
break;
|
||||
|
||||
case 'paragraph--document':
|
||||
alt = vignettePartie.relationships.field_vignette?.data?.meta.alt;
|
||||
const documentFetch = await REST.get(vignettePartie.relationships.field_vignette?.links.related.href);
|
||||
vignette = {
|
||||
url: documentFetch.data.data?.attributes.image_style_uri?.content_small,
|
||||
alt
|
||||
};
|
||||
break;
|
||||
|
||||
default:
|
||||
vignette = null;
|
||||
}
|
||||
}
|
||||
|
||||
const relatedEtape = await REST.get(item.relationships.field_etape.links.related.href);
|
||||
// console.log(item);
|
||||
|
||||
|
||||
return {
|
||||
ressourceType: item.attributes.field_type_de_ressource,
|
||||
title: item.attributes.title,
|
||||
auteurice: item.attributes.field_autheurice,
|
||||
promoted: item.attributes.field_mis_en_avant,
|
||||
date: item.attributes.field_date_ressource ? getCleanDate(item.attributes.field_date_ressource) : null,
|
||||
url: ressourceFetch.data.data.attributes.metatag.find(tag => tag.tag === "link")?.attributes.href,
|
||||
relatedEtape: relatedEtape.data.data?.attributes.title,
|
||||
vignette
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Error fetching resource:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export async function getRelatedRessources(etapeId) {
|
||||
const ressources = await REST.get(`/jsonapi/node/ressource/`);
|
||||
const ressourcesRelatedToEtape = ressources.data.data.filter(ressource => ressource.relationships.field_etape.data?.id === etapeId);
|
||||
const ressourcesRelatedPromises = ressourcesRelatedToEtape.map(ressource => getRessourceItemCard(ressource));
|
||||
|
||||
return await Promise.all(ressourcesRelatedPromises);
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
import REST from '../../api/rest-axios';
|
||||
import { useLayoutStore } from '../../stores/layout';
|
||||
import { getPartenaires, getGouvernance, getRessources } from './multiItemPages';
|
||||
|
||||
export async function fetchMultiplePartialContent(contentType) {
|
||||
let partialContent = {};
|
||||
let pageTitle = '';
|
||||
|
||||
const intro = await REST.get(`/jsonapi/config_pages/intro_${contentType}/`);
|
||||
const introContent = intro.data.data[0];
|
||||
|
||||
pageTitle =
|
||||
`${introContent.attributes.field_titre} ${introContent.attributes.metatag.find(tag => tag.tag === "meta")?.attributes.content}`;
|
||||
|
||||
partialContent.contentTitle = introContent.attributes.field_titre;
|
||||
partialContent.intro = introContent.attributes.field_intro?.value;
|
||||
|
||||
return { pageTitle, partialContent };
|
||||
}
|
||||
|
||||
export async function fetchMultipleFullContent(contentType, rawContent) {
|
||||
let content = {};
|
||||
|
||||
let multiItemPageArray = [];
|
||||
|
||||
switch (contentType) {
|
||||
case 'ressource':
|
||||
multiItemPageArray = await getRessources(rawContent);
|
||||
content.ressourceTypes = new Set(multiItemPageArray.map(item => item.ressourceType));
|
||||
useLayoutStore().hideEtapeList(true);
|
||||
break;
|
||||
case 'partenaire':
|
||||
multiItemPageArray = await getPartenaires(rawContent);
|
||||
break;
|
||||
case 'gouvernance':
|
||||
multiItemPageArray = await getGouvernance(rawContent);
|
||||
break;
|
||||
}
|
||||
|
||||
content[`${contentType}s`] = multiItemPageArray;
|
||||
|
||||
return content;
|
||||
}
|
@ -0,0 +1,153 @@
|
||||
import REST from '../../api/rest-axios';
|
||||
|
||||
import { getCleanDate, fetchFromRelationships, getRelatedEtape, getRelatedRessources } from './contentFetchUtils';
|
||||
import { getCarteSensible, getTitreTexte, getChiffresCles, getDiaporama, getEntretien, getVideos, getDocument, getGallerie } from './cleanParties';
|
||||
import { useLayoutStore } from '../../stores/layout';
|
||||
|
||||
export function fetchSingletonPartialContent(contentType, rawContent) {
|
||||
let partialContent = {};
|
||||
|
||||
let pageTitle = rawContent.attributes.metatag.find(tag => tag.tag === "meta")?.attributes.content;
|
||||
|
||||
partialContent.contentTitle = rawContent.attributes.title;
|
||||
|
||||
if (contentType === 'etape') {
|
||||
partialContent.coordinates = {
|
||||
lat: rawContent.attributes.field_geofield.lat,
|
||||
lon: rawContent.attributes.field_geofield.lon,
|
||||
};
|
||||
partialContent.adresse = rawContent.attributes.field_adresse;
|
||||
partialContent.etape_number = rawContent.attributes.field_arret_numero;
|
||||
partialContent.couleur = rawContent.attributes.field_couleur;
|
||||
partialContent.dates = {
|
||||
start: getCleanDate(rawContent.attributes.field_dates.value),
|
||||
end: getCleanDate(rawContent.attributes.field_dates.end_value),
|
||||
}
|
||||
}
|
||||
|
||||
if (contentType === 'ressourceItem') {
|
||||
partialContent.ressourceType = rawContent.attributes.field_type_de_ressource;
|
||||
partialContent.auteurice = rawContent.attributes.field_autheurice;
|
||||
partialContent.date = rawContent.attributes.field_date_ressource ? getCleanDate(rawContent.attributes.field_date_ressource) : null;
|
||||
}
|
||||
|
||||
return { pageTitle, partialContent };
|
||||
}
|
||||
|
||||
export async function fetchSingletonFullContent(contentType, rawContent, path) {
|
||||
let content = {};
|
||||
|
||||
const vignettePromise = fetchFromRelationships('field_vignette', rawContent.relationships);
|
||||
const partiesPromise = fetchFromRelationships(contentType === 'ressourceItem' ? 'field_parties_ressource' : 'field_parties', rawContent.relationships);
|
||||
|
||||
let previousEtapePromise, nextEtapePromise;
|
||||
|
||||
if (contentType === 'etape') {
|
||||
previousEtapePromise = getRelatedEtape('previous', path);
|
||||
nextEtapePromise = getRelatedEtape('next', path);
|
||||
content.relatedRessources = await getRelatedRessources(rawContent.id);
|
||||
}
|
||||
|
||||
if (contentType === 'ressourceItem') {
|
||||
content.introduction = rawContent.attributes.field_introduction?.processed;
|
||||
if (rawContent.relationships.field_etape.data) {
|
||||
const relatedEtapeFetch = fetchFromRelationships('field_etape', rawContent.relationships);
|
||||
const relatedEtape = await Promise.resolve(relatedEtapeFetch);
|
||||
const relatedEtapeUrl = relatedEtape.attributes.metatag.find(tag => tag.tag === "link")?.attributes.href;
|
||||
content.relatedEtape = await getRelatedEtape('', relatedEtapeUrl);
|
||||
}
|
||||
|
||||
useLayoutStore().hideEtapeList(true);
|
||||
}
|
||||
|
||||
const [vignetteData, partiesData] = await Promise.all([vignettePromise, partiesPromise]);
|
||||
|
||||
if (vignetteData) {
|
||||
content.vignette = {
|
||||
url: {
|
||||
original: vignetteData.attributes.uri.url,
|
||||
small: vignetteData.attributes.image_style_uri.content_small,
|
||||
medium: vignetteData.attributes.image_style_uri.content_medium,
|
||||
large: vignetteData.attributes.image_style_uri.content_large,
|
||||
},
|
||||
alt: rawContent.relationships.field_vignette.data.meta.alt
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
if (partiesData) {
|
||||
const partiesPromises = partiesData.map(async (partie) => {
|
||||
const partieType = partie.type.replace(/^paragraph--/, "");
|
||||
let partieContent = { type: partieType };
|
||||
|
||||
switch (partieType) {
|
||||
case 'carte_sensible':
|
||||
partieContent.carteSensible = await getCarteSensible(partie);
|
||||
break;
|
||||
case 'titre_texte':
|
||||
const { titre, texte } = await getTitreTexte(partie);
|
||||
partieContent.titre = titre;
|
||||
partieContent.texte = texte;
|
||||
break;
|
||||
case 'chiffres_cles':
|
||||
partieContent.chiffresCles = await getChiffresCles(partie);
|
||||
break;
|
||||
case 'diaporama':
|
||||
partieContent.diaporama = await getDiaporama(partie);
|
||||
break;
|
||||
case 'entretien':
|
||||
partieContent.entretien = await getEntretien(partie);
|
||||
break;
|
||||
case 'exergue':
|
||||
partieContent.exergue = partie.attributes.field_texte_exergue.value;
|
||||
break;
|
||||
case 'video':
|
||||
partieContent.videos = getVideos(partie);
|
||||
break;
|
||||
case 'document':
|
||||
partieContent.document = await getDocument(partie);
|
||||
break;
|
||||
case 'galleries':
|
||||
partieContent.gallerie = await getGallerie(partie);
|
||||
break;
|
||||
}
|
||||
return partieContent;
|
||||
});
|
||||
|
||||
// liens
|
||||
if (rawContent.attributes.field_liens?.length) {
|
||||
content.liens = [];
|
||||
for (let lien of rawContent.attributes.field_liens) {
|
||||
content.liens.push({
|
||||
title: lien.title,
|
||||
url: lien.uri,
|
||||
});
|
||||
}
|
||||
}
|
||||
// pièces jointes
|
||||
if (rawContent.relationships.field_pieces_jointes?.data.length) {
|
||||
content.pieces_jointes = [];
|
||||
for (let pieceJointe of rawContent.relationships.field_pieces_jointes.data) {
|
||||
if (pieceJointe.meta.display) {
|
||||
const uuid = pieceJointe.id;
|
||||
const response = await REST.get(`/jsonapi/file/file/${uuid}`);
|
||||
content.pieces_jointes.push({
|
||||
title: pieceJointe.meta.description,
|
||||
url: response.data.data.attributes.uri.url,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
content.parties = await Promise.all(partiesPromises);
|
||||
}
|
||||
|
||||
// related étapes
|
||||
if (contentType === 'etape') {
|
||||
const [prevContent, nextContent] = await Promise.all([previousEtapePromise, nextEtapePromise]);
|
||||
content.previous = prevContent;
|
||||
content.next = nextContent;
|
||||
}
|
||||
|
||||
return content;
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
import REST from '../../api/rest-axios';
|
||||
|
||||
export async function findContentByPath(contentTypes, path) {
|
||||
for (let type of contentTypes) {
|
||||
const response = await REST.get(`/jsonapi/node/${type}/`);
|
||||
|
||||
const content = response.data.data.find(content =>
|
||||
content.attributes.metatag.some(tag =>
|
||||
tag.tag === "link" && tag.attributes.href === path
|
||||
)
|
||||
);
|
||||
|
||||
if (content) {
|
||||
return {
|
||||
contentType: content.type === 'node--ressource' ? 'ressourceItem' : type,
|
||||
rawContent: content,
|
||||
};
|
||||
}
|
||||
|
||||
// Handle special case for gouvernance, ressources, partenaires (multiple items per page)
|
||||
let pageRequested = window.location.href.split('/').pop().replace(/s?$/, '');
|
||||
if (type === pageRequested
|
||||
|| (type === 'gouvernance' && pageRequested === 'contact')
|
||||
) {
|
||||
return {
|
||||
contentType: type,
|
||||
rawContent: response.data.data,
|
||||
};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
import REST from '../../api/rest-axios';
|
||||
import { getRessourceItemCard } from './contentFetchUtils';
|
||||
|
||||
export async function getPartenaires(rawContent) {
|
||||
const logoPromises = rawContent.map(item =>
|
||||
REST.get(item.relationships.field_logo?.links.related.href)
|
||||
.then(logoFetch => ({
|
||||
title: item.attributes?.title,
|
||||
description: item.attributes?.body?.value,
|
||||
weight: item.attributes?.field_poid,
|
||||
link_url: item.attributes?.field_lien?.uri,
|
||||
logo_alt: item.relationships?.field_logo?.data?.meta.alt,
|
||||
logo_url: {
|
||||
original: logoFetch.data.data?.attributes.uri.url,
|
||||
small: logoFetch.data.data?.attributes.image_style_uri.content_small,
|
||||
medium: logoFetch.data.data?.attributes.image_style_uri.content_medium,
|
||||
large: logoFetch.data.data?.attributes.image_style_uri.content_large,
|
||||
}
|
||||
}))
|
||||
);
|
||||
|
||||
return await Promise.all(logoPromises);
|
||||
}
|
||||
|
||||
export async function getGouvernance(rawContent) {
|
||||
const itemPromises = rawContent.map(item =>
|
||||
REST.get(item.relationships.field_personne_s?.links.related.href)
|
||||
.then(async personnesFetch => {
|
||||
const portraitPromises = personnesFetch.data.data.map(personne =>
|
||||
REST.get(personne.relationships.field_portrait?.links.related.href)
|
||||
.then(portraitFetch => ({
|
||||
nom: personne.attributes.field_nom,
|
||||
prenom: personne.attributes.field_prenom,
|
||||
description: personne.attributes.field_description,
|
||||
photo_meta: personne.relationships.field_portrait.data?.meta.alt,
|
||||
photo_url: portraitFetch.data.data ? {
|
||||
original: portraitFetch.data.data?.attributes.uri.url,
|
||||
small: portraitFetch.data.data?.attributes.image_style_uri.content_small,
|
||||
medium: portraitFetch.data.data?.attributes.image_style_uri.content_medium,
|
||||
large: portraitFetch.data.data?.attributes.image_style_uri.content_large,
|
||||
} : null
|
||||
}))
|
||||
);
|
||||
|
||||
return Promise.all(portraitPromises)
|
||||
.then(personnes => ({
|
||||
title: item.attributes?.title,
|
||||
weight: item.attributes?.field_poid,
|
||||
personnes
|
||||
}));
|
||||
})
|
||||
);
|
||||
|
||||
return await Promise.all(itemPromises);
|
||||
}
|
||||
|
||||
export async function getRessources(rawContent) {
|
||||
|
||||
const ressourcesPromises = rawContent.map(item => getRessourceItemCard(item));
|
||||
|
||||
return await Promise.all(ressourcesPromises);
|
||||
}
|
@ -1,55 +1,67 @@
|
||||
import { setActiveNavItem } from "./set-active-nav-item";
|
||||
import { useContentStore } from "../stores/content";
|
||||
import { useMapStore } from "../stores/map";
|
||||
import { useLayoutStore } from '../stores/layout';
|
||||
|
||||
export async function initFirstLoadRouting(store, router, baseUrl, siteName) {
|
||||
export async function initFirstLoadRouting(router, baseUrl, siteName) {
|
||||
const store = useContentStore();
|
||||
const decoupled_origin = JSON.parse(window.localStorage.getItem('decoupled_origin'));
|
||||
|
||||
if(decoupled_origin) {
|
||||
router.push(decoupled_origin.url);
|
||||
await store.fetchContentData(baseUrl + decoupled_origin.url);
|
||||
await store.fetchPartialContentData(baseUrl + decoupled_origin.url);
|
||||
window.localStorage.removeItem("decoupled_origin");
|
||||
document.title = store.pageTitle;
|
||||
setActiveNavItem(store.contentType, decoupled_origin.url);
|
||||
useLayoutStore().setHeaderPosition(false);
|
||||
await store.fetchFullContentData(baseUrl + decoupled_origin.url);
|
||||
} else {
|
||||
document.title = siteName;
|
||||
useLayoutStore().setHeaderPosition(true);
|
||||
}
|
||||
}
|
||||
|
||||
export function handleClickableElements(clickableElements, store, router, baseUrl, siteName, mapStore) {
|
||||
export function handleClickableElements(clickableElements, router, baseUrl, siteName) {
|
||||
for (const link of clickableElements) {
|
||||
let href = link.href || link.dataset.href;
|
||||
if (href.startsWith(baseUrl)) href = href.replace(baseUrl, '');
|
||||
|
||||
link.onclick = async function (e) {
|
||||
router.push(href);
|
||||
link.onclick = async function (e) {
|
||||
if (href !== window.location.pathname) {
|
||||
pageChange(href, store, siteName, mapStore, baseUrl);
|
||||
router.push(href);
|
||||
pageChange(href, siteName, baseUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function handleBrowserNavigation(store, baseUrl, siteName, mapStore) {
|
||||
let href = window.location.pathname;
|
||||
if (href.startsWith(baseUrl)) href = href.replace(baseUrl, '');
|
||||
pageChange(href, store, siteName, mapStore, baseUrl)
|
||||
export async function handleBrowserNavigation(baseUrl, siteName) {
|
||||
let href = window.location.pathname;
|
||||
if (href.startsWith(baseUrl)) href = href.replace(baseUrl, '');
|
||||
pageChange(href, siteName, baseUrl)
|
||||
}
|
||||
|
||||
export async function pageChange(href, store, siteName, mapStore, baseUrl) {
|
||||
export async function pageChange(href, siteName, baseUrl) {
|
||||
const store = useContentStore();
|
||||
const mapStore = useMapStore();
|
||||
|
||||
if (href === '/') {
|
||||
store.resetStore(true);
|
||||
document.title = siteName;
|
||||
mapStore.resetMap();
|
||||
useLayoutStore().setHeaderPosition(true);
|
||||
} else {
|
||||
await store.fetchContentData(baseUrl + href);
|
||||
await store.fetchPartialContentData(baseUrl + href);
|
||||
document.title = store.pageTitle;
|
||||
useLayoutStore().setHeaderPosition(false);
|
||||
}
|
||||
setActiveNavItem(store.contentType, href);
|
||||
|
||||
const listeEtape = document.querySelector('#etapes-liste');
|
||||
if (!useLayoutStore().isDesktop) useLayoutStore().collapseEtapeListe(listeEtape);
|
||||
const animationToggle = document.querySelector('#animation-toggle');
|
||||
if (!useLayoutStore().isDesktop) useLayoutStore().collapseEtapeListe(listeEtape, animationToggle);
|
||||
|
||||
if (href !== '/') {
|
||||
await store.fetchFullContentData(baseUrl + href);
|
||||
}
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ export function setMenuToggle() {
|
||||
layoutStore.setUpHamburgerToggle(menuBurger, menuContainer);
|
||||
}
|
||||
|
||||
export function setHamburgerWhenLogged(drupalSettings) {
|
||||
export function setRightSectionsWhenLogged(drupalSettings) {
|
||||
if (drupalSettings.user.uid != 0) {
|
||||
const menuBurger = document.querySelector('#hamburger');
|
||||
const menuTitle = document.querySelector('#menu-title');
|
||||
@ -65,7 +65,11 @@ export function setHamburgerWhenLogged(drupalSettings) {
|
||||
const headerTop = header.getBoundingClientRect().top;
|
||||
|
||||
menuTitle.style.top = `${headerTop}px`;
|
||||
menuBurger.style.top = `${headerTop}px`;
|
||||
menuContainer.style.paddingTop = `${headerTop}px`;
|
||||
menuContainer.style.paddingTop = `${headerTop + 10}px`;
|
||||
menuBurger.style.top = `${headerTop + 2}px`;
|
||||
|
||||
const etapesListContainer = document.querySelector('.block-region-third');
|
||||
etapesListContainer.style.paddingTop = `50px`;
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,10 @@
|
||||
import { useLayoutStore } from '../stores/layout';
|
||||
import { useMapStore } from '../stores/map';
|
||||
import REST from '../api/rest-axios';
|
||||
|
||||
export function setupMapStore(map, settings) {
|
||||
const mapStore = useMapStore();
|
||||
|
||||
export function setupMapStore(mapStore, map, settings) {
|
||||
mapStore.map = map;
|
||||
mapStore.defaultMapCenter = map.getCenter();
|
||||
mapStore.maxZoom = settings.settings.maxZoom;
|
||||
@ -8,4 +12,60 @@ export function setupMapStore(mapStore, map, settings) {
|
||||
mapStore.defaultZoomMobile = settings.settings.minZoom - 1;
|
||||
mapStore.map.flyTo([mapStore.defaultMapCenter.lat, mapStore.defaultMapCenter.lng], useLayoutStore().isDesktop ? mapStore.defaultZoomDesktop : mapStore.defaultZoomMobile);
|
||||
mapStore.checkReducedMotion();
|
||||
}
|
||||
}
|
||||
|
||||
// not working
|
||||
// may or may not rework on it later
|
||||
export async function preloadEtapesTiles(map) {
|
||||
const mapStore = useMapStore();
|
||||
|
||||
function waitForEvent(el, eventName) {
|
||||
return new Promise((resolve) => {
|
||||
el.once(eventName, resolve);
|
||||
});
|
||||
}
|
||||
|
||||
const tilesSource = map._layers.layer._url;
|
||||
|
||||
const response = await REST.get(`/jsonapi/node/etape/`);
|
||||
|
||||
const defaultZoom = useLayoutStore().isDesktop ? mapStore.defaultZoomDesktop : mapStore.defaultZoomMobile;
|
||||
|
||||
let tilesCached = new Set();
|
||||
|
||||
for (const etape of response.data.data) {
|
||||
const etapeCoords = {
|
||||
title: etape.attributes.title,
|
||||
lat: etape.attributes.field_geofield.lat,
|
||||
lng: etape.attributes.field_geofield.lon,
|
||||
};
|
||||
|
||||
for (let zoom = defaultZoom; zoom <= mapStore.maxZoom; zoom++) {
|
||||
map.flyTo([etapeCoords.lat, etapeCoords.lng], zoom, { animate: true, duration: 0.001 });
|
||||
await waitForEvent(map, 'moveend zoomend');
|
||||
|
||||
let allTilesCached = Object.keys(map._layers.layer._tiles).every(tile => tilesCached.has(tile));
|
||||
|
||||
const tileLayer = Object.values(map._layers).find(layer => layer instanceof L.TileLayer);
|
||||
|
||||
if (!allTilesCached && tileLayer._loading) {
|
||||
await waitForEvent(tileLayer, 'load');
|
||||
Object.keys(map._layers.layer._tiles).forEach(tile => {
|
||||
if (!tilesCached.has(tile)) {
|
||||
/* const tileObject = map._layers.layer._tiles[tile];
|
||||
let img = new Image();
|
||||
const url = tilesSource
|
||||
.replace('{z}', tileObject.coords.z)
|
||||
.replace('{x}', tileObject.coords.x)
|
||||
.replace('{y}', tileObject.coords.y);
|
||||
img.src = url; */
|
||||
tilesCached.add(tile)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
// console.log(tilesCached);
|
||||
mapStore.resetMap(false, 0);
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ export function processClickableElements() {
|
||||
generalListLinks: processStaticLinks(),
|
||||
logoLink: processLogoLink(),
|
||||
mapIcons: processMapIcons(),
|
||||
mapContainer: processMapContainer(),
|
||||
};
|
||||
}
|
||||
|
||||
@ -14,9 +15,9 @@ function processEtapeLinks() {
|
||||
etape_link.addEventListener('click', (e) => e.preventDefault());
|
||||
const couleur = etape_link.dataset.couleur;
|
||||
li.dataset.href = etape_link.attributes.href.value;
|
||||
const iconElements = li.querySelectorAll('.icone-arret > div');
|
||||
const iconElements = li.querySelectorAll('.icone-arret');
|
||||
for (let element of iconElements) {
|
||||
element.style.backgroundColor = couleur;
|
||||
element.style.backgroundColor = couleur;
|
||||
}
|
||||
});
|
||||
|
||||
@ -46,16 +47,10 @@ function processMapIcons() {
|
||||
|
||||
const hrefContainer = icon.querySelector('.url');
|
||||
icon.dataset.href = hrefContainer.innerText;
|
||||
hrefContainer.style.display = "none";
|
||||
|
||||
const colorContainer = icon.querySelector('.couleur');
|
||||
let color = colorContainer.innerText;
|
||||
colorContainer.style.display = "none";
|
||||
|
||||
const iconElements = icon.querySelectorAll('div');
|
||||
for (let iconElement of iconElements) {
|
||||
iconElement.style.backgroundColor = color;
|
||||
}
|
||||
icon.style.backgroundColor = color;
|
||||
|
||||
icon.addEventListener('mouseenter', () => {
|
||||
icon.style.transform = `${icon.style.transform} scale(1.1)`;
|
||||
@ -70,3 +65,11 @@ function processMapIcons() {
|
||||
|
||||
return icons;
|
||||
}
|
||||
|
||||
function processMapContainer() {
|
||||
let mapContainer = document.querySelector('.leaflet-layer');
|
||||
mapContainer.style.height = "100vh";
|
||||
mapContainer.style.width = "100vw";
|
||||
mapContainer.dataset.href = "/";
|
||||
return mapContainer;
|
||||
}
|
@ -11,13 +11,19 @@ export function setActiveNavItem(contentType, href) {
|
||||
}
|
||||
|
||||
if (href === '/' || href === '') {
|
||||
staticNavItems[0].classList.add('is-active');
|
||||
staticNavItems[1].classList.add('is-active');
|
||||
for (let item of etapeNavItems) {
|
||||
item.closest('li').classList.remove('inactive');
|
||||
}
|
||||
|
||||
} else {
|
||||
if (contentType === 'static') {
|
||||
|
||||
if (
|
||||
contentType === 'static'
|
||||
|| contentType === 'partenaire'
|
||||
|| contentType === 'gouvernance'
|
||||
|| contentType === 'ressource'
|
||||
) {
|
||||
for (let item of staticNavItems) {
|
||||
if (item.getAttribute('href') === href) {
|
||||
item.classList.add('is-active');
|
||||
@ -26,9 +32,12 @@ export function setActiveNavItem(contentType, href) {
|
||||
} else if (contentType === 'etape') {
|
||||
for (let item of etapeNavItems) {
|
||||
if (item.getAttribute('href') === href) {
|
||||
item.closest('li').classList.remove('inactive');
|
||||
item.closest('li').classList.remove('inactive');
|
||||
document.querySelector('#etapes-liste').scrollTo(0, item.closest('li').offsetTop);
|
||||
}
|
||||
}
|
||||
} else if (contentType === "ressourceItem") {
|
||||
staticNavItems[2].classList.add('is-active');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,9 +6,6 @@ import AnimationToggle from '../vuejs/AnimationToggle.vue';
|
||||
import VueImageZoomer from 'vue-image-zoomer';
|
||||
import 'vue-image-zoomer/dist/style.css';
|
||||
|
||||
import { useContentStore } from '../stores/content';
|
||||
import { useMapStore } from '../stores/map';
|
||||
|
||||
export function initVueContentModale() {
|
||||
const pinia = createPinia();
|
||||
|
||||
@ -16,14 +13,12 @@ export function initVueContentModale() {
|
||||
.use(pinia)
|
||||
.use(router)
|
||||
.use(VueImageZoomer);
|
||||
|
||||
const store = useContentStore();
|
||||
const mapStore = useMapStore();
|
||||
|
||||
app.mount('#content-modale');
|
||||
|
||||
const animationToggle = createApp(AnimationToggle)
|
||||
.use(pinia)
|
||||
.mount('#animation-toggle');
|
||||
|
||||
return { store, mapStore, router };
|
||||
return router;
|
||||
}
|
||||
|
@ -3,19 +3,24 @@
|
||||
:enter-active-class="animationsAreEnabled ? 'v-enter-active' : 'no-transition'"
|
||||
:leave-active-class="animationsAreEnabled ? 'v-leave-active' : 'no-transition'"
|
||||
>
|
||||
<div v-if="!loading && (
|
||||
contentType === 'etape'
|
||||
|| contentType === 'static'
|
||||
|| contentType === 'gouvernance'
|
||||
|| contentType === 'partenaire'
|
||||
)">
|
||||
<div class="content-wrapper">
|
||||
<div v-if="!partialLoading && contentType != ''">
|
||||
<div
|
||||
class="content-wrapper"
|
||||
:class="
|
||||
contentType === 'ressource' || contentType === 'ressourceItem'
|
||||
? 'ressource' : ''"
|
||||
>
|
||||
<ModaleHeader
|
||||
:loading="loading"
|
||||
:contentType="contentType"
|
||||
:content="content"
|
||||
:couleur="content.couleur || brandColor" />
|
||||
<main>
|
||||
<div v-for="partie in content.parties" class="partie">
|
||||
<RessourceItemHeader
|
||||
v-if="contentType === 'ressourceItem'"
|
||||
:content="content"
|
||||
:couleur="brandColor" />
|
||||
<div v-if="!loading" v-for="partie in content.parties" class="partie">
|
||||
<ModaleCarteSensible
|
||||
v-if="partie.type === 'carte_sensible'"
|
||||
:partie="partie" />
|
||||
@ -42,27 +47,52 @@
|
||||
<ModaleVideos
|
||||
v-if="partie.type === 'video'"
|
||||
:partie="partie" />
|
||||
<ModaleGallerie
|
||||
v-if="partie.type === 'galleries'"
|
||||
:partie="partie"
|
||||
:couleur="content.couleur || brandColor" />
|
||||
<ModaleDocument
|
||||
v-if="partie.type === 'document'"
|
||||
:partie="partie"
|
||||
:couleur="content.couleur || brandColor" />
|
||||
</div>
|
||||
<EquipeContent
|
||||
<div class="content-loading" v-else>
|
||||
<div></div>
|
||||
<p>Chargement du contenu...</p>
|
||||
</div>
|
||||
<template v-if="!loading">
|
||||
<EquipeContent
|
||||
v-if="contentType === 'gouvernance'"
|
||||
:content="content"
|
||||
:couleur="content.couleur || brandColor" />
|
||||
<PartenairesContent
|
||||
:couleur="brandColor" />
|
||||
<PartenairesContent
|
||||
v-if="contentType === 'partenaire'"
|
||||
:content="content" />
|
||||
<CentreDeRessource
|
||||
v-if="contentType === 'ressource'"
|
||||
:content="content"
|
||||
:couleur="brandColor" />
|
||||
<RelatedRessources
|
||||
v-if="contentType === 'etape' && content.relatedRessources?.length"
|
||||
:relatedRessources="content.relatedRessources"
|
||||
:couleur="content.couleur || brandColor" />
|
||||
</template>
|
||||
</main>
|
||||
<PiecesJointes
|
||||
v-if="content.pieces_jointes || content.liens"
|
||||
:content="content"
|
||||
:couleur="content.couleur || brandColor" />
|
||||
<ModaleFooter
|
||||
:contentType="contentType"
|
||||
:content="content"
|
||||
:couleur="content.couleur || brandColor"
|
||||
/>
|
||||
:contentType="contentType"
|
||||
:content="content"
|
||||
:couleur="content.couleur || brandColor" />
|
||||
</div>
|
||||
</div>
|
||||
</Transition>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { watch, onMounted } from 'vue';
|
||||
import { watch, onMounted, nextTick } from 'vue';
|
||||
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useContentStore } from '../stores/content';
|
||||
@ -72,6 +102,10 @@ import ModaleHeader from './components/ModaleHeader.vue';
|
||||
import ModaleFooter from './components/ModaleFooter.vue';
|
||||
import EquipeContent from './components/EquipeContent.vue';
|
||||
import PartenairesContent from './components/PartenairesContent.vue';
|
||||
import CentreDeRessource from './components/CentreDeRessource.vue';
|
||||
import RessourceItemHeader from './components/RessourceItemHeader.vue';
|
||||
import PiecesJointes from './components/PiecesJointes.vue';
|
||||
import RelatedRessources from './components/RelatedRessources.vue';
|
||||
|
||||
import ModaleCarteSensible from './components/parties/ModaleCarteSensible.vue';
|
||||
import ModaleTitreTexte from './components/parties/ModaleTitreTexte.vue';
|
||||
@ -80,6 +114,8 @@ import ModaleDiaporama from './components/parties/ModaleDiaporama.vue';
|
||||
import ModaleEntretien from './components/parties/ModaleEntretien.vue';
|
||||
import ModaleExergue from './components/parties/ModaleExergue.vue';
|
||||
import ModaleVideos from './components/parties/ModaleVideos.vue';
|
||||
import ModaleGallerie from './components/parties/ModaleGallerie.vue';
|
||||
import ModaleDocument from './components/parties/ModaleDocument.vue';
|
||||
|
||||
const store = useContentStore();
|
||||
const mapState = useMapStore();
|
||||
@ -87,94 +123,56 @@ const mapState = useMapStore();
|
||||
const {
|
||||
contentType,
|
||||
content,
|
||||
partialLoading,
|
||||
loading,
|
||||
error,
|
||||
} = storeToRefs(store);
|
||||
|
||||
const { defaultMapCenter, animationDuration, animationsAreEnabled } = storeToRefs(mapState);
|
||||
const { animationsAreEnabled } = storeToRefs(mapState);
|
||||
|
||||
let isModaleEtape, wasModaleEtape;
|
||||
|
||||
const brandColor = "#80c8bf";
|
||||
|
||||
const handleColorChange = () => {
|
||||
watch(
|
||||
() => content.value.couleur,
|
||||
() => {
|
||||
if (contentType.value === 'etape' && content.value.couleur) {
|
||||
document.documentElement.style.setProperty('--etape-couleur', content.value.couleur || brandColor);
|
||||
}
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
const handleMapMovement = () => {
|
||||
watch(
|
||||
() => loading.value,
|
||||
() => {
|
||||
if (!loading.value) {
|
||||
isModaleEtape = contentType.value === 'etape';
|
||||
|
||||
// Define helper functions in variables
|
||||
const disableModaleTransition = () => {
|
||||
document.documentElement.style.setProperty('margin-top', '0');
|
||||
document.documentElement.style.setProperty('transition', 'none');
|
||||
}
|
||||
const setModaleTransition = (enterDelay) => {
|
||||
document.documentElement.style.setProperty('--modale-enter-delay', `${enterDelay}s`);
|
||||
};
|
||||
|
||||
const zoomToContentPlace = () => {
|
||||
mapState.zoomToPlace(
|
||||
content.value.coordinates.lat ? content.value.coordinates.lat : defaultMapCenter.value.lat,
|
||||
content.value.coordinates.lon ? content.value.coordinates.lon : defaultMapCenter.value.lng
|
||||
);
|
||||
};
|
||||
|
||||
if (animationsAreEnabled.value) {
|
||||
|
||||
if (isModaleEtape) {
|
||||
if (!wasModaleEtape) {
|
||||
// national -> détail
|
||||
setModaleTransition(animationDuration.value);
|
||||
zoomToContentPlace();
|
||||
} else {
|
||||
// détail -> détail
|
||||
setModaleTransition(animationDuration.value);
|
||||
zoomToContentPlace();
|
||||
}
|
||||
} else {
|
||||
if (wasModaleEtape) {
|
||||
// détail -> national
|
||||
setModaleTransition(animationDuration.value);
|
||||
mapState.resetMap();
|
||||
} else {
|
||||
// national -> national
|
||||
setModaleTransition(0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isModaleEtape) {
|
||||
zoomToContentPlace();
|
||||
} else {
|
||||
mapState.resetMap();
|
||||
}
|
||||
disableModaleTransition();
|
||||
}
|
||||
|
||||
scrollTo(0, 0);
|
||||
|
||||
wasModaleEtape = isModaleEtape;
|
||||
}
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
nextTick(() => {
|
||||
watch(
|
||||
() => content.value.couleur,
|
||||
() => {
|
||||
if (contentType.value === 'etape' && content.value.couleur) {
|
||||
document.documentElement.style.setProperty('--etape-couleur', content.value.couleur || brandColor);
|
||||
}
|
||||
}
|
||||
);
|
||||
isModaleEtape = contentType.value === 'etape';
|
||||
wasModaleEtape = isModaleEtape;
|
||||
handleColorChange();
|
||||
handleMapMovement();
|
||||
watch(
|
||||
() => partialLoading.value,
|
||||
() => {
|
||||
if (!partialLoading.value) {
|
||||
isModaleEtape = contentType.value === 'etape';
|
||||
mapState.handleMapMovement(
|
||||
isModaleEtape,
|
||||
wasModaleEtape,
|
||||
content.value.coordinates?.lat,
|
||||
content.value.coordinates?.lon
|
||||
);
|
||||
scrollTo(0, 0);
|
||||
wasModaleEtape = isModaleEtape;
|
||||
}
|
||||
}
|
||||
);
|
||||
watch(
|
||||
() => contentType.value,
|
||||
() => {
|
||||
if (contentType.value === '') {
|
||||
mapState.unlockMap();
|
||||
} else {
|
||||
mapState.lockMap();
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
@ -0,0 +1,162 @@
|
||||
<template>
|
||||
<div id="centre-de-ressource" :style="{ '--couleur': couleur }">
|
||||
<div class="filters">
|
||||
<input type="text" v-model="searchQuery" placeholder="Rechercher..." class="search-bar">
|
||||
<select v-model="selectedType">
|
||||
<option value="">Tous les types</option>
|
||||
<option v-for="type in content.ressourceTypes" :key="type" :value="type">
|
||||
{{ type.replace(/_/g, ' ').replace(/^\w/, char => char.toUpperCase()) }}
|
||||
</option>
|
||||
</select>
|
||||
<select v-model="selectedEtape">
|
||||
<option value="">Toutes les étapes</option>
|
||||
<option v-for="etape in allRelatedEtapes" :key="etape" :value="etape">
|
||||
{{ etape }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div v-if="content.intro" v-html="content.intro" class="intro"></div>
|
||||
<template v-for="(type, typeIndex) in filteredTypes" :key="type">
|
||||
<div class="type-section" v-if="ressourcesToDisplay[type] && ressourcesToDisplay[type].length > 0">
|
||||
<h3>{{ type.replace(/_/g, ' ').replace(/^\w/, char => char.toUpperCase()) }}</h3>
|
||||
<div class="ressource-list">
|
||||
<TransitionGroup name="itemFade" tag="div" appear>
|
||||
<div class="ressource-item"
|
||||
v-for="(ressource, ressourceIndex) in ressourcesToDisplay[type]"
|
||||
:key="`${type}-${ressourceIndex}`"
|
||||
:style="{ '--index': ressourceIndex - visibleItemsPerSection }">
|
||||
<RessourceCard :ressource="ressource" :index="`${typeIndex}-${ressourceIndex}`" />
|
||||
</div>
|
||||
</TransitionGroup>
|
||||
</div>
|
||||
<div class="button-container">
|
||||
<div v-if="ressourcesByType(type).length > visibleItemsPerSection
|
||||
&& ressourcesToDisplay[type].length === visibleItemsPerSection"
|
||||
class="ressource-button"
|
||||
@click="loadMore(type)">
|
||||
Voir plus ↓
|
||||
</div>
|
||||
<div v-if="ressourcesToDisplay[type].length > visibleItemsPerSection"
|
||||
class="ressource-button"
|
||||
@click="showLess(type)">
|
||||
Voir moins ↑
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import RessourceCard from './RessourceCard.vue';
|
||||
import useParseDate from '../composables/useParseDates';
|
||||
|
||||
import { ref, computed, watch, nextTick } from 'vue';
|
||||
|
||||
const props = defineProps({
|
||||
content: Object,
|
||||
couleur: String,
|
||||
});
|
||||
|
||||
const searchQuery = ref('');
|
||||
const selectedType = ref('');
|
||||
const ressourcesToDisplay = ref({});
|
||||
const visibleItemsPerSection = 4;
|
||||
const selectedEtape = ref('');
|
||||
const allRelatedEtapes = new Set();
|
||||
|
||||
props.content.ressources.forEach(ressource => {
|
||||
if (ressource.relatedEtape) {
|
||||
allRelatedEtapes.add(ressource.relatedEtape);
|
||||
}
|
||||
})
|
||||
|
||||
const filteredTypes = computed(() => {
|
||||
return selectedType.value ? [selectedType.value] : props.content.ressourceTypes;
|
||||
});
|
||||
|
||||
const ressourcesByType = (type) => {
|
||||
return props.content.ressources
|
||||
.filter(ressource => !selectedEtape.value || ressource.relatedEtape === selectedEtape.value)
|
||||
.filter(ressource => ressource.ressourceType === type)
|
||||
.filter(ressource =>
|
||||
searchQuery.value === '' ||
|
||||
ressource.title.toLowerCase().includes(searchQuery.value.toLowerCase())
|
||||
).sort((a, b) => {
|
||||
if (a.promoted && !b.promoted) return -1;
|
||||
if (!a.promoted && b.promoted) return 1;
|
||||
|
||||
const dateA = useParseDate(a.date);
|
||||
const dateB = useParseDate(b.date);
|
||||
|
||||
return dateB - dateA; // descending order (newest first)
|
||||
});
|
||||
};
|
||||
|
||||
const initializeRessources = (type) => {
|
||||
ressourcesToDisplay.value[type] = ressourcesByType(type).slice(0, visibleItemsPerSection);
|
||||
};
|
||||
|
||||
props.content.ressourceTypes.forEach(type => initializeRessources(type));
|
||||
|
||||
const loadMore = (type) => {
|
||||
const currentLength = ressourcesToDisplay.value[type].length;
|
||||
|
||||
if (currentLength < ressourcesByType(type).length) {
|
||||
ressourcesToDisplay.value[type] = ressourcesByType(type).slice(0, currentLength + visibleItemsPerSection);
|
||||
}
|
||||
};
|
||||
|
||||
const showLess = (type) => {
|
||||
ressourcesToDisplay.value[type] = ressourcesByType(type).slice(0, visibleItemsPerSection);
|
||||
};
|
||||
|
||||
watch(searchQuery, () => {
|
||||
props.content.ressourceTypes.forEach(type => {
|
||||
initializeRessources(type);
|
||||
});
|
||||
});
|
||||
|
||||
watch(ressourcesToDisplay.value, async () => {
|
||||
await nextTick();
|
||||
document.querySelectorAll('.ressource-item > div').forEach(el => {
|
||||
const card = el.__vueParentComponent.exposed;
|
||||
if (card && card.setClickableElements) {
|
||||
card.setClickableElements();
|
||||
}
|
||||
});
|
||||
}, { deep: true });
|
||||
|
||||
watch(selectedType, async () => {
|
||||
await nextTick();
|
||||
document.querySelectorAll('.ressource-item > div').forEach(el => {
|
||||
const card = el.__vueParentComponent.exposed;
|
||||
if (card && card.setClickableElements) {
|
||||
card.setClickableElements();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
watch(selectedEtape, () => {
|
||||
props.content.ressourceTypes.forEach(type => {
|
||||
initializeRessources(type);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.itemFade-enter-active, .itemFade-leave-active {
|
||||
transition: all 0.3s ease !important;
|
||||
transition-delay: calc(0.1s * var(--index)) !important;
|
||||
}
|
||||
|
||||
.itemFade-enter-from, .itemFade-leave-to {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px) !important;
|
||||
}
|
||||
|
||||
.itemFade-enter-to, .itemFade-leave-from {
|
||||
opacity: 1;
|
||||
transform: translateY(0px);
|
||||
}
|
||||
</style>
|
@ -3,7 +3,7 @@
|
||||
<div v-if="content.intro" class="intro">
|
||||
<p v-html="content.intro"></p>
|
||||
</div>
|
||||
<div v-for="equipe in content.gouvernances" class="equipe-item">
|
||||
<div v-for="equipe in [...content.gouvernances].sort((a, b) => a.weight - b.weight)" class="equipe-item">
|
||||
<div class="partie-title">
|
||||
<h3>
|
||||
<p
|
||||
@ -12,9 +12,9 @@
|
||||
</p>
|
||||
</h3>
|
||||
</div>
|
||||
<div v-for="personne in equipe.personnes" class="personne">
|
||||
<div v-for="personne in equipe.personnes" class="personne" :style="personne.photo_url ? '' : { gridTemplateColumns: '0 1fr', gridGap: '0' }">
|
||||
<figure>
|
||||
<img :src="personne.photo_url" :alt="personne.photo_alt">
|
||||
<img v-if="personne.photo_url" :src="personne.photo_url.small" :alt="personne.photo_alt">
|
||||
</figure>
|
||||
<div class="name"><p v-html="personne.prenom + ' ' + personne.nom"></p></div>
|
||||
<div class="description"><p v-html="personne.description" style="white-space: pre-wrap;"></p></div>
|
||||
|
@ -0,0 +1,34 @@
|
||||
<template>
|
||||
<div class="card" :class="direction ? (direction === 'previous' ? 'previous' : 'next') : 'solo'" :data-href="relatedContent.url">
|
||||
<div class="icon" :style="{ backgroundColor: relatedContent.couleur }"></div>
|
||||
<div class="card-content">
|
||||
<div class="infos">
|
||||
<div class="titre">{{ relatedContent.title }} <span>({{ relatedContent.postalCode.slice(0, 2) }})</span></div>
|
||||
<div class="date">Du {{ relatedContent.dates.start.d }} {{ relatedContent.dates.start.m }}<br>au {{ relatedContent.dates.end.d }} {{ relatedContent.dates.end.m }} {{ relatedContent.dates.end.y }}</div>
|
||||
</div>
|
||||
<div class="vignette">
|
||||
<img :src="relatedContent.vignette.url.small" :alt="relatedContent.vignette.alt">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
const props = defineProps({
|
||||
relatedContent: Object,
|
||||
direction: String,
|
||||
});
|
||||
|
||||
import { onMounted } from 'vue';
|
||||
import router from '../../router/router';
|
||||
|
||||
import { handleClickableElements } from '../../utils/handle-navigation.js';
|
||||
|
||||
const siteName = document.querySelector('#site_name').innerText;
|
||||
|
||||
onMounted(() => {
|
||||
const relatedEtapesCards = document.querySelectorAll('.card');
|
||||
const baseUrl = window.location.protocol + "//" + window.location.host;
|
||||
handleClickableElements(relatedEtapesCards, router, baseUrl, siteName);
|
||||
});
|
||||
</script>
|
@ -1,51 +1,53 @@
|
||||
<template>
|
||||
<Transition name="fade">
|
||||
<div v-if="isOpen" class="image-viewer-wrapper">
|
||||
<div v-if="isOpen" class="image-viewer-wrapper" @click="(e) => checkOutsideClick(e.target)">
|
||||
<div v-if="!swiperContent" class="img-modale simple-viewer">
|
||||
<figure class="img-wrapper">
|
||||
<img :src="image.src" :alt="image.alt">
|
||||
<figcaption>{{ image.alt }}</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
<div v-else class="img-modale swiper-viewer">
|
||||
<div class="swiper-wrapper">
|
||||
<swiper-container
|
||||
:slidesPerView="1"
|
||||
:centeredSlides="true"
|
||||
:loop="true"
|
||||
:navigation="true"
|
||||
:pagination="true"
|
||||
:initialSlide="currentImgIndex"
|
||||
:injectStyles="[`
|
||||
.swiper-button-next, .swiper-button-prev {
|
||||
color: white;
|
||||
top: 50%;
|
||||
}
|
||||
.swiper-pagination-bullet:not(.swiper-pagination-bullet-active) {
|
||||
background: white;
|
||||
opacity: 0.8;
|
||||
}
|
||||
`]"
|
||||
>
|
||||
<swiper-slide v-for="media in swiperContent">
|
||||
<figure class="popup-figure">
|
||||
<img :src="media.src" :alt="media.alt" class="popup-img">
|
||||
<figcaption>{{ media.alt }}</figcaption>
|
||||
</figure>
|
||||
</swiper-slide>
|
||||
</swiper-container>
|
||||
</div>
|
||||
</div>
|
||||
<button @click="close" class="close-button">
|
||||
<div></div>
|
||||
<div></div>
|
||||
</button>
|
||||
<figure class="img-wrapper">
|
||||
<img :src="image.src" :alt="image.alt">
|
||||
<figcaption>{{ image.alt }}</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
</Transition>
|
||||
<div v-else class="img-modale swiper-viewer">
|
||||
<div class="swiper-wrapper">
|
||||
<swiper-container
|
||||
:slidesPerView="1"
|
||||
:centeredSlides="true"
|
||||
:loop="true"
|
||||
:navigation="true"
|
||||
:pagination="true"
|
||||
:initialSlide="currentSlideIndex"
|
||||
:keyboard="{ enabled: true }"
|
||||
:injectStyles="[`
|
||||
.swiper-button-next, .swiper-button-prev {
|
||||
color: white;
|
||||
top: 50%;
|
||||
}
|
||||
.swiper-pagination-bullet:not(.swiper-pagination-bullet-active) {
|
||||
background: white;
|
||||
opacity: 0.8;
|
||||
}
|
||||
`]"
|
||||
>
|
||||
<swiper-slide v-for="media in swiperContent">
|
||||
<figure class="popup-figure">
|
||||
<img :src="media.src" :alt="media.alt" class="popup-img">
|
||||
<figcaption>{{ media.alt }}</figcaption>
|
||||
</figure>
|
||||
</swiper-slide>
|
||||
</swiper-container>
|
||||
</div>
|
||||
</div>
|
||||
<button @click="close" class="close-button">
|
||||
<div></div>
|
||||
<div></div>
|
||||
</button>
|
||||
</div>
|
||||
</Transition>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, watch } from 'vue';
|
||||
import { nextTick, ref, watch } from 'vue';
|
||||
import { useWaitForImages } from '../composables/useWaitForImages';
|
||||
const props = defineProps({
|
||||
isOpen: Boolean,
|
||||
image: {
|
||||
@ -58,28 +60,83 @@ const props = defineProps({
|
||||
}
|
||||
});
|
||||
|
||||
const currentImgIndex = ref(0);
|
||||
const currentSlideIndex = ref(0);
|
||||
|
||||
watch(
|
||||
() => props.isOpen,
|
||||
() => {
|
||||
if (props.isOpen && props.swiperContent?.length) {
|
||||
for (let i = 0; i < props.swiperContent.length; i++) {
|
||||
const currentImgSrc = props.image.src;
|
||||
const truncatedSrc = currentImgSrc.substring(currentImgSrc.indexOf("/sites"));
|
||||
if (props.swiperContent[i].src === truncatedSrc) {
|
||||
currentImgIndex.value = i;
|
||||
break;
|
||||
toggleElementsOver(props.isOpen);
|
||||
if (props.isOpen) {
|
||||
nextTick(() => {
|
||||
const swiperContainer = document.querySelector('.image-viewer-wrapper');
|
||||
setCaptions(swiperContainer);
|
||||
})
|
||||
if (props.swiperContent?.length) {
|
||||
checkCurrentImage();
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
)
|
||||
|
||||
function toggleElementsOver(isOpen) {
|
||||
const header = document.querySelector('.layout-container > header');
|
||||
const retractedList = document.querySelector('.retracted');
|
||||
if (isOpen) {
|
||||
header.style.opacity = 0;
|
||||
setTimeout(() => {
|
||||
header.style.display = 'none';
|
||||
}, 300);
|
||||
if (retractedList) {
|
||||
retractedList.style.display = 'none';
|
||||
}
|
||||
} else {
|
||||
header.style.display = 'block';
|
||||
header.style.opacity = 1;
|
||||
if (retractedList) {
|
||||
retractedList.style.display = 'flex';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function checkCurrentImage() {
|
||||
for (let i = 0; i < props.swiperContent.length; i++) {
|
||||
if (props.swiperContent[i].src.split('/').pop().split('?')[0] === props.image.src.split('/').pop().split('?')[0]) {
|
||||
currentSlideIndex.value = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setCaptions(container) {
|
||||
useWaitForImages(container, () => {
|
||||
const slides = container.querySelectorAll('swiper-slide');
|
||||
if (slides.length) {
|
||||
slides.forEach((slide) => {
|
||||
const img = slide.querySelector('img');
|
||||
const caption = slide.querySelector('figcaption');
|
||||
caption.style.width = `${img.offsetWidth}px`;
|
||||
});
|
||||
} else {
|
||||
const img = container.querySelector('img');
|
||||
const caption = container.querySelector('figcaption');
|
||||
caption.style.width = `${img.offsetWidth}px`;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const emit = defineEmits(['close']);
|
||||
|
||||
const close = () => {
|
||||
emit('close');
|
||||
};
|
||||
|
||||
function checkOutsideClick(target) {
|
||||
if (target.classList.contains('swiper-wrapper')
|
||||
|| target.tagName === 'SWIPER-SLIDE'
|
||||
|| target.tagName === 'FIGURE') {
|
||||
close();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
@ -108,18 +165,33 @@ const close = () => {
|
||||
align-items: center;
|
||||
}
|
||||
> .simple-viewer {
|
||||
> .img-wrapper {
|
||||
max-width: 60%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
> figure.img-wrapper {
|
||||
margin-top: 3%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 10vw;
|
||||
box-sizing: border-box;
|
||||
> img {
|
||||
width: 100%;
|
||||
max-height: 100%;
|
||||
max-width: 100%;
|
||||
width: auto !important;
|
||||
height: auto !important;
|
||||
margin-bottom: -5px;
|
||||
object-fit: contain !important;
|
||||
}
|
||||
> figcaption {
|
||||
margin: 0;
|
||||
background-color: white;
|
||||
font-size: 0.8rem; /* cf main.scss */
|
||||
padding: 0.5rem 1.5rem;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -133,26 +205,37 @@ const close = () => {
|
||||
swiper-slide {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
align-items: center;
|
||||
figure {
|
||||
margin-top: 3%;
|
||||
max-width: 60%;
|
||||
height: 80%;
|
||||
max-height: 80vh;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 10vw;
|
||||
box-sizing: border-box;
|
||||
img {
|
||||
height: -webkit-fill-available !important;
|
||||
max-height: 100%;
|
||||
max-width: 100%;
|
||||
width: auto !important;
|
||||
height: auto !important;
|
||||
margin-bottom: -5px;
|
||||
object-fit: cover;
|
||||
object-fit: contain !important;
|
||||
}
|
||||
figcaption {
|
||||
margin: 0;
|
||||
background-color: white;
|
||||
font-size: 0.8rem; /* cf main.scss */
|
||||
padding: 0.5rem 1.5rem;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
}
|
||||
&::part(pagination) {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user