Refactor: snake_case → camelCase dans blueprints, templates et vues
- Blueprints : renommage des champs (member_name, related_articles, background_video, play_links, images_gallery, external_links) et des noms de sections - Templates JSON PHP : clés de sortie et appels ->method() en camelCase - Vues Svelte (Play, Portfolio) : accès aux données alignés Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
d8a0fde34c
commit
69859cc60f
19 changed files with 63 additions and 76 deletions
|
|
@ -2,7 +2,7 @@ title: Membre de l'équipe
|
||||||
accept: image/*
|
accept: image/*
|
||||||
|
|
||||||
fields:
|
fields:
|
||||||
member_name:
|
memberName:
|
||||||
label: Nom
|
label: Nom
|
||||||
type: text
|
type: text
|
||||||
required: true
|
required: true
|
||||||
|
|
|
||||||
|
|
@ -78,5 +78,5 @@ tabs:
|
||||||
ratio: 3/5
|
ratio: 3/5
|
||||||
cover: true
|
cover: true
|
||||||
back: '#0e1e43'
|
back: '#0e1e43'
|
||||||
text: "{{ file.member_name }}"
|
text: "{{ file.memberName }}"
|
||||||
info: "{{ file.role }}"
|
info: "{{ file.role }}"
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ tabs:
|
||||||
related:
|
related:
|
||||||
type: fields
|
type: fields
|
||||||
fields:
|
fields:
|
||||||
related_articles:
|
relatedArticles:
|
||||||
label: Articles recommandés
|
label: Articles recommandés
|
||||||
type: pages
|
type: pages
|
||||||
query: site.find('blog').children.listed
|
query: site.find('blog').children.listed
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ tabs:
|
||||||
cover: true
|
cover: true
|
||||||
ratio: 16/9
|
ratio: 16/9
|
||||||
info: "{{ page.date.toDate('d/m/Y') }}"
|
info: "{{ page.date.toDate('d/m/Y') }}"
|
||||||
articles_list:
|
articlesList:
|
||||||
label: Articles
|
label: Articles
|
||||||
type: pages
|
type: pages
|
||||||
headline: Liste des articles
|
headline: Liste des articles
|
||||||
|
|
|
||||||
|
|
@ -67,20 +67,7 @@ columns:
|
||||||
uploads:
|
uploads:
|
||||||
template: image
|
template: image
|
||||||
help: Petite image carrée représentant le jeu
|
help: Petite image carrée représentant le jeu
|
||||||
background_image:
|
playLinks:
|
||||||
label: Image d'arrière plan
|
|
||||||
type: files
|
|
||||||
layout: cards
|
|
||||||
max: 1
|
|
||||||
accept: image/*
|
|
||||||
translate: false
|
|
||||||
image:
|
|
||||||
ratio: 16/9
|
|
||||||
cover: true
|
|
||||||
uploads:
|
|
||||||
template: image
|
|
||||||
help: Image affichée en arrière-plan quand le jeu est sélectionné
|
|
||||||
play_links:
|
|
||||||
label: Lien(s) pour jouer
|
label: Lien(s) pour jouer
|
||||||
help: Sans lien renseigner, le jeu aura une étiquette "coming soon" et ne sera pas jouable.
|
help: Sans lien renseigner, le jeu aura une étiquette "coming soon" et ne sera pas jouable.
|
||||||
type: structure
|
type: structure
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ tabs:
|
||||||
columns:
|
columns:
|
||||||
- width: 2/3
|
- width: 2/3
|
||||||
sections:
|
sections:
|
||||||
hero_content:
|
heroContent:
|
||||||
type: fields
|
type: fields
|
||||||
fields:
|
fields:
|
||||||
subtitle:
|
subtitle:
|
||||||
|
|
@ -40,7 +40,7 @@ tabs:
|
||||||
media:
|
media:
|
||||||
type: fields
|
type: fields
|
||||||
fields:
|
fields:
|
||||||
background_video:
|
backgroundVideo:
|
||||||
label: Vidéo d'arrière-plan
|
label: Vidéo d'arrière-plan
|
||||||
type: files
|
type: files
|
||||||
layout: cards
|
layout: cards
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ tabs:
|
||||||
label: Jeux
|
label: Jeux
|
||||||
icon: grid
|
icon: grid
|
||||||
sections:
|
sections:
|
||||||
games_list:
|
gamesList:
|
||||||
type: pages
|
type: pages
|
||||||
headline: Liste des jeux
|
headline: Liste des jeux
|
||||||
layout: cards
|
layout: cards
|
||||||
|
|
@ -21,5 +21,5 @@ tabs:
|
||||||
query: page.thumbnail.toFile
|
query: page.thumbnail.toFile
|
||||||
cover: true
|
cover: true
|
||||||
template: game
|
template: game
|
||||||
info: "{{ page.status_label }}"
|
info: "{{ page.statusLabel }}"
|
||||||
create: game
|
create: game
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ tabs:
|
||||||
columns:
|
columns:
|
||||||
- width: 1/3
|
- width: 1/3
|
||||||
sections:
|
sections:
|
||||||
meta_fields:
|
metaFields:
|
||||||
type: fields
|
type: fields
|
||||||
fields:
|
fields:
|
||||||
backgroundImage:
|
backgroundImage:
|
||||||
|
|
@ -30,7 +30,7 @@ tabs:
|
||||||
ratio: 15/9
|
ratio: 15/9
|
||||||
- width: 2/3
|
- width: 2/3
|
||||||
sections:
|
sections:
|
||||||
projects_list:
|
projectsList:
|
||||||
type: pages
|
type: pages
|
||||||
headline: Liste des projets
|
headline: Liste des projets
|
||||||
layout: cards
|
layout: cards
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ columns:
|
||||||
images:
|
images:
|
||||||
type: fields
|
type: fields
|
||||||
fields:
|
fields:
|
||||||
images_gallery:
|
imagesGallery:
|
||||||
width: 2/3
|
width: 2/3
|
||||||
label: Galerie d'image
|
label: Galerie d'image
|
||||||
type: files
|
type: files
|
||||||
|
|
@ -123,7 +123,7 @@ columns:
|
||||||
links:
|
links:
|
||||||
type: fields
|
type: fields
|
||||||
fields:
|
fields:
|
||||||
external_links:
|
externalLinks:
|
||||||
label: Liens externes
|
label: Liens externes
|
||||||
type: structure
|
type: structure
|
||||||
fields:
|
fields:
|
||||||
|
|
|
||||||
|
|
@ -2,20 +2,20 @@
|
||||||
|
|
||||||
$specificData = [
|
$specificData = [
|
||||||
'intro' => [
|
'intro' => [
|
||||||
'title' => $page->intro_title()->value(),
|
'title' => $page->introTitle()->value(),
|
||||||
'text' => $page->intro_text()->value()
|
'text' => $page->introText()->value()
|
||||||
],
|
],
|
||||||
'mission' => [
|
'mission' => [
|
||||||
'title' => $page->mission_title()->value(),
|
'title' => $page->missionTitle()->value(),
|
||||||
'text' => $page->mission_text()->toBlocks()
|
'text' => $page->missionText()->toBlocks()
|
||||||
],
|
],
|
||||||
'manifesto' => [
|
'manifesto' => [
|
||||||
'title' => $page->manifesto_title()->value(),
|
'title' => $page->manifestoTitle()->value(),
|
||||||
'text' => $page->manifesto_text()->toBlocks()
|
'text' => $page->manifestoText()->toBlocks()
|
||||||
],
|
],
|
||||||
'team' => [
|
'team' => [
|
||||||
'title' => $page->team_title()->value(),
|
'title' => $page->teamTitle()->value(),
|
||||||
'members' => $page->team_members()->toStructure()->map(function($member) {
|
'members' => $page->teamMembers()->toStructure()->map(function($member) {
|
||||||
return [
|
return [
|
||||||
'name' => $member->name()->value(),
|
'name' => $member->name()->value(),
|
||||||
'role' => $member->role()->value(),
|
'role' => $member->role()->value(),
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,21 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
$related = $page->related_articles()->toPages();
|
$related = $page->relatedArticles()->toPages();
|
||||||
if ($related->isEmpty()) {
|
if ($related->isEmpty()) {
|
||||||
$related = $page->siblings()->listed()->not($page)->shuffle()->limit(3);
|
$related = $page->siblings()->listed()->not($page)->shuffle()->limit(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
$specificData = [
|
$specificData = [
|
||||||
'date' => $page->date()->toDate('Y-m-d'),
|
'date' => $page->date()->toDate('Y-m-d'),
|
||||||
'date_formatted' => $page->date()->toDate('d/m/Y'),
|
'dateFormatted' => $page->date()->toDate('d/m/Y'),
|
||||||
'intro' => $page->intro()->value(),
|
'intro' => $page->intro()->value(),
|
||||||
'author' => [
|
'author' => [
|
||||||
'name' => $page->author_name()->value(),
|
'name' => $page->authorName()->value(),
|
||||||
'role' => $page->author_role()->value(),
|
'role' => $page->authorRole()->value(),
|
||||||
'photo' => $page->author_photo()->toFile()?->url()
|
'photo' => $page->authorPhoto()->toFile()?->url()
|
||||||
],
|
],
|
||||||
'cover' => $page->cover()->toFile()?->url(),
|
'cover' => $page->cover()->toFile()?->url(),
|
||||||
'content' => $page->article_content()->toBlocks(),
|
'content' => $page->articleContent()->toBlocks(),
|
||||||
'tags' => $page->tags()->split(),
|
'tags' => $page->tags()->split(),
|
||||||
'related' => $related->map(function($rec) {
|
'related' => $related->map(function($rec) {
|
||||||
return [
|
return [
|
||||||
|
|
@ -25,7 +25,7 @@ $specificData = [
|
||||||
'cover' => $rec->cover()->toFile()?->thumb(['width' => 400])->url()
|
'cover' => $rec->cover()->toFile()?->thumb(['width' => 400])->url()
|
||||||
];
|
];
|
||||||
})->values(),
|
})->values(),
|
||||||
'parent_url' => $page->parent()->url()
|
'parentUrl' => $page->parent()->url()
|
||||||
];
|
];
|
||||||
|
|
||||||
$pageData = array_merge($genericData, $specificData);
|
$pageData = array_merge($genericData, $specificData);
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
$specificData = [
|
$specificData = [
|
||||||
'intro' => [
|
'intro' => [
|
||||||
'title' => $page->intro_title()->value(),
|
'title' => $page->introTitle()->value(),
|
||||||
'text' => $page->intro_text()->value()
|
'text' => $page->introText()->value()
|
||||||
],
|
],
|
||||||
'articles' => $page->children()->listed()->sortBy('date', 'desc')->map(function($article) {
|
'articles' => $page->children()->listed()->sortBy('date', 'desc')->map(function($article) {
|
||||||
return [
|
return [
|
||||||
|
|
@ -11,11 +11,11 @@ $specificData = [
|
||||||
'slug' => $article->slug(),
|
'slug' => $article->slug(),
|
||||||
'url' => $article->url(),
|
'url' => $article->url(),
|
||||||
'date' => $article->date()->toDate('Y-m-d'),
|
'date' => $article->date()->toDate('Y-m-d'),
|
||||||
'date_formatted' => $article->date()->toDate('d/m/Y'),
|
'dateFormatted' => $article->date()->toDate('d/m/Y'),
|
||||||
'intro' => $article->intro()->excerpt(200),
|
'intro' => $article->intro()->excerpt(200),
|
||||||
'cover' => $article->cover()->toFile()?->url(),
|
'cover' => $article->cover()->toFile()?->url(),
|
||||||
'author_name' => $article->author_name()->value(),
|
'authorName' => $article->authorName()->value(),
|
||||||
'author_photo' => $article->author_photo()->toFile()?->url()
|
'authorPhoto' => $article->authorPhoto()->toFile()?->url()
|
||||||
];
|
];
|
||||||
})->values()
|
})->values()
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,11 @@
|
||||||
$specificData = [
|
$specificData = [
|
||||||
'description' => $page->description()->value(),
|
'description' => $page->description()->value(),
|
||||||
'rules' => $page->rules()->toBlocks(),
|
'rules' => $page->rules()->toBlocks(),
|
||||||
'game_status' => $page->game_status()->value(),
|
'gameStatus' => $page->gameStatus()->value(),
|
||||||
'is_embedded' => $page->is_embedded()->toBool(),
|
'isEmbedded' => $page->isEmbedded()->toBool(),
|
||||||
'play_link' => $page->play_link()->value(),
|
'playLink' => $page->playLink()->value(),
|
||||||
'cover' => $page->cover()->toFile()?->url(),
|
'cover' => $page->cover()->toFile()?->url(),
|
||||||
'parent_url' => $page->parent()->url()
|
'parentUrl' => $page->parent()->url()
|
||||||
];
|
];
|
||||||
|
|
||||||
$pageData = array_merge($genericData, $specificData);
|
$pageData = array_merge($genericData, $specificData);
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,15 @@
|
||||||
|
|
||||||
$specificData = [
|
$specificData = [
|
||||||
'hero' => [
|
'hero' => [
|
||||||
'title' => $page->hero_title()->value(),
|
'title' => $page->heroTitle()->value(),
|
||||||
'title_highlight' => $page->hero_title_highlight()->value(),
|
'titleHighlight' => $page->heroTitleHighlight()->value(),
|
||||||
'subtitle' => $page->hero_subtitle()->value(),
|
'subtitle' => $page->heroSubtitle()->value(),
|
||||||
'ctaText' => $page->ctaText()->value(),
|
'ctaText' => $page->ctaText()->value(),
|
||||||
'ctaPath' => $page->ctaLink()->toPage()?->id() ?? '#',
|
'ctaPath' => $page->ctaLink()->toPage()?->id() ?? '#',
|
||||||
'image' => $page->hero_image()->toFile()?->url()
|
'image' => $page->heroImage()->toFile()?->url()
|
||||||
],
|
],
|
||||||
'background_video' => $page->background_video()->toFile()?->url(),
|
'backgroundVideo' => $page->backgroundVideo()->toFile()?->url(),
|
||||||
'floating_bubbles' => $page->floating_bubbles()->toStructure()->map(function($bubble) {
|
'floatingBubbles' => $page->floatingBubbles()->toStructure()->map(function($bubble) {
|
||||||
return [
|
return [
|
||||||
'text' => $bubble->text()->value(),
|
'text' => $bubble->text()->value(),
|
||||||
'position' => $bubble->position()->value()
|
'position' => $bubble->position()->value()
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@ $specificData = [
|
||||||
'lettering' => $game->lettering()->toFile()?->url(),
|
'lettering' => $game->lettering()->toFile()?->url(),
|
||||||
'description' => $game->description()->value(),
|
'description' => $game->description()->value(),
|
||||||
'thumbnail' => $game->thumbnail()->toFile()?->url(),
|
'thumbnail' => $game->thumbnail()->toFile()?->url(),
|
||||||
'background_image' => $game->background_image()->toFile()?->url(),
|
'backgroundImage' => $game->backgroundImage()->toFile()?->url(),
|
||||||
'play_links' => $game->play_links()->toStructure()->map(fn($l) => [
|
'playLinks' => $game->playLinks()->toStructure()->map(fn($l) => [
|
||||||
'label' => $l->label()->value(),
|
'label' => $l->label()->value(),
|
||||||
'url' => $l->url()->value(),
|
'url' => $l->url()->value(),
|
||||||
])->values(),
|
])->values(),
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,26 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
$specificData = [
|
$specificData = [
|
||||||
'background_image' => $page->backgroundImage()->toFile()?->url(),
|
'backgroundImage' => $page->backgroundImage()->toFile()?->url(),
|
||||||
'projects' => $page->children()->listed()->map(function($project) {
|
'projects' => $page->children()->listed()->map(function($project) {
|
||||||
return [
|
return [
|
||||||
'title' => $project->title()->value(),
|
'title' => $project->title()->value(),
|
||||||
'slug' => $project->slug(),
|
'slug' => $project->slug(),
|
||||||
'catchphrase' => $project->catchphrase()->value(),
|
'catchPhrase' => $project->catchPhrase()->value(),
|
||||||
'description' => $project->description()->value(),
|
'description' => $project->description()->value(),
|
||||||
'thumbnail' => $project->thumbnail()->toFile()?->url(),
|
'thumbnail' => $project->thumbnail()->toFile()?->url(),
|
||||||
'images_gallery' => $project->images_gallery()->toFiles()->map(fn($f) => [
|
'imagesGallery' => $project->imagesGallery()->toFiles()->map(fn($f) => [
|
||||||
'src' => $f->url(),
|
'src' => $f->url(),
|
||||||
'srcset' => $f->srcset('gallery'),
|
'srcset' => $f->srcset('gallery'),
|
||||||
'webp' => $f->srcset('gallery-webp'),
|
'webp' => $f->srcset('gallery-webp'),
|
||||||
])->values(),
|
])->values(),
|
||||||
'mockup' => $project->mockup()->toFile()?->url(),
|
'mockup' => $project->mockup()->toFile()?->url(),
|
||||||
'gallery_background_color' => $project->galleryBackgroundColor()->value(),
|
'galleryBackgroundColor' => $project->galleryBackgroundColor()->value(),
|
||||||
'keywords' => $project->keywords()->toStructure()->map(fn($i) => [
|
'keywords' => $project->keywords()->toStructure()->map(fn($i) => [
|
||||||
'label' => $i->label()->value(),
|
'label' => $i->label()->value(),
|
||||||
'text' => $i->text()->value(),
|
'text' => $i->text()->value(),
|
||||||
])->values(),
|
])->values(),
|
||||||
'external_links' => $project->external_links()->toStructure()->map(fn($i) => [
|
'externalLinks' => $project->externalLinks()->toStructure()->map(fn($i) => [
|
||||||
'label' => $i->label()->value(),
|
'label' => $i->label()->value(),
|
||||||
'url' => $i->url()->value(),
|
'url' => $i->url()->value(),
|
||||||
])->values(),
|
])->values(),
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,10 @@ $specificData = [
|
||||||
'impact' => $page->impact()->split(','),
|
'impact' => $page->impact()->split(','),
|
||||||
'category' => $page->category()->value(),
|
'category' => $page->category()->value(),
|
||||||
'platforms' => $page->platforms()->split(','),
|
'platforms' => $page->platforms()->split(','),
|
||||||
'client_name' => $page->client_name()->value(),
|
'clientName' => $page->clientName()->value(),
|
||||||
'apple_link' => $page->apple_link()->value(),
|
'appleLink' => $page->appleLink()->value(),
|
||||||
'android_link' => $page->android_link()->value(),
|
'androidLink' => $page->androidLink()->value(),
|
||||||
'web_link' => $page->web_link()->value(),
|
'webLink' => $page->webLink()->value(),
|
||||||
'prev' => $page->prev() ? [
|
'prev' => $page->prev() ? [
|
||||||
'title' => $page->prev()->title()->value(),
|
'title' => $page->prev()->title()->value(),
|
||||||
'url' => $page->prev()->url()
|
'url' => $page->prev()->url()
|
||||||
|
|
@ -22,7 +22,7 @@ $specificData = [
|
||||||
'title' => $page->next()->title()->value(),
|
'title' => $page->next()->title()->value(),
|
||||||
'url' => $page->next()->url()
|
'url' => $page->next()->url()
|
||||||
] : null,
|
] : null,
|
||||||
'parent_url' => $page->parent()->url()
|
'parentUrl' => $page->parent()->url()
|
||||||
];
|
];
|
||||||
|
|
||||||
$pageData = array_merge($genericData, $specificData);
|
$pageData = array_merge($genericData, $specificData);
|
||||||
|
|
|
||||||
|
|
@ -65,8 +65,8 @@
|
||||||
|
|
||||||
<!-- Fond : image + overlay, crossfade au changement de jeu -->
|
<!-- Fond : image + overlay, crossfade au changement de jeu -->
|
||||||
<div class="play-bg" class:is-out={isOut} aria-hidden="true">
|
<div class="play-bg" class:is-out={isOut} aria-hidden="true">
|
||||||
{#if displayedGame?.background_image}
|
{#if displayedGame?.backgroundImage}
|
||||||
<img class="play-bg-img" src={displayedGame.background_image} alt="" />
|
<img class="play-bg-img" src={displayedGame.backgroundImage} alt="" />
|
||||||
{/if}
|
{/if}
|
||||||
<div class="play-bg-overlay"></div>
|
<div class="play-bg-overlay"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -99,8 +99,8 @@
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div class="play-actions">
|
<div class="play-actions">
|
||||||
{#if displayedGame.play_links?.length}
|
{#if displayedGame.playLinks?.length}
|
||||||
{#each displayedGame.play_links as link}
|
{#each displayedGame.playLinks as link}
|
||||||
<a
|
<a
|
||||||
href={link.url}
|
href={link.url}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
// --- Derived ---
|
// --- Derived ---
|
||||||
const isActive = $derived(slides.active?.id === 'portfolio')
|
const isActive = $derived(slides.active?.id === 'portfolio')
|
||||||
const projects = $derived(data?.projects ?? [])
|
const projects = $derived(data?.projects ?? [])
|
||||||
const backgroundImage = $derived(data?.background_image ?? null)
|
const backgroundImage = $derived(data?.backgroundImage ?? null)
|
||||||
const currentProject = $derived(projects[currentIndex] ?? null)
|
const currentProject = $derived(projects[currentIndex] ?? null)
|
||||||
|
|
||||||
// Capture du hash synchrone avant que tout effect puisse le modifier
|
// Capture du hash synchrone avant que tout effect puisse le modifier
|
||||||
|
|
@ -96,7 +96,7 @@
|
||||||
{#if currentProject}
|
{#if currentProject}
|
||||||
<!-- Galerie animation (gauche) -->
|
<!-- Galerie animation (gauche) -->
|
||||||
<div class="portfolio-gallery" aria-hidden="true">
|
<div class="portfolio-gallery" aria-hidden="true">
|
||||||
<GalleryAnimation images={currentProject.images_gallery} backgroundColor={currentProject.gallery_background_color} />
|
<GalleryAnimation images={currentProject.imagesGallery} backgroundColor={currentProject.galleryBackgroundColor} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Mockup device (centre) -->
|
<!-- Mockup device (centre) -->
|
||||||
|
|
@ -107,7 +107,7 @@
|
||||||
<!-- Infos projet (droite) -->
|
<!-- Infos projet (droite) -->
|
||||||
<div class="portfolio-text" aria-live="polite">
|
<div class="portfolio-text" aria-live="polite">
|
||||||
<h2>{currentProject.title}</h2>
|
<h2>{currentProject.title}</h2>
|
||||||
<h3 class="portfolio-catchphrase gradient-blue">{@html currentProject.catchphrase}</h3>
|
<h3 class="portfolio-catchphrase gradient-blue">{@html currentProject.catchPhrase}</h3>
|
||||||
<div class="portfolio-description">{@html currentProject.description}</div>
|
<div class="portfolio-description">{@html currentProject.description}</div>
|
||||||
<div class="portfolio-keywords">
|
<div class="portfolio-keywords">
|
||||||
{#each currentProject.keywords as kw}
|
{#each currentProject.keywords as kw}
|
||||||
|
|
@ -115,7 +115,7 @@
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
<div class="portfolio-links">
|
<div class="portfolio-links">
|
||||||
{#each currentProject.external_links as link}
|
{#each currentProject.externalLinks as link}
|
||||||
<a href={link.url} target="_blank" rel="noopener noreferrer" class="button earth-icon">{link.label}</a>
|
<a href={link.url} target="_blank" rel="noopener noreferrer" class="button earth-icon">{link.label}</a>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue