Gem ActionText Lite - 我终于受不了 ActionText,做了一个 Lite 版本

huacnlee · October 10, 2019 · Last by jasl replied at October 12, 2019 · 7384 hits

关于 ActionText 的问题,我已经吐槽不止一两次了...

ActionText 内置的 HTML sanitize 带上了不少严苛的规则,比如不允许 style,就是你换了其他的所见即所得编辑器,编辑好的 HTML 输出还是会少了东西。 还是没有 API,感觉可以自己实现一个 Lite 版本的 ActionText 了,只用 ActionText 存储的部分。 @huacnlee https://twitter.com/huacnlee/status/1177133855288909824

Action Text 的问题

  • Action Text 默认高度集成了 Trix,但实际情况是 Trix 在 90% 的项目情况下都不符合实际的需求,我们的用户、后台编辑人员不喜欢它。😩
  • Active Storage 为默认的附件存储,也是高度集成,难以清理干净,可它往往也不符合我们的需求,我们正文的附件、图片往往是需要公开的 URL 地址(Active Storage 目前不支持)。
  • Action Text 带有默认的 HTML sanitize 规则,但那个规则过于严苛,比如 style 属性不支持,图片宽度不支持等等,然而有些时候我们可能不一定需要 sanitize 因为内容可能是后台编辑自己发布的,而不是用户的(用户发布的我们可以自己做 sanitize) 🥺

我也是坚持用 ActiveText,也尝试在 Trix 和 ActionText 的基础上尝试解决以上问题,但实际情况发现做起来很繁琐,回头来看,当初用 ActionText 不就是为了那个将 RichText 独立存储到单独表的设计么,于是阅读源代码找到实现,单独剥离出来。

于是我把它整理成了 ActionText Lite。

ActionText Lite 干什么事情:

  • 类似 ActiveText 的存储 API,兼容 ActionText 的 Model API,你可以保持那个好的东西;
  • 数据存储依然保持在 ActionText 那个 action_text_rich_texts 表里面,所以引入它,只是会让 ActionText 没了 Trix 和 ActiveStorage 的集成;
  • 你存什么进去,就拿什么出来,不做任何 sanitize 处理,把规则交给你自己处理。

使用

gem "actiontext-lite"

然后安装 ActionText 的 Migration 命令(如果已经有 ActionText 做过,可以不用执行)

$ rails action_text_lite:install

接下来原来使用 ActiveText (Model 里面哪些功能),你可以继续保持:

class Post < ApplicationRecord
  has_rich_text :body
end

@post = Post.new(body: "Hello world")
@post.body.to_s

然后缺失的其他部分怎么办?

项目地址

https://github.com/huacnlee/actiontext-lite

Action Cable 其实问题也很多,普通开发使用的话很多问题要考虑。

Reply to huacnlee

嗯,还差一个 CDN 支持

Reply to jasl

URL 固定的,CDN 支持很容易啊,已经可以了。

huacnlee in ActionText 读取时会自动加上 布局模板 mention this topic. 28 Jan 08:26
You need to Sign in before reply, if you don't have an account, please Sign up first.