Balance all website sections and improve mobile navigation

This commit is contained in:
Hakan Seven committed 2026-09-06 13:58:32 +03:00
1 parent a86f46375d
commit 2d06004c1f
4 files changed
+51 -29

No files matched your search

+1 -1
View File
@@ -103,7 +103,7 @@ def build(output):
app = output / "app/index.html"
if app.exists():
html = re.sub(r'<link\b(?=[^>]*\brel=["\'](?:shortcut )?icon["\'])[^>]*>', '', app.read_text())
html = re.sub(r'<link\b(?=[^>]*\brel=["\'](?:(?:shortcut )?icon|apple-touch-icon)["\'])[^>]*>', '', app.read_text())
app.write_text(html.replace('</head>', icons + '\n</head>'), encoding="utf-8")
print(f"Built {len(catalogs)} website languages and current application icons")
+14 -3
View File
@@ -5,18 +5,22 @@ const vm = require('node:vm');
const source = fs.readFileSync(process.argv[2] || 'dist/site.js', 'utf8');
function visit(language, pathname = '/', saved, blocked = false) {
let redirected, click;
let redirected, menuOpen = true, focused = false;
const handlers = {};
const picker = { removeAttribute: () => { menuOpen = false; }, querySelector: () => ({ focus: () => { focused = true; } }) };
const context = {
navigator: { language },
location: { pathname, search: '?ref=test', hash: '#formats', replace: url => { redirected = url; } },
document: { addEventListener: (type, listener) => { click = listener; } },
document: { addEventListener: (type, listener) => { handlers[type] = listener; }, querySelector: () => menuOpen ? picker : null },
localStorage: {
getItem: () => { if (blocked) throw new Error('Storage disabled'); return saved; },
setItem: (key, value) => { if (blocked) throw new Error('Storage disabled'); saved = value; },
},
};
vm.runInNewContext(source, context);
return { context, redirected, choose: tag => click({ target: { closest: () => ({ hreflang: tag }) } }), saved: () => saved };
return { context, redirected, choose: tag => handlers.click({ target: { closest: () => ({ hreflang: tag }) } }), saved: () => saved,
dismiss: () => handlers.click({ target: { closest: () => null } }), escape: () => handlers.keydown({ key: 'Escape' }),
menuOpen: () => menuOpen, focused: () => focused };
}
for (const [language, expected] of Object.entries({
@@ -43,4 +47,11 @@ const choice = visit('en-US');
choice.choose('tr-TR');
assert.equal(choice.saved(), 'tr-TR');
visit('en-US', '/', undefined, true).choose('en-US');
const outside = visit('en-US');
outside.dismiss();
assert.equal(outside.menuOpen(), false);
const keyboard = visit('en-US');
keyboard.escape();
assert.equal(keyboard.menuOpen(), false);
assert.equal(keyboard.focused(), true);
console.log('Website language matching, redirects, manual choices and blocked storage passed');