Skip to content

Commit f90ef8b

Browse files
Minor changes to responsive layout
1 parent 4e329e2 commit f90ef8b

6 files changed

Lines changed: 82 additions & 15 deletions

File tree

assets/_sass/_header.scss

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ header.main {
1414
img {
1515
height: 32px;
1616
width: auto;
17-
margin-right: 20px;
17+
margin-right: 10px;
1818
}
1919

2020
}
@@ -94,7 +94,7 @@ header.main {
9494

9595
.logo img {
9696
height: 28px;
97-
margin-right: 12px;
97+
margin-right: 0;
9898
}
9999

100100
.title {
@@ -117,12 +117,9 @@ header.main {
117117
}
118118

119119
@include screen(520px) {
120-
.title {
121-
display: none;
122-
}
123120

124121
.controls .ctrl.gotoapp {
125-
margin-left: 4px;
122+
display: none;
126123
}
127124
}
128125
}

assets/_sass/_nav.scss

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,13 @@ nav {
158158
max-width: calc(100vw - 48px);
159159
height: auto;
160160
transform: translateX(calc(-100% - 12px));
161-
transition: transform 180ms ease;
161+
transition: none;
162162
box-shadow: 2px 0 12px rgba(0, 0, 0, 0.16);
163163

164+
html.nav-animating & {
165+
transition: transform 180ms ease;
166+
}
167+
164168
html.nav-open & {
165169
transform: translateX(0);
166170
}

assets/scripts/main.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ if (navElement) {
206206
rememberExpandedSizes(sizes);
207207

208208
const menuElement = document.querySelector(".burger");
209+
const mobileNavQuery = window.matchMedia ? window.matchMedia("(max-width: 760px)") : { matches: false };
209210
if (isCollapsedSizes(sizes)) menuElement.classList.add("collapsed");
210211

211212
try {
@@ -223,7 +224,25 @@ if (navElement) {
223224
}
224225
});
225226

227+
/**
228+
* Restores the desktop burger icon after leaving the mobile breakpoint.
229+
* @param {MediaQueryList|MediaQueryListEvent} query
230+
*/
231+
const syncDesktopNav = query => {
232+
if (query.matches) return;
233+
234+
document.documentElement.classList.remove("nav-open", "nav-animating");
235+
menuElement.classList.toggle("collapsed", isCollapsedSizes(panes.getSizes()));
236+
};
237+
238+
if (mobileNavQuery.addEventListener)
239+
mobileNavQuery.addEventListener("change", syncDesktopNav);
240+
else if (mobileNavQuery.addListener)
241+
mobileNavQuery.addListener(syncDesktopNav);
242+
226243
menuElement.addEventListener("click", e => {
244+
if (mobileNavQuery.matches) return;
245+
227246
e.preventDefault();
228247

229248
if (panes) {

assets/scripts/main.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assets/scripts/preload.js

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,33 @@
11
// Fix initial width panels
22
try {
3-
const storedSizes = JSON.parse(localStorage.getItem("panels-sizes"));
4-
const sizes = Array.isArray(storedSizes) && storedSizes.length > 1 && storedSizes.every(size => Number.isFinite(size)) ? storedSizes : null;
53
const mobileNavQuery = window.matchMedia ? window.matchMedia("(max-width: 760px)") : { matches: false };
4+
const navTransitionDuration = 220;
5+
6+
/**
7+
* Checks whether persisted panel sizes can be reused.
8+
* @param {unknown} sizes
9+
*/
10+
const isValidSizes = sizes => Array.isArray(sizes) && sizes.length > 1 && sizes.every(size => Number.isFinite(size));
11+
12+
/**
13+
* Reads the current persisted split panel sizes.
14+
*/
15+
const readStoredSizes = () => {
16+
try {
17+
const sizes = JSON.parse(localStorage.getItem("panels-sizes"));
18+
return isValidSizes(sizes) ? sizes : null;
19+
} catch (_) {
20+
return null;
21+
}
22+
};
23+
24+
/**
25+
* Checks whether the persisted navigation panel is collapsed.
26+
* @param {unknown} sizes
27+
*/
28+
const isCollapsedSizes = sizes => isValidSizes(sizes) && sizes[0] < 10;
29+
30+
const sizes = readStoredSizes();
631
const rules = `
732
${sizes && !mobileNavQuery.matches ? `.main-nav { width:calc(${sizes[0] ?? 0}% - 3px); }` : ""}
833
.page.loading { visibility: visible; }
@@ -13,17 +38,38 @@ try {
1338
const burger = document.querySelector(".burger");
1439
if (!burger) return;
1540

41+
const root = document.documentElement;
42+
let navTransitionTimer = 0;
43+
44+
/**
45+
* Stops mobile navigation transition overrides.
46+
*/
47+
const stopMobileNavTransition = () => {
48+
window.clearTimeout(navTransitionTimer);
49+
root.classList.remove("nav-animating");
50+
};
51+
52+
/**
53+
* Enables the mobile navigation transition only for user-triggered toggles.
54+
*/
55+
const startMobileNavTransition = () => {
56+
window.clearTimeout(navTransitionTimer);
57+
root.classList.add("nav-animating");
58+
navTransitionTimer = window.setTimeout(stopMobileNavTransition, navTransitionDuration);
59+
};
60+
1661
/**
1762
* Closes the off-canvas navigation when entering the mobile layout.
1863
* @param {MediaQueryList|MediaQueryListEvent} query
1964
*/
2065
const syncMobileNav = query => {
66+
stopMobileNavTransition();
67+
root.classList.remove("nav-open");
68+
2169
if (query.matches) {
22-
document.documentElement.classList.remove("nav-open");
2370
burger.classList.add("collapsed");
2471
} else {
25-
document.documentElement.classList.remove("nav-open");
26-
burger.classList.toggle("collapsed", Array.isArray(sizes) && sizes[0] < 10);
72+
burger.classList.toggle("collapsed", isCollapsedSizes(readStoredSizes()));
2773
}
2874
};
2975

@@ -33,7 +79,8 @@ try {
3379
e.preventDefault();
3480
e.stopImmediatePropagation();
3581

36-
const isOpen = document.documentElement.classList.toggle("nav-open");
82+
startMobileNavTransition();
83+
const isOpen = root.classList.toggle("nav-open");
3784
burger.classList.toggle("collapsed", !isOpen);
3885
}, true);
3986

0 commit comments

Comments
 (0)