Skip to content

Commit 501d858

Browse files
committed
#3414 webpage: fix blog items menu for other languages
Signed-off-by: Patrizio Bekerle <[email protected]>
1 parent 04a2388 commit 501d858

File tree

2 files changed

+56
-10
lines changed

2 files changed

+56
-10
lines changed

webpage/src/.vuepress/config.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ export default defineUserConfig({
434434
},
435435
{
436436
text: "Blog (auf Englisch)",
437-
children: utils.getChildren("src", "blog", true),
437+
children: utils.getBlogChildrenWithTitles("src", "blog", true),
438438
},
439439
{
440440
text: "Änderungsprotokoll (auf Englisch)",
@@ -490,7 +490,7 @@ export default defineUserConfig({
490490
},
491491
{
492492
text: "Blog (in inglese)",
493-
children: utils.getChildren("src", "blog", true),
493+
children: utils.getBlogChildrenWithTitles("src", "blog", true),
494494
},
495495
{
496496
text: "Changelog (in inglese)",
@@ -546,7 +546,7 @@ export default defineUserConfig({
546546
},
547547
{
548548
text: "Blog (en anglais)",
549-
children: utils.getChildren("src", "blog", true),
549+
children: utils.getBlogChildrenWithTitles("src", "blog", true),
550550
},
551551
{
552552
text: "Changelog (en anglais)",
@@ -602,7 +602,7 @@ export default defineUserConfig({
602602
},
603603
{
604604
text: "Blog (en inglés)",
605-
children: utils.getChildren("src", "blog", true),
605+
children: utils.getBlogChildrenWithTitles("src", "blog", true),
606606
},
607607
{
608608
text: "Changelog (en inglés)",
@@ -658,7 +658,7 @@ export default defineUserConfig({
658658
},
659659
{
660660
text: "وبلاگ (به انگلیسی)",
661-
children: utils.getChildren("src", "blog", true),
661+
children: utils.getBlogChildrenWithTitles("src", "blog", true),
662662
},
663663
{
664664
text: "تغییرات (به انگلیسی)",
@@ -714,7 +714,7 @@ export default defineUserConfig({
714714
},
715715
{
716716
text: "Blog (in het Engels)",
717-
children: utils.getChildren("src", "blog", true),
717+
children: utils.getBlogChildrenWithTitles("src", "blog", true),
718718
},
719719
{
720720
text: "Changelog (in het Engels)",
@@ -770,7 +770,7 @@ export default defineUserConfig({
770770
},
771771
{
772772
text: "Blog (angolul)",
773-
children: utils.getChildren("src", "blog", true),
773+
children: utils.getBlogChildrenWithTitles("src", "blog", true),
774774
},
775775
{
776776
text: "Változásnapló (angolul)",
@@ -826,7 +826,7 @@ export default defineUserConfig({
826826
},
827827
{
828828
text: "المدونة (بالإنجليزية)",
829-
children: utils.getChildren("src", "blog", true),
829+
children: utils.getBlogChildrenWithTitles("src", "blog", true),
830830
},
831831
{
832832
text: "سجل التغييرات (بالإنجليزية)",
@@ -882,7 +882,7 @@ export default defineUserConfig({
882882
},
883883
{
884884
text: "Blog (po angielsku)",
885-
children: utils.getChildren("src", "blog", true),
885+
children: utils.getBlogChildrenWithTitles("src", "blog", true),
886886
},
887887
{
888888
text: "Dziennik zmian (po angielsku)",
@@ -938,7 +938,7 @@ export default defineUserConfig({
938938
},
939939
{
940940
text: "블로그 (영어)",
941-
children: utils.getChildren("src", "blog", true),
941+
children: utils.getBlogChildrenWithTitles("src", "blog", true),
942942
},
943943
{
944944
text: "변경 로그 (영어)",

webpage/src/.vuepress/utils.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,52 @@ export const getChildren = (parent_path, dir, reverseOrder = false) => {
4040
return result.map((file) => file.path);
4141
};
4242

43+
// Get blog children with titles for sidebar (used for non-English pages)
44+
export const getBlogChildrenWithTitles = (
45+
parent_path,
46+
dir,
47+
reverseOrder = false,
48+
) => {
49+
let files = globSync(parent_path + (dir ? `/${dir}` : "") + "/**/*.md").map(
50+
(path) => {
51+
// Instantiate MarkdownIt
52+
let md = new markdownIt();
53+
// Add markdown-it-meta
54+
md.use(meta);
55+
// Get the metadata and content
56+
let file = fs.readFileSync(path, "utf8");
57+
md.render(file);
58+
let order = md.meta.order;
59+
60+
// Extract title from first H1 heading
61+
const h1Match = file.match(/^#\s+(.+)$/m);
62+
const title = md.meta.title || (h1Match ? h1Match[1] : "Untitled");
63+
64+
// Remove "parent_path" and ".md"
65+
let cleanPath = path.slice(parent_path.length + 1, -3);
66+
// Remove "README", making it the de facto index page
67+
if (cleanPath.endsWith("README")) {
68+
cleanPath = cleanPath.slice(0, -6);
69+
}
70+
71+
return {
72+
text: title,
73+
link: "/" + cleanPath.replace(/\.md$/, ""),
74+
order,
75+
};
76+
},
77+
);
78+
79+
// Return the ordered list of files, sort by 'order' then 'link'
80+
let result = _.sortBy(files, ["order", "link"]);
81+
82+
if (reverseOrder) {
83+
result = result.reverse();
84+
}
85+
86+
return result;
87+
};
88+
4389
export const getNavItemsForLanguage = (navItems, language) => {
4490
// VuePress 2 automatically adds locale prefix to relative paths in sidebar
4591
// So we just return the items as-is without adding the language prefix

0 commit comments

Comments
 (0)