tiddly-gittly / slate-write

A WYSIWYG editor for TiddlyWiki. (WIP)
https://tiddly-gittly.github.io/slate-write/
MIT License
40 stars 4 forks source link

改进:所见即所得插件暂时放弃wikitext语法的编辑 #80

Closed dongrentianyu closed 3 months ago

dongrentianyu commented 3 months ago

因为一直没有很好的支持wikitext语法,一编辑起来就容易报错。

但目前所见即所得又是支持wikitext语法编辑的。

这里面分三种情况。

一种是```类型的,这种三重引号支持的很好,基本上能够编辑。

一种是<<类型的,这种编辑起来虽然不会报错,但基本上不能正常保存。

一种是<$类型的,这种也和上面一样,编辑起来不会报错,但也不能正常保存。

如果原文本已有后面两种类型的内容,则容易在使用插件后丢失文本内容。这个简单测试一下就能发现。

为了提高插件的利用率,我想到用正则表达式排除上面三种情况。表达式如下

!regexp:text[(?i)<<]!regexp:text[(?i)<$]!regexp:text[(?i)```]] 

但同样会有一个问题,就是如果用户在使用插件时,使用了wikitext语法,就不能很好的退出保存。因为按钮理论上就不应该存在了。所以配套的建议是提醒用户在使用插件时不要写上面三种wikitext语法。

暂时只能想到这些。当然从代码层面解决是最好的。

dongrentianyu commented 3 months ago

完整筛选器表达式如下

<$list filter="[<currentTiddler>field:type[text/vnd.tiddlywiki]!prefix[$:/]!wysiwyg-disabled[yes]!regexp:text[(?i)<<]!regexp:text[(?i)<$]!regexp:text[(?i)```]] :or[<currentTiddler>!prefix[$:/]!wysiwyg-disabled[yes]!regexp:text[(?i)<<]!regexp:text[(?i)<$]!regexp:text[(?i)```]field:type[]]"> 
dongrentianyu commented 3 months ago

更简练的表达式如下

regexp:text[(?i)<<|<\$|```]

一般来说排除这几种类型的应该就足够了。

dongrentianyu commented 3 months ago

我觉得这个方案还是可行的。因为以后如果要支持wikitext语法的话,也只是修改一下筛选器就可以了。

dongrentianyu commented 3 months ago

调整了一下,最终的筛选器如下

!regexp:text[(?i)<<|<\$|```|\|!]

目前主要是发现了这些内容。

linonetwo commented 3 months ago

这个可以加在 https://github.com/tiddly-gittly/slate-write/blob/master/src/slate-write/ui/ViewTemplate/edit-slate-write-cascade-filter.tid 和按钮上。不过之后还是得修复真正的问题。

dongrentianyu commented 3 months ago

我测试了一下,大部分tiddlywiki的wikitext语法都没有很好支持。

比如像---,只要反复点击就会不断生成</hr>。类似的还有""",这是硬换行,反复点击后就会不断生成</br>

而像@@来快速构建css样式的写法,也容易出问题。

感觉用正则表达式来调整不是一个好的解决方案了。还是得从真正的代码层面适配。不然这个筛选器得写非常长了。