forked from 1b-agent/opencadstudio-upstream
Balance all website sections and improve mobile navigation
This commit is contained in:
1 parent
a86f46375d
commit
2d06004c1f
4 files changed
+51
-29
No files matched your search
@@ -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
@@ -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');
|
||||
Reference in new issue
Block a user