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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498
  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. Tooltipopover
  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="Popover API – This provides a declarative mechanism to create content that always renders in the topmost-layer, so that it overlays other web page content. This can be useful for building features like tooltips and notifications. Support for popover was the #1 author request in the recent State of HTML survey.">
  71. <!-- That good ol' feed, subscribe :). -->
  72. <link rel="alternate"
  73. type="application/atom+xml"
  74. title="Feed"
  75. href="/david/log/">
  76. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  77. <link rel="apple-touch-icon"
  78. sizes="180x180"
  79. href="/static/david/icons2/apple-touch-icon.png">
  80. <link rel="icon"
  81. type="image/png"
  82. sizes="32x32"
  83. href="/static/david/icons2/favicon-32x32.png">
  84. <link rel="icon"
  85. type="image/png"
  86. sizes="16x16"
  87. href="/static/david/icons2/favicon-16x16.png">
  88. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  89. <link rel="mask-icon"
  90. href="/static/david/icons2/safari-pinned-tab.svg"
  91. color="#07486c">
  92. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  93. <meta name="msapplication-TileColor" content="#f7f7f7">
  94. <meta name="msapplication-config"
  95. content="/static/david/icons2/browserconfig.xml">
  96. <meta name="theme-color"
  97. content="#f7f7f7"
  98. media="(prefers-color-scheme: light)">
  99. <meta name="theme-color"
  100. content="#272727"
  101. media="(prefers-color-scheme: dark)">
  102. <!-- Is that even respected? Retrospectively? What a shAItshow…
  103. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  104. <meta name="robots" content="noai, noimageai">
  105. <style type="text/css">
  106. .tippy-content {
  107. min-width: 280px;
  108. padding: .5rem;
  109. font-size: calc(var(--fluid-0) * 0.8);
  110. font-family: var(--labor-font);
  111. letter-spacing: initial;
  112. text-align: left;
  113. }
  114. .tippy-content h3 {
  115. margin-top: 0;
  116. }
  117. .tippy-content h3 img {
  118. max-width: 2rem;
  119. max-height: 2rem;
  120. display: inline-block;
  121. }
  122. .tippy-content .tippy-links {
  123. display: flex;
  124. justify-content: space-around;
  125. }
  126. .tippy-content a {
  127. padding: .4rem;
  128. color: #F06048;
  129. }
  130. </style>
  131. <body data-instant-intensity="viewport-all">
  132. <article>
  133. <header>
  134. <hgroup>
  135. <h1>Tooltipopover</h1>
  136. <p>Le <time datetime="2024-02-04">4 février 2024</time></p>
  137. </hgroup>
  138. </header>
  139. <nav>
  140. <p>
  141. <a rel="prev"
  142. href="/david/2024/02/03/"
  143. title="Publication précédente : Archives">← Précédent</a> •
  144. <a href="/david/" title="Aller à l’accueil" rel="up">Accueil</a>
  145. <a href="/david/recherche/"
  146. title="Aller à la page de recherche"
  147. rel="search" data-no-instant>Recherche</a>
  148. • <a rel="next"
  149. href="/david/2024/02/05/"
  150. title="Publication suivante : Jeu">Suivant →</a>
  151. </p>
  152. </nav>
  153. <blockquote lang="en">
  154. <p><a data-link-domain="MDN" href="https://developer.mozilla.org/en-US/docs/Web/API/Popover_API">Popover API</a> – This provides a declarative mechanism to create content that always renders in the topmost-layer, so that it overlays other web page content. <mark>This can be useful for building features like tooltips</mark> and notifications. Support for popover was the #1&nbsp;author request in the recent State of HTML&nbsp;survey.</p>
  155. <p><cite><em><a data-link-domain="hacks.mozilla.org" href="https://hacks.mozilla.org/2024/02/announcing-interop-2024/" hreflang="en"
  156. title="Consultation de l’article (anglais)">Announcing Interop 2024</a>
  157. <a href="/david/cache/2024/0deb984b2f799d391607afcaa488446d/" hreflang="en"
  158. data-tippy data-description="Following the success of Interop 2023, we are pleased to confirm that the project will continue in 2024 with a new selection of focus areas."
  159. data-source="https://hacks.mozilla.org/2024/02/announcing-interop-2024/"
  160. data-date="2024-02-03"
  161. data-favicon="https://hacks.mozilla.org/wp-content/themes/Hax/favicon.ico"
  162. data-domain="hacks.mozilla.org"
  163. ><svg xmlns="http://www.w3.org/2000/svg"
  164. width="24" height="24" viewBox="0 0 24 24" fill="none"
  165. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  166. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  167. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  168. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  169. </svg>
  170. <span class="sr-only">[archive]</span></a></em></cite></p>
  171. </blockquote>
  172. <p>Ma première intuition pour enrichir les liens de la version archivée était de passer par des éléments natifs (comme toujours). Initialement, j’ai même envisagé un <a data-link-domain="MDN" href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog">élément <code>&lt;dialog&gt;</code></a> qui est déjà mieux supporté mais ça rentrait mal dans le DOM là où je voulais l’insérer. Je me met alors en quête d’un <em><a data-link-domain="github.com" href="https://github.com/oddbird/popover-polyfill">polyfill</a></em> pour la Popover API qui pourrait convenir mais j’ai un peu peur des effets de bord vu que je découvre et qu’il y a quand même <a data-link-domain="MDN" href="https://developer.mozilla.org/en-US/docs/Web/API/Popover_API/Using">pas mal de possibilités</a>. J’en suis même à me <a data-link-domain="open-ui.org" href="https://open-ui.org/components/popover.research.explainer/" hreflang="en"
  173. title="Consultation de l’article (anglais)">lire une bonne page de doc</a>
  174. <a href="/david/cache/2024/bf61b62532f71e39e7b92c76dc36bb0f/" hreflang="en"
  175. data-tippy data-description="A very common UI pattern on the Web, for which there is no native API, is “popover UI”, also sometimes called “popovers”, “pop up UI”, or “popovers”. Popovers are a general class of UI that have three common behaviors"
  176. data-source="https://open-ui.org/components/popover.research.explainer/"
  177. data-date="2024-02-03"
  178. data-favicon="https://open-ui.org/images/favicon-32x32.png"
  179. data-domain="open-ui.org"
  180. ><svg xmlns="http://www.w3.org/2000/svg"
  181. width="24" height="24" viewBox="0 0 24 24" fill="none"
  182. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  183. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  184. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  185. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  186. </svg>
  187. <span class="sr-only">[archive]</span></a> pour essayer de comprendre la distinction entre les&nbsp;deux.</p>
  188. <p>Je finis par abandonner cette piste et je me dis que ça pourrait être un <em>Web Component</em> intéressant. Je m’arrache les cheveux un bon petit moment sur le positionnement et je capitule en me disant qu’il y a déjà des personnes qui ont produit des outils comme <a data-link-domain="floating-ui.com" href="https://floating-ui.com/">Floating UI</a> ou <a data-link-domain="atomiks.github.io" href="https://atomiks.github.io/tippyjs/">Tippy.js</a>. Choisir c’est renoncer… et j’ai fait les deux à la fois en optant pour Tippy qui <a data-link-domain="atomiks.github.io" href="https://atomiks.github.io/tippyjs/v6/accessibility/" hreflang="en"
  189. title="Consultation de l’article (anglais)">prend soin de l’accessibilité</a>
  190. <a href="/david/cache/2024/af0aee71fef1821c89ce368622f9a464/" hreflang="en"
  191. data-tippy data-description="Tooltip and popovers are usually not mouse-only UI elements. If vital functionality or information is contained within them, they should be accessible to keyboard and touch inputs so that users who navigate interfaces without using a mouse are not locked out."
  192. data-source="https://atomiks.github.io/tippyjs/v6/accessibility/"
  193. data-date="2024-02-03"
  194. data-favicon="https://atomiks.github.io/tippyjs/favicon-32x32.png?v=68cd85fe631cbce4dad8be8ef26f93f3"
  195. data-domain="atomiks.github.io"
  196. ><svg xmlns="http://www.w3.org/2000/svg"
  197. width="24" height="24" viewBox="0 0 24 24" fill="none"
  198. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  199. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  200. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  201. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  202. </svg>
  203. <span class="sr-only">[archive]</span></a>. J’ai trop besoin d’avoir <em>l’expérience de l’interface</em> pour pouvoir affiner par la suite et faire les choses à ma&nbsp;sauce.</p>
  204. <p>N’hésitez pas à jouer avec et à me faire des retours, c’est amené à&nbsp;évoluer.</p>
  205. <a href="#hr-65" title="Lien vers cette section de la page"><hr id="hr-65" /></a>
  206. <blockquote lang="en">
  207. <p>My recipe for fiction set ten years in the future used to be 90% already-here, 9% not-here-yet but predictable, and 1% who-ordered-that. But <mark>unfortunately the ratios have changed.</mark> I think we're now down to maybe 80% already-here —climate change takes a huge toll on infrastructure— then 15% not-here-yet but predictable, and a whopping 5% of utterly unpredictable deep&nbsp;craziness.</p>
  208. <p><cite><em><a data-link-domain="antipope.org" href="https://www.antipope.org/charlie/blog-static/2018/01/dude-you-broke-the-future.html" hreflang="en"
  209. title="Consultation de l’article (anglais)">Dude, you broke the future!</a>
  210. <a href="/david/cache/2024/71b177818657a209fc76f23c08c21d25/" hreflang="en"
  211. data-tippy data-description="In this talk, author Charles Stross will give a rambling, discursive, and angry tour of what went wrong with the 21st century, why we didn't see it coming, where we can expect it to go next, and a few suggestions for what to do about it if we don't like it."
  212. data-source="https://www.antipope.org/charlie/blog-static/2018/01/dude-you-broke-the-future.html"
  213. data-date="2024-02-03"
  214. data-favicon="https://www.antipope.org/favicon.ico"
  215. data-domain="antipope.org"
  216. ><svg xmlns="http://www.w3.org/2000/svg"
  217. width="24" height="24" viewBox="0 0 24 24" fill="none"
  218. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  219. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  220. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  221. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  222. </svg>
  223. <span class="sr-only">[archive]</span></a></em></cite></p>
  224. </blockquote>
  225. <p>Cela me rappelle une discussion récente au sujet du manque de pertinence de la météo et de la difficulté à faire de la prédiction sur des données rendues obsolètes par le changement climatique. Les modèles ne sont pas (encore&#8239;?) adaptés à un tel&nbsp;chaos.</p>
  226. <p>Manifestement, les écrivains non&nbsp;plus.</p>
  227. <blockquote lang="en">
  228. <p>Someone out there is working on it: a geolocation-aware social media scraping deep learning application, that uses a gamified, competitive interface to reward its “players” for joining in acts of mob violence against whoever the app developer hates. Probably it has an inoccuous-seeming but highly addictive training mode to get the users accustomed to working in teams and obeying the app's instructions—think Ingress or Pokemon Go. Then, at some pre-planned zero hour, <mark>it switches mode and starts rewarding players for violence</mark>—players who have been primed to think of their targets as vermin, by a steady drip-feed of micro-targeted dehumanizing propaganda delivered over a period of&nbsp;months.</p>
  229. <p><cite><em>Ibid.</em></cite></p>
  230. </blockquote>
  231. <p>Ah si en&nbsp;fait&nbsp;😬.</p>
  232. <a href="#hr-66" title="Lien vers cette section de la page"><hr id="hr-66" /></a>
  233. <blockquote lang="en">
  234. <p>If we want a system that is consistent with the flourishing of life on earth, we will need a system that mimics nature. Our current economic model doesn’t - for many reasons - and needs to change. Looking at nature, including our own human nature in our private lives, gives us many ideas for what this new, harmonious system could look&nbsp;like.</p>
  235. <p><cite><em><a data-link-domain="erinremblance.substack.com" href="https://erinremblance.substack.com/p/we-are-all-socialists-in-our-private" hreflang="en"
  236. title="Consultation de l’article (anglais)">“We Are All Socialists in Our Private Lives”</a>
  237. <a href="/david/cache/2024/f5b5c3dff862cc55318684cf434b8d74/" hreflang="en"
  238. data-tippy data-description="David Graeber gets to the heart of human (and more than human) nature."
  239. data-source="https://erinremblance.substack.com/p/we-are-all-socialists-in-our-private"
  240. data-date="2024-02-03"
  241. data-favicon="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79e3e832-517f-4ca3-989b-41eb1c8249d7%2Ffavicon-16x16.png"
  242. data-domain="erinremblance.substack.com"
  243. ><svg xmlns="http://www.w3.org/2000/svg"
  244. width="24" height="24" viewBox="0 0 24 24" fill="none"
  245. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  246. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  247. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  248. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  249. </svg>
  250. <span class="sr-only">[archive]</span></a></em></cite></p>
  251. </blockquote>
  252. <p>Il n’y a que les classes moyennes qui peuvent être socialistes. C’était tout l’enjeu de leur destruction pour n’avoir plus que des personnes qui aient peur de perdre le <em>trop peu</em> ou le <em>vraiment beaucoup</em> qu’elles ont. Et la peur rend la manipulation tellement plus&nbsp;facile…</p>
  253. <blockquote lang="en">
  254. <p>If a monkey hoarded more bananas than it could eat, while most of the other monkeys starved, scientists would study that monkey to figure out what the heck was wrong with it. When humans do it, we put them on the cover of&nbsp;Forbes.</p>
  255. <p><cite><em>Ibid.</em></cite></p>
  256. </blockquote>
  257. <p>🙈</p>
  258. <nav>
  259. <p>
  260. <a href="/david/2024/apprentissage/"
  261. title="Liste de tous les articles 2024 associés à cette étiquette"
  262. rel="tag">#apprentissage</a>
  263. <a href="/david/2024/technique/"
  264. title="Liste de tous les articles 2024 associés à cette étiquette"
  265. rel="tag">#technique</a>
  266. <a href="/david/2024/web/"
  267. title="Liste de tous les articles 2024 associés à cette étiquette"
  268. rel="tag">#web</a>
  269. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  270. </p>
  271. </nav>
  272. <nav>
  273. <p>
  274. <a rel="prev"
  275. href="/david/2024/02/03/"
  276. title="Publication précédente : Archives">← Précédent</a> •
  277. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  278. • <a rel="next"
  279. href="/david/2024/02/05/"
  280. title="Publication suivante : Jeu">Suivant →</a>
  281. </p>
  282. </nav>
  283. <form action="/david/recherche/" method="get">
  284. <fieldset>
  285. <legend>Recherche</legend>
  286. <label for="input-search">Termes de votre recherche :</label>
  287. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  288. <input type="submit" value="Chercher">
  289. <p id="indexation-infos">
  290. <small>
  291. Seuls les contenus de ces 8 dernières années sont indexés.
  292. </small>
  293. </p>
  294. </fieldset>
  295. </form>
  296. <aside>
  297. <theme-toggle></theme-toggle>
  298. </aside>
  299. </article>
  300. <hr>
  301. <footer>
  302. <p>
  303. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  304. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  305. <a href="http://larlet.com"
  306. title="Go to my English profile"
  307. data-instant>Pro</a>
  308. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  309. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  310. </p>
  311. <template id="theme-selector">
  312. <form>
  313. <style type="text/css">
  314. fieldset div {
  315. text-align: center;
  316. }
  317. </style>
  318. <fieldset>
  319. <legend>Thème</legend>
  320. <div>
  321. <label>
  322. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  323. Auto
  324. </label>
  325. <label>
  326. <input type="radio" value="dark" name="chosen-color-scheme">
  327. Foncé
  328. </label>
  329. <label>
  330. <input type="radio" value="light" name="chosen-color-scheme">
  331. Clair
  332. </label>
  333. </div>
  334. </fieldset>
  335. </form>
  336. </template>
  337. </footer>
  338. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  339. <script>
  340. class ThemeToggle extends HTMLElement {
  341. constructor() {
  342. super()
  343. const themeSelectorTemplate = document.querySelector('#theme-selector')
  344. const form = themeSelectorTemplate.content.firstElementChild
  345. this.attachShadow({ mode: 'open' })
  346. this.shadowRoot.appendChild(form.cloneNode(true))
  347. }
  348. connectedCallback() {
  349. const form = this.shadowRoot.querySelector('form')
  350. form.addEventListener('change', (e) => {
  351. const chosenColorScheme = e.target.value
  352. localStorage.setItem('theme', chosenColorScheme)
  353. toggleTheme(chosenColorScheme)
  354. })
  355. const selectedTheme = localStorage.getItem('theme')
  356. if (selectedTheme && selectedTheme !== 'undefined') {
  357. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  358. }
  359. }
  360. }
  361. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  362. window.addEventListener('load', () => {
  363. let colorsLayer = undefined
  364. let hasDarkRules = false
  365. for (const styleSheet of Array.from(document.styleSheets)) {
  366. let mediaRules = []
  367. for (const layerRule of styleSheet.cssRules) {
  368. if (!(layerRule instanceof CSSLayerBlockRule)) {
  369. continue
  370. }
  371. if (layerRule.name === 'colors') {
  372. colorsLayer = layerRule
  373. }
  374. for (const cssRule of layerRule.cssRules) {
  375. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  376. continue
  377. }
  378. // WARNING: Safari does not have/supports `conditionText`.
  379. if (cssRule.conditionText) {
  380. if (cssRule.conditionText !== prefersColorSchemeDark) {
  381. continue
  382. }
  383. } else {
  384. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  385. continue
  386. }
  387. }
  388. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  389. }
  390. }
  391. // WARNING: do not try to insert a Rule to a styleSheet you are
  392. // currently iterating on, otherwise the browser will be stuck
  393. // in a infinite loop…
  394. for (const mediaRule of mediaRules) {
  395. // Safari requires the `0` second parameter (even if default).
  396. colorsLayer.insertRule(mediaRule.cssText, 0)
  397. hasDarkRules = true
  398. }
  399. }
  400. if (hasDarkRules) {
  401. if ('customElements' in window && !customElements.get('theme-toggle')) {
  402. customElements.define('theme-toggle', ThemeToggle)
  403. }
  404. }
  405. })
  406. </script>
  407. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  408. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  409. <script>
  410. tippy('[data-tippy]', {
  411. content(reference) {
  412. reference.addEventListener('click', (e) => e.preventDefault())
  413. return `
  414. <h3 lang="fr">
  415. <img src="${reference.dataset.favicon}" loading="lazy">
  416. <a href="${reference.dataset.source}"
  417. >Article sur ${reference.dataset.domain}</a></h3>
  418. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  419. <div class="tippy-links" lang="fr">
  420. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  421. </div>
  422. `
  423. },
  424. allowHTML: true,
  425. interactive: true,
  426. delay: [150, 700],
  427. hideOnClick: false
  428. })
  429. </script>
  430. <script type="module">
  431. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  432. const markObserver = new IntersectionObserver((entries, observer) => {
  433. const computedStyle = getComputedStyle(document.documentElement)
  434. const markBackground = computedStyle.getPropertyValue('--mark-background')
  435. for (const entry of entries) {
  436. if (entry.intersectionRatio === 0) continue
  437. const markElement = entry.target
  438. markElement.style.backgroundColor = 'inherit'
  439. const annotation = annotate(
  440. markElement, {
  441. type: 'highlight',
  442. multiline: true,
  443. color: markBackground,
  444. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  445. animate: false
  446. }
  447. )
  448. annotation.show()
  449. observer.unobserve(markElement)
  450. }
  451. }, {threshold: 1.0})
  452. for (const markElement of document.querySelectorAll('mark')) {
  453. markObserver.observe(markElement)
  454. }
  455. </script>
  456. </body>
  457. </html>