Merge branch 'vento-conversion'
This commit is contained in:
commit
8a773800d7
@ -6,6 +6,7 @@ import pluginSyntaxHighlight from "@11ty/eleventy-plugin-syntaxhighlight";
|
||||
import pluginEmbedEverything from "eleventy-plugin-embed-everything";
|
||||
import pluginWordcount from "eleventy-plugin-wordcount-extended";
|
||||
import pluginTOC from "@uncenter/eleventy-plugin-toc";
|
||||
import { VentoPlugin } from 'eleventy-plugin-vento';
|
||||
|
||||
// Custom Configurations
|
||||
import markdownItConfig from "./src/_config/markdown-it.js";
|
||||
@ -48,9 +49,15 @@ export default function(eleventyConfig) {
|
||||
eleventyConfig.addBundle("css");
|
||||
eleventyConfig.addBundle("js", { toFileDirectory: "assets/js" });
|
||||
|
||||
// ----- Vento plugin for Eleventy
|
||||
// Must be loaded after plugins that modify filters
|
||||
eleventyConfig.addPlugin(VentoPlugin, {
|
||||
autotrim: true,
|
||||
});
|
||||
|
||||
return {
|
||||
markdownTemplateEngine: "njk",
|
||||
htmlTemplateEngine: "njk",
|
||||
markdownTemplateEngine: "vto",
|
||||
htmlTemplateEngine: "vto",
|
||||
dir: {
|
||||
input: "src"
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
"@types/bun": "^1.2.11"
|
||||
},
|
||||
"dependencies": {
|
||||
"@11ty/eleventy": "^3.0.0",
|
||||
"@11ty/eleventy": "^3.1.0-beta.1",
|
||||
"@11ty/eleventy-fetch": "^5.0.2",
|
||||
"@11ty/eleventy-navigation": "^1.0.4",
|
||||
"@11ty/eleventy-plugin-rss": "^2.0.3",
|
||||
@ -23,6 +23,7 @@
|
||||
"@uncenter/eleventy-plugin-toc": "^1.0.3",
|
||||
"@zachleat/details-utils": "^2.0.2",
|
||||
"eleventy-plugin-embed-everything": "^1.21.0",
|
||||
"eleventy-plugin-vento": "^4.2.1",
|
||||
"eleventy-plugin-wordcount-extended": "^0.2.1",
|
||||
"install": "^0.13.0",
|
||||
"markdown-it-anchor": "^9.2.0",
|
||||
|
@ -1,7 +1,9 @@
|
||||
---
|
||||
layout: global/root
|
||||
layout: layouts/root
|
||||
title: "404: Page Not Found"
|
||||
h1: "404: Page Not Found"
|
||||
desc: Page not found.
|
||||
permalink: 404.html
|
||||
eleventyExcludeFromCollections: true
|
||||
---
|
||||
|
@ -25,8 +25,11 @@ export default function(eleventyConfig) {
|
||||
return array.slice(0, maximum);
|
||||
});
|
||||
|
||||
// Filter: Collection item count
|
||||
eleventyConfig.addFilter("itemCount", (array) => array.length );
|
||||
|
||||
// Filter: Thousands separator
|
||||
eleventyConfig.addFilter("thousands", function(num) {
|
||||
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,19 +0,0 @@
|
||||
{%- css %}{% include "src/assets/css/asummersend.css" %}{%- endcss %}
|
||||
|
||||
{% extends "global/baselayout.html" %}
|
||||
|
||||
{% block metaTitle %}
|
||||
<meta property="og:title" content="{{ title + ' | ' if title }}A Summer’s End — Hong Kong 1986 Shrine">
|
||||
{% endblock %}
|
||||
|
||||
{% block pageTitle %}
|
||||
{{ title + " | " if title }}A Summer’s End — Hong Kong 1986 Shrine | {{ sitemeta.siteName | safe }}
|
||||
{% endblock %}
|
||||
|
||||
{% block favicon %}
|
||||
<link rel="icon" type="image/x-icon" href="/assets/shrines/asummersend/images/favicon.ico">
|
||||
{% endblock %}
|
||||
|
||||
{% block hero %}{% include "asummersend/hero.html" %}{% endblock %}
|
||||
{% block navbar %}{% include "asummersend/navbar.html" %}{% endblock %}
|
||||
{% block footer %}{% include "asummersend/footer.html" %}{% endblock %}
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
layout: asummersend/base
|
||||
---
|
||||
|
||||
{% extends "global/content.html" %}
|
||||
|
||||
{% block shrineInfo %}{% include "asummersend/shrineinfo.html" %}{% endblock %}
|
@ -1,6 +0,0 @@
|
||||
{% extends "global/footer.html" %}
|
||||
|
||||
{% block footerContent %}
|
||||
<p>Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 16 February 2023</p>
|
||||
{% endblock %}
|
||||
|
@ -1,46 +0,0 @@
|
||||
{% extends "global/hero.html" %}
|
||||
|
||||
{% block heroImg %}
|
||||
<picture>
|
||||
<source srcset="/assets/shrines/asummersend/images/asummersend-header-320.avif" media="(orientation: landscape)" />
|
||||
<img src="/assets/shrines/asummersend/images/asummersend-header.avif" alt="Banner of A Summer’s End — Hong Kong 1986 Shrine" />
|
||||
</picture>
|
||||
{% endblock %}
|
||||
|
||||
{% block eventScript %}
|
||||
const todayEvent = getTodayEvent();
|
||||
|
||||
if (todayEvent) {
|
||||
heroTopBarEl.classList.remove('hidden');
|
||||
heroTopBarEl.innerHTML = todayEvent;
|
||||
}
|
||||
|
||||
function getTodayEvent() {
|
||||
const date = new Date();
|
||||
const month = date.getMonth() + 1;
|
||||
const day = date.getDate();
|
||||
const year = date.getFullYear();
|
||||
|
||||
const aseReleaseDate = new Date("2020-04-23").getFullYear();
|
||||
const aseAnniversary = year - aseReleaseDate;
|
||||
|
||||
if (month === 2 && day === 16)
|
||||
return `
|
||||
Today is Michelle Cheung's birthday. Happy Birthday Michelle!
|
||||
`;
|
||||
else if (month === 4 && day === 23)
|
||||
return `
|
||||
Today is the ${aseAnniversary}-year anniversary of the release of {% cite "A Summer’s End — Hong Kong 1986" %}!
|
||||
`;
|
||||
else if (month === 8 && day === 9)
|
||||
return `
|
||||
Today is Cecelia Cortes' birthday. Happy Birthday Cecelia!
|
||||
`;
|
||||
else if (month === 12 && day === 28)
|
||||
return `
|
||||
Today is Sam Wong's birthday. Happy Birthday Sam!
|
||||
`;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
{% endblock %}
|
@ -1,11 +0,0 @@
|
||||
{% extends "global/navbar.html" %}
|
||||
{% set shrineHomeUrl = "/shrines/asummersend/" %}
|
||||
|
||||
{% block navbarLinks %}
|
||||
{% set navPages = collections.all | eleventyNavigation("A Summer’s End Shrine") %}
|
||||
{%- for entry in navPages %}
|
||||
<li>
|
||||
<a {% if entry.url == page.url %}aria-current="page"{% endif %} href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
</li>
|
||||
{%- endfor %}
|
||||
{% endblock %}
|
@ -1,12 +0,0 @@
|
||||
{% extends "global/shrineinfo.html" %}
|
||||
|
||||
{% block shrineAbout %}
|
||||
<p>Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {% cite "A Summer’s End — Hong Kong 1986" %}, an indie visual novel developed by Oracle and Bone. Set in 1980s Hong Kong, it tells of a love story between two women.</p>
|
||||
{% endblock %}
|
||||
|
||||
{% block shrineLinks %}
|
||||
<li><a href="https://www.asummersend.com/">Official Website</a>
|
||||
</li>
|
||||
<li><a href="https://store.steampowered.com/app/1111370/A_Summers_End__Hong_Kong_1986/">Steam</a></li>
|
||||
<li><a href="https://oracleandbone.itch.io/a-summers-end">itch.io</a></li>
|
||||
{% endblock %}
|
@ -1,19 +0,0 @@
|
||||
{%- css %}{% include "src/assets/css/cassettebeasts.css" %}{%- endcss %}
|
||||
|
||||
{% extends "global/baselayout.html" %}
|
||||
|
||||
{% block metaTitle %}
|
||||
<meta property="og:title" content="{{ title + ' | ' if title }}Cassette Beasts Shrine">
|
||||
{% endblock %}
|
||||
|
||||
{% block pageTitle %}
|
||||
{{ title + " | " if title }}Cassette Beasts Shrine | {{ sitemeta.siteName | safe }}
|
||||
{% endblock %}
|
||||
|
||||
{% block favicon %}
|
||||
<link rel="icon" type="image/x-icon" href="/assets/shrines/cassettebeasts/images/favicon.ico">
|
||||
{% endblock %}
|
||||
|
||||
{% block hero %}{% include "cassettebeasts/hero.html" %}{% endblock %}
|
||||
{% block navbar %}{% include "cassettebeasts/navbar.html" %}{% endblock %}
|
||||
{% block footer %}{% include "cassettebeasts/footer.html" %}{% endblock %}
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
layout: cassettebeasts/base
|
||||
---
|
||||
|
||||
{% extends "global/content.html" %}
|
||||
|
||||
{% block shrineInfo %}{% include "cassettebeasts/shrineinfo.html" %}{% endblock %}
|
@ -1,6 +0,0 @@
|
||||
{% extends "global/footer.html" %}
|
||||
|
||||
{% block footerContent %}
|
||||
<p>Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 3 August 2023</p>
|
||||
{% endblock %}
|
||||
|
@ -1,40 +0,0 @@
|
||||
{% extends "global/hero.html" %}
|
||||
|
||||
{% block heroImg %}
|
||||
<picture>
|
||||
<source srcset="/assets/shrines/cassettebeasts/images/cassettebeasts-header-320.avif" media="(orientation: landscape)" />
|
||||
<img src="/assets/shrines/cassettebeasts/images/cassettebeasts-header-640.avif" alt="Banner of Cassette Beasts Shrine" />
|
||||
</picture>
|
||||
{% endblock %}
|
||||
|
||||
{% block eventScript %}
|
||||
const todayEvent = getTodayEvent();
|
||||
|
||||
if (todayEvent) {
|
||||
heroTopBarEl.classList.remove('hidden');
|
||||
heroTopBarEl.innerHTML = todayEvent;
|
||||
}
|
||||
|
||||
function getTodayEvent() {
|
||||
const date = new Date();
|
||||
const month = date.getMonth() + 1;
|
||||
const day = date.getDate();
|
||||
const year = date.getFullYear();
|
||||
|
||||
const cbReleaseDate = new Date("2023-04-26").getFullYear();
|
||||
const pierReleaseDate = new Date("2023-10-04").getFullYear();
|
||||
const cbAnniversary = year - cbReleaseDate;
|
||||
const pierAnniversary = year - pierReleaseDate;
|
||||
|
||||
if (month === 4 && day === 26)
|
||||
return `
|
||||
Today is the ${cbAnniversary}-year anniversary of the release of {% cite "Cassette Beasts" %}!
|
||||
`;
|
||||
else if (month === 10 && day === 4)
|
||||
return `
|
||||
Today is the ${pierAnniversary}-year anniversary of the release of <cite>Pier of the Unknown</cite>, the first DLC expansion of {% cite "Cassette Beasts" %}!
|
||||
`;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
{% endblock %}
|
@ -1,11 +0,0 @@
|
||||
{% extends "global/navbar.html" %}
|
||||
{% set shrineHomeUrl = "/shrines/cassettebeasts/" %}
|
||||
|
||||
{% block navbarLinks %}
|
||||
{% set navPages = collections.all | eleventyNavigation("Cassette Beasts Shrine") %}
|
||||
{%- for entry in navPages %}
|
||||
<li>
|
||||
<a {% if entry.url == page.url %}aria-current="page"{% endif %} href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
</li>
|
||||
{%- endfor %}
|
||||
{% endblock %}
|
@ -1,14 +0,0 @@
|
||||
{% extends "global/shrineinfo.html" %}
|
||||
|
||||
{% block shrineAbout %}
|
||||
<p>Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {% cite "Cassette Beasts" %}, an indie monster collecting turn-based open-world role-playing video game developed by Bytten Studio and published by Raw Fury.</p>
|
||||
{% endblock %}
|
||||
|
||||
{% block shrineLinks %}
|
||||
<li><a href="https://www.cassettebeasts.com/">Official Website</a>
|
||||
</li>
|
||||
<li><a href="https://wiki.cassettebeasts.com/">Official Wiki</a></li>
|
||||
<li><a href="https://store.steampowered.com/app/1321440/Cassette_Beasts/">Steam</a></li>
|
||||
<li><a href="https://bytten-studio.com/">Bytten Studio</a></li>
|
||||
<li><a href="https://fan.leilukin.com/cassettebeasts/">Cassette Beasts fanlisting</a></li>
|
||||
{% endblock %}
|
@ -1,13 +1,12 @@
|
||||
{% macro myASEPlaylist(intro) %}
|
||||
{% imgFigure "/assets/projects/playlists/My-Dear-Summer-Lover-cover.avif", "Cover image of A Summer’s End fanmix 'My Dear Summer Lover: A Sam x Michelle Fanmix'" %}
|
||||
{{ imgFigure "/assets/projects/playlists/My-Dear-Summer-Lover-cover.avif", "Cover image of A Summer’s End fanmix 'My Dear Summer Lover: A Sam x Michelle Fanmix'" }}
|
||||
[Image description: Sam and Michelle from A Summer’s End almost kisses, with a play symbol and text on the top left corner, and the text "My Dear Summer Lover: A Sam x Michelle Fanmix" in a digital style font in front.]
|
||||
{% endimgFigure %}
|
||||
{{ /imgFigure }}
|
||||
|
||||
{{ intro }} [{% cite "A Summer’s End — Hong Kong 1986" %}](https://www.asummersend.com/home), dedicated to Sam and Michelle’s love story.
|
||||
{{ intro }} [{{ cite "A Summer’s End — Hong Kong 1986" }}](https://www.asummersend.com/home), dedicated to Sam and Michelle’s love story.
|
||||
|
||||
This mix contains mostly Cantonese and English songs, with one Mandarin song. Majority of these songs were performed by Hong Kong artists and released in the 80s, because A Summer’s End took place in Hong Kong and in the 80s.
|
||||
|
||||
I have carefully selected and arranged these tracks, so the lyrics would reflect Sam and Michelle’s relationship development throughout {% cite "A Summer’s End" %}. Therefore, the content of this mix could be considered spoilers if you have not played the visual novel.
|
||||
I have carefully selected and arranged these tracks, so the lyrics would reflect Sam and Michelle’s relationship development throughout {{ cite "A Summer’s End" }}. Therefore, the content of this mix could be considered spoilers if you have not played the visual novel.
|
||||
|
||||
Since Oracle and Bone has cited Anita Mui as a major inspiration for them and this visual novel, I have also included multiple songs performed by Anita Mui in this mix. Because A Summer’s End is a lesbian story, when I was choosing which songs to include in this mix, I also prioritize songs that were performed by women artists.
|
||||
|
||||
@ -28,4 +27,3 @@ Tracklist:
|
||||
[Listen on Spotify](https://open.spotify.com/playlist/3SIV7VjSKhspYwugVIQjug){.link-btn}
|
||||
|
||||
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/3SIV7VjSKhspYwugVIQjug?utm_source=generator" width="100%" height="380" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
|
||||
{% endmacro %}
|
@ -1,26 +1,27 @@
|
||||
{%- macro articleList(tag) -%}
|
||||
{{ export function articleList(tag) }}
|
||||
<ul>
|
||||
{%- for article in collections[tag] -%}
|
||||
{{ for article of collections[tag] }}
|
||||
<li>
|
||||
<p class="item-list__title">
|
||||
<a href="{{ article.url }}">{{ article.data.articleTitle }}</a>
|
||||
</p>
|
||||
<time datetime="{{ article.date }}">{{ article.date | formatDate }}</time>
|
||||
<time datetime="{{ article.date }}">{{ article.date |> formatDate }}</time>
|
||||
</li>
|
||||
{%- endfor -%}
|
||||
{{ /for }}
|
||||
</ul>
|
||||
{%- endmacro -%}
|
||||
{{ /export }}
|
||||
|
||||
{%- macro modEntry(params) -%}
|
||||
{% headingAnchor 3 %}{{ params.title }}{% endheadingAnchor %}
|
||||
{{ export function modEntry(params) }}
|
||||
{{# {{ headingAnchor 3 }}{{ params.title }}{{ /headingAnchor }} #}}
|
||||
### {{ params.title }}
|
||||
<div class="mod-entry">
|
||||
<img src="/assets/projects/{{ params.bannerFile }}" alt="Banner of {{ params.title }} mod" loading="lazy">
|
||||
<p>{{ params.desc | safe }}</p>
|
||||
<p>{{ params.desc }}</p>
|
||||
<h4>Download the mod:</h4>
|
||||
<div class="mod-entry__downloads">
|
||||
{%- for download in params.downloads -%}
|
||||
{{ for download of params.downloads }}
|
||||
<a class="link-btn" href="{{ download.url }}">{{ download.site }}</a>
|
||||
{%- endfor -%}
|
||||
{{ /for }}
|
||||
</div>
|
||||
</div>
|
||||
{%- endmacro -%}
|
||||
{{ /export }}
|
@ -5,9 +5,9 @@
|
||||
<img src="/assets/leilukin/Leilukins-Hub-button-200x40.png" alt="Leilukin's Hub website button with 200×40 pixel size" width="200" height="40" loading="lazy">
|
||||
</div>
|
||||
|
||||
{%- css %}
|
||||
{{- css }}
|
||||
.my-btn {
|
||||
align-items: center;
|
||||
margin-top: 1em;
|
||||
}
|
||||
{% endcss %}
|
||||
{{ /css }}
|
@ -1,63 +1,63 @@
|
||||
{% set firstLabel %}
|
||||
{{ set firstLabel }}
|
||||
<svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z"></svg>
|
||||
Newest{% endset %}
|
||||
Newest{{ /set }}
|
||||
|
||||
{% set prevLabel %}
|
||||
{{ set prevLabel }}
|
||||
<svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>
|
||||
Newer{% endset %}
|
||||
Newer{{ /set }}
|
||||
|
||||
{% set nextLabel %}Older
|
||||
{{ set nextLabel }}Older
|
||||
<svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg>
|
||||
{% endset %}
|
||||
{{ /set }}
|
||||
|
||||
{% set lastLabel %}Oldest
|
||||
{{ set lastLabel }}Oldest
|
||||
<svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z"/></svg>
|
||||
{% endset %}
|
||||
{{ /set }}
|
||||
|
||||
<nav aria-labelledby="pagination-title" class="pagination__wrapper">
|
||||
<h2 class="visually-hidden" id="pagination-title">Pagination</h2>
|
||||
<ul class="pagination">
|
||||
<li>
|
||||
{% if pagination.href.first %}
|
||||
{{ if pagination.href.first }}
|
||||
<a href="{{ pagination.href.first }}">
|
||||
{{ firstLabel | safe }}
|
||||
{{ firstLabel }}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ firstLabel | safe }}
|
||||
{% endif %}
|
||||
{{ else }}
|
||||
{{ firstLabel }}
|
||||
{{ /if }}
|
||||
</li>
|
||||
<li>
|
||||
{% if pagination.href.previous %}
|
||||
<a href=" {{ pagination.href.previous }}">
|
||||
{{ if pagination.href.previous }}
|
||||
<a href="{{ pagination.href.previous }}">
|
||||
<i class="fa-solid fa-angle-left"></i>
|
||||
{{ prevLabel | safe }}
|
||||
{{ prevLabel }}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ prevLabel | safe }}
|
||||
{% endif %}
|
||||
{{ else }}
|
||||
{{ prevLabel }}
|
||||
{{ /if }}
|
||||
</li>
|
||||
<li>
|
||||
{% if pagination.href.next %}
|
||||
<a href=" {{ pagination.href.next }}">
|
||||
{{ nextLabel | safe }}
|
||||
{{ if pagination.href.next }}
|
||||
<a href="{{ pagination.href.next }}">
|
||||
{{ nextLabel }}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ nextLabel | safe }}
|
||||
{% endif %}
|
||||
{{ else }}
|
||||
{{ nextLabel }}
|
||||
{{ /if }}
|
||||
</li>
|
||||
<li>
|
||||
{% if pagination.href.last %}
|
||||
<a href=" {{ pagination.href.last }}">
|
||||
{{ lastLabel | safe }}
|
||||
{{ if pagination.href.last }}
|
||||
<a href="{{ pagination.href.last }}">
|
||||
{{ lastLabel }}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ lastLabel | safe }}
|
||||
{% endif %}
|
||||
{{ else }}
|
||||
{{ lastLabel }}
|
||||
{{ /if }}
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
{%- css %}
|
||||
{{- css }}
|
||||
.pagination__wrapper {
|
||||
display: grid;
|
||||
place-content: center;
|
||||
@ -95,4 +95,4 @@ Newer{% endset %}
|
||||
}
|
||||
|
||||
.pagination li a:focus { outline: none; }
|
||||
{% endcss %}
|
||||
{{ /css }}
|
@ -10,9 +10,9 @@
|
||||
<p><a href="https://status.cafe/users/leilukin">View my statuses on status.cafe</a></p>
|
||||
</div>
|
||||
|
||||
{%- css %}#statuscafe-content { margin-bottom: 0.5em; }{% endcss %}
|
||||
{{- css }}#statuscafe-content { margin-bottom: 0.5em; }{{ /css }}
|
||||
|
||||
{%- js %}
|
||||
{{- js }}
|
||||
const statusCafeContent = document.getElementById("statuscafe-content");
|
||||
statusCafeContent.innerHTML = `
|
||||
<p>Fetching data from status.cafe...</p>
|
||||
@ -36,4 +36,4 @@ const fetchStatusCafe = async () => {
|
||||
}
|
||||
};
|
||||
fetchStatusCafe();
|
||||
{% endjs %}
|
||||
{{ /js }}
|
@ -4,7 +4,7 @@
|
||||
<a href="https://ko-fi.com/A1042UH4"><img src="/assets/buttons/misc/ko-fi.webp" alt="Buy Me a Coffee at ko-fi.com" width="141" height="36" loading="lazy"></a>
|
||||
</div>
|
||||
|
||||
{%- css %}
|
||||
{{- css }}
|
||||
.support-me {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
@ -12,4 +12,4 @@
|
||||
align-items: center;
|
||||
margin-top: 0.7em;
|
||||
}
|
||||
{% endcss %}
|
||||
{{ /css }}
|
@ -1,8 +1,8 @@
|
||||
{%- css %}.color-bg { padding: 0.125em 0.3em; }{% endcss %}
|
||||
{{- css }}.color-bg { padding: 0.125em 0.3em; }{{ /css }}
|
||||
|
||||
{%- macro webCliqueImg(file, width, height, alt="") -%}
|
||||
{{ function webCliqueImg(file, width, height, alt="") -}}
|
||||
<img src="/assets/cliques/{{ file }}" alt="{{ alt }}" class="inline-img" width="{{ width }}" height="{{ height }}" loading="lazy">
|
||||
{%- endmacro -%}
|
||||
{{ /function }}
|
||||
|
||||
<ul>
|
||||
<li>
|
@ -1,53 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ sitemeta.siteLanguage }}" dir="ltr" id="top">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
{# Open Graph Meta #}
|
||||
{% block metaTitle %}
|
||||
<meta property="og:title" content="{{ title if title else sitemeta.siteName | safe }}">
|
||||
{% endblock %}
|
||||
{% include "global/meta.html" %}
|
||||
{# Feeds #}
|
||||
{% include "global/feeds.html" %}
|
||||
{# Fonts #}
|
||||
{% include "global/fonts.html" %}
|
||||
{# CSS #}
|
||||
{% include "global/css-bundle.html" %}
|
||||
{% if hasTooltips %}
|
||||
<link rel="stylesheet" href="/assets/css/tooltips.css">
|
||||
{% endif %}
|
||||
<style>{% getBundle "css" %}</style>
|
||||
{# Favicon #}
|
||||
{% block favicon %}{% endblock %}
|
||||
{# Verifications #}
|
||||
<link rel="me" href="https://dragonscave.space/@Leilukin">
|
||||
<link rel="me" href="https://github.com/Leilukin">
|
||||
<link rel="authorization_endpoint" href="https://indieauth.com/auth">
|
||||
{# JavaScript #}
|
||||
<script src="{% getBundleFileUrl 'js' %}" defer></script>
|
||||
{% if toc %}
|
||||
<script src="{{'/assets/js/details-utils.js'}}" defer></script>
|
||||
{% endif %}
|
||||
{% if hasCodeBlock %}
|
||||
<script src="/assets/js/copycode.js" defer></script>
|
||||
{% endif %}
|
||||
{% if hasTooltips %}
|
||||
<script src="/assets/js/tooltips.js" defer></script>
|
||||
{% endif %}
|
||||
|
||||
<title>
|
||||
{% block pageTitle %}{{ title + " | " if title }}{{ sitemeta.siteName | safe }}{% endblock %}
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="skip-btn"><a href="#content">Skip to content</a></div>
|
||||
{% block hero %}{% include "global/hero.html" %}{% endblock %}
|
||||
{% block navbar %}{% include "global/navbar.html" %}{% endblock %}
|
||||
<main id="content">
|
||||
{{ content | safe }}
|
||||
</main>
|
||||
{% block footer %}{% include "global/footer.html" %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
@ -1,115 +0,0 @@
|
||||
<header class="main__header">
|
||||
{% if isArticle or hasBreadcrumbs %}
|
||||
<nav class="breadcrumbs" aria-labelledby="breadcrumbs-title">
|
||||
<h2 class="visually-hidden" id="breadcrumbs-title">Breadcrumbs</h2>
|
||||
{% set breadcrumbNavPages = collections.all | eleventyNavigationBreadcrumb(eleventyNavigation.key or articleTitle or pageTitle or title) %}
|
||||
{%- for entry in breadcrumbNavPages %}
|
||||
<a href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
<span aria-hidden="true">➔</span>
|
||||
{%- endfor %}
|
||||
</nav>
|
||||
{% endif %}
|
||||
|
||||
<h1>{{ articleTitle or pageTitle or title }}</h1>
|
||||
|
||||
{% if isArticle %}
|
||||
<div class="article__info">
|
||||
<p>
|
||||
{{ content | wordcount | thousands }} words.
|
||||
Posted on <time datetime="{{ date }}">{{ date | formatDate }}</time> by {{ sitemeta.siteAuthor.name }}
|
||||
</p>
|
||||
{% if updated %}
|
||||
<p>Last updated on <time datetime="{{ updated }}">{{ updated | formatDate }}</time></p>
|
||||
{% endif %}
|
||||
{% if categories %}
|
||||
<p>Categories:
|
||||
{% for cat in categories %}
|
||||
<a href="/categories/{{ cat | slugify }}">{{ cat }}</a>{% if not loop.last %}, {% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% else %}
|
||||
{% if desc %}
|
||||
<p>{{ desc }}</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</header>
|
||||
|
||||
<content-wrapper>
|
||||
{% if toc %}
|
||||
{% include "global/toc.html" %}
|
||||
{% endif %}
|
||||
|
||||
{% set contentEl = "article" if isArticle or articleElement else "div" %}
|
||||
|
||||
<{{contentEl}} class="content{{' content--divided' if isContentDivided }}">
|
||||
{{ content | safe }}
|
||||
|
||||
{% if tags and tags.includes("posts") %}
|
||||
{%- if collections.posts.length > 1 %}
|
||||
<nav class="blog__post--pagination" aria-labelledby="nextprev-title">
|
||||
<h2 class="visually-hidden" id="nextprev-title">Next and Previous Blog Posts</h2>
|
||||
{%- set previousPost = collections.posts | getPreviousCollectionItem %}
|
||||
{%- set nextPost = collections.posts | getNextCollectionItem %}
|
||||
{%- if nextPost or previousPost %}
|
||||
<ul class="blog__post--nextprev">
|
||||
{%- if previousPost %}
|
||||
<li class="blog__post--prev">
|
||||
<p>Previous Post:</p>
|
||||
<a href="{{ previousPost.url }}">{{ previousPost.data.articleTitle }}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{%- if nextPost %}
|
||||
<li class="blog__post--next">
|
||||
<p>Next Post:</p>
|
||||
<a href="{{ nextPost.url }}">{{ nextPost.data.articleTitle }}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
{%- endif %}
|
||||
</nav>
|
||||
{%- endif %}
|
||||
{% endif %}
|
||||
</{{contentEl}}>
|
||||
|
||||
{% if
|
||||
tags and tags.includes("articles")
|
||||
or tags and tags.includes("posts")
|
||||
or page.url === "/articles/"
|
||||
or tags and tags.includes("blog pages")
|
||||
%}
|
||||
{% include "main/content-nav.html" %}
|
||||
{% endif %}
|
||||
|
||||
{% block shrineInfo %}{% endblock %}
|
||||
</content-wrapper>
|
||||
|
||||
{%- css %}
|
||||
.breadcrumbs {
|
||||
margin-bottom: 0.7em;
|
||||
display: flex;
|
||||
gap: 0.5em;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.blog__post--pagination {
|
||||
padding-top: 1em;
|
||||
margin-block-start: 2.5em;
|
||||
border-top: 0.1em solid var(--clr-title-border);
|
||||
}
|
||||
|
||||
.blog__post--nextprev {
|
||||
list-style-type: "";
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: grid;
|
||||
gap: 0.7em;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-areas: 'prev next';
|
||||
}
|
||||
|
||||
.blog__post--prev { grid-area: prev; }
|
||||
.blog__post--next { grid-area: next; }
|
||||
{% endcss %}
|
@ -1,29 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" dir="ltr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
|
||||
{# Open Graph meta #}
|
||||
<meta property="og:title" content="{% if title %}{{ title }}{% else %}{{ sitemeta.siteName }}{% endif %}">
|
||||
{% include "global/meta.html" %}
|
||||
|
||||
{# Feeds #}
|
||||
{% include "global/feeds.html" %}
|
||||
|
||||
{# Style #}
|
||||
{% include "global/fonts.html" %}
|
||||
<link rel="stylesheet" href="/assets/css/misc.css">
|
||||
|
||||
<title>{% if title %} {{ title }} | {% endif %} {{ sitemeta.siteName }}</title>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<img src="/assets/leilukin/Leilukins-Hub-website-banner.avif" alt="{{ sitemeta.siteName }} website banner">
|
||||
<h1>{{ h1 }}</h1>
|
||||
|
||||
{{ content | safe }}
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
81
src/_includes/layouts/asummersend.vto
Normal file
81
src/_includes/layouts/asummersend.vto
Normal file
@ -0,0 +1,81 @@
|
||||
---
|
||||
sectionName: A Summer’s End — Hong Kong 1986 Shrine
|
||||
---
|
||||
{{ layout "layouts/base.vto" }}
|
||||
{{- css }}{{ include "../../assets/css/asummersend.css" }}{{- /css }}
|
||||
|
||||
{{ set favicon }}
|
||||
<link rel="icon" type="image/x-icon" href="/assets/shrines/asummersend/images/favicon.ico">
|
||||
{{ /set }}
|
||||
|
||||
{{ set heroImg }}
|
||||
<picture>
|
||||
<source srcset="/assets/shrines/asummersend/images/asummersend-header-320.avif" media="(orientation: landscape)" />
|
||||
<img src="/assets/shrines/asummersend/images/asummersend-header.avif" alt="Banner of A Summer’s End — Hong Kong 1986 Shrine" />
|
||||
</picture>
|
||||
{{ /set }}
|
||||
|
||||
{{ set eventScript }}
|
||||
const todayEvent = getTodayEvent();
|
||||
|
||||
if (todayEvent) {
|
||||
heroTopBarEl.classList.remove('hidden');
|
||||
heroTopBarEl.innerHTML = todayEvent;
|
||||
}
|
||||
|
||||
function getTodayEvent() {
|
||||
const date = new Date();
|
||||
const month = date.getMonth() + 1;
|
||||
const day = date.getDate();
|
||||
const year = date.getFullYear();
|
||||
|
||||
const aseReleaseDate = new Date("2020-04-23").getFullYear();
|
||||
const aseAnniversary = year - aseReleaseDate;
|
||||
|
||||
if (month === 2 && day === 16)
|
||||
return `
|
||||
Today is Michelle Cheung's birthday. Happy Birthday Michelle!
|
||||
`;
|
||||
else if (month === 4 && day === 23)
|
||||
return `
|
||||
Today is the ${aseAnniversary}-year anniversary of the release of {{ cite "A Summer’s End — Hong Kong 1986" }}!
|
||||
`;
|
||||
else if (month === 8 && day === 9)
|
||||
return `
|
||||
Today is Cecelia Cortes' birthday. Happy Birthday Cecelia!
|
||||
`;
|
||||
else if (month === 12 && day === 28)
|
||||
return `
|
||||
Today is Sam Wong's birthday. Happy Birthday Sam!
|
||||
`;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
{{ /set }}
|
||||
|
||||
{{ set navbarLinks }}
|
||||
{{ set navPages = collections.all |> eleventyNavigation("A Summer’s End Shrine") }}
|
||||
{{- for entry of navPages }}
|
||||
<li>
|
||||
<a {{ if entry.url == page.url }} aria-current="page"{{ /if }} href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
{{ /set }}
|
||||
|
||||
{{ content }}
|
||||
|
||||
{{ set shrineAbout }}
|
||||
<p>Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {{ cite "A Summer’s End — Hong Kong 1986" }}, an indie visual novel developed by Oracle and Bone. Set in 1980s Hong Kong, it tells of a love story between two women.</p>
|
||||
{{ /set }}
|
||||
|
||||
{{ set shrineLinks }}
|
||||
<li><a href="https://www.asummersend.com/">Official Website</a>
|
||||
</li>
|
||||
<li><a href="https://store.steampowered.com/app/1111370/A_Summers_End__Hong_Kong_1986/">Steam</a></li>
|
||||
<li><a href="https://oracleandbone.itch.io/a-summers-end">itch.io</a></li>
|
||||
{{ /set }}
|
||||
|
||||
{{ set footerContent }}
|
||||
<p>Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 16 February 2023</p>
|
||||
{{ /set }}
|
||||
{{ /layout }}
|
53
src/_includes/layouts/base.vto
Normal file
53
src/_includes/layouts/base.vto
Normal file
@ -0,0 +1,53 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ sitemeta.siteLanguage }}" dir="ltr" id="top">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<!-- Open Graph Meta -->
|
||||
<meta property="og:title" content="{{ title ? title : (sectionName || sitemeta.siteName) }}">
|
||||
{{ include "partials/meta.vto" }}
|
||||
<!-- Feeds -->
|
||||
{{ include "partials/feeds.vto" }}
|
||||
<!-- Fonts -->
|
||||
{{ include "partials/fonts.vto" }}
|
||||
<!-- CSS -->
|
||||
{{ include "partials/css.vto" }}
|
||||
{{ if hasTooltips }}
|
||||
<link rel="stylesheet" href="/assets/css/tooltips.css">
|
||||
{{ /if }}
|
||||
<style>{{ getBundle "css" }}</style>
|
||||
<!-- Favicon -->
|
||||
{{ favicon }}
|
||||
<!-- Verifications -->
|
||||
<link rel="me" href="https://dragonscave.space/@Leilukin">
|
||||
<link rel="me" href="https://github.com/Leilukin">
|
||||
<link rel="authorization_endpoint" href="https://indieauth.com/auth">
|
||||
<!-- JavaScript -->
|
||||
<script src="{{ getBundleFileUrl 'js' }}" defer></script>
|
||||
{{ if toc }}
|
||||
<script src="{{'/assets/js/details-utils.js'}}" defer></script>
|
||||
{{ /if }}
|
||||
{{ if hasCodeBlock }}
|
||||
<script src="/assets/js/copycode.js" defer></script>
|
||||
{{ /if }}
|
||||
{{ if hasTooltips }}
|
||||
<script src="/assets/js/tooltips.js" defer></script>
|
||||
{{ /if }}
|
||||
|
||||
<title>
|
||||
{{- title ? title + " | " : "" -}}
|
||||
{{- sectionName ? sectionName + " | " : "" -}}
|
||||
{{- sitemeta.siteName -}}
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="skip-btn"><a href="#content">Skip to content</a></div>
|
||||
{{ include "partials/hero.vto" }}
|
||||
{{ include "partials/navbar.vto" }}
|
||||
<main id="content">
|
||||
{{ include "partials/content.vto" }}
|
||||
</main>
|
||||
{{ include "partials/footer.vto" }}
|
||||
</body>
|
||||
</html>
|
79
src/_includes/layouts/cassettebeasts.vto
Normal file
79
src/_includes/layouts/cassettebeasts.vto
Normal file
@ -0,0 +1,79 @@
|
||||
---
|
||||
sectionName: Cassette Beasts Shrine
|
||||
---
|
||||
{{ layout "layouts/base.vto" }}
|
||||
{{- css }}{{ include "../../assets/css/cassettebeasts.css" }}{{- /css }}
|
||||
|
||||
{{ set favicon }}
|
||||
<link rel="icon" type="image/x-icon" href="/assets/shrines/cassettebeasts/images/favicon.ico">
|
||||
{{ /set }}
|
||||
|
||||
{{ set heroImg }}
|
||||
<picture>
|
||||
<source srcset="/assets/shrines/cassettebeasts/images/cassettebeasts-header-320.avif" media="(orientation: landscape)" />
|
||||
<img src="/assets/shrines/cassettebeasts/images/cassettebeasts-header-640.avif" alt="Banner of Cassette Beasts Shrine" />
|
||||
</picture>
|
||||
{{ /set }}
|
||||
|
||||
{{ set eventScript }}
|
||||
const todayEvent = getTodayEvent();
|
||||
|
||||
if (todayEvent) {
|
||||
heroTopBarEl.classList.remove('hidden');
|
||||
heroTopBarEl.innerHTML = todayEvent;
|
||||
}
|
||||
|
||||
function getTodayEvent() {
|
||||
const date = new Date();
|
||||
const month = date.getMonth() + 1;
|
||||
const day = date.getDate();
|
||||
const year = date.getFullYear();
|
||||
|
||||
const cbReleaseDate = new Date("2023-04-26").getFullYear();
|
||||
const pierReleaseDate = new Date("2023-10-04").getFullYear();
|
||||
const cbAnniversary = year - cbReleaseDate;
|
||||
const pierAnniversary = year - pierReleaseDate;
|
||||
|
||||
if (month === 4 && day === 26)
|
||||
return `
|
||||
Today is the ${cbAnniversary}-year anniversary of the release of {{ cite "Cassette Beasts" }}!
|
||||
`;
|
||||
else if (month === 10 && day === 4)
|
||||
return `
|
||||
Today is the ${pierAnniversary}-year anniversary of the release of <cite>Pier of the Unknown</cite>, the first DLC expansion of {{ cite "Cassette Beasts" }}!
|
||||
`;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
{{ /set }}
|
||||
|
||||
{{ set shrineHomeUrl = "/shrines/cassettebeasts/" }}
|
||||
|
||||
{{ set navbarLinks }}
|
||||
{{ set navPages = collections.all |> eleventyNavigation("Cassette Beasts Shrine") }}
|
||||
{{ for entry of navPages }}
|
||||
<li>
|
||||
<a {{ if entry.url == page.url }} aria-current="page"{{ /if }} href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
{{ /set }}
|
||||
|
||||
{{ content }}
|
||||
|
||||
{{ set shrineAbout }}
|
||||
<p>Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {{ cite "Cassette Beasts" }}, an indie monster collecting turn-based open-world role-playing video game developed by Bytten Studio and published by Raw Fury.</p>
|
||||
{{ /set }}
|
||||
|
||||
{{ set shrineLinks }}
|
||||
<li><a href="https://www.cassettebeasts.com/">Official Website</a>
|
||||
</li>
|
||||
<li><a href="https://wiki.cassettebeasts.com/">Official Wiki</a></li>
|
||||
<li><a href="https://store.steampowered.com/app/1321440/Cassette_Beasts/">Steam</a></li>
|
||||
<li><a href="https://bytten-studio.com/">Bytten Studio</a></li>
|
||||
<li><a href="https://fan.leilukin.com/cassettebeasts/">Cassette Beasts fanlisting</a></li>
|
||||
{{ /set }}
|
||||
|
||||
{{ set footerContent }}
|
||||
<p>Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 3 August 2023</p>
|
||||
{{ /set }}
|
||||
{{ /layout }}
|
@ -1,13 +1,13 @@
|
||||
---
|
||||
layout: main/content.html
|
||||
layout: layouts/main
|
||||
articleElement: true
|
||||
isContentDivided: true
|
||||
---
|
||||
{% set linkGroups = collections["link groups"] %}
|
||||
{{ set linkGroups = collections["link groups"] }}
|
||||
|
||||
<section class="content__section">
|
||||
<h2>Link to My Website</h2>
|
||||
{% include "main/my-button.html" %}
|
||||
{{ include "components/my-button.vto" }}
|
||||
</section>
|
||||
|
||||
<section class="content__section">
|
||||
@ -17,32 +17,32 @@ isContentDivided: true
|
||||
<nav aria-labelledby="tabs-title">
|
||||
<h3 class="visually-hidden" id="tabs-title">Tabs Group</h3>
|
||||
<ul class="tabs">
|
||||
{% for group in linkGroups %}
|
||||
<li><a class="tab__btn" href="#{{ group.data.title | slugify }}">{{ group.data.title }}</a></li>
|
||||
{%- endfor %}
|
||||
{{ for group of linkGroups }}
|
||||
<li><a class="tab__btn" href="#{{ group.data.title |> slugify }}">{{ group.data.title }}</a></li>
|
||||
{{ /for }}
|
||||
</ul>
|
||||
</nav>
|
||||
</section>
|
||||
|
||||
<article class="tabwrap">
|
||||
{% for group in linkGroups %}
|
||||
<section id="{{ group.data.title | slugify }}" class="content__section">
|
||||
{% headingAnchor 2 %}{{ group.data.title }}{% endheadingAnchor %}
|
||||
{{ for group of linkGroups }}
|
||||
<section id="{{ group.data.title |> slugify }}" class="content__section">
|
||||
{{ headingAnchor 2 }}{{ group.data.title }}{{ /headingAnchor }}
|
||||
|
||||
{% if group.data.toc %}
|
||||
{{ if group.data.toc }}
|
||||
<div class="tabwrap__toc">
|
||||
<h3>Table of Contents</h3>
|
||||
{{ group.content | toc | safe }}
|
||||
{{ group.content |> toc }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{{ /if }}
|
||||
|
||||
{{ group.content | safe }}
|
||||
{{ group.content }}
|
||||
|
||||
{% if group.data.updated %}
|
||||
<p class="update-info">(This {{ group.data.title }} list was last updated on <time datetime="{{ group.data.updated }}">{{ group.data.updated | formatDate }}</time>)</p>
|
||||
{% endif %}
|
||||
{{ if group.data.updated }}
|
||||
<p class="update-info">(This {{ group.data.title }} list was last updated on <time datetime="{{ group.data.updated }}">{{ group.data.updated |> formatDate }}</time>)</p>
|
||||
{{ /if }}
|
||||
|
||||
<a href="#linktabs" class="tab__btn tab__back">Back to tabs</a>
|
||||
</section>
|
||||
{%- endfor %}
|
||||
{{ /for }}
|
||||
</article>
|
@ -1,16 +1,13 @@
|
||||
{% extends "global/hero.html" %}
|
||||
{{ layout "layouts/base.vto" }}
|
||||
{{ set heroImg }}<img fetchpriority="high" src="/assets/leilukin/Leilukins-Hub-website-banner.avif" alt="Banner of Leilukin's Hub" width="900" height="300">{{ /set }}
|
||||
|
||||
{% block heroImg %}
|
||||
<img fetchpriority="high" src="/assets/leilukin/Leilukins-Hub-website-banner.avif" alt="Banner of Leilukin's Hub" width="900" height="300">
|
||||
{% endblock %}
|
||||
|
||||
{% set heroDropShadow %}
|
||||
{{ set heroDropShadow }}
|
||||
drop-shadow(0.1rem 0.1rem 0.2rem black)
|
||||
drop-shadow(0.1rem 0.1rem 0.2rem rgba(30, 30, 30, 0.8))
|
||||
{% endset%}
|
||||
{%- css %}.hero img { filter: {{ heroDropShadow }}; }{% endcss %}
|
||||
{{ /set }}
|
||||
{{- css }}.hero img { filter: {{ heroDropShadow }}; }{{ /css }}
|
||||
|
||||
{% block eventScript %}
|
||||
{{ set eventScript }}
|
||||
const todayEvent = getTodayEvent();
|
||||
|
||||
if (todayEvent) {
|
||||
@ -138,4 +135,44 @@ function getTodayEvent() {
|
||||
else
|
||||
return null;
|
||||
}
|
||||
{% endblock %}
|
||||
{{ /set }}
|
||||
|
||||
{{ set navbarLinks }}
|
||||
{{ set currentUrl = page.url }}
|
||||
{{ set navPages = collections["navbar links"] |> eleventyNavigation }}
|
||||
{{ for entry of navPages }}
|
||||
<li>
|
||||
<a {{ if entry.url == page.url }} aria-current="page"{{ /if }} href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
{{ /set }}
|
||||
|
||||
{{ content }}
|
||||
|
||||
{{ set footerContent }}
|
||||
<h2 class="visually-hidden">Footer Navigation:</h2>
|
||||
{{ set currentUrl = page.url }}
|
||||
<ul class="inline-nav footer__links">
|
||||
<li>
|
||||
<a href="{{ sitemeta.feedPath }}"><svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z"/></svg>RSS Feed</a>
|
||||
</li>
|
||||
<li><a
|
||||
{{ if currentUrl === "/sitemap/" }} aria-current="page"{{ /if }}
|
||||
href="/sitemap/
|
||||
">Site Map</a></li>
|
||||
{{ for link of collections["footer links"] }}
|
||||
<li><a
|
||||
{{ if link.url == page.url }} aria-current="page"{{ /if }}
|
||||
href="{{ link.url }}"
|
||||
>{{ link.data.title }}</a></li>
|
||||
{{ /for }}
|
||||
{{ for statement of collections.statements }}
|
||||
<li><a
|
||||
{{ if statement.url == page.url }} aria-current="page"{{ /if }}
|
||||
href="{{ statement.url }}"
|
||||
>{{ statement.data.title }}</a></li>
|
||||
{{ /for }}
|
||||
</ul>
|
||||
<p>Made with ♥ by {{ sitemeta.siteAuthor.name }} since 11 September 2022</p>
|
||||
{{ /set }}
|
||||
{{ /layout }}
|
69
src/_includes/layouts/pokemonoras.vto
Normal file
69
src/_includes/layouts/pokemonoras.vto
Normal file
@ -0,0 +1,69 @@
|
||||
---
|
||||
sectionName: Pokémon Omega Ruby and Alpha Sapphire Shrine
|
||||
---
|
||||
{{ layout "layouts/base.vto" }}
|
||||
{{- css }}{{ include "../../assets/css/pokemonoras.css" }}{{- /css }}
|
||||
|
||||
{{ set favicon }}
|
||||
<link rel="icon" type="image/x-icon" href="/assets/shrines/pokemonoras/images/favicon.ico">
|
||||
{{ /set }}
|
||||
|
||||
{{ set heroImg }}
|
||||
<picture>
|
||||
<source srcset="/assets/shrines/pokemonoras/images/pokemonoras-header-320.avif" media="(orientation: landscape)" />
|
||||
<img src="/assets/shrines/pokemonoras/images/pokemonoras-header-640.avif" alt="Banner of Pokémon Omega Ruby and Alpha Sapphire Shrine" />
|
||||
</picture>
|
||||
{{ /set }}
|
||||
|
||||
{{ set eventScript }}
|
||||
const todayEvent = getTodayEvent();
|
||||
|
||||
if (todayEvent) {
|
||||
heroTopBarEl.classList.remove('hidden');
|
||||
heroTopBarEl.innerHTML = todayEvent;
|
||||
}
|
||||
|
||||
function getTodayEvent() {
|
||||
const date = new Date();
|
||||
const month = date.getMonth() + 1;
|
||||
const day = date.getDate();
|
||||
const year = date.getFullYear();
|
||||
|
||||
const orasReleaseDate = new Date("2014-11-21").getFullYear();
|
||||
const orasAnniversary = year - orasReleaseDate;
|
||||
|
||||
if (month === 11 && day === 21)
|
||||
return `
|
||||
Today is the ${orasAnniversary}-year anniversary of the release of <cite>Pokémon Omega Ruby"</cite> and <cite>Alpha Sapphire</cite>!
|
||||
`;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
{{ /set }}
|
||||
|
||||
{{ set shrineHomeUrl = "/shrines/pokemonoras/" }}
|
||||
|
||||
{{ set navbarLinks }}
|
||||
{{ set navPages = collections.all |> eleventyNavigation("ORAS Shrine") }}
|
||||
{{ for entry of navPages }}
|
||||
<li>
|
||||
<a {{ if entry.url == page.url }} aria-current="page"{{ /if }} href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
{{ /set }}
|
||||
|
||||
{{ content }}
|
||||
|
||||
{{ set shrineAbout }}
|
||||
<p>Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {{ cite "Pokémon Omega Ruby and Alpha Sapphire" }}, remakes of the 2002 Game Boy Advance role-playing video games {{ cite "Pokémon Ruby" }} and {{ cite "Pokémon Sapphire" }}. The games are part of the sixth generation of the {{ cite "Pokémon" }} main series of video games, developed by Game Freak and published by The Pokémon Company and Nintendo for the Nintendo 3DS.</p>
|
||||
{{ /set }}
|
||||
|
||||
{{ set shrineLinks }}
|
||||
<li><a href="https://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9mon_Omega_Ruby_and_Alpha_Sapphire">Bulbapedia</a></li>
|
||||
<li><a href="https://pkmn.redcrown.net/hoenn/"><cite>Pokémon Ruby</cite>, <cite>Sapphire</cite>, <cite>Omega Ruby</cite> and <cite>Alpha Sapphire</cite> fanlisting</a></li>
|
||||
{{ /set }}
|
||||
|
||||
{{ set footerContent }}
|
||||
<p>Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 21 November 2024</p>
|
||||
{{ /set }}
|
||||
{{ /layout }}
|
27
src/_includes/layouts/root.vto
Normal file
27
src/_includes/layouts/root.vto
Normal file
@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" dir="ltr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
|
||||
<!-- Open Graph meta -->
|
||||
<meta property="og:title" content="{{ title ? title : sitemeta.siteName }}">
|
||||
{{ include "partials/meta.vto" }}
|
||||
<!-- Feeds -->
|
||||
{{ include "partials/feeds.vto" }}
|
||||
<!-- Style -->
|
||||
{{ include "partials/fonts.vto" }}
|
||||
<link rel="stylesheet" href="/assets/css/root.css">
|
||||
|
||||
<title>{{ if title }} {{ title }} | {{ /if }} {{ sitemeta.siteName }}</title>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<img src="/assets/leilukin/Leilukins-Hub-website-banner.avif" alt="{{ sitemeta.siteName }} website banner">
|
||||
<h1>{{ h1 }}</h1>
|
||||
|
||||
{{ content }}
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
9
src/_includes/layouts/slashpage.vto
Normal file
9
src/_includes/layouts/slashpage.vto
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
layout: layouts/base
|
||||
---
|
||||
|
||||
{{ content }}
|
||||
|
||||
{{ if updated }}
|
||||
<p class="update-info">(This {{ keyword ? keyword : "page" }} was last updated on <time datetime="{{ updated }}">{{ updated |> formatDate }}</time>)</p>
|
||||
{{ /if }}
|
76
src/_includes/layouts/starwarskotor.vto
Normal file
76
src/_includes/layouts/starwarskotor.vto
Normal file
@ -0,0 +1,76 @@
|
||||
---
|
||||
sectionName: "Star Wars: Knights of the Old Republic Shrine"
|
||||
---
|
||||
{{ layout "layouts/base.vto" }}
|
||||
{{- css }}{{ include "../../assets/css/starwarskotor.css" }}{{- /css }}
|
||||
|
||||
{{ set favicon }}
|
||||
<link rel="icon" type="image/x-icon" href="/assets/shrines/starwarskotor/images/favicon.ico">
|
||||
{{ /set }}
|
||||
|
||||
{{ set heroImg }}
|
||||
<picture>
|
||||
<source srcset="/assets/shrines/starwarskotor/images/swkotor-header-320.avif" media="(orientation: landscape)" />
|
||||
<img src="/assets/shrines/starwarskotor/images/swkotor-header.avif" alt="anner of Star Wars: Knights of the Old Republic Shrine" />
|
||||
</picture>
|
||||
{{ /set }}
|
||||
|
||||
{{ set eventScript }}
|
||||
const todayEvent = getTodayEvent();
|
||||
|
||||
if (todayEvent) {
|
||||
heroTopBarEl.classList.remove('hidden');
|
||||
heroTopBarEl.innerHTML = todayEvent;
|
||||
}
|
||||
|
||||
function getTodayEvent() {
|
||||
const date = new Date();
|
||||
const month = date.getMonth() + 1;
|
||||
const day = date.getDate();
|
||||
const year = date.getFullYear();
|
||||
|
||||
const kotor1ReleaseDate = new Date("2003-07-15").getFullYear();
|
||||
const kotor2ReleaseDate = new Date("2004-12-06").getFullYear();
|
||||
const kotor1Anniversary = year - kotor1ReleaseDate;
|
||||
const kotor2Anniversary = year - kotor2ReleaseDate;
|
||||
|
||||
if (month === 7 && day === 15)
|
||||
return `
|
||||
Today is the ${kotor1Anniversary}-year anniversary of the release of <cite>Star Wars: Knihgts of the Old Republic</cite>
|
||||
`;
|
||||
else if (month === 12 && day === 6)
|
||||
return `
|
||||
Today is the ${kotor2Anniversary}-year anniversary of the release of <cite>Star Wars: Knights of the Old Republic II — The Sith Lords</cite>
|
||||
`;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
{{ /set }}
|
||||
|
||||
{{ set shrineHomeUrl = "/shrines/starwarskotor/" }}
|
||||
|
||||
{{ set navbarLinks }}
|
||||
{{ set navPages = collections.all |> eleventyNavigation("KotOR Shrine") }}
|
||||
{{ for entry of navPages }}
|
||||
<li>
|
||||
<a {{ if entry.url == page.url }} aria-current="page"{{ /if }} href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
{{ /set }}
|
||||
|
||||
{{ content }}
|
||||
|
||||
{{ set shrineAbout }}
|
||||
<p>Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {{ cite "Star Wars: Knights of the Old Republic" }}, a series of role-playing video games set in the {{ cite "Star Wars" }} universe, taking place almost 4,000 years before the events of the Skywalker film saga.</p>
|
||||
{{ /set }}
|
||||
|
||||
{{ set shrineLinks }}
|
||||
<li><a href="https://kotor.neocities.org/">KOTOR Community Portal</a></li>
|
||||
<li><a href="https://glitterskies.org/kotor/"><cite>Star Wars: KotOR</cite> fanlisting</a></li>
|
||||
<li><a href="https://glitterskies.org/kotor2/"><cite>Star Wars: KotOR II</cite> fanlisting</a></li>
|
||||
{{ /set }}
|
||||
|
||||
{{ set footerContent }}
|
||||
<p>Made with ♥ and the Force by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 17 February 2023</p>
|
||||
{{ /set }}
|
||||
{{ /layout }}
|
@ -1,16 +0,0 @@
|
||||
<ul>
|
||||
{% for content in contentList %}
|
||||
<li>
|
||||
<p class="item-list__title">
|
||||
<a href="{{ content.url }}">
|
||||
{% if content.data.pageTitle %}{{ content.data.pageTitle | safe }}
|
||||
{% elif content.data.title %}{{ content.data.title | safe }}
|
||||
{% else %}
|
||||
<code>{{ content.url }}</code>
|
||||
{% endif %}
|
||||
</a>
|
||||
</p>
|
||||
<time datetime="{{ content.date }}">{{ content.date | formatDate }}</time>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
@ -1,5 +0,0 @@
|
||||
{% extends "global/baselayout.html" %}
|
||||
|
||||
{% block hero %}{% include "main/hero.html" %}{% endblock %}
|
||||
{% block navbar %}{% include "main/navbar.html" %}{% endblock %}
|
||||
{% block footer %}{% include "main/footer.html" %}{% endblock %}
|
@ -1,7 +0,0 @@
|
||||
{% for log in changelogList | reverse %}
|
||||
{% headingAnchor 2, log.fileSlug %}
|
||||
{{ log.date | formatDate }}
|
||||
{% endheadingAnchor %}
|
||||
|
||||
{{ log.content | safe }}
|
||||
{%- endfor %}
|
@ -1,5 +0,0 @@
|
||||
---
|
||||
layout: main/base
|
||||
---
|
||||
|
||||
{% extends "global/content.html" %}
|
@ -1,29 +0,0 @@
|
||||
{% extends "global/footer.html" %}
|
||||
|
||||
{% block footerContent %}
|
||||
<h2 class="visually-hidden">Footer Navigation:</h2>
|
||||
{% set currentUrl %}{{ page.url }}{% endset %}
|
||||
<ul class="inline-nav footer__links">
|
||||
<li>
|
||||
<a href="{{ sitemeta.feedPath }}"><svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z"/></svg>RSS Feed</a>
|
||||
</li>
|
||||
<li><a
|
||||
{% if currentUrl === "/sitemap/" %}aria-current="page"{% endif %}
|
||||
href="/sitemap/
|
||||
">Site Map</a></li>
|
||||
{%- for link in collections["footer links"] -%}
|
||||
<li><a
|
||||
{% if link.url == page.url %}aria-current="page"{% endif %}
|
||||
href="{{ link.url }}"
|
||||
>{{ link.data.title }}</a></li>
|
||||
{%- endfor -%}
|
||||
{%- for statement in collections.statements -%}
|
||||
<li><a
|
||||
{% if statement.url == page.url %}aria-current="page"{% endif %}
|
||||
href="{{ statement.url }}"
|
||||
>{{ statement.data.title }}</a></li>
|
||||
{%- endfor -%}
|
||||
</ul>
|
||||
<p>Made with ♥ by {{ sitemeta.siteAuthor.name }} since 11 September 2022</p>
|
||||
{% endblock %}
|
||||
|
@ -1,11 +0,0 @@
|
||||
{% extends "global/navbar.html" %}
|
||||
|
||||
{% block navbarLinks %}
|
||||
{% set currentUrl %}{{ page.url }}{% endset %}
|
||||
{% set navPages = collections["navbar links"] | eleventyNavigation %}
|
||||
{%- for entry in navPages %}
|
||||
<li>
|
||||
<a {% if entry.url == page.url %}aria-current="page"{% endif %} href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
</li>
|
||||
{%- endfor %}
|
||||
{% endblock %}
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
layout: main/content
|
||||
---
|
||||
|
||||
{{ content | safe }}
|
||||
|
||||
{% if updated %}
|
||||
<p class="update-info">(This {{ keyword if keyword else "page" }} was last updated on <time datetime="{{ updated }}">{{ updated | formatDate }}</time>)</p>
|
||||
{% endif %}
|
16
src/_includes/partials/archive.vto
Normal file
16
src/_includes/partials/archive.vto
Normal file
@ -0,0 +1,16 @@
|
||||
<ul>
|
||||
{{ for content of contentList }}
|
||||
<li>
|
||||
<p class="item-list__title">
|
||||
<a href="{{ content.url }}">
|
||||
{{ if content.data.pageTitle }}{{ content.data.pageTitle }}
|
||||
{{ else if content.data.title }}{{ content.data.title }}
|
||||
{{ else }}
|
||||
<code>{{ content.url }}</code>
|
||||
{{ /if }}
|
||||
</a>
|
||||
</p>
|
||||
<time datetime="{{ content.date }}">{{ content.date |> formatDate }}</time>
|
||||
</li>
|
||||
{{ /for }}
|
||||
</ul>
|
7
src/_includes/partials/changelogs-list.vto
Normal file
7
src/_includes/partials/changelogs-list.vto
Normal file
@ -0,0 +1,7 @@
|
||||
{{ for log of changelogList }}
|
||||
{{ headingAnchor 2, log.fileSlug }}
|
||||
{{ log.date |> formatDate }}
|
||||
{{ /headingAnchor }}
|
||||
|
||||
{{# {{ log.content }} #}}
|
||||
{{ /for }}
|
@ -1,32 +1,32 @@
|
||||
---
|
||||
layout: main/content
|
||||
layout: layouts/main
|
||||
articleElement: true
|
||||
---
|
||||
|
||||
{% set currentUrl %}{{ page.url }}{% endset %}
|
||||
{{ set currentUrl = page.url }}
|
||||
|
||||
<nav class="changelog__nav" aria-labelledby="changelog-nav-title">
|
||||
<p class="changelog__nav--title" id="changelog-nav-title">Changelog Archive:</p>
|
||||
<ul class="inline-nav changelog__nav--links">
|
||||
<li><a
|
||||
{% if currentUrl === "/changelogs/" %}aria-current="page"{% endif %}
|
||||
{{ if currentUrl === "/changelogs/" }} aria-current="page"{{ /if }}
|
||||
href="/changelogs"
|
||||
>Latest</a></li>
|
||||
{% set navPages = collections.all | eleventyNavigation("Changelogs") | reverse %}
|
||||
{%- for entry in navPages %}
|
||||
{{ set navPages = collections.all |> eleventyNavigation("Changelogs") |> toReversed }}
|
||||
{{ for entry of navPages }}
|
||||
<li><a
|
||||
{% if entry.url == page.url %}aria-current="page"{% endif %}
|
||||
{{ if entry.url == page.url }} aria-current="page"{{ /if }}
|
||||
href="{{ entry.url }}"
|
||||
>{{ entry.title }}</a></li>
|
||||
{%- endfor %}
|
||||
{{ /for }}
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<p>To get notified of the updates on this website, you can subscribe to its <a href="{{ sitemeta.feedPath }}"><svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z"/></svg>RSS feed</a>, which contains new articles, blog posts and website changelogs.</p>
|
||||
|
||||
{{ content | safe }}
|
||||
{{ content }}
|
||||
|
||||
{%- css %}
|
||||
{{- css }}
|
||||
.changelog__nav,
|
||||
.changelog__nav--links {
|
||||
display: flex;
|
||||
@ -59,4 +59,4 @@ articleElement: true
|
||||
gap: 1em;
|
||||
}
|
||||
}
|
||||
{% endcss %}
|
||||
{{ /css }}
|
@ -2,22 +2,22 @@
|
||||
<nav class="content__nav sidebar--sticky" aria-labelledby="my-contents-title">
|
||||
<h2 class="content__nav--title" id="my-contents-title">My Contents</h2>
|
||||
<ul class="content__nav--links">
|
||||
{% for archive in collections.archive %}
|
||||
{{ for archive of collections.archive }}
|
||||
<li><a href="{{ archive.url }}">{{ archive.data.title }}</a></li>
|
||||
{% endfor %}
|
||||
{{ /for }}
|
||||
<li><a href="/articles/">Articles</a></li>
|
||||
{% for page in collections["blog pages"] %}
|
||||
<li><a href="{{ page.url }}">{{ page.data.navTitle or page.data.title }}</a></li>
|
||||
{% endfor %}
|
||||
{{ for page of collections["blog pages"] }}
|
||||
<li><a href="{{ page.url }}">{{ page.data.navTitle || page.data.title }}</a></li>
|
||||
{{ /for }}
|
||||
</ul>
|
||||
</nav>
|
||||
</aside>
|
||||
|
||||
{%- css %}
|
||||
{{- css }}
|
||||
.content__nav {
|
||||
padding: 1.2em clamp(1em, 5%, 1.5em);
|
||||
background-color: var(--clr-content-bg);
|
||||
}
|
||||
|
||||
.content__nav--title { font-size: 1.7rem; }
|
||||
{% endcss %}
|
||||
{{ /css }}
|
116
src/_includes/partials/content.vto
Normal file
116
src/_includes/partials/content.vto
Normal file
@ -0,0 +1,116 @@
|
||||
<header class="main__header">
|
||||
{{ if isArticle || hasBreadcrumbs }}
|
||||
<nav class="breadcrumbs" aria-labelledby="breadcrumbs-title">
|
||||
<h2 class="visually-hidden" id="breadcrumbs-title">Breadcrumbs</h2>
|
||||
{{ set breadcrumbNavPages = collections.all |> eleventyNavigationBreadcrumb(eleventyNavigation.key || articleTitle || pageTitle || title) }}
|
||||
{{ for entry of breadcrumbNavPages }}
|
||||
<a href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
<span aria-hidden="true">➔</span>
|
||||
{{ /for }}
|
||||
</nav>
|
||||
{{ /if }}
|
||||
|
||||
<h1>{{ articleTitle || pageTitle || title }}</h1>
|
||||
|
||||
{{ if isArticle }}
|
||||
<div class="article__info">
|
||||
<p>
|
||||
{{ content |> wordcount |> thousands }} words.
|
||||
Posted on <time datetime="{{ date }}">{{ date |> formatDate }}</time> by {{ sitemeta.siteAuthor.name }}
|
||||
</p>
|
||||
{{ if updated }}
|
||||
<p>Last updated on <time datetime="{{ updated }}">{{ updated |> formatDate }}</time></p>
|
||||
{{ /if }}
|
||||
{{ if categories }}
|
||||
<p>Categories:
|
||||
{{ for cat of categories }}
|
||||
<a href="/categories/{{ cat |> slugify }}">{{ cat }}</a>{{ if categories.indexOf(cat) !== categories.length - 1 }}, {{ /if }}
|
||||
{{ /for }}
|
||||
</p>
|
||||
{{ /if }}
|
||||
</div>
|
||||
{{ else }}
|
||||
{{ if desc }}
|
||||
<p>{{ desc }}</p>
|
||||
{{ /if }}
|
||||
{{ /if }}
|
||||
</header>
|
||||
|
||||
<content-wrapper>
|
||||
{{ if toc }}
|
||||
{{ include "partials/toc.vto" }}
|
||||
{{ /if }}
|
||||
|
||||
{{ set contentEl = (isArticle || articleElement) ? "article" : "div" }}
|
||||
|
||||
<{{contentEl}} class="content{{ isContentDivided ? ' content--divided' : '' }}">
|
||||
{{ content }}
|
||||
|
||||
{{ if tags && tags.includes("posts") }}
|
||||
{{ if collections.posts.length > 1 }}
|
||||
<nav class="blog__post--pagination" aria-labelledby="nextprev-title">
|
||||
<h2 class="visually-hidden" id="nextprev-title">Next and Previous Blog Posts</h2>
|
||||
{{ set previousPost = collections.posts |> getPreviousCollectionItem }}
|
||||
{{ set nextPost = collections.posts |> getNextCollectionItem }}
|
||||
{{ if nextPost || previousPost }}
|
||||
<ul class="blog__post--nextprev">
|
||||
{{ if previousPost }}
|
||||
<li class="blog__post--prev">
|
||||
<p>Previous Post:</p>
|
||||
<a href="{{ previousPost.url }}">{{ previousPost.data.articleTitle }}</a>
|
||||
</li>
|
||||
{{ /if }}
|
||||
{{ if nextPost }}
|
||||
<li class="blog__post--next">
|
||||
<p>Next Post:</p>
|
||||
<a href="{{ nextPost.url }}">{{ nextPost.data.articleTitle }}</a>
|
||||
</li>
|
||||
{{ /if }}
|
||||
</ul>
|
||||
{{ /if }}
|
||||
</nav>
|
||||
{{ /if }}
|
||||
{{ /if }}
|
||||
</{{contentEl}}>
|
||||
|
||||
{{ if (tags && tags.includes("articles"))
|
||||
|| (tags && tags.includes("posts"))
|
||||
|| (page.url === "/articles/")
|
||||
|| (tags && tags.includes("blog pages"))
|
||||
}}
|
||||
{{ include "partials/content-nav.vto" }}
|
||||
{{ /if }}
|
||||
|
||||
{{ if tags && tags.includes("shrine pages") }}
|
||||
{{ include "partials/shrineinfo.vto" }}
|
||||
{{ /if }}
|
||||
</content-wrapper>
|
||||
|
||||
{{- css }}
|
||||
.breadcrumbs {
|
||||
margin-bottom: 0.7em;
|
||||
display: flex;
|
||||
gap: 0.5em;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.blog__post--pagination {
|
||||
padding-top: 1em;
|
||||
margin-block-start: 2.5em;
|
||||
border-top: 0.1em solid var(--clr-title-border);
|
||||
}
|
||||
|
||||
.blog__post--nextprev {
|
||||
list-style-type: "";
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: grid;
|
||||
gap: 0.7em;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-areas: 'prev next';
|
||||
}
|
||||
|
||||
.blog__post--prev { grid-area: prev; }
|
||||
.blog__post--next { grid-area: next; }
|
||||
{{ /css }}
|
@ -1,4 +1,4 @@
|
||||
{% set cssFiles = [
|
||||
{{ set cssFiles = [
|
||||
"global",
|
||||
"a11y-syntax-highlighting-dark",
|
||||
"general",
|
||||
@ -7,8 +7,8 @@
|
||||
"components",
|
||||
"pridesymbols",
|
||||
"utility"
|
||||
] %}
|
||||
] }}
|
||||
|
||||
{%- for file in cssFiles -%}
|
||||
{{ for file of cssFiles }}
|
||||
<link rel="stylesheet" href="{{'/assets/css/' + file + '.css'}}">
|
||||
{%- endfor -%}
|
||||
{{ /for }}
|
@ -4,11 +4,9 @@
|
||||
<a rel="nofollow, noindex" href="{{ sitemeta.siteAuthor.emailDecoyUrl }}">Contact me by email</a> (<a href="https://useplaintext.email/">plain text email</a> encouraged)
|
||||
</p>
|
||||
|
||||
{%- block footerContent %}
|
||||
{{ footerContent }}
|
||||
{% endblock -%}
|
||||
|
||||
{%- if tags and tags.includes("shrine pages") %}
|
||||
{{ if tags && tags.includes("shrine pages") }}
|
||||
<nav class="footer__shrines" aria-labelledby="backto-title">
|
||||
<p id="backto-title">Back to:</p>
|
||||
<ul class="inline-nav footer__links">
|
||||
@ -16,18 +14,18 @@
|
||||
<li><a href="/">{{ sitemeta.siteName }}</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
{%- endif -%}
|
||||
{{ /if }}
|
||||
|
||||
<p>
|
||||
<svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M96 64c0-17.7 14.3-32 32-32l320 0 64 0c70.7 0 128 57.3 128 128s-57.3 128-128 128l-32 0c0 53-43 96-96 96l-192 0c-53 0-96-43-96-96L96 64zM480 224l32 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-32 0 0 128zM32 416l512 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32z"/></svg>
|
||||
<a href="https://ko-fi.com/leilukin">Support me on Ko-Fi</a>
|
||||
</p>
|
||||
|
||||
{%- include "global/h-card.html" -%}
|
||||
{%- include "global/top-btn.html" %}
|
||||
{{ include "partials/h-card.vto" }}
|
||||
{{ include "partials/top-btn.vto" }}
|
||||
</footer>
|
||||
|
||||
{%- css %}
|
||||
{{ css }}
|
||||
:root { --footer-gap: 0.5em; }
|
||||
|
||||
.footer {
|
||||
@ -50,4 +48,4 @@
|
||||
|
||||
.footer__links { justify-self: center; }
|
||||
.footer__shrines { align-self: center; }
|
||||
{% endcss %}
|
||||
{{ /css }}
|
@ -1,13 +1,11 @@
|
||||
<header class="hero">
|
||||
<div class="hero__top-bar hidden"></div>
|
||||
<div class="hero__img">
|
||||
{% block heroImg %}
|
||||
{{ heroImg }}
|
||||
{% endblock %}
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{%- css %}
|
||||
{{ css }}
|
||||
.hero {
|
||||
width: 100%;
|
||||
background-color: var(--clr-hero-bg);
|
||||
@ -33,14 +31,12 @@
|
||||
overflow: hidden;
|
||||
max-height: 16rem;
|
||||
}
|
||||
{% endcss %}
|
||||
{{ /css }}
|
||||
|
||||
{%- js %}
|
||||
{{ js }}
|
||||
const hero = document.querySelector(".hero");
|
||||
const heroTopBarEl = document.querySelector(".hero__top-bar");
|
||||
const headerImgEl = document.querySelector(".hero__img");
|
||||
|
||||
{% block eventScript %}
|
||||
{{ eventScript }}
|
||||
{% endblock %}
|
||||
{% endjs %}
|
||||
{{ /js }}
|
@ -1,17 +1,17 @@
|
||||
{% set kotor2FullTitle %}{{ " II: The Sith Lords" if page.url.includes("kotor2") else ""}}{% endset %}
|
||||
{% set kotor2ShortTitle %}{{ " 2" if page.url.includes("kotor2") else ""}}{% endset %}
|
||||
{{ set kotor2FullTitle }}{{ page.url.includes("kotor2") ? " II: The Sith Lords" : "" }}{{ /set }}
|
||||
{{ set kotor2ShortTitle }}{{ page.url.includes("kotor2") ? " 2" : ""}}{{ /set }}
|
||||
|
||||
{% container "article", "content__section" %}
|
||||
{{ container "article", "content__section" }}
|
||||
## Spoiler Warning
|
||||
|
||||
WARNING: The full list of my mod build contains spoilers for <cite>Star Wars: Knights of the Old Republic{{ kotor2FullTitle }}</cite>!
|
||||
|
||||
My mod build is not designed for new <cite>KotOR{{ kotor2ShortTitle }}</cite> players, so I will not censor any information that contains spoilers for the game. In general, I do not recommend using mods in your very first playthrough of any video game, so you can judge and choose which mods you want to use after finishing the game for the first time. The only exceptions are the [KotOR 1 Community Patch](https://deadlystream.com/files/file/1258-kotor-1-community-patch/) for {% cite "KotOR 1" %} and [The Sith Lords Restored Content Mod](https://deadlystream.com/files/file/578-tsl-restored-content-mod/) for <cite>KotOR{{ kotor2ShortTitle }}</cite>, which are absolutely essential mods that even if you want to use them in your first playthrough, you definitely have my support.
|
||||
My mod build is not designed for new <cite>KotOR{{ kotor2ShortTitle }}</cite> players, so I will not censor any information that contains spoilers for the game. In general, I do not recommend using mods in your very first playthrough of any video game, so you can judge and choose which mods you want to use after finishing the game for the first time. The only exceptions are the [KotOR 1 Community Patch](https://deadlystream.com/files/file/1258-kotor-1-community-patch/) for {{ cite "KotOR 1" }} and [The Sith Lords Restored Content Mod](https://deadlystream.com/files/file/578-tsl-restored-content-mod/) for <cite>KotOR{{ kotor2ShortTitle }}</cite>, which are absolutely essential mods that even if you want to use them in your first playthrough, you definitely have my support.
|
||||
|
||||
If you are going to play <cite>KotOR{{ kotor2ShortTitle }}</cite> for the first time, and you do not mind using mods, I would suggest checking out the Spoiler-Free version of [KotOR Community Portal’s KotOR mod builds](https://kotor.neocities.org/modding/) instead.
|
||||
{% endcontainer %}
|
||||
{{ /container }}
|
||||
|
||||
{% container "article", "content__section" %}
|
||||
{{ container "article", "content__section" }}
|
||||
## Mod Categories
|
||||
|
||||
The mods I included in my mod build are divided into the following categories, which clarifies the types of changes the mod makes:
|
||||
@ -45,18 +45,18 @@ Restored Content
|
||||
|
||||
Sound Change
|
||||
: As the name implies, these mods make changes to the sound in the vanilla game. The sound could be music or ambient audios.
|
||||
{% endcontainer %}
|
||||
{{ /container }}
|
||||
|
||||
{% container "article", "content__section" %}
|
||||
{{ container "article", "content__section" }}
|
||||
## Mod Tiers
|
||||
|
||||
The tiers for each mod included in my mod build are not necessarily a judgement on the quality of the mods themselves. In my mod builds, mod tiers are ranked on a scale of 1-4, based on how important the individual mods are for my experience with the {% cite "KotOR" %} games.
|
||||
The tiers for each mod included in my mod build are not necessarily a judgement on the quality of the mods themselves. In my mod builds, mod tiers are ranked on a scale of 1-4, based on how important the individual mods are for my experience with the {{ cite "KotOR" }} games.
|
||||
|
||||
Tier 1 - Essential
|
||||
: This tier indicates mods that I cannot play the {% cite "KotOR" %} games without. Usually this is because I find those mods make very crucial changes to the game, typically by fixing things that bother me the most in the vanilla game. Similarly, mods of the Patch category that belong to this tier make critical changes to other mods. I consider excluding Tier 1 mods will negatively affect my experience with the {% cite "KotOR" %} games.
|
||||
: This tier indicates mods that I cannot play the {{ cite "KotOR" }} games without. Usually this is because I find those mods make very crucial changes to the game, typically by fixing things that bother me the most in the vanilla game. Similarly, mods of the Patch category that belong to this tier make critical changes to other mods. I consider excluding Tier 1 mods will negatively affect my experience with the {{ cite "KotOR" }} games.
|
||||
|
||||
Tier 2 - Very Important
|
||||
: This tier indicates mods that vastly improve my experience with the game. Mods belong to this tier are the bread and butter of my mod build. That said, unlike Tier 1 mods, excluding Tier 2 mods from my playthrough does not actively make my {% cite "KotOR" %} experience worse either.
|
||||
: This tier indicates mods that vastly improve my experience with the game. Mods belong to this tier are the bread and butter of my mod build. That said, unlike Tier 1 mods, excluding Tier 2 mods from my playthrough does not actively make my {{ cite "KotOR" }} experience worse either.
|
||||
|
||||
Tier 3 - Somewhat Important
|
||||
: This tier indicates mods that make changes that are in smaller scope or more subjective compared to Tier 1 and Tier 2 mods. Usually this is because the changes made by Tier 3 mods are less noticeable or more of a matter of personal taste.
|
||||
@ -64,4 +64,4 @@ Tier 3 - Somewhat Important
|
||||
Tier 4 - Optional
|
||||
: This tier indicates mods that make even smaller or more subjective changes than Tier 3 mods, to the point that using these mods is optional. I include Tier 4 mods in my build for the purpose of maximizing my immersion, or because I use these mods for customization purposes for my characters.
|
||||
{.deflist-1col}
|
||||
{% endcontainer %}
|
||||
{{ /container }}
|
@ -1,12 +1,12 @@
|
||||
<link rel="canonical" href="{{ sitemeta.siteUrl }}{{ page.url }}">
|
||||
<meta name="generator" content="{{ eleventy.generator }}">
|
||||
<meta name="author" content="{{ sitemeta.siteAuthor.name }}">
|
||||
<meta name="description" content="{{ desc or metadata.desc or sitemeta.siteDescription }}">
|
||||
<meta name="description" content="{{ desc || metadata.desc || sitemeta.siteDescription }}">
|
||||
<meta name="fediverse:creator" content="{{ sitemeta.fediverseHandle }}">
|
||||
<meta property="og:site_name" content="{{ sitemeta.siteName | safe }}" />
|
||||
<meta property="og:type" content="{{ "article" if isArticle or articleElement else "website" }}">
|
||||
<meta property="og:description" content="{{ desc or metadata.desc or sitemeta.siteDescription }}">
|
||||
<meta property="og:site_name" content="{{ sitemeta.siteName }}" />
|
||||
<meta property="og:type" content="{{ (isArticle || articleElement) ? "article" : "website" }}">
|
||||
<meta property="og:description" content="{{ desc || metadata.desc || sitemeta.siteDescription }}">
|
||||
<meta property="og:url" content="{{ sitemeta.siteUrl }}{{ page.url }}">
|
||||
<meta property="og:locale" content="{{ sitemeta.siteLocale }}">
|
||||
<meta property="og:image" content="{{ sitemeta.siteUrl }}/assets/leilukin/leilukins-hub-meta-img.png">
|
||||
<meta name="theme-color" content="#3d2163">
|
||||
<meta name="theme-color" content="#3d2163">
|
@ -1,29 +1,29 @@
|
||||
{% set navLinksEl %}
|
||||
{%- if tags and tags.includes("shrine pages") %}
|
||||
{{ set navLinksEl }}
|
||||
{{ if tags && tags.includes("shrine pages") }}
|
||||
<li>
|
||||
<a {% if currentUrl === shrineHomeUrl %}aria-current="page"{% endif %} href="{{ shrineHomeUrl }}">Shrine Home</a>
|
||||
<a {{ if currentUrl === shrineHomeUrl }} aria-current="page"{{ /if }} href="{{ shrineHomeUrl }}">Shrine Home</a>
|
||||
</li>
|
||||
{%- endif -%}
|
||||
{% block navbarLinks %}{% endblock %}
|
||||
{%- if tags and tags.includes("shrine pages") %}
|
||||
{{ /if }}
|
||||
{{ navbarLinks }}
|
||||
{{ if tags && tags.includes("shrine pages") }}
|
||||
<li><a href="/shrines/">Shrine Directory</a></li>
|
||||
<li><a href="/">Main Site</a></li>
|
||||
{%- endif -%}
|
||||
{% endset %}
|
||||
{{ /if }}
|
||||
{{ /set }}
|
||||
|
||||
<nav class="navbar" aria-labelledby="top-level-nav-title">
|
||||
<h2 class="visually-hidden" id="top-level-nav-title">Top Level</h2>
|
||||
<ul class="navbar__menu navbar__links">{{ navLinksEl | safe }}</ul>
|
||||
<ul class="navbar__menu navbar__links">{{ navLinksEl }}</ul>
|
||||
<button class="navbar__toggle" popovertarget="nav-menu" aria-label="Toggle navigation menu">
|
||||
<svg aria-hidden="true" focusable="false" width="1em" height="1em" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"/></svg>
|
||||
Navigation
|
||||
</button>
|
||||
</nav>
|
||||
<div popover id="nav-menu" class="navbar__popover">
|
||||
<ul class="navbar__menu">{{ navLinksEl | safe }}</ul>
|
||||
<ul class="navbar__menu">{{ navLinksEl }}</ul>
|
||||
</div>
|
||||
|
||||
{%- css %}
|
||||
{{ css }}
|
||||
.navbar {
|
||||
background: var(--clr-navbar-bg);
|
||||
width: 100%;
|
||||
@ -102,4 +102,4 @@
|
||||
.navbar__toggle, .navbar__popover { display: none; }
|
||||
.navbar__links { display: flex; }
|
||||
}
|
||||
{% endcss %}
|
||||
{{ /css }}
|
@ -1,19 +1,15 @@
|
||||
<aside class="right-sidebar" aria-label="Right sidebar">
|
||||
<div class="shrine__info sidebar--sticky">
|
||||
<h2>About</h2>
|
||||
{% block shrineAbout %}
|
||||
{{ shrineAbout }}
|
||||
{% endblock %}
|
||||
<h3>Links</h3>
|
||||
<ul>
|
||||
{% block shrineLinks %}
|
||||
{{ shrineLinks }}
|
||||
{% endblock %}
|
||||
</ul>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
{%- css %}
|
||||
{{ css }}
|
||||
.right-sidebar {
|
||||
background-color: var(--clr-content-bg);
|
||||
font-size: clamp(0.9rem, 0.9rem + 3vw, 1rem);
|
||||
@ -36,4 +32,4 @@
|
||||
}
|
||||
|
||||
.shrine__info ul { margin-top: 0.5em; }
|
||||
{% endcss %}
|
||||
{{ /css }}
|
@ -4,12 +4,12 @@
|
||||
<summary class="toc__heading" id="toc-heading">
|
||||
Table of Contents
|
||||
</summary>
|
||||
{{ content | toc | safe }}
|
||||
{{ content |> toc }}
|
||||
</details>
|
||||
</details-utils>
|
||||
</aside>
|
||||
|
||||
{%- css %}
|
||||
{{- css }}
|
||||
.toc__wrapper {
|
||||
max-height: var(--ht-sticky-sidebar);
|
||||
overflow-x: auto;
|
||||
@ -54,4 +54,4 @@
|
||||
padding: 0;
|
||||
font-size: 1rem;
|
||||
}
|
||||
{% endcss %}
|
||||
{{ endcss }}
|
@ -5,7 +5,7 @@
|
||||
Back to Top
|
||||
</a>
|
||||
|
||||
{%- css %}
|
||||
{{- css }}
|
||||
.top-btn,
|
||||
.top-btn:hover {
|
||||
color: var(--clr-top-btn-txt);
|
||||
@ -40,4 +40,4 @@
|
||||
stroke: currentColor;
|
||||
fill: currentColor;
|
||||
}
|
||||
{% endcss %}
|
||||
{{ /css }}
|
@ -1,19 +0,0 @@
|
||||
{%- css %}{% include "src/assets/css/pokemonoras.css" %}{%- endcss %}
|
||||
|
||||
{% extends "global/baselayout.html" %}
|
||||
|
||||
{% block metaTitle %}
|
||||
<meta property="og:title" content="{{ title + ' | ' if title }}Pokémon Omega Ruby and Alpha Sapphire Shrine">
|
||||
{% endblock %}
|
||||
|
||||
{% block pageTitle %}
|
||||
{{ title + " | " if title }}Pokémon Omega Ruby and Alpha Sapphire Shrine | {{ sitemeta.siteName | safe }}
|
||||
{% endblock %}
|
||||
|
||||
{% block favicon %}
|
||||
<link rel="icon" type="image/x-icon" href="/assets/shrines/pokemonoras/images/favicon.ico">
|
||||
{% endblock %}
|
||||
|
||||
{% block hero %}{% include "pokemonoras/hero.html" %}{% endblock %}
|
||||
{% block navbar %}{% include "pokemonoras/navbar.html" %}{% endblock %}
|
||||
{% block footer %}{% include "pokemonoras/footer.html" %}{% endblock %}
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
layout: pokemonoras/base
|
||||
---
|
||||
|
||||
{% extends "global/content.html" %}
|
||||
|
||||
{% block shrineInfo %}{% include "pokemonoras/shrineinfo.html" %}{% endblock %}
|
@ -1,6 +0,0 @@
|
||||
{% extends "global/footer.html" %}
|
||||
|
||||
{% block footerContent %}
|
||||
<p>Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 21 November 2024</p>
|
||||
{% endblock %}
|
||||
|
@ -1,34 +0,0 @@
|
||||
{% extends "global/hero.html" %}
|
||||
|
||||
{% block heroImg %}
|
||||
<picture>
|
||||
<source srcset="/assets/shrines/pokemonoras/images/pokemonoras-header-320.avif" media="(orientation: landscape)" />
|
||||
<img src="/assets/shrines/pokemonoras/images/pokemonoras-header-640.avif" alt="Banner of Pokémon Omega Ruby and Alpha Sapphire Shrine" />
|
||||
</picture>
|
||||
{% endblock %}
|
||||
|
||||
{% block eventScript %}
|
||||
const todayEvent = getTodayEvent();
|
||||
|
||||
if (todayEvent) {
|
||||
heroTopBarEl.classList.remove('hidden');
|
||||
heroTopBarEl.innerHTML = todayEvent;
|
||||
}
|
||||
|
||||
function getTodayEvent() {
|
||||
const date = new Date();
|
||||
const month = date.getMonth() + 1;
|
||||
const day = date.getDate();
|
||||
const year = date.getFullYear();
|
||||
|
||||
const orasReleaseDate = new Date("2014-11-21").getFullYear();
|
||||
const orasAnniversary = year - orasReleaseDate;
|
||||
|
||||
if (month === 11 && day === 21)
|
||||
return `
|
||||
Today is the ${orasAnniversary}-year anniversary of the release of <cite>Pokémon Omega Ruby"</cite> and <cite>Alpha Sapphire</cite>!
|
||||
`;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
{% endblock %}
|
@ -1,11 +0,0 @@
|
||||
{% extends "global/navbar.html" %}
|
||||
{% set shrineHomeUrl = "/shrines/pokemonoras/" %}
|
||||
|
||||
{% block navbarLinks %}
|
||||
{% set navPages = collections.all | eleventyNavigation("ORAS Shrine") %}
|
||||
{%- for entry in navPages %}
|
||||
<li>
|
||||
<a {% if entry.url == page.url %}aria-current="page"{% endif %} href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
</li>
|
||||
{%- endfor %}
|
||||
{% endblock %}
|
@ -1,10 +0,0 @@
|
||||
{% extends "global/shrineinfo.html" %}
|
||||
|
||||
{% block shrineAbout %}
|
||||
<p>Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {% cite "Pokémon Omega Ruby and Alpha Sapphire" %}, remakes of the 2002 Game Boy Advance role-playing video games {% cite "Pokémon Ruby" %} and {% cite "Pokémon Sapphire" %}. The games are part of the sixth generation of the {% cite "Pokémon" %} main series of video games, developed by Game Freak and published by The Pokémon Company and Nintendo for the Nintendo 3DS.</p>
|
||||
{% endblock %}
|
||||
|
||||
{% block shrineLinks %}
|
||||
<li><a href="https://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9mon_Omega_Ruby_and_Alpha_Sapphire">Bulbapedia</a></li>
|
||||
<li><a href="https://pkmn.redcrown.net/hoenn/"><cite>Pokémon Ruby</cite>, <cite>Sapphire</cite>, <cite>Omega Ruby</cite> and <cite>Alpha Sapphire</cite> fanlisting</a></li>
|
||||
{% endblock %}
|
@ -1,19 +0,0 @@
|
||||
{%- css %}{% include "src/assets/css/starwarskotor.css" %}{%- endcss %}
|
||||
|
||||
{% extends "global/baselayout.html" %}
|
||||
|
||||
{% block metaTitle %}
|
||||
<meta property="og:title" content="{{ title + ' | ' if title }}Star Wars: Knights of the Old Republic Shrine">
|
||||
{% endblock %}
|
||||
|
||||
{% block pageTitle %}
|
||||
{{ title + " | " if title }}Star Wars: Knights of the Old Republic Shrine | {{ sitemeta.siteName | safe }}
|
||||
{% endblock %}
|
||||
|
||||
{% block favicon %}
|
||||
<link rel="icon" type="image/x-icon" href="/assets/shrines/starwarskotor/images/favicon.ico">
|
||||
{% endblock %}
|
||||
|
||||
{% block hero %}{% include "starwarskotor/hero.html" %}{% endblock %}
|
||||
{% block navbar %}{% include "starwarskotor/navbar.html" %}{% endblock %}
|
||||
{% block footer %}{% include "starwarskotor/footer.html" %}{% endblock %}
|
@ -1,7 +0,0 @@
|
||||
---
|
||||
layout: starwarskotor/base
|
||||
---
|
||||
|
||||
{% extends "global/content.html" %}
|
||||
|
||||
{% block shrineInfo %}{% include "starwarskotor/shrineinfo.html" %}{% endblock %}
|
@ -1,6 +0,0 @@
|
||||
{% extends "global/footer.html" %}
|
||||
|
||||
{% block footerContent %}
|
||||
<p>Made with ♥ and the Force by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 17 February 2023</p>
|
||||
{% endblock %}
|
||||
|
@ -1,40 +0,0 @@
|
||||
{% extends "global/hero.html" %}
|
||||
|
||||
{% block heroImg %}
|
||||
<picture>
|
||||
<source srcset="/assets/shrines/starwarskotor/images/swkotor-header-320.avif" media="(orientation: landscape)" />
|
||||
<img src="/assets/shrines/starwarskotor/images/swkotor-header.avif" alt="anner of Star Wars: Knights of the Old Republic Shrine" />
|
||||
</picture>
|
||||
{% endblock %}
|
||||
|
||||
{% block eventScript %}
|
||||
const todayEvent = getTodayEvent();
|
||||
|
||||
if (todayEvent) {
|
||||
heroTopBarEl.classList.remove('hidden');
|
||||
heroTopBarEl.innerHTML = todayEvent;
|
||||
}
|
||||
|
||||
function getTodayEvent() {
|
||||
const date = new Date();
|
||||
const month = date.getMonth() + 1;
|
||||
const day = date.getDate();
|
||||
const year = date.getFullYear();
|
||||
|
||||
const kotor1ReleaseDate = new Date("2003-07-15").getFullYear();
|
||||
const kotor2ReleaseDate = new Date("2004-12-06").getFullYear();
|
||||
const kotor1Anniversary = year - kotor1ReleaseDate;
|
||||
const kotor2Anniversary = year - kotor2ReleaseDate;
|
||||
|
||||
if (month === 7 && day === 15)
|
||||
return `
|
||||
Today is the ${kotor1Anniversary}-year anniversary of the release of <cite>Star Wars: Knihgts of the Old Republic</cite>
|
||||
`;
|
||||
else if (month === 12 && day === 6)
|
||||
return `
|
||||
Today is the ${kotor2Anniversary}-year anniversary of the release of <cite>Star Wars: Knights of the Old Republic II — The Sith Lords</cite>
|
||||
`;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
{% endblock %}
|
@ -1,11 +0,0 @@
|
||||
{% extends "global/navbar.html" %}
|
||||
{% set shrineHomeUrl = "/shrines/starwarskotor/" %}
|
||||
|
||||
{% block navbarLinks %}
|
||||
{% set navPages = collections.all | eleventyNavigation("KotOR Shrine") %}
|
||||
{%- for entry in navPages %}
|
||||
<li>
|
||||
<a {% if entry.url == page.url %}aria-current="page"{% endif %} href="{{ entry.url }}">{{ entry.title }}</a>
|
||||
</li>
|
||||
{%- endfor %}
|
||||
{% endblock %}
|
@ -1,11 +0,0 @@
|
||||
{% extends "global/shrineinfo.html" %}
|
||||
|
||||
{% block shrineAbout %}
|
||||
<p>Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {% cite "Star Wars: Knights of the Old Republic" %}, a series of role-playing video games set in the {% cite "Star Wars" %} universe, taking place almost 4,000 years before the events of the Skywalker film saga.</p>
|
||||
{% endblock %}
|
||||
|
||||
{% block shrineLinks %}
|
||||
<li><a href="https://kotor.neocities.org/">KOTOR Community Portal</a></li>
|
||||
<li><a href="https://glitterskies.org/kotor/"><cite>Star Wars: KotOR</cite> fanlisting</a></li>
|
||||
<li><a href="https://glitterskies.org/kotor2/"><cite>Star Wars: KotOR II</cite> fanlisting</a></li>
|
||||
{% endblock %}
|
@ -1,6 +1,6 @@
|
||||
export default {
|
||||
tags: ["articles", "contents", "feed items"],
|
||||
layout: "main/content",
|
||||
layout: "layouts/main",
|
||||
permalink: "/articles/{{ page.fileSlug }}/",
|
||||
isArticle: true,
|
||||
eleventyComputed: {
|
||||
@ -10,4 +10,4 @@ export default {
|
||||
parent: "Articles"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ desc: Ars Technica's article on the KotOR 2's modding community to celebrate the
|
||||
categories: ["my interviews", "star wars kotor 2", "video game mods"]
|
||||
---
|
||||
|
||||
On 6 December 2019, to celebrate the 15th anniversary of {% cite "Star Wars: Knights of the Old Republic 2" %}, Ars Technica has published [an article about the modding community of KotOR 2](https://arstechnica.com/gaming/2019/12/the-modders-that-spent-15-years-fixing-knights-of-the-old-republic-2/). I was interviewed by the author of this article, Austin Taylor, for my same-gender romance mods for {% cite "KotOR 2" %}.
|
||||
On 6 December 2019, to celebrate the 15th anniversary of {{ cite "Star Wars: Knights of the Old Republic 2" }}, Ars Technica has published [an article about the modding community of KotOR 2](https://arstechnica.com/gaming/2019/12/the-modders-that-spent-15-years-fixing-knights-of-the-old-republic-2/). I was interviewed by the author of this article, Austin Taylor, for my same-gender romance mods for {{ cite "KotOR 2" }}.
|
||||
|
||||
> ### Romance? Yes, Please
|
||||
>
|
||||
@ -20,4 +20,4 @@ On 6 December 2019, to celebrate the 15th anniversary of {% cite "Star Wars: Kni
|
||||
> To recruit both The Handmaiden and The Disciple at the same time, players can install the [PartySwap mod by DarthTyren](https://deadlystream.com/files/file/544-partyswap/). That mod was initially lacking the same-gender romance dialogue from Leiluken’s mod. But Leiluken has since added a compatibility installation option, letting the two mods now work together and fully opening up the same-gender romance options of your dreams.
|
||||
|
||||
Read the full article on Ars Technica here:
|
||||
[The modders who spent 15 years fixing Knights of the Old Republic 2](https://arstechnica.com/gaming/2019/12/the-modders-that-spent-15-years-fixing-knights-of-the-old-republic-2/)
|
||||
[The modders who spent 15 years fixing Knights of the Old Republic 2](https://arstechnica.com/gaming/2019/12/the-modders-that-spent-15-years-fixing-knights-of-the-old-republic-2/)
|
||||
|
@ -23,7 +23,7 @@ On [32-Bit Cafe's Discourse forum](https://discourse.32bit.cafe/), I made a [pos
|
||||
|
||||
Plagiarism.org [defines footnotes](https://www.plagiarism.org/article/what-are-footnotes) as notes placed at the bottom of a page, and what footnotes do is to cite references or comment on a designated part of the text above it.
|
||||
|
||||
My use case of footnotes is citing sources of information, particularly citing the same source multiple times on the same page when information from the same source is spread across my page. As of this writing, my website pages that use footnotes include the [trivia page of my {% cite "A Summer’s End — Hong Kong 1986" %} shrine 1](/shrines/asummersend/trivia/) and the [facts page of my {% cite "Cassette Beasts" %} shrine](/shrines/cassettebeasts/facts/). You are free to look at the HTML and CSS for reference.
|
||||
My use case of footnotes is citing sources of information, particularly citing the same source multiple times on the same page when information from the same source is spread across my page. As of this writing, my website pages that use footnotes include the [trivia page of my {{ cite "A Summer’s End — Hong Kong 1986" }} shrine 1](/shrines/asummersend/trivia/) and the [facts page of my {{ cite "Cassette Beasts" }} shrine](/shrines/cassettebeasts/facts/). You are free to look at the HTML and CSS for reference.
|
||||
|
||||
Footnotes are used both on print and on the web. However, maintaining footnotes on the web can be tedious, especially if you want to update a web page to add or remove them, since you will need to change the number references of existing footnotes.
|
||||
|
||||
@ -225,12 +225,12 @@ For extra comments and tangents, by favourite approach is using HTML's details d
|
||||
|
||||
I have been using the disclosure element for additional comments or information on this website, like in my blog post, ["My Cassette Beasts Fanlisting Application has been Approved"](/blog/posts/2024-06-24-cassette-beasts-fanlisting-approved/). As for the styling, initially I indented the content inside the disclosure to differentiate the disclosure content from the rest of the content of the page, but recently I switched to adding borders to the content after being inspired by [Starbreaker](https://starbreaker.org/)'s website, who also has a post about footnotes, ["Footnotes: No Fun to Create, Either"](https://starbreaker.org/blog/tech/footnotes-no-fun-to-create-either/index.html).
|
||||
|
||||
{% disclosure "More ways to use `<details>` and `<summary>` elements" %}
|
||||
{{ disclosure "More ways to use `<details>` and `<summary>` elements" }}
|
||||
`<details>` and `<summary>` have become among my favourite HTML elements due to how useful they are. In addition to extra comments and info, Leilukin's Hub has also used the elements for the following purposes:
|
||||
- Table of contents, like the one this very article has
|
||||
- Hiding spoilers, like in my {% cite "Cassette Beasts" %} shrine article, ["How Cassette Beasts is Much More than a Pokémon Clone"](/shrines/cassettebeasts/articles/cassette-beasts-more-than-a-pokemon-clone/)
|
||||
- Content warnings, like in my [{% cite "A Summer’s End — Hong Kong 1986" %} shrine's gallery page](/shrines/asummersend/gallery/), with its styling being inspired by another Kitty Giraudel's blog post, ["A content warning component"](https://kittygiraudel.com/2022/09/04/a-content-warning-component/)
|
||||
{% enddisclosure %}
|
||||
- Hiding spoilers, like in my {{ cite "Cassette Beasts" }} shrine article, ["How Cassette Beasts is Much More than a Pokémon Clone"](/shrines/cassettebeasts/articles/cassette-beasts-more-than-a-pokemon-clone/)
|
||||
- Content warnings, like in my [{{ cite "A Summer’s End — Hong Kong 1986" }} shrine's gallery page](/shrines/asummersend/gallery/), with its styling being inspired by another Kitty Giraudel's blog post, ["A content warning component"](https://kittygiraudel.com/2022/09/04/a-content-warning-component/)
|
||||
{{ enddisclosure }}
|
||||
|
||||
As for citing sources, the simplest way would be naming and linking to the source in the main text of your page, though it does mean you may end up repeating the title of the source if you want to attribute to it more than once on your page. This was once the approach of my shrine pages, though I found the pages looked rather cluttered, so I eventually chose to use markdown-it-footnote alongside Eleventy.
|
||||
|
||||
@ -332,4 +332,4 @@ module.exports = function (eleventyConfig) {
|
||||
/* This is the part that tells 11ty to swap to our custom config */
|
||||
eleventyConfig.setLibrary("md", markdownLibrary);
|
||||
}
|
||||
```
|
||||
```
|
||||
|
@ -7,19 +7,19 @@ categories: ["harry potter", "jk rowling"]
|
||||
toc: true
|
||||
---
|
||||
|
||||
{% imgFigure "/assets/banners/harry-potter-free-site.png", "An anime girl crossing arms with a sidelong look and a Harry Potter-free message" %}
|
||||
{{ imgFigure "/assets/banners/harry-potter-free-site.png", "An anime girl crossing arms with a sidelong look and a Harry Potter-free message" }}
|
||||
This site is Harry Potter free. Lookin [<i>sic</i>] for it? Leave.
|
||||
{% endimgFigure %}
|
||||
{{ endimgFigure }}
|
||||
|
||||
(Credit to Tumblr user [comradesaucegay](https://comradesaucegay.tumblr.com/post/621403039459426304) ([archived](https://web.archive.org/web/20241122135107/https://comradesaucegay.tumblr.com/post/621403039459426304/grumpsaesthetics-you-know-those-old-hentai-free)) for this Harry Potter-free website banner){.center-text}
|
||||
|
||||
Like many Millennials, I grew up with the {% cite "Harry Potter" %} series and was a major fan of the series. I had read the original 7 books and watched their film adaptations. The series was a passion of mine during my early- to mid-teen years. While the {% cite "Harry Potter" %} novels were far from the first books I read, they were the first fantasy novels I read, and the series’ concept of a magical world set in a contemporary setting fascinated teenage me.
|
||||
Like many Millennials, I grew up with the {{ cite "Harry Potter" }} series and was a major fan of the series. I had read the original 7 books and watched their film adaptations. The series was a passion of mine during my early- to mid-teen years. While the {{ cite "Harry Potter" }} novels were far from the first books I read, they were the first fantasy novels I read, and the series’ concept of a magical world set in a contemporary setting fascinated teenage me.
|
||||
|
||||
However, even during my {% cite "Harry Potter" %} fixation years, there were things from the series that bothered me, from the idea of house elves being a slave race that naturally love being slaves, to Snape’s unconvincing “redemption” arc. As I got older and became more aware of social issues, I started to notice more problems with the series. In addition, reading more books has also made me realise that even on a technical writing level, the {% cite "Harry Potter" %} series was mediocre at best. As a result, I had stopped becoming a {% cite "Harry Potter" %} fan even before J. K. Rowling’s anti-trans sentiments got mainstream attention.
|
||||
However, even during my {{ cite "Harry Potter" }} fixation years, there were things from the series that bothered me, from the idea of house elves being a slave race that naturally love being slaves, to Snape’s unconvincing “redemption” arc. As I got older and became more aware of social issues, I started to notice more problems with the series. In addition, reading more books has also made me realise that even on a technical writing level, the {{ cite "Harry Potter" }} series was mediocre at best. As a result, I had stopped becoming a {{ cite "Harry Potter" }} fan even before J. K. Rowling’s anti-trans sentiments got mainstream attention.
|
||||
|
||||
Unfortunately, many adults with nostalgia goggles still refuse to let go of {% cite "Harry Potter" %}, and they believe {% cite "Harry Potter" %} can be separated or “reclaimed” by J. K. Rowling, despite how much Rowling’s worldview and prejudice are inextricably linked to her writing.
|
||||
Unfortunately, many adults with nostalgia goggles still refuse to let go of {{ cite "Harry Potter" }}, and they believe {{ cite "Harry Potter" }} can be separated or “reclaimed” by J. K. Rowling, despite how much Rowling’s worldview and prejudice are inextricably linked to her writing.
|
||||
|
||||
Therefore, I am compiling this masterlist by curating various materials that are critical of the {% cite "Harry Potter" %} series and J. K. Rowling. Items are ordered in chronological order. This is far from a comprehensive list of all the pieces that criticise {% cite "Harry Potter" %} and Rowling; this list is my curated list of ones that I have read, watched or listened to, and I personally endorse.
|
||||
Therefore, I am compiling this masterlist by curating various materials that are critical of the {{ cite "Harry Potter" }} series and J. K. Rowling. Items are ordered in chronological order. This is far from a comprehensive list of all the pieces that criticise {{ cite "Harry Potter" }} and Rowling; this list is my curated list of ones that I have read, watched or listened to, and I personally endorse.
|
||||
|
||||
## Articles
|
||||
|
||||
@ -55,4 +55,4 @@ Therefore, I am compiling this masterlist by curating various materials that are
|
||||
|
||||
* [The Shrieking Shack](https://soundcloud.com/shriekingshack), hosted by Xeecee and Liz
|
||||
|
||||
A book reading podcast that originally started out as a {% cite "Harry Potter" %} reread podcast made by and for lapsed fans that goes through every chapter of the {% cite "Harry Potter" %} books and their film adaptations and analyses the writing and politics of the series and J. K. Rowling.{.item-list__indent}
|
||||
A book reading podcast that originally started out as a {{ cite "Harry Potter" }} reread podcast made by and for lapsed fans that goes through every chapter of the {{ cite "Harry Potter" }} books and their film adaptations and analyses the writing and politics of the series and J. K. Rowling.{.item-list__indent}
|
||||
|
@ -13,7 +13,7 @@ I first encountered this term from [Tumblr user desolationlesbian's post](https:
|
||||
>
|
||||
> Most common with works that have little-to-no narratively important women, but in rare cases can even happen to major and complex characters who are then reduced to token background lesbians as everyone hones in on the boys.
|
||||
|
||||
The example I am most familiar with is the fandom of Grand Admiral Thrawn and the Chiss from {% cite "Star Wars" %} — specifically, some shippers of Thrawn/Eli Vanto, also known as Thranto, pair Ar'alani and Karyn Faro as their token "pair-the-spares" femslash ship. However, while Thranto shippers have create fan content about the Ar'alani/Karyn Faro ship, they do not do it with even a fraction of the interest and enthusiasm as they do Thranto. This is evident in the difference between the amount of fan works these two pairings have received on Archive On Our Own (AO3): as of this writing, the [Thrawn | Mitth'raw'nuruodo/Eli Vanto](https://archiveofourown.org/tags/Thrawn%20%7C%20Mitth'raw'nuruodo*s*Eli%20Vanto/works) tag contains 1,358 works, while the [Ar'alani/Karyn Faro](https://archiveofourown.org/tags/Ar'alani*s*Karyn%20Faro/works) tag contains 34 works only. It is also worth noting that if you use the tag page's filter function, you will notice that out of these 34 Ar'alani/Faro works, 23 of them are also tagged with Thrawn/Eli Vanto, proving the significant overlap between Thranto and Ar'alani/Faro shippers.
|
||||
The example I am most familiar with is the fandom of Grand Admiral Thrawn and the Chiss from {{ cite "Star Wars" }} — specifically, some shippers of Thrawn/Eli Vanto, also known as Thranto, pair Ar'alani and Karyn Faro as their token "pair-the-spares" femslash ship. However, while Thranto shippers have create fan content about the Ar'alani/Karyn Faro ship, they do not do it with even a fraction of the interest and enthusiasm as they do Thranto. This is evident in the difference between the amount of fan works these two pairings have received on Archive On Our Own (AO3): as of this writing, the [Thrawn | Mitth'raw'nuruodo/Eli Vanto](https://archiveofourown.org/tags/Thrawn%20%7C%20Mitth'raw'nuruodo*s*Eli%20Vanto/works) tag contains 1,358 works, while the [Ar'alani/Karyn Faro](https://archiveofourown.org/tags/Ar'alani*s*Karyn%20Faro/works) tag contains 34 works only. It is also worth noting that if you use the tag page's filter function, you will notice that out of these 34 Ar'alani/Faro works, 23 of them are also tagged with Thrawn/Eli Vanto, proving the significant overlap between Thranto and Ar'alani/Faro shippers.
|
||||
|
||||
Part of the Designated Lesbian Syndrome also involves shippers headcanonning the female characters who could be considered "threats" to their favourite ship that involved male characters as lesbians. It does not matter if the female characters are actually romantically involved with the male characters' in the source material or not. Thrawn never has a canon love interest in both Legends and the Disney continuities, but the fact that Ar'alani and Faro are close to Thrawn as his long-time friend and protégée respectively is enough to make them the go-to candidates for lesbian headcanons from shippers who ship Thrawn with anyone else. Lesbian Ar'alani and Faro headcanons are most common among Thrawn/Eli shippers, but I had seen at least one Thrawn/Governor Pryce (a pairing that I cannot stand at all) shipper literally headcanons Ar'alani as a lesbian so Pryce does not need to worry about Ar'alani fighting with Pryce over Thrawn.
|
||||
|
||||
|
@ -12,8 +12,8 @@ I feel that the older I get, the less interested I am in shipping in general, an
|
||||
|
||||
I have also come to actually dislike shipping culture, especially the mindset of engaging with media primarily through a shipping lens at the expense of the characterisation, non-romantic relationships, themes, and general content of a piece of media. Throughout my years of experience with various fandoms, I have witnessed so many incredible characters and non-romantic relationships get ignored or underappreciated by the fandom because they’re not part of a popular ship. On the other hand, there are also many amazing characters get mischaracterised to make a fanon ship work, or get reduced to a handful of tropes as shippers Flanderise them in their shipping fan works.
|
||||
|
||||
Do not even get me started on the shippers who will complain about not being able to enjoy a piece of media just because “there’s no couple to ship”. For example, I’ve literally seen people on Tumblr make such complaints about the film {% cite "Parasite" %}, as if a profound piece of art that brutally critiques the class system does not matter if it does not provide any shipping material. It’s honestly very infuriating to see shippers like these are so willing to ignore art with meaningful story, characters and themes just because it lacks shipping fodder for them to project fanon onto.
|
||||
Do not even get me started on the shippers who will complain about not being able to enjoy a piece of media just because “there’s no couple to ship”. For example, I’ve literally seen people on Tumblr make such complaints about the film {{ cite "Parasite" }}, as if a profound piece of art that brutally critiques the class system does not matter if it does not provide any shipping material. It’s honestly very infuriating to see shippers like these are so willing to ignore art with meaningful story, characters and themes just because it lacks shipping fodder for them to project fanon onto.
|
||||
|
||||
Speaking of fanon, I really hate it when shippers, particularly shippers of popular non-canon pairings, expect anyone who is a fan of the same piece of media or any of the characters involved in the pairing to care about ships and treat the popular fanon ships as canon. These shippers also tend to act like their fanon and headcanons are universal, using languages like “the fandom has decided–” and “everyone has agreed that–”. And these shippers wonder why others who do not engage with that piece of media for shipping get sick and tired of shipping taking over discussions about said piece of media.
|
||||
|
||||
If you are so invested in shipping to the point that you are willing to disregard a piece of media just because you cannot find anything to ship, or you treat it as a personal attack when people talk about being sick and tired of shipping culture as well as how shipping dominates discussions about a piece of media, maybe you need to consider taking a step back from shipping and learning to take your shipping goggles off when you interact with a piece of media.
|
||||
If you are so invested in shipping to the point that you are willing to disregard a piece of media just because you cannot find anything to ship, or you treat it as a personal attack when people talk about being sick and tired of shipping culture as well as how shipping dominates discussions about a piece of media, maybe you need to consider taking a step back from shipping and learning to take your shipping goggles off when you interact with a piece of media.
|
||||
|
3
src/blog/blog.11tydata.js
Normal file
3
src/blog/blog.11tydata.js
Normal file
@ -0,0 +1,3 @@
|
||||
export default {
|
||||
layout: "layouts/main",
|
||||
}
|
@ -1,31 +1,30 @@
|
||||
---
|
||||
title: Blog Archive
|
||||
layout: main/content
|
||||
tags: blog pages
|
||||
eleventyComputed:
|
||||
desc: Archive of blog posts on {{ sitemeta.siteName | safe }}
|
||||
desc: Archive of blog posts on {{ sitemeta.siteName }}
|
||||
eleventyNavigation:
|
||||
key: Blog Archive
|
||||
parent: Blog
|
||||
---
|
||||
|
||||
<ul class="blog__postlist">
|
||||
{% for post in collections.posts | reverse %}
|
||||
{{ for post of collections.posts |> toReversed }}
|
||||
<li class="blog__postlist--item">
|
||||
<h2 class="blog__postlist--title">
|
||||
<a href="{{ post.url }}">
|
||||
{% if post.data.title %}{{ post.data.articleTitle }}
|
||||
{% else %}
|
||||
{{ if post.data.title }}{{ post.data.articleTitle }}
|
||||
{{ else }}
|
||||
<code>{{ post.url }}</code>
|
||||
{% endif %}
|
||||
{{ /if }}
|
||||
</a>
|
||||
</h2>
|
||||
<time datetime="{{ post.date }}">{{ post.date | formatDate }}</time>
|
||||
<time datetime="{{ post.date }}">{{ post.date |> formatDate }}</time>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{{ /for }}
|
||||
</ul>
|
||||
|
||||
{%- css %}
|
||||
{{- css }}
|
||||
.blog__postlist {
|
||||
display: grid;
|
||||
gap: 1em;
|
||||
@ -37,4 +36,4 @@ eleventyNavigation:
|
||||
line-height: 1.3;
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
{% endcss %}
|
||||
{{ /css }}
|
@ -5,19 +5,19 @@ date: 2024-04-27T14:06:00+0800
|
||||
categories: ["lesbian", "cassette beasts"]
|
||||
---
|
||||
|
||||
26 April 2024 was a day of celebration for me, as it was both Lesbian Visibility Day and the [first anniversary of the release of {% cite "Cassette Beasts" %}](https://store.steampowered.com/news/app/1321440/view/4179979397366287532), my all-time favourite video game.
|
||||
26 April 2024 was a day of celebration for me, as it was both Lesbian Visibility Day and the [first anniversary of the release of {{ cite "Cassette Beasts" }}](https://store.steampowered.com/news/app/1321440/view/4179979397366287532), my all-time favourite video game.
|
||||
|
||||
As a lesbian, [Lesbian Visibility Day and Lesbian Visibility Week](https://en.wikipedia.org/wiki/Lesbian_Visibility_Week) are an important annual event, as there can never be enough lesbians nor love for lesbians. It had been about 8 years ago when I finally realised I was a lesbian, and I am still happy and proud to be a lesbian.
|
||||
|
||||
Meanwhile, {% cite "Cassette Beasts" %} has become my all-time favourite video game ever since I started playing it in July 2023, to the extent I had created a [shrine](/shrines/cassettebeasts/) for the game on my own website. There are no words adequate to describe the depth of my love for {% cite "Cassette Beasts" %}.
|
||||
Meanwhile, {{ cite "Cassette Beasts" }} has become my all-time favourite video game ever since I started playing it in July 2023, to the extent I had created a [shrine](/shrines/cassettebeasts/) for the game on my own website. There are no words adequate to describe the depth of my love for {{ cite "Cassette Beasts" }}.
|
||||
|
||||
As a lesbian fan of {% cite "Cassette Beasts" %}, I am also absolutely delighted by the fact that the initial release date of {% cite "Cassette Beasts" %} coincided with Lesbian Visibility Day on April 26. For bonus points, {% cite "Cassette Beasts" %} features not only LGBTQ+ representation in both the main and supporting cast, but also an actual canon old married lesbian couple in the supporting characters Ianthe and Wilma.
|
||||
As a lesbian fan of {{ cite "Cassette Beasts" }}, I am also absolutely delighted by the fact that the initial release date of {{ cite "Cassette Beasts" }} coincided with Lesbian Visibility Day on April 26. For bonus points, {{ cite "Cassette Beasts" }} features not only LGBTQ+ representation in both the main and supporting cast, but also an actual canon old married lesbian couple in the supporting characters Ianthe and Wilma.
|
||||
|
||||
To celebrate both Lesbian Visibility Day and the 1-year anniversary of {% cite "Cassette Beasts" %}' release, I made lesbian pride icons featuring the {% cite "Cassette Beasts" %} logo as well as Ianthe and Wilma both individually and together, and shared them on social media accounts, including [Tumblr](https://lesbiannova.tumblr.com/post/748826429723148288), [Twitter](https://twitter.com/Leilukin/status/1783736715641024828), [Mastodon](https://elekk.xyz/@leilukin/112336010189257467) and [Bluesky](https://bsky.app/profile/leilukin.bsky.social/post/3kqzahri66x2x). I had also shared them in the [official Bytten Studio Discord server](https://discord.gg/byttenstudio).
|
||||
To celebrate both Lesbian Visibility Day and the 1-year anniversary of {{ cite "Cassette Beasts" }}' release, I made lesbian pride icons featuring the {{ cite "Cassette Beasts" }} logo as well as Ianthe and Wilma both individually and together, and shared them on social media accounts, including [Tumblr](https://lesbiannova.tumblr.com/post/748826429723148288), [Twitter](https://twitter.com/Leilukin/status/1783736715641024828), [Mastodon](https://elekk.xyz/@leilukin/112336010189257467) and [Bluesky](https://bsky.app/profile/leilukin.bsky.social/post/3kqzahri66x2x). I had also shared them in the [official Bytten Studio Discord server](https://discord.gg/byttenstudio).
|
||||
|
||||
<div class="tumblr-post" data-href="https://embed.tumblr.com/embed/post/t:7iNKXlbr-xwxyjZTq8C8hQ/748826429723148288/v2" data-did="6dbdfd5b616fdd82f7aabd63e6a1aae35b467d73" ><a href="https://www.tumblr.com/lesbiannova/748826429723148288/happy-lesbian-visibility-day-and-happy-birthday">https://www.tumblr.com/lesbiannova/748826429723148288/happy-lesbian-visibility-day-and-happy-birthday</a></div><script async src="https://assets.tumblr.com/post.js?_v=38df9a6ca7436e6ca1b851b0543b9f51"></script>
|
||||
|
||||
My {% cite "Cassette Beasts" %} lesbian pride icons have been well-received, by not only other fans of the game, but also the developer Bytten Studio themselves. On Twitter, Bytten Studio not only retweeted, but also replied to my icons.
|
||||
My {{ cite "Cassette Beasts" }} lesbian pride icons have been well-received, by not only other fans of the game, but also the developer Bytten Studio themselves. On Twitter, Bytten Studio not only retweeted, but also replied to my icons.
|
||||
|
||||

|
||||
|
||||
@ -35,6 +35,6 @@ Furthermore, I had set up my website's header to display the lesbian pride flag
|
||||
|
||||
In conclusion, this had been an exciting day for me as a lesbian gaymer.
|
||||
|
||||
On a somewhat related note, I love the fact that this week is not only [Lesbian Visibility Week](https://www.lesbianvisibilityweek.com/), but also has two of my all-time favourite games, {% cite "Cassette Beasts" %} and {% cite "A Summer’s End — Hong Kong 1986" %} (which I had also created a [shrine](/shrines/asummersend) for), both of which happen to feature lesbian representation, celebrating their release anniversaries.
|
||||
On a somewhat related note, I love the fact that this week is not only [Lesbian Visibility Week](https://www.lesbianvisibilityweek.com/), but also has two of my all-time favourite games, {{ cite "Cassette Beasts" }} and {{ cite "A Summer’s End — Hong Kong 1986" }} (which I had also created a [shrine](/shrines/asummersend) for), both of which happen to feature lesbian representation, celebrating their release anniversaries.
|
||||
|
||||
**Happy Lesbian Visibility Day and Happy Birthday to {% cite "Cassette Beasts" %}!**
|
||||
**Happy Lesbian Visibility Day and Happy Birthday to {{ cite "Cassette Beasts" }}!**
|
||||
|
@ -10,9 +10,9 @@ It has been five months since Hbomberguy released his ["Plagiarism and You(Tube)
|
||||
|
||||
On 5 November 2021, James Somerton released a video essay on his YouTube channel titled "Video Games and the Choice to be Gay". As of this writing, the video has been made private, but Somerton's videos have been archived on the Internet Archive with two playlists: [James Somerton youtube archive](https://archive.org/details/james-somerton-youtube-2023-12-03/) and [James Somerton- Public Records](https://archive.org/details/james-somerton-public-records), so you can still watch "Video Games and the Choice to be Gay" directly on the Internet Archive in both the [Youtube archive](https://archive.org/download/james-somerton-youtube-2023-12-03/20211105%20TQNKEkrPEfI%20Video%20Games%20and%20the%20Choice%20to%20be%20Gay.mp4) and the [Public Records](https://archive.org/download/james-somerton-public-records/Video%20Games%20and%20the%20Choice%20to%20be%20Gay.ia.mp4) playlists. Alternately, you can watch the video through one of the [Wayback Machine snapshots](https://web.archive.org/web/20230000000000*/https://www.youtube.com/watch?v=TQNKEkrPEfI).
|
||||
|
||||
I first discovered "Video Games and the Choice to be Gay" through a {% cite "Dragon Age" %} fan blog on Tumblr shortly after the video was published. The video piqued my interest because LGBTQ+ representation in video games is relevant to me as a queer, non-binary lesbian gamer, and the video games discussed in Somerton's video included {% cite "Star Wars: Knights of the Old Republic" %}, {% cite "Dragon Age" %} and {% cite "Mass Effect" %}, which was also relevant to me since I used to be a huge fan of BioWare games. As a result, "Video Games and the Choice to be Gay" ended up being the first and only James Somerton video I have actually watched.
|
||||
I first discovered "Video Games and the Choice to be Gay" through a {{ cite "Dragon Age" }} fan blog on Tumblr shortly after the video was published. The video piqued my interest because LGBTQ+ representation in video games is relevant to me as a queer, non-binary lesbian gamer, and the video games discussed in Somerton's video included {{ cite "Star Wars: Knights of the Old Republic" }}, {{ cite "Dragon Age" }} and {{ cite "Mass Effect" }}, which was also relevant to me since I used to be a huge fan of BioWare games. As a result, "Video Games and the Choice to be Gay" ended up being the first and only James Somerton video I have actually watched.
|
||||
|
||||
Before finished watching it, one thing from "Video Games and the Choice to be Gay" that caught my attention was when Somerton talked about Juhani from {% cite "Star Wars: Knights of the Old Republic" %}, who was the very first confirmed gay and lesbian character from both BioWare games and the entire {% cite "Star Wars" %} franchise, including the old Expended Universe, one of the {% cite "Knights of the Old Republic" %} ({% cite "KotOR" %}) footage shown on screen in the video included one of my {% cite "KotOR" %} footage about Juhani and her romance with the female player character.
|
||||
Before finished watching it, one thing from "Video Games and the Choice to be Gay" that caught my attention was when Somerton talked about Juhani from {{ cite "Star Wars: Knights of the Old Republic" }}, who was the very first confirmed gay and lesbian character from both BioWare games and the entire {{ cite "Star Wars" }} franchise, including the old Expended Universe, one of the {{ cite "Knights of the Old Republic" }} ({{ cite "KotOR" }}) footage shown on screen in the video included one of my {{ cite "KotOR" }} footage about Juhani and her romance with the female player character.
|
||||
|
||||
Specifically, the clip from Somerton's video at the timestamp from 12:09 to 12:13 was actually from my [5 March 2016 video footage of Juhani's love confession](https://www.youtube.com/watch?v=oFQDmmRUx4E) with the [Juhani Romance Enhancement mod](https://deadlystream.com/files/file/772-juhani-romance-enhancement/), specifically at the timestamp [0:10](https://www.youtube.com/watch?v=oFQDmmRUx4E&t=10s) to [0:16](https://www.youtube.com/watch?v=oFQDmmRUx4E&t=16s).
|
||||
|
||||
@ -31,7 +31,7 @@ Here is a back-to-back comparison between the clips from my original footage and
|
||||
|
||||
I immediately recognised my clip through the appearance of the female player character and her outfit, which was from the [Segan Wyndh Jedi Armor mod](https://deadlystream.com/files/file/90-segan-wyndh-jedi-armor/). Furthermore, there are not many videos about Juhani's romance out there, so the player character's appearance, which can vary depending on how the player customises their character in the character creator or with mods, in Somerton's video only stood out to me even more. My footage of Juhani's love confession was part of my [Juhani romance and conversation video series](https://www.youtube.com/playlist?list=PL5z8DZr8LSLHZkdhBxGadvvaHlolKa-Vd), to compliment my [Juhani romance guide](/shrines/starwarskotor/guides/kotor-juhani-romance-guide/), which I am still proud to say is *the* most comprehensive guide about Juhani's romance on the internet.
|
||||
|
||||
To be honest, even back then, I was already a little disappointed that James Somerton used my footage in his video without a single word about the clip's source, both in the video itself and the video description, nor had Somerton ever reached out to me about using my footage in his video (on a related note, Somerton and I never had any direct interactions). I do not own the intellectual property of {% cite "Star Wars" %} or {% cite "KotOR" %}, but capturing video game footage requires one to actually play through the game, which takes time, especially role-playing games like {% cite "KotOR" %}. In addition, I had spent a great deal of effort on promoting Juhani's romance, including writing a guide and recording video footage about it because Juhani's romance is also infamous for being buggy and tricky to successfully complete, to the extent many {% cite "KotOR" %} fans were not even aware that Juhani can actually be romanced by the (female) player character.
|
||||
To be honest, even back then, I was already a little disappointed that James Somerton used my footage in his video without a single word about the clip's source, both in the video itself and the video description, nor had Somerton ever reached out to me about using my footage in his video (on a related note, Somerton and I never had any direct interactions). I do not own the intellectual property of {{ cite "Star Wars" }} or {{ cite "KotOR" }}, but capturing video game footage requires one to actually play through the game, which takes time, especially role-playing games like {{ cite "KotOR" }}. In addition, I had spent a great deal of effort on promoting Juhani's romance, including writing a guide and recording video footage about it because Juhani's romance is also infamous for being buggy and tricky to successfully complete, to the extent many {{ cite "KotOR" }} fans were not even aware that Juhani can actually be romanced by the (female) player character.
|
||||
|
||||
However, I did not dare to say a word about Somerton's usage of my Juhani romance footage, because Somerton was already a fairly popular YouTuber with 138K subscribers by the time the video was released (at least according to the [Wayback Machine snapshot of the video on 5 November 2021](https://web.archive.org/web/20211105165815/https://www.youtube.com/watch?v=TQNKEkrPEfI)), while I do not even consider myself a YouTuber, since [my YouTube channel](https://www.youtube.com/Leilukin) only consists of video game footage I recorded myself without commentary. I did not bring up Somerton's usage of my Juhani romance footage because I did not want to come across as trying to start a drama or gain attention. I also tried to look at the positives by considering it an honour that at least my Juhani romance videos get noticed by a popular YouTuber.
|
||||
|
||||
@ -40,7 +40,7 @@ As for Somerton's "Video Games and the Choice to be Gay" video itself, my initia
|
||||
>
|
||||
> I also strongly agree with him about the importance of us LGBTQ+ gamers supporting indie queer developers and their work, instead of relying on mainstream video games (and mainstream media in general) for queer representation.
|
||||
|
||||
That said, I did not bring up the fact that Somerton used my {% cite "KotOR" %} footage to my friend back then.
|
||||
That said, I did not bring up the fact that Somerton used my {{ cite "KotOR" }} footage to my friend back then.
|
||||
|
||||
As mentioned above, "Video Games and the Choice to be Gay" was the first and only James Somerton video I have ever watched. I did not subscribe to Somerton's channel, nor did I have the time nor enough interest to watch any other Somerton's videos. No YouTubers I followed referenced Somerton's videos or were associated with him, and no one in my social media circles talked about him either. Therefore, after watching "Video Games and the Choice to be Gay" in November 2021, Somerton simply went off of my radar until his plagiarism scandal broke out two years later in December 2023.
|
||||
|
||||
@ -54,4 +54,4 @@ The final push for me to write this post, was seeing Verity crediting the source
|
||||
|
||||
I do not expect anything from writing this post. James Somerton has destroyed his own reputation and internet career at this point without my help, so I merely just want to get Somerton's uncredited usage of my video game footage off my chest after being hesitant to bring it up since 2021.
|
||||
|
||||
*(**Update, 17 May 2024:** Re-uploaded my comparison video for better quality, and updated the links to Somerton's video on the Internet Archive)*
|
||||
*(**Update, 17 May 2024:** Re-uploaded my comparison video for better quality, and updated the links to Somerton's video on the Internet Archive)*
|
||||
|
@ -7,7 +7,7 @@ categories: ["site updates"]
|
||||
|
||||
On 4 May 2024, the guestbook service 123Guestbook announced that [their service would be closed on 1 July 2024](https://web.archive.org/web/20240504201300/https://www.123guestbook.com/news.php?id=closure).
|
||||
|
||||
I created an account on 123Guestbook and started using it as Leilukin's Hub's guestbook since 25 July 2023. When my 123Guestbook guestbook was open, I received multiple nice messages expressing appreciation for my website and work, including my [{% cite "Cassette Beasts" %} shrine](/shrines/cassettebeasts) and my [{% cite "A Summer’s End — Hong Kong 1986" %} shrine](/shrines/asummersend) and [Steam review](../2023-10-30-support-for-my-steam-review-of-a-summers-end), so I am sad to see 123Guestbook go. 123Guestbook has been around since 2005, so its closure is a sad reminder that you cannot predict when your favourite website might be gone.
|
||||
I created an account on 123Guestbook and started using it as Leilukin's Hub's guestbook since 25 July 2023. When my 123Guestbook guestbook was open, I received multiple nice messages expressing appreciation for my website and work, including my [{{ cite "Cassette Beasts" }} shrine](/shrines/cassettebeasts) and my [{{ cite "A Summer’s End — Hong Kong 1986" }} shrine](/shrines/asummersend) and [Steam review](../2023-10-30-support-for-my-steam-review-of-a-summers-end), so I am sad to see 123Guestbook go. 123Guestbook has been around since 2005, so its closure is a sad reminder that you cannot predict when your favourite website might be gone.
|
||||
|
||||
In light of 123Guestbook's closure, I have disabled the function to add new messages to Leilukin's Hub's previous guestbook at 123Guestbook, and archived the old guestbook at the [Internet Archive](https://web.archive.org/web/20240528231121/https%3A%2F%2Fleilukin.123guestbook.com%2F) and [archive.today](https://archive.ph/9mtpl).
|
||||
|
||||
|
@ -11,7 +11,7 @@ Major news: Leilukin's Hub has a custom domain name: leilukin.com! In addition,
|
||||
|
||||
## Moving Beyond Neocities
|
||||
|
||||
Leilukin's Hub has grown significantly since its launch on Neocities in September 2022, not just in how many pages it has, but also the fact that the site includes various resources I have shared across the internet (most notably, some of my {% cite "Star Wars: Knights of the Old Republic" %} [articles](/shrines/starwarskotor/articles) and [guides](/shrines/starwarskotor/guides)).
|
||||
Leilukin's Hub has grown significantly since its launch on Neocities in September 2022, not just in how many pages it has, but also the fact that the site includes various resources I have shared across the internet (most notably, some of my {{ cite "Star Wars: Knights of the Old Republic" }} [articles](/shrines/starwarskotor/articles) and [guides](/shrines/starwarskotor/guides)).
|
||||
|
||||
Furthermore, web development has become more than a hobby to me — after starting to build my own website and relearning HTML and CSS, my interest in web development has grown enough to the point I started taking online web development courses and aspiring to become a serious web developer, by taking online courses on platforms such as freeCodeCamp and Scrimba. While Leilukin's Hub is still a hobby website, I have been using this site to practice and grow my web development skills, including using a static site generator, namely Eleventy, to [rebuild and overhaul this site in April 2024](/blog/posts/2024-04-21-april-2024-leilukins-hub-overhaul-with-eleventy).
|
||||
|
||||
|
@ -5,17 +5,17 @@ date: 2024-06-24T13:23:00+0800
|
||||
categories: ["cassette beasts", "site updates"]
|
||||
---
|
||||
|
||||
On 22 June 2024, I submitted an [application form](https://thefanlistings.org/start/apply.php) to [The Fanlistings Network](https://thefanlistings.org/), also known as TFL.org, to build and run a {% cite "Cassette Beasts" %} fanlisting, and now TFL.org has approved my application! {% cite "Cassette Beasts" %} is now on TFL.org's approved list under the Games category and the [Computer, Console, & Video Games subcategory](https://www.thefanlistings.org/browse.php?show=games&start=8) ([view the web archive version](https://web.archive.org/web/20240624045621/https%3A%2F%2Fwww.thefanlistings.org%2Fbrowse.php%3Fshow%3Dgames%26start%3D8)).
|
||||
On 22 June 2024, I submitted an [application form](https://thefanlistings.org/start/apply.php) to [The Fanlistings Network](https://thefanlistings.org/), also known as TFL.org, to build and run a {{ cite "Cassette Beasts" }} fanlisting, and now TFL.org has approved my application! {{ cite "Cassette Beasts" }} is now on TFL.org's approved list under the Games category and the [Computer, Console, & Video Games subcategory](https://www.thefanlistings.org/browse.php?show=games&start=8) ([view the web archive version](https://web.archive.org/web/20240624045621/https%3A%2F%2Fwww.thefanlistings.org%2Fbrowse.php%3Fshow%3Dgames%26start%3D8)).
|
||||
|
||||
{% disclosure "What is a fanlisting?" %}
|
||||
{{ disclosure "What is a fanlisting?" }}
|
||||
For those who do not know what a fanlisting is, TFL.org has defined fanslitings as below:
|
||||
> A fanlisting is simply an online listing of fans of a subject, such as a TV show, actor, or musician, that is created by an individual and open for fans from around the world to join. There are no costs, and the only requirements to join a fanlisting are your name and country. Fanlistings do not have to be large sites (although some are) - they are just a place where you can have your name listed along with other fans of the same subject. TheFanlistings.org is the original (but not only) web directory for fanlistings, dedicated to uniting fans across the globe.
|
||||
{% enddisclosure %}
|
||||
{{ enddisclosure }}
|
||||
|
||||
This is a major moment for me as both a webmaster and a {% cite "Cassette Beasts" %} fan. As a webmaster, I have been applying and joining fanlistings since I built my own website, as I have always found fanlistings a neat idea to gather and discover other people who share your interests across the world, as listing your country is a requirement when you apply to join a fanlisting. Recently, I have been considering building and running a fanlisting myself, with {% cite "Cassette Beasts" %} being my first choice since there is no fanlisting for {% cite "Cassette Beasts" %} yet. I began to dabble in PHP, so I can use a script like [BellaBuffs](https://www.jemjabella.co.uk/scripts/bellabuffs/) to build a fanlisting. With my application approved by The Fanlistings Network, the {% cite "Cassette Beasts" %} fanlisting will be the first fanlisting I build and run.
|
||||
This is a major moment for me as both a webmaster and a {{ cite "Cassette Beasts" }} fan. As a webmaster, I have been applying and joining fanlistings since I built my own website, as I have always found fanlistings a neat idea to gather and discover other people who share your interests across the world, as listing your country is a requirement when you apply to join a fanlisting. Recently, I have been considering building and running a fanlisting myself, with {{ cite "Cassette Beasts" }} being my first choice since there is no fanlisting for {{ cite "Cassette Beasts" }} yet. I began to dabble in PHP, so I can use a script like [BellaBuffs](https://www.jemjabella.co.uk/scripts/bellabuffs/) to build a fanlisting. With my application approved by The Fanlistings Network, the {{ cite "Cassette Beasts" }} fanlisting will be the first fanlisting I build and run.
|
||||
|
||||
{% cite "Cassette Beasts" %} has become my favourite video game ever since I started playing it in July 2023, to the extent that not only I have a [{% cite "Cassette Beasts" %} shrine](/shrines/cassettebeasts) on my website, I had already begun to consider creating the shrine even before beating the main campaign. I have also been tirelessly recommending the game throughout various online spaces. Therefore, I am honoured to be given this opportunity to build and run a fanlisting for {% cite "Cassette Beasts" %} that is approved by The Fanlistings Network, to add to my ongoing effort to boost the game's visibility.
|
||||
{{ cite "Cassette Beasts" }} has become my favourite video game ever since I started playing it in July 2023, to the extent that not only I have a [{{ cite "Cassette Beasts" }} shrine](/shrines/cassettebeasts) on my website, I had already begun to consider creating the shrine even before beating the main campaign. I have also been tirelessly recommending the game throughout various online spaces. Therefore, I am honoured to be given this opportunity to build and run a fanlisting for {{ cite "Cassette Beasts" }} that is approved by The Fanlistings Network, to add to my ongoing effort to boost the game's visibility.
|
||||
|
||||
The {% cite "Cassette Beasts" %} fanlisting is not ready yet at this moment, especially since I was not certain if The Fanlistings Network would approve my application, but now with their approval, I am going to work on building the {% cite "Cassette Beasts" %} fanlisting. TFL.org has a [rule](https://thefanlistings.org/start/rules.php) that fanlisting owners need to complete their fanlisting within four weeks, so stay tuned for upcoming updates for my {% cite "Cassette Beasts" %} fanlisting!
|
||||
The {{ cite "Cassette Beasts" }} fanlisting is not ready yet at this moment, especially since I was not certain if The Fanlistings Network would approve my application, but now with their approval, I am going to work on building the {{ cite "Cassette Beasts" }} fanlisting. TFL.org has a [rule](https://thefanlistings.org/start/rules.php) that fanlisting owners need to complete their fanlisting within four weeks, so stay tuned for upcoming updates for my {{ cite "Cassette Beasts" }} fanlisting!
|
||||
|
||||
Now that I will be running my own fanlisting, I will be also creating a fanlisting collective to gather all fanlistings I own, join and have applied to in one place. Since [Netlify](https://www.netlify.com/), which currently hosts the main site of Leilukin's Hub, does not support PHP, I will be hosting my fanlisting collective, including my {% cite "Cassette Beasts" %} fanlisting, on [InfinityFree](https://www.infinityfree.com/).
|
||||
Now that I will be running my own fanlisting, I will be also creating a fanlisting collective to gather all fanlistings I own, join and have applied to in one place. Since [Netlify](https://www.netlify.com/), which currently hosts the main site of Leilukin's Hub, does not support PHP, I will be hosting my fanlisting collective, including my {{ cite "Cassette Beasts" }} fanlisting, on [InfinityFree](https://www.infinityfree.com/).
|
||||
|
@ -5,34 +5,34 @@ date: 2024-07-02T00:37:00+0800
|
||||
categories: ["cassette beasts", "site updates", "code projects"]
|
||||
---
|
||||
|
||||
I am incredibly excited to announce the official launch of [Land of Confusion](https://fan.leilukin.com/cassettebeasts), [The Fanlistings Network](https://thefanlistings.org/)-approved fanlisting for {% cite "Cassette Beasts" %}, and [Beehive](https://fan.leilukin.com), my fanlisting collective! 🥳
|
||||
I am incredibly excited to announce the official launch of [Land of Confusion](https://fan.leilukin.com/cassettebeasts), [The Fanlistings Network](https://thefanlistings.org/)-approved fanlisting for {{ cite "Cassette Beasts" }}, and [Beehive](https://fan.leilukin.com), my fanlisting collective! 🥳
|
||||
|
||||
If you are a fan of {% cite "Cassette Beasts" %}, feel free to join my fanlisting! If you like fanlistings as well, feel free to check out my fanlisting collective!
|
||||
If you are a fan of {{ cite "Cassette Beasts" }}, feel free to join my fanlisting! If you like fanlistings as well, feel free to check out my fanlisting collective!
|
||||
|
||||
In addition, in light of the launch of my first fanlisting, I am also releasing [my fork of BellaBuffs](/projects/code/bellabuffs-phpmailer), the fanlisting script written in PHP, with integration of [PHPMailer](https://github.com/PHPMailer/PHPMailer), the email sending library!
|
||||
|
||||
My fanlisting collective and {% cite "Cassette Beasts" %} fanlisting are hosted on [InfinityFree](https://www.infinityfree.com/), since [Netlify](https://www.netlify.com/), which currently hosts the main site of Leilukin's Hub, does not support PHP.
|
||||
My fanlisting collective and {{ cite "Cassette Beasts" }} fanlisting are hosted on [InfinityFree](https://www.infinityfree.com/), since [Netlify](https://www.netlify.com/), which currently hosts the main site of Leilukin's Hub, does not support PHP.
|
||||
|
||||
## A Milestone
|
||||
|
||||
In [my previous post](/blog/posts/2024-06-24-cassette-beasts-fanlisting-approved), I announced that The Fanlistings Network (also known as TFL.org) had approved my application for building and running a fanlisting for {% cite "Cassette Beasts" %}.
|
||||
In [my previous post](/blog/posts/2024-06-24-cassette-beasts-fanlisting-approved), I announced that The Fanlistings Network (also known as TFL.org) had approved my application for building and running a fanlisting for {{ cite "Cassette Beasts" }}.
|
||||
|
||||
After completing the {% cite "Cassette Beasts" %} fanlisting on 30 June 2024, I submitted a [finished form](https://thefanlistings.org/finished.php) to TFL.org to let them know that I have finished my fanlisting. The Fanlistings Network responded by emailing me and informing me thatthey have added the URL of my {% cite "Cassette Beasts" %} fanlisting to the list of approved fanlistings under the Games category and the [Computer, Console, & Video Games subcategory](https://www.thefanlistings.org/browse.php?show=games&start=8) ([view the web archive version](https://web.archive.org/web/20240702062715/https://www.thefanlistings.org/browse.php?show=games&start=8)).
|
||||
After completing the {{ cite "Cassette Beasts" }} fanlisting on 30 June 2024, I submitted a [finished form](https://thefanlistings.org/finished.php) to TFL.org to let them know that I have finished my fanlisting. The Fanlistings Network responded by emailing me and informing me thatthey have added the URL of my {{ cite "Cassette Beasts" }} fanlisting to the list of approved fanlistings under the Games category and the [Computer, Console, & Video Games subcategory](https://www.thefanlistings.org/browse.php?show=games&start=8) ([view the web archive version](https://web.archive.org/web/20240702062715/https://www.thefanlistings.org/browse.php?show=games&start=8)).
|
||||
|
||||
|
||||
The launch of my {% cite "Cassette Beasts" %} fanlisting is a major moment for me as both a webmaster and a {% cite "Cassette Beasts" %} fan, as I am enthusiastic about the fact that the very first fanlisting I create would be for my absolute favourite video game.
|
||||
The launch of my {{ cite "Cassette Beasts" }} fanlisting is a major moment for me as both a webmaster and a {{ cite "Cassette Beasts" }} fan, as I am enthusiastic about the fact that the very first fanlisting I create would be for my absolute favourite video game.
|
||||
|
||||
## First Foray in PHP
|
||||
|
||||
My {% cite "Cassette Beasts" %} fanlisting is powered by [BellaBuffs](https://www.jemjabella.co.uk/scripts/bellabuffs/). I was new to PHP when I started considering building fanlistings myself, as my main site Leilukin's Hub is a static site, so building the {% cite "Cassette Beasts" %} fanlisting was my first foray in learning to code in PHP.
|
||||
My {{ cite "Cassette Beasts" }} fanlisting is powered by [BellaBuffs](https://www.jemjabella.co.uk/scripts/bellabuffs/). I was new to PHP when I started considering building fanlistings myself, as my main site Leilukin's Hub is a static site, so building the {{ cite "Cassette Beasts" }} fanlisting was my first foray in learning to code in PHP.
|
||||
|
||||
Before starting to actually work on building the {% cite "Cassette Beasts" %} fanlisting, I tried out [Enthusiast](https://scripts.indisguise.org/enthusiast/), the other commonly used fanlisting script also written in PHP. I tried [Erin's fork of Enthusiast](https://github.com/DudeThatsErin/enth) specifically, since InfinityFree uses version 8.2 of PHP Enthusiast also has extra features that BellaBuffs does not have, including allowing fanlisting members to set passwords and even managing the entire fanlisting collective.
|
||||
Before starting to actually work on building the {{ cite "Cassette Beasts" }} fanlisting, I tried out [Enthusiast](https://scripts.indisguise.org/enthusiast/), the other commonly used fanlisting script also written in PHP. I tried [Erin's fork of Enthusiast](https://github.com/DudeThatsErin/enth) specifically, since InfinityFree uses version 8.2 of PHP Enthusiast also has extra features that BellaBuffs does not have, including allowing fanlisting members to set passwords and even managing the entire fanlisting collective.
|
||||
|
||||
Unfortunately, I encountered a critical issue with Enthusiast when I tried it: whenever I added a fanlisting to my joined fanlisting list in the admin panel, the home page of the fanlisting collective would go completely blank. I do not know the cause of the issue, and I was not familiar enough with PHP to be confident in attempting to investigate the entire fanlisting collective code just to find the culprit, especially when it uses MySQL database to store data, adding another complexity in troubleshooting it.
|
||||
|
||||
Therefore, I later tried BellaBuffs, and chose BellaBuffs as the script to power my fanlistings, then code my own fanlisting collective myself.
|
||||
|
||||
There were a few setbacks I encountered when I was building the [{% cite "Cassette Beasts" %} fanlisting](https://fan.leilukin.com/cassettebeasts) with BellaBuffs and hosting the fanlisting on InfinityFree — I learned that InfinityFree's free hosting plan [does not support PHP `mail()` function](https://forum.infinityfree.com/t/sending-email-from-your-website-php-mail/49242), which is used by BellaBuffs.
|
||||
There were a few setbacks I encountered when I was building the [{{ cite "Cassette Beasts" }} fanlisting](https://fan.leilukin.com/cassettebeasts) with BellaBuffs and hosting the fanlisting on InfinityFree — I learned that InfinityFree's free hosting plan [does not support PHP `mail()` function](https://forum.infinityfree.com/t/sending-email-from-your-website-php-mail/49242), which is used by BellaBuffs.
|
||||
|
||||
## Integrating PHPMailer into BellaBuffs
|
||||
|
||||
@ -42,7 +42,7 @@ Thankfully, InfinityFree suggested using PHPMailer, and even providing a [contac
|
||||
|
||||
I am glad that despite my inexperience in PHP, I was able to apply the programming knowledge I learned from building my main site and taking online coding courses to build my fanlisting.
|
||||
|
||||
After successfully setting up the {% cite "Cassette Beasts" %} fanlisting, I decided to fork BellaBuffs and release my version of the fanlisting script with PHPMailer integration, in case there are others who want to use BellaBuffs to build fanlistings, but cannot or do not want to use the PHP `mail()` function.
|
||||
After successfully setting up the {{ cite "Cassette Beasts" }} fanlisting, I decided to fork BellaBuffs and release my version of the fanlisting script with PHPMailer integration, in case there are others who want to use BellaBuffs to build fanlistings, but cannot or do not want to use the PHP `mail()` function.
|
||||
|
||||
You can download my BellaBuffs fork and learn about how to use it from [its GitHub repository](https://github.com/helenclx/BellaBuffs-PHPMailer).
|
||||
|
||||
@ -54,4 +54,4 @@ I decided to name my fanlisting collective Beehive, since I have been using my d
|
||||
|
||||
Furthermore, Beehive is a fitting name for a fanlisting collective, as beehives house honey bees, while this website houses all the fanlistings I created, maintain, joined and have applied to join.
|
||||
|
||||
Welcome to Beehive! 🐝
|
||||
Welcome to Beehive! 🐝
|
||||
|
@ -10,7 +10,7 @@ I was tagged by [~hedy](https://home.hedy.dev/) for a [blog questions challenge]
|
||||
|
||||
## Why did you start blogging in the first place?
|
||||
|
||||
I learned about the concept of blogs for the first time when I was a secondary school student in the later half of the 2000s. I was introduced to blogs by a Malaysian Chinese secondary school magazine named {% cite "Xuehai Weekly" %} ([《学海周刊》]{lang=zh}).
|
||||
I learned about the concept of blogs for the first time when I was a secondary school student in the later half of the 2000s. I was introduced to blogs by a Malaysian Chinese secondary school magazine named {{ cite "Xuehai Weekly" }} ([《学海周刊》]{lang=zh}).
|
||||
|
||||
As an undiagnosed autistic kid who was more comfortable communicating and expressing themself through writing, and had been keeping a journal, I was fascinated by the concept of a personal journal on the internet. Therefore, after trying it out, blogging immediately became one of my main hobbies, and I enjoyed browsing and reading other people's blogs as well. I loved blogs for allowing ordinary people to write and publish their writing to express themselves outside traditional publishing channels.
|
||||
|
||||
@ -66,4 +66,4 @@ Aside from blog, I have also written and published articles about various topics
|
||||
|
||||
I cannot decide who else to tag for this blog questions challenge, because not all my acquaintances in the personal web are bloggers and some bloggers are not huge fans of meta type posts.
|
||||
|
||||
Therefore, consider this an open invitation: If you find this post and are interested in answering these questions yourself, feel free to write your own post!
|
||||
Therefore, consider this an open invitation: If you find this post and are interested in answering these questions yourself, feel free to write your own post!
|
||||
|
@ -12,7 +12,7 @@ One day in December 2024, I suddenly remembered that my mother told me once that
|
||||
|
||||
Turned out, the school is named [42](https://www.42network.org/), and is an international school network that provides free computer science education, with many campuses around the world, including Malaysia. The main thing that differentiates 42 from traditional universities is its peer-to-peer and project-based learning models that do not involve any teachers.
|
||||
|
||||
According to the [official website of 42's Paris campus](https://42.fr/en/what-is-42/42-program-explained/) — where 42 originated — the name is a reference to Douglas Adams’ book {% cite "The Hitchhiker’s Guide to the Galaxy" %}:
|
||||
According to the [official website of 42's Paris campus](https://42.fr/en/what-is-42/42-program-explained/) — where 42 originated — the name is a reference to Douglas Adams’ book {{ cite "The Hitchhiker’s Guide to the Galaxy" }}:
|
||||
|
||||
> In Douglas Adams’ book The Hitchhiker’s Guide to the Galaxy – H2G2 for short – an advanced alien species builds a super computer. It has only one job: to find the answer to the Ultimate Question of Life, the Universe and Everything. After 7 million years of calculation, the computer finds the answer: 42. In geek culture, 42 often represents the answer to a seemingly insuperable problem. This is why 42 is called 42. This is our answer to what IT education should be today and in the future.
|
||||
|
||||
@ -26,4 +26,4 @@ However, to my surprise, the computers did not have any setting to adjust screen
|
||||
|
||||
After visiting the campus on its open day, I have been looking forward to attending the school more. Wish me luck in passing my Piscine so I can become an official student of 42!
|
||||
|
||||
**Update, 17 February 2025:** Originally, I registered to join the Piscine scheduled for 24 February 2025, but I received an email from the school announcing that due to unforeseen circumstances, the Piscine scheduled late February 2025 will no longer take place as planned. Therefore, I registered for the Piscine beginning on 7 April 2025.
|
||||
**Update, 17 February 2025:** Originally, I registered to join the Piscine scheduled for 24 February 2025, but I received an email from the school announcing that due to unforeseen circumstances, the Piscine scheduled late February 2025 will no longer take place as planned. Therefore, I registered for the Piscine beginning on 7 April 2025.
|
||||
|
@ -41,6 +41,6 @@ My brother went back to Singapore on the next day, which was also the third day
|
||||
|
||||
## Watching a Malaysian Lunar New Year Film
|
||||
|
||||
While my family's Lunar New Year celebration in my parents' hometown had been over, we are still in a Lunar New Year mood. Therefore, on February 3, which was also lichun ([立春]{lang=zh}) and the sixth day of Lunar New Year, my parents and I watched a Malaysian Lunar New Year film named {% cite "Money Games" %} ([《半斤百两》]{lang=zh}) in a local cinema.
|
||||
While my family's Lunar New Year celebration in my parents' hometown had been over, we are still in a Lunar New Year mood. Therefore, on February 3, which was also lichun ([立春]{lang=zh}) and the sixth day of Lunar New Year, my parents and I watched a Malaysian Lunar New Year film named {{ cite "Money Games" }} ([《半斤百两》]{lang=zh}) in a local cinema.
|
||||
|
||||
This was the first Malaysian film I watched with my parents in cinema. I did not expect much from a Lunar New Year film to be a masterpiece since such films are made for entertainment first and foremost, but I had some good laughs out of the film. Not to mention, given how rampant news about Malaysians encountering scams are, an entertaining film aiming to be anti-fraud is not a bad idea.
|
||||
|
@ -15,7 +15,7 @@ Discovery Piscine cadets, or Discovery Pisciners, will learn Python and shell, s
|
||||
|
||||
I had experience with Linux desktop environments before 42 founded its first Malaysian campus, as I used to dual boot Windows and Linux in my computer, but that happened years ago. Currently, my main method of using Linux is through Windows Subsystem for Linux (WSL) without setting up any desktop environment. Therefore, Discovery Piscine provided a great opportunity to practice using Linux and shell commands.
|
||||
|
||||
I had learned Python before during my journey of teaching myself to code, and I even [contributed](https://github.com/ExcaliburZero/cbpickaxe/pull/3) to [cbpickaxe](https://github.com/ExcaliburZero/cbpickaxe), a Python library for datamining my favourite video game {% cite "Cassette Beasts" %}. However, Discovery Piscine allowed me to refresh my Python knowledge and practice writing Python scripts, while also learning Python's built-in functions that I was unfamiliar with. There was an exercise where I was stuck in for a longer time than expect, but then I solved the exercise after discovering the Python function I needed by searching the web with the right keyword.
|
||||
I had learned Python before during my journey of teaching myself to code, and I even [contributed](https://github.com/ExcaliburZero/cbpickaxe/pull/3) to [cbpickaxe](https://github.com/ExcaliburZero/cbpickaxe), a Python library for datamining my favourite video game {{ cite "Cassette Beasts" }}. However, Discovery Piscine allowed me to refresh my Python knowledge and practice writing Python scripts, while also learning Python's built-in functions that I was unfamiliar with. There was an exercise where I was stuck in for a longer time than expect, but then I solved the exercise after discovering the Python function I needed by searching the web with the right keyword.
|
||||
|
||||
Speaking of the computers in 42's workstations, during my last visit to my local campus of 42 on their open day in January, I requested a way to change the computer screen brightness to the campus staff, because my eyes are sensitive to bright light due to me having [retinitis pigmentosa](/articles/living-with-retinitis-pigmentosa), and to my surprise the computers lacked the option to adjust screen brightness. The school staff promised to accommodate my request. On my first day attending the Discovery Piscine, I reminded the staff of my request, and a staff member soon installed a screen brightness setting in all the workstation computers, so I could adjust the computer screen brightness to the level I felt comfortable with.
|
||||
|
||||
@ -27,4 +27,4 @@ The fact that 42's curriculum has no teacher encouraged us to learn through sear
|
||||
|
||||
There were 10 modules of Python exercises in Discovery Piscine's curriculum, and I managed to do all the exercises, though not all of them got evaluated because of time constraints, and 42 only considers you having completed a module after you pass peer evaluations, so I ended up completing 5 out of 10 modules. However, this also earned me a certificate of completion after I graduated from the Discovery Piscine.
|
||||
|
||||
Despite already having programming experience — including [professional experience](2024-08-18-from-hobbyist-to-professional-web-developer.md) albeit [a short one](2024-12-16-leaving-my-first-developer-job.md) — I find 42 a good school for me. I am looking forward to the full Piscine in April.
|
||||
Despite already having programming experience — including [professional experience](2024-08-18-from-hobbyist-to-professional-web-developer.md) albeit [a short one](2024-12-16-leaving-my-first-developer-job.md) — I find 42 a good school for me. I am looking forward to the full Piscine in April.
|
||||
|
@ -5,18 +5,18 @@ date: 2025-03-19T19:10:47+0800
|
||||
categories: ["films"]
|
||||
---
|
||||
|
||||
On the afternoon of 18 March 2025, my parents and I went to the cinema to watch {% cite "Ne Zha 2" %} ([哪吒之魔童闹海]{lang=zh}), an animated film produced in mainland China.
|
||||
On the afternoon of 18 March 2025, my parents and I went to the cinema to watch {{ cite "Ne Zha 2" }} ([哪吒之魔童闹海]{lang=zh}), an animated film produced in mainland China.
|
||||
|
||||
To be honest, my parents were more excited about watching this film than I was. After finding out that {% cite "Ne Zha 2" %} was a massive box office success in China, my parents were looking forward to its release in Malaysia. As soon as {% cite "Ne Zha 2" %} started to be shown in cinema in Malaysia, my parents talked about their plans to watch the film, and even watched its predecessor, {% cite "Ne Zha" %} ([哪吒之魔童降世]{lang=zh}), at home the night before watching {% cite "Ne Zha 2" %} to do their homework.
|
||||
To be honest, my parents were more excited about watching this film than I was. After finding out that {{ cite "Ne Zha 2" }} was a massive box office success in China, my parents were looking forward to its release in Malaysia. As soon as {{ cite "Ne Zha 2" }} started to be shown in cinema in Malaysia, my parents talked about their plans to watch the film, and even watched its predecessor, {{ cite "Ne Zha" }} ([哪吒之魔童降世]{lang=zh}), at home the night before watching {{ cite "Ne Zha 2" }} to do their homework.
|
||||
|
||||
As for me, I have never paid close attention to mainland China's entertainment industry, especially when compared to my teenage years when I followed Hong Kong and Taiwan's entertainment industry closely to the extent of being described as an expert by my mother. Therefore, I accompanied my parents to see {% cite "Ne Zha" %} merely out of curiosity and a desire to see what the hype was, and what made the film such a hit and the highest-grossing animated film in the world.
|
||||
As for me, I have never paid close attention to mainland China's entertainment industry, especially when compared to my teenage years when I followed Hong Kong and Taiwan's entertainment industry closely to the extent of being described as an expert by my mother. Therefore, I accompanied my parents to see {{ cite "Ne Zha" }} merely out of curiosity and a desire to see what the hype was, and what made the film such a hit and the highest-grossing animated film in the world.
|
||||
|
||||
As a result, after sitting in the cinema for more than two hours and watching {% cite "Ne Zha" %} for myself, my first impression was that the animation and visual effects of the film are truly stunning and full of action as well as tense and dramatic moments. However, I am not a fan of the film's portrayal and treatment of its female characters.
|
||||
As a result, after sitting in the cinema for more than two hours and watching {{ cite "Ne Zha" }} for myself, my first impression was that the animation and visual effects of the film are truly stunning and full of action as well as tense and dramatic moments. However, I am not a fan of the film's portrayal and treatment of its female characters.
|
||||
|
||||
A [Ne Zha 2 review by circularuins on Douban (in Chinese)](https://movie.douban.com/review/16499182/) explains my issues with the portrayal and treatment of women in the film well. If you do not mind spoilers, I highly recommend reading the entire article. Even if you are unable to read Chinese, I would still suggest trying to read it with a machine translation.
|
||||
|
||||
I deeply relate to the author when they talked about how beginning to strongly identify as an Asian woman, and realise what that identity means in society, and thus starting to look at films' portrayal of women in a critical eye. This is a big part of why my taste in entertainment media has changed drastically as an adult compared to when I was a teenager. As an adult, I began to learn about the concept of media representation, and how the portrayal of different groups of people—including women—in the media reflects and influences the audience impression of those demographics.
|
||||
|
||||
As for the portrayal of women in entertainment media such as film and television, I am particularly tired of and disgusted by the trope of women characters existing mainly or only as sacrifices for the development of male characters. There is even a name for this trope, [women in refrigerators](https://en.wikipedia.org/wiki/Women_in_refrigerators). This is one of the reasons why I despise the 2023 Hong Kong film {% cite "One More Chance" %} ([别叫我“赌神”]{lang=zh}), which I also saw in the cinema with my parents, and regard it as a major stinker of a film. Unfortunately, the woman in refrigerator trope happens in {% cite "Ne Zha 2" %} as well. Honestly, it is embarrassing and insulting to see these tired old sexist tropes in a hit film in the 2020s.
|
||||
As for the portrayal of women in entertainment media such as film and television, I am particularly tired of and disgusted by the trope of women characters existing mainly or only as sacrifices for the development of male characters. There is even a name for this trope, [women in refrigerators](https://en.wikipedia.org/wiki/Women_in_refrigerators). This is one of the reasons why I despise the 2023 Hong Kong film {{ cite "One More Chance" }} ([别叫我“赌神”]{lang=zh}), which I also saw in the cinema with my parents, and regard it as a major stinker of a film. Unfortunately, the woman in refrigerator trope happens in {{ cite "Ne Zha 2" }} as well. Honestly, it is embarrassing and insulting to see these tired old sexist tropes in a hit film in the 2020s.
|
||||
|
||||
All in all, while I can understand, to a certain degree, how the animation and visual effects of {% cite "Ne Zha 2" %} are a reason for the film's success, I cannot recommend it wholeheartedly, especially if you have high standards for the portrayal and treatment of women in film.
|
||||
All in all, while I can understand, to a certain degree, how the animation and visual effects of {{ cite "Ne Zha 2" }} are a reason for the film's success, I cannot recommend it wholeheartedly, especially if you have high standards for the portrayal and treatment of women in film.
|
||||
|
@ -1,5 +1,4 @@
|
||||
export default {
|
||||
layout: "main/content",
|
||||
tags: ["posts", "contents", "feed items"],
|
||||
isArticle: true,
|
||||
eleventyComputed: {
|
||||
@ -9,4 +8,4 @@ export default {
|
||||
parent: "Blog Archive"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,4 +3,4 @@ date: 2023-06-11
|
||||
---
|
||||
|
||||
* Widened the website content layout.
|
||||
* Changed the header image of my [{% cite "Star Wars: Knights of the Old Republic" %} shrine](/shrines/starwarskotor/).
|
||||
* Changed the header image of my [{{ cite "Star Wars: Knights of the Old Republic" }} shrine](/shrines/starwarskotor/).
|
||||
|
@ -2,6 +2,6 @@
|
||||
date: 2024-05-09T13:45:00+0800
|
||||
---
|
||||
|
||||
* [{% cite "Cassette Beasts" %} shrine](/shrines/cassettebeasts/):
|
||||
* [{{ cite "Cassette Beasts" }} shrine](/shrines/cassettebeasts/):
|
||||
* Rename Trivia page to [Facts page](/shrines/cassettebeasts/facts/).
|
||||
* Add "Frequently Asked Topics" section to the Facts page.
|
||||
* Add "Frequently Asked Topics" section to the Facts page.
|
||||
|
@ -2,4 +2,4 @@
|
||||
date: 2024-05-18T00:51:00+0800
|
||||
---
|
||||
|
||||
* Add footnotes section to [{% cite "A Summer’s End — Hong Kong 1986" %} shrine Trivia page](/shrines/asummersend/trivia/) and [{% cite "Cassette Beasts" %} shrine Facts page](/shrines/cassettebeasts/facts/).
|
||||
* Add footnotes section to [{{ cite "A Summer’s End — Hong Kong 1986" }} shrine Trivia page](/shrines/asummersend/trivia/) and [{{ cite "Cassette Beasts" }} shrine Facts page](/shrines/cassettebeasts/facts/).
|
||||
|
@ -2,5 +2,5 @@
|
||||
date: 2024-05-28T01:49:00+0800
|
||||
---
|
||||
|
||||
* [{% cite "A Summer’s End — Hong Kong 1986" %} shrine](/shrines/asummersend): Add Passion Patch screenshots section to the [Gallery page](/shrines/asummersend/gallery) (**Warning:** The Passion Patch screenshots are not safe for work, though they are hidden by default when you visit the gallery page).
|
||||
* Add a "Skip to content" button for screen reader and keyboard users (thank you [Kale](https://kalechips.net/projects/snippets/skip) for the inspiration).
|
||||
* [{{ cite "A Summer’s End — Hong Kong 1986" }} shrine](/shrines/asummersend): Add Passion Patch screenshots section to the [Gallery page](/shrines/asummersend/gallery) (**Warning:** The Passion Patch screenshots are not safe for work, though they are hidden by default when you visit the gallery page).
|
||||
* Add a "Skip to content" button for screen reader and keyboard users (thank you [Kale](https://kalechips.net/projects/snippets/skip) for the inspiration).
|
||||
|
@ -3,11 +3,11 @@ date: 2024-07-02T22:00:00+0800
|
||||
---
|
||||
|
||||
* The main site header now would display a Disability Pride Month blurb and the disability pride flag during July
|
||||
* [My fanlisting collective](https://fan.leilukin.com) and [{% cite "Cassette Beasts" %} fanlisting](https://fan.leilukin.com/cassettebeasts) launched!
|
||||
* [My fanlisting collective](https://fan.leilukin.com) and [{{ cite "Cassette Beasts" }} fanlisting](https://fan.leilukin.com/cassettebeasts) launched!
|
||||
* [Projects page](/projects):
|
||||
* Reorganised pages for my video game mods into their own directory
|
||||
* Add code projects, started with [BellaBuffs with PHPMailer Integration](/projects/code/bellabuffs-phpmailer)
|
||||
* New blog post: [Cassette Beasts Fanlisting and My Fanlisting Collective Launched](/blog/posts/2024-07-02-fanlisting-collective-launch)
|
||||
* [Links page](/links):
|
||||
* Add tabs to sort my link collection by category (thanks to [Kalechips' JavaScript-free tabs code scnippet](https://kalechips.net/projects/snippets/tabs) for the inspiration)
|
||||
* Add [webmastery resources](/links/#webmastery)
|
||||
* Add [webmastery resources](/links/#webmastery)
|
||||
|
@ -4,4 +4,4 @@ date: 2024-07-13T20:47:00+0800
|
||||
|
||||
* Add an inline SVG icon to external links
|
||||
* Use inline SVG for Font Awesome icons to remove the need of hosting Font Awesome assets
|
||||
* Add dark mode support for [{% cite "Cassette Beasts" %} shrine](/shrines/cassettebeasts) based on user preference in system setting
|
||||
* Add dark mode support for [{{ cite "Cassette Beasts" }} shrine](/shrines/cassettebeasts) based on user preference in system setting
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user