Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

index.html 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  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>
  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>Résistance — David Larlet</title>
  13. <!-- That good ol' feed, subscribe :). -->
  14. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  15. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  16. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  17. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  18. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  19. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  20. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  21. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  22. <meta name="msapplication-TileColor" content="#f0f0ea">
  23. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  24. <meta name="theme-color" content="#f0f0ea">
  25. <!-- Documented, feel free to shoot an email. -->
  26. <link rel="stylesheet" href="/static/david/css/style_2020-04-25.css">
  27. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  28. <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>
  29. <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>
  30. <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>
  31. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  32. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">
  35. <article>
  36. <h1>Résistance</h1>
  37. <nav>
  38. <p class="center">
  39. <a rel="prev" href="/david/2020/04/03/" title="Publication précédente : Patience">←</a> •
  40. <a href="/david/" title="Aller à l’accueil" tabindex="1">🏠</a>
  41. • <a rel="next" href="/david/2020/04/18/" title="Publication suivante : Zam">→</a>
  42. </p>
  43. </nav>
  44. <hr>
  45. <p><em>Contre un virus ou un système ?</em></p>
  46. <h2 id="humeur">Humeur <a href="#humeur" title="Ancre vers cette partie" aria-hidden="true">#</a></h2>
  47. <blockquote>
  48. <p>J’ai appartenu à cette génération qui, en occident, serrait des mains et faisait des bises.</p>
  49. <p><cite><em>Christian Fauré</em> <a href="https://twitter.com/ChristianFaure/status/1247855521106923521">sur Twitter</a></cite></p>
  50. </blockquote>
  51. <p>J’accepte que nous soyons impuissants face à un virus qui :</p>
  52. <ol>
  53. <li>peut <a href="https://www.lejournaldumedecin.com/actualite/transmission-de-covid-19-par-aerosol-les-implications-pour-la-sante-publique/article-opinion-47087.html">rester en suspension</a> (<a href="/david/cache/2020/a9155966aed8a47ec727d156bf8b5458/">cache</a>) plusieurs heures selon les environnements (notamment les commerces climatisés)</li>
  54. <li>peut <a href="https://www.nejm.org/doi/full/10.1056/NEJMc2004973">rester sur des surfaces</a> plusieurs heures aussi</li>
  55. <li>prend plusieurs jours à se manifester ce qui rend quasi-impossible la pertinence de la traçabilité des contacts des individus</li>
  56. <li>ne se manifeste pas toujours, potentiellement sur 25 % de la population</li>
  57. </ol>
  58. <p>J’accepte d’être surpris par la résilience d’un système que je pensais plus fragile. Je suis encore plus surpris par la continuité de nombreux services qui est symptomatique de la pression que le capitalisme peut avoir sur la base de la pyramide. En fait, je ne suis pas surpris, je suis triste. Triste que cet esclavage moderne soit encore et toujours silencieux.</p>
  59. <p>J’accepte que le fameux pic que l’on tente d’atteindre soit un élément de langage, de temporisation, de discussion, d’occupation car on n’a que ça à faire pendant un confinement. Occuper l’attention d’un côté pour préparer un panoptique numérique de l’autre. Exercice de presti<em>digital</em>isation facile. Mains propres, doigts sales. Probablement des doigts de services numériques nationaux.</p>
  60. <p>J’accepte aussi malgré moi <strong>et</strong> avec un certain soulagement de ne pas avoir été totalement dans le faux ces dernières années. J’essaye de prendre cela du bon côté en espérant un changement, qui ne peut être que radical.</p>
  61. <h2 id="grand-soir">Grand soir <a href="#grand-soir" title="Ancre vers cette partie" aria-hidden="true">#</a></h2>
  62. <blockquote>
  63. <p>Même lorsqu’il est présenté comme une « chance » ou une « opportunité », le souhait d’un basculement provoqué par l’épidémie reste excessivement fataliste sur l’état de nos forces pour changer la société. Seul un virus en serait capable, négligeant la colère politique légitime qui fonde tous les mouvements sociaux. Compter sur la performativité des rhétoriques de rupture dissimule le travail d’auto-organisation nécessaire aux basculements politiques tant souhaités, qui ne verront jamais le jour tous seuls. <mark>Il n’y aura pas de Grand Soir</mark>, mais bien différents niveaux au sein desquels il est possible de construire les bases de notre future société écologique. Il importe de (re)trouver les moyens d’agir sur ces différents niveaux, afin de préparer le passage vers cette nouvelle société. Le syndicalisme est l’un d’entre eux, les occupations contre les Grands Projets Inutiles et Imposés, l’engagement associatif et la construction d’institutions alternatives aussi. Ce sont ces luttes, portées sincèrement au quotidien avec nos camarades, qui permettront de construire la société écologique nécessaire.</p>
  64. <p><cite><em><a href="https://perspectives-printanieres.info/index.php/2020/03/30/le-virus-nest-pas-une-vengeance/">Le virus n’est pas une vengeance</a></em> (<a href="/david/cache/2020/a38442a0e3e291d654793c384e17e737/">cache</a>)</cite></p>
  65. </blockquote>
  66. <p>Peut-être pas de Grand Soir donc, et les appels à faire des grandes manifestations <q>à la fin</q> me semble être lancés par des personnes qui sont dans le déni de ce qu’est une épidémie. Ou alors dans cinq ans peut-être…</p>
  67. <p>Par contre des initiatives locales, à <a href="/david/2020/03/27/#reparation">une échelle adaptée</a>, restent possibles même en période de confinement pour construire (avec un sous-)ensemble de personnes un récit qui décrive non pas un <em>après</em> enthousiasmant mais déjà un <em>pendant</em> !</p>
  68. <h2 id="surveillance">Surveillance <a href="#surveillance" title="Ancre vers cette partie" aria-hidden="true">#</a></h2>
  69. <blockquote>
  70. <p>Et nous nous adapterons à ces mesures. Nous les accepterons, comme nous avons accepté les contrôles de sécurité de plus en plus stricts dans les aéroports après les attaques terroristes. <mark>La surveillance intrusive de nos vies sera considérée comme un prix acceptable à payer</mark> pour jouir en sécurité de la liberté d’être avec d’autres personnes (saines).</p>
  71. <p>Mais comme toujours, le coût réel de cette surveillance sera supporté par les plus pauvres et les plus fragiles.</p>
  72. <p><cite><em><a href="https://www.terrestres.org/2020/03/24/il-ny-aura-pas-de-retour-a-la-normale/">Il n’y aura pas de retour à la normale</a></em> (<a href="/david/cache/2020/7e8f31c1021b2049977e3c92d3a3b356/">cache</a>)</cite></p>
  73. </blockquote>
  74. <p>Si les mesures qui vont être prises pendant cette période sont là pour durer alors créons nos propres mesures. C’est <strong>maintenant</strong> qu’il faut proposer de nouvelles choses avant qu’elles nous soient imposées.</p>
  75. <p>Les espaces confinés sont propices à la propagation ? Est-ce que nous sommes prêt·e·s à libérer suffisamment d’espace public pour des marchés en plein air permettant de respecter les distances ?</p>
  76. <p>La contamination de ses proches est problématique ? Est-ce que l’on aménage des endroits où se mettre en confinement individuel et volontaire en cas de déclaration de symptômes ?</p>
  77. <p>La technologie fait peur ? Est-ce que l’on est prêts à consigner tous nos contacts par écrit pour pouvoir remonter et informer sur la douzaine de jours écoulés ?</p>
  78. <p>Tous ces choix politiques sont relativement <em>low-tech</em>.</p>
  79. <h2 id="tracking">Tracking <a href="#tracking" title="Ancre vers cette partie" aria-hidden="true">#</a></h2>
  80. <blockquote lang="en">
  81. <p>But let’s think for a moment what is actually necessary to achieve our goal: it turns out we could largely achieve what we want without a centralized infrastructure. […]</p>
  82. <p>Either way the central authority would not know who you are. Your only point of contact would be when you become a covid case. Most importantly <mark>this system could be created in a way where it’s completely useless for tracking people</mark> but still be useful for contact tracing.</p>
  83. <p><cite><em><a href="https://lucumr.pocoo.org/2020/4/3/contact-tracing/">App Assisted Contact Tracing</a></em> (<a href="/david/cache/2020/42616669988094757bf9d4864ee4ab4f/">cache</a>)</cite></p>
  84. </blockquote>
  85. <p>Bon, il semblerait que nous ne puissions éviter le <em>solutionnisme technologique</em> qui arrive à la rescousse et qui donne l’illusion de pouvoir isoler des cas de manière pertinente (mais combien ? et où ?!). Même avec une telle approche, il nous est possible de rester relativement légers en terme d’atteinte à la vie privée des citoyens.</p>
  86. <p>Armin nous donne des clés techniques pour cela. En <a href="https://lucumr.pocoo.org/2020/4/9/tcn-contact-tracing/">remet une couche</a> (<a href="/david/cache/2020/7f71531b565d7a8b0a99100786687cfd/">cache</a>). Et c’est même <a href="https://ncase.me/contact-tracing/">brillamment illustré</a> (<a href="/david/cache/2020/c8a8edb7bc65f4ed6b0edc18010434cc/">cache</a>). Mais la <a href="https://blog.keiruaprod.fr/2020/04/08/prerequis-pour-appli-de-suivi-de-contacts.html">technique</a> (<a href="/david/cache/2020/5de73fee2ee649cb44f623c5d2b28a2f/">cache</a>), c’est généralement la <a href="https://github.com/opentrace-community">partie facile</a>. Cela ne pourra pas être efficace — <a href="https://science.sciencemag.org/content/early/2020/03/30/science.abb6936">si tant est que ça le soit</a> (<a href="/david/cache/2020/a015cd984c70f739bf51aa6b2a80d141/">cache</a>) — tant qu’un tel dispositif ne sera pas adopté par une très large proportion de la population <em>mondiale</em>.</p>
  87. <p>Ou alors nous allons devoir passer <strong>du confinement au cloisonnement</strong>. Par quartier, par ville, par région, des barrages avec des infrastructures permettant de rester confiné·e·s 15 jours en cas de dépistage positif.</p>
  88. <p>Le temps de coudre quelques masques.</p>
  89. <h2 id="preparer">Préparer <a href="#preparer" title="Ancre vers cette partie" aria-hidden="true">#</a></h2>
  90. <blockquote>
  91. <p>Il s’agit de faire la liste des activités dont vous vous sentez privées par la crise actuelle et qui vous donne <mark>la sensation d’une atteinte à vos conditions essentielles de subsistance</mark>. Pour chaque activité, pouvez-vous indiquer si vous aimeriez que celles-ci reprennent à l’identique (comme avant), mieux, ou qu’elles ne reprennent pas du tout.</p>
  92. <p><cite><em><a href="http://www.bruno-latour.fr/fr/node/851.html">Exercice pour préparer l’après crise sanitaire pour être sûr que tout ne reprenne pas comme avant</a></em> (<a href="/david/cache/2020/91a099e7f48f8733274f7b27cb68b772/">cache</a>)</cite></p>
  93. </blockquote>
  94. <p>J’aime beaucoup la <a href="http://www.aubryconseil.com/post/Retro-confinement">transformation en rétrospective</a> (<a href="/david/cache/2020/81585c1eca04b8e13fa1d096f70c96ec/">cache</a>) proposée par Claude Aubry. Devenons des <q>interrupteurs de globalisation</q> comme le dit Bruno Latour dans son article : <a href="http://www.bruno-latour.fr/sites/default/files/downloads/P-202-AOC-03-20.pdf">PDF complet, 136 Ko</a> (<a href="/static/david/2020/Latour-Apres-Crise.pdf">cache</a>).</p>
  95. <p>Un exercice à faire en famille, en quartier, à l’école ? Encore une question d’échelle. Redessiner des communautés locales <em>et</em> distribuées.</p>
  96. <p><em>Mise à jour</em> : Claude m’a permis de générer une <a href="/static/david/2020/retro_confinement_claude_aubry.png">version haute définition</a> de l’image de la rétro-confinement.</p>
  97. <h2 id="degrowth">Degrowth <a href="#degrowth" title="Ancre vers cette partie" aria-hidden="true">#</a></h2>
  98. <blockquote lang="en">
  99. <p>Historically, people have fought for more—more bread, more rights, more wealth. Deliberately deciding to have less, albeit a radically more equal distribution of a smaller overall pie, will not be easy nor will it be an overnight transition. However, <mark>forming plans for a materially credible, ecologically sustainable, post-capitalist future is absolutely necessary</mark> if we are to avoid the likelihood of a future where the rich fortify themselves in relatively safe, highly militarized zones within temperate regions while most people are left in ruined ecologies located in sacrifice zones, existing well below the social foundation.</p>
  100. <p><cite><em><a href="https://esra.nz/ecological-crises-equitable-futures/">Ecological crises and equitable futures</a></em> (<a href="/david/cache/2020/99c5bddeed5760b748ba9b219270d75d/">cache</a>)</cite></p>
  101. </blockquote>
  102. <p>Et puis il y a nos aspirations à plus long terme. Réduire les chaînes d’approvisionnement, réduire notre consommation d’énergie, repenser un système moins inégalitaire. Tout cela est lié et va probablement me faire revoir des choses à titre personnel déjà.</p>
  103. <p>Revoir peut-être aussi aux côtés de quelles personnes est-ce que je souhaite aborder cette descente énergétique inévitable. Quelles relations est-ce que je détériore au profit de liens différents ? Quel réseau est-ce que je peux vraiment considérer comme étant solidaire ? Quel milieu créer qui soit propice à un apaisement en dépit de la situation ?</p>
  104. <h2 id="salaire">Salaire <a href="#salaire" title="Ancre vers cette partie" aria-hidden="true">#</a></h2>
  105. <blockquote>
  106. <p>Nos personnes doivent être libérées de cet aléa et reconnues, de 18 ans à la mort, par un salaire posé comme un droit politique et qu’il serait raisonnable d’inscrire dans une fourchette de 1 à 3. Chacun·e, à sa majorité, quels que soient son passé scolaire et son handicap, est doté·e du premier niveau de qualification, et donc des 1700 euros nets du Smic revendiqué, et peut, par des épreuves de qualification, progresser jusqu’à un salaire plafond de 5000 euros nets : <mark>au-delà, les rémunérations n’ont aucun sens</mark>. Droit politique de tout adulte vivant sur le territoire national, le salaire peut stagner, mais jamais diminuer ou être supprimé.</p>
  107. <p><cite><em><a href="http://www.ardeur.net/2020/04/covid-19-lami-des-dominants/">COVID-19, l’ami des dominants</a></em> (<a href="/david/cache/2020/02c4fd680fe2704b27f59a71a269b3db/">cache</a>)</cite></p>
  108. </blockquote>
  109. <p><a href="/david/2020/12/15/#franck-lepage">Franck Lepage</a> avec L’ardeur nous propose une autre vision de ce que l’on peut lire/voir dans les media traditionnels avec une vision plus historique des changements. Des pistes pour comprendre la situation actuelle et notamment identifier pourquoi est-ce qu’elle pourrait aller vers une domination encore plus importante des personnes oppressées. Voir aussi <a href="https://www.youtube-nocookie.com/embed/p6d82YwSFII">la vidéo</a> (<a href="https://invidio.us/watch?v=p6d82YwSFII">sur invidio.us</a>) réalisée suite à l’article.</p>
  110. <p>Cela n’est pas très enthousiasmant mais autant ne pas se mettre un masque sur les yeux en ce moment… et peut-être démasquer les réel·le·s coupables. Sans jeux de maux.</p>
  111. <h2 id="jardins">Jardins <a href="#jardins" title="Ancre vers cette partie" aria-hidden="true">#</a></h2>
  112. <blockquote>
  113. <p>Instaurer les <em>Jardins de la Victoire</em> : cultiver partout où c’est possible</p>
  114. <p><cite><em><a href="https://quebecsolidaire.net/nouvelle/quebec-solidaire-propose-un-plan-dindependance-alimentaire-pour-subvenir-aux-besoins-du-quebec">Québec solidaire propose un Plan d’indépendance alimentaire pour subvenir aux besoins du Québec</a></em> (<a href="/david/cache/2020/d991865574f0f29b42f75b29e768354b/">cache</a>)</cite></p>
  115. </blockquote>
  116. <p>Revenu universel, production locale, effort <q>de guerre</q> on connait les solutions pour sortir d’une crise. Mais gagner une guerre contre qui, contre quoi ? Un virus ? Lorsqu’on s’en sortira, si la seule chose qui change est de ne pas oublier son masque pour aller faire ses courses, on aura probablement gagné un combat mais sûrement pas la guerre.</p>
  117. <p>On ne gagne de toute façon pas une guerre, on compte ses morts et on fait germer des idées libératrices dessus à partir d’une colère collective accumulée. <em>Transformée.</em></p>
  118. <h2 id="une-route">Une route ? <a href="#une-route" title="Ancre vers cette partie" aria-hidden="true">#</a></h2>
  119. <blockquote>
  120. <p>À mes yeux la route à choisir est celle qui parait la plus longue et complexe, parce que <mark>c’est la voie la plus humaine</mark>. C’est pas une solution, hein : c’est une route. On va trébucher, on va se paumer et on va fatiguer. Mais avec un peu de jugeote, on peut cheminer en bonne compagnie, réaliser bien plus et aller un peu plus loin que les ignares qui se prennent pour des puissants.</p>
  121. <p><cite><em><a href="https://framablog.org/2020/04/08/il-ny-a-pas-de-solution-il-ny-a-que-nous/">Il n’y a pas de solution, il n’y a que nous</a></em> (<a href="/david/cache/2020/e3d7b7a2b567315813058779ff45b77d/">cache</a>)</cite></p>
  122. </blockquote>
  123. <p>Nous sommes à un carrefour, plusieurs sentiers se présentent à nous. Nous, humanité. Nous, groupes. Nous, familles. J’espère que nous n’irons pas tou·te·s dans la même direction tout de suite mais que nous nous donnerons les occasions d’explorer tout un arbre de possibles avant de choisir — peut-être collectivement — d’emprunter des chemins qui nous semblent être plus sains.</p>
  124. <hr />
  125. <p><em>Note : je suis vraiment admiratif du travail qu’arrivent à produire les personnes qui constituent <a href="https://framasoft.org">Framasoft</a> en ces temps difficiles. Chapeau bas.</em></p>
  126. <nav>
  127. <p class="center">
  128. <a rel="prev" href="/david/2020/04/03/" title="Publication précédente : Patience">←</a> •
  129. <a href="/david/2020/" title="Liste des publications récentes">↑</a>
  130. • <a rel="next" href="/david/2020/04/18/" title="Publication suivante : Zam">→</a>
  131. </p>
  132. </nav>
  133. </article>
  134. <hr>
  135. <footer>
  136. <p>
  137. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  138. <a href="/david/log/" title="Accès au flux RSS">🤖</a> •
  139. <a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
  140. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
  141. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
  142. </p>
  143. <template id="theme-selector">
  144. <form>
  145. <fieldset>
  146. <legend>Thème</legend>
  147. <label>
  148. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  149. </label>
  150. <label>
  151. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  152. </label>
  153. <label>
  154. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  155. </label>
  156. </fieldset>
  157. </form>
  158. </template>
  159. </footer>
  160. <script src="/static/david/js/instantpage-3.0.0.min.js" type="module" defer></script>
  161. <script type="text/javascript">
  162. /* This is a work in progress with Anthony https://ricaud.me */
  163. // TODISCUSS:
  164. // 1. give a way for the user to close that chooser?
  165. // 2. store preferences? Done using localStorage
  166. // 3. create the template from scratch in JS?
  167. // 4. how to make it generic? (no need for forced-dark/light existing rules)
  168. // Results from a Poll: https://mastodon.social/@dav/104093540923157521
  169. // Avoir un moyen de changer de thème d'un site à la main :
  170. // 49% => Utile
  171. // 23% => Pas utile
  172. // 9% => So 2000
  173. // 19% => Je veux le même
  174. // After 24 hours and 43 votes
  175. // A bit hard to interpret, I guess people wanting it found it useful too!
  176. function toggleTheme(themeName) {
  177. document.body.classList.toggle('forced-dark', themeName === 'dark')
  178. document.body.classList.toggle('forced-light', themeName === 'light')
  179. }
  180. function loadThemeForm(templateName) {
  181. const themeSelectorTemplate = document.querySelector(templateName)
  182. const form = themeSelectorTemplate.content.firstElementChild
  183. themeSelectorTemplate.replaceWith(form)
  184. form.addEventListener('change', (e) => {
  185. const chosenColorScheme = e.target.value
  186. localStorage.setItem('theme', chosenColorScheme)
  187. toggleTheme(chosenColorScheme)
  188. })
  189. const selectedTheme = localStorage.getItem('theme')
  190. if (selectedTheme !== 'undefined') {
  191. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  192. toggleTheme(selectedTheme)
  193. }
  194. }
  195. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  196. window.addEventListener('load', () => {
  197. let hasDarkRules = false
  198. for (const styleSheet of Array.from(document.styleSheets)) {
  199. let mediaRules = []
  200. for (const cssRule of styleSheet.cssRules) {
  201. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  202. continue
  203. }
  204. // WARNING: Safari does not have/supports `conditionText`.
  205. if (cssRule.conditionText) {
  206. if (cssRule.conditionText !== prefersColorSchemeDark) {
  207. continue
  208. }
  209. } else {
  210. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  211. continue
  212. }
  213. }
  214. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  215. }
  216. // WARNING: do not try to insert a Rule to a styleSheet you are
  217. // currently iterating on, otherwise the browser will be stuck
  218. // in a infinite loop…
  219. for (const mediaRule of mediaRules) {
  220. styleSheet.insertRule(mediaRule.cssText)
  221. hasDarkRules = true
  222. }
  223. }
  224. if (hasDarkRules) {
  225. loadThemeForm('#theme-selector')
  226. }
  227. })
  228. </script>
  229. </body>
  230. </html>