Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

index.html 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  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 #étiquette — David Larlet</title>
  13. <meta name="description" content="Publications relatives au tag #étiquette">
  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 #étiquette</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" 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/2021/12/16/" title="Lien permanent vers cet article">Mood</a> (2021-12-16)</h2>
  75. <blockquote>
  76. <p>Browse by Emotional State</p>
  77. <p><cite><a href="https://app.projecthealthyminds.com/">Guide for Healthy Minds</a></cite></p>
  78. </blockquote>
  79. <p>Cette simple suggestion de navigation a remis quelques pièces dans mon <em>jukebox</em>. Les étiquettes présentent le côté oppressant d’être rapidement trop nombreuses pour pouvoir s’y retrouver. C’est un peu la version fainéante pour pouvoir évoluer dans des contenus. On propose une navigation plate mais il n’y a pas de parti pris, d’angle proposé, d’invitation à découvrir selon un contexte par exemple.</p>
  80. <p>Quelles portes d’entrées proposer qui reflètent un état émotionnel&#8239;? Est-ce qu’il serait pertinent d’avoir une navigation saisonnière&#8239;? Ou qui s’adapte au rythme de la journée&#8239;? Est-ce fou d’adapter l’exploration en fonction du choix de thème clair ou foncé&#8239;? Quelles portes de sorties soigner aussi&#8239;?</p>
  81. <p>Tellement d’expériences possibles.</p>
  82. <h2><a href="/david/2021/12/08/" title="Lien permanent vers cet article">Stream</a> (2021-12-08)</h2>
  83. <blockquote lang="en">
  84. <p>I do sometimes ask myself if it’s time to change. I often wonder if I should merge my Stream and Articles into one main channel? I wonder that because, to a certain extent, the Stream has met its purpose; <mark>it’s taught me to think differently about what I write and share</mark>, made me feel that I can share more, and given me the confidence to do what I want on my site, and to do that as much or as little as necessary. It’s my playground, and there are no rules.</p>
  85. <p><cite><em><a href="https://colly.com/articles/stream-on">Stream on</a></em> (<a href="/david/cache/2021/418e55cca386afcdb4b14677c9706e5d/">cache</a>)</cite></p>
  86. </blockquote>
  87. <p>En fin d’année, j’ai toujours cette prise de recul sur ce que je pourrais inventer pour l’année suivante en terme de publication. J’ai inlassablement cet appel à publier moins mais mieux et plus long. Et en parallèle cette crainte qu’une rupture dans la régularité fasse sécher l’encre — toute numérique soit-elle — pour longtemps. Je crois que je préfère la pression diluée de la publication quotidienne pour l’instant.</p>
  88. <p>Le court, le long, le profond, le superficiel, tout cela est très relatif. Il suffit parfois de la bonne phrase au bon moment pour (faire) tirer un nouveau fil d’idées ou pour générer un nouveau ricochet ailleurs. L’autre jour, <a href="https://nota-bene.org/">Stéphane</a> m’invitait indirectement à relire une <a href="/david/blog/2014/un-web-omni-present/">vieille entrée</a> et j’étais rétrospectivement content d’avoir pris le temps, à l’époque, de rédiger cela.</p>
  89. <p><em>Note&nbsp;: un intérêt des <a href="/david/talks/">interventions publiques</a> était de me forcer à un instant donné à creuser un sujet ou une intuition un peu plus en profondeur. Quelle équivalence <a href="/david/2021/10/05/" title="Conférences 2">aujourd’hui</a>&#8239;?</em></p>
  90. <p>Après avoir fait du <a href="/david/stream/2018/">quotidien en 2018</a>, de l’<a href="/david/stream/2019/">hebdomadaire en 2019</a>, puis <a href="/david/2020/">en 2020</a> et être revenu à du <a href="/david/2021/">quotidien en 2021</a>, peut-être que je suis suffisamment en confiance pour envisager un rythme plus chaotique&#8239;?</p>
  91. <p>Ou pas.</p>
  92. <p>En attendant de faire ce choix, je me nourris des réflexions des autres à ce sujet. Et j’ai toujours cette <a href="/david/2021/12/04/" title="Colophon">idée de produit</a> qui tourne en tâche de fond. Mes récentes tentatives d’utiliser ActivityStream se sont <a href="/david/2021/07/13/" title="ActivityStreams">encore une fois</a> soldées par des échecs cuisants. Je crois qu’il vaudrait mieux que je commence par expérimenter l’usage en partant d’une publication statique que je maîtrise. Mine de rien, avec l’<a href="/david/2021/12/02/" title="Tags">ajout des étiquettes</a>, je m’en approche pas mal sur cet espace.</p>
  93. <blockquote lang="en">
  94. <p>Tagging = curating</p>
  95. <p>My favourite feature is tagging, which works incredibly well because the entire post is visible (no clicking through to read the whole thing). In some cases, tags create a multi-part article or diary, sometimes more of a photo essay or research thread. For example, the tag garden project neatly documents last year’s evolving garden renovation.</p>
  96. <p><cite><em>Ibid.</em></cite></p>
  97. </blockquote>
  98. <h2><a href="/david/2021/12/02/" title="Lien permanent vers cet article">Tags</a> (2021-12-02)</h2>
  99. <blockquote lang="en">
  100. <p>For some reason, when we moved our workflows into the digital realm, we began to lose respect for this way of taking notes, of simply adding new information to an ever-growing log of our thoughts. Instead, we built tools that encourage us to keep only the most current version of reality. […]</p>
  101. <p><strong>Incremental notes</strong> is my push against this trend of note-taking tools that only live in the present and deny the reality of learning and living through time. We don’t remember things by modifying our past memories – we simply accumulate more, as if adding entries to a log or a journal. <mark>We search through them by traversing time</mark>, looking for links between ideas and experiences.</p>
  102. <p><cite><em><a href="https://thesephist.com/posts/inc/">Incremental note-taking</a></em> (<a href="/david/cache/2021/089ec00265a43807246ec4334a10375a/">cache</a>)</cite></p>
  103. </blockquote>
  104. <p>Depuis une semaine, vous devriez avoir vu apparaître une nouvelle dimension d’exploration sur cet espace avec l’apparition d’étiquettes qui fait suite à de <a href="/david/2021/11/12/" title="Étiquettes">précédentes</a> <a href="/david/2021/11/02/" title="Réflexion">réflexions</a>. Une petite révolution.</p>
  105. <p>Je me suis mis à ajouter des <em>tags</em> à chacune des 300&nbsp;entrées de cette année. C’est long mais je vois un intérêt à l’avoir fait en une fois (en vrai, trois soirs)&nbsp;: le <em>corpus</em> est relativement cohérent en me limitant à en apposer un à trois par entrée. J’ai aussi pu réfléchir aux étiquettes qui n’apparaissaient qu’une seule fois, de l’avantage de travailler du contenu existant. À l’inverse, j’ai essayé d’éviter les mot-clés «&nbsp;introspection&nbsp;» ou «&nbsp;blog&nbsp;» que j’avais envie de mettre à trop d’endroits. J’ai remarqué aussi certaines associations comme «&nbsp;pandémie&nbsp;» et «&nbsp;incompétence&nbsp;» inévitables… Lorsque je lis <a href="/david/#tags">la liste des étiquettes</a>, je ne trouve pas mes écrits très réjouissants aussi.</p>
  106. <p>Le plus difficile aura été de choisir d’avoir des étiquettes annuelles, ce qui me permettra de faire évoluer les centres d’intérêts. J’étais aussi à deux doigts de faire un nuage de <em>tags</em> sur la <a href="/david/#tags">page d’accueil</a>. Heureusement que ma CSS actuelle me contraint à ne pas tomber dans la nostalgie.</p>
  107. <blockquote lang="en">
  108. <p>If we were to build a medium for better thinking on top of the web browser, it’s reckless to expect the average user to manually connect, organize, and annotate the information they come across. Just as the early World Wide Web started out manually-curated and eventually became curated by algorithms and communities, <mark>I think we’ll see a shift in how individual personal landscapes of information are curated</mark>, from manual organization to mostly machine-driven organization. Humans will leave connections and highlights as a trail of their thinking, rather than as their primary way of exploring their knowledge and memory.</p>
  109. <p><cite><em><a href="https://thesephist.com/posts/browser/">The web browser as a tool of thought</a></em> (<a href="/david/cache/2021/ed384fc76fbe9728070efb6c71a0eb9c/">cache</a>)</cite></p>
  110. </blockquote>
  111. <h2><a href="/david/2021/11/12/" title="Lien permanent vers cet article">Étiquettes</a> (2021-11-12)</h2>
  112. <details>
  113. <summary>Déplier pour lire le contenu de la publication</summary>
  114. <blockquote lang="en">
  115. <p>In hierarchical file systems, the path to a file tells us how to retrieve it, not what is inside the file. For example, “/home/john/diary.txt” tells the computer to start from the root, go into the directory named “home”, go into the subdirectory named “john”, and follow the link named “diary.txt” to access the file. It doesn’t necessarily tell us anything about what the file contains – for all we know, it could be an actual diary or a downloaded movie. To make matters worse, the meaning of the path is relative to which computer system we’re working on. The same path “/home/john/diary.txt” might exist on a distant server, but possess completely different file content.</p>
  116. <p><cite><em><a href="https://www.nayuki.io/page/designing-better-file-organization-around-tags-not-hierarchies">Designing better file organization around tags, not hierarchies</a></em> (<a href="/david/cache/2021/2fc0d9333db2b78b5a110724fba31b22/">cache</a>)</cite></p>
  117. </blockquote>
  118. <p>Un long article un peu technique sur le passage d’un stockage hiérarchique à une structure complètement plate en passant par des <em>tags</em>.</p>
  119. <p>Ceci m’intéresse à <a href="/david/2021/10/07/" title="Consigner">double</a> <a href="/david/2021/09/23/" title="Dossier">titre</a>. Ce qui m’interpelle cette fois-ci, c’est qu’une fois la hiérarchie établie par un·e précurseur·euse, les <a href="/david/2021/03/17/" title="Arrivant·es">autres</a> doivent suivre et se retrouvent avec moins de libertés. Une approche par étiquettes permet potentiellement de privilégier une structure permettant une évolution plus fluide.</p>
  120. <p>Peut-être que la façon dont on nous a appris à ranger nos affaires numériques en dit plus que ce que l’on pense. Et je ne parle même pas des URLs. Comme une envie de <a href="/david/2021/11/02/" title="Réflexion">revisiter</a> des choses par ici.</p>
  121. <hr />
  122. <blockquote>
  123. <p><em>[Lisant le titre d’un livre posé dans le salon&nbsp;: «&nbsp;Les lois naturelles de l’enfant&nbsp;»]</em><br />
  124. — <mark>Nous</mark>, on n’a pas de lois.</p>
  125. </blockquote>
  126. <p>🤗</p>
  127. </details>
  128. <h2><a href="/david/2021/09/23/" title="Lien permanent vers cet article">Dossier</a> (2021-09-23)</h2>
  129. <details>
  130. <summary>Déplier pour lire le contenu de la publication</summary>
  131. <blockquote lang="en">
  132. <p>It’s a difficult concept to get across, though. Directory structure isn’t just unintuitive to students — it’s <em>so</em> intuitive to professors that they have difficulty figuring out how to explain it. “Those of us who have been around a while <em>know</em> what a file is, but I was at a bit of a loss to explain it,” lamented one educator […] Others, meanwhile, believe it’s professors who need to adjust their thinking. […] Even professors who have incorporated directory structure into their courses suspect that they may be clinging to an approach that’s soon to be obsolete. […] His advice to fellow educators: Get ready. “This is not gonna go away,” he says. “You’re not gonna go back to the way things were. <mark>You have to accept it.</mark> The sooner that you accept that things change, the better.”</p>
  133. <p><cite><em><a href="https://www.theverge.com/22684730/students-file-folder-directory-structure-education-gen-z">Kids who grew up with search engines could change STEM education forever</a></em> (<a href="/david/cache/2021/f82b9c31388b1f42ddd9d4d7849d7c86/">cache</a>)</cite></p>
  134. </blockquote>
  135. <p>Un article fascinant qui interroge sur ce qui doit être transmis et ce qui doit évoluer par l’usage quitte à adapter les outils… et les modèles mentaux des générations précédentes. Ces derniers sont probablement les moins flexibles.</p>
  136. <p>Je me suis rendu compte que je classais beaucoup moins mes courriels, je suis passé d’une arborescence assez profonde à une demi-douzaine de dossiers. Je peux me le permettre car la recherche de Mail.app est très pertinente, en contrepartie cela me lie fortement à l’outil et dès que je teste une alternative je suis frustré par ce manque.</p>
  137. <p>Tristement, j’ai construit mes propres barreaux. Chaque génération est-elle condamnée à tenter de les transformer en échelles&#8239;?</p>
  138. <figure>
  139. <a href="#nuages"
  140. title="Cliquer pour une version haute résolution">
  141. <img src="/static/david/2021/nuages.jpg" alt="Des nuages dans le ciel."
  142. loading="lazy" width="2048" height="1366" />
  143. </a>
  144. <a href="#_" class="lightbox" id="nuages">
  145. <img src="/static/david/2021/nuages.jpg" alt="Des nuages dans le ciel."
  146. loading="lazy" width="2048" height="1366" />
  147. </a>
  148. <figcaption>Rester léger.</figcaption>
  149. </figure>
  150. <hr />
  151. <p>Réponse(s) de <a href="https://eldritch.cafe/@davidbruant/107020047121002118">David</a>&nbsp;:</p>
  152. <blockquote>
  153. <p>Ma croyance, c’est que les dossiers sur ordi sont un héritage de la manière dont les systèmes d’exploitation sont organisés (par fichier et dossier)<br />
  154. Et les premières interfaces utilisateurs ont reflété naïvement l’API du système d’exploitation</p>
  155. <p>Et c’était mieux que rien</p>
  156. <p>Et clairement, une fois que l’on peut chercher via une requête textuelle qui a une compréhension correcte des dates et du langage, la notion de dossier perd complètement son intérêt</p>
  157. <p>Déjà, le déplacement de «&nbsp;dossier&nbsp;» vers «&nbsp;label&nbsp;» que GMail a proposé a été un premier pas en avant libérateur pour les emails</p>
  158. <p>Le dossier, c’est une des solutions possibles au problème «&nbsp;j’ai besoin de retrouver une information&nbsp;»<br />
  159. Et il y en a beaucoup d’autres</p>
  160. <p>J’imagine que le dossier émerge dans les systèmes d’exploitation, parce qu’il faut trouver <em>une</em> solution au problème de retrouver ses infos et le rangement manuel dans des dossiers, c’est 1) assez familier comme modèle mental et 2) facile à implémenter (enfin j’imagine parce que je n’ai jamais implémenter un système de fichier… en tout cas, c’est beaucoup plus facile à implémenter qu’un système qui comprend le langage)</p>
  161. <p>Une des difficulté à implémenter autre chose que des dossiers (ou des labels), c’est que ça amène rapidement des problèmes de performance ou de pertinence</p>
  162. <p>Les dossiers, il n’y a pas de problème de performance (…et pour la pertinence, on délègue entièrement la responsabilité à l’utilisateur de créer/maintenir une arborescence qui lui est pertinente)</p>
  163. <p>Implémenter un système de recherche pertinent, ça demande une compréhension correcte du langage du contenu<br />
  164. …mais quel langage&#8239;?<br />
  165. parce qu’une recherche s’implémente différemment selon le langage<br />
  166. Et si on travaille dans plusieurs langues&#8239;?</p>
  167. <p>Et l’usage de la recherche devient une partie importante de l’expérience utilisateur</p>
  168. </blockquote>
  169. <p>Je tombe également sur&nbsp;: <a href="https://techcrunch.com/2021/09/29/google-introduces-a-new-way-to-search-that-combines-images-and-text-into-one-query/">Google introduces a new way to search that combines images and text into one query</a> (<a href="/david/cache/2021/b65dcd34bb1ea8d8b610aaf06a0b5902/">cache</a>).</p>
  170. </details>
  171. </main>
  172. <hr>
  173. <footer>
  174. <p>
  175. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  176. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  177. </svg> Accueil</a> •
  178. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  179. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  180. </svg> Suivre</a> •
  181. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  182. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  183. </svg> Pro</a> •
  184. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  185. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  186. </svg> Email</a> •
  187. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  188. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  189. </svg> Légal</abbr>
  190. </p>
  191. <template id="theme-selector">
  192. <form>
  193. <fieldset>
  194. <legend><svg class="icon icon-brightness-contrast">
  195. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  196. </svg> Thème</legend>
  197. <label>
  198. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  199. </label>
  200. <label>
  201. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  202. </label>
  203. <label>
  204. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  205. </label>
  206. </fieldset>
  207. </form>
  208. </template>
  209. </footer>
  210. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  211. <script>
  212. function loadThemeForm(templateName) {
  213. const themeSelectorTemplate = document.querySelector(templateName)
  214. const form = themeSelectorTemplate.content.firstElementChild
  215. themeSelectorTemplate.replaceWith(form)
  216. form.addEventListener('change', (e) => {
  217. const chosenColorScheme = e.target.value
  218. localStorage.setItem('theme', chosenColorScheme)
  219. toggleTheme(chosenColorScheme)
  220. })
  221. const selectedTheme = localStorage.getItem('theme')
  222. if (selectedTheme && selectedTheme !== 'undefined') {
  223. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  224. }
  225. }
  226. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  227. window.addEventListener('load', () => {
  228. let hasDarkRules = false
  229. for (const styleSheet of Array.from(document.styleSheets)) {
  230. let mediaRules = []
  231. for (const cssRule of styleSheet.cssRules) {
  232. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  233. continue
  234. }
  235. // WARNING: Safari does not have/supports `conditionText`.
  236. if (cssRule.conditionText) {
  237. if (cssRule.conditionText !== prefersColorSchemeDark) {
  238. continue
  239. }
  240. } else {
  241. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  242. continue
  243. }
  244. }
  245. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  246. }
  247. // WARNING: do not try to insert a Rule to a styleSheet you are
  248. // currently iterating on, otherwise the browser will be stuck
  249. // in a infinite loop…
  250. for (const mediaRule of mediaRules) {
  251. styleSheet.insertRule(mediaRule.cssText)
  252. hasDarkRules = true
  253. }
  254. }
  255. if (hasDarkRules) {
  256. loadThemeForm('#theme-selector')
  257. }
  258. })
  259. </script>
  260. </body>
  261. </html>