zhconv 0.4.1

Traditional, Simplified and regional Chinese variants converter powered by MediaWiki & OpenCC rulesets and the Aho-Corasick algorithm 中文简繁及地區詞轉換
Documentation
import { useEffect, useState } from "react";
import Box from "@mui/material/Box";
import Grid from "@mui/material/Grid";
import Typography from "@mui/material/Typography";
import Link from "@mui/material/Link";
import GitHubIcon from "@mui/icons-material/GitHub";
import { useApp } from "../AppContext";

export default function Footer() {
  const { wasm, cgroups } = useApp();
  const [buildInfo, setBuildInfo] = useState(
    {} as {
      buildDate?: Date;
      commit?: string;
      mediawikiCommit?: string;
      openccCommit?: string;
      cgroupDate?: Date;
    },
  );
  useEffect(() => {
    async function loadBuildInfo() {
      if (!wasm) return;
      setBuildInfo({
        buildDate: new Date(wasm.get_build_timestamp() ?? 0),
        commit: wasm.get_commit(),
        mediawikiCommit: wasm.get_mediawiki_commit(),
        openccCommit: wasm.get_opencc_commit(),
        cgroupDate: cgroups?.timestamp
          ? new Date(cgroups.timestamp * 1000)
          : undefined,
      });
    }
    loadBuildInfo();
  }, [wasm, cgroups]);

  return (
    <Box component="footer" sx={{ mt: 3 }}>
      <Grid container justifyContent="space-between">
        <Grid>
          <Typography variant="body2" color="textSecondary">
            <Link color="inherit" href="https://github.com/Gowee/zhconv-rs">
              <GitHubIcon sx={{ fontSize: "1rem" }} />
              {" Source code"}
            </Link>
          </Typography>
        </Grid>
        <Grid>
          <Typography variant="body2" color="textSecondary">
            {"Build: "}
            <Link
              color="inherit"
              href={`https://github.com/Gowee/zhconv-rs/commit/${buildInfo.commit ?? ""
                }`}
              underline="always"
              title={buildInfo?.buildDate?.toISOString() ?? undefined}
            >
              <code>{buildInfo.commit?.substring(0, 8) ?? "10A0D149."}</code>
            </Link>
            {" | "}
            {"MediaWiki: "}
            <Link
              color="inherit"
              href={`https://github.com/wikimedia/mediawiki/blob/${buildInfo.mediawikiCommit ?? "master"
                }/includes/Languages/Data/ZhConversion.php#L14`}
              underline="always"
            >
              <code>
                {wasm
                  ? (buildInfo.mediawikiCommit?.substring(0, 8) ?? "__N.A.__")
                  : "????????"}
              </code>
            </Link>
            {" | "}
            {"OpenCC: "}
            <Link
              color="inherit"
              href={`https://github.com/BYVoid/OpenCC/blob/${buildInfo.openccCommit ?? "master"
                }/data/dictionary`}
              underline="always"
            >
              <code>
                {wasm
                  ? (buildInfo.openccCommit?.substring(0, 8) ?? "__N.A.__")
                  : "????????"}
              </code>
            </Link>
            {" | "}
            {"CGroups: "}
            <Link
              color="inherit"
              href={`https://zh.wikipedia.org/wiki/Template:CGroup/list`}
              underline="always"
            >
              {buildInfo.cgroupDate?.toISOString() ?? "DATE_UNKNOWN"}
            </Link>
          </Typography>
          {/* <Typography variant="body2" color="textSecondary">
            {"Based on conversion tables from "}
            <Link
              color="inherit"
              href="https://phabricator.wikimedia.org/source/mediawiki/browse/master/includes/languages/Data/ZhConversion.php"
              underline="always"
            >
              {"MediaWiki"}
            </Link>
            {" and "}
            <Link
              color="inherit"
              href="https://zh.wikipedia.org/wiki/Module:CGroup"
              underline="always"
            >
              {"Chinese Wikipedia"}
            </Link>
            {"."}
          </Typography> */}
        </Grid>
      </Grid>
    </Box>
  );
}