Chocks Away page #10

Merged
jamesp merged 1 commits from chocks-away into main 2026-06-29 16:15:03 -04:00
9 changed files with 157 additions and 3 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

+1 -2
View File
@@ -9,8 +9,7 @@ const webcamImage = `${webcamBase}/webcam/apron.jpg`;
<p class="eyebrow">Live apron webcam</p> <p class="eyebrow">Live apron webcam</p>
<h1 id="webcam-heading" class="section-title">Swansea Airport apron</h1> <h1 id="webcam-heading" class="section-title">Swansea Airport apron</h1>
<p class="section-copy"> <p class="section-copy">
A live view across the apron. The image refreshes automatically every 30 seconds. View from the tower facing south west.<br>The peak in the middle of the view is Cefn Bryn, 5500 metres distant.</p>
</p>
</div> </div>
<div class="webcam-status" aria-live="polite"> <div class="webcam-status" aria-live="polite">
<span class="status-dot waiting" id="webcam-dot"></span> <span class="status-dot waiting" id="webcam-dot"></span>
+3
View File
@@ -4,6 +4,7 @@ import {
fallbackDocuments, fallbackDocuments,
fallbackEvents, fallbackEvents,
fallbackFuelPrices, fallbackFuelPrices,
fallbackGiftShopImages,
fallbackHomepageBannerImages, fallbackHomepageBannerImages,
fallbackHomepageVolunteerImages, fallbackHomepageVolunteerImages,
fallbackNews, fallbackNews,
@@ -48,6 +49,7 @@ const directusDebug = ['1', 'true', 'yes', 'on'].includes((process.env.DIRECTUS_
const homepageBannerFolder = process.env.DIRECTUS_HOMEPAGE_BANNER_FOLDER ?? 'homepage-banners'; const homepageBannerFolder = process.env.DIRECTUS_HOMEPAGE_BANNER_FOLDER ?? 'homepage-banners';
const homepageVolunteersFolder = process.env.DIRECTUS_HOMEPAGE_VOLUNTEERS_FOLDER ?? 'homepage-volunteers'; const homepageVolunteersFolder = process.env.DIRECTUS_HOMEPAGE_VOLUNTEERS_FOLDER ?? 'homepage-volunteers';
const cafePageFolder = process.env.DIRECTUS_CAFE_PAGE_FOLDER ?? 'cafe-page'; const cafePageFolder = process.env.DIRECTUS_CAFE_PAGE_FOLDER ?? 'cafe-page';
const giftShopFolder = process.env.DIRECTUS_GIFT_SHOP_FOLDER ?? 'gift-shop';
type DirectusFolder = { type DirectusFolder = {
id: string; id: string;
@@ -300,6 +302,7 @@ export const getHomepageVolunteerImages = () =>
shuffleRest: true, shuffleRest: true,
}); });
export const getCafePageImages = () => getImagesFromFolder(cafePageFolder, fallbackCafePageImages); export const getCafePageImages = () => getImagesFromFolder(cafePageFolder, fallbackCafePageImages);
export const getGiftShopImages = () => getImagesFromFolder(giftShopFolder, fallbackGiftShopImages);
function stripHtml(value = ''): string { function stripHtml(value = ''): string {
return value return value
+7
View File
@@ -100,6 +100,13 @@ export const fallbackCafePageImages: HomepageBannerImage[] = [
}, },
]; ];
export const fallbackGiftShopImages: HomepageBannerImage[] = [
{
src: '/images/camain.jpg',
alt: 'Chocks Away Gift Shop at Swansea Airport',
},
];
export const fallbackHomepageVolunteerImages: HomepageBannerImage[] = [ export const fallbackHomepageVolunteerImages: HomepageBannerImage[] = [
{ {
src: '/images/cessna.jpg', src: '/images/cessna.jpg',
+1
View File
@@ -23,6 +23,7 @@ export const site = {
href: '/about/', href: '/about/',
children: [ children: [
{ label: 'Cafe', href: '/about/cafe/' }, { label: 'Cafe', href: '/about/cafe/' },
{ label: 'Gift Shop', href: '/about/gift-shop/' },
{ label: 'History', href: '/about/history/' }, { label: 'History', href: '/about/history/' },
{ label: 'Fees and Charges', href: '/about/fees-and-charges/' }, { label: 'Fees and Charges', href: '/about/fees-and-charges/' },
{ label: 'Noise', href: '/about/noise/' }, { label: 'Noise', href: '/about/noise/' },
+1
View File
@@ -93,4 +93,5 @@ const cafeImages = await getCafePageImages();
line-height: 1; line-height: 1;
transform: translateY(-0.02em); transform: translateY(-0.02em);
} }
</style> </style>
+139
View File
@@ -0,0 +1,139 @@
---
import BannerRotator from '../../components/BannerRotator.astro';
import BaseLayout from '../../layouts/BaseLayout.astro';
import { getGiftShopImages } from '../../lib/directus';
const giftShopImages = await getGiftShopImages();
---
<BaseLayout
title="Gift Shop"
description="Discover Chocks Away Gift Shop at Swansea Airport, with aviation memorabilia, RAF-themed gifts, Welsh souvenirs, toys, clothing, and accessories."
>
<section class="container prose gift-shop-page">
<figure class="gift-shop-hero">
<img src="/images/camain.jpg" alt="Chocks Away Gift Shop at Swansea Airport" />
</figure>
<div class="gift-shop-copy">
<h1 class="section-title">Gift Shop</h1>
<p>
Discover Chocks Away Gift Shop at Swansea Airport, a small shop packed with unique gifts
and aviation charm. Inspired by the airport's rich WWII heritage, you will find aviation
memorabilia, RAF-themed gifts, Welsh souvenirs, children's toys, clothing, accessories,
and much more.
</p>
<p>
From Spitfires to dragons, cufflinks to caps, whether you are flying in, visiting the
airport, or simply looking for the best gift or souvenir, there is something for every
aviation lover.
</p>
<div class="social-follow">
<div class="cta-row">
<a class="button primary social-button" href="https://www.facebook.com/profile.php?id=61590636748267" target="_blank" rel="noopener noreferrer">
<span class="facebook-mark" aria-hidden="true">f</span>
Chocks Away Gift Shop on Facebook
</a>
</div>
</div>
</div>
<div class="gift-shop-gallery" aria-label="Gift shop photo gallery">
<BannerRotator images={giftShopImages} />
</div>
<p class="gift-shop-disclaimer">
Chocks Away Gift Shop is an independent business based at Swansea Airport and is not
affiliated with airport management.
</p>
</section>
</BaseLayout>
<style>
.gift-shop-page {
display: grid;
gap: 1.5rem;
}
.gift-shop-hero {
margin: 0;
overflow: hidden;
border-radius: var(--radius);
box-shadow: var(--shadow);
aspect-ratio: 21 / 9;
background: var(--line);
}
.gift-shop-hero img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center top;
}
.gift-shop-copy {
display: grid;
gap: 0.85rem;
}
.gift-shop-copy p {
margin: 0;
}
.gift-shop-gallery {
overflow: hidden;
border-radius: var(--radius);
box-shadow: var(--shadow);
background: var(--line);
}
.gift-shop-gallery :global(.banner-rotator) {
min-height: clamp(16rem, 42vw, 30rem);
}
.gift-shop-disclaimer {
margin-top: 0.35rem !important;
padding-top: 0.85rem;
border-top: 1px solid var(--line);
color: var(--muted);
font-size: 0.95rem;
font-weight: 700;
}
.social-follow {
display: grid;
gap: 0.7rem;
}
.social-button {
gap: 0.55rem;
}
.facebook-mark {
flex: 0 0 auto;
display: inline-flex;
align-items: center;
justify-content: center;
width: 1.45rem;
height: 1.45rem;
border-radius: 50%;
background: #1877f2;
color: white;
font-family: Arial, sans-serif;
font-size: 1rem;
font-weight: 800;
line-height: 1;
transform: translateY(-0.02em);
}
@media (max-width: 760px) {
.gift-shop-hero {
aspect-ratio: 16 / 9;
}
}
</style>
+4
View File
@@ -10,6 +10,10 @@ import BaseLayout from '../../layouts/BaseLayout.astro';
<h3><a href="/about/cafe/">Cafe</a></h3> <h3><a href="/about/cafe/">Cafe</a></h3>
<p>A friendly, dog-friendly cafe for visitors, walkers, pilots, and local families.</p> <p>A friendly, dog-friendly cafe for visitors, walkers, pilots, and local families.</p>
</article> </article>
<article class="card">
<h3><a href="/about/gift-shop/">Gift Shop</a></h3>
<p>Aviation gifts, RAF-themed keepsakes, Welsh souvenirs, toys, clothing, and accessories.</p>
</article>
<article class="card"> <article class="card">
<h3><a href="/about/history/">History</a></h3> <h3><a href="/about/history/">History</a></h3>
<p>The story of Swansea Airport, formerly RAF Fairwood Common.</p> <p>The story of Swansea Airport, formerly RAF Fairwood Common.</p>
+1 -1
View File
@@ -3,7 +3,7 @@ import BaseLayout from '../layouts/BaseLayout.astro';
import WebcamPanel from '../components/WebcamPanel.astro'; import WebcamPanel from '../components/WebcamPanel.astro';
--- ---
<BaseLayout title="Webcam" description="Live Swansea Airport apron webcam."> <BaseLayout title="Webcam" description="View from the tower facing south west. The peak in the middle of the view is Cefn Bryn, 5500 metres distant.">
<section class="container"> <section class="container">
<WebcamPanel /> <WebcamPanel />
</section> </section>