diff --git a/.gitignore b/.gitignore
index a4a3292b..d09dfedd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
/node_modules
/dist
/docs/.vitepress/cache/*
+/docs/.vitepress/.temp/*
/docs/.vitepress/dist
.env
\ No newline at end of file
diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts
index f3af29ab..0f8e59d7 100644
--- a/docs/.vitepress/config.mts
+++ b/docs/.vitepress/config.mts
@@ -1,4 +1,5 @@
import { defineConfig } from 'vitepress';
+import { fileURLToPath, URL } from 'node:url'
import generateSidebar from '../../scripts/sidebar.js';
import { withMermaid } from "vitepress-plugin-mermaid";
@@ -8,6 +9,19 @@ export default withMermaid({
title: "我的世界中国版 ModSDK",
description: "ModSDK 开发者文档 镜像,但提供更优质的搜索",
ignoreDeadLinks: true,
+ // 替换原生搜索组件,自定义展示的搜索结果内容
+ vite: {
+ resolve: {
+ alias: [
+ {
+ find: /^.*\/VPAlgoliaSearchBox\.vue$/,
+ replacement: fileURLToPath(
+ new URL('./theme/components/AlgoliaSearch.vue', import.meta.url)
+ )
+ }
+ ]
+ }
+ },
locales: {
root: {
label: '简体中文',
diff --git a/docs/.vitepress/theme/components/AlgoliaSearch.vue b/docs/.vitepress/theme/components/AlgoliaSearch.vue
new file mode 100644
index 00000000..c574c146
--- /dev/null
+++ b/docs/.vitepress/theme/components/AlgoliaSearch.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/scripts/algolia-upload.mjs b/scripts/algolia-upload.mjs
index 1fb66e20..069b2b70 100644
--- a/scripts/algolia-upload.mjs
+++ b/scripts/algolia-upload.mjs
@@ -229,6 +229,31 @@ function getDirectoryRootType(path) {
return firstDir;
}
+/**
+ * 从正文中提取"描述"的内容
+ * @param {string} content Markdown内容
+ * @return {string} 提取的描述文本
+ */
+function extractAPIDescription(content) {
+ // 匹配"- 描述"部分,直到下一个部分标题(如"- 参数"、"- 返回值"等)或文档结束
+ const descriptionRegex = /-\s*描述\s*\n([\s\S]*?)(?=\n\s*-\s*(?:参数|返回值|备注|示例)|$)/;
+ const match = content.match(descriptionRegex);
+
+ if (match && match[1]) {
+ // 提取第一行并进行清理:
+ // 1. 移除缩进
+ // 2. 移除 Markdown 符号如 "-", "*", ">", 数字列表前缀 "1." 等
+ const firstLine = match[1].split('\n')[0].trim();
+ return firstLine
+ .replace(/^[\s>*-]*\s*/, '') // 移除开头的 >, *, - 等符号
+ .replace(/^\d+\.\s*/, '') // 移除数字列表前缀,如 "1. "
+ .replace(/^\[.*?\]\s*/, '') // 移除可能的 [xxx] 标记
+ .trim();
+ }
+
+ return ''; // 如果没有找到描述,返回空字符串
+}
+
/**
* 生成符合VitePress的Algolia索引记录
*/
@@ -275,6 +300,8 @@ async function generateAlgoliaRecords() {
const objectID = `${page.path}${anchor}`;
const url = `https://modsdk.easecation.net${page.path}${anchor}`;
+ const description = extractAPIDescription(cleanedContent);
+
// 创建记录
const record = {
objectID,
@@ -282,6 +309,7 @@ async function generateAlgoliaRecords() {
type: level ? `lvl${level}` : 'content', // 标识这是什么级别的标题
hierarchy,
content: cleanedContent,
+ description,
_tags: ['zh-CN'],
lang: "zh-CN",
priority: priority, // 添加优先级字段
@@ -426,7 +454,7 @@ async function settingAlgolia() {
attributesForFaceting: ['lang', 'type', 'rootType'],
attributesToHighlight: ['hierarchy.lvl0', 'hierarchy.lvl1', 'hierarchy.lvl2', 'content'],
attributesToSnippet: ['content:50'],
- attributesToRetrieve: ['hierarchy', 'content', 'type', 'url', 'lang', 'priority', 'rootType'],
+ attributesToRetrieve: ['hierarchy', 'content', 'description', 'type', 'url', 'lang', 'priority', 'rootType'],
searchableAttributes: [
'hierarchy.lvl0',
'hierarchy.lvl1',