Skip to content

Commit 0885d3b

Browse files
committed
Deployed 13d696d with MkDocs version: 1.2.3
1 parent dab2e60 commit 0885d3b

4 files changed

Lines changed: 134 additions & 29 deletions

File tree

recipes/index.html

Lines changed: 112 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,13 @@
599599
Generate a literate navigation file
600600
</a>
601601

602+
</li>
603+
604+
<li class="md-nav__item">
605+
<a href="#bind-pages-to-sections-themselves" class="md-nav__link">
606+
Bind pages to sections themselves
607+
</a>
608+
602609
</li>
603610

604611
</ul>
@@ -961,6 +968,13 @@
961968
Generate a literate navigation file
962969
</a>
963970

971+
</li>
972+
973+
<li class="md-nav__item">
974+
<a href="#bind-pages-to-sections-themselves" class="md-nav__link">
975+
Bind pages to sections themselves
976+
</a>
977+
964978
</li>
965979

966980
</ul>
@@ -1058,11 +1072,18 @@ <h3 id="generate-pages-on-the-fly">Generate pages on-the-fly<a class="headerlink
10581072
<span class="n">doc_path</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">relative_to</span><span class="p">(</span><span class="s2">&quot;src&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">with_suffix</span><span class="p">(</span><span class="s2">&quot;.md&quot;</span><span class="p">)</span> <span class="c1"># (3)</span>
10591073
<span class="n">full_doc_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&quot;reference&quot;</span><span class="p">,</span> <span class="n">doc_path</span><span class="p">)</span> <span class="c1"># (4)</span>
10601074

1061-
<span class="k">with</span> <span class="n">mkdocs_gen_files</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">full_doc_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fd</span><span class="p">:</span> <span class="c1"># (5)</span>
1062-
<span class="n">identifier</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">module_path</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="c1"># (6)</span>
1063-
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;::: &quot;</span> <span class="o">+</span> <span class="n">identifier</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="n">fd</span><span class="p">)</span> <span class="c1"># (7)</span>
1075+
<span class="n">parts</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">module_path</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span>
1076+
1077+
<span class="k">if</span> <span class="n">parts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;__init__&quot;</span><span class="p">:</span> <span class="c1"># (5)</span>
1078+
<span class="n">parts</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
1079+
<span class="k">elif</span> <span class="n">parts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
1080+
<span class="k">continue</span>
1081+
1082+
<span class="k">with</span> <span class="n">mkdocs_gen_files</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">full_doc_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fd</span><span class="p">:</span> <span class="c1"># (6)</span>
1083+
<span class="n">identifier</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="c1"># (7)</span>
1084+
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;::: &quot;</span> <span class="o">+</span> <span class="n">identifier</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="n">fd</span><span class="p">)</span> <span class="c1"># (8)</span>
10641085

1065-
<span class="n">mkdocs_gen_files</span><span class="o">.</span><span class="n">set_edit_path</span><span class="p">(</span><span class="n">full_doc_path</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span> <span class="c1"># (8)</span>
1086+
<span class="n">mkdocs_gen_files</span><span class="o">.</span><span class="n">set_edit_path</span><span class="p">(</span><span class="n">full_doc_path</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span> <span class="c1"># (9)</span>
10661087
</code></pre></div>
10671088
<ol>
10681089
<li>Here we recursively list all <code>.py</code> files, but you can adapt the code to list
@@ -1072,6 +1093,8 @@ <h3 id="generate-pages-on-the-fly">Generate pages on-the-fly<a class="headerlink
10721093
<li>This is the relative path to the Markdown page.</li>
10731094
<li>This is the absolute path to the Markdown page. Here we put all reference pages
10741095
into a <code>reference</code> folder.</li>
1096+
<li>This part is only relevant for Python modules. We skip <code>__main__</code> modules and
1097+
remove <code>__init__</code> from the module parts as it's implicit during imports.</li>
10751098
<li>Magic! Add the file to MkDocs pages, without actually writing it in the docs folder.</li>
10761099
<li>Build the autodoc identifier. Here we document Python modules, so the identifier
10771100
is a dot-separated path, like <code>project.lorem</code>.</li>
@@ -1101,7 +1124,7 @@ <h3 id="generate-pages-on-the-fly">Generate pages on-the-fly<a class="headerlink
11011124
<h3 id="generate-a-literate-navigation-file">Generate a literate navigation file<a class="headerlink" href="#generate-a-literate-navigation-file" title="Permanent link">¤</a></h3>
11021125
<p>mkdocs-gen-files is able to generate a literate navigation file.
11031126
But to make use of it, we will need an additional plugin:
1104-
<a href="https://pypi.org/project/mkdocs-literate-nav/">mkdocs-literate-nav</a>.
1127+
<a href="https://github.com/oprypin/mkdocs-literate-nav">mkdocs-literate-nav</a>.
11051128
This plugin allows to specify the whole navigation, or parts of it,
11061129
into Markdown pages, as plain Markdown lists.
11071130
We use it here to specify the navigation for the code reference pages.</p>
@@ -1132,10 +1155,17 @@ <h3 id="generate-a-literate-navigation-file">Generate a literate navigation file
11321155
<span class="n">doc_path</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">relative_to</span><span class="p">(</span><span class="s2">&quot;src&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">with_suffix</span><span class="p">(</span><span class="s2">&quot;.md&quot;</span><span class="p">)</span>
11331156
<span class="n">full_doc_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&quot;reference&quot;</span><span class="p">,</span> <span class="n">doc_path</span><span class="p">)</span>
11341157

1135-
<span class="hll"> <span class="n">nav</span><span class="p">[</span><span class="n">module_path</span><span class="o">.</span><span class="n">parts</span><span class="p">]</span> <span class="o">=</span> <span class="n">doc_path</span> <span class="c1"># (1)</span>
1158+
<span class="n">parts</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">module_path</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span>
1159+
1160+
<span class="k">if</span> <span class="n">parts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;__init__&quot;</span><span class="p">:</span>
1161+
<span class="n">parts</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
1162+
<span class="k">elif</span> <span class="n">parts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
1163+
<span class="k">continue</span>
1164+
1165+
<span class="hll"> <span class="n">nav</span><span class="p">[</span><span class="n">parts</span><span class="p">]</span> <span class="o">=</span> <span class="n">doc_path</span> <span class="c1"># (1)</span>
11361166
</span>
11371167
<span class="k">with</span> <span class="n">mkdocs_gen_files</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">full_doc_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fd</span><span class="p">:</span>
1138-
<span class="n">ident</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">module_path</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span>
1168+
<span class="n">ident</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span>
11391169
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;::: &quot;</span> <span class="o">+</span> <span class="n">ident</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="n">fd</span><span class="p">)</span>
11401170

11411171
<span class="n">mkdocs_gen_files</span><span class="o">.</span><span class="n">set_edit_path</span><span class="p">(</span><span class="n">full_doc_path</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
@@ -1160,6 +1190,81 @@ <h3 id="generate-a-literate-navigation-file">Generate a literate navigation file
11601190
<li>Note the trailing slash! It is needed so that <code>mkdocs-literate-nav</code> knows
11611191
it has to look for a <code>SUMMARY.md</code> file in that folder.</li>
11621192
</ol>
1193+
<p>At this point, we should be able to see the tree of our modules
1194+
in the navigation.</p>
1195+
<h3 id="bind-pages-to-sections-themselves">Bind pages to sections themselves<a class="headerlink" href="#bind-pages-to-sections-themselves" title="Permanent link">¤</a></h3>
1196+
<p>There's a last improvement we can do.
1197+
With the current script, sections, corresponding to folders,
1198+
will expand or collapse when you click on them,
1199+
revealing <code>__init__</code> modules under them
1200+
(or equivalent modules in other languages, if relevant).
1201+
Since we are documenting a public API, and given users
1202+
never explicitely import <code>__init__</code> modules, it would be nice
1203+
if we could get rid of them and instead render their documentation
1204+
inside the section itself.</p>
1205+
<p>Well, this is possible thanks to a third plugin:
1206+
<a href="https://github.com/oprypin/mkdocs-section-index">mkdocs-section-index</a>.</p>
1207+
<p>Update the script like this:</p>
1208+
<div class="highlight"><span class="filename">docs/gen_ref_pages.py</span><pre><span></span><code><span class="sd">&quot;&quot;&quot;Generate the code reference pages and navigation.&quot;&quot;&quot;</span>
1209+
1210+
<span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>
1211+
1212+
<span class="kn">import</span> <span class="nn">mkdocs_gen_files</span>
1213+
1214+
<span class="n">nav</span> <span class="o">=</span> <span class="n">mkdocs_gen_files</span><span class="o">.</span><span class="n">Nav</span><span class="p">()</span>
1215+
1216+
<span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">Path</span><span class="p">(</span><span class="s2">&quot;src&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">rglob</span><span class="p">(</span><span class="s2">&quot;*.py&quot;</span><span class="p">)):</span>
1217+
<span class="n">module_path</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">relative_to</span><span class="p">(</span><span class="s2">&quot;src&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">with_suffix</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
1218+
<span class="n">doc_path</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">relative_to</span><span class="p">(</span><span class="s2">&quot;src&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">with_suffix</span><span class="p">(</span><span class="s2">&quot;.md&quot;</span><span class="p">)</span>
1219+
<span class="n">full_doc_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&quot;reference&quot;</span><span class="p">,</span> <span class="n">doc_path</span><span class="p">)</span>
1220+
1221+
<span class="n">parts</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">module_path</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span>
1222+
1223+
<span class="k">if</span> <span class="n">parts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;__init__&quot;</span><span class="p">:</span>
1224+
<span class="n">parts</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
1225+
<span class="hll"> <span class="n">doc_path</span> <span class="o">=</span> <span class="n">doc_path</span><span class="o">.</span><span class="n">with_name</span><span class="p">(</span><span class="s2">&quot;index.md&quot;</span><span class="p">)</span>
1226+
</span><span class="hll"> <span class="n">full_doc_path</span> <span class="o">=</span> <span class="n">full_doc_path</span><span class="o">.</span><span class="n">with_name</span><span class="p">(</span><span class="s2">&quot;index.md&quot;</span><span class="p">)</span>
1227+
</span> <span class="k">elif</span> <span class="n">parts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
1228+
<span class="k">continue</span>
1229+
1230+
<span class="n">nav</span><span class="p">[</span><span class="n">parts</span><span class="p">]</span> <span class="o">=</span> <span class="n">doc_path</span>
1231+
1232+
<span class="k">with</span> <span class="n">mkdocs_gen_files</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">full_doc_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fd</span><span class="p">:</span>
1233+
<span class="n">ident</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span>
1234+
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;::: &quot;</span> <span class="o">+</span> <span class="n">ident</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="n">fd</span><span class="p">)</span>
1235+
1236+
<span class="n">mkdocs_gen_files</span><span class="o">.</span><span class="n">set_edit_path</span><span class="p">(</span><span class="n">full_doc_path</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
1237+
1238+
<span class="k">with</span> <span class="n">mkdocs_gen_files</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;reference/SUMMARY.md&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">nav_file</span><span class="p">:</span> <span class="c1"># (2)</span>
1239+
<span class="n">nav_file</span><span class="o">.</span><span class="n">writelines</span><span class="p">(</span><span class="n">nav</span><span class="o">.</span><span class="n">build_literate_nav</span><span class="p">())</span> <span class="c1"># (3)</span>
1240+
</code></pre></div>
1241+
<p>And update your MkDocs configuration to list the plugin:</p>
1242+
<div class="highlight"><span class="filename">mkdocs.yml</span><pre><span></span><code><span class="nt">plugins</span><span class="p">:</span><span class="w"></span>
1243+
<span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">search</span><span class="w"></span>
1244+
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">gen-files</span><span class="p">:</span><span class="w"></span>
1245+
<span class="w"> </span><span class="nt">scripts</span><span class="p">:</span><span class="w"></span>
1246+
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docs/gen_ref_pages.py</span><span class="w"></span>
1247+
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">literate-nav</span><span class="p">:</span><span class="w"></span>
1248+
<span class="w"> </span><span class="nt">nav_file</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">SUMMARY.md</span><span class="w"></span>
1249+
<span class="hll"><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">section-index</span><span class="w"></span>
1250+
</span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">mkdocstrings</span><span class="p">:</span><span class="w"></span>
1251+
<span class="w"> </span><span class="nt">watch</span><span class="p">:</span><span class="w"></span>
1252+
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">src/project</span><span class="w"></span>
1253+
</code></pre></div>
1254+
<p>With this, <code>__init__</code> modules will be documented and bound to the sections
1255+
themselves, better reflecting our public API.</p>
1256+
<div class="admonition important">
1257+
<p class="admonition-title">Important</p>
1258+
<p>With the new Python handler, don't forget to hide submodules
1259+
when documenting a module, otherwise they will show up in sections:</p>
1260+
<div class="highlight"><span class="filename">mkdocs.yml</span><pre><span></span><code><span class="nt">plugins</span><span class="p">:</span><span class="w"></span>
1261+
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">mkdocstrings</span><span class="p">:</span><span class="w"></span>
1262+
<span class="w"> </span><span class="nt">handlers</span><span class="p">:</span><span class="w"></span>
1263+
<span class="w"> </span><span class="nt">python</span><span class="p">:</span><span class="w"></span>
1264+
<span class="w"> </span><span class="nt">rendering</span><span class="p">:</span><span class="w"></span>
1265+
<span class="w"> </span><span class="nt">show_submodules</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">no</span><span class="w"></span>
1266+
</code></pre></div>
1267+
</div>
11631268
<h2 id="prevent-selection-of-in-python-code-blocks">Prevent selection of <code>&gt;&gt;&gt;</code> in Python code blocks<a class="headerlink" href="#prevent-selection-of-in-python-code-blocks" title="Permanent link">¤</a></h2>
11641269
<p>To prevent the selection of <code>&gt;&gt;&gt;</code> in Python code blocks,
11651270
you can use the <code>pycon</code> syntax highlighting on your code block,

search/search_index.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)