big restructure

This commit is contained in:
2026-02-11 19:28:12 +01:00
parent cd59ccd99b
commit 3eb9cc0ac4
209 changed files with 5101 additions and 2459 deletions

27
web/js/core/app-dom.js Normal file
View File

@@ -0,0 +1,27 @@
const warned = new Set();
export const warnOnce = (code, message, details = {}) => {
const key = `${code}:${message}`;
if (warned.has(key)) return;
warned.add(key);
console.warn(`[${code}] ${message}`, details);
};
export const requireEl = (selector, details = {}) => {
const el = document.querySelector(selector);
if (!el) {
warnOnce('UI_EL_MISSING', `Missing element: ${selector}`, details);
return null;
}
return el;
};
export const requireAll = (selector, details = {}) => {
const list = Array.from(document.querySelectorAll(selector));
if (!list.length) {
warnOnce('UI_EL_MISSING', `Missing elements: ${selector}`, details);
}
return list;
};
export const optionalEl = (selector) => document.querySelector(selector);

View File

@@ -1,3 +1,5 @@
import { warnOnce } from './app-dom.js';
export function createServerGrid(options) {
const {
container,
@@ -22,6 +24,12 @@ export function createServerGrid(options) {
const gridjsLib = gridjs || window.gridjs;
const containerEl = typeof container === 'string' ? document.querySelector(container) : container;
if (!containerEl || !gridjsLib) {
if (!containerEl) {
warnOnce('UI_EL_MISSING', `Missing grid container: ${container}`, { module: 'grid-factory' });
}
if (!gridjsLib) {
warnOnce('UI_LIB_MISSING', 'Grid.js not available', { module: 'grid-factory' });
}
return null;
}