{{ course.name }}
{{ stats.completed_lessons }}/{{ stats.total_lessons }} lessons completed
{{ "%.1f"|format(stats.completion_percentage) }}%
Last Accessed: {{ stats.last_accessed_path }}
Continue
{% endif %}
{% macro render_tree_node(node, depth=0) %}
{% if node.children or node.lessons %}
{% endmacro %}
{{ render_tree_node(course.root_node) }}
{{ node.name }}
{{ (node.children|length + node.lessons|length) }} items
{% if node.children or node.lessons %}
{% endif %}
{% for child_name, child_node in node.children.items() %}
{{ render_tree_node(child_node, depth + 1) }}
{% endfor %}
{% for lesson in node.lessons %}
{% set lesson_relative_path = lesson.path|replace('\\', '/')|replace(course.path|replace('\\', '/'), '')|replace('//', '/')|replace('/', '', 1) %}
{% set percent_watched = 100 if lesson.completed else (((100 * lesson.progress_seconds / lesson.duration_seconds)|round|int) if (lesson.duration_seconds and lesson.progress_seconds) else 0) %}
{% endfor %}
{% endif %}
{{ lesson.title }}
{% if percent_watched %}
{% endif %}
{% if view.has_thumbnail %}
{% else %}
{% endif %}
{{ view.lesson_title }}
{% if view.percent_watched %}
{% endif %}
βΆ Continue Watching
{% for view in continue_watching %}
{{ render_view_row(view) }}
{% endfor %}
π Recently Viewed
{% for view in recent_views %}
{{ render_view_row(view) }}
{% endfor %}