Compare commits
No commits in common. "641f1856be6eac1397a3da24187cc120e5b8fb9c" and "a3fd692870e711d3efea06adb31787ec0e858f19" have entirely different histories.
641f1856be
...
a3fd692870
|
@ -1,23 +0,0 @@
|
|||
name: Publish to OCI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- gold
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Set repository name to lowercase
|
||||
run: echo "REPO_NAME=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
|
||||
|
||||
- name: Authenticate with registry
|
||||
run: docker login git.smgames.club -u ${{ github.repository_owner }} -p ${{ secrets.DOCKER_TOKEN }}
|
||||
|
||||
- name: Build Docker container
|
||||
run: docker build --no-cache --progress=plain -t git.smgames.club/${{ env.REPO_NAME }}:latest .
|
||||
|
||||
- name: Push Docker container
|
||||
run: docker push git.smgames.club/${{ env.REPO_NAME }}:latest
|
26
.github/workflows/nuxtjs.yml
vendored
|
@ -25,10 +25,34 @@ concurrency:
|
|||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
# Add/update json to branch commit before building
|
||||
# then upload the artifact to the git repository for storage (permanent)
|
||||
prepare:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Activate Venv
|
||||
run: source venv/bin/activate
|
||||
- name: Setup Deno
|
||||
uses: denoland/setup-deno@v2
|
||||
with:
|
||||
deno-version: v2.x
|
||||
- name: Install dependencies
|
||||
run: pip install python-frontmatter && deno install
|
||||
- name: Update Page list
|
||||
run: deno --allow-all utils/page_updater/update_pagelist.ts
|
||||
# - name: Update Page history
|
||||
# run: python utils/page_updater/commit_post_history.py
|
||||
# - name: Generate RSS feed
|
||||
# run: python utils/page_updater/rss_xml_gen.py
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
|
||||
# Build job
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
needs: prepare
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
@ -47,8 +71,6 @@ jobs:
|
|||
${{ runner.os }}-nuxt-build-
|
||||
- name: Install dependencies
|
||||
run: deno install
|
||||
- name: Update Page list
|
||||
run: deno --allow-all utils/page_updater/update_pagelist.ts
|
||||
- name: Generate project as a static site
|
||||
run: deno task generate
|
||||
- name: Upload artifact
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
FROM node:latest
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm install
|
||||
COPY . .
|
||||
RUN npm run build
|
||||
EXPOSE 80
|
||||
ENV NITRO_PORT 80
|
||||
CMD ["node .output/server/index.mjs"]
|
|
@ -1,88 +1,27 @@
|
|||
{
|
||||
"last_generated": "2025-01-04 12:52:32",
|
||||
"last_generated": "2025-01-04 19:51:50",
|
||||
"categories": {
|
||||
"Site": {
|
||||
"posts": [
|
||||
{
|
||||
"metadata": {
|
||||
"title": "Styling Test",
|
||||
"description": "A test post to see how the site styling looks",
|
||||
"date": "2024-12-31 16:00:00",
|
||||
"tags": [
|
||||
"meta",
|
||||
"web"
|
||||
]
|
||||
},
|
||||
"id": "site/styling_test",
|
||||
"url": "/site/styling_test",
|
||||
"hash": "0ff9f34321a27f462ca26656a1dc5024c0e800ea1e176ff36316b158ab4606c9"
|
||||
}
|
||||
],
|
||||
"title": "Site",
|
||||
"description": "Articles to test site functionality",
|
||||
"tags": [
|
||||
"site"
|
||||
]
|
||||
},
|
||||
"Collections": {
|
||||
"Blog": {
|
||||
"posts": [
|
||||
{
|
||||
"metadata": {
|
||||
"title": "LGBTQ+ Resources",
|
||||
"description": "A list of resources for LGBTQ+ individuals",
|
||||
"date": "2025-01-01 16:00:00",
|
||||
"date": "2025-01-02 00:00:00",
|
||||
"tags": [
|
||||
"lgbtq+",
|
||||
"resources"
|
||||
]
|
||||
},
|
||||
"id": "collections/lgbtq_resources",
|
||||
"url": "/collections/lgbtq_resources",
|
||||
"id": "blog/lgbtq_resources.md",
|
||||
"url": "/blog/lgbtq_resources.md",
|
||||
"hash": "3da76064aa95cc06937bde01128ed44aafb850f35a43bd214ce0cd89a875c674"
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
"title": "Badges!",
|
||||
"description": "A collection of 88x31 badges for various things",
|
||||
"date": "2024-12-20 16:00:00",
|
||||
"tags": [
|
||||
"badges",
|
||||
"retro",
|
||||
"web"
|
||||
]
|
||||
},
|
||||
"id": "collections/badges",
|
||||
"url": "/collections/badges",
|
||||
"hash": "338ccfecc6523dff93708330a8b43af715f1e80d55e1cc3bea2d1a7306fc4f00"
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
"title": "Awesome",
|
||||
"description": "A curated list of awesome stuff I like",
|
||||
"date": "2024-11-25 16:00:00",
|
||||
"tags": [
|
||||
"awesome",
|
||||
"curated"
|
||||
]
|
||||
},
|
||||
"id": "collections/awesome",
|
||||
"url": "/collections/awesome",
|
||||
"hash": "0632400858006b93f2f36d87953538c2a400bacc75aaa29928aee226e8b343b1"
|
||||
}
|
||||
],
|
||||
"title": "Collections",
|
||||
"description": "Articles that are collections of information: Lists, Awesome lists, etc.",
|
||||
"tags": [
|
||||
"collection"
|
||||
]
|
||||
},
|
||||
"Guides": {
|
||||
"posts": [
|
||||
{
|
||||
"metadata": {
|
||||
"title": "3DS Programming - Using RomFS",
|
||||
"description": "A guide to using RomFS on the 3DS. (Old)",
|
||||
"date": "2024-12-31 16:00:00",
|
||||
"date": "2025-01-01 00:00:00",
|
||||
"tags": [
|
||||
"3ds",
|
||||
"programming",
|
||||
|
@ -93,33 +32,29 @@
|
|||
"previous": "old3ds_helloworld.md",
|
||||
"next": "old3ds_touchscreen.md"
|
||||
},
|
||||
"id": "guides/old3ds_romfs",
|
||||
"url": "/guides/old3ds_romfs",
|
||||
"hash": "34062b79909f5b18a647b484687cf862e779c08da9fc6052c4ebab3eef67151c"
|
||||
"id": "blog/old3ds_romfs.md",
|
||||
"url": "/blog/old3ds_romfs.md",
|
||||
"hash": "0b28a366868e9fa564b6a33d9b1aa1d8269f7971497f25488f05f54929e88410"
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
"title": "3DS Programming - Touchscreen Input",
|
||||
"description": "A guide to using the touchscreen on the 3DS. (Old)",
|
||||
"date": "2024-12-31 16:00:00",
|
||||
"title": "Styling Test",
|
||||
"description": "A test post to see how the site styling looks",
|
||||
"date": "2025-01-01 00:00:00",
|
||||
"tags": [
|
||||
"3ds",
|
||||
"programming",
|
||||
"c",
|
||||
"devkitpro",
|
||||
"old"
|
||||
],
|
||||
"previous": "old3ds_romfs.md"
|
||||
"meta",
|
||||
"web"
|
||||
]
|
||||
},
|
||||
"id": "guides/old3ds_touchscreen",
|
||||
"url": "/guides/old3ds_touchscreen",
|
||||
"hash": "c026e506fb60c8ed9943f5806e8adf611a382a7de34e30fc2a72f4578d66899e"
|
||||
"id": "blog/styling_test.md",
|
||||
"url": "/blog/styling_test.md",
|
||||
"hash": "0ff9f34321a27f462ca26656a1dc5024c0e800ea1e176ff36316b158ab4606c9"
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
"title": "3DS Programming - Hello World",
|
||||
"description": "A guide to creating a simple Hello, World program for the 3DS. (Old)",
|
||||
"date": "2024-12-31 16:00:00",
|
||||
"date": "2025-01-01 00:00:00",
|
||||
"tags": [
|
||||
"3ds",
|
||||
"programming",
|
||||
|
@ -129,16 +64,61 @@
|
|||
],
|
||||
"next": "old3ds_romfs.md"
|
||||
},
|
||||
"id": "guides/old3ds_helloworld",
|
||||
"url": "/guides/old3ds_helloworld",
|
||||
"hash": "77a21a1201a35d6a85cb2305166cfb20a0a45546fea1f73fd620b2b84ec70fda"
|
||||
"id": "blog/old3ds_helloworld.md",
|
||||
"url": "/blog/old3ds_helloworld.md",
|
||||
"hash": "86e0bd1deae0d00b17ab0960634ea7292d6387063f70600cec4001564fde9514"
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
"title": "3DS Programming - Touchscreen Input",
|
||||
"description": "A guide to using the touchscreen on the 3DS. (Old)",
|
||||
"date": "2025-01-01 00:00:00",
|
||||
"tags": [
|
||||
"3ds",
|
||||
"programming",
|
||||
"c",
|
||||
"devkitpro",
|
||||
"old"
|
||||
],
|
||||
"previous": "old3ds_romfs.md"
|
||||
},
|
||||
"id": "blog/old3ds_touchscreen.md",
|
||||
"url": "/blog/old3ds_touchscreen.md",
|
||||
"hash": "59e0b9d701646fd5f747713832c47ce451e0ebe0975d4a148a820ca795741c2b"
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
"title": "Badges!",
|
||||
"description": "A collection of 88x31 badges for various things",
|
||||
"date": "2024-12-21 00:00:00",
|
||||
"tags": [
|
||||
"badges",
|
||||
"retro",
|
||||
"web"
|
||||
]
|
||||
},
|
||||
"id": "blog/badges.md",
|
||||
"url": "/blog/badges.md",
|
||||
"hash": "338ccfecc6523dff93708330a8b43af715f1e80d55e1cc3bea2d1a7306fc4f00"
|
||||
},
|
||||
{
|
||||
"metadata": {
|
||||
"title": "Awesome",
|
||||
"description": "A curated list of awesome stuff I like",
|
||||
"date": "2024-11-26 00:00:00",
|
||||
"tags": [
|
||||
"awesome",
|
||||
"curated"
|
||||
]
|
||||
},
|
||||
"id": "blog/awesome.md",
|
||||
"url": "/blog/awesome.md",
|
||||
"hash": "0632400858006b93f2f36d87953538c2a400bacc75aaa29928aee226e8b343b1"
|
||||
}
|
||||
],
|
||||
"title": "Guides",
|
||||
"description": "Guides and tutorials",
|
||||
"tags": [
|
||||
"guide"
|
||||
]
|
||||
"title": "",
|
||||
"description": "",
|
||||
"tags": []
|
||||
}
|
||||
}
|
||||
}
|
|
@ -273,5 +273,5 @@ Hosted
|
|||
|
||||
/* Images get a border and a shadow */
|
||||
.md-contents img:not(.md-override) {
|
||||
@apply shadow-image shadow-sm m-1;
|
||||
@apply border-2 border-image shadow-image shadow-sm m-1;
|
||||
}
|
||||
|
|
|
@ -162,8 +162,4 @@ color: #75715e;
|
|||
.hljs-type,
|
||||
.hljs-selector-id {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.card {
|
||||
@apply shadow-sm shadow-border-accent;
|
||||
}
|
|
@ -9,9 +9,12 @@ import Card from './Card.vue';
|
|||
<Card>
|
||||
<div class="flex justify-center">
|
||||
<NuxtLink href="/" class="transition text-xl pl-2 pr-2 ease-in-out text-purple-100 hover:text-purple-400 duration-200">Home</NuxtLink>
|
||||
<NuxtLink href="/article/" class="transition text-xl pl-2 pr-2 ease-in-out text-purple-100 hover:text-purple-400 duration-200">Articles</NuxtLink>
|
||||
<NuxtLink href="/article/collections/awesome" class="transition text-xl pl-2 pr-2 ease-in-out text-purple-100 hover:text-purple-400 duration-200">Awesome</NuxtLink>
|
||||
<NuxtLink href="/article/collections/badges" class="transition text-xl pl-2 pr-2 ease-in-out text-purple-100 hover:text-purple-400 duration-200">Badges</NuxtLink>
|
||||
<NuxtLink href="/article/" class="transition text-xl pl-2 pr-2 ease-in-out text-purple-100 hover:text-purple-400 duration-200">Blog</NuxtLink>
|
||||
<NuxtLink href="/article/blog/awesome.md" class="transition text-xl pl-2 pr-2 ease-in-out text-purple-100 hover:text-purple-400 duration-200">Awesome</NuxtLink>
|
||||
<NuxtLink href="/article/blog/badges.md" class="transition text-xl pl-2 pr-2 ease-in-out text-purple-100 hover:text-purple-400 duration-200">Badges</NuxtLink>
|
||||
</div>
|
||||
<div class="flex justify-center text-white">
|
||||
<small class="ml-3 mr-3">Hosted with <NuxtLink href="https://github.com/TheFelidae/thefelidae.github.io" class="text-blue-500">GitHub Pages</NuxtLink></small>
|
||||
</div>
|
||||
</Card>
|
||||
</div>
|
||||
|
|
|
@ -3,24 +3,44 @@ title: About Me
|
|||
prop: true
|
||||
---
|
||||
|
||||
# 🌙 Luna - She/They/Fae 🌙
|
||||
<h1 class="md-override">Helau! :3</h1>
|
||||
|
||||
<br>
|
||||
## 🌙 Luna - She/Her
|
||||
|
||||
[`mrrpnya@proton.me`](mailto:thelunacy@proton.me)
|
||||
[`thelunacy@proton.me`](mailto:thelunacy@proton.me)
|
||||
|
||||
<br>
|
||||
<div style="display: flex; justify-content: center; align-items: center;">
|
||||
|
||||
##### Helau! :3
|
||||
<!-- /rss.xml -->
|
||||
[![RSS](https://img.shields.io/badge/RSS-Subscribe-orange?style=for-the-badge&logo=rss)](https://thefelidae.github.io/rss.xml)
|
||||
|
||||
###### 🏳️⚧️ I am exploring feminine presentation and identity, so this may change or I might go by different things elsewhere. 🏳️⚧️
|
||||
###### Please respect what I set my info as in the context of it at least.
|
||||
<!-- Fediverse -->
|
||||
[![Fediverse](https://img.shields.io/badge/Fediverse-Follow-blue?style=for-the-badge&logo=mastodon)](https://social.smgames.club/@mrrp)
|
||||
|
||||
<br>
|
||||
<!-- Visitors -->
|
||||
![Visitors](https://api.visitorbadge.io/api/combined?path=https%3A%2F%2Fgithub.com%2Fmisslunatic%2FMissLunatic&label=VIsitors&countColor=%23e7c4ff)
|
||||
|
||||
</div>
|
||||
|
||||
###### 🏳️⚧️ I am exploring identity, so this may change or I might go by different things elsewhere.
|
||||
|
||||
###### Regardless, try to respect this or else. I'm not here to debate my existence.
|
||||
|
||||
<div style="color: pink">
|
||||
|
||||
*Queer rights are human rights.*
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<div style="justify-content: center; display: flex; align-items: center;">
|
||||
|
||||
</div>
|
||||
|
||||
I'm a student, apprentice, hobbyist, and generally a nerd who does some coding every once and a while.
|
||||
I've mainly been messing with C, C++, C# and have been learning Rust. I'm presently learning more about web development, particularly regarding frameworks and libraries.
|
||||
I'm a bit shy in terms of socializing, but I'm often open to chat about most things, so long as it's respectful.
|
||||
Please reach out to me first, I probably won't do so myself.
|
||||
|
||||
Follow if you enjoy. I'm not *too* active, but I'll try to post some things every once and a while.
|
||||
Follow if you enjoy. I'm not *too* active, but I'll try to post some things every once and a while.
|
||||
|
|
|
@ -20,7 +20,6 @@ Inspired by [Awesome](https://github.com/sindresorhus/awesome), this is a dumpin
|
|||
> [!info]
|
||||
> This is going to be long, and will probably be getting a lot of updates.
|
||||
> I intend to just keep adding to this.
|
||||
> This is meant to be kind of a miscellaneous collection of stuff - For more specific things, see other collections.
|
||||
|
||||
## Table of Contents
|
||||
|
36
content/blog/badges.md
Normal file
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
title: Badges!
|
||||
description: A collection of 88x31 badges for various things
|
||||
date: 2024-12-21
|
||||
tags: ['badges', 'retro', 'web']
|
||||
---
|
||||
|
||||
## A collection of 88x31 badges for various things
|
||||
|
||||
You can right-click any of these and either save or copy-link to use these badges on your site or profile.
|
||||
|
||||
### Myself
|
||||
|
||||
For adding to your site or profile.
|
||||
|
||||
Pending... Need to draw some up.
|
||||
|
||||
### LGBTQIA+
|
||||
|
||||
Very gay badges, incoming :3
|
||||
(More to come, I'm still drawing them)
|
||||
|
||||
#### Identity
|
||||
|
||||
- Umbrellas
|
||||
|
||||
> [![Transgender](/badges/transgender.gif)](https://en.wikipedia.org/wiki/Transgender)
|
||||
> [![Nonbinary](/badges/nonbinary.gif)](https://en.wikipedia.org/wiki/Non-binary)
|
||||
|
||||
- Specific Identities
|
||||
|
||||
> [![Transfem](/badges/transfem.gif)](https://en.wikipedia.org/wiki/Trans_woman)
|
||||
> [![Transmasc](/badges/transmasc.gif)](https://en.wikipedia.org/wiki/Trans_man)
|
||||
|
||||
### Miscellaneous
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
title: LGBTQ+ Resources
|
||||
description: A list of resources for LGBTQ+ individuals
|
||||
date: 2025-01-02
|
||||
tags: ['lgbtq', 'resources']
|
||||
tags: ['lgbtq+', 'resources']
|
||||
---
|
||||
|
||||
# LGBTQ+ Resources
|
|
@ -8,12 +8,11 @@ next: old3ds_romfs.md
|
|||
|
||||
# Hello, World!
|
||||
|
||||
::alert{type="warning"}
|
||||
This guide of mine is old - Like 3 years old at the time of posting. I prefer to keep it up, but I don't think it very highly - It should still work though.
|
||||
I might make a new one in the future.
|
||||
I'm doing some alterations at least to make it more readable.
|
||||
It doesn't teach why things are done very well is my primary issue with it.
|
||||
::
|
||||
> [!warning]
|
||||
> This guide of mine is old - Like 3 years old at the time of posting. I prefer to keep it up, but I don't think it very highly - It should still work though.
|
||||
> I might make a new one in the future.
|
||||
> I'm doing some alterations at least to make it more readable.
|
||||
> It doesn't teach why things are done very well is my primary issue with it.
|
||||
|
||||
'Hello, World!' is a very simple program used for checking a program's build system, and showing its basic syntax.
|
||||
We should do both before going forward. You should have your project set up for this.
|
|
@ -9,12 +9,11 @@ next: old3ds_touchscreen.md
|
|||
|
||||
# Accessing ROM files with RomFS
|
||||
|
||||
::alert{type="warning"}
|
||||
This guide of mine is old - Like 3 years old at the time of posting. I prefer to keep it up, but I don't think it very highly - It should still work though.
|
||||
I might make a new one in the future.
|
||||
I'm doing some alterations at least to make it more readable.
|
||||
It doesn't teach why things are done very well is my primary issue with it.
|
||||
::
|
||||
> [!warning]
|
||||
> This guide of mine is old - Like 3 years old at the time of posting. I prefer to keep it up, but I don't think it very highly - It should still work though.
|
||||
> I might make a new one in the future.
|
||||
> I'm doing some alterations at least to make it more readable.
|
||||
> It doesn't teach why things are done very well is my primary issue with it.
|
||||
|
||||
RomFS allows us to access files stored on the ROM file, cartridge, or application.
|
||||
|
|
@ -8,12 +8,11 @@ previous: old3ds_romfs.md
|
|||
|
||||
# Touchscreen Input
|
||||
|
||||
::alert{type="warning"}
|
||||
This guide of mine is old - Like 3 years old at the time of posting. I prefer to keep it up, but I don't think it very highly - It should still work though.
|
||||
I might make a new one in the future.
|
||||
I'm doing some alterations at least to make it more readable.
|
||||
It doesn't teach why things are done very well is my primary issue with it.
|
||||
::
|
||||
> [!warning]
|
||||
> This guide of mine is old - Like 3 years old at the time of posting. I prefer to keep it up, but I don't think it very highly - It should still work though.
|
||||
> I might make a new one in the future.
|
||||
> I'm doing some alterations at least to make it more readable.
|
||||
> It doesn't teach why things are done very well is my primary issue with it.
|
||||
|
||||
Here we will find the position of a touch on the touchscreen.
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
---
|
||||
title: Badges!
|
||||
description: Some 88x31 badges for various things
|
||||
date: 2024-12-21
|
||||
tags: ['badges', 'retro', 'web']
|
||||
---
|
||||
<div class="text-center">
|
||||
|
||||
# Badges!
|
||||
|
||||
## This site!
|
||||
|
||||
<div class="flex flex-wrap justify-center max-w-96">
|
||||
<img class="m-1" src="/images/badges/felidae.png" />
|
||||
</div>
|
||||
|
||||
## Cool Entities
|
||||
|
||||
<div class="flex flex-wrap justify-center max-w-96">
|
||||
<!-- Kate's site -->
|
||||
<a href="https://gayest.dev" class="m-1"><img
|
||||
src="https://gayest.dev/assets/kate.png" /></a>
|
||||
<!-- Isabel's site -->
|
||||
<a href="https://isabelroses.com" class="m-1"><img
|
||||
src="https://isabelroses.com/static/badges/me.gif" /></a>
|
||||
<!-- Chloe's site (catwithaclari.net)-->
|
||||
<a href="https://blog.catwithaclari.net/" class="m-1"><img
|
||||
src="https://gayest.dev/assets/chloecat.png" /></a>
|
||||
<!-- Sugar's site -->
|
||||
<a href="https://sugar.pages.gay/" class="m-1"><img
|
||||
src="https://sugar.pages.gay/assets/button.gif" /></a>
|
||||
<!-- Thermia's site -->
|
||||
<!-- Thermia is a girlthing which is active on Fedi. -->
|
||||
<a href="https://girlthi.ng/~thermia/"><img
|
||||
src="https://girlthi.ng/~thermia/img/88x31/thermia.gif"
|
||||
alt="thermia's button"></a>
|
||||
</div>
|
||||
|
||||
## Findings
|
||||
|
||||
<div class="flex flex-wrap justify-center max-w-96">
|
||||
<img src="https://isabelroses.com/static/badges/badges/transnow.png" class="m-1" />
|
||||
<img src="https://isabelroses.com/static/badges/badges/queercoded.webp" class="m-1" />
|
||||
<img src="https://isabelroses.com/static/badges/badges/nix.gif" class="m-1" />
|
||||
<img src="https://isabelroses.com/static/badges/badges/fedi.gif" class="m-1" />
|
||||
</div>
|
||||
|
||||
</div>
|
|
@ -1,18 +0,0 @@
|
|||
---
|
||||
title: Godot Resources
|
||||
description: A bunch of stuff for Godot
|
||||
date: 2025-01-22
|
||||
tags: ['godot', 'curated']
|
||||
---
|
||||
|
||||
# Godot Resources
|
||||
|
||||
<style>
|
||||
.md-contents ul + blockquote:not(.md-override), .md-contents ol + blockquote:not(.md-override) {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
</style>
|
||||
|
||||
::alert{type="note"}
|
||||
If you find that this list is lacking or inaccurate, please open a GitHub issue or pull request.
|
||||
::
|
5
deno.lock
generated
|
@ -15,7 +15,6 @@
|
|||
"npm:@tsparticles/slim@^3.7.1": "3.7.1",
|
||||
"npm:@tsparticles/vue3@^3.0.1": "3.0.1",
|
||||
"npm:@types/markdown-it@^14.1.2": "14.1.2",
|
||||
"npm:animejs@^3.2.2": "3.2.2",
|
||||
"npm:autoprefixer@^10.4.20": "10.4.20_postcss@8.4.49",
|
||||
"npm:css-loader@^7.1.2": "7.1.2_postcss@8.4.49",
|
||||
"npm:date-fns@4.1.0": "4.1.0",
|
||||
|
@ -2226,9 +2225,6 @@
|
|||
"require-from-string"
|
||||
]
|
||||
},
|
||||
"animejs@3.2.2": {
|
||||
"integrity": "sha512-Ao95qWLpDPXXM+WrmwcKbl6uNlC5tjnowlaRYtuVDHHoygjtIPfDUoK9NthrlZsQSKjZXlmji2TrBUAVbiH0LQ=="
|
||||
},
|
||||
"ansi-colors@4.1.3": {
|
||||
"integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="
|
||||
},
|
||||
|
@ -7685,7 +7681,6 @@
|
|||
"npm:@tsparticles/slim@^3.7.1",
|
||||
"npm:@tsparticles/vue3@^3.0.1",
|
||||
"npm:@types/markdown-it@^14.1.2",
|
||||
"npm:animejs@^3.2.2",
|
||||
"npm:autoprefixer@^10.4.20",
|
||||
"npm:css-loader@^7.1.2",
|
||||
"npm:date-fns@4.1.0",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import * as pages from '~/utils/page_updater/update_pagelist';
|
||||
|
||||
const blog_list: pages.PageList = (await import('./assets/meta/post_list.json')) as pages.PageList;
|
||||
const blog_list: pages.PageList = (await import('./assets/meta/blog_list.json')) as pages.PageList;
|
||||
|
||||
// nitro only needs string array
|
||||
const blog_nitro_routes: any = [];
|
||||
|
@ -22,11 +22,6 @@ export default defineNuxtConfig({
|
|||
autoprefixer: {},
|
||||
},
|
||||
},
|
||||
routeRules: {
|
||||
'/article/:category:/:id': {
|
||||
redirect: '/article/:category:/:id/index.html'
|
||||
}
|
||||
},
|
||||
app: {
|
||||
pageTransition: {
|
||||
name: 'page',
|
||||
|
@ -43,8 +38,7 @@ export default defineNuxtConfig({
|
|||
},
|
||||
nitro: {
|
||||
prerender: {
|
||||
routes: blog_nitro_routes,
|
||||
autoSubfolderIndex: true
|
||||
routes: blog_nitro_routes
|
||||
}
|
||||
},
|
||||
particles: {
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
"@popperjs/core": "^2.11.8",
|
||||
"@tsparticles/slim": "^3.7.1",
|
||||
"@types/markdown-it": "^14.1.2",
|
||||
"animejs": "^3.2.2",
|
||||
"css-loader": "^7.1.2",
|
||||
"markdown-it-checkbox": "^1.1.0",
|
||||
"mathpix-markdown-it": "^2.0.9",
|
||||
|
|
|
@ -6,7 +6,6 @@ import PostCard from '~/components/PostCard.vue';
|
|||
import * as pages from '~/utils/page_updater/update_pagelist';
|
||||
import type { PageInfo, PageInfoMetdata } from '~/utils/page_updater/pages';
|
||||
import type { ParsedContent } from '@nuxt/content';
|
||||
import siteConfig from '~/assets/config';
|
||||
|
||||
let route = useRoute()
|
||||
console.log(route)
|
||||
|
@ -31,22 +30,15 @@ const background: Ref<string> = ref("")
|
|||
const next: Ref<string> = ref("")
|
||||
const previous: Ref<string> = ref("")
|
||||
|
||||
function tagsToString(tags: String[]): string {
|
||||
var tagString = '';
|
||||
for (let i = 0; i < tags.length; i++) {
|
||||
tagString += tags[i];
|
||||
watch(markdown , (newVal) => {
|
||||
if (newVal) {
|
||||
title.value = newVal.title ? newVal.title : ""
|
||||
description.value = newVal.description ? newVal.description : ""
|
||||
date.value = newVal.date ? new Date(newVal.date).toLocaleDateString() : ""
|
||||
tags.value = newVal.tags ? newVal.tags : []
|
||||
background.value = newVal.background ? newVal.background : ""
|
||||
}
|
||||
|
||||
return tagString;
|
||||
}
|
||||
|
||||
function updateMetadata(data: ParsedContent) {
|
||||
title.value = data.title ? data.title : ""
|
||||
description.value = data.description ? data.description : ""
|
||||
date.value = data.date ? new Date(data.date).toLocaleDateString() : ""
|
||||
tags.value = data.tags ? data.tags : []
|
||||
background.value = data.background ? data.background : ""
|
||||
}
|
||||
})
|
||||
|
||||
// watch the params of the route to fetch the data again
|
||||
watch(route, async () => {
|
||||
|
@ -66,7 +58,7 @@ watch(route, async () => {
|
|||
});
|
||||
|
||||
// Fetch the article contents from the URL
|
||||
async function fetchArticle(url: string): Promise<any> {
|
||||
async function fetchArticle(url: string) {
|
||||
if (!url) {
|
||||
return
|
||||
}
|
||||
|
@ -77,17 +69,13 @@ async function fetchArticle(url: string): Promise<any> {
|
|||
console.log(data)
|
||||
|
||||
markdown.value = data.value;
|
||||
updateMetadata(markdown.value)
|
||||
|
||||
return data.value
|
||||
}
|
||||
|
||||
function resetReadingPosition() {
|
||||
window.scrollTo(0, 0)
|
||||
}
|
||||
|
||||
const data = await fetchArticle(url.value)
|
||||
updateMetadata(data)
|
||||
fetchArticle(url.value)
|
||||
|
||||
console.log("Prefetching article")
|
||||
onMounted(async () => {
|
||||
|
@ -97,55 +85,13 @@ onMounted(async () => {
|
|||
const temp_url = route.query.post as string
|
||||
await fetchArticle(temp_url);
|
||||
|
||||
const fullTitle = data.title + " | " + siteConfig.siteTitle;
|
||||
|
||||
useHead({
|
||||
title: fullTitle,
|
||||
meta: [
|
||||
{ name: 'description', content: description },
|
||||
{ name: 'keywords', content: tagsToString(tags.value) },
|
||||
{ name: 'author', content: siteConfig.siteAuthor },
|
||||
{ name: 'date', content: date },
|
||||
{ name: 'theme-color', content: siteConfig.siteColor },
|
||||
{ name: 'twitter:card', content: 'summary' },
|
||||
{ name: 'twitter:title', content: fullTitle },
|
||||
{ name: 'twitter:description', content: description },
|
||||
{ name: 'twitter:image', content: background },
|
||||
{ name: 'twitter:image:alt', content: fullTitle },
|
||||
{ name: 'og:title', content: fullTitle },
|
||||
{ name: 'og:description', content: description },
|
||||
{ name: 'og:type', content: 'website' },
|
||||
{ name: 'og:url', content: siteConfig.siteUrl },
|
||||
{ name: 'og:site_name', content: siteConfig.siteTitle },
|
||||
{ name: 'og:locale', content: 'en_US' },
|
||||
{ name: 'og:locale:alternate', content: 'en_GB' },
|
||||
{ name: 'og:image', content: background },
|
||||
{ name: 'og:image:alt', content: fullTitle }
|
||||
]
|
||||
})
|
||||
|
||||
useSeoMeta({
|
||||
title: fullTitle,
|
||||
ogTitle: fullTitle,
|
||||
description: description,
|
||||
ogDescription: description,
|
||||
keywords: tagsToString(tags.value),
|
||||
ogImage: background,
|
||||
ogUrl: siteConfig.siteUrl,
|
||||
ogType: 'website',
|
||||
ogSiteName: siteConfig.siteTitle,
|
||||
ogLocale: 'en_US',
|
||||
ogLocaleAlternate: 'en_GB',
|
||||
themeColor: siteConfig.siteColor,
|
||||
twitterCard: 'summary',
|
||||
twitterTitle: fullTitle,
|
||||
twitterDescription: description,
|
||||
twitterImage: background
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="relative z-50 flex w-full justify-center text-white">
|
||||
<!-- Metadata -->
|
||||
<MetaSet :title="title" :description="description" :date="date"
|
||||
:background="background" tags="tags" />
|
||||
<!-- Article Viewer -->
|
||||
<div class="mt-8 flex-col text-center">
|
||||
<Transition name="list">
|
||||
|
|
|
@ -9,18 +9,16 @@ import type { ParsedContent } from '@nuxt/content';
|
|||
|
||||
// Automatically maintained is a blog_list.json in assets/meta. This file contains a list of all blog posts and their metadata.
|
||||
// This file is generated by a script in the utils/pageupdater folder.
|
||||
const article_list: pages.PageList = await import('~/assets/meta/post_list.json') as pages.PageList;
|
||||
const article_list: pages.PageList = await import('~/assets/meta/blog_list.json') as pages.PageList;
|
||||
|
||||
let route = useRoute()
|
||||
console.log(route)
|
||||
|
||||
const loading: Ref<boolean> = ref(false)
|
||||
const view: Ref<string> = ref('list') // list, category
|
||||
|
||||
const listCategoryKeys: Ref<string[]> = ref([])
|
||||
|
||||
const tagList: Ref<string[]> = ref([])
|
||||
const categoryFilter: Ref<string[]> = ref([])
|
||||
const tagFilter: Ref<string[]> = ref([])
|
||||
tagFilter.value = []
|
||||
|
||||
|
@ -51,28 +49,18 @@ onMounted(() => {
|
|||
<template>
|
||||
<div class="relative z-50 flex w-full justify-center text-white">
|
||||
<!-- Metadata -->
|
||||
<MetaSet title="Articles" description="Ramblings."
|
||||
background="https://avatars.githubusercontent.com/u/94077364?v=4" tags="blog, personal, author" />
|
||||
|
||||
<MetaSet title="Articles" description="Ramblings." background="https://avatars.githubusercontent.com/u/94077364?v=4"
|
||||
tags="blog, personal, author" />
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="mt-8 flex-col text-center">
|
||||
<Transition name="list">
|
||||
<div>
|
||||
<!-- Article List -->
|
||||
<!-- Article List -->
|
||||
<h1>Articles</h1>
|
||||
|
||||
<!-- View mode switcher -->
|
||||
<div class="flex justify-center">
|
||||
<button @click="view = 'list'"
|
||||
class="m-1 bg-black border-purple-400 border text-white p-1 rounded-md"
|
||||
:class="view == 'list' ? 'border-2 border-white bg-slate-700' : 'border-2 bg-black text-white'">List</button>
|
||||
<button @click="view = 'category'"
|
||||
class="m-1 bg-black border-purple-400 border text-white p-1 rounded-md"
|
||||
:class="view == 'category' ? 'border-2 border-white bg-slate-700' : 'border-2 bg-black text-white'">Category</button>
|
||||
</div>
|
||||
<!-- Tag selection -->
|
||||
<div class="flex justify-center" v-if="view == 'list'">
|
||||
<div class="flex flex-wrap justify-center m-5 max-w-96">
|
||||
|
||||
<div class="flex flex-wrap justify-center m-5 max-w-96">
|
||||
<div v-for="tag in tagList" :key="tag" class="m-1">
|
||||
<button
|
||||
@click="tagFilter.includes(tag) ? tagFilter.splice(tagFilter.indexOf(tag), 1) : tagFilter.push(tag)"
|
||||
|
@ -82,55 +70,22 @@ onMounted(() => {
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Category selection -->
|
||||
<div class="flex justify-center" v-if="view == 'category'">
|
||||
<div class="flex flex-wrap justify-center m-5 max-w-96">
|
||||
<div v-for="category in Object.keys(article_list.categories)" :key="category"
|
||||
class="m-1">
|
||||
<button
|
||||
@click="categoryFilter.includes(category) ? categoryFilter.splice(categoryFilter.indexOf(category), 1) : categoryFilter.push(category)"
|
||||
class="text-xs bg-black border-purple-400 border text-white p-1 rounded-md"
|
||||
:class="categoryFilter.includes(category) ? 'border-2 border-white bg-slate-700' : 'border-2 bg-black text-white'">{{
|
||||
category }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Category view -->
|
||||
<div v-if="view == 'category'">
|
||||
<div v-for="categoryKey in Object.keys(article_list.categories).filter((category) => categoryFilter.length == 0 ? true : categoryFilter.includes(category))" :key="categoryKey">
|
||||
<div
|
||||
class="lg:w-[48rem] md:w-max flex flex-col bg-secondary bg-opacity-50 rounded-md shadow-md shadow-secondary p-2 m-2 mb-8">
|
||||
<div>
|
||||
<div v-for="categoryKey in Object.keys(article_list.categories)" :key="categoryKey">
|
||||
<div class="lg:w-[48rem] md:w-max flex flex-col bg-secondary bg-opacity-50 rounded-md shadow-md shadow-secondary p-2 m-2">
|
||||
<h2>{{ categoryKey }}</h2>
|
||||
<div
|
||||
v-for="post in article_list.categories[categoryKey].posts">
|
||||
<PostCard class="lg:w-[48rem]" :url="post.url" :key="post.id"
|
||||
:tagFilter="tagFilter" />
|
||||
v-for="post in tagFilter.length == 0 ? article_list.categories[categoryKey].posts : article_list.categories[categoryKey].posts.filter((post) => post.metadata.tags ? post.metadata.tags.some((tag) => tagFilter.includes(tag)) : true)">
|
||||
<PostCard class="lg:w-[48rem]" :url="post.url" :key="post.id" :tagFilter="tagFilter" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- List view -->
|
||||
<!-- Instead of grouping by category, just throw cards by order of appearance -->
|
||||
<div v-else-if="view == 'list'">
|
||||
<div
|
||||
v-for="post in tagFilter.length == 0 ?
|
||||
Object.values(article_list.categories)
|
||||
.map((category) => category.posts)
|
||||
.flat()
|
||||
.sort((a, b) => new Date(b.metadata.date ?? 0).getTime() - new Date(a.metadata.date ?? 0).getTime())
|
||||
: Object.values(article_list.categories)
|
||||
.map((category) => category.posts)
|
||||
.flat()
|
||||
.filter((post) => post.metadata.tags ? post.metadata.tags.some((tag) => tagFilter.includes(tag)) : true)
|
||||
.sort((a, b) => new Date(b.metadata.date ?? 0).getTime() - new Date(a.metadata.date ?? 0).getTime())
|
||||
">
|
||||
<PostCard class="lg:w-[48rem]" :url="post.url" :key="post.id" :tagFilter="tagFilter" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Transition>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
<style scoped>
|
||||
</style>
|
|
@ -6,58 +6,21 @@ import Card from '~/components/Card.vue';
|
|||
const aboutMe = ref('');
|
||||
const test = ref('');
|
||||
|
||||
const { data } = await useAsyncData('about_me', () => queryContent('/about_me').findOne())
|
||||
const { data } = await useAsyncData('about_me', () => queryContent('/about_me').findOne())
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="relative flex w-full justify-center text-white">
|
||||
<!-- Metadata -->
|
||||
<MetaSet title="Home" description="TheFelidae's personal site"
|
||||
background="https://avatars.githubusercontent.com/u/94077364?v=4" tags="home, personal, author" />
|
||||
<MetaSet title="Home" description="TheFelidae's personal site" background="https://avatars.githubusercontent.com/u/94077364?v=4"
|
||||
tags="home, personal, author" />
|
||||
<div class="mt-8 flex-col text-center">
|
||||
<div class="flex justify-center">
|
||||
<div id="PFP" class="shadow-md rounded-full shadow-highlight">
|
||||
<img class="transition-all w-40 h-40 md:w-56 md:h-56 rounded-full"
|
||||
src="https://avatars.githubusercontent.com/u/94077364?v=4" alt="User PFP" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="flex justify-center p-4">
|
||||
<div class="card flex lg:max-w-96 justify-end bg-surface-1 rounded-full border-border border">
|
||||
<NuxtLink href="https://github.com/TheFelidae">
|
||||
<button title="GitHub Profile"
|
||||
class="m-2 p-2 bg-surface-2/[.5] border-2 border-border rounded-full shadow-sm hover:scale-110 hover:shadow-border-accent hover:border-accent transition-all duration-200 ease-in-out">
|
||||
<img class="invert w-5"
|
||||
src="https://upload.wikimedia.org/wikipedia/commons/thumb/c/c2/GitHub_Invertocat_Logo.svg/330px-GitHub_Invertocat_Logo.svg.png"
|
||||
width="24" height="24" alt="GitHub" />
|
||||
</button>
|
||||
</NuxtLink>
|
||||
<NuxtLink href="https://social.smgames.club/@mrrp">
|
||||
<button title="Mastodon Profile"
|
||||
class="m-2 p-2 bg-surface-2/[.5] border-2 border-border rounded-full shadow-sm hover:scale-110 hover:shadow-border-accent hover:border-accent transition-all duration-200 ease-in-out">
|
||||
<img class="w-5" src="/images/mastodon.svg" width="24" height="24" alt="Sharkey" />
|
||||
</button>
|
||||
</NuxtLink>
|
||||
<a href="/rss.xml">
|
||||
<button title="RSS Feed"
|
||||
class="m-2 p-2 bg-surface-2/[.5] border-2 border-border rounded-full shadow-sm hover:scale-110 hover:shadow-border-accent hover:border-accent transition-all duration-200 ease-in-out">
|
||||
<img class="w-5" src="/images/rss.png" width="24" height="24" alt="RSS" />
|
||||
</button>
|
||||
</a>
|
||||
<NuxtLink href="https://git.smgames.club/SevenOfAces">
|
||||
<button title="Forgejo"
|
||||
class="m-2 p-2 bg-surface-2/[.5] border-2 border-border rounded-full shadow-sm hover:scale-110 hover:shadow-border-accent hover:border-accent transition-all duration-200 ease-in-out">
|
||||
<img class="w-5" src="/images/forgejo.png" width="24" height="24" alt="RSS" />
|
||||
</button>
|
||||
</NuxtLink>
|
||||
<NuxtLink href="mailto:mrrpnya@proton.me">
|
||||
<button title="Send an Email"
|
||||
class="m-2 p-2 bg-surface-2/[.5] border-2 border-border rounded-full shadow-sm hover:scale-110 hover:shadow-border-accent hover:border-accent transition-all duration-200 ease-in-out">
|
||||
<img class="w-5" src="/images/envelope.png" width="24" height="24" alt="RSS" />
|
||||
</button>
|
||||
</NuxtLink>
|
||||
</div>
|
||||
</div>
|
||||
<Card class="max-w-4xl mt-4 max-md:w-screen">
|
||||
<Markdown :input="aboutMe" type="markdown"></Markdown>
|
||||
|
|
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 577 B |
Before Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 14 KiB |
|
@ -1,10 +0,0 @@
|
|||
<svg width="75" height="79" viewBox="0 0 75 79" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M73.8393 17.4898C72.6973 9.00165 65.2994 2.31235 56.5296 1.01614C55.05 0.797115 49.4441 0 36.4582 0H36.3612C23.3717 0 20.585 0.797115 19.1054 1.01614C10.5798 2.27644 2.79399 8.28712 0.904997 16.8758C-0.00358524 21.1056 -0.100549 25.7949 0.0682394 30.0965C0.308852 36.2651 0.355538 42.423 0.91577 48.5665C1.30307 52.6474 1.97872 56.6957 2.93763 60.6812C4.73325 68.042 12.0019 74.1676 19.1233 76.6666C26.7478 79.2728 34.9474 79.7055 42.8039 77.9162C43.6682 77.7151 44.5217 77.4817 45.3645 77.216C47.275 76.6092 49.5123 75.9305 51.1571 74.7385C51.1797 74.7217 51.1982 74.7001 51.2112 74.6753C51.2243 74.6504 51.2316 74.6229 51.2325 74.5948V68.6416C51.2321 68.6154 51.2259 68.5896 51.2142 68.5661C51.2025 68.5426 51.1858 68.522 51.1651 68.5058C51.1444 68.4896 51.1204 68.4783 51.0948 68.4726C51.0692 68.4669 51.0426 68.467 51.0171 68.4729C45.9835 69.675 40.8254 70.2777 35.6502 70.2682C26.7439 70.2682 24.3486 66.042 23.6626 64.2826C23.1113 62.762 22.7612 61.1759 22.6212 59.5646C22.6197 59.5375 22.6247 59.5105 22.6357 59.4857C22.6466 59.4609 22.6633 59.4391 22.6843 59.422C22.7053 59.4048 22.73 59.3929 22.7565 59.3871C22.783 59.3813 22.8104 59.3818 22.8367 59.3886C27.7864 60.5826 32.8604 61.1853 37.9522 61.1839C39.1768 61.1839 40.3978 61.1839 41.6224 61.1516C46.7435 61.008 52.1411 60.7459 57.1796 59.7621C57.3053 59.7369 57.431 59.7154 57.5387 59.6831C65.4861 58.157 73.0493 53.3672 73.8178 41.2381C73.8465 40.7606 73.9184 36.2364 73.9184 35.7409C73.9219 34.0569 74.4606 23.7949 73.8393 17.4898Z" fill="url(#paint0_linear_549_34)"/>
|
||||
<path d="M61.2484 27.0263V48.114H52.8916V27.6475C52.8916 23.3388 51.096 21.1413 47.4437 21.1413C43.4287 21.1413 41.4177 23.7409 41.4177 28.8755V40.0782H33.1111V28.8755C33.1111 23.7409 31.0965 21.1413 27.0815 21.1413C23.4507 21.1413 21.6371 23.3388 21.6371 27.6475V48.114H13.2839V27.0263C13.2839 22.7176 14.384 19.2946 16.5843 16.7572C18.8539 14.2258 21.8311 12.926 25.5264 12.926C29.8036 12.926 33.0357 14.5705 35.1905 17.8559L37.2698 21.346L39.3527 17.8559C41.5074 14.5705 44.7395 12.926 49.0095 12.926C52.7013 12.926 55.6784 14.2258 57.9553 16.7572C60.1531 19.2922 61.2508 22.7152 61.2484 27.0263Z" fill="white"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_549_34" x1="37.0692" y1="0" x2="37.0692" y2="79" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#6364FF"/>
|
||||
<stop offset="1" stop-color="#563ACC"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 144 KiB |
Before Width: | Height: | Size: 37 KiB |
|
@ -28,13 +28,9 @@ export default {
|
|||
'sm': '0px 0px 2px 2px'
|
||||
},
|
||||
colors: {
|
||||
"surface-1": "#222222",
|
||||
"surface-2": "#444444",
|
||||
"border": "#441196",
|
||||
"border-accent": "#ff00f2",
|
||||
"primary": "#441196",
|
||||
"secondary": "#4d0099",
|
||||
"highlight": "#ff00f2",
|
||||
"highlight": "#b805ff",
|
||||
"success": "#10B981",
|
||||
"danger": "#EF4444",
|
||||
"warning": "#F59E0B",
|
||||
|
|
|
@ -56,5 +56,5 @@ post_list = generate_page_list(pages.get_pages_info("", "assets/blog"));
|
|||
print(post_list)
|
||||
|
||||
# Output to assets/blog_list.json (overwriting)
|
||||
with open("assets/meta/post_list.json", "w") as f:
|
||||
with open("assets/blog_list.json", "w") as f:
|
||||
f.write(post_list)
|
||||
|
|
|
@ -73,23 +73,18 @@ export function getPagesInfo(searchDirectory: string, pageLocation: PageLocation
|
|||
console.log(files);
|
||||
|
||||
files.forEach((file) => {
|
||||
var fullPath = path.join(currentDirectory, file);
|
||||
var localPath = fullPath.replace(pageLocation.root, pageLocation.map);
|
||||
const fullPath = path.join(currentDirectory, file);
|
||||
const localPath = fullPath.replace(pageLocation.root, pageLocation.map);
|
||||
console.log(fullPath);
|
||||
console.log(localPath);
|
||||
if (fs.lstatSync(fullPath).isDirectory()) {
|
||||
Object.assign(pageInfo, getPagesInfo(path.join(searchDirectory, file), pageLocation));
|
||||
} else if (file.endsWith('.md')) {
|
||||
|
||||
const metadata = getMetadata(fullPath);
|
||||
const sha256Hash = getSha256Hash(fullPath);
|
||||
const charCount = getCharCount(fullPath);
|
||||
const wordCount = getWordCount(fullPath);
|
||||
|
||||
// Remove the .md extension
|
||||
localPath = localPath.replace('.md', '');
|
||||
fullPath = fullPath.replace('.md', '');
|
||||
|
||||
pageInfo[fullPath] = {
|
||||
local_path: localPath,
|
||||
absolute_path: fullPath,
|
||||
|
|
|
@ -53,25 +53,11 @@ function generatePageCategory(pagesInfo: Record<string, any>): PageCategory {
|
|||
|
||||
const postDirectories: pages.PageLocation[] = [
|
||||
{
|
||||
title: "Site",
|
||||
description: "Articles to test site functionality",
|
||||
tags: ["site"],
|
||||
map: "site",
|
||||
root: "content/site"
|
||||
},
|
||||
{
|
||||
title: "Collections",
|
||||
description: "Articles that are collections of information: Lists, Awesome lists, etc.",
|
||||
tags: ["collection"],
|
||||
map: "collections",
|
||||
root: "content/collections"
|
||||
},
|
||||
{
|
||||
title: "Guides",
|
||||
description: "Guides and tutorials",
|
||||
tags: ["guide"],
|
||||
map: "guides",
|
||||
root: "content/guides"
|
||||
title: "Blog",
|
||||
description: "A collection of blog posts",
|
||||
tags: ["blog"],
|
||||
map: "blog",
|
||||
root: "content/blog"
|
||||
}
|
||||
]
|
||||
|
||||
|
@ -83,9 +69,6 @@ var postList: PageList = {
|
|||
for (const postDirectory of postDirectories) {
|
||||
const pagesInfo = pages.getPagesInfo("", postDirectory);
|
||||
postList.categories[postDirectory.title] = generatePageCategory(pagesInfo);
|
||||
postList.categories[postDirectory.title].title = postDirectory.title;
|
||||
postList.categories[postDirectory.title].description = postDirectory.description;
|
||||
postList.categories[postDirectory.title].tags = postDirectory.tags;
|
||||
}
|
||||
|
||||
// Sort the posts by date
|
||||
|
@ -104,4 +87,4 @@ for (const category of Object.values(postList.categories)) {
|
|||
console.log(JSON.stringify(postList, null, 2));
|
||||
|
||||
// Output to assets/blog_list.json (overwriting)
|
||||
fs.writeFileSync("assets/meta/post_list.json", JSON.stringify(postList, null, 2));
|
||||
fs.writeFileSync("assets/meta/blog_list.json", JSON.stringify(postList, null, 2));
|
||||
|
|