+ {#if data.introHtml}
+
+ {@html data.introHtml}
+
+ {/if}
+
+ {#if data.lessons.length === 0}
+ Belum ada pelajaran yang ditemukan untuk bab ini.
+ {:else}
+
+ {#each data.lessons as lesson (lesson.filename)}
+
+ {/each}
+
+ {/if}
+
+
+
\ No newline at end of file
diff --git a/frontend/src/routes/bab/[folder]/+page.ts b/frontend/src/routes/bab/[folder]/+page.ts
new file mode 100644
index 0000000..77fd9a7
--- /dev/null
+++ b/frontend/src/routes/bab/[folder]/+page.ts
@@ -0,0 +1,17 @@
+import type { PageLoad } from './$types';
+import type { Lesson } from '$types/lesson';
+import { error } from '@sveltejs/kit';
+
+export const load: PageLoad = async ({ params, fetch }) => {
+ const res = await fetch(`/api/bab/${params.folder}`);
+ if (!res.ok) {
+ throw error(404, 'Bab not found');
+ }
+ const data = await res.json();
+ return {
+ title: data.title,
+ introHtml: data.intro_html,
+ lessons: data.lessons as Lesson[],
+ folder: params.folder,
+ };
+};
\ No newline at end of file
diff --git a/generate_tokens.py b/generate_tokens.py
index 6f5c28a..043e685 100644
--- a/generate_tokens.py
+++ b/generate_tokens.py
@@ -44,7 +44,7 @@ def get_lesson_names():
lesson_files = glob.glob(os.path.join(CONTENT_DIR, "*.md"))
for file_path in lesson_files:
filename = os.path.basename(file_path)
- if filename == "home.md":
+ if filename in ("home.md", "sub-home.md"):
continue
lesson_names.append(filename.replace('.md', ''))
lesson_names.sort()
diff --git a/load-test/content_parser.py b/load-test/content_parser.py
index 64876d3..a4e697d 100644
--- a/load-test/content_parser.py
+++ b/load-test/content_parser.py
@@ -244,7 +244,7 @@ def main():
ordered_slugs = [
f.replace('.md', '')
for f in sorted(os.listdir(content_dir))
- if f.endswith('.md') and f != 'home.md'
+ if f.endswith('.md') and f not in ('home.md', 'sub-home.md')
]
print(f" 📚 Found {len(ordered_slugs)} lessons:")
diff --git a/routes/lessons.py b/routes/lessons.py
index 30797b8..455ff37 100644
--- a/routes/lessons.py
+++ b/routes/lessons.py
@@ -11,6 +11,8 @@ from compiler import compiler_factory
from config import CONTENT_DIR, ASSETS_DIR
from services.lesson_service import (
get_ordered_lessons_with_learning_objectives,
+ get_sub_home_data,
+ find_sub_home_for_lesson,
render_markdown_content,
render_home_content,
find_lesson_file,
@@ -50,6 +52,15 @@ def api_lessons():
})
+@lessons_bp.route('/bab/