hematite 0.0.10 → 0.0.11

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: 1c347dece80da3456bf6c8cd42bc6daafc81212dd102ab9fffb664b4c49799e4
4
- data.tar.gz: 6218c2a7ee4243942111a7a3e7dce23bfe1be5c96304a1fc671e044f16ab4906
3
+ metadata.gz: c5f6a0cdf074d0025f0cf3031037a4dc365af38f99aa811578f3d88f0c356175
4
+ data.tar.gz: 533d5d2c8897c2985977971c5a6ca66552df1edee4bae22c9184750e97478007
5
5
  SHA512:
6
- metadata.gz: cdadf907f31e447adbf62dcd7dd849d56418de2a7ba975d9460d5248494065ff4ab5ad12355c60f4858928e9a7e1099434140e14e970a471bf2aa25664cf4aca
7
- data.tar.gz: '093443b534ad09677b988852815e543e027060407de67399ca46b1006e28b174ecaaaf3181d52e87750bbcadf20ed928d2bc71fb77a01f3d32276ac0a1f51f61'
6
+ metadata.gz: be650d2182b5d2dccdc6bccc3837691246f94bf8271bda4343cd923e7da5eb2c9fa3ddc960f35d2711c13cf51b574f3b27eddd47f31afc3c8688e231ab22afe7
7
+ data.tar.gz: 7ebc7f1a7902040eb224a1adb08da8115207303e028e4bad22d608f061e11a3f5450da65c2e572da68a10317c835ba73469d1ebef1c7a9f2a182a5567eb4f80f
data/_sass/_nav.scss CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  $header-z-index: 100;
4
4
 
5
- header {
5
+ body > header {
6
6
  position: sticky;
7
7
  top: 0;
8
8
  z-index: $header-z-index;
@@ -41,6 +41,33 @@ header {
41
41
  }
42
42
  }
43
43
 
44
+ :root.minimizedNavHeader body > header {
45
+ > *:not(#toggle_sidebar_btn) {
46
+ opacity: 0;
47
+ display: inline-block;
48
+ transition: opacity 0.5s ease;
49
+ }
50
+
51
+ word-wrap: break-word;
52
+ width: var(--header-height);
53
+ padding: 0;
54
+ transition: width 0.5s ease;
55
+
56
+ position: fixed;
57
+
58
+ // The minimizedNavHeader class is added after page load. Make the
59
+ // transition less jarring.
60
+ animation: fade-in 0.5s ease 1;
61
+ }
62
+
63
+ :root.minimizedNavHeader.hasOpenSidebar body > header {
64
+ > *:not(#toggle_sidebar_btn) {
65
+ opacity: 1;
66
+ }
67
+
68
+ width: calc(var(--nav-width) + #{2 * $navbar-padding});
69
+ }
70
+
44
71
  nav.sidebar {
45
72
  position: fixed;
46
73
  top: var(--header-height);
@@ -58,7 +85,7 @@ nav.sidebar {
58
85
  color: var(--primary-text-color);
59
86
  background-color: var(--primary-background-color);
60
87
  box-shadow: 0 0 2px var(--shadow-color-light);
61
- padding: 10px;
88
+ padding: $navbar-padding;
62
89
 
63
90
  z-index: $header-z-index - 1;
64
91
 
data/_sass/_sizes.scss CHANGED
@@ -1,6 +1,7 @@
1
1
 
2
2
  $site-content-preferred-width: 700px;
3
3
  $content-main-padding: 30px;
4
+ $navbar-padding: 10px;
4
5
 
5
6
  // CSS variables
6
7
  :root {
@@ -30,6 +30,9 @@ noindex: true
30
30
  <label id="page_theme_lbl" for="page_theme">settings_theme_label</label>
31
31
  <select id="page_theme"></select>
32
32
  </div>
33
+ <div>
34
+ <label id="page_minimize_header_lbl" for="minimize_page_hdr">settings_minimize_header</label>
35
+ <input type="checkbox" id="minimize_page_hdr"/>
33
36
  </fieldset>
34
37
 
35
38
  <script type="module">
@@ -39,7 +42,7 @@ import { stringLookup } from "{{ 'assets/js/strings.mjs' | relative_url }}";
39
42
  let settingsTextElemIDs = [
40
43
  `settings_header`, `settings_description`, `font_legend`,
41
44
  `font_family_lbl`, `font_size_lbl`, `theme_legend`,
42
- `page_theme_lbl`,
45
+ `page_theme_lbl`, `page_minimize_header_lbl`,
43
46
  ];
44
47
 
45
48
  // Localize all descriptive settings elements (each should contian the
@@ -52,6 +55,7 @@ for (const id of settingsTextElemIDs) {
52
55
  let fontSizeSelect = document.querySelector("#font_size");
53
56
  let fontFamilySelect = document.querySelector("#font_family");
54
57
  let pageThemeSelect = document.querySelector("#page_theme");
58
+ let minimizeHeaderCheckbox = document.querySelector("#minimize_page_hdr");
55
59
 
56
60
  pageThemeSelect.innerHTML =
57
61
  `
@@ -87,8 +91,13 @@ pageThemeSelect.oninput = () => {
87
91
  Settings.setTheme(pageThemeSelect.value);
88
92
  };
89
93
 
94
+ minimizeHeaderCheckbox.oninput = () => {
95
+ Settings.setHeaderMinimized(minimizeHeaderCheckbox.checked);
96
+ };
97
+
90
98
  pageThemeSelect.value = Settings.getTheme();
91
99
  fontFamilySelect.value = Settings.getFontFamily();
92
100
  fontSizeSelect.value = Settings.getFontSize();
101
+ minimizeHeaderCheckbox.checked = Settings.getHeaderMinimized();
93
102
 
94
103
  </script>
@@ -1,5 +1,9 @@
1
1
  ---
2
2
  ---
3
+ import AsyncUtil from "./AsyncUtil.mjs";
4
+ import AnimationUtil from "./AnimationUtil.mjs";
5
+
6
+ const THEME_TRANSITION_TIME = 500; // ms
3
7
 
4
8
  class Settings {
5
9
  THEME_AUTO = 'auto';
@@ -18,6 +22,7 @@ class Settings {
18
22
  FONT_SIZE_KEY_ = 'hematite-setting-font-size';
19
23
  FONT_FAMILY_KEY_ = 'hematite-setting-font-family';
20
24
  THEME_KEY_ = 'hematite-setting-theme';
25
+ HEADER_MINIMIZED_KEY_ = 'hematite-setting-minimize-header';
21
26
 
22
27
  constructor() {
23
28
  }
@@ -43,6 +48,11 @@ class Settings {
43
48
  return this.getSetting_(this.FONT_SIZE_KEY_) ?? this.FONT_SIZE_DEFAULT;
44
49
  }
45
50
 
51
+ getHeaderMinimized() {
52
+ let minimizedStr = this.getSetting_(this.HEADER_MINIMIZED_KEY_) ?? {{ site.hematite.minimize_header | default: "false" | jsonify }};
53
+ return minimizedStr == "true";
54
+ }
55
+
46
56
  setFontSize(sizeOption) {
47
57
  this.setSetting_(this.FONT_SIZE_KEY_, sizeOption);
48
58
  }
@@ -55,6 +65,10 @@ class Settings {
55
65
  this.setSetting_(this.THEME_KEY_, themeOption);
56
66
  }
57
67
 
68
+ setHeaderMinimized(minimize) {
69
+ this.setSetting_(this.HEADER_MINIMIZED_KEY_, `${minimize}`);
70
+ }
71
+
58
72
  getFontSizePt_() {
59
73
  let fontSizeOption = this.getFontSize();
60
74
 
@@ -87,7 +101,9 @@ class Settings {
87
101
  return this.getTheme() == this.THEME_LIGHT;
88
102
  }
89
103
 
90
- applySettings() {
104
+ async applySettings() {
105
+ document.documentElement.classList.add("changingTheme");
106
+
91
107
  // Clean up previous changes. We might be re-applying styles.
92
108
  document.documentElement.classList.remove("lightTheme");
93
109
  document.documentElement.classList.remove("darkTheme");
@@ -99,7 +115,12 @@ class Settings {
99
115
  }
100
116
 
101
117
 
102
- let styleHTML = '';
118
+ let styleHTML =
119
+ `
120
+ :root.changingTheme * {
121
+ transition: ${THEME_TRANSITION_TIME}ms ease all;
122
+ }
123
+ `;
103
124
 
104
125
  // Font family
105
126
  if (this.usingNonDefaultFontFamily_()) {
@@ -121,6 +142,9 @@ class Settings {
121
142
  `;
122
143
  }
123
144
 
145
+ this.style_.innerHTML = styleHTML;
146
+ document.documentElement.appendChild(this.style_);
147
+
124
148
  // Theme
125
149
  if (this.forcingDarkTheme_()) {
126
150
  document.documentElement.classList.add("darkTheme");
@@ -129,8 +153,28 @@ class Settings {
129
153
  document.documentElement.classList.add("lightTheme");
130
154
  }
131
155
 
132
- this.style_.innerHTML = styleHTML;
133
- document.documentElement.appendChild(this.style_);
156
+ if (this.getHeaderMinimized()) {
157
+ // Run roughly in parallel
158
+ (async () => {
159
+ let header = document.querySelector("body > header");
160
+ if (header) {
161
+ await AnimationUtil.collapseOutVert(header, THEME_TRANSITION_TIME / 2);
162
+ }
163
+
164
+ document.documentElement.classList.add("minimizedNavHeader");
165
+
166
+ // Animate the header.
167
+ if (header) {
168
+ await AnimationUtil.expandInVert(header, THEME_TRANSITION_TIME / 2);
169
+ }
170
+ })();
171
+ }
172
+ else {
173
+ document.documentElement.classList.remove("minimizedNavHeader");
174
+ }
175
+
176
+ await AsyncUtil.waitMillis(THEME_TRANSITION_TIME);
177
+ document.documentElement.classList.remove("changingTheme");
134
178
  }
135
179
  }
136
180
 
data/assets/js/main.mjs CHANGED
@@ -17,7 +17,7 @@ addEventListener("load", () => {
17
17
  // After loading elements, but before loading elements like images.
18
18
  addEventListener("DOMContentLoaded", () => {
19
19
  handleSidebar();
20
-
21
- // Apply user-specified settings
22
- Settings.applySettings();
23
20
  });
21
+
22
+ // Apply user-specified settings
23
+ Settings.applySettings();
@@ -17,11 +17,11 @@ function handleSidebar() {
17
17
  const setSidebarOpen = (open) => {
18
18
  if (!open) {
19
19
  sidebar.classList.remove(`open`);
20
- document.scrollingElement?.classList.remove(`hasOpenSidebar`);
20
+ document.documentElement.classList.remove(`hasOpenSidebar`);
21
21
  }
22
22
  else {
23
23
  sidebar.classList.add(`open`);
24
- document.scrollingElement?.classList.add(`hasOpenSidebar`);
24
+ document.documentElement.classList.add(`hasOpenSidebar`);
25
25
  }
26
26
  };
27
27
 
@@ -51,4 +51,5 @@ export default {
51
51
  page_theme_auto: 'Automatic',
52
52
  page_theme_dark: 'Dark Theme',
53
53
  page_theme_light: 'Light Theme',
54
+ settings_minimize_header: 'Hide Header: '
54
55
  };
@@ -49,4 +49,5 @@ export default {
49
49
  page_theme_auto: 'Automático',
50
50
  page_theme_dark: 'Oscuro',
51
51
  page_theme_light: 'Brillante',
52
+ settings_minimize_header: 'Título escondido: '
52
53
  };
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hematite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henry Heino