跳到主要内容

收藏是运行时能力,不是站点插件

Robert
ARCAFSBlockletWeb DeviceDID Spaces

很多人一想到「在这个站收藏一篇文章」,脑子里出现的是:再做一个账号,再接一个插件,再找一个第三方口袋。站点作者也这么想,所以独立站点要么不做收藏,要么做完变成又一套用户数据。

我的判断更窄:收藏和笔记不该每个站点自己做一遍。 它该是计算环境已经提供的能力。默认开着。没登录就看不见。站点不需要时可以关掉,或者改成页面上自己放的按钮。

这篇写给做站点的人,也写给会在页面上看到 Bookmark 的读者。两边要的不是同一段细节,但判断是同一句。

Arc 是站点跑在上面的那一层。登录之后,你有一份自己的私人存储(我们叫 DID Space),跟这次登录绑在一起。收藏写进那里,不是写进这个站的数据库。

先把对象说清楚

这里说的收藏,是当前这一页。点 Bookmark,记下 URL 和标题。划一段文字,可以附一句 note。My saves 打开这个站上属于你的那一页,书签和笔记列在一起。

它不是评论。评论是公开对话。它也不是写作时留给 agent 的改稿意见。收藏是读者自己的私人记录。

你可能会觉得:这不就是浏览器书签吗?浏览器书签跨站点,跟这个站的身份无关。这里的记录跟登录后的你绑在一起。空间是你的,这个站的「我的」页面只列出这个站写下的那些。换一个毫不相干的站,不会自动出现同一份口袋。这就是它不是 Pocket 的原因。

为什么默认开

能力跟插件的差别,是默认值。插件要每个站点去装。能力是:你不声明,它也在;你明确说不要,它才关掉。

搜索已经是这种形状。每个 Arc 站点都有内置搜索,不用每个站再接一套。收藏走同一条路:默认能记住登录读者看过的页,除非这个站点说自己不需要。

默认开,是因为这件事一旦做成可选项,大多数站点会忘了开。然后读者继续把内容存到别的口袋里,站点又变回只读。

没登录就当它不存在

收藏要写入登录后的你自己的空间。没登录,没有这份空间,写到哪里去?

所以对作者,默认是开的;对还没登录的读者,看起来就是没有。没有侧栏,页面上的收藏按钮也先藏着。登录成功之后,入口才出现。开的是能力,出现的是入口。

不强迫只读访客为了收藏去注册。他们可以继续只读。只是:一旦登录,这个站可以开始记得。

侧栏,或页面自己的按钮

展示也是配置。

默认是页面一侧出现 Bookmark 和 My saves,划词可以存 note。适合文档和内容站,读者在任何一页都能下手。

另一种是不出现侧栏。页面上自己放「收藏」「批注」「我的收藏」这类按钮,运行时去绑。适合已经有工具条、不想再浮一块控件的应用页。

这是产品选择,不是两套实现。

站点怎么声明

如果你只是读者:登录之后,页面一侧会出现 Bookmark。点它就是收藏这一页。My saves 是你在这个站留下的那些。没登录时这些入口不出现,这是故意的。

如果你在做这个站,声明只有一处。省略就是默认开、侧栏。关掉写 save: false。不想要侧栏、想用页面上已有的按钮,写 save: { chrome: buttons },再在按钮上标 data-arc-save="bookmark"。不写这一项就是开。我们自己的内容站也不需要专门打开它。

声明写在整个站点上,不写在某一页上。要么要这个能力,要么不要。

记在谁那里

记录写进你的 DID Space。这个站上的「我的」页面把它列出来。数据是你的,列表是这个站上的。

关掉 save 之后,内置的书签和笔记列表不再出现。这很干净:你说不要这个能力,读者也就看不到入口。

什么时候不该开

站点几乎没有登录读者,只做公开传播:关掉。浮动栏对只读访客没有意义,还会显得像调试控件。

你要的是跨站点口袋,Pocket 那种:这不是它。这里的记录跟着这个站上登录后的你走,不汇成全网阅读列表。

你要的是公开批注或作者改稿:用评论,或页面上的 review 模式。不要把私人 note 当公共讨论。

它把哪一层往下移了

把 Web 当成系统能力 那组文章里有一句:发布之后,站点还应该能回答。评论、反应、订阅,都是回答。收藏是更安静的一种:读者不想说话,只想把这一页留给自己。

过去独立站点要把这件事做成,通常得再接一套账号和存储。于是要么不做,要么把对话和收藏都赶到别的平台。能力下移之后,站点声明自己要不要,身份和写入路径已经在运行时里。

这件事正在进 Arc。站点用 save: 声明要不要。跟踪见 arc#6715。字段表、HTML 属性和 action 错误码见 收藏与笔记(save 能力)。实现细节会变,声明不会。

收藏不该每个站点自己做一遍。默认开着。没登录就当它不存在。需要时再出现。不需要时关掉。这就是能力,不是插件。