summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorache <ache@ache.one>2022-05-04 00:28:27 +0200
committerache <ache@ache.one>2022-05-04 00:28:27 +0200
commite72b1f0332bfa2a792f42114406ee28df3c3daa2 (patch)
tree7e077d43b11353775489c8523ffb76075d732d18
parentCenter the text on the leftside (diff)
Support for meta data
-rw-r--r--articles/2FA-discord-sur-pc.md11
-rw-r--r--articles/bizarreries-du-langage-c.md16
-rw-r--r--articles/duckduckgo-google-en-mieux.md16
-rw-r--r--articles/retour-sur-laoc-2021-semaine-1.md20
-rw-r--r--package.json3
-rw-r--r--src/build/index.mjs25
-rw-r--r--src/build/rss.mjs2
-rw-r--r--src/build/to-html.mjs24
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). 😈
-
-<div class="pubdate">Publié le 18 novembre 2018</div>
-
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.
-
-<div class="pubdate">Publié en 2010</div>
-
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 !
-
-<div class="pubdate">Publié le 29 Décembre 2021</div>
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;