hematite 0.1.9 → 0.1.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6b5c50c658bf984e5c096e0279fd2372b06c5d3fad9bb56eb3984c2218fe1aab
4
- data.tar.gz: d945cf8f34d17d8b9dc6468e6f2c54d2a19708890d4d54f5411d60b3c3b190df
3
+ metadata.gz: 3bf0eaea458e2c4fba03dbcc759aaa04eb811832e1850b210d5e5a378fab2526
4
+ data.tar.gz: 80dcbb081d5342365d4f119ffcb6f1dfd2be5b6533e23b0c23a18bde93709b54
5
5
  SHA512:
6
- metadata.gz: 7a28e7505ec67d3e900d7fe85cd8d7cacd6dde237aca06a7b0f27146959d14f06d2760d2f478676513fe076e18432ef33b7bda54038816eb88801b81bab754d8
7
- data.tar.gz: 3506d2b3ee5aa0dd81343e8f9a2b08633348ff6692de35a42851498c91a33c12c207729c0971458aff51a1924fc0f83a792bbc3b75052405263a357f0d7717b2
6
+ metadata.gz: 23b88d8d1249320f6b4712e19d9a00f0a2bc0de0ef1e191aab371e56e019f38da43b8f26726e0e6d22a9a271bd647dc175bae4d58997222a04a4939700642908
7
+ data.tar.gz: 916e067da5e530e001003b82f83d3a91241ba268823112662ff87102c16e5800c70b2d909d8e150c9a9c08017d9f6f4d7c5c76ac980f2faf4a8e22caa77bb625
data/_config.yml CHANGED
@@ -3,6 +3,7 @@
3
3
  # `jekyll serve` does not auto-reload this file.
4
4
 
5
5
  title: Hematite Theme
6
+ # short_title: Add a shortened version of the title for small screens
6
7
  description: A Jekyll theme intended for course websites
7
8
  permalink: pretty
8
9
 
@@ -0,0 +1,70 @@
1
+ <svg
2
+ viewBox="0 0 64.0 64.0"
3
+ version="1.1"
4
+ class="loading-icon-root"
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ xmlns:svg="http://www.w3.org/2000/svg">
7
+ <style>
8
+ .loading-icon-root {
9
+ cursor: pointer;
10
+ width: 64px;
11
+ height: 64px;
12
+ }
13
+
14
+ .loading-icon-root .rect {
15
+ fill: var(--primary-text-color);
16
+
17
+ transform: translate(0, 0);
18
+ transform-origin: 32px 32px;
19
+ animation: loading-icon-anim 1.5s ease infinite;
20
+ }
21
+
22
+ .loading-icon-root .rect2 {
23
+ animation-delay: 0.25s;
24
+ }
25
+
26
+ .loading-icon-root .rect3 {
27
+ animation-delay: 0.5s;
28
+ }
29
+
30
+ .loading-icon-root .rect4 {
31
+ animation-delay: 0.65s;
32
+ }
33
+
34
+ @keyframes loading-icon-anim {
35
+ 0% { transform: rotate(0); }
36
+ 100% { transform: rotate(-360deg) scale(1, 1); }
37
+ }
38
+ </style>
39
+ <g
40
+ id="layer1">
41
+ <rect
42
+ width="9"
43
+ height="9"
44
+ x="10"
45
+ y="10"
46
+ ry="4.5"
47
+ class="rect" />
48
+ <rect
49
+ width="9"
50
+ height="9"
51
+ x="10"
52
+ y="10"
53
+ ry="4.5"
54
+ class="rect rect2" />
55
+ <rect
56
+ width="9"
57
+ height="9"
58
+ x="10"
59
+ y="10"
60
+ ry="4.5"
61
+ class="rect rect3" />
62
+ <rect
63
+ width="9"
64
+ height="9"
65
+ x="10"
66
+ y="10"
67
+ ry="4.5"
68
+ class="rect rect4" />
69
+ </g>
70
+ </svg>
@@ -2,4 +2,9 @@
2
2
  This is the header that appears in the navigation bar (at the top of the page)!
3
3
  Customize it here.
4
4
  {% endcomment %}
5
- <a href="{{ "/" | absolute_url }}">{{ site.title | default "Untitled Site" }}</a>
5
+ <a id="long_title" href="{{ "/" | absolute_url }}">
6
+ {{ site.title | default: "Untitled Site" }}
7
+ </a>
8
+ <a id="short_title" href="{{ "/" | absolute_url }}">
9
+ {{ site.short_title | default: site.title | default: "Untitiled" }}
10
+ </a>
@@ -0,0 +1,5 @@
1
+
2
+ @font-face {
3
+ font-family: FoulisGreek;
4
+ src: url({{ assets/fonts/FoulisGreek.ttf | absolute_path }});
5
+ }
@@ -14,6 +14,12 @@ layout: default
14
14
 
15
15
  {% assign frame_resource_url = 'assets/html/remark_presentation_frame.html' | relative_url %}
16
16
 
17
+ <div class='loading-icon-container'>
18
+ <center>
19
+ {% include img/loading_icon.svg %}
20
+ </center>
21
+ </div>
22
+
17
23
  <main class="slideshow-mode">
18
24
  <iframe
19
25
  id="presentation_frame"
@@ -35,9 +41,11 @@ layout: default
35
41
  const WRAPPING_DIV_EXP = /^\s*[<]div.*[>]((?:.|[\n\r])*)[<]\/div[>]\s*$/;
36
42
 
37
43
  import slideshow from "{{ 'assets/js/layout/remark_slideshow.mjs' | relative_url }}";
44
+ import { stringLookup } from "{{ 'assets/js/strings.mjs' | relative_url }}";
38
45
 
39
46
  let presentationFrame = document.querySelector("#presentation_frame");
40
47
  presentationFrame.src = {{ frame_resource_url | jsonify }};
48
+ presentationFrame.title = stringLookup('presentation_frame_title');
41
49
  window.presentationFrameLoaded = false;
42
50
 
43
51
 
@@ -111,12 +119,18 @@ layout: default
111
119
  `);
112
120
 
113
121
  presentationWin.initPresentation = (async () => {
114
- await slideshow.start(presentationFrame.contentWindow, config);
115
-
116
- // Ensure that mermaid has already been run!
117
- if (presentationWin.mermaid) {
118
- presentationWin.mermaid.init();
119
- console.log("Ran mermaid!");
122
+ try {
123
+ presentationDoc.title = presentationFrame.title;
124
+ await slideshow.start(presentationFrame.contentWindow, config);
125
+
126
+ // Ensure that mermaid has already been run!
127
+ if (presentationWin.mermaid) {
128
+ presentationWin.mermaid.init();
129
+ }
130
+ }
131
+ finally {
132
+ // Hide the loading icon
133
+ document.querySelector(".loading-icon-container")?.remove();
120
134
  }
121
135
  });
122
136
 
data/_sass/_elements.scss CHANGED
@@ -64,6 +64,10 @@ input::placeholder {
64
64
  padding: 6px;
65
65
  }
66
66
 
67
+ main pre {
68
+ overflow-x: auto;
69
+ }
70
+
67
71
  .main-container details {
68
72
  summary {
69
73
  cursor: pointer;
@@ -142,6 +146,17 @@ input::placeholder {
142
146
  padding-left: 20px;
143
147
  color: var(--text-color-faint);
144
148
  }
149
+
150
+ main {
151
+ // Some elements can grow larger than the available space.
152
+ // Allow scrolling.
153
+ @media screen {
154
+ .scrollable-container {
155
+ overflow-x: auto;
156
+ display: block;
157
+ }
158
+ }
159
+ }
145
160
  }
146
161
 
147
162
  // Markdown parsers may put `code` elements inside of `pre`
data/_sass/_layout.scss CHANGED
@@ -178,6 +178,9 @@ main.slideshow-mode {
178
178
  // Transition immediately!
179
179
  transition: width 0s ease, max-width 0s ease;
180
180
  }
181
+
182
+ // Don't scroll, let the inner frame do that.
183
+ overflow: hidden;
181
184
  }
182
185
 
183
186
  // On mobile devices,
data/_sass/_nav.scss CHANGED
@@ -29,6 +29,10 @@ body > header {
29
29
  align-items: center;
30
30
  }
31
31
 
32
+ #short_title {
33
+ display: none;
34
+ }
35
+
32
36
  #toggle_sidebar_btn {
33
37
  margin-right: 10px;
34
38
  background-color: var(--primary-background-color);
@@ -38,9 +42,33 @@ body > header {
38
42
  #toggle_sidebar_btn {
39
43
  display: none;
40
44
  }
45
+
46
+ box-shadow: none;
47
+ border-bottom: 1px solid var(--line-color-light);
41
48
  }
42
49
  }
43
50
 
51
+ @mixin only-short-title {
52
+ body > header {
53
+ #long_title {
54
+ display: none !important;
55
+ color: red;
56
+ }
57
+
58
+ #short_title {
59
+ display: block;
60
+ }
61
+ }
62
+ }
63
+
64
+ :root.minimizedNavHeader {
65
+ @include only-short-title;
66
+ }
67
+
68
+ @media screen and (max-width: $site-content-preferred-width) {
69
+ @include only-short-title;
70
+ }
71
+
44
72
  :root {
45
73
  --header-effective-height: var(--header-height);
46
74
  }
Binary file
@@ -0,0 +1,8 @@
1
+ This directory includes fonts under OpenSource licenses. As the Hematite theme is distributed under the MIT, all fonts distributed with it must be free for commercial use.
2
+
3
+ This directory includes the following fonts:
4
+ * FoulisGreek
5
+ * by the JUnicode project
6
+ * https://www.fontspace.com/foulis-greek-font-f38341
7
+ * https://junicode.sourceforge.io/greek.html
8
+
@@ -11,16 +11,23 @@ noindex: true
11
11
  <style>
12
12
  /* Stylesheet mostly taken from https://github.com/gnab/remark/wiki#getting-started */
13
13
  @import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
14
- @import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic);
14
+ @import url(https://fonts.googleapis.com/css?family=Droid+Sans:400,700,400italic);
15
15
  @import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic);
16
16
 
17
- body { font-family: 'Droid Serif'; }
17
+ body { font-family: 'Droid Sans', sans-serif; }
18
18
  h1, h2, h3 {
19
19
  font-family: 'Yanone Kaffeesatz';
20
20
  font-weight: normal;
21
21
  }
22
22
 
23
- .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
23
+ .remark-code, .remark-inline-code, body.mdSourceView {
24
+ font-family: 'Ubuntu Mono', monospace;
25
+ }
26
+
27
+ body.mdSourceView {
28
+ background: white;
29
+ color: black;
30
+ }
24
31
 
25
32
  /* Show hidden slides to allow preprocessors (e.g. mermaid) to
26
33
  properly account for container size.
@@ -49,6 +56,11 @@ nav:hover, nav:focus-within {
49
56
  opacity: 1;
50
57
  }
51
58
 
59
+ /* Fix contrast issue */
60
+ .remark-slide-number {
61
+ opacity: 0.8;
62
+ }
63
+
52
64
  @media print {
53
65
  nav {
54
66
  display: none;
@@ -57,11 +57,14 @@ function expandBasedOnURL() {
57
57
  }
58
58
 
59
59
  let targetElem = document.querySelector(hash);
60
- let currentElem = targetElem;
61
60
 
62
- expandContainingDropdowns(targetElem);
63
-
64
- targetElem.focus();
61
+ if (targetElem) {
62
+ expandContainingDropdowns(targetElem);
63
+ targetElem.focus();
64
+ }
65
+ else {
66
+ console.warn(`Hash`, hash, `does not correspond to an element.`);
67
+ }
65
68
  };
66
69
 
67
70
  doExpansion(location.href);
@@ -47,6 +47,11 @@ function createTagLinks(page) {
47
47
 
48
48
  container.appendChild(tagElem);
49
49
  }
50
+
51
+ // Don't show the tag container if there aren't any tags
52
+ if (page.tags.length == 0) {
53
+ container.style.display = "none";
54
+ }
50
55
  }
51
56
 
52
57
  function fillDate(page) {
@@ -2,6 +2,8 @@ import { getUrlQuery, Searcher } from "../search.mjs";
2
2
  import { stringLookup } from "../strings.mjs";
3
3
  import UrlHelper from "../UrlHelper.mjs";
4
4
 
5
+ const GESTURE_MIN_TOUCH_MOVE_DIST = 40; // px
6
+
5
7
  function isInPresenterMode(targetDoc) {
6
8
  return targetDoc.body.classList.contains("remark-presenter-mode");
7
9
  }
@@ -13,7 +15,6 @@ function focusSearchResult(targetWin, query, targetMatchNo, slideshow, searcher)
13
15
  let currentSlideNo = slide.getSlideIndex() + 1;
14
16
 
15
17
  matchesFound += searcher.getNumberOfMatches(query, targetText);
16
- console.log("Considering ", targetText, " with ", matchesFound, "matches found so far");
17
18
 
18
19
  if (matchesFound > targetMatchNo) {
19
20
  slideshow.gotoSlide(currentSlideNo);
@@ -22,20 +23,27 @@ function focusSearchResult(targetWin, query, targetMatchNo, slideshow, searcher)
22
23
 
23
24
  // Now search the notes!
24
25
  if (slide.notes) {
25
- targetText = slide.notes.join("\n");
26
- matchesFound += searcher.getNumberOfMatches(query, targetText);
27
- if (matchesFound > targetMatchNo) {
28
- slideshow.gotoSlide(currentSlideNo);
29
-
30
- if (!isInPresenterMode(targetWin.document)) {
31
- slideshow.togglePresenterMode();
26
+ try {
27
+ targetText = (slide.notes.join ?? (() => slide.notes))("\n");
28
+ matchesFound += searcher.getNumberOfMatches(query, targetText);
29
+ if (matchesFound > targetMatchNo) {
30
+ slideshow.gotoSlide(currentSlideNo);
31
+
32
+ if (!isInPresenterMode(targetWin.document)) {
33
+ slideshow.togglePresenterMode();
34
+ }
35
+ return;
32
36
  }
33
- return;
37
+ }
38
+ catch (e) {
39
+ console.error(`Unable to search through notes for slide`, slide, `Error: `, e);
40
+ console.log("Continuing...");
34
41
  }
35
42
  }
36
43
  }
37
44
 
38
- console.log("Found ", matchesFound, " matches, which is less than the target of ", targetMatchNo);
45
+ console.log("Found ", matchesFound,
46
+ " matches, which is less than the target of ", targetMatchNo, ". Remaining on last slide.");
39
47
  slideshow.gotoLastSlide();
40
48
  return -1;
41
49
  }
@@ -69,7 +77,24 @@ function focusSlideFromHash(slideshow) {
69
77
  }
70
78
  }
71
79
 
80
+ /// Returns true iff the slide viewer should only display markdown.
81
+ function shouldOnlyDisplayMd() {
82
+ let pageArgs = UrlHelper.getPageArgs();
83
+ if (!pageArgs) {
84
+ return false;
85
+ }
86
+
87
+ if (pageArgs.md_only) {
88
+ return true;
89
+ }
90
+
91
+ return false;
92
+ }
93
+
72
94
  async function main(targetWindow, config) {
95
+ // True if touch navigation is enabled.
96
+ let usingCustomTouchNav = false;
97
+
73
98
  if (!targetWindow.remark) {
74
99
  // Wait for page load if remark isn't available yet.
75
100
  await (new Promise(resolve => {
@@ -77,22 +102,39 @@ async function main(targetWindow, config) {
77
102
  }));
78
103
  }
79
104
 
105
+ // If the user has requested that only the page's markdown be shown,
106
+ if (shouldOnlyDisplayMd()) {
107
+ targetWindow.document.body.innerText = config?.source;
108
+ targetWindow.document.body.classList.add('mdSourceView');
109
+ return;
110
+ }
111
+
112
+ // Customize touchscreen navigation — the default remark
113
+ // navigation can break buttons, zooming.
114
+ if (config?.navigation?.touch === true
115
+ || config?.navigation?.touch === undefined) {
116
+ config ??= {};
117
+ config.navigation ??= {};
118
+ config.navigation.touch = false;
119
+
120
+ usingCustomTouchNav = true;
121
+ }
122
+
80
123
  // See https://remarkjs.com/#8
81
124
  let slideshow = targetWindow.remark.create(config);
125
+ targetWindow.focus();
82
126
 
83
127
  // For debugging
84
128
  window.slideshow_debug = slideshow;
85
129
 
86
- targetWindow.focus();
87
-
88
130
  addExtendedControls(targetWindow, slideshow);
89
131
  focusSearchResultFromUrl(targetWindow, slideshow);
132
+ focusSlideFromHash(slideshow);
90
133
 
134
+ // Create a URL state we can navigate back to/restore to
91
135
  targetWindow.history.replaceState(null, targetWindow.location.href);
92
136
  let targetWinHistory = targetWindow.history.state;
93
137
 
94
- focusSlideFromHash(slideshow);
95
-
96
138
  window.addEventListener('hashchange', () => {
97
139
  focusSlideFromHash(slideshow);
98
140
  });
@@ -111,6 +153,45 @@ async function main(targetWindow, config) {
111
153
  UrlHelper.withReplacedHash(targetWindow.location.href, hashId));
112
154
  window.location.hash = hashId;
113
155
  });
156
+
157
+ // Add custom touch events to listen for navigation.
158
+ if (usingCustomTouchNav) {
159
+ let elemContainer = targetWindow.document.body;
160
+ let initialPos = {};
161
+ let handlingGesture = false;
162
+
163
+ elemContainer.addEventListener('pointerdown', evt => {
164
+ if (evt.pointerType == 'touch') {
165
+ // Only handle single-touch gestures
166
+ handlingGesture = evt.isPrimary;
167
+ initialPos = {
168
+ x: evt.clientX,
169
+ y: evt.clientY,
170
+ };
171
+
172
+ if (handlingGesture) {
173
+ evt.preventDefault();
174
+ elemContainer.setPointerCapture();
175
+ }
176
+ }
177
+ });
178
+
179
+ elemContainer.addEventListener('pointerup', evt => {
180
+ if (evt.pointerType == 'touch' && handlingGesture) {
181
+ let dx = evt.clientX - initialPos.x;
182
+
183
+ if (Math.abs(dx) < GESTURE_MIN_TOUCH_MOVE_DIST) {
184
+ return;
185
+ }
186
+
187
+ if (dx < 0) {
188
+ slideshow.gotoNextSlide();
189
+ } else {
190
+ slideshow.gotoPreviousSlide();
191
+ }
192
+ }
193
+ });
194
+ }
114
195
  }
115
196
 
116
197
  /// Apply minor adjustments to the default remark layout
@@ -146,16 +227,20 @@ function addExtendedControls(targetWindow, slideshow) {
146
227
  targetWindow.print();
147
228
  };
148
229
 
230
+ let updateBtns = (slideIdx) => {
231
+ prevSlideBtn.disabled = (slideIdx == 0);
232
+ nextSlideBtn.disabled = (slideIdx + 1 >= slideshow.getSlideCount());
233
+ };
234
+
149
235
  slideshow.on('showSlide', function(newSlide) {
150
236
  if (!newSlide) {
151
237
  return;
152
238
  }
153
239
 
154
- prevSlideBtn.disabled = (newSlide.getSlideIndex() == 0);
155
- nextSlideBtn.disabled = (newSlide.getSlideIndex() + 1 >= slideshow.getSlideCount());
240
+ updateBtns(newSlide.getSlideIndex());
156
241
  });
157
242
 
158
-
243
+ updateBtns(0);
159
244
 
160
245
  nav.replaceChildren(prevSlideBtn, nextSlideBtn, spacer, printBtn);
161
246
  targetWindow.document.body.appendChild(nav);
data/assets/js/main.mjs CHANGED
@@ -3,6 +3,7 @@ import { generateHeaderLinks } from "./linkButtonGenerator.mjs";
3
3
  import handleSidebar from "./sidebar.mjs";
4
4
  import handleSearch from "./search.mjs";
5
5
  import autoExpandDropdowns from "./dropdownExpander.mjs";
6
+ import makeElemsScrollable from "./scrollables.mjs";
6
7
  import Settings from "./Settings.mjs";
7
8
 
8
9
  // After loading elements, images, css, etc.
@@ -17,6 +18,7 @@ addEventListener("load", () => {
17
18
  // After loading elements, but before loading elements like images.
18
19
  addEventListener("DOMContentLoaded", () => {
19
20
  handleSidebar();
21
+ makeElemsScrollable();
20
22
  });
21
23
 
22
24
  // Apply user-specified settings
@@ -0,0 +1,29 @@
1
+ /// Wrap elements that can be too wide in scrollable containers
2
+
3
+ const SCROLLABLE_CONTAINER_CLSS = "scrollable-container";
4
+
5
+ function makeScrollable() {
6
+ // Make tables scrollable
7
+ let elems = document.querySelectorAll("main > table");
8
+
9
+ for (const elem of elems) {
10
+ let container = document.createElement("div");
11
+ elem.parentElement.insertBefore(container, elem);
12
+ elem.remove();
13
+
14
+ container.classList.add(SCROLLABLE_CONTAINER_CLSS);
15
+ container.appendChild(elem);
16
+ }
17
+
18
+ // Make display math scrollable
19
+ elems = document.querySelectorAll("main > span > .katex-display");
20
+ for (const elem of elems) {
21
+ let container = elem.parentElement;
22
+
23
+ if (container.children.length == 1) {
24
+ container.classList.add(SCROLLABLE_CONTAINER_CLSS);
25
+ }
26
+ }
27
+ }
28
+
29
+ export default makeScrollable;
@@ -53,6 +53,7 @@ export default {
53
53
  page_theme_light: 'Light Theme',
54
54
  settings_minimize_header: 'Hide Header: ',
55
55
 
56
+ presentation_frame_title: 'Presentation slides',
56
57
  btn_next_slide: 'Go to next slide',
57
58
  btn_prev_slide: 'Go to previous slide',
58
59
  btn_print: 'Print',
@@ -51,6 +51,7 @@ export default {
51
51
  page_theme_light: 'Brillante',
52
52
  settings_minimize_header: 'Título escondido: ',
53
53
 
54
+ presentation_frame_title: 'Diapositivas de la presentación',
54
55
  btn_next_slide: 'Vaya a la diapositiva proxima',
55
56
  btn_prev_slide: 'Vaya a la diapositiva anterior',
56
57
  btn_print: 'Imprima',
data/assets/style.scss CHANGED
@@ -5,6 +5,8 @@ styles: true
5
5
 
6
6
  @import "hematite";
7
7
 
8
+ {% include scss/_fonts.scss %}
9
+
8
10
  {% if site.hematite.auto_invert_imgs %}
9
11
  // In dark mode, invert the brightness of images
10
12
  @include auto-invert-images;
@@ -5,6 +5,7 @@ styles: true
5
5
 
6
6
  // Only syntax highlighting. Useful for layouts like remark presentation.
7
7
 
8
+ {% include scss/_fonts.scss %}
8
9
  @import "_colors";
9
10
  @import "_hljs";
10
11
  @import "_rogue";
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hematite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henry Heino
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-25 00:00:00.000000000 Z
11
+ date: 2022-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -37,6 +37,7 @@ files:
37
37
  - _includes/extern_library_imports.html
38
38
  - _includes/footer.html
39
39
  - _includes/img/hamburger_menu.svg
40
+ - _includes/img/loading_icon.svg
40
41
  - _includes/img/search_icon.svg
41
42
  - _includes/katex_includes.html
42
43
  - _includes/mermaid_includes.html
@@ -45,6 +46,7 @@ files:
45
46
  - _includes/nav/pages_list.html
46
47
  - _includes/nav/pinned_page.html
47
48
  - _includes/nav/sidebar.html
49
+ - _includes/scss/_fonts.scss
48
50
  - _includes/settings.html
49
51
  - _layouts/calendar.html
50
52
  - _layouts/default.html
@@ -63,6 +65,8 @@ files:
63
65
  - _sass/_rogue.scss
64
66
  - _sass/_sizes.scss
65
67
  - _sass/hematite.scss
68
+ - assets/fonts/FoulisGreek.ttf
69
+ - assets/fonts/README.txt
66
70
  - assets/html/all_tags.html
67
71
  - assets/html/remark_presentation_frame.html
68
72
  - assets/html/settings.html
@@ -81,6 +85,7 @@ files:
81
85
  - assets/js/layout/remark_slideshow.mjs
82
86
  - assets/js/linkButtonGenerator.mjs
83
87
  - assets/js/main.mjs
88
+ - assets/js/scrollables.mjs
84
89
  - assets/js/search.mjs
85
90
  - assets/js/sidebar.mjs
86
91
  - assets/js/string_data.mjs