16 lines
1.1 KiB
JavaScript
16 lines
1.1 KiB
JavaScript
// Source-level guard against reintroducing broken absolute/masonry layout.
|
|
import fs from 'node:fs';
|
|
import assert from 'node:assert/strict';
|
|
const source = fs.readFileSync('src/admin/web/app/overview-masonry.js','utf8');
|
|
const css = fs.readFileSync('src/admin/web/style.css','utf8');
|
|
assert.match(source,/\.sort\(\(a, b\) => group\(a\.node\) - group\(b\.node\)/);
|
|
assert.match(source,/grid\.classList\.remove\("is-packed"\)/);
|
|
assert.match(source,/node\.classList\.add\("overview-row-start"\)/);
|
|
assert.match(css, /\.dashboard-overview-grid\.is-aligned\s*\{[^}]*align-items:\s*stretch;/);
|
|
assert.match(css, /\.dashboard-overview-grid\.is-aligned\s*>\s*\[data-dashboard-widget\]\s*\{[^}]*align-self:\s*stretch;/);
|
|
assert(!/style\.position\s*=\s*["']absolute["']|requestAnimationFrame\(|new ResizeObserver\(/.test(source),
|
|
'No absolute positioning, animation loop or ResizeObserver should manage Overview geometry');
|
|
assert(!/\.dashboard-overview-grid\.is-aligned\.is-packed\s*\{/.test(css));
|
|
assert(!source.includes('fetch(') && !source.includes('setInterval('));
|
|
console.log('PASS: regular symmetric CSS Grid for all 62 Overview blocks');
|