stuf
parent
43294614b5
commit
2aabdcae7a
@ -0,0 +1,13 @@
|
||||
{
|
||||
"tabWidth": 4,
|
||||
"useTabs": false,
|
||||
"plugins": ["./node_modules/prettier-plugin-astro"],
|
||||
"overrides": [
|
||||
{
|
||||
"files": "*.astro",
|
||||
"options": {
|
||||
"parser": "astro"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
{
|
||||
"editor.formatOnSave": true,
|
||||
"prettier.documentSelectors": ["**/*.astro"],
|
||||
"[astro]": {
|
||||
"editor.tabSize": 4,
|
||||
"editor.insertSpaces": true,
|
||||
"editor.detectIndentation": false,
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[json]": {
|
||||
"editor.tabSize": 4,
|
||||
"editor.insertSpaces": true,
|
||||
"editor.detectIndentation": false,
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescript]": {
|
||||
"editor.tabSize": 4,
|
||||
"editor.insertSpaces": true,
|
||||
"editor.detectIndentation": false,
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[javascript]": {
|
||||
"editor.tabSize": 4,
|
||||
"editor.insertSpaces": true,
|
||||
"editor.detectIndentation": false,
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
No person should have to see this code. Turn away while you still can.\
|
||||
\
|
||||
\
|
||||
https://www.ruthenic.com
|
||||
https://www.ruthenic.com
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,20 +1,21 @@
|
||||
{
|
||||
"name": "ruthenic.com",
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@astrojs/rss": "^0.2.2",
|
||||
"@astrojs/sitemap": "^1.0.0",
|
||||
"astro": "^1.6.1",
|
||||
"astro-robots-txt": "^0.3.10",
|
||||
"sass": "^1.55.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/mdx": "^0.11.5"
|
||||
}
|
||||
"name": "ruthenic.com",
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"format": "prettier -w --plugin-search-dir=. ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"@astrojs/mdx": "^0.17.0",
|
||||
"@astrojs/rss": "^2.1.1",
|
||||
"@astrojs/sitemap": "^1.0.1",
|
||||
"astro": "^2.0.14",
|
||||
"astro-robots-txt": "^0.4.0",
|
||||
"prettier": "^2.8.4",
|
||||
"prettier-plugin-astro": "^0.8.0",
|
||||
"sass": "^1.58.3"
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,21 @@
|
||||
---
|
||||
import Spoiler from "./Spoiler.astro"
|
||||
const { spoiler, img, alt, source } = Astro.props
|
||||
import Spoiler from "./Spoiler.astro";
|
||||
|
||||
const { spoiler, img, alt, source } = Astro.props;
|
||||
---
|
||||
|
||||
<div>
|
||||
{
|
||||
spoiler ? (<Spoiler {...Astro.props} ><img src={img} alt={alt} /></Spoiler>) : (
|
||||
source ? (<a href={source}><img src={img} alt={alt} /></a>) : (<img src={img} alt={alt} />)
|
||||
)
|
||||
}
|
||||
</div>
|
||||
{
|
||||
spoiler ? (
|
||||
<Spoiler {...Astro.props}>
|
||||
<img src={img} alt={alt} />
|
||||
</Spoiler>
|
||||
) : source ? (
|
||||
<a href={source}>
|
||||
<img src={img} alt={alt} />
|
||||
</a>
|
||||
) : (
|
||||
<img src={img} alt={alt} />
|
||||
)
|
||||
}
|
||||
</div>
|
||||
|
@ -1,15 +1,16 @@
|
||||
---
|
||||
import "../css/spoiler.scss"
|
||||
import "../css/spoiler.scss";
|
||||
|
||||
const warning = Astro.props.warning ?? "Click to show NSFW image"
|
||||
const warning = Astro.props.warning ?? "Click to show NSFW image";
|
||||
// waltuh
|
||||
const trolley = "spoiler-check-" + Math.floor(Math.random() * 102105122122126).toString()
|
||||
const trolley =
|
||||
"spoiler-check-" + Math.floor(Math.random() * 102105122122126).toString();
|
||||
---
|
||||
|
||||
<div class="spoiler" >
|
||||
<input id={trolley} type="checkbox">
|
||||
<div class="spoiler-content">
|
||||
<slot />
|
||||
</div>
|
||||
<label for={trolley} class="spoiler-button">{warning}</label>
|
||||
</div>
|
||||
<div class="spoiler">
|
||||
<input id={trolley} type="checkbox" />
|
||||
<div class="spoiler-content">
|
||||
<slot />
|
||||
</div>
|
||||
<label for={trolley} class="spoiler-button">{warning}</label>
|
||||
</div>
|
||||
|
@ -1,30 +1,31 @@
|
||||
---
|
||||
const allPosts = await Astro.glob("../pages/blog/*.md*");
|
||||
const posts = allPosts
|
||||
.map((item) => Object.assign({}, item.frontmatter, { url: item.url }))
|
||||
//@ts-expect-error cease this bitch crying, what do you mean i shouldn't implicitly convert Dates to Numbers
|
||||
.sort((a, b) => new Date(b.pubDate) - new Date(a.pubDate));
|
||||
import { getCollection } from "astro:content";
|
||||
|
||||
const posts = (await getCollection("blog"))
|
||||
.filter(
|
||||
(entry) => !entry.data.wip || process.env.NODE_ENV === "development"
|
||||
)
|
||||
.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
|
||||
---
|
||||
|
||||
<div>
|
||||
{
|
||||
posts.map((post) => {
|
||||
if (!post.wip || process.env.NODE_ENV === "development") {
|
||||
return (
|
||||
<a href={post.url}>
|
||||
<div
|
||||
class="main-content"
|
||||
style="margin-bottom: 10px; font-size: 125%;"
|
||||
>
|
||||
<div>
|
||||
<b>{post.title}</b> - {post.pubDate}
|
||||
<br />
|
||||
</div>
|
||||
<i>{post.description}</i>
|
||||
return (
|
||||
<a href={`blog/${post.slug}`}>
|
||||
<div
|
||||
class="main-content"
|
||||
style="margin-bottom: 10px; font-size: 125%;"
|
||||
>
|
||||
<div>
|
||||
<b>{post.data.title}</b> -{" "}
|
||||
{post.data.pubDate.toDateString()}
|
||||
<br />
|
||||
</div>
|
||||
</a>
|
||||
);
|
||||
}
|
||||
<i>{post.data.description}</i>
|
||||
</div>
|
||||
</a>
|
||||
);
|
||||
})
|
||||
}
|
||||
</div>
|
||||
|
@ -1,23 +1,34 @@
|
||||
---
|
||||
import '../css/base.scss'
|
||||
import '../css/font.scss'
|
||||
import '../css/color.scss'
|
||||
import "../css/base.scss";
|
||||
import "../css/font.scss";
|
||||
import "../css/color.scss";
|
||||
---
|
||||
|
||||
<div id="footer">
|
||||
<div class="white footer">
|
||||
<div class="footer-entries">
|
||||
{Object.keys(Astro.props.entries).map((key) => {
|
||||
const val = Astro.props.entries[key]
|
||||
return (
|
||||
<a href={val} class="grey">{key}</a>
|
||||
)
|
||||
})}
|
||||
<div class="white footer">
|
||||
<div class="footer-entries">
|
||||
{
|
||||
Object.keys(Astro.props.entries).map((key) => {
|
||||
const val = Astro.props.entries[key];
|
||||
return (
|
||||
<a href={val} class="grey">
|
||||
{key}
|
||||
</a>
|
||||
);
|
||||
})
|
||||
}
|
||||
</div>
|
||||
<div class="img-container">
|
||||
<!--<img src="https://media.ruthenic.com/pentagram.png" alt="Spinning pentagram" style="animation: rotation 10s infinite linear;">-->
|
||||
<img
|
||||
src="https://media.ruthenic.com/lgbtq%20badge.png"
|
||||
alt="LGBTQ+ rights!"
|
||||
/>
|
||||
<!-- sry idk what else to put there lmao -->
|
||||
<img
|
||||
src="https://media.ruthenic.com/god%20cant%20help%20you%20now%20badge.png"
|
||||
alt="CAUTION: God can't help you now."
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="img-container">
|
||||
<!--<img src="https://media.ruthenic.com/pentagram.png" alt="Spinning pentagram" style="animation: rotation 10s infinite linear;">-->
|
||||
<img src="https://media.ruthenic.com/lgbtq%20badge.png" alt="LGBTQ+ rights!"> <!-- sry idk what else to put there lmao -->
|
||||
<img src="https://media.ruthenic.com/god%20cant%20help%20you%20now%20badge.png" alt="CAUTION: God can't help you now.">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,8 +1,13 @@
|
||||
<div>
|
||||
{
|
||||
// always adding rel=me to every entry *probably* doesn't break anything
|
||||
Object.keys(Astro.props.entries).map(k => (
|
||||
<a rel="me" href = {Astro.props.entries[k]}>{k}</a><br>
|
||||
Object.keys(Astro.props.entries).map((k) => (
|
||||
<>
|
||||
<a rel="me" href={Astro.props.entries[k]}>
|
||||
{k}
|
||||
</a>
|
||||
<br />
|
||||
</>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -0,0 +1,33 @@
|
||||
import { z, defineCollection } from "astro:content";
|
||||
|
||||
const blog = defineCollection({
|
||||
schema: z.object({
|
||||
title: z.string(),
|
||||
description: z.string(),
|
||||
wip: z.boolean().optional().default(false),
|
||||
pubDate: z.string().transform((dateStr) => new Date(dateStr)),
|
||||
}),
|
||||
});
|
||||
|
||||
const fanfic = defineCollection({
|
||||
schema: z.object({
|
||||
title: z.string(),
|
||||
// description and tags need to be optional because of chapters
|
||||
description: z.string().optional(),
|
||||
tags: z.array(z.string()).optional(),
|
||||
oneshot: z.boolean().optional().default(false),
|
||||
wip: z.boolean().optional().default(false),
|
||||
|
||||
// exclusive to chapters
|
||||
parent: z.string().optional(),
|
||||
pubDate: z
|
||||
.string()
|
||||
.transform((dateStr) => new Date(dateStr))
|
||||
.optional(),
|
||||
}),
|
||||
});
|
||||
|
||||
export const collections = {
|
||||
blog: blog,
|
||||
fanfic: fanfic,
|
||||
};
|
@ -1,113 +1,116 @@
|
||||
@keyframes rotation {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
|
||||
.main-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
@media (max-width: 520px) {
|
||||
margin-bottom: 132px;
|
||||
}
|
||||
@media (min-width: 520px) {
|
||||
margin-bottom: 3.4375em;
|
||||
}
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
@media (max-width: 520px) {
|
||||
margin-bottom: 132px;
|
||||
}
|
||||
@media (min-width: 520px) {
|
||||
margin-bottom: 3.4375em;
|
||||
}
|
||||
}
|
||||
|
||||
.blog-content {
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
word-wrap: break-word;
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.footer {
|
||||
text-align: left; //Why does text-align being center in .main-content affect the footer at all?!
|
||||
position: fixed;
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
@media (max-width: 520px) { //mobile
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
}
|
||||
@media (min-width: 520px) { //desktop
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
height: 3.4375em;
|
||||
}
|
||||
bottom: 0;
|
||||
left: 0px;
|
||||
width: 100%;
|
||||
|
||||
.img-container {
|
||||
text-align: left; //Why does text-align being center in .main-content affect the footer at all?!
|
||||
position: fixed;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-grow: 1;
|
||||
@media (max-width: 520px) {
|
||||
flex-direction: column;
|
||||
//mobile
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
}
|
||||
img {
|
||||
display: flex;
|
||||
height: 45px;
|
||||
margin-right: 0.625em;
|
||||
@media (max-width: 520px) { //even smoler mobile
|
||||
height: 30px;
|
||||
margin-top: 0.3125em;
|
||||
margin-bottom: 0.3125em;
|
||||
margin-right: 0.3152em;
|
||||
}
|
||||
@media (min-width: 520px) {
|
||||
//desktop
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
height: 3.4375em;
|
||||
}
|
||||
bottom: 0;
|
||||
left: 0px;
|
||||
width: 100%;
|
||||
|
||||
.img-container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
@media (max-width: 520px) {
|
||||
flex-direction: column;
|
||||
}
|
||||
img {
|
||||
display: flex;
|
||||
height: 45px;
|
||||
margin-right: 0.625em;
|
||||
@media (max-width: 520px) {
|
||||
//even smoler mobile
|
||||
height: 30px;
|
||||
margin-top: 0.3125em;
|
||||
margin-bottom: 0.3125em;
|
||||
margin-right: 0.3152em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.homepage-main {
|
||||
img {
|
||||
width: 25%;
|
||||
height: 25%;
|
||||
}
|
||||
display: absolute;
|
||||
text-align: center;
|
||||
top: 0;
|
||||
transform: translateY(25%);
|
||||
img {
|
||||
width: 25%;
|
||||
height: 25%;
|
||||
}
|
||||
display: absolute;
|
||||
text-align: center;
|
||||
top: 0;
|
||||
transform: translateY(25%);
|
||||
}
|
||||
|
||||
.footer-entries {
|
||||
flex: 1;
|
||||
margin-left: 0.625em;
|
||||
@media (max-width: 470px) {
|
||||
margin-left: 0.3152em;
|
||||
}
|
||||
a:not(:last-child) {
|
||||
margin-right: 0.625em;
|
||||
}
|
||||
flex: 1;
|
||||
margin-left: 0.625em;
|
||||
@media (max-width: 470px) {
|
||||
margin-left: 0.3152em;
|
||||
}
|
||||
a:not(:last-child) {
|
||||
margin-right: 0.625em;
|
||||
}
|
||||
}
|
||||
|
||||
.white {
|
||||
background-color: #222222;
|
||||
background-color: #222222;
|
||||
}
|
||||
|
||||
.grey {
|
||||
color: #ffffff;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.padding {
|
||||
position: relative;
|
||||
padding-left: 10px;
|
||||
position: relative;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.padding-right {
|
||||
position: relative;
|
||||
padding-right: 10px;
|
||||
position: relative;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
marquee {
|
||||
width: 100vw;
|
||||
}
|
||||
width: 100vw;
|
||||
}
|
||||
|
@ -1,30 +1,30 @@
|
||||
body {
|
||||
background-color:#333333;
|
||||
color: white;
|
||||
font-family: 'IBM Plex Sans', sans-serif;
|
||||
background-color: #333333;
|
||||
color: white;
|
||||
font-family: "IBM Plex Sans", sans-serif;
|
||||
}
|
||||
pre {
|
||||
background-color: #333333 !important;
|
||||
max-width: 33%;
|
||||
font-family: 'IBM Plex Mono', monospace;
|
||||
font-size: 14px;
|
||||
background-color: #333333 !important;
|
||||
max-width: 33%;
|
||||
font-family: "IBM Plex Mono", monospace;
|
||||
font-size: 14px;
|
||||
}
|
||||
p {
|
||||
font-size: 18px;
|
||||
font-size: 18px;
|
||||
}
|
||||
a {
|
||||
color:#47FF58;
|
||||
text-decoration:none;
|
||||
color: #47ff58;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:link {
|
||||
color:#47FF58;
|
||||
color: #47ff58;
|
||||
}
|
||||
a:visited {
|
||||
color:#47FF58;
|
||||
color: #47ff58;
|
||||
}
|
||||
a:hover {
|
||||
color:#47FF58;
|
||||
color: #47ff58;
|
||||
}
|
||||
a:active {
|
||||
color:#47FF58;
|
||||
color: #47ff58;
|
||||
}
|
||||
|
@ -1,12 +1,12 @@
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url('/fonts/mono.ttf') format('truetype');
|
||||
font-family: "IBM Plex Mono";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url("/fonts/mono.ttf") format("truetype");
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url('/fonts/sans.ttf') format('truetype');
|
||||
font-family: "IBM Plex Sans";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url("/fonts/sans.ttf") format("truetype");
|
||||
}
|
||||
|
@ -0,0 +1,2 @@
|
||||
/// <reference path="../.astro/types.d.ts" />
|
||||
/// <reference types="astro/client" />
|
@ -1,28 +1,30 @@
|
||||
---
|
||||
import '../css/base.scss'
|
||||
import '../css/font.scss'
|
||||
import '../css/color.scss'
|
||||
import "../css/base.scss";
|
||||
import "../css/font.scss";
|
||||
import "../css/color.scss";
|
||||
|
||||
import Footer from '../components/footer.astro';
|
||||
import Footer from "../components/footer.astro";
|
||||
|
||||
const {title} = Astro.props;
|
||||
const { title } = Astro.props;
|
||||
---
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<!--TODO: set meta tags for discord embed-->
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>{title}</title>
|
||||
</head>
|
||||
<body class="main-content">
|
||||
<slot />
|
||||
<Footer entries={{
|
||||
Homepage: "/",
|
||||
Blog: "/blog",
|
||||
Fanfic: "/fanfic",
|
||||
"About Us": "/about"
|
||||
}} />
|
||||
</body>
|
||||
<!--TODO: set meta tags for discord embed-->
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>{title}</title>
|
||||
</head>
|
||||
<body class="main-content">
|
||||
<slot />
|
||||
<Footer
|
||||
entries={{
|
||||
Homepage: "/",
|
||||
Blog: "/blog",
|
||||
Fanfic: "/fanfic",
|
||||
"About Us": "/about",
|
||||
}}
|
||||
/>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,31 +1,34 @@
|
||||
---
|
||||
import '../css/base.scss'
|
||||
import '../css/font.scss'
|
||||
import '../css/color.scss'
|
||||
import "../css/base.scss";
|
||||
import "../css/font.scss";
|
||||
import "../css/color.scss";
|
||||
|
||||
import Footer from '../components/footer.astro';
|
||||
import Footer from "../components/footer.astro";
|
||||
|
||||
const post = Astro.props.frontmatter;
|
||||
|
||||
const {content} = Astro.props;
|
||||
const canonicalURL = new URL(Astro.url.pathname, Astro.site);
|
||||
---
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>{content.title}</title>
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:title" content={content.title}/>
|
||||
<meta property="og:description" content={content.description}/>
|
||||
<meta property="og:url" content={canonicalURL}/>
|
||||
</head>
|
||||
<body class="blog-content">
|
||||
<h2>{content.title}</h2>
|
||||
<h3>{content.description}</h3>
|
||||
<slot />
|
||||
<div style="position:relative;margin-bottom:105px;"></div>
|
||||
<Footer entries={{
|
||||
"Back to Blog Home": "/blog"
|
||||
}} />
|
||||
</body>
|
||||
</html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>{post.title}</title>
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:title" content={post.title} />
|
||||
<meta property="og:description" content={post.description} />
|
||||
<meta property="og:url" content={canonicalURL} />
|
||||
</head>
|
||||
<body class="blog-content">
|
||||
<h2>{post.title}</h2>
|
||||
<h3>{post.description}</h3>
|
||||
<slot />
|
||||
<div style="position:relative;margin-bottom:105px;"></div>
|
||||
<Footer
|
||||
entries={{
|
||||
"Back to Blog Home": "/blog",
|
||||
}}
|
||||
/>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,18 +1,18 @@
|
||||
---
|
||||
import '../css/base.scss'
|
||||
import '../css/font.scss'
|
||||
import '../css/color.scss'
|
||||
const {title} = Astro.props;
|
||||
import "../css/base.scss";
|
||||
import "../css/font.scss";
|
||||
import "../css/color.scss";
|
||||
const { title } = Astro.props;
|
||||
---
|
||||
|
||||
<html lang="en">
|
||||
<!--TODO: set meta tags for discord embed-->
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>{title}</title>
|
||||
</head>
|
||||
<body>
|
||||
<slot />
|
||||
</body>
|
||||
</html>
|
||||
<!--TODO: set meta tags for discord embed-->
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>{title}</title>
|
||||
</head>
|
||||
<body>
|
||||
<slot />
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,9 +1,10 @@
|
||||
---
|
||||
import Base from '../layout/BaseHeaderless.astro'
|
||||
import Base from "../layout/BaseHeaderless.astro";
|
||||
---
|
||||
|
||||
<Base title="ruthenic.com: 404">
|
||||
<center><h1>404</h1>
|
||||
<h3>Sorry, the page you are looking for does not exist!</h3>
|
||||
</center>
|
||||
<center
|
||||
><h1>404</h1>
|
||||
<h3>Sorry, the page you are looking for does not exist!</h3>
|
||||
</center>
|
||||
</Base>
|
||||
|
@ -1,27 +1,45 @@
|
||||
---
|
||||
import Base from '../layout/Base.astro'
|
||||
import Base from "../layout/Base.astro";
|
||||
---
|
||||
|
||||
<Base title="ruthenic.com: About Us">
|
||||
<style>
|
||||
h2 {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
</style>
|
||||
<h2>Who are you?</h2>
|
||||
<p>Either the most boring person you know or the most insane person you know</p>
|
||||
<h2>You don't seem insane to me?</h2>
|
||||
<p>Have you not noticed the "Fanfic" section of this website yet?</p>
|
||||
<h2>What is this website for?</h2>
|
||||
<p>Posting random shit on my blog and/or serving as a platform for my "writing"</p>
|
||||
<h2>Why is writing in quotes?</h2>
|
||||
<p>Refer to my answer to question 2</p>
|
||||
<h2>Damn bro that's crazy, but have you considered getting some bitches?</h2>
|
||||
<p>Only if they're fictional. You may notice that introduces a slight paradox which means that I will never get bitches until someone figures out multi-dimensional travel (never)</p>
|
||||
<h2>Where are you from?</h2>
|
||||
<p>40.31514922688336, -83.06496911453435 (not really, I'm from South Carolina which is slightly more sane than Ohio)</p>
|
||||
<h2>What is your least favorite organ?</h2>
|
||||
<p>Tough question, but the gallbladder is pointless and will probably prove to be quite painful in the future</p>
|
||||
<h2>But the gallbladder doesn't sell for very much on the black market.</h2>
|
||||
<p>Wait are you trying to sell my organs- HELP</p>
|
||||
<style>
|
||||
h2 {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
</style>
|
||||
<h2>Who are you?</h2>
|
||||
<p>
|
||||
Either the most boring person you know or the most insane person you
|
||||
know
|
||||
</p>
|
||||
<h2>You don't seem insane to me?</h2>
|
||||
<p>Have you not noticed the "Fanfic" section of this website yet?</p>
|
||||
<h2>What is this website for?</h2>
|
||||
<p>
|
||||
Posting random shit on my blog and/or serving as a platform for my
|
||||
"writing"
|
||||
</p>
|
||||
<h2>Why is writing in quotes?</h2>
|
||||
<p>Refer to my answer to question 2</p>
|
||||
<h2>
|
||||
Damn bro that's crazy, but have you considered getting some bitches?
|
||||
</h2>
|
||||
<p>
|
||||
Only if they're fictional. You may notice that introduces a slight
|
||||
paradox which means that I will never get bitches until someone figures
|
||||
out multi-dimensional travel (never)
|
||||
</p>
|
||||
<h2>Where are you from?</h2>
|
||||
<p>
|
||||
40.31514922688336, -83.06496911453435 (not really, I'm from South
|
||||
Carolina which is slightly more sane than Ohio)
|
||||
</p>
|
||||
<h2>What is your least favorite organ?</h2>
|
||||
<p>
|
||||
Tough question, but the gallbladder is pointless and will probably prove
|
||||
to be quite painful in the future
|
||||
</p>
|
||||
<h2>But the gallbladder doesn't sell for very much on the black market.</h2>
|
||||
<p>Wait are you trying to sell my organs- HELP</p>
|
||||
</Base>
|
||||
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
import Base from '../layout/Base.astro'
|
||||
import BlogList from '../components/blogList.astro'
|
||||
---
|
||||
|
||||
<Base title="ruthenic.com: Blog">
|
||||
<h1>Blog</h1>
|
||||
<BlogList />
|
||||
</Base>
|
@ -0,0 +1,21 @@
|
||||
---
|
||||
import { getCollection } from "astro:content";
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const posts = await getCollection("blog");
|
||||
|
||||
return posts
|
||||
.filter(
|
||||
(entry) => !entry.data.wip || process.env.NODE_ENV === "development"
|
||||
)
|
||||
.map((entry) => ({
|
||||
params: { slug: entry.slug },
|
||||
props: { entry },
|
||||
}));
|
||||
}
|
||||
|
||||
const { entry } = Astro.props;
|
||||
const { Content } = await entry.render();
|
||||
---
|
||||
|
||||
<Content />
|
@ -1,38 +0,0 @@
|
||||
import rss from "@astrojs/rss";
|
||||
/* function sortWithTransform(array, transform, sorter) {
|
||||
console.log(array)
|
||||
global.JANK_newArray = []
|
||||
Promise.all(array.map(async (i) => { return await transform(i) })).then(
|
||||
(res)=>{
|
||||
res.forEach(i => {
|
||||
global.JANK_newArray.push(i)
|
||||
})
|
||||
}
|
||||
)
|
||||
console.log(global.JANK_newArray)
|
||||
return array
|
||||
}
|
||||
|
||||
/*const sortObject = obj => Object.keys(obj).sort(async (a,b)=> {
|
||||
console.log(await obj[b]())
|
||||
return (new Date((await obj[b]()).frontmatter.pubDate)) - (new Date((await obj[a]()).frontmatter.pubDate))
|
||||
}).reduce((res, key) => (res[key] = obj[key], res), {}); * /
|
||||
const sortObject = obj => sortWithTransform(Object.keys(obj), async (o) => {
|
||||
return new Date((await obj[o]()).frontmatter.pubDate)
|
||||
}, (a,b) => b-a).reduce((res, key) => (res[key] = obj[key], res), {}); */
|
||||
|
||||
let posts = import.meta.glob("./*.md*");
|
||||
Object.keys(posts).forEach(async (k) => {
|
||||
const res = await posts[k]();
|
||||
if (res.frontmatter.wip) {
|
||||
delete posts[k];
|
||||
}
|
||||
}) //remove WIP entries
|
||||
|
||||
export const get = () => rss({
|
||||
title: "Ruthenic's blog",
|
||||
description: "My blog, utilized for talking about random things.",
|
||||
site: import.meta.env.SITE,
|
||||
items: posts,
|
||||
stylesheet: "/rssStyle.xsl"
|
||||
})
|
@ -0,0 +1,23 @@
|
||||
import rss from "@astrojs/rss";
|
||||
import { getCollection } from "astro:content";
|
||||
|
||||
export async function get(context) {
|
||||
const posts = (await getCollection("blog"))
|
||||
.filter(
|
||||
(entry) => !entry.data.wip || process.env.NODE_ENV === "development"
|
||||
)
|
||||
.map((post) => ({
|
||||
title: post.data.title,
|
||||
pubDate: post.data.pubDate,
|
||||
description: post.data.description,
|
||||
link: `/blog/${post.slug}/`,
|
||||
}));
|
||||
|
||||
return rss({
|
||||
title: "Ruthenic's blog",
|
||||
description: "My blog, utilized for talking about random things.",
|
||||
site: context.site,
|
||||
items: posts,
|
||||
stylesheet: "/rssStyle.xsl",
|
||||
});
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
---
|
||||
import Base from "../../layout/Base.astro";
|
||||
import BlogList from "../../components/blogList.astro";
|
||||
---
|
||||
|
||||
<Base title="ruthenic.com: Blog">
|
||||
<h1>Blog</h1>
|
||||
<BlogList />
|
||||
</Base>
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
layout: ../../layout/BaseBlog.astro
|
||||
title: template
|
||||
description: description
|
||||
wip: true
|
||||
pubDate: WORDDAY, MONTH NUMDAY YEAR
|
||||
---
|
||||
|
||||
Content here!
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
layout: ../../layout/BaseBlog.astro
|
||||
title: Why Tulpamancy isn't
|
||||
description: description
|
||||
wip: true
|
||||
pubDate: WORDDAY, MONTH NUMDAY YEAR
|
||||
---
|
||||
|
||||
Content here!
|
@ -1,32 +0,0 @@
|
||||
---
|
||||
import Base from "../layout/Base.astro";
|
||||
const allFics = await Astro.glob("./fanfic/*.md*");
|
||||
---
|
||||
|
||||
<Base title="ruthenic.com: Fanfics">
|
||||
<h1>Fanfics</h1>
|
||||
<div>
|
||||
{
|
||||
allFics
|
||||
.sort((a, b) =>
|
||||
a.frontmatter.title.localeCompare(b.frontmatter.title)
|
||||
)
|
||||
.map((fic) =>
|
||||
(
|
||||
<a href={fic.url}>
|
||||
<div
|
||||
class="main-content"
|
||||
style="margin-bottom: 10px; font-size: 125%;"
|
||||
>
|
||||
<div style="display:flex;">
|
||||
<b>{fic.frontmatter.title}</b>{fic.frontmatter.oneshot ? (<span> - (Oneshot)</span>) : undefined}
|
||||
</div>
|
||||
{fic.frontmatter.description ? (<br/><i>{fic.frontmatter.description}</i>) : undefined}
|
||||
{fic.frontmatter.tags.toString().split(",").join(", ")}
|
||||
</div>
|
||||
</a>
|
||||
)
|
||||
)
|
||||
}
|
||||
</div>
|
||||
</Base>
|
@ -0,0 +1,21 @@
|
||||
---
|
||||
import { getCollection } from "astro:content";
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const fics = await getCollection("fanfic");
|
||||
|
||||
return fics
|
||||
.filter(
|
||||
(entry) => !entry.data.wip || process.env.NODE_ENV === "development"
|
||||
)
|
||||
.map((entry) => ({
|
||||
params: { slug: entry.slug },
|
||||
props: { entry },
|
||||
}));
|
||||
}
|
||||
|
||||
const { entry } = Astro.props;
|
||||
const { Content } = await entry.render();
|
||||
---
|
||||
|
||||
<Content />
|
@ -0,0 +1,26 @@
|
||||
import rss from "@astrojs/rss";
|
||||
import { getCollection } from "astro:content";
|
||||
|
||||
export async function get(context) {
|
||||
const fics = (await getCollection("fanfic"))
|
||||
.filter(
|
||||
(entry) =>
|
||||
(!entry.data.wip || process.env.NODE_ENV === "development") &&
|
||||
!entry.data.parent
|
||||
)
|
||||
.map((fic) => ({
|
||||
title: fic.data.title,
|
||||
// fics dont have a published date and it's required for some reason, literally 1984
|
||||
pubDate: new Date(441763200000),
|
||||
description: fic.data.description ?? "",
|
||||
link: `/fanfic/${fic.slug}/`,
|
||||
}));
|
||||
|
||||
return rss({
|
||||
title: "Ruthenic's fanfics",
|
||||
description: "My fanfics.",
|
||||
site: context.site,
|
||||
items: fics,
|
||||
stylesheet: "/rssStyle.xsl",
|
||||
});
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
---
|
||||
import { getCollection } from "astro:content";
|
||||
|
||||
import Base from "../../layout/Base.astro";
|
||||
const fics = (await getCollection("fanfic"))
|
||||
.filter(
|
||||
(entry) =>
|
||||
(!entry.data.wip || process.env.NODE_ENV === "development") &&
|
||||
!entry.data.parent
|
||||
)
|
||||
.sort((a, b) => a.data.title.localeCompare(b.data.title));
|
||||
---
|
||||
|
||||
<Base title="ruthenic.com: Fanfics">
|
||||
<h1>Fanfics</h1>
|
||||
<div>
|
||||
{
|
||||
fics.map((fic) => (
|
||||
<a href={`fanfic/${fic.slug}`}>
|
||||
<div
|
||||
class="main-content"
|
||||
style="margin-bottom: 10px; font-size: 125%;"
|
||||
>
|
||||
<div style="display:flex;">
|
||||
<b>{fic.data.title}</b>
|
||||
{fic.data.oneshot ? (
|
||||
<span> - (Oneshot)</span>
|
||||
) : undefined}
|
||||
</div>
|
||||
{fic.data.description ? (
|
||||
<i>{fic.data.description}</i>
|
||||
) : undefined}
|
||||
{fic.data.tags?.join(", ")}
|
||||
</div>
|
||||
</a>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</Base>
|
@ -1,19 +1,26 @@
|
||||
---
|
||||
import Base from '../layout/Base.astro'
|
||||
import Linklist from '../components/linkList.astro'
|
||||
import Base from "../layout/Base.astro";
|
||||
import Linklist from "../components/linkList.astro";
|
||||
---
|
||||
|
||||
<Base title="ruthenic.com: Homepage">
|
||||
<h1>Ruthenic's site</h1> <!--originally intended to be only written in CSS and HTML but f**k that-->
|
||||
<p>Welcome to my site. I hope you enjoy the experience.</p>
|
||||
<marquee behavior="scroll" direction="left"><a href = "https://github.com/Ruthenic">Checkout (haha) my Github!</a></marquee>
|
||||
<h1>Ruthenic's site</h1>
|
||||
<!--originally intended to be only written in CSS and HTML but f**k that-->
|
||||
<p>Welcome to my site. I hope you enjoy the experience.</p>
|
||||
<marquee behavior="scroll" direction="left"
|
||||
><a href="https://github.com/Ruthenic">Checkout (haha) my Github!</a
|
||||
></marquee
|
||||
>
|
||||
<p>Check me out on</p>
|
||||
<Linklist entries={{
|
||||
Gitea: "https://git.ruthenic.com/ruthenic",
|
||||
Github: "https://github.com/Ruthenic",
|
||||
"Last.fm": "https://www.last.fm/user/DustyAngel47",
|
||||
Fediverse: "https://social.ruthenic.com/ruthenic",
|
||||
Youtube: "https://www.youtube.com/channel/UC5BfTH4lP7rY5q3qSAvpvhA",
|
||||
"Wattpad (for some reason)": "https://www.wattpad.com/user/DustyAngel47"
|
||||
}}/>
|
||||
<Linklist
|
||||
entries={{
|
||||
Gitea: "https://git.ruthenic.com/ruthenic",
|
||||
Github: "https://github.com/Ruthenic",
|
||||
"Last.fm": "https://www.last.fm/user/DustyAngel47",
|
||||
Fediverse: "https://social.ruthenic.com/ruthenic",
|
||||
Youtube: "https://www.youtube.com/channel/UC5BfTH4lP7rY5q3qSAvpvhA",
|
||||
"Wattpad (for some reason)":
|
||||
"https://www.wattpad.com/user/DustyAngel47",
|
||||
}}
|
||||
/>
|
||||
</Base>
|
||||
|
@ -1,15 +1,17 @@
|
||||
---
|
||||
import Base from '../layout/BaseHeaderless.astro'
|
||||
import Newtab from '../components/linkList.astro'
|
||||
import Base from "../layout/BaseHeaderless.astro";
|
||||
import NewTab from "../components/linkList.astro";
|
||||
---
|
||||
|
||||
<Base title="ruthenic.com: Example Page">
|
||||
<Newtab entries={{
|
||||
Youtube: "https://youtube.com",
|
||||
Fediverse: "https://social.ruthenic.com",
|
||||
Gitea: "https://git.ruthenic.com",
|
||||
"ruthenic.com": "https://ruthenic.com",
|
||||
CharacterAI: "https://beta.character.ai",
|
||||
AO3: "https://archiveofourown.org"
|
||||
}}/>
|
||||
<Base title="ruthenic.com: New Tab">
|
||||
<NewTab
|
||||
entries={{
|
||||
Youtube: "https://youtube.com",
|
||||
Fediverse: "https://social.ruthenic.com",
|
||||
Gitea: "https://git.ruthenic.com",
|
||||
"ruthenic.com": "https://ruthenic.com",
|
||||
CharacterAI: "https://beta.character.ai",
|
||||
AO3: "https://archiveofourown.org",
|
||||
}}
|
||||
/>
|
||||
</Base>
|
||||
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
import Base from '../layout/Base.astro'
|
||||
---
|
||||
|
||||
<Base title="ruthenic.com: Example Page">
|
||||
<h1>Hello, world!</h1>
|
||||
</Base>
|
@ -1,5 +1,7 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"moduleResolution": "node"
|
||||
}
|
||||
"extends": "astro/tsconfigs/base",
|
||||
"compilerOptions": {
|
||||
"strictNullChecks": true,
|
||||
"allowJs": true
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in new issue