Compare commits

...

2 commits

Author SHA1 Message Date
c5af572d38
Formatted astro files
All checks were successful
/ checking (push) Successful in 23s
/ build-site (push) Successful in 2m14s
/ release (push) Successful in 7s
2024-01-02 23:58:10 +01:00
04ec083b19
Added more runs, prettier formatting 2024-01-02 23:54:49 +01:00
28 changed files with 276 additions and 138 deletions

View file

@ -1,7 +1,7 @@
on:
push:
branches:
- "**"
- '**'
jobs:
checking:

View file

@ -66,7 +66,6 @@ deploy-site:
- ssh $DEPLOY_USER@$DEPLOY_HOST 'PATH="$HOME/.local/bin:$PATH"; cd fgo-ta_com; find public -maxdepth 1 -printf "%p\n"; screen -S fgo-ta_com-public -dm serve public/ -p 9200'
- echo "Website is up on https://fgo-ta.com"
redeploy-site:
stage: scripts
when: manual

View file

@ -1,6 +1,6 @@
{
"trailingComma": "es5",
"tabWidth": 2,
"semi": false,
"singleQuote": true
"trailingComma": "es5",
"tabWidth": 2,
"semi": false,
"singleQuote": true
}

View file

@ -1,5 +1,5 @@
import { defineConfig } from 'astro/config';
import sitemap from "@astrojs/sitemap";
import { defineConfig } from 'astro/config'
import sitemap from '@astrojs/sitemap'
export default defineConfig({
sitemap: true,
@ -7,5 +7,5 @@ export default defineConfig({
outDir: 'dist',
publicDir: 'static',
site: 'https://fgo-ta.com/',
integrations: [sitemap()]
});
integrations: [sitemap()],
})

67
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "fgo-ta-com-website",
"version": "0.1.5",
"version": "0.1.7",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "fgo-ta-com-website",
"version": "0.1.5",
"version": "0.1.7",
"dependencies": {
"@astro-community/astro-embed-youtube": "^0.4.3",
"@astrojs/check": "^0.3.4",
@ -16,6 +16,10 @@
"iconoir": "^7.3.0",
"postcss-preset-env": "^9.3.0",
"typescript": "^5.3.3"
},
"devDependencies": {
"prettier": "^3.1.1",
"prettier-plugin-astro": "^0.12.3"
}
},
"node_modules/@ampproject/remapping": {
@ -6273,6 +6277,41 @@
"node": ">=8.15"
}
},
"node_modules/prettier": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz",
"integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==",
"devOptional": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/prettier-plugin-astro": {
"version": "0.12.3",
"resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-0.12.3.tgz",
"integrity": "sha512-GthUSu3zCvmtVyqlArosez0xE08vSJ0R1sWurxIWpABaCkNGYFANoUdFkqmIo54EV2uPLGcVJzOucWvCjPBWvg==",
"devOptional": true,
"dependencies": {
"@astrojs/compiler": "^1.5.5",
"prettier": "^3.0.0",
"sass-formatter": "^0.7.6"
},
"engines": {
"node": "^14.15.0 || >=16.0.0"
}
},
"node_modules/prettier-plugin-astro/node_modules/@astrojs/compiler": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-1.8.2.tgz",
"integrity": "sha512-o/ObKgtMzl8SlpIdzaxFnt7SATKPxu4oIP/1NL+HDJRzxfJcAkOTAb/ZKMRyULbz4q+1t2/DAebs2Z1QairkZw==",
"devOptional": true
},
"node_modules/prismjs": {
"version": "1.29.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
@ -7050,6 +7089,12 @@
"queue-microtask": "^1.2.2"
}
},
"node_modules/s.color": {
"version": "0.0.15",
"resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz",
"integrity": "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==",
"devOptional": true
},
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@ -7074,6 +7119,15 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/sass-formatter": {
"version": "0.7.8",
"resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.8.tgz",
"integrity": "sha512-7fI2a8THglflhhYis7k06eUf92VQuJoXzEs2KRP0r1bluFxKFvLx0Ns7c478oYGM0fPfrr846ZRWVi2MAgHt9Q==",
"devOptional": true,
"dependencies": {
"suf-log": "^2.5.3"
}
},
"node_modules/sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
@ -7418,6 +7472,15 @@
"node": ">=0.10.0"
}
},
"node_modules/suf-log": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz",
"integrity": "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==",
"devOptional": true,
"dependencies": {
"s.color": "0.0.15"
}
},
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",

View file

@ -1,7 +1,7 @@
{
"name": "fgo-ta-com-website",
"type": "module",
"version": "0.1.6",
"version": "0.1.7",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
@ -22,5 +22,9 @@
"browserslist": [
"last 2 versions",
">0.5% and not dead"
]
],
"devDependencies": {
"prettier": "^3.1.1",
"prettier-plugin-astro": "^0.12.3"
}
}

View file

@ -4,17 +4,22 @@
"etag": true,
"headers": [
{
"source" : "**/*.@(jpg|jpeg|gif|png|webp|svg)",
"headers" : [{
"key" : "Cache-Control",
"value" : "no-cache"
}]
}, {
"source" : "404.html",
"headers" : [{
"key" : "Cache-Control",
"value" : "no-cache"
}]
"source": "**/*.@(jpg|jpeg|gif|png|webp|svg)",
"headers": [
{
"key": "Cache-Control",
"value": "no-cache"
}
]
},
{
"source": "404.html",
"headers": [
{
"key": "Cache-Control",
"value": "no-cache"
}
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View file

@ -1,63 +1,65 @@
---
interface Props {
title: string;
body: string;
href: string;
title: string
body: string
href: string
}
const { href, title, body } = Astro.props;
const { href, title, body } = Astro.props
---
<li class="link-card">
<a href={href}>
<h2>
{title}
<span>&rarr;</span>
</h2>
<p>
{body}
</p>
</a>
<a href={href}>
<h2>
{title}
<span>&rarr;</span>
</h2>
<p>
{body}
</p>
</a>
</li>
<style>
.link-card {
list-style: none;
display: flex;
padding: 0.25rem;
background-color: white;
background-image: none;
background-size: 400%;
border-radius: 0.6rem;
background-position: 100%;
transition: background-position 0.6s cubic-bezier(0.22, 1, 0.36, 1);
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
}
.link-card {
list-style: none;
display: flex;
padding: 0.25rem;
background-color: white;
background-image: none;
background-size: 400%;
border-radius: 0.6rem;
background-position: 100%;
transition: background-position 0.6s cubic-bezier(0.22, 1, 0.36, 1);
box-shadow:
0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -2px rgba(0, 0, 0, 0.1);
}
.link-card > a {
width: 100%;
text-decoration: none;
line-height: 1.4;
padding: 1rem 1.3rem;
border-radius: 0.35rem;
color: #111;
background-color: white;
opacity: 0.8;
}
h2 {
margin: 0;
font-size: 1.25rem;
transition: color 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
p {
margin-top: 0.5rem;
margin-bottom: 0;
color: #444;
}
.link-card:is(:hover, :focus-within) {
background-position: 0;
background-image: var(--accent-gradient);
}
.link-card:is(:hover, :focus-within) h2 {
color: rgb(var(--accent));
}
.link-card > a {
width: 100%;
text-decoration: none;
line-height: 1.4;
padding: 1rem 1.3rem;
border-radius: 0.35rem;
color: #111;
background-color: white;
opacity: 0.8;
}
h2 {
margin: 0;
font-size: 1.25rem;
transition: color 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
p {
margin-top: 0.5rem;
margin-bottom: 0;
color: #444;
}
.link-card:is(:hover, :focus-within) {
background-position: 0;
background-image: var(--accent-gradient);
}
.link-card:is(:hover, :focus-within) h2 {
color: rgb(var(--accent));
}
</style>

View file

@ -11,9 +11,17 @@ const release = `https://forgejo.neshweb.net/Firq/fgo-ta-com-website/releases/ta
In the future, it will be used to catalogue information around FGO TA and the
game in general.
<br />
<a href="https://firq.dev" target="_blank" rel="noopener noreferrer">Feel free to check out my own site.</a>
<a href="https://firq.dev" target="_blank" rel="noopener noreferrer"
>Feel free to check out my own site.</a
>
<br />
<span class="version">(Website version: <a href={release} target="_blank" rel="noopener noreferrer">{version}</a>)</span>
<span class="version"
>(Website version: <a
href={release}
target="_blank"
rel="noopener noreferrer">{version}</a
>)</span
>
</span>
<slot />
</div>

View file

@ -1,18 +1,23 @@
---
import { Image } from 'astro:assets';
import { Image } from 'astro:assets'
import logo from '../assets/logo.svg'
import hamburger from 'iconoir/icons/menu.svg'
const hamburger_src_url = `url("${hamburger.src}")`;
const hamburger_src_url = `url("${hamburger.src}")`
---
<header>
<a href="/" rel="noopener noreferrer" aria-label="Home">
<Image src={logo} alt="Website Logo"/>
<Image src={logo} alt="Website Logo" />
</a>
<ul class="desktop">
<slot />
</ul>
<button class="mobile" aria-label="Navigation Button" tabindex="0" onclick="this.focus()">
<button
class="mobile"
aria-label="Navigation Button"
tabindex="0"
onclick="this.focus()"
>
<ul>
<slot />
</ul>

View file

@ -17,7 +17,7 @@ if (currentPage === slug) {
currPage = 'current'
}
const icon_src_url = `url("${icon.src}")`;
const icon_src_url = `url("${icon.src}")`
const fulllink = `/${slug}`
---

View file

@ -12,7 +12,10 @@ const options_date: Intl.DateTimeFormatOptions = {
day: '2-digit',
}
const { shortdescription, questReleaseDate, url, title } = Astro.props
const render_date = new Date(questReleaseDate).toLocaleDateString('en-GB', options_date)
const render_date = new Date(questReleaseDate).toLocaleDateString(
'en-GB',
options_date
)
---
<a href={url} rel="noopener noreferrer">

View file

@ -2,16 +2,15 @@
import type { ImageMetadata } from 'astro'
import { Image } from 'astro:assets'
export interface Props {
title: string,
link: string,
date: string,
servant: string,
turns: string,
title: string
link: string
date: string
servant: string
turns: string
runner: string
}
const { turns, runner, date, servant, link, title } =
Astro.props
const { turns, runner, date, servant, link, title } = Astro.props
const options_date: Intl.DateTimeFormatOptions = {
year: 'numeric',
@ -25,12 +24,11 @@ const formatted_date = new Date(date).toLocaleDateString('de-DE', options_date)
const servant_images = import.meta.glob<{ default: ImageMetadata }>(
'/src/assets/ta_servants/*.png'
)
---
<a href={link} target="_blank" rel="noopener noreferrer" aria-label={title}>
<article>
<Image src={servant_images[servantImagePath]()} alt="" class="icon"/>
<Image src={servant_images[servantImagePath]()} alt="" class="icon" />
<div class="title">
<h2>{title}</h2>
</div>

View file

@ -1,26 +1,82 @@
{
"info": {
"title": "Cernunnos",
"questReleaseDate": "2023-07-10",
"shortdescription": "One of FGOs most notorious boss fights due to up to 100% special defense, strong DoT damage and powerful field effects",
"description": "One of FGOs most notorious boss fights due to up to 100% special defense, strong DoT damage and powerful field effects - and still, the TA community prevailed and created some of the most amazing runs of all time"
"info": {
"title": "Cernunnos",
"questReleaseDate": "2023-07-10",
"shortdescription": "One of FGOs most notorious boss fights due to up to 100% special defense, strong DoT damage and powerful field effects",
"description": "One of FGOs most notorious boss fights due to up to 100% special defense, strong DoT damage and powerful field effects - and still, the TA community prevailed and created some of the most amazing runs of all time"
},
"data": [
{
"title": "Shishou 4T (No Castoria)",
"link": "https://www.youtube.com/watch?v=WrHudtdfivA",
"date": "2023-07-19",
"servant": "shishou",
"turns": "4T",
"runner": "Firq"
},
"data": [
{
"title": "Cernunnos 4T (No Castoria)",
"link": "https://www.youtube.com/watch?v=WrHudtdfivA",
"date": "2023-07-19",
"servant": "shishou",
"turns": "4T",
"runner": "Firq"
},
{
"title": "Cernunnos 4T (FLO)",
"link": "https://www.youtube.com/watch?O1f-go7uJQM",
"date": "2023-07-19",
"servant": "shishou",
"turns": "4T",
"runner": "Requiem"
}
]
{
"title": "Shishou 4T (FLO)",
"link": "https://www.youtube.com/watch?v=O1f-go7uJQM",
"date": "2023-07-19",
"servant": "shishou",
"turns": "4T",
"runner": "Requiem"
},
{
"title": "Jalter 4T",
"link": "https://www.youtube.com/watch?v=VGuXstsJa6k",
"date": "2023-07-10",
"servant": "jalter",
"turns": "4T",
"runner": "Ray"
},
{
"title": "Altera 4T",
"link": "https://www.youtube.com/watch?v=BrgJT3gC6sg",
"date": "2023-07-13",
"servant": "altera",
"turns": "4T",
"runner": "Requiem"
},
{
"title": "Astrea 4T (4 Slot)",
"link": "https://www.youtube.com/watch?v=0pwUn_bickU",
"date": "2023-07-17",
"servant": "astrea",
"turns": "4T",
"runner": "Alastair Hale"
},
{
"title": "Meltryllis 4T (4 Slot)",
"link": "https://www.youtube.com/watch?v=B5uZkC40SQc",
"date": "2023-07-21",
"servant": "melt",
"turns": "4T",
"runner": "Zectry"
},
{
"title": "Kijyo Koyo 4T",
"link": "https://www.youtube.com/watch?v=hea0QSvTbkY",
"date": "2023-07-14",
"servant": "koyo",
"turns": "4T",
"runner": "MCR"
},
{
"title": "Charlotte 4T",
"link": "https://www.youtube.com/watch?v=HMD2WLNGxAk",
"date": "2023-07-12",
"servant": "charlotte",
"turns": "4T",
"runner": "Dante09"
},
{
"title": "Gong 4T (4 NPs)",
"link": "https://www.youtube.com/watch?v=qQ82YA4BeGE",
"date": "2023-07-11",
"servant": "gong",
"turns": "4T",
"runner": "BadLuck"
}
]
}

View file

@ -15,7 +15,7 @@ export interface Props {
const icons: IconsLookup = {
home: home,
database: database
database: database,
}
const { descriptionOverride, currentpage, title } = Astro.props
@ -38,7 +38,7 @@ const mapped_navdata = navdata.map((item) => ({
}))
---
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<title>{title}</title>

View file

@ -9,14 +9,13 @@ export interface Props {
}
const { datafile } = Astro.props
const fulldata = import.meta.glob<{ default: any }>(
`../content/data/*.json`
)
const fulldata = import.meta.glob<{ default: any }>(`../content/data/*.json`)
const filecontent: filedata = (
await fulldata[`../content/data/${datafile}.json`]()
)['default']
const title = filecontent.info.title
filecontent.data.sort((a, b) => Date.parse(b.date) - Date.parse(a.date))
---
<Layout

View file

@ -9,7 +9,9 @@ const description =
'My own small blog. Topics include FGO, TA, Programming, web technologies and more!'
const questInfo = []
const fulldata = import.meta.glob<{ default: filedata }>(`../content/data/*.json`)
const fulldata = import.meta.glob<{ default: filedata }>(
`../content/data/*.json`
)
for (const [key, value] of Object.entries(fulldata)) {
const url = `${Astro.url}/${findSlug(key)}`

View file

@ -1,20 +1,14 @@
---
import TaShowcaseLayout from '../../layouts/taShowcaseLayout.astro'
import {findSlug} from '../../utils/slugTools'
import { findSlug } from '../../utils/slugTools'
export function getStaticPaths() {
const fulldata = import.meta.glob<{ default: any }>(
`../../content/data/*.json`
)
const keylist = Object.keys(fulldata).map(
(item) => findSlug(item)
)
const keylist = Object.keys(fulldata).map((item) => findSlug(item)!)
const paths: { params: { slug: string } }[] = []
for (const key of keylist) {
paths.push({ params: { slug: key! } })
}
return paths
return keylist.map((slug) => ({ params: { slug } }))
}
const { slug } = Astro.params

View file

@ -11,7 +11,7 @@ const description =
currentpage="home"
descriptionOverride={description}
>
<Hero />
<Hero />
</Layout>
<style></style>

View file

@ -1,3 +1,3 @@
export function findSlug(filepath: string) {
return filepath.match(/(?:.*[\\/])(.+)(?:\.json)/)?.[1]
return filepath.match(/(?:.*[\\/])(.+)(?:\.json)/)?.[1]
}