mirror of
https://github.com/one-among-us/data.git
synced 2024-11-22 11:14:53 +08:00
[O] Sort by date
This commit is contained in:
parent
688fafe4b9
commit
1611d5d8f9
@ -1,7 +1,7 @@
|
|||||||
id: lintong
|
id: lintong
|
||||||
profileUrl: ${path}/photos/profile.jpg
|
profileUrl: ${path}/photos/profile.jpg
|
||||||
info:
|
info:
|
||||||
born: 2000.06.01
|
born: '2000-06-01'
|
||||||
died: 2022.06.06
|
died: '2022-06-06'
|
||||||
websites:
|
websites:
|
||||||
QQ: https://304915994.qzone.qq.com/
|
QQ: https://304915994.qzone.qq.com/
|
||||||
|
@ -6,7 +6,7 @@ import autocorrect from "autocorrect-node";
|
|||||||
import YAML from 'js-yaml';
|
import YAML from 'js-yaml';
|
||||||
import metadataParser from 'markdown-yaml-metadata-parser';
|
import metadataParser from 'markdown-yaml-metadata-parser';
|
||||||
|
|
||||||
import { renderMdx } from "./mdx.ts";
|
import { renderMdx } from "./mdx.js";
|
||||||
|
|
||||||
const PUBLIC_DIR = "public";
|
const PUBLIC_DIR = "public";
|
||||||
|
|
||||||
@ -23,14 +23,19 @@ const people = fs.readdirSync(peopleDir).map(person => ({
|
|||||||
distPath: path.join(projectRoot, DIST_DIR, PEOPLE_DIR, person)
|
distPath: path.join(projectRoot, DIST_DIR, PEOPLE_DIR, person)
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
interface PeopleMeta {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
profileUrl: string
|
||||||
|
path: string
|
||||||
|
sortKey: string
|
||||||
|
}
|
||||||
|
|
||||||
// Transform `info.json5` to `info.json`.
|
// Transform `info.json5` to `info.json`.
|
||||||
// Extract metadata from `people/${dirname}/info.json5` to `dist/people-list.json`.
|
// Extract metadata from `people/${dirname}/info.json5` to `dist/people-list.json`.
|
||||||
function buildPeopleInfoAndList() {
|
function buildPeopleInfoAndList() {
|
||||||
const PEOPLE_LIST_KEYS = ["id", "name", "profileUrl"] as const;
|
|
||||||
type PeopleMeta = Record<"path" | typeof PEOPLE_LIST_KEYS[number], unknown>;
|
|
||||||
|
|
||||||
// Read internationalized key names
|
// Read internationalized key names
|
||||||
const infoKeys = YAML.load(fs.readFileSync('info-i18n.yml'))
|
const infoKeys = YAML.load(fs.readFileSync('info-i18n.yml').toString())
|
||||||
|
|
||||||
// Compile into multiple languages
|
// Compile into multiple languages
|
||||||
for (const lang of ['', '.zh_hant']) {
|
for (const lang of ['', '.zh_hant']) {
|
||||||
@ -41,7 +46,7 @@ function buildPeopleInfoAndList() {
|
|||||||
// For each person
|
// For each person
|
||||||
for (const { dirname, srcPath, distPath } of people) {
|
for (const { dirname, srcPath, distPath } of people) {
|
||||||
const infoFile = fs.readFileSync(path.join(srcPath, `info.yml`), "utf-8");
|
const infoFile = fs.readFileSync(path.join(srcPath, `info.yml`), "utf-8");
|
||||||
const info = YAML.load(infoFile);
|
const info: any = YAML.load(infoFile);
|
||||||
|
|
||||||
// Read the page.md of that language
|
// Read the page.md of that language
|
||||||
const markdown = fs.readFileSync(path.join(srcPath, `page${lang}.md`), "utf-8");
|
const markdown = fs.readFileSync(path.join(srcPath, `page${lang}.md`), "utf-8");
|
||||||
@ -53,12 +58,15 @@ function buildPeopleInfoAndList() {
|
|||||||
// Convert website dict into entries [[k, v], ...]
|
// Convert website dict into entries [[k, v], ...]
|
||||||
info.websites = Object.entries(info.websites ?? {})
|
info.websites = Object.entries(info.websites ?? {})
|
||||||
|
|
||||||
|
// Get sort key
|
||||||
|
const sortKey = info.info?.died ?? mdMeta.info?.died ?? '0'
|
||||||
|
|
||||||
// Convert info dict to [[key, value], ...]
|
// Convert info dict to [[key, value], ...]
|
||||||
// And add info k-v pairs from markdown to the info object in json5
|
// And add info k-v pairs from markdown to the info object in json5
|
||||||
info.info = [...Object.entries(mdMeta.info ?? {}), ...Object.entries(info.info ?? {})]
|
info.info = [...Object.entries(mdMeta.info ?? {}), ...Object.entries(info.info ?? {})]
|
||||||
|
|
||||||
// Convert key names to internationalized key names
|
// Convert key names to internationalized key names
|
||||||
let langKey = indexTrim(lang, ".")
|
let langKey = trim(lang, ".")
|
||||||
if (langKey == '') langKey = "zh_hans"
|
if (langKey == '') langKey = "zh_hans"
|
||||||
const keys = infoKeys[langKey]['key']
|
const keys = infoKeys[langKey]['key']
|
||||||
info.info = info.info.map(pair => [pair[0] in keys ? keys[pair[0]] : pair[0], pair[1]])
|
info.info = info.info.map(pair => [pair[0] in keys ? keys[pair[0]] : pair[0], pair[1]])
|
||||||
@ -80,7 +88,8 @@ function buildPeopleInfoAndList() {
|
|||||||
// Create people list meta information
|
// Create people list meta information
|
||||||
const peopleMeta = {
|
const peopleMeta = {
|
||||||
path: dirname,
|
path: dirname,
|
||||||
...Object.fromEntries(PEOPLE_LIST_KEYS.map(key => [key, info[key]]))
|
sortKey: sortKey,
|
||||||
|
...Object.fromEntries(["id", "name", "profileUrl"].map(key => [key, info[key]]))
|
||||||
} as PeopleMeta;
|
} as PeopleMeta;
|
||||||
|
|
||||||
// Add meta to people list
|
// Add meta to people list
|
||||||
@ -88,6 +97,8 @@ function buildPeopleInfoAndList() {
|
|||||||
peopleList.push(peopleMeta);
|
peopleList.push(peopleMeta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
peopleList.sort((a, b) => b.sortKey.localeCompare(a.sortKey))
|
||||||
|
|
||||||
// Write people-list.json
|
// Write people-list.json
|
||||||
fs.writeFileSync(path.join(projectRoot, DIST_DIR, `people-list${lang}.json`), JSON.stringify(peopleList));
|
fs.writeFileSync(path.join(projectRoot, DIST_DIR, `people-list${lang}.json`), JSON.stringify(peopleList));
|
||||||
}
|
}
|
||||||
@ -145,7 +156,7 @@ copyPublic();
|
|||||||
* @param str String
|
* @param str String
|
||||||
* @param ch Character (must have len 1)
|
* @param ch Character (must have len 1)
|
||||||
*/
|
*/
|
||||||
function indexTrim(str: string, ch: string) {
|
function trim(str: string, ch: string) {
|
||||||
let start = 0
|
let start = 0
|
||||||
let end = str.length
|
let end = str.length
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user