<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://fallout-wiki.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AData%2FInventaire</id>
	<title>Module:Data/Inventaire - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://fallout-wiki.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AData%2FInventaire"/>
	<link rel="alternate" type="text/html" href="https://fallout-wiki.com/index.php?title=Module:Data/Inventaire&amp;action=history"/>
	<updated>2026-08-15T13:41:59Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://fallout-wiki.com/index.php?title=Module:Data/Inventaire&amp;diff=212578&amp;oldid=prev</id>
		<title>Kims le 10 août 2026 à 18:46</title>
		<link rel="alternate" type="text/html" href="https://fallout-wiki.com/index.php?title=Module:Data/Inventaire&amp;diff=212578&amp;oldid=prev"/>
		<updated>2026-08-10T18:46:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 10 août 2026 à 20:46&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l159&quot;&gt;Ligne 159 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 159 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		-- donc numériquement — ce qui n&amp;#039;a de sens que parce que le schéma 1&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		-- donc numériquement — ce qui n&amp;#039;a de sens que parce que le schéma 1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		-- ne connaissait que des listes numérotées.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		-- ne connaissait que des listes numérotées.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		local &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cles &lt;/del&gt;= {}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		--&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		for cle in pairs( donnees.listes ) do&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		-- ON GARDE LA VALEUR AVEC LA CLÉ, ON NE LA RECHERCHE PAS APRÈS COUP.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			table.insert( &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cles&lt;/del&gt;, tostring( cle ) )&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		-- mw.loadJsonData convertit en NOMBRES les clés d&#039;objet JSON qui sont&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		-- des entiers : « &quot;21&quot;: {…} » devient la clé 21, pas &quot;21&quot;. Trier des&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		-- tostring(clé) puis relire donnees.listes[clé] avec la chaîne renvoyait&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		-- donc nil sur CHAQUE liste, et la page entière paraissait vide — sans&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		-- une erreur, puisque le document était parfaitement valide.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		local &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;entrees &lt;/ins&gt;= {}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		for cle&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, valeur &lt;/ins&gt;in pairs( donnees.listes ) do&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			table.insert( &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;entrees&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{ cle = &lt;/ins&gt;tostring( cle )&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, valeur = valeur } &lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		table.sort( &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cles&lt;/del&gt;, function ( a, b )&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		table.sort( &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;entrees&lt;/ins&gt;, function ( a, b )&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			local na, nb = tonumber( a ), tonumber( b )&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			local na, nb = tonumber( a&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.cle &lt;/ins&gt;), tonumber( b&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.cle &lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			if na and nb then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			if na and nb then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				return na &amp;lt; nb&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				return na &amp;lt; nb&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			return a &amp;lt; b&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			return a&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.cle &lt;/ins&gt;&amp;lt; b&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.cle&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		end )&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		end )&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		for _, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cle &lt;/del&gt;in ipairs( &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cles &lt;/del&gt;) do&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		for _, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;e &lt;/ins&gt;in ipairs( &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;entrees &lt;/ins&gt;) do&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			local liste = normaliserListe( cle, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;donnees&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;listes[cle] &lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			local liste = normaliserListe( &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;e.&lt;/ins&gt;cle, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;e&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;valeur &lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			if liste then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			if liste then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				table.insert( listes, liste )&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				table.insert( listes, liste )&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key admin_falloutwikidb:diff:1.41:old-212577:rev-212578:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Kims</name></author>
	</entry>
	<entry>
		<id>https://fallout-wiki.com/index.php?title=Module:Data/Inventaire&amp;diff=212577&amp;oldid=prev</id>
		<title>Kims le 10 août 2026 à 18:42</title>
		<link rel="alternate" type="text/html" href="https://fallout-wiki.com/index.php?title=Module:Data/Inventaire&amp;diff=212577&amp;oldid=prev"/>
		<updated>2026-08-10T18:42:34Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 10 août 2026 à 20:42&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l303&quot;&gt;Ligne 303 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 303 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if contenu == &amp;#039;&amp;#039; then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if contenu == &amp;#039;&amp;#039; then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		contenu = &amp;quot;&amp;#039;&amp;#039;Liste non encore détaillée.&amp;#039;&amp;#039;&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		contenu = &amp;quot;&amp;#039;&amp;#039;Liste non encore détaillée.&amp;#039;&amp;#039;&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- PRÉPROCESSER AVANT DE PASSER À expandTemplate, ET NON APRÈS.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	--&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- frame:expandTemplate développe le MODÈLE, mais laisse les valeurs&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- d&#039;arguments telles quelles : elles ne repassent pas par le préprocesseur.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- Les icônes de devise, écrites {{Lingot76}}, ressortaient donc en toutes&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- lettres dans les boîtes — « (1 500 {{Lingot76}}) » au lieu du lingot.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	--&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- Le défaut ne se voyait que sur ce chemin : |brut=oui préprocessait déjà,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- et affichait correctement. C&#039;est ce qui le rendait discret — la même&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- liste était juste ou fausse selon un paramètre d&#039;affichage.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	--&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- On préprocesse donc UNE fois, ici, pour les deux chemins.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	contenu = frame:preprocess( contenu )&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- ANCRE STABLE, INDÉPENDANTE DE LA MISE EN FORME.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	--&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- Les boîtes écrites à la main offraient « #Liste_21 », et des liens&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- extérieurs y pointent — la carte joint à chaque passage de Minerva un lien&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- « 📖 Liste N » construit ainsi. Rendre les listes autrement supprimait ces&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- ancres sans prévenir : les liens continuaient d&#039;exister, ils ne menaient&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- simplement plus nulle part, ce qui ne se voit qu&#039;en cliquant.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	--&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- L&#039;ancre est donc posée EXPLICITEMENT, et ne dépend plus de ce que le&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- modèle de boîte fabrique de son titre : refondre l&#039;affichage ne peut plus&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- casser un lien entrant.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- DEUX ancres : le titre complet, tel qu&#039;une section l&#039;aurait produit, et la&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- forme courte « Liste 21 » — celle que les liens extérieurs utilisent, et&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- qui ne bouge pas quand le nombre de plans change. Un identifiant HTML ne&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- doit pas être présent deux fois : on n&#039;écrit la seconde que si elle diffère.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local titre = titreListe( liste, #puces )&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local court = tonumber( liste.cle ) and ( &#039;Liste &#039; .. liste.cle ) or liste.cle&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local ancre = &#039;&amp;lt;span id=&quot;&#039; .. mw.uri.anchorEncode( titre ) .. &#039;&quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	if mw.uri.anchorEncode( court ) ~= mw.uri.anchorEncode( titre ) then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		ancre = ancre .. &#039;&amp;lt;span id=&quot;&#039; .. mw.uri.anchorEncode( court ) .. &#039;&quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if brut then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if brut then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;frame:preprocess( &lt;/del&gt;contenu &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;)&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ancre .. &lt;/ins&gt;contenu&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	-- On réutilise le modèle de boîte déroulante déjà en place sur le wiki :&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	-- On réutilise le modèle de boîte déroulante déjà en place sur le wiki :&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	-- l&amp;#039;habillage reste celui du wiki, seul le CONTENU vient des données.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	-- l&amp;#039;habillage reste celui du wiki, seul le CONTENU vient des données.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	return frame:expandTemplate{&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- L&#039;ancre est posée AVANT la boîte, donc atteignable même repliée.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	return &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ancre .. &lt;/ins&gt;frame:expandTemplate{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		title = &amp;#039;Boîte déroulante&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		title = &amp;#039;Boîte déroulante&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		args = {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		args = {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			titre = &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;titreListe( liste, #puces )&lt;/del&gt;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			titre = &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;titre&lt;/ins&gt;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			contenu = contenu,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			contenu = contenu,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		},&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		},&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key admin_falloutwikidb:diff:1.41:old-212572:rev-212577:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Kims</name></author>
	</entry>
	<entry>
		<id>https://fallout-wiki.com/index.php?title=Module:Data/Inventaire&amp;diff=212572&amp;oldid=prev</id>
		<title>Kims : Page créée avec « --[[----------------------------------------------------------------------   Module:Data/Inventaire   À copier sur le wiki dans la page « Module:Data/Inventaire ».    RÔLE   ----   Afficher les listes de marchandises d&#039;UN VENDEUR, quel qu&#039;il soit, depuis   une page de données JSON — sans que personne n&#039;ait à recopier ces données   ailleurs, et sans qu&#039;aucune mise en forme wiki ait à être analysée.    Un vendeur, une page de données :        Minerva... »</title>
		<link rel="alternate" type="text/html" href="https://fallout-wiki.com/index.php?title=Module:Data/Inventaire&amp;diff=212572&amp;oldid=prev"/>
		<updated>2026-08-10T18:19:30Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « --[[----------------------------------------------------------------------   Module:Data/Inventaire   À copier sur le wiki dans la page « Module:Data/Inventaire ».    RÔLE   ----   Afficher les listes de marchandises d&amp;#039;UN VENDEUR, quel qu&amp;#039;il soit, depuis   une page de données JSON — sans que personne n&amp;#039;ait à recopier ces données   ailleurs, et sans qu&amp;#039;aucune mise en forme wiki ait à être analysée.    Un vendeur, une page de données :        Minerva... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[----------------------------------------------------------------------&lt;br /&gt;
  Module:Data/Inventaire&lt;br /&gt;
  À copier sur le wiki dans la page « Module:Data/Inventaire ».&lt;br /&gt;
&lt;br /&gt;
  RÔLE&lt;br /&gt;
  ----&lt;br /&gt;
  Afficher les listes de marchandises d&amp;#039;UN VENDEUR, quel qu&amp;#039;il soit, depuis&lt;br /&gt;
  une page de données JSON — sans que personne n&amp;#039;ait à recopier ces données&lt;br /&gt;
  ailleurs, et sans qu&amp;#039;aucune mise en forme wiki ait à être analysée.&lt;br /&gt;
&lt;br /&gt;
  Un vendeur, une page de données :&lt;br /&gt;
&lt;br /&gt;
      Minerva          →  Module:Data/Inventaire/Minerva.json&lt;br /&gt;
      Vendeur Bot Peco →  Module:Data/Inventaire/Vendeur Bot Peco.json&lt;br /&gt;
&lt;br /&gt;
  Cette page est lue par ce module — pour l&amp;#039;affichage wiki — ET par&lt;br /&gt;
  l&amp;#039;extension PHP — pour le flux de la carte, l&amp;#039;API et Discord. Une seule&lt;br /&gt;
  saisie alimente les quatre surfaces.&lt;br /&gt;
&lt;br /&gt;
  POURQUOI DES DONNÉES ET NON DU WIKITEXTE ANALYSÉ&lt;br /&gt;
  -----------------------------------------------&lt;br /&gt;
  L&amp;#039;inventaire a d&amp;#039;abord vécu en boîtes déroulantes rédigées à la main, que&lt;br /&gt;
  l&amp;#039;extension relisait à l&amp;#039;expression régulière. Ça marche jusqu&amp;#039;au jour où&lt;br /&gt;
  quelqu&amp;#039;un réorganise la page : la mise en forme change, l&amp;#039;analyse ne&lt;br /&gt;
  reconnaît plus rien, et la carte annonce « pas encore publié » devant une&lt;br /&gt;
  liste complète. Une page de données ne se casse pas en la remettant en&lt;br /&gt;
  forme, parce qu&amp;#039;elle n&amp;#039;a pas de forme — et MediaWiki REFUSE de&lt;br /&gt;
  l&amp;#039;enregistrer si le JSON est invalide.&lt;br /&gt;
&lt;br /&gt;
  UN NOMBRE QUELCONQUE DE LISTES, NOMMÉES COMME ON VEUT&lt;br /&gt;
  ----------------------------------------------------&lt;br /&gt;
  Minerva a vingt-quatre listes numérotées qui tournent. Un autre marchand&lt;br /&gt;
  peut n&amp;#039;en avoir qu&amp;#039;une, ou trois nommées par thème. Les clés de liste sont&lt;br /&gt;
  donc des CHAÎNES libres (« 21 », « Armes », « Ateliers »), et l&amp;#039;ordre&lt;br /&gt;
  d&amp;#039;affichage est celui du fichier — un tableau JSON, pas un objet, parce&lt;br /&gt;
  qu&amp;#039;un objet JSON n&amp;#039;a pas d&amp;#039;ordre défini.&lt;br /&gt;
&lt;br /&gt;
  mw.loadJsonData() est délibéré plutôt qu&amp;#039;un require() : il déclare la&lt;br /&gt;
  dépendance de page auprès du parseur, donc modifier la page de données&lt;br /&gt;
  invalide automatiquement les pages qui l&amp;#039;affichent. Sans ça, une correction&lt;br /&gt;
  de prix resterait invisible jusqu&amp;#039;à la purge suivante.&lt;br /&gt;
&lt;br /&gt;
  UTILISATION&lt;br /&gt;
  -----------&lt;br /&gt;
    {{#invoke:Data/Inventaire|toutes}}              toutes les listes du vendeur&lt;br /&gt;
    {{#invoke:Data/Inventaire|liste|21}}            une liste&lt;br /&gt;
    {{#invoke:Data/Inventaire|liste|Armes}}         une liste nommée&lt;br /&gt;
    {{#invoke:Data/Inventaire|liste|21|brut=oui}}   sans la boîte déroulante&lt;br /&gt;
    {{#invoke:Data/Inventaire|nombre|21}}           nombre d&amp;#039;articles&lt;br /&gt;
    {{#invoke:Data/Inventaire|cles}}                clés disponibles, séparées par des virgules&lt;br /&gt;
&lt;br /&gt;
  Paramètres communs :&lt;br /&gt;
    |vendeur=  nom du vendeur (défaut : le titre de la page courante)&lt;br /&gt;
    |donnees=  page de données explicite, court-circuite |vendeur=&lt;br /&gt;
    |brut=oui  rend les puces sans boîte déroulante&lt;br /&gt;
&lt;br /&gt;
  FORMAT DE LA PAGE DE DONNÉES (schéma « modus.inventaire/2 »)&lt;br /&gt;
  -----------------------------------------------------------&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;schema&amp;quot;: &amp;quot;modus.inventaire/2&amp;quot;,&lt;br /&gt;
      &amp;quot;vendeur&amp;quot;: &amp;quot;Minerva&amp;quot;,&lt;br /&gt;
      &amp;quot;devise_defaut&amp;quot;: &amp;quot;lingot&amp;quot;,&lt;br /&gt;
      &amp;quot;listes&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;cle&amp;quot;: &amp;quot;21&amp;quot;,&lt;br /&gt;
          &amp;quot;titre&amp;quot;: &amp;quot;Liste 21&amp;quot;,           // optionnel, sinon généré&lt;br /&gt;
          &amp;quot;mensuelle&amp;quot;: false,            // optionnel, annoté dans le titre&lt;br /&gt;
          &amp;quot;articles&amp;quot;: [&lt;br /&gt;
            { &amp;quot;plan&amp;quot;: &amp;quot;Plan : Minigun de Gauss&amp;quot;, &amp;quot;cout&amp;quot;: 563 },&lt;br /&gt;
            { &amp;quot;plan&amp;quot;: &amp;quot;Plan : Casseur de têtes&amp;quot; },&lt;br /&gt;
            &amp;quot;Plan : Poulailler&amp;quot;          // forme abrégée&lt;br /&gt;
          ]&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  Le schéma « modus.inventaire/1 » (« listes » en objet indexé par numéro)&lt;br /&gt;
  reste lu tel quel : les pages déjà écrites continuent de fonctionner, et&lt;br /&gt;
  rien n&amp;#039;oblige à les convertir toutes le même jour.&lt;br /&gt;
--]]------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local SCHEMAS_CONNUS = {&lt;br /&gt;
	[&amp;#039;modus.inventaire/1&amp;#039;] = 1,&lt;br /&gt;
	[&amp;#039;modus.inventaire/2&amp;#039;] = 2,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--- Préfixe des pages de données. Un vendeur = une sous-page.&lt;br /&gt;
local PREFIXE_DONNEES = &amp;#039;Module:Data/Inventaire/&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- Devises connues. Doit rester aligné avec includes/Data/Currency.php ;&lt;br /&gt;
-- une clé absente ici affiche le nombre seul plutôt qu&amp;#039;une mauvaise devise.&lt;br /&gt;
local DEVISES = {&lt;br /&gt;
	lingot = { singulier = &amp;#039;lingot&amp;#039;, pluriel = &amp;#039;lingots&amp;#039;, modele = &amp;#039;Lingot76&amp;#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
-- Chargement et normalisation&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
local function erreur( message )&lt;br /&gt;
	return mw.html.create( &amp;#039;strong&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;error&amp;#039; )&lt;br /&gt;
		:wikitext( &amp;#039;Module:Data/Inventaire — &amp;#039; .. message )&lt;br /&gt;
		:done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Normalise une entrée de liste, quelle que soit sa provenance.&lt;br /&gt;
local function normaliserListe( cle, brut )&lt;br /&gt;
	if type( brut ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return {&lt;br /&gt;
		cle       = tostring( cle ),&lt;br /&gt;
		titre     = brut.titre,&lt;br /&gt;
		mensuelle = brut.mensuelle and true or false,&lt;br /&gt;
		articles  = type( brut.articles ) == &amp;#039;table&amp;#039; and brut.articles or {},&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Charge la page de données et rend TOUJOURS la même structure, quel que&lt;br /&gt;
--- soit le schéma d&amp;#039;origine : une séquence ordonnée de listes.&lt;br /&gt;
---&lt;br /&gt;
--- La normalisation vit ici, en un seul endroit, et non dans chaque point&lt;br /&gt;
--- d&amp;#039;entrée : sans ça, chaque fonction devrait connaître les deux schémas et&lt;br /&gt;
--- l&amp;#039;une d&amp;#039;elles finirait par en oublier un.&lt;br /&gt;
local function charger( pageDonnees )&lt;br /&gt;
	local ok, donnees = pcall( mw.loadJsonData, pageDonnees )&lt;br /&gt;
	if not ok or type( donnees ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		return nil, &amp;#039;page de données introuvable ou JSON invalide : &amp;#039; .. pageDonnees&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local version = SCHEMAS_CONNUS[donnees.schema or &amp;#039;&amp;#039;]&lt;br /&gt;
	if not version then&lt;br /&gt;
		return nil, &amp;#039;schéma inattendu sur &amp;#039; .. pageDonnees .. &amp;#039; (« &amp;#039;&lt;br /&gt;
			.. tostring( donnees.schema ) .. &amp;quot; »).&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if type( donnees.listes ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		return nil, &amp;#039;champ « listes » absent de &amp;#039; .. pageDonnees .. &amp;#039;.&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listes = {}&lt;br /&gt;
&lt;br /&gt;
	if version &amp;gt;= 2 then&lt;br /&gt;
		-- Tableau : l&amp;#039;ordre du fichier EST l&amp;#039;ordre d&amp;#039;affichage. C&amp;#039;est tout&lt;br /&gt;
		-- l&amp;#039;intérêt du passage au tableau — un vendeur dont les listes&lt;br /&gt;
		-- s&amp;#039;appellent « Armes », « Armures », « Ateliers » n&amp;#039;a aucun ordre&lt;br /&gt;
		-- naturel à retrouver, seulement celui que le rédacteur a voulu.&lt;br /&gt;
		for i, entree in ipairs( donnees.listes ) do&lt;br /&gt;
			local liste = normaliserListe(&lt;br /&gt;
				( type( entree ) == &amp;#039;table&amp;#039; and entree.cle ) or i, entree )&lt;br /&gt;
			if liste then&lt;br /&gt;
				table.insert( listes, liste )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Objet indexé : les clés d&amp;#039;un objet JSON n&amp;#039;ont pas d&amp;#039;ordre, on trie&lt;br /&gt;
		-- donc numériquement — ce qui n&amp;#039;a de sens que parce que le schéma 1&lt;br /&gt;
		-- ne connaissait que des listes numérotées.&lt;br /&gt;
		local cles = {}&lt;br /&gt;
		for cle in pairs( donnees.listes ) do&lt;br /&gt;
			table.insert( cles, tostring( cle ) )&lt;br /&gt;
		end&lt;br /&gt;
		table.sort( cles, function ( a, b )&lt;br /&gt;
			local na, nb = tonumber( a ), tonumber( b )&lt;br /&gt;
			if na and nb then&lt;br /&gt;
				return na &amp;lt; nb&lt;br /&gt;
			end&lt;br /&gt;
			return a &amp;lt; b&lt;br /&gt;
		end )&lt;br /&gt;
		for _, cle in ipairs( cles ) do&lt;br /&gt;
			local liste = normaliserListe( cle, donnees.listes[cle] )&lt;br /&gt;
			if liste then&lt;br /&gt;
				table.insert( listes, liste )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return {&lt;br /&gt;
		vendeur      = donnees.vendeur,&lt;br /&gt;
		deviseDefaut = donnees.devise_defaut,&lt;br /&gt;
		listes       = listes,&lt;br /&gt;
	}, nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Retrouve une liste par sa clé. La comparaison est faite sur la forme&lt;br /&gt;
--- textuelle : « 21 » saisi dans le wikitexte doit trouver la clé 21 écrite&lt;br /&gt;
--- en nombre dans le JSON, et inversement.&lt;br /&gt;
local function trouver( donnees, cle )&lt;br /&gt;
	cle = mw.text.trim( tostring( cle ) )&lt;br /&gt;
	for _, liste in ipairs( donnees.listes ) do&lt;br /&gt;
		if liste.cle == cle then&lt;br /&gt;
			return liste&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Second passage, insensible à la casse : « armes » doit trouver&lt;br /&gt;
	-- « Armes ». Un rédacteur ne devrait pas avoir à deviner la casse d&amp;#039;une&lt;br /&gt;
	-- clé qu&amp;#039;il ne voit pas.&lt;br /&gt;
	local bas = mw.ustring.lower( cle )&lt;br /&gt;
	for _, liste in ipairs( donnees.listes ) do&lt;br /&gt;
		if mw.ustring.lower( liste.cle ) == bas then&lt;br /&gt;
			return liste&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
-- Mise en forme&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
-- « 1 234 » avec des espaces insécables fines : sur mobile, une espace&lt;br /&gt;
-- ordinaire coupe le nombre en fin de ligne.&lt;br /&gt;
--&lt;br /&gt;
-- ATTENTION AU PIÈGE, il a déjà mordu une fois : string.reverse travaille sur&lt;br /&gt;
-- des OCTETS, pas sur des caractères. Insérer l&amp;#039;espace fine insécable (U+202F,&lt;br /&gt;
-- soit les trois octets E2 80 AF) AVANT le second reverse ressortait « AF 80&lt;br /&gt;
-- E2 » — donc de l&amp;#039;UTF-8 invalide sur tout nombre de trois chiffres ou plus,&lt;br /&gt;
-- c&amp;#039;est-à-dire sur pratiquement chaque prix. On groupe donc avec un marqueur&lt;br /&gt;
-- ASCII, qui survit à l&amp;#039;inversion, et on ne pose le vrai séparateur qu&amp;#039;à la&lt;br /&gt;
-- toute fin, quand plus aucune opération sur octets ne le suivra.&lt;br /&gt;
local function formaterNombre( n )&lt;br /&gt;
	local s = tostring( math.floor( n ) )&lt;br /&gt;
	local r = s:reverse():gsub( &amp;#039;(%d%d%d)&amp;#039;, &amp;#039;%1,&amp;#039; ):reverse()&lt;br /&gt;
	r = r:gsub( &amp;#039;^,&amp;#039;, &amp;#039;&amp;#039; )   -- 1 000 → « ,1 000 » sans ça&lt;br /&gt;
	return ( r:gsub( &amp;#039;,&amp;#039;, &amp;#039;\226\128\175&amp;#039; ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formaterCout( cout, devise )&lt;br /&gt;
	if cout == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local d = DEVISES[devise or &amp;#039;&amp;#039;]&lt;br /&gt;
	local nombre = formaterNombre( cout )&lt;br /&gt;
	if not d then&lt;br /&gt;
		return nombre&lt;br /&gt;
	end&lt;br /&gt;
	local libelle = ( math.abs( cout ) == 1 ) and d.singulier or d.pluriel&lt;br /&gt;
	-- Le modèle d&amp;#039;icône est utilisé s&amp;#039;il existe sur le wiki ; sinon on écrit&lt;br /&gt;
	-- le mot. On ne teste pas son existence ici — un modèle manquant produit&lt;br /&gt;
	-- un lien rouge visible, ce qui est le bon signal pour un rédacteur.&lt;br /&gt;
	if d.modele then&lt;br /&gt;
		return nombre .. &amp;#039; {{&amp;#039; .. d.modele .. &amp;#039;}}&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return nombre .. &amp;#039; &amp;#039; .. libelle&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function ligneArticle( article, deviseDefaut )&lt;br /&gt;
	if type( article ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		article = { plan = article }&lt;br /&gt;
	end&lt;br /&gt;
	if type( article ) ~= &amp;#039;table&amp;#039; or not article.plan then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local nom = article.nom&lt;br /&gt;
	if not nom or nom == &amp;#039;&amp;#039; then&lt;br /&gt;
		nom = mw.ustring.gsub( article.plan, &amp;#039;^[Pp]lan%s*:%s*&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ligne = &amp;#039;[[&amp;#039; .. article.plan .. &amp;#039;|&amp;#039; .. nom .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	local cout = formaterCout( article.cout, article.devise or deviseDefaut )&lt;br /&gt;
	if cout then&lt;br /&gt;
		ligne = ligne .. &amp;#039; (&amp;#039; .. cout .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return ligne&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Titre d&amp;#039;une boîte. Une clé purement numérique donne « Liste 21 » ; une&lt;br /&gt;
--- clé nommée est reprise telle quelle, parce qu&amp;#039;inventer « Liste Armes »&lt;br /&gt;
--- serait plus laid que ce que le rédacteur a écrit.&lt;br /&gt;
local function titreListe( liste, nb )&lt;br /&gt;
	if liste.titre and liste.titre ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		return liste.titre&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local base = tonumber( liste.cle ) and ( &amp;#039;Liste &amp;#039; .. liste.cle ) or liste.cle&lt;br /&gt;
&lt;br /&gt;
	local details = {}&lt;br /&gt;
	if liste.mensuelle then&lt;br /&gt;
		table.insert( details, &amp;#039;mensuelle&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if nb &amp;gt; 0 then&lt;br /&gt;
		table.insert( details, nb .. &amp;#039; plan&amp;#039; .. ( nb &amp;gt; 1 and &amp;#039;s&amp;#039; or &amp;#039;&amp;#039; ) )&lt;br /&gt;
	end&lt;br /&gt;
	if #details == 0 then&lt;br /&gt;
		return base&lt;br /&gt;
	end&lt;br /&gt;
	return base .. &amp;#039; (&amp;#039; .. table.concat( details, &amp;#039;, &amp;#039; ) .. &amp;#039;)&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rendreListe( frame, liste, deviseDefaut, brut )&lt;br /&gt;
	local puces = {}&lt;br /&gt;
	for _, article in ipairs( liste.articles ) do&lt;br /&gt;
		local ligne = ligneArticle( article, deviseDefaut )&lt;br /&gt;
		if ligne then&lt;br /&gt;
			table.insert( puces, &amp;#039;* &amp;#039; .. ligne )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local contenu = table.concat( puces, &amp;#039;\n&amp;#039; )&lt;br /&gt;
	if contenu == &amp;#039;&amp;#039; then&lt;br /&gt;
		contenu = &amp;quot;&amp;#039;&amp;#039;Liste non encore détaillée.&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if brut then&lt;br /&gt;
		return frame:preprocess( contenu )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- On réutilise le modèle de boîte déroulante déjà en place sur le wiki :&lt;br /&gt;
	-- l&amp;#039;habillage reste celui du wiki, seul le CONTENU vient des données.&lt;br /&gt;
	return frame:expandTemplate{&lt;br /&gt;
		title = &amp;#039;Boîte déroulante&amp;#039;,&lt;br /&gt;
		args = {&lt;br /&gt;
			titre = titreListe( liste, #puces ),&lt;br /&gt;
			contenu = contenu,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
-- Points d&amp;#039;entrée&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
local function options( frame )&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local parent = frame:getParent()&lt;br /&gt;
	local function arg( nom )&lt;br /&gt;
		if args[nom] ~= nil and args[nom] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			return args[nom]&lt;br /&gt;
		end&lt;br /&gt;
		if parent and parent.args[nom] ~= nil and parent.args[nom] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			return parent.args[nom]&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- VENDEUR PAR DÉFAUT : le titre de la page courante. Sur l&amp;#039;article&lt;br /&gt;
	-- « Minerva », {{#invoke:Data/Inventaire|toutes}} suffit donc, sans&lt;br /&gt;
	-- paramètre — et le jour où un autre marchand a sa page, le même appel y&lt;br /&gt;
	-- fonctionne sans rien changer. C&amp;#039;est ce qui rend le module réutilisable&lt;br /&gt;
	-- sans configuration.&lt;br /&gt;
	local vendeur = arg( &amp;#039;vendeur&amp;#039; ) or mw.title.getCurrentTitle().baseText&lt;br /&gt;
&lt;br /&gt;
	return {&lt;br /&gt;
		vendeur = vendeur,&lt;br /&gt;
		pageDonnees = arg( &amp;#039;donnees&amp;#039; ) or ( PREFIXE_DONNEES .. vendeur .. &amp;#039;.json&amp;#039; ),&lt;br /&gt;
		brut = ( arg( &amp;#039;brut&amp;#039; ) or &amp;#039;&amp;#039; ):lower() == &amp;#039;oui&amp;#039;,&lt;br /&gt;
		cle = arg( &amp;#039;liste&amp;#039; ) or args[1] or ( parent and parent.args[1] ),&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Une liste donnée.&lt;br /&gt;
function p.liste( frame )&lt;br /&gt;
	local o = options( frame )&lt;br /&gt;
	if not o.cle or mw.text.trim( tostring( o.cle ) ) == &amp;#039;&amp;#039; then&lt;br /&gt;
		return erreur( &amp;#039;clé de liste manquante (ex. « |liste|21 »).&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local donnees, err = charger( o.pageDonnees )&lt;br /&gt;
	if err then&lt;br /&gt;
		return erreur( err )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local liste = trouver( donnees, o.cle )&lt;br /&gt;
	if not liste then&lt;br /&gt;
		return &amp;quot;&amp;#039;&amp;#039;La liste « &amp;quot; .. mw.text.nowiki( tostring( o.cle ) )&lt;br /&gt;
			.. &amp;quot; » n&amp;#039;est pas encore documentée pour &amp;quot; .. mw.text.nowiki( o.vendeur ) .. &amp;quot;.&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return rendreListe( frame, liste, donnees.deviseDefaut, o.brut )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Toutes les listes du vendeur, dans l&amp;#039;ordre de la page de données.&lt;br /&gt;
function p.toutes( frame )&lt;br /&gt;
	local o = options( frame )&lt;br /&gt;
	local donnees, err = charger( o.pageDonnees )&lt;br /&gt;
	if err then&lt;br /&gt;
		return erreur( err )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local morceaux = {}&lt;br /&gt;
	for _, liste in ipairs( donnees.listes ) do&lt;br /&gt;
		table.insert( morceaux, rendreListe( frame, liste, donnees.deviseDefaut, o.brut ) )&lt;br /&gt;
	end&lt;br /&gt;
	if #morceaux == 0 then&lt;br /&gt;
		return &amp;quot;&amp;#039;&amp;#039;Aucune liste documentée pour &amp;quot; .. mw.text.nowiki( o.vendeur ) .. &amp;quot;.&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( morceaux, &amp;#039;\n&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Nombre d&amp;#039;articles d&amp;#039;une liste — pratique dans un titre.&lt;br /&gt;
--&lt;br /&gt;
-- Renvoyer « 0 » quand la page de données est introuvable serait un mensonge&lt;br /&gt;
-- silencieux : le titre afficherait « Liste 21 (0 plan) » et personne ne&lt;br /&gt;
-- saurait que c&amp;#039;est la SOURCE qui manque, pas les plans. p.liste et p.toutes&lt;br /&gt;
-- crient dans la même situation ; celle-ci criait dans le vide.&lt;br /&gt;
--&lt;br /&gt;
-- « 0 » reste la réponse juste pour une liste réellement vide ou non encore&lt;br /&gt;
-- documentée : c&amp;#039;est un fait sur les données, pas une panne.&lt;br /&gt;
function p.nombre( frame )&lt;br /&gt;
	local o = options( frame )&lt;br /&gt;
	if not o.cle or mw.text.trim( tostring( o.cle ) ) == &amp;#039;&amp;#039; then&lt;br /&gt;
		return erreur( &amp;#039;clé de liste manquante.&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local donnees, err = charger( o.pageDonnees )&lt;br /&gt;
	if err then&lt;br /&gt;
		return erreur( err )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local liste = trouver( donnees, o.cle )&lt;br /&gt;
	if not liste then&lt;br /&gt;
		return &amp;#039;0&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return tostring( #liste.articles )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Clés disponibles, séparées par des virgules.&lt;br /&gt;
---&lt;br /&gt;
--- Sert à écrire une page qui ne présume pas du nombre de listes : un modèle&lt;br /&gt;
--- peut boucler dessus plutôt que d&amp;#039;appeler vingt-quatre fois « liste » en&lt;br /&gt;
--- dur, et un vendeur à liste unique n&amp;#039;oblige alors à rien réécrire.&lt;br /&gt;
function p.cles( frame )&lt;br /&gt;
	local o = options( frame )&lt;br /&gt;
	local donnees, err = charger( o.pageDonnees )&lt;br /&gt;
	if err then&lt;br /&gt;
		return erreur( err )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local cles = {}&lt;br /&gt;
	for _, liste in ipairs( donnees.listes ) do&lt;br /&gt;
		table.insert( cles, liste.cle )&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( cles, &amp;#039;,&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Kims</name></author>
	</entry>
</feed>