Compare commits

..

No commits in common. "c5af572d384f8ea705a12066dcac08ada500152d" and "7fe9e8c25fc792964819c0ceaca65cd876d0133a" have entirely different histories.

28 changed files with 138 additions and 276 deletions

View file

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

View file

@ -66,6 +66,7 @@ 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' - 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" - echo "Website is up on https://fgo-ta.com"
redeploy-site: redeploy-site:
stage: scripts stage: scripts
when: manual when: manual

View file

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

View file

@ -1,5 +1,5 @@
import { defineConfig } from 'astro/config' import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap' import sitemap from "@astrojs/sitemap";
export default defineConfig({ export default defineConfig({
sitemap: true, sitemap: true,
@ -7,5 +7,5 @@ export default defineConfig({
outDir: 'dist', outDir: 'dist',
publicDir: 'static', publicDir: 'static',
site: 'https://fgo-ta.com/', 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", "name": "fgo-ta-com-website",
"version": "0.1.7", "version": "0.1.5",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "fgo-ta-com-website", "name": "fgo-ta-com-website",
"version": "0.1.7", "version": "0.1.5",
"dependencies": { "dependencies": {
"@astro-community/astro-embed-youtube": "^0.4.3", "@astro-community/astro-embed-youtube": "^0.4.3",
"@astrojs/check": "^0.3.4", "@astrojs/check": "^0.3.4",
@ -16,10 +16,6 @@
"iconoir": "^7.3.0", "iconoir": "^7.3.0",
"postcss-preset-env": "^9.3.0", "postcss-preset-env": "^9.3.0",
"typescript": "^5.3.3" "typescript": "^5.3.3"
},
"devDependencies": {
"prettier": "^3.1.1",
"prettier-plugin-astro": "^0.12.3"
} }
}, },
"node_modules/@ampproject/remapping": { "node_modules/@ampproject/remapping": {
@ -6277,41 +6273,6 @@
"node": ">=8.15" "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": { "node_modules/prismjs": {
"version": "1.29.0", "version": "1.29.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
@ -7089,12 +7050,6 @@
"queue-microtask": "^1.2.2" "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": { "node_modules/safe-buffer": {
"version": "5.2.1", "version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@ -7119,15 +7074,6 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" "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": { "node_modules/sax": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
@ -7472,15 +7418,6 @@
"node": ">=0.10.0" "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": { "node_modules/supports-color": {
"version": "5.5.0", "version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",

View file

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

View file

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View file

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

View file

@ -11,17 +11,9 @@ 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 In the future, it will be used to catalogue information around FGO TA and the
game in general. game in general.
<br /> <br />
<a href="https://firq.dev" target="_blank" rel="noopener noreferrer" <a href="https://firq.dev" target="_blank" rel="noopener noreferrer">Feel free to check out my own site.</a>
>Feel free to check out my own site.</a
>
<br /> <br />
<span class="version" <span class="version">(Website version: <a href={release} target="_blank" rel="noopener noreferrer">{version}</a>)</span>
>(Website version: <a
href={release}
target="_blank"
rel="noopener noreferrer">{version}</a
>)</span
>
</span> </span>
<slot /> <slot />
</div> </div>

View file

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

View file

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

View file

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

View file

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

View file

@ -1,82 +1,26 @@
{ {
"info": { "info": {
"title": "Cernunnos", "title": "Cernunnos",
"questReleaseDate": "2023-07-10", "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", "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" "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": "Shishou 4T (FLO)", {
"link": "https://www.youtube.com/watch?v=O1f-go7uJQM", "title": "Cernunnos 4T (No Castoria)",
"date": "2023-07-19", "link": "https://www.youtube.com/watch?v=WrHudtdfivA",
"servant": "shishou", "date": "2023-07-19",
"turns": "4T", "servant": "shishou",
"runner": "Requiem" "turns": "4T",
}, "runner": "Firq"
{ },
"title": "Jalter 4T", {
"link": "https://www.youtube.com/watch?v=VGuXstsJa6k", "title": "Cernunnos 4T (FLO)",
"date": "2023-07-10", "link": "https://www.youtube.com/watch?O1f-go7uJQM",
"servant": "jalter", "date": "2023-07-19",
"turns": "4T", "servant": "shishou",
"runner": "Ray" "turns": "4T",
}, "runner": "Requiem"
{ }
"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 = { const icons: IconsLookup = {
home: home, home: home,
database: database, database: database
} }
const { descriptionOverride, currentpage, title } = Astro.props const { descriptionOverride, currentpage, title } = Astro.props
@ -38,7 +38,7 @@ const mapped_navdata = navdata.map((item) => ({
})) }))
--- ---
<!doctype html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>{title}</title> <title>{title}</title>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,3 +1,3 @@
{ {
"extends": "astro/tsconfigs/strict" "extends": "astro/tsconfigs/strict"
} }