帖子内自定义内容的不同方法是什么(自定义属性等)

到目前为止,我知道有两种方法可以做到:

  1. <span>some text</span>

    CSS:

    [data-theme-custom] {
        color: pink;
    }
    
  2. [wrap="indent"]some text[/wrap]
    它将创建一个 div 或 span(如果同一行上有其他内容),其中包含以下属性:class="d-wrap"data-wrap="custom"

    CSS

     [data-wrap="custom"] {
        color: pink;
    }
    

    还有其他方法可以自定义帖子中我不知道的某些选定内容吗?
    另外,有没有办法为元素添加自定义?在搜索中找不到任何内容。我猜这是不可能的?

2 个赞

我可以厚颜无耻地顶一下吗?

我找不到任何主题列出了使用 Discourse 内置编辑器自定义帖子 HTML 内容的所有方法。

如果除了我提到的两种(它们非常相似)之外还有其他方法,也许可以发布一个 howto

1 个赞

我也想知道作曲家支持哪些 HTML 标签。我记得以前在哪里看到过,但今天早些时候找不到。

例如,我曾尝试在作曲家添加一个 <button class="success">Click me</button>,它在预览中显示了,但在我发布时失败了。我认为某些 HTML 标签是有效的,只是不确定是哪些。

我猜这允许的 HTML 标签和属性是默认的:

我们可以看到 data-* 属性是被允许的。


此文件还包含 [wrap=*] text [/wrap] 的方式来定制元素,它会添加带有 * 值的 data-wrap 属性……

我目前还没有找到更多信息。

1 个赞

在 Discourse 中可以使用一些 HTML 类,但是,出于安全原因,帖子中的大部分 HTML 都被清理掉了,并且只允许在 markdown 中使用非常严格的白名单 HTML。要将类添加到白名单,必须使用插件,清理操作在服务器端和客户端都会进行。请查看 HTML 标签/属性白名单 以了解有关添加白名单属性的详细信息,我猜它看起来会像这样:Discourse HTML 白名单。并且正如 @RGJ 所提到的,请注意 whiteList() 函数已被弃用,现在它被称为 allowList()

关于您可以自定义内容的其他方法,帖子是 小部件,Discourse 主题能够 装饰小部件,因此您可以利用这一点。

希望这能帮到您!

7 个赞

谢谢您的回复!

我今天下午偶然发现了您的第一个链接。

GitHub 链接中的文件已有 7 年历史了,所以我猜代码可能已过时?

无论如何,我使用了这个:

export function setup(helper) {
    if (!helper.markdownIt) { return; }
  
    helper.registerOptions((opts, siteSettings) => {
      opts.features.nolinkify = siteSettings.no_linkify_enabled;
    });
  
    helper.allowList(["span.nolinkify"]);
}

这是我从 GitHub - unfoldingWord/discourse-mermaid: Adds the Mermaid JS library to discourse 借用的

我的插件只有几行代码,我不太清楚它在做什么,以及是否所有代码都是必需的,但至少我可以添加带有 nolinkify 类的 span。

在我的例子中,目的是使用 Auto-Linkify Words 轻松地“取消链接”帖子中的单词(它只接受标签和类来防止链接化),尤其是在使用 DiscoTOC - automatic table of contents 时,在标题 HTML 标签中取消链接单词。

我还尝试了一个基于 bbcode 语法的解决方案,如下所示:

    helper.registerPlugin(md => {
      md.inline.bbcode.ruler.push("nolinkify",{
        tag: "nolinkify",
  
        replace: function(state, tagInfo, content) {
          const token = state.push("html_raw", '', 0);
          const escaped = state.md.utils.escapeHtml(content);
          token.content = `<span="nolinkify ">${escaped}</span>`;
          return true;
        }
      });
    });

因此,我尝试了这两种解决方案来解决我的标题标签问题(与目录表相关)。
这不起作用:

## [nolinkify]test[/nolinkify]

但这有效:

## <span class="nolinkify">test</span>

我更喜欢第一种语法,但我想它与目录表不兼容,因为脚本的执行顺序……

3 个赞

该代码不再有效。最好将其从您的帖子中删除。

正如 @canapin 已经发现的那样,答案就在链接的主题中

请注意,whiteList() 函数已被弃用,如今它被称为 allowList() 调用

3 个赞

啊,是的,控制台甚至提到了这一点 :+1:

3 个赞

感谢您的确认,原始帖子已更新以确保准确性。

2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.