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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436
  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>Tag #sport — David Larlet</title>
  13. <meta name="description" content="Publications relatives au tag #sport">
  14. <!-- That good ol' feed, subscribe :). -->
  15. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  16. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  17. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  18. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  19. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  20. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  21. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  22. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  23. <meta name="msapplication-TileColor" content="#f7f7f7">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
  26. <meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
  27. <!-- Documented, feel free to shoot an email. -->
  28. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  29. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  30. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  31. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  32. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  36. <script>
  37. function toggleTheme(themeName) {
  38. document.documentElement.classList.toggle(
  39. 'forced-dark',
  40. themeName === 'dark'
  41. )
  42. document.documentElement.classList.toggle(
  43. 'forced-light',
  44. themeName === 'light'
  45. )
  46. }
  47. const selectedTheme = localStorage.getItem('theme')
  48. if (selectedTheme !== 'undefined') {
  49. toggleTheme(selectedTheme)
  50. }
  51. </script>
  52. <style type="text/css">
  53. details[open] summary {
  54. display: none;
  55. }
  56. </style>
  57. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  58. <header>
  59. <h1>Publications relatives au tag #sport</h1>
  60. </header>
  61. <nav>
  62. <p class="center">
  63. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  64. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  65. </svg> Accueil</a>
  66. • <a rel="tags" href="/david/#tags-2023" title="Liste de toutes les étiquettes"><svg class="icon icon-tags">
  67. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-tags"></use>
  68. </svg> Étiquettes</a>
  69. </p>
  70. </nav>
  71. <hr>
  72. <main>
  73. <p>Les plus récentes en premier, les 3 premières sont dépliées et ensuite c’est à la demande, bonne exploration !</p>
  74. <h2><a href="/david/2023/01/17/" title="Lien permanent vers cet article">Populaire</a> (2023-01-17)</h2>
  75. <p>Plus j’en fais et plus je considère que le ski de fond est un sport populaire (dans le sens «&nbsp;pour le peuple&nbsp;»). Très peu d’équipement est nécessaire et même de la récupération permet de s’amuser, le façonnage des pistes requiert relativement peu d’énergies (fossiles), il est possible d’en faire même en étant très débutant·e et pas à l’aise avec les pentes. Ça devrait être une politique de santé&nbsp;publique&#8239;!</p>
  76. <p>Alors bien sûr, un bon équipement change des choses mais la technique et l’expérience compensent tellement que ça en devient presque négligeable (en loisir). Tout le monde peut se mettre dans les rails et pousser un pied devant l’autre. Bon OK, juste à côté. C’est un excellent moyen de se mettre en confiance avant d’oser glisser. Et puis, le pas s’allonge, les bras se décrispent et se mettent en mouvement aussi, les cuisses prennent le relai, les pieds se&nbsp;soulèvent.</p>
  77. <p>Lorsqu’on commence à glisser et à trouver l’équilibre, le point d’accroche, le mouvement juste, ça procure une sensation de vol incroyable et ça permet de suer en continu (autant que la course mais avec moins d’impacts). Le matériel est léger et plutôt silencieux, les pratiquant·es courtois·es (et âgé·es, <a href="/david/2021/02/10/">en tout cas l’après-midi</a>).</p>
  78. <p>Je n’en dis pas plus… il risquerait d’y avoir trop de monde dans les&nbsp;traces&nbsp;😅.</p>
  79. <p>PS&nbsp;: j’ai une petite (8&#8239;km, hamster-style) piste à 250&nbsp;mètres de chez moi et je suis tellement reconnaissant à la ville de Montréal d’aménager les parcs et pistes cyclables en hiver pour glisser dans la nature&nbsp;urbaine&nbsp;💚.</p>
  80. <figure>
  81. <a href="#2023-01-13-ski-visitation1"
  82. title="Cliquer pour une version haute résolution">
  83. <picture>
  84. <source
  85. srcset="/static/david/2023/2023-01-13-ski-visitation1.webp 2048w"
  86. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  87. type="image/webp">
  88. <!-- The <img> tag is a fallback image (required in the <picture> tag) -->
  89. <img
  90. src="/static/david/2023/2023-01-13-ski-visitation1.jpg"
  91. width="2048" height="2731"
  92. srcset="/static/david/2023/2023-01-13-ski-visitation1.jpg 2048w"
  93. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  94. fetchpriority="high"
  95. decoding="sync"
  96. alt="Des traces de piste de ski de fond dans la tempête de neige.">
  97. </picture>
  98. </a>
  99. <a href="#_" class="lightbox" id="2023-01-13-ski-visitation1">
  100. <picture style="margin:0 auto;">
  101. <source
  102. srcset="/static/david/2023/2023-01-13-ski-visitation1.webp 2048w"
  103. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  104. type="image/webp">
  105. <!-- The <img> tag is a fallback image (required in the <picture> tag) -->
  106. <img
  107. src="/static/david/2023/2023-01-13-ski-visitation1.jpg"
  108. width="2048" height="2731"
  109. srcset="/static/david/2023/2023-01-13-ski-visitation1.jpg 2048w"
  110. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  111. fetchpriority="high"
  112. decoding="sync"
  113. alt="Des traces de piste de ski de fond dans la tempête de neige.">
  114. </picture>
  115. </a>
  116. <figcaption>Parc de l’Île de la Visitation, Montréal, 13 janvier&nbsp;2023.</figcaption>
  117. </figure>
  118. <figure>
  119. <a href="#2023-01-13-ski-visitation2"
  120. title="Cliquer pour une version haute résolution">
  121. <picture>
  122. <source
  123. srcset="/static/david/2023/2023-01-13-ski-visitation2.webp 2048w"
  124. sizes="min(100vw, calc(100vh * 2048 / 1536))"
  125. type="image/webp">
  126. <!-- The <img> tag is a fallback image (required in the <picture> tag) -->
  127. <img
  128. src="/static/david/2023/2023-01-13-ski-visitation2.jpg"
  129. width="2048" height="1536"
  130. srcset="/static/david/2023/2023-01-13-ski-visitation2.jpg 2048w"
  131. sizes="min(100vw, calc(100vh * 2048 / 1536))"
  132. fetchpriority="high"
  133. decoding="sync"
  134. alt="Des traces de piste de ski de fond dans la tempête de neige.">
  135. </picture>
  136. </a>
  137. <a href="#_" class="lightbox" id="2023-01-13-ski-visitation2">
  138. <picture style="margin:0 auto;">
  139. <source
  140. srcset="/static/david/2023/2023-01-13-ski-visitation2.webp 2048w"
  141. sizes="min(100vw, calc(100vh * 2048 / 1536))"
  142. type="image/webp">
  143. <!-- The <img> tag is a fallback image (required in the <picture> tag) -->
  144. <img
  145. src="/static/david/2023/2023-01-13-ski-visitation2.jpg"
  146. width="2048" height="1536"
  147. srcset="/static/david/2023/2023-01-13-ski-visitation2.jpg 2048w"
  148. sizes="min(100vw, calc(100vh * 2048 / 1536))"
  149. fetchpriority="high"
  150. decoding="sync"
  151. alt="Des traces de piste de ski de fond dans la tempête de neige.">
  152. </picture>
  153. </a>
  154. <figcaption>Parc de l’Île de la Visitation, Montréal, 13 janvier&nbsp;2023.</figcaption>
  155. </figure>
  156. <figure>
  157. <a href="#2023-01-13-ski-visitation3"
  158. title="Cliquer pour une version haute résolution">
  159. <picture>
  160. <source
  161. srcset="/static/david/2023/2023-01-13-ski-visitation3.webp 2048w"
  162. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  163. type="image/webp">
  164. <!-- The <img> tag is a fallback image (required in the <picture> tag) -->
  165. <img
  166. src="/static/david/2023/2023-01-13-ski-visitation3.jpg"
  167. width="2048" height="2731"
  168. srcset="/static/david/2023/2023-01-13-ski-visitation3.jpg 2048w"
  169. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  170. fetchpriority="high"
  171. decoding="sync"
  172. alt="Des traces de piste de ski de fond dans la tempête de neige.">
  173. </picture>
  174. </a>
  175. <a href="#_" class="lightbox" id="2023-01-13-ski-visitation3">
  176. <picture style="margin:0 auto;">
  177. <source
  178. srcset="/static/david/2023/2023-01-13-ski-visitation3.webp 2048w"
  179. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  180. type="image/webp">
  181. <!-- The <img> tag is a fallback image (required in the <picture> tag) -->
  182. <img
  183. src="/static/david/2023/2023-01-13-ski-visitation3.jpg"
  184. width="2048" height="2731"
  185. srcset="/static/david/2023/2023-01-13-ski-visitation3.jpg 2048w"
  186. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  187. fetchpriority="high"
  188. decoding="sync"
  189. alt="Des traces de piste de ski de fond dans la tempête de neige.">
  190. </picture>
  191. </a>
  192. <figcaption>Parc de l’Île de la Visitation, Montréal, 13 janvier&nbsp;2023.</figcaption>
  193. </figure>
  194. <figure>
  195. <a href="#2023-01-13-ski-visitation4"
  196. title="Cliquer pour une version haute résolution">
  197. <picture>
  198. <source
  199. srcset="/static/david/2023/2023-01-13-ski-visitation4.webp 2048w"
  200. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  201. type="image/webp">
  202. <!-- The <img> tag is a fallback image (required in the <picture> tag) -->
  203. <img
  204. src="/static/david/2023/2023-01-13-ski-visitation4.jpg"
  205. width="2048" height="2731"
  206. srcset="/static/david/2023/2023-01-13-ski-visitation4.jpg 2048w"
  207. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  208. fetchpriority="high"
  209. decoding="sync"
  210. alt="Des traces de piste de ski de fond dans la tempête de neige.">
  211. </picture>
  212. </a>
  213. <a href="#_" class="lightbox" id="2023-01-13-ski-visitation4">
  214. <picture style="margin:0 auto;">
  215. <source
  216. srcset="/static/david/2023/2023-01-13-ski-visitation4.webp 2048w"
  217. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  218. type="image/webp">
  219. <!-- The <img> tag is a fallback image (required in the <picture> tag) -->
  220. <img
  221. src="/static/david/2023/2023-01-13-ski-visitation4.jpg"
  222. width="2048" height="2731"
  223. srcset="/static/david/2023/2023-01-13-ski-visitation4.jpg 2048w"
  224. sizes="min(100vw, calc(100vh * 2048 / 2731))"
  225. fetchpriority="high"
  226. decoding="sync"
  227. alt="Des traces de piste de ski de fond dans la tempête de neige.">
  228. </picture>
  229. </a>
  230. <figcaption>Parc de l’Île de la Visitation, Montréal, 13 janvier&nbsp;2023.</figcaption>
  231. </figure>
  232. <hr />
  233. <blockquote>
  234. <p>Et si l’attachement à la retraite des Français ne tenait plus à l’attente d’un repos ultime au terme d’une vie laborieuse et pénible, mais à la possibilité de <mark>faire retraite dès maintenant</mark> pour se réinventer dans un travail&nbsp;«&nbsp;amélioré&nbsp;»&#8239;?</p>
  235. <p><cite><em><a href="https://www.philomag.com/articles/retraite-la-fin-du-bonheur-differe-par-denis-maillard">Retraite&nbsp;: la fin du “bonheur différé”, par Denis Maillard</a></em>&nbsp;(<a href="/david/cache/2023/614fe609b04719e7835fc0717b99c1c6/">cache</a>)</cite></p>
  236. </blockquote>
  237. <h2><a href="/david/2023/01/04/" title="Lien permanent vers cet article">Rétrospectives</a> (2023-01-04)</h2>
  238. <blockquote>
  239. <p>J’ai mauvaise conscience. Aujourd’hui, j’ai gagné de l’argent en récompense d’une activité inutile. J’ai monopolisé l’attention et l’admiration d’enfants et d’adultes pour n’avoir fait rien d’autre que mettre un pied devant l’autre un peu plus vite qu’ils ne le&nbsp;font.</p>
  240. <p>Individuellement, je suis en accord avec moi-même sur le fait que courir m’a tout donné. En revanche, si j’y réfléchis en me replaçant dans le tissu de la société, je reconnais la stérilité de cette&nbsp;occupation.</p>
  241. <p><cite><em>Au-delà des sommets</em>, Kilian&nbsp;Jornet</cite></p>
  242. </blockquote>
  243. <p>À chaque fois que je lis des rétrospectives sportives sur l’année, je me rends compte que ça serait quand même flippant que tant de personnes aient accès à mes moindres ballades, mes sautes de cœur, mes humeurs du jour, mes parcours préférés, etc.</p>
  244. <p>Sociologiquement, qu’est ce que ça signifie d’avoir besoin de consigner chacun de ses pas&#8239;? Les rares fois où j’ai fait usage d’un outil de suivi lors de mes activités, cela a modifié ma façon d’évoluer et donc d’être. Peut-être que j’ai davantage besoin d’intimité que d’accompagnement dans ces moments là&#8239;? Est-ce que l’aventure c’est réussir à sortir de la <em>heatmap</em>&nbsp;locale&#8239;?!</p>
  245. <p>Mon cyclomètre est non connecté, j’ai essayé de trouver l’outil le plus stupide qui soit pour consigner tout de même une distance totale. Pareil pour <a href="/david/2021/07/16/">mon char</a>. Jusqu’à ce que la déconnexion devienne trop louche socialement pour pouvoir continuer à me sentir&nbsp;libre.</p>
  246. <p>Ces données portent tellement bien leur nom. Et surtout la&nbsp;santé&#8239;!</p>
  247. <hr />
  248. <blockquote lang="en">
  249. <p>😬 This is the crux of the Yard-sale model. In a free market, one person ends up with all of the wealth – <mark>completely by&nbsp;chance.</mark></p>
  250. <p>This is completely&nbsp;counterintuitive.</p>
  251. <p><cite><em><a href="https://pudding.cool/2022/12/yard-sale/">Why the super rich are inevitable</a></em>&nbsp;(<a href="/david/cache/2023/669f9d9d8f0c6cfb8131887c17eecfa9/">cache</a>)</cite></p>
  252. </blockquote>
  253. <blockquote lang="en">
  254. <p>👀 For more than 20&nbsp;years, we’ve known that teams spending time watching users, can see improvements. Yet we still see many teams with regular user research programs that produce complicated, unusable products. We couldn’t understand why, until&nbsp;now.</p>
  255. <p><mark>Each team member has to be exposed directly to the users&nbsp;themselves.</mark></p>
  256. <p><cite><em><a href="https://articles.uie.com/user_exposure_hours/">Fast Path to a Great UX - Increased Exposure Hours</a></em>&nbsp;(<a href="/david/cache/2023/4c5b3193ced812222ef1a6d53e3470aa/">cache</a>)</cite></p>
  257. </blockquote>
  258. <h2><a href="/david/2023/01/02/" title="Lien permanent vers cet article">Lucidité</a> (2023-01-02)</h2>
  259. <blockquote>
  260. <p>Seul face à la montagne je me sens bien parce que, comme l’a dit Reinhold Messner, elle n’est ni juste ni injuste, mais simplement dangereuse. Et face au danger, une certaine logique s’impose immédiatement quand il faut prendre les décisions qu’on considère les plus adaptées. En montagne, je ne doute jamais lorsque se présente un imprévu, mais <mark>dans le domaine plus rude des relations humaines,</mark> l’indécision me plonge dans un état de paralysie jusqu’à ce qu’il soit trop tard pour agir. Je dois admettre que je n’ai jamais su me faire au mode de fonctionnement des êtres humains, qu’ils soient bons, mauvais ou&nbsp;dangereux.</p>
  261. <p><cite><em>Au-delà des sommets</em>, Kilian&nbsp;Jornet</cite></p>
  262. </blockquote>
  263. <p>J’ai <a href="/david/blog/2013/souffrance-plaisir/">souvent</a> <a href="/david/stream/2015/01/08/">parlé</a> de Kilian Jornet <a href="/david/stream/2018/06/29/">par</a> <a href="/stream/2019/02/15/">ici</a> et j’apprécie beaucoup sa franchise lorsqu’il écrit des livres. Il s’autorise à parler d’aspects de sa personnalité qui ne transparaissent pas dans les <em>interviews</em> ou des réflexions qu’il pourrait difficilement tenir sur un plateau de «&nbsp;sportifs&nbsp;extrêmes&nbsp;»…</p>
  264. <blockquote>
  265. <p>Escalader ce type de montagnes ne consiste en rien d’autre que mettre sa vie en danger pour atteindre le sommet et, ensuite, redescendre. Nous ne nous situons donc certainement pas dans les cieux de l’héroïsme, mais bien plutôt dans les plaines de la&nbsp;stupidité.</p>
  266. <p>Même si des sportifs cherchent à le cacher et font coïncider leur expédition avec une campagne de levée de fonds, destinés à un quelconque projet humanitaire ou à porter l’attention sur une maladie rare, <mark>l’ascension d’un haut sommet comme l’Everest n’a rien d’héroïque.</mark> Ce n’est, en réalité, qu’une activité égoïste. Un divertissement dangereux et&nbsp;cher.</p>
  267. <p><em>Ibid.</em></p>
  268. </blockquote>
  269. <p>La recherche de ses propres limites est l’objet d’une&nbsp;vie.</p>
  270. <hr />
  271. <blockquote lang="en">
  272. <p>What it means is that there is no supply chain here. Because there is no supplier. I am not providing you something that you bought for me. There is no relationship. I put something online because I wanted to. The fact you made your product depend on it is <em>your responsibility</em>. Not mine. Not the one of the providers. We provide libraries. We do not supply them. <mark>You cannot apply rules to&nbsp;me.</mark></p>
  273. <p><cite><em><a href="https://www.softwaremaxims.com/blog/not-a-supplier">Software Maxims</a></em>&nbsp;(<a href="/david/cache/2023/3ca10b945c7517c2f234e3b9534bfb6d/">cache</a>)</cite></p>
  274. </blockquote>
  275. </main>
  276. <hr>
  277. <footer>
  278. <p>
  279. <nobr>
  280. <a href="/david/" title="Aller à l’accueil"
  281. ><svg class="icon icon-home">
  282. <use
  283. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"
  284. ></use>
  285. </svg>
  286. Accueil</a
  287. >
  288. </nobr>
  289. <nobr>
  290. <a href="/david/log/" title="Accès au flux RSS"
  291. ><svg class="icon icon-rss2">
  292. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
  293. </svg>
  294. Suivre</a
  295. >
  296. </nobr>
  297. <nobr>
  298. <a href="http://larlet.com" title="Go to my English profile" data-instant
  299. ><svg class="icon icon-user-tie">
  300. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-user-tie"></use>
  301. </svg>
  302. Pro</a
  303. >
  304. </nobr>
  305. <nobr>
  306. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"
  307. ><svg class="icon icon-mail">
  308. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
  309. </svg>
  310. Email</a
  311. >
  312. </nobr>
  313. <nobr>
  314. <abbr
  315. class="nowrap"
  316. title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"
  317. ><svg class="icon icon-hammer2">
  318. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-hammer2"></use>
  319. </svg>
  320. Légal</abbr
  321. >
  322. </nobr>
  323. </p>
  324. <template id="theme-selector">
  325. <form>
  326. <fieldset>
  327. <legend><svg class="icon icon-brightness-contrast">
  328. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-brightness-contrast"></use>
  329. </svg> Thème</legend>
  330. <label>
  331. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  332. </label>
  333. <label>
  334. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  335. </label>
  336. <label>
  337. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  338. </label>
  339. </fieldset>
  340. </form>
  341. </template>
  342. </footer>
  343. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  344. <script>
  345. function loadThemeForm(templateName) {
  346. const themeSelectorTemplate = document.querySelector(templateName)
  347. const form = themeSelectorTemplate.content.firstElementChild
  348. themeSelectorTemplate.replaceWith(form)
  349. form.addEventListener('change', (e) => {
  350. const chosenColorScheme = e.target.value
  351. localStorage.setItem('theme', chosenColorScheme)
  352. toggleTheme(chosenColorScheme)
  353. })
  354. const selectedTheme = localStorage.getItem('theme')
  355. if (selectedTheme && selectedTheme !== 'undefined') {
  356. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  357. }
  358. }
  359. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  360. window.addEventListener('load', () => {
  361. let hasDarkRules = false
  362. for (const styleSheet of Array.from(document.styleSheets)) {
  363. let mediaRules = []
  364. for (const cssRule of styleSheet.cssRules) {
  365. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  366. continue
  367. }
  368. // WARNING: Safari does not have/supports `conditionText`.
  369. if (cssRule.conditionText) {
  370. if (cssRule.conditionText !== prefersColorSchemeDark) {
  371. continue
  372. }
  373. } else {
  374. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  375. continue
  376. }
  377. }
  378. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  379. }
  380. // WARNING: do not try to insert a Rule to a styleSheet you are
  381. // currently iterating on, otherwise the browser will be stuck
  382. // in a infinite loop…
  383. for (const mediaRule of mediaRules) {
  384. styleSheet.insertRule(mediaRule.cssText)
  385. hasDarkRules = true
  386. }
  387. }
  388. if (hasDarkRules) {
  389. loadThemeForm('#theme-selector')
  390. }
  391. })
  392. </script>
  393. </body>
  394. </html>