Compare commits

...

2 Commits

Author SHA1 Message Date
Nico
3d00b4d3cb added rss feeds 2023-05-09 12:26:03 +02:00
Nico
b602b45c05 dep update + veille 2023-05-09 10:23:01 +02:00
46 changed files with 1179 additions and 813 deletions

View File

@ -1,19 +1,21 @@
type DefaultLangCode = "fr" type DefaultLangCode = "fr"
type SupportedLangCode = "en" type SupportedLangCode = "en"
type LangCode = DefaultLangCode | SupportedLangCode type LangCode = DefaultLangCode | SupportedLangCode
type RouteUri = | "/articles/[slug]" | "/articles" | "/agments/[slug]" | "/agments" | "/references" | "/" | "/plan-du-site" type RouteUri = | "/articles/[slug]" | "/articles" | "/agments/[slug]" | "/agments" | "/references" | "/veille" | "/" | "/plan-du-site"
type RouteParams = {"/articles/[slug]": { "slug": string; }; "/articles": undefined; "/agments/[slug]": { "slug": string; }; "/agments": undefined; "/references": undefined; "/": undefined; "/plan-du-site": undefined; } type RouteParams = {"/articles/[slug]": { "slug": string; }; "/articles": undefined; "/agments/[slug]": { "slug": string; }; "/agments": undefined; "/references": undefined; "/veille": undefined; "/": undefined; "/plan-du-site": undefined; }
type TranslationPath = "accueil" | "tagline" | "copyright" | "contact.title" | "contact.email" | "contact.tel" | "contenuVide" | "header.skipLink" | "header.mainNav" | "header.homeLink" | "sitemap" | "prevNext.contenus" | "prevNext.precedent" | "prevNext.suivant" | "article.titre" | "article.tagline" | "article.published" | "meta.publication" | "meta.modification" | "meta.credit" | "fragments.titre" | "fragments.tagline" | "references.titre" | "references.slug" | "references.cta" | "references.tagline" | "erreur.introuvable" | "erreur.autre" | "erreur.lienRetour" | "seo.article.title" | "seo.article.description" | "seo.code.title" | "seo.code.description" | "seo.references.title" | "seo.references.description" | "index.articles.pageName" | "index.articles.subtitle" | "index.fragments.pageName" | "index.fragments.subtitle" | "index.references.pageName" | "index.references.subtitle" | "index.title" | "index.subtitle" | "index.quoi" | "index.comment" | "index.opensource" | "index.writing" | "index.latestProjects" | "index.latestArticles" | "index.allProjects" | "index.allArticles" | "index.latestSnippets" | "index.allSnippets" | "index.toc" | "contact.contenuVide" type TranslationPath = "accueil" | "tagline" | "copyright" | "contact.title" | "contact.email" | "contact.tel" | "contenuVide" | "header.skipLink" | "header.mainNav" | "header.homeLink" | "sitemap" | "prevNext.contenus" | "prevNext.precedent" | "prevNext.suivant" | "article.titre" | "article.tagline" | "article.published" | "meta.publication" | "meta.modification" | "meta.credit" | "fragments.titre" | "fragments.tagline" | "references.titre" | "references.slug" | "references.cta" | "references.tagline" | "veille.titre" | "veille.tagline" | "erreur.introuvable" | "erreur.autre" | "erreur.lienRetour" | "seo.meta.description" | "seo.article.title" | "seo.article.description" | "seo.code.title" | "seo.code.description" | "seo.references.title" | "seo.references.description" | "index.articles.pageName" | "index.articles.subtitle" | "index.fragments.pageName" | "index.fragments.subtitle" | "index.references.pageName" | "index.references.subtitle" | "index.veille.pageName" | "index.veille.subtitle" | "index.title" | "index.subtitle" | "index.quoi" | "index.comment" | "index.opensource" | "index.writing" | "index.latestProjects" | "index.latestArticles" | "index.allProjects" | "index.allArticles" | "index.latestSnippets" | "index.allSnippets" | "index.toc" | "contact.contenuVide"
type TranslationOptions = { "accueil": {} | undefined; "tagline": {} | undefined; "copyright": {} | undefined; "contact.title": {} | undefined; "contact.email": {} | undefined; "contact.tel": {} | undefined; "contenuVide": {} | undefined; "header.skipLink": {} | undefined; "header.mainNav": {} | undefined; "header.homeLink": {} | undefined; "sitemap": {} | undefined; "prevNext.contenus": {} | undefined; "prevNext.precedent": {} | undefined; "prevNext.suivant": {} | undefined; "article.titre": {} | undefined; "article.tagline": {} | undefined; "article.published": { datetime: unknown; options: unknown; }; "meta.publication": {} | undefined; "meta.modification": {} | undefined; "meta.credit": {} | undefined; "fragments.titre": {} | undefined; "fragments.tagline": {} | undefined; "references.titre": {} | undefined; "references.slug": {} | undefined; "references.cta": {} | undefined; "references.tagline": {} | undefined; "erreur.introuvable": {} | undefined; "erreur.autre": {} | undefined; "erreur.lienRetour": {} | undefined; "seo.article.title": {} | undefined; "seo.article.description": {} | undefined; "seo.code.title": {} | undefined; "seo.code.description": {} | undefined; "seo.references.title": {} | undefined; "seo.references.description": {} | undefined; "index.articles.pageName": {} | undefined; "index.articles.subtitle": {} | undefined; "index.fragments.pageName": {} | undefined; "index.fragments.subtitle": {} | undefined; "index.references.pageName": {} | undefined; "index.references.subtitle": {} | undefined; "index.title": {} | undefined; "index.subtitle": {} | undefined; "index.quoi": {} | undefined; "index.comment": {} | undefined; "index.opensource": {} | undefined; "index.writing": {} | undefined; "index.latestProjects": {} | undefined; "index.latestArticles": {} | undefined; "index.allProjects": {} | undefined; "index.allArticles": {} | undefined; "index.latestSnippets": {} | undefined; "index.allSnippets": {} | undefined; "index.toc": {} | undefined; "contact.contenuVide": {} | undefined; } type TranslationOptions = { "accueil": {} | undefined; "tagline": {} | undefined; "copyright": {} | undefined; "contact.title": {} | undefined; "contact.email": {} | undefined; "contact.tel": {} | undefined; "contenuVide": {} | undefined; "header.skipLink": {} | undefined; "header.mainNav": {} | undefined; "header.homeLink": {} | undefined; "sitemap": {} | undefined; "prevNext.contenus": {} | undefined; "prevNext.precedent": {} | undefined; "prevNext.suivant": {} | undefined; "article.titre": {} | undefined; "article.tagline": {} | undefined; "article.published": { datetime: unknown; options: unknown; }; "meta.publication": {} | undefined; "meta.modification": {} | undefined; "meta.credit": {} | undefined; "fragments.titre": {} | undefined; "fragments.tagline": {} | undefined; "references.titre": {} | undefined; "references.slug": {} | undefined; "references.cta": {} | undefined; "references.tagline": {} | undefined; "veille.titre": {} | undefined; "veille.tagline": {} | undefined; "erreur.introuvable": {} | undefined; "erreur.autre": {} | undefined; "erreur.lienRetour": {} | undefined; "seo.meta.description": {} | undefined; "seo.article.title": {} | undefined; "seo.article.description": {} | undefined; "seo.code.title": {} | undefined; "seo.code.description": {} | undefined; "seo.references.title": {} | undefined; "seo.references.description": {} | undefined; "index.articles.pageName": {} | undefined; "index.articles.subtitle": {} | undefined; "index.fragments.pageName": {} | undefined; "index.fragments.subtitle": {} | undefined; "index.references.pageName": {} | undefined; "index.references.subtitle": {} | undefined; "index.veille.pageName": {} | undefined; "index.veille.subtitle": {} | undefined; "index.title": {} | undefined; "index.subtitle": {} | undefined; "index.quoi": {} | undefined; "index.comment": {} | undefined; "index.opensource": {} | undefined; "index.writing": {} | undefined; "index.latestProjects": {} | undefined; "index.latestArticles": {} | undefined; "index.allProjects": {} | undefined; "index.allArticles": {} | undefined; "index.latestSnippets": {} | undefined; "index.allSnippets": {} | undefined; "index.toc": {} | undefined; "contact.contenuVide": {} | undefined; }
declare module "astro-i18n" { declare module "astro-i18n" {
export * from "astro-i18n/" export * from "astro-i18n/"
export function l<Uri extends RouteUri>( export function l<Uri extends RouteUri>(
route: Uri | string & {}, route: Uri | string & {},
...args: keyof RouteParams extends Uri ...args: Uri extends keyof RouteParams
? [params?: Record<string, string>, targetLangCode?: LangCode, routeLangCode?: LangCode] ? undefined extends RouteParams[Uri]
: [params: RouteParams[Uri], targetLangCode?: LangCode, routeLangCode?: LangCode] ? [params?: Record<string, string>, targetLangCode?: LangCode, routeLangCode?: LangCode]
: [params: RouteParams[Uri], targetLangCode?: LangCode, routeLangCode?: LangCode]
: [params?: Record<string, string>, targetLangCode?: LangCode, routeLangCode?: LangCode]
): string ): string
export function t<Path extends TranslationPath>( export function t<Path extends TranslationPath>(

View File

@ -13,17 +13,15 @@
"i18n:sync": "astro-i18n sync" "i18n:sync": "astro-i18n sync"
}, },
"dependencies": { "dependencies": {
"@astrojs/image": "^0.16.6", "@astrojs/image": "^0.16.7",
"@astrojs/mdx": "^0.19.0", "@astrojs/mdx": "^0.19.1",
"@astrojs/sitemap": "^1.2.2", "@astrojs/rss": "^2.4.1",
"astro": "2.3.0", "@astrojs/sitemap": "^1.3.0",
"astro-i18n": "^1.6.9" "astro": "2.4.3",
"astro-i18n": "^1.6.10"
}, },
"devDependencies": { "devDependencies": {
"autoprefixer": "^10.4.13", "autoprefixer": "^10.4.13",
"postcss": "^8.4.20" "postcss": "^8.4.20"
},
"engines": {
"node": "16.19.0"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -15,6 +15,7 @@ import { l, t } from "astro-i18n";
<li> <li>
<a href="tel:+33749464239" title={t("contact.tel")}>+337 49 46 42 39</a> <a href="tel:+33749464239" title={t("contact.tel")}>+337 49 46 42 39</a>
</li> </li>
<li><a href={l("/veille")}>{t("veille.titre")}</a></li>
<li><a href={l("/plan-du-site")}>{t("sitemap")}</a></li> <li><a href={l("/plan-du-site")}>{t("sitemap")}</a></li>
</ul> </ul>
</section> </section>

View File

@ -17,21 +17,38 @@ function rawDate(date) {
--- ---
<div class="meta"> <div class="meta">
<p class="meta__date"> {
{t("meta.publication")}&nbsp;: !!item.createdAt && (
<time datetime={rawDate(item.createdAt)}>{formatDate(item.createdAt)}</time> <p class="meta__date">
</p> {t("meta.publication")}&nbsp;:
<time datetime={rawDate(item.createdAt)}>
{formatDate(item.createdAt)}
</time>
</p>
)
}
{ {
formatDate(item.createdAt) != formatDate(item.updatedAt) && formatDate(item.createdAt) != formatDate(item.updatedAt) &&
!!item.createdAt &&
!!item.updatedAt && ( !!item.updatedAt && (
<p class="meta__date"> <p class="meta__date">
{t("meta.modification")}&nbsp;: {t("meta.modification")}&nbsp;:
<time datetime={rawDate(item.createdAt)}> <time datetime={rawDate(item.updatedAt)}>
{formatDate(item.updatedAt)} {formatDate(item.updatedAt)}
</time> </time>
</p> </p>
) )
} }
{
!item.createdAt && !!item.updatedAt && (
<p class="meta__date">
{t("meta.modification")}&nbsp;:
<time datetime={rawDate(item.updatedAt)}>
{formatDate(item.updatedAt)}
</time>
</p>
)
}
</div> </div>
<style> <style>

View File

@ -5,6 +5,7 @@ lang: en
slug: "2022" slug: "2022"
excerpt: Changes in my services, the website and myself. excerpt: Changes in my services, the website and myself.
tags: ["Freelance"] tags: ["Freelance"]
type: articles
createdAt: "2022-06-08T14:24:06.000Z" createdAt: "2022-06-08T14:24:06.000Z"
--- ---

View File

@ -5,6 +5,7 @@ lang: en
slug: "2023" slug: "2023"
excerpt: New changes. excerpt: New changes.
tags: ["Freelance"] tags: ["Freelance"]
type: articles
createdAt: "2023-02-03T17:41:00.000Z" createdAt: "2023-02-03T17:41:00.000Z"
--- ---

View File

@ -5,6 +5,7 @@ lang: en
slug: "after-effects-expressions" slug: "after-effects-expressions"
excerpt: Expressions in After Effects have always been blurry for me. I know they exist, I know they're powerful, I know it could save a lot of time and clean complex keyframe filled compositions but… They are hard to learn! excerpt: Expressions in After Effects have always been blurry for me. I know they exist, I know they're powerful, I know it could save a lot of time and clean complex keyframe filled compositions but… They are hard to learn!
tags: ["Design"] tags: ["Design"]
type: articles
createdAt: "2019-04-24T09:00:00.000Z" createdAt: "2019-04-24T09:00:00.000Z"
code: true code: true
--- ---

View File

@ -6,6 +6,7 @@ slug: "faq"
draft: true draft: true
excerpt: Why, how et and especially what. excerpt: Why, how et and especially what.
tags: ["Freelance"] tags: ["Freelance"]
type: articles
createdAt: "2022-06-22T15:34:45.000Z" createdAt: "2022-06-22T15:34:45.000Z"
--- ---

View File

@ -6,6 +6,7 @@ slug: "gratuiste"
draft: true draft: true
excerpt: Translation in progress, stay tuned ;) excerpt: Translation in progress, stay tuned ;)
tags: ["Design", "Freelance"] tags: ["Design", "Freelance"]
type: articles
createdAt: "2017-05-27T07:47:36.000Z" createdAt: "2017-05-27T07:47:36.000Z"
--- ---

View File

@ -6,6 +6,7 @@ slug: "sci-hub-unblock"
key: "scihub" key: "scihub"
excerpt: "In March 2019, the Paris Regional Court ruled in favour of the publishers of scientific articles Elsevier and Springer Nature by ordering internet service providers to block access to these two websites. Here is how to access them if they are blocked in your country anyway." excerpt: "In March 2019, the Paris Regional Court ruled in favour of the publishers of scientific articles Elsevier and Springer Nature by ordering internet service providers to block access to these two websites. Here is how to access them if they are blocked in your country anyway."
tags: ["Internet", "Science"] tags: ["Internet", "Science"]
type: articles
createdAt: "2019-03-31T07:47:36.000Z" createdAt: "2019-03-31T07:47:36.000Z"
updatedAt: "2022-12-27T12:08:00.000Z" updatedAt: "2022-12-27T12:08:00.000Z"
--- ---

View File

@ -5,6 +5,7 @@ lang: en
slug: "the-day-I-jamd" slug: "the-day-I-jamd"
excerpt: Ooh, yeah! All right! Were jammin excerpt: Ooh, yeah! All right! Were jammin
tags: ["Dev", "Jamstack"] tags: ["Dev", "Jamstack"]
type: articles
createdAt: "2020-10-08T09:00:00.000Z" createdAt: "2020-10-08T09:00:00.000Z"
updatedAt: "2022-12-27T15:40:06.000Z" updatedAt: "2022-12-27T15:40:06.000Z"
--- ---

View File

@ -5,6 +5,7 @@ lang: en
slug: "video-compression" slug: "video-compression"
excerpt: How to gain precious weight when encoding videos. excerpt: How to gain precious weight when encoding videos.
tags: ["Design"] tags: ["Design"]
type: articles
createdAt: "2021-05-05T09:00:00.000Z" createdAt: "2021-05-05T09:00:00.000Z"
updatedAt: "2022-06-08T14:24:06.000Z" updatedAt: "2022-06-08T14:24:06.000Z"
--- ---

View File

@ -5,6 +5,7 @@ lang: fr
slug: "2022" slug: "2022"
excerpt: Évolution des services, du site et de moi-même. excerpt: Évolution des services, du site et de moi-même.
tags: ["Freelance"] tags: ["Freelance"]
type: articles
createdAt: "2022-06-08T14:24:06.000Z" createdAt: "2022-06-08T14:24:06.000Z"
--- ---

View File

@ -5,6 +5,7 @@ lang: fr
slug: "2023" slug: "2023"
excerpt: Suite des évolutions. excerpt: Suite des évolutions.
tags: ["Freelance"] tags: ["Freelance"]
type: articles
createdAt: "2023-02-03T17:41:00.000Z" createdAt: "2023-02-03T17:41:00.000Z"
--- ---

View File

@ -6,6 +6,7 @@ draft: true
slug: "after-effects-expressions" slug: "after-effects-expressions"
excerpt: En cours de traduction, revenez bientôt ;) excerpt: En cours de traduction, revenez bientôt ;)
tags: ["Design"] tags: ["Design"]
type: articles
createdAt: "2019-04-24T09:00:00.000Z" createdAt: "2019-04-24T09:00:00.000Z"
--- ---

View File

@ -5,6 +5,7 @@ lang: fr
slug: "faq" slug: "faq"
excerpt: Pourquoi, comment et surtout quèsaco. excerpt: Pourquoi, comment et surtout quèsaco.
tags: ["Freelance"] tags: ["Freelance"]
type: articles
createdAt: "2022-06-22T15:34:45.000Z" createdAt: "2022-06-22T15:34:45.000Z"
--- ---

View File

@ -5,6 +5,7 @@ lang: fr
slug: "gratuiste" slug: "gratuiste"
excerpt: "Jai cherché un moyen de mettre mes compétences au service dautrui et je pense avoir trouvé: je vais travailler gratuitement pour des associations." excerpt: "Jai cherché un moyen de mettre mes compétences au service dautrui et je pense avoir trouvé: je vais travailler gratuitement pour des associations."
tags: ["Graphisme", "Freelance"] tags: ["Graphisme", "Freelance"]
type: articles
createdAt: "2017-05-27T07:47:36.000Z" createdAt: "2017-05-27T07:47:36.000Z"
updatedAt: "2022-12-27T15:36:06.000Z" updatedAt: "2022-12-27T15:36:06.000Z"
--- ---

View File

@ -5,6 +5,7 @@ lang: fr
slug: "sci-hub-blocage" slug: "sci-hub-blocage"
excerpt: "Le tribunal de grande instance de Paris a ordonné aux fournisseurs daccès à internet de bloquer laccès à sci-hub. Voici comment contourner les blocages mis en place." excerpt: "Le tribunal de grande instance de Paris a ordonné aux fournisseurs daccès à internet de bloquer laccès à sci-hub. Voici comment contourner les blocages mis en place."
tags: ["Internet", "Science"] tags: ["Internet", "Science"]
type: articles
createdAt: "2019-03-31T07:47:36.000Z" createdAt: "2019-03-31T07:47:36.000Z"
updatedAt: "2022-12-27T12:08:00.000Z" updatedAt: "2022-12-27T12:08:00.000Z"
--- ---

View File

@ -5,6 +5,7 @@ lang: fr
slug: "the-day-I-jamd" slug: "the-day-I-jamd"
excerpt: Ooh, yeah! All right! Were jammin excerpt: Ooh, yeah! All right! Were jammin
tags: ["Dev", "Jamstack"] tags: ["Dev", "Jamstack"]
type: articles
createdAt: "2020-10-08T07:47:36.000Z" createdAt: "2020-10-08T07:47:36.000Z"
updatedAt: "2022-12-27T15:40:06.000Z" updatedAt: "2022-12-27T15:40:06.000Z"
--- ---

View File

@ -6,6 +6,7 @@ draft: true
slug: "video-compression" slug: "video-compression"
excerpt: Pas encore traduit excerpt: Pas encore traduit
tags: ["Design"] tags: ["Design"]
type: articles
createdAt: "2021-05-05T09:00:00.000Z" createdAt: "2021-05-05T09:00:00.000Z"
updatedAt: "2022-06-08T14:24:06.000Z" updatedAt: "2022-06-08T14:24:06.000Z"
--- ---

View File

@ -6,6 +6,7 @@ const articles = defineCollection({
subtitle: z.string(), subtitle: z.string(),
lang: z.enum(["fr", "en"]), lang: z.enum(["fr", "en"]),
tags: z.array(z.string()), // An array of strings tags: z.array(z.string()), // An array of strings
type: z.string(),
// Parse pubDate as a browser-standard `Date` object // Parse pubDate as a browser-standard `Date` object
createdAt: z.string().transform((str) => new Date(str)), createdAt: z.string().transform((str) => new Date(str)),
updatedAt: z updatedAt: z
@ -23,6 +24,7 @@ const fragments = defineCollection({
subtitle: z.string(), subtitle: z.string(),
lang: z.enum(["fr", "en"]), lang: z.enum(["fr", "en"]),
tags: z.array(z.string()), // An array of strings tags: z.array(z.string()), // An array of strings
type: z.string(),
// Parse pubDate as a browser-standard `Date` object // Parse pubDate as a browser-standard `Date` object
createdAt: z.string().transform((str) => new Date(str)), createdAt: z.string().transform((str) => new Date(str)),
updatedAt: z updatedAt: z

View File

@ -6,6 +6,7 @@ slug: "acme-sh-tls-cert"
createdAt: "2022-06-08T14:24:06.000Z" createdAt: "2022-06-08T14:24:06.000Z"
excerpt: Real cert have curves. excerpt: Real cert have curves.
tags: ["security"] tags: ["security"]
type: snippets
--- ---
## Disclaimer ## Disclaimer

View File

@ -6,6 +6,7 @@ slug: "array-vs-array"
createdAt: "2022-06-08T14:24:06.000Z" createdAt: "2022-06-08T14:24:06.000Z"
excerpt: My peak javascript excerpt: My peak javascript
tags: ["nuxt.js"] tags: ["nuxt.js"]
type: snippets
--- ---
## Context ## Context

View File

@ -7,6 +7,7 @@ draft: true
excerpt: Easy to grab and use hover effects. excerpt: Easy to grab and use hover effects.
tags: ["CSS"] tags: ["CSS"]
code: true code: true
type: snippets
createdAt: "2020-10-08T09:00:00.000Z" createdAt: "2020-10-08T09:00:00.000Z"
--- ---

View File

@ -7,6 +7,7 @@ slug: "image-full"
createdAt: "2020-09-15T09:00:00.000Z" createdAt: "2020-09-15T09:00:00.000Z"
updatedAt: "2022-06-08T14:24:06.000Z" updatedAt: "2022-06-08T14:24:06.000Z"
tags: ["CSS"] tags: ["CSS"]
type: snippets
--- ---
[Go back to available snippets](/en/snippets) [Go back to available snippets](/en/snippets)

View File

@ -7,6 +7,7 @@ createdAt: "2022-06-08T14:24:06.000Z"
updatedAt: "2022-09-08T13:43:33.000Z" updatedAt: "2022-09-08T13:43:33.000Z"
excerpt: When the most used gql module doesn't work… excerpt: When the most used gql module doesn't work…
tags: ["nuxt.js"] tags: ["nuxt.js"]
type: snippets
--- ---
## The problem ## The problem

View File

@ -6,6 +6,7 @@ slug: "super-cookies"
createdAt: "2022-06-08T14:24:06.000Z" createdAt: "2022-06-08T14:24:06.000Z"
excerpt: It's a real recipe, not a joke about annoying files. excerpt: It's a real recipe, not a joke about annoying files.
tags: ["food"] tags: ["food"]
type: snippets
--- ---
import AstroImage from "../../../components/AstroImage.astro"; import AstroImage from "../../../components/AstroImage.astro";

View File

@ -5,6 +5,7 @@ lang: en
slug: "toulouse-fun" slug: "toulouse-fun"
excerpt: Gonna have to trust me on this ¯\_(ツ)_/¯ excerpt: Gonna have to trust me on this ¯\_(ツ)_/¯
tags: ["lifestyle"] tags: ["lifestyle"]
type: snippets
createdAt: "2022-06-22T15:34:45.000Z" createdAt: "2022-06-22T15:34:45.000Z"
--- ---

View File

@ -6,6 +6,7 @@ slug: "acme-sh-tls-cert"
createdAt: "2022-06-08T14:24:06.000Z" createdAt: "2022-06-08T14:24:06.000Z"
excerpt: La sécurité avec des courbes. excerpt: La sécurité avec des courbes.
tags: ["sécurité"] tags: ["sécurité"]
type: fragments
--- ---
## Attention ## Attention

View File

@ -7,6 +7,7 @@ slug: "array-vs-array"
createdAt: "2022-06-08T14:24:06.000Z" createdAt: "2022-06-08T14:24:06.000Z"
excerpt: En cours de traduction. excerpt: En cours de traduction.
tags: ["nuxt.js"] tags: ["nuxt.js"]
type: fragments
--- ---
[Voir les fragments disponibles](/fragments) [Voir les fragments disponibles](/fragments)

View File

@ -6,6 +6,7 @@ slug: "buttons"
draft: true draft: true
excerpt: Quelques effets de survol faciles à récupérer et utiliser. excerpt: Quelques effets de survol faciles à récupérer et utiliser.
tags: ["CSS"] tags: ["CSS"]
type: fragments
code: true code: true
createdAt: "2020-10-08T09:00:00.000Z" createdAt: "2020-10-08T09:00:00.000Z"
--- ---

View File

@ -7,6 +7,7 @@ createdAt: "2020-09-15T09:00:00.000Z"
updatedAt: "2022-06-08T14:24:06.000Z" updatedAt: "2022-06-08T14:24:06.000Z"
excerpt: Faire déborder une image de son conteneur sans tout casser. excerpt: Faire déborder une image de son conteneur sans tout casser.
tags: ["CSS"] tags: ["CSS"]
type: fragments
--- ---
import AstroImage from "../../../components/AstroImage.astro"; import AstroImage from "../../../components/AstroImage.astro";

View File

@ -7,6 +7,7 @@ createdAt: "2022-06-08T14:24:06.000Z"
updatedAt: "2022-09-08T13:43:33.000Z" updatedAt: "2022-09-08T13:43:33.000Z"
excerpt: Quand le module gql le plus utilisé ne fonctionne pas… excerpt: Quand le module gql le plus utilisé ne fonctionne pas…
tags: ["nuxt.js"] tags: ["nuxt.js"]
type: fragments
--- ---
## Le problème ## Le problème

View File

@ -6,6 +6,7 @@ slug: "super-cookies"
createdAt: "2022-06-08T14:24:06.000Z" createdAt: "2022-06-08T14:24:06.000Z"
excerpt: C'est vraiment une recette hein, pas une blague sur les fichiers temporaires. excerpt: C'est vraiment une recette hein, pas une blague sur les fichiers temporaires.
tags: ["cuisine"] tags: ["cuisine"]
type: fragments
--- ---
import AstroImage from "../../../components/AstroImage.astro"; import AstroImage from "../../../components/AstroImage.astro";

View File

@ -7,6 +7,7 @@ slug: "toulouse-fun"
createdAt: "2022-06-22T15:34:45.000Z" createdAt: "2022-06-22T15:34:45.000Z"
excerpt: En cours de traduction. excerpt: En cours de traduction.
tags: ["lifestyle"] tags: ["lifestyle"]
type: fragments
--- ---
[Voir les fragments disponibles](/fragments) [Voir les fragments disponibles](/fragments)

View File

@ -0,0 +1,26 @@
---
lang: en
title: 2023
updatedAt: "2023-04-20T17:12:06.000Z"
---
- [3D in CSS](https://garden.bradwoods.io/notes/css/3d) Explanations et examples of 3D in CSS.
- [Fable](https://fable.app) Motion design app.
- [Rive](https://rive.app) Motion design app.
- [Cake Desk](https://cakedesk.app/) Invoicing application.
- [Smooth CSS shadow](https://shadows.brumm.af/) Generator.
- [Smol CSS](https://smolcss.dev/) CSS snippets.
- [Optical adjustment](https://marvelapp.com/blog/optical-adjustment-logic-vs-designers/) Optical vs logical alignment.
- [Datawrapper](https://blog.datawrapper.de/category/datavis-dos-and-donts/) Advice on data visualization.
- [Assistivlabs](https://assistivlabs.com/) Test accessibility with real softwares.
- [`time` input done right](https://adamsilver.io/blog/designing-a-time-input-backed-by-research/) Article.
- [Tabby](https://tabby.sh) An alternative terminal app.
- [Newglyph](https://newglyph.com/) Independant foundry.
- [Headless UI](https://headlessui.com/vue/dialog) LUI librairy in vue and react.
- [Sexy privacy](https://privacy.sexy) Privacy tools for windows and macos.
- [33 JavaScript concepts](https://github.com/leonardomso/33-js-concepts) Articles.
- [Formbricks](https://formbricks.com/) Open source alternative to google form/typeform.
- [SVG loader](https://github.com/n3r4zzurr0/svg-spinners) Collection.
- [a11yphant](https://a11yphant.com/) Code challenges to learn accessibility.
- [Modern CSS](https://moderncss.dev/) CSS snippets.
- [Moderne CSS container](https://twitter.com/KevinJPowell/status/1501555193799925761) Tweet from Kevin Powell ❤️

View File

@ -0,0 +1,31 @@
---
lang: fr
title: 2023
updatedAt: "2023-04-20T17:12:06.000Z"
---
- [Laccessibilité nest pas une variable dajustement](https://www.sophie-drouvroy.com/blog/laccessibilite-nest-pas-une-variable-dajustement/) — Sophie Drouvroy, intégratrice front-end, partage son quotidien en tant que personne sourde dans notre société.
> Laccessibilité doit être au cœur du projet et pas une cerise sur le gâteau.
- [3D en CSS (english)](https://garden.bradwoods.io/notes/css/3d) Explications et exemples des propriétés 3D en CSS.
- [Climat&nbsp;: Comment ne pas déprimer&nbsp;?](https://www.lemonde.fr/podcasts/article/2022/06/21/climat-comment-ne-pas-deprimer_6131347_5463015.html) Podcast.
- [Fable (english)](https://fable.app) Application de motion design.
- [Rive (english)](https://rive.app) Application de motion design.
- [Cake Desk](https://cakedesk.app/) Application de facturation.
- [Ombre fluide en CSS](https://shadows.brumm.af/) Générateur.
- [Smol CSS](https://smolcss.dev/) Collection de fragments CSS.
- [Ajustement optique](https://marvelapp.com/blog/optical-adjustment-logic-vs-designers/) (english) Aligner visuellement plutôt que techniquement.
- [Datawrapper](https://blog.datawrapper.de/category/datavis-dos-and-donts/) (english) Conseils pour montrer de la donnée.
- [Assistivlabs](https://assistivlabs.com/) (english) Service de test des technologies d'assistance (browserstack mais pour l'accessibilité).
- [Les caractères fantaisistes et l'accessibilité](https://www.lalutineduweb.fr/detournement-unicode-emojis-accessibilite/) Explications et exemples de l'enfer que sont les caractères Unicode pour les technologies d'assistance.
- [Créer un champ `time` sur le web](https://adamsilver.io/blog/designing-a-time-input-backed-by-research/) (english) Article.
- [La cascade](https://la-cascade.io) Collection d'articles sur le CSS.
- [Tabby](https://tabby.sh) (english) An alternative terminal app.
- [Newglyph](https://newglyph.com/) Fonderie indépendante.
- [<span lang="en">Headless UI</span>](https://headlessui.com/vue/dialog) (english) Librairie de composants vue et react.
- [Vie privée sexy](https://privacy.sexy) (english) Outils de confidentialité pour windows et macos.
- [33 concepts JavaScript](https://github.com/leonardomso/33-js-concepts) (english) Articles.
- [Formbricks](https://formbricks.com/) (english) Alternative open source à google form/typeform.
- [Animations de chargement SVG](https://github.com/n3r4zzurr0/svg-spinners) Collection.
- [a11yphant](https://a11yphant.com/) (english) Challenges de code pour apprendre l'accessibilité.
- [CSS moderne](https://moderncss.dev/) (english) Fragments CSS.
- [Conteneur moderne en CSS](https://twitter.com/KevinJPowell/status/1501555193799925761) (english) Tweet de Kevin Powell ❤️

View File

@ -39,6 +39,10 @@
"cta": "Consulter le site", "cta": "Consulter le site",
"tagline": "Quelques références." "tagline": "Quelques références."
}, },
"veille": {
"titre": "veille",
"tagline": "Des liens, en vrac."
},
"erreur": { "erreur": {
"introuvable": "Page introuvable", "introuvable": "Page introuvable",
"autre": "Oups… désolé pour cette erreur.", "autre": "Oups… désolé pour cette erreur.",

34
src/pages/en/rss.xml.js Normal file
View File

@ -0,0 +1,34 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function get(context) {
const articles = await getCollection("articles", ({ data }) => {
return data.lang === "en" && !data.draft;
});
const fragments = await getCollection("fragments", ({ data }) => {
return data.lang === "en" && !data.draft;
});
const posts = articles.concat(fragments);
return rss({
// `<title>` field in output xml
title: "Nicolas Arduin",
// `<description>` field in output xml
description: "Articles from nardu.in",
// Pull in your project "site" from the endpoint context
// https://docs.astro.build/en/reference/api-reference/#contextsite
site: context.site,
// Array of `<item>`s in output xml
// See "Generating items" section for examples using content collections and glob imports
items: posts.map((post) => ({
title: post.data.title,
pubDate: post.data.createdAt,
description: post.data.subtitle,
lang: post.data.lang,
// Compute RSS link from post `slug`
// This example assumes all posts are rendered as `/blog/[slug]` routes
link: `/en/${post.data.type}/${post.slug}/`,
})),
// (optional) inject custom xml
customData: `<language>en-us</language>`,
});
}

View File

@ -0,0 +1,7 @@
---
import Page from "../../veille/index.astro"
const { props } = Astro
---
<Page {...props} />

View File

@ -66,17 +66,16 @@ const pageTitle = t("sitemap");
<a href={l("/references")}>{t("references.titre")}</a> <a href={l("/references")}>{t("references.titre")}</a>
</h2> </h2>
</li> </li>
<li>
<h2>
<a href={l("/veille")}>{t("veille.titre")}</a>
</h2>
</li>
</ul> </ul>
</section> </section>
</BaseLayout> </BaseLayout>
<style> <style>
/* :link {
text-decoration: underline;
}
:link:hover {
text-decoration: none;
} */
h2 { h2 {
text-transform: capitalize; text-transform: capitalize;
} }

34
src/pages/rss.xml.js Normal file
View File

@ -0,0 +1,34 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
export async function get(context) {
const articles = await getCollection("articles", ({ data }) => {
return data.lang === "fr" && !data.draft;
});
const fragments = await getCollection("fragments", ({ data }) => {
return data.lang === "fr" && !data.draft;
});
const posts = articles.concat(fragments);
return rss({
// `<title>` field in output xml
title: "Nicolas Arduin",
// `<description>` field in output xml
description: "Articles publiés sur nardu.in",
// Pull in your project "site" from the endpoint context
// https://docs.astro.build/en/reference/api-reference/#contextsite
site: context.site,
// Array of `<item>`s in output xml
// See "Generating items" section for examples using content collections and glob imports
items: posts.map((post) => ({
title: post.data.title,
pubDate: post.data.createdAt,
description: post.data.subtitle,
lang: post.data.lang,
// Compute RSS link from post `slug`
// This example assumes all posts are rendered as `/blog/[slug]` routes
link: `/${post.data.type}/${post.slug}/`,
})),
// (optional) inject custom xml
customData: `<language>fr-fr</language>`,
});
}

View File

@ -0,0 +1,4 @@
{
"pageName": "External stuff",
"subtitle": "Links, articles, videos…"
}

View File

@ -0,0 +1,4 @@
{
"pageName": "Veille",
"subtitle": "Des liens, des articles, des vidéos… en vrac."
}

View File

@ -0,0 +1,43 @@
---
import { t, astroI18n } from "astro-i18n";
astroI18n.init(Astro);
const pageTitle = t("index.veille.pageName");
import BaseLayout from "../../layouts/BaseLayout.astro";
import MetaDate from "../../components/MetaDate.astro";
// get all content
const allSections = await Astro.glob("../../data/veille/**/*.md");
// only keep the right locale version
const localizedSections = allSections.filter((section) => {
return section.frontmatter.lang === astroI18n.langCode;
});
---
<BaseLayout pageTitle={pageTitle}>
<section class="region flow">
<h1>{pageTitle}</h1>
<p>{t("index.veille.subtitle")}</p>
</section>
{
localizedSections.map((section) => (
<section class="flow content">
<h2>{section.frontmatter.title}</h2>
<MetaDate item={section.frontmatter} />
<section.Content />
</section>
))
}
</BaseLayout>
<style>
.content :global(ul > li) {
padding-block: var(--space-m);
}
.content :global(ul > li + li) {
margin: 0;
border-top: 1px solid var(--color-brique);
}
</style>