@@ -5,104 +5,92 @@ template: overrides/main.html
5
5
# Adding a comment system
6
6
7
7
Material for MkDocs allows to easily add the third-party comment system of your
8
- choice to the footer of every page by using [ theme extension] . As an example,
9
- we'll be integrating [ Disqus ] a wildly popular comment provider, but others
10
- can be integrate with the same principles
8
+ choice to the footer of any page by using [ theme extension] . As an example,
9
+ we'll be integrating [ Giscus ] , which is Open Source, free, and uses GitHub
10
+ discussions as a backend.
11
11
12
- [ Disqus ] : https://disqus.com /
12
+ [ Giscus ] : https://giscus.app /
13
13
14
14
## Customization
15
15
16
- ### Disqus integration
16
+ ### Giscus integration
17
17
18
- In order to integrate a third-party comment provider offering a JavaScript-based
19
- solution, follow the guide on [ theme extension] , copy the contents from the
20
- [ ` content.html ` ] [ content partial ] partial and create a file at the same location
21
- in the ` overrides ` folder:
18
+ Before you can use [ Giscus] , you need to complete the following steps:
22
19
23
- === ":octicons-file-code-16: overrides/partials/content.html"
20
+ 1 . __ Install the [ Giscus GitHub App] __ and grant access to the repository
21
+ that should host comments as GitHub discussions. Note that this can be a
22
+ repository different from your documentation.
23
+ 2 . __ Visit [ Giscus] and generate the snippet__ through their configuration tool
24
+ to load the comment system. Copy the snippet for the next step. The
25
+ resulting snippet should look similar to this:
24
26
25
27
``` html
26
- <!-- Add copied contents from original content.html here -->
27
-
28
- <!-- Get setting from mkdocs.yml, but allow page-level overrides -->
29
- {% set disqus = config.extra.disqus %}
30
- {% if page and page.meta and page.meta.disqus is string %}
31
- {% set disqus = page.meta.disqus %}
32
- {% endif %}
33
-
34
- <!-- Inject Disqus into current page -->
35
- {% if not page.is_homepage and disqus %}
36
- <h2 id="__comments">{{ lang.t("meta.comments") }}</h2>
37
- <div id="disqus_thread"></div>
38
- <script>
39
- var disqus_config = function() {
40
- this.page.url = "{{ page.canonical_url }}"
41
- this.page.identifier =
42
- "{{ page.canonical_url | replace(config.site_url, '') }}" // (1)!
43
- }
44
-
45
- /* Set up for the first time */
46
- if (typeof DISQUS === "undefined") {
47
- var script = document.createElement("script")
48
- script.async = true
49
- script.src = "https://{{ disqus }}.disqus.com/embed.js"
50
- script.setAttribute("data-timestamp", Date.now())
51
-
52
- /* Inject script tag */
53
- document.body.appendChild(script)
54
-
55
- /* Set up on navigation (instant loading) */
56
- } else {
57
- DISQUS.reset({
58
- reload: true,
59
- config: disqus_config
60
- })
61
- }
62
- </script>
63
- {% endif %}
28
+ <script
29
+ src =" https://giscus.app/client.js"
30
+ data-repo =" <username>/<repository>"
31
+ data-repo-id =" ..."
32
+ data-category =" ..."
33
+ data-category-id =" ..."
34
+ data-mapping =" pathname"
35
+ data-reactions-enabled =" 1"
36
+ data-emit-metadata =" 1"
37
+ data-theme =" light"
38
+ data-lang =" en"
39
+ crossorigin =" anonymous"
40
+ async
41
+ >
42
+ </script >
64
43
```
65
44
66
- 1. Ensure you've set [`site_url`][site_url] in `mkdocs.yml`.
67
-
68
- === ":octicons-file-code-16: mkdocs.yml"
69
-
70
- ``` yaml
71
- extra:
72
- disqus: <shortname> # (1)!
73
- ```
74
-
75
- 1. Add your Disqus [shortname] here.
76
-
45
+ You can either integrate [Giscus] on every page by overriding the `main.html`
46
+ template, or create a new template (e.g. `blog.html`) to extend from `main.html`
47
+ which includes the comment system, so you can decide for each page whether you
48
+ want to allow comments or not.
49
+
50
+ In order to integrate [Giscus], follow the guide on [theme extension] and
51
+ [override the `content` block][overriding blocks], extending the default by
52
+ calling the `super()` function at the beginning of the block:
53
+
54
+ ``` html hl_lines="6"
55
+ {% block content %}
56
+ {{ super() }}
57
+
58
+ <!-- Giscus -->
59
+ <h2 id =" __comments" >{{ lang.t("meta.comments") }}</h2 >
60
+ <!-- Replace with generated snippet -->
61
+
62
+ <!-- Reload on palette change -->
63
+ <script >
64
+ var palette = __md_get (" __palette" )
65
+ if (palette && typeof palette .color === " object" )
66
+ if (palette .color .scheme === " slate" ) {
67
+ var giscus = document .querySelector (" script[src*=giscus]" )
68
+ giscus .setAttribute (" data-theme" , " dark" ) // (1)!
69
+ }
70
+
71
+ /* Register event handlers after documented loaded */
72
+ document .addEventListener (" DOMContentLoaded" , function () {
73
+ var ref = document .querySelector (" [data-md-component=palette]" )
74
+ component$ .subscribe (function (component ) {
75
+ if (component .ref === ref)
76
+ location .reload ()
77
+ })
78
+ })
79
+ </script >
80
+ {% endblock %}
81
+ ```
82
+
83
+ 1 . This code block ensures that [ Giscus] renders with a dark theme when the
84
+ palette is set to ` slate ` . Note that multiple dark themes are available,
85
+ so you can change it to your liking.
86
+
87
+ Replace the highlighted line with the snippet you generated with the [ Giscus]
88
+ configuration tool in the previous step. If you extended ` main.html ` , you should
89
+ now see the [ Giscus] comment system at the bottom of each page. If you created
90
+ a new, separate template, you can enable Giscus by [ setting the page template]
91
+ via front matter.
92
+
93
+ [ Giscus GitHub App ] : https://github.com/apps/giscus
77
94
[ theme extension ] : ../customization.md#extending-the-theme
78
- [ content partial ] : https://github.com/squidfunk/mkdocs-material/blob/master/src/partials/content.html
79
- [ shortname ] : https://help.disqus.com/en/articles/1717111-what-s-a-shortname
80
-
81
- #### on a single page
82
-
83
- When [ Metadata] is enabled, Disqus can be enabled or disabled for a single page
84
- with custom front matter. Add the following lines at the top of a Markdown file:
85
-
86
- === ":octicons-check-circle-fill-16: Enabled"
87
-
88
- ``` bash
89
- ---
90
- disqus: <shortname>
91
- ---
92
-
93
- # Document title
94
- ...
95
- ```
96
-
97
- === ":octicons-skip-16: Disabled"
98
-
99
- ``` bash
100
- ---
101
- disqus: ""
102
- ---
103
-
104
- # Document title
105
- ...
106
- ```
107
-
108
- [ Metadata ] : extensions/python-markdown.md#metadata
95
+ [ overriding blocks ] : ../customization.md#overriding-blocks
96
+ [ setting the page template ] : ../reference/index.md#setting-the-page-template
0 commit comments