From 69fba27b50f62ba2f3652599a0a979f7dd4fa096 Mon Sep 17 00:00:00 2001 From: SmallMain Date: Wed, 1 Jun 2022 14:40:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 79 ++++++--- docs/docs/installation-guide/_category_.json | 9 + .../assets/assetbundle-settings.png | Bin 0 -> 23259 bytes docs/docs/installation-guide/assets/dts.png | Bin 0 -> 15684 bytes .../installation-engine-plugin.md | 1 + .../installation-guide/installation-intro.mdx | 17 ++ .../installation-guide/installation-manual.md | 75 ++++++++ docs/docs/intro.md | 67 ++++++-- docs/docs/tutorial-extras/_category_.json | 7 - .../img/docsVersionDropdown.png | Bin 25427 -> 0 bytes .../tutorial-extras/img/localeDropdown.png | Bin 27841 -> 0 bytes .../tutorial-extras/manage-docs-versions.md | 55 ------ .../tutorial-extras/translate-your-site.md | 88 ---------- .../_category_.json | 5 +- .../congratulations.md | 0 .../create-a-blog-post.md | 0 .../create-a-document.md | 0 .../create-a-page.md | 0 .../deploy-your-site.md | 0 .../markdown-features.mdx | 0 docs/docusaurus.config.js | 7 +- docs/src/css/custom.css | 39 ++++- docs/src/pages/index.module.css | 5 +- docs/src/pages/index.tsx | 61 +++++-- docs/src/theme/Footer/LinkItem/index.js | 27 +++ docs/src/theme/Footer/index.js | 26 +++ docs/src/theme/NavbarItem/ComponentTypes.js | 21 +++ .../src/theme/NavbarItem/DefaultNavbarItem.js | 51 ++++++ docs/src/theme/NavbarItem/DocNavbarItem.js | 37 ++++ .../theme/NavbarItem/DocSidebarNavbarItem.js | 35 ++++ .../DocsVersionDropdownNavbarItem.js | 87 ++++++++++ .../theme/NavbarItem/DocsVersionNavbarItem.js | 18 ++ .../theme/NavbarItem/DropdownNavbarItem.js | 161 ++++++++++++++++++ docs/src/theme/NavbarItem/HtmlNavbarItem.js | 24 +++ docs/src/theme/NavbarItem/NavbarNavLink.js | 69 ++++++++ docs/src/theme/NavbarItem/SearchNavbarItem.js | 14 ++ docs/src/theme/NavbarItem/index.js | 28 +++ docs/src/theme/NavbarItem/utils.js | 3 + docs/static/img/logo2.png | Bin 0 -> 12112 bytes docs/static/img/rocket.svg | 1 + 40 files changed, 911 insertions(+), 206 deletions(-) create mode 100644 docs/docs/installation-guide/_category_.json create mode 100644 docs/docs/installation-guide/assets/assetbundle-settings.png create mode 100644 docs/docs/installation-guide/assets/dts.png create mode 100644 docs/docs/installation-guide/installation-engine-plugin.md create mode 100644 docs/docs/installation-guide/installation-intro.mdx create mode 100644 docs/docs/installation-guide/installation-manual.md delete mode 100644 docs/docs/tutorial-extras/_category_.json delete mode 100644 docs/docs/tutorial-extras/img/docsVersionDropdown.png delete mode 100644 docs/docs/tutorial-extras/img/localeDropdown.png delete mode 100644 docs/docs/tutorial-extras/manage-docs-versions.md delete mode 100644 docs/docs/tutorial-extras/translate-your-site.md rename docs/docs/{tutorial-basics => user-guide}/_category_.json (66%) rename docs/docs/{tutorial-basics => user-guide}/congratulations.md (100%) rename docs/docs/{tutorial-basics => user-guide}/create-a-blog-post.md (100%) rename docs/docs/{tutorial-basics => user-guide}/create-a-document.md (100%) rename docs/docs/{tutorial-basics => user-guide}/create-a-page.md (100%) rename docs/docs/{tutorial-basics => user-guide}/deploy-your-site.md (100%) rename docs/docs/{tutorial-basics => user-guide}/markdown-features.mdx (100%) create mode 100644 docs/src/theme/Footer/LinkItem/index.js create mode 100644 docs/src/theme/Footer/index.js create mode 100644 docs/src/theme/NavbarItem/ComponentTypes.js create mode 100644 docs/src/theme/NavbarItem/DefaultNavbarItem.js create mode 100644 docs/src/theme/NavbarItem/DocNavbarItem.js create mode 100644 docs/src/theme/NavbarItem/DocSidebarNavbarItem.js create mode 100644 docs/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.js create mode 100644 docs/src/theme/NavbarItem/DocsVersionNavbarItem.js create mode 100644 docs/src/theme/NavbarItem/DropdownNavbarItem.js create mode 100644 docs/src/theme/NavbarItem/HtmlNavbarItem.js create mode 100644 docs/src/theme/NavbarItem/NavbarNavLink.js create mode 100644 docs/src/theme/NavbarItem/SearchNavbarItem.js create mode 100644 docs/src/theme/NavbarItem/index.js create mode 100644 docs/src/theme/NavbarItem/utils.js create mode 100644 docs/static/img/logo2.png create mode 100644 docs/static/img/rocket.svg diff --git a/README.md b/README.md index d5512309..01482117 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,61 @@ -# Cocos Creator Service Pack +# Cocos Service Pack -这是一个对 Cocos Creator 引擎进行特性新增、修复与优化的**开源非官方服务包**。 +![logo](/docs/static/img/logo2.png) -我们的发展方向是尽量以最符合引擎架构设计的方式加入新的特性、修复引擎已知问题以及性能优化。 +这是一个对 Cocos Creator 引擎进行特性增强、修复与优化的**开源非官方服务包**。 + +我们尽量以最符合引擎架构设计的方式加入新的特性、修复引擎已知问题以及性能优化。 > 项目的起源 > -> 2021 年 2 月,Cocos 发布 Cocos Creator 3.0,并在 3.x 发布之后不会再继续开发 2.x 版本的新特性。 +>2021 年 2 月,Cocos 发布 Cocos Creator 3.0,并在 3.x 发布之后不会再继续开发 2.x 版本的新特性,所有维护工作也会在 2023 年完全停止。 > -> 问题修复等所有维护工作也会在 2023 年完全停止。而 2.x 以及 3.x 在一些方面都并不完善,所以我们发布了这个非官方的引擎“魔改”集合。 +>但是 2.x 在一些方面还并不完善,所以我们发布了这个非官方的引擎“魔改”合集。 > -> 相似的事情发生在 2014 年 4 月,官方停止了对 Windows XP 的维护,之后 Harkaz 发布了一个非官方服务包 Service Pack 4 (SP4)。 +>相似的事情发生在 2014 年 4 月,官方停止了对 Windows XP 的维护,之后 Harkaz 发布了一个非官方服务包 Service Pack 4 (SP4)。 > -> 所以我们将这个“魔改”集合取名为 Service Pack。 +>受到 Windows XP 的启发,我们将这个非官方的引擎“魔改”合集取名为 Service Pack。 > -> 我们暂时只专注于 Cocos Creator 2.x 版本的适配,虽然当前服务包新增的一些特性在 Cocos Creator 3.5 版本中甚至依然还大部分缺失,但因为它还在蒸蒸日上中(还有希望),并且其引擎架构还在不断地迭代(不稳定),对其进行修改的维护工作会很大。 +>我们暂时只专注于 Cocos Creator 2.x 版本的适配,Cocos Creator 3.x 正在蒸蒸日上,其引擎架构还在不断地迭代(不稳定),对其进行修改的维护工作会很大。 -- [重要改进](#重要改进) -- [如何使用](#如何使用) -- [实现原理](#实现原理) +- [全部改动](#全部改动) +- [使用方法](#使用方法) + - [引擎扩展](#引擎扩展) + - [Git Patch](#git-patch) + - [直接动手](#直接动手) - [更新日志](#更新日志) - [贡献指南](#贡献指南) +- [常见问题](#常见问题) + - [为什么要直接修改引擎?](#为什么要直接修改引擎) -## 重要改进 +## 全部改动 + +服务包对引擎的所有改动都是开源的,并且每个改动都会附上一篇原理说明的文档,当你发现问题时请进行反馈,或者直接默默地帅气地提交一个 PR,帮助我们一起完善这个项目。 - 待补充。 -## 如何使用 +## 使用方法 + +我们推荐两种方式来使用这个服务包: + +### 引擎扩展 待补充。 -## 实现原理 +### Git Patch -每个改动的原理都会进行公示,我们没做过官方那样完善的测试,但是尽量保持改动的透明。 +待补充。 + +### 直接动手 + +阅读源码和原理文章来自行提取你想要的部分。 ## 更新日志 @@ -47,11 +63,34 @@ ## 贡献指南 -非常欢迎您能和我们一起来完善,所有的一切都通过 Github 进行: +非常欢迎你能和我们一起来完善这个项目,所有的一切都通过 Github 进行: -- 如果您有问题或者好的想法,请使用 `Issues` 或 `Discussions` 。 -- 如果您有新的代码提交,请使用 `Pull requests`。 +- 如果你有问题或者好的想法,请建立 `Issues` 或进入 `Discussions` 。 +- 如果你有新的代码提交,请建立 `Pull requests`。 -原则上我们接受任何新增与修改,但是**任何修改都必须兼容引擎原有的特性**,并且**不允许删除引擎原有的特性**。 +原则上我们接受任何增强与修改,但是**任何修改都必须兼容引擎原有的特性,不允许删除引擎原有的特性**,并且请认真思考功能的设计。 -在开发新特性时,请站在引擎的角度思考该如何设计。 +## 常见问题 + +### 为什么要直接修改引擎? + +直接修改引擎可能是大部分人认为的下下策,我们能听到的声音有: + +- 可以通过 “修改对象的原型” 等一些编程技巧做成一个插件脚本 +- 为什么要改?不改,因为 xxxx 原则说过,不要动旧的代码,我们造新的! +- 我都没接触过自定义引擎呢,不知道该怎么用 +- 如果我本来就改过引擎,不就很麻烦了吗? + +以上问题我们都思考过, + +首先,现在引擎的 2.x 版本已经停止了更新(仅做一些维护工作),也就是说我们的修改基本不会遇到在下个版本需要完全重构的情况。 + +其次,服务包中的大部分改动虽然可以做成一个插件脚本,但是原生平台就无法兼容,并且包体会增大,可维护性也不见得会提升。 + +最后,造新的或多或少会增加学习和使用的成本,并且我们希望它是 “原生” 的使用体验。 + +对于没有接触过自定义引擎的人,我们提供的引擎扩展可以一键帮助你设置好自定义引擎。 + +对于已经修改过引擎的人,我们提供 Git Patch 可以让你在已有修改的基础上轻松应用我们的更改,可能会产生一些冲突,但我相信你能解决。 + +**最后的最后,希望这个项目能够在你想学习相关知识或者做类似修改时可以帮助到你,享受吧!** diff --git a/docs/docs/installation-guide/_category_.json b/docs/docs/installation-guide/_category_.json new file mode 100644 index 00000000..af2c1ac7 --- /dev/null +++ b/docs/docs/installation-guide/_category_.json @@ -0,0 +1,9 @@ +{ + "label": "安装指南", + "position": 2, + "collapsed": false, + "link": { + "type": "doc", + "id": "installation-intro" + } +} diff --git a/docs/docs/installation-guide/assets/assetbundle-settings.png b/docs/docs/installation-guide/assets/assetbundle-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..1c21c9f53fb21ba79076fef863c732452b778a87 GIT binary patch literal 23259 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 n3H*6ru3HhI%DV!?Tg<-z#Uy%} literal 0 HcmV?d00001 diff --git a/docs/docs/installation-guide/assets/dts.png b/docs/docs/installation-guide/assets/dts.png new file mode 100644 index 0000000000000000000000000000000000000000..d5d0755d60dcdfa3b8120cf29b9bb9cb09563e24 GIT binary patch literal 15684 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 n)5z>_b9V&>rx1H0Y7Mid@A*lc4_(?mlD{ literal 0 HcmV?d00001 diff --git a/docs/docs/installation-guide/installation-engine-plugin.md b/docs/docs/installation-guide/installation-engine-plugin.md new file mode 100644 index 00000000..a367ad74 --- /dev/null +++ b/docs/docs/installation-guide/installation-engine-plugin.md @@ -0,0 +1 @@ +# 使用引擎扩展安装 diff --git a/docs/docs/installation-guide/installation-intro.mdx b/docs/docs/installation-guide/installation-intro.mdx new file mode 100644 index 00000000..8a122dd9 --- /dev/null +++ b/docs/docs/installation-guide/installation-intro.mdx @@ -0,0 +1,17 @@ +--- +sidebar_position: 1 +hide_title: true +title: 安装指南 +--- +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + +服务包对引擎的改动主要使用 [自定义引擎](https://docs.cocos.com/creator/2.4/manual/zh/advanced-topics/engine-customization.html) 的方式实现。 + +但由于没有找到方法添加内置资源,所以除此之外还需要您手动往项目里添加一些资源文件。 + +对于使用 TypeScript 的项目我们还提供 `creator-sp.d.ts` 类型提示文件。 + +以下是我们提供的两种安装方法,**推荐使用引擎扩展一键安装**: + + diff --git a/docs/docs/installation-guide/installation-manual.md b/docs/docs/installation-guide/installation-manual.md new file mode 100644 index 00000000..66077ed4 --- /dev/null +++ b/docs/docs/installation-guide/installation-manual.md @@ -0,0 +1,75 @@ +# 手动安装 + +:::caution 提示 + +手动安装需要掌握一定的 [Git](https://git-scm.com/doc) 和 [自定义引擎](https://docs.cocos.com/creator/2.4/manual/zh/advanced-topics/engine-customization.html) 知识,建议使用我们发布的 [引擎扩展](./installation-engine-plugin) 一键安装。 + +::: + +## 引擎要求 + +请将 Cocos Creator 至少升级到 **v2.4.x** 版本。 +推荐直接升级到最新版本,2.x 版本只会进行维护性更新,所以不用担心其稳定性问题。 + +## 标准安装 + +当您项目所使用的引擎版本与服务包适配的引擎版本一致,并且您自己未对引擎有任何改动时,可参照以下步骤安装: + +### 1.替换自定义引擎 + +压缩包内的 `engine` `cocos2d-x` `jsb-adapter` 这三个目录分别就是我们已经修改好的 **JavaScript 引擎**、**Cocos2d-x 引擎** 和 **jsb-adpater**。 + +参照官方的 [自定义引擎](https://docs.cocos.com/creator/2.4/manual/zh/advanced-topics/engine-customization.html) 文档分别配置或替换这三个部分即可。 + +:::tip 提示 + +**官方文档中的一些步骤我们已经帮你做好了**: + +**定制 JavaScript 引擎:**参考官方文档的 `1.2 修改 JS 引擎路径` 设置路径即可,无需安装编译依赖或者编译。 + +**定制 Cocos2d-x 引擎:** + +**替换 jsb-adapter:**这一步只需要替换目录即可,但请一定不要忘记! + +并且如果您**不需要支持原生平台,可以只配置 JavaScript 引擎**,不需要配置 Cocos2d-x 和 jsb-adapter。 +::: + +### 2.往项目放入资源 + +由于我们无法为引擎新增内置资源,所以需要您手动操作这一步,将压缩包内 `project` 目录的 `sp` 目录拷贝到项目的 `assets` 目录中,并设置 `sp` 目录为 **Asset Bundle**。 + +![assetbundlesettings](assets/assetbundle-settings.png) + +:::caution 注意 + +请勿随意放置,路径必须是 `assets/sp`,在编辑器环境中引擎只能通过路径读取资源。 + +请勿随意修改 Asset Bundle 的名称,名称必须是 `sp`,在实际运行中会通过加载这个 Asset Bundle 读取资源。 + +没有必要将这个 Asset Bundle 设为远程包或者 Zip 压缩,里面只是两个 Effect 着色器资源。 + +::: + +### 3.TypeScript 类型提示(可选) + +如果您的项目使用 TypeScript,请将压缩包内 `project` 目录的 `creator-sp.d.ts` 拷贝到项目根目录中,更新 API 接口类型提示。 + +![dts](assets/dts.png) + +部分 IDE 可能需要重启才会生效。 + +## 下载链接 + +### Service Pack v1.0 + +[下载压缩包](http://www.baidu.com) + +:::note + +**Service Pack v1.0** 适配 **Cocos Creator v2.4.9** 版本,请确认您项目的引擎版本一致。 + +::: + +### 历史版本 + +[存档页面](test) diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 64f3020b..3cdd3ff8 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -1,36 +1,48 @@ --- sidebar_position: 1 +title: 介绍 +hide_title: true --- -# 介绍 +![logo](/img/logo2.png) -这是一个对 Cocos Creator 引擎进行特性新增、修复与优化的**开源非官方服务包**。 +这是一个对 Cocos Creator 引擎进行特性增强、修复与优化的**开源非官方服务包**。 -我们的发展方向是尽量以最符合引擎架构设计的方式加入新的特性、修复引擎已知问题以及性能优化。 +我们尽量以最符合引擎架构设计的方式加入新的特性、修复引擎已知问题以及性能优化。 :::info 项目的起源 -2021 年 2 月,Cocos 发布 Cocos Creator 3.0,并在 3.x 发布之后不会再继续开发 2.x 版本的新特性。 +2021 年 2 月,Cocos 发布 Cocos Creator 3.0,并在 3.x 发布之后不会再继续开发 2.x 版本的新特性,所有维护工作也会在 2023 年完全停止。 -问题修复等所有维护工作也会在 2023 年完全停止。而 2.x 以及 3.x 在一些方面都并不完善,所以我们发布了这个非官方的引擎“魔改”集合。 +但是 2.x 在一些方面还并不完善,所以我们发布了这个非官方的引擎“魔改”合集。 相似的事情发生在 2014 年 4 月,官方停止了对 Windows XP 的维护,之后 Harkaz 发布了一个非官方服务包 Service Pack 4 (SP4)。 -所以我们将这个“魔改”集合取名为 Service Pack。 +受到 Windows XP 的启发,我们将这个非官方的引擎“魔改”合集取名为 Service Pack。 -我们暂时只专注于 Cocos Creator 2.x 版本的适配,虽然当前服务包新增的一些特性在 Cocos Creator 3.5 版本中甚至依然还大部分缺失,但因为它还在蒸蒸日上中(还有希望),并且其引擎架构还在不断地迭代(不稳定),对其进行修改的维护工作会很大。 +我们暂时只专注于 Cocos Creator 2.x 版本的适配,Cocos Creator 3.x 正在蒸蒸日上,其引擎架构还在不断地迭代(不稳定),对其进行修改的维护工作会很大。 ::: -## 重要改进 +## 全部改动 + +服务包对引擎的所有改动都是开源的,并且每个改动都会附上一篇原理说明的文档,当你发现问题时请进行反馈,或者直接默默地帅气地提交一个 PR,帮助我们一起完善这个项目。 - 待补充。 -## 如何使用 +## 使用方法 + +我们推荐两种方式来使用这个服务包: + +### 引擎扩展 待补充。 -## 实现原理 +### Git Patch -每个改动的原理都会进行公示,我们没做过官方那样完善的测试,但是尽量保持改动的透明。 +待补充。 + +### 直接动手 + +阅读源码和原理文章来自行提取你想要的部分。 ## 更新日志 @@ -38,11 +50,34 @@ sidebar_position: 1 ## 贡献指南 -非常欢迎您能和我们一起来完善,所有的一切都通过 Github 进行: +非常欢迎你能和我们一起来完善这个项目,所有的一切都通过 Github 进行: -- 如果您有问题或者好的想法,请使用 `Issues` 或 `Discussions` 。 -- 如果您有新的代码提交,请使用 `Pull requests`。 +- 如果你有问题或者好的想法,请建立 `Issues` 或进入 `Discussions` 。 +- 如果你有新的代码提交,请建立 `Pull requests`。 -原则上我们接受任何新增与修改,但是**任何修改都必须兼容引擎原有的特性**,并且**不允许删除引擎原有的特性**。 +原则上我们接受任何增强与修改,但是**任何修改都必须兼容引擎原有的特性,不允许删除引擎原有的特性**,并且请认真思考功能的设计。 -在开发新特性时,请站在引擎的角度思考该如何设计。 +## 常见问题 + +### 为什么要直接修改引擎? + +直接修改引擎可能是大部分人认为的下下策,我们能听到的声音有: + +- 可以通过 “修改对象的原型” 等一些编程技巧做成一个插件脚本 +- 为什么要改?不改,因为 xxxx 原则说过,不要动旧的代码,我们造新的! +- 我都没接触过自定义引擎呢,不知道该怎么用 +- 如果我本来就改过引擎,不就很麻烦了吗? + +以上问题我们都思考过, + +首先,现在引擎的 2.x 版本已经停止了更新(仅做一些维护工作),也就是说我们的修改基本不会遇到在下个版本需要完全重构的情况。 + +其次,服务包中的大部分改动虽然可以做成一个插件脚本,但是原生平台就无法兼容,并且包体会增大,可维护性也不见得会提升。 + +最后,造新的或多或少会增加学习和使用的成本,并且我们希望它是 “原生” 的使用体验。 + +对于没有接触过自定义引擎的人,我们提供的引擎扩展可以一键帮助你设置好自定义引擎。 + +对于已经修改过引擎的人,我们提供 Git Patch 可以让你在已有修改的基础上轻松应用我们的更改,可能会产生一些冲突,但我相信你能解决。 + +**最后的最后,希望这个项目能够在你想学习相关知识或者做类似修改时可以帮助到你,享受吧!** diff --git a/docs/docs/tutorial-extras/_category_.json b/docs/docs/tutorial-extras/_category_.json deleted file mode 100644 index a8ffcc19..00000000 --- a/docs/docs/tutorial-extras/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Tutorial - Extras", - "position": 3, - "link": { - "type": "generated-index" - } -} diff --git a/docs/docs/tutorial-extras/img/docsVersionDropdown.png b/docs/docs/tutorial-extras/img/docsVersionDropdown.png deleted file mode 100644 index 97e4164618b5f8beda34cfa699720aba0ad2e342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25427 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 diff --git a/docs/docs/tutorial-extras/img/localeDropdown.png b/docs/docs/tutorial-extras/img/localeDropdown.png deleted file mode 100644 index e257edc1f932985396bf59584c7ccfaddf955779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27841 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 JrC|B>e*nH7H{}2T diff --git a/docs/docs/tutorial-extras/manage-docs-versions.md b/docs/docs/tutorial-extras/manage-docs-versions.md deleted file mode 100644 index e12c3f34..00000000 --- a/docs/docs/tutorial-extras/manage-docs-versions.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Manage Docs Versions - -Docusaurus can manage multiple versions of your docs. - -## Create a docs version - -Release a version 1.0 of your project: - -```bash -npm run docusaurus docs:version 1.0 -``` - -The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created. - -Your docs now have 2 versions: - -- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs -- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs** - -## Add a Version Dropdown - -To navigate seamlessly across versions, add a version dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -module.exports = { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'docsVersionDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The docs version dropdown appears in your navbar: - -![Docs Version Dropdown](./img/docsVersionDropdown.png) - -## Update an existing version - -It is possible to edit versioned docs in their respective folder: - -- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello` -- `docs/hello.md` updates `http://localhost:3000/docs/next/hello` diff --git a/docs/docs/tutorial-extras/translate-your-site.md b/docs/docs/tutorial-extras/translate-your-site.md deleted file mode 100644 index da2b8a36..00000000 --- a/docs/docs/tutorial-extras/translate-your-site.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Translate your site - -Let's translate `docs/intro.md` to French. - -## Configure i18n - -Modify `docusaurus.config.js` to add support for the `fr` locale: - -```js title="docusaurus.config.js" -module.exports = { - i18n: { - defaultLocale: 'en', - locales: ['en', 'fr'], - }, -}; -``` - -## Translate a doc - -Copy the `docs/intro.md` file to the `i18n/fr` folder: - -```bash -mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/ - -cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md -``` - -Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French. - -## Start your localized site - -Start your site on the French locale: - -```bash -npm run start -- --locale fr -``` - -Your localized site is accessible at `http://localhost:3000/fr/` and the `Getting Started` page is translated. - -:::caution - -In development, you can only use one locale at a same time. - -::: - -## Add a Locale Dropdown - -To navigate seamlessly across languages, add a locale dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -module.exports = { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'localeDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The locale dropdown now appears in your navbar: - -![Locale Dropdown](./img/localeDropdown.png) - -## Build your localized site - -Build your site for a specific locale: - -```bash -npm run build -- --locale fr -``` - -Or build your site to include all the locales at once: - -```bash -npm run build -``` diff --git a/docs/docs/tutorial-basics/_category_.json b/docs/docs/user-guide/_category_.json similarity index 66% rename from docs/docs/tutorial-basics/_category_.json rename to docs/docs/user-guide/_category_.json index 2e6db55b..b65ca9c4 100644 --- a/docs/docs/tutorial-basics/_category_.json +++ b/docs/docs/user-guide/_category_.json @@ -1,6 +1,7 @@ { - "label": "Tutorial - Basics", - "position": 2, + "label": "使用指南", + "position": 3, + "collapsed": false, "link": { "type": "generated-index", "description": "5 minutes to learn the most important Docusaurus concepts." diff --git a/docs/docs/tutorial-basics/congratulations.md b/docs/docs/user-guide/congratulations.md similarity index 100% rename from docs/docs/tutorial-basics/congratulations.md rename to docs/docs/user-guide/congratulations.md diff --git a/docs/docs/tutorial-basics/create-a-blog-post.md b/docs/docs/user-guide/create-a-blog-post.md similarity index 100% rename from docs/docs/tutorial-basics/create-a-blog-post.md rename to docs/docs/user-guide/create-a-blog-post.md diff --git a/docs/docs/tutorial-basics/create-a-document.md b/docs/docs/user-guide/create-a-document.md similarity index 100% rename from docs/docs/tutorial-basics/create-a-document.md rename to docs/docs/user-guide/create-a-document.md diff --git a/docs/docs/tutorial-basics/create-a-page.md b/docs/docs/user-guide/create-a-page.md similarity index 100% rename from docs/docs/tutorial-basics/create-a-page.md rename to docs/docs/user-guide/create-a-page.md diff --git a/docs/docs/tutorial-basics/deploy-your-site.md b/docs/docs/user-guide/deploy-your-site.md similarity index 100% rename from docs/docs/tutorial-basics/deploy-your-site.md rename to docs/docs/user-guide/deploy-your-site.md diff --git a/docs/docs/tutorial-basics/markdown-features.mdx b/docs/docs/user-guide/markdown-features.mdx similarity index 100% rename from docs/docs/tutorial-basics/markdown-features.mdx rename to docs/docs/user-guide/markdown-features.mdx diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index ce2ea285..e47beef2 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -7,8 +7,8 @@ const darkCodeTheme = require('prism-react-renderer/themes/dracula'); /** @type {import('@docusaurus/types').Config} */ const config = { title: 'Cocos Service Pack', - tagline: '对 Cocos Creator 引擎进行特性新增、修复与优化的开源非官方服务包', - url: 'https://smallmain.github.io/cocos-service-pack/', + tagline: '给 Cocos Creator 加点料', + url: 'https://smallmain.github.io', baseUrl: '/cocos-service-pack/', onBrokenLinks: 'throw', onBrokenMarkdownLinks: 'warn', @@ -78,8 +78,9 @@ const config = { // { to: '/blog', label: 'Blog', position: 'left' }, { href: 'https://github.com/smallmain/cocos-service-pack', - label: 'GitHub', + label: '加星鼓励', position: 'right', + className: 'header-github-link', }, { type: 'search', diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 6215cd04..a2a34970 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -15,6 +15,7 @@ --ifm-color-primary-lightest: #7b59c3; --ifm-code-font-size: 90%; --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); + --ifm-h1-font-size: 2.5rem; } /* For readability concerns, you should choose a lighter palette in dark mode. */ @@ -31,12 +32,46 @@ @media screen and (max-width: 996px) { :root { - --ifm-font-size-base: 15px; + --ifm-font-size-base: 16px; } } @media screen and (min-width: 997px) { :root { - --ifm-font-size-base: 15px; + --ifm-font-size-base: 18px; } } + +html[data-theme=light] .navbar__item.header-github-link { + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjciIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMy42MDEgMGExMy41OTcgMTMuNTk3IDAgMCAwLTQuMjk4IDI2LjQ5OGMuNjc2LjEyNi45MjgtLjI5NS45MjgtLjY1NSAwLS4zMjUtLjAxMS0xLjM5NC0uMDE4LTIuNTMxLTMuNzgzLjgyMi00LjU4LTEuNjAzLTQuNTgtMS42MDMtLjYxOS0xLjU3Ni0xLjUxLTEuOTktMS41MS0xLjk5LTEuMjM0LS44NDUuMDkyLS44MjcuMDkyLS44MjcgMS4zNjYuMDk3IDIuMDg1IDEuNCAyLjA4NSAxLjQgMS4yMTMgMi4wNzkgMy4xODEgMS40OCAzLjk1NiAxLjEyNi4xMjMtLjg3OC40NzUtMS40NzcuODY0LTEuODE3LTMuMDEtLjM0LTYuMTk2LTEuNTA2LTYuMTk2LTYuNzE2YTUuMjU3IDUuMjU3IDAgMCAxIDEuNDAzLTMuNjU0Yy0uMTQyLS4zNDItLjYwOC0xLjcyNS4xMy0zLjYwMiAwIDAgMS4xNDItLjM2NSAzLjc0IDEuMzkzYTEyLjkyIDEyLjkyIDAgMCAxIDYuODEgMGMyLjU4NS0xLjc0OSAzLjczNi0xLjM5MyAzLjczNi0xLjM5My43MzkgMS44NzMuMjc1IDMuMjU1LjEzMyAzLjYwMmE1LjI1NSA1LjI1NSAwIDAgMSAxLjM5OCAzLjY1YzAgNS4yMjMtMy4xOCA2LjM3MS02LjIwNyA2LjcxLjQ4Ni40Mi45MiAxLjI0OS45MiAyLjUxNiAwIDEuODItLjAxMyAzLjI4NS0uMDEzIDMuNzMxIDAgLjM2My4yNDMuNzg2LjkzMi42NTNBMTMuNTk2IDEzLjU5NiAwIDAgMCAxMy42MDEgMHoiIGZpbGw9IiMyMTIyMkMiLz48cGF0aCBkPSJNNS4xNTQgMTkuNTJjLS4wMy4wNjgtLjEzNS4wODgtLjIyNS4wNDNzLS4xNTYtLjEzNy0uMTI0LS4yMDVjLjAzMS0uMDY3LjEzNy0uMDg3LjIyNS0uMDQyLjA4OC4wNDUuMTU1LjEzNy4xMjIuMjA0aC4wMDJ6bS41NTEuNjE1Yy0uMDY1LjA2LS4xOTEuMDMyLS4yNzktLjA2M2EuMjA3LjIwNyAwIDAgMS0uMDM4LS4yODFjLjA2Ny0uMDYxLjE4OS0uMDMyLjI3OS4wNjMuMDkuMDk0LjEwNi4yMjUuMDM4LjI4MXptLjUzNi43ODNjLS4wODMuMDU5LS4yMjUgMC0uMzA0LS4xMTctLjA3OS0uMTE3LS4wODMtLjI2NSAwLS4zMjQuMDg0LS4wNTguMjI1IDAgLjMwNC4xMTUuMDc5LjExNS4wODQuMjY4IDAgLjMyNnptLjc0My43NTdhLjI1NS4yNTUgMCAwIDEtLjM1OC0uMDZjLS4xMi0uMTExLS4xNTMtLjI2Ni0uMDc2LS4zNDguMDc2LS4wOC4yMjUtLjA2LjM1LjA1Mi4xMjcuMTEzLjE1NC4yNjYuMDc1LjM0N2wuMDEuMDA5em0xLjAwNC40MzljLS4wMzMuMTA2LS4xODQuMTU1LS4zNC4xMS0uMTU1LS4wNDUtLjI1NC0uMTctLjIyNS0uMjc5LjAzLS4xMDguMTg1LS4xNTcuMzQtLjExLjE1Ni4wNDcuMjU1LjE3LjIyNS4yNzl6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTkuMSAyMi4xOTVjMCAuMTEzLS4xMjYuMjA1LS4yODguMjA3LS4xNjIuMDAyLS4yOTItLjA4NS0uMjk1LS4xOTgtLjAwMi0uMTEzLjEyNi0uMjA1LjI5LS4yMDcuMTY1LS4wMDIuMjkzLjA4OC4yOTMuMTk4em0xLjAzNi0uMTc1Yy4wMi4xMS0uMDkyLjIyNS0uMjUyLjI1Mi0uMTYuMDI3LS4zMDQtLjAzOS0uMzI0LS4xNDktLjAyLS4xMS4wOTQtLjIyNS4yNTItLjI1Mi4xNTgtLjAyNy4zMDQuMDM4LjMyNC4xNDh6IiBmaWxsPSIjMUUxRjI3Ii8+PC9zdmc+) 0/20px 20px no-repeat; +} + +.navbar__item.header-github-link { + padding-left: 1.6rem; + padding-bottom: 0.2rem; + margin-left: 0.6rem; + margin-right: -1rem; + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjciIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMy42MDEgMGExMy41OTcgMTMuNTk3IDAgMCAwLTQuMjk4IDI2LjQ5OGMuNjc2LjEyNi45MjgtLjI5NS45MjgtLjY1NSAwLS4zMjUtLjAxMS0xLjM5NC0uMDE4LTIuNTMxLTMuNzgzLjgyMi00LjU4LTEuNjAzLTQuNTgtMS42MDMtLjYxOS0xLjU3Ni0xLjUxLTEuOTktMS41MS0xLjk5LTEuMjM0LS44NDUuMDkyLS44MjcuMDkyLS44MjcgMS4zNjYuMDk3IDIuMDg1IDEuNCAyLjA4NSAxLjQgMS4yMTMgMi4wNzkgMy4xODEgMS40OCAzLjk1NiAxLjEyNi4xMjMtLjg3OC40NzUtMS40NzcuODY0LTEuODE3LTMuMDEtLjM0LTYuMTk2LTEuNTA2LTYuMTk2LTYuNzE2YTUuMjU3IDUuMjU3IDAgMCAxIDEuNDAzLTMuNjU0Yy0uMTQyLS4zNDItLjYwOC0xLjcyNS4xMy0zLjYwMiAwIDAgMS4xNDItLjM2NSAzLjc0IDEuMzkzYTEyLjkyIDEyLjkyIDAgMCAxIDYuODEgMGMyLjU4NS0xLjc0OSAzLjczNi0xLjM5MyAzLjczNi0xLjM5My43MzkgMS44NzMuMjc1IDMuMjU1LjEzMyAzLjYwMmE1LjI1NSA1LjI1NSAwIDAgMSAxLjM5OCAzLjY1YzAgNS4yMjMtMy4xOCA2LjM3MS02LjIwNyA2LjcxLjQ4Ni40Mi45MiAxLjI0OS45MiAyLjUxNiAwIDEuODItLjAxMyAzLjI4NS0uMDEzIDMuNzMxIDAgLjM2My4yNDMuNzg2LjkzMi42NTNBMTMuNTk2IDEzLjU5NiAwIDAgMCAxMy42MDEgMHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNNS4xNTQgMTkuNTJjLS4wMy4wNjgtLjEzNS4wODgtLjIyNS4wNDNzLS4xNTYtLjEzNy0uMTI0LS4yMDVjLjAzMS0uMDY3LjEzNy0uMDg3LjIyNS0uMDQyLjA4OC4wNDUuMTU1LjEzNy4xMjIuMjA0aC4wMDJ6bS41NTEuNjE1Yy0uMDY1LjA2LS4xOTEuMDMyLS4yNzktLjA2M2EuMjA3LjIwNyAwIDAgMS0uMDM4LS4yODFjLjA2Ny0uMDYxLjE4OS0uMDMyLjI3OS4wNjMuMDkuMDk0LjEwNi4yMjUuMDM4LjI4MXptLjUzNi43ODNjLS4wODMuMDU5LS4yMjUgMC0uMzA0LS4xMTctLjA3OS0uMTE3LS4wODMtLjI2NSAwLS4zMjQuMDg0LS4wNTguMjI1IDAgLjMwNC4xMTUuMDc5LjExNS4wODQuMjY4IDAgLjMyNnptLjc0My43NTdhLjI1NS4yNTUgMCAwIDEtLjM1OC0uMDZjLS4xMi0uMTExLS4xNTMtLjI2Ni0uMDc2LS4zNDguMDc2LS4wOC4yMjUtLjA2LjM1LjA1Mi4xMjcuMTEzLjE1NC4yNjYuMDc1LjM0N2wuMDEuMDA5em0xLjAwNC40MzljLS4wMzMuMTA2LS4xODQuMTU1LS4zNC4xMS0uMTU1LS4wNDUtLjI1NC0uMTctLjIyNS0uMjc5LjAzLS4xMDguMTg1LS4xNTcuMzQtLjExLjE1Ni4wNDcuMjU1LjE3LjIyNS4yNzl6bTEuMTEyLjA4MWMwIC4xMTMtLjEyNi4yMDUtLjI4OC4yMDctLjE2Mi4wMDItLjI5Mi0uMDg1LS4yOTUtLjE5OC0uMDAyLS4xMTMuMTI2LS4yMDUuMjktLjIwNy4xNjUtLjAwMi4yOTMuMDg4LjI5My4xOTh6bTEuMDM2LS4xNzVjLjAyLjExLS4wOTIuMjI1LS4yNTIuMjUyLS4xNi4wMjctLjMwNC0uMDM5LS4zMjQtLjE0OS0uMDItLjExLjA5NC0uMjI1LjI1Mi0uMjUyLjE1OC0uMDI3LjMwNC4wMzguMzI0LjE0OHoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=) 0/20px 20px no-repeat; +} + +.hero__subtitle { + margin-top: 2rem; +} + +.hero__title { + font-size: 4rem; +} + +@media screen and (max-width: 996px) { + .banner-img { + display: none; + } +} + +.markdown h1:first-child { + --ifm-h1-font-size: 2.5rem; +} + +.title_node_modules-\@docusaurus-theme-classic-lib-next-theme-DocCategoryGeneratedIndexPage-styles-module { + --ifm-h1-font-size: 2.5rem !important; +} diff --git a/docs/src/pages/index.module.css b/docs/src/pages/index.module.css index 9f71a5da..c4f77e8d 100644 --- a/docs/src/pages/index.module.css +++ b/docs/src/pages/index.module.css @@ -5,7 +5,7 @@ .heroBanner { padding: 4rem 0; - text-align: center; + /* text-align: center; */ position: relative; overflow: hidden; } @@ -19,5 +19,6 @@ .buttons { display: flex; align-items: center; - justify-content: center; + margin-top: 60px; + /* justify-content: center; */ } diff --git a/docs/src/pages/index.tsx b/docs/src/pages/index.tsx index afed24b6..d5828d26 100644 --- a/docs/src/pages/index.tsx +++ b/docs/src/pages/index.tsx @@ -5,20 +5,59 @@ import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import styles from './index.module.css'; import HomepageFeatures from '@site/src/components/HomepageFeatures'; +import Rocket from '../../static/img/rocket.svg'; function HomepageHeader() { - const {siteConfig} = useDocusaurusContext(); + const { siteConfig } = useDocusaurusContext(); return ( -
+ // +
-

{siteConfig.title}

-

{siteConfig.tagline}

-
- - Docusaurus Tutorial - 5min ⏱️ - +
+
+

{siteConfig.title}

+

{siteConfig.tagline + ":"}

+
+

+ 2D 渲染 + 支持多纹理材质,新增多纹理合批管理器与静态合批组件 +

+

+ 动态图集 + 完全重构,进行了多方面提升,并支持自动多纹理合批 +

+

+ Label 组件 + 支持高 DPI 渲染,BITMAP 与 CHAR 缓存模式的实用性提升 +

+

+ RichText 组件 + 支持使用自定义材质 +

+

+ Spine 组件 + 支持 Region 换装,支持参与动态合图 +

+
+
+ + 开始使用 + + + + GitHub + +
+
+
+ +
@@ -26,7 +65,7 @@ function HomepageHeader() { } export default function Home(): JSX.Element { - const {siteConfig} = useDocusaurusContext(); + const { siteConfig } = useDocusaurusContext(); return ( + {label} + {/* {href && !isInternalUrl(href) && } */} + + ); +} diff --git a/docs/src/theme/Footer/index.js b/docs/src/theme/Footer/index.js new file mode 100644 index 00000000..816eb392 --- /dev/null +++ b/docs/src/theme/Footer/index.js @@ -0,0 +1,26 @@ +import React from 'react'; +import {useThemeConfig} from '@docusaurus/theme-common'; +import FooterLinks from '@theme/Footer/Links'; +import FooterLogo from '@theme/Footer/Logo'; +import FooterCopyright from '@theme/Footer/Copyright'; +import FooterLayout from '@theme/Footer/Layout'; + +function Footer() { + const {footer} = useThemeConfig(); + + if (!footer) { + return null; + } + + const {copyright, links, logo, style} = footer; + return ( + 0 && } + logo={logo && } + copyright={copyright && } + /> + ); +} + +export default React.memo(Footer); diff --git a/docs/src/theme/NavbarItem/ComponentTypes.js b/docs/src/theme/NavbarItem/ComponentTypes.js new file mode 100644 index 00000000..8a432e7c --- /dev/null +++ b/docs/src/theme/NavbarItem/ComponentTypes.js @@ -0,0 +1,21 @@ +import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; +import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem'; +import LocaleDropdownNavbarItem from '@theme/NavbarItem/LocaleDropdownNavbarItem'; +import SearchNavbarItem from '@theme/NavbarItem/SearchNavbarItem'; +import HtmlNavbarItem from '@theme/NavbarItem/HtmlNavbarItem'; +import DocNavbarItem from '@theme/NavbarItem/DocNavbarItem'; +import DocSidebarNavbarItem from '@theme/NavbarItem/DocSidebarNavbarItem'; +import DocsVersionNavbarItem from '@theme/NavbarItem/DocsVersionNavbarItem'; +import DocsVersionDropdownNavbarItem from '@theme/NavbarItem/DocsVersionDropdownNavbarItem'; +const ComponentTypes = { + default: DefaultNavbarItem, + localeDropdown: LocaleDropdownNavbarItem, + search: SearchNavbarItem, + dropdown: DropdownNavbarItem, + html: HtmlNavbarItem, + doc: DocNavbarItem, + docSidebar: DocSidebarNavbarItem, + docsVersion: DocsVersionNavbarItem, + docsVersionDropdown: DocsVersionDropdownNavbarItem, +}; +export default ComponentTypes; diff --git a/docs/src/theme/NavbarItem/DefaultNavbarItem.js b/docs/src/theme/NavbarItem/DefaultNavbarItem.js new file mode 100644 index 00000000..01eb5275 --- /dev/null +++ b/docs/src/theme/NavbarItem/DefaultNavbarItem.js @@ -0,0 +1,51 @@ +import React from 'react'; +import clsx from 'clsx'; +import NavbarNavLink from '@theme/NavbarItem/NavbarNavLink'; +import {getInfimaActiveClassName} from '@theme/NavbarItem/utils'; + +function DefaultNavbarItemDesktop({ + className, + isDropdownItem = false, + ...props +}) { + const element = ( + + ); + + if (isDropdownItem) { + return
  • {element}
  • ; + } + + return element; +} + +function DefaultNavbarItemMobile({className, isDropdownItem, ...props}) { + return ( +
  • + +
  • + ); +} + +export default function DefaultNavbarItem({ + mobile = false, + position, + // Need to destructure position from props so that it doesn't get passed on. + ...props +}) { + const Comp = mobile ? DefaultNavbarItemMobile : DefaultNavbarItemDesktop; + return ( + + ); +} diff --git a/docs/src/theme/NavbarItem/DocNavbarItem.js b/docs/src/theme/NavbarItem/DocNavbarItem.js new file mode 100644 index 00000000..b91d8e90 --- /dev/null +++ b/docs/src/theme/NavbarItem/DocNavbarItem.js @@ -0,0 +1,37 @@ +import React from 'react'; +import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; +import {useActiveDocContext} from '@docusaurus/plugin-content-docs/client'; +import clsx from 'clsx'; +import {getInfimaActiveClassName} from '@theme/NavbarItem/utils'; +import {useLayoutDoc} from '@docusaurus/theme-common'; +export default function DocNavbarItem({ + docId, + label: staticLabel, + docsPluginId, + ...props +}) { + const {activeDoc} = useActiveDocContext(docsPluginId); + const doc = useLayoutDoc(docId, docsPluginId); // Draft items are not displayed in the navbar. + + if (doc === null) { + return null; + } + + const activeDocInfimaClassName = getInfimaActiveClassName(props.mobile); + return ( + + ); +} diff --git a/docs/src/theme/NavbarItem/DocSidebarNavbarItem.js b/docs/src/theme/NavbarItem/DocSidebarNavbarItem.js new file mode 100644 index 00000000..5b95cb82 --- /dev/null +++ b/docs/src/theme/NavbarItem/DocSidebarNavbarItem.js @@ -0,0 +1,35 @@ +import React from 'react'; +import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; +import {useActiveDocContext} from '@docusaurus/plugin-content-docs/client'; +import clsx from 'clsx'; +import {getInfimaActiveClassName} from '@theme/NavbarItem/utils'; +import {useLayoutDocsSidebar} from '@docusaurus/theme-common'; +export default function DocSidebarNavbarItem({ + sidebarId, + label, + docsPluginId, + ...props +}) { + const {activeDoc} = useActiveDocContext(docsPluginId); + const sidebarLink = useLayoutDocsSidebar(sidebarId, docsPluginId).link; + + if (!sidebarLink) { + throw new Error( + `DocSidebarNavbarItem: Sidebar with ID "${sidebarId}" doesn't have anything to be linked to.`, + ); + } + + const activeDocInfimaClassName = getInfimaActiveClassName(props.mobile); + return ( + + ); +} diff --git a/docs/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.js b/docs/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.js new file mode 100644 index 00000000..4ad52c5f --- /dev/null +++ b/docs/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.js @@ -0,0 +1,87 @@ +import React from 'react'; +import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; +import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem'; +import { + useVersions, + useActiveDocContext, +} from '@docusaurus/plugin-content-docs/client'; +import { + useDocsPreferredVersion, + useDocsVersionCandidates, +} from '@docusaurus/theme-common'; +import {translate} from '@docusaurus/Translate'; + +const getVersionMainDoc = (version) => + version.docs.find((doc) => doc.id === version.mainDocId); + +export default function DocsVersionDropdownNavbarItem({ + mobile, + docsPluginId, + dropdownActiveClassDisabled, + dropdownItemsBefore, + dropdownItemsAfter, + ...props +}) { + const activeDocContext = useActiveDocContext(docsPluginId); + const versions = useVersions(docsPluginId); + const {savePreferredVersionName} = useDocsPreferredVersion(docsPluginId); + const versionLinks = versions.map((version) => { + // We try to link to the same doc, in another version + // When not possible, fallback to the "main doc" of the version + const versionDoc = + activeDocContext?.alternateDocVersions[version.name] ?? + getVersionMainDoc(version); + return { + isNavLink: true, + label: version.label, + to: versionDoc.path, + isActive: () => version === activeDocContext?.activeVersion, + onClick: () => savePreferredVersionName(version.name), + }; + }); + const items = [ + ...dropdownItemsBefore, + ...versionLinks, + ...dropdownItemsAfter, + ]; + const dropdownVersion = useDocsVersionCandidates(docsPluginId)[0]; // Mobile dropdown is handled a bit differently + + const dropdownLabel = + mobile && items.length > 1 + ? translate({ + id: 'theme.navbar.mobileVersionsDropdown.label', + message: 'Versions', + description: + 'The label for the navbar versions dropdown on mobile view', + }) + : dropdownVersion.label; + const dropdownTo = + mobile && items.length > 1 + ? undefined + : getVersionMainDoc(dropdownVersion).path; // We don't want to render a version dropdown with 0 or 1 item. If we build + // the site with a single docs version (onlyIncludeVersions: ['1.0.0']), + // We'd rather render a button instead of a dropdown + + if (items.length <= 1) { + return ( + false : undefined} + /> + ); + } + + return ( + false : undefined} + /> + ); +} diff --git a/docs/src/theme/NavbarItem/DocsVersionNavbarItem.js b/docs/src/theme/NavbarItem/DocsVersionNavbarItem.js new file mode 100644 index 00000000..d7172dbc --- /dev/null +++ b/docs/src/theme/NavbarItem/DocsVersionNavbarItem.js @@ -0,0 +1,18 @@ +import React from 'react'; +import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem'; +import {useDocsVersionCandidates} from '@docusaurus/theme-common'; + +const getVersionMainDoc = (version) => + version.docs.find((doc) => doc.id === version.mainDocId); + +export default function DocsVersionNavbarItem({ + label: staticLabel, + to: staticTo, + docsPluginId, + ...props +}) { + const version = useDocsVersionCandidates(docsPluginId)[0]; + const label = staticLabel ?? version.label; + const path = staticTo ?? getVersionMainDoc(version).path; + return ; +} diff --git a/docs/src/theme/NavbarItem/DropdownNavbarItem.js b/docs/src/theme/NavbarItem/DropdownNavbarItem.js new file mode 100644 index 00000000..eddae31d --- /dev/null +++ b/docs/src/theme/NavbarItem/DropdownNavbarItem.js @@ -0,0 +1,161 @@ +import React, {useState, useRef, useEffect} from 'react'; +import clsx from 'clsx'; +import { + isSamePath, + useCollapsible, + Collapsible, + isRegexpStringMatch, + useLocalPathname, +} from '@docusaurus/theme-common'; +import NavbarNavLink from '@theme/NavbarItem/NavbarNavLink'; +import NavbarItem from '@theme/NavbarItem'; +const dropdownLinkActiveClass = 'dropdown__link--active'; + +function isItemActive(item, localPathname) { + if (isSamePath(item.to, localPathname)) { + return true; + } + + if (isRegexpStringMatch(item.activeBaseRegex, localPathname)) { + return true; + } + + if (item.activeBasePath && localPathname.startsWith(item.activeBasePath)) { + return true; + } + + return false; +} + +function containsActiveItems(items, localPathname) { + return items.some((item) => isItemActive(item, localPathname)); +} + +function DropdownNavbarItemDesktop({items, position, className, ...props}) { + const dropdownRef = useRef(null); + const [showDropdown, setShowDropdown] = useState(false); + useEffect(() => { + const handleClickOutside = (event) => { + if (!dropdownRef.current || dropdownRef.current.contains(event.target)) { + return; + } + + setShowDropdown(false); + }; + + document.addEventListener('mousedown', handleClickOutside); + document.addEventListener('touchstart', handleClickOutside); + return () => { + document.removeEventListener('mousedown', handleClickOutside); + document.removeEventListener('touchstart', handleClickOutside); + }; + }, [dropdownRef]); + return ( +
    + e.preventDefault()} + onKeyDown={(e) => { + if (e.key === 'Enter') { + e.preventDefault(); + setShowDropdown(!showDropdown); + } + }}> + {props.children ?? props.label} + +
      + {items.map((childItemProps, i) => ( + { + if (i === items.length - 1 && e.key === 'Tab') { + e.preventDefault(); + setShowDropdown(false); + const nextNavbarItem = dropdownRef.current.nextElementSibling; + + if (nextNavbarItem) { + const targetItem = + nextNavbarItem instanceof HTMLAnchorElement + ? nextNavbarItem // Next item is another dropdown; focus on the inner + : // anchor element instead so there's outline + nextNavbarItem.querySelector('a'); + targetItem.focus(); + } + } + }} + activeClassName={dropdownLinkActiveClass} + {...childItemProps} + key={i} + /> + ))} +
    +
    + ); +} + +function DropdownNavbarItemMobile({ + items, + className, + position, + // Need to destructure position from props so that it doesn't get passed on. + ...props +}) { + const localPathname = useLocalPathname(); + const containsActive = containsActiveItems(items, localPathname); + const {collapsed, toggleCollapsed, setCollapsed} = useCollapsible({ + initialState: () => !containsActive, + }); // Expand/collapse if any item active after a navigation + + useEffect(() => { + if (containsActive) { + setCollapsed(!containsActive); + } + }, [localPathname, containsActive, setCollapsed]); + return ( +
  • + { + e.preventDefault(); + toggleCollapsed(); + }}> + {props.children ?? props.label} + + + {items.map((childItemProps, i) => ( + + ))} + +
  • + ); +} + +export default function DropdownNavbarItem({mobile = false, ...props}) { + const Comp = mobile ? DropdownNavbarItemMobile : DropdownNavbarItemDesktop; + return ; +} diff --git a/docs/src/theme/NavbarItem/HtmlNavbarItem.js b/docs/src/theme/NavbarItem/HtmlNavbarItem.js new file mode 100644 index 00000000..0bc21714 --- /dev/null +++ b/docs/src/theme/NavbarItem/HtmlNavbarItem.js @@ -0,0 +1,24 @@ +import React from 'react'; +import clsx from 'clsx'; +export default function HtmlNavbarItem({ + value, + className, + mobile = false, + isDropdownItem = false, +}) { + const Comp = isDropdownItem ? 'li' : 'div'; + return ( + + ); +} diff --git a/docs/src/theme/NavbarItem/NavbarNavLink.js b/docs/src/theme/NavbarItem/NavbarNavLink.js new file mode 100644 index 00000000..dbaefa73 --- /dev/null +++ b/docs/src/theme/NavbarItem/NavbarNavLink.js @@ -0,0 +1,69 @@ +import React from 'react'; +import Link from '@docusaurus/Link'; +import useBaseUrl from '@docusaurus/useBaseUrl'; +import isInternalUrl from '@docusaurus/isInternalUrl'; +import {isRegexpStringMatch} from '@docusaurus/theme-common'; +const dropdownLinkActiveClass = 'dropdown__link--active'; +export default function NavbarNavLink({ + activeBasePath, + activeBaseRegex, + to, + href, + label, + html, + activeClassName = '', + prependBaseUrlToHref, + ...props +}) { + // TODO all this seems hacky + // {to: 'version'} should probably be forbidden, in favor of {to: '/version'} + const toUrl = useBaseUrl(to); + const activeBaseUrl = useBaseUrl(activeBasePath); + const normalizedHref = useBaseUrl(href, { + forcePrependBaseUrl: true, + }); + const isExternalLink = label && href && !isInternalUrl(href); + const isDropdownLink = activeClassName === dropdownLinkActiveClass; // Link content is set through html XOR label + + const linkContentProps = html + ? { + dangerouslySetInnerHTML: { + __html: html, + }, + } + : { + children: ( + <> + {label} + + ), + }; + + if (href) { + return ( + + ); + } + + return ( + + activeBaseRegex + ? isRegexpStringMatch(activeBaseRegex, location.pathname) + : location.pathname.startsWith(activeBaseUrl), + })} + {...props} + {...linkContentProps} + /> + ); +} diff --git a/docs/src/theme/NavbarItem/SearchNavbarItem.js b/docs/src/theme/NavbarItem/SearchNavbarItem.js new file mode 100644 index 00000000..4a2f90c8 --- /dev/null +++ b/docs/src/theme/NavbarItem/SearchNavbarItem.js @@ -0,0 +1,14 @@ +import React from 'react'; +import SearchBar from '@theme/SearchBar'; +import NavbarSearch from '@theme/Navbar/Search'; +export default function SearchNavbarItem({mobile}) { + if (mobile) { + return null; + } + + return ( + + + + ); +} diff --git a/docs/src/theme/NavbarItem/index.js b/docs/src/theme/NavbarItem/index.js new file mode 100644 index 00000000..50356312 --- /dev/null +++ b/docs/src/theme/NavbarItem/index.js @@ -0,0 +1,28 @@ +import React from 'react'; +import ComponentTypes from '@theme/NavbarItem/ComponentTypes'; + +const getNavbarItemComponent = (type) => { + const component = ComponentTypes[type]; + + if (!component) { + throw new Error(`No NavbarItem component found for type "${type}".`); + } + + return component; +}; + +function getComponentType(type, isDropdown) { + // Backward compatibility: navbar item with no type set + // but containing dropdown items should use the type "dropdown" + if (!type || type === 'default') { + return isDropdown ? 'dropdown' : 'default'; + } + + return type; +} + +export default function NavbarItem({type, ...props}) { + const componentType = getComponentType(type, props.items !== undefined); + const NavbarItemComponent = getNavbarItemComponent(componentType); + return ; +} diff --git a/docs/src/theme/NavbarItem/utils.js b/docs/src/theme/NavbarItem/utils.js new file mode 100644 index 00000000..f3a5d029 --- /dev/null +++ b/docs/src/theme/NavbarItem/utils.js @@ -0,0 +1,3 @@ +/* eslint-disable import/no-named-export */ +export const getInfimaActiveClassName = (mobile) => + mobile ? 'menu__link--active' : 'navbar__link--active'; diff --git a/docs/static/img/logo2.png b/docs/static/img/logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..6f9edc242473d1d1e716c3ae546b9db33560dda9 GIT binary patch literal 12112 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 IOPU7%KdOVr1poj5 literal 0 HcmV?d00001 diff --git a/docs/static/img/rocket.svg b/docs/static/img/rocket.svg new file mode 100644 index 00000000..8d17b588 --- /dev/null +++ b/docs/static/img/rocket.svg @@ -0,0 +1 @@ + \ No newline at end of file