Skip to content

Commit 6a6e21d

Browse files
committed
Merge branch 'dev'
* dev: fix: unity header anchor safe id fix: #388 修复复制粘贴图片时,图片alt属性丢失的问题 feat: (hooks) 自动超链接-支持展示固定长度字符 (#391) fix: 复制粘贴代码块的时候会丢失\t vscode 插件更新到0.0.7 feat: 增加vscode plugin,可以在vscode扩展中输入cherry-markdown搜索安装该插件 feat: 丰富图标,优化侧边栏切换主题按钮的下拉框定位 #382 feat: 增加上传文件的按钮hook
2 parents 452ae1f + b0dfb53 commit 6a6e21d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+3877
-108
lines changed

.eslintignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ src/sass/**
88
src/libs/*.js
99
example-applications/**
1010
examples/**
11-
client
11+
client
12+
vscodePlugin

README.CN.md

Lines changed: 53 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ Cherry Markdown Editor 是一款 Javascript Markdown 编辑器,具有开箱即
88

99
### **开箱即用**
1010

11-
开发者可以使用非常简单的方式调用并实例化Cherry Markdown编辑器,实例化的编辑器默认支持大部分常用的markdown语法(如标题、目录、流程图、公式等)。
11+
开发者可以使用非常简单的方式调用并实例化 Cherry Markdown 编辑器,实例化的编辑器默认支持大部分常用的 markdown 语法(如标题、目录、流程图、公式等)。
1212

1313
### **易于拓展**
1414

15-
当 Cherry Markdown 编辑器支持的语法不满足开发者需求时,可以快速的进行二次开发或功能扩展。同时,CherryMarkdown编辑器应该由纯JavaScript实现,不应该依赖angular、vue、react等框架技术,框架只提供容器环境即可。
15+
当 Cherry Markdown 编辑器支持的语法不满足开发者需求时,可以快速的进行二次开发或功能扩展。同时,CherryMarkdown 编辑器应该由纯 JavaScript 实现,不应该依赖 angular、vue、react 等框架技术,框架只提供容器环境即可。
1616

1717
## 特性
1818

@@ -34,7 +34,7 @@ Cherry Markdown Editor 是一款 Javascript Markdown 编辑器,具有开箱即
3434

3535
### 功能特性
3636

37-
1. 复制Html粘贴成MD语法
37+
1. 复制 Html 粘贴成 MD 语法
3838
2. 经典换行&常规换行
3939
3. 多光标编辑
4040
4. 图片尺寸
@@ -49,7 +49,7 @@ Cherry Markdown Editor 是一款 Javascript Markdown 编辑器,具有开箱即
4949

5050
### 安全
5151

52-
Cherry Markdown 有内置的安全 Hook,通过过滤白名单以及DomPurify进行扫描过滤.
52+
Cherry Markdown 有内置的安全 Hook,通过过滤白名单以及 DomPurify 进行扫描过滤.
5353

5454
### 样式主题
5555

@@ -72,8 +72,6 @@ Cherry Markdown 有多种样式主题选择
7272
- [表格编辑](https://tencent.github.io/cherry-markdown/examples/table.html)
7373
- [标题自动序号](https://tencent.github.io/cherry-markdown/examples/head_num.html)
7474

75-
76-
7775
## 安装
7876

7977
通过 yarn
@@ -110,10 +108,10 @@ yarn add [email protected]
110108
<div id="markdown-container"></div>
111109
<script src="cherry-editor.min.js"></script>
112110
<script>
113-
new Cherry({
114-
id: 'markdown-container',
115-
value: '# welcome to cherry editor!',
116-
});
111+
new Cherry({
112+
id: 'markdown-container',
113+
value: '# welcome to cherry editor!',
114+
});
117115
</script>
118116
```
119117

@@ -149,14 +147,14 @@ const cherryInstance = new Cherry({
149147
});
150148
```
151149

152-
### 引擎模式 (语法编译)
150+
### 引擎模式 (语法编译)
153151

154152
```javascript
155153
// 引入Cherry引擎核心构建
156154
// 引擎配置项与Cherry通用,以下文档内容仅介绍Cherry核心包
157155
import CherryEngine from 'cherry-markdown/dist/cherry-markdown.engine.core';
158156
const cherryEngineInstance = new CherryEngine();
159-
const htmlContent = cherryEngineInstance.makeHtml('# welcome to cherry editor!')
157+
const htmlContent = cherryEngineInstance.makeHtml('# welcome to cherry editor!');
160158

161159
// --> <h1>welcome to cherry editor!</h1>
162160
```
@@ -215,7 +213,7 @@ registerPlugin().then(() => {
215213

216214
### 默认配置
217215

218-
```javascript
216+
````javascript
219217
{
220218
// 第三方包
221219
externals: {
@@ -254,6 +252,12 @@ registerPlugin().then(() => {
254252
// 'hookName': {
255253
//
256254
// }
255+
autoLink: {
256+
/** 是否开启短链接 */
257+
enableShortLink: true,
258+
/** 短链接长度 */
259+
shortLinkLength: 20,
260+
},
257261
list: {
258262
listNested: false, // 同级列表类型转换后变为子级
259263
indentSpace: 2, // 默认2个空格缩进
@@ -323,7 +327,7 @@ registerPlugin().then(() => {
323327
codemirror: {
324328
// depend on codemirror theme name: https://codemirror.net/demo/theme.html
325329
// 自行导入主题文件: `import 'codemirror/theme/<theme-name>.css';`
326-
theme: 'default',
330+
theme: 'default',
327331
},
328332
// 编辑器的高度,默认100%,如果挂载点存在内联设置的height则以内联样式为主
329333
height: '100%',
@@ -391,13 +395,13 @@ registerPlugin().then(() => {
391395
// 外层容器不存在时,是否强制输出到body上
392396
forceAppend: true,
393397
}
394-
```
398+
````
395399

396400
### 关闭浮动菜单和气泡菜单
397401

398402
```javascript
399403
toolbars: {
400-
... // other config
404+
... // other config
401405
bubble: false, // array or false
402406
float: false, // array or false
403407
},
@@ -413,13 +417,15 @@ registerPlugin().then(() => {
413417
点击查看 [examples](./examples/)
414418

415419
### 客户端
420+
416421
[cherry-markdown 桌面客户端](./docs/cherry_editor_client.CN.md)
417422

418423
## 拓展
419424

420425
### 自定义语法
421426

422427
#### sentence Syntax
428+
423429
如果编译内容没有额外特殊要求,使用普通语法
424430

425431
```javascript
@@ -445,20 +451,21 @@ new Cherry({
445451
customSyntax: {
446452
// 注入编辑器的自定义语法中
447453
BlockSensitiveWordsHook: {
448-
syntaxClass: BlockSensitiveWordsHook,
449-
// 有同名hook则强制覆盖
450-
force: true,
451-
// 在处理图片的hook之前调用
452-
// before: 'image',
454+
syntaxClass: BlockSensitiveWordsHook,
455+
// 有同名hook则强制覆盖
456+
force: true,
457+
// 在处理图片的hook之前调用
458+
// before: 'image',
453459
},
454460
},
455461
},
456462
});
457463
```
458464

459-
460465
#### paragraph Syntax
466+
461467
如果编译内容要求不受外界影响,则使用段落语法
468+
462469
```javascript
463470
/*
464471
* 生成一个屏蔽敏感词汇的hook
@@ -471,11 +478,11 @@ let BlockSensitiveWordsHook = Cherry.createSyntaxHook('blockSensitiveWords', Che
471478
// 预处理文本,避免受影响
472479
beforeMakeHtml(str) {
473480
return str.replace(this.RULE.reg, (match, code) => {
474-
const lineCount = (match.match(/\n/g) || []).length;
475-
const sign = this.$engine.md5(match);
476-
const html = `<div data-sign="${sign}" data-lines="${lineCount + 1}" >***</div>`;
477-
return this.pushCache(html, sign, lineCount);
478-
})
481+
const lineCount = (match.match(/\n/g) || []).length;
482+
const sign = this.$engine.md5(match);
483+
const html = `<div data-sign="${sign}" data-lines="${lineCount + 1}" >***</div>`;
484+
return this.pushCache(html, sign, lineCount);
485+
});
479486
},
480487
makeHtml(str, sentenceMakeFunc) {
481488
return str;
@@ -493,11 +500,11 @@ new Cherry({
493500
customSyntax: {
494501
// 注入编辑器的自定义语法中
495502
BlockSensitiveWordsHook: {
496-
syntaxClass: BlockSensitiveWordsHook,
497-
// 有同名hook则强制覆盖
498-
force: true,
499-
// 在处理图片的hook之前调用
500-
// before: 'image',
503+
syntaxClass: BlockSensitiveWordsHook,
504+
// 有同名hook则强制覆盖
505+
force: true,
506+
// 在处理图片的hook之前调用
507+
// before: 'image',
501508
},
502509
},
503510
},
@@ -508,10 +515,10 @@ new Cherry({
508515

509516
```javascript
510517
/*
511-
* 生成一个添加前缀模板的hook
512-
* 名字叫AddPrefixTemplate
513-
* 图标类名icon-add-prefix
514-
*/
518+
* 生成一个添加前缀模板的hook
519+
* 名字叫AddPrefixTemplate
520+
* 图标类名icon-add-prefix
521+
*/
515522
let AddPrefixTemplate = Cherry.createMenuHook('AddPrefixTemplate', 'icon-add-prefix', {
516523
onClick(selection) {
517524
return 'Prefix-' + selection;
@@ -529,11 +536,15 @@ new Cherry({
529536
'addPrefix', // 在顶部菜单栏的尾部添加自定义菜单项
530537
],
531538
bubble: [
532-
'bold', /** ...其他菜单项 */, 'color',
539+
'bold' /** ...其他菜单项 */,
540+
,
541+
'color',
533542
'addPrefix', // 在气泡菜单(选中文本时出现)的尾部添加自定义菜单项
534543
], // array or false
535544
float: [
536-
'h1', /** ...其他菜单项 */, 'code',
545+
'h1' /** ...其他菜单项 */,
546+
,
547+
'code',
537548
'addPrefix', // 在浮动菜单(在新的空行出现)的尾部添加自定义菜单项
538549
], // array or false
539550
customMenu: {
@@ -547,7 +558,6 @@ new Cherry({
547558

548559
如果你想看更多有关 cherry markdown 的拓展信息,可以看这里 [extensions](./docs/extensions.CN.md).
549560

550-
551561
## 单元测试
552562

553563
选用 Jest 作为单元测试工具,主要看好其断言、支持异步和快照测试等功能。单元测试分为两个部分,CommonMark 用例测试和快照测试。
@@ -557,6 +567,7 @@ new Cherry({
557567
运行 `yarn run test:commonmark` 测试 CommonMark 官方用例,运行速度较快。
558568

559569
用例位于 `test/suites/commonmark.spec.json`, 比如:
570+
560571
```json
561572
{
562573
"markdown": " \tfoo\tbaz\t\tbim\n",
@@ -567,7 +578,8 @@ new Cherry({
567578
"section": "Tabs"
568579
},
569580
```
570-
对于这个测试点,Jest 会比对 `Cherry.makeHtml(" \tfoo\tbaz\t\tbim\n")` 生成的 html 与用例中的预期结果 `"<pre><code>foo\tbaz\t\tbim\n</code></pre>\n"`。Cherry Markdown 的匹配器已忽略 `data-line` 等私有属性。
581+
582+
对于这个测试点,Jest 会比对 `Cherry.makeHtml(" \tfoo\tbaz\t\tbim\n")` 生成的 html 与用例中的预期结果 `"<pre><code>foo\tbaz\t\tbim\n</code></pre>\n"`。Cherry Markdown 的匹配器已忽略 `data-line` 等私有属性。
571583

572584
CommonMark 规范及测试用例可参考:https://spec.commonmark.org/
573585

@@ -577,10 +589,9 @@ CommonMark 规范及测试用例可参考:https://spec.commonmark.org/ 。
577589

578590
快照测试运行速度较慢,仅在易出错且包含 Cherry 特色语法的 Hook 上使用。
579591

580-
581592
## Contributing
582593

583-
欢迎加入我们打造强大的 Markdown 编辑器。当然你也可以给我们提交特性需求的 issue。 在写特性功能之前,你需要了解 [extensions](./docs/extensions.CN.md) 以及 [commit_convention](./docs/commit_convention.CN.md).
594+
欢迎加入我们打造强大的 Markdown 编辑器。当然你也可以给我们提交特性需求的 issue。 在写特性功能之前,你需要了解 [extensions](./docs/extensions.CN.md) 以及 [commit_convention](./docs/commit_convention.CN.md).
584595

585596
## License
586597

0 commit comments

Comments
 (0)