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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  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 #web — David Larlet</title>
  13. <meta name="description" content="Publications relatives au tag #web">
  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 #web</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/02/03/" title="Lien permanent vers cet article">Chargement</a> (2023-02-03)</h2>
  75. <blockquote lang="en">
  76. <p>If you are familiar with how the web is built, what happened is pretty obvious: A website that over-relies on JavaScript to power its experience had its logic collide with one or more other errant pieces of logic that it summons. This created a&nbsp;deadlock.</p>
  77. <p>If you do not make digital experiences for a living, what happened is not obvious at all. All you see is <mark>a tiny fake loading spinner that never&nbsp;stops.</mark></p>
  78. <p><cite><em><a href="https://ericwbailey.website/published/modern-health-frameworks-performance-and-harm/">Modern Health, frameworks, performance, and harm</a></em>&nbsp;(<a href="/david/cache/2023/7469f181ef4b031f59ae69356af16e28/">cache</a>)</cite></p>
  79. </blockquote>
  80. <p>Je suis le témoin d’un web cassé au quotidien. J’utilise <a href="https://addons.mozilla.org/en-US/firefox/addon/umatrix/">uMatrix</a> en bloquant toutes les requêtes qui ne sont pas sur le domaine consulté. Il est assez triste de constater le manque de résilience de la plupart des&nbsp;sites.</p>
  81. <p>Parfois, la consultation d’un article de blog n’est pas possible à cause de cela. Le contenu n’est même pas dans le HTML… ou une erreur JavaScript en masque&nbsp;l’affichage.</p>
  82. <p>La fragilité est devenue la norme car plus personne ne sait se servir des fondations du&nbsp;Web.</p>
  83. <hr />
  84. <p>Bande son du moment&nbsp;: <a href="https://www.youtube-nocookie.com/embed/Lm_2LCDmpXU">SEVDALIZA - DARKEST&nbsp;HOUR</a></p>
  85. <hr />
  86. <blockquote lang="en">
  87. <p>🏎️ I guess what I’m winding up to say here is <mark>developer experience really isn’t important</mark>—especially when frameworks haven’t even got the absolute baseline experience anywhere near where it needs to be to service a world wide web. A world wide web that’s accessed with slow, expensive connections and cheap, underperforming hardware. How about taking a bit of “DX” on the chin to focus instead on “why are we using this framework that potentially excludes the majority of&nbsp;users?”.</p>
  88. <p><cite><em><a href="https://andy-bell.co.uk/speed-for-who/">Speed for who? | Andy Bell</a></em>&nbsp;(<a href="/david/cache/2023/f7957bdde7af740e322756668784d355/">cache</a>)</cite></p>
  89. </blockquote>
  90. <blockquote>
  91. <p>🤗 Préciser notre mission, c’est rediscuter ensemble l’ordonnanceur qu’on ramènera tou⋅tes à la maison&nbsp;: quelles priorités, quelles actions, et comment s’insèrent-elles dans la tapisserie que nous brodons&nbsp;ensemble.</p>
  92. <p><cite><em><a href="https://plume.deuxfleurs.fr/~/Deuxfleurs/La%20mission%20de%20Deuxfleurs">La mission de Deuxfleurs</a></em>&nbsp;(<a href="/david/cache/2023/a0ccec7acb932e4155960c1c88d65eff/">cache</a>)</cite></p>
  93. </blockquote>
  94. <blockquote lang="en">
  95. <p>🙇 Thinking that people are stupid is not thinking. <mark>Understanding them&nbsp;is.</mark></p>
  96. <p>I never want to debate, but if I had to, I would hope to lose. I don’t want to convince anyone of my existing perspective. I would rather be convinced of theirs. It’s more interesting to assume that they are&nbsp;right.</p>
  97. <p><cite><em><a href="https://sive.rs/led">I want to lose every debate.</a></em>&nbsp;(<a href="/david/cache/2023/f85d5742bb188e4b25d627b78413fbac/">cache</a>)</cite></p>
  98. </blockquote>
  99. <h2><a href="/david/2023/01/30/" title="Lien permanent vers cet article">Lecture</a> (2023-01-30)</h2>
  100. <blockquote lang="en">
  101. <p>Reading is a technology that works. And it works in part by immersing the reader in the text itself. The lack of video / music / pop-up ads / crypto tokens / mini-games aren’t a problem to be solve. <mark>The lack of those thing is the feature.</mark> Books are engaging precisely <em>because</em> they lack those&nbsp;things.</p>
  102. <p><cite><em><a href="https://countercraft.substack.com/p/maybe-the-book-doesnt-need-to-disrupted">Maybe the Book Doesn’t Need to Be “Disrupted” in the First Place?</a></em>&nbsp;(<a href="/david/cache/2023/04ad9e0f254b2d6111aef95102654f7d/">cache</a>)</cite></p>
  103. </blockquote>
  104. <p>Pour avoir modestement participé à la publication de certains ouvrages sur les <a href="http://ateliers.sens-public.org/">Ateliers de Sens-Public</a> ou les <a href="http://www.parcoursnumeriques-pum.ca/">Parcours numériques</a> des Presses de l’Université de Montréal, cette publication me fait pas mal cogiter. Je me raccroche au fait qu’il y ait différents publics pour différentes lectures et pour différents types d’ouvrages&nbsp;aussi.</p>
  105. <p>Ironiquement, je ne lis que des livres sur papier mais je lis tellement d’articles sur mon écran que la limite est floue et qu’il faudrait commencer par définir ce que l’on entend par «&nbsp;lecture&nbsp;» et&nbsp;«&nbsp;livre&nbsp;».</p>
  106. <p>Ce qu’il me manque avec un support papier, c’est de pouvoir facilement consigner des passages (par exemple pour usage/recopie ici) mais depuis que la reconnaissance de texte est automatisée dans macOS Photos ça va beaucoup plus vite de prendre la page en photo pour y revenir plus tard et ça n’interrompt pas tant mon flux de&nbsp;lecture.</p>
  107. <p>Quelques questions pour toi&nbsp;lecteur·ice&nbsp;:</p>
  108. <ul>
  109. <li>Est-ce que tu lis ce blog sur une&nbsp;liseuse&#8239;?</li>
  110. <li>Est-ce qu’un format particulier&nbsp;t’aiderait&#8239;?</li>
  111. <li>Est-ce qu’un recueil annuel/périodique serait&nbsp;pertinent&#8239;?</li>
  112. <li>Est-ce que le format ePub permettrait d’avoir des liens vers les articles en cache tout en ayant une navigation fluide&#8239;? (Est-ce&nbsp;nécessaire&#8239;?)</li>
  113. </ul>
  114. <hr />
  115. <blockquote>
  116. <p>🧡 Information importante&nbsp;: ce prototype ne restera en ligne qu’au maximum pendant&nbsp;2&nbsp;mois.</p>
  117. <p>Il est extrêmement court.<br />
  118. Il est extrêmement simple.<br />
  119. Il est extrêmement rudimentaire.<br />
  120. Mais il est terminé, et c’est le plus&nbsp;important.</p>
  121. <p><cite><em><a href="https://marienfressinaud.fr/exploratrices.html">Exploratrices, un prototype de jeu vidéo</a></em>&nbsp;(<a href="/david/cache/2023/3cffe9d9946878273e050e9d35d9bf9e/">cache</a>)</cite></p>
  122. </blockquote>
  123. <h2><a href="/david/2023/01/26/" title="Lien permanent vers cet article">Décentralisation</a> (2023-01-26)</h2>
  124. <p>Je suis allé voir <a href="https://equalit.ie/">eQualitie</a> hier, ça m’a fait rechercher toutes les initiatives que je connaissais de «&nbsp;suites&nbsp;»&nbsp;décentralisées&nbsp;:</p>
  125. <ul>
  126. <li><a href="https://labriqueinter.net/">LaBriqueInter.net</a></li>
  127. <li><a href="https://yunohost.org/">YunoHost</a></li>
  128. <li><a href="https://www.kiwix.org/">Kiwix</a></li>
  129. <li><a href="https://www.bibliosansfrontieres.org/ideas-box/">IDEAS&nbsp;BOX</a></li>
  130. <li><a href="https://www.bibliosansfrontieres.org/nos-actions/des-outils/ideas-cube/">IDEAS&nbsp;CUBE</a></li>
  131. <li><a href="https://coolify.io/">Coolify</a></li>
  132. <li><a href="https://sandstorm.io/">Sandstorm</a></li>
  133. <li><a href="https://nextcloud.com/">Nextcloud</a></li>
  134. <li><a href="https://www.frama.space/abc/fr/">Frama.space</a></li>
  135. <li><a href="https://www.cloudron.io/">Cloudron</a> (merci&nbsp;Sébastien&#8239;!)</li>
  136. <li><a href="https://freedombox.org/">FreedomBox</a> (merci&nbsp;Alexandre&#8239;!)</li>
  137. <li><a href="https://indiehosters.net/liiibre/">Liiibre</a> (merci&nbsp;Maïa&#8239;!)</li>
  138. <li><a href="https://zourit.net/">Zourit.net</a> (merci&nbsp;Clailou&#8239;!)</li>
  139. <li><a href="https://caprover.com/">CapRover</a> (plus technique, merci&nbsp;Pierre&#8239;!)</li>
  140. <li><a href="https://hostux.network/">Hostux</a> (merci&nbsp;Xav’&#8239;!)</li>
  141. </ul>
  142. <p>Si vous en avez d’autres, j’accepte les&nbsp;suggestions&#8239;!</p>
  143. <p>Je prends cette liste comme une réinvention récurrente, itérative et diversifiée. On pourrait le voir comme une dispersion des efforts, je l’envisage comme un b(r)ouillon d’idées nécessaire à une exploration saine. <span lang=en>“There Are Plenty of AlternativeS”</span> comme ils&nbsp;disent.</p>
  144. <hr />
  145. <blockquote lang="en">
  146. <p>🌳 That is why owning a domain (and publishing your content there) is like planting a tree: it’s value that starts small and grows. The best time to own a domain and publish your content there was 20&nbsp;years ago. The second best time is&nbsp;today.</p>
  147. <p><cite><em><a href="https://blog.jim-nielsen.com/2023/best-time-to-own-a-domain/">The Best Time to Own a Domain Was 20&nbsp;Years Ago; The Second Best Time Is Today</a></em>&nbsp;(<a href="/david/cache/2023/576a604fce44b337a38425c021b3b0b3/">cache</a>)</cite></p>
  148. </blockquote>
  149. <blockquote>
  150. <p>🤔 La pensée n’est peut-être qu’une bizarrerie de la nature offerte à une espèce, comme elle fait ces bois de ruminants rares ou disparus que l’on voit dans les muséums&nbsp;: armes ou parures si curieusement étendues, bouclées ou spiralées, ou si rameuses qu’elles sont plus nuisibles encore qu’inutiles à l’animal qu’elles&nbsp;couronnent.</p>
  151. <p>Pourquoi pas&#8239;? Pourquoi non&#8239;? Notre tête est chargée de questions et d’idées qui se prennent dans l’enchevêtrement de la forêt des faits, et nous retient embarrassés, orgueilleux de l’être, condamnés à bramer des poèmes et des hypothèses, –&nbsp;fiers et&nbsp;désespérés.</p>
  152. <p><cite><em>Mauvaises pensées et autres</em>, Paul&nbsp;Valéry</cite></p>
  153. </blockquote>
  154. <blockquote>
  155. <p>🥲 <em>[En attendant chez l'orthodontiste]</em><br />
  156. — Papa, tu as un téléphone, tu n’as pas besoin de t’ennuyer avec moi par&nbsp;compassion.</p>
  157. </blockquote>
  158. <h2><a href="/david/2023/01/06/" title="Lien permanent vers cet article">Toile</a> (2023-01-06)</h2>
  159. <details>
  160. <summary>Déplier pour lire le contenu de la publication</summary>
  161. <blockquote lang="en">
  162. <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>
  163. <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>
  164. </blockquote>
  165. <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>
  166. <blockquote lang="en">
  167. <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>
  168. <p><cite><em>Ibid.</em></cite></p>
  169. </blockquote>
  170. <figure>
  171. <a href="#2023-01-06-toile-gouttes"
  172. title="Cliquer pour une version haute résolution">
  173. <img src="/static/david/2023/2023-01-06-toile-gouttes.jpg" 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"
  174. loading="lazy" width="3024" height="4032" />
  175. </a>
  176. <a href="#_" class="lightbox" id="2023-01-06-toile-gouttes">
  177. <img src="/static/david/2023/2023-01-06-toile-gouttes.jpg" 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"
  178. loading="lazy" width="3024" height="4032" />
  179. </a>
  180. <figcaption>Parc Louis-Hébert, Montréal, 2 novembre&nbsp;2022.</figcaption>
  181. </figure>
  182. <details>
  183. <summary>Et pendant ce temps là de l’autre côté de la rue&nbsp;:</summary>
  184. <figure>
  185. <a href="#2023-01-06-toile-soleil"
  186. title="Cliquer pour une version haute résolution">
  187. <img src="/static/david/2023/2023-01-06-toile-soleil.jpg" alt="Un parc pour enfant à contre-jour avec le soleil qui se lève dans le brouillard et qui forme une jolie étoile"
  188. loading="lazy" width="4032" height="3024" />
  189. </a>
  190. <a href="#_" class="lightbox" id="2023-01-06-toile-soleil">
  191. <img src="/static/david/2023/2023-01-06-toile-soleil.jpg" alt="Un parc pour enfant à contre-jour avec le soleil qui se lève dans le brouillard et qui forme une jolie étoile"
  192. loading="lazy" width="4032" height="3024" />
  193. </a>
  194. <figcaption>Une toile de soleil&nbsp;!</figcaption>
  195. </figure>
  196. </details>
  197. </details>
  198. </main>
  199. <hr>
  200. <footer>
  201. <p>
  202. <nobr>
  203. <a href="/david/" title="Aller à l’accueil"
  204. ><svg class="icon icon-home">
  205. <use
  206. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"
  207. ></use>
  208. </svg>
  209. Accueil</a
  210. >
  211. </nobr>
  212. <nobr>
  213. <a href="/david/log/" title="Accès au flux RSS"
  214. ><svg class="icon icon-rss2">
  215. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
  216. </svg>
  217. Suivre</a
  218. >
  219. </nobr>
  220. <nobr>
  221. <a href="http://larlet.com" title="Go to my English profile" data-instant
  222. ><svg class="icon icon-user-tie">
  223. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-user-tie"></use>
  224. </svg>
  225. Pro</a
  226. >
  227. </nobr>
  228. <nobr>
  229. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"
  230. ><svg class="icon icon-mail">
  231. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
  232. </svg>
  233. Email</a
  234. >
  235. </nobr>
  236. <nobr>
  237. <abbr
  238. class="nowrap"
  239. title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"
  240. ><svg class="icon icon-hammer2">
  241. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-hammer2"></use>
  242. </svg>
  243. Légal</abbr
  244. >
  245. </nobr>
  246. </p>
  247. <template id="theme-selector">
  248. <form>
  249. <fieldset>
  250. <legend><svg class="icon icon-brightness-contrast">
  251. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-brightness-contrast"></use>
  252. </svg> Thème</legend>
  253. <label>
  254. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  255. </label>
  256. <label>
  257. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  258. </label>
  259. <label>
  260. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  261. </label>
  262. </fieldset>
  263. </form>
  264. </template>
  265. </footer>
  266. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  267. <script>
  268. function loadThemeForm(templateName) {
  269. const themeSelectorTemplate = document.querySelector(templateName)
  270. const form = themeSelectorTemplate.content.firstElementChild
  271. themeSelectorTemplate.replaceWith(form)
  272. form.addEventListener('change', (e) => {
  273. const chosenColorScheme = e.target.value
  274. localStorage.setItem('theme', chosenColorScheme)
  275. toggleTheme(chosenColorScheme)
  276. })
  277. const selectedTheme = localStorage.getItem('theme')
  278. if (selectedTheme && selectedTheme !== 'undefined') {
  279. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  280. }
  281. }
  282. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  283. window.addEventListener('load', () => {
  284. let hasDarkRules = false
  285. for (const styleSheet of Array.from(document.styleSheets)) {
  286. let mediaRules = []
  287. for (const cssRule of styleSheet.cssRules) {
  288. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  289. continue
  290. }
  291. // WARNING: Safari does not have/supports `conditionText`.
  292. if (cssRule.conditionText) {
  293. if (cssRule.conditionText !== prefersColorSchemeDark) {
  294. continue
  295. }
  296. } else {
  297. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  298. continue
  299. }
  300. }
  301. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  302. }
  303. // WARNING: do not try to insert a Rule to a styleSheet you are
  304. // currently iterating on, otherwise the browser will be stuck
  305. // in a infinite loop…
  306. for (const mediaRule of mediaRules) {
  307. styleSheet.insertRule(mediaRule.cssText)
  308. hasDarkRules = true
  309. }
  310. }
  311. if (hasDarkRules) {
  312. loadThemeForm('#theme-selector')
  313. }
  314. })
  315. </script>
  316. </body>
  317. </html>