From d6b9979464cf1f78ee6f3c020fef9fb9f92ae1cb Mon Sep 17 00:00:00 2001 From: taskylizard <75871323+taskylizard@users.noreply.github.com> Date: Sun, 12 Jan 2025 17:44:42 +0000 Subject: [PATCH] fix: properly index `

` sections ref: https://github.com/wotakumoe/wotaku/pull/86 --- .gitattributes | 2 +- .github/CONTRIBUTING.md | 2 +- .github/ISSUE_TEMPLATE/config.yml | 1 - .github/POST_TEMPLATE.md | 1 - .github/PULL_REQUEST_TEMPLATE.md | 23 ------------ .github/labeler.yml | 9 ----- .github/workflows/labeler.yml | 17 --------- docs/.vitepress/markdown/headers.ts | 55 ++++++++++++++++++++++------ package.json | 7 ++-- pnpm-lock.yaml | Bin 269476 -> 271955 bytes 10 files changed, 49 insertions(+), 68 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/labeler.yml delete mode 100644 .github/workflows/labeler.yml diff --git a/.gitattributes b/.gitattributes index d96586674..da3504671 100644 --- a/.gitattributes +++ b/.gitattributes @@ -198,7 +198,7 @@ TODO text *.tmpl text *.tpl text *.twig text -*.vue text +*.vue text diff=vue # Configs *.cnf text diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 05d579345..cc38e3fd4 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -100,7 +100,7 @@ #### Manually 1. Fork the repository by clicking the "Fork" button in the top right corner. -2. Make sure you have [Node.js](https://nodejs.org/en/), [pnpm](https://pnpm.io/), [git](https://git-scm.com/), and [VSCode](https://code.visualstudio.com/) or any other editor installed. +2. Make sure you have [Node.js](https://nodejs.org/en/), [pnpm](https://pnpm.io/), [git](https://git-scm.com/), and [VSCode](https://code.visualstudio.com/) or any other editor installed. Alternatively, `pnpm` has `pnpm env` you can use to manage Node. 3. Clone your forked repository to your local machine. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 8b1378917..000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/.github/POST_TEMPLATE.md b/.github/POST_TEMPLATE.md index 0f0715542..ca7f30eff 100644 --- a/.github/POST_TEMPLATE.md +++ b/.github/POST_TEMPLATE.md @@ -20,7 +20,6 @@ ### Post Template description: Month 20YY updates date: 20YY-MM-DD next: false -aside: left prev: false sidebar: false footer: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 0d4cf89d4..000000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,23 +0,0 @@ - - -## Description - - -## Context - - - -## Types of changes - -- [ ] Bad / Deleted sites removal -- [ ] Grammar / Markdown fixes -- [ ] Content addition (sites, projects, tools, etc.) -- [ ] New Wiki section -- [ ] Section Improvement - -## Checklist: - - -- [ ] I have read the [contribution guide](https://fmhy.net/other/contributing). -- [ ] I have made sure to [search](https://api.fmhy.net/single-page) before making any changes. -- [ ] My code follows the code style of this project. diff --git a/.github/labeler.yml b/.github/labeler.yml deleted file mode 100644 index 17050009d..000000000 --- a/.github/labeler.yml +++ /dev/null @@ -1,9 +0,0 @@ -# See https://github.com/actions/labeler - -docs: - - 'docs/**/*.md' - -core: - - 'api/**' - - '.github/**' - - 'docs/.vitepress/**' diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml deleted file mode 100644 index a8fae961a..000000000 --- a/.github/workflows/labeler.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: 'Pull Request Housekeeping' - -on: [pull_request_target] - -jobs: - triage: - permissions: - contents: read - pull-requests: write - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - name: Label PRs - uses: actions/labeler@v4 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/.vitepress/markdown/headers.ts b/docs/.vitepress/markdown/headers.ts index af2984d08..5c36edb04 100644 --- a/docs/.vitepress/markdown/headers.ts +++ b/docs/.vitepress/markdown/headers.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) taskylizard. All rights reserved. + * Copyright (c) 2024 taskylizard * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,20 +13,53 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import type { MarkdownRenderer } from 'vitepress' -import { headers } from '../transformer/constants' -const titles = Object.keys(headers).map((key) => headers[key].title) +const excluded = ['Credits'] export const headersPlugin = (md: MarkdownRenderer) => { - // Add the Feedback component after the heading and close the container - md.renderer.rules.heading_close = (tokens, idx, options, env, self) => { - const result = self.renderToken(tokens, idx, options) - const heading = tokens[idx - 1] - const level = tokens[idx].tag.slice(1) - if (!titles.includes(env.frontmatter.title) || level !== '2') return result + // Add the Feedback component in the heading, before the link. + // + // Adding it after the link is closed prevents vitepress from properly + // indexing the file's content. - return `${result}` + md.renderer.rules.heading_open = (tokens, idx, options, env, self) => { + const result = self.renderToken(tokens, idx, options) + + const idxClose = + idx + + tokens.slice(idx).findIndex((token) => token.type === 'heading_close') + if (idxClose <= idx) return result + + const level = tokens[idx].tag.slice(1) + if (excluded.includes(env.frontmatter.title) || level !== '2') return result + + // Find the token for the link. + // + // The token after `heading_open` contains the link as a child token. + const children = tokens[idx + 1].children || [] + const linkOpenToken = children.find((c) => c.type === 'link_open') + if (!linkOpenToken) return result + + const heading = tokens[idxClose - 1] + + linkOpenToken.meta = linkOpenToken.meta || {} + linkOpenToken.meta.feedback = { + heading: heading.content + } + + return result + } + + md.renderer.rules.link_open = (tokens, idx, options, env, self) => { + const result = self.renderToken(tokens, idx, options) + + const meta = tokens[idx].meta + if (!meta || !meta.feedback) return result + + const heading = meta.feedback.heading || '' + if (!heading) return result + + return `${result}` } } diff --git a/package.json b/package.json index 7b17345ee..75843396c 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "docs:dev": "vitepress dev docs/", "docs:preview": "vitepress preview docs/", "format": "prettier -w --cache --check .", - "postinstall": "nitropack prepare", "lint": "biome lint .", "lint:fix": "biome lint . --write", "lint:fix:unsafe": "biome lint . --write --unsafe", @@ -33,15 +32,15 @@ "nitro-cors": "^0.7.1", "nitropack": "^2.10.4", "nprogress": "^0.2.0", - "pathe": "^1.1.2", - "unocss": "^0.63.4", + "pathe": "^2.0.1", + "unocss": "65.4.0", "vitepress": "^1.5.0", "vue": "^3.5.12", "x-satori": "^0.2.0", "zod": "^3.23.8" }, "devDependencies": { - "@biomejs/biome": "^1.9.3", + "@biomejs/biome": "^1.9.4", "@cloudflare/workers-types": "^4.20241230.0", "@ianvs/prettier-plugin-sort-imports": "^4.3.1", "@iconify-json/carbon": "^1.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 55a8e9c41b349ee04921a1e89e9f801d053e7c70..e4705190b5efecf318750f5e2f1cf88dbc2396f9 100644 GIT binary patch delta 7777 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

p=C)NHVbnJ@DSVa5~r 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 z