0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2024-12-16 21:46:22 -05:00

Merge branch 'main' into next

This commit is contained in:
Chris Swithinbank 2024-11-27 16:12:44 +01:00
commit 84ce4be522
6 changed files with 48 additions and 35 deletions

22
.github/workflows/examples-deploy.yml vendored Normal file
View file

@ -0,0 +1,22 @@
# This workflow runs when changes to examples are pushed to main.
# It calls a build hook on Netlify that will redeploy preview.astro.new with the latest changes.
name: Redeploy preview.astro.new
on:
push:
branches:
- main
paths:
- 'examples/**'
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Send a POST request to Netlify to rebuild preview.astro.new
run: 'curl -X POST -d {} ${{ env.BUILD_HOOK }}'
env:
BUILD_HOOK: ${{ secrets.NETLIFY_PREVIEWS_BUILD_HOOK }}

View file

@ -4,10 +4,9 @@ import type { HTMLAttributes } from 'astro/types';
type Props = HTMLAttributes<'a'>;
const { href, class: className, ...props } = Astro.props;
const { pathname } = Astro.url;
const pathname = Astro.url.pathname.replace(import.meta.env.BASE_URL, '');
const subpath = pathname.match(/[^\/]+/g);
const isActive = href === pathname || href === '/' + subpath?.[0];
const isActive = href === pathname || href === '/' + (subpath?.[0] || '');
---
<a href={href} class:list={[className, { active: isActive }]} {...props}>

View file

@ -19,6 +19,14 @@ const iconLinks: { label: string; href: string; icon: keyof typeof iconPaths }[]
{ label: 'dribbble', href: 'https://dribbble.com/me', icon: 'dribbble-logo' },
{ label: 'YouTube', href: 'https://www.youtube.com/@me/', icon: 'youtube-logo' },
];
/** Test if a link is pointing to the current page. */
const isCurrentPage = (href: string) => {
let pathname = Astro.url.pathname.replace(import.meta.env.BASE_URL, '');
if (pathname.at(0) !== '/') pathname = '/' + pathname;
if (pathname.at(-1) !== '/') pathname += '/';
return pathname === href || (href !== '/' && pathname.startsWith(href));
};
---
<nav>
@ -41,18 +49,7 @@ const iconLinks: { label: string; href: string; icon: keyof typeof iconPaths }[]
{
textLinks.map(({ label, href }) => (
<li>
<a
aria-current={Astro.url.pathname === href}
class:list={[
'link',
{
active:
Astro.url.pathname === href ||
(href !== '/' && Astro.url.pathname.startsWith(href)),
},
]}
href={href}
>
<a aria-current={isCurrentPage(href) ? 'page' : null} class="link" href={href}>
{label}
</a>
</li>
@ -79,18 +76,7 @@ const iconLinks: { label: string; href: string; icon: keyof typeof iconPaths }[]
{
textLinks.map(({ label, href }) => (
<li>
<a
aria-current={Astro.url.pathname === href}
class:list={[
'link',
{
active:
Astro.url.pathname === href ||
(href !== '/' && Astro.url.pathname.startsWith(href)),
},
]}
href={href}
>
<a aria-current={isCurrentPage(href) ? 'page' : null} class="link" href={href}>
{label}
</a>
</li>
@ -234,7 +220,7 @@ const iconLinks: { label: string; href: string; icon: keyof typeof iconPaths }[]
text-decoration: none;
}
.link.active {
.link[aria-current] {
color: var(--gray-0);
}
@ -332,7 +318,7 @@ const iconLinks: { label: string; href: string; icon: keyof typeof iconPaths }[]
background-color: var(--accent-subtle-overlay);
}
.link.active {
.link[aria-current='page'] {
color: var(--accent-text-over);
background-color: var(--accent-regular);
}
@ -360,7 +346,7 @@ const iconLinks: { label: string; href: string; icon: keyof typeof iconPaths }[]
}
}
@media (forced-colors: active) {
.link.active {
.link[aria-current='page'] {
color: SelectedItem;
}
}

View file

@ -1,6 +1,7 @@
---
import CartFlyout from '../components/CartFlyout';
import CartFlyoutToggle from '../components/CartFlyoutToggle';
import { withBase } from '../utils';
interface Props {
title: string;
@ -15,15 +16,15 @@ const { title } = Astro.props;
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" type="image/svg+xml" href={withBase('/favicon.svg')} />
<title>{title}</title>
</head>
<body>
<header>
<nav>
<a href="/" class="nav-header"
><span style="color: var(--astro-blue)">Astro</span> storefront</a
>
<a href={withBase('/')} class="nav-header">
<span style="color: var(--astro-blue)">Astro</span> storefront
</a>
<CartFlyoutToggle client:load />
</nav>
</header>

View file

@ -3,11 +3,12 @@ import type { CartItemDisplayInfo } from '../cartStore';
import Layout from '../layouts/Layout.astro';
import AddToCartForm from '../components/AddToCartForm';
import FigurineDescription from '../components/FigurineDescription.astro';
import { withBase } from '../utils';
const item: CartItemDisplayInfo = {
id: 'astronaut-figurine',
name: 'Astronaut Figurine',
imageSrc: '/images/astronaut-figurine.png',
imageSrc: withBase('/images/astronaut-figurine.png'),
};
---

View file

@ -0,0 +1,4 @@
const base = import.meta.env.BASE_URL.replace(/\/$/, '');
/** Prefix a URL path with the sites base path if set. */
export const withBase = (path: string) => base + path;