Skip to content

Commit a966a68

Browse files
fmichonneaumaxim-belkin
authored andcommitted
Use Jekyll to generate the 'all-in-one' page (carpentries/styles#438)
1 parent e06f686 commit a966a68

File tree

3 files changed

+67
-45
lines changed

3 files changed

+67
-45
lines changed

_includes/aio-script.md

Lines changed: 14 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,20 @@ open an issue: https://github.com/carpentries/styles/issues/new
66

77
{% include manual_episode_order.html %}
88

9-
<script>
10-
window.onload = function() {
11-
var lesson_episodes = [
12-
{% for lesson_episode in lesson_episodes %}
13-
{% if site.episode_order %}
14-
{% assign episode = site.episodes | where: "slug", lesson_episode | first %}
15-
{% else %}
16-
{% assign episode = lesson_episode %}
17-
{% endif %}
18-
"{{ episode.url}}"{% unless forloop.last %},{% endunless %}
19-
{% endfor %}
20-
];
21-
var xmlHttp = []; /* Required since we are going to query every episode. */
22-
for (i=0; i < lesson_episodes.length; i++) {
23-
xmlHttp[i] = new XMLHttpRequest();
24-
xmlHttp[i].episode = lesson_episodes[i]; /* To enable use this later. */
25-
xmlHttp[i].onreadystatechange = function() {
26-
if (this.readyState == 4 && this.status == 200) {
27-
var article_here = document.getElementById(this.episode);
28-
var parser = new DOMParser();
29-
var htmlDoc = parser.parseFromString(this.responseText,"text/html");
30-
var htmlDocArticle = htmlDoc.getElementsByTagName("article")[0];
31-
article_here.innerHTML = htmlDocArticle.innerHTML;
32-
}
33-
}
34-
var episode_url = "{{ relative_root_path }}" + lesson_episodes[i];
35-
xmlHttp[i].open("GET", episode_url);
36-
xmlHttp[i].send(null);
37-
}
38-
}
39-
</script>
9+
{% for lesson_episode in lesson_episodes %}
4010

41-
{% comment %} Create an anchor for every episode. {% endcomment %}
11+
{% if site.episode_order %}
12+
{% assign e = site.episodes | where: "slug", lesson_episode | first %}
13+
{% else %}
14+
{% assign e = lesson_episode %}
15+
{% endif %}
4216

43-
{% for lesson_episode in lesson_episodes %}
44-
{% if site.episode_order %}
45-
{% assign episode = site.episodes | where: "slug", lesson_episode | first %}
46-
{% else %}
47-
{% assign episode = lesson_episode %}
48-
{% endif %}
49-
<article id="{{ episode.url }}"></article>
17+
<h1 id="{{ e.title | slugify }}" class="maintitle">{{ e.title }}</h1>
18+
19+
{% include episode_overview.html teaching_time=e.teaching exercise_time=e.exercises episode_questions=e.questions episode_objectives=e.objectives %}
20+
21+
{{ e.content }}
22+
23+
{% include episode_keypoints.html episode_keypoints=e.keypoints %}
24+
<hr />
5025
{% endfor %}

_includes/episode_keypoints.html

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
{% comment %}
22
Display key points for an episode.
33
{% endcomment %}
4+
5+
{% if page.keypoints == nil %}
6+
{% assign episode_keypoints = include.episode_keypoints %}
7+
{% else %}
8+
{% assign episode_keypoints = page.keypoints %}
9+
{% endif %}
10+
411
<blockquote class="keypoints">
512
<h2>Key Points</h2>
613
<ul>
7-
{% for keypoint in page.keypoints %}
14+
{% for keypoint in episode_keypoints %}
815
<li>{{ keypoint|markdownify }}</li>
916
{% endfor %}
1017
</ul>

_includes/episode_overview.html

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,59 @@
11
{% comment %}
2-
Display an episode's timings and learning objectives.
2+
Display episode's timings and learning objectives.
3+
4+
Regarding the `if page.*** == nil` below:
5+
all-in-one page combines all episodes into one.
6+
It, therefore, does not define its own objectives, exercises,
7+
and questions, which 'normal' episodes define in the front matter.
8+
9+
To display episodes' teaching and exercise times, as well as episode
10+
questions and objectives, we pass them as parameters to the Liquid's
11+
`include` statement when we generate the page:
12+
13+
{% include episode_overview.html teaching_time=e.teaching ... %}
14+
15+
Here we obtain the information we need either from the episode itself or
16+
from the parameters passed in.
317
{% endcomment %}
18+
19+
{% if page.teaching == nil %}
20+
{% assign teaching_time = include.teaching_time %}
21+
{% else %}
22+
{% assign teaching_time = page.teaching %}
23+
{% endif %}
24+
25+
{% if page.exercises == nil %}
26+
{% assign exercise_time = include.exercise_time %}
27+
{% else %}
28+
{% assign exercise_time = page.exercises %}
29+
{% endif %}
30+
31+
{% if page.questions == nil %}
32+
{% assign episode_questions = include.episode_questions %}
33+
{% else %}
34+
{% assign episode_questions = page.questions %}
35+
{% endif %}
36+
37+
{% if page.objectives == nil %}
38+
{% assign episode_objectives = include.episode_objectives %}
39+
{% else %}
40+
{% assign episode_objectives = page.objectives %}
41+
{% endif %}
42+
43+
444
<blockquote class="objectives">
545
<h2>Overview</h2>
646

747
<div class="row">
848
<div class="col-md-3">
9-
<strong>Teaching:</strong> {{ page.teaching }} min
49+
<strong>Teaching:</strong> {{ teaching_time }} min
1050
<br/>
11-
<strong>Exercises:</strong> {{ page.exercises }} min
51+
<strong>Exercises:</strong> {{ exercise_time }} min
1252
</div>
1353
<div class="col-md-9">
1454
<strong>Questions</strong>
1555
<ul>
16-
{% for question in page.questions %}
56+
{% for question in episode_questions %}
1757
<li>{{ question|markdownify }}</li>
1858
{% endfor %}
1959
</ul>
@@ -26,7 +66,7 @@ <h2>Overview</h2>
2666
<div class="col-md-9">
2767
<strong>Objectives</strong>
2868
<ul>
29-
{% for objective in page.objectives %}
69+
{% for objective in episode_objectives %}
3070
<li>{{ objective|markdownify }}</li>
3171
{% endfor %}
3272
</ul>

0 commit comments

Comments
 (0)