DiscoTOC - 自动目录

您能发布一个指向您网站的链接吗?我怀疑问题出在您主题的样式上。

2 个赞

这是我的链接:

https://whois.nhachinhchu.org/t/bang-gia-xem-data-nha-chinh-chu/63389

1 个赞

抱歉打断正在进行的讨论。我发现了一些不确定是否已报告的内容。

如果帖子标题中有链接,TOC 条目中也会显示点击次数:

2 个赞

自此次更新以来,我在带有目录的 discourse-docs 页面上看到了一个错误。例如,在 Meta 上的此页面 上,目录未显示,并且我在浏览器开发者工具中看到一个错误:

在我的网站上,我还看到页面顶部有一个横幅,上面写着“帖子可能无法正确显示,因为您网站上的一个帖子内容装饰器引发了错误。请检查浏览器开发者工具以获取更多信息。”

3 个赞

谢谢 @simonk,我刚刚(2分钟前!)合并了一个针对该问题的修复。请更新您网站上的组件,并告知我您自己网站上的横幅是否仍然存在。

3 个赞

感谢您的回复!错误已消失,但在 discourse-docs 版本页面中未显示目录。在昨天更新之前,目录同时显示在 discourse-docs 版本和“普通”版本页面上。

(对我来说这并不紧急——我在暂存网站上部署了更新,而不是生产环境,所以它无法正常工作对我来说无关紧要)

编辑:我正在运行 2.8.0.beta11 (42c71789f9),如果这有什么区别的话。

2 个赞

是的,我明白你的意思了。不幸的是,我对TOC所做的更改使用了一个在文档视图中存在但在主题视图中缺失的插口。我会研究一下。

3 个赞

今天对组件进行了一些更改,应该可以解决 @mentalstring@simonk 提出的问题。Simon,你需要进行一次完全重建,因为你还需要更新文档插件。

@huynhthai824,一旦你更新组件,你遇到的问题很可能就会得到解决。

4 个赞

非常感谢,我很高兴,我的问题解决了。
再次感谢。

1 个赞

经过完全重建后,我可以确认目录在 discourse-docs 页面上显示正确 - 非常感谢 :+1:
我注意到您现在还将目录限制为 2 个级别。考虑到水平空间,我认为这是合理的,但这意味着三级标题在目录中与其父项显示在相同的嵌套级别。
即,目前,此文本:

# First Heading
## First Subheading
### Child of First Subheading
### Child of First Subheading
## Second Subheading
### Child of Second Subheading
### Child of Second Subheading
# Second Heading

会生成此目录:

我想知道是否最好完全从目录中排除三级及以下的标题?
另外,DOM 结构看起来不太对——每个二级项目都是一个 <ul>,里面只有一个 <li>

4 个赞

抓得好。我不确定我们使用3个或更多级别有多频繁,但重新引入它们是可能的,这应该不会太复杂。

又抓对了。这是一个小错误,一旦此PR合并,它应该就会得到修复。

3 个赞

如果你有心情提出功能请求,也许最大深度可以通过设置来控制…… :wink:

5 个赞

根据我的经验,目录(ToC)功能仅在首次发布时有效,在后续发布时无效。 这是正确的吗? 如果是这样,我的评论可以被视为功能请求吗? 顺便说一句,目录(ToC)即使在首次发布时也是一个很棒的补充。 R

大家好,自从上次升级了这个很棒的主题组件后,我遇到了一个问题,但只在手机上出现。当我点击目录按钮时,带有完整目录的滑块没有打开。

如果我在桌面版上使用一个非常小的窗口,这个按钮和滑块就能很好地工作。所以这可能只在 Android 上有问题。

这是我最新的(Discourse 和 TOC)论坛上的日志:

Message

Uncaught TypeError: Cannot read properties of null (reading 'classList')
Url: https://iunctis.fr/theme-javascripts/671f772e071bd55050592ff8541b659afe421259.js?__ws=iunctis.fr
Line: 36
Column: 49
Window Location: https://iunctis.fr/t/le-mensuel-01-decembre-2021/9591

Backtrace

TypeError: Cannot read properties of null (reading 'classList')
    at n.showTOCOverlay (https://iunctis.fr/theme-javascripts/671f772e071bd55050592ff8541b659afe421259.js?__ws=iunctis.fr:36:49)
    at e.n._join (https://iunctis.fr/assets/vendor-96a5eaa8d436066b954c21ae5afb7f504310945c679465a2f1ba46b429a95edf.js:36:412333)
    at e.n.join (https://iunctis.fr/assets/vendor-96a5eaa8d436066b954c21ae5afb7f504310945c679465a2f1ba46b429a95edf.js:36:409358)
    at h (https://iunctis.fr/assets/vendor-96a5eaa8d436066b954c21ae5afb7f504310945c679465a2f1ba46b429a95edf.js:36:273784)
    at https://iunctis.fr/assets/vendor-96a5eaa8d436066b954c21ae5afb7f504310945c679465a2f1ba46b429a95edf.js:36:65110
    at a (https://iunctis.fr/assets/vendor-96a5eaa8d436066b954c21ae5afb7f504310945c679465a2f1ba46b429a95edf.js:36:260923)
    at https://iunctis.fr/assets/vendor-96a5eaa8d436066b954c21ae5afb7f504310945c679465a2f1ba46b429a95edf.js:36:65054
    at n._triggerAction (https://iunctis.fr/assets/application-945e3f0cb654a8c23b30e86f5e955be5599a8330d68ce75e97b8228ad45ff6fd.js:1:1254524)
    at n.click (https://iunctis.fr/assets/application-945e3f0cb654a8c23b30e86f5e955be5599a8330d68ce75e97b8228ad45ff6fd.js:1:1254160)

Env

HTTP HOSTS: iunctis.fr

如果我在 Firefox 桌面版中使用 Android 用户代理,点击此论坛上的按钮时会出现此错误:

Uncaught TypeError: document.querySelector(...) is null
    showTOCOverlay 4916e6ed2a984e00537fe797b799637f1a801ffe.js:374
    _join _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:4033
    join _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:3999
    p _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2870
    An _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:1147
    o _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2785
    An _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:1147
    _triggerAction _application-2646ad3bbed41e42bb77806dc41fbea2.js:489
    click _application-2646ad3bbed41e42bb77806dc41fbea2.js:488
    trigger _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2560
    n _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2422
    _run _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:4034
    _join _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:4033
    join _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:3999
    p _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2870
    handleEvent _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2574
    o _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2785
    handleEvent _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2574
    handleEvent _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2499
    setupHandler _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2524
    dispatch _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:347
    handle _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:342
    add _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:342
    Oe _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:339
    each _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:123
    each _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:116
    Oe _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:339
    on _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:358
    initialize _application-2646ad3bbed41e42bb77806dc41fbea2.js:3354
    initialize _application-2646ad3bbed41e42bb77806dc41fbea2.js:62
    runInstanceInitializers _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2730
    each _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:4074
    walk _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:4064
    each _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:4056
    topsort _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:4056
    _runInitializer _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2733
    runInstanceInitializers _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2730
    _bootSync _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2604
    didBecomeReady _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2623
    invoke _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:3963
    flush _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:3955
    flush _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:3969
    _end _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:4032
    end _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:3988
    _run _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:4034
    _join _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:4033
    join _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:3999
    p _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2870
    bind _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:2873
    u _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:272
    c _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:273
    setTimeout handler*a/\u003c _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:274
    l _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:265
    fireWith _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:266
    fire _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:266
    l _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:265
    fireWith _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:266
    ready _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:283
    z _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:283
    EventListener.handleEvent* _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:283
    \u003canonymous\u003e _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:109
    \u003canonymous\u003e _vendor-64dba8b874ef11bbef3b2bce2fbcf6cc.js:109
4916e6ed2a984e00537fe797b799637f1a801ffe.js:374:18

我的手机是 Chrome 版本 97.0.4692,如果这对你有帮助的话。

有人也遇到过这个问题吗?

2 个赞

这是由于核心代码更改引起的近期回归,我已在 FIX: Restore outlet in mobile views by pmusaraj · Pull Request #15683 · discourse/discourse · GitHub 中准备好修复程序,一旦该程序合并,您就可以重建您的站点,问题应该会得到解决。对此感到抱歉。

上周,我还按照 Simon 在上面的帖子中所述,将组件中的标题第三级缩进添加回来了。

我在这里犹豫是否要添加一个设置,绝大多数用例都不需要它。而且,该组件还为每个级别提供了类,因此如果您想隐藏第 4 级和第 5 级,可以使用此 CSS 来实现:

li.d-toc-h4, li.d-toc-h5 {
  display:none;
}
7 个赞

它已合并并且运行正常,谢谢!

5 个赞

我注意到主题顶部的 <div> 元素 data-theme-toc="true" 引入了额外的边距。例如:

我已经将此添加到我的主题中,似乎可以解决问题:

// 主题顶部的 ToC 元素会引入不必要的
// 空间。Discourse 将帖子的第一个子元素的上边距设置为零,
// 但当 ToC 是第一个子元素时,这不起作用。
// 相反,我们将 ToC 后面的元素的上边距设置为零。
div[data-theme-toc="true"] + * {
    margin-top: 0px;
}

也许需要将类似这样的内容添加到组件中?

7 个赞

好,我已在此 PR 中添加了该 CSS 规则:UX: Keep core's top margin for first item in OP by pmusaraj · Pull Request #30 · discourse/DiscoTOC · GitHub

4 个赞

我过去通过将嵌入代码移到帖子的底部来解决此问题。感觉有点像个临时解决方案,但它确实有效。

1 个赞

我的帖子正文中包含额外的 DIV。例如,On Storytelling - Workbench - Podcaster Community

触发 TOC 生成的 DIV 位于另一个 DIV 中…… TOC 注意到了这一点。但是,其他位于 DIV 中的标题似乎没有被 TOC 注意到。

……截图不是最好的。那是一个 H2,位于一个任意/仅用于样式的 DIV 中,该 DIV 不会出现在 TOC 中。

……未显示的是触发 TOC 的 <div >,它位于具有疯狂属性/值对的 DIV 中……


几小时后更新,添加:也许只需要 :scope h1, 等,而不是要求标题是范围的直接子项?

……另外,这在 21 年 3 月提到过,DiscoTOC - automatic table of contents - #255

3 个赞