Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

index.html 26KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  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. Étiquette #documentation
  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="Publications relatives au tag #documentation">
  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. details[open] summary {
  107. display: none;
  108. }
  109. </style>
  110. <body data-instant-intensity="viewport-all">
  111. <article>
  112. <header>
  113. <hgroup>
  114. <h1>#documentation</h1>
  115. <p>Publications relatives à cette étiquette</p>
  116. </hgroup>
  117. </header>
  118. <nav>
  119. <p>
  120. <a href="/david/" title="Aller à l’accueil">
  121. Accueil</a>
  122. <a rel="tags"
  123. href="/david/2024/#tags"
  124. title="Liste de toutes les étiquettes">
  125. Étiquettes</a>
  126. <a href="/david/recherche/" title="Aller à la page de recherche" rel="search" data-no-instant>Recherche</a>
  127. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  128. </p>
  129. </nav>
  130. <h2>
  131. <a href="/david/2024/02/28/" title="Lien permanent vers cet article">Dérèglement</a> <time datetime="2024-02-28">28 février 2024</time>
  132. </h2>
  133. <p>J’avais déjà remarqué leur départ très tardif en décembre. Hier soir, j’ai entendu mes premières bernaches. Demain matin, elles risquent d’avoir un petit peu&nbsp;frais…</p>
  134. <figure>
  135. <a href="/static/david/2024/2024-02-28-courbe-temperature.jpg"
  136. title="Cliquer pour une version haute résolution">
  137. <img
  138. src="/static/david/2024/2024-02-28-courbe-temperature.jpg"
  139. width="960" height="2079"
  140. srcset="/static/david/2024/2024-02-28-courbe-temperature.jpg 960w, /static/david/2024/2024-02-28-courbe-temperature_660x440.jpg 660w, /static/david/2024/2024-02-28-courbe-temperature_990x660.jpg 990w, /static/david/2024/2024-02-28-courbe-temperature_1320x880.jpg 1320w"
  141. sizes="min(100vw, calc(100vh * 960 / 2079))"
  142. loading="lazy"
  143. decoding="async"
  144. alt="Capture d’écran de la météo, les températures vont de 14°C à -13°C en moins de 12&nbsp;heures.">
  145. </a>
  146. <figcaption>#MeanwhileInCanada</figcaption>
  147. </figure>
  148. <a href="#hr-92" title="Lien vers cette section de la page"><hr id="hr-92" /></a>
  149. <p>Le même jour, j’intègre les <a data-link-domain="mistune.lepture.com" href="https://mistune.lepture.com/en/latest/directives.html#admonitions">admonitions</a> à un de nos outils interne et j’apprends qu’il est possible d’intégrer ce type de rendu pour le <a data-link-domain="github.com" href="https://github.com/orgs/community/discussions/16925"><em>markdown</em> servi par Microsoft Github</a> en lisant le <a data-link-domain="github.com" href="https://github.com/jgarber623/aria-collapsible">README de aria-collapsible</a>.</p>
  150. <p>Au passage, j’apprends beaucoup en lisant le code de <em>Web Components</em> en ce moment. Il y a une effervescence dans le domaine parmi des personnes qui ont un bon niveau de JS ainsi qu’une sensibilité à l’accessibilité de leurs productions. Ici par exemple, je découvre comment faire des composants relativement&nbsp;défensifs.</p>
  151. <a href="#hr-93" title="Lien vers cette section de la page"><hr id="hr-93" /></a>
  152. <blockquote lang="en">
  153. <p>Anyway, if you want to know some basic information about Passkeys I know a site you can check&nbsp;out.</p>
  154. <p><cite><em><a data-link-domain="chriscoyier.net" href="https://chriscoyier.net/2024/02/28/where-im-at-on-the-whole-css-tricks-thing/" hreflang="en"
  155. title="Consultation de l’article (anglais)">Where I’m at on the whole CSS-Tricks thing</a>
  156. <a href="/david/cache/2024/2cbc47f0ebded9d54fe6163fa4ea0667/" hreflang="en"
  157. data-tippy data-description="It was March 2022 when I sold CSS-Tricks to DigitalOcean. So it’s been just about 2 years now."
  158. data-source="https://chriscoyier.net/2024/02/28/where-im-at-on-the-whole-css-tricks-thing/"
  159. data-date="2024-02-28"
  160. data-favicon="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 width=%22256%22 height=%22256%22 viewBox=%220 0 100 100%22><rect width=%22100%22 height=%22100%22 rx=%2220%22 fill=%22%23f8d773%22></rect><text x=%2250%%22 y=%2250%%22 dominant-baseline=%22central%22 text-anchor=%22middle%22 font-size=%2290%22>👨‍💻</text></svg>"
  161. data-domain="chriscoyier.net"
  162. ><svg xmlns="http://www.w3.org/2000/svg"
  163. width="24" height="24" viewBox="0 0 24 24" fill="none"
  164. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  165. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  166. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  167. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  168. </svg>
  169. <span class="sr-only">[archive]</span></a></em></cite></p>
  170. </blockquote>
  171. <p>Beaucoup d’honnêteté et… une belle ressource de perdue, ou en passe de l’être. <em>Tricky.</em></p>
  172. <a href="#hr-94" title="Lien vers cette section de la page"><hr id="hr-94" /></a>
  173. <blockquote lang="en">
  174. <p>Using <code>color-mix()</code>, we can adjust the tint/shade based on the background color, meaning <mark>we don’t need to manually select lighter/darker colors</mark> for those states. And because we’re using OKLCH, the variations will be perceptually uniform, <a data-link-domain="lea.verou.me" href="https://lea.verou.me/blog/2020/04/lch-colors-in-css-what-why-and-how/#3.-lch-lightness-actually-means-something">unlike HSL</a>. This means that tints and shades will look consistent for any color we&nbsp;choose!</p>
  175. <p><cite><em><a data-link-domain="abeautifulsite.net" href="https://www.abeautifulsite.net/posts/better-buttons-with-color-mix-and-custom-properties/" hreflang="en"
  176. title="Consultation de l’article (anglais)">Better Buttons with color-mix() and Custom Properties</a>
  177. <a href="/david/cache/2024/b2ccbe813d97ba39ba64a1b6d14422dd/" hreflang="en"
  178. data-tippy data-description="Let the browser and OKLCH do the hard work of styling states."
  179. data-source="https://www.abeautifulsite.net/posts/better-buttons-with-color-mix-and-custom-properties/"
  180. data-date="2024-02-28"
  181. data-favicon="https://www.abeautifulsite.net/images/logos/leaf.svg"
  182. data-domain="abeautifulsite.net"
  183. ><svg xmlns="http://www.w3.org/2000/svg"
  184. width="24" height="24" viewBox="0 0 24 24" fill="none"
  185. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  186. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  187. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  188. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  189. </svg>
  190. <span class="sr-only">[archive]</span></a></em></cite></p>
  191. </blockquote>
  192. <p>Les personnes qui maîtrisent bien CSS vont avoir de plus en plus de valeur. À juste&nbsp;titre.</p>
  193. <nav>
  194. <p>
  195. <a href="/david/2024/documentation/"
  196. title="Liste de tous les articles 2024 associés à cette étiquette"
  197. rel="tag">#documentation</a>
  198. <a href="/david/2024/partage/"
  199. title="Liste de tous les articles 2024 associés à cette étiquette"
  200. rel="tag">#partage</a>
  201. <a href="/david/2024/solastalgia/"
  202. title="Liste de tous les articles 2024 associés à cette étiquette"
  203. rel="tag">#solastalgia</a>
  204. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  205. </p>
  206. </nav>
  207. <h2>
  208. <a href="/david/2024/01/31/" title="Lien permanent vers cet article">Mécénat</a> <time datetime="2024-01-31">31 janvier 2024</time>
  209. </h2>
  210. <p>Je termine mon mécénat de compétence avec uMap sur ces 4&nbsp;derniers mois (25&nbsp;jours de travail). Je suis très content d’avoir pu faire cette expérience avec / grâce à Scopyleft et&nbsp;OSM-FR.</p>
  211. <p>Voici les notes que j’avais prises avant d’établir une Convention de mécénat avec <a data-link-domain="openstreetmap.fr" href="https://www.openstreetmap.fr/association/">OpenStreetMap France</a>, j’ai pris le soin de documenter la démarche car ça pourrait donner lieu à d’autres dons en nature de la part de Scopyleft (et puis ça pourrait peut-être vous inspirer&nbsp;😇).</p>
  212. <p><em>Note&nbsp;: vous pouvez réutiliser ces sources d’informations mais elles n’ont pas été validées par une personnes qui serait compétente dans le domaine. #IAmNotALawyer</em></p>
  213. <blockquote>
  214. <p>Une des possibilités offertes à un mécène entreprise consiste à apporter non pas des financements en numéraire mais des moyens (produits ou services) à la cause qu’elle entend soutenir. Il s’agit ici, d’un «&nbsp;mécénat en nature ou de compétence&nbsp;». Les critères d’éligibilité à cette forme de mécénat sont exactement les mêmes que ceux prévus pour une contribution en&nbsp;numéraire.</p>
  215. <p><cite><em><a data-link-domain="culture.gouv.fr" href="https://www.culture.gouv.fr/Thematiques/Mecenat/Entreprises/Le-mecenat-en-nature-ou-en-competence">Source</a></em></cite></p>
  216. </blockquote>
  217. <blockquote>
  218. <p>Le prêt de main d’œuvre&nbsp;: l’entreprise met à disposition d’un organisme éligible au mécénat un ou plusieurs salariés. C’est l’organisme qui pilote la mission et qui peut faire figure d’autorité fonctionnelle dans ce cadre. Le temps et la fréquence du mécénat de compétences peuvent considérablement varier en fonction des besoins&nbsp;: il peut aussi bien s’agir d’une mission courte, même d’une seule demi-journée, que d’une mission plus longue voir d’un plein temps dans la limite de&nbsp;3&nbsp;ans.</p>
  219. <p><cite><em><a data-link-domain="cci.fr" href="https://www.cci.fr/actualites/le-mecenat-de-competences-comment-le-mettre-en-place-et-mobiliser-les-equipes">Source</a></em></cite></p>
  220. </blockquote>
  221. <p>Lorsque les dons sont effectués en nature, il est nécessaire de procéder à leur&nbsp;valorisation&nbsp;:</p>
  222. <ul>
  223. <li>pour le calcul de la réduction d’impôt que déclare&nbsp;l’entreprise&#8239;;</li>
  224. <li>pour la réintégration extra-comptable de la valeur du don par&nbsp;l’entreprise&#8239;;</li>
  225. <li>pour l’établissement du reçu fiscal par l’organisme bénéficiaire du&nbsp;don&#8239;;</li>
  226. <li>pour la détermination des éventuels contreparties remises à l’entreprise par l’organisme bénéficiaire du&nbsp;don.</li>
  227. </ul>
  228. <h2 id="comment-valoriser-un-don-au-titre-dun-mecenat-de-competence">Comment valoriser un don au titre d’un mécénat de compétence&#8239;? <a href="#comment-valoriser-un-don-au-titre-dun-mecenat-de-competence" title="Ancre vers cette partie">#</a></h2>
  229. <blockquote>
  230. <p>Pour chaque salarié mis à disposition, ce don est évalué à son coût de revient, à savoir la somme de sa rémunération et des charges sociales y afférentes dans la limite de trois fois le montant du plafond mentionné à l’article L. 241-3&nbsp;du code de la sécurité sociale (CSS), soit 10&#8239;284&#8239;€ par mois en&nbsp;2022.</p>
  231. <p><cite><em><a data-link-domain="culture.gouv.fr" href="https://www.culture.gouv.fr/Thematiques/Mecenat/Entreprises/Le-mecenat-en-nature-ou-en-competence">Source</a></em></cite></p>
  232. </blockquote>
  233. <p>Ce n’est donc <strong>pas un TJM</strong> mais un <em>coût de revient</em>.</p>
  234. <blockquote>
  235. <p>A la suite de l’adoption de la <a data-link-domain="legifrance.gouv.fr" href="https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000043964778">loi du 24&nbsp;août 2021&nbsp;confortant le respect des principes de la République</a>, l’administration fiscale a rappelé que <mark>la valorisation du don relève de la seule responsabilité de l’entreprise mécène</mark> qu’il s’agisse d’un don sous forme de biens (dons alimentaires notamment), de services ou d’une mise à disposition de personnel. Un <a data-link-domain="culture.gouv.fr" href="https://www.culture.gouv.fr/Media/Medias-creation-rapide/2041-mec-sd_4032.pdf">nouveau modèle de reçu fiscal</a> a été publié le 10&nbsp;juin&nbsp;2022.</p>
  236. </blockquote>
  237. <h2 id="avantages-fiscaux">Avantages fiscaux <a href="#avantages-fiscaux" title="Ancre vers cette partie">#</a></h2>
  238. <blockquote>
  239. <p>Le mécénat de compétences ouvre droit à un avantage fiscal. Concrètement, comme pour toute action de mécénat, le «&nbsp;don&nbsp;» de compétences de l’entreprise ouvrira droit à une réduction d’impôts de 60% du montant du salaire chargé du salarié mis à disposition. Cet avantage est accessible à tous les types d’entreprises, sans montant minimum de&nbsp;don.</p>
  240. <p><cite><em><a data-link-domain="economie.gouv.fr" href="https://www.economie.gouv.fr/files/Guide-pratique-mecenat-competences-novembre2021.pdf">Source</a></em></cite></p>
  241. </blockquote>
  242. <h2 id="modele">Modèle <a href="#modele" title="Ancre vers cette partie">#</a></h2><p>Un modèle de <a data-link-domain="culture.gouv.fr" href="https://www.culture.gouv.fr/Media/Medias-creation-rapide/Modele-de-convention-de-mecenat-d-entreprise.docx">convention de mécénat</a>, <a data-link-domain="associations.gouv.fr" href="https://www.associations.gouv.fr/IMG/pdf/asso_mecenat_2021_v1b.pdf">un autre</a> et <a data-link-domain="occitanie.developpement-durable.gouv.fr" href="https://www.occitanie.developpement-durable.gouv.fr/IMG/pdf/ex_convention_mecenat_competences_cle065a53.pdf">encore un autre</a>.</p>
  243. <p>En synthèse, il&nbsp;faut&nbsp;:</p>
  244. <h3>Les&nbsp;coordonnées</h3>
  245. <p>Entre&nbsp;:</p>
  246. <p>L’entreprise …, statut, dont le siège social est au …,<br />
  247. Représentée par …, fonction,<br />
  248. Ci-après dénommée «&nbsp;le&nbsp;mécène&nbsp;»,</p>
  249. <p>Et</p>
  250. <p>L’association …, sise au …,<br />
  251. Représentée par son Président (&#8239;?), …<br />
  252. Ci-après dénommée&nbsp;«&nbsp;l’association&nbsp;»,</p>
  253. <p>Vu la loi n°2003-79&nbsp;du 1<sup>er</sup> août 2003&nbsp;relative au mécénat, aux associations et aux fondations et notamment les dispositions codifiées à l’article 238&nbsp;bis du code général des&nbsp;impôts.</p>
  254. <h3>(optionnel) Préambule&nbsp;(contexte)</h3>
  255. <ul>
  256. <li>objet du mécénat de l’entreprise, de la&nbsp;fondation…</li>
  257. <li>objet de l’association&nbsp;: présentation de sa mission/vocation générale, et laïus sur le
  258. projet qu’ils portent en commun avec l’entreprise le cas&nbsp;échéant</li>
  259. <li>rencontre de ces deux&nbsp;objets&#8239;?</li>
  260. </ul>
  261. <h3>Ce qui est&nbsp;convenu</h3>
  262. <p>Il est convenu et décidé ce qui&nbsp;suit&nbsp;:</p>
  263. <ul>
  264. <li>La présente convention a pour objet de définir les conditions du soutien à l’association pour le projet suivant&nbsp;: (descriptif de l’action ou de la&nbsp;manifestation)</li>
  265. <li>L’entreprise mécène s’engage à mettre à disposition le personnel suivant&nbsp;: représentant une valeur de … € sur la période de&nbsp;…</li>
  266. </ul>
  267. <blockquote>
  268. <p>Pour valoriser ce mécénat de compétences, l’entreprise s’engage à comptabiliser et à valoriser le temps passé sur la mission sus nommée, soit le nombre d’heures passées x salaire horaire chargé (son commissaire aux comptes devra valider ce montant de salaire&nbsp;chargé).</p>
  269. <p>L’association pourra ainsi remettre à l’entreprise un reçu fiscal précisant le nombre d’heures et le coût équivalent donné à&nbsp;l’association.</p>
  270. <p>Conformément à l’article 238bis du code général des impôts, ce don en temps donnera droit à une réduction d’impôt égale à 60&#8239;% du montant des sommes versées dans la limite de 0,5% du C.A. HT.</p>
  271. </blockquote>
  272. <h3>Conditions</h3>
  273. <ul>
  274. <li>(optionnel / à adapter) L’association s’engage à faire figurer le nom de l’entreprise donatrice sur les supports d’information de l’action ou de la&nbsp;manifestation.</li>
  275. <li>La présente convention est établie en vertu des dispositions de l’article 238&nbsp;bis du&nbsp;CGI</li>
  276. <li>La présente convention prendra effet à sa date de signature et prendra fin le&nbsp;….</li>
  277. </ul>
  278. <p>Dans le cas où l’une des parties ne respecterait pas ses obligations contractuelles, cette convention serait résiliée de plein droit. En cas de litige, les parties conviennent d’une conciliation à&nbsp;l’amiable.</p>
  279. <h3>Signatures</h3>
  280. <p>Date, lieu et signatures&nbsp;:<br />
  281. A … le …<br />
  282. Représentant de l’entreprise / Représentant de&nbsp;l’association</p>
  283. <nav>
  284. <p>
  285. <a href="/david/2024/commun/"
  286. title="Liste de tous les articles 2024 associés à cette étiquette"
  287. rel="tag">#commun</a>
  288. <a href="/david/2024/documentation/"
  289. title="Liste de tous les articles 2024 associés à cette étiquette"
  290. rel="tag">#documentation</a>
  291. <a href="/david/2024/partage/"
  292. title="Liste de tous les articles 2024 associés à cette étiquette"
  293. rel="tag">#partage</a>
  294. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  295. </p>
  296. </nav>
  297. <form action="/david/recherche/" method="get">
  298. <fieldset>
  299. <legend>Recherche</legend>
  300. <label for="input-search">Termes de votre recherche :</label>
  301. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  302. <input type="submit" value="Chercher">
  303. <p id="indexation-infos">
  304. <small>
  305. Seuls les contenus de ces 8 dernières années sont indexés.
  306. </small>
  307. </p>
  308. </fieldset>
  309. </form>
  310. <aside>
  311. <theme-toggle></theme-toggle>
  312. </aside>
  313. </article>
  314. <hr>
  315. <footer>
  316. <p>
  317. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  318. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  319. <a href="http://larlet.com"
  320. title="Go to my English profile"
  321. data-instant>Pro</a>
  322. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  323. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  324. </p>
  325. <template id="theme-selector">
  326. <form>
  327. <style type="text/css">
  328. fieldset div {
  329. text-align: center;
  330. }
  331. </style>
  332. <fieldset>
  333. <legend>Thème</legend>
  334. <div>
  335. <label>
  336. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  337. Auto
  338. </label>
  339. <label>
  340. <input type="radio" value="dark" name="chosen-color-scheme">
  341. Foncé
  342. </label>
  343. <label>
  344. <input type="radio" value="light" name="chosen-color-scheme">
  345. Clair
  346. </label>
  347. </div>
  348. </fieldset>
  349. </form>
  350. </template>
  351. </footer>
  352. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  353. <script>
  354. class ThemeToggle extends HTMLElement {
  355. constructor() {
  356. super()
  357. const themeSelectorTemplate = document.querySelector('#theme-selector')
  358. const form = themeSelectorTemplate.content.firstElementChild
  359. this.attachShadow({ mode: 'open' })
  360. this.shadowRoot.appendChild(form.cloneNode(true))
  361. }
  362. connectedCallback() {
  363. const form = this.shadowRoot.querySelector('form')
  364. form.addEventListener('change', (e) => {
  365. const chosenColorScheme = e.target.value
  366. localStorage.setItem('theme', chosenColorScheme)
  367. toggleTheme(chosenColorScheme)
  368. })
  369. const selectedTheme = localStorage.getItem('theme')
  370. if (selectedTheme && selectedTheme !== 'undefined') {
  371. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  372. }
  373. }
  374. }
  375. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  376. window.addEventListener('load', () => {
  377. let colorsLayer = undefined
  378. let hasDarkRules = false
  379. for (const styleSheet of Array.from(document.styleSheets)) {
  380. let mediaRules = []
  381. for (const layerRule of styleSheet.cssRules) {
  382. if (!(layerRule instanceof CSSLayerBlockRule)) {
  383. continue
  384. }
  385. if (layerRule.name === 'colors') {
  386. colorsLayer = layerRule
  387. }
  388. for (const cssRule of layerRule.cssRules) {
  389. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  390. continue
  391. }
  392. // WARNING: Safari does not have/supports `conditionText`.
  393. if (cssRule.conditionText) {
  394. if (cssRule.conditionText !== prefersColorSchemeDark) {
  395. continue
  396. }
  397. } else {
  398. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  399. continue
  400. }
  401. }
  402. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  403. }
  404. }
  405. // WARNING: do not try to insert a Rule to a styleSheet you are
  406. // currently iterating on, otherwise the browser will be stuck
  407. // in a infinite loop…
  408. for (const mediaRule of mediaRules) {
  409. // Safari requires the `0` second parameter (even if default).
  410. colorsLayer.insertRule(mediaRule.cssText, 0)
  411. hasDarkRules = true
  412. }
  413. }
  414. if (hasDarkRules) {
  415. if ('customElements' in window && !customElements.get('theme-toggle')) {
  416. customElements.define('theme-toggle', ThemeToggle)
  417. }
  418. }
  419. })
  420. </script>
  421. </body>
  422. </html>