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 25KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  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 #photographie
  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 #photographie">
  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>#photographie</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/04/08/" title="Lien permanent vers cet article">Éclipse</a> <time datetime="2024-04-08">8 avril 2024</time>
  132. </h2>
  133. <p>Il y a l’éclipse et puis il y a toute l’ambiance autour. Je crois que c’est ce qui m’a le plus marqué, cet émerveillement doublé d’un enthousiasme collectif. Lorsque tout le monde retire les lunettes ou même un peu avant lorsque la lumière change et que l’on voit un coucher (??) de soleil en version accéléré qui s’avance vers nous en pleine&nbsp;après-midi.</p>
  134. <p>L’éclipse totale était censée être de 1&#8239;min 45&#8239;sec à ma position mais alors en ressenti derrière l’objectif c’était du 20&nbsp;secondes&#8239;! À peine le temps de réduire au maximum l’exposition et de déclencher. J’avais fait une mise au point sur un avion au préalable et j’étais passé en manuel mais c’était stupide et ça a rendu floues toutes les photos… jusqu’aux deux dernières. Coup de bol d’avoir pris le temps de tester l’autofocus en sentant venir la&nbsp;fin.</p>
  135. <figure>
  136. <a href="/static/david/2024/2024-04-08-eclipse-1.jpg"
  137. title="Cliquer pour une version haute résolution">
  138. <img
  139. src="/static/david/2024/2024-04-08-eclipse-1.jpg"
  140. width="2000" height="2000"
  141. srcset="/static/david/2024/2024-04-08-eclipse-1.jpg 2000w, /static/david/2024/2024-04-08-eclipse-1_660x440.jpg 660w, /static/david/2024/2024-04-08-eclipse-1_990x660.jpg 990w, /static/david/2024/2024-04-08-eclipse-1_1320x880.jpg 1320w"
  142. sizes="min(100vw, calc(100vh * 2000 / 2000))"
  143. loading="lazy"
  144. decoding="async"
  145. alt="Le moment de l’éclipse où la lune passe totalement devant le soleil.">
  146. </a>
  147. <figcaption>J’étais tellement content de découvrir des éruptions solaires au développement&nbsp;!</figcaption>
  148. </figure>
  149. <p>En étant sur la fin, cela permet d’être vraiment à la limite de la couronne solaire et de photographier un phénomène que je ne pensait pas possible avec mon&nbsp;matériel.</p>
  150. <p>Et puis, il y a ce moment où l’hystérie collective redevient sérieuse car il faut remettre les lunettes et prendre le temps de se demander ce qu’il vient de se&nbsp;passer.</p>
  151. <figure>
  152. <a href="/static/david/2024/2024-04-08-eclipse-2.jpg"
  153. title="Cliquer pour une version haute résolution">
  154. <img
  155. src="/static/david/2024/2024-04-08-eclipse-2.jpg"
  156. width="3840" height="2560"
  157. srcset="/static/david/2024/2024-04-08-eclipse-2.jpg 3840w, /static/david/2024/2024-04-08-eclipse-2_660x440.jpg 660w, /static/david/2024/2024-04-08-eclipse-2_990x660.jpg 990w, /static/david/2024/2024-04-08-eclipse-2_1320x880.jpg 1320w"
  158. sizes="min(100vw, calc(100vh * 3840 / 2560))"
  159. loading="lazy"
  160. decoding="async"
  161. alt="Le moment de l’éclipse où la lune va découvrir le soleil.">
  162. </a>
  163. <figcaption>En mode halo au développement car c’est quand même&nbsp;sympa.</figcaption>
  164. </figure>
  165. <p>Fait étonnant, quelques petites minutes après l’apogée, on voyait un avion et surtout son ombre projetée de manière inhabituelle. J’ai l’intuition qu’il était dans une zone qui n’arrive jamais en temps normal car cet angle lumineux n’est pas possible. J’aurais dû prendre une photo pour pouvoir faire des calculs à ce&nbsp;sujet.</p>
  166. <a href="#hr-145" title="Lien vers cette section de la page"><hr id="hr-145" /></a>
  167. <p>Aussi, je suis en train de regarder <a data-link-domain="en.wikipedia.org" href="https://en.wikipedia.org/wiki/3_Body_Problem_(TV_series">3&nbsp;Body Problem</a>).</p>
  168. <nav>
  169. <p>
  170. <a href="/david/2024/enthousiasme/"
  171. title="Liste de tous les articles 2024 associés à cette étiquette"
  172. rel="tag">#enthousiasme</a>
  173. <a href="/david/2024/experience/"
  174. title="Liste de tous les articles 2024 associés à cette étiquette"
  175. rel="tag">#expérience</a>
  176. <a href="/david/2024/photographie/"
  177. title="Liste de tous les articles 2024 associés à cette étiquette"
  178. rel="tag">#photographie</a>
  179. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  180. </p>
  181. </nav>
  182. <h2>
  183. <a href="/david/2024/02/12/" title="Lien permanent vers cet article">Renards</a> <time datetime="2024-02-12">12 février 2024</time>
  184. </h2>
  185. <p>Entre chien et loup, le renard pointe le bout de son nez pointu. Après avoir attendu patiemment attendu que mon appareil photo arrive à ses limites, le voilà avançant vers moi d’un pas&nbsp;décidé.</p>
  186. <figure>
  187. <a href="/static/david/2024/2024-02-12-renards-1.jpg"
  188. title="Cliquer pour une version haute résolution">
  189. <img
  190. src="/static/david/2024/2024-02-12-renards-1.jpg"
  191. width="3456" height="2304"
  192. srcset="/static/david/2024/2024-02-12-renards-1.jpg 3456w, /static/david/2024/2024-02-12-renards-1_660x440.jpg 660w, /static/david/2024/2024-02-12-renards-1_990x660.jpg 990w, /static/david/2024/2024-02-12-renards-1_1320x880.jpg 1320w"
  193. sizes="min(100vw, calc(100vh * 3456 / 2304))"
  194. loading="lazy"
  195. decoding="async"
  196. alt="Un renard trottinant sur la rivière gelée.">
  197. </a>
  198. <figcaption>Un renard trottinant sur la rivière&nbsp;gelée.</figcaption>
  199. </figure>
  200. <p>Même en poussant les réglages au maximum lors du développement, je me rends bien compte que je suis dans la nuit bientôt noire. Alors je tente d’utiliser l’éclairage de la ville, la pollution lumineuse se reflétant sur la neige m’offre de précieux <em>stops</em>&nbsp;photographiques.</p>
  201. <figure>
  202. <a href="/static/david/2024/2024-02-12-renards-2.jpg"
  203. title="Cliquer pour une version haute résolution">
  204. <img
  205. src="/static/david/2024/2024-02-12-renards-2.jpg"
  206. width="2560" height="3840"
  207. srcset="/static/david/2024/2024-02-12-renards-2.jpg 2560w, /static/david/2024/2024-02-12-renards-2_660x440.jpg 660w, /static/david/2024/2024-02-12-renards-2_990x660.jpg 990w, /static/david/2024/2024-02-12-renards-2_1320x880.jpg 1320w"
  208. sizes="min(100vw, calc(100vh * 2560 / 3840))"
  209. loading="lazy"
  210. decoding="async"
  211. alt="Un renard sur la rivière gelée avec un pont en fond.">
  212. </a>
  213. <figcaption>Un renard sur la rivière gelée avec un pont en&nbsp;fond.</figcaption>
  214. </figure>
  215. <p>L’équivalent 800mm que je tiens à bout de bras n’aide pas à faire baisser les ISO, tant pis, je compte trop sur ma mobilité pour être capable de tenter une approche. La neige est bien trop gelée et bruyante pour que j’ai la moindre chance. Un skieur nocturne détourne leur&nbsp;attention.</p>
  216. <figure>
  217. <a href="/static/david/2024/2024-02-12-renards-3.jpg"
  218. title="Cliquer pour une version haute résolution">
  219. <img
  220. src="/static/david/2024/2024-02-12-renards-3.jpg"
  221. width="3840" height="2560"
  222. srcset="/static/david/2024/2024-02-12-renards-3.jpg 3840w, /static/david/2024/2024-02-12-renards-3_660x440.jpg 660w, /static/david/2024/2024-02-12-renards-3_990x660.jpg 990w, /static/david/2024/2024-02-12-renards-3_1320x880.jpg 1320w"
  223. sizes="min(100vw, calc(100vh * 3840 / 2560))"
  224. loading="lazy"
  225. decoding="async"
  226. alt="Deux renards&nbsp;: l’un sur la rivière, l’autre sur un ponton abandonné.">
  227. </a>
  228. <figcaption>Deux renards : l’un sur la rivière, l’autre sur un ponton&nbsp;abandonné.</figcaption>
  229. </figure>
  230. <p>La luminosité est telle que je vois la lumière de mon autofocus qui se reflète, bien rouge, au fond de ses yeux à une cinquantaine de mètres. Iel m’attend. Je ne saurais jamais jusqu’à quelle distance est-ce que l’on se seraient acceptés car une coureuse met fin à ce tête-à-tête nocturne. Si nous sommes tous le deux routiniers, nous aurons certainement d’autres occasions de nous&nbsp;croiser.</p>
  231. <figure>
  232. <a href="/static/david/2024/2024-02-12-renards-4.jpg"
  233. title="Cliquer pour une version haute résolution">
  234. <img
  235. src="/static/david/2024/2024-02-12-renards-4.jpg"
  236. width="3840" height="2560"
  237. srcset="/static/david/2024/2024-02-12-renards-4.jpg 3840w, /static/david/2024/2024-02-12-renards-4_660x440.jpg 660w, /static/david/2024/2024-02-12-renards-4_990x660.jpg 990w, /static/david/2024/2024-02-12-renards-4_1320x880.jpg 1320w"
  238. sizes="min(100vw, calc(100vh * 3840 / 2560))"
  239. loading="lazy"
  240. decoding="async"
  241. alt="Un renard qui me regarde depuis le chemin.">
  242. </a>
  243. <figcaption>Un renard qui me regarde depuis le&nbsp;chemin.</figcaption>
  244. </figure>
  245. <p>Photographiquement parlant, je crois que je préfère la prise floue de la veille. Une forme d’acceptation qu’il puisse encore y avoir des animaux libres d’une capture trop&nbsp;nette.</p>
  246. <figure>
  247. <a href="/static/david/2024/2024-02-12-renards-5.jpg"
  248. title="Cliquer pour une version haute résolution">
  249. <img
  250. src="/static/david/2024/2024-02-12-renards-5.jpg"
  251. width="3840" height="2560"
  252. srcset="/static/david/2024/2024-02-12-renards-5.jpg 3840w, /static/david/2024/2024-02-12-renards-5_660x440.jpg 660w, /static/david/2024/2024-02-12-renards-5_990x660.jpg 990w, /static/david/2024/2024-02-12-renards-5_1320x880.jpg 1320w"
  253. sizes="min(100vw, calc(100vh * 3840 / 2560))"
  254. loading="lazy"
  255. decoding="async"
  256. alt="Un renard flou qui se reflète dans l’eau de la rivière qui fond.">
  257. </a>
  258. <figcaption>Vais-je passer à travers ? Je ne suis pas le seul à me poser ces&nbsp;questions…</figcaption>
  259. </figure>
  260. <p>Merci au parent devant l’école qui m’a dit qu’il n’y avait pas de renards dans le parc cette année. Mon esprit de con·tradiction a fait le&nbsp;reste.</p>
  261. <a href="#hr-71" title="Lien vers cette section de la page"><hr id="hr-71" /></a>
  262. <blockquote>
  263. <p>Les carnets Web servent également à faire rêver les autres de façon inattendue et la plupart du temps silencieusement. N’hésitez pas à publier. Vous toucherez le cœur et l’imagination d’une personne quelque part dans le&nbsp;monde.</p>
  264. <p><cite><em><a data-link-domain="la-grange.net" href="https://www.la-grange.net/2024/02/04/enfant" hreflang="fr"
  265. title="Consultation de l’article">D’un enfant à l’autre</a>
  266. <a href="/david/cache/2024/40a1a0f90d7ac25a6150e6e27ac310d4/" hreflang="fr"
  267. data-tippy data-description=""
  268. data-source="https://www.la-grange.net/2024/02/04/enfant"
  269. data-date="2024-02-12"
  270. data-favicon="https://www.la-grange.net/favicon.ico"
  271. data-domain="la-grange.net"
  272. ><svg xmlns="http://www.w3.org/2000/svg"
  273. width="24" height="24" viewBox="0 0 24 24" fill="none"
  274. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  275. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  276. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  277. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  278. </svg>
  279. <span class="sr-only">[archive]</span></a></em></cite></p>
  280. </blockquote>
  281. <p>🧡</p>
  282. <nav>
  283. <p>
  284. <a href="/david/2024/apprentissage/"
  285. title="Liste de tous les articles 2024 associés à cette étiquette"
  286. rel="tag">#apprentissage</a>
  287. <a href="/david/2024/echanges/"
  288. title="Liste de tous les articles 2024 associés à cette étiquette"
  289. rel="tag">#échanges</a>
  290. <a href="/david/2024/photographie/"
  291. title="Liste de tous les articles 2024 associés à cette étiquette"
  292. rel="tag">#photographie</a>
  293. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  294. </p>
  295. </nav>
  296. <h2>
  297. <a href="/david/2024/02/07/" title="Lien permanent vers cet article">Écureuil</a> <time datetime="2024-02-07">7 février 2024</time>
  298. </h2>
  299. <p>De bon matin, en me brossant les dents, l’écureuil dans un micro-sommeil après une nuit fraîche. Je le regarde avec un peu d’envie, je referme la fenêtre délicatement. Une minute plus tard, alors qu’il commençait à piquer dangereusement du nez, le voilà déjà&nbsp;reparti.</p>
  300. <figure>
  301. <a href="/static/david/2024/2024-02-05-ecureuil-soleil.jpg"
  302. title="Cliquer pour une version haute résolution">
  303. <img
  304. src="/static/david/2024/2024-02-05-ecureuil-soleil.jpg"
  305. width="3456" height="2304"
  306. srcset="/static/david/2024/2024-02-05-ecureuil-soleil.jpg 3456w, /static/david/2024/2024-02-05-ecureuil-soleil_660x440.jpg 660w, /static/david/2024/2024-02-05-ecureuil-soleil_990x660.jpg 990w, /static/david/2024/2024-02-05-ecureuil-soleil_1320x880.jpg 1320w"
  307. sizes="min(100vw, calc(100vh * 3456 / 2304))"
  308. loading="lazy"
  309. decoding="async"
  310. alt="Un écureuil endormi sur une branche.">
  311. </a>
  312. <figcaption>Un écureuil endormi sur une&nbsp;branche.</figcaption>
  313. </figure>
  314. <a href="#hr-69" title="Lien vers cette section de la page"><hr id="hr-69" /></a>
  315. <p>Une motivation importante de l’année est de réussir à économiser. C’est une chose que je n’ai jamais vraiment envisagé de faire jusqu’à présent. Si j’ai bien compris le principe actuel, chaque dollar accumulé est un dollar que je n’aurai pas à payer une <em>seconde</em> fois à la&nbsp;banque.</p>
  316. <p>C’est stupide. Mais ça motive. Mais c’est&nbsp;stupide.</p>
  317. <a href="#hr-70" title="Lien vers cette section de la page"><hr id="hr-70" /></a>
  318. <figure>
  319. <a href="/static/david/2024/2024-02-05-ecureuil-superhero.jpg"
  320. title="Cliquer pour une version haute résolution">
  321. <img
  322. src="/static/david/2024/2024-02-05-ecureuil-superhero.jpg"
  323. width="3840" height="2560"
  324. srcset="/static/david/2024/2024-02-05-ecureuil-superhero.jpg 3840w, /static/david/2024/2024-02-05-ecureuil-superhero_660x440.jpg 660w, /static/david/2024/2024-02-05-ecureuil-superhero_990x660.jpg 990w, /static/david/2024/2024-02-05-ecureuil-superhero_1320x880.jpg 1320w"
  325. sizes="min(100vw, calc(100vh * 3840 / 2560))"
  326. loading="lazy"
  327. decoding="async"
  328. alt="Un écureuil en posture de super-héros·ïne.">
  329. </a>
  330. <figcaption>Un écureuil en posture de super-héros·ïne. (Iel a juste froid aux&nbsp;pattes.)</figcaption>
  331. </figure>
  332. <nav>
  333. <p>
  334. <a href="/david/2024/decision/"
  335. title="Liste de tous les articles 2024 associés à cette étiquette"
  336. rel="tag">#décision</a>
  337. <a href="/david/2024/foret/"
  338. title="Liste de tous les articles 2024 associés à cette étiquette"
  339. rel="tag">#forêt</a>
  340. <a href="/david/2024/photographie/"
  341. title="Liste de tous les articles 2024 associés à cette étiquette"
  342. rel="tag">#photographie</a>
  343. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  344. </p>
  345. </nav>
  346. <form action="/david/recherche/" method="get">
  347. <fieldset>
  348. <legend>Recherche</legend>
  349. <label for="input-search">Termes de votre recherche :</label>
  350. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  351. <input type="submit" value="Chercher">
  352. <p id="indexation-infos">
  353. <small>
  354. Seuls les contenus de ces 8 dernières années sont indexés.
  355. </small>
  356. </p>
  357. </fieldset>
  358. </form>
  359. <aside>
  360. <theme-toggle></theme-toggle>
  361. </aside>
  362. </article>
  363. <hr>
  364. <footer>
  365. <p>
  366. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  367. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  368. <a href="http://larlet.com"
  369. title="Go to my English profile"
  370. data-instant>Pro</a>
  371. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  372. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  373. </p>
  374. <template id="theme-selector">
  375. <form>
  376. <style type="text/css">
  377. fieldset div {
  378. text-align: center;
  379. }
  380. </style>
  381. <fieldset>
  382. <legend>Thème</legend>
  383. <div>
  384. <label>
  385. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  386. Auto
  387. </label>
  388. <label>
  389. <input type="radio" value="dark" name="chosen-color-scheme">
  390. Foncé
  391. </label>
  392. <label>
  393. <input type="radio" value="light" name="chosen-color-scheme">
  394. Clair
  395. </label>
  396. </div>
  397. </fieldset>
  398. </form>
  399. </template>
  400. </footer>
  401. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  402. <script>
  403. class ThemeToggle extends HTMLElement {
  404. constructor() {
  405. super()
  406. const themeSelectorTemplate = document.querySelector('#theme-selector')
  407. const form = themeSelectorTemplate.content.firstElementChild
  408. this.attachShadow({ mode: 'open' })
  409. this.shadowRoot.appendChild(form.cloneNode(true))
  410. }
  411. connectedCallback() {
  412. const form = this.shadowRoot.querySelector('form')
  413. form.addEventListener('change', (e) => {
  414. const chosenColorScheme = e.target.value
  415. localStorage.setItem('theme', chosenColorScheme)
  416. toggleTheme(chosenColorScheme)
  417. })
  418. const selectedTheme = localStorage.getItem('theme')
  419. if (selectedTheme && selectedTheme !== 'undefined') {
  420. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  421. }
  422. }
  423. }
  424. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  425. window.addEventListener('load', () => {
  426. let colorsLayer = undefined
  427. let hasDarkRules = false
  428. for (const styleSheet of Array.from(document.styleSheets)) {
  429. let mediaRules = []
  430. for (const layerRule of styleSheet.cssRules) {
  431. if (!(layerRule instanceof CSSLayerBlockRule)) {
  432. continue
  433. }
  434. if (layerRule.name === 'colors') {
  435. colorsLayer = layerRule
  436. }
  437. for (const cssRule of layerRule.cssRules) {
  438. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  439. continue
  440. }
  441. // WARNING: Safari does not have/supports `conditionText`.
  442. if (cssRule.conditionText) {
  443. if (cssRule.conditionText !== prefersColorSchemeDark) {
  444. continue
  445. }
  446. } else {
  447. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  448. continue
  449. }
  450. }
  451. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  452. }
  453. }
  454. // WARNING: do not try to insert a Rule to a styleSheet you are
  455. // currently iterating on, otherwise the browser will be stuck
  456. // in a infinite loop…
  457. for (const mediaRule of mediaRules) {
  458. // Safari requires the `0` second parameter (even if default).
  459. colorsLayer.insertRule(mediaRule.cssText, 0)
  460. hasDarkRules = true
  461. }
  462. }
  463. if (hasDarkRules) {
  464. if ('customElements' in window && !customElements.get('theme-toggle')) {
  465. customElements.define('theme-toggle', ThemeToggle)
  466. }
  467. }
  468. })
  469. </script>
  470. </body>
  471. </html>