feat: add CONTRIBUTING.md document.
				
					
				
			This commit is contained in:
		
							
								
								
									
										42
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
Contributing 贡献
 | 
			
		||||
====
 | 
			
		||||
 | 
			
		||||
感谢您对**备忘清单**贡献的兴趣👍👍,是像您这样的人使 [`Quick Reference`](https://jaywcjlove.github.io/reference) 成为如此出色的网站 🎉🎉。随时提交问题和增强请求。
 | 
			
		||||
 | 
			
		||||
`docs/{filename}.md` 文件将被处理成备忘清单,让我们创建或编辑一个 `markdown` 文件:
 | 
			
		||||
 | 
			
		||||
## 前沿问题
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
备忘清单 标题
 | 
			
		||||
===
 | 
			
		||||
 | 
			
		||||
这是您可以在 Quick Reference 备忘清单上使用的样式参考!【备忘清单介绍】
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
只需要 `标题<h1>` 和`介绍`(标题下面)。脚本会自动识别,通过 GitHub Actions 自动发布 [`Quick Reference`](https://jaywcjlove.github.io/reference) 网站。
 | 
			
		||||
 | 
			
		||||
## CSS 类注释
 | 
			
		||||
 | 
			
		||||
[`Quick Reference`](https://jaywcjlove.github.io/reference) 使用 [`@wcj/markdown-to-html`](https://github.com/jaywcjlove/markdown-to-html) 转换 `Markdown`,并使用 [`rehype-attr`](https://github.com/jaywcjlove/rehype-attr) 插件让其支持通过其注释语法添加类和样式。 此外,您可以在 Quick Reference 备忘清单上使用样式参考:https://jaywcjlove.github.io/reference/docs/quickreference.html
 | 
			
		||||
 | 
			
		||||
最后,参考现有备忘清单的源代码是一个好习惯!
 | 
			
		||||
 | 
			
		||||
## 首页导航
 | 
			
		||||
 | 
			
		||||
[`Quick Reference`](https://jaywcjlove.github.io/reference) 的首页存放在仓库的根目录 `README.md`,[`Quick Reference`](https://jaywcjlove.github.io/reference) 是通过这个 `README.md` 自动生成首页导航,下面是导航实例:
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
## Linux 命令
 | 
			
		||||
 | 
			
		||||
[Cron](./docs/cron.md)<!--rehype:style=background: rgb(239 68 68/var(\-\-bg\-opacity));-->
 | 
			
		||||
[Git](./docs/git.md)<!--rehype:style=background: rgb(215 89 62/var(\-\-bg\-opacity));-->
 | 
			
		||||
<!--rehype:class=home-card-->
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## 本地开发
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm i          # 安装依赖
 | 
			
		||||
npm run build  # 编译生成静态页面
 | 
			
		||||
```
 | 
			
		||||
@@ -36,6 +36,7 @@ Min  Hour Day  Mon  Weekday
 | 
			
		||||
| 月份中的某天   | 1 - 31 | , - * ? / L W      |
 | 
			
		||||
| 月 Month     | 1 - 12 | , - * /            |
 | 
			
		||||
| 星期几        | 0 - 6  | , - * ? / L #      |
 | 
			
		||||
<!--rehype:className=show-header -->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 示例
 | 
			
		||||
@@ -54,7 +55,6 @@ Min  Hour Day  Mon  Weekday
 | 
			
		||||
| `0 0 0 1 * *`  | 每个月的 1 日(每月)   |
 | 
			
		||||
| `0 0 0 1 1 *`  | 每年 1 月 1 日(每年)   |
 | 
			
		||||
| `@reboot`      | 每次重启 _(非标准)_   |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 特殊字符串
 | 
			
		||||
@@ -69,6 +69,7 @@ Min  Hour Day  Mon  Weekday
 | 
			
		||||
| @daily         | 每天运行一次,“0 0 * * *” _(非标准)_ |
 | 
			
		||||
| @midnight      | (与@daily 相同)_(非标准)_ |
 | 
			
		||||
| @hourly        | 每小时运行一次,“0 * * * *” _(非标准)_ |
 | 
			
		||||
<!--rehype:className=show-header -->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Crontab 命令
 | 
			
		||||
@@ -80,13 +81,11 @@ Min  Hour Day  Mon  Weekday
 | 
			
		||||
| `crontab -r` | 删除 crontab 文件。 |
 | 
			
		||||
| `crontab -v` | 显示您上次编辑 crontab 文件的时间。 _(非标准)_ |
 | 
			
		||||
| `echo "@reboot echo hi" | crontab` | 轻松添加任务 |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 特殊字符
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
| 特殊字符             | 说明 |
 | 
			
		||||
|---------------------|------------|
 | 
			
		||||
`星号(*)`  | 匹配字段中的所有值或任何可能的值。
 | 
			
		||||
@@ -96,6 +95,7 @@ Min  Hour Day  Mon  Weekday
 | 
			
		||||
`L`       | 仅允许用于 `月份中的某天` 或 `星期几` 字段,`星期几` 中的 `2L` 表示每个月的最后一个星期二
 | 
			
		||||
`井号 (#)` | 仅允许用于 `星期几` 字段,后面必须在 1 到 5 的范围内。例如,`4#1` 表示给定月份的“第一个星期四”。
 | 
			
		||||
`问号(?)`  | 可以代替“*”并允许用于月份和星期几。使用仅限于 cron 表达式中的 `月份中的某天` 或 `星期几`。
 | 
			
		||||
<!--rehype:className=show-header -->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Also see
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,6 @@ $ docker run -it -p 8001:8080 --name my-nginx nginx
 | 
			
		||||
| `docker port <container>`           | 显示容器的端口映射                                  |
 | 
			
		||||
| `docker top <container>`            | 列出进程                                  |
 | 
			
		||||
| `docker kill <container>`           | 杀死一个容器                                  |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
参数 `<container>` 可以是容器 id 或名称
 | 
			
		||||
 | 
			
		||||
@@ -71,7 +70,6 @@ Docker 容器
 | 
			
		||||
`docker wait nginx-server`    | 阻塞容器
 | 
			
		||||
`docker kill nginx-server`    | 发送 SIGKILL
 | 
			
		||||
`docker attach nginx-server`  | 连接到现有容器
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 说明
 | 
			
		||||
 | 
			
		||||
@@ -86,7 +84,6 @@ Docker 容器
 | 
			
		||||
`docker top nginx-server`     | 运行进程
 | 
			
		||||
`docker stats nginx-server`   | 容器资源使用
 | 
			
		||||
`docker diff nginx-server`    | 列出对容器所做的更改
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 创建容器
 | 
			
		||||
@@ -131,9 +128,6 @@ docker rm nginx-server
 | 
			
		||||
docker update --cpu-shares 512 -m 300M nginx-server
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Docker Images
 | 
			
		||||
----
 | 
			
		||||
<!--rehype:body-class=cols-2-->
 | 
			
		||||
@@ -151,8 +145,6 @@ Docker Images
 | 
			
		||||
`docker commit nginx`              | 将容器另存为镜像。
 | 
			
		||||
`docker tag nginx eon01/nginx`     | 标记镜像
 | 
			
		||||
`docker push eon01/nginx`          | 推送镜像
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 构建镜像
 | 
			
		||||
 | 
			
		||||
@@ -166,8 +158,6 @@ $ docker build -f myOtherDockerfile .
 | 
			
		||||
$ curl example.com/remote/Dockerfile | docker build -f - .
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Docker 联网
 | 
			
		||||
----
 | 
			
		||||
<!--rehype:body-class=cols-2-->
 | 
			
		||||
@@ -228,9 +218,6 @@ docker network create -d overlay \
 | 
			
		||||
  MyOverlayNetwork
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
各种各样的
 | 
			
		||||
----
 | 
			
		||||
<!--rehype:body-class=cols-2-->
 | 
			
		||||
@@ -243,7 +230,6 @@ docker network create -d overlay \
 | 
			
		||||
`docker pull user/image   ` | 从 docker hub 下载镜像。
 | 
			
		||||
`docker login             ` | 向 docker hub 进行身份验证
 | 
			
		||||
`docker push user/image   ` | 将镜像上传到 docker hub。
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 注册表命令
 | 
			
		||||
<!--rehype:wrap-class=row-span-3-->
 | 
			
		||||
@@ -290,8 +276,6 @@ $ docker push eon01/nginx localhost:5000/myadmin/nginx
 | 
			
		||||
`docker stop -f $(docker ps -a -q)` | 停止所有容器
 | 
			
		||||
`docker rm -f $(docker ps -a -q)` | 删除所有容器
 | 
			
		||||
`docker rmi -f $(docker images -q)` | 删除所有图像
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 卷 volume
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,6 @@ $ git clone git_url 指定目录
 | 
			
		||||
### 做出改变
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
在工作目录中**显示**修改后的文件,为您的下一次提交暂存
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
@@ -444,7 +443,6 @@ $ git rm -r --cached <目录/文件>
 | 
			
		||||
### 修改远程 Commit 记录
 | 
			
		||||
<!--rehype:wrap-class=row-span-4-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```shell
 | 
			
		||||
$ git rebase -i HEAD~3
 | 
			
		||||
# 表示要修改当前版本的倒数第三次状态
 | 
			
		||||
 
 | 
			
		||||
@@ -129,7 +129,6 @@ let age = 7;
 | 
			
		||||
### 字符串
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```js
 | 
			
		||||
var abc = "abcdefghijklmnopqrstuvwxyz";
 | 
			
		||||
var esc = 'I don\'t \n know';    // \n 换行
 | 
			
		||||
@@ -156,7 +155,6 @@ abc.split("");
 | 
			
		||||
### 数字
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```js
 | 
			
		||||
var pi = 3.141;
 | 
			
		||||
pi.toFixed(0);    // 返回 3             
 | 
			
		||||
@@ -213,7 +211,6 @@ Math.floor(Math.random() * 5) + 1;
 | 
			
		||||
### 全局函数
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```js
 | 
			
		||||
// 像脚本代码一样执行字符串
 | 
			
		||||
eval();                     
 | 
			
		||||
@@ -249,7 +246,6 @@ JavaScript 条件
 | 
			
		||||
### 操作符
 | 
			
		||||
<!--rehype:wrap-class=row-span-3-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
true || false;       // true
 | 
			
		||||
10 > 5 || 10 > 20;   // true
 | 
			
		||||
@@ -403,7 +399,6 @@ const rocketToMars = function() {
 | 
			
		||||
### 箭头函数 (ES6)
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
#### 有两个参数
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
@@ -496,7 +491,6 @@ JavaScript 范围
 | 
			
		||||
### 范围
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
function myFunction() {
 | 
			
		||||
  var pizzaName = "Margarita";
 | 
			
		||||
@@ -795,7 +789,6 @@ for (let index in fruits) {
 | 
			
		||||
### label 语句
 | 
			
		||||
<!--rehype:wrap-class= row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```js
 | 
			
		||||
var num = 0;
 | 
			
		||||
 | 
			
		||||
@@ -829,7 +822,6 @@ for (let fruit of fruits) {
 | 
			
		||||
### for await...of
 | 
			
		||||
<!--rehype:wrap-class= row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
async function* asyncGenerator() {
 | 
			
		||||
  var i = 0;
 | 
			
		||||
@@ -865,7 +857,6 @@ JavaScript 迭代器(Iterators)
 | 
			
		||||
----
 | 
			
		||||
<!--rehype:body-class=cols-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
### 分配给变量的函数
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
@@ -936,7 +927,6 @@ JavaScript 对象(Objects)
 | 
			
		||||
----
 | 
			
		||||
<!--rehype:body-class=cols-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
### 访问属性
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
@@ -974,7 +964,6 @@ console.log(classElection.place); // undefined
 | 
			
		||||
### 可变的
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
const student = {
 | 
			
		||||
  name: 'Sheldon',
 | 
			
		||||
@@ -1043,7 +1032,6 @@ console.log(origObj.color);
 | 
			
		||||
### 工厂函数
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
// 一个接受 'name','age' 和 'breed' 的工厂函数,
 | 
			
		||||
//  参数返回一个自定义的 dog 对象。
 | 
			
		||||
@@ -1121,7 +1109,6 @@ JavaScript Classes
 | 
			
		||||
### 静态方法/字段
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
class Dog {
 | 
			
		||||
  constructor(name) {
 | 
			
		||||
@@ -1313,7 +1300,6 @@ JavaScript Promises
 | 
			
		||||
### Promise
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
创建 promises
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
@@ -1418,7 +1404,6 @@ promise.catch((err) => {
 | 
			
		||||
### Promise.all()
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
const promise1 = new Promise((resolve, reject) => {
 | 
			
		||||
  setTimeout(() => {
 | 
			
		||||
@@ -1459,7 +1444,6 @@ promise.then(res => {
 | 
			
		||||
### 避免嵌套的 Promise 和 .then()
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
const promise = new Promise((resolve, reject) => {  
 | 
			
		||||
  setTimeout(() => {
 | 
			
		||||
@@ -1486,7 +1470,6 @@ JavaScript Async-Await
 | 
			
		||||
### 异步
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
function helloWorld() {
 | 
			
		||||
  return new Promise(resolve => {
 | 
			
		||||
@@ -1613,7 +1596,6 @@ req.send();
 | 
			
		||||
### POST
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
const data = { weight: '1.5 KG' };
 | 
			
		||||
const xhr = new XMLHttpRequest();
 | 
			
		||||
@@ -1636,7 +1618,6 @@ xhr.onerror = () => {
 | 
			
		||||
### fetch api
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
fetch(url, {
 | 
			
		||||
    method: 'POST',
 | 
			
		||||
@@ -1697,7 +1678,6 @@ fetch('https://api-xxx.com/endpoint', {
 | 
			
		||||
### async await 语法
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
const getSuggestions = async () => {
 | 
			
		||||
  const wordQuery = inputField.value;
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,6 @@ Jest 是一款优雅、简洁的 JavaScript 测试框架。
 | 
			
		||||
### 测试结构
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```js
 | 
			
		||||
describe('makePoniesPink', () => {
 | 
			
		||||
  beforeAll(() => {
 | 
			
		||||
@@ -152,7 +151,6 @@ expect([{ a: 1 }, { b: 2 }]).toEqual([
 | 
			
		||||
### 模拟函数
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```js
 | 
			
		||||
// const fn = jest.fn()
 | 
			
		||||
// const fn = jest.fn().mockName('Unicorn') -- 命名为 mock, Jest 22+
 | 
			
		||||
@@ -295,7 +293,6 @@ expect(fn).toThrowErrorMatchingSnapshot()
 | 
			
		||||
### 实例
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
请参阅 Jest 文档中的 [更多示例](https://jestjs.io/docs/en/tutorial-async)。
 | 
			
		||||
 | 
			
		||||
在异步测试中指定一些预期的断言是一个很好的做法,所以如果你的断言根本没有被调用,测试将会失败。
 | 
			
		||||
@@ -332,7 +329,6 @@ test('async test', async () => {
 | 
			
		||||
### done() 回调
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```js
 | 
			
		||||
test('async test', (done) => {
 | 
			
		||||
  expect.assertions(1)
 | 
			
		||||
@@ -373,7 +369,6 @@ test('async test', () => {
 | 
			
		||||
### 模拟函数
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```js
 | 
			
		||||
test('call the callback', () => {
 | 
			
		||||
  const callback = jest.fn()
 | 
			
		||||
@@ -506,7 +501,6 @@ const setTitle = jest
 | 
			
		||||
### 定时器模拟
 | 
			
		||||
<!--rehype:wrap-class=row-span-3-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
为使用本机计时器函数(`setTimeout`、`setInterval`、`clearTimeout`、`clearInterval`)的代码编写同步测试。
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
@@ -558,7 +552,6 @@ Object.defineProperty(location, 'title', {
 | 
			
		||||
### 清除和恢复模拟
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
对于一个模拟
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								docs/json.md
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								docs/json.md
									
									
									
									
									
								
							@@ -44,12 +44,10 @@ JSON 备忘清单
 | 
			
		||||
| `Value`   | 字符串、数字、布尔值、空值等         |
 | 
			
		||||
| `Object`  | 键/值对的无序集合                 |
 | 
			
		||||
| `null`    | Null 或 Empty                   |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 字符串
 | 
			
		||||
<!--rehype:data-wrap-style=grid-row: span 3/span 3;-->
 | 
			
		||||
<!--rehype:wrap-style=grid-row: span 3/span 3;-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
|      |                            |
 | 
			
		||||
|------|----------------------------|
 | 
			
		||||
| `\"` | 双引号 Double quote         |
 | 
			
		||||
@@ -61,7 +59,6 @@ JSON 备忘清单
 | 
			
		||||
| `\r` | 回车 Carriage return        |
 | 
			
		||||
| `\t` | 标签 Tab                    |
 | 
			
		||||
| `\u` | 后跟四个十六进制数字           |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
#### 示例
 | 
			
		||||
 | 
			
		||||
@@ -84,12 +81,12 @@ Have to be delimited by double quotes
 | 
			
		||||
### 数字
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
| Type       | Description                            |
 | 
			
		||||
|------------|----------------------------------------|
 | 
			
		||||
| `Integer`  | Digits 1-9, 0 and positive or negative |
 | 
			
		||||
| `Fraction` | Fractions like 0.3, 3.9                |
 | 
			
		||||
| `Exponent` | Exponent like e, e+, e-, E, E+, E      |
 | 
			
		||||
 类型 | 说明 
 | 
			
		||||
-----|------
 | 
			
		||||
`Integer`  | 数字 1-9、0 和正数或负数
 | 
			
		||||
`Fraction` | 0.3、3.9 等分数
 | 
			
		||||
`Exponent` | 指数,如 e、e+、e-、E、E+、E
 | 
			
		||||
<!--rehype:className=show-header -->
 | 
			
		||||
 | 
			
		||||
#### 示例
 | 
			
		||||
 | 
			
		||||
@@ -226,12 +223,10 @@ let myObject = {
 | 
			
		||||
| `myObject.age`     | 39        |
 | 
			
		||||
| `myObject.other`   | undefined |
 | 
			
		||||
| `myObject[0]`      | undefined |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 访问嵌套
 | 
			
		||||
<!--rehype:data-wrap-style=grid-row: span 2/span 2;-->
 | 
			
		||||
<!--rehype:wrap-style=grid-row: span 2/span 2;-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
let myObject = {
 | 
			
		||||
    "ref": {
 | 
			
		||||
@@ -270,12 +265,10 @@ let myObject = {
 | 
			
		||||
| `myObject.jdoe`          | ["Jason", "Doe", 39 ...] |
 | 
			
		||||
| `myObject.jsmith[3]`     | "F"                      |
 | 
			
		||||
| `myObject[1]`            | undefined                |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 访问对象数组
 | 
			
		||||
<!--rehype:data-wrap-style=grid-row: span 2/span 2;-->
 | 
			
		||||
<!--rehype:wrap-style=grid-row: span 2/span 2;-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```javascript
 | 
			
		||||
let myArray = [
 | 
			
		||||
  {
 | 
			
		||||
@@ -313,7 +306,6 @@ let myArray = [
 | 
			
		||||
| `myArray[1][2]`     | 42                         |
 | 
			
		||||
| `myArray[3]`        | undefined                  |
 | 
			
		||||
| `myArray[3].gender` | TypeError: Cannot read...  |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 访问阵列
 | 
			
		||||
 | 
			
		||||
@@ -335,7 +327,6 @@ let myArray = [
 | 
			
		||||
| `myArray[1]` | "Doe"     |
 | 
			
		||||
| `myArray[5]` | true      |
 | 
			
		||||
| `myArray[6]` | undefined |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
另见
 | 
			
		||||
 
 | 
			
		||||
@@ -42,9 +42,8 @@ Header 2
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### 无序列表
 | 
			
		||||
<!--rehype:data-wrap-style=grid-row: span 2/span 2;-->
 | 
			
		||||
<!--rehype:wrap-style=grid-row: span 2/span 2;-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```markdown
 | 
			
		||||
* Item 1
 | 
			
		||||
* Item 2
 | 
			
		||||
@@ -166,9 +165,8 @@ console.log("This is a block code")
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### 表格
 | 
			
		||||
<!--rehype:data-wrap-style=grid-column: span 2/span 2;-->
 | 
			
		||||
<!--rehype:wrap-style=grid-column: span 2/span 2;-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```markdown
 | 
			
		||||
|     左栏     |     中间栏     |     右栏     |
 | 
			
		||||
|:------------|:-------------:|-------------:|
 | 
			
		||||
@@ -188,9 +186,8 @@ console.log("This is a block code")
 | 
			
		||||
Markdown 表格生成器:[tableconvert.com](https://tableconvert.com/)
 | 
			
		||||
 | 
			
		||||
### 图片
 | 
			
		||||
<!--rehype:data-wrap-style=grid-column: span 2/span 2;-->
 | 
			
		||||
<!--rehype:wrap-style=grid-column: span 2/span 2;-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```markdown
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,6 @@ package.json 备忘清单
 | 
			
		||||
### 安装 `name` 包
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```sh
 | 
			
		||||
yarn add [包名]
 | 
			
		||||
# or
 | 
			
		||||
@@ -89,7 +88,6 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
 | 
			
		||||
### `license`
 | 
			
		||||
<!--rehype:wrap-class=col-span-2 row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
所有包都应该指定许可证,以便让用户了解他们是在什么授权下使用此包,以及此包还有哪些附加限制。
 | 
			
		||||
 | 
			
		||||
```json
 | 
			
		||||
@@ -140,7 +138,6 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
 | 
			
		||||
### `repository`
 | 
			
		||||
<!--rehype:wrap-class=col-span-2 row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
  "repository": {
 | 
			
		||||
@@ -188,7 +185,6 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
 | 
			
		||||
### `contributors`
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
  "contributors": [
 | 
			
		||||
@@ -290,7 +286,6 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
 | 
			
		||||
### `esnext`
 | 
			
		||||
<!--rehype:wrap-class=col-span-2 row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
完整的[提案在这里](http://2ality.com/2017/04/transpiling-dependencies-babel.html)。 简短说明:
 | 
			
		||||
 | 
			
		||||
- `esnext`:ES模块中使用阶段4功能(或更旧版本)的源代码,未编译。
 | 
			
		||||
@@ -358,7 +353,6 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
 | 
			
		||||
### 特定的 `scripts`
 | 
			
		||||
<!--rehype:wrap-class=col-span-2 row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
对于以下脚本,`npm` 支持 `package.json` 文件的 `scripts` 默认命令字段:
 | 
			
		||||
 | 
			
		||||
- `prepublish`: 在打包并发布包之前运行,以及在没有任何参数的本地 `npm` 安装之前运行。 (见下文)
 | 
			
		||||
@@ -411,7 +405,6 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
 | 
			
		||||
### `dependencies`
 | 
			
		||||
<!--rehype:wrap-class=col-span-2 row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
这些是你的包的开发版和发布版都需要的依赖。
 | 
			
		||||
 | 
			
		||||
```json
 | 
			
		||||
@@ -442,7 +435,6 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
 | 
			
		||||
### workspaces
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
  "name": "my-workspaces-powered-project",
 | 
			
		||||
@@ -486,7 +478,6 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
 | 
			
		||||
### `peerDependencies`
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
  "peerDependencies": {
 | 
			
		||||
@@ -547,7 +538,6 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
 | 
			
		||||
### `engines`
 | 
			
		||||
<!--rehype:wrap-class=col-span-2 row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
指定使用你的包客户必须使用的版本,这将检查 `process.versions` 以及当前 `yarn` 版本。
 | 
			
		||||
 | 
			
		||||
```json
 | 
			
		||||
@@ -602,7 +592,6 @@ https://registry.npmjs.org/[包名]/-/[包名]-[version].tgz
 | 
			
		||||
### `publishConfig`
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
这些配置值将在你的包发布时使用。比如,你可以给包打标签。
 | 
			
		||||
 | 
			
		||||
```json
 | 
			
		||||
@@ -635,7 +624,6 @@ Yarn
 | 
			
		||||
### `resolutions`
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
  "resolutions": {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										409
									
								
								docs/quickreference.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										409
									
								
								docs/quickreference.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,409 @@
 | 
			
		||||
Quick Reference 备忘清单
 | 
			
		||||
===
 | 
			
		||||
 | 
			
		||||
这是您可以在 Quick Reference 备忘单上使用的样式参考,快速参与贡献!
 | 
			
		||||
 | 
			
		||||
入门
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
### 本地编译预览
 | 
			
		||||
 | 
			
		||||
简单的将仓库克隆下来本地调试页面展示。
 | 
			
		||||
 | 
			
		||||
#### 克隆仓库
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
git clone git@github.com:jaywcjlove/reference.git
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### 安装依赖编译生成 HTML 页面
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
npm i         # 安装依赖
 | 
			
		||||
npm run build # 编译输出 HTML
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
HTML 存放在仓库根目录下的 `dist` 目录中,将 `dist/index.html` 静态页面在浏览器中打开预览。
 | 
			
		||||
 | 
			
		||||
### 介绍
 | 
			
		||||
 | 
			
		||||
在备忘清单采用 `HTML 注释语法`,标识网站布局和一些样式,目的是为了在 `GitHub` 中也是正常毫无瑕疵的预览 `Markdown`。
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
### 卡片标题
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
卡片 Markdown 内容展示,下面注释语法为文字内容改变样式
 | 
			
		||||
<!--rehype:style=color: red;-->
 | 
			
		||||
```
 | 
			
		||||
<!--rehype:className=wrap-text -->
 | 
			
		||||
 | 
			
		||||
使用 `col-span-2` 类标识,卡片占 `2` 列位置
 | 
			
		||||
 | 
			
		||||
### 注释语法介绍
 | 
			
		||||
<!--rehype:wrap-class=row-span-3&style=color:black;background-color: #d7a100;-->
 | 
			
		||||
 | 
			
		||||
- 在某个 Markdown 语法下方或者后面,添加 HTML注释
 | 
			
		||||
- 以 `<!--rehype:` 开始,`-->` 结束,包裹参数内容
 | 
			
		||||
- 内容采用 URL 参数的字符拼接方式
 | 
			
		||||
 | 
			
		||||
#### 语法
 | 
			
		||||
 | 
			
		||||
`<!--rehype:` + `key=value` + `&` + `key=value` + `-->`  
 | 
			
		||||
`标识开始`     + `参数`     + `分隔符` + `参数`  + `标识结束`
 | 
			
		||||
 | 
			
		||||
#### 示例
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
### H2 部分
 | 
			
		||||
<!--rehype:body-class=cols-2-->
 | 
			
		||||
 | 
			
		||||
### H3 部分
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### 示例,三行占位,标题红色
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
### 标题
 | 
			
		||||
<!--rehype:wrap-class=row-span-3&style=color:red;-->
 | 
			
		||||
```
 | 
			
		||||
<!--rehype:className=wrap-text -->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### 参数说明
 | 
			
		||||
 | 
			
		||||
类 | 说明
 | 
			
		||||
---- | ----
 | 
			
		||||
`body-style` | 包裹所有卡片`外壳`的样式
 | 
			
		||||
`body-class` | 用于卡片栏布局,添加`类`名
 | 
			
		||||
`wrap-style` | 卡片栏添加 CSS 样式
 | 
			
		||||
`wrap-class` | 用于卡片占位,添加`类`名
 | 
			
		||||
 | 
			
		||||
### 文字颜色
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
_我是红色_<!--rehype:style=color: red;-->
 | 
			
		||||
**加粗红色**<!--rehype:style=color: red;-->
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
上面添加注释样式,文字 _我是红色_<!--rehype:style=color: red;--> 文字变`红`了
 | 
			
		||||
 | 
			
		||||
### 文字大小
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
**加粗变大红色**
 | 
			
		||||
<!--rehype:style=color: red;font-size: 18px-->
 | 
			
		||||
```
 | 
			
		||||
<!--rehype:className=wrap-text -->
 | 
			
		||||
 | 
			
		||||
上面添加注释样式,文字 _加粗变大红色_<!--rehype:style=color: red;font-size: 18px--> 变`红`并且`大`了
 | 
			
		||||
 | 
			
		||||
### 强制换行
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
\```js
 | 
			
		||||
function () {}
 | 
			
		||||
\```
 | 
			
		||||
<!--rehype:className=wrap-text -->
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
如果代码块内容太长,使用强制换行类解决
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 展示表格表头
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
| Key | value | 
 | 
			
		||||
| ---- | ---- |
 | 
			
		||||
| `键` | 值    |
 | 
			
		||||
<!--rehype:className=show-header-->
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
注释配置添加 `show-header` 类,放置在表格下面,表头将被展示出来。
 | 
			
		||||
 | 
			
		||||
布局
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
### H2 部分
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
H2 部分
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
### 卡片 1 (H3 部分)
 | 
			
		||||
### 卡片 2 (H3 部分)
 | 
			
		||||
### 卡片 3 (H3 部分)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
上面实例 `H2 部分` 标题下面有三个`卡片`,默认 `3` 栏布局。
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
H2 部分
 | 
			
		||||
---
 | 
			
		||||
<!--rehype:body-class=cols-2-->
 | 
			
		||||
### 卡片 1 (H3 部分)
 | 
			
		||||
### 卡片 2 (H3 部分)
 | 
			
		||||
### 卡片 3 (H3 部分)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
使用注释配置为 H2 部分 添加 `col-span-2` 类,将 ~~`3`~~ 栏布局变成 `2` 栏布局。
 | 
			
		||||
 | 
			
		||||
类 | 说明
 | 
			
		||||
---- | ----
 | 
			
		||||
`cols-1` | `1` 栏卡片布局
 | 
			
		||||
`cols-2` | `2` 栏卡片布局
 | 
			
		||||
`cols-3` | `3` 栏卡片布局
 | 
			
		||||
`cols-4` | `4` 栏卡片布局
 | 
			
		||||
`cols-5` | `5` 栏卡片布局
 | 
			
		||||
<!--rehype:className=show-header -->
 | 
			
		||||
 | 
			
		||||
### 占位布局 style 写法
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
### H3 部分
 | 
			
		||||
<!--rehype:wrap-style=grid-row: span 2/span 2;-->
 | 
			
		||||
```
 | 
			
		||||
<!--rehype:className=wrap-text -->
 | 
			
		||||
 | 
			
		||||
放在 `### H3 部分` 下面的注释配置,与 `<!--rehype:wrap-class=row-span-2-->` 相同,设置 2 行占位布局。
 | 
			
		||||
 | 
			
		||||
### 卡片栏布局 style 写法
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
## H2 部分
 | 
			
		||||
<!--rehype:body-style=grid-template-columns: repeat(2,minmax(0,1fr));-->
 | 
			
		||||
```
 | 
			
		||||
<!--rehype:className=wrap-text -->
 | 
			
		||||
 | 
			
		||||
放在 `## H2 部分` 下面的注释配置,与 `<!--rehype:body-class=cols-2-->` 相同,设置 2 栏布局。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### H3 部分
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
### 卡片 1 (H3 部分)
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
### 卡片 2 (H3 部分)
 | 
			
		||||
<!--rehype:wrap-class=col-span-3-->
 | 
			
		||||
### 卡片 3 (H3 部分)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
类 | 说明
 | 
			
		||||
---- | ----
 | 
			
		||||
`col-span-2` | `2` 列占位
 | 
			
		||||
`col-span-3` | `3` 列占位
 | 
			
		||||
`col-span-4` | `4` 列占位
 | 
			
		||||
`row-span-2` | `2` 行占位
 | 
			
		||||
`row-span-3` | `3` 行占位
 | 
			
		||||
`row-span-4` | `4` 行占位
 | 
			
		||||
<!--rehype:className=show-header -->
 | 
			
		||||
 | 
			
		||||
### 卡片 1 列布局
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
 | 
			
		||||
┆   H3 Title 1  ┆
 | 
			
		||||
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
 | 
			
		||||
╭┈┈┈╮ ╭┈┈┈╮ ╭┈┈┈╮
 | 
			
		||||
┆ 2 ┆ ┆ 3 ┆ ┆ 4 ┆
 | 
			
		||||
╰┈┈┈╯ ╰┈┈┈╯ ╰┈┈┈╯
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Markdown 源码
 | 
			
		||||
 | 
			
		||||
```markdown
 | 
			
		||||
### H3 Title 1
 | 
			
		||||
<!--rehype:wrap-class=col-span-3-->
 | 
			
		||||
### Title 2
 | 
			
		||||
 | 
			
		||||
### Title 3
 | 
			
		||||
 | 
			
		||||
### Title 4
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
默认 3 列布局,第一标题添加 `col-span-3` 占位类
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
表格
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
### 基本表格
 | 
			
		||||
 | 
			
		||||
#### Date
 | 
			
		||||
 | 
			
		||||
|      |      |
 | 
			
		||||
| ---- | ---- |
 | 
			
		||||
`%m/%d/%Y` | 06/05/2013
 | 
			
		||||
`%A, %B %e, %Y` | Sunday, June 5, 2013
 | 
			
		||||
`%b %e %a` | Jun 5 Sun
 | 
			
		||||
 | 
			
		||||
#### Time
 | 
			
		||||
 | 
			
		||||
|      |      |
 | 
			
		||||
| ---- | ---- |
 | 
			
		||||
`%H:%M` | 23:05
 | 
			
		||||
`%I:%M %p` | 11:05 PM
 | 
			
		||||
 | 
			
		||||
标题为 `H4` 的基本表格。
 | 
			
		||||
 | 
			
		||||
### 快捷键
 | 
			
		||||
 | 
			
		||||
|      |      |
 | 
			
		||||
| ---- | ---- |
 | 
			
		||||
`V` | Vector
 | 
			
		||||
`P` | Pencil
 | 
			
		||||
`T` | Text
 | 
			
		||||
`L` | Line
 | 
			
		||||
`R` | Rectangle
 | 
			
		||||
`O` | Oval
 | 
			
		||||
`U` | Rounded
 | 
			
		||||
 | 
			
		||||
### 展示标题
 | 
			
		||||
 | 
			
		||||
| Prefix | Example | What |
 | 
			
		||||
| ---- | ---- | ---- |
 | 
			
		||||
`//` | `//hr[@class='edge']` | Anywhere
 | 
			
		||||
`./` | `./a` | Relative
 | 
			
		||||
`/` | `/html/body/div` | Root
 | 
			
		||||
<!--rehype:className=show-header-->
 | 
			
		||||
 | 
			
		||||
`<!--rehype:className=show-header-->`
 | 
			
		||||
 | 
			
		||||
列表
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
### 一栏(默认)
 | 
			
		||||
 | 
			
		||||
- Item 1
 | 
			
		||||
- Item 2
 | 
			
		||||
- Item 3
 | 
			
		||||
 | 
			
		||||
### 四列
 | 
			
		||||
 | 
			
		||||
- Item 1
 | 
			
		||||
- Item 2
 | 
			
		||||
- Item 3
 | 
			
		||||
- Item 4
 | 
			
		||||
- Item 5
 | 
			
		||||
- Item 6
 | 
			
		||||
- Item 7
 | 
			
		||||
- Item 8
 | 
			
		||||
<!--rehype:className=cols-4-->
 | 
			
		||||
 | 
			
		||||
`<!--rehype:className=cols-4-->`
 | 
			
		||||
 | 
			
		||||
### 没有标记
 | 
			
		||||
 | 
			
		||||
- Item 1
 | 
			
		||||
- Item 2
 | 
			
		||||
- Item 3
 | 
			
		||||
- Item 4
 | 
			
		||||
- Item 5
 | 
			
		||||
- Item 6
 | 
			
		||||
<!--rehype:className=cols-3 style-none-->
 | 
			
		||||
 | 
			
		||||
`<!--rehype:className=cols-3 style-none-->`
 | 
			
		||||
 | 
			
		||||
H2 部分 - 5列效果展示
 | 
			
		||||
---
 | 
			
		||||
<!--rehype:body-class=cols-5-->
 | 
			
		||||
 | 
			
		||||
### One
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Two
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Three
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Four
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Five
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
H3 部分 - 占位效果展示
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
### row-span-2
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
`<!--rehype:wrap-class=row-span-2-->`
 | 
			
		||||
 | 
			
		||||
### col-span-2
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
`<!--rehype:wrap-class=col-span-2-->`
 | 
			
		||||
 | 
			
		||||
### 红色标题
 | 
			
		||||
<!--rehype:style=background:#e91e63;-->
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
`<!--rehype:style=background:#e91e63;-->`
 | 
			
		||||
 | 
			
		||||
### 黄色标题
 | 
			
		||||
<!--rehype:style=background:#d7a100;-->
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
`<!--rehype:style=background:#d7a100;-->`
 | 
			
		||||
 | 
			
		||||
### col-span-3
 | 
			
		||||
<!--rehype:wrap-class=col-span-3-->
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### 卡片子项
 | 
			
		||||
 | 
			
		||||
每个部分可以有以下子项:
 | 
			
		||||
 | 
			
		||||
#### H4 子标题
 | 
			
		||||
 | 
			
		||||
- pre
 | 
			
		||||
- table
 | 
			
		||||
- ul
 | 
			
		||||
 | 
			
		||||
#### H4 子标题
 | 
			
		||||
 | 
			
		||||
- pre
 | 
			
		||||
- table
 | 
			
		||||
- ul
 | 
			
		||||
 | 
			
		||||
### H3 部分
 | 
			
		||||
 | 
			
		||||
每个盒子(卡片)都是一个 `H3` 部分。 盒子将包含 `H3` 自身内的所有东西。
 | 
			
		||||
 | 
			
		||||
这是一个包含段落的基本部分。
 | 
			
		||||
@@ -21,7 +21,6 @@ Semver 备忘清单
 | 
			
		||||
| `主版本号(MAJOR)` | 当你做了不兼容的 API 修改 |
 | 
			
		||||
| `次版本号(MINOR)` | 当你做了向下兼容的功能性新增 |
 | 
			
		||||
| `修订号(PATCH)` | 当你做了向下兼容的问题修正 |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 简单范围
 | 
			
		||||
 | 
			
		||||
@@ -38,7 +37,6 @@ Semver 备忘清单
 | 
			
		||||
### 范围
 | 
			
		||||
<!--rehype:wrap-class=row-span-3-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
| 范围    | 描述         | Notes             |
 | 
			
		||||
| ---      | ---                 | ---               |
 | 
			
		||||
| `~1.2.3` | 是 `>=1.2.3 <1.3.0` |                    |
 | 
			
		||||
@@ -54,15 +52,14 @@ Semver 备忘清单
 | 
			
		||||
| `1`      | 相同的               |                    |
 | 
			
		||||
| `*`      | 任何版本             |                    |
 | 
			
		||||
| `x`      | 相同的               |                    |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 连字符范围
 | 
			
		||||
<!--rehype:wrap-class=row-span-3-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
| 范围               | 描述           |
 | 
			
		||||
| ---                | ---                   |
 | 
			
		||||
| `1.2.3 - 2.3.4`    | 是 `>=1.2.3 <=2.3.4`  |
 | 
			
		||||
<!--rehype:className=show-header -->
 | 
			
		||||
 | 
			
		||||
#### 部分向右
 | 
			
		||||
 | 
			
		||||
@@ -70,14 +67,12 @@ Semver 备忘清单
 | 
			
		||||
| ---             | ---                   |
 | 
			
		||||
| `1.2.3 - 2.3`   | 是 `>=1.2.3 <2.4.0`   |
 | 
			
		||||
| `1.2.3 - 2`     | 是 `>=1.2.3 <3.0.0`   |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
#### 部分向左
 | 
			
		||||
 | 
			
		||||
| 范围           | 描述           |
 | 
			
		||||
| ---            | ---                   |
 | 
			
		||||
| `1.2 - 2.3.0`  | 是 `1.2.0 - 2.3.0`    |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
当右侧为部分(例如,`2.3`)时,假定缺失的部分为`x`(例如,` 2.3.x`)。
 | 
			
		||||
 | 
			
		||||
@@ -89,6 +84,7 @@ Semver 备忘清单
 | 
			
		||||
| ---                | ---                   |
 | 
			
		||||
| `>=0.14 <16`       | 和 (空格分隔) |
 | 
			
		||||
| `0.14.x \|\| 15.x.x` | 或 (双竖线分隔)   |
 | 
			
		||||
<!--rehype:className=show-header -->
 | 
			
		||||
 | 
			
		||||
### 预发布
 | 
			
		||||
 | 
			
		||||
@@ -104,7 +100,6 @@ Semver 备忘清单
 | 
			
		||||
| `~`     | 意思是“相当接近”     |
 | 
			
		||||
| `0.x.x` | 用于“初始开发”     |
 | 
			
		||||
| `1.x.x` | 表示定义了公共 API     |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
另见
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ Sketch 备忘清单
 | 
			
		||||
 | 
			
		||||
### 插入
 | 
			
		||||
 | 
			
		||||
| 快捷键 | 插入 |
 | 
			
		||||
| 快捷键 | 描述 |
 | 
			
		||||
| ----- | ---- |
 | 
			
		||||
| `a` | (New Artboard) 新画板 |
 | 
			
		||||
| `s` | (Slice) 切片 |
 | 
			
		||||
@@ -20,13 +20,11 @@ Sketch 备忘清单
 | 
			
		||||
| `v` | (Vector Point) 向量点 |
 | 
			
		||||
| `p` | (Pencil) 铅笔 |
 | 
			
		||||
| `t` | (Text) 文本 |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 类型
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
| 快捷键 | 类型 |
 | 
			
		||||
| ----- | ---- |
 | 
			
		||||
| `Cmd + B` | 加粗 |
 | 
			
		||||
@@ -42,13 +40,11 @@ Sketch 备忘清单
 | 
			
		||||
| `Cmd + Shift + \` | 居中对齐 |
 | 
			
		||||
| `Cmd + Shift + }` | 右对齐 |
 | 
			
		||||
| `Control + Cmd + Space`  | 特殊字符 |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 画布视图
 | 
			
		||||
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
| 画布视图 | 快捷键 |
 | 
			
		||||
| ----- | ---- |
 | 
			
		||||
| `Cmd (+) +` | 放大 |
 | 
			
		||||
@@ -66,7 +62,6 @@ Sketch 备忘清单
 | 
			
		||||
| `Control + H` | 切换选择手柄 |
 | 
			
		||||
| `Control + X` | 切换像素网格 |
 | 
			
		||||
| `Space + Drag` | 移动画布 |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 窗口
 | 
			
		||||
 | 
			
		||||
@@ -79,7 +74,6 @@ Sketch 备忘清单
 | 
			
		||||
| `Alt + Cmd + T` | 切换工具栏 |
 | 
			
		||||
| `Cmd + .` | 演示模式 |
 | 
			
		||||
| `Control + Cmd + F` | 进入全屏 |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 编辑形状
 | 
			
		||||
 | 
			
		||||
@@ -94,7 +88,6 @@ Sketch 备忘清单
 | 
			
		||||
| `Cmd + Arrows` | 更改对象大小 |
 | 
			
		||||
| `Shift + Cmd + Arrows` | 将单位更改 10 |
 | 
			
		||||
| `1, 2, 3, 4` | 更改矢量点样式 |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 编辑图层
 | 
			
		||||
 | 
			
		||||
@@ -110,7 +103,6 @@ Sketch 备忘清单
 | 
			
		||||
| `Shift + Cmd + R` | 旋转 |
 | 
			
		||||
| `F` | 切换填充 |
 | 
			
		||||
| `B` | 切换边框 |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 排列图层、组和画板
 | 
			
		||||
 | 
			
		||||
@@ -131,7 +123,6 @@ Sketch 备忘清单
 | 
			
		||||
| `Cmd + F` | 按名称查找图层 |
 | 
			
		||||
| `Fn + ↑` | 选择上方页面 |
 | 
			
		||||
| `Fn + ↓` | 选择下面的页面 |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
另见
 | 
			
		||||
 
 | 
			
		||||
@@ -102,7 +102,6 @@ array3 = [8001, 8001, 8002]
 | 
			
		||||
### 友好数组
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```toml
 | 
			
		||||
array1 = [ "Don't mix", "different", "types" ]
 | 
			
		||||
array2 = [ [ 1.2, 2.4 ], ["all", 'strings', """are the same""", '''type'''] ]
 | 
			
		||||
@@ -173,7 +172,6 @@ bar = 2
 | 
			
		||||
### 类数组
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```toml
 | 
			
		||||
[[comments]]
 | 
			
		||||
author = "Nate"
 | 
			
		||||
@@ -251,7 +249,6 @@ bat = "hi"
 | 
			
		||||
### Inline Table
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```toml 
 | 
			
		||||
name = { first = "Tom", last = "Preston-Werner" }
 | 
			
		||||
point = { x = 1, y = 2 }
 | 
			
		||||
 
 | 
			
		||||
@@ -68,7 +68,6 @@ Object, String, Number, Boolean
 | 
			
		||||
### 通用语法
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```ts
 | 
			
		||||
/** 可选择从现有接口或类型(Response, HTTPAble)中获取属性 */
 | 
			
		||||
interface JSONResponse extends Response, HTTPAble {
 | 
			
		||||
@@ -263,7 +262,6 @@ const data: import("./data").data
 | 
			
		||||
### 对象字面量语法
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```ts
 | 
			
		||||
type JSONResponse = {
 | 
			
		||||
  version: number;                        // 字段
 | 
			
		||||
@@ -302,7 +300,6 @@ type ArtistSub = Subscriber<Artist>
 | 
			
		||||
### 模板联合类型
 | 
			
		||||
<!--rehype:wrap-class=col-span-3-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```ts
 | 
			
		||||
type SupportedLangs =  "en" | "pt" | "zh";
 | 
			
		||||
type FooterLocaleIDs = "header" | "footer";
 | 
			
		||||
@@ -316,7 +313,6 @@ type AllLocaleIDs = `${SupportedLangs}_${FooterLocaleIDs}_id`;
 | 
			
		||||
### 条件类型
 | 
			
		||||
<!--rehype:wrap-class=col-span-3-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```ts
 | 
			
		||||
type HasFourLegs<Animal> = Animal extends { legs: 4 } ? Animal : never
 | 
			
		||||
type Animals = Bird | Dog | Ant | Wolf;
 | 
			
		||||
@@ -379,7 +375,6 @@ if (Array.isArray(input)) {
 | 
			
		||||
### 任务
 | 
			
		||||
<!--rehype:wrap-class=row-span-3-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```ts
 | 
			
		||||
const data1 = {
 | 
			
		||||
  name: "Zagreus"
 | 
			
		||||
@@ -558,7 +553,6 @@ class C implements Bag {}
 | 
			
		||||
### 通用语法
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```ts
 | 
			
		||||
// 确保类符合一组接口或类型  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈▶┈┈╮
 | 
			
		||||
// 子类这个类 ┈┈┈┈┈┈┈┈↘                 ┈┈┈┈┈┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┈
 | 
			
		||||
@@ -645,7 +639,6 @@ class Dog extends Animal { getName(): { ... } }
 | 
			
		||||
### 装饰器和属性
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```ts
 | 
			
		||||
import { Syncable, triggersSync, preferCache, required } from "mylib"
 | 
			
		||||
 | 
			
		||||
@@ -1145,7 +1138,6 @@ declare namespace JSX {
 | 
			
		||||
### 函数组件
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```tsx
 | 
			
		||||
interface FooProp {
 | 
			
		||||
  name: string;
 | 
			
		||||
@@ -1189,7 +1181,6 @@ function Dog(prop:CeProps): JSX.Element {
 | 
			
		||||
### 函数子组件
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```tsx
 | 
			
		||||
interface MenuProps extends React.LiHTMLAttributes<HTMLUListElement> { ... }
 | 
			
		||||
const InternalMenu = (props: MenuProps, ref?: React.ForwardedRef<HTMLUListElement>) => (
 | 
			
		||||
@@ -1213,7 +1204,6 @@ Menu.SubMenu = SubMenu;
 | 
			
		||||
### 有效组件
 | 
			
		||||
<!--rehype:wrap-class=row-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```tsx
 | 
			
		||||
declare namespace JSX {
 | 
			
		||||
  interface ElementClass {
 | 
			
		||||
@@ -1247,7 +1237,6 @@ function NotAValidFactoryFunction() {
 | 
			
		||||
### 类组件
 | 
			
		||||
<!--rehype:wrap-class=col-span-2-->
 | 
			
		||||
 | 
			
		||||
<!--rehype:-->
 | 
			
		||||
```ts
 | 
			
		||||
type Props = {
 | 
			
		||||
  header: React.ReactNode;
 | 
			
		||||
 
 | 
			
		||||
@@ -15,11 +15,9 @@ VSCode 备忘清单
 | 
			
		||||
| `Ctrl` `Shift` `W`          | 关闭窗口                |
 | 
			
		||||
| `Ctrl` `,`                  | 用户设置                |
 | 
			
		||||
| `Ctrl` `K` `Ctrl` `S`       | 键盘快捷键               |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 基本编辑
 | 
			
		||||
<!--rehype:data-wrap-style=grid-row: span 2/span 2;-->
 | 
			
		||||
<!--rehype:wrap-style=grid-row: span 2/span 2;-->
 | 
			
		||||
 | 
			
		||||
| -                         | -                                  |
 | 
			
		||||
|---------------------------|------------------------------------|
 | 
			
		||||
@@ -48,7 +46,6 @@ VSCode 备忘清单
 | 
			
		||||
| `Ctrl` `/`                | 切换行注释                           |
 | 
			
		||||
| `Shift` `Alt` `A`         | 切换块评论                           |
 | 
			
		||||
| `Alt` `Z`                 | 切换自动换行                         |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 导航
 | 
			
		||||
 | 
			
		||||
@@ -64,7 +61,6 @@ VSCode 备忘清单
 | 
			
		||||
| `Ctrl` `Shift` `Tab` | 浏览编辑组历史       |
 | 
			
		||||
| `Alt` ` ←` _/_ `→`   | 后退/前进           |
 | 
			
		||||
| `Ctrl` `M`           | 切换 Tab 移动焦点   |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 搜索和替换
 | 
			
		||||
@@ -78,7 +74,6 @@ VSCode 备忘清单
 | 
			
		||||
| `Ctrl` `D`                | 将选择添加到下一个查找匹配项         |
 | 
			
		||||
| `Ctrl` `K` `Ctrl` `D`     | 将最后一个选择移动到下一个查找匹配项  |
 | 
			
		||||
| `Alt` `C` _/_ `R` _/_ `W` | 切换区分大小写/正则表达式/整个单词   |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 多光标和选择
 | 
			
		||||
 | 
			
		||||
@@ -96,7 +91,6 @@ VSCode 备忘清单
 | 
			
		||||
| `Shift` `Alt` `<Drag>`                 | 列(框)选择                   |
 | 
			
		||||
| `Ctrl` `Shift` `Alt` `<Arrow>`         | 列(框)选择                   |
 | 
			
		||||
| `Ctrl` `Shift` `Alt` `PgUp` _/_ `PgDn` | 列(框)选择页上/下             |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 丰富的语言编辑
 | 
			
		||||
 | 
			
		||||
@@ -114,7 +108,6 @@ VSCode 备忘清单
 | 
			
		||||
| `F2`                        | 重命名符号       |
 | 
			
		||||
| `Ctrl` `K` `Ctrl` `X`       | 修剪尾随空格      |
 | 
			
		||||
| `Ctrl` `K` `M`              | 更改文件语言      |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 编辑管理
 | 
			
		||||
@@ -128,7 +121,6 @@ VSCode 备忘清单
 | 
			
		||||
| `Ctrl` `K` `Ctrl` `←` _/_ `→`    | 专注于上一个/下一个编辑组    |
 | 
			
		||||
| `Ctrl` `Shift` `PgUp` _/_ `PgDn` | 向左/向右移动编辑器         |
 | 
			
		||||
| `Ctrl` `K` `←` _/_ `→`           | 移动活动编辑器组            |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 文件管理
 | 
			
		||||
@@ -149,7 +141,6 @@ VSCode 备忘清单
 | 
			
		||||
| `Ctrl` `K` `P`        | 复制活动文件的路径             |
 | 
			
		||||
| `Ctrl` `K` `R`        | 在资源管理器中显示活动文件      |
 | 
			
		||||
| `Ctrl` `K` `O`        | 在新窗口/实例中显示活动文件     |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
### 展示
 | 
			
		||||
 | 
			
		||||
@@ -170,7 +161,6 @@ VSCode 备忘清单
 | 
			
		||||
| `Ctrl` `Shift` `V` | 打开 Markdown 预览                         |
 | 
			
		||||
| `Ctrl` `K` `V`     | 打开 Markdown 预览到一边                    |
 | 
			
		||||
| `Ctrl` `K` `Z`     | Zen 模式(Esc Esc 退出)                    |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 调试
 | 
			
		||||
@@ -190,4 +180,3 @@ VSCode 备忘清单
 | 
			
		||||
| `Ctrl` `↑` _/_ `↓`             | 向上/向下滚动                   |
 | 
			
		||||
| `Shift` `PgUp` _/_ `PgDn`      | 向上/向下滚动页面               |
 | 
			
		||||
| `Ctrl` `Home` _/_ `End`        | 滚动到顶部/底部                 |
 | 
			
		||||
<!--rehype:class=table-thead-hide-->
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
  },
 | 
			
		||||
  "keywords": [],
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@wcj/markdown-to-html": "^2.0.14",
 | 
			
		||||
    "@wcj/markdown-to-html": "^2.0.15",
 | 
			
		||||
    "fs-extra": "^10.1.0",
 | 
			
		||||
    "recursive-readdir-files": "^2.3.0",
 | 
			
		||||
    "rehype-document": "^6.1.0",
 | 
			
		||||
 
 | 
			
		||||
@@ -62,8 +62,8 @@ export function getTocsTree(arr = [], result = []) {
 | 
			
		||||
      const headerCls = ['wrap-header', `h${level}wrap`];
 | 
			
		||||
 | 
			
		||||
      if (level === 1) wrapCls.push('max-container');
 | 
			
		||||
      const wrapStyle = toc.properties['data-wrap-style'];
 | 
			
		||||
      delete toc.properties['data-wrap-style']
 | 
			
		||||
      const wrapStyle = toc.properties['wrap-style'];
 | 
			
		||||
      delete toc.properties['wrap-style']
 | 
			
		||||
      const wrapClass = toc.properties['wrap-class'];
 | 
			
		||||
      if (wrapClass) wrapCls.push(wrapClass);
 | 
			
		||||
      delete toc.properties['wrap-class'];
 | 
			
		||||
@@ -93,9 +93,8 @@ export function getTocsTree(arr = [], result = []) {
 | 
			
		||||
      const childs = getChilds([...data.slice(n + 1)], level);
 | 
			
		||||
      const resultChilds = getTocsTree(childs);
 | 
			
		||||
      if (resultChilds.length > 0) {
 | 
			
		||||
        const bodyStyle = toc.properties['data-body-style'];
 | 
			
		||||
        delete toc.properties['data-body-style']
 | 
			
		||||
 | 
			
		||||
        const bodyStyle = toc.properties['body-style'];
 | 
			
		||||
        delete toc.properties['body-style']
 | 
			
		||||
        const bodyClass = toc.properties['body-class'];
 | 
			
		||||
        delete toc.properties['body-class']
 | 
			
		||||
        panle.children = panle.children.concat({
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ export async function run() {
 | 
			
		||||
  await fs.copyFile(CSSPATH, CSS_OUTPUT_PATH)
 | 
			
		||||
  const files = await recursiveReaddirFiles(process.cwd(), {
 | 
			
		||||
    ignored: /\/(node_modules|\.git)/,
 | 
			
		||||
    exclude: /(\.json|mjs)$/,
 | 
			
		||||
    exclude: /(\.json|\.mjs|CONTRIBUTING\.md)$/,
 | 
			
		||||
    filter: (item) => item.ext === 'md',
 | 
			
		||||
  });
 | 
			
		||||
  createHTML(files);
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,91 @@ body {
 | 
			
		||||
blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre {
 | 
			
		||||
  margin: 0;
 | 
			
		||||
}
 | 
			
		||||
h1,h2,h3,h4,h5,h6 {
 | 
			
		||||
  font-size: inherit;
 | 
			
		||||
  font-weight: inherit
 | 
			
		||||
}
 | 
			
		||||
ol, ul, menu {
 | 
			
		||||
  list-style: none;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.wrap-body > p > code {
 | 
			
		||||
  --text-opacity: 1;
 | 
			
		||||
  color: rgb(5 150 105/var(--text-opacity));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  text-indent: 0;
 | 
			
		||||
  border-color: inherit;
 | 
			
		||||
  border-collapse: collapse
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table td:not(:last-child)>code, ul li > code, kbd {
 | 
			
		||||
  background-color: rgb(51 65 85/0.5);
 | 
			
		||||
  color: rgb(203 213 225/1);
 | 
			
		||||
  box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000;
 | 
			
		||||
  letter-spacing: 0.075rem;
 | 
			
		||||
  padding: 0.1em 0.54em;
 | 
			
		||||
  border: 1px solid rgb(204,204,204);
 | 
			
		||||
  border-color: rgb(51 65 85/1);
 | 
			
		||||
  line-height: 1.5;
 | 
			
		||||
  font-family: Arial,Helvetica,sans-serif;
 | 
			
		||||
  font-size: 12px;
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  border-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table tr+tr {
 | 
			
		||||
  border-top: solid 1px #ececec94;
 | 
			
		||||
  border-color: rgb(51 65 85/0.5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table td:first-child {
 | 
			
		||||
  white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
table td, table th {
 | 
			
		||||
  padding: 9px 14px;
 | 
			
		||||
  text-align: left;
 | 
			
		||||
}
 | 
			
		||||
table tr th:last-child, table tr td:last-child {
 | 
			
		||||
  text-align: right;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table thead th {
 | 
			
		||||
  white-space: nowrap;
 | 
			
		||||
  font-weight: normal;
 | 
			
		||||
  color: rgb(16 185 129/1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table thead {
 | 
			
		||||
  display: none;
 | 
			
		||||
  border-bottom: solid 1px rgba(85,102,119,0.3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.show-header thead {
 | 
			
		||||
  display: table-header-group;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tt, code {
 | 
			
		||||
  font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;
 | 
			
		||||
  font-size: 1em;
 | 
			
		||||
}
 | 
			
		||||
pre:only-child {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pre {
 | 
			
		||||
  margin-top: 0;
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
  font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;
 | 
			
		||||
  word-wrap: normal;
 | 
			
		||||
  line-height: 1.5;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  padding: 1rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.max-container a {
 | 
			
		||||
  color: rgb(2 132 199/1);
 | 
			
		||||
@@ -241,7 +326,7 @@ body.home .h1wrap p {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.wrap-header.h3wrap > .wrap-body p:last-child {
 | 
			
		||||
.wrap-header.h3wrap > .wrap-body p:not(:first-child):last-child {
 | 
			
		||||
  margin-top: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -267,12 +352,6 @@ body.home .h1wrap p {
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ol, ul, menu {
 | 
			
		||||
  list-style: none;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.h4wrap > .wrap-body ul,
 | 
			
		||||
.h4wrap > .wrap-body ol,
 | 
			
		||||
.h4wrap > .wrap-body dl,
 | 
			
		||||
@@ -346,87 +425,25 @@ ol, ul, menu {
 | 
			
		||||
  box-shadow: 0 0 #0000, 0 0 #0000, 0 6px 8px rgba(102,119,136,0.03),0 1px 2px rgba(102,119,136,0.3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table {
 | 
			
		||||
  text-indent: 0;
 | 
			
		||||
  border-color: inherit;
 | 
			
		||||
  border-collapse: collapse
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
table td:not(:last-child)>code, ul li > code, kbd {
 | 
			
		||||
  background-color: rgb(51 65 85/0.5);
 | 
			
		||||
  color: rgb(203 213 225/1);
 | 
			
		||||
  box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000;
 | 
			
		||||
  letter-spacing: 0.075rem;
 | 
			
		||||
  padding: 0.1em 0.54em;
 | 
			
		||||
  border: 1px solid rgb(204,204,204);
 | 
			
		||||
  border-color: rgb(51 65 85/1);
 | 
			
		||||
  line-height: 1.6;
 | 
			
		||||
  font-family: Arial,Helvetica,sans-serif;
 | 
			
		||||
  font-size: 12px;
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  border-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table tr+tr {
 | 
			
		||||
  border-top: solid 1px #ececec94;
 | 
			
		||||
  border-color: rgb(51 65 85/0.5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table td:first-child {
 | 
			
		||||
  white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
table td, table th {
 | 
			
		||||
  padding: 9px 14px;
 | 
			
		||||
  text-align: left;
 | 
			
		||||
}
 | 
			
		||||
table tr th:last-child, table tr td:last-child {
 | 
			
		||||
  text-align: right;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table thead th {
 | 
			
		||||
  white-space: nowrap;
 | 
			
		||||
  font-weight: normal;
 | 
			
		||||
  color: rgb(16 185 129/1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table thead {
 | 
			
		||||
  display: table-header-group;
 | 
			
		||||
  border-bottom: solid 1px rgba(85,102,119,0.3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.table-thead-hide thead {
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tt, code {
 | 
			
		||||
  font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;
 | 
			
		||||
  font-size: 1em;
 | 
			
		||||
}
 | 
			
		||||
pre:only-child {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pre {
 | 
			
		||||
  margin-top: 0;
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
  font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;
 | 
			
		||||
  word-wrap: normal;
 | 
			
		||||
  line-height: 1.5;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  padding: 1rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.code-highlight {
 | 
			
		||||
  display: block;
 | 
			
		||||
  overflow-x: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.cols-1 {
 | 
			
		||||
  grid-template-columns: repeat(1,minmax(0,1fr));
 | 
			
		||||
  grid-template-columns: repeat(1,minmax(0,1fr)) !important;
 | 
			
		||||
}
 | 
			
		||||
.cols-2 {
 | 
			
		||||
  grid-template-columns: repeat(2,minmax(0,1fr));
 | 
			
		||||
  grid-template-columns: repeat(2,minmax(0,1fr)) !important;
 | 
			
		||||
}
 | 
			
		||||
.cols-3 {
 | 
			
		||||
  grid-template-columns: repeat(3,minmax(0,1fr)) !important;
 | 
			
		||||
}
 | 
			
		||||
.cols-4 {
 | 
			
		||||
  grid-template-columns: repeat(4,minmax(0,1fr)) !important;
 | 
			
		||||
}
 | 
			
		||||
.cols-5 {
 | 
			
		||||
  grid-template-columns: repeat(5,minmax(0,1fr)) !important;
 | 
			
		||||
}
 | 
			
		||||
.col-span-2 {
 | 
			
		||||
  grid-column: span 2/span 2;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user