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 +4 -4
- data/_config.yml +1 -0
- data/_includes/img/loading_icon.svg +70 -0
- data/_includes/nav/header.html +6 -1
- data/_includes/scss/_fonts.scss +5 -0
- data/_layouts/remark_slideshow.html +20 -6
- data/_sass/_elements.scss +15 -0
- data/_sass/_layout.scss +3 -0
- data/_sass/_nav.scss +28 -0
- data/assets/fonts/FoulisGreek.ttf +0 -0
- data/assets/fonts/README.txt +8 -0
- data/assets/html/remark_presentation_frame.html +15 -3
- data/assets/js/dropdownExpander.mjs +7 -4
- data/assets/js/layout/post.mjs +5 -0
- data/assets/js/layout/remark_slideshow.mjs +102 -17
- data/assets/js/main.mjs +2 -0
- data/assets/js/scrollables.mjs +29 -0
- data/assets/string_data/en.mjs +1 -0
- data/assets/string_data/es.mjs +1 -0
- data/assets/style.scss +2 -0
- data/assets/style_only_syntax.scss +1 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3bf0eaea458e2c4fba03dbcc759aaa04eb811832e1850b210d5e5a378fab2526
|
4
|
+
data.tar.gz: 80dcbb081d5342365d4f119ffcb6f1dfd2be5b6533e23b0c23a18bde93709b54
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23b88d8d1249320f6b4712e19d9a00f0a2bc0de0ef1e191aab371e56e019f38da43b8f26726e0e6d22a9a271bd647dc175bae4d58997222a04a4939700642908
|
7
|
+
data.tar.gz: 916e067da5e530e001003b82f83d3a91241ba268823112662ff87102c16e5800c70b2d909d8e150c9a9c08017d9f6f4d7c5c76ac980f2faf4a8e22caa77bb625
|
data/_config.yml
CHANGED
@@ -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>
|
data/_includes/nav/header.html
CHANGED
@@ -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 }}">
|
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>
|
@@ -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
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
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
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+
|
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
|
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 {
|
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
|
-
|
63
|
-
|
64
|
-
|
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);
|
data/assets/js/layout/post.mjs
CHANGED
@@ -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
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
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
|
-
|
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,
|
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
|
-
|
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;
|
data/assets/string_data/en.mjs
CHANGED
data/assets/string_data/es.mjs
CHANGED
@@ -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
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.
|
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-
|
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
|