From e72b1f0332bfa2a792f42114406ee28df3c3daa2 Mon Sep 17 00:00:00 2001 From: ache Date: Wed, 4 May 2022 00:28:27 +0200 Subject: Support for meta data --- articles/2FA-discord-sur-pc.md | 11 +++++++++++ articles/bizarreries-du-langage-c.md | 16 +++++++++++++--- articles/duckduckgo-google-en-mieux.md | 16 +++++++++++++--- articles/retour-sur-laoc-2021-semaine-1.md | 20 ++++++++++++++++++-- package.json | 3 +++ src/build/index.mjs | 25 ++++++++++++++++--------- src/build/rss.mjs | 2 ++ src/build/to-html.mjs | 24 ++++++++++++++++++++++++ 8 files changed, 100 insertions(+), 17 deletions(-) diff --git a/articles/2FA-discord-sur-pc.md b/articles/2FA-discord-sur-pc.md index de07ff7..e13b45a 100644 --- a/articles/2FA-discord-sur-pc.md +++ b/articles/2FA-discord-sur-pc.md @@ -1,3 +1,14 @@ +--- + +pubDate = 2019-02-22 05:15:00Z +tags = ['2FA', 'authentification', 'Discord', 'sécurité'] + +[author] +name = "ache" +email = "ache@ache.one" + +--- + 2FA et Discord sur son PC ========================= diff --git a/articles/bizarreries-du-langage-c.md b/articles/bizarreries-du-langage-c.md index 7ad6aae..45dc394 100644 --- a/articles/bizarreries-du-langage-c.md +++ b/articles/bizarreries-du-langage-c.md @@ -1,3 +1,16 @@ +--- + +pubDate = 2018-11-18 +tags = ['C', 'bizarrerie', 'syntaxe', 'obfusquation', 'programmation'] + +[author] +name = "ache" +email = "ache@ache.one" + +--- + + + Les bizarreries du langage C ============================ @@ -744,6 +757,3 @@ Je tiens tout particulièrement à remercier [Taurre](https://zestedesavoir.com/ À noter que vous pouvez (re)découvrir de nombreux codes abusant de la syntaxe du langage C aux [IOCCC](http://ioccc.org/winners.html). 😈 - -
Publié le 18 novembre 2018
- diff --git a/articles/duckduckgo-google-en-mieux.md b/articles/duckduckgo-google-en-mieux.md index 7e37ed9..e798b1a 100644 --- a/articles/duckduckgo-google-en-mieux.md +++ b/articles/duckduckgo-google-en-mieux.md @@ -1,3 +1,16 @@ +--- + +pubDate = 2010-01-01 +tags = ['DuckDuckGo', 'Google', 'recherche', 'moteur de recherche'] + +[author] +name = "ache" +email = "ache@ache.one" + +--- + + + DuckDuckGo, Google en mieux ? =============== @@ -142,6 +155,3 @@ récemment de dépasser le million de requètes par jour. Consulter la page d'accueil de DuckDuckGo pour plus d'info sur l'utilisation du moteur de recherche. - -
Publié en 2010
- diff --git a/articles/retour-sur-laoc-2021-semaine-1.md b/articles/retour-sur-laoc-2021-semaine-1.md index 577d7e0..2697771 100644 --- a/articles/retour-sur-laoc-2021-semaine-1.md +++ b/articles/retour-sur-laoc-2021-semaine-1.md @@ -1,3 +1,17 @@ +--- + + +pubDate = 2021-12-29 +tags = ['DuckDuckGo', 'Google', 'recherche', 'moteur de recherche'] + +[author] +name = "ache" +email = "ache@ache.one" + +--- + + + # Un petit retour sur l'AOC 2021 ![Image de l'AoC](res/aoc.png) @@ -5,6 +19,10 @@ Je vais donc écrire quatre *relativement* cours billets sur les exercices de chaque semaine.Avant de parler des exercices, je vous fais un retour rapide sur mon sentiment global après un petit mois. +Sommaire +-------- + + ## Ce que j'en aie pensé Tout d'abord, c'est très intéressant comme défi. C'est avant tout un défis personnel un peu comme [l'Inktober](https://inktober.com/) (un défis d'un mois où chaque jour vous devez dessiner un dessin sur un thème “fixé” à l'avance). J'ai personnellement bien aimé et je recommencerais l'année prochaine si possible. @@ -527,5 +545,3 @@ On peut facilement comparer ces exercices à ceux de [France-IOI](http://www.fra Je reviendrais dans quelques semaines pour vous parler de la semaine 2 de l'Advent of Code. Mon rythme de publication est très faible alors ne vous étonnez pas si vous n'avez pas de nouvelles avant le mois de Mars. [Divulgâchage](https://fr.wiktionary.org/wiki/divulg%C3%A2cher), ça va se corser un peu ! - -
Publié le 29 Décembre 2021
diff --git a/package.json b/package.json index 3c48d31..48040ce 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "author": "ache", "license": "MIT", "devDependencies": { + "@ltd/j-toml": "^1.30.0", "cssesc": "^3.0.0", "hast-util-raw": "^7.2.1", "hast-util-select": "^5.0.1", @@ -48,6 +49,7 @@ "rehype-stringify": "^9.0.3", "remark": "^14.0.2", "remark-directive": "^2.0.1", + "remark-frontmatter": "^4.0.1", "remark-gfm": "^3.0.1", "remark-math": "^5.1.1", "remark-rehype": "^10.1.0", @@ -55,6 +57,7 @@ "remark-toc": "^8.0.1", "rss": "^1.2.2", "terser": "^5.12.1", + "toml": "^3.0.0", "unist-builder": "^3.0.0", "unist-util-inspect": "^7.0.0" } diff --git a/src/build/index.mjs b/src/build/index.mjs index f9a0d51..d6f1a8a 100644 --- a/src/build/index.mjs +++ b/src/build/index.mjs @@ -6,36 +6,41 @@ import {select} from 'hast-util-select'; import {toString as hastToString} from 'mdast-util-to-string'; import cssesc from 'cssesc'; -import {toHtmlRaw, toString} from './to-html.mjs'; +import {toHtmlRaw, toString, toMdRaw, mdToHtmlRaw} from './to-html.mjs'; import loadSVG from './load-svg.mjs'; import listArticles from './list-articles.mjs'; import getRSS from './rss.mjs'; +import toml from '@ltd/j-toml'; const loadMD = (listFile, suffix) => { const listContent = []; for (const file of listFile) { + console.log(`Working on ${file}`); const content = fs.readFileSync(`${suffix}/${file}`, 'utf8'); - const htmlContent = toHtmlRaw(content); + const mdRaw = toMdRaw(content); + const tomlStringValue = mdRaw.children[0].value; + const metaData = toml.parse(tomlStringValue); + const newHTML = mdToHtmlRaw(mdRaw); + + const htmlContent = newHTML; const htmlRender = toString(htmlContent); - const articleHtml = select('article', htmlContent); const titleHtml = select('h1', htmlContent); const intro = select('p', htmlContent); - const logo = select('img', htmlContent); + intro.children = intro.children.filter(child => child.tagName !== 'br'); + + const logo = select('img', intro); logo.properties.src = `${suffix}/${logo.properties.src}`; logo.properties.height = '150px'; logo.properties.width = '150px'; titleHtml.children[0].properties.href = `${suffix}/${file.slice(0, -3)}.html`; const title = hastToString(titleHtml); - const domTitle = cssesc(title.replace(/\s+/g, '-').replace(/[\'\"#@]/, '').toLowerCase()); // Maybe encodeURI - console.log(domTitle); - - console.log(`Create : ${title}`); + const domTitle = cssesc(title.replace(/\s+/g, '-').replace(/['"#@]/, '').toLowerCase()); // Maybe encodeURI const readMore = h('a', 'Lire plus...'); - readMore.properties.href = `${suffix}/${file.slice(0, -3)}.html` + readMore.properties.href = `${suffix}/${file.slice(0, -3)}.html`; readMore.properties.role = 'expend'; readMore.properties.for = domTitle; @@ -45,6 +50,7 @@ const loadMD = (listFile, suffix) => { intro: toString(u('root', [titleHtml, intro, readMore])), introDesc: hastToString(intro), imageUrl: logo.properties.src, + metaData, title, domTitle, }); @@ -76,6 +82,7 @@ for (const article of articles) { }; const output = mustache.render(articleTmpl, context, partials); + console.log(`Create : ${article.title}`); fs.writeFileSync(`articles/${article.name}.html`, output); } diff --git a/src/build/rss.mjs b/src/build/rss.mjs index 606cdef..e468e3d 100644 --- a/src/build/rss.mjs +++ b/src/build/rss.mjs @@ -28,6 +28,8 @@ const getRSS = articles => { url: `${siteUrl}/articles/${article.domTitle}`, guid: article.domTitle, author: 'ache', + date: article.metaData.pubDate.toISOString(), + categories: article.metaData.tags, // eslint-disable-next-line camelcase custom_elements: [ {logo: article.imageUrl}, diff --git a/src/build/to-html.mjs b/src/build/to-html.mjs index a418b1f..4bc3c06 100644 --- a/src/build/to-html.mjs +++ b/src/build/to-html.mjs @@ -4,6 +4,7 @@ import remarkGfm from 'remark-gfm'; import remarkToc from 'remark-toc'; import remarkDirective from 'remark-directive'; import remarkMath from 'remark-math'; +import remarkFrontmatter from 'remark-frontmatter'; import remarkRehype from 'remark-rehype'; import rehypeSlug from 'rehype-slug'; import rehypeKaTeX from 'rehype-katex'; @@ -29,6 +30,26 @@ const generator = unified() .use(remarkMath) .use(remarkDirective) .use(remarkSpecialBox) + .use(remarkFrontmatter, {type: 'toml', marker: '-'}) + .use(remarkRehype, {allowDangerousHtml: true}) + .use(rehypeRaw) + .use(remarkRemoveFootnoteHeader) + .use(rehypeKaTeX) + .use(rehypeSlug) + .use(rehypeHighlight) + .use(rehypeAutolinkHeadings, autoLinkOption) + .use(rehypeStringify); + +const generatorMd = unified() + .use(remarkParse) + .use(remarkGfm) + .use(remarkToc, {heading: 'Sommaire', tight: true, ordered: true}) + .use(remarkMath) + .use(remarkDirective) + .use(remarkSpecialBox) + .use(remarkFrontmatter, {type: 'toml', marker: '-'}); + +const generatorHTML = unified() .use(remarkRehype, {allowDangerousHtml: true}) .use(rehypeRaw) .use(remarkRemoveFootnoteHeader) @@ -40,6 +61,9 @@ const generator = unified() const toHtml = content => generator.processSync(content); +export const toMdRaw = content => generatorMd.runSync(generatorMd.parse(content)); +export const mdToHtmlRaw = content => generatorHTML.runSync(content); + export const toHtmlRaw = content => generator.runSync(generator.parse(content)); export const toString = content => generator.stringify(content); export default toHtml; -- cgit v1.2.3