Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  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. Tag #photographie
  14. — David Larlet</title>
  15. <meta name="description" content="Publications relatives au tag #photographie">
  16. <!-- That good ol' feed, subscribe :). -->
  17. <link rel="alternate"
  18. type="application/atom+xml"
  19. title="Feed"
  20. href="/david/log/">
  21. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  22. <link rel="apple-touch-icon"
  23. sizes="180x180"
  24. href="/static/david/icons2/apple-touch-icon.png">
  25. <link rel="icon"
  26. type="image/png"
  27. sizes="32x32"
  28. href="/static/david/icons2/favicon-32x32.png">
  29. <link rel="icon"
  30. type="image/png"
  31. sizes="16x16"
  32. href="/static/david/icons2/favicon-16x16.png">
  33. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  34. <link rel="mask-icon"
  35. href="/static/david/icons2/safari-pinned-tab.svg"
  36. color="#07486c">
  37. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  38. <meta name="msapplication-TileColor" content="#f7f7f7">
  39. <meta name="msapplication-config"
  40. content="/static/david/icons2/browserconfig.xml">
  41. <meta name="theme-color"
  42. content="#f7f7f7"
  43. media="(prefers-color-scheme: light)">
  44. <meta name="theme-color"
  45. content="#272727"
  46. media="(prefers-color-scheme: dark)">
  47. <!-- Is that even respected? Retrospectively? What a shAItshow…
  48. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  49. <meta name="robots" content="noai, noimageai">
  50. <!-- Documented, feel free to shoot an email. -->
  51. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  52. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  53. <link rel="preload"
  54. href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2"
  55. as="font"
  56. type="font/woff2"
  57. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  58. crossorigin>
  59. <link rel="preload"
  60. href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2"
  61. as="font"
  62. type="font/woff2"
  63. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  64. crossorigin>
  65. <link rel="preload"
  66. href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2"
  67. as="font"
  68. type="font/woff2"
  69. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  70. crossorigin>
  71. <link rel="preload"
  72. href="/static/david/css/fonts/triplicate_t3_regular.woff2"
  73. as="font"
  74. type="font/woff2"
  75. media="(prefers-color-scheme: dark)"
  76. crossorigin>
  77. <link rel="preload"
  78. href="/static/david/css/fonts/triplicate_t3_bold.woff2"
  79. as="font"
  80. type="font/woff2"
  81. media="(prefers-color-scheme: dark)"
  82. crossorigin>
  83. <link rel="preload"
  84. href="/static/david/css/fonts/triplicate_t3_italic.woff2"
  85. as="font"
  86. type="font/woff2"
  87. media="(prefers-color-scheme: dark)"
  88. crossorigin>
  89. <script>
  90. function toggleTheme(themeName) {
  91. document.documentElement.classList.toggle(
  92. 'forced-dark',
  93. themeName === 'dark'
  94. )
  95. document.documentElement.classList.toggle(
  96. 'forced-light',
  97. themeName === 'light'
  98. )
  99. }
  100. const selectedTheme = localStorage.getItem('theme')
  101. if (selectedTheme !== 'undefined') {
  102. toggleTheme(selectedTheme)
  103. }
  104. </script>
  105. <style type="text/css">
  106. details[open] summary {
  107. display: none;
  108. }
  109. </style>
  110. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick"
  111. data-instant-intensity="viewport-all">
  112. <header>
  113. <h1>Publications relatives au tag #photographie</h1>
  114. </header>
  115. <nav>
  116. <p class="center">
  117. <a href="/david/" title="Aller à l’accueil">
  118. <svg class="icon icon-home">
  119. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  120. </svg>
  121. Accueil</a>
  122. • <a rel="tags"
  123. href="/david/#tags-2023"
  124. title="Liste de toutes les étiquettes">
  125. <svg class="icon icon-tags">
  126. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-tags"></use>
  127. </svg>
  128. Étiquettes</a>
  129. </p>
  130. </nav>
  131. <hr>
  132. <main>
  133. <p>Les plus récentes en premier, les 3 premières sont dépliées et ensuite c’est à la demande, bonne exploration !</p>
  134. <h2>
  135. <a href="/david/2023/03/03/" title="Lien permanent vers cet article">Jour&nbsp;2</a> (2023-03-03)
  136. </h2>
  137. <p>Je me suis couché en ayant relativement chaud mais au cours de la nuit, la température est bien tombée avec le vent. Je me réveille vers 6h avec le visage plutôt frais et le trou du duvet bien gelé, je regarde la météo depuis l’intérieur de mon duvet et iels m’annoncent -15°C ressenti -20°C avec le vent. Pas pire. ERREUR.</p>
  138. <p>En fait, ce duvet est tellement chaud que je ne me suis pas trop méfié mais dès l’habillage je sens qu’il fait vraiment frette. Les chaussures sont gelées et les lacets aussi, les gants en cuirs sont raides et inutilisables, ma barbe gèle instantanément, le bouchon du Thermos a gelé. Ma montre m’indique -23°C et il y a du vent. La météo canadienne disais-je. Je fais vite un feu que j’aurais un peu mieux dû préparer la veille, je mets longtemps à récupérer de la dextérité. Ne parlons pas des&nbsp;pieds.</p>
  139. <figure>
  140. <a href="/static/david/2023/2023-03-03-feu-soleil.jpg"
  141. title="Cliquer pour une version haute résolution">
  142. <img
  143. src="/static/david/2023/2023-03-03-feu-soleil.jpg"
  144. width="1512" height="2268"
  145. srcset="/static/david/2023/2023-03-03-feu-soleil.jpg 1512w, /static/david/2023/2023-03-03-feu-soleil_660x440.jpg 660w, /static/david/2023/2023-03-03-feu-soleil_990x660.jpg 990w, /static/david/2023/2023-03-03-feu-soleil_1320x880.jpg 1320w"
  146. sizes="min(100vw, calc(100vh * 1512 / 2268))"
  147. loading="lazy"
  148. decoding="async"
  149. alt="Le campement avec le soleil en arrière plan.">
  150. </a>
  151. <figcaption>Ô soleil, merci de ta chaleur&nbsp;!</figcaption>
  152. </figure>
  153. <p>La sortie du duvet est vraiment l’étape cruciale du camping hivernal. D’habitude, je commence à mettre tout ce que je peux dans le duvet pendant une quinzaine de minutes le temps de réchauffer les vêtements externes. J’aurais pu tenter de mettre une chaufferette dans chaque chaussure aussi (j’en emporte toujours deux sans jamais les utiliser&#8239;!). Je fais une petite danse du réchauffement mais je sais aussi que je suis en train de louper la meilleure heure pour les photos et ça me frustre. Je tente un changement d’objectifs à mains nues et c’est une erreur… ouille le métal&nbsp;gelé.</p>
  154. <p>Je respire un bon coup et j’accepte la situation. La priorité est de se réchauffer en bougeant tout en m’alimentant et en faisant fondre de la neige. Il est possible de faire des erreurs mais pas de les enchaîner dans ces conditions. La magie du feu et de l’eau chaude finit par faire son&nbsp;effet.</p>
  155. <p>C’est une de ces journées fraîches de plein soleil donc la lumière est très violente. Je décide de descendre la rivière pour réchauffer mes pieds. Bon OK, pas&nbsp;littéralement.</p>
  156. <figure>
  157. <a href="/static/david/2023/2023-03-03-riviere-ouareau.jpg"
  158. title="Cliquer pour une version haute résolution">
  159. <img
  160. src="/static/david/2023/2023-03-03-riviere-ouareau.jpg"
  161. width="1512" height="2268"
  162. srcset="/static/david/2023/2023-03-03-riviere-ouareau.jpg 1512w, /static/david/2023/2023-03-03-riviere-ouareau_660x440.jpg 660w, /static/david/2023/2023-03-03-riviere-ouareau_990x660.jpg 990w, /static/david/2023/2023-03-03-riviere-ouareau_1320x880.jpg 1320w"
  163. sizes="min(100vw, calc(100vh * 1512 / 2268))"
  164. loading="lazy"
  165. decoding="async"
  166. alt="La rivière Ouareau bien gelée.">
  167. </a>
  168. <figcaption>Les méandres de la rivière&nbsp;gelée.</figcaption>
  169. </figure>
  170. <p>Le chemin est de toute beauté et j’ai vraiment du mal à capter cette ambiance. Il n’y a vraiment personne et je prends mon temps pour rester sec (vive la laine). Je découvre que l’emmental peut con·geler, qu’il faut commencer par casser des morceaux avec ses gants puis les faire fondre dans sa bouche jusqu’à être en capacité de le mâcher. #MeanwhileInCanada</p>
  171. <figure>
  172. <a href="/static/david/2023/2023-03-03-sentier-murmures.jpg"
  173. title="Cliquer pour une version haute résolution">
  174. <img
  175. src="/static/david/2023/2023-03-03-sentier-murmures.jpg"
  176. width="1512" height="2268"
  177. srcset="/static/david/2023/2023-03-03-sentier-murmures.jpg 1512w, /static/david/2023/2023-03-03-sentier-murmures_660x440.jpg 660w, /static/david/2023/2023-03-03-sentier-murmures_990x660.jpg 990w, /static/david/2023/2023-03-03-sentier-murmures_1320x880.jpg 1320w"
  178. sizes="min(100vw, calc(100vh * 1512 / 2268))"
  179. loading="lazy"
  180. decoding="async"
  181. alt="Le sentier des murmures.">
  182. </a>
  183. <figcaption>Une portion du sentier qui est intégralement à couvert de&nbsp;forêt.</figcaption>
  184. </figure>
  185. <p>De retour au campement, je décide de faire une sieste pour attendre des couleurs et lumières moins dures. C’est une stratégie plutôt payante et je remonte cette fois-ci la rivière, il fait moins froid et c’est assez agréable d’être silencieux car je n’ai plus vraiment besoin des raquettes, le sentier a&nbsp;gelé.</p>
  186. <figure>
  187. <a href="/static/david/2023/2023-03-03-couleurs-soir.jpg"
  188. title="Cliquer pour une version haute résolution">
  189. <img
  190. src="/static/david/2023/2023-03-03-couleurs-soir.jpg"
  191. width="1512" height="2268"
  192. srcset="/static/david/2023/2023-03-03-couleurs-soir.jpg 1512w, /static/david/2023/2023-03-03-couleurs-soir_660x440.jpg 660w, /static/david/2023/2023-03-03-couleurs-soir_990x660.jpg 990w, /static/david/2023/2023-03-03-couleurs-soir_1320x880.jpg 1320w"
  193. sizes="min(100vw, calc(100vh * 1512 / 2268))"
  194. loading="lazy"
  195. decoding="async"
  196. alt="La rivière le soir.">
  197. </a>
  198. <figcaption>Difficile de restituer la sensation de calme qu’il y avait alors, seulement troublée sporadiquement par un&nbsp;pic.</figcaption>
  199. </figure>
  200. <p>Un peu de neige est annoncée en matinée pour le lendemain. Je m’endors confiant. <a href="/david/2023/03/04/">Haha.</a></p>
  201. <hr />
  202. <p>Davantage de <a href="https://media.larlet.fr/2023-03-ouareau-01.html">photos disponibles par ici</a>.</p>
  203. <h2>
  204. <a href="/david/2023/02/01/" title="Lien permanent vers cet article">Ombres</a> (2023-02-01)
  205. </h2>
  206. <blockquote lang="en">
  207. <p>I’m not a film buff, so I write this from a layman’s perspective. But every time I watch something made before 2000, it looks so beautiful to me—not otherworldly or majestic, but <mark>beautiful in the way the world around me is beautiful.</mark> And I don’t think I’m just being nostalgic. […]</p>
  208. <p>Most usefully, their hollowness offers, by way of counter-example, a key to what does feel meaningful: texture, substance, imperfection, slowing down, taking the scenic route, natural light, places you can touch, making more considered creative choices, making <em>less</em>.</p>
  209. <p><cite><em><a href="https://haleynahman.substack.com/p/132-the-contagious-visual-blandness">#132: The contagious visual blandness of Netflix</a></em>&nbsp;(<a href="/david/cache/2023/4d3fa4020fd0504dbced1a408a2d394e/">cache</a>)</cite></p>
  210. </blockquote>
  211. <p>C’est une chose que j’ai remarqué aussi et l’essai de Robin Rendle à ce sujet <a href="https://www.robinrendle.com/essays/in-praise-of-shadows/">In Praise of Shadows</a>&nbsp;(<a href="/david/cache/2023/055ec9ce09151d35309f39b824189c61/">cache</a>) m’avait particulièrement touché cet&nbsp;été.</p>
  212. <p>Les iPhones, au fil des versions, font de «&nbsp;magnifiques&nbsp;» photographies par exemple mais ce qui est capté de la scène est faible comparé à ce qui est fait en post-acquisition pour qu’elles <em>semblent</em> magnifiquement nettes et contrastées etc. Et ce n’est qu’un début, l’apprentissage et des algorithmes encore plus avancés permettront de rendre chaque photo plus… parfaite dans la négation de son&nbsp;authenticité.</p>
  213. <p>Ma bibliothèque dans macOS Photos (iPhone) ressemble à un magazine, à une façon que d’autres ont choisi pour représenter le monde. Celle qui est dans RAW Power (DSLR) est plus modeste mais correspond davantage aux façons dont <em>j’ai</em> envie d’observer et de partager le&nbsp;monde.</p>
  214. <p>À force de regarder des séries à l’image parfaite, on se met peut-être à fuir la réalité d’un monde qui nous semble hideux dans ses imperfections et ses zones&nbsp;d’ombres.</p>
  215. <p><em>J’imagine que c’est une réflexion de vieux et que les personnes faisant de l’argentique avaient les mêmes arguments il y a quelques années. J’assume&nbsp;(presque).</em></p>
  216. <hr />
  217. <blockquote lang="en">
  218. <p>😔 We found that GitHub, GitLab, SourceForge, and Bitbucket were collectively linked to 160&nbsp;times in 2007&nbsp;and 76,746&nbsp;times in 2021. In 2021, <mark>one out of five publications in the arXiv corpus included a URI to GitHub.</mark> The complexity of GHPs like GitHub is not amenable to conventional Web archiving techniques. Therefore, the growing use of GHPs in scholarly publications points to an urgent and growing need for dedicated efforts to archive their holdings in order to preserve research code and its scholarly&nbsp;ephemera.</p>
  219. <p><cite><em><a href="https://arxiv.org/abs/2208.04895">The Rise of GitHub in Scholarly Publications</a></em>&nbsp;(<a href="/david/cache/2023/57fcca8aa6194cb2840d1dea002cb59b/">cache</a>)</cite></p>
  220. </blockquote>
  221. <h2>
  222. <a href="/david/2023/01/06/" title="Lien permanent vers cet article">Toile</a> (2023-01-06)
  223. </h2>
  224. <blockquote lang="en">
  225. <p>I realised when I think of something it doesn’t exist as a single entity. A thought is linked to a million other thoughts, to the past and to the future. I remember too much, relate too much, <mark>connect too much,</mark> and I project too much. I thought this was “normal” until I met my partner. She doesn’t think much about the future or the past – she’s a much happier person compared to&nbsp;me.</p>
  226. <p><cite><em><a href="https://winnielim.org/journal/my-mind-is-full-of-webs/">my mind is full of webs</a></em>&nbsp;(<a href="/david/cache/2023/e1a26da20c603d214d0f844d5836569e/">cache</a>)</cite></p>
  227. </blockquote>
  228. <p>Il y a tellement de choses qui me font réagir (ré-penser plutôt&#8239;?) dans les écrits de Winnie Lim. Elle joue toujours avec la corde sensible qui crée un lien à la fois fragile et pourtant si résistant, je me l’imagine comme un fil de toile d’araignée entre nous. Difficile à décrire et pas forcément réciproque. De temps en temps, je m’aventure dessus et je vais me désaltérer de quelques gouttes de rosée. Je suis reconnaissant de ces partages qui viennent alimenter mes propres&nbsp;réflexions.</p>
  229. <blockquote lang="en">
  230. <p>But I do not want my webs to be truncated or forgotten. <mark>I do not wish to forget,</mark> or I wouldn’t have become obsessed with archival. I like noticing and preserving the connections. They become opportunities for learning and becoming, if I manage to detach enough from&nbsp;them.</p>
  231. <p><cite><em>Ibid.</em></cite></p>
  232. </blockquote>
  233. <figure>
  234. <a href="/static/david/2023/2023-01-06-toile-gouttes.jpg"
  235. title="Cliquer pour une version haute résolution">
  236. <img
  237. src="/static/david/2023/2023-01-06-toile-gouttes.jpg"
  238. width="1512" height="2016"
  239. srcset="/static/david/2023/2023-01-06-toile-gouttes.jpg 1512w, /static/david/2023/2023-01-06-toile-gouttes_660x440.jpg 660w, /static/david/2023/2023-01-06-toile-gouttes_990x660.jpg 990w, /static/david/2023/2023-01-06-toile-gouttes_1320x880.jpg 1320w"
  240. sizes="min(100vw, calc(100vh * 1512 / 2016))"
  241. loading="lazy"
  242. decoding="async"
  243. alt="Une toile d’araignée avec des gouttes de rosée et en arrière plan, flou, des immeubles de l’autre côté de la Rivière des Prairies">
  244. </a>
  245. <figcaption>Parc Louis-Hébert, Montréal, 2 novembre&nbsp;2022.</figcaption>
  246. </figure>
  247. <details>
  248. <summary>Et pendant ce temps là de l’autre côté de la rue&nbsp;:</summary>
  249. <figure>
  250. <a href="/static/david/2023/2023-01-06-toile-soleil.jpg"
  251. title="Cliquer pour une version haute résolution">
  252. <img
  253. src="/static/david/2023/2023-01-06-toile-soleil.jpg"
  254. width="2016" height="1512"
  255. srcset="/static/david/2023/2023-01-06-toile-soleil.jpg 2016w, /static/david/2023/2023-01-06-toile-soleil_660x440.jpg 660w, /static/david/2023/2023-01-06-toile-soleil_990x660.jpg 990w, /static/david/2023/2023-01-06-toile-soleil_1320x880.jpg 1320w"
  256. sizes="min(100vw, calc(100vh * 2016 / 1512))"
  257. loading="lazy"
  258. decoding="async"
  259. alt="Un parc pour enfant à contre-jour avec le soleil qui se lève dans le brouillard et qui forme une jolie étoile">
  260. </a>
  261. <figcaption>Une toile de soleil&nbsp;!</figcaption>
  262. </figure>
  263. </details>
  264. </main>
  265. <hr>
  266. <footer>
  267. <p>
  268. <nobr>
  269. <a href="/david/" title="Aller à l’accueil">
  270. <svg class="icon icon-home">
  271. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"></use>
  272. </svg>
  273. Accueil</a>
  274. </nobr>
  275. <nobr>
  276. <a href="/david/log/" title="Accès au flux RSS">
  277. <svg class="icon icon-rss2">
  278. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
  279. </svg>
  280. Suivre</a>
  281. </nobr>
  282. <nobr>
  283. <a href="http://larlet.com"
  284. title="Go to my English profile"
  285. data-instant>
  286. <svg class="icon icon-user-tie">
  287. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-user-tie"></use>
  288. </svg>
  289. Pro</a>
  290. </nobr>
  291. <nobr>
  292. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">
  293. <svg class="icon icon-mail">
  294. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
  295. </svg>
  296. Email</a>
  297. </nobr>
  298. <nobr>
  299. <abbr class="nowrap"
  300. title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">
  301. <svg class="icon icon-hammer2">
  302. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-hammer2"></use>
  303. </svg>
  304. Légal</abbr>
  305. </nobr>
  306. </p>
  307. <template id="theme-selector">
  308. <form>
  309. <fieldset>
  310. <legend>
  311. <svg class="icon icon-brightness-contrast">
  312. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-brightness-contrast"></use>
  313. </svg>
  314. Thème
  315. </legend>
  316. <label>
  317. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  318. Auto
  319. </label>
  320. <label>
  321. <input type="radio" value="dark" name="chosen-color-scheme">
  322. Foncé
  323. </label>
  324. <label>
  325. <input type="radio" value="light" name="chosen-color-scheme">
  326. Clair
  327. </label>
  328. </fieldset>
  329. </form>
  330. </template>
  331. </footer>
  332. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  333. <script>
  334. function loadThemeForm(templateName) {
  335. const themeSelectorTemplate = document.querySelector(templateName)
  336. const form = themeSelectorTemplate.content.firstElementChild
  337. themeSelectorTemplate.replaceWith(form)
  338. form.addEventListener('change', (e) => {
  339. const chosenColorScheme = e.target.value
  340. localStorage.setItem('theme', chosenColorScheme)
  341. toggleTheme(chosenColorScheme)
  342. })
  343. const selectedTheme = localStorage.getItem('theme')
  344. if (selectedTheme && selectedTheme !== 'undefined') {
  345. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  346. }
  347. }
  348. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  349. window.addEventListener('load', () => {
  350. let hasDarkRules = false
  351. for (const styleSheet of Array.from(document.styleSheets)) {
  352. let mediaRules = []
  353. for (const cssRule of styleSheet.cssRules) {
  354. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  355. continue
  356. }
  357. // WARNING: Safari does not have/supports `conditionText`.
  358. if (cssRule.conditionText) {
  359. if (cssRule.conditionText !== prefersColorSchemeDark) {
  360. continue
  361. }
  362. } else {
  363. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  364. continue
  365. }
  366. }
  367. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  368. }
  369. // WARNING: do not try to insert a Rule to a styleSheet you are
  370. // currently iterating on, otherwise the browser will be stuck
  371. // in a infinite loop…
  372. for (const mediaRule of mediaRules) {
  373. styleSheet.insertRule(mediaRule.cssText)
  374. hasDarkRules = true
  375. }
  376. }
  377. if (hasDarkRules) {
  378. loadThemeForm('#theme-selector')
  379. }
  380. })
  381. </script>
  382. </body>
  383. </html>