simple-learning

Simple learning web program
git clone git://git.laack.co/simple-learning.git
Log | Files | Refs | README | LICENSE

commit 06e9114cb60dec1a71755972b70b80c8f777d8e0
parent 02694bcf37e1e562e092dde3163f7c2e622dfffa
Author: Andrew Laack <andrew@laack.co>
Date:   Thu, 27 Aug 2026 13:30:00 -0500

Started working on hierarchy

Diffstat:
Mlearning/bin/main.ml | 39++++++++++++++++++++++++++++++---------
Dlearning/templates/course.jingoo | 14--------------
Alearning/templates/course_home.jingoo | 15+++++++++++++++
Mlearning/templates/course_list.jingoo | 2+-
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>