1
0
mirror of https://github.com/squidfunk/mkdocs-material.git synced 2024-12-23 21:04:56 +01:00
mkdocs-material/docs/setup/adding-a-comment-system.md

114 lines
3.7 KiB
Markdown
Raw Normal View History

2020-07-22 11:57:41 +02:00
# Adding a comment system
Material for MkDocs allows to easily add the third-party comment system of your
2022-01-16 12:11:24 +01:00
choice to the footer of any page by using [theme extension]. As an example,
we'll be integrating [Giscus], which is Open Source, free, and uses GitHub
discussions as a backend.
2020-07-22 11:57:41 +02:00
2022-01-16 12:11:24 +01:00
[Giscus]: https://giscus.app/
2020-07-22 11:57:41 +02:00
## Customization
2020-07-22 11:57:41 +02:00
2022-01-16 12:11:24 +01:00
### Giscus integration
2022-01-16 12:11:24 +01:00
Before you can use [Giscus], you need to complete the following steps:
2022-01-16 12:11:24 +01:00
1. __Install the [Giscus GitHub App]__ and grant access to the repository
that should host comments as GitHub discussions. Note that this can be a
repository different from your documentation.
2. __Visit [Giscus] and generate the snippet__ through their configuration tool
to load the comment system. Copy the snippet for the next step. The
resulting snippet should look similar to this:
``` html
2022-01-16 12:11:24 +01:00
<script
src="https://giscus.app/client.js"
data-repo="<username>/<repository>"
data-repo-id="..."
data-category="..."
data-category-id="..."
data-mapping="pathname"
data-reactions-enabled="1"
data-emit-metadata="1"
data-theme="light"
data-lang="en"
crossorigin="anonymous"
async
>
</script>
```
2022-10-02 16:36:47 +02:00
The [`comments.html`][comments] partial (empty by default) is the best place to
add the snippet generated by [Giscus]. Follow the guide on [theme extension]
2022-09-11 19:25:40 +02:00
and [override the `comments.html` partial][overriding partials] with:
2022-01-16 12:11:24 +01:00
2022-09-11 19:25:40 +02:00
``` html hl_lines="3"
{% if page.meta.comments %}
2022-01-16 12:11:24 +01:00
<h2 id="__comments">{{ lang.t("meta.comments") }}</h2>
2022-10-02 16:36:47 +02:00
<!-- Insert generated snippet here -->
2022-01-16 12:11:24 +01:00
2022-06-26 11:19:57 +02:00
<!-- Synchronize Giscus theme with palette -->
2022-01-16 12:11:24 +01:00
<script>
2022-06-26 11:19:57 +02:00
var giscus = document.querySelector("script[src*=giscus]")
2023-09-22 14:35:20 +02:00
// Set palette on initial load
2022-01-16 12:11:24 +01:00
var palette = __md_get("__palette")
if (palette && typeof palette.color === "object") {
2023-09-22 14:35:20 +02:00
var theme = palette.color.scheme === "slate"
? "transparent_dark"
: "light"
// Instruct Giscus to set theme
2022-06-26 11:19:57 +02:00
giscus.setAttribute("data-theme", theme) // (1)!
}
2022-09-11 19:25:40 +02:00
2023-09-22 14:35:20 +02:00
// Register event handlers after documented loaded
2022-01-16 12:11:24 +01:00
document.addEventListener("DOMContentLoaded", function() {
var ref = document.querySelector("[data-md-component=palette]")
ref.addEventListener("change", function() {
var palette = __md_get("__palette")
if (palette && typeof palette.color === "object") {
2023-09-22 14:35:20 +02:00
var theme = palette.color.scheme === "slate"
? "transparent_dark"
: "light"
2023-09-22 14:35:20 +02:00
// Instruct Giscus to change theme
var frame = document.querySelector(".giscus-frame")
frame.contentWindow.postMessage(
{ giscus: { setConfig: { theme } } },
"https://giscus.app"
)
}
2022-01-16 12:11:24 +01:00
})
})
</script>
2022-09-11 19:25:40 +02:00
{% endif %}
2022-01-16 12:11:24 +01:00
```
1. This code block ensures that [Giscus] renders with a dark theme when the
palette is set to `slate`. Note that multiple dark themes are available,
so you can change it to your liking.
Replace the highlighted line with the snippet you generated with the [Giscus]
2022-09-11 19:25:40 +02:00
configuration tool in the previous step. If you copied the snippet from above,
you can enable comments on a page by setting the `comments` front matter
property to `true`:
``` yaml
---
comments: true
---
2023-09-14 19:09:18 +02:00
# Page title
2022-09-11 19:25:40 +02:00
...
```
If you wish to enable comments for an entire folder, you can use the
[built-in meta plugin].
2022-01-16 12:11:24 +01:00
[Giscus GitHub App]: https://github.com/apps/giscus
[theme extension]: ../customization.md#extending-the-theme
2023-09-20 14:03:28 +02:00
[comments]: https://github.com/squidfunk/mkdocs-material/blob/master/src/templates/partials/comments.html
2022-09-11 19:25:40 +02:00
[overriding partials]: ../customization.md#overriding-partials
2023-09-15 09:25:50 +02:00
[built-in meta plugin]: ../plugins/meta.md