Canapin
(Coin-coin le Canapin)
2022 年5 月 16 日 19:18
2
我可以厚颜无耻地顶一下吗?
我找不到任何主题列出了使用 Discourse 内置编辑器自定义帖子 HTML 内容的所有方法。
如果除了我提到的两种(它们非常相似)之外还有其他方法,也许可以发布一个 howto ?
1 个赞
我也想知道作曲家支持哪些 HTML 标签。我记得以前在哪里看到过,但今天早些时候找不到。
例如,我曾尝试在作曲家添加一个 <button class="success">Click me</button>,它在预览中显示了,但在我发布时失败了。我认为某些 HTML 标签是有效的,只是不确定是哪些。
Canapin
(Coin-coin le Canapin)
2022 年5 月 16 日 20:42
4
我猜这允许的 HTML 标签和属性是默认的:
return this._allowedHrefSchemes;
}
getAllowedIframes() {
return this._allowedIframes;
}
}
// Only add to `default` when you always want your allowlist to occur. In other words,
// don't change this for a plugin or a feature that can be disabled
export const DEFAULT_LIST = [
"a.anchor",
"a.attachment",
"a.hashtag",
"a.mention",
"a.mention-group",
"a.onebox",
`a.inline-onebox`,
`a.inline-onebox-loading`,
"a[data-bbcode]",
"a[data-word]",
我们可以看到 data-* 属性是被允许的。
此文件还包含 [wrap=*] text [/wrap] 的方式来定制元素,它会添加带有 * 值的 data-wrap 属性……
我目前还没有找到更多信息。
1 个赞
SaraDev
(Sara Devlaeminck)
2022 年5 月 17 日 21:15
5
在 Discourse 中可以使用一些 HTML 类,但是,出于安全原因,帖子中的大部分 HTML 都被清理掉了,并且只允许在 markdown 中使用非常严格的白名单 HTML。要将类添加到白名单,必须 使用插件,清理操作在服务器端和客户端都会进行。请查看 HTML 标签/属性白名单 以了解有关添加白名单属性的详细信息,我猜它看起来会像这样:Discourse HTML 白名单 。并且正如 @RGJ 所提到的,请注意 whiteList() 函数已被弃用,现在它被称为 allowList()。
关于您可以自定义内容的其他方法,帖子是 小部件 ,Discourse 主题能够 装饰小部件 ,因此您可以利用这一点。
希望这能帮到您!
7 个赞
Canapin
(Coin-coin le Canapin)
2022 年5 月 17 日 21:46
6
谢谢您的回复!
我今天下午偶然发现了您的第一个链接。
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 个赞
RGJ
(Richard - Communiteq)
2022 年5 月 17 日 22:05
7
该代码不再有效。最好将其从您的帖子中删除。
正如 @canapin 已经发现的那样,答案就在链接的主题中 。
请注意,whiteList() 函数已被弃用,如今它被称为 allowList() 调用 。
3 个赞
system
(system)
关闭
2022 年6 月 16 日 22:27
10
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.