<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Implementation on Docsy</title><link>https://deploy-preview-2791--docsydocs.netlify.app/fr/project/implementation/</link><description>Recent content in Implementation on Docsy</description><generator>Hugo</generator><language>fr</language><atom:link href="https://deploy-preview-2791--docsydocs.netlify.app/fr/project/implementation/index.xml" rel="self" type="application/rss+xml"/><item><title>Script loading</title><link>https://deploy-preview-2791--docsydocs.netlify.app/fr/project/implementation/script-loading/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2791--docsydocs.netlify.app/fr/project/implementation/script-loading/</guid><description>&lt;p&gt;Code-level notes for &lt;a href="https://github.com/google/docsy/blob/main/theme/layouts/_partials/scripts/plugins.html"&gt;&lt;code&gt;_partials/scripts/plugins.html&lt;/code&gt;&lt;/a&gt;, the loop
behind &lt;code&gt;params.docsy.plugins&lt;/code&gt;. For the architecture and ordering decisions, see
the &lt;a href="https://deploy-preview-2791--docsydocs.netlify.app/fr/project/design/script-loading/"&gt;design notes&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="registry-contract"&gt;Registry contract&lt;a class="td-heading-self-link" href="#registry-contract" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;params.docsy.plugins&lt;/code&gt; is a list of plugin entries:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;docsy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;NAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# resolves assets/js/plugins/NAME.js&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# optional; false skips the entry&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;defer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# optional; adds `defer` to the script tag&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pageGate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;FLAG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# optional; a .Page.Store flag name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{}&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# optional; reaches the module as @params&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;NAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# bare-name shorthand for { name: NAME }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Names are coerced to strings (&lt;code&gt;printf &amp;quot;%v&amp;quot;&lt;/code&gt;): YAML auto-types entries like
&lt;code&gt;name: 2048&lt;/code&gt;, and the loop must resolve the same asset path either way.&lt;/li&gt;
&lt;li&gt;Names are restricted to &lt;code&gt;^[A-Za-z0-9_-]+$&lt;/code&gt;: they address assets and partials
by path, so anything that could traverse outside the plugin namespaces is
refused with a warning (&lt;code&gt;docsy-plugin-name&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Registry order is emission order.&lt;/li&gt;
&lt;li&gt;With &lt;code&gt;pageGate&lt;/code&gt; set, the plugin is emitted only on pages carrying the named
&lt;code&gt;.Page.Store&lt;/code&gt; flag.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="theme-default-entries-and-legacy-aliases"&gt;Theme-default entries and legacy aliases&lt;a class="td-heading-self-link" href="#theme-default-entries-and-legacy-aliases" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The loop appends theme-default entries after the site-declared registry. A
site-declared entry of the same name supersedes its auto-registration but
&lt;strong&gt;inherits the default fields it leaves unset&lt;/strong&gt; (&lt;code&gt;pageGate&lt;/code&gt;, &lt;code&gt;defer&lt;/code&gt;); an
explicit value, &lt;code&gt;pageGate: ''&lt;/code&gt; included, always wins:&lt;/p&gt;</description></item><item><title>ScrollSpy patch</title><link>https://deploy-preview-2791--docsydocs.netlify.app/fr/project/implementation/scrollspy-patch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-2791--docsydocs.netlify.app/fr/project/implementation/scrollspy-patch/</guid><description>&lt;p&gt;&lt;span class="badge bg-info text-bg-info"&gt;As of Docsy 0.13.0&lt;/span&gt;&lt;/p&gt;
&lt;div class="td-alert td-alert--md alert alert-info" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;Summary&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;Docsy 0.13.0 includes a &lt;strong&gt;runtime patch&lt;/strong&gt; for Bootstrap &lt;a href="https://getbootstrap.com/docs/5.3/components/scrollspy/"&gt;ScrollSpy&lt;/a&gt; that
fixes a bug affecting pages with heading IDs that aren&amp;rsquo;t valid CSS selectors.
The patch ensures that &lt;a href="https://deploy-preview-2791--docsydocs.netlify.app/fr/docs/content/navigation/#toc-entry-tracking"&gt;active TOC entry
tracking&lt;/a&gt; works reliably for all
pages.&lt;/p&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="problem"&gt;Problem&lt;a class="td-heading-self-link" href="#problem" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As of Bootstrap 5.3.8 (the version used by Docsy 0.13.0), &lt;a href="https://getbootstrap.com/docs/5.3/components/scrollspy/"&gt;ScrollSpy&lt;/a&gt; fails if
a page contains a heading ID that is not also a valid CSS &lt;code&gt;#&lt;/code&gt; selector. This can
happen, for example, if a heading ID starts with a digit. For technical details
about this bug, see &lt;a href="https://github.com/google/docsy/issues/2329"&gt;#2329&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>