simple-learning

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

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:
Mlearning/lib/render.ml | 12++++--------
Alearning/lib/templates.ml | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dlearning/templates/course_home.jingoo | 8--------
Dlearning/templates/course_list.jingoo | 8--------
Dlearning/templates/course_page.jingoo | 38--------------------------------------
Dlearning/templates/sidebar.jingoo | 7-------
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>