commit e43319905105548d91102e98c5926df838e05dcb
parent 55c20bb266d79ec5b3f6a94345c64c899f77f2c0
Author: Andrew Laack <andrew@laack.co>
Date: Tue, 1 Sep 2026 18:25:11 -0500
Moved template files to strings for easier builds / testing
Diffstat:
6 files changed, 72 insertions(+), 69 deletions(-)
diff --git a/learning/lib/render.ml b/learning/lib/render.ml
@@ -1,9 +1,5 @@
open Jingoo
-(* TODO:
- Make templates strings, not files for easier single file builds.
-*)
-
let to_tval value =
Jg_types.Tobj [("name", Jg_types.Tstr value);]
@@ -27,16 +23,16 @@ let get_courses =
(Array.to_list (Array.map to_tval arr))
let render_course_list =
- (Jg_template.from_file "./templates/course_list.jingoo" ~models:[("courses", get_courses)])
+ (Jg_template.from_string Templates.course_list_jingoo ~models:[("courses", get_courses)])
let render_sidebar s =
- (Jg_template.from_file "./templates/sidebar.jingoo" ~models:[("courses", get_courses)]) ^ s
+ (Jg_template.from_string Templates.sidebar_jingoo ~models:[("courses", get_courses)]) ^ s
let page_line_to_tobj (line : Parser.page_line) =
Jg_types.Tobj [("content", Jg_types.Tstr line.content); ("line_type", Jg_types.Tstr (Parser.line_format_str line.line_type))]
let render_course_home course_name =
- (Jg_template.from_file "./templates/course_home.jingoo" ~models:[("pages", (Jg_types.Tlist (get_course_home course_name)))])
+ (Jg_template.from_string Templates.course_home_jingoo ~models:[("pages", (Jg_types.Tlist (get_course_home course_name)))])
let get_path_to_page course page =
Shared.course_dir ^ course ^ "/" ^ page
@@ -62,5 +58,5 @@ let get_next_page_link course page =
let render_page course page =
let page_lines : Parser.page_line list = Parser.read_simple_learning_file @@ get_path_to_page course page in
- (Jg_template.from_file "./templates/course_page.jingoo" ~models:(["lines", Jg_types.Tlist (List.map page_line_to_tobj page_lines);("previous_page_link", Jg_types.Tstr (get_previous_page_link course page)) ; ("next_page_link", Jg_types.Tstr (get_next_page_link course page))]))
+ (Jg_template.from_string Templates.course_page_jingoo ~models:(["lines", Jg_types.Tlist (List.map page_line_to_tobj page_lines);("previous_page_link", Jg_types.Tstr (get_previous_page_link course page)) ; ("next_page_link", Jg_types.Tstr (get_next_page_link course page))]))
diff --git a/learning/lib/templates.ml b/learning/lib/templates.ml
@@ -0,0 +1,68 @@
+let sidebar_jingoo =
+ "<link rel=\"stylesheet\" href=\"/static/styles.css\" type=\"text/css\">
+<div class=\"sidenav\">
+ <a href=\"/\">Home</a>
+ {% for course in courses %}
+ <a href=\"/course/{{ course.name }}/\">{{ course.name }}</a>
+ {% endfor %}
+</div>"
+
+let course_page_jingoo =
+ "<div class=\"main\">
+ {% for line in lines %}
+ {% if line.line_type == \"Preformatted\"%}
+ <pre><pre-formatted>{{line.content}}</pre-formatted></pre>
+ {% else if line.line_type == \"Quote\"%}
+ <blockquote>{{line.content}}</blockquote>
+ {% else if line.line_type == \"ListItem\"%}
+ <li>{{line.content}}</li>
+ {% else if line.line_type == \"Link\"%}
+ <content-block>
+ <a href=\"{{line.content}}\">{{line.content}}</a>
+ </content-block>
+ {% else if line.line_type == \"Hidden\"%}
+ <details>
+ <summary>{{line.content}}</summary>
+ </details>
+ {% else if line.line_type == \"HeaderL1\"%}
+ <h1>{{line.content}}</h1>
+ {% else if line.line_type == \"HeaderL2\"%}
+ <h2>{{line.content}}</h2>
+ {% else if line.line_type == \"HeaderL3\"%}
+ <h3>{{line.content}}</h3>
+ {% else if line.line_type == \"Embedded\"%}
+ <iframe
+ style=\"width: 100%; height: 600px;overflow:auto\";
+ src=\"{{line.content}}\">
+ </iframe>
+ {% else if line.line_type == \"Normal\"%}
+ <content-block>{{line.content}}</content-block>
+ {% endif %}
+ {% endfor %}
+ {% if previous_page_link != \"\" %}
+ <a class=\"page-nav\" href=\"{{previous_page_link}}\">previous</a>
+ {% endif %}
+ {% if next_page_link != \"\" %}
+ <a class=\"page-nav-next\" href=\"{{next_page_link}}\">next</a>
+ {% endif %}
+</div>"
+
+let course_home_jingoo =
+ "<div class=\"main\">
+ <h1> Pages </h1>
+ <ul>
+ {% for page in pages %}
+ <li><a href=\"page/{{ page.name }}\">{{ page.name }}</a></li>
+ {% endfor %}
+ </ul>
+</div>"
+
+let course_list_jingoo =
+ "<div class=\"main\">
+ <h1> courses </h1>
+ <ul>
+ {% for course in courses %}
+ <li><a href=\"/course/{{ course.name }}/\">{{ course.name }}</a></li>
+ {% endfor %}
+ </ul>
+</div>"
diff --git a/learning/templates/course_home.jingoo b/learning/templates/course_home.jingoo
@@ -1,8 +0,0 @@
-<div class="main">
- <h1> Pages </h1>
- <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
@@ -1,8 +0,0 @@
-<div class="main">
- <h1> Courses </h1>
- <ul>
- {% for course in courses %}
- <li><a href="/course/{{ course.name }}/">{{ course.name }}</a></li>
- {% endfor %}
- </ul>
-</div>
diff --git a/learning/templates/course_page.jingoo b/learning/templates/course_page.jingoo
@@ -1,38 +0,0 @@
-<div class="main">
- {% for line in lines %}
- {% if line.line_type == "Preformatted"%}
- <pre><pre-formatted>{{line.content}}</pre-formatted></pre>
- {% else if line.line_type == "Quote"%}
- <blockquote>{{line.content}}</blockquote>
- {% else if line.line_type == "ListItem"%}
- <li>{{line.content}}</li>
- {% else if line.line_type == "Link"%}
- <content-block>
- <a href="{{line.content}}">{{line.content}}</a>
- </content-block>
- {% else if line.line_type == "Hidden"%}
- <details>
- <summary>{{line.content}}</summary>
- </details>
- {% else if line.line_type == "HeaderL1"%}
- <h1>{{line.content}}</h1>
- {% else if line.line_type == "HeaderL2"%}
- <h2>{{line.content}}</h2>
- {% else if line.line_type == "HeaderL3"%}
- <h3>{{line.content}}</h3>
- {% else if line.line_type == "Embedded"%}
- <iframe
- style="width: 100%; height: 600px;overflow:auto";
- src="{{line.content}}">
- </iframe>
- {% else if line.line_type == "Normal"%}
- <content-block>{{line.content}}</content-block>
- {% endif %}
- {% endfor %}
- {% if previous_page_link != "" %}
- <a class="page-nav" href="{{previous_page_link}}">previous</a>
- {% endif %}
- {% if next_page_link != "" %}
- <a class="page-nav-next" href="{{next_page_link}}">next</a>
- {% endif %}
-</div>
diff --git a/learning/templates/sidebar.jingoo b/learning/templates/sidebar.jingoo
@@ -1,7 +0,0 @@
-<link rel="stylesheet" href="/static/styles.css" type="text/css">
-<div class="sidenav">
- <a href="/">Home</a>
- {% for course in courses %}
- <a href="/course/{{ course.name }}/">{{ course.name }}</a>
- {% endfor %}
-</div>