Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. <!DOCTYPE html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  4. <!-- Has to be within the first 1024 bytes, hence before the `title` element
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>
  13. Étiquette #addiction
  14. — David Larlet</title>
  15. <script>
  16. function toggleTheme(themeName) {
  17. document.documentElement.classList.toggle(
  18. 'forced-dark',
  19. themeName === 'dark'
  20. )
  21. document.documentElement.classList.toggle(
  22. 'forced-light',
  23. themeName === 'light'
  24. )
  25. }
  26. const selectedTheme = localStorage.getItem('theme')
  27. if (selectedTheme !== 'undefined') {
  28. toggleTheme(selectedTheme)
  29. }
  30. </script>
  31. <!-- Documented, feel free to shoot an email. -->
  32. <link rel="stylesheet" href="/static/david/css/style_2024-03-09.css">
  33. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  34. <link rel="preload"
  35. href="/static/david/css/fonts/century_supra_ot_a_regular.woff2"
  36. as="font"
  37. type="font/woff2"
  38. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  39. crossorigin>
  40. <link rel="preload"
  41. href="/static/david/css/fonts/century_supra_ot_a_bold.woff2"
  42. as="font"
  43. type="font/woff2"
  44. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  45. crossorigin>
  46. <link rel="preload"
  47. href="/static/david/css/fonts/century_supra_ot_a_italic.woff2"
  48. as="font"
  49. type="font/woff2"
  50. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  51. crossorigin>
  52. <link rel="preload"
  53. href="/static/david/css/fonts/century_supra_ot_b_regular.woff2"
  54. as="font"
  55. type="font/woff2"
  56. media="(prefers-color-scheme: dark)"
  57. crossorigin>
  58. <link rel="preload"
  59. href="/static/david/css/fonts/century_supra_ot_b_bold.woff2"
  60. as="font"
  61. type="font/woff2"
  62. media="(prefers-color-scheme: dark)"
  63. crossorigin>
  64. <link rel="preload"
  65. href="/static/david/css/fonts/century_supra_ot_b_italic.woff2"
  66. as="font"
  67. type="font/woff2"
  68. media="(prefers-color-scheme: dark)"
  69. crossorigin>
  70. <meta name="description" content="Publications relatives au tag #addiction">
  71. <!-- That good ol' feed, subscribe :). -->
  72. <link rel="alternate"
  73. type="application/atom+xml"
  74. title="Feed"
  75. href="/david/log/">
  76. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  77. <link rel="apple-touch-icon"
  78. sizes="180x180"
  79. href="/static/david/icons2/apple-touch-icon.png">
  80. <link rel="icon"
  81. type="image/png"
  82. sizes="32x32"
  83. href="/static/david/icons2/favicon-32x32.png">
  84. <link rel="icon"
  85. type="image/png"
  86. sizes="16x16"
  87. href="/static/david/icons2/favicon-16x16.png">
  88. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  89. <link rel="mask-icon"
  90. href="/static/david/icons2/safari-pinned-tab.svg"
  91. color="#07486c">
  92. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  93. <meta name="msapplication-TileColor" content="#f7f7f7">
  94. <meta name="msapplication-config"
  95. content="/static/david/icons2/browserconfig.xml">
  96. <meta name="theme-color"
  97. content="#f7f7f7"
  98. media="(prefers-color-scheme: light)">
  99. <meta name="theme-color"
  100. content="#272727"
  101. media="(prefers-color-scheme: dark)">
  102. <!-- Is that even respected? Retrospectively? What a shAItshow…
  103. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  104. <meta name="robots" content="noai, noimageai">
  105. <style type="text/css">
  106. details[open] summary {
  107. display: none;
  108. }
  109. </style>
  110. <body data-instant-intensity="viewport-all">
  111. <article>
  112. <header>
  113. <hgroup>
  114. <h1>#addiction</h1>
  115. <p>Publications relatives à cette étiquette</p>
  116. </hgroup>
  117. </header>
  118. <nav>
  119. <p>
  120. <a href="/david/" title="Aller à l’accueil">
  121. Accueil</a>
  122. <a rel="tags"
  123. href="/david/2024/#tags"
  124. title="Liste de toutes les étiquettes">
  125. Étiquettes</a>
  126. <a href="/david/recherche/" title="Aller à la page de recherche" rel="search" data-no-instant>Recherche</a>
  127. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  128. </p>
  129. </nav>
  130. <h2>
  131. <a href="/david/2024/01/16/" title="Lien permanent vers cet article">Endorphines</a> <time datetime="2024-01-16">16 janvier 2024</time>
  132. </h2>
  133. <p>J’ai remis les pieds sur des skis (de fond). J’ai une piste à 150&nbsp;mètres de chez moi et c’était probablement les plus critiques. Je me suis déjà tordu la cheville plusieurs fois sur ce trajet. Mais une fois dans les traces les sensations étaient bonnes et l’entorse (<em>tape</em>ée) n’a pas couiné. Le mollet un peu plus mais je me demande si ce n’est pas à force de compenser en&nbsp;boitant.</p>
  134. <p>Cela conclus peut-être mon journal de&nbsp;chialage.</p>
  135. <a href="#hr-33" title="Lien vers cette section de la page"><hr id="hr-33" /></a>
  136. <p>Hier soir, je travaillais sur la <a href="/david/">page d’accueil</a> en voulant donner davantage d’espace à la recherche qui passe également en pied de page (qui est un&nbsp;chantier).</p>
  137. <p>Et puis ce matin <a data-link-domain="nicolas-hoizey.com" href="https://nicolas-hoizey.com/">Nicolas H.</a> m’indique que mon flux est cassé. Je répare cette histoire de caractère invisible qui casse le <em>parsing</em> du contenu HTML (intégrer une <a data-link-domain="validator.w3.org" href="https://validator.w3.org/feed/">validation</a> pourrait s’avérer être utile). Et je pousse les modifications qui contiennent la page d’accueil en chantier. Tant pis, au moins c’est&nbsp;fait.</p>
  138. <p>Il y a dorénavant 54&nbsp;liens sur cette page, j’ai besoin de revoir des choses mais au moins il commence à y avoir une cohérence sur le thème de l’année et ses pages générées. Le chemin continue de me donner le&nbsp;sourire.</p>
  139. <p>Je constate au passage que la <a href="/david/recherche/">page de recherche</a> fait 2&#8239;Mo (700&#8239;Ko à télécharger), désindexer des années ou explorer des <a data-link-domain="pagefind.app" href="https://pagefind.app/">alternatives</a>&#8239;? J’aime bien me dire que mes écrits de ces 8&nbsp;dernières années tiennent sur&nbsp;2&nbsp;disquettes.</p>
  140. <a href="#hr-34" title="Lien vers cette section de la page"><hr id="hr-34" /></a>
  141. <p>Vidéo du jour&nbsp;: <a data-link-domain="video.blast-info.fr" href="https://video.blast-info.fr/w/9885ed4e-386b-4b3b-bcb5-dc2e454939e6">DRY JANUARY, ÉCOLOGIE&nbsp;: POURQUOI LE POUVOIR A-T-IL SI PEUR DE LA SOBRIÉTÉ&#8239;?</a> (désolé pour les cris, ça semble être le style de&nbsp;BLAST&nbsp;🙃).</p>
  142. <a href="#hr-35" title="Lien vers cette section de la page"><hr id="hr-35" /></a>
  143. <p>On creuse les <a data-link-domain="MDN" href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap"><code>importmap</code></a> pour <a data-link-domain="umap-project.org" href="https://umap-project.org/fr/">uMap</a> en ce moment. Un peu contraints par un passage aux modules JS qui supporte mal la minification + invalidation du cache. Il y a des choses intéressantes dans les possibilités que ça offre mais c’est du&nbsp;Baseline™2023.</p>
  144. <p>Si un produit accueille moins de personnes lors de mon départ que lors de mon arrivée, j’ai probablement mal fait mon travail&#8239;? <em>À&nbsp;méditer.</em></p>
  145. <blockquote lang="en">
  146. <p>If the new software no longer runs on old hardware, it is <mark>worse</mark> than the old&nbsp;software.</p>
  147. <p><cite><em><a data-link-domain="blog.jim-nielsen.com" href="https://blog.jim-nielsen.com/2024/notes-from-computing-sustainably/" hreflang="en"
  148. title="Consultation de l’article (anglais)">Notes from “An approach to computing and sustainability inspired from permaculture” by Devine LuLinvega</a>
  149. <a href="/david/cache/2024/1f40a33f9c57a16d420eb0868a129e96/" hreflang="en"
  150. data-tippy data-description="Writing about the big beautiful mess that is making things for the world wide web."
  151. data-source="https://blog.jim-nielsen.com/2024/notes-from-computing-sustainably/"
  152. data-date="2024-01-15"
  153. data-favicon="https://blog.jim-nielsen.com/favicon.ico"
  154. data-domain="blog.jim-nielsen.com"
  155. ><svg xmlns="http://www.w3.org/2000/svg"
  156. width="24" height="24" viewBox="0 0 24 24" fill="none"
  157. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  158. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  159. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  160. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  161. </svg>
  162. <span class="sr-only">[archive]</span></a></em></cite></p>
  163. </blockquote>
  164. <nav>
  165. <p>
  166. <a href="/david/2024/addiction/"
  167. title="Liste de tous les articles 2024 associés à cette étiquette"
  168. rel="tag">#addiction</a>
  169. <a href="/david/2024/evolution/"
  170. title="Liste de tous les articles 2024 associés à cette étiquette"
  171. rel="tag">#évolution</a>
  172. <a href="/david/2024/technique/"
  173. title="Liste de tous les articles 2024 associés à cette étiquette"
  174. rel="tag">#technique</a>
  175. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  176. </p>
  177. </nav>
  178. <h2>
  179. <a href="/david/2024/01/15/" title="Lien permanent vers cet article">Rééducation</a> <time datetime="2024-01-15">15 janvier 2024</time>
  180. </h2>
  181. <p>J’ai réussi à marcher 6&#8239;km dans la neige avec des bottes de neige assez hautes. Pas pire. On va voir si ça ne tire pas trop dans la nuit. J’ai appris à mettre des bandes de kynésiologie aussi pour un léger soutien sur la rotation interne. Ce n’est pas une entorse classique car généralement deux arbres ne sont pas impliqués donc la torsion est différente. Du moins, c’est ce que mon doctorat express en médecine me laisse à penser… et mes sensations&nbsp;surtout&#8239;!</p>
  182. <p>Récupération active ou&nbsp;impatience&#8239;?</p>
  183. <a href="#hr-32" title="Lien vers cette section de la page"><hr id="hr-32" /></a>
  184. <blockquote lang="en">
  185. <p>The front-end to your dev&nbsp;env.</p>
  186. <p><cite><em><a data-link-domain="mise.jdx.dev" href="https://mise.jdx.dev/">mise-en-place</a></em></cite></p>
  187. </blockquote>
  188. <p>Ironiquement, j’ai toujours la crainte que ces outils viennent davantage polluer mon environnement actuel. Je ne suis pas sur assez de produits pour rencontrer des limites à ce niveau. Je m’en sors plutôt bien avec <a data-link-domain="code.larlet.fr" href="https://code.larlet.fr/shell/#alias">quelques alias</a> et un <a data-link-domain="code.larlet.fr" href="https://code.larlet.fr/shell/#auto-deactivation-des-virtualenvs">environnement virtuel dé·monté</a> à l’entrée dans un&nbsp;dossier.</p>
  189. <p>Je compare un peu des carottes et des patates mais ça donne une direction en terme de frugalité sur ce plan là. On simplifie rarement un environnement en ajoutant une couche (coucou Docker), au mieux on masque une incompétence. Ce qui n’est pas toujours une <a href="/david/2024/01/05/" title="Vocabulaire">tension</a> en fonction du&nbsp;contexte&#8239;!</p>
  190. <nav>
  191. <p>
  192. <a href="/david/2024/addiction/"
  193. title="Liste de tous les articles 2024 associés à cette étiquette"
  194. rel="tag">#addiction</a>
  195. <a href="/david/2024/evolution/"
  196. title="Liste de tous les articles 2024 associés à cette étiquette"
  197. rel="tag">#évolution</a>
  198. <a href="/david/2024/sport/"
  199. title="Liste de tous les articles 2024 associés à cette étiquette"
  200. rel="tag">#sport</a>
  201. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  202. </p>
  203. </nav>
  204. <h2>
  205. <a href="/david/2024/01/06/" title="Lien permanent vers cet article">Objectif</a> <time datetime="2024-01-06">6 janvier 2024</time>
  206. </h2>
  207. <p>C’est fou comme le fait de se donner un objectif (sportif) change la donne en terme de motivation. Pour cette année, ce sera la <em>Traversée de Charlevoix</em>. Je vais essayer de documenter le processus de&nbsp;préparation.</p>
  208. <a href="#hr-10" title="Lien vers cette section de la page"><hr id="hr-10" /></a>
  209. <p>Au détour d’un vieux&nbsp;chalet&nbsp;:</p>
  210. <figure>
  211. <a href="/static/david/2024/2024-01-05-la-recherche-sida.jpg"
  212. title="Cliquer pour une version haute résolution">
  213. <img
  214. src="/static/david/2024/2024-01-05-la-recherche-sida.jpg"
  215. width="4032" height="3024"
  216. srcset="/static/david/2024/2024-01-05-la-recherche-sida.jpg 4032w, /static/david/2024/2024-01-05-la-recherche-sida_660x440.jpg 660w, /static/david/2024/2024-01-05-la-recherche-sida_990x660.jpg 990w, /static/david/2024/2024-01-05-la-recherche-sida_1320x880.jpg 1320w"
  217. sizes="min(100vw, calc(100vh * 4032 / 3024))"
  218. loading="lazy"
  219. decoding="async"
  220. alt="Photo du Magazine «&nbsp;La Recherche&nbsp;» (couverture)">
  221. </a>
  222. <figcaption>La Recherche, juin 1985. Les mécanismes biologiques autour du SIDA étaient en cours de&nbsp;découverte.</figcaption>
  223. </figure>
  224. <p>D’autres temps, d’autres&nbsp;démons.</p>
  225. <a href="#hr-11" title="Lien vers cette section de la page"><hr id="hr-11" /></a>
  226. <p>Le dossier spécial sur la voiture électrique se terminait&nbsp;ainsi&nbsp;:</p>
  227. <blockquote>
  228. <p>Nous sommes loin des anticipations du début des années 1970&nbsp;qui attribuaient au véhicule électrique 7&nbsp;à 10&#8239;% du parc automobile à l’horizon 1990-1995. L’avenir même du véhicule, du moins en ce qui concerne l’étendue de son champ d’utilisation, demeure incertain. Celle-ci sera fonction des progrès qui seront réalisés sur les générateurs électrochimiques. Les filières potentiellement les plus performantes (filières chaudes, filières organiques, piles à combustibles) n’en sont encore qu’au stade de la recherche appliquée ou du développement et quelques-unes au stade de la recherche fondamentale. Mais des progrès sont enregistrés et les raisons profondes de poursuivre l’effort demeurent. <mark>Si une volonté politique s’affirme et parvient à motiver les premiers utilisateurs potentiels</mark> (administrations et grands organismes publics), on peut espérer voir sortir les premières séries industrielles de véhicules au début de la prochaine&nbsp;décennie.</p>
  229. </blockquote>
  230. <p>D’autres époques, mêmes utopies. Je vois de plus en plus de gros véhicules électriques, j’ai même croisé une JEEP l’autre fois. Tristesse du rêve&nbsp;américain.</p>
  231. <a href="#hr-12" title="Lien vers cette section de la page"><hr id="hr-12" /></a>
  232. <blockquote>
  233. <p>J’aime bien l’expression «&nbsp;sans nom&nbsp;» (genre une galère sans nom, une injustice sans nom)<br />
  234. Ça fait un peu eldritchien pour moi, genre quelque chose de si terrible qu’on ne peut pas le nommer, qu’on ne peut pas concevoir&nbsp;entièrement</p>
  235. <p>Mais aussi ça me donne l’impression que si je nomme les choses ça va régler une partie du problème c’est&nbsp;fun</p>
  236. <p>«&nbsp;ma vie était une galère sans nom c’était terrible. Bha je l’ai appelé bob et du coup depuis ça&nbsp;va&nbsp;»</p>
  237. <p><cite><a data-link-domain="pipou.academy" href="https://pipou.academy/@tiphaine/111629699683457788">@tiphaine@pipou.academy</a></cite></p>
  238. </blockquote>
  239. <nav>
  240. <p>
  241. <a href="/david/2024/addiction/"
  242. title="Liste de tous les articles 2024 associés à cette étiquette"
  243. rel="tag">#addiction</a>
  244. <a href="/david/2024/processus/"
  245. title="Liste de tous les articles 2024 associés à cette étiquette"
  246. rel="tag">#processus</a>
  247. <a href="/david/2024/sport/"
  248. title="Liste de tous les articles 2024 associés à cette étiquette"
  249. rel="tag">#sport</a>
  250. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  251. </p>
  252. </nav>
  253. <h2>
  254. <a href="/david/2024/01/01/" title="Lien permanent vers cet article">Dryear(s)</a> <time datetime="2024-01-01">1 janvier 2024</time>
  255. </h2>
  256. <blockquote>
  257. <p>33&#8239;% de 44&nbsp;millions de consommateurs vont faire le Dry January<br />
  258. 22&#8239;% des consommateurs ont une conso excessive, c’est-à-dire 10&nbsp;verres/semaine max et plus de deux&nbsp;verres/jour.</p>
  259. <p>Les seniors sont aussi très touché·es.<br />
  260. <mark>L’alcool est une drogue.</mark>.
  261. On peut faire la fête sans alcool et&nbsp;s’éclater.</p>
  262. <p>Quand on arrête&nbsp;: bienfaits sur le foie, la peau, le coeur, etc…<br />
  263. Pb&nbsp;: mémoire, troubles cognitifs, responsable de cancer, pb sommeil, décompensation de maladie psy,…<br />
  264. 41000&nbsp;décès par an en&nbsp;France.</p>
  265. <p>Les cinq symptômes définissent un problème de&nbsp;dépendance&nbsp;:</p>
  266. <ul>
  267. <li>Perte de&nbsp;contrôle</li>
  268. <li>Usage&nbsp;compulsif</li>
  269. <li>Envie&nbsp;répressive</li>
  270. <li>Usage&nbsp;chronique</li>
  271. <li>Conséquences psychiques, physiques, sociales,…</li>
  272. </ul>
  273. <p>Bon Dry J. pour celleux qui le font&#8239;! Moi j’en&nbsp;suis&#8239;!</p>
  274. <p><cite><a data-link-domain="framapiaf.org" href="https://framapiaf.org/@Air/111681709094993435">@Air@framapiaf.org</a></cite></p>
  275. </blockquote>
  276. <p>Dans mon entourage, de plus en plus de personnes que j’estime ne boivent pas d’alcool, de plus en plus de personnes qui vieillissent en deviennent dépendantes. Je suis davantage attiré par la première option… et pas pour un seul&nbsp;mois.</p>
  277. <p>Je me sens prêt, on verra bien où cela me&nbsp;mène.</p>
  278. <a href="#hr-1" title="Lien vers cette section de la page"><hr id="hr-1" /></a>
  279. <p>Grosse envie de reprendre la CSS par ici en ce début d’année. Avec le dilemme de faire chuter cette motivation si je publie dès maintenant avec l’ancienne (qui restera effective sur les anciens articles). Je vais essayer de me&nbsp;retenir.</p>
  280. <nav>
  281. <p>
  282. <a href="/david/2024/addiction/"
  283. title="Liste de tous les articles 2024 associés à cette étiquette"
  284. rel="tag">#addiction</a>
  285. <a href="/david/2024/experience/"
  286. title="Liste de tous les articles 2024 associés à cette étiquette"
  287. rel="tag">#expérience</a>
  288. <a href="/david/2024/protopie/"
  289. title="Liste de tous les articles 2024 associés à cette étiquette"
  290. rel="tag">#protopie</a>
  291. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  292. </p>
  293. </nav>
  294. <form action="/david/recherche/" method="get">
  295. <fieldset>
  296. <legend>Recherche</legend>
  297. <label for="input-search">Termes de votre recherche :</label>
  298. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  299. <input type="submit" value="Chercher">
  300. <p id="indexation-infos">
  301. <small>
  302. Seuls les contenus de ces 8 dernières années sont indexés.
  303. </small>
  304. </p>
  305. </fieldset>
  306. </form>
  307. <aside>
  308. <theme-toggle></theme-toggle>
  309. </aside>
  310. </article>
  311. <hr>
  312. <footer>
  313. <p>
  314. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  315. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  316. <a href="http://larlet.com"
  317. title="Go to my English profile"
  318. data-instant>Pro</a>
  319. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  320. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  321. </p>
  322. <template id="theme-selector">
  323. <form>
  324. <style type="text/css">
  325. fieldset div {
  326. text-align: center;
  327. }
  328. </style>
  329. <fieldset>
  330. <legend>Thème</legend>
  331. <div>
  332. <label>
  333. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  334. Auto
  335. </label>
  336. <label>
  337. <input type="radio" value="dark" name="chosen-color-scheme">
  338. Foncé
  339. </label>
  340. <label>
  341. <input type="radio" value="light" name="chosen-color-scheme">
  342. Clair
  343. </label>
  344. </div>
  345. </fieldset>
  346. </form>
  347. </template>
  348. </footer>
  349. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  350. <script>
  351. class ThemeToggle extends HTMLElement {
  352. constructor() {
  353. super()
  354. const themeSelectorTemplate = document.querySelector('#theme-selector')
  355. const form = themeSelectorTemplate.content.firstElementChild
  356. this.attachShadow({ mode: 'open' })
  357. this.shadowRoot.appendChild(form.cloneNode(true))
  358. }
  359. connectedCallback() {
  360. const form = this.shadowRoot.querySelector('form')
  361. form.addEventListener('change', (e) => {
  362. const chosenColorScheme = e.target.value
  363. localStorage.setItem('theme', chosenColorScheme)
  364. toggleTheme(chosenColorScheme)
  365. })
  366. const selectedTheme = localStorage.getItem('theme')
  367. if (selectedTheme && selectedTheme !== 'undefined') {
  368. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  369. }
  370. }
  371. }
  372. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  373. window.addEventListener('load', () => {
  374. let colorsLayer = undefined
  375. let hasDarkRules = false
  376. for (const styleSheet of Array.from(document.styleSheets)) {
  377. let mediaRules = []
  378. for (const layerRule of styleSheet.cssRules) {
  379. if (!(layerRule instanceof CSSLayerBlockRule)) {
  380. continue
  381. }
  382. if (layerRule.name === 'colors') {
  383. colorsLayer = layerRule
  384. }
  385. for (const cssRule of layerRule.cssRules) {
  386. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  387. continue
  388. }
  389. // WARNING: Safari does not have/supports `conditionText`.
  390. if (cssRule.conditionText) {
  391. if (cssRule.conditionText !== prefersColorSchemeDark) {
  392. continue
  393. }
  394. } else {
  395. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  396. continue
  397. }
  398. }
  399. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  400. }
  401. }
  402. // WARNING: do not try to insert a Rule to a styleSheet you are
  403. // currently iterating on, otherwise the browser will be stuck
  404. // in a infinite loop…
  405. for (const mediaRule of mediaRules) {
  406. // Safari requires the `0` second parameter (even if default).
  407. colorsLayer.insertRule(mediaRule.cssText, 0)
  408. hasDarkRules = true
  409. }
  410. }
  411. if (hasDarkRules) {
  412. if ('customElements' in window && !customElements.get('theme-toggle')) {
  413. customElements.define('theme-toggle', ThemeToggle)
  414. }
  415. }
  416. })
  417. </script>
  418. </body>
  419. </html>