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

8 kuukautta sitten
3 viikkoa sitten
8 kuukautta sitten
7 kuukautta sitten
8 kuukautta sitten
7 kuukautta sitten
8 kuukautta sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  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. Collectif
  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="Il est parfois difficile pour un collectif existant de fait de définir ce qui le relie (encore), de travailler sur sa raison d’être et/ou ses valeurs. Le regroupement a pu être économique, idéologique, par affinités, un peu des trois à la fois sûrement et à un moment on se retrouve devant le fait accompli. Presque surpris de se retrouver ensemble, à se demander pourquoi.">
  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. <!-- To get attribution when linking on mastodon. -->
  106. <meta name="fediverse:creator" content="@david@larlet.fr">
  107. <style type="text/css">
  108. .tippy-content {
  109. min-width: 280px;
  110. padding: .5rem;
  111. font-size: calc(var(--fluid-0) * 0.8);
  112. font-family: var(--labor-font);
  113. letter-spacing: initial;
  114. text-align: left;
  115. }
  116. .tippy-content h3 {
  117. margin-top: 0;
  118. }
  119. .tippy-content h3 img {
  120. max-width: 2rem;
  121. max-height: 2rem;
  122. display: inline-block;
  123. }
  124. .tippy-content .tippy-links {
  125. display: flex;
  126. justify-content: space-around;
  127. }
  128. .tippy-content a {
  129. padding: .4rem;
  130. color: #F06048;
  131. }
  132. </style>
  133. <body data-instant-intensity="viewport-all">
  134. <article>
  135. <header>
  136. <hgroup>
  137. <h1>Collectif</h1>
  138. <p>Le <time datetime="2024-03-28">28 mars 2024</time></p>
  139. </hgroup>
  140. </header>
  141. <nav>
  142. <p>
  143. <a rel="prev"
  144. href="/david/2024/03/26/"
  145. title="Publication précédente : GPX Viewer">← Précédent</a> •
  146. <a href="/david/" title="Aller à l’accueil" rel="up">Accueil</a>
  147. <a href="/david/recherche/"
  148. title="Aller à la page de recherche"
  149. rel="search" data-no-instant>Recherche</a>
  150. • <a rel="next"
  151. href="/david/2024/03/29/"
  152. title="Publication suivante : Jour 1">Suivant →</a>
  153. </p>
  154. </nav>
  155. <p>Il est parfois difficile pour un collectif existant <em>de fait</em> de définir ce qui le relie (encore), de travailler sur sa raison d’être et/ou ses valeurs. Le regroupement a pu être économique, idéologique, par affinités, un peu des trois à la fois sûrement et à un moment on se retrouve devant le fait accompli. Presque surpris de se retrouver ensemble, à se demander&nbsp;pourquoi.</p>
  156. <p>Cela m’arrive dans trois situations à la fois en ce moment. À différentes échelles mais le parallèle est frappant. Le plus difficile (pour moi) est de se retenir d’être le seul moteur du groupe car le temps individuel est aussi important que l’action collective qu’il&nbsp;précède.</p>
  157. <p>Je vais aller m’épuiser sur ces sages paroles en forêt. Seul.</p>
  158. <a href="#hr-140" title="Lien vers cette section de la page"><hr id="hr-140" /></a>
  159. <blockquote lang="en">
  160. <p>In 2016, Facebook launched a secret project designed to intercept and decrypt the network traffic between people using Snapchat’s app and its servers. The goal was to understand users’ behavior and help Facebook compete with Snapchat, according to newly unsealed court documents. Facebook called this “Project Ghostbusters,” in a clear reference to Snapchat’s ghost-like&nbsp;logo.</p>
  161. <p>On Tuesday, a federal court in California released new documents discovered as part of the class action lawsuit between consumers and Meta, Facebook’s parent&nbsp;company.</p>
  162. <p>The newly released documents reveal how Meta tried to gain a competitive advantage over its competitors, including Snapchat and later Amazon and YouTube, <mark>by analyzing the network traffic of how its users were interacting with Meta’s competitors.</mark> Given these apps’ use of encryption, Facebook needed to develop special technology to get around&nbsp;it.</p>
  163. <p><cite><em><a data-link-domain="techcrunch.com" href="https://techcrunch.com/2024/03/26/facebook-secret-project-snooped-snapchat-user-traffic/" hreflang="en"
  164. title="Consultation de l’article (anglais)">Facebook snooped on users’ Snapchat traffic in secret project, documents reveal</a>
  165. <a href="/david/cache/2024/2de5f6111316a8158795d70666b55a95/" hreflang="en"
  166. data-tippy data-description="A secret program called Project Ghostbusters saw Facebook devise a way to intercept and decrypt the encrypted network traffic of Snapchat users to study their behavior."
  167. data-source="https://techcrunch.com/2024/03/26/facebook-secret-project-snooped-snapchat-user-traffic/"
  168. data-date="2024-03-28"
  169. data-favicon="https://techcrunch.com/wp-content/uploads/2015/02/cropped-cropped-favicon-gradient.png?w=32"
  170. data-domain="techcrunch.com"
  171. ><svg xmlns="http://www.w3.org/2000/svg"
  172. width="24" height="24" viewBox="0 0 24 24" fill="none"
  173. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  174. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  175. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  176. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  177. </svg>
  178. <span class="sr-only">[archive]</span></a></em></cite></p>
  179. </blockquote>
  180. <p>J’ai du mal à réaliser que je suis en train de faire un lien vers TechCrunch mais c’est trop gros pour laisser passer. Je ne vois pas comment un tel stratagème pourrait être justifiable, et si les GAFAM+ en sont là ça fait froid dans le&nbsp;dos.</p>
  181. <p>Le manque de déontologie dans ma profession m’attriste. Savoir que cette nouvelle ne va rien changer aux monopoles actuels&nbsp;m’achève.</p>
  182. <blockquote lang="en">
  183. <p>People who point out what needs to be improved are generally disappointed optimists. Only an optimist would believe that pointing out what has gone wrong could ever result in said issue being fixed. Only somebody who believes that software could be universally useful to everybody in society is going to spend time discovering and highlighting accessibility&nbsp;issues.</p>
  184. <p>You don’t spend years of your life figuring out how the flaws of the web can be fixed unless you thinks the web has massive unfulfilled&nbsp;potential.</p>
  185. <p><mark>We’re not cynics.</mark> If we were, we wouldn’t waste so much energy being&nbsp;hopeful.</p>
  186. <p><cite><em><a data-link-domain="baldurbjarnason.com" href="https://www.baldurbjarnason.com/2024/the-software-crisis-easter-sale/" hreflang="en"
  187. title="Consultation de l’article (anglais)">“I’m not a cynic, I’m disappointed”</a>
  188. <a href="/david/cache/2024/a11451e038f3aedba0ae55ff242e1ed5/" hreflang="en"
  189. data-tippy data-description="Most people don’t realise just how few of the “critics” in tech are genuine cynics.You don’t spend a good part of your life shouting about bad websites or broken software and how they could be fixed if you’re a cynic."
  190. data-source="https://www.baldurbjarnason.com/2024/the-software-crisis-easter-sale/"
  191. data-date="2024-03-28"
  192. data-favicon="https://www.baldurbjarnason.com/dark-bird.svg"
  193. data-domain="baldurbjarnason.com"
  194. ><svg xmlns="http://www.w3.org/2000/svg"
  195. width="24" height="24" viewBox="0 0 24 24" fill="none"
  196. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  197. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  198. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  199. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  200. </svg>
  201. <span class="sr-only">[archive]</span></a></em></cite></p>
  202. </blockquote>
  203. <a href="#hr-141" title="Lien vers cette section de la page"><hr id="hr-141" /></a>
  204. <blockquote lang="en">
  205. <p>As such, I’ve become more attuned to what my goal really <em>should be</em> with Buttondown. Most tech companies have a goal centered around some flavor of maximalism: disrupting an industry, revolutionizing a process, that kind of thing. Buttondown is not that kind of product; <mark>I am not that kind of&nbsp;person.</mark></p>
  206. <p><cite><em><a data-link-domain="jmduke.com" href="https://jmduke.com/posts/microblog/why-should-a-company/" hreflang="en"
  207. title="Consultation de l’article (anglais)">Why should a company? · Applied Cartography</a>
  208. <a href="/david/cache/2024/c2a852eced710f481135a1f61cb67a26/" hreflang="en"
  209. data-tippy data-description=""
  210. data-source="https://jmduke.com/posts/microblog/why-should-a-company/"
  211. data-date="2024-03-28"
  212. data-favicon="https://jmduke.com/favicon.ico"
  213. data-domain="jmduke.com"
  214. ><svg xmlns="http://www.w3.org/2000/svg"
  215. width="24" height="24" viewBox="0 0 24 24" fill="none"
  216. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  217. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  218. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  219. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  220. </svg>
  221. <span class="sr-only">[archive]</span></a></em></cite></p>
  222. </blockquote>
  223. <p>Et puis soudain un peu d’espoir. Tout n’est pas si terrible finalement. Quelques villages ici et là résistent. Quelques personnes et collectifs font la&nbsp;différence.</p>
  224. <blockquote lang="en">
  225. <p>But it’s our fault. Our as a society. We celebrate when Apple becomes the first trillion-dollar company but we don’t celebrate when someone says <mark>“You know what? I think I have&nbsp;enough”.</mark></p>
  226. <p><cite><em><a data-link-domain="manuelmoreale.com" href="https://manuelmoreale.com/growth-is-a-mind-cancer" hreflang="en"
  227. title="Consultation de l’article (anglais)">Growth is a mind cancer</a>
  228. <a href="/david/cache/2024/422adbcbb23d5d87eb9d9f07f21e6e52/" hreflang="en"
  229. data-tippy data-description="I'm following with somewhat vague interest the various legal battles Apple is currently involved in. Reading their response to the EU's DMA makes me …"
  230. data-source="https://manuelmoreale.com/growth-is-a-mind-cancer"
  231. data-date="2024-03-28"
  232. data-favicon="https://manuelmoreale.com/favicon.ico"
  233. data-domain="manuelmoreale.com"
  234. ><svg xmlns="http://www.w3.org/2000/svg"
  235. width="24" height="24" viewBox="0 0 24 24" fill="none"
  236. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  237. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  238. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  239. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  240. </svg>
  241. <span class="sr-only">[archive]</span></a></em></cite></p>
  242. </blockquote>
  243. <a href="#hr-142" title="Lien vers cette section de la page"><hr id="hr-142" /></a>
  244. <blockquote>
  245. <p>À l’origine, Make est un outil conçu pour le développement de logiciels&nbsp;: il sert à automatiser la fabrication de programmes exécutables à partir de fichiers contenant du&nbsp;code.</p>
  246. <p>Mais en réalité, <mark>Make peut être utilisé pour gérer toutes sortes de projets.</mark> En tant que langage, il permet de définir des processus de manière très simple (encore plus simple que les scripts shell). Et en tant qu’outil, il permet de gagner du temps, avec une gestion efficace des états des fichiers qui fait économiser du travail aussi bien à l’humain qu’à la&nbsp;machine.</p>
  247. <p><cite><em><a data-link-domain="arthurperret.fr" href="https://www.arthurperret.fr/cours/make.html" hreflang="fr"
  248. title="Consultation de l’article">Make</a>
  249. <a href="/david/cache/2024/821fa933883f080d23c0a6d9d0b3721a/" hreflang="fr"
  250. data-tippy data-description="Cette page présente le logiciel Make, un outil simple et fiable pour automatiser des tâches."
  251. data-source="https://www.arthurperret.fr/cours/make.html"
  252. data-date="2024-03-28"
  253. data-favicon="https://www.arthurperret.fr/cours/favicon-32x32.png"
  254. data-domain="arthurperret.fr"
  255. ><svg xmlns="http://www.w3.org/2000/svg"
  256. width="24" height="24" viewBox="0 0 24 24" fill="none"
  257. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  258. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  259. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  260. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  261. </svg>
  262. <span class="sr-only">[archive]</span></a></em></cite></p>
  263. </blockquote>
  264. <p>Superbe cours par Arthur Perret, j’ai appris plein de choses en le relisant. J’emploie <code>make</code> au quotidien, ne serait-ce que pour construire ce site et pourtant il y a pas mal de complexité/raccourcis vers lesquels je ne suis pas encore&nbsp;allé.</p>
  265. <nav>
  266. <p>
  267. <a href="/david/2024/commun/"
  268. title="Liste de tous les articles 2024 associés à cette étiquette"
  269. rel="tag">#commun</a>
  270. <a href="/david/2024/equipe/"
  271. title="Liste de tous les articles 2024 associés à cette étiquette"
  272. rel="tag">#équipe</a>
  273. <a href="/david/2024/protopie/"
  274. title="Liste de tous les articles 2024 associés à cette étiquette"
  275. rel="tag">#protopie</a>
  276. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  277. </p>
  278. </nav>
  279. <nav>
  280. <p>
  281. <a rel="prev"
  282. href="/david/2024/03/26/"
  283. title="Publication précédente : GPX Viewer">← Précédent</a> •
  284. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  285. • <a rel="next"
  286. href="/david/2024/03/29/"
  287. title="Publication suivante : Jour 1">Suivant →</a>
  288. </p>
  289. </nav>
  290. <form action="/david/recherche/" method="get">
  291. <fieldset>
  292. <legend>Recherche</legend>
  293. <label for="input-search">Termes de votre recherche :</label>
  294. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  295. <input type="submit" value="Chercher">
  296. <p id="indexation-infos">
  297. <small>
  298. Seuls les contenus de ces 8 dernières années sont indexés.
  299. </small>
  300. </p>
  301. </fieldset>
  302. </form>
  303. <aside>
  304. <theme-toggle></theme-toggle>
  305. </aside>
  306. </article>
  307. <hr>
  308. <footer>
  309. <p>
  310. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  311. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  312. <a href="http://larlet.com"
  313. title="Go to my English profile"
  314. data-instant>Pro</a>
  315. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  316. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  317. </p>
  318. <template id="theme-selector">
  319. <form>
  320. <style type="text/css">
  321. fieldset div {
  322. text-align: center;
  323. }
  324. </style>
  325. <fieldset>
  326. <legend>Thème</legend>
  327. <div>
  328. <label>
  329. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  330. Auto
  331. </label>
  332. <label>
  333. <input type="radio" value="dark" name="chosen-color-scheme">
  334. Foncé
  335. </label>
  336. <label>
  337. <input type="radio" value="light" name="chosen-color-scheme">
  338. Clair
  339. </label>
  340. </div>
  341. </fieldset>
  342. </form>
  343. </template>
  344. </footer>
  345. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  346. <script>
  347. class ThemeToggle extends HTMLElement {
  348. constructor() {
  349. super()
  350. const themeSelectorTemplate = document.querySelector('#theme-selector')
  351. const form = themeSelectorTemplate.content.firstElementChild
  352. this.attachShadow({ mode: 'open' })
  353. this.shadowRoot.appendChild(form.cloneNode(true))
  354. }
  355. connectedCallback() {
  356. const form = this.shadowRoot.querySelector('form')
  357. form.addEventListener('change', (e) => {
  358. const chosenColorScheme = e.target.value
  359. localStorage.setItem('theme', chosenColorScheme)
  360. toggleTheme(chosenColorScheme)
  361. })
  362. const selectedTheme = localStorage.getItem('theme')
  363. if (selectedTheme && selectedTheme !== 'undefined') {
  364. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  365. }
  366. }
  367. }
  368. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  369. window.addEventListener('load', () => {
  370. let colorsLayer = undefined
  371. let hasDarkRules = false
  372. for (const styleSheet of Array.from(document.styleSheets)) {
  373. let mediaRules = []
  374. for (const layerRule of styleSheet.cssRules) {
  375. if (!(layerRule instanceof CSSLayerBlockRule)) {
  376. continue
  377. }
  378. if (layerRule.name === 'colors') {
  379. colorsLayer = layerRule
  380. }
  381. for (const cssRule of layerRule.cssRules) {
  382. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  383. continue
  384. }
  385. // WARNING: Safari does not have/supports `conditionText`.
  386. if (cssRule.conditionText) {
  387. if (cssRule.conditionText !== prefersColorSchemeDark) {
  388. continue
  389. }
  390. } else {
  391. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  392. continue
  393. }
  394. }
  395. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  396. }
  397. }
  398. // WARNING: do not try to insert a Rule to a styleSheet you are
  399. // currently iterating on, otherwise the browser will be stuck
  400. // in a infinite loop…
  401. for (const mediaRule of mediaRules) {
  402. // Safari requires the `0` second parameter (even if default).
  403. colorsLayer.insertRule(mediaRule.cssText, 0)
  404. hasDarkRules = true
  405. }
  406. }
  407. if (hasDarkRules) {
  408. if ('customElements' in window && !customElements.get('theme-toggle')) {
  409. customElements.define('theme-toggle', ThemeToggle)
  410. }
  411. }
  412. })
  413. </script>
  414. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  415. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  416. <script>
  417. tippy('[data-tippy]', {
  418. content(reference) {
  419. reference.addEventListener('click', (e) => e.preventDefault())
  420. return `
  421. <h3 lang="fr">
  422. <img src="${reference.dataset.favicon}" loading="lazy">
  423. <a href="${reference.dataset.source}"
  424. >Article sur ${reference.dataset.domain}</a></h3>
  425. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  426. <div class="tippy-links" lang="fr">
  427. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  428. </div>
  429. `
  430. },
  431. allowHTML: true,
  432. interactive: true,
  433. delay: [150, 700],
  434. hideOnClick: false
  435. })
  436. </script>
  437. <script type="module">
  438. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  439. const markObserver = new IntersectionObserver((entries, observer) => {
  440. const computedStyle = getComputedStyle(document.documentElement)
  441. const markBackground = computedStyle.getPropertyValue('--mark-background')
  442. for (const entry of entries) {
  443. if (entry.intersectionRatio === 0) continue
  444. const markElement = entry.target
  445. markElement.style.backgroundColor = 'inherit'
  446. const annotation = annotate(
  447. markElement, {
  448. type: 'highlight',
  449. multiline: true,
  450. color: markBackground,
  451. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  452. animate: false
  453. }
  454. )
  455. annotation.show()
  456. observer.unobserve(markElement)
  457. }
  458. }, {threshold: 1.0})
  459. for (const markElement of document.querySelectorAll('mark')) {
  460. markObserver.observe(markElement)
  461. }
  462. </script>
  463. </body>
  464. </html>