Improve layout
This commit is contained in:
parent
e53d0ab030
commit
fc50aa2401
|
@ -1,71 +1,19 @@
|
|||
---
|
||||
interface Props {
|
||||
metadata: {
|
||||
cover: string;
|
||||
image: string;
|
||||
title: string;
|
||||
cat: string;
|
||||
track: number;
|
||||
name: string;
|
||||
composer?: string;
|
||||
lyrics?: string;
|
||||
vocal?: string[];
|
||||
other: Array<{
|
||||
cat: string;
|
||||
}>;
|
||||
origin?: string[]
|
||||
}
|
||||
small: string;
|
||||
}
|
||||
|
||||
const { metadata } = Astro.props;
|
||||
const { image, title, small } = Astro.props;
|
||||
---
|
||||
|
||||
<section class="c-song">
|
||||
<a href={metadata.cover}><img src={metadata.cover} /></a>
|
||||
<a href={image}><img src={image} /></a>
|
||||
<div class="c-song__title">
|
||||
<h2 class="c-song__heading">{metadata.title}</h2>
|
||||
<span class="c-song__cat">{metadata.cat}</span>
|
||||
<h2 class="c-song__heading">{title}</h2>
|
||||
<span class="c-song__cat">{small}</span>
|
||||
</div>
|
||||
|
||||
<table class="c-song__table">
|
||||
<tr>
|
||||
<td>Track</td>
|
||||
<td>{metadata.track}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Circle</td>
|
||||
<td>{metadata.name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Composer</td>
|
||||
<td>{metadata.composer}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lyrics</td>
|
||||
<td>{metadata.lyrics}</td>
|
||||
</tr>
|
||||
{!!metadata.vocal?.length &&
|
||||
<tr>
|
||||
<td>Vocal</td>
|
||||
<td>
|
||||
<ul>{metadata.vocal.map(vocalist => <li>{vocalist}</li>)}</ul>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
{!!metadata.origin?.length &&
|
||||
<tr>
|
||||
<td>Origin</td>
|
||||
<td>
|
||||
<ul>{metadata.origin.map(title => <li>{title}</li>)}</ul>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
{!!metadata.other?.length &&
|
||||
<tr>
|
||||
<td>Other versions</td>
|
||||
<td>
|
||||
<ul>{metadata.other.map(version => <li>{version.cat}</li>)}</ul>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
<slot />
|
||||
</section>
|
||||
|
|
61
src/components/songs/SongInfo.astro
Normal file
61
src/components/songs/SongInfo.astro
Normal file
|
@ -0,0 +1,61 @@
|
|||
---
|
||||
interface Props {
|
||||
metadata: {
|
||||
cover: string;
|
||||
title: string;
|
||||
track: number;
|
||||
name: string;
|
||||
composer?: string;
|
||||
lyrics?: string;
|
||||
vocal?: string[];
|
||||
other: Array<{
|
||||
cat: string;
|
||||
}>;
|
||||
origin?: string[]
|
||||
}
|
||||
}
|
||||
|
||||
const { metadata } = Astro.props;
|
||||
---
|
||||
<table class="c-song__table">
|
||||
<tr>
|
||||
<td>Track</td>
|
||||
<td>{metadata.track}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Circle</td>
|
||||
<td>{metadata.name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Composer</td>
|
||||
<td>{metadata.composer}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lyrics</td>
|
||||
<td>{metadata.lyrics}</td>
|
||||
</tr>
|
||||
{!!metadata.vocal?.length &&
|
||||
<tr>
|
||||
<td>Vocal</td>
|
||||
<td>
|
||||
<ul>{metadata.vocal.map(vocalist => <li>{vocalist}</li>)}</ul>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
{!!metadata.origin?.length &&
|
||||
<tr>
|
||||
<td>Origin</td>
|
||||
<td>
|
||||
<ul>{metadata.origin.map(title => <li>{title}</li>)}</ul>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
{!!metadata.other?.length &&
|
||||
<tr>
|
||||
<td>Other versions</td>
|
||||
<td>
|
||||
<ul>{metadata.other.map(version => <li>{version.cat}</li>)}</ul>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</table>
|
|
@ -1,25 +0,0 @@
|
|||
---
|
||||
import Base from "./Base.astro";
|
||||
import Header from '../components/headers/Base.astro';
|
||||
|
||||
interface Props {
|
||||
frontmatter: {
|
||||
title: string;
|
||||
};
|
||||
}
|
||||
|
||||
const {frontmatter: {
|
||||
title
|
||||
}} = Astro.props;
|
||||
---
|
||||
|
||||
<Base>
|
||||
<main class="l-lyrics">
|
||||
<article class="l-lyrics__page">
|
||||
<Header title={title} />
|
||||
<section class="markdown">
|
||||
<slot/>
|
||||
</section>
|
||||
</article>
|
||||
</main>
|
||||
</Base>
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
import Base from "@layouts/Base.astro";
|
||||
import Grid from "@components/markdown/AlbumGrid.astro";
|
||||
import Grid from "@components/songs/AlbumGrid.astro";
|
||||
import Header from "@components/headers/Base.astro";
|
||||
import { CIRCLES } from "@utils/songs/data";
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ import Base from "@layouts/Base.astro";
|
|||
import Header from '@components/headers/Base.astro';
|
||||
import { CollectionEntry, getCollection } from 'astro:content';
|
||||
import { ALBUMS, getAllCats, order } from "@utils/songs/data";
|
||||
import Info from "@components/songs/Info.astro";
|
||||
|
||||
|
||||
export async function getStaticPaths() {
|
||||
|
@ -30,21 +31,25 @@ interface Props {
|
|||
}>
|
||||
}
|
||||
|
||||
const { cat } = Astro.params;
|
||||
const { songs } = Astro.props;
|
||||
const album = ALBUMS[cat!];
|
||||
const cat = Astro.params.cat!;
|
||||
const songs = Astro.props.songs;
|
||||
const album = ALBUMS[cat];
|
||||
---
|
||||
|
||||
<Base>
|
||||
<main class="l-songs-cat">
|
||||
<article class="l-songs-cat__article">
|
||||
<main class="l-songs-aside">
|
||||
<article class="l-songs-aside__page">
|
||||
<Header title={album.title} />
|
||||
<div class="l-songs-cat__list">
|
||||
{songs.map(song => [
|
||||
<span>{song.frontmatter.album[cat!].track}</span>
|
||||
<span>{song.frontmatter.album[cat].track}</span>
|
||||
<a href={song.slug}>{song.frontmatter.title}</a>
|
||||
])}
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<aside>
|
||||
<Info image={album.cover} title={album.title} small={cat}/>
|
||||
</aside>
|
||||
</main>
|
||||
</Base>
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
---
|
||||
import Base from "@layouts/Base.astro";
|
||||
import Song from "@components/markdown/Song.astro";
|
||||
import Lyrics from "@components/markdown/Lyrics.astro";
|
||||
import Info from "@components/songs/Info.astro";
|
||||
import SongInfo from "@components/songs/SongInfo.astro";
|
||||
import Lyrics from "@components/songs/Lyrics.astro";
|
||||
import { CollectionEntry, getCollection } from "astro:content";
|
||||
import { ALBUMS } from "@utils/songs/data";
|
||||
|
||||
|
@ -33,14 +34,13 @@ const metadata = {
|
|||
...song.data,
|
||||
...song.data.album[cat],
|
||||
...ALBUMS[cat],
|
||||
cat,
|
||||
other
|
||||
}
|
||||
---
|
||||
|
||||
<Base>
|
||||
<main class="l-song">
|
||||
<article class="l-song__page">
|
||||
<main class="l-songs-aside">
|
||||
<article class="l-songs-aside__page">
|
||||
<header class="p-header">
|
||||
<h1 class="p-header__heading">{song.data.title}</h1>
|
||||
</header>
|
||||
|
@ -48,7 +48,9 @@ const metadata = {
|
|||
</article>
|
||||
|
||||
<aside class="l-song__aside">
|
||||
<Song metadata={metadata} />
|
||||
<Info image={metadata.cover} title={metadata.title} small={cat}>
|
||||
<SongInfo metadata={metadata} />
|
||||
</Info>
|
||||
</aside>
|
||||
</main>
|
||||
</Base>
|
||||
|
|
|
@ -1,3 +1,18 @@
|
|||
.l-songs-aside {
|
||||
padding: 1.5em;
|
||||
|
||||
&__page {
|
||||
width: 40em;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (min-width: 65em) {
|
||||
display: grid;
|
||||
column-gap: 1em;
|
||||
grid-template-columns: 1fr 20em;
|
||||
}
|
||||
}
|
||||
|
||||
.l-songs-circle {
|
||||
padding: 1.5em;
|
||||
|
||||
|
@ -20,19 +35,3 @@
|
|||
grid-template-columns: 3em 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.l-song {
|
||||
padding: 1.5em;
|
||||
|
||||
&__page {
|
||||
max-width: 40em;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (min-width: 50em) {
|
||||
display: grid;
|
||||
column-gap: 1em;
|
||||
grid-template-columns: 1fr 20em;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue