commit 06e9114cb60dec1a71755972b70b80c8f777d8e0
parent 02694bcf37e1e562e092dde3163f7c2e622dfffa
Author: Andrew Laack <andrew@laack.co>
Date: Thu, 27 Aug 2026 13:30:00 -0500
Started working on hierarchy
Diffstat:
4 files changed, 46 insertions(+), 24 deletions(-)
diff --git a/learning/bin/main.ml b/learning/bin/main.ml
@@ -1,5 +1,7 @@
open Jingoo
+let course_dir = "../courses/"
+
let readFile fileName =
let ic = open_in fileName in
let rec readAll acc =
@@ -19,26 +21,45 @@ let to_tval value =
let get_courses =
+ let arr = Sys.readdir course_dir in
+ Array.sort compare arr;
Jg_types.Tlist
- (Array.to_list (Array.map to_tval (Array.map remove_file_extension (Sys.readdir "../example/"))))
+ (Array.to_list (Array.map to_tval arr))
let render_course_list =
(Jg_template.from_file "./templates/course_list.jingoo" ~models:[("courses", get_courses)])
-let to_course name content =
- Jg_types.Tobj [("name", Jg_types.Tstr name); ("content", Jg_types.Tstr content);
-]
+let prepend prefix s =
+ prefix ^ s
+
+
+let get_pages_in_order course_name =
+ let arr = Sys.readdir (course_dir ^ course_name) in
+ Array.sort compare arr;
+ arr
+
+let get_pages page_arr =
+ readFile page_arr.(0)
+
+let arr_to_string arr =
+ let rec go acc idx =
+ if idx >= Array.length(arr) then acc
+ else go (acc ^ arr.(idx)) (idx + 1)
+ in go "" 0
+
+
+
+let get_course_home course_name =
+ Array.map to_tval (get_pages_in_order course_name)
-let render_course course_name =
- (Jg_template.from_file "./templates/course.jingoo" ~models:[(
- "course", to_course course_name (readFile ("../example/" ^ course_name ^ ".rl"))
- )])
+let render_course_home course_name =
+ (Jg_template.from_file "./templates/course_home.jingoo" ~models:[("pages", (Jg_types.Tlist (Array.to_list (get_course_home course_name))))])
let () =
Dream.run
@@ Dream.logger
@@ Dream.router [
- Dream.get "/course/:id" (fun request -> Dream.html (render_course (Dream.param request "id")));
+ Dream.get "/course/:id/" (fun request -> Dream.html (render_course_home (Dream.param request "id")));
Dream.get "/static/**" (Dream.static "./static");
Dream.get "/" (fun _ -> Dream.html render_course_list)
]
diff --git a/learning/templates/course.jingoo b/learning/templates/course.jingoo
@@ -1,14 +0,0 @@
-<link rel="stylesheet" href="/static/styles.css" type="text/css">
-<div class="sidenav">
- <a href="/">Home</a>
- <a href="">Services</a>
- <a href="">Clients</a>
- <a href="">Contact</a>
-</div>
-
-<div class="main">
- <div>
- <h1>{{ course.name }}</h1>
- <div> {{ course.content }}</div>
- </div>
-</div>
diff --git a/learning/templates/course_home.jingoo b/learning/templates/course_home.jingoo
@@ -0,0 +1,15 @@
+<link rel="stylesheet" href="/static/styles.css" type="text/css">
+<div class="sidenav">
+ <a href="/">Home</a>
+ <a href="">Services</a>
+ <a href="">Clients</a>
+ <a href="">Contact</a>
+</div>
+
+<div class="main">
+ <ul>
+ {% for page in pages %}
+ <li><a href="page/{{ page.name }}">{{ page.name }}</a></li>
+ {% endfor %}
+ </ul>
+</div>
diff --git a/learning/templates/course_list.jingoo b/learning/templates/course_list.jingoo
@@ -9,7 +9,7 @@
<div class="main">
<ul>
{% for course in courses %}
- <li><a href="/course/{{ course.name }}">{{ course.name }}</a></li>
+ <li><a href="/course/{{ course.name }}/">{{ course.name }}</a></li>
{% endfor %}
</ul>
</div>