Added more TAs to Beast4L, fixed unlighthouse issue, optimized dev experience by throwing actual useful errors
All checks were successful
/ checking (push) Successful in 11s
|
@ -91,5 +91,6 @@ jobs:
|
|||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||
script: |
|
||||
PATH="$HOME/.local/bin:$PATH"
|
||||
screen -ls | grep 'fgo_ta_com-unlighthouse' | awk '{print $1}' | xargs -I % -t screen -X -S % quit
|
||||
cd fgo_ta_com
|
||||
screen -S fgo_ta_com-unlighthouse -dm serve unlighthouse/ -p ${{ secrets.UNLIGHTHOUSE_DEPLOY_PORT }}
|
||||
|
|
BIN
src/assets/ta_servants/arjunaalter.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
src/assets/ta_servants/galatea.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
src/assets/ta_servants/ibuki.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
src/assets/ta_servants/kiarasummer.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
src/assets/ta_servants/ozymandias.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
src/assets/ta_servants/taigongwang.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
src/assets/ta_servants/tamamo.png
Normal file
After Width: | Height: | Size: 37 KiB |
|
@ -38,7 +38,6 @@ const release = `https://forgejo.neshweb.net/Firq/fgo-ta-com-website/releases/ta
|
|||
color: white;
|
||||
font-size: 1.5em;
|
||||
padding: 2rem 0rem;
|
||||
margin-top: 7.5rem;
|
||||
}
|
||||
a {
|
||||
text-align: center;
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
---
|
||||
import type { ImageMetadata } from 'astro'
|
||||
import { Image } from 'astro:assets'
|
||||
import { plsLoadImage } from '../utils/tools'
|
||||
import type { GlobImage } from '../types/generic'
|
||||
export interface Props {
|
||||
title: string
|
||||
link: string
|
||||
|
@ -19,22 +21,25 @@ const options_date: Intl.DateTimeFormatOptions = {
|
|||
}
|
||||
|
||||
const servantImagePath = `/src/assets/ta_servants/${servant}.png`
|
||||
|
||||
const formatted_date = new Date(date).toLocaleDateString('de-DE', options_date)
|
||||
const servant_images = import.meta.glob<{ default: ImageMetadata }>(
|
||||
const servant_images = import.meta.glob<GlobImage>(
|
||||
'/src/assets/ta_servants/*.png'
|
||||
)
|
||||
const loaded_image = plsLoadImage(servant_images, servantImagePath)
|
||||
|
||||
const formatted_date = new Date(date).toLocaleDateString('de-DE', options_date)
|
||||
const arialabel = `By ${runner} • ${formatted_date} ${turns}`
|
||||
---
|
||||
|
||||
<a href={link} target="_blank" rel="noopener noreferrer" aria-label=`By ${runner} • ${formatted_date} ${turns}`>
|
||||
<a href={link} target="_blank" rel="noopener noreferrer" aria-label={arialabel}>
|
||||
<article>
|
||||
<Image src={servant_images[servantImagePath]()} alt="" class="icon" />
|
||||
<Image src={loaded_image} alt="" class="icon" />
|
||||
<div class="title desktop">
|
||||
<h2>{title}</h2>
|
||||
</div>
|
||||
<p class="desktop">
|
||||
<span>
|
||||
By {runner}<br /> • <br/ > {formatted_date}
|
||||
By {runner}<br /> • <br />
|
||||
{formatted_date}
|
||||
</span>
|
||||
</p>
|
||||
<div class="mobile">
|
||||
|
|
|
@ -93,6 +93,62 @@
|
|||
"servant": "koyo",
|
||||
"turns": "4T",
|
||||
"runner": "MCR"
|
||||
},
|
||||
{
|
||||
"title": "Tamamo Solo 30T",
|
||||
"link": "https://www.youtube.com/watch?v=2wUcojRXTlw",
|
||||
"date": "2023-12-27",
|
||||
"servant": "tamamo",
|
||||
"turns": "30T",
|
||||
"runner": "Mitsunee"
|
||||
},
|
||||
{
|
||||
"title": "Dual Taigong Wang 4T",
|
||||
"link": "https://www.youtube.com/watch?v=3jU3Az7iM7E",
|
||||
"date": "2023-12-27",
|
||||
"servant": "taigongwang",
|
||||
"turns": "4T",
|
||||
"runner": "Ryougi Bobby"
|
||||
},
|
||||
{
|
||||
"title": "Ibuki 4T",
|
||||
"link": "https://www.youtube.com/watch?v=dgJfgMHAOpI",
|
||||
"date": "2023-12-29",
|
||||
"servant": "ibuki",
|
||||
"turns": "4T",
|
||||
"runner": "Martyr Kuga"
|
||||
},
|
||||
{
|
||||
"title": "Ozymandias 4T",
|
||||
"link": "https://www.youtube.com/watch?v=Y8qYY875M_I",
|
||||
"date": "2023-12-28",
|
||||
"servant": "ozymandias",
|
||||
"turns": "4T",
|
||||
"runner": "Kusanagi"
|
||||
},
|
||||
{
|
||||
"title": "Arjuna Alter 4T",
|
||||
"link": "https://www.youtube.com/watch?v=OTfM7WQl5uI",
|
||||
"date": "2023-12-28",
|
||||
"servant": "arjunaalter",
|
||||
"turns": "4T",
|
||||
"runner": "Akise"
|
||||
},
|
||||
{
|
||||
"title": "Galatea 4T",
|
||||
"link": "https://www.youtube.com/watch?v=GKCZtn815wA",
|
||||
"date": "2023-12-30",
|
||||
"servant": "galatea",
|
||||
"turns": "4T",
|
||||
"runner": "Hentai Daddi"
|
||||
},
|
||||
{
|
||||
"title": "Summer Kiara 4T",
|
||||
"link": "https://www.youtube.com/watch?v=b46JRNUIdrM",
|
||||
"date": "2023-12-28",
|
||||
"servant": "kiarasummer",
|
||||
"turns": "4T",
|
||||
"runner": "Felt"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import navdata from '../../static/data/_navdata.json'
|
|||
import embed from '../assets/embed.png'
|
||||
import home from 'iconoir/icons/home.svg'
|
||||
import database from 'iconoir/icons/database.svg'
|
||||
import type { IconsLookup } from '../types/icons'
|
||||
import type { IconsLookup } from '../types/generic'
|
||||
|
||||
export interface Props {
|
||||
title: string
|
||||
|
|
|
@ -2,29 +2,30 @@
|
|||
import Layout from '../layouts/Layout.astro'
|
||||
import BaseSection from '../layouts/baseSection.astro'
|
||||
import TACard from '../components/taCard.astro'
|
||||
import type { filedata } from '../types/ta'
|
||||
import type { FileData } from '../types/ta'
|
||||
import type { GlobAny } from '../types/generic'
|
||||
|
||||
export interface Props {
|
||||
datafile: string
|
||||
}
|
||||
|
||||
const { datafile } = Astro.props
|
||||
const fulldata = import.meta.glob<{ default: any }>(`../content/data/*.json`)
|
||||
const filecontent: filedata = (
|
||||
const fulldata = import.meta.glob<GlobAny>(`../content/data/*.json`)
|
||||
const filecontent: FileData = (
|
||||
await fulldata[`../content/data/${datafile}.json`]()
|
||||
)['default']
|
||||
|
||||
const title = filecontent.info.title
|
||||
const pagetitle = `${filecontent.info.title} - FGO TA`
|
||||
filecontent.data.sort((a, b) => Date.parse(b.date) - Date.parse(a.date))
|
||||
---
|
||||
|
||||
<Layout
|
||||
title={title}
|
||||
title={pagetitle}
|
||||
currentpage="database-entry"
|
||||
descriptionOverride={filecontent.info.shortdescription}
|
||||
>
|
||||
<a href="/database"><< Back to database</a>
|
||||
<BaseSection title={title} description={filecontent.info.description}>
|
||||
<BaseSection title={filecontent.info.title} description={filecontent.info.description}>
|
||||
{filecontent.data.map((item) => <TACard {...item} />)}
|
||||
</BaseSection>
|
||||
<div class="placeholder"></div>
|
||||
|
|
|
@ -8,11 +8,11 @@ const description = "Error. This shouldn't happen :/"
|
|||
---
|
||||
|
||||
<Layout
|
||||
title="404 - Firq FGO Site"
|
||||
title="404 - FGO TA"
|
||||
currentpage="404"
|
||||
descriptionOverride={description}
|
||||
>
|
||||
<BaseSection title="FirqhundredandFirq - Not Found" description="">
|
||||
<BaseSection title="Firqhundred­andFirq - Not Found" description="">
|
||||
<div>
|
||||
<Image src={sadshishou} alt="Sad Shishou" />
|
||||
<h2>Well ... you were not supposed to end up here.</h2>
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
---
|
||||
import TaShowcaseLayout from '../../layouts/taShowcaseLayout.astro'
|
||||
import { findSlug } from '../../utils/slugTools'
|
||||
import type { GlobAny } from '../../types/generic'
|
||||
import { findSlug } from '../../utils/tools'
|
||||
|
||||
export function getStaticPaths() {
|
||||
const fulldata = import.meta.glob<{ default: any }>(
|
||||
const fulldata = import.meta.glob<GlobAny>(
|
||||
`../../content/data/*.json`
|
||||
)
|
||||
const keylist = Object.keys(fulldata).map((item) => findSlug(item)!)
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
import Layout from '../../layouts/Layout.astro'
|
||||
import QuestListing from '../../components/questListing.astro'
|
||||
import DatabaseSection from '../../layouts/databaseSection.astro'
|
||||
import { findSlug } from '../../utils/slugTools'
|
||||
import type { filedata } from '../../types/ta'
|
||||
import { findSlug } from '../../utils/tools'
|
||||
import type { GlobFiledata } from '../../types/generic'
|
||||
|
||||
const description = 'FGO NA TA Database'
|
||||
|
||||
const questInfo = []
|
||||
const fulldata = import.meta.glob<{ default: filedata }>(
|
||||
const fulldata = import.meta.glob<GlobFiledata>(
|
||||
`../../content/data/*.json`
|
||||
)
|
||||
|
||||
|
@ -26,7 +26,7 @@ questInfo.sort(
|
|||
---
|
||||
|
||||
<Layout
|
||||
title="FGO NA TA Database"
|
||||
title="TA Database - FGO TA"
|
||||
currentpage="database"
|
||||
descriptionOverride={description}
|
||||
>
|
||||
|
|
13
src/types/generic.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import type { FileData } from "./ta"
|
||||
|
||||
export interface IconsLookup {
|
||||
[key: string]: ImageMetadata
|
||||
}
|
||||
|
||||
interface GlobGeneric<T> {
|
||||
default: T
|
||||
}
|
||||
|
||||
export type GlobAny = GlobGeneric<any>
|
||||
export type GlobFiledata = GlobGeneric<FileData>
|
||||
export type GlobImage = GlobGeneric<ImageMetadata>
|
|
@ -1,3 +0,0 @@
|
|||
export interface IconsLookup {
|
||||
[key: string]: ImageMetadata
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
interface tadata {
|
||||
interface TAData {
|
||||
title: string
|
||||
link: string
|
||||
servant: string
|
||||
|
@ -7,14 +7,14 @@ interface tadata {
|
|||
date: string
|
||||
}
|
||||
|
||||
interface info {
|
||||
interface Info {
|
||||
title: string
|
||||
questReleaseDate: string
|
||||
description: string
|
||||
shortdescription: string
|
||||
}
|
||||
|
||||
export interface filedata {
|
||||
info: info
|
||||
data: tadata[]
|
||||
export interface FileData {
|
||||
info: Info
|
||||
data: TAData[]
|
||||
}
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
export function findSlug(filepath: string) {
|
||||
return filepath.match(/(?:.*[\\/])(.+)(?:\.json)/)?.[1]
|
||||
}
|
9
src/utils/tools.ts
Normal file
|
@ -0,0 +1,9 @@
|
|||
export function findSlug(filepath: string) {
|
||||
return filepath.match(/(?:.*[\\/])(.+)(?:\.json)/)?.[1]
|
||||
}
|
||||
|
||||
export function plsLoadImage(record: Record<string, () => Promise<{default: ImageMetadata}>>, path: string) {
|
||||
const loadedImage = record[path]?.();
|
||||
if (!loadedImage) throw new Error("Asset was not found:" + path);
|
||||
return loadedImage;
|
||||
}
|