Skip to content

Commit e176d3b

Browse files
maxim-belkintobyhodges
authored andcommitted
Manual ordering of episodes and extras
Co-authored-by: stamper <[email protected]>
1 parent b276295 commit e176d3b

File tree

7 files changed

+191
-21
lines changed

7 files changed

+191
-21
lines changed

_includes/aio-script.md

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
{% comment %}
22
As a maintainer, you don't need to edit this file.
3-
If you notice that something doesn't work, please
3+
If you notice that something doesn't work, please
44
open an issue: https://github.com/carpentries/styles/issues/new
55
{% endcomment %}
66

7+
{% include manual_episode_order.html %}
8+
79
<script>
810
window.onload = function() {
911
var lesson_episodes = [
10-
{% for episode in site.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 %}
1118
"{{ episode.url}}"{% unless forloop.last %},{% endunless %}
1219
{% endfor %}
1320
];
@@ -30,9 +37,14 @@ open an issue: https://github.com/carpentries/styles/issues/new
3037
}
3138
}
3239
</script>
33-
{% comment %}
34-
Create an anchor for every episode.
35-
{% endcomment %}
36-
{% for episode in site.episodes %}
37-
<article id="{{ episode.url }}"></article>
40+
41+
{% comment %} Create an anchor for every episode. {% endcomment %}
42+
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>
3850
{% endfor %}

_includes/all_keypoints.html

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,16 @@
33
{% endcomment %}
44

55
{% include base_path.html %}
6+
{% include manual_episode_order.html %}
67

78
<h2>Key Points</h2>
89
<table class="table table-striped">
9-
{% for episode in site.episodes %}
10+
{% for lesson_episode in lesson_episodes %}
11+
{% if site.episode_order %}
12+
{% assign episode = site.episodes | where: "slug", lesson_episode | first %}
13+
{% else %}
14+
{% assign episode = lesson_episode %}
15+
{% endif %}
1016
{% unless episode.break %}
1117
<tr>
1218
<td class="col-md-3">

_includes/episode_navbar.html

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,17 @@
99
Navigation bar for an episode.
1010
{% endcomment %}
1111

12+
{% include manual_episode_order.html %}
13+
{% comment %}
14+
'previous_episode' and 'next_episodes' are defined in 'manual_episode_order.html'.
15+
These replace 'page.previous' and 'page.next' objects, correspondingly.
16+
{% endcomment %}
17+
1218
<div class="row">
1319
<div class="col-xs-1">
1420
<h3 class="text-left">
15-
{% if page.previous.url %}
16-
<a href="{{ relative_root_path }}{{ page.previous.url }}"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span><span class="sr-only">previous episode</span></a>
21+
{% if previous_episode %}
22+
<a href="{{ relative_root_path }}{{ previous_episode.url }}"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span><span class="sr-only">previous episode</span></a>
1723
{% else %}
1824
<a href="{{ relative_root_path }}/"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span><span class="sr-only">lesson home</span></a>
1925
{% endif %}
@@ -26,8 +32,8 @@ <h3 class="maintitle"><a href="{{ relative_root_path }}/">{{ site.title }}</a></
2632
</div>
2733
<div class="col-xs-1">
2834
<h3 class="text-right">
29-
{% if page.next.url %}
30-
<a href="{{ relative_root_path }}{{ page.next.url }}"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span><span class="sr-only">next episode</span></a>
35+
{% if next_episode %}
36+
<a href="{{ relative_root_path }}{{ next_episode.url }}"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span><span class="sr-only">next episode</span></a>
3137
{% else %}
3238
<a href="{{ relative_root_path }}/"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span><span class="sr-only">lesson home</span></a>
3339
{% endif %}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
{% comment %}
2+
This file enables manual episode ordering until
3+
GitHub Pages switches to Jekyll that supports it
4+
without any major hackery. Note, some logic will
5+
be required even when this transition happens
6+
but it won't be as involved as what we have to do
7+
in this file.
8+
9+
To order lesson episodes or extras manually
10+
(instead of the default alpha-numerical order),
11+
create array variables 'episode_order' and
12+
'extras_order' in `_config.yml` like so:
13+
14+
episode_order:
15+
- episodeA
16+
- episodeB
17+
18+
extras_order:
19+
- extraA
20+
- extraB
21+
22+
Note that "Reference" page is currently always
23+
added to "Extras" as the first item.
24+
25+
The main outcomes of the code in this file are:
26+
- 'lesson_episodes' variable that replaces
27+
'site.episodes' variable when manual episode
28+
order is defined.
29+
- 'lesson_extras' variable that replaces
30+
'site.extras' variable when manual ordering of
31+
files in '_extras' is used
32+
- 'previous_episode' and 'next_episode' objects
33+
that replace 'page.previous' and 'page.next' variables,
34+
correspondingly, and that have such properties
35+
as 'url' and 'title' and that are used in
36+
'episode_navbar.html'.
37+
38+
When episode order is specified manualy, the 'lesson_episodes'
39+
variable contains a list of episode names ("slugs", to be precise;
40+
"slug" is the episode name without '.md'). Therefore, when we
41+
iterate over 'lesson_episodes' (in syllabus.html and navbar.html) ,
42+
we have to check whether we use manual episode ordering and, if so,
43+
find the corresponding episode object. This is what we do with the
44+
following code in every loop over 'lesson_episodes':
45+
46+
{% if site.episode_order %}
47+
{% assign episode = site.episodes | where: "slug", lesson_episode | first %}
48+
{% else %}
49+
{% assign episode = lesson_episode %}
50+
{% endif %}
51+
{% endcomment %}
52+
53+
<!-- Manual ordering of Episodes begins here -->
54+
55+
{% if site.episode_order %}
56+
{% assign lesson_episodes = site.episode_order %}
57+
{% else %}
58+
{% assign lesson_episodes = site.episodes %}
59+
{% endif %}
60+
61+
62+
{% comment %}
63+
If 'episode_order' is defined, we need to determine
64+
- previous episode object ('previous_episode')
65+
- and next episode object ('next_episode')
66+
{% endcomment %}
67+
68+
69+
{% if site.episode_order %}
70+
{% for lesson_episode in lesson_episodes %}
71+
72+
{% comment %}
73+
We iterate over the specified lesson episodes using
74+
a 'for' loop because we can use
75+
'forloop.first', 'forloop.last', and 'forloop.index0'.
76+
{% endcomment %}
77+
78+
{% unless lesson_episode == page.slug %} {% continue %} {% endunless %}
79+
80+
{% if forloop.first %}
81+
{% assign previous_episode = nil %}
82+
{% else %}
83+
{% assign p_idx = forloop.index0 | minus: 1 %}
84+
{% assign p_name = lesson_episodes[p_idx] %}
85+
{% assign previous_episode = site.episodes | where: "slug", p_name | first %}
86+
{% endif %}
87+
88+
{% if forloop.last == true %}
89+
{% assign next_episode = nil %}
90+
{% else %}
91+
{% assign n_idx = forloop.index0 | plus: 1 %}
92+
{% assign n_name = lesson_episodes[n_idx] %}
93+
{% assign next_episode = site.episodes | where: "slug", n_name | first %}
94+
{% endif %}
95+
{% endfor %}
96+
{% else %}
97+
{% assign previous_episode = page.previous %}
98+
{% assign next_episode = page.next %}
99+
{% endif %}
100+
101+
<!-- Manual ordering of Extras begins here -->
102+
103+
{% if site.extras_order %}
104+
{% assign lesson_extras = site.extras_order %}
105+
{% else %}
106+
{% assign lesson_extras = site.extras %}
107+
{% endif %}
108+
109+
{% comment %}
110+
We do not need to determine "previous" or "next" extra.
111+
{% endcomment %}

_includes/navbar.html

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
{% endcomment %}
44

55
{% include gh_variables.html %}
6+
{% include manual_episode_order.html %}
67

78
<nav class="navbar navbar-default">
89
<div class="container-fluid">
@@ -51,7 +52,12 @@
5152
<li class="dropdown">
5253
<a href="{{ relative_root_path }}/" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Episodes <span class="caret"></span></a>
5354
<ul class="dropdown-menu">
54-
{% for episode in site.episodes %}
55+
{% for lesson_episode in lesson_episodes %}
56+
{% if site.episode_order %}
57+
{% assign episode = site.episodes | where: "slug", lesson_episode | first %}
58+
{% else %}
59+
{% assign episode = lesson_episode %}
60+
{% endif %}
5561
<li><a href="{{ relative_root_path }}{{ episode.url }}">{{ episode.title }}</a></li>
5662
{% endfor %}
5763
<li role="separator" class="divider"></li>
@@ -66,7 +72,12 @@
6672
<a href="{{ relative_root_path }}/" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Extras <span class="caret"></span></a>
6773
<ul class="dropdown-menu">
6874
<li><a href="{{ relative_root_path }}{% link reference.md %}">Reference</a></li>
69-
{% for extra in site.extras %}
75+
{% for lesson_extra in lesson_extras %}
76+
{% if site.extras_order %}
77+
{% assign extra = site.extras | where: "slug", lesson_extra | first %}
78+
{% else %}
79+
{% assign extra = lesson_extra %}
80+
{% endif %}
7081
<li><a href="{{ relative_root_path }}{{ extra.url }}">{{ extra.title }}</a></li>
7182
{% endfor %}
7283
</ul>

_includes/syllabus.html

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,21 @@
44
Display syllabus in tabular form.
55
Days are displayed if at least one episode has 'start = true'.
66
{% endcomment %}
7+
8+
{% include manual_episode_order.html %}
9+
710
<div class="syllabus">
811
<h2 id="schedule">Schedule</h2>
912

1013
{% assign lesson_number = 0 %}
1114
{% assign day = 0 %}
1215
{% assign multiday = false %}
13-
{% for episode in site.episodes %}
16+
{% for lesson_episode in lesson_episodes %}
17+
{% if site.episode_order %}
18+
{% assign episode = site.episodes | where: "slug", lesson_episode | first %}
19+
{% else %}
20+
{% assign episode = lesson_episode %}
21+
{% endif %}
1422
{% if episode.start %}{% assign multiday = true %}{% break %}{% endif %}
1523
{% endfor %}
1624
{% assign current = site.start_time %}
@@ -22,7 +30,12 @@ <h2 id="schedule">Schedule</h2>
2230
<td class="col-md-3"><a href="{{ relative_root_path }}{% link setup.md %}">Setup</a></td>
2331
<td class="col-md-7">Download files required for the lesson</td>
2432
</tr>
25-
{% for episode in site.episodes %}
33+
{% for lesson_episode in lesson_episodes %}
34+
{% if site.episode_order %}
35+
{% assign episode = site.episodes | where: "slug", lesson_episode | first %}
36+
{% else %}
37+
{% assign episode = lesson_episode %}
38+
{% endif %}
2639
{% if episode.start %} {% comment %} Starting a new day? {% endcomment %}
2740
{% assign day = day | plus: 1 %}
2841
{% if day > 1 %} {% comment %} If about to start day 2 or later, show finishing time for previous day {% endcomment %}

bin/boilerplate/_extras/figures.md

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,17 @@ title: Figures
33
---
44

55
{% include base_path.html %}
6+
{% include manual_episode_order.html %}
67

78
<script>
89
window.onload = function() {
910
var lesson_episodes = [
10-
{% for episode in site.episodes %}
11+
{% for lesson_episode in lesson_episodes %}
12+
{% if site.episode_order %}
13+
{% assign episode = site.episodes | where: "slug", lesson_episode | first %}
14+
{% else %}
15+
{% assign episode = lesson_episode %}
16+
{% endif %}
1117
"{{ episode.url }}"{% unless forloop.last %},{% endunless %}
1218
{% endfor %}
1319
];
@@ -58,10 +64,15 @@ title: Figures
5864
}
5965
}
6066
</script>
61-
{% comment %}
62-
Create anchor for each one of the episodes.
63-
{% endcomment %}
64-
{% for episode in site.episodes %}
67+
68+
{% comment %} Create anchor for each one of the episodes. {% endcomment %}
69+
70+
{% for lesson_episode in lesson_episodes %}
71+
{% if site.episode_order %}
72+
{% assign episode = site.episodes | where: "slug", lesson_episode | first %}
73+
{% else %}
74+
{% assign episode = lesson_episode %}
75+
{% endif %}
6576
<article id="{{ episode.url }}" class="figures"></article>
6677
{% endfor %}
6778

0 commit comments

Comments
 (0)