mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 02:44:02 +00:00
The scene chrome, cockpit, Display controls, command dock, layer panels, Context rail, welcome card and Provider Settings move verbatim into src/ui/views and mount into their hosts before the page is translated and wired. Each view renders the same elements, attributes and text as its template; Vue keeps whitespace between elements as one space, and no view markup sits under a white-space: pre rule. Template asset URLs stay literal, view files are left out of Prettier so the markup is not reflowed, and the Node component loader moves to build/ and is exported as build/register-vue for host test runners. Hosts that do not initialize Core's locale pass localePicker: false instead of editing the markup.
31 lines
1.2 KiB
JavaScript
31 lines
1.2 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { readFileSync } from 'node:fs';
|
|
import test from 'node:test';
|
|
|
|
const read = (path) => readFileSync(new URL(path, import.meta.url), 'utf8');
|
|
|
|
// The rail's measuring pass lifts these panel scrollers to their natural
|
|
// height, which clamps their scroll offset to zero. Only scrollers tagged
|
|
// `data-rail-scroller` get their offset restored afterwards, so every lifted
|
|
// scroller must carry the tag or a layout pass snaps it back to the top.
|
|
test('every scroller the rail measuring pass lifts restores its scroll offset', () => {
|
|
const css = read('./styles/layers.css');
|
|
const templates = [
|
|
read('./views/ContextView.vue'),
|
|
read('./views/LayerPanelsView.vue'),
|
|
].join('\n');
|
|
const lifted = [
|
|
...css.matchAll(
|
|
/#right-context-rail\[data-rail-measuring\]\s*>\s*\[data-panel-id\]:not\(\.collapsed\)\s*>\s*\.([a-z-]+)/g,
|
|
),
|
|
].map((match) => match[1]);
|
|
assert.ok(lifted.length > 0, 'measuring CSS lists lifted scrollers');
|
|
for (const className of lifted) {
|
|
const tag = templates.match(
|
|
new RegExp(`<div class="${className}"[^>]*>`),
|
|
)?.[0];
|
|
if (!tag) continue;
|
|
assert.match(tag, /data-rail-scroller/, `${className} restores its scroll`);
|
|
}
|
|
});
|