rsg-theme 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/_boilerplate/404.md +25 -0
- data/_boilerplate/CODE_OF_CONDUCT.md +12 -0
- data/_boilerplate/LICENSE.md +83 -0
- data/_boilerplate/USAGE.md +86 -0
- data/_boilerplate/aio.md +13 -0
- data/_boilerplate/index.md +169 -0
- data/_includes/aio-script.md +25 -0
- data/_includes/all_keypoints.html +31 -0
- data/_includes/base_path.html +41 -0
- data/_includes/carpentries.html +70 -0
- data/_includes/custom-schedule.html +72 -0
- data/_includes/episode_break.html +15 -0
- data/_includes/episode_keypoints.html +18 -0
- data/_includes/episode_navbar.html +44 -0
- data/_includes/episode_overview.html +76 -0
- data/_includes/episode_title.html +9 -0
- data/_includes/favicons.html +27 -0
- data/_includes/gh_variables.html +45 -0
- data/_includes/github-ribbon.html +1 -0
- data/_includes/javascript.html +55 -0
- data/_includes/lesson_footer.html +52 -0
- data/_includes/life_cycle.html +34 -0
- data/_includes/links.md +46 -0
- data/_includes/main_title.html +14 -0
- data/_includes/manual_episode_order.html +116 -0
- data/_includes/navbar.html +113 -0
- data/_includes/rsg/intro.html +15 -0
- data/_includes/rsg/setup.html +6 -0
- data/_includes/rsg/who.html +40 -0
- data/_includes/syllabus.html +126 -0
- data/_includes/warning-curriculum.html +8 -0
- data/_includes/warning-flavor.html +7 -0
- data/_includes/workshop_ad.html +47 -0
- data/_includes/workshop_calendar.html +8 -0
- data/_includes/workshop_footer.html +27 -0
- data/_layouts/base.html +54 -0
- data/_layouts/break.html +10 -0
- data/_layouts/episode.html +11 -0
- data/_layouts/lesson.html +8 -0
- data/_layouts/page.html +7 -0
- data/_layouts/reference.html +6 -0
- data/_layouts/schedule.html +9 -0
- data/_layouts/workshop.html +56 -0
- data/assets/css/bootstrap-theme.css +587 -0
- data/assets/css/bootstrap-theme.css.map +1 -0
- data/assets/css/bootstrap.css +6834 -0
- data/assets/css/bootstrap.css.map +1 -0
- data/assets/css/fonts.css +13 -0
- data/assets/css/katex.min.css +1 -0
- data/assets/css/lesson.scss +417 -0
- data/assets/css/syntax.css +69 -0
- data/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/assets/fonts/glyphicons-halflings-regular.svg +288 -0
- data/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/assets/fonts/ubuntu-v11-latin-regular.eot +0 -0
- data/assets/fonts/ubuntu-v11-latin-regular.svg +363 -0
- data/assets/fonts/ubuntu-v11-latin-regular.ttf +0 -0
- data/assets/fonts/ubuntu-v11-latin-regular.woff +0 -0
- data/assets/fonts/ubuntu-v11-latin-regular.woff2 +0 -0
- data/assets/js/anchor.min.js +9 -0
- data/assets/js/bootstrap.min.js +6 -0
- data/assets/js/jquery.min.js +2 -0
- data/assets/js/jquery.min.map +1 -0
- data/assets/js/katex-auto-render.min.js +1 -0
- data/assets/js/katex.min.js +1 -0
- data/assets/js/lesson.js +56 -0
- data/bin/boilerplate/_extras/figures.md +79 -0
- metadata +154 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
For some reason, the relative_root_path seems out of scope in this file, so we
|
|
3
|
+
need to re-assign it here
|
|
4
|
+
{% endcomment %}
|
|
5
|
+
|
|
6
|
+
{% include base_path.html %}
|
|
7
|
+
|
|
8
|
+
{% comment %}
|
|
9
|
+
Navigation bar for an episode.
|
|
10
|
+
{% endcomment %}
|
|
11
|
+
|
|
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
|
+
|
|
18
|
+
<div class="row">
|
|
19
|
+
<div class="col-xs-1">
|
|
20
|
+
<h3 class="text-left">
|
|
21
|
+
{% if page.layout == "schedule" %}
|
|
22
|
+
<a href="{{ relative_root_path }}/"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span><span class="sr-only">lesson home</span></a>
|
|
23
|
+
{% else if previous_episode %}
|
|
24
|
+
<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>
|
|
25
|
+
{% else %}
|
|
26
|
+
<a href="{{ relative_root_path }}/"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span><span class="sr-only">lesson home</span></a>
|
|
27
|
+
{% endif %}
|
|
28
|
+
</h3>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="col-xs-10">
|
|
31
|
+
{% if include.episode_navbar_title %}
|
|
32
|
+
<h3 class="maintitle"><a href="{{ relative_root_path }}/{{page.lesson_schedule_slug}}">{{ page.lesson_title }}</a></h3>
|
|
33
|
+
{% endif %}
|
|
34
|
+
</div>
|
|
35
|
+
<div class="col-xs-1">
|
|
36
|
+
<h3 class="text-right">
|
|
37
|
+
{% if next_episode %}
|
|
38
|
+
<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>
|
|
39
|
+
{% else %}
|
|
40
|
+
<a href="{{ relative_root_path }}/"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span><span class="sr-only">lesson home</span></a>
|
|
41
|
+
{% endif %}
|
|
42
|
+
</h3>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{% comment %}
|
|
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.
|
|
17
|
+
{% 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
|
+
|
|
44
|
+
<blockquote class="objectives">
|
|
45
|
+
<h2>Overview</h2>
|
|
46
|
+
|
|
47
|
+
<div class="row">
|
|
48
|
+
<div class="col-md-3">
|
|
49
|
+
<strong>Teaching:</strong> {{ teaching_time }} min
|
|
50
|
+
<br/>
|
|
51
|
+
<strong>Exercises:</strong> {{ exercise_time }} min
|
|
52
|
+
</div>
|
|
53
|
+
<div class="col-md-9">
|
|
54
|
+
<strong>Questions</strong>
|
|
55
|
+
<ul>
|
|
56
|
+
{% for question in episode_questions %}
|
|
57
|
+
<li>{{ question|markdownify }}</li>
|
|
58
|
+
{% endfor %}
|
|
59
|
+
</ul>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<div class="row">
|
|
64
|
+
<div class="col-md-3">
|
|
65
|
+
</div>
|
|
66
|
+
<div class="col-md-9">
|
|
67
|
+
<strong>Objectives</strong>
|
|
68
|
+
<ul>
|
|
69
|
+
{% for objective in episode_objectives %}
|
|
70
|
+
<li>{{ objective|markdownify }}</li>
|
|
71
|
+
{% endfor %}
|
|
72
|
+
</ul>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
</blockquote>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{% assign favicon_url = relative_root_path | append: '/assets/favicons/' | append: site.carpentry %}
|
|
2
|
+
|
|
3
|
+
{% if site.carpentry == 'rsg' %}
|
|
4
|
+
{% assign carpentry = 'Research Software Group' %}
|
|
5
|
+
{% endif %}
|
|
6
|
+
|
|
7
|
+
<!-- Favicons for everyone -->
|
|
8
|
+
<link rel="apple-touch-icon-precomposed" sizes="57x57" href="{{ favicon_url }}/apple-touch-icon-57x57.png" />
|
|
9
|
+
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="{{ favicon_url }}/apple-touch-icon-114x114.png" />
|
|
10
|
+
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="{{ favicon_url }}/apple-touch-icon-72x72.png" />
|
|
11
|
+
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ favicon_url }}/apple-touch-icon-144x144.png" />
|
|
12
|
+
<link rel="apple-touch-icon-precomposed" sizes="60x60" href="{{ favicon_url }}/apple-touch-icon-60x60.png" />
|
|
13
|
+
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="{{ favicon_url }}/apple-touch-icon-120x120.png" />
|
|
14
|
+
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="{{ favicon_url }}/apple-touch-icon-76x76.png" />
|
|
15
|
+
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="{{ favicon_url }}/apple-touch-icon-152x152.png" />
|
|
16
|
+
<link rel="icon" type="image/png" href="{{ favicon_url }}/favicon-196x196.png" sizes="196x196" />
|
|
17
|
+
<link rel="icon" type="image/png" href="{{ favicon_url }}/favicon-96x96.png" sizes="96x96" />
|
|
18
|
+
<link rel="icon" type="image/png" href="{{ favicon_url }}/favicon-32x32.png" sizes="32x32" />
|
|
19
|
+
<link rel="icon" type="image/png" href="{{ favicon_url }}/favicon-16x16.png" sizes="16x16" />
|
|
20
|
+
<link rel="icon" type="image/png" href="{{ favicon_url }}/favicon-128.png" sizes="128x128" />
|
|
21
|
+
<meta name="application-name" content="{{ carpentry }} - {{ site.title }}"/>
|
|
22
|
+
<meta name="msapplication-TileColor" content="#FFFFFF" />
|
|
23
|
+
<meta name="msapplication-TileImage" content="{{ favicon_url }}/mstile-144x144.png" />
|
|
24
|
+
<meta name="msapplication-square70x70logo" content="{{ favicon_url }}/mstile-70x70.png" />
|
|
25
|
+
<meta name="msapplication-square150x150logo" content="{{ favicon_url }}/mstile-150x150.png" />
|
|
26
|
+
<meta name="msapplication-wide310x150logo" content="{{ favicon_url }}/mstile-310x150.png" />
|
|
27
|
+
<meta name="msapplication-square310x310logo" content="{{ favicon_url }}/mstile-310x310.png" />
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
When rendering websites locally, `site.github.url` doesn't get resolved properly
|
|
3
|
+
unless a GitHub Personal Access Token is set up and available in the
|
|
4
|
+
environment. This leads to warnings and errors when trying to serve the site
|
|
5
|
+
locally. To work around this, we use the `jekyll.environment` variable which is
|
|
6
|
+
set to `development` when rendering the site locally, and set to `production` on
|
|
7
|
+
GitHub where `site.github.url` is defined.
|
|
8
|
+
{% endcomment %}
|
|
9
|
+
|
|
10
|
+
{% if jekyll.environment == "production" %}
|
|
11
|
+
|
|
12
|
+
{% comment %}
|
|
13
|
+
First, get the name of the repository
|
|
14
|
+
{% endcomment %}
|
|
15
|
+
{% assign repo_name = site.github.repository_name %}
|
|
16
|
+
|
|
17
|
+
{% comment %}
|
|
18
|
+
`site.github.public_repositories` contains comprehensive information for all public repositories for the organization. We use `where` to extract the part
|
|
19
|
+
of the metadata that is relevant to the present repository.
|
|
20
|
+
{% endcomment %}
|
|
21
|
+
{% assign repo_info = site.github.public_repositories | where: "name", repo_name %}
|
|
22
|
+
|
|
23
|
+
{% comment %}
|
|
24
|
+
Now, we can extract the default branch for the repo
|
|
25
|
+
{% endcomment %}
|
|
26
|
+
{% assign default_branch = repo_info[0].default_branch %}
|
|
27
|
+
|
|
28
|
+
{% comment %}
|
|
29
|
+
Other variables requested by the template
|
|
30
|
+
{% endcomment %}
|
|
31
|
+
{% assign repo_url = site.github.repository_url %}
|
|
32
|
+
{% assign search_domain_url = site.github.url %}
|
|
33
|
+
{% assign project_title = site.github.project_title %}
|
|
34
|
+
{% assign source_branch = site.github.source.branch %}
|
|
35
|
+
|
|
36
|
+
{% elsif jekyll.environment == "development" %}
|
|
37
|
+
|
|
38
|
+
{% assign repo_name = "" %}
|
|
39
|
+
{% assign repo_url = "" %}
|
|
40
|
+
{% assign default_branch = "" %}
|
|
41
|
+
{% assign search_domain_url = "" %}
|
|
42
|
+
{% assign project_title = "" %}
|
|
43
|
+
{% assign source_branch = "" %}
|
|
44
|
+
|
|
45
|
+
{% endif %}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<span id="github-ribbon"><a href="{{site.workshop_repo}}">Find us on GitHub</a></span>
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
JavaScript used in lesson and workshop pages.
|
|
3
|
+
{% endcomment %}
|
|
4
|
+
<script src="{{ relative_root_path }}/assets/js/jquery.min.js"></script>
|
|
5
|
+
<script src="{{ relative_root_path }}/assets/js/bootstrap.min.js"></script>
|
|
6
|
+
<script src="{{ relative_root_path }}/assets/js/lesson.js"></script>
|
|
7
|
+
|
|
8
|
+
{% if site.kind == "lesson" %}
|
|
9
|
+
<!-- Matomo -->
|
|
10
|
+
<script>
|
|
11
|
+
var _paq = window._paq = window._paq || [];
|
|
12
|
+
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
|
13
|
+
_paq.push(["setDocumentTitle", document.domain + "/" + document.title]);
|
|
14
|
+
_paq.push(["setDomains", ["*.lessons.carpentries.org","*.datacarpentry.github.io","*.datacarpentry.org","*.librarycarpentry.github.io","*.librarycarpentry.org","*.swcarpentry.github.io"]]);
|
|
15
|
+
_paq.push(["setDoNotTrack", true]);
|
|
16
|
+
_paq.push(["disableCookies"]);
|
|
17
|
+
_paq.push(['trackPageView']);
|
|
18
|
+
_paq.push(['enableLinkTracking']);
|
|
19
|
+
(function() {
|
|
20
|
+
var u="https://carpentries.matomo.cloud/";
|
|
21
|
+
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
|
22
|
+
_paq.push(['setSiteId', '1']);
|
|
23
|
+
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
|
24
|
+
g.async=true; g.src='//cdn.matomo.cloud/carpentries.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s);
|
|
25
|
+
})();
|
|
26
|
+
</script>
|
|
27
|
+
<!-- End Matomo Code -->
|
|
28
|
+
{% endif %}
|
|
29
|
+
|
|
30
|
+
{% if page.math %}
|
|
31
|
+
<script src="{{ relative_root_path }}/assets/js/katex.min.js"></script>
|
|
32
|
+
<script>
|
|
33
|
+
options={
|
|
34
|
+
delimiters: [
|
|
35
|
+
{left: "$$", right: "$$", display: true},
|
|
36
|
+
{left: "$", right: "$", display: false},
|
|
37
|
+
{left: "\\(", right: "\\)", display: false},
|
|
38
|
+
{left: "\\[", right: "\\]", display: true}
|
|
39
|
+
],
|
|
40
|
+
output: "mathml"
|
|
41
|
+
}
|
|
42
|
+
</script>
|
|
43
|
+
<script src="{{ relative_root_path }}/assets/js/katex-auto-render.min.js" onload="renderMathInElement(document.body, options)"></script>
|
|
44
|
+
{% endif %}
|
|
45
|
+
|
|
46
|
+
{%- comment -%}
|
|
47
|
+
AnchorJS: A JavaScript utility for adding deep anchor links
|
|
48
|
+
https://github.com/bryanbraun/anchorjs
|
|
49
|
+
https://cdn.jsdelivr.net/npm/anchor-js/anchor.min.js
|
|
50
|
+
{%- endcomment -%}
|
|
51
|
+
|
|
52
|
+
<script src="{{ relative_root_path }}/assets/js/anchor.min.js"></script>
|
|
53
|
+
<script>
|
|
54
|
+
anchors.add();
|
|
55
|
+
</script>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
Footer for lesson pages.
|
|
3
|
+
{% endcomment %}
|
|
4
|
+
|
|
5
|
+
{% include gh_variables.html %}
|
|
6
|
+
|
|
7
|
+
<footer>
|
|
8
|
+
<hr/>
|
|
9
|
+
<div class="row">
|
|
10
|
+
<div class="col-md-6 license" id="license-info" align="left">
|
|
11
|
+
{% if site.carpentry == "swc" %}
|
|
12
|
+
Licensed under <a href="{{ site.cc_by_human }}">CC-BY 4.0</a> 2018–{{ 'now' | date: "%Y" }}
|
|
13
|
+
by <a href="{{ site.carpentries_site }}">The Carpentries</a>
|
|
14
|
+
<br>
|
|
15
|
+
Licensed under <a href="{{ site.cc_by_human }}">CC-BY 4.0</a> 2016–2018
|
|
16
|
+
by <a href="{{ site.swc_site }}">Software Carpentry Foundation</a>
|
|
17
|
+
{% elsif site.carpentry == "dc" %}
|
|
18
|
+
Licensed under <a href="{{ site.cc_by_human }}">CC-BY 4.0</a> 2018–{{ 'now' | date: "%Y" }}
|
|
19
|
+
by <a href="{{ site.carpentries_site }}">The Carpentries</a>
|
|
20
|
+
<br>
|
|
21
|
+
Licensed under <a href="{{ site.cc_by_human }}">CC-BY 4.0</a> 2016–2018
|
|
22
|
+
by <a href="{{ site.dc_site }}">Data Carpentry</a>
|
|
23
|
+
{% elsif site.carpentry == "lc" %}
|
|
24
|
+
Licensed under <a href="{{ site.cc_by_human }}">CC-BY 4.0</a> 2016–{{ 'now' | date: "%Y" }}
|
|
25
|
+
by <a href="{{ site.lc_site }}">Library Carpentry</a>
|
|
26
|
+
{% elsif site.carpentry == "cp" %}
|
|
27
|
+
Licensed under <a href="{{ site.cc_by_human }}">CC-BY 4.0</a> 2018–{{ 'now' | date: "%Y" }}
|
|
28
|
+
by <a href="{{ site.carpentries_site }}">The Carpentries</a>
|
|
29
|
+
{% endif %}
|
|
30
|
+
</div>
|
|
31
|
+
<div class="col-md-6 help-links" align="right">
|
|
32
|
+
{% if page.source %}
|
|
33
|
+
{% if page.source == "Rmd" %}
|
|
34
|
+
<a href="{{repo_url}}/edit/{{ default_branch }}/{{page.path|replace: "_episodes", "_episodes_rmd" | replace: ".md", ".Rmd"}}" data-checker-ignore>Edit on GitHub</a>
|
|
35
|
+
{% endif %}
|
|
36
|
+
{% else %}
|
|
37
|
+
<a href="{{repo_url}}/edit/{{ default_branch }}/{{page.path}}" data-checker-ignore>Edit on GitHub</a>
|
|
38
|
+
{% endif %}
|
|
39
|
+
/
|
|
40
|
+
<a href="{{ repo_url }}/blob/{{ source_branch }}/CONTRIBUTING.md" data-checker-ignore>Contributing</a>
|
|
41
|
+
/
|
|
42
|
+
<a href="{{ repo_url }}/">Source</a>
|
|
43
|
+
/
|
|
44
|
+
<a href="{{ repo_url }}/blob/{{ source_branch }}/CITATION" data-checker-ignore>Cite</a>
|
|
45
|
+
/
|
|
46
|
+
<a href="mailto:{{ site.email }}">Contact</a>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
<p class="text-muted text-right">
|
|
50
|
+
<small><i>Using <a href="https://github.com/Southampton-RSG-Training/rsg-theme">The RSG theme</a> — Site last built on: {{ site.time }}.</i></small>
|
|
51
|
+
</p>
|
|
52
|
+
</footer>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
{% if site.life_cycle == "pre-alpha" %}
|
|
3
|
+
|
|
4
|
+
<div class="panel panel-default life-cycle">
|
|
5
|
+
<div id="life-cycle" class="panel-body pre-alpha">
|
|
6
|
+
This lesson is still being designed and assembled (Pre-Alpha version)
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
{% elsif site.life_cycle == "alpha" %}
|
|
12
|
+
|
|
13
|
+
<div class="panel panel-default life-cycle">
|
|
14
|
+
<div id="life-cycle" class="panel-body alpha">
|
|
15
|
+
This lesson is in the early stages of development (Alpha version)
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
{% elsif site.life_cycle == "beta" %}
|
|
21
|
+
|
|
22
|
+
<div class="panel panel-default life-cycle">
|
|
23
|
+
<div id="life-cycle" class="panel-body beta">
|
|
24
|
+
This lesson is being piloted (Beta version)
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
{% elsif site.life_cycle == "stable" %}
|
|
29
|
+
|
|
30
|
+
{% comment %}
|
|
31
|
+
We don't do anything special for now
|
|
32
|
+
{% endcomment %}
|
|
33
|
+
|
|
34
|
+
{% endif %}
|
data/_includes/links.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{% include base_path.html %}
|
|
2
|
+
[cc-by-human]: https://creativecommons.org/licenses/by/4.0/
|
|
3
|
+
[cc-by-legal]: https://creativecommons.org/licenses/by/4.0/legalcode
|
|
4
|
+
[ci]: http://communityin.org/
|
|
5
|
+
[coc-reporting]: https://docs.carpentries.org/topic_folders/policies/incident-reporting.html
|
|
6
|
+
[coc]: https://docs.carpentries.org/topic_folders/policies/code-of-conduct.html
|
|
7
|
+
[concept-maps]: https://carpentries.github.io/instructor-training/05-memory/
|
|
8
|
+
[contrib-covenant]: https://contributor-covenant.org/
|
|
9
|
+
[contributing]: {{ repo_url }}/blob/{{ source_branch }}/CONTRIBUTING.md
|
|
10
|
+
[cran-checkpoint]: https://cran.r-project.org/package=checkpoint
|
|
11
|
+
[cran-knitr]: https://cran.r-project.org/package=knitr
|
|
12
|
+
[cran-stringr]: https://cran.r-project.org/package=stringr
|
|
13
|
+
[dc-lessons]: http://www.datacarpentry.org/lessons/
|
|
14
|
+
[email]: mailto:team@carpentries.org
|
|
15
|
+
[github-importer]: https://import2.github.com/
|
|
16
|
+
[importer]: https://github.com/new/import
|
|
17
|
+
[jekyll-collection]: https://jekyllrb.com/docs/collections/
|
|
18
|
+
[jekyll-install]: https://jekyllrb.com/docs/installation/
|
|
19
|
+
[jekyll-windows]: http://jekyll-windows.juthilo.com/
|
|
20
|
+
[jekyll]: https://jekyllrb.com/
|
|
21
|
+
[jupyter]: https://jupyter.org/
|
|
22
|
+
[kramdown]: https://kramdown.gettalong.org/
|
|
23
|
+
[lc-lessons]: https://librarycarpentry.org/lessons/
|
|
24
|
+
[lesson-coc]: {{ relative_root_path }}
|
|
25
|
+
[lesson-example]: https://carpentries.github.io/lesson-example/
|
|
26
|
+
[lesson-license]: {{ relative_root_path }}
|
|
27
|
+
[lesson-mainpage]: {{ relative_root_path }}
|
|
28
|
+
[mit-license]: https://opensource.org/licenses/mit-license.html
|
|
29
|
+
[morea]: https://morea-framework.github.io/
|
|
30
|
+
[numfocus]: https://numfocus.org/
|
|
31
|
+
[osi]: https://opensource.org
|
|
32
|
+
[pandoc]: https://pandoc.org/
|
|
33
|
+
[paper-now]: https://github.com/PeerJ/paper-now
|
|
34
|
+
[python-gapminder]: https://swcarpentry.github.io/python-novice-gapminder/
|
|
35
|
+
[pyyaml]: https://pypi.org/project/PyYAML/
|
|
36
|
+
[r-markdown]: https://rmarkdown.rstudio.com/
|
|
37
|
+
[rstudio]: https://www.rstudio.com/
|
|
38
|
+
[ruby-install-guide]: https://www.ruby-lang.org/en/downloads/
|
|
39
|
+
[ruby-installer]: https://rubyinstaller.org/
|
|
40
|
+
[rubygems]: https://rubygems.org/pages/download/
|
|
41
|
+
[styles]: https://github.com/carpentries/styles/
|
|
42
|
+
[swc-lessons]: https://software-carpentry.org/lessons/
|
|
43
|
+
[swc-releases]: https://github.com/swcarpentry/swc-releases
|
|
44
|
+
[training]: https://carpentries.github.io/instructor-training/
|
|
45
|
+
[workshop-repo]: {{ site.workshop_repo }}
|
|
46
|
+
[yaml]: http://yaml.org/
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
Main title for lesson pages.
|
|
3
|
+
{% endcomment %}
|
|
4
|
+
|
|
5
|
+
{% include base_path.html %}
|
|
6
|
+
|
|
7
|
+
{% if site.kind == "lesson" %}
|
|
8
|
+
<h1 class="maintitle"><a href="{{ relative_root_path }}">{{ site.title }}</a>{% if page.title %}: {{ page.title }}{% endif %}</h1>
|
|
9
|
+
|
|
10
|
+
{% else %}
|
|
11
|
+
|
|
12
|
+
<h1 class="maintitle">{{ page.title }}</h1>
|
|
13
|
+
|
|
14
|
+
{% endif %}
|
|
@@ -0,0 +1,116 @@
|
|
|
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 will not 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 manually, 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 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
|
+
{% comment %}
|
|
54
|
+
Manual ordering of Episodes begins here
|
|
55
|
+
{% endcomment %}
|
|
56
|
+
|
|
57
|
+
{% if site.episode_order %}
|
|
58
|
+
{% assign lesson_episodes = site.episode_order %}
|
|
59
|
+
{% else %}
|
|
60
|
+
{% assign lesson_episodes = site.episodes %}
|
|
61
|
+
{% endif %}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
{% comment %}
|
|
65
|
+
If 'episode_order' is defined, we need to determine
|
|
66
|
+
- previous episode object ('previous_episode')
|
|
67
|
+
- and next episode object ('next_episode')
|
|
68
|
+
{% endcomment %}
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
{% if site.episode_order %}
|
|
72
|
+
{% for lesson_episode in lesson_episodes %}
|
|
73
|
+
|
|
74
|
+
{% comment %}
|
|
75
|
+
We iterate over the specified lesson episodes using
|
|
76
|
+
a 'for' loop because we can use
|
|
77
|
+
'forloop.first', 'forloop.last', and 'forloop.index0'.
|
|
78
|
+
{% endcomment %}
|
|
79
|
+
|
|
80
|
+
{% unless lesson_episode == page.slug %} {% continue %} {% endunless %}
|
|
81
|
+
|
|
82
|
+
{% if forloop.first %}
|
|
83
|
+
{% assign previous_episode = nil %}
|
|
84
|
+
{% else %}
|
|
85
|
+
{% assign p_idx = forloop.index0 | minus: 1 %}
|
|
86
|
+
{% assign p_name = lesson_episodes[p_idx] %}
|
|
87
|
+
{% assign previous_episode = site.episodes | where: "slug", p_name | first %}
|
|
88
|
+
{% endif %}
|
|
89
|
+
|
|
90
|
+
{% if forloop.last == true %}
|
|
91
|
+
{% assign next_episode = nil %}
|
|
92
|
+
{% else %}
|
|
93
|
+
{% assign n_idx = forloop.index0 | plus: 1 %}
|
|
94
|
+
{% assign n_name = lesson_episodes[n_idx] %}
|
|
95
|
+
{% assign next_episode = site.episodes | where: "slug", n_name | first %}
|
|
96
|
+
{% endif %}
|
|
97
|
+
{% endfor %}
|
|
98
|
+
{% else %}
|
|
99
|
+
{% assign previous_episode = page.previous %}
|
|
100
|
+
{% assign next_episode = page.next %}
|
|
101
|
+
{% endif %}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
{% comment %}
|
|
105
|
+
Manual ordering of Extras begins here
|
|
106
|
+
{% endcomment %}
|
|
107
|
+
|
|
108
|
+
{% if site.extras_order %}
|
|
109
|
+
{% assign lesson_extras = site.extras_order %}
|
|
110
|
+
{% else %}
|
|
111
|
+
{% assign lesson_extras = site.extras %}
|
|
112
|
+
{% endif %}
|
|
113
|
+
|
|
114
|
+
{% comment %}
|
|
115
|
+
We do not need to determine "previous" or "next" extra.
|
|
116
|
+
{% endcomment %}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
Lesson navigation bar.
|
|
3
|
+
{% endcomment %}
|
|
4
|
+
|
|
5
|
+
{% include gh_variables.html %}
|
|
6
|
+
{% include manual_episode_order.html %}
|
|
7
|
+
|
|
8
|
+
<nav class="navbar navbar-default">
|
|
9
|
+
<div class="container-fluid">
|
|
10
|
+
<div class="navbar-header">
|
|
11
|
+
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
|
|
12
|
+
<span class="sr-only">Toggle navigation</span>
|
|
13
|
+
<span class="icon-bar"></span>
|
|
14
|
+
<span class="icon-bar"></span>
|
|
15
|
+
<span class="icon-bar"></span>
|
|
16
|
+
</button>
|
|
17
|
+
|
|
18
|
+
{% comment %} Select what logo to display. {% endcomment %}
|
|
19
|
+
{% if site.carpentry == "rsg" %}
|
|
20
|
+
<a href="{{ site.rsg_site }}" class="pull-left">
|
|
21
|
+
<img class="navbar-logo" src="{{ relative_root_path }}{% link /assets/img/home-logo.png %}" alt="RSG logo" />
|
|
22
|
+
{% endif %}
|
|
23
|
+
|
|
24
|
+
{% comment %} Always show link to home page. {% endcomment %}
|
|
25
|
+
<a class="navbar-brand" href="{{ relative_root_path }}">Home</a>
|
|
26
|
+
|
|
27
|
+
</div>
|
|
28
|
+
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
|
29
|
+
<ul class="nav navbar-nav">
|
|
30
|
+
|
|
31
|
+
{% comment %} Always show code of conduct. {% endcomment %}
|
|
32
|
+
<li><a href="{{ relative_root_path }}">Code of Conduct</a></li>
|
|
33
|
+
|
|
34
|
+
{% if site.kind == "lesson" %}
|
|
35
|
+
{% comment %} Show setup instructions. {% endcomment %}
|
|
36
|
+
<li><a href="{{ relative_root_path }}{% link setup.md %}">Setup</a></li>
|
|
37
|
+
|
|
38
|
+
{% comment %} Show lesson episodes for lessons. {% endcomment %}
|
|
39
|
+
{% if lesson_episodes.size > 0 %}
|
|
40
|
+
<li class="dropdown">
|
|
41
|
+
<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>
|
|
42
|
+
<ul class="dropdown-menu">
|
|
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
|
+
<li><a href="{{ relative_root_path }}{{ episode.url }}">{{ episode.title }}</a></li>
|
|
50
|
+
{% endfor %}
|
|
51
|
+
<li role="separator" class="divider"></li>
|
|
52
|
+
<li><a href="{{ relative_root_path }}">All in one page (Beta)</a></li>
|
|
53
|
+
</ul>
|
|
54
|
+
</li>
|
|
55
|
+
{% endif %}
|
|
56
|
+
{% endif %}
|
|
57
|
+
|
|
58
|
+
{% comment %} Add navbar for workshops {% endcomment %}
|
|
59
|
+
{% if site.kind == "workshop" %}
|
|
60
|
+
<li class="dropdown">
|
|
61
|
+
{% comment %} Create the "Lessons" entry in the navbar {% endcomment %}
|
|
62
|
+
<a href="{{ relative_root_path }}/" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Lessons<span class="caret"></span></a>
|
|
63
|
+
{% comment %} Add each lesson into the dropdown on the navbar {% endcomment %}
|
|
64
|
+
<ul class="dropdown-menu">
|
|
65
|
+
{% for lesson in site.lessons %}
|
|
66
|
+
<li><a class=dropdown-item" href="{{ lesson.gh-name}}-schedule">{{ lesson.title }}</a></li>
|
|
67
|
+
<ul class=dropdown-submenu>
|
|
68
|
+
{% for episode in lesson.episodes %}
|
|
69
|
+
<li><a class=dropdown-item> big nonce </a></li>
|
|
70
|
+
{% endfor %}
|
|
71
|
+
|
|
72
|
+
</ul>
|
|
73
|
+
{% endfor %}
|
|
74
|
+
</ul>
|
|
75
|
+
</li>
|
|
76
|
+
{% endif %}
|
|
77
|
+
|
|
78
|
+
{% comment %} Show extras for lessons or if this is the main workshop-template repo (where they contain documentation). {% endcomment %}
|
|
79
|
+
{% if site.kind == "lesson" %}
|
|
80
|
+
<li class="dropdown">
|
|
81
|
+
<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>
|
|
82
|
+
<ul class="dropdown-menu">
|
|
83
|
+
<li><a href="{{ relative_root_path }}">Reference</a></li>
|
|
84
|
+
{% for lesson_extra in lesson_extras %}
|
|
85
|
+
{% if site.extras_order %}
|
|
86
|
+
{% assign extra = site.extras | where: "slug", lesson_extra | first %}
|
|
87
|
+
{% else %}
|
|
88
|
+
{% assign extra = lesson_extra %}
|
|
89
|
+
{% endif %}
|
|
90
|
+
<li><a href="{{ relative_root_path }}{{ extra.url }}">{{ extra.title }}</a></li>
|
|
91
|
+
{% endfor %}
|
|
92
|
+
</ul>
|
|
93
|
+
</li>
|
|
94
|
+
{% endif %}
|
|
95
|
+
|
|
96
|
+
{% comment %} Always show license. {% endcomment %}
|
|
97
|
+
<li><a href="{{ relative_root_path }}">License</a></li>
|
|
98
|
+
{% if page.source %}
|
|
99
|
+
{% if page.source == "Rmd" %}
|
|
100
|
+
<li><a href="{{repo_url}}/" data-checker-ignore>Improve this page <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a></li>
|
|
101
|
+
{% endif %}
|
|
102
|
+
{% else %}
|
|
103
|
+
<li><a href="{{repo_url}}/" data-checker-ignore>Improve this page <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a></li>
|
|
104
|
+
{% endif %}
|
|
105
|
+
</ul>
|
|
106
|
+
<form class="navbar-form navbar-right" role="search" id="search" onsubmit="google_search(); return false;">
|
|
107
|
+
<div class="form-group">
|
|
108
|
+
<input type="text" id="google-search" placeholder="Search..." aria-label="Google site search">
|
|
109
|
+
</div>
|
|
110
|
+
</form>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</nav>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<p>
|
|
2
|
+
<a href="{{site.dc_site}}">Data Carpentry</a> develops and teaches workshops on the fundamental data skills needed to conduct
|
|
3
|
+
research. Its target audience is researchers who have little to no prior computational experience,
|
|
4
|
+
and its lessons are domain specific, building on learners' existing knowledge to enable them to quickly
|
|
5
|
+
apply skills learned to their own research.
|
|
6
|
+
Participants will be encouraged to help one another
|
|
7
|
+
and to apply what they have learned to their own research problems.
|
|
8
|
+
</p>
|
|
9
|
+
<p align="center">
|
|
10
|
+
<em>
|
|
11
|
+
For more information on what we teach and why,
|
|
12
|
+
please see our paper
|
|
13
|
+
"<a href="http://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510">Good Enough Practices for Scientific Computing</a>".
|
|
14
|
+
</em>
|
|
15
|
+
</p>
|