laobubu / HyperMD

A WYSIWYG Markdown Editor for browsers. Break the Wall between writing and previewing.
MIT License
1.49k stars 136 forks source link

Add #hashtag syntax & clicking event support, like Bear the app #33

Closed henrylu closed 6 years ago

henrylu commented 6 years ago

像Bear里面这种: image

image

h1标题

与h1标题不同之处是'#'与文字之间没有空格,例如:

#标签

就形成了一个标签,是否可以增加这个插件?fold-tags? 这个标签最好可以扩展事件,例如点击标签后的事件可以自定义。 我对typescript不熟,文档里也没有写应该怎样开发插件。

nasyxx commented 6 years ago

我没用过 bear,不过具有类似这种的,我我理解的话,应该是 org-mode 里面的 tags

https://orgmode.org/manual/Tags.html

:tag-parent:tag-child:tag-grandchild:

的标签结构,在 h1 加上标签后,这个 h1 中的 h2 也自然继承这个标签,这样的吗?

不过如果只是一个需要跳转的 tag 的话,可以通过 <a href="#tag1">#tag1</a> 这样来得到。

henrylu commented 6 years ago

Bear的标签结构是'#'开始,'/'分隔,例如: ``

父标签/子标签/孙标签

``

输入链接没有输入标签那么方便。建议文档中增加开发插件的说明。我的想法是按这种方式输入标签后就生成一个可点击的span来显示。

laobubu commented 6 years ago

这个可以有!

但是这个写法之前没见过,不知道实际中会有多少人使用,以及默认是否应该开启此语法功能

laobubu commented 6 years ago

说个题外话,也许可以考虑在 codemirror 自带的 autocomplete 基础上开发个自动补全的插件?用来补全 emoji 和这个格式的标签(姑且将其称之为 hashtag 吧)。但是 hashtag 自动补全又需要依赖一个文档管理系统,而 HyperMD 只是个编辑器组件 🤷‍♂️

henrylu commented 6 years ago

Twitter是使用#标签 以空格结尾作为分隔,这个已经成为人们的习惯,个人认为比新浪微博的#标签#以#号结尾更方便,因为少输入了。至于'/'也符合层次的习惯,就像是breadcrumb那样: 首页 / 列表 / 详情

HyperMD可以提供接口获取或编辑标签列表数据,并且可扩展标签点击事件,然后文档管理那些就交给外部通过调用HyperMD的接口来完成。

laobubu commented 6 years ago

d9565b9 已添加 hashtag 语法支持、click 事件支持(在线演示页面 点击 hashtag,可看到控制台输出)

获取标签列表、更新标签内容,如果要做成通用的,这个暂时没想法。除了 hashtag,标题好像也需要方法提取。

  1. 编辑器有 getValue() 方法可以获取所有文本内容,然后用正则表达式提取所有可能的 hashtag
  2. 使用 getTokenTypeAt({line: 行号, ch: 字符序号}) 并检查返回值有没有 "hashtag",可检查某个位置的文本是否是真的 hashtag (而不是别的奇怪东西,例如Python代码里的注释)
  3. 还有 replaceRange() 方法,可以替换部分文本内容。如果要插入新的 hashtag,可以用这个插入字符串。

可以参考 https://codemirror.net/doc/manual.html

这是要准备搞个云笔记网站么?

laobubu commented 6 years ago

ad25d2b8 现在 hashtag 语法默认不开启。开启方法可以参考文档: https://laobubu.net/HyperMD/?directOpen#./docs/options-for-mode.md

0.3.7 版本等过段时间完善了再发布到 npm 上

laobubu commented 6 years ago

v0.3.7 is published. Close #33