From 1cf9d45c28a14548170ce007935b20f41692db61 Mon Sep 17 00:00:00 2001 From: squidfunk Date: Sun, 11 Sep 2022 19:25:40 +0200 Subject: [PATCH] Updated documentation --- docs/blog/.authors.yml | 4 + docs/blog/.meta.yml | 3 + docs/blog/index.md | 146 +- docs/blog/posts/blog-support-just-landed.md | 246 ++++ .../posts/blog-support-just-landed/blog.png | Bin 0 -> 332717 bytes .../{2022 => posts}/chinese-search-support.md | 31 +- .../excluding-content-from-search.md | 43 +- .../search-better-faster-smaller.md | 36 +- .../search-preview-before.png | Bin .../search-preview-now.png | Bin .../search-preview.png | Bin .../the-past-present-and-future.md | 27 +- .../the-past-present-and-future/funding.png | Bin .../mkdocs-material-0.1.0-search.png | Bin .../mkdocs-material-0.1.0.png | Bin docs/browser-support.md | 4 +- docs/creating-your-site.md | 4 +- docs/customization.md | 15 +- docs/getting-started.md | 15 +- docs/insiders/getting-started.md | 11 +- docs/insiders/index.md | 24 +- docs/reference/admonitions.md | 36 +- docs/reference/code-blocks.md | 20 +- docs/reference/content-tabs.md | 16 +- docs/reference/data-tables.md | 4 +- docs/reference/icons-emojis.md | 8 +- docs/reference/images.md | 4 +- docs/reference/index.md | 14 +- docs/reference/mathjax.md | 4 +- docs/reference/tooltips.md | 23 +- docs/schema/extensions/markdown.json | 12 +- docs/schema/extensions/pymdownx.json | 82 +- docs/schema/extra.json | 28 +- docs/schema/plugins.json | 3 + docs/schema/plugins/blog.json | 327 +++++ .../plugins/external/git-committers.json | 4 +- docs/schema/plugins/meta.json | 2 +- docs/schema/plugins/offline.json | 2 +- docs/schema/plugins/privacy.json | 10 +- docs/schema/plugins/search.json | 8 +- docs/schema/plugins/social.json | 10 +- docs/schema/plugins/tags.json | 4 +- docs/setup/adding-a-comment-system.md | 50 +- docs/setup/adding-a-git-repository.md | 59 +- docs/setup/building-for-offline-usage.md | 2 +- docs/setup/changing-the-colors.md | 36 +- docs/setup/changing-the-fonts.md | 14 +- docs/setup/changing-the-language.md | 28 +- docs/setup/changing-the-logo-and-icons.md | 15 +- docs/setup/ensuring-data-privacy.md | 36 +- .../extensions/python-markdown-extensions.md | 38 +- docs/setup/extensions/python-markdown.md | 10 +- docs/setup/setting-up-a-blog.md | 1209 +++++++++++++++++ docs/setup/setting-up-navigation.md | 148 +- docs/setup/setting-up-site-analytics.md | 32 +- docs/setup/setting-up-site-search.md | 64 +- docs/setup/setting-up-social-cards.md | 20 +- docs/setup/setting-up-tags.md | 16 +- docs/setup/setting-up-the-footer.md | 33 +- docs/setup/setting-up-versioning.md | 4 +- docs/upgrade.md | 58 +- material/partials/comments.html | 3 + material/partials/content.html | 1 + mkdocs.yml | 10 +- src/partials/comments.html | 23 + src/partials/content.html | 3 + 66 files changed, 2407 insertions(+), 735 deletions(-) create mode 100644 docs/blog/.authors.yml create mode 100644 docs/blog/.meta.yml create mode 100644 docs/blog/posts/blog-support-just-landed.md create mode 100644 docs/blog/posts/blog-support-just-landed/blog.png rename docs/blog/{2022 => posts}/chinese-search-support.md (86%) rename docs/blog/{2021 => posts}/excluding-content-from-search.md (89%) rename docs/blog/{2021 => posts}/search-better-faster-smaller.md (97%) rename docs/blog/{2021 => posts}/search-better-faster-smaller/search-preview-before.png (100%) rename docs/blog/{2021 => posts}/search-better-faster-smaller/search-preview-now.png (100%) rename docs/blog/{2021 => posts}/search-better-faster-smaller/search-preview.png (100%) rename docs/blog/{2021 => posts}/the-past-present-and-future.md (96%) rename docs/blog/{2021 => posts}/the-past-present-and-future/funding.png (100%) rename docs/blog/{2021 => posts}/the-past-present-and-future/mkdocs-material-0.1.0-search.png (100%) rename docs/blog/{2021 => posts}/the-past-present-and-future/mkdocs-material-0.1.0.png (100%) create mode 100644 docs/schema/plugins/blog.json create mode 100644 docs/setup/setting-up-a-blog.md create mode 100644 material/partials/comments.html create mode 100644 src/partials/comments.html diff --git a/docs/blog/.authors.yml b/docs/blog/.authors.yml new file mode 100644 index 000000000..1e2b34d3b --- /dev/null +++ b/docs/blog/.authors.yml @@ -0,0 +1,4 @@ +squidfunk: + name: Martin Donath + description: Creator + avatar: https://avatars.githubusercontent.com/u/932156 diff --git a/docs/blog/.meta.yml b/docs/blog/.meta.yml new file mode 100644 index 000000000..ea01dc9ab --- /dev/null +++ b/docs/blog/.meta.yml @@ -0,0 +1,3 @@ +comments: true +hide: + - feedback diff --git a/docs/blog/index.md b/docs/blog/index.md index 7330c027f..002f24c31 100644 --- a/docs/blog/index.md +++ b/docs/blog/index.md @@ -1,146 +1,4 @@ ---- -template: overrides/main.html -title: Blog -search: - exclude: true ---- - - - # Blog -## [Chinese search support – 中文搜索​支持] - -__Insiders adds experimental Chinese language support for the [built-in search -plugin] – a feature that has been requested for a long time given the large -number of Chinese users.__ - - - ---- - -After the United States and Germany, the third-largest country of origin of -Material for MkDocs users is China. For a long time, the [built-in search plugin] -didn't allow for proper segmentation of Chinese characters, mainly due to -missing support in [`lunr-languages`][lunr-languages] which is used for search -tokenization and stemming. The latest Insiders release adds long-awaited Chinese -language support for the built-in search plugin, something that has been -requested by many users. - - [:octicons-arrow-right-24: Continue reading][Chinese search support – 中文搜索​支持] - - [built-in search plugin]: ../setup/setting-up-site-search.md#built-in-search-plugin - [@squidfunk avatar]: https://avatars.githubusercontent.com/u/932156 - [insiders-4.14.0]: ../insiders/changelog.md#4.14.0 - [lunr-languages]: https://github.com/MihaiValentin/lunr-languages - [Chinese search support – 中文搜索​支持]: 2022/chinese-search-support.md - -## [The past, present and future] - -__2021 was a fantastic year for this project as we shipped many new awesome -features, saw significant user growth and leveraged GitHub Sponsors to make the -project sustainable.__ - - - ---- - -Today, together, MkDocs and Material for MkDocs are among the most popular -options when it comes to choosing a static site generator and theme for your -technical documentation project. Material for MkDocs ensures that your -content is always perfectly presented to your audience, regardless of screen -resolution or device capabilities. It has evolved to a framework for technical -writing, offering many features, some of which are yet to be found in other -static site generators. However, we're far from the end, as 2022 is going to -bring some interesting new capabilities. - - [:octicons-arrow-right-24: Continue reading][The past, present and future] - - [The past, present and future]: 2021/the-past-present-and-future.md - -## [Excluding content from search] - -__The latest Insiders release brings three new simple ways to exclude dedicated -parts of a document from the search index, allowing for more fine-grained -control.__ - - - ---- - -Two weeks ago, Material for MkDocs Insiders shipped a brand new search plugin, -yielding massive improvements in usability, but also in speed and size of the -search index. Interestingly, as discussed in the previous blog article, we only -scratched the surface of what's now possible. This release brings some useful -features that enhance the writing experience, allowing for more fine-grained -control of what pages, sections and blocks of a Markdown file should be indexed -by the built-in search functionality. - -[:octicons-arrow-right-24: Continue reading][Excluding content from search] - - [Excluding content from search]: 2021/excluding-content-from-search.md - [insiders-3.1.1]: ../insiders/changelog.md#3.1.1 - -## [Search: better, faster, smaller] - -__This is the story of how we managed to completely rebuild client-side search, -delivering a significantly better user experience while making it faster and -smaller at the same time.__ - - - ---- - -The search of Material for MkDocs is by far one of its best and most-loved -assets: multilingual, offline-capable, and most importantly: _all client-side_. -It provides a solution to empower the users of your documentation to find what -they're searching for instantly without the headache of managing additional -servers. However, even though several iterations have been made, there's still -some room for improvement, which is why we rebuilt the search plugin and -integration from the ground up. This article shines some light on the internals -of the new search, why it's much more powerful than the previous version, and -what's about to come. - -[:octicons-arrow-right-24: Continue reading][Search: better, faster, smaller] - - [Search: better, faster, smaller]: 2021/search-better-faster-smaller.md - [insiders-3.0.0]: ../insiders/changelog.md#3.0.0 +This is our blog where we write about new features, performance improvements +and the project in general. diff --git a/docs/blog/posts/blog-support-just-landed.md b/docs/blog/posts/blog-support-just-landed.md new file mode 100644 index 000000000..689a06c33 --- /dev/null +++ b/docs/blog/posts/blog-support-just-landed.md @@ -0,0 +1,246 @@ +--- +date: 2022-09-12 +authors: [squidfunk] +description: > + Our new blog is built with the brand new built-in blog plugin. You can build + a blog alongside your documentation or standalone +categories: + - Blog +links: + - Getting started with Insiders: insiders/getting-started.md#requirements + - setup/setting-up-a-blog.md#built-in-blog-plugin +--- + +# Blog support just landed + +__Hey there! You're looking at our new blog, built with the brand new +[built-in blog plugin]. With this plugin, you can easily build a blog alongside +your documentation or standalone.__ + +Proper support for blogging, as requested by many users over the past few years, +was something that was desperately missing from Material for MkDocs' feature set. +While everybody agreed that blogging support was a blind spot, it was not +obvious whether MkDocs could be extended in a way to allow for blogging as we +know it from [Jekyll] and friends. The [built-in blog plugin] proves that it is, +after all, possible to build a blogging engine on top of MkDocs, in order to +create a technical blog alongside your documentation, or as the main thing. + + + +_This article explains how to build a standalone blog with Material for MkDocs. +If you want to build a blog alongside your documentation, please refer to +[the plugin's documentation][built-in blog plugin]._ + + [built-in blog plugin]: ../../setup/setting-up-a-blog.md#built-in-blog-plugin + [Jekyll]: https://jekyllrb.com/ + +## Quick start + +### Setting up Insiders + +Before we can start bootstrapping a blog and [write our first post], we need to +set up [Insiders], since the [built-in blog plugin] is currently reserved to +sponsors. Without the funds this project receives through sponsorships, this +plugin wouldn't exist. Three steps are necessary: + +1. [Subscribe to a monthly sponsorship] +2. [Create a personal access token] +3. [Install Insiders] + + [write our first post]: #writing-your-first-post + [Insiders]: ../../insiders/index.md + [Subscribe to a monthly sponsorship]: ../../insiders/index.md#how-to-become-a-sponsor + [Create a personal access token]: ../../insiders/getting-started.md#requirements + [Install Insiders]: ../../insiders/getting-started.md#installation + +### Creating a standalone blog + +After Insiders is installed, you can bootstrap a new project using the `mkdocs` +executable: + +``` +mkdocs new . +``` + +This will create the following structure: + +``` +. +├─ docs/ +│ └─ index.md +└─ mkdocs.yml +``` + +#### Configuration + +In this article, we're going to build a standalone blog, which means that the +blog lives at the root of your project. For this reason, open `mkdocs.yml`, +and replace its contents with: + +``` yaml +site_name: My Blog +theme: + name: material + features: + - navigation.sections +plugins: + - blog: + blog_dir: . # (1)! + - search + - tags +nav: + - index.md +``` + +1. This is the important part – we're hosting the blog at the root of the + project, and not in a subdirectory. For more information, see the + [`blog_dir`][blog_dir] configuration option. + + [blog_dir]: ../../setup/setting-up-a-blog.md#+blog.blog_dir + +#### Blog setup + +The blog index page lives in `docs/index.md`. This page was pre-filled by +MkDocs with some content, so we're going to replace it with what we need to +bootstrap the blog: + +``` markdown +# Blog +``` + +That's it. + +### Writing your first post + +Now that we have set up the [built-in blog plugin], we can start writing our +first post. All blog posts are written with the [exact same Markdown flavor] as +already included with Material for MkDocs. First, create a folder called `posts` +with a file called `hello-world.md`: + +``` sh +. +├─ docs/ +│ ├─ posts/ +│ │ └─ hello-world.md # (1)! +│ └─ index.md +└─ mkdocs.yml +``` + +1. If you'd like to arrange posts differently, you're free to do so. The URLs + are built from the format specified in [`post_url_format`][post slugs] and + the titles and dates of posts, no matter how they are organized + inside the `posts` directory. + +Then, open up `hello-world.md`, and add the following lines: + +``` yaml +--- +draft: true # (1)! +date: 2022-01-31 +categories: + - Hello + - World +--- + +# Hello world! + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque nec +maximus ex. Sed consequat, nulla quis malesuada dapibus, elit metus vehicula +erat, ut egestas tellus eros at risus. In hac habitasse platea dictumst. +Phasellus id lacus pulvinar erat consequat pretium. Morbi malesuada arcu mauris +Nam vel justo sem. Nam placerat purus non varius luctus. Integer pretium leo in +sem rhoncus, quis gravida orci mollis. Proin id aliquam est. Vivamus in nunc ac +metus tristique pellentesque. Suspendisse viverra urna in accumsan aliquet. + + + +Donec volutpat, elit ac volutpat laoreet, turpis dolor semper nibh, et dictum +massa ex pulvinar elit. Curabitur commodo sit amet dolor sed mattis. Etiam +tempor odio eu nisi gravida cursus. Maecenas ante enim, fermentum sit amet +molestie nec, mollis ac libero. Vivamus sagittis suscipit eros ut luctus. + +Nunc vehicula sagittis condimentum. Cras facilisis bibendum lorem et feugiat. +In auctor accumsan ligula, at consectetur erat commodo quis. Morbi ac nunc +pharetra, pellentesque risus in, consectetur urna. Nulla id enim facilisis +arcu tincidunt pulvinar. Vestibulum laoreet risus scelerisque porta congue. +In velit purus, dictum quis neque nec, molestie viverra risus. Nam pellentesque +tellus id elit ultricies, vel finibus erat cursus. +``` + +1. If you mark a post as a [draft], a red marker appears next to the post date + on index pages. When the site is built, drafts are not included in the + output. [This behavior can be changed], e.g. for rendering drafts when + building deploy previews. + +When you spin up the [live preview server], you should be greeted by your first +post! You'll also realize, that [archive] and [category] indexes have been +automatically generated for you: + + ![Blog] + +However, this is just the start. The [built-in blog plugin] packs a lot of +functionality needed in day-to-day blogging. Visit the documentation of the +plugin to learn about the following topics: + +
+ +- [Adding an excerpt] +- [Adding authors] +- [Adding categories] +- [Adding tags] +- [Adding related links] +- [Linking from and to posts] +- [Setting the reading time] +- [Setting defaults] + +
+ +Additionally, the [built-in blog plugin] has dozens of [configuration options] +which allow for fine-tuning the output. You can configure post slugs, general +behavior and much more. + + [exact same Markdown flavor]: ../../reference/index.md + [post slugs]: ../../setup/setting-up-a-blog.md#+blog.post_url_format + [draft]: ../../setup/setting-up-a-blog.md#drafts + [This behavior can be changed]: ../../setup/setting-up-a-blog.md#+blog.draft + [live preview server]: ../../creating-your-site.md#previewing-as-you-write + [archive]: ../../setup/setting-up-a-blog.md#archive + [category]: ../../setup/setting-up-a-blog.md#categories + [Blog]: blog-support-just-landed/blog.png + [Blog post]: blog-support-just-landed/blog-post.png + [Adding an excerpt]: ../../setup/setting-up-a-blog.md#adding-an-excerpt + [Adding authors]: ../../setup/setting-up-a-blog.md#adding-authors + [Adding categories]: ../../setup/setting-up-a-blog.md#adding-categories + [Adding tags]: ../../setup/setting-up-a-blog.md#adding-tags + [Adding related links]: ../../setup/setting-up-a-blog.md#adding-related-links + [Linking from and to posts]: ../../setup/setting-up-a-blog.md#linking-from-and-to-posts + [Setting the reading time]: ../../setup/setting-up-a-blog.md#setting-the-reading-time + [Setting defaults]: ../../setup/setting-up-a-blog.md#setting-defaults + [configuration options]: ../../setup/setting-up-a-blog.md#configuration + +## What's next? + +Getting basic blogging support out the door was quite a challenge – the +[built-in blog plugin] is probably the biggest release this year and already +packs a lot of functionality. However, Material for MkDocs is used in many +different contexts, which is why we'd expect to iterate, as always. + +Some ideas already proposed by users: + +- __Blog series__: Authors should be able to create so called blog series and + assign posts to a blog series using simple identifiers. For each post that is + part of a series, a list with links to all other posts should be included in + the post's content. + +- __Author indexes__: Besides [archive] and [category] indexes, authors should + be able to create per-author indexes, which list all posts linked to an + author. Additionally, a profile should be created for each author and linked + from posts. + +- __Social share buttons__: It should be easy to share blog posts via social + media or other ways. For this reason, it should be possible to automatically + include social sharing buttons with each post. + +What's still missing from the brand new [built-in blog plugin]? Feel free to +share your ideas in the comments. Together, we can build one of the best modern +engines for technical blogging! diff --git a/docs/blog/posts/blog-support-just-landed/blog.png b/docs/blog/posts/blog-support-just-landed/blog.png new file mode 100644 index 0000000000000000000000000000000000000000..a1ea1eaa05b8e805f450adc590b635f55bf1c73a GIT binary patch literal 332717 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�)fZT(w<1c@aAMUbeV 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�JmnRY|jl~5v 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 Insiders adds Chinese language support for the built-in search plugin – a feature that has been requested many times -hide: - - feedback +categories: + - Search +links: + - blog/posts/search-better-faster-smaller.md + - setup/setting-up-site-search.md#chinese-language-support + - insiders/index.md#how-to-become-a-sponsor --- # Chinese search support – 中文搜索​支持 @@ -14,23 +19,6 @@ __Insiders adds experimental Chinese language support for the [built-in search plugin] – a feature that has been requested for a long time given the large number of Chinese users.__ -

- - [built-in search plugin]: ../../setup/setting-up-site-search.md#built-in-search-plugin - [@squidfunk avatar]: https://avatars.githubusercontent.com/u/932156 - [insiders-4.14.0]: ../../insiders/changelog.md#4.14.0 - ---- - After the United States and Germany, the third-largest country of origin of Material for MkDocs users is China. For a long time, the [built-in search plugin] didn't allow for proper segmentation of Chinese characters, mainly due to @@ -38,6 +26,8 @@ missing support in [lunr-languages] which is used for search tokenization and stemming. The latest Insiders release adds long-awaited Chinese language support for the built-in search plugin, something that has been requested by many users. + + _Material for MkDocs終於​支持​中文​了!文本​被​正確​分割​並且​更​容易​找到。_ { style="display: inline" } @@ -45,6 +35,7 @@ _This article explains how to set up Chinese language support for the built-in search plugin in a few minutes._ { style="display: inline" } + [built-in search plugin]: ../../setup/setting-up-site-search.md#built-in-search-plugin [lunr-languages]: https://github.com/MihaiValentin/lunr-languages ## Configuration diff --git a/docs/blog/2021/excluding-content-from-search.md b/docs/blog/posts/excluding-content-from-search.md similarity index 89% rename from docs/blog/2021/excluding-content-from-search.md rename to docs/blog/posts/excluding-content-from-search.md index 064aa41ac..6c7b0d7b5 100644 --- a/docs/blog/2021/excluding-content-from-search.md +++ b/docs/blog/posts/excluding-content-from-search.md @@ -1,12 +1,15 @@ --- -template: overrides/blog.html +date: 2021-09-26 +authors: [squidfunk] description: > Three new simple ways to exclude dedicated parts of a document from the search index, allowing for more fine-grained control -search: - exclude: true -hide: - - feedback +categories: + - Search +links: + - blog/posts/search-better-faster-smaller.md + - setup/setting-up-site-search.md#search-exclusion + - insiders/index.md#how-to-become-a-sponsor --- # Excluding content from search @@ -15,22 +18,6 @@ __The latest Insiders release brings three new simple ways to exclude dedicated parts of a document from the search index, allowing for more fine-grained control.__ - - - [@squidfunk avatar]: https://avatars.githubusercontent.com/u/932156 - [insiders-3.1.1]: ../../insiders/changelog.md#3.1.1 - ---- - Two weeks ago, Material for MkDocs Insiders shipped a [brand new search plugin], yielding [massive improvements in usability], but also in [speed and size] of the search index. Interestingly, as discussed in the previous @@ -39,6 +26,8 @@ release brings some useful features that enhance the writing experience, allowing for more fine-grained control of what pages, sections and blocks of a Markdown file should be indexed by the built-in search functionality. + + _The following section discusses existing solutions for excluding pages and sections from the search index. If you immediately want to learn what's new, skip to the [section just after that][what's new]._ @@ -124,7 +113,7 @@ directive to the front matter of the respective Markdown file. The good thing is that the author now only has to check the top of the document to learn whether it is excluded or not: -``` sh +``` yaml --- search: exclude: true @@ -137,11 +126,11 @@ search: ### Excluding sections If a section should be excluded, the author can use the [Attribute Lists] -extension to add a __pragma__ called `{ data-search-exclude }` at the end of a +extension to add a __pragma__ called `data-search-exclude` at the end of a heading. The pragma is not included in the final HTML, as search pragmas are filtered by the search plugin before the page is rendered: -=== ":octicons-file-code-16: docs/page.md" +=== ":octicons-file-code-16: `docs/page.md`" ``` markdown # Document title @@ -155,7 +144,7 @@ filtered by the search plugin before the page is rendered: The content of this section is excluded ``` -=== ":octicons-codescan-16: search_index.json" +=== ":octicons-codescan-16: `search_index.json`" ``` json { @@ -181,7 +170,7 @@ If even more fine-grained control is desired, the __pragma__ can be added to any [block-level element] or [inline-level element] that is officially supported by the [Attribute Lists] extension: -=== ":octicons-file-code-16: docs/page.md" +=== ":octicons-file-code-16: `docs/page.md`" ``` markdown # Document title @@ -192,7 +181,7 @@ supported by the [Attribute Lists] extension: { data-search-exclude } ``` -=== ":octicons-codescan-16: search_index.json" +=== ":octicons-codescan-16: `search_index.json`" ``` json { diff --git a/docs/blog/2021/search-better-faster-smaller.md b/docs/blog/posts/search-better-faster-smaller.md similarity index 97% rename from docs/blog/2021/search-better-faster-smaller.md rename to docs/blog/posts/search-better-faster-smaller.md index be2315e21..a6375d867 100644 --- a/docs/blog/2021/search-better-faster-smaller.md +++ b/docs/blog/posts/search-better-faster-smaller.md @@ -1,12 +1,16 @@ --- -template: overrides/blog.html +date: 2021-09-13 +authors: [squidfunk] +readtime: 15 description: > How we rebuilt client-side search, delivering a better user experience while making it faster and smaller at the same time -search: - exclude: true -hide: - - feedback +categories: + - Search + - Performance +links: + - setup/setting-up-site-search.md#built-in-search-plugin + - insiders/index.md#how-to-become-a-sponsor --- # Search: better, faster, smaller @@ -15,22 +19,6 @@ __This is the story of how we managed to completely rebuild client-side search, delivering a significantly better user experience while making it faster and smaller at the same time.__ - - - [@squidfunk avatar]: https://avatars.githubusercontent.com/u/932156 - [insiders-3.0.0]: ../../insiders/changelog.md#3.0.0 - ---- - The [search] of Material for MkDocs is by far one of its best and most-loved assets: [multilingual], [offline-capable], and most importantly: _all client-side_. It provides a solution to empower the users of your documentation @@ -41,6 +29,8 @@ plugin and integration from the ground up. This article shines some light on the internals of the new search, why it's much more powerful than the previous version, and what's about to come. + + _The next section discusses the architecture and issues of the current search implementation. If you immediately want to learn what's new, skip to the [section just after that][what's new]._ @@ -78,7 +68,7 @@ the original Markdown file: ??? example "Expand to inspect example" - === ":octicons-file-code-16: docs/page.md" + === ":octicons-file-code-16: `docs/page.md`" ```` markdown # Example @@ -108,7 +98,7 @@ the original Markdown file: * Profit! ```` - === ":octicons-codescan-16: search_index.json" + === ":octicons-codescan-16: `search_index.json`" ``` json { diff --git a/docs/blog/2021/search-better-faster-smaller/search-preview-before.png b/docs/blog/posts/search-better-faster-smaller/search-preview-before.png similarity index 100% rename from docs/blog/2021/search-better-faster-smaller/search-preview-before.png rename to docs/blog/posts/search-better-faster-smaller/search-preview-before.png diff --git a/docs/blog/2021/search-better-faster-smaller/search-preview-now.png b/docs/blog/posts/search-better-faster-smaller/search-preview-now.png similarity index 100% rename from docs/blog/2021/search-better-faster-smaller/search-preview-now.png rename to docs/blog/posts/search-better-faster-smaller/search-preview-now.png diff --git a/docs/blog/2021/search-better-faster-smaller/search-preview.png b/docs/blog/posts/search-better-faster-smaller/search-preview.png similarity index 100% rename from docs/blog/2021/search-better-faster-smaller/search-preview.png rename to docs/blog/posts/search-better-faster-smaller/search-preview.png diff --git a/docs/blog/2021/the-past-present-and-future.md b/docs/blog/posts/the-past-present-and-future.md similarity index 96% rename from docs/blog/2021/the-past-present-and-future.md rename to docs/blog/posts/the-past-present-and-future.md index cbe2e3d8b..2cd783f36 100644 --- a/docs/blog/2021/the-past-present-and-future.md +++ b/docs/blog/posts/the-past-present-and-future.md @@ -1,12 +1,11 @@ --- -template: overrides/blog.html +date: 2021-12-27 +authors: [squidfunk] description: > 2021 was a fantastic year for this project as we shipped many new awesome features and made this project sustainable -search: - exclude: true -hide: - - feedback +categories: + - General --- # The past, present and future @@ -15,20 +14,6 @@ __2021 was a fantastic year for this project as we shipped many new awesome features, saw significant user growth and leveraged GitHub Sponsors to make the project sustainable.__ - - - [@squidfunk avatar]: https://avatars.githubusercontent.com/u/932156 - ---- - Today, together, [MkDocs] and Material for MkDocs are among the most popular options when it comes to choosing a static site generator and theme for your technical documentation project. Material for MkDocs ensures that your @@ -38,6 +23,8 @@ writing, offering many features, some of which are yet to be found in other static site generators. However, we're far from the end, as 2022 is going to bring some interesting new capabilities. + + _This article showcases all features that were added in 2021 and gives an outlook on what's going to drop in 2022. Additionally, it provides some context on the history of the project._ @@ -187,7 +174,7 @@ __55__ times, `mkdocs-material-insiders` was shipped __72__ times. [Color palette toggle]: ../../setup/changing-the-colors.md#color-palette-toggle [Content tabs: improved support]: ../../reference/content-tabs.md [Content tabs: auto-linking]: ../../reference/content-tabs.md#linked-content-tabs - [Cookie consent]: ../../setup/ensuring-data-privacy.md#native-cookie-consent + [Cookie consent]: ../../setup/ensuring-data-privacy.md#cookie-consent [Custom admonition icons]: ../../reference/admonitions.md#admonition-icons [Dark mode support for images]: ../../reference/images.md#light-and-dark-mode [Dismissable announcement bar]: ../../setup/setting-up-the-header.md#mark-as-read diff --git a/docs/blog/2021/the-past-present-and-future/funding.png b/docs/blog/posts/the-past-present-and-future/funding.png similarity index 100% rename from docs/blog/2021/the-past-present-and-future/funding.png rename to docs/blog/posts/the-past-present-and-future/funding.png diff --git a/docs/blog/2021/the-past-present-and-future/mkdocs-material-0.1.0-search.png b/docs/blog/posts/the-past-present-and-future/mkdocs-material-0.1.0-search.png similarity index 100% rename from docs/blog/2021/the-past-present-and-future/mkdocs-material-0.1.0-search.png rename to docs/blog/posts/the-past-present-and-future/mkdocs-material-0.1.0-search.png diff --git a/docs/blog/2021/the-past-present-and-future/mkdocs-material-0.1.0.png b/docs/blog/posts/the-past-present-and-future/mkdocs-material-0.1.0.png similarity index 100% rename from docs/blog/2021/the-past-present-and-future/mkdocs-material-0.1.0.png rename to docs/blog/posts/the-past-present-and-future/mkdocs-material-0.1.0.png diff --git a/docs/browser-support.md b/docs/browser-support.md index bc7a8e190..11879b706 100644 --- a/docs/browser-support.md +++ b/docs/browser-support.md @@ -15,8 +15,8 @@ modern CSS features like [custom properties] and [mask images]. The following table lists all browsers for which Material for MkDocs offers full support, so it can be assumed that all features work without degradation. If you -find a feature not to be working in a browser in the supported version range, -please [open an issue]: +find that something doesn't look right in a browser which is in the supported +version range, please [open an issue]:
diff --git a/docs/creating-your-site.md b/docs/creating-your-site.md index 275846d02..f611c597c 100644 --- a/docs/creating-your-site.md +++ b/docs/creating-your-site.md @@ -153,6 +153,7 @@ and much more: - [Setting up site search] - [Setting up site analytics] - [Setting up social cards] +- [Setting up a blog] - [Setting up tags] - [Setting up versioning] - [Setting up the header] @@ -164,7 +165,7 @@ and much more: Furthermore, see the list of supported [Markdown extensions] that are natively -integrated with Material for MkDocs, delivering a low-effort and unprecedented +integrated with Material for MkDocs, delivering an unprecedented low-effort technical writing experience. [Changing the colors]: setup/changing-the-colors.md @@ -176,6 +177,7 @@ technical writing experience. [Setting up site search]: setup/setting-up-site-search.md [Setting up site analytics]: setup/setting-up-site-analytics.md [Setting up social cards]: setup/setting-up-social-cards.md + [Setting up a blog]: setup/setting-up-a-blog.md [Setting up tags]: setup/setting-up-tags.md [Setting up versioning]: setup/setting-up-versioning.md [Setting up the header]: setup/setting-up-the-header.md diff --git a/docs/customization.md b/docs/customization.md index 0a1480d3b..516601c2c 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -103,26 +103,38 @@ assets may also be put in the `overrides` directory: │ │ ├─ analytics/ # Analytics integrations │ │ └─ analytics.html # Analytics setup │ ├─ languages/ # Translation languages +│ ├─ actions.html # Actions +│ ├─ comments.html # Comment system (empty by default) +│ ├─ consent.html # Consent │ ├─ content.html # Page content │ ├─ copyright.html # Copyright and theme information +│ ├─ feedback.html # Was this page helpful? │ ├─ footer.html # Footer bar │ ├─ header.html # Header bar +│ ├─ icons.html # Custom icons │ ├─ language.html # Translation setup │ ├─ logo.html # Logo in header and sidebar │ ├─ nav.html # Main navigation │ ├─ nav-item.html # Main navigation item +│ ├─ pagination.html # Pagination (used for blog) │ ├─ palette.html # Color palette +│ ├─ post.html # Blog post excerpt │ ├─ search.html # Search interface │ ├─ social.html # Social links │ ├─ source.html # Repository information │ ├─ source-file.html # Source file information │ ├─ tabs.html # Tabs navigation │ ├─ tabs-item.html # Tabs navigation item +│ ├─ tags.html # Tags │ ├─ toc.html # Table of contents │ └─ toc-item.html # Table of contents item ├─ 404.html # 404 error page ├─ base.html # Base template -└─ main.html # Default page +├─ blog.html # Blog index +├─ blog-archive.html # Blog archive index +├─ blog-category.html # Blog category index +├─ blog-post.html # Blog post +└─ main.html # Page ``` [custom_dir]: https://www.mkdocs.org/user-guide/configuration/#custom_dir @@ -192,6 +204,7 @@ The following template blocks are provided by the theme: | `analytics` | Wraps the Google Analytics integration | | `announce` | Wraps the announcement bar | | `config` | Wraps the JavaScript application config | +| `container` | Wraps the main content container | | `content` | Wraps the main content | | `extrahead` | Empty block to add custom meta tags | | `fonts` | Wraps the font definitions | diff --git a/docs/getting-started.md b/docs/getting-started.md index bd8e26bd6..a0bb59369 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,6 +1,5 @@ --- template: overrides/main.html -title: Getting started --- # Getting started @@ -19,8 +18,8 @@ If not, we recommend using [`docker`][docker]. ### with pip recommended { #with-pip data-toc-label="with pip" } Material for MkDocs is published as a [Python package] and can be installed with -`pip`, ideally by using a [virtual environment]. If not, scroll down and expand -the help box. Install with: +`pip`, ideally by using a [virtual environment]. Open up a terminal and install +Material for MkDocs with: === "Latest" @@ -38,7 +37,7 @@ the help box. Install with: good idea to limit upgrades to the current major version. This will make sure that you don't accidentally [upgrade to the next - major version], which may include breaking changes that silently break + major version], which may include breaking changes that silently corrupt your site. Additionally, you can use `pip freeze` to create a lockfile, so builds are reproducible at all times: @@ -81,8 +80,8 @@ troubleshoot if you run into errors. ### with docker The official [Docker image] is a great way to get up and running in a few -minutes, as it comes with all dependencies pre-installed. Pull the image for the -`latest` version with: +minutes, as it comes with all dependencies pre-installed. Open up a terminal +and pull the image with: === "Latest" @@ -151,8 +150,8 @@ want to use the very latest version: git clone https://github.com/squidfunk/mkdocs-material.git ``` -The theme will reside in the folder `mkdocs-material/material`. When cloning -from `git`, you must install all required dependencies yourself: +The theme will reside in the folder `mkdocs-material/material`. After cloning +from `git`, you must install all required dependencies with: ``` pip install -e mkdocs-material diff --git a/docs/insiders/getting-started.md b/docs/insiders/getting-started.md index b7cb4468a..916b085e8 100644 --- a/docs/insiders/getting-started.md +++ b/docs/insiders/getting-started.md @@ -97,10 +97,9 @@ docker pull ghcr.io/${GH_USERNAME}/mkdocs-material-insiders dedicated token which you'll only use for publishing the Docker image. [^5]: - The Insiders repository contains three GitHub Actions workflows: + The Insiders repository contains two GitHub Actions workflows: - `build.yml` – Build and lint the project (disabled on forks) - - `documentation.yml` – Build and deploy the documentation (disabled on forks) - `publish.yml` – Build and publish the Docker image ### with git @@ -162,7 +161,7 @@ necessary to split the `mkdocs.yml` configuration into a base configuration, and one with plugin overrides. Note that this is a limitation of MkDocs, which can be mitigated by using [configuration inheritance]: -=== ":octicons-file-code-16: mkdocs.insiders.yml" +=== ":octicons-file-code-16: `mkdocs.insiders.yml`" ``` yaml INHERIT: mkdocs.yml @@ -172,7 +171,7 @@ be mitigated by using [configuration inheritance]: - tags ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml # Configuration with everything except Insiders plugins @@ -192,7 +191,7 @@ mkdocs build --config-file mkdocs.insiders.yml the alternative key-value syntax in both files. The above example would then look like: - === ":octicons-file-code-16: mkdocs.insiders.yml" + === ":octicons-file-code-16: `mkdocs.insiders.yml`" ``` yaml INHERIT: mkdocs.yml @@ -200,7 +199,7 @@ mkdocs build --config-file mkdocs.insiders.yml social: {} ``` - === ":octicons-file-code-16: mkdocs.yml" + === ":octicons-file-code-16 `mkdocs.yml`" ``` yaml # Additional configuration above diff --git a/docs/insiders/index.md b/docs/insiders/index.md index d5efef7f3..3d7146300 100644 --- a/docs/insiders/index.md +++ b/docs/insiders/index.md @@ -82,14 +82,16 @@ a handful of them, [thanks to our awesome sponsors]! ## What's in for me? The moment you [become a sponsor][how to become a sponsor], you'll get __immediate -access to 25 additional features__ that you can start using right away, and +access to 27 additional features__ that you can start using right away, and which are currently exclusively available to sponsors:
+- [x] [Blog plugin] :material-alert-decagram:{ .mdx-pulse title="Added on September 12, 2022" } +- [x] [Blog plugin: related links] :material-alert-decagram:{ .mdx-pulse title="Added on September 12, 2022" } - [x] [Navigation status] :material-alert-decagram:{ .mdx-pulse title="Added on August 21, 2022" } - [x] [Meta plugin] :material-alert-decagram:{ .mdx-pulse title="Added on July 17, 2022" } -- [x] [Additional tags indexes] :material-alert-decagram:{ .mdx-pulse title="Added on July 7, 2022" } +- [x] [Additional tags indexes] - [x] [Document contributors] - [x] [Automatic light / dark mode] - [x] [Content tabs: anchor links] @@ -258,10 +260,10 @@ are released for general availability. - [x] [Excluding content from search] - [x] [Offline plugin] - [Brand new search plugin]: ../blog/2021/search-better-faster-smaller.md - [Rich search previews]: ../blog/2021/search-better-faster-smaller.md#rich-search-previews - [Tokenizer with lookahead]: ../blog/2021/search-better-faster-smaller.md#tokenizer-lookahead - [Advanced search highlighting]: ../blog/2021/search-better-faster-smaller.md#accurate-highlighting + [Brand new search plugin]: ../blog/posts/search-better-faster-smaller.md + [Rich search previews]: ../blog/posts/search-better-faster-smaller.md#rich-search-previews + [Tokenizer with lookahead]: ../blog/posts/search-better-faster-smaller.md#tokenizer-lookahead + [Advanced search highlighting]: ../blog/posts/search-better-faster-smaller.md#accurate-highlighting [Excluding content from search]: ../setup/setting-up-site-search.md#search-exclusion [Offline plugin]: ../setup/building-for-offline-usage.md @@ -272,13 +274,14 @@ are released for general availability. - [x] [Navigation icons] - [x] [Navigation pruning] - [x] [Navigation status] -- [ ] Blog plugin +- [x] [Blog plugin] [Annotations]: ../reference/annotations.md - [Chinese search support]: ../blog/2022/chinese-search-support.md + [Chinese search support]: ../blog/posts/chinese-search-support.md [Navigation icons]: ../reference/index.md#setting-the-page-icon [Navigation pruning]: ../setup/setting-up-navigation.md#navigation-pruning [Navigation status]: ../reference/index.md#setting-the-page-status + [Blog plugin]: ../setup/setting-up-a-blog.md #### $ 14,000 – Goat's Horn @@ -298,14 +301,17 @@ are released for general availability. #### $ 16,000 – Chipotle +- [x] [Blog plugin: related links] - [x] [Meta plugin] - [x] [Additional tags indexes] +- [ ] [Navigation subtitles] - [ ] [Instant previews] - [ ] ... more to be announced [Meta plugin]: ../reference/index.md#built-in-meta-plugin [Additional tags indexes]: ../setup/setting-up-tags.md#tags-extra-files [Instant previews]: https://twitter.com/squidfunk/status/1466794654213492743 + [Blog plugin: related links]: ../setup/setting-up-a-blog.md#adding-related-links ### Goals completed @@ -319,7 +325,7 @@ can be used by all users. - [x] [Was this page helpful?] - [x] [Dismissable announcement bar] - [Cookie consent]: ../setup/ensuring-data-privacy.md#native-cookie-consent + [Cookie consent]: ../setup/ensuring-data-privacy.md#cookie-consent [Was this page helpful?]: ../setup/setting-up-site-analytics.md#was-this-page-helpful [Dismissable announcement bar]: ../setup/setting-up-the-header.md#mark-as-read diff --git a/docs/reference/admonitions.md b/docs/reference/admonitions.md index 8ad307de6..60078a6e1 100644 --- a/docs/reference/admonitions.md +++ b/docs/reference/admonitions.md @@ -35,7 +35,7 @@ See additional configuration options: ### Admonition icons -[:octicons-tag-24: 8.3.0][icon support] · +[:octicons-tag-24: 8.3.0][Admonition icons support] · :octicons-beaker-24: Experimental Each of the supported admonition types has a distinct icon, which can be changed @@ -103,7 +103,7 @@ theme: quote: fontawesome/solid/quote-left ``` - [icon support]: https://github.com/squidfunk/mkdocs-material/releases/tag/8.3.0 + [Admonition icons support]: https://github.com/squidfunk/mkdocs-material/releases/tag/8.3.0 [custom icon]: ../setup/changing-the-logo-and-icons.md#additional-icons [supported types]: #supported-types [icon search]: icons-emojis.md#search @@ -231,7 +231,7 @@ Adding a `+` after the `???` token renders the block expanded: ### Inline blocks -[:octicons-tag-24: 7.0.0][Inline support] · +[:octicons-tag-24: 7.0.0][Inline blocks support] · :octicons-beaker-24: Experimental Admonitions can also be rendered as inline blocks (i.e. for sidebars), placing @@ -283,14 +283,14 @@ prior to the content block you want to place them beside. If there's insufficient space to render the admonition next to the block, the admonition will stretch to the full width of the viewport, e.g. on mobile viewports. - [Inline support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.0.0 + [Inline blocks support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.0.0 ### Supported types Following is a list of type qualifiers provided by Material for MkDocs, whereas the default type, and thus fallback for unknown type qualifiers, is `note`: -`note`{ #type-note } +[`note`](#type:note){ #type:note } : !!! note @@ -298,7 +298,7 @@ the default type, and thus fallback for unknown type qualifiers, is `note`: euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. -`abstract`{ #type-abstract }, `summary`, `tldr` +[`abstract`](#type:abstract){ #type:abstract }, `summary`, `tldr` : !!! abstract @@ -306,7 +306,7 @@ the default type, and thus fallback for unknown type qualifiers, is `note`: euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. -`info`{ #type-info }, `todo` +[`info`](#type:info){ #type:info }, `todo` : !!! info @@ -314,7 +314,7 @@ the default type, and thus fallback for unknown type qualifiers, is `note`: euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. -`tip`{ #type-tip }, `hint`, `important` +[`tip`](#type:tip){ #type:tip }, `hint`, `important` : !!! tip @@ -322,7 +322,7 @@ the default type, and thus fallback for unknown type qualifiers, is `note`: euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. -`success`{ #type-success }, `check`, `done` +[`success`](#type:success){ #type:success }, `check`, `done` : !!! success @@ -330,7 +330,7 @@ the default type, and thus fallback for unknown type qualifiers, is `note`: euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. -`question`{ #type-question }, `help`, `faq` +[`question`](#type:question){ #type:question }, `help`, `faq` : !!! question @@ -338,7 +338,7 @@ the default type, and thus fallback for unknown type qualifiers, is `note`: euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. -`warning`{ #type-warning }, `caution`, `attention` +[`warning`](#type:warning){ #type:warning }, `caution`, `attention` : !!! warning @@ -346,7 +346,7 @@ the default type, and thus fallback for unknown type qualifiers, is `note`: euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. -`failure`{ #type-failure }, `fail`, `missing` +[`failure`](#type:failure){ #type:failure }, `fail`, `missing` : !!! failure @@ -354,7 +354,7 @@ the default type, and thus fallback for unknown type qualifiers, is `note`: euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. -`danger`{ #type-danger }, `error` +[`danger`](#type:danger){ #type:danger }, `error` : !!! danger @@ -362,7 +362,7 @@ the default type, and thus fallback for unknown type qualifiers, is `note`: euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. -`bug`{ #type-bug } +[`bug`](#type:bug){ #type:bug } : !!! bug @@ -370,7 +370,7 @@ the default type, and thus fallback for unknown type qualifiers, is `note`: euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. -`example`{ #type-example } +[`example`](#type:example){ #type:example } : !!! example @@ -378,7 +378,7 @@ the default type, and thus fallback for unknown type qualifiers, is `note`: euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. -`quote`{ #type-quote }, `cite` +[`quote`](#type:quote){ #type:quote }, `cite` : !!! quote @@ -414,7 +414,7 @@ and add the following CSS to an [additional style sheet]: } -=== ":octicons-file-code-16: docs/stylesheets/extra.css" +=== ":octicons-file-code-16: `docs/stylesheets/extra.css`" ``` css :root { @@ -436,7 +436,7 @@ and add the following CSS to an [additional style sheet]: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_css: diff --git a/docs/reference/code-blocks.md b/docs/reference/code-blocks.md index 3d1a5f9de..e6b770aab 100644 --- a/docs/reference/code-blocks.md +++ b/docs/reference/code-blocks.md @@ -126,8 +126,6 @@ import tensorflow as tf ### Adding a title -[:octicons-tag-24: 7.3.6][Title support] - In order to provide additional context, a custom title can be added to a code block by using the `title=""` option directly after the shortcode, e.g. to display the name of a file: @@ -154,8 +152,6 @@ def bubble_sort(items):
- [Title support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.3.6 - ### Adding annotations Code annotations can be placed anywhere in a code block where a comment for the @@ -354,7 +350,7 @@ Let's say you want to change the color of `#!js "strings"`. While there are several [types of string tokens], they use the same color. You can assign a new color by using an [additional style sheet]: -=== ":octicons-file-code-16: docs/stylesheets/extra.css" +=== ":octicons-file-code-16: `docs/stylesheets/extra.css`" ``` css :root > * { @@ -362,7 +358,7 @@ a new color by using an [additional style sheet]: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_css: @@ -373,7 +369,7 @@ If you want to tweak a specific type of string, e.g. ``#!js `backticks` ``, you can lookup the specific CSS class name in the [syntax theme definition], and override it as part of your [additional style sheet]: -=== ":octicons-file-code-16: docs/stylesheets/extra.css" +=== ":octicons-file-code-16: `docs/stylesheets/extra.css`" ``` css .highlight .sb { @@ -381,7 +377,7 @@ override it as part of your [additional style sheet]: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_css: @@ -400,7 +396,7 @@ If you have a lot of content hosted inside your code annotations, it can be a good idea to increase the width of the tooltip by adding the following as part of an [additional style sheet]: -=== ":octicons-file-code-16: docs/stylesheets/extra.css" +=== ":octicons-file-code-16: `docs/stylesheets/extra.css`" ``` css :root { @@ -408,7 +404,7 @@ of an [additional style sheet]: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_css: @@ -439,7 +435,7 @@ will close them. If you wish to revert to the prior behavior and display code annotation numbers, you can add an [additional style sheet] and copy and paste the following CSS: -=== ":octicons-file-code-16: docs/stylesheets/extra.css" +=== ":octicons-file-code-16: `docs/stylesheets/extra.css`" ``` css .md-typeset .md-annotation__index > ::before { @@ -450,7 +446,7 @@ you can add an [additional style sheet] and copy and paste the following CSS: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_css: diff --git a/docs/reference/content-tabs.md b/docs/reference/content-tabs.md index 8ec36c7f5..180ca6a87 100644 --- a/docs/reference/content-tabs.md +++ b/docs/reference/content-tabs.md @@ -57,7 +57,7 @@ or to the [publishing guide for Insiders][tab_2]. ### Linked content tabs -[:octicons-tag-24: 8.3.0][link support] · +[:octicons-tag-24: 8.3.0][Linked content tabs support] · :octicons-unlock-24: Feature flag · :octicons-beaker-24: Experimental @@ -76,18 +76,18 @@ tabs with the same label will be activated when a user clicks a content tab regardless of order inside a container. Furthermore, this feature is fully integrated with [instant loading] and persisted across page loads. -=== ":octicons-check-circle-fill-16: Enabled" +=== "Feature enabled" - [![content.tabs.link enabled]][content.tabs.link enabled] + [![Linked content tabs enabled]][Linked content tabs enabled] -=== ":octicons-skip-16: Disabled" +=== "Feature disabled" - [![content.tabs.link disabled]][content.tabs.link disabled] + [![Linked content tabs disabled]][Linked content tabs disabled] - [link support]: https://github.com/squidfunk/mkdocs-material/releases/tag/8.3.0 + [Linked content tabs support]: https://github.com/squidfunk/mkdocs-material/releases/tag/8.3.0 [instant loading]: ../setup/setting-up-navigation.md#instant-loading - [content.tabs.link enabled]: ../assets/screenshots/content-tabs-link.png - [content.tabs.link disabled]: ../assets/screenshots/content-tabs.png + [Linked content tabs enabled]: ../assets/screenshots/content-tabs-link.png + [Linked content tabs disabled]: ../assets/screenshots/content-tabs.png ## Usage diff --git a/docs/reference/data-tables.md b/docs/reference/data-tables.md index 8f6d83ea2..100cecc34 100644 --- a/docs/reference/data-tables.md +++ b/docs/reference/data-tables.md @@ -131,7 +131,7 @@ If you want to make data tables sortable, you can add [tablesort], which is natively integrated with Material for MkDocs and will also work with [instant loading] via [additional JavaScript]: -=== ":octicons-file-code-16: docs/javascripts/tablesort.js" +=== ":octicons-file-code-16: `docs/javascripts/tablesort.js`" ``` js document$.subscribe(function() { @@ -142,7 +142,7 @@ loading] via [additional JavaScript]: }) ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_javascript: diff --git a/docs/reference/icons-emojis.md b/docs/reference/icons-emojis.md index 2b33229eb..e2d824141 100644 --- a/docs/reference/icons-emojis.md +++ b/docs/reference/icons-emojis.md @@ -118,7 +118,7 @@ declarations into dedicated CSS classes: } -=== ":octicons-file-code-16: docs/stylesheets/extra.css" +=== ":octicons-file-code-16: `docs/stylesheets/extra.css`" ``` css .twitter { @@ -126,7 +126,7 @@ declarations into dedicated CSS classes: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_css: @@ -155,7 +155,7 @@ Similar to adding [colors], it's just as easy to add [animations] to icons by using an [additional style sheet], defining a `@keyframes` rule and adding a dedicated CSS class to the icon: -=== ":octicons-file-code-16: docs/stylesheets/extra.css" +=== ":octicons-file-code-16: `docs/stylesheets/extra.css`" ``` css @keyframes heart { @@ -171,7 +171,7 @@ dedicated CSS class to the icon: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_css: diff --git a/docs/reference/images.md b/docs/reference/images.md index bc23abfd4..88192bd9c 100644 --- a/docs/reference/images.md +++ b/docs/reference/images.md @@ -32,7 +32,7 @@ See additional configuration options: ### Lightbox -[:octicons-tag-24: 0.1.0][glightbox support] · +[:octicons-tag-24: 0.1.0][Lightbox support] · [:octicons-cpu-24: Plugin][glightbox] If you want to add image zoom functionality to your documentation, the @@ -53,7 +53,7 @@ plugins: We recommend checking out the available [configuration options][glightbox options]. - [glightbox support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 + [Lightbox support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 [glightbox]: https://github.com/blueswen/mkdocs-glightbox [glightbox options]: https://github.com/blueswen/mkdocs-glightbox#usage diff --git a/docs/reference/index.md b/docs/reference/index.md index 032ef47b1..2d2826031 100644 --- a/docs/reference/index.md +++ b/docs/reference/index.md @@ -33,7 +33,7 @@ plugins: The following configuration options are available: -`meta_file`{ #meta-file } +[`meta_file`](#+meta.meta_file){ #+meta.meta_file } : :octicons-milestone-24: Default: `**/.meta.yml` – This option specifies the name of the meta files that the plugin should look for. The default setting @@ -57,7 +57,7 @@ The following configuration options are available: The page title can be overridden for a document with the front matter `title` property. Add the following lines at the top of a Markdown file: -``` sh +``` yaml --- title: Lorem ipsum dolor sit amet # (1)! --- @@ -79,7 +79,7 @@ title: Lorem ipsum dolor sit amet # (1)! The page description can be overridden for a document with the front matter `description` property. Add the following lines at the top of a Markdown file: -``` sh +``` yaml --- description: Nullam urna elit, malesuada eget finibus ut, ac tortor. # (1)! --- @@ -100,7 +100,7 @@ description: Nullam urna elit, malesuada eget finibus ut, ac tortor. # (1)! An icon can be assigned to each page, which is then rendered as part of the navigation sidebar. Add the following lines at the top of a Markdown file: -``` sh +``` yaml --- icon: material/emoticon-happy # (1)! --- @@ -153,7 +153,7 @@ The page status can now be set for a document with the front matter `status` property. For example, you can mark a page as `new` with the following lines at the top of a Markdown file: -``` sh +``` yaml --- status: new --- @@ -173,7 +173,7 @@ If you're using [theme extension] and created a new page template in the `overrides` directory, you can enable it for a specific page. Add the following lines at the top of a Markdown file: -``` sh +``` yaml --- template: custom.html --- @@ -185,7 +185,7 @@ template: custom.html ??? question "How to set a page template for an entire folder?" With the help of the [built-in meta plugin], you can set a custom template - for an entire section and all nested pages, by creating a `.meta.yml` + for an entire section and all nested pages, by creating a `.meta.yml` file in the corresponding folder with the following content: ``` yaml diff --git a/docs/reference/mathjax.md b/docs/reference/mathjax.md index dd4c99738..960828465 100644 --- a/docs/reference/mathjax.md +++ b/docs/reference/mathjax.md @@ -21,7 +21,7 @@ This configuration enables support for rendering block and inline block equations through [MathJax]. Create a configuration file and add the following lines to `mkdocs.yml`: -=== ":octicons-file-code-16: docs/javascripts/mathjax.js" +=== ":octicons-file-code-16: `docs/javascripts/mathjax.js`" ``` js window.MathJax = { @@ -44,7 +44,7 @@ lines to `mkdocs.yml`: 1. This integrates MathJax with [instant loading]. -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml markdown_extensions: diff --git a/docs/reference/tooltips.md b/docs/reference/tooltips.md index b65c7b1c0..efdebb339 100644 --- a/docs/reference/tooltips.md +++ b/docs/reference/tooltips.md @@ -4,18 +4,18 @@ icon: material/tooltip-plus status: new --- -# Tooltips +# Abbreviations -Material for MkDocs makes it trivial to add tooltips to links, abbreviations -and all other elements, which allows for implementing glossary-like -functionality, as well as small hints that are shown when the user hovers or -focuses an element. +Technical documentation often incurs the usage of many acronyms, which may +need additional explanation, especially for new user of your project. For these +matters, Material for MkDocs uses a combination of Markdown extensions to +enable site-wide glossaries. ## Configuration -This configuration enables support for tooltips and abbreviations and allows to -build a simple glossary, sourcing definitions from a central location. Add the -following lines to `mkdocs.yml`: +This configuration enables abbreviations and allows to build a simple +project-wide glossary, sourcing definitions from a central location. Add the +following line to `mkdocs.yml`: ``` yaml markdown_extensions: @@ -108,7 +108,7 @@ extension: ### Adding abbreviations -Abbreviations can be defined by using a special syntax similar to [links] and +Abbreviations can be defined by using a special syntax similar to URLs and [footnotes], starting with a `*` and immediately followed by the term or acronym to be associated in square brackets: @@ -128,7 +128,6 @@ The HTML specification is maintained by the W3C. - [links]: #adding-tooltips [footnotes]: footnotes.md ### Adding a glossary @@ -143,14 +142,14 @@ pages with the following configuration: `includes` is used), as MkDocs might otherwise complain about an unreferenced file. -=== ":octicons-file-code-16: includes/abbreviations.md" +=== ":octicons-file-code-16: `includes/abbreviations.md`" ```` markdown *[HTML]: Hyper Text Markup Language *[W3C]: World Wide Web Consortium ```` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ```` yaml markdown_extensions: diff --git a/docs/schema/extensions/markdown.json b/docs/schema/extensions/markdown.json index 99563b0a6..bb2f9ddbd 100644 --- a/docs/schema/extensions/markdown.json +++ b/docs/schema/extensions/markdown.json @@ -91,17 +91,17 @@ "type": "object", "properties": { "title": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#toc-title", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#+toc.title", "type": "string" }, "permalink": { "oneOf": [ { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#toc-permalink", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#+toc.permalink", "type": "boolean" }, { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#toc-permalink", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#+toc.permalink", "type": "string" } ], @@ -113,15 +113,15 @@ "default": false }, "permalink_title": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#toc-permalink-title", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#+toc.permalink_title", "type": "string" }, "slugify": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#toc-slugify", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#+toc.slugify", "type": "string" }, "toc_depth": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#toc-depth", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#+toc.toc_depth", "type": "number", "enum": [ 0, diff --git a/docs/schema/extensions/pymdownx.json b/docs/schema/extensions/pymdownx.json index 6617b857f..917b7859f 100644 --- a/docs/schema/extensions/pymdownx.json +++ b/docs/schema/extensions/pymdownx.json @@ -127,7 +127,7 @@ "type": "object", "properties": { "mode": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#critic-mode", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.critic.mode", "enum": [ "view", "accept", @@ -158,24 +158,24 @@ "type": "object", "properties": { "emoji_generator": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/emoji/#options", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.emoji.emoji_generator", "type": "string", "default": "!!python/name:materialx.emoji.to_svg" }, "emoji_index": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/emoji/#options", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.emoji.emoji_index", "type": "string", "default": "!!python/name:materialx.emoji.twemoji" }, "options": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#custom-icons", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.emoji.options.custom_icons", "type": "object", "properties": { "custom_icons": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#custom-icons", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.emoji.options.custom_icons", "type": "array", "items": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#custom-icons", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.emoji.options.custom_icons", "type": "string" }, "uniqueItems": true, @@ -212,11 +212,11 @@ "type": "object", "properties": { "use_pygments": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#highlight-use-pygments", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.highlight.use_pygments", "type": "boolean" }, "auto_title": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#highlight-auto-title", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.highlight.auto_title", "type": "boolean" }, "auto_title_map": { @@ -224,11 +224,11 @@ "type": "object" }, "linenums": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#highlight-linenums", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.highlight.linenums", "type": "boolean" }, "linenums_style": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#highlight-linenums-style", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.highlight.linenums_style", "enum": [ "inline", "pymdownx-inline", @@ -236,7 +236,7 @@ ] }, "anchor_linenums": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#highlight-anchor-linenums", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.highlight.anchor_linenums", "type": "boolean" } }, @@ -359,7 +359,8 @@ "properties": { "smart_mark": { "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/mark/#options", - "type": "boolean" + "type": "boolean", + "default": true } }, "additionalProperties": false @@ -386,45 +387,50 @@ "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#smartsymbols", "type": "object", "properties": { - "smart_mark": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/mark/#options", - "type": "boolean" - }, "trademark": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/mark/#options", - "type": "boolean" + "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/smartsymbols/#options", + "type": "boolean", + "default": true }, "copyright": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/mark/#options", - "type": "boolean" + "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/smartsymbols/#options", + "type": "boolean", + "default": true }, "registered": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/mark/#options", - "type": "boolean" + "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/smartsymbols/#options", + "type": "boolean", + "default": true }, "care_of": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/mark/#options", - "type": "boolean" + "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/smartsymbols/#options", + "type": "boolean", + "default": true }, "plusminus": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/mark/#options", - "type": "boolean" + "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/smartsymbols/#options", + "type": "boolean", + "default": true }, "arrows": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/mark/#options", - "type": "boolean" + "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/smartsymbols/#options", + "type": "boolean", + "default": true }, "notequal": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/mark/#options", - "type": "boolean" + "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/smartsymbols/#options", + "type": "boolean", + "default": true }, "fractions": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/mark/#options", - "type": "boolean" + "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/smartsymbols/#options", + "type": "boolean", + "default": true }, "ordinal_numbers": { - "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/mark/#options", - "type": "boolean" + "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/smartsymbols/#options", + "type": "boolean", + "default": true } }, "additionalProperties": false @@ -496,10 +502,10 @@ "type": "object", "properties": { "custom_fences": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#superfences-custom-fences", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.superfences.custom_fences", "type": "array", "items": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#superfences-custom-fences", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.superfences.custom_fences", "type": "object", "properties": { "name": { @@ -561,12 +567,12 @@ "type": "object", "properties": { "custom_checkbox": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#tasklist-custom-checkbox", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.tasklist.custom_checkbox", "type": "boolean", "default": true }, "clickable_checkbox": { - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#tasklist-clickable-checkbox", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#+pymdownx.tasklist.clickable_checkbox", "type": "boolean" } }, diff --git a/docs/schema/extra.json b/docs/schema/extra.json index 118f26fd2..b4f657cf6 100644 --- a/docs/schema/extra.json +++ b/docs/schema/extra.json @@ -72,17 +72,17 @@ }, "name": { "title": "Feedback rating name", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#feedback-rating-name", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#+analytics.feedback.ratings.name", "type": "string" }, "data": { "title": "Feedback rating data", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#feedback-rating-data", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#+analytics.feedback.ratings.data", "type": "number" }, "note": { "title": "Feedback rating data", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#feedback-rating-note", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#+analytics.feedback.ratings.note", "type": "string" } }, @@ -139,18 +139,18 @@ "properties": { "title": { "title": "Cookie consent title", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#cookie-consent", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#+consent.title", "type": "string", "default": "Cookie consent" }, "description": { "title": "Cookie consent description", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#cookie-consent", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#+consent.description", "type": "string" }, "cookies": { "title": "Cookies", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#cookie-consent", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#+consent.cookies", "type": "object", "properties": { "analytics": { @@ -166,7 +166,7 @@ "defaultSnippets": [ { "label": "analytics (default)", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#cookie-consent", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#+consent.cookies", "body": { "analytics": { "name": "Google Analytics", @@ -178,7 +178,7 @@ }, "actions": { "title": "Cookie consent actions", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#cookie-consent", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#+consent.actions", "type": "array", "items": { "oneOf": [ @@ -208,7 +208,7 @@ "defaultSnippets": [ { "label": "actions (default)", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#cookie-consent", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#+consent.actions", "body": { "actions": [ "accept", @@ -235,12 +235,12 @@ }, "link": { "title": "Social link", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-the-footer/#social-link", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-the-footer/#+social.link", "type": "string" }, "name": { "title": "Social link name", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-the-footer/#social-name", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-the-footer/#+social.name", "type": "string" } }, @@ -262,17 +262,17 @@ "properties": { "name": { "title": "Alternate language name", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/changing-the-language/#language-name", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/changing-the-language/#+alternate.name", "type": "string" }, "link": { "title": "Alternate language link", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/changing-the-language/#language-link", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/changing-the-language/#+alternate.link", "type": "string" }, "lang": { "title": "Alternate language code (ISO 639-1)", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/changing-the-language/#language-lang", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/changing-the-language/#+alternate.lang", "type": "string" } }, diff --git a/docs/schema/plugins.json b/docs/schema/plugins.json index adcb7dce8..b46719581 100644 --- a/docs/schema/plugins.json +++ b/docs/schema/plugins.json @@ -22,6 +22,9 @@ "built-in": { "description": "Built-in plugins", "oneOf": [ + { + "$ref": "plugins/blog.json" + }, { "$ref": "plugins/meta.json" }, diff --git a/docs/schema/plugins/blog.json b/docs/schema/plugins/blog.json new file mode 100644 index 000000000..84f714f6f --- /dev/null +++ b/docs/schema/plugins/blog.json @@ -0,0 +1,327 @@ +{ + "$schema": "https://json-schema.org/draft-07/schema", + "title": "Built-in blog plugin", + "oneOf": [ + { + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#built-in-blog-plugin", + "enum": [ + "blog" + ] + }, + { + "type": "object", + "properties": { + "blog": { + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#built-in-blog-plugin", + "type": "object", + "properties": { + "enabled": { + "title": "Enable plugin", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.enabled", + "type": "boolean", + "default": true + }, + "blog_dir": { + "title": "Blog directory", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.blog_dir", + "type": "string", + "default": "blog" + }, + "blog_custom_dir": { + "title": "Blog template directory (internal)", + "markdownDescription": "Warning: this option is for internal use only, use at your own risk", + "type": "string" + }, + "post_date_format": { + "title": "Format string for post dates", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.post_date_format", + "oneOf": [ + { + "enum": [ + "full", + "long", + "medium", + "short" + ] + }, + { + "type": "string" + } + ], + "default": "long" + }, + "post_url_date_format": { + "title": "Format string for post dates in URLs", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.post_url_date_format", + "oneOf": [ + { + "enum": [ + "YYYY", + "YYYY/MM", + "YYYY/MM/dd" + ] + }, + { + "type": "string" + } + ], + "default": "YYYY" + }, + "post_url_format": { + "title": "Format string for post URLs", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.post_url_format", + "oneOf": [ + { + "enum": [ + "\"{date}/{slug}\"", + "\"{slug}\"" + ] + }, + { + "type": "string" + } + ] + }, + "post_slugify": { + "title": "Post slugify function", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.post_slugify", + "type": "string", + "default": "!!python/name:pymdownx.slugs.uslugify" + }, + "post_slugify_separator": { + "title": "Post slugify separator", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.post_slugify_separator", + "type": "string", + "default": "\"-\"" + }, + "post_excerpt": { + "title": "Post excerpts", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.post_excerpt", + "oneOf": [ + { + "title": "Post excerpts are optional", + "enum": [ + "optional" + ] + }, + { + "title": "Post excerpts are required, thus the build will fail", + "enum": [ + "required" + ] + } + ], + "default": "optional" + }, + "post_excerpt_separator": { + "title": "Post excerpt separator", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.post_excerpt_separator", + "type": "string", + "default": "" + }, + "post_readtime": { + "title": "Post reading time computation", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.post_readtime", + "type": "boolean", + "default": true + }, + "post_readtime_words_per_minute": { + "title": "Post reading time words per minute", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.post_readtime_words_per_minute", + "type": "number", + "default": 265 + }, + "archive": { + "title": "Archive", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.archive", + "type": "boolean", + "default": true + }, + "archive_name": { + "title": "Archive name", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.archive_name", + "type": "string", + "default": "Archive" + }, + "archive_date_format": { + "title": "Format string for archive dates", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.archive_date_format", + "oneOf": [ + { + "enum": [ + "YYYY", + "MMMM YYYY" + ] + }, + { + "type": "string" + } + ], + "default": "YYYY" + }, + "archive_url_date_format": { + "title": "Format string for archive dates in URLs", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.archive_url_date_format", + "oneOf": [ + { + "enum": [ + "YYYY", + "YYYY/MM" + ] + }, + { + "type": "string" + } + ], + "default": "YYYY" + }, + "archive_url_format": { + "title": "Format string for archive URLs", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.archive_url_format", + "oneOf": [ + { + "enum": [ + "\"archive/{date}\"" + ] + }, + { + "type": "string" + } + ] + }, + "categories": { + "title": "Categories", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.categories", + "type": "boolean", + "default": true + }, + "categories_name": { + "title": "Categories name", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.categories_name", + "type": "string", + "default": "Categories" + }, + "categories_url_format": { + "title": "Format string for category URLs", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.categories_url_format", + "oneOf": [ + { + "enum": [ + "\"category/{slug}\"", + "\"{slug}\"" + ] + }, + { + "type": "string" + } + ] + }, + "categories_slugify": { + "title": "Categories slugify function", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.categories_slugify", + "type": "string", + "default": "!!python/name:pymdownx.slugs.uslugify" + }, + "categories_slugify_separator": { + "title": "Categories slugify separator", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.categories_slugify_separator", + "type": "string", + "default": "\"-\"" + }, + "categories_allowed": { + "title": "Categories allowed", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.categories_allowed", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "pagination": { + "title": "Pagination", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.pagination", + "type": "boolean", + "default": true + }, + "pagination_per_page": { + "title": "Posts per page", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.pagination_per_page", + "type": "number", + "default": 10 + }, + "pagination_url_format": { + "title": "Format string for pagination URLs", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.pagination_url_format", + "oneOf": [ + { + "enum": [ + "\"page/{page}\"", + "\"{page}\"" + ] + }, + { + "type": "string" + } + ] + }, + "pagination_template": { + "title": "Template string for pagination", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.pagination_template", + "oneOf": [ + { + "enum": [ + "~2~", + "$link_first $link_previous ~2~ $link_next $link_last", + "$link_previous $page $link_next" + ] + }, + { + "type": "string" + } + ], + "default": "~2~" + }, + "authors": { + "title": "Author info", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.authors", + "type": "boolean", + "default": true + }, + "authors_file": { + "title": "Authors file", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.authors_file", + "type": "string", + "default": ".authors.yml" + }, + "authors_in_excerpt": { + "title": "Number of authors to render in post excerpts", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.authors_in_excerpt", + "type": "number", + "default": 1 + }, + "draft": { + "title": "Render posts marked as drafts", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.draft", + "type": "boolean", + "default": false + }, + "draft_on_serve": { + "title": "Render posts marked as drafts when previewing", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.draft_on_serve", + "type": "boolean", + "default": true + }, + "draft_if_future_date": { + "title": "Automatically mark posts with future dates as drafts", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/#+blog.draft_if_future_date", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + ] +} diff --git a/docs/schema/plugins/external/git-committers.json b/docs/schema/plugins/external/git-committers.json index c6c43f0ab..2d1caf5d4 100644 --- a/docs/schema/plugins/external/git-committers.json +++ b/docs/schema/plugins/external/git-committers.json @@ -23,12 +23,12 @@ }, "repository": { "title": "Repository slug", - "markdownDescription": "https://github.com/ojacques/mkdocs-git-committers-plugin-2#config", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/adding-a-git-repository/#+git-committers.repository", "type": "string" }, "token": { "title": "Personal access token", - "markdownDescription": "https://github.com/ojacques/mkdocs-git-committers-plugin-2#config", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/adding-a-git-repository/#+git-committers.token", "type": "string" } }, diff --git a/docs/schema/plugins/meta.json b/docs/schema/plugins/meta.json index d1d9cb1b0..aef3495dd 100644 --- a/docs/schema/plugins/meta.json +++ b/docs/schema/plugins/meta.json @@ -17,7 +17,7 @@ "properties": { "meta_file": { "title": "Meta file name", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/reference/#meta-file", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/reference/#+meta.meta_file", "pattern": "\\.yml$", "default": "\"**/.meta.yml\"" } diff --git a/docs/schema/plugins/offline.json b/docs/schema/plugins/offline.json index 36281cad2..e97b620aa 100644 --- a/docs/schema/plugins/offline.json +++ b/docs/schema/plugins/offline.json @@ -17,7 +17,7 @@ "properties": { "enabled": { "title": "Enable plugin", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/building-for-offline-usage/#enabled", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/building-for-offline-usage/#+offline.enabled", "type": "boolean", "default": true } diff --git a/docs/schema/plugins/privacy.json b/docs/schema/plugins/privacy.json index d229704d5..5ee1675e1 100644 --- a/docs/schema/plugins/privacy.json +++ b/docs/schema/plugins/privacy.json @@ -17,13 +17,13 @@ "properties": { "enabled": { "title": "Enable plugin", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#enabled", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#+privacy.enabled", "type": "boolean", "default": true }, "externals": { "title": "External assets", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#externals", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#+privacy.externals", "oneOf": [ { "title": "Bundle external assets", @@ -42,17 +42,17 @@ }, "externals_dir": { "title": "External assets download directory", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#externals-dir", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#+privacy.externals_dir", "type": "string", "default": "assets/externals" }, "externals_exclude": { "title": "External assets to be excluded", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#externals-exclude", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#+privacy.externals_exclude", "type": "array", "items": { "title": "External assets matching this pattern will not be bundled", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#externals-exclude", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/ensuring-data-privacy/#+privacy.externals_exclude", "pattern": ".*" }, "uniqueItems": true, diff --git a/docs/schema/plugins/search.json b/docs/schema/plugins/search.json index ce4892090..f99370e31 100644 --- a/docs/schema/plugins/search.json +++ b/docs/schema/plugins/search.json @@ -33,17 +33,17 @@ }, "separator": { "title": "Separator for indexing and query tokenization", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/#search-separator", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/#+search.separator", "type": "string" }, "jieba_dict": { "title": "Jieba dictionary replacement", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/#jieba-dict", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/#+search.jieba_dict", "type": "string" }, "jieba_dict_user": { "title": "Jieba dictionary augmentation", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/#jieba-dict", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/#+search.jieba_dict_user", "type": "string" } }, @@ -56,7 +56,7 @@ "definitions": { "lang": { "title": "Site search language", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/#search-lang", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/#+search.lang", "oneOf": [ { "title": "Site search language: Arabic", diff --git a/docs/schema/plugins/social.json b/docs/schema/plugins/social.json index e70c9cc8a..161d7cf8c 100644 --- a/docs/schema/plugins/social.json +++ b/docs/schema/plugins/social.json @@ -17,23 +17,23 @@ "properties": { "cards": { "title": "Social card generation", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/#cards", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/#+social.cards", "type": "boolean", "default": true }, "cards_color": { "title": "Social card color palette", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/#cards-color", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/#+social.cards_color", "type": "object", "properties": { "fill": { "title": "Background fill color", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/#cards-color", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/#+social.cards_color", "type": "string" }, "text": { "title": "Foreground text color", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/#cards-color", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/#+social.cards_color", "type": "string" } }, @@ -48,7 +48,7 @@ }, "cards_dir": { "title": "Social card directory", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/#cards-dir", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/#+social.cards_dir", "type": "string", "default": "assets/images/social" } diff --git a/docs/schema/plugins/tags.json b/docs/schema/plugins/tags.json index 5a7ab1aa8..72b89b966 100644 --- a/docs/schema/plugins/tags.json +++ b/docs/schema/plugins/tags.json @@ -17,13 +17,13 @@ "properties": { "tags_file": { "title": "Markdown file to render tags index", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-tags/#tags-file", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-tags/#+tags.tags_file", "pattern": "\\.md$", "default": "tags.md" }, "tags_extra_files": { "title": "Markdown files to render additional tags indexes", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-tags/#tags-extra-files", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-tags/#+tags.tags_extra_files", "type": "object", "patternProperties": { "\\.md$": { diff --git a/docs/setup/adding-a-comment-system.md b/docs/setup/adding-a-comment-system.md index 045bae784..a1a3eafed 100644 --- a/docs/setup/adding-a-comment-system.md +++ b/docs/setup/adding-a-comment-system.md @@ -42,24 +42,14 @@ Before you can use [Giscus], you need to complete the following steps: ``` -You can either integrate [Giscus] on every page by overriding the `main.html` -template, or create a new template (e.g. `blog.html`) to extend from `main.html` -which includes the comment system, so you can decide for each page whether you -want to allow comments or not. +The by default empty [`comments.html`][comments] partial is the best place to +add the code snippet generated by [Giscus]. Follow the guide on [theme extension] +and [override the `comments.html` partial][overriding partials] with: -In order to integrate [Giscus], follow the guide on [theme extension] and -[override the `content` block][overriding blocks], extending the default by -calling the `super()` function at the beginning of the block: - -``` html hl_lines="8" -{% extends "base.html" %} - -{% block content %} - {{ super() }} - - +``` html hl_lines="3" +{% if page.meta.comments %}

{{ lang.t("meta.comments") }}

- + -{% endblock %} +{% endif %} ``` 1. This code block ensures that [Giscus] renders with a dark theme when the @@ -98,12 +88,24 @@ calling the `super()` function at the beginning of the block: so you can change it to your liking. Replace the highlighted line with the snippet you generated with the [Giscus] -configuration tool in the previous step. If you extended `main.html`, you should -now see the [Giscus] comment system at the bottom of each page. If you created -a new, separate template, you can enable Giscus by [setting the page template] -via front matter. +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 +--- + +# Document title +... +``` + +If you wish to enable comments for an entire folder, you can use the +[built-in meta plugin]. [Giscus GitHub App]: https://github.com/apps/giscus [theme extension]: ../customization.md#extending-the-theme - [overriding blocks]: ../customization.md#overriding-blocks - [setting the page template]: ../reference/index.md#setting-the-page-template + [comments]: https://github.com/squidfunk/mkdocs-material/blob/master/src/partials/comments.html + [overriding partials]: ../customization.md#overriding-partials + [built-in meta plugin]: ../reference/index.md#built-in-meta-plugin diff --git a/docs/setup/adding-a-git-repository.md b/docs/setup/adding-a-git-repository.md index 6da55fd13..8b6f0634c 100644 --- a/docs/setup/adding-a-git-repository.md +++ b/docs/setup/adding-a-git-repository.md @@ -13,7 +13,7 @@ static site, including stars and forks. Furthermore, the ### Repository -[:octicons-tag-24: 0.1.0][repo_url support] · +[:octicons-tag-24: 0.1.0][Repository support] · :octicons-milestone-24: Default: _none_ In order to display a link to the repository of your project as part of your @@ -37,14 +37,14 @@ GitHub repositories also include the tag of the latest release.[^1] pre-release) for the latest tag you want to display next to the number of stars and forks. - [repo_url support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 + [Repository support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 [repo_url]: https://www.mkdocs.org/user-guide/configuration/#repo_url [latest release]: https://docs.github.com/en/rest/reference/releases#get-the-latest-release [create a release]: https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release #### Repository name -[:octicons-tag-24: 0.1.0][repo_name support] · +[:octicons-tag-24: 0.1.0][Repository name support] · :octicons-milestone-24: Default: _automatically set to_ `GitHub`, `GitLab` _or_ `Bitbucket` @@ -56,14 +56,14 @@ _repository name_ automatically. If you wish to customize the name, set repo_name: squidfunk/mkdocs-material ``` - [repo_name support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 + [Repository name support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 [repo_name]: https://www.mkdocs.org/user-guide/configuration/#repo_name #### Repository icon -[:octicons-tag-24: 5.0.0][icon.repo support] · +[:octicons-tag-24: 5.0.0][Repository icon support] · :octicons-milestone-24: Default: -[`fontawesome/brands/git-alt`][icon.repo default] +:fontawesome-brands-git-alt: – `fontawesome/brands/git-alt` While the default repository icon is a generic git icon, it can be set to any icon bundled with the theme by referencing a valid icon path in @@ -97,13 +97,13 @@ Some popular choices: - :fontawesome-brands-bitbucket: – `fontawesome/brands/bitbucket` - :fontawesome-solid-trash: – `fontawesome/solid/trash` - [icon.repo support]: https://github.com/squidfunk/mkdocs-material/releases/tag/5.0.0 - [icon.repo default]: https://github.com/squidfunk/mkdocs-material/blob/master/material/.icons/fontawesome/brands/git-alt.svg + [Repository icon support]: https://github.com/squidfunk/mkdocs-material/releases/tag/5.0.0 + [Repository icon default]: https://github.com/squidfunk/mkdocs-material/blob/master/material/.icons/fontawesome/brands/git-alt.svg [icon search]: ../reference/icons-emojis.md#search #### Edit button -[:octicons-tag-24: 0.1.0][edit_uri support] · +[:octicons-tag-24: 0.1.0][Edit button support] · :octicons-milestone-24: Default: _automatically set_ If the repository URL points to a [GitHub], [GitLab] or [Bitbucket] repository, @@ -122,7 +122,26 @@ changed by setting [`edit_uri`][edit_uri] in `mkdocs.yml`: edit_uri: "" ``` - [edit_uri support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 +The icon of the edit button can be changed with the following lines: + +``` yaml +theme: + icon: + edit: material/pencil # (1)! +``` + +1. Enter a few keywords to find the perfect icon using our [icon search] and + click on the shortcode to copy it to your clipboard: + +
+ +
+
+
    +
    +
    + + [Edit button support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 [edit_uri]: https://www.mkdocs.org/user-guide/configuration/#edit_uri [GitHub]: https://github.com/ [GitLab]: https://about.gitlab.com/ @@ -140,7 +159,7 @@ links to all [contributors] or [authors] involved. #### Document dates -[:octicons-tag-24: 4.6.0][git-revision-date-localized support] · +[:octicons-tag-24: 4.6.0][Document dates support] · [:octicons-cpu-24: Plugin][git-revision-date-localized] The [git-revision-date-localized] plugin adds support for adding the date of @@ -161,7 +180,7 @@ plugins: The following configuration options are supported: -`type`{ #type } +[`type`](#+git-revision-date-localized.type){ #+git-revision-date-localized.type } : :octicons-milestone-24: Default: `date` – The format of the date to be displayed. Valid values are `date`, `datetime`, `iso_date`, `iso_datetime` @@ -173,10 +192,9 @@ The following configuration options are supported: type: date ``` -`enable_creation_date`{ #enable-creation-date } +[`enable_creation_date`](#+git-revision-date-localized.enable_creation_date){ #+git-revision-date-localized.enable_creation_date } -: [:octicons-tag-24: 7.1.4][enable_creation_date support] · - :octicons-milestone-24: Default: `false` – Enables the display of the +: :octicons-milestone-24: Default: `false` – Enables the display of the creation date of the file associated with the page next to the last updated date at the bottom of the page: @@ -186,7 +204,7 @@ The following configuration options are supported: enable_creation_date: true ``` -`fallback_to_build_date`{ #fallback-to-build-date } +[`fallback_to_build_date`](#+git-revision-date-localized.fallback_to_build_date){ #+git-revision-date-localized.fallback_to_build_date } : :octicons-milestone-24: Default: `false` – Enables falling back to the time when `mkdocs build` was executed. Can be used as a fallback when @@ -202,9 +220,8 @@ The other configuration options of this extension are not officially supported by Material for MkDocs, which is why they may yield unexpected results. Use them at your own risk. - [git-revision-date-localized support]: https://github.com/squidfunk/mkdocs-material/releases/tag/4.6.0 + [Document dates support]: https://github.com/squidfunk/mkdocs-material/releases/tag/4.6.0 [git-revision-date-localized]: https://github.com/timvink/mkdocs-git-revision-date-localized-plugin - [enable_creation_date support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.1.4 #### Document contributors @@ -238,9 +255,9 @@ plugins: The following configuration options are supported: -`repository`{ #committers-repository } +[`repository`](#+git-committers.repository){ #+git-committers.repository } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – This property must be set to the slug of the repository that contains your documentation. The slug must follow the pattern `/`: @@ -250,7 +267,7 @@ The following configuration options are supported: repository: squidfunk/mkdocs-material ``` -`token`{ #committers-repository } +[`token`](#+git-committers.token){ #+git-committers.token } : :octicons-milestone-24: Default: _none_ – This property should[^3] be set to a [personal access token], which is used by the plugin to query GitHub's API diff --git a/docs/setup/building-for-offline-usage.md b/docs/setup/building-for-offline-usage.md index 3dfaab680..ddba28612 100644 --- a/docs/setup/building-for-offline-usage.md +++ b/docs/setup/building-for-offline-usage.md @@ -49,7 +49,7 @@ from the local file system. The following configuration options are available: -`enabled`{ #enabled } +[`enabled`](#+offline.enabled){ #+offline.enabled } : :octicons-milestone-24: Default: `true` – This option specifies whether the plugin is enabled when building your project. If you want to switch diff --git a/docs/setup/changing-the-colors.md b/docs/setup/changing-the-colors.md index bf503e530..a40d45aa8 100644 --- a/docs/setup/changing-the-colors.md +++ b/docs/setup/changing-the-colors.md @@ -18,7 +18,7 @@ fit your brand's identity by using [CSS variables][custom colors]. #### Color scheme -[:octicons-tag-24: 5.2.0][palette.scheme support] · +[:octicons-tag-24: 5.2.0][Color scheme support] · :octicons-milestone-24: Default: `default` Material for MkDocs supports two color schemes: a __light mode__, which is just @@ -50,11 +50,11 @@ Click on a tile to change the color scheme: }) - [palette.scheme support]: https://github.com/squidfunk/mkdocs-material/releases/tag/5.2.0 + [Color scheme support]: https://github.com/squidfunk/mkdocs-material/releases/tag/5.2.0 #### Primary color -[:octicons-tag-24: 0.2.0][palette.primary support] · +[:octicons-tag-24: 0.2.0][Primary color support] · :octicons-milestone-24: Default: `indigo` The primary color is used for the header, the sidebar, text links and several @@ -105,11 +105,11 @@ Click on a tile to change the primary color: }) - [palette.primary support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.2.0 + [Primary color support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.2.0 #### Accent color -[:octicons-tag-24: 0.2.0][palette.accent support] · +[:octicons-tag-24: 0.2.0][Accent color support] · :octicons-milestone-24: Default: `indigo` The accent color is used to denote elements that can be interacted with, e.g. @@ -162,11 +162,11 @@ Click on a tile to change the accent color: }) - [palette.accent support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.2.0 + [Accent color support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.2.0 ### Color palette toggle -[:octicons-tag-24: 7.1.0][palette.toggle support] · +[:octicons-tag-24: 7.1.0][Color palette toggle support] · :octicons-milestone-24: Default: _none_ Offering a light _and_ dark color palette makes your documentation pleasant to @@ -209,9 +209,9 @@ and [`accent`][palette.accent] per color palette. The following properties must be set for each toggle: -`icon`{ #toggle-icon } +[`icon`](#+palette.toggle.icon){ #+palette.toggle.icon } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – This property must point to a valid icon path referencing any icon bundled with the theme, or the build will not succeed. Some popular combinations: @@ -221,13 +221,13 @@ The following properties must be set for each toggle: * :material-eye: + :material-eye-outline: – `material/eye` + `material/eye-outline` * :material-lightbulb: + :material-lightbulb-outline: – `material/lightbulb` + `material/lightbulb-outline` -`name`{ #toggle-name } +[`name`](#+palette.toggle.name){ #+palette.toggle.name } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – This property is used as the toggle's `title` attribute and should be set to a discernable name to improve accessibility. It's rendered as a [tooltip]. - [palette.toggle support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.1.0 + [Color palette toggle support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.1.0 [palette.scheme]: #color-scheme [palette.primary]: #primary-color [palette.accent]: #accent-color @@ -236,7 +236,7 @@ The following properties must be set for each toggle: ### System preference -[:octicons-tag-24: 7.1.0][palette.media support] · +[:octicons-tag-24: 7.1.0][System preference support] · :octicons-milestone-24: Default: _none_ Each color palette can be linked to the user's system preference for light and @@ -266,7 +266,7 @@ When the user first visits your site, the media queries are evaluated in the order of their definition. The first media query that matches selects the default color palette. - [palette.media support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.1.0 + [System preference support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.1.0 #### Automatic light / dark mode @@ -327,7 +327,7 @@ Let's say you're :fontawesome-brands-youtube:{ style="color: #EE0F0F" } __YouTube__, and want to set the primary color to your brand's palette. Just add: -=== ":octicons-file-code-16: docs/stylesheets/extra.css" +=== ":octicons-file-code-16: `docs/stylesheets/extra.css`" ``` css :root > * { @@ -337,7 +337,7 @@ add: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_css: @@ -358,7 +358,7 @@ by wrapping the definitions in a `[data-md-color-scheme="..."]` [attribute selector], which you can then set via `mkdocs.yml` as described in the [color schemes][palette.scheme] section: -=== ":octicons-file-code-16: docs/stylesheets/extra.css" +=== ":octicons-file-code-16: `docs/stylesheets/extra.css`" ``` css [data-md-color-scheme="youtube"] { @@ -368,7 +368,7 @@ in the [color schemes][palette.scheme] section: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml theme: diff --git a/docs/setup/changing-the-fonts.md b/docs/setup/changing-the-fonts.md index d431c937b..ab8a5d239 100644 --- a/docs/setup/changing-the-fonts.md +++ b/docs/setup/changing-the-fonts.md @@ -15,7 +15,7 @@ or another destination should be used. ### Regular font -[:octicons-tag-24: 0.1.2][font support] · +[:octicons-tag-24: 0.1.2][Font support] · :octicons-milestone-24: Default: [`Roboto`][Roboto] The regular font is used for all body copy, headlines, and essentially @@ -31,11 +31,11 @@ theme: The typeface will be loaded in 300, 400, _400i_ and __700__. [Roboto]: https://fonts.google.com/specimen/Roboto - [font support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.2 + [Font support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.2 ### Monospaced font -[:octicons-tag-24: 0.1.2][font support] · +[:octicons-tag-24: 0.1.2][Font support] · :octicons-milestone-24: Default: [`Roboto Mono`][Roboto Mono] The _monospaced font_ is used for code blocks and can be configured separately. @@ -54,7 +54,7 @@ The typeface will be loaded in 400. ### Autoloading -[:octicons-tag-24: 1.0.0][font=false support] · +[:octicons-tag-24: 1.0.0][Autoloading support] · :octicons-milestone-24: Default: _none_ If you want to prevent typefaces from being loaded from [Google Fonts], e.g. @@ -73,7 +73,7 @@ theme: by automatically downloading and self-hosting the web font files. [data privacy]: https://developers.google.com/fonts/faq#what_does_using_the_google_fonts_api_mean_for_the_privacy_of_my_users - [font=false support]: https://github.com/squidfunk/mkdocs-material/releases/tag/1.0.0 + [Autoloading support]: https://github.com/squidfunk/mkdocs-material/releases/tag/1.0.0 [built-in privacy plugin]: ensuring-data-privacy.md#built-in-privacy-plugin ## Customization @@ -84,7 +84,7 @@ If you want to load an (additional) font from another destination or override the system font, you can use an [additional style sheet] to add the corresponding `@font-face` definition: -=== ":octicons-file-code-16: docs/stylesheets/extra.css" +=== ":octicons-file-code-16: `docs/stylesheets/extra.css`" ``` css @font-face { @@ -93,7 +93,7 @@ corresponding `@font-face` definition: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_css: diff --git a/docs/setup/changing-the-language.md b/docs/setup/changing-the-language.md index b1eb0a67e..598f53dd5 100644 --- a/docs/setup/changing-the-language.md +++ b/docs/setup/changing-the-language.md @@ -13,7 +13,7 @@ available. ### Site language -[:octicons-tag-24: 1.12.0][language support] · +[:octicons-tag-24: 1.12.0][Site language support] · :octicons-milestone-24: Default: `en` You can set the site language in `mkdocs.yml` with: @@ -100,7 +100,7 @@ The following languages are supported: Note that some languages will produce unreadable anchor links due to the way the default slug function works. Consider using a [Unicode-aware slug function]. - [language support]: https://github.com/squidfunk/mkdocs-material/releases/tag/1.12.0 + [Site language support]: https://github.com/squidfunk/mkdocs-material/releases/tag/1.12.0 [single language per document]: https://www.w3.org/International/questions/qa-html-language-declarations.en#attributes [language selector]: #site-language-selector [Unicode-aware slug function]: extensions/python-markdown.md#toc-slugify @@ -108,7 +108,7 @@ the default slug function works. Consider using a [Unicode-aware slug function]. ### Site language selector -[:octicons-tag-24: 7.0.0][alternate support] · +[:octicons-tag-24: 7.0.0][Site language selector support] · :octicons-milestone-24: Default: _none_ · :octicons-beaker-24: Experimental @@ -133,35 +133,35 @@ extra: The following properties are available for each alternate language: -`name`{ #language-name } +[`name`](#+alternate.name){ #+alternate.name } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – This value of this property is used inside the language selector as the name of the language and must be set to a non-empty string. -`link`{ #language-link } +[`link`](#+alternate.link){ #+alternate.link } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – This property must be set to an absolute link, which might also point to another domain or subdomain not necessarily generated with MkDocs. -`lang`{ #language-lang } +[`lang`](#+alternate.lang){ #+alternate.lang } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – This property must contain an [ISO 639-1 language code] and is used for the `hreflang` attribute of the link, improving discoverability via search engines. [![Language selector preview]][Language selector preview] - [alternate support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.0.0 + [Site language selector support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.0.0 [site_url]: https://www.mkdocs.org/user-guide/configuration/#site_url [ISO 639-1 language code]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes [Language selector preview]: ../assets/screenshots/language-selection.png ### Directionality -[:octicons-tag-24: 2.5.0][direction support] · +[:octicons-tag-24: 2.5.0][Directionality support] · :octicons-milestone-24: Default: _automatically set_ While many languages are read `ltr` (left-to-right), Material for MkDocs also @@ -192,7 +192,7 @@ Click on a tile to change the directionality: }) - [direction support]: https://github.com/squidfunk/mkdocs-material/releases/tag/2.5.0 + [Directionality support]: https://github.com/squidfunk/mkdocs-material/releases/tag/2.5.0 ## Customization @@ -203,7 +203,7 @@ the guide on [theme extension] and create a new partial in the `overrides` folder. Then, import the [translations] of the language as a fallback and only adjust the ones you want to override: -=== ":octicons-file-code-16: overrides/partials/languages/custom.html" +=== ":octicons-file-code-16: `overrides/partials/languages/custom.html`" ``` html @@ -228,7 +228,7 @@ adjust the ones you want to override: 2. Check the [list of available languages], pick the translation you want to override for your language and add them here. -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml theme: diff --git a/docs/setup/changing-the-logo-and-icons.md b/docs/setup/changing-the-logo-and-icons.md index 54e9da5f3..57cbcc9c6 100644 --- a/docs/setup/changing-the-logo-and-icons.md +++ b/docs/setup/changing-the-logo-and-icons.md @@ -15,8 +15,8 @@ when writing your documentation in Markdown. Not enough? You can also add ### Logo -[:octicons-tag-24: 0.1.0][logo support] · -:octicons-milestone-24: Default: [`material/library`][logo default] +[:octicons-tag-24: 0.1.0][Logo support] · +:octicons-milestone-24: Default: :material-library: – `material/library` The logo can be changed to a user-provided image (any type, incl. `*.png` and `*.svg`) located in the `docs` folder, or to any icon bundled with the theme. @@ -48,8 +48,7 @@ Add the following lines to `mkdocs.yml`: - [logo support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 - [logo default]: https://github.com/squidfunk/mkdocs-material/blob/master/material/.icons/material/library.svg + [Logo support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 [icon search]: ../reference/icons-emojis.md#search Normally, the logo in the header and sidebar links to the homepage of the @@ -63,8 +62,8 @@ extra: ### Favicon -[:octicons-tag-24: 0.1.0][favicon support] · -:octicons-milestone-24: Default: [`assets/images/favicon.png`][favicon default] +[:octicons-tag-24: 0.1.0][Favicon support] · +:octicons-milestone-24: Default: [`assets/images/favicon.png`][Favicon default] The favicon can be changed to a path pointing to a user-provided image, which must be located in the `docs` folder. Add the following lines to `mkdocs.yml`: @@ -74,8 +73,8 @@ theme: favicon: images/favicon.png ``` - [favicon support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 - [favicon default]: https://github.com/squidfunk/mkdocs-material/blob/master/material/assets/images/favicon.png + [Favicon support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.1.0 + [Favicon default]: https://github.com/squidfunk/mkdocs-material/blob/master/material/assets/images/favicon.png ## Customization diff --git a/docs/setup/ensuring-data-privacy.md b/docs/setup/ensuring-data-privacy.md index 8d7a04271..cf2ba7306 100644 --- a/docs/setup/ensuring-data-privacy.md +++ b/docs/setup/ensuring-data-privacy.md @@ -9,15 +9,15 @@ as it offers a native [cookie consent] solution to seek explicit consent from users before setting up [tracking]. Additionally, external assets can be automatically downloaded for [self-hosting]. - [cookie consent]: #native-cookie-consent + [cookie consent]: #cookie-consent [tracking]: setting-up-site-analytics.md [self-hosting]: #built-in-privacy-plugin ## Configuration -### Cookie consent { #native-cookie-consent } +### Cookie consent { #cookie-consent } -[:octicons-tag-24: 8.4.0][cookie consent support] · +[:octicons-tag-24: 8.4.0][Cookie consent support] · :octicons-milestone-24: Default: _none_ · :octicons-beaker-24: Experimental @@ -41,19 +41,19 @@ extra: The following properties are available: -`title`{ #consent-title } +[`title`](#+consent.title){ #+consent.title } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – This property sets the title of the cookie consent, which is rendered at the top of the form and must be set to a non-empty string. -`description`{ #consent-description } +[`description`](#+consent.description){ #+consent.description } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – This property sets the description of the cookie consent, is rendered below the title, and may include raw HTML (e.g. a links to the terms of service). -`cookies`{ #consent-cookies } +[`cookies`](#+consent.cookies){ #+consent.cookies } : :octicons-milestone-24: Default: _none_ – This property allows to add custom cookies or change the initial `checked` state and name of the `analytics` @@ -99,7 +99,7 @@ The following properties are available: If Google Analytics was configured via `mkdocs.yml`, the cookie consent will automatically include a setting for the user to disable it. [Custom cookies] can be used from JavaScript. -`actions`{ #consent-actions } +[`actions`](#+consent.actions){ #+consent.actions } : :octicons-milestone-24: Default: `[accept, manage]` – This property defines which buttons are shown and in which order, e.g. to allow the user to accept @@ -121,11 +121,11 @@ The following properties are available: When a user first visits your site, a cookie consent form is rendered: -[![cookie consent enabled]][cookie consent enabled] +[![Cookie consent enabled]][Cookie consent enabled] [Custom cookies]: #custom-cookies - [cookie consent support]: https://github.com/squidfunk/mkdocs-material/releases/tag/8.4.0 - [cookie consent enabled]: ../assets/screenshots/consent.png + [Cookie consent support]: https://github.com/squidfunk/mkdocs-material/releases/tag/8.4.0 + [Cookie consent enabled]: ../assets/screenshots/consent.png #### Change cookie settings @@ -168,7 +168,7 @@ plugins: The following configuration options are available: -`enabled`{ #enabled } +[`enabled`](#+privacy.enabled){ #+privacy.enabled } : :octicons-milestone-24: Default: `true` – This option specifies whether the plugin is enabled when building your project. If you want to switch @@ -180,7 +180,7 @@ The following configuration options are available: enabled: !ENV [PRIVACY, false] ``` -`externals`{ #externals } +[`externals`](#+privacy.externals){ #+privacy.externals } : :octicons-milestone-24: Default: `bundle` – This option specifies what the plugin should do when encountering external assets. There are two options: @@ -204,7 +204,7 @@ The following configuration options are available: [customization]: ../customization.md [strict mode]: https://www.mkdocs.org/user-guide/configuration/#strict -`externals_dir`{ #externals-dir } +[`externals_dir`](#+privacy.externals_dir){ #+privacy.externals_dir } : :octicons-milestone-24: Default: `assets/externals` – This option specifies where the downloaded [external assets] will be stored. It's @@ -216,7 +216,7 @@ The following configuration options are available: externals_dir: assets/externals ``` -`externals_exclude`{ #externals-exclude } +[`externals_exclude`](#+privacy.externals_exclude){ #+privacy.externals_exclude } : :octicons-milestone-24: Default: _none_ – This option allows to exclude certain external assets from processing by the privacy plugin, so they will @@ -440,7 +440,7 @@ If you've customized the [cookie consent] and added a `custom` cookie, the user will be prompted to accept your custom cookie. Use [additional JavaScript] to check whether the user accepted it: -=== ":octicons-file-code-16: docs/javascripts/consent.js" +=== ":octicons-file-code-16: `docs/javascripts/consent.js`" ``` js var consent = __md_get("__consent") @@ -449,7 +449,7 @@ check whether the user accepted it: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_javascript: diff --git a/docs/setup/extensions/python-markdown-extensions.md b/docs/setup/extensions/python-markdown-extensions.md index 5335ef90a..18644eb3c 100644 --- a/docs/setup/extensions/python-markdown-extensions.md +++ b/docs/setup/extensions/python-markdown-extensions.md @@ -37,7 +37,7 @@ Besides enabling the extension in `mkdocs.yml`, a MathJax configuration and the JavaScript runtime need to be included, which can be done with a few lines of [additional JavaScript]: -=== ":octicons-file-code-16: docs/javascripts/mathjax.js" +=== ":octicons-file-code-16: `docs/javascripts/mathjax.js`" ``` js window.MathJax = { @@ -58,7 +58,7 @@ of [additional JavaScript]: }) ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_javascript: @@ -154,7 +154,7 @@ markdown_extensions: The following configuration options are supported: -`mode`{ #critic-mode } +[`mode`](#+pymdownx.critic.mode){ #+pymdownx.critic.mode } : :octicons-milestone-24: Default: `view` – This option defines how the markup should be parsed, i.e. whether to just `view` all suggested changes, or @@ -237,7 +237,7 @@ markdown_extensions: The following configuration options are supported: -`emoji_index`{ #emoji-index } +[`emoji_index`](#+pymdownx.emoji.emoji_index){ #+pymdownx.emoji.emoji_index } : :octicons-milestone-24: Default: `emojione` – This option defines which set of emojis is used for rendering. Note that the use of `emojione` is not @@ -249,7 +249,7 @@ The following configuration options are supported: emoji_index: !!python/name:materialx.emoji.twemoji ``` -`emoji_generator`{ #emoji-generator } +[`emoji_generator`](#+pymdownx.emoji.emoji_generator){ #+pymdownx.emoji.emoji_generator } : :octicons-milestone-24: Default: `to_png` – This option defines how the resolved emoji or icon shortcode is render. Note that icons can only be @@ -261,7 +261,7 @@ The following configuration options are supported: emoji_generator: !!python/name:materialx.emoji.to_svg ``` -`options.custom_icons`{ #custom-icons } +[`options.custom_icons`](#+pymdownx.emoji.options.custom_icons){ #+pymdownx.emoji.options.custom_icons } : :octicons-milestone-24: Default: _none_ – This option allows to list folders with additional icon sets to be used in Markdown or `mkdocs.yml`, which is @@ -319,7 +319,7 @@ markdown_extensions: The following configuration options are supported: -`use_pygments`{ #highlight-use-pygments } +[`use_pygments`](#+pymdownx.highlight.use_pygments){ #+pymdownx.highlight.use_pygments } : :octicons-milestone-24: Default: `true` – This option allows to control whether highlighting should be carried out during build time using @@ -346,7 +346,7 @@ The following configuration options are supported: integrated with some [additional JavaScript] and an [additional style sheet] in `mkdocs.yml`: - === ":octicons-file-code-16: docs/javascripts/highlight.js" + === ":octicons-file-code-16: `docs/javascripts/highlight.js`" ``` js document$.subscribe(() => { @@ -354,7 +354,7 @@ The following configuration options are supported: }) ``` - === ":octicons-file-code-16: mkdocs.yml" + === ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_javascript: @@ -371,7 +371,7 @@ The following configuration options are supported: syntax highlighting using [Pygments], so they don't apply if `use_pygments` is set to `false`. -`auto_title`{ #highlight-auto-title } +[`auto_title`](#+pymdownx.highlight.auto_title){ #+pymdownx.highlight.auto_title } : :octicons-milestone-24: Default: `false` – This option will automatically add a [title] to all code blocks that shows the name of the language being @@ -383,7 +383,7 @@ The following configuration options are supported: auto_title: true ``` -`linenums`{ #highlight-linenums } +[`linenums`](#+pymdownx.highlight.linenums){ #+pymdownx.highlight.linenums } : :octicons-milestone-24: Default: `false` – This option will add line numbers to _all_ code blocks. If you wish to add line numbers to _some_, but not all @@ -397,7 +397,7 @@ The following configuration options are supported: linenums: true ``` -`linenums_style`{ #highlight-linenums-style } +[`linenums_style`](#+pymdownx.highlight.linenums_style){ #+pymdownx.highlight.linenums_style } : :octicons-milestone-24: Default: `table` – The [Highlight] extension provides three ways to add line numbers, two of which are supported by @@ -415,7 +415,7 @@ The following configuration options are supported: copying a code block to the clipboard. Thus, the usage of either `table` or `pymdownx-inline` is recommended. -`anchor_linenums`{ #highlight-anchor-linenums } +[`anchor_linenums`](#+pymdownx.highlight.anchor_linenums){ #+pymdownx.highlight.anchor_linenums } : [:octicons-tag-24: 8.1.0][anchor_linenums support] · :octicons-milestone-24: Default: `false` – If a code blocks contains line numbers, enabling this @@ -579,7 +579,7 @@ markdown_extensions: The following configuration options are supported: -`custom_fences`{ #superfences-custom-fences } +[`custom_fences`](#+pymdownx.superfences.custom_fences){ #+pymdownx.superfences.custom_fences } : :octicons-milestone-24: Default: _none_ – This option allows to define a handler for custom fences, e.g. to preserve the definitions of [Mermaid.js] @@ -643,11 +643,11 @@ markdown_extensions: The following configuration options are supported: -`alternate_style`{ #tabbed-alternate-style } +[`alternate_style`](#+pymdownx.tabbed.alternate_style){ #+pymdownx.tabbed:alternate_style } : [:octicons-tag-24: 7.3.1][Tabbed alternate support] · - :octicons-milestone-24: Default: `false` · :octicons-alert-24: Required – - This option enables the content tabs [alternate style], which has + :octicons-milestone-24: Default: `false` · :octicons-alert-24: __Required__ + – This option enables the content tabs [alternate style], which has [better behavior on mobile viewports], and is the only supported style: ``` yaml @@ -692,7 +692,7 @@ markdown_extensions: The following configuration options are supported: -`custom_checkbox`{ #tasklist-custom-checkbox } +[`custom_checkbox`](#+pymdownx.tasklist.custom_checkbox){ #+pymdownx.tasklist:custom_checkbox } : :octicons-milestone-24: Default: `false` · This option toggles the rendering style of checkboxes, replacing native checkbox styles with beautiful icons, @@ -704,7 +704,7 @@ The following configuration options are supported: custom_checkbox: true ``` -`clickable_checkbox`{ #tasklist-clickable-checkbox } +[`clickable_checkbox`](#+pymdownx.tasklist.clickable_checkbox){ #+pymdownx.tasklist:clickable_checkbox } : :octicons-milestone-24: Default: `false` · This option toggles whether checkboxes are clickable. As the state is not persisted, the use of this diff --git a/docs/setup/extensions/python-markdown.md b/docs/setup/extensions/python-markdown.md index bcd9c2ac7..d29bba97e 100644 --- a/docs/setup/extensions/python-markdown.md +++ b/docs/setup/extensions/python-markdown.md @@ -196,7 +196,7 @@ markdown_extensions: The following configuration options are supported: -`title`{ #toc-title } +[`title`](#+toc.title){ #+toc.title } : [:octicons-tag-24: 7.3.5][title support] · :octicons-milestone-24: Default: _automatically set_ – This option sets the @@ -210,7 +210,7 @@ The following configuration options are supported: title: On this page ``` -`permalink`{ #toc-permalink } +[`permalink`](#+toc.permalink){ #+toc.permalink } : :octicons-milestone-24: Default: `false` – This option adds an anchor link containing the paragraph symbol `¶` or another custom symbol at the end of @@ -233,7 +233,7 @@ The following configuration options are supported: permalink: ⚓︎ ``` -`permalink_title`{ #toc-permalink-title } +[`permalink_title`](#+toc.permalink_title){ #+toc.permalink_title } : :octicons-milestone-24: Default: `Permanent link` – This option sets the title of the anchor link which is shown on hover and read by screen readers. @@ -246,7 +246,7 @@ The following configuration options are supported: permalink_title: Anchor link to this section for reference ``` -`slugify`{ #toc-slugify } +[`slugify`](#+toc.slugify){ #+toc.slugify } : :octicons-milestone-24: Default: `headerid.slugify` – This option allows for customization of the slug function. For some languages, the default may not @@ -269,7 +269,7 @@ The following configuration options are supported: slugify: !!python/name:pymdownx.slugs.uslugify_cased ``` -`toc_depth`{ #toc-depth } +[`toc_depth`](#+toc.toc_depth){ #+toc.toc_depth } : :octicons-milestone-24: Default: `6` – Define the range of levels to be included in the table of contents. This may be useful for project diff --git a/docs/setup/setting-up-a-blog.md b/docs/setup/setting-up-a-blog.md new file mode 100644 index 000000000..8001956a4 --- /dev/null +++ b/docs/setup/setting-up-a-blog.md @@ -0,0 +1,1209 @@ +--- +template: overrides/main.html +status: new +--- + +# Setting up a blog + +Material for MkDocs makes it very easy to build a blog, either as a sidecar to +your documentation or standalone. Focus on your content while the engine does +all the heavy lifting, automatically generating [archive] and [category] +indexes, [post slugs], configurable [pagination] and more. + +--- + +__Check out our [blog], which is created with the new [built-in blog plugin]!__ + + [archive]: #archive + [category]: #categories + [post slugs]: #+blog.post_url_format + [pagination]: #pagination + [blog]: ../blog/index.md + +## Configuration + +### Built-in blog plugin + +[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } · +[:octicons-tag-24: insiders-4.23.0][Insiders] · +:octicons-cpu-24: Plugin · +:octicons-beaker-24: Experimental + +The built-in blog plugin adds support for building a blog from a folder of +posts, which are annotated with dates and other structured data. First, add the +following lines to `mkdocs.yml`: + +``` yaml +plugins: + - blog +``` + +> If you need to be able to build your documentation with and without +> [Insiders], please refer to the [built-in plugins] section to learn how +> shared configurations help to achieve this. + +By default, the built-in blog plugin assumes that your blog is hosted inside +the `blog` subfolder of your documentation ([this is configurable]). Next, +you need to create the following structure: + +``` sh +. +├─ docs/ +│ └─ blog/ +│ ├─ posts/ +│ └─ index.md +└─ mkdocs.yml +``` + +Since the built-in blog plugin auto-generates [archive] and [category] indexes, +it must know where to add those to the navigation. Thus, make sure to add a +`blog/index.md` file in `mkdocs.yml`: + +``` yaml +nav: + - Blog: + - blog/index.md # (1)! +``` + +1. Within this file, you can specify the title of your blog, which is then + picked up and used by the built-in blog plugin: + + ``` markdown + # Blog + ``` + +The following configuration options are available: + +[`enabled`](#+blog.enabled){ #+blog.enabled } + +: :octicons-milestone-24: Default: `true` – This option specifies whether + the plugin is enabled when building your project. If you want to switch + the plugin off, you can disable it with the following lines: + + ``` yaml + plugins: + - blog: + enabled: false + ``` + +[`blog_dir`](#+blog.blog_dir){ #+blog.blog_dir } + +: :octicons-milestone-24: Default: `blog` – This option specifies the folder + where your posts and metadata live. The name of the folder will also be + included in the generated URLs as a prefix to all blog-related pages. If + you want to build a standalone blog, change it to `.`: + + === "Subdirectory" + + ``` yaml + plugins: + - blog: + blog_dir: path/to/folder + ``` + + === "Standalone" + + ``` yaml + plugins: + - blog: + blog_dir: . + ``` + + The path must be defined relative to [`docs_dir`][docs_dir]. + +__The built-in blog plugin has dozens of options that allow for advanced +configuration. It's a good idea to [start writing your first post], and come +back here later for fine-tuning the output.__ + +--- + + [Insiders]: ../insiders/index.md + [built-in plugins]: ../insiders/getting-started.md#built-in-plugins + [this is configurable]: #+blog.blog_dir + [environment variable]: https://www.mkdocs.org/user-guide/configuration/#environment-variables + [docs_dir]: https://www.mkdocs.org/user-guide/configuration/#docs_dir + [start writing your first post]: #writing-your-first-post + +#### Posts + +The following configuration options are available for posts: + +[`post_date_format`](#+blog.post_date_format){ #+blog.post_date_format } + +: :octicons-milestone-24: Default: `long` – This option specifies the date + format that is used when posts are rendered. Under the hood, the + [built-in blog plugin] leverages [Babel] to render dates locale-aware using + the configured [site language]. The following formats are supported: + + === "Monday, January 31, 2022" + + ``` yaml + plugins: + - blog: + post_date_format: full + ``` + + === "January 31, 2022" + + ``` yaml + plugins: + - blog: + post_date_format: long + ``` + + === "Jan 31, 2022" + + ``` yaml + plugins: + - blog: + post_date_format: medium + ``` + + === "1/31/22" + + ``` yaml + plugins: + - blog: + post_date_format: short + ``` + + Note that depending on the [site language], formats might look different + for other languages. Additionally, [Babel] supports a [pattern syntax] + which allows for custom formats. + +[`post_url_date_format`](#+blog.post_url_date_format){ #+blog.post_url_date_format } + +: :octicons-milestone-24: Default: `YYYY/MM/dd` – This option specifies the + date format that is used in the URL of the post. The format string must + adhere to [Babel]'s [pattern syntax]. Some examples: + + === ":material-link: blog/2022/01/31/:material-dots-horizontal:/" + + ``` yaml + plugins: + - blog: + post_url_date_format: YYYY/MM/dd + ``` + + === ":material-link: blog/2022/01/:material-dots-horizontal:/" + + ``` yaml + plugins: + - blog: + post_url_date_format: YYYY/MM + ``` + + === ":material-link: blog/2022/:material-dots-horizontal:/" + + ``` yaml + plugins: + - blog: + post_url_date_format: YYYY + ``` + + If you want to exclude the date altogether, e.g. when your blog features + mostly evergreen content, you can remove the `date` placeholder from + the format string (see below). + +[`post_url_format`](#+blog.post_url_format){ #+blog.post_url_format } + +: :octicons-milestone-24: Default: `{date}/{slug}` – This option specifies the + format string that is used for the URL of the post. The following + placeholders are currently supported: + + - `date`: Replaced with the post's date, as configured in + [`post_url_date_format`][post_url_date_format]. + + - `slug`: Replaced with a slug generated from the post's title. + + === ":material-link: blog/2022/:material-dots-horizontal:/" + + ``` yaml + plugins: + - blog: + post_url_format: "{date}/{slug}" + ``` + + === ":material-link: blog/:material-dots-horizontal:/" + + ``` yaml + plugins: + - blog: + post_url_format: "{slug}" + ``` + + If you remove the `date` placeholder, make sure that post URLs don't + collide with other the URLs of other pages added to the blog section, as + this leads to undefined behavior. + +[`post_slugify`](#+blog.post_slugify){ #+blog.post_slugify } + +: :octicons-milestone-24: Default: `headerid.slugify` – This option specifies + which function to use for generating URL-compatible slugs from post titles. + [Python Markdown Extensions] comes with several Unicode-aware + slug functions which should be a good choice for non-ASCII languages: + + === "Unicode" + + ``` yaml + plugins: + - blog: + post_slugify: !!python/name:pymdownx.slugs.uslugify + ``` + + === "Unicode, case-sensitive" + + ``` yaml + plugins: + - blog: + post_slugify: !!python/name:pymdownx.slugs.uslugify_cased + ``` + +[`post_slugify_separator`](#+blog.post_slugify_separator){ #+blog.post_slugify_separator } + +: :octicons-milestone-24: Default: `-` – This option specifies the separator + which is used by the slug function. By default, a hyphen is used, but it can + be changed to any string, including the empty string: + + ``` yaml + plugins: + - blog: + post_slugify_separator: "-" + ``` + +[`post_excerpt`](#+blog.post_excerpt){ #+blog.post_excerpt } + +: :octicons-milestone-24: Default: `optional` – This option specifies whether + [post excerpts] should be considered being optional or required by the + [built-in blog plugin] when generating indexes. If excerpts are required, + the plugin terminates with an error if a post doesn't define an excerpt: + + === "Optional" + + ``` yaml + plugins: + - blog: + post_excerpt: optional + ``` + + === "Required" + + ``` yaml + plugins: + - blog: + post_excerpt: required + ``` + +[`post_excerpt_separator`](#+blog.post_excerpt_separator){ #+blog.post_excerpt_separator } + +: :octicons-milestone-24: Default: `` – This option specifies + the separator the [built-in blog plugin] will look for in a post' content + when generating [post excerpts]. All content after the separator is not + considered to be part of the excerpt. + +[`post_readtime`](#+blog.post_readtime){ #+blog.post_readtime } + +: :octicons-milestone-24: Default: `true` – This option specifies whether the + [built-in blog plugin] should compute the reading time of a post + automatically, which is then rendered in post excerpts, as well as in the + posts themselves. If you want to disable reading time computation, add: + + ``` yaml + plugins: + - blog: + post_readtime: false + ``` + +[`post_readtime_words_per_minute`](#+blog.post_readtime_words_per_minute){ #+blog.post_readtime_words_per_minute } + +: :octicons-milestone-24: Default: `265` – This option specifies the number + of words that a reader is expected to read per minute when computing the + reading time of a post. If you feel that estimation is not quite right, + you can fine-tune reading time computation with the following setting: + + ``` yaml + plugins: + - blog: + post_readtime_words_per_minute: 265 + ``` + + [built-in blog plugin]: #built-in-blog-plugin + [site language]: changing-the-language.md#site-language + [Babel]: https://pypi.org/project/Babel/ + [pattern syntax]: https://babel.pocoo.org/en/latest/dates.html#pattern-syntax + [post_url_date_format]: #+blog.post_url_date_format + [post excerpts]: #adding-an-excerpt + [Python Markdown Extensions]: https://facelessuser.github.io/pymdown-extensions/extras/slugs/ + +#### Archive + +The following configuration options are available for archive index generation: + +[`archive`](#+blog.archive){ #+blog.archive } + +: :octicons-milestone-24: Default: `true` – This option specifies whether the + [built-in blog plugin] should generate archive indexes. An archive indexes + shows all posts for a specific interval (e.g. year, month, etc.) in + reverse chronological order. If you want to disable archive index + generation, add: + + ``` yaml + plugins: + - blog: + archive: false + ``` + +[`archive_name`](#+blog.archive_name){ #+blog.archive_name } + +: :octicons-milestone-24: Default: _automatically set_ – This option specifies + the title of the archive section which the [built-in blog plugin] will + generate and add to the navigation. If this setting is omitted, it's + sourced from the translations, falling back to English. Change it with: + + ``` yaml + plugins: + - blog: + archive_name: Archive + ``` + +[`archive_date_format`](#+blog.archive_date_format){ #+blog.archive_date_format } + +: :octicons-milestone-24: Default: `YYYY` – This option specifies the date + format that is used when archive indexes are rendered. The format string + must adhere to [Babel]'s [pattern syntax]. Popular settings are: + + === "2022" + + ``` yaml + plugins: + - blog: + archive_date_format: YYYY + ``` + + === "January 2022" + + ``` yaml + plugins: + - blog: + archive_date_format: MMMM YYYY + ``` + +[`archive_url_date_format`](#+blog.archive_url_date_format){ #+blog.archive_url_date_format } + +: :octicons-milestone-24: Default: `YYYY` – This option specifies the date + format that is used in the archive index URL. The format string must adhere + to [Babel]'s [pattern syntax]. Some examples: + + === ":material-link: blog/archive/2022/" + + ``` yaml + plugins: + - blog: + archive_url_date_format: YYYY + ``` + + === ":material-link: blog/archive/2022/01/" + + ``` yaml + plugins: + - blog: + archive_url_date_format: YYYY/MM + ``` + +[`archive_url_format`](#+blog.archive_url_format){ #+blog.archive_url_format } + +: :octicons-milestone-24: Default: `archive/{date}` – This option specifies + the format string that is used for the URL of the archive index, and can + be used to localize the URL: + + === ":material-link: blog/archive/2022/" + + ``` yaml + plugins: + - blog: + archive_url_format: "archive/{date}" + ``` + + === ":material-link: blog/2022/" + + ``` yaml + plugins: + - blog: + archive_url_format: "{date}" + ``` + +#### Categories + +The following configurations options are available for category index generation: + +[`categories`](#+blog.categories){ #+blog.categories } + +: :octicons-milestone-24: Default: `true` – This option specifies whether the + [built-in blog plugin] should generate category indexes. A category indexes + shows all posts for a specific category in reverse chronological order. If + you want to disable category index generation, add: + + ``` yaml + plugins: + - blog: + categories: false + ``` + +[`categories_name`](#+blog.categories_name){ #+blog.categories_name } + +: :octicons-milestone-24: Default: _automatically set_ – This option specifies + the title of the category section which the [built-in blog plugin] will + generate and add to the navigation. If this setting is omitted, it's + sourced from the translations, falling back to English. Change it with: + + ``` yaml + plugins: + - blog: + categories_name: Categories + ``` + +[`categories_url_format`](#+blog.categories_url_format){ #+blog.categories_url_format } + +: :octicons-milestone-24: Default: `category/{slug}` – This option specifies + the format string that is used for the URL of the category index, and can + be used to localize the URL: + + === ":material-link: blog/category/:material-dots-horizontal:/" + + ``` yaml + plugins: + - blog: + categories_url_format: "category/{slug}" + ``` + + === ":material-link: blog/:material-dots-horizontal:/" + + ``` yaml + plugins: + - blog: + categories_url_format: "{slug}" + ``` + +[`categories_slugify`](#+blog.categories_slugify){ #+blog.categories_slugify } + +: :octicons-milestone-24: Default: `headerid.slugify` – This option specifies + which function to use for generating URL-compatible slugs from categories. + [Python Markdown Extensions] comes with several Unicode-aware + slug functions which should be a good choice for non-ASCII languages: + + === "Unicode" + + ``` yaml + plugins: + - blog: + categories_slugify: !!python/name:pymdownx.slugs.uslugify + ``` + + === "Unicode, case-sensitive" + + ``` yaml + plugins: + - blog: + categories_slugify: !!python/name:pymdownx.slugs.uslugify_cased + ``` + +[`categories_slugify_separator`](#+blog.categories_slugify_separator){ #+blog.categories_slugify_separator } + +: :octicons-milestone-24: Default: `-` – This option specifies the separator + which is used by the slug function. By default, a hyphen is used, but it can + be changed to any string, including the empty string: + + ``` yaml + plugins: + - blog: + categories_slugify_separator: "-" + ``` + +[`categories_allowed`](#+blog.categories_allowed){ #+blog.categories_allowed } + +: :octicons-milestone-24: Default: _none_ – This option specifies the + categories that are allowed to be used in posts. If this setting is omitted, + the [built-in blog plugin] will not check category names. Use this option to + define a list of categories in order to catch typos: + + ``` yaml + plugins: + - blog: + categories_allowed: + - General + - Search + - Performance + ``` + +#### Pagination + +The following configurations options are available for index pagination: + +[`pagination`](#+blog.pagination){ #+blog.pagination } + +: :octicons-milestone-24: Default: `true` – This option specifies whether the + [built-in blog plugin] should paginate the index. The index shows all posts + in reverse chronological order, which can be many. If you want to disable + index pagination, add: + + ``` yaml + plugins: + - blog: + pagination: false + ``` + +[`pagination_per_page`](#+blog.pagination_per_page){ #+blog.pagination_per_page } + +: :octicons-milestone-24: Default: `10` – This option specifies the number + of posts rendered on a single index page. If more posts are found, they are + assigned to a 2nd page, and so on. If you have large [post excerpts], it + might be a good idea to reduce the number of posts per page: + + ``` yaml + plugins: + - blog: + pagination_per_page: 5 + ``` + +[`pagination_url_format`](#+blog.pagination_url_format){ #+blog.pagination_url_format } + +: :octicons-milestone-24: Default: `page/{page}` – This option specifies + the format string that is used for the URL of the paginated index, and can + be used to localize the URL: + + === ":material-link: blog/page/n/" + + ``` yaml + plugins: + - blog: + pagination_url_format: "page/{page}" + ``` + + === ":material-link: blog/n/" + + ``` yaml + plugins: + - blog: + pagination_url_format: "{page}" + ``` + +[`pagination_template`](#+blog.pagination_template){ #+blog.pagination_template } + +: :octicons-milestone-24: Default: `~2~` – This option specifies the format + string that is provided to the [paginate] module, which allows to customize + how pagination is constructed. Popular choices: + + === "1 2 3 .. n" + + ``` yaml + plugins: + - blog: + pagination_template: "~2~" + ``` + + === "1 2 3 .. n :material-chevron-right: :material-chevron-double-right:" + + ``` yaml + plugins: + - blog: + pagination_template: "$link_first $link_previous ~2~ $link_next $link_last" + ``` + + === "1 :material-chevron-right:" + + ``` yaml + plugins: + - blog: + pagination_template: "$link_previous $page $link_next" + ``` + + The [paginate] module exposes the following placeholders: + + - `$first_page` – number of first reachable page + - `$last_page` – number of last reachable page + - `$page` – number of currently selected page + - `$page_count` – number of reachable pages + - `$items_per_page` – maximal number of items per page + - `$first_item` – index of first item on the current page + - `$last_item` – index of last item on the current page + - `$item_count` – total number of items + - `$link_first` – link to first page (unless this is first page) + - `$link_last` – link to last page (unless this is last page) + - `$link_previous` – link to previous page (unless this is first page) + - `$link_next` – link to next page (unless this is last page) + + [paginate]: https://pypi.org/project/paginate/ + +#### Authors + +The following configuration options are available for author info: + +[`authors`](#+blog.authors){ #+blog.authors } + +: :octicons-milestone-24: Default: `true` – This option specifies whether the + [built-in blog plugin] should generate author info. If it is enabled, the + plugin will look up authors in a file called `.authors.yml` and include + authors in indexes and in posts. If you want to disable this behavior, add: + + ``` yaml + plugins: + - blog: + authors: false + ``` + +[`authors_file`](#+blog.authors_file){ #+blog.authors_file } + +: :octicons-milestone-24: Default: `.authors.yml` – This option specifies the + name of the file where the authors for your posts resides. The default + settings assumes that the file is called `.authors.yml` (mind the `.` at + the beginning): + + ``` yaml + plugins: + - blog: + authors_file: .authors.yml + ``` + + The path must be defined relative to [`docs_dir`][docs_dir]. Also see the + section on [adding authors]. + +[`authors_in_excerpt`](#+blog.authors_in_excerpt){ #+blog.authors_in_excerpt } + +: :octicons-milestone-24: Default: `1` – This option specifies the number of + authors rendered in post excerpts. While each post may be written by + multiple authors, this setting allows to limit the display to just a few or + even a single author, or disable authors in excerpts altogether: + + === "Render up to 2 authors in excerpts" + + ``` yaml + plugins: + - blog: + authors_in_excerpt: 2 + ``` + + === "Disable authors in excerpts" + + ``` yaml + plugins: + - blog: + authors_in_excerpt: 0 + ``` + + [adding authors]: #adding-authors + +#### Drafts + +The following configuration options are available for drafts: + +[`draft`](#+blog.draft){ #+blog.draft } + +: :octicons-milestone-24: Default: `false` – This option specifies whether the + [built-in blog plugin] should also include posts marked as drafts when the + site is being built. Including draft posts might be desired in deploy + previews, which is why it exists in the first place: + + === "Render drafts" + + ``` yaml + plugins: + - blog: + draft: true + ``` + + === "Don't render drafts" + + ``` yaml + plugins: + - blog: + draft: false + ``` + +[`draft_on_serve`](#+blog.draft_on_serve){ #+blog.draft_on_serve } + +: :octicons-milestone-24: Default: `true` – This option specifies whether + posts marked as drafts should be included [when previewing your site] with + `mkdocs serve`. By default, drafts are rendered when previewing, but skipped + when the site is being built: + + ``` yaml + plugins: + - blog: + draft_on_serve: true + ``` + +[`draft_if_future_date`](#+blog.draft_if_future_date){ #+blog.draft_if_future_date } + +: :octicons-milestone-24: Default: `false` – This option specifies whether the + [built-in blog plugin] should mark posts with a future date as drafts. When + the date passed today, the post is automatically unmarked and included when + the site is being built: + + ``` yaml + plugins: + - blog: + draft_if_future_date: true + ``` + + [when previewing your site]: ../creating-your-site.md#previewing-as-you-write + +### RSS + +[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } · +[:octicons-tag-24: insiders+4.23.1][Insiders] · +[:octicons-cpu-24: Plugin][rss] + +The [built-in blog plugin] integrates seamlessly with the [RSS plugin][rss], +which provides a simple way to add an RSS feed to your blog (or to your whole +documentation). Install it with `pip`: + +``` +pip install mkdocs-rss-plugin +``` + +Then, add the following lines to `mkdocs.yml`: + +``` yaml +plugins: + - rss: + match_path: blog/posts/.* # (1)! + date_from_meta: + as_creation: date + categories: + - categories + - tags # (2)! +``` + +1. The RSS plugin allows to filter for URLs to be included in the feed. In + this example, only blog posts will be part of the feed. + +2. If you want to include a post's categories as well as its tags in the feed, + add both `categories` and `tags` here. + +The following configuration options are supported: + +[`enabled`](#+rss.enabled){ #+rss.enabled } + +: :octicons-milestone-24: Default: `true` – This option specifies whether + the plugin is enabled when building your project. If you want to switch + the plugin off, you can disable it with the following lines: + + ``` yaml + plugins: + - rss: + enabled: false + ``` + +[`match_path`](#+rss.match_path){ #+rss.match_path } + +: :octicons-milestone-24: Default: `.*` – This option specifies which + pages should be included in the feed. For example, to only include blog + posts in the feed, use the following regular expression: + + ``` yaml + plugins: + - rss: + match_path: blog/posts/.* + ``` + +[`date_from_meta`](#+rss.date_from_meta){ #+rss.date_from_meta } + +: :octicons-milestone-24: Default: _none_ – This option specifies which + front matter property should be used as a creation date of a page in the + feed. It's recommended to use the `date` property: + + ``` yaml + plugins: + - rss: + date_from_meta: + as_creation: date + ``` + +[`categories`](#+rss.categories){ #+rss.categories } + +: :octicons-milestone-24: Default: _none_ – This option specifies which + front matter properties are used as categories as part of the feed. If you + use [categories] and [tags], add both with the following lines: + + ``` yaml + plugins: + - rss: + categories: + - categories + - tags + ``` + +[`comments_path`](#+rss.comments_path){ #+rss.comments_path } + +: :octicons-milestone-24: Default: _none_ – This option specifies the anchor + at which comments for a post or page can be found. If you've integrated a + [comment system], add the following lines: + + ``` yaml + plugins: + - rss: + comments_path: "#__comments" + ``` + +Material for MkDocs will automatically add the [necessary metadata] to your site +which will make the RSS feed discoverable by browsers and feed readers. Note +that the [RSS plugin][rss] comes with several other configuration options. +For further information, see the [documentation]. + + [rss]: https://guts.github.io/mkdocs-rss-plugin/ + [categories]: #categories + [tags]: setting-up-tags.md#built-in-tags-plugin + [comment system]: adding-a-comment-system.md + [necessary metadata]: https://guts.github.io/mkdocs-rss-plugin/configuration/#integration + [theme extension]: ../customization.md + [documentation]: https://guts.github.io/mkdocs-rss-plugin/configuration/ + +## Usage + +### Writing your first post + +After you've successfully set up the [built-in blog plugin], it's time to write +your first post. The plugin doesn't assume any specific directory structure, so +you're completely free in how you organize your posts, as long as they are all +located inside the `posts` directory: + +``` sh +. +├─ docs/ +│ └─ blog/ +│ ├─ posts/ +│ │ └─ hello-world.md # (1)! +│ └─ index.md +└─ mkdocs.yml +``` + +1. If you'd like to arrange posts differently, you're free to do so. The URLs + are built from the format specified in [`post_url_format`][post slugs] and + the titles and dates of posts, no matter how they are organized + inside the `posts` directory. + +Create a new file called `hello-world.md` and add the following lines: + +``` yaml +--- +draft: true # (1)! +date: 2022-01-31 +categories: + - Hello + - World +--- + +# Hello world! +... +``` + +1. If you mark a post as a [draft], a red marker appears next to the post date + on index pages. When the site is built, drafts are not included in the + output. [This behavior can be changed], e.g. for rendering drafts when + building deploy previews. + +When you spin up the [live preview server], you should be greeted by your first +post! You'll also realize, that [archive] and [category] indexes have been +automatically generated for you. + + [draft]: #drafts + [This behavior can be changed]: #+blog.draft + [live preview server]: ../creating-your-site.md#previewing-as-you-write + +#### Adding an excerpt + +The blog index, as well as [archive] and [category] indexes can either list the +entire content of each post, or excerpts of posts. An excerpt can be created by +adding a `` separator after the first few paragraphs of a post: + +``` py +# Hello world! + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod +nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor +massa, nec semper lorem quam in massa. + + +... +``` + +When the [built-in blog plugin] generates all indexes, the content before the +[excerpt separator] is automatically extracted, allowing the user to start +reading a post before deciding to jump in. + + [excerpt separator]: #+blog.post_excerpt_separator + +#### Adding authors + +In order to add a little more personality to your posts, you can associate each +post with one or multiple [authors]. First, create the +[`.authors.yml`][authors_file] file in your blog directory, and add an author: + +``` yaml +squidfunk: + name: Martin Donath + description: Creator + avatar: https://github.com/squidfunk.png +``` + +The [`.authors.yml`][authors_file] file associates each author with an +identifier (in this example `squidfunk`), which can then be used in posts. +The following properties are available for each author: + +[`name`](#+blog.authors_file.name){ #+blog.authors_file.name } + +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – + This property must define a name for the author. The name is displayed in + the left sidebar of each post as part of the author info. + +[`description`](#+blog.authors_file.description){ #+blog.authors_file.description } + +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – + This property can be used to add a short description for the author, e.g. + the role or profession of the author, or any other title. + +[`avatar`](#+blog.authors_file.avatar){ #+blog.authors_file.avatar } + +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – + This property must point to a valid image URL, internal or external, and is + used as part of posts and excerpts as the author's avatar. + +Now, you can assign one or more authors to a post by referencing their +identifiers in the front matter of the Markdown file under the `authors` +property. For each author, a small profile is rendered in the left sidebar of +each post, as well as in post excerpts on index pages: + +``` yaml +--- +date: 2022-01-31 +authors: + - squidfunk + ... +--- + +# Hello world! +... +``` + + [authors]: #authors + [authors_file]: #+blog.authors_file + +#### Adding categories + +Categories are an excellent way for grouping your posts thematically on +dedicated index pages. This way, a user interested in a specific topic can +explore all of your posts on this topic. Make sure [categories] are enabled and +add them to the `categories` front matter property: + +``` yaml +--- +date: 2022-01-31 +categories: + - Hello + - World +--- + +# Hello world! +... +``` + +If you want to save yourself from typos when typing out categories, you can +define your desired categories in `mkdocs.yml` as part of the +[`categories_allowed`][categories_allowed] configuration option. The +[built-in blog plugin] will stop the build if a category is not found within +the list. + + [categories_allowed]: #+blog.categories_allowed + +#### Adding tags + +Besides [categories], the [built-in blog plugin] also integrates with the +[built-in tags plugin]. If you add tags in the `tags` front matter property as +part of a post, the post is linked from the [tags index]: + +``` yaml +--- +date: 2022-01-31 +tags: + - Foo + - Bar +--- + +# Hello world! +... +``` + +As usual, the tags are rendered above the main headline and posts are linked +on the tags index page, if configured. Note that posts are, as pages, only +linked with their titles. + + [built-in tags plugin]: setting-up-tags.md#built-in-tags-plugin + [tags index]: setting-up-tags.md#adding-a-tags-index + +#### Adding related links + +Related links offer the perfect way to prominently add a _further reading_ +section to your post that is included in the left sidebar, guiding the user to +other destinations of your documentation. Use the `links` front matter property +to add related links to a post: + +``` yaml +--- +date: 2022-01-31 +links: + - setup/setting-up-site-search.md#built-in-search-plugin + - insiders/index.md#how-to-become-a-sponsor +--- + +# Hello world! +... +``` + +You can use the exact same syntax as for the [`nav`][nav] section in +`mkdocs.yml`, which means you can set explicit titles for links, add external +links and even use nesting: + +``` yaml +--- +date: 2022-01-31 +links: + - setup/setting-up-site-search.md#built-in-search-plugin + - insiders/index.md#how-to-become-a-sponsor + - Nested section: + - External link: https://example.com + - setup/setting-up-site-search.md +--- + +# Hello world! +... +``` + +If you look closely, you'll realize that you can even use an anchor to link to +a specific section of a document, extending the possiblities of the [`nav`][nav] +syntax in `mkdocs.yml`. The [built-in blog plugin] resolves the anchor and sets +the title of the anchor as a subtitle of the related link. + +Note that all links must be relative to [`docs_dir`][docs_dir], as is also the case for the [`nav`][nav] setting. + + [nav]: https://www.mkdocs.org/user-guide/configuration/#nav + +#### Linking from and to posts + +While [post URLs][post slugs] are dynamically computed, the [built-in blog +plugin] ensures that all links from and to posts and a post's assets are +correct. If you want to link to a post, just use the path to the Markdown file +as a link reference (links must be relative): + +``` markdown +[Hello World!](blog/posts/hello-world.md) +``` + +Linking from a post to a page, e.g. the index, follows the same method: + +``` markdown +[Blog](../index.md) +``` + +All assets inside the `posts` directory are copied to the `blog/assets` folder +when the site is being built. Of course, you can also reference assets from +posts outside of the `posts` directory. The [built-in blog plugin] ensures that +all links are correct. + +#### Setting the reading time + +When [enabled], the [readtime] package is used to compute the expected reading +time of each post, which is the rendered as part of the post and post excerpt. +Nowadays, many blogs show reading times, which is why the [built-in blog plugin] +offers this capability as well. + +Sometimes, however, the computed reading time might not feel accurate, or +result in odd and unpleasant numbers. For this reason, reading time can be +overriden and explicitly set with the `readtime` front matter property for a +post: + +``` yaml +--- +date: 2022-01-31 +readtime: 15 +--- + +# Hello world! +... +``` + +This will disable automatic reading time computation. + + [readtime]: https://pypi.org/project/readtime/ + [enabled]: #+blog.post_readtime + +#### Setting defaults + +If you have a lot of posts, it might feel redundant to define all of the above +for each post. Luckily, the [built-in meta plugin] allows to set default front +matter properties per folder. You can group your posts by categories, or +authors, and add a `.meta.yml` file to set common properties: + +``` sh +. +├─ docs/ +│ └─ blog/ +│ ├─ posts/ +│ ├─ .meta.yml # (1)! +│ └─ index.md +└─ mkdocs.yml +``` + +1. As already noted, you can also place a `.meta.yml` file in nested folders + of the `posts` directory. This file then can contain any front matter that + is also valid in posts, e.g.: + + ``` yaml + authors: + - squidfunk + categories: + - Hello + - World + ``` + +Lists and dictionaries in `.meta.yml` files are merged and deduplicated with the +values defined for a post, which means you can define common properties in +`.meta.yml` and then add specific properties or overrides for each post. + + [built-in meta plugin]: ../reference/index.md#built-in-meta-plugin + +### Adding pages + +Besides posts, it's also possible to add static pages to your blog by listing +the pages in the [`nav`][nav] section of `mkdocs.yml`. All generated indexes +are included after the last specified page. For example, to add a page on the +authors of the blog, add the following to `mkdocs.yml`: + +``` yaml +nav: + - Blog: + - blog/index.md + - blog/authors.md + ... +``` + +## Customization + +### Overriding templates + +The [built-in blog plugin] is built on the same basis as Material for MkDocs, +which means you can override all templates used for the blog by using +[theme extension] as usual. + +The following templates are added by the [built-in blog plugin]: + +- [`blog.html`][blog.html] – Template for blog index +- [`blog-post.html`][blog-post.html] – Template for blog post +- [`blog-archive.html`][blog-archive.html] – Template for blog archive index +- [`blog-category.html`][blog-category.html] – Template for blog category index + + [theme extension]: ../customization.md#extending-the-theme + + [blog.html]: https://github.com/squidfunk/mkdocs-material-insiders/blob/master/src/blog.html + [blog-post.html]: https://github.com/squidfunk/mkdocs-material-insiders/blob/master/src/blog-post.html + [blog-archive.html]: https://github.com/squidfunk/mkdocs-material-insiders/blob/master/src/blog-archive.html + [blog-category.html]: https://github.com/squidfunk/mkdocs-material-insiders/blob/master/src/blog-category.html diff --git a/docs/setup/setting-up-navigation.md b/docs/setup/setting-up-navigation.md index d7e896c89..3f59faae8 100644 --- a/docs/setup/setting-up-navigation.md +++ b/docs/setup/setting-up-navigation.md @@ -6,19 +6,18 @@ template: overrides/main.html A clear and concise navigation structure is an important aspect of good project documentation. Material for MkDocs provides a multitude of options to configure -the behavior of navigational elements, including [tabs][navigation.tabs] and -[sections][navigation.sections], and its flag-ship feature: [instant loading] -[navigation.instant]. +the behavior of navigational elements, including [tabs] and [sections], and one +of its flag-ship feature: [instant loading]. - [navigation.tabs]: #navigation-tabs - [navigation.sections]: #navigation-sections - [navigation.instant]: #instant-loading + [tabs]: #navigation-tabs + [sections]: #navigation-sections + [instant loading]: #instant-loading ## Configuration ### Instant loading -[:octicons-tag-24: 5.0.0][navigation.instant support] · +[:octicons-tag-24: 5.0.0][Instant loading support] · :octicons-unlock-24: Feature flag When instant loading is enabled, clicks on all internal links will be @@ -36,7 +35,7 @@ are rebound automatically, i.e., __Material for MkDocs now behaves like a Single Page Application__. Now, the search index survives navigation, which is especially useful for large documentation sites. - [navigation.instant support]: https://github.com/squidfunk/mkdocs-material/releases/tag/5.2.0 + [Instant loading support]: https://github.com/squidfunk/mkdocs-material/releases/tag/5.2.0 [XHR]: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest ### Anchor tracking @@ -59,7 +58,7 @@ theme: ### Navigation tabs -[:octicons-tag-24: 1.1.0][navigation.tabs support] · +[:octicons-tag-24: 1.1.0][Navigation tabs support] · :octicons-unlock-24: Feature flag When tabs are enabled, top-level sections are rendered in a menu layer below @@ -81,21 +80,21 @@ theme: - navigation.tabs ``` -=== ":octicons-check-circle-fill-16: Enabled" +=== "With tabs" - [![navigation.tabs enabled]][navigation.tabs enabled] + [![Navigation tabs enabled]][Navigation tabs enabled] -=== ":octicons-skip-16: Disabled" +=== "Without" - [![navigation.tabs disabled]][navigation.tabs disabled] + [![Navigation tabs disabled]][Navigation tabs disabled] - [navigation.tabs support]: https://github.com/squidfunk/mkdocs-material/releases/tag/1.1.0 - [navigation.tabs enabled]: ../assets/screenshots/navigation-tabs.png - [navigation.tabs disabled]: ../assets/screenshots/navigation.png + [Navigation tabs support]: https://github.com/squidfunk/mkdocs-material/releases/tag/1.1.0 + [Navigation tabs enabled]: ../assets/screenshots/navigation-tabs.png + [Navigation tabs disabled]: ../assets/screenshots/navigation.png #### Sticky navigation tabs -[:octicons-tag-24: 7.3.0][navigation.tabs.sticky support] · +[:octicons-tag-24: 7.3.0][Sticky navigation tabs support] · :octicons-unlock-24: Feature flag When sticky tabs are enabled, navigation tabs will lock below the header and @@ -109,21 +108,21 @@ theme: - navigation.tabs.sticky ``` -=== ":octicons-check-circle-fill-16: Enabled" +=== "With sticky tabs" - [![navigation.tabs.sticky enabled]][navigation.tabs.sticky enabled] + [![Sticky navigation tabs enabled]][Sticky navigation tabs enabled] -=== ":octicons-skip-16: Disabled" +=== "Without" - [![navigation.tabs.sticky disabled]][navigation.tabs.sticky disabled] + [![Sticky navigation tabs disabled]][Sticky navigation tabs disabled] - [navigation.tabs.sticky support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.3.0 - [navigation.tabs.sticky enabled]: ../assets/screenshots/navigation-tabs-sticky.png - [navigation.tabs.sticky disabled]: ../assets/screenshots/navigation-tabs-collapsed.png + [Sticky navigation tabs support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.3.0 + [Sticky navigation tabs enabled]: ../assets/screenshots/navigation-tabs-sticky.png + [Sticky navigation tabs disabled]: ../assets/screenshots/navigation-tabs-collapsed.png ### Navigation sections -[:octicons-tag-24: 6.2.0][navigation.sections support] · +[:octicons-tag-24: 6.2.0][Navigation sections support] · :octicons-unlock-24: Feature flag When sections are enabled, top-level sections are rendered as groups in the @@ -136,26 +135,25 @@ theme: - navigation.sections ``` -=== ":octicons-check-circle-fill-16: Enabled" +=== "With sections" - [![navigation.sections enabled]][navigation.sections enabled] + [![Navigation sections enabled]][Navigation sections enabled] -=== ":octicons-skip-16: Disabled" +=== "Without" - [![navigation.sections disabled]][navigation.sections disabled] + [![Navigation sections disabled]][Navigation sections disabled] - [navigation.sections support]: https://github.com/squidfunk/mkdocs-material/releases/tag/6.2.0 - [navigation.sections enabled]: ../assets/screenshots/navigation-sections.png - [navigation.sections disabled]: ../assets/screenshots/navigation.png + [Navigation sections support]: https://github.com/squidfunk/mkdocs-material/releases/tag/6.2.0 + [Navigation sections enabled]: ../assets/screenshots/navigation-sections.png + [Navigation sections disabled]: ../assets/screenshots/navigation.png -Both feature flags, [`navigation.tabs`][navigation.tabs] and -[`navigation.sections`][navigation.sections], can be combined with each other. -If both feature flags are enabled, sections are rendered for level 2 navigation -items. +Both feature flags, [`navigation.tabs`][tabs] and +[`navigation.sections`][sections], can be combined with each other. If both +feature flags are enabled, sections are rendered for level 2 navigation items. ### Navigation expansion -[:octicons-tag-24: 6.2.0][navigation.expand support] · +[:octicons-tag-24: 6.2.0][Navigation expansion support] · :octicons-unlock-24: Feature flag When expansion is enabled, the left sidebar will expand all collapsible @@ -168,17 +166,17 @@ theme: - navigation.expand ``` -=== ":octicons-check-circle-fill-16: Enabled" +=== "With expansion" - [![navigation.expand enabled]][navigation.expand enabled] + [![Navigation expansion enabled]][Navigation expansion enabled] -=== ":octicons-skip-16: Disabled" +=== "Without" - [![navigation.expand disabled]][navigation.expand disabled] + [![Navigation expansion disabled]][Navigation expansion disabled] - [navigation.expand support]: https://github.com/squidfunk/mkdocs-material/releases/tag/6.2.0 - [navigation.expand enabled]: ../assets/screenshots/navigation-expand.png - [navigation.expand disabled]: ../assets/screenshots/navigation.png + [Navigation expansion support]: https://github.com/squidfunk/mkdocs-material/releases/tag/6.2.0 + [Navigation expansion enabled]: ../assets/screenshots/navigation-expand.png + [Navigation expansion disabled]: ../assets/screenshots/navigation.png ### Navigation pruning @@ -209,7 +207,7 @@ page in that section (or the section index page). ### Section index pages -[:octicons-tag-24: 7.3.0][navigation.indexes support] · +[:octicons-tag-24: 7.3.0][Section index pages support] · :octicons-unlock-24: Feature flag When section index pages are enabled, documents can be directly attached to @@ -225,13 +223,13 @@ theme: 1. This feature flag is not compatible with [`toc.integrate`][toc.integrate], as sections cannot host the table of contents due to missing space. -=== ":octicons-check-circle-fill-16: Enabled" +=== "With section index pages" - [![navigation.indexes enabled]][navigation.indexes enabled] + [![Section index pages enabled]][Section index pages enabled] -=== ":octicons-skip-16: Disabled" +=== "Without" - [![navigation.indexes disabled]][navigation.indexes disabled] + [![Section index pages disabled]][Section index pages disabled] In order to link a page to a section, create a new document with the name `index.md` in the respective folder, and add it to the beginning of your @@ -246,9 +244,9 @@ nav: - Page n: section/page-n.md ``` - [navigation.indexes support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.3.0 - [navigation.indexes enabled]: ../assets/screenshots/navigation-index-on.png - [navigation.indexes disabled]: ../assets/screenshots/navigation-index-off.png + [Section index pages support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.3.0 + [Section index pages enabled]: ../assets/screenshots/navigation-index-on.png + [Section index pages disabled]: ../assets/screenshots/navigation-index-off.png [toc.integrate]: #navigation-integration ### Table of contents @@ -273,7 +271,7 @@ theme: #### Navigation integration -[:octicons-tag-24: 6.2.0][toc.integrate support] · +[:octicons-tag-24: 6.2.0][Navigation integration support] · :octicons-unlock-24: Feature flag When navigation integration for the [table of contents] is enabled, it is always @@ -290,23 +288,23 @@ theme: [`navigation.indexes`][navigation.indexes], as sections cannot host the table of contents due to missing space. -=== ":octicons-check-circle-fill-16: Enabled" +=== "With navigation integration" - [![toc.integrate enabled]][toc.integrate enabled] + [![Navigation integration enabled]][Navigation integration enabled] -=== ":octicons-skip-16: Disabled" +=== "Without" - [![toc.integrate disabled]][toc.integrate disabled] + [![Navigation integration disabled]][Navigation integration disabled] [table of contents]: extensions/python-markdown.md#table-of-contents - [toc.integrate support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.3.0 - [toc.integrate enabled]: ../assets/screenshots/toc-integrate.png - [toc.integrate disabled]: ../assets/screenshots/navigation-tabs.png + [Navigation integration support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.3.0 + [Navigation integration enabled]: ../assets/screenshots/toc-integrate.png + [Navigation integration disabled]: ../assets/screenshots/navigation-tabs.png [navigation.indexes]: #section-index-pages ### Back-to-top button -[:octicons-tag-24: 7.1.0][navigation.top support] · +[:octicons-tag-24: 7.1.0][Back-to-top button support] · :octicons-unlock-24: Feature flag A back-to-top button can be shown when the user, after scrolling down, starts @@ -319,7 +317,7 @@ theme: - navigation.top ``` - [navigation.top support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.1.0 + [Back-to-top button support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.1.0 ## Usage @@ -329,7 +327,7 @@ The navigation and/or table of contents sidebars can be hidden for a document with the front matter `hide` property. Add the following lines at the top of a Markdown file: -``` sh +``` yaml --- hide: - navigation @@ -342,19 +340,19 @@ hide: === "Hide navigation" - [![hide.navigation enabled]][hide.navigation enabled] + [![Hide navigation enabled]][Hide navigation enabled] === "Hide table of contents" - [![hide.toc enabled]][hide.toc enabled] + [![Hide table of contents enabled]][Hide table of contents enabled] === "Hide both" - [![hide.* enabled]][hide.* enabled] + [![Hide both enabled]][Hide both enabled] - [hide.navigation enabled]: ../assets/screenshots/hide-navigation.png - [hide.toc enabled]: ../assets/screenshots/hide-toc.png - [hide.* enabled]: ../assets/screenshots/hide-navigation-toc.png + [Navigation hiding enabled]: ../assets/screenshots/hide-navigation.png + [Hide table of contents enabled]: ../assets/screenshots/hide-toc.png + [Hide both enabled]: ../assets/screenshots/hide-navigation-toc.png ## Customization @@ -363,7 +361,7 @@ hide: Material for MkDocs includes several keyboard shortcuts that make it possible to navigate your project documentation via keyboard. There are two modes: -`search`{ #mode-search } +[`search`](#mode:search){ #mode:search } : This mode is active when the _search is focused_. It provides several key bindings to make search accessible and navigable via keyboard: @@ -372,7 +370,7 @@ to navigate your project documentation via keyboard. There are two modes: * ++esc++ , ++tab++ : close search dialog * ++enter++ : follow selected result -`global`{ #mode-global } +[`global`](#mode:global){ #mode:global } : This mode is active when _search is not focussed_ and when there's no other focussed element that is susceptible to keyboard input. The following keys @@ -386,7 +384,7 @@ Let's say you want to bind some action to the ++x++ key. By using [additional JavaScript], you can subscribe to the `keyboard$` observable and attach your custom event listener: -=== ":octicons-file-code-16: docs/javascripts/shortcuts.js" +=== ":octicons-file-code-16: `docs/javascripts/shortcuts.js`" ``` js keyboard$.subscribe(function(key) { @@ -401,7 +399,7 @@ your custom event listener: underlying event, so the keypress will not propagate further and touch other event listeners. -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_javascript: @@ -421,7 +419,7 @@ stretch to the entire available space. This can easily be achieved with an [additional style sheet] and a few lines of CSS: -=== ":octicons-file-code-16: docs/stylesheets/extra.css" +=== ":octicons-file-code-16: `docs/stylesheets/extra.css`" ``` css .md-grid { @@ -438,7 +436,7 @@ of CSS: } ``` -=== ":octicons-file-code-16: mkdocs.yml" +=== ":octicons-file-code-16: `mkdocs.yml`" ``` yaml extra_css: diff --git a/docs/setup/setting-up-site-analytics.md b/docs/setup/setting-up-site-analytics.md index 5f0511796..6bfb4edd9 100644 --- a/docs/setup/setting-up-site-analytics.md +++ b/docs/setup/setting-up-site-analytics.md @@ -10,7 +10,7 @@ MkDocs natively integrates with [Google Analytics] and offers a customizable [cookie consent] and a [feedback widget]. [Google Analytics]: https://developers.google.com/analytics - [cookie consent]: ensuring-data-privacy.md#native-cookie-consent + [cookie consent]: ensuring-data-privacy.md#cookie-consent [feedback widget]: #was-this-page-helpful ## Configuration @@ -70,7 +70,7 @@ following lines to `mkdocs.yml`: ### Was this page helpful? -[:octicons-tag-24: 8.4.0][feedback support] · +[:octicons-tag-24: 8.4.0][Was this page helpful? support] · :octicons-milestone-24: Default: _none_ · :octicons-beaker-24: Experimental @@ -169,9 +169,9 @@ integrated with the [cookie consent] feature[^1]. The following properties are available for each rating: -`icon`{ #feedback-rating-icon } +[`icon`](#+analytics.feedback.ratings.icon){ #+analytics.feedback.ratings.icon } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – This property must point to a valid icon path referencing [any icon bundled with the theme][custom icons], or the build will not succeed. Some popular combinations: @@ -180,24 +180,24 @@ The following properties are available for each rating: * :material-thumb-up-outline: + :material-thumb-down-outline: – `material/thumb-up-outline` + `material/thumb-down-outline` * :material-heart: + :material-heart-broken: – `material/heart` + `material/heart-broken` -`name`{ #feedback-rating-name } +[`name`](#+analytics.feedback.ratings.name){ #+analytics.feedback.ratings.name } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – The value of this property is shown on user interaction (i.e. keyboard focus or mouse hover), explaining the meaning of the rating behind the icon. -`data`{ #feedback-rating-data } +[`data`](#+analytics.feedback.ratings.data){ #+analytics.feedback.ratings.data } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – The value of this property is sent as a data value with the custom event that is transmitted to Google Analytics[^2] (or any custom integration). [^2]: Note that for Google Analytics, the data value must be an integer. -`note`{ #feedback-rating-note } +[`note`](#+analytics.feedback.ratings.note){ #+analytics.feedback.ratings.note } -: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required – +: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: __Required__ – The value of this property is shown after the user selected the rating. It may contain arbitrary HTML tags, which is especially useful to ask the user to provide more detailed feedback for the current page through a form. @@ -221,7 +221,7 @@ The following properties are available for each rating: An alternative to GitHub issues is [Google Forms]. - [feedback support]: https://github.com/squidfunk/mkdocs-material/releases/tag/8.4.0 + [Was this page helpful? support]: https://github.com/squidfunk/mkdocs-material/releases/tag/8.4.0 [feedback widget]: #feedback [analytics]: #google-analytics [feedback report]: ../assets/screenshots/feedback-report.png @@ -235,7 +235,7 @@ The following properties are available for each rating: The [feedback widget] can be hidden for a document with the front matter `hide` property. Add the following lines at the top of a Markdown file: -``` sh +``` yaml --- hide: - feedback @@ -254,7 +254,7 @@ JavaScript-based tracking solution, just follow the guide on [theme extension] and create a new partial in the `overrides` folder. The name of the partial is used to configure the custom integration via `mkdocs.yml`: -=== ":octicons-file-code-16: overrides/partials/integrations/analytics/custom.html" +=== ":octicons-file-code-16: `overrides/partials/integrations/analytics/custom.html`" ``` html