hematite 0.0.10 → 0.0.11

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: 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