chore: convert leading spaces to tabs
This commit is contained in:
@@ -9,15 +9,15 @@ More technical information about this blog can be found on the [colophon page](h
|
||||
Requirement: [Node.js](https://nodejs.org/).
|
||||
|
||||
1. Clone this repository locally
|
||||
```
|
||||
git clone https://git.helenchong.dev/helenchong/helenchong-blog.git
|
||||
```
|
||||
```
|
||||
git clone https://git.helenchong.dev/helenchong/helenchong-blog.git
|
||||
```
|
||||
1. Install dependencies
|
||||
```
|
||||
npm install
|
||||
```
|
||||
```
|
||||
npm install
|
||||
```
|
||||
1. Run the project
|
||||
```
|
||||
npm run start
|
||||
```
|
||||
```
|
||||
npm run start
|
||||
```
|
||||
1. Open http://localhost:8080/ in your browser
|
||||
|
||||
+31
-31
@@ -12,38 +12,38 @@ import markdownItConfig from "./src/_config/markdown-it.js";
|
||||
import shortcodesConfig from "./src/_config/shortcodes.js";
|
||||
|
||||
export default function(eleventyConfig) {
|
||||
// ----- Plugins
|
||||
eleventyConfig.addPlugin(EleventyI18nPlugin, {
|
||||
defaultLanguage: "en",
|
||||
errorMode: "allow-fallback"
|
||||
});
|
||||
eleventyConfig.addPlugin(InputPathToUrlTransformPlugin);
|
||||
eleventyConfig.addPlugin(tocPlugin, {
|
||||
tags: ['h2', 'h3', 'h4', 'h5', 'h6'],
|
||||
wrapper: function (toc) {
|
||||
return `<nav class="toc" aria-labelledby="toc-heading">${toc}</nav>`;
|
||||
},
|
||||
});
|
||||
// ----- Plugins
|
||||
eleventyConfig.addPlugin(EleventyI18nPlugin, {
|
||||
defaultLanguage: "en",
|
||||
errorMode: "allow-fallback"
|
||||
});
|
||||
eleventyConfig.addPlugin(InputPathToUrlTransformPlugin);
|
||||
eleventyConfig.addPlugin(tocPlugin, {
|
||||
tags: ['h2', 'h3', 'h4', 'h5', 'h6'],
|
||||
wrapper: function (toc) {
|
||||
return `<nav class="toc" aria-labelledby="toc-heading">${toc}</nav>`;
|
||||
},
|
||||
});
|
||||
|
||||
// ----- Custom configurations
|
||||
eleventyConfig.addPlugin(feedsConfig);
|
||||
eleventyConfig.addPlugin(filesConfig);
|
||||
eleventyConfig.addPlugin(filtersConfig);
|
||||
eleventyConfig.addPlugin(topicsConfig);
|
||||
eleventyConfig.addPlugin(markdownItConfig);
|
||||
eleventyConfig.addPlugin(shortcodesConfig);
|
||||
// ----- Custom configurations
|
||||
eleventyConfig.addPlugin(feedsConfig);
|
||||
eleventyConfig.addPlugin(filesConfig);
|
||||
eleventyConfig.addPlugin(filtersConfig);
|
||||
eleventyConfig.addPlugin(topicsConfig);
|
||||
eleventyConfig.addPlugin(markdownItConfig);
|
||||
eleventyConfig.addPlugin(shortcodesConfig);
|
||||
|
||||
// ----- Vento plugin for Eleventy
|
||||
// Must be loaded after plugins that modify filters
|
||||
eleventyConfig.addPlugin(VentoPlugin, {
|
||||
autotrim: true,
|
||||
});
|
||||
// ----- Vento plugin for Eleventy
|
||||
// Must be loaded after plugins that modify filters
|
||||
eleventyConfig.addPlugin(VentoPlugin, {
|
||||
autotrim: true,
|
||||
});
|
||||
|
||||
return {
|
||||
markdownTemplateEngine: "vto",
|
||||
htmlTemplateEngine: "vto",
|
||||
dir: {
|
||||
input: "src"
|
||||
}
|
||||
};
|
||||
return {
|
||||
markdownTemplateEngine: "vto",
|
||||
htmlTemplateEngine: "vto",
|
||||
dir: {
|
||||
input: "src"
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
export default function (eleventyConfig) {
|
||||
// Passthrough File Copy
|
||||
eleventyConfig.addPassthroughCopy("./src/assets/");
|
||||
eleventyConfig.addWatchTarget("./src/assets/");
|
||||
eleventyConfig.addPassthroughCopy({
|
||||
"./src/assets/favicon/favicon.ico": "/favicon.ico",
|
||||
"./src/assets/favicon/apple-touch-icon.png": "/apple-touch-icon.png"
|
||||
});
|
||||
// Passthrough File Copy
|
||||
eleventyConfig.addPassthroughCopy("./src/assets/");
|
||||
eleventyConfig.addWatchTarget("./src/assets/");
|
||||
eleventyConfig.addPassthroughCopy({
|
||||
"./src/assets/favicon/favicon.ico": "/favicon.ico",
|
||||
"./src/assets/favicon/apple-touch-icon.png": "/apple-touch-icon.png"
|
||||
});
|
||||
}
|
||||
|
||||
+12
-12
@@ -2,18 +2,18 @@ import { DateTime } from "luxon";
|
||||
import slug from 'limax';
|
||||
|
||||
export default function(eleventyConfig) {
|
||||
// Filter: Format dates
|
||||
eleventyConfig.addFilter("formatDate", (date, pageLang="en") => {
|
||||
const dateFormat = pageLang === "zh" ? "yyyy 年 L 月 d 日" : "d LLLL yyyy";
|
||||
if (typeof date === "object") {
|
||||
return DateTime.fromJSDate(date).setLocale(pageLang).toFormat(dateFormat);
|
||||
}
|
||||
return DateTime.fromISO(date, { setZone: true }).setLocale(pageLang).toFormat(dateFormat);
|
||||
});
|
||||
// Filter: Format dates
|
||||
eleventyConfig.addFilter("formatDate", (date, pageLang="en") => {
|
||||
const dateFormat = pageLang === "zh" ? "yyyy 年 L 月 d 日" : "d LLLL yyyy";
|
||||
if (typeof date === "object") {
|
||||
return DateTime.fromJSDate(date).setLocale(pageLang).toFormat(dateFormat);
|
||||
}
|
||||
return DateTime.fromISO(date, { setZone: true }).setLocale(pageLang).toFormat(dateFormat);
|
||||
});
|
||||
|
||||
// Filter: URL slug generation with more language support than slugify
|
||||
eleventyConfig.addFilter("slugStr", (str) => slug(str));
|
||||
// Filter: URL slug generation with more language support than slugify
|
||||
eleventyConfig.addFilter("slugStr", (str) => slug(str));
|
||||
|
||||
// Filter: Collection item length
|
||||
eleventyConfig.addFilter("itemCount", (array) => array.length);
|
||||
// Filter: Collection item length
|
||||
eleventyConfig.addFilter("itemCount", (array) => array.length);
|
||||
}
|
||||
|
||||
+37
-37
@@ -11,43 +11,43 @@ import slug from 'limax';
|
||||
export let markdownLibrary;
|
||||
|
||||
export default function(eleventyConfig) {
|
||||
// Configure markdown-it-anchor plugins
|
||||
const linkAfterHeader = markdownItAnchor.permalink.linkAfterHeader({
|
||||
class: "heading-anchor",
|
||||
assistiveText: title => `Permalink to section '${title}'`,
|
||||
visuallyHiddenClass: 'visually-hidden',
|
||||
});
|
||||
const markdownItAnchorOptions = {
|
||||
level: [2, 3, 4, 5],
|
||||
slugify: (str) => slug(str),
|
||||
tabIndex: false,
|
||||
permalink(slug, opts, state, idx) {
|
||||
state.tokens.splice(idx, 0,
|
||||
Object.assign(new state.Token("div_open", "div", 1), {
|
||||
// Add class "header-wrapper [h1 or h2 or h3]"
|
||||
attrs: [["class", `heading-wrapper ${state.tokens[idx].tag}`]],
|
||||
block: true,
|
||||
})
|
||||
);
|
||||
state.tokens.splice(idx + 4, 0,
|
||||
Object.assign(new state.Token("div_close", "div", -1), {
|
||||
block: true,
|
||||
})
|
||||
);
|
||||
linkAfterHeader(slug, opts, state, idx + 1);
|
||||
},
|
||||
};
|
||||
// Configure markdown-it-anchor plugins
|
||||
const linkAfterHeader = markdownItAnchor.permalink.linkAfterHeader({
|
||||
class: "heading-anchor",
|
||||
assistiveText: title => `Permalink to section '${title}'`,
|
||||
visuallyHiddenClass: 'visually-hidden',
|
||||
});
|
||||
const markdownItAnchorOptions = {
|
||||
level: [2, 3, 4, 5],
|
||||
slugify: (str) => slug(str),
|
||||
tabIndex: false,
|
||||
permalink(slug, opts, state, idx) {
|
||||
state.tokens.splice(idx, 0,
|
||||
Object.assign(new state.Token("div_open", "div", 1), {
|
||||
// Add class "header-wrapper [h1 or h2 or h3]"
|
||||
attrs: [["class", `heading-wrapper ${state.tokens[idx].tag}`]],
|
||||
block: true,
|
||||
})
|
||||
);
|
||||
state.tokens.splice(idx + 4, 0,
|
||||
Object.assign(new state.Token("div_close", "div", -1), {
|
||||
block: true,
|
||||
})
|
||||
);
|
||||
linkAfterHeader(slug, opts, state, idx + 1);
|
||||
},
|
||||
};
|
||||
|
||||
/* Markdown Overrides */
|
||||
markdownLibrary = markdownIt({
|
||||
html: true,
|
||||
linkify: true,
|
||||
})
|
||||
.set({ fuzzyLink: false })
|
||||
.use(markdownItAnchor, markdownItAnchorOptions)
|
||||
.use(markdownItAttrs)
|
||||
.use(markdownItBracketedSpans);
|
||||
/* Markdown Overrides */
|
||||
markdownLibrary = markdownIt({
|
||||
html: true,
|
||||
linkify: true,
|
||||
})
|
||||
.set({ fuzzyLink: false })
|
||||
.use(markdownItAnchor, markdownItAnchorOptions)
|
||||
.use(markdownItAttrs)
|
||||
.use(markdownItBracketedSpans);
|
||||
|
||||
/* This is the part that tells 11ty to swap to our custom config */
|
||||
eleventyConfig.setLibrary("md", markdownLibrary);
|
||||
/* This is the part that tells 11ty to swap to our custom config */
|
||||
eleventyConfig.setLibrary("md", markdownLibrary);
|
||||
}
|
||||
|
||||
+13
-13
@@ -1,16 +1,16 @@
|
||||
export default function (eleventyConfig) {
|
||||
// Shortcode: <cite> tag
|
||||
eleventyConfig.addShortcode("cite", (str) => `<cite>${str}</cite>`);
|
||||
// Shortcode: <cite> tag
|
||||
eleventyConfig.addShortcode("cite", (str) => `<cite>${str}</cite>`);
|
||||
|
||||
// Paired shortcode: <figure> element
|
||||
eleventyConfig.addPairedShortcode("imgFigure", (caption, imgUrl, alt, className="", imgAttrs="", id="", lazyLoad = true) => {
|
||||
const imgClass = className ? ` class="${className}"` : '';
|
||||
const imgId = id ? ` id="${id}"` : '';
|
||||
const lazyLoading = lazyLoad ? ' loading="lazy"' : '';
|
||||
return `<figure${imgId}${imgClass}>
|
||||
<img src="${imgUrl}" alt="${alt}"${imgAttrs}${lazyLoading}>
|
||||
<figcaption>${caption}</figcaption>
|
||||
</figure>
|
||||
`;
|
||||
});
|
||||
// Paired shortcode: <figure> element
|
||||
eleventyConfig.addPairedShortcode("imgFigure", (caption, imgUrl, alt, className="", imgAttrs="", id="", lazyLoad = true) => {
|
||||
const imgClass = className ? ` class="${className}"` : '';
|
||||
const imgId = id ? ` id="${id}"` : '';
|
||||
const lazyLoading = lazyLoad ? ' loading="lazy"' : '';
|
||||
return `<figure${imgId}${imgClass}>
|
||||
<img src="${imgUrl}" alt="${alt}"${imgAttrs}${lazyLoading}>
|
||||
<figcaption>${caption}</figcaption>
|
||||
</figure>
|
||||
`;
|
||||
});
|
||||
}
|
||||
|
||||
+34
-34
@@ -1,40 +1,40 @@
|
||||
import sortPinyin from "sort-by-pinyin";
|
||||
|
||||
export default function(eleventyConfig) {
|
||||
// English post topics
|
||||
eleventyConfig.addCollection("topics_en", (collectionApi) => {
|
||||
let topics = new Set();
|
||||
let posts = collectionApi.getFilteredByTag("posts_en");
|
||||
posts.forEach(p => {
|
||||
let tops = p.data.topics;
|
||||
if (tops) {
|
||||
tops.forEach(c => topics.add(c));
|
||||
}
|
||||
});
|
||||
return Array.from(topics).sort((a, b) => a.localeCompare(b, "en", {"sensitivity": "base"}));
|
||||
});
|
||||
// English post topics
|
||||
eleventyConfig.addCollection("topics_en", (collectionApi) => {
|
||||
let topics = new Set();
|
||||
let posts = collectionApi.getFilteredByTag("posts_en");
|
||||
posts.forEach(p => {
|
||||
let tops = p.data.topics;
|
||||
if (tops) {
|
||||
tops.forEach(c => topics.add(c));
|
||||
}
|
||||
});
|
||||
return Array.from(topics).sort((a, b) => a.localeCompare(b, "en", {"sensitivity": "base"}));
|
||||
});
|
||||
|
||||
// Chinese post topics
|
||||
eleventyConfig.addCollection("topics_zh", (collectionApi) => {
|
||||
let topics = new Set();
|
||||
let posts = collectionApi.getFilteredByTag("posts_zh");
|
||||
posts.forEach(p => {
|
||||
let tops = p.data.topics;
|
||||
if (tops) {
|
||||
tops.forEach(c => topics.add(c));
|
||||
}
|
||||
});
|
||||
return sortPinyin(Array.from(topics));
|
||||
});
|
||||
// Chinese post topics
|
||||
eleventyConfig.addCollection("topics_zh", (collectionApi) => {
|
||||
let topics = new Set();
|
||||
let posts = collectionApi.getFilteredByTag("posts_zh");
|
||||
posts.forEach(p => {
|
||||
let tops = p.data.topics;
|
||||
if (tops) {
|
||||
tops.forEach(c => topics.add(c));
|
||||
}
|
||||
});
|
||||
return sortPinyin(Array.from(topics));
|
||||
});
|
||||
|
||||
// Filter: Filter blog posts by category
|
||||
eleventyConfig.addFilter("filterByTopic", (posts, topic) => {
|
||||
let result = posts.filter(p => {
|
||||
let tops = p.data.topics;
|
||||
if (tops) {
|
||||
return tops.includes(topic);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
});
|
||||
// Filter: Filter blog posts by topic
|
||||
eleventyConfig.addFilter("filterByTopic", (posts, topic) => {
|
||||
let result = posts.filter(p => {
|
||||
let tops = p.data.topics;
|
||||
if (tops) {
|
||||
return tops.includes(topic);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
});
|
||||
}
|
||||
|
||||
+59
-59
@@ -1,64 +1,64 @@
|
||||
export const en = {
|
||||
dir: '', // stands for the direction of the language set in the head, defaults to LTR (left to right)
|
||||
skipToContent: 'Skip to Content',
|
||||
availableLang: 'View this page in: ',
|
||||
langOptions: 'Language Options:',
|
||||
translations: 'Translations',
|
||||
mainNav: 'Main',
|
||||
footerNav: 'Footer',
|
||||
siteBadgeAlt: "88-by-31 badge: Galaxy Garden's logo, a light yellow minimalist shape of a galaxy resembling the capital G, next to the word Galaxy Garden on a dark purple background.",
|
||||
welcome: 'Welcome to ',
|
||||
webDirectories: 'Web Directories',
|
||||
directoryDesc: ' is listed at the following directories:',
|
||||
latestPosts: 'Latest Posts',
|
||||
published: 'Published:',
|
||||
updated: 'Last Updated:',
|
||||
author: 'Author:',
|
||||
topics: 'Topics:',
|
||||
postLang: 'Languages: ',
|
||||
pageToC: 'On This Page',
|
||||
postToC: 'In This Article',
|
||||
replyByEmail: 'Reply by Email',
|
||||
emailReplySubject: 'RE: ',
|
||||
nextPrev: 'Next and Previous Posts',
|
||||
prevPost: 'Previous Post:',
|
||||
nextPost: 'Next Post:',
|
||||
rssFeed: 'RSS Feed',
|
||||
emailContact: 'Contact me by email',
|
||||
plaintxtEmail: '(<a href="https://useplaintext.email/">Plain text email</a> encouraged)',
|
||||
sourceCode: 'Source Code',
|
||||
socialNav: 'Socials',
|
||||
backToTop: 'Back to Top'
|
||||
dir: '', // stands for the direction of the language set in the head, defaults to LTR (left to right)
|
||||
skipToContent: 'Skip to Content',
|
||||
availableLang: 'View this page in: ',
|
||||
langOptions: 'Language Options:',
|
||||
translations: 'Translations',
|
||||
mainNav: 'Main',
|
||||
footerNav: 'Footer',
|
||||
siteBadgeAlt: "88-by-31 badge: Galaxy Garden's logo, a light yellow minimalist shape of a galaxy resembling the capital G, next to the word Galaxy Garden on a dark purple background.",
|
||||
welcome: 'Welcome to ',
|
||||
webDirectories: 'Web Directories',
|
||||
directoryDesc: ' is listed at the following directories:',
|
||||
latestPosts: 'Latest Posts',
|
||||
published: 'Published:',
|
||||
updated: 'Last Updated:',
|
||||
author: 'Author:',
|
||||
topics: 'Topics:',
|
||||
postLang: 'Languages: ',
|
||||
pageToC: 'On This Page',
|
||||
postToC: 'In This Article',
|
||||
replyByEmail: 'Reply by Email',
|
||||
emailReplySubject: 'RE: ',
|
||||
nextPrev: 'Next and Previous Posts',
|
||||
prevPost: 'Previous Post:',
|
||||
nextPost: 'Next Post:',
|
||||
rssFeed: 'RSS Feed',
|
||||
emailContact: 'Contact me by email',
|
||||
plaintxtEmail: '(<a href="https://useplaintext.email/">Plain text email</a> encouraged)',
|
||||
sourceCode: 'Source Code',
|
||||
socialNav: 'Socials',
|
||||
backToTop: 'Back to Top'
|
||||
};
|
||||
|
||||
export const zh = {
|
||||
skipToContent: '跳至内容区',
|
||||
availableLang: '切换本页语言:',
|
||||
langOptions: '语言选项:',
|
||||
translations: '翻译',
|
||||
mainNav: '主要',
|
||||
footerNav: '页脚',
|
||||
siteBadgeAlt: "88 × 31 网页徽章: 银河花园的徽标——一个浅黄色、样子与大写字母 G 相似的简约的银河形状,旁边是 Galaxy Garden 字样,背景为深紫色。",
|
||||
welcome: '欢迎光临',
|
||||
webDirectories: '网站目录',
|
||||
directoryDesc: '被列入以下目录:',
|
||||
latestPosts: '最新文章',
|
||||
published: '发布:',
|
||||
updated: '最后更新:',
|
||||
author: '作者:',
|
||||
topics: '话题: ',
|
||||
postLang: '语言: ',
|
||||
pageToC: '本页中',
|
||||
postToC: '本文中',
|
||||
replyByEmail: '电邮回复',
|
||||
emailReplySubject: '回复:',
|
||||
nextPrev: '上一篇和下一篇文章',
|
||||
prevPost: '上一篇文章:',
|
||||
nextPost: '下一篇文章:',
|
||||
rssFeed: 'RSS 订阅',
|
||||
emailContact: '电子邮件联系我',
|
||||
plaintxtEmail: '(鼓励使用<a href="https://useplaintext.email/">纯文本电邮</a>)',
|
||||
sourceCode: '源代码',
|
||||
socialNav: '社交媒体',
|
||||
backToTop: '返回顶端'
|
||||
skipToContent: '跳至内容区',
|
||||
availableLang: '切换本页语言:',
|
||||
langOptions: '语言选项:',
|
||||
translations: '翻译',
|
||||
mainNav: '主要',
|
||||
footerNav: '页脚',
|
||||
siteBadgeAlt: "88 × 31 网页徽章: 银河花园的徽标——一个浅黄色、样子与大写字母 G 相似的简约的银河形状,旁边是 Galaxy Garden 字样,背景为深紫色。",
|
||||
welcome: '欢迎光临',
|
||||
webDirectories: '网站目录',
|
||||
directoryDesc: '被列入以下目录:',
|
||||
latestPosts: '最新文章',
|
||||
published: '发布:',
|
||||
updated: '最后更新:',
|
||||
author: '作者:',
|
||||
topics: '话题: ',
|
||||
postLang: '语言: ',
|
||||
pageToC: '本页中',
|
||||
postToC: '本文中',
|
||||
replyByEmail: '电邮回复',
|
||||
emailReplySubject: '回复:',
|
||||
nextPrev: '上一篇和下一篇文章',
|
||||
prevPost: '上一篇文章:',
|
||||
nextPost: '下一篇文章:',
|
||||
rssFeed: 'RSS 订阅',
|
||||
emailContact: '电子邮件联系我',
|
||||
plaintxtEmail: '(鼓励使用<a href="https://useplaintext.email/">纯文本电邮</a>)',
|
||||
sourceCode: '源代码',
|
||||
socialNav: '社交媒体',
|
||||
backToTop: '返回顶端'
|
||||
};
|
||||
|
||||
+16
-16
@@ -1,25 +1,25 @@
|
||||
export const omgLol = {
|
||||
name: "omg.lol",
|
||||
user: "helenchong",
|
||||
url: "https://helenchong.omg.lol/",
|
||||
icon: "/assets/icons/socials/prami.svg",
|
||||
inlineSvg: '<svg class="inline-icon" aria-hidden="true" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg"><path d="M 250 500 C 211.611 500 173.225 485.355 143.934 456.066 L 43.934 356.066 C -14.645 297.487 -14.645 202.514 43.934 143.935 C 100.532 87.337 191.104 85.422 250 138.191 C 308.898 85.423 399.47 87.339 456.066 143.935 C 514.645 202.514 514.645 297.487 456.066 356.066 L 356.066 456.066 C 326.777 485.355 288.389 500 250 500 Z M 179.245 262.013 C 179.245 229.449 152.847 203.051 120.283 203.051 C 87.719 203.051 61.321 229.449 61.321 262.013 C 61.321 294.577 87.719 320.975 120.283 320.975 C 152.847 320.975 179.245 294.577 179.245 262.013 Z M 438.679 262.013 C 438.679 229.449 412.281 203.051 379.717 203.051 C 347.153 203.051 320.755 229.449 320.755 262.013 C 320.755 294.577 347.153 320.975 379.717 320.975 C 412.281 320.975 438.679 294.577 438.679 262.013 Z M 208.843 209 C 198.899 209 190.841 217.058 190.841 226.998 C 190.841 236.942 198.899 245 208.843 245 C 218.783 245 226.841 236.942 226.841 226.998 C 226.841 217.058 218.783 209 208.843 209 Z M 291.161 209.037 C 281.217 209.037 273.159 217.095 273.159 227.035 C 273.159 236.979 281.217 245.037 291.161 245.037 C 301.101 245.037 309.159 236.979 309.159 227.035 C 309.159 217.095 301.101 209.037 291.161 209.037 Z M 203.661 265.526 C 199.217 268.249 197.823 274.056 200.545 278.5 C 211.949 295.681 231.878 306.105 249.84 306.105 C 258.902 306.105 269.168 303.619 277.366 299.2 C 281.46 296.994 285.838 293.868 289.368 290.545 C 292.874 287.243 297.559 280.437 297.559 280.437 C 297.972 279.996 297.559 280.437 297.559 280.437 C 301.351 276.866 301.53 270.896 297.959 267.102 C 294.387 263.309 288.417 263.13 284.623 266.702 C 284.623 266.702 284.209 267.143 284.623 266.702 C 284.623 266.702 279.06 274.334 276.434 276.807 C 273.83 279.26 271.466 280.947 268.415 282.59 C 262.325 285.873 256.683 287.237 249.84 287.237 C 235.989 287.237 224.104 282.26 216.632 268.641 C 213.91 264.198 208.102 262.803 203.659 265.526 L 203.661 265.526 Z" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path26"><title>Prami</title></path></svg>',
|
||||
name: "omg.lol",
|
||||
user: "helenchong",
|
||||
url: "https://helenchong.omg.lol/",
|
||||
icon: "/assets/icons/socials/prami.svg",
|
||||
inlineSvg: '<svg class="inline-icon" aria-hidden="true" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg"><path d="M 250 500 C 211.611 500 173.225 485.355 143.934 456.066 L 43.934 356.066 C -14.645 297.487 -14.645 202.514 43.934 143.935 C 100.532 87.337 191.104 85.422 250 138.191 C 308.898 85.423 399.47 87.339 456.066 143.935 C 514.645 202.514 514.645 297.487 456.066 356.066 L 356.066 456.066 C 326.777 485.355 288.389 500 250 500 Z M 179.245 262.013 C 179.245 229.449 152.847 203.051 120.283 203.051 C 87.719 203.051 61.321 229.449 61.321 262.013 C 61.321 294.577 87.719 320.975 120.283 320.975 C 152.847 320.975 179.245 294.577 179.245 262.013 Z M 438.679 262.013 C 438.679 229.449 412.281 203.051 379.717 203.051 C 347.153 203.051 320.755 229.449 320.755 262.013 C 320.755 294.577 347.153 320.975 379.717 320.975 C 412.281 320.975 438.679 294.577 438.679 262.013 Z M 208.843 209 C 198.899 209 190.841 217.058 190.841 226.998 C 190.841 236.942 198.899 245 208.843 245 C 218.783 245 226.841 236.942 226.841 226.998 C 226.841 217.058 218.783 209 208.843 209 Z M 291.161 209.037 C 281.217 209.037 273.159 217.095 273.159 227.035 C 273.159 236.979 281.217 245.037 291.161 245.037 C 301.101 245.037 309.159 236.979 309.159 227.035 C 309.159 217.095 301.101 209.037 291.161 209.037 Z M 203.661 265.526 C 199.217 268.249 197.823 274.056 200.545 278.5 C 211.949 295.681 231.878 306.105 249.84 306.105 C 258.902 306.105 269.168 303.619 277.366 299.2 C 281.46 296.994 285.838 293.868 289.368 290.545 C 292.874 287.243 297.559 280.437 297.559 280.437 C 297.972 279.996 297.559 280.437 297.559 280.437 C 301.351 276.866 301.53 270.896 297.959 267.102 C 294.387 263.309 288.417 263.13 284.623 266.702 C 284.623 266.702 284.209 267.143 284.623 266.702 C 284.623 266.702 279.06 274.334 276.434 276.807 C 273.83 279.26 271.466 280.947 268.415 282.59 C 262.325 285.873 256.683 287.237 249.84 287.237 C 235.989 287.237 224.104 282.26 216.632 268.641 C 213.91 264.198 208.102 262.803 203.659 265.526 L 203.661 265.526 Z" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path26"><title>Prami</title></path></svg>',
|
||||
};
|
||||
|
||||
export const devSite = "https://helenchong.dev/";
|
||||
|
||||
export const pronounsPage = {
|
||||
url: "https://pronouns.page/@helenchong",
|
||||
en: "https://en.pronouns.page/@helenchong",
|
||||
zh: "https://zh.pronouns.page/@helenchong"
|
||||
url: "https://pronouns.page/@helenchong",
|
||||
en: "https://en.pronouns.page/@helenchong",
|
||||
zh: "https://zh.pronouns.page/@helenchong"
|
||||
}
|
||||
|
||||
export const socials = {
|
||||
mastodon: {
|
||||
name: "Mastodon",
|
||||
user: "@helenchong@social.lol",
|
||||
url: "https://social.lol/@helenchong",
|
||||
icon: "/assets/icons/socials/mastodon.svg",
|
||||
inlineSvg: '<svg class="inline-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M433 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.6-28.4-290.5 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54a102.5 102.5 0 0 1 -.9-13.9c85.6 20.9 158.7 9.1 178.8 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.1 125.2h-46.6v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.3V197c0-58.5-64-56.6-64-6.9v114.2H90.2c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175z"/></svg>',
|
||||
}
|
||||
};
|
||||
mastodon: {
|
||||
name: "Mastodon",
|
||||
user: "@helenchong@social.lol",
|
||||
url: "https://social.lol/@helenchong",
|
||||
icon: "/assets/icons/socials/mastodon.svg",
|
||||
inlineSvg: '<svg class="inline-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M433 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.6-28.4-290.5 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54a102.5 102.5 0 0 1 -.9-13.9c85.6 20.9 158.7 9.1 178.8 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.1 125.2h-46.6v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.3V197c0-58.5-64-56.6-64-6.9v114.2H90.2c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175z"/></svg>',
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ page.lang }}" dir="{{ langstrings[page.lang].dir || 'ltr' }}" id="top">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>{{ title ? `${title} | ` : "" }}{{ sitemeta[page.lang].siteName }}</title>
|
||||
<title>{{ title ? `${title} | ` : "" }}{{ sitemeta[page.lang].siteName }}</title>
|
||||
|
||||
<link rel="alternate" hreflang="{{ page.lang }}" href="{{ sitemeta.siteUrl }}{{ page.url }}">
|
||||
{{ for link of page.url | locale_links }}
|
||||
<link rel="alternate" hreflang="{{ link.lang }}" href="{{ sitemeta.siteUrl }}{{ link.url }}">
|
||||
{{ /for }}
|
||||
<link rel="alternate" hreflang="x-default" href="{{ sitemeta.siteUrl }}{{ page.url |> locale_url('en') }}">
|
||||
<link rel="alternate" hreflang="{{ page.lang }}" href="{{ sitemeta.siteUrl }}{{ page.url }}">
|
||||
{{ for link of page.url | locale_links }}
|
||||
<link rel="alternate" hreflang="{{ link.lang }}" href="{{ sitemeta.siteUrl }}{{ link.url }}">
|
||||
{{ /for }}
|
||||
<link rel="alternate" hreflang="x-default" href="{{ sitemeta.siteUrl }}{{ page.url |> locale_url('en') }}">
|
||||
|
||||
<!-- Metadata -->
|
||||
<meta property="og:title" content="{{ title }}">
|
||||
<meta name="generator" content="{{ eleventy.generator }}">
|
||||
<meta name="fediverse:creator" content="{{ profileitems.socials.mastodon.user }}">
|
||||
<meta property="og:site_name" content="{{ sitemeta[page.lang].siteName }}">
|
||||
<meta property="og:type" content="{{ tags && tags.includes("posts") ? "article" : "website" }}">
|
||||
<meta name="description" content="{{ desc || sitemeta[page.lang].siteDescription() }}">
|
||||
<meta property="og:url" content="{{ sitemeta.siteUrl }}{{ page.url }}">
|
||||
<meta property="og:image" content="{{ sitemeta.siteUrl }}/assets/galaxy-garden-meta-img.png">
|
||||
<meta name="theme-color" content="#512b85">
|
||||
<!-- Metadata -->
|
||||
<meta property="og:title" content="{{ title }}">
|
||||
<meta name="generator" content="{{ eleventy.generator }}">
|
||||
<meta name="fediverse:creator" content="{{ profileitems.socials.mastodon.user }}">
|
||||
<meta property="og:site_name" content="{{ sitemeta[page.lang].siteName }}">
|
||||
<meta property="og:type" content="{{ tags && tags.includes("posts") ? "article" : "website" }}">
|
||||
<meta name="description" content="{{ desc || sitemeta[page.lang].siteDescription() }}">
|
||||
<meta property="og:url" content="{{ sitemeta.siteUrl }}{{ page.url }}">
|
||||
<meta property="og:image" content="{{ sitemeta.siteUrl }}/assets/galaxy-garden-meta-img.png">
|
||||
<meta name="theme-color" content="#512b85">
|
||||
|
||||
<!-- Fonts -->
|
||||
{{ include "partials/fonts.vto" }}
|
||||
<!-- CSS -->
|
||||
{{ include "partials/css.vto" }}
|
||||
<!-- Feeds -->
|
||||
<link rel="alternate" type="application/rss+xml" title="{{ sitemeta[page.lang].siteName }}" href="/{{ page.lang }}/{{ sitemeta.feedPath }}">
|
||||
</head>
|
||||
<body>
|
||||
<div class="skip-btn"><a href="#content">{{ langstrings[page.lang].skipToContent }}</a></div>
|
||||
{{ include "partials/header.vto" }}
|
||||
<main id="content">
|
||||
{{ content }}
|
||||
</main>
|
||||
{{ include "partials/footer.vto" }}
|
||||
</body>
|
||||
<!-- Fonts -->
|
||||
{{ include "partials/fonts.vto" }}
|
||||
<!-- CSS -->
|
||||
{{ include "partials/css.vto" }}
|
||||
<!-- Feeds -->
|
||||
<link rel="alternate" type="application/rss+xml" title="{{ sitemeta[page.lang].siteName }}" href="/{{ page.lang }}/{{ sitemeta.feedPath }}">
|
||||
</head>
|
||||
<body>
|
||||
<div class="skip-btn"><a href="#content">{{ langstrings[page.lang].skipToContent }}</a></div>
|
||||
{{ include "partials/header.vto" }}
|
||||
<main id="content">
|
||||
{{ content }}
|
||||
</main>
|
||||
{{ include "partials/footer.vto" }}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -15,16 +15,16 @@ eleventyComputed:
|
||||
|
||||
{{ function siteBadges(url, file, alt, width=143, height=50) }}
|
||||
<a href="{{ url }}">
|
||||
<img src="/assets/badges/{{ file }}" alt="{{ alt }}" width="{{ width }}" height="{{ height }}" loading="lazy">
|
||||
<img src="/assets/badges/{{ file }}" alt="{{ alt }}" width="{{ width }}" height="{{ height }}" loading="lazy">
|
||||
</a>
|
||||
{{ /function }}
|
||||
|
||||
<div class="web-graphics p-margin-top">
|
||||
{{ siteBadges("https://badge.les.bi/", "lesbian-nonbinary.svg", "Lesbian and non-binary pride") }}
|
||||
{{ siteBadges("https://en.wikipedia.org/wiki/Disability_flag", "disability-pride.svg", "Disability pride") }}
|
||||
{{ siteBadges("https://ko-fi.com/s/798b83fbcc", "coffee-powered.svg", "Coffee powered") }}
|
||||
{{ siteBadges("https://people.pledge.party/", "people-pledge.svg", "The People Pledge") }}
|
||||
{{ siteBadges("https://fightfascism.neocities.org/", "fight-fascism.jpg", "Fight fascism", 220, 37) }}
|
||||
{{ siteBadges("https://badge.les.bi/", "lesbian-nonbinary.svg", "Lesbian and non-binary pride") }}
|
||||
{{ siteBadges("https://en.wikipedia.org/wiki/Disability_flag", "disability-pride.svg", "Disability pride") }}
|
||||
{{ siteBadges("https://ko-fi.com/s/798b83fbcc", "coffee-powered.svg", "Coffee powered") }}
|
||||
{{ siteBadges("https://people.pledge.party/", "people-pledge.svg", "The People Pledge") }}
|
||||
{{ siteBadges("https://fightfascism.neocities.org/", "fight-fascism.jpg", "Fight fascism", 220, 37) }}
|
||||
</div>
|
||||
|
||||
<h2 class="text-center">{{ langstrings[page.lang].latestPosts }}</h2>
|
||||
@@ -34,11 +34,11 @@ eleventyComputed:
|
||||
<h2 class="text-center">{{ langstrings[page.lang].webDirectories }}</h2>
|
||||
<p class="text-center">{{ sitemeta[page.lang].siteName }}{{ langstrings[page.lang].directoryDesc }}</p>
|
||||
<ul class="inline-list" style="margin-top: 0.7em;">
|
||||
<li><a href="https://blogofthe.day/">Blog of the .Day</a></li>
|
||||
<li><a href="https://blogroll.club/">blogroll.club</a></li>
|
||||
<li><a href="https://darktheme.club/">Darktheme Club</a></li>
|
||||
<li><a href="https://www.11ty.dev/authors/">Eleventy Authors</a></li>
|
||||
<li><a href="https://indieblog.page/">indieblog.page</a></li>
|
||||
<li><a href="https://url.town/">url.town</a></li>
|
||||
<li><a href="https://blogroll.org/">Ye Olde Blogroll</a></li>
|
||||
<li><a href="https://blogofthe.day/">Blog of the .Day</a></li>
|
||||
<li><a href="https://blogroll.club/">blogroll.club</a></li>
|
||||
<li><a href="https://darktheme.club/">Darktheme Club</a></li>
|
||||
<li><a href="https://www.11ty.dev/authors/">Eleventy Authors</a></li>
|
||||
<li><a href="https://indieblog.page/">indieblog.page</a></li>
|
||||
<li><a href="https://url.town/">url.town</a></li>
|
||||
<li><a href="https://blogroll.org/">Ye Olde Blogroll</a></li>
|
||||
</ul>
|
||||
|
||||
@@ -2,34 +2,34 @@
|
||||
layout: layouts/base
|
||||
---
|
||||
<header class="main__header">
|
||||
<h1>{{ pageTitle || title }}</h1>
|
||||
<p>{{ desc }}</p>
|
||||
{{ set altLangs = page.url |> locale_links }}
|
||||
{{ if pageLangOptions && altLangs.length > 0 }}
|
||||
<nav aria-label="{{ langstrings[page.lang].translations }}">
|
||||
{{ langstrings[page.lang].availableLang }}
|
||||
{{ for link of page.url |> locale_links }}
|
||||
<a href="{{ link.url }}" lang="{{ link.lang }}" hreflang="{{ link.lang }}">
|
||||
<span lang="{{ sitemeta.siteLang[link.lang].code }}">{{ sitemeta.siteLang[link.lang].long }}</span>
|
||||
</a>
|
||||
{{ /for }}
|
||||
</nav>
|
||||
{{ /if }}
|
||||
<h1>{{ pageTitle || title }}</h1>
|
||||
<p>{{ desc }}</p>
|
||||
{{ set altLangs = page.url |> locale_links }}
|
||||
{{ if pageLangOptions && altLangs.length > 0 }}
|
||||
<nav aria-label="{{ langstrings[page.lang].translations }}">
|
||||
{{ langstrings[page.lang].availableLang }}
|
||||
{{ for link of page.url |> locale_links }}
|
||||
<a href="{{ link.url }}" lang="{{ link.lang }}" hreflang="{{ link.lang }}">
|
||||
<span lang="{{ sitemeta.siteLang[link.lang].code }}">{{ sitemeta.siteLang[link.lang].long }}</span>
|
||||
</a>
|
||||
{{ /for }}
|
||||
</nav>
|
||||
{{ /if }}
|
||||
</header>
|
||||
<article class="prose page">
|
||||
{{ if toc }}
|
||||
<details class="toc__wrapper">
|
||||
<summary class="toc__heading" id="toc-heading">
|
||||
{{ langstrings[page.lang].pageToC }}
|
||||
</summary>
|
||||
{{ content |> toc }}
|
||||
</details>
|
||||
{{ /if }}
|
||||
{{ if toc }}
|
||||
<details class="toc__wrapper">
|
||||
<summary class="toc__heading" id="toc-heading">
|
||||
{{ langstrings[page.lang].pageToC }}
|
||||
</summary>
|
||||
{{ content |> toc }}
|
||||
</details>
|
||||
{{ /if }}
|
||||
|
||||
{{ content }}
|
||||
{{ if updated }}
|
||||
<p class="updated">
|
||||
{{ page.lang === "zh" ? "(" : "(" }}{{ langstrings[page.lang].updated }} <time datetime="{{ updated }}">{{ updated |> formatDate }}</time>{{ page.lang === "zh" ? ")" : ")" }}
|
||||
</p>
|
||||
{{ /if }}
|
||||
{{ content }}
|
||||
{{ if updated }}
|
||||
<p class="updated">
|
||||
{{ page.lang === "zh" ? "(" : "(" }}{{ langstrings[page.lang].updated }} <time datetime="{{ updated }}">{{ updated |> formatDate }}</time>{{ page.lang === "zh" ? ")" : ")" }}
|
||||
</p>
|
||||
{{ /if }}
|
||||
</article>
|
||||
|
||||
@@ -2,85 +2,85 @@
|
||||
layout: layouts/base
|
||||
---
|
||||
<header class="main__header">
|
||||
<h1>{{ title }}</h1>
|
||||
<h1>{{ title }}</h1>
|
||||
</header>
|
||||
<post-wrapper>
|
||||
<aside class="post__sidebar">
|
||||
<ul class="post__meta">
|
||||
<li>
|
||||
<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="M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L64 64C28.7 64 0 92.7 0 128l0 16 0 48L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-256 0-48 0-16c0-35.3-28.7-64-64-64l-40 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L152 64l0-40zM48 192l80 0 0 56-80 0 0-56zm0 104l80 0 0 64-80 0 0-64zm128 0l96 0 0 64-96 0 0-64zm144 0l80 0 0 64-80 0 0-64zm80-48l-80 0 0-56 80 0 0 56zm0 160l0 40c0 8.8-7.2 16-16 16l-64 0 0-56 80 0zm-128 0l0 56-96 0 0-56 96 0zm-144 0l0 56-64 0c-8.8 0-16-7.2-16-16l0-40 80 0zM272 248l-96 0 0-56 96 0 0 56z"/></svg>
|
||||
<strong>{{ langstrings[page.lang].published }}</strong> <time datetime="{{ date }}">{{ date |> formatDate(page.lang) }}</time>
|
||||
</li>
|
||||
{{ if updated }}
|
||||
<li>
|
||||
<svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 64z"/></svg>
|
||||
<strong>{{ langstrings[page.lang].updated }}</strong> <time datetime="{{ updated }}">{{ updated |> formatDate(page.lang) }}</time>
|
||||
</li>
|
||||
{{ /if }}
|
||||
<li>
|
||||
<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="M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0z"/></svg>
|
||||
<strong>{{ langstrings[page.lang].author }}</strong> {{ sitemeta[page.lang].siteAuthor.name }}
|
||||
</li>
|
||||
<li>
|
||||
<svg class="inline-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M0 80L0 229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7L48 32C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>
|
||||
<strong>{{ langstrings[page.lang].topics }}</strong>
|
||||
{{ for topic of topics }}
|
||||
<a href="/{{ page.lang }}/topics/{{ topic |> slugStr }}">{{ topic }}</a>{{ if topics.indexOf(topic) !== topics.length - 1 }}, {{ /if }}
|
||||
{{ /for }}
|
||||
</li>
|
||||
{{ set altLangs = page.url |> locale_links }}
|
||||
{{ if altLangs.length > 0 }}
|
||||
<li>
|
||||
<svg class="inline-icon" 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="M0 128C0 92.7 28.7 64 64 64l192 0 48 0 16 0 256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64l-256 0-16 0-48 0L64 448c-35.3 0-64-28.7-64-64L0 128zm320 0l0 256 256 0 0-256-256 0zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1 73.6 0 8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276l-38 0 19-42.8zM448 164c11 0 20 9 20 20l0 4 44 0 16 0c11 0 20 9 20 20s-9 20-20 20l-2 0-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45L448 228l-72 0c-11 0-20-9-20-20s9-20 20-20l52 0 0-4c0-11 9-20 20-20z"/></svg>
|
||||
<strong>{{ langstrings[page.lang].postLang }}</strong>
|
||||
{{ for link of page.url |> locale_links }}
|
||||
<a href="{{ link.url }}" lang="{{ link.lang }}" hreflang="{{ link.lang }}">
|
||||
<span lang="{{ sitemeta.siteLang[link.lang].code }}">{{ sitemeta.siteLang[link.lang].long }}</span>
|
||||
</a>
|
||||
{{ /for }}
|
||||
</li>
|
||||
{{ /if }}
|
||||
</ul>
|
||||
<aside class="post__sidebar">
|
||||
<ul class="post__meta">
|
||||
<li>
|
||||
<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="M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L64 64C28.7 64 0 92.7 0 128l0 16 0 48L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-256 0-48 0-16c0-35.3-28.7-64-64-64l-40 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L152 64l0-40zM48 192l80 0 0 56-80 0 0-56zm0 104l80 0 0 64-80 0 0-64zm128 0l96 0 0 64-96 0 0-64zm144 0l80 0 0 64-80 0 0-64zm80-48l-80 0 0-56 80 0 0 56zm0 160l0 40c0 8.8-7.2 16-16 16l-64 0 0-56 80 0zm-128 0l0 56-96 0 0-56 96 0zm-144 0l0 56-64 0c-8.8 0-16-7.2-16-16l0-40 80 0zM272 248l-96 0 0-56 96 0 0 56z"/></svg>
|
||||
<strong>{{ langstrings[page.lang].published }}</strong> <time datetime="{{ date }}">{{ date |> formatDate(page.lang) }}</time>
|
||||
</li>
|
||||
{{ if updated }}
|
||||
<li>
|
||||
<svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 64z"/></svg>
|
||||
<strong>{{ langstrings[page.lang].updated }}</strong> <time datetime="{{ updated }}">{{ updated |> formatDate(page.lang) }}</time>
|
||||
</li>
|
||||
{{ /if }}
|
||||
<li>
|
||||
<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="M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0z"/></svg>
|
||||
<strong>{{ langstrings[page.lang].author }}</strong> {{ sitemeta[page.lang].siteAuthor.name }}
|
||||
</li>
|
||||
<li>
|
||||
<svg class="inline-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M0 80L0 229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7L48 32C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>
|
||||
<strong>{{ langstrings[page.lang].topics }}</strong>
|
||||
{{ for topic of topics }}
|
||||
<a href="/{{ page.lang }}/topics/{{ topic |> slugStr }}">{{ topic }}</a>{{ if topics.indexOf(topic) !== topics.length - 1 }}, {{ /if }}
|
||||
{{ /for }}
|
||||
</li>
|
||||
{{ set altLangs = page.url |> locale_links }}
|
||||
{{ if altLangs.length > 0 }}
|
||||
<li>
|
||||
<svg class="inline-icon" 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="M0 128C0 92.7 28.7 64 64 64l192 0 48 0 16 0 256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64l-256 0-16 0-48 0L64 448c-35.3 0-64-28.7-64-64L0 128zm320 0l0 256 256 0 0-256-256 0zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1 73.6 0 8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276l-38 0 19-42.8zM448 164c11 0 20 9 20 20l0 4 44 0 16 0c11 0 20 9 20 20s-9 20-20 20l-2 0-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45L448 228l-72 0c-11 0-20-9-20-20s9-20 20-20l52 0 0-4c0-11 9-20 20-20z"/></svg>
|
||||
<strong>{{ langstrings[page.lang].postLang }}</strong>
|
||||
{{ for link of page.url |> locale_links }}
|
||||
<a href="{{ link.url }}" lang="{{ link.lang }}" hreflang="{{ link.lang }}">
|
||||
<span lang="{{ sitemeta.siteLang[link.lang].code }}">{{ sitemeta.siteLang[link.lang].long }}</span>
|
||||
</a>
|
||||
{{ /for }}
|
||||
</li>
|
||||
{{ /if }}
|
||||
</ul>
|
||||
|
||||
{{ if toc }}
|
||||
<details class="toc__wrapper post-toc">
|
||||
<summary class="toc__heading" id="toc-heading">
|
||||
{{ langstrings[page.lang].postToC }}
|
||||
</summary>
|
||||
{{ content |> toc }}
|
||||
</details>
|
||||
{{ /if }}
|
||||
</aside>
|
||||
<article class="prose">
|
||||
{{ content }}
|
||||
{{ if toc }}
|
||||
<details class="toc__wrapper post-toc">
|
||||
<summary class="toc__heading" id="toc-heading">
|
||||
{{ langstrings[page.lang].postToC }}
|
||||
</summary>
|
||||
{{ content |> toc }}
|
||||
</details>
|
||||
{{ /if }}
|
||||
</aside>
|
||||
<article class="prose">
|
||||
{{ content }}
|
||||
|
||||
<a class="link-btn" rel="nofollow, noindex" href="mailto:{{ sitemeta.siteAuthor.email }}?subject={{ langstrings[page.lang].emailReplySubject }}{{ title }}">
|
||||
<svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM0 176L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-208L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z"/></svg>
|
||||
{{ langstrings[page.lang].replyByEmail }}
|
||||
</a>
|
||||
<a class="link-btn" rel="nofollow, noindex" href="mailto:{{ sitemeta.siteAuthor.email }}?subject={{ langstrings[page.lang].emailReplySubject }}{{ title }}">
|
||||
<svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM0 176L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-208L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z"/></svg>
|
||||
{{ langstrings[page.lang].replyByEmail }}
|
||||
</a>
|
||||
|
||||
{{# TODO: Uncomment after the issue with Eleventy's i18n plugin fetching collection items are fixed
|
||||
{{ set postCollection = collections.posts }}
|
||||
{{ if postCollection.length > 1 }}
|
||||
<nav class="post__pagination" aria-labelledby="post-pagination">
|
||||
<h2 id="post-pagination" class="visually-hidden">{{ langstrings[page.lang].nextPrev }}</h2>
|
||||
{{ set previousPost = postCollection |> getPreviousCollectionItem(page) }}
|
||||
{{ set nextPost = postCollection |> getNextCollectionItem(page) }}
|
||||
<ul class="post__nextprev">
|
||||
{{ if previousPost }}
|
||||
<li class="post__prev">
|
||||
<p>{{ langstrings[page.lang].prevPost }}</p>
|
||||
<a href="{{ previousPost.url |> locale_url }}">{{ previousPost.data.title }}</a>
|
||||
</li>
|
||||
{{ /if }}
|
||||
{{ if nextPost }}
|
||||
<li class="post__next">
|
||||
<p>{{ langstrings[page.lang].nextPost }}</p>
|
||||
<a href="{{ nextPost.url |> locale_url }}">{{ nextPost.data.title }}</a>
|
||||
</li>
|
||||
{{ /if }}
|
||||
</ul>
|
||||
</nav>
|
||||
{{ /if }} #}}
|
||||
</article>
|
||||
{{# TODO: Uncomment after the issue with Eleventy's i18n plugin fetching collection items are fixed
|
||||
{{ set postCollection = collections.posts }}
|
||||
{{ if postCollection.length > 1 }}
|
||||
<nav class="post__pagination" aria-labelledby="post-pagination">
|
||||
<h2 id="post-pagination" class="visually-hidden">{{ langstrings[page.lang].nextPrev }}</h2>
|
||||
{{ set previousPost = postCollection |> getPreviousCollectionItem(page) }}
|
||||
{{ set nextPost = postCollection |> getNextCollectionItem(page) }}
|
||||
<ul class="post__nextprev">
|
||||
{{ if previousPost }}
|
||||
<li class="post__prev">
|
||||
<p>{{ langstrings[page.lang].prevPost }}</p>
|
||||
<a href="{{ previousPost.url |> locale_url }}">{{ previousPost.data.title }}</a>
|
||||
</li>
|
||||
{{ /if }}
|
||||
{{ if nextPost }}
|
||||
<li class="post__next">
|
||||
<p>{{ langstrings[page.lang].nextPost }}</p>
|
||||
<a href="{{ nextPost.url |> locale_url }}">{{ nextPost.data.title }}</a>
|
||||
</li>
|
||||
{{ /if }}
|
||||
</ul>
|
||||
</nav>
|
||||
{{ /if }} #}}
|
||||
</article>
|
||||
</post-wrapper>
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<link rel="canonical" href="{{ sitemeta.siteUrl }}/">
|
||||
<meta name="generator" content="{{ eleventy.generator }}">
|
||||
<meta name="author" content="{{ sitemeta[page.lang].siteAuthor.name }}">
|
||||
<meta name="description" content="{{ desc || sitemeta[page.lang].siteDescription() }}">
|
||||
<meta property="og:site_name" content="{{ sitemeta.en.siteName }}" />
|
||||
<meta property="og:title" content="{{ sitemeta.en.siteName }}">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:description" content="{{ sitemeta.en.siteDescription() }}">
|
||||
<meta name="fediverse:creator" content="{{ profileitems.socials.mastodon.user }}">
|
||||
<meta property="og:url" content="{{ sitemeta.siteUrl }}">
|
||||
<meta property="og:locale" content="en">
|
||||
<link rel="canonical" href="{{ sitemeta.siteUrl }}/">
|
||||
<meta name="generator" content="{{ eleventy.generator }}">
|
||||
<meta name="author" content="{{ sitemeta[page.lang].siteAuthor.name }}">
|
||||
<meta name="description" content="{{ desc || sitemeta[page.lang].siteDescription() }}">
|
||||
<meta property="og:site_name" content="{{ sitemeta.en.siteName }}" />
|
||||
<meta property="og:title" content="{{ sitemeta.en.siteName }}">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:description" content="{{ sitemeta.en.siteDescription() }}">
|
||||
<meta name="fediverse:creator" content="{{ profileitems.socials.mastodon.user }}">
|
||||
<meta property="og:url" content="{{ sitemeta.siteUrl }}">
|
||||
<meta property="og:locale" content="en">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/root.css">
|
||||
<title>{{ title }}{{ titleZh ? " " + titleZh : "" }}</title>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>{{ title }}{{ titleZh ? ' <span lang="zh">' + titleZh + '</span>' : '' }}</h1>
|
||||
</header>
|
||||
<main>
|
||||
<article>
|
||||
{{ content }}
|
||||
</article>
|
||||
</main>
|
||||
<footer>
|
||||
<p>Made with 💜 by <a href="https://helenchong.omg.lol/">{{ sitemeta.en.siteAuthor.name }}</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
<link rel="stylesheet" href="/assets/css/root.css">
|
||||
<title>{{ title }}{{ titleZh ? " " + titleZh : "" }}</title>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>{{ title }}{{ titleZh ? ' <span lang="zh">' + titleZh + '</span>' : '' }}</h1>
|
||||
</header>
|
||||
<main>
|
||||
<article>
|
||||
{{ content }}
|
||||
</article>
|
||||
</main>
|
||||
<footer>
|
||||
<p>Made with 💜 by <a href="https://helenchong.omg.lol/">{{ sitemeta.en.siteAuthor.name }}</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{{ set cssFiles = [
|
||||
"global",
|
||||
"general",
|
||||
"layouts",
|
||||
"components",
|
||||
"pridesymbols",
|
||||
"utility"
|
||||
"global",
|
||||
"general",
|
||||
"layouts",
|
||||
"components",
|
||||
"pridesymbols",
|
||||
"utility"
|
||||
] }}
|
||||
|
||||
{{ for file of cssFiles }}
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
<link rel="preload" href="/assets/fonts/readex-pro/readex-pro-v22-latin-regular.woff2" as="font" type="font/woff2" crossorigin="anonymous">
|
||||
<link rel="preload" href="/assets/fonts/readex-pro/readex-pro-v22-latin-700.woff2" as="font" type="font/woff2" crossorigin="anonymous">
|
||||
<style>
|
||||
@font-face {
|
||||
font-display: swap;
|
||||
font-family: 'Readex Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url('/assets/fonts/readex-pro/readex-pro-v22-latin-regular.woff2') format('woff2');
|
||||
}
|
||||
@font-face {
|
||||
font-display: swap;
|
||||
font-family: 'Readex Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: url('/assets/fonts/readex-pro/readex-pro-v22-latin-700.woff2') format('woff2');
|
||||
}
|
||||
@font-face {
|
||||
font-display: swap;
|
||||
font-family: 'Readex Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url('/assets/fonts/readex-pro/readex-pro-v22-latin-regular.woff2') format('woff2');
|
||||
}
|
||||
@font-face {
|
||||
font-display: swap;
|
||||
font-family: 'Readex Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: url('/assets/fonts/readex-pro/readex-pro-v22-latin-700.woff2') format('woff2');
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="/assets/fonts/fonts.css">
|
||||
|
||||
@@ -1,71 +1,71 @@
|
||||
{{ if page.lang === "zh" }}
|
||||
{{ set madeWithHeart }}{{ sitemeta[page.lang].siteName }}由 {{ sitemeta[page.lang].siteAuthor.name }} 用💜打造{{ /set }}
|
||||
{{ set madeWithHeart }}{{ sitemeta[page.lang].siteName }}由 {{ sitemeta[page.lang].siteAuthor.name }} 用💜打造{{ /set }}
|
||||
{{ else }}
|
||||
{{ set madeWithHeart }}{{ sitemeta[page.lang].siteName }} is made with 💜 by {{ sitemeta[page.lang].siteAuthor.name }}{{ /set }}
|
||||
{{ set madeWithHeart }}{{ sitemeta[page.lang].siteName }} is made with 💜 by {{ sitemeta[page.lang].siteAuthor.name }}{{ /set }}
|
||||
{{ /if }}
|
||||
|
||||
{{ if page.lang === "zh" }}
|
||||
{{ set builtWith11ty }}用 <a href="https://www.11ty.dev/">Eleventy</a> {{ eleventy.version }} 版本建立{{ /set }}
|
||||
{{ set builtWith11ty }}用 <a href="https://www.11ty.dev/">Eleventy</a> {{ eleventy.version }} 版本建立{{ /set }}
|
||||
{{ else }}
|
||||
{{ set builtWith11ty }}Built with <a href="https://www.11ty.dev/">Eleventy</a> v{{ eleventy.version }}{{ /set }}
|
||||
{{ set builtWith11ty }}Built with <a href="https://www.11ty.dev/">Eleventy</a> v{{ eleventy.version }}{{ /set }}
|
||||
{{ /if }}
|
||||
|
||||
<footer class="footer">
|
||||
<nav aria-labelledby="footer-nav">
|
||||
<p id="footer-nav" class="visually-hidden">{{ langstrings[page.lang].footerNav }}</p>
|
||||
<ul class="inline-list">
|
||||
<li>
|
||||
<a href="/{{ page.lang }}/{{ 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>{{ langstrings[page.lang].rssFeed }}</a>
|
||||
</li>
|
||||
{{ for item of collections["footernav_" + page.lang] }}
|
||||
<li>
|
||||
<a href="{{ item.url }}"{{ if item.url == page.url }} aria-current="page"{{ /if }}>{{ item.data.navTitle || item.data.title }}</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
</ul>
|
||||
</nav>
|
||||
<p>
|
||||
<svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM0 176L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-208L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z"/></svg>
|
||||
<a rel="nofollow, noindex" href="{{ sitemeta.siteAuthor.emailDecoyUrl }}">{{ langstrings[page.lang].emailContact }}</a> {{ langstrings[page.lang].plaintxtEmail }}
|
||||
</p>
|
||||
<p>{{ madeWithHeart }}</p>
|
||||
<p>{{ builtWith11ty }} • <a href="https://git.helenchong.dev/helenchong/helenchong-blog">{{ langstrings[page.lang].sourceCode }}</a></p>
|
||||
<nav aria-labelledby="footer-nav">
|
||||
<p id="footer-nav" class="visually-hidden">{{ langstrings[page.lang].footerNav }}</p>
|
||||
<ul class="inline-list">
|
||||
<li>
|
||||
<a href="/{{ page.lang }}/{{ 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>{{ langstrings[page.lang].rssFeed }}</a>
|
||||
</li>
|
||||
{{ for item of collections["footernav_" + page.lang] }}
|
||||
<li>
|
||||
<a href="{{ item.url }}"{{ if item.url == page.url }} aria-current="page"{{ /if }}>{{ item.data.navTitle || item.data.title }}</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
</ul>
|
||||
</nav>
|
||||
<p>
|
||||
<svg class="inline-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM0 176L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-208L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z"/></svg>
|
||||
<a rel="nofollow, noindex" href="{{ sitemeta.siteAuthor.emailDecoyUrl }}">{{ langstrings[page.lang].emailContact }}</a> {{ langstrings[page.lang].plaintxtEmail }}
|
||||
</p>
|
||||
<p>{{ madeWithHeart }}</p>
|
||||
<p>{{ builtWith11ty }} • <a href="https://git.helenchong.dev/helenchong/helenchong-blog">{{ langstrings[page.lang].sourceCode }}</a></p>
|
||||
|
||||
<div class="grid-center">
|
||||
<img src="/assets/galaxygarden/galaxy-garden-88x31.svg" alt="{{ langstrings[page.lang].siteBadgeAlt }}" width="88" height="31" loading="lazy">
|
||||
</div>
|
||||
<div class="grid-center">
|
||||
<img src="/assets/galaxygarden/galaxy-garden-88x31.svg" alt="{{ langstrings[page.lang].siteBadgeAlt }}" width="88" height="31" loading="lazy">
|
||||
</div>
|
||||
|
||||
<nav class="grid-center" aria-labelledby="social-nav">
|
||||
<p id="social-nav" class="visually-hidden">{{ langstrings[page.lang].socialNav }}</p>
|
||||
<ul class="inline-list">
|
||||
<li class="socials__item">
|
||||
<img class="socials__icon" src="{{ profileitems.omgLol.icon }}" alt="">
|
||||
<a class="socials__link" href="{{ profileitems.omgLol.url }}" rel="me">
|
||||
{{ profileitems.omgLol.name }}
|
||||
</a>
|
||||
</li>
|
||||
{{ for social, values of profileitems.socials }}
|
||||
<li class="socials__item">
|
||||
<img class="socials__icon" src="{{ values.icon }}" alt="">
|
||||
<a
|
||||
class="socials__link{{ if values.isExternalLink }} external-link{{ /if }}"
|
||||
href="{{ values.url }}"
|
||||
rel="me"
|
||||
>
|
||||
{{ values.name }}
|
||||
</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="grid-center" aria-labelledby="social-nav">
|
||||
<p id="social-nav" class="visually-hidden">{{ langstrings[page.lang].socialNav }}</p>
|
||||
<ul class="inline-list">
|
||||
<li class="socials__item">
|
||||
<img class="socials__icon" src="{{ profileitems.omgLol.icon }}" alt="">
|
||||
<a class="socials__link" href="{{ profileitems.omgLol.url }}" rel="me">
|
||||
{{ profileitems.omgLol.name }}
|
||||
</a>
|
||||
</li>
|
||||
{{ for social, values of profileitems.socials }}
|
||||
<li class="socials__item">
|
||||
<img class="socials__icon" src="{{ values.icon }}" alt="">
|
||||
<a
|
||||
class="socials__link{{ if values.isExternalLink }} external-link{{ /if }}"
|
||||
href="{{ values.url }}"
|
||||
rel="me"
|
||||
>
|
||||
{{ values.name }}
|
||||
</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<a class="block margin-center list-margin-top" href="https://buymeacoffee.com/helenchong"><img src="/assets/icons/buymeacoffee.png" alt="Buy Me a Coffee" width="200" height="56" loading="lazy"></a>
|
||||
<a class="block margin-center list-margin-top" href="https://buymeacoffee.com/helenchong"><img src="/assets/icons/buymeacoffee.png" alt="Buy Me a Coffee" width="200" height="56" loading="lazy"></a>
|
||||
|
||||
<a href="#top" class="top-btn">
|
||||
<svg class="top-btn__arrow" focusable="false" aria-hidden="true" viewBox="0 0 26 28">
|
||||
<path d="M25.172 15.172c0 0.531-0.219 1.031-0.578 1.406l-1.172 1.172c-0.375 0.375-0.891 0.594-1.422 0.594s-1.047-0.219-1.406-0.594l-4.594-4.578v11c0 1.125-0.938 1.828-2 1.828h-2c-1.062 0-2-0.703-2-1.828v-11l-4.594 4.578c-0.359 0.375-0.875 0.594-1.406 0.594s-1.047-0.219-1.406-0.594l-1.172-1.172c-0.375-0.375-0.594-0.875-0.594-1.406s0.219-1.047 0.594-1.422l10.172-10.172c0.359-0.375 0.875-0.578 1.406-0.578s1.047 0.203 1.422 0.578l10.172 10.172c0.359 0.375 0.578 0.891 0.578 1.422z"></path>
|
||||
</svg>
|
||||
{{ langstrings[page.lang].backToTop }}
|
||||
</a>
|
||||
<a href="#top" class="top-btn">
|
||||
<svg class="top-btn__arrow" focusable="false" aria-hidden="true" viewBox="0 0 26 28">
|
||||
<path d="M25.172 15.172c0 0.531-0.219 1.031-0.578 1.406l-1.172 1.172c-0.375 0.375-0.891 0.594-1.422 0.594s-1.047-0.219-1.406-0.594l-4.594-4.578v11c0 1.125-0.938 1.828-2 1.828h-2c-1.062 0-2-0.703-2-1.828v-11l-4.594 4.578c-0.359 0.375-0.875 0.594-1.406 0.594s-1.047-0.219-1.406-0.594l-1.172-1.172c-0.375-0.375-0.594-0.875-0.594-1.406s0.219-1.047 0.594-1.422l10.172-10.172c0.359-0.375 0.875-0.578 1.406-0.578s1.047 0.203 1.422 0.578l10.172 10.172c0.359 0.375 0.578 0.891 0.578 1.422z"></path>
|
||||
</svg>
|
||||
{{ langstrings[page.lang].backToTop }}
|
||||
</a>
|
||||
</footer>
|
||||
|
||||
@@ -1,36 +1,36 @@
|
||||
{{ set currentUrl = page.url }}
|
||||
|
||||
<header class="header">
|
||||
<div class="header__sitename">
|
||||
<img src="/assets/galaxygarden/galaxy-garden-logo.webp" alt="" width="35" height="35">
|
||||
<h2 class="header__title">
|
||||
<a {{ if currentUrl === `/${page.lang}/` }} aria-current="page"{{ /if }} href="{{ "/" |> locale_url }}">
|
||||
{{ sitemeta[page.lang].siteName }}
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
<nav aria-labelledby="main-nav">
|
||||
<h3 id="main-nav" class="visually-hidden">{{ langstrings[page.lang].mainNav }}</h3>
|
||||
<ul class="header__navlinks">
|
||||
{{ for item of collections["headernav_" + page.lang] }}
|
||||
<li>
|
||||
<a href="{{ item.url }}"
|
||||
{{ if item.url == page.url }} aria-current="page"{{ /if }}
|
||||
{{ if currentUrl.includes("/posts") && item.url.includes("/posts") }}class="link--active"{{ /if }}
|
||||
>{{ item.data.navTitle || item.data.title }}</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="header__lang" aria-labelledby="header-lang-options">
|
||||
<h3 id="header-lang-options" class="visually-hidden">{{ langstrings[page.lang].langOptions }}</h3>
|
||||
<svg class="header__lang--icon" 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="M0 128C0 92.7 28.7 64 64 64l192 0 48 0 16 0 256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64l-256 0-16 0-48 0L64 448c-35.3 0-64-28.7-64-64L0 128zm320 0l0 256 256 0 0-256-256 0zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1 73.6 0 8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276l-38 0 19-42.8zM448 164c11 0 20 9 20 20l0 4 44 0 16 0c11 0 20 9 20 20s-9 20-20 20l-2 0-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45L448 228l-72 0c-11 0-20-9-20-20s9-20 20-20l52 0 0-4c0-11 9-20 20-20z"/></svg>
|
||||
{{ for lang, values of sitemeta.siteLang }}
|
||||
{{ if lang !== page.lang }}
|
||||
<a href="{{ "/" |> locale_url(lang) }}" lang="{{ lang }}" hreflang="{{ lang }}">
|
||||
<span lang="{{ sitemeta.siteLang[lang].code }}">{{ sitemeta.siteLang[lang].home }}</span>
|
||||
</a>
|
||||
{{ /if }}
|
||||
{{ /for }}
|
||||
</nav>
|
||||
<div class="header__sitename">
|
||||
<img src="/assets/galaxygarden/galaxy-garden-logo.webp" alt="" width="35" height="35">
|
||||
<h2 class="header__title">
|
||||
<a {{ if currentUrl === `/${page.lang}/` }} aria-current="page"{{ /if }} href="{{ "/" |> locale_url }}">
|
||||
{{ sitemeta[page.lang].siteName }}
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
<nav aria-labelledby="main-nav">
|
||||
<h3 id="main-nav" class="visually-hidden">{{ langstrings[page.lang].mainNav }}</h3>
|
||||
<ul class="header__navlinks">
|
||||
{{ for item of collections["headernav_" + page.lang] }}
|
||||
<li>
|
||||
<a href="{{ item.url }}"
|
||||
{{ if item.url == page.url }} aria-current="page"{{ /if }}
|
||||
{{ if currentUrl.includes("/posts") && item.url.includes("/posts") }}class="link--active"{{ /if }}
|
||||
>{{ item.data.navTitle || item.data.title }}</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="header__lang" aria-labelledby="header-lang-options">
|
||||
<h3 id="header-lang-options" class="visually-hidden">{{ langstrings[page.lang].langOptions }}</h3>
|
||||
<svg class="header__lang--icon" 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="M0 128C0 92.7 28.7 64 64 64l192 0 48 0 16 0 256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64l-256 0-16 0-48 0L64 448c-35.3 0-64-28.7-64-64L0 128zm320 0l0 256 256 0 0-256-256 0zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1 73.6 0 8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276l-38 0 19-42.8zM448 164c11 0 20 9 20 20l0 4 44 0 16 0c11 0 20 9 20 20s-9 20-20 20l-2 0-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45L448 228l-72 0c-11 0-20-9-20-20s9-20 20-20l52 0 0-4c0-11 9-20 20-20z"/></svg>
|
||||
{{ for lang, values of sitemeta.siteLang }}
|
||||
{{ if lang !== page.lang }}
|
||||
<a href="{{ "/" |> locale_url(lang) }}" lang="{{ lang }}" hreflang="{{ lang }}">
|
||||
<span lang="{{ sitemeta.siteLang[lang].code }}">{{ sitemeta.siteLang[lang].home }}</span>
|
||||
</a>
|
||||
{{ /if }}
|
||||
{{ /for }}
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
<ul class="postlist">
|
||||
{{ for post of postList }}
|
||||
<li class="postlist__item">
|
||||
<p class="postlist__item--title">
|
||||
<a href="{{ post.url }}">
|
||||
{{ post.data.title ? post.data.title : '<code>' + post.url + '<code>' }}
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<time class="postlist__item--date" datetime="{{ post.date }}">{{ post.date |> formatDate(page.lang) }}</time>
|
||||
</p>
|
||||
<p>{{ post.data.desc }}</p>
|
||||
</li>
|
||||
{{ /for }}
|
||||
{{ for post of postList }}
|
||||
<li class="postlist__item">
|
||||
<p class="postlist__item--title">
|
||||
<a href="{{ post.url }}">
|
||||
{{ post.data.title ? post.data.title : '<code>' + post.url + '<code>' }}
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<time class="postlist__item--date" datetime="{{ post.date }}">{{ post.date |> formatDate(page.lang) }}</time>
|
||||
</p>
|
||||
<p>{{ post.data.desc }}</p>
|
||||
</li>
|
||||
{{ /for }}
|
||||
</ul>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export default {
|
||||
locale: "en",
|
||||
layout: "layouts/base",
|
||||
locale: "en",
|
||||
layout: "layouts/base",
|
||||
}
|
||||
|
||||
+8
-8
@@ -6,12 +6,12 @@ layout: layouts/home
|
||||
<p>I am {{ sitemeta[page.lang].siteAuthor.name }}, a Millennial queer, autistic and visually impaired Malaysian Chinese person who goes by <a href="{{ profileitems.pronounsPage[page.lang] }}">they/them or she/her pronouns</a>.</p>
|
||||
|
||||
<p>
|
||||
This blog is available in the following languages:
|
||||
<a href="{{ page.url }}" lang="{{ page.lang }}" hreflang="{{ page.lang }}">{{ sitemeta.siteLang[page.lang].long }}</a>,
|
||||
{{ set localeLinks = page.url |> locale_links }}
|
||||
{{ for link of page.url |> locale_links }}
|
||||
<a href="{{ link.url }}" lang="{{ link.lang }}" hreflang="{{ link.lang }}">
|
||||
<span lang="{{ sitemeta.siteLang[link.lang].code }}">{{ sitemeta.siteLang[link.lang].long }}</span>
|
||||
</a>{{ if localeLinks.indexOf(link) !== localeLinks.length - 1 }}, {{ /if }}
|
||||
{{ /for }}
|
||||
This blog is available in the following languages:
|
||||
<a href="{{ page.url }}" lang="{{ page.lang }}" hreflang="{{ page.lang }}">{{ sitemeta.siteLang[page.lang].long }}</a>,
|
||||
{{ set localeLinks = page.url |> locale_links }}
|
||||
{{ for link of page.url |> locale_links }}
|
||||
<a href="{{ link.url }}" lang="{{ link.lang }}" hreflang="{{ link.lang }}">
|
||||
<span lang="{{ sitemeta.siteLang[link.lang].code }}">{{ sitemeta.siteLang[link.lang].long }}</span>
|
||||
</a>{{ if localeLinks.indexOf(link) !== localeLinks.length - 1 }}, {{ /if }}
|
||||
{{ /for }}
|
||||
</p>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
export default {
|
||||
layout: "layouts/page",
|
||||
permalink: "/{{ locale }}/{{ page.fileSlug }}/",
|
||||
pageLangOptions: true
|
||||
layout: "layouts/page",
|
||||
permalink: "/{{ locale }}/{{ page.fileSlug }}/",
|
||||
pageLangOptions: true
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export default {
|
||||
tags: ["posts", "posts_en"],
|
||||
tags: ["posts", "posts_en"],
|
||||
layout: "layouts/post",
|
||||
}
|
||||
|
||||
+7
-7
@@ -7,11 +7,11 @@ eleventyComputed:
|
||||
<p>Welcome to {{ sitemeta.en.siteAuthor.name }}'s personal blog!</p>
|
||||
<h2>This blog is available in these languages:</h2>
|
||||
<ul>
|
||||
{{ for lang, values of sitemeta.siteLang }}
|
||||
<li>
|
||||
<a href="/{{ values.code }}/">
|
||||
<strong><span lang="{{ values.code }}">{{ values.long }}</span></strong>
|
||||
</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
{{ for lang, values of sitemeta.siteLang }}
|
||||
<li>
|
||||
<a href="/{{ values.code }}/">
|
||||
<strong><span lang="{{ values.code }}">{{ values.long }}</span></strong>
|
||||
</a>
|
||||
</li>
|
||||
{{ /for }}
|
||||
</ul>
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ eleventyExcludeFromCollections: true
|
||||
<loc>{{ sitemeta.siteUrl + item.url }}</loc>
|
||||
<lastmod>{{ item.updated ? item.updated.toISOString() : item.date.toISOString() }}</lastmod>
|
||||
<changefreq>{{ item.data.sitemap.changefreq }}</changefreq>
|
||||
<priority>{{ item.data.sitemap.priority }}</priority>
|
||||
<priority>{{ item.data.sitemap.priority }}</priority>
|
||||
</url>
|
||||
{{ /for }}
|
||||
</urlset>
|
||||
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
export default {
|
||||
sitemap: {
|
||||
changefreq: "weekly",
|
||||
priority: 0.5,
|
||||
}
|
||||
sitemap: {
|
||||
changefreq: "weekly",
|
||||
priority: 0.5,
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -7,5 +7,5 @@ layout: layouts/home
|
||||
|
||||
{{ set localeLinks = page.url |> locale_links }}
|
||||
<p>
|
||||
本部落格有以下语言版本:<a href="{{ page.url }}" lang="{{ page.lang }}" hreflang="{{ page.lang }}">{{ sitemeta.siteLang[page.lang].long }}</a>、{{ for link of page.url |> locale_links }}<a href="{{ link.url }}" lang="{{ link.lang }}" hreflang="{{ link.lang }}"><span lang="{{ sitemeta.siteLang[link.lang].code }}">{{ sitemeta.siteLang[link.lang].long }}</span></a>{{ if localeLinks.indexOf(link) !== localeLinks.length - 1 }}、{{ /if }}{{ /for }}
|
||||
本部落格有以下语言版本:<a href="{{ page.url }}" lang="{{ page.lang }}" hreflang="{{ page.lang }}">{{ sitemeta.siteLang[page.lang].long }}</a>、{{ for link of page.url |> locale_links }}<a href="{{ link.url }}" lang="{{ link.lang }}" hreflang="{{ link.lang }}"><span lang="{{ sitemeta.siteLang[link.lang].code }}">{{ sitemeta.siteLang[link.lang].long }}</span></a>{{ if localeLinks.indexOf(link) !== localeLinks.length - 1 }}、{{ /if }}{{ /for }}
|
||||
</p>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
export default {
|
||||
layout: "layouts/page",
|
||||
permalink: "/{{ locale }}/{{ page.fileSlug }}/",
|
||||
pageLangOptions: true
|
||||
layout: "layouts/page",
|
||||
permalink: "/{{ locale }}/{{ page.fileSlug }}/",
|
||||
pageLangOptions: true
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export default {
|
||||
layout: "layouts/post",
|
||||
tags: ["posts_zh"],
|
||||
layout: "layouts/post",
|
||||
tags: ["posts_zh"],
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export default {
|
||||
locale: "zh",
|
||||
layout: "layouts/base",
|
||||
locale: "zh",
|
||||
layout: "layouts/base",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user