Skip to content

Commit 57d38cc

Browse files
committed
feat: override favicon from project frontmatter
1 parent b7a4323 commit 57d38cc

File tree

5 files changed

+25
-24
lines changed

5 files changed

+25
-24
lines changed
3.75 KB
Binary file not shown.

contents/projects/coursemate/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ tags: [TypeScript, React]
1313

1414
thumbnail:
1515
src: ./thumbnail.png
16+
favicon: ./favicon.avif
1617

1718
social:
1819
github: https://github.com/ut-code/coursemate

docs/contents/projects.md

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,27 @@
1414

1515
## frontmatter
1616

17-
| キー | 必須 || 説明 |
18-
| ----------------- | ---- | ------------ | ----------------------------------------------------------------------------------------------------- |
19-
| `app.name` || string | プロジェクト名 |
20-
| `app.description` || string | プロジェクトの短い説明。 |
21-
| `app.url` | | string->url | アプリにアクセスできる URL。 |
22-
| `app.platform` || string[] | ソフトウェアの配布プラットフォーム。`web`, `mobile`, `desktop`, `cli`|
23-
| `app.domain` || string[] | ソフトウェアの種別 (クソ雑ドキュメント)。 `app`, `game`, `tool`, `site`, `learn` (教材), `lib` など。 |
24-
| `order` | | number? | 表示順。指定されなかった場合は `date` 降順でソートされます。 |
25-
| `date` || date | 記事の初回執筆日。ソートのみで利用しています。 |
26-
| `kind` || string | アプリケーションの開発体系。`long-term`, `festival`, `hackathon` の 3 つ。 |
27-
| `status` || string | プロジェクトの現状。詳細は `src/schema.ts` を参照。 |
28-
| `members` | | string[]? | プロジェクトのメンバー。まだメンバーページを作ってなくても問題ないです。 |
29-
| `tags` | | string[]? | 使用されている技術。タグごとのフィルタリング機能等は提供していません。 |
30-
| `thumbnail.src` || string->path | イメージファイルへの markdown からの相対パス。 |
31-
| `thumbnail.fit` | | string? | イメージのクロップ方法。 default = "cover"。 |
32-
| `thumbnail.bg` | | string? | イメージの背景色。ロード中と `crop` = "contain" のときの背景に使われています。 |
33-
| `social.github` | | string->url? | プロジェクトの GitHub 上での URL。 |
34-
| `social.website` | | string->url? | プロジェクトのウェブサイトの URL。(`app.url` と別で広報用などの Website がある場合) |
35-
| `social.youtube` | | string->url? | プロジェクトの YouTube 上での URL。 |
36-
| `social.twitter` | | string->url? | プロジェクトのツイッター (現 X) の URL。 |
17+
| キー | 必須 || 説明 |
18+
| ----------------- | ---- | ------------- | ----------------------------------------------------------------------------------------------------- |
19+
| `app.name` || string | プロジェクト名 |
20+
| `app.description` || string | プロジェクトの短い説明。 |
21+
| `app.url` | | string->url | アプリにアクセスできる URL。 |
22+
| `app.platform` || string[] | ソフトウェアの配布プラットフォーム。`web`, `mobile`, `desktop`, `cli`|
23+
| `app.domain` || string[] | ソフトウェアの種別 (クソ雑ドキュメント)。 `app`, `game`, `tool`, `site`, `learn` (教材), `lib` など。 |
24+
| `order` | | number? | 表示順。指定されなかった場合は `date` 降順でソートされます。 |
25+
| `date` || date | 記事の初回執筆日。ソートのみで利用しています。 |
26+
| `kind` || string | アプリケーションの開発体系。`long-term`, `festival`, `hackathon` の 3 つ。 |
27+
| `status` || string | プロジェクトの現状。詳細は `src/schema.ts` を参照。 |
28+
| `members` | | string[]? | プロジェクトのメンバー。まだメンバーページを作ってなくても問題ないです。 |
29+
| `tags` | | string[]? | 使用されている技術。タグごとのフィルタリング機能等は提供していません。 |
30+
| `thumbnail.src` || string->path | イメージファイルへの markdown からの相対パス。 |
31+
| `thumbnail.fit` | | string? | イメージのクロップ方法。 default = "cover"。 |
32+
| `thumbnail.bg` | | string? | イメージの背景色。ロード中と `crop` = "contain" のときの背景に使われています。 |
33+
| `favicon` | | string->path? | 強制的に使わせる Favicon。指定しない場合は、アプリの URL から自動で引っ張ってきます。 |
34+
| `social.github` | | string->url? | プロジェクトの GitHub 上での URL。 |
35+
| `social.website` | | string->url? | プロジェクトのウェブサイトの URL。(`app.url` と別で広報用などの Website がある場合) |
36+
| `social.youtube` | | string->url? | プロジェクトの YouTube 上での URL。 |
37+
| `social.twitter` | | string->url? | プロジェクトのツイッター (現 X) の URL。 |
3738

3839
## body について
3940

src/pages/projects/[...id].astro

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,13 @@ const { Content } = await render(project);
2222
2323
let iconSrc: string | undefined = undefined;
2424
if (project.data.status !== "dead") {
25-
if (project.data.app.url) {
25+
if (project.data.favicon) iconSrc = project.data.favicon.src;
26+
if (!iconSrc && project.data.app.url) {
2627
iconSrc = await fetchFavicon(project.data.app.url);
2728
}
2829
if (!iconSrc && project.data.social?.website) {
2930
iconSrc = await fetchFavicon(project.data.social.website);
3031
}
31-
if (!iconSrc && project.data.social?.twitter) {
32-
iconSrc = await fetchFavicon(project.data.social.twitter);
33-
}
3432
}
3533
---
3634

src/schema.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ export const CreateProjectSchema = ({ image }: { image: ImageFunction }) =>
7474
order: z.number().optional(),
7575
date: z.date(),
7676
thumbnail: Thumbnail({ image }),
77+
favicon: image().optional(),
7778
tags: z.array(z.string()).optional().default([]),
7879
social: z
7980
.object({

0 commit comments

Comments
 (0)