hematite 0.1.9 → 0.1.12

Sign up to get free protection for your applications and to get access to all the features.
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