Compare commits
No commits in common. "c5af572d384f8ea705a12066dcac08ada500152d" and "7fe9e8c25fc792964819c0ceaca65cd876d0133a" have entirely different histories.
c5af572d38
...
7fe9e8c25f
|
@ -1,7 +1,7 @@
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- '**'
|
- "**"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
checking:
|
checking:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"trailingComma": "es5",
|
"trailingComma": "es5",
|
||||||
"tabWidth": 2,
|
"tabWidth": 2,
|
||||||
"semi": false,
|
"semi": false,
|
||||||
"singleQuote": true
|
"singleQuote": true
|
||||||
}
|
}
|
|
@ -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
|
@ -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",
|
||||||
|
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
27
serve.json
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 34 KiB |
|
@ -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>→</span>
|
<span>→</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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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}`
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)}`
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -11,7 +11,7 @@ const description =
|
||||||
currentpage="home"
|
currentpage="home"
|
||||||
descriptionOverride={description}
|
descriptionOverride={description}
|
||||||
>
|
>
|
||||||
<Hero />
|
<Hero />
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
||||||
<style></style>
|
<style></style>
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
export function findSlug(filepath: string) {
|
export function findSlug(filepath: string) {
|
||||||
return filepath.match(/(?:.*[\\/])(.+)(?:\.json)/)?.[1]
|
return filepath.match(/(?:.*[\\/])(.+)(?:\.json)/)?.[1]
|
||||||
}
|
}
|