You've already forked Arcturus-Morningstar-Extended
mirror of
https://github.com/duckietm/Arcturus-Morningstar-Extended.git
synced 2026-06-19 15:06:19 +00:00
feat: add advanced wired variable system and tooling
This commit is contained in:
@@ -0,0 +1,500 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="it">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Riferimento Completo Wired</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
wired: {
|
||||
50: '#eef7ff',
|
||||
100: '#d9ecff',
|
||||
200: '#b8dbff',
|
||||
300: '#89c0ff',
|
||||
400: '#569dff',
|
||||
500: '#2d77ff',
|
||||
600: '#1f5ee5',
|
||||
700: '#1d4dcb',
|
||||
800: '#1e42a4',
|
||||
900: '#1d397f'
|
||||
}
|
||||
},
|
||||
boxShadow: {
|
||||
wired: '0 20px 50px rgba(15, 23, 42, 0.14)'
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
||||
<style>
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
body {
|
||||
background:
|
||||
radial-gradient(circle at top left, rgba(45, 119, 255, 0.12), transparent 35%),
|
||||
radial-gradient(circle at top right, rgba(14, 165, 233, 0.10), transparent 30%),
|
||||
linear-gradient(180deg, #f8fbff 0%, #f1f5f9 100%);
|
||||
}
|
||||
|
||||
.doc-content h1,
|
||||
.doc-content h2,
|
||||
.doc-content h3,
|
||||
.doc-content h4 {
|
||||
scroll-margin-top: 110px;
|
||||
}
|
||||
|
||||
.doc-content h1 {
|
||||
font-size: 2.5rem;
|
||||
line-height: 1.1;
|
||||
font-weight: 800;
|
||||
color: #0f172a;
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
|
||||
.doc-content h2 {
|
||||
font-size: 1.65rem;
|
||||
line-height: 1.2;
|
||||
font-weight: 800;
|
||||
color: #0f172a;
|
||||
margin-top: 3rem;
|
||||
margin-bottom: 1rem;
|
||||
padding-bottom: 0.6rem;
|
||||
border-bottom: 1px solid #dbeafe;
|
||||
}
|
||||
|
||||
.doc-content h3 {
|
||||
font-size: 1.15rem;
|
||||
line-height: 1.45;
|
||||
font-weight: 700;
|
||||
color: #1e3a8a;
|
||||
margin-top: 1.75rem;
|
||||
margin-bottom: 0.85rem;
|
||||
background: #eff6ff;
|
||||
border: 1px solid #dbeafe;
|
||||
border-radius: 0.9rem;
|
||||
padding: 0.75rem 1rem;
|
||||
}
|
||||
|
||||
.doc-content h4 {
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
color: #1e293b;
|
||||
margin-top: 1.25rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.doc-content p,
|
||||
.doc-content li {
|
||||
color: #334155;
|
||||
line-height: 1.78;
|
||||
}
|
||||
|
||||
.doc-content p {
|
||||
margin: 0.75rem 0;
|
||||
}
|
||||
|
||||
.doc-content ul,
|
||||
.doc-content ol {
|
||||
margin: 0.85rem 0 1rem 1.4rem;
|
||||
}
|
||||
|
||||
.doc-content ul {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
.doc-content ol {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
.doc-content li {
|
||||
margin: 0.35rem 0;
|
||||
padding-left: 0.2rem;
|
||||
}
|
||||
|
||||
.doc-content hr {
|
||||
border: 0;
|
||||
height: 1px;
|
||||
background: linear-gradient(90deg, transparent, #bfdbfe, transparent);
|
||||
margin: 2.25rem 0;
|
||||
}
|
||||
|
||||
.doc-content code {
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
background: #eff6ff;
|
||||
color: #1d4ed8;
|
||||
padding: 0.16rem 0.38rem;
|
||||
border-radius: 0.45rem;
|
||||
font-size: 0.92em;
|
||||
}
|
||||
|
||||
.doc-content pre {
|
||||
background: #0f172a;
|
||||
color: #e2e8f0;
|
||||
padding: 1rem 1.1rem;
|
||||
border-radius: 1rem;
|
||||
overflow-x: auto;
|
||||
margin: 1rem 0 1.25rem;
|
||||
box-shadow: inset 0 0 0 1px rgba(148, 163, 184, 0.15);
|
||||
}
|
||||
|
||||
.doc-content pre code {
|
||||
background: transparent;
|
||||
color: inherit;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.doc-content table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 1rem 0 1.5rem;
|
||||
overflow: hidden;
|
||||
border-radius: 1rem;
|
||||
box-shadow: inset 0 0 0 1px #dbeafe;
|
||||
}
|
||||
|
||||
.doc-content thead tr {
|
||||
background: #dbeafe;
|
||||
}
|
||||
|
||||
.doc-content th,
|
||||
.doc-content td {
|
||||
text-align: left;
|
||||
padding: 0.8rem 0.95rem;
|
||||
border-bottom: 1px solid #e2e8f0;
|
||||
color: #334155;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.doc-content th {
|
||||
font-weight: 700;
|
||||
color: #0f172a;
|
||||
}
|
||||
|
||||
.doc-content tbody tr:nth-child(even) {
|
||||
background: #f8fbff;
|
||||
}
|
||||
|
||||
.doc-content blockquote {
|
||||
margin: 1rem 0;
|
||||
padding: 0.9rem 1rem;
|
||||
border-left: 4px solid #60a5fa;
|
||||
background: #f8fbff;
|
||||
border-radius: 0 0.9rem 0.9rem 0;
|
||||
}
|
||||
|
||||
.toc-link.active {
|
||||
background: #dbeafe;
|
||||
color: #1d4ed8;
|
||||
font-weight: 600;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen text-slate-800">
|
||||
<div class="mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8">
|
||||
<header class="mb-6 rounded-3xl border border-white/70 bg-white/85 p-6 shadow-wired backdrop-blur">
|
||||
<div class="flex flex-col gap-6 lg:flex-row lg:items-start lg:justify-between">
|
||||
<div class="max-w-3xl">
|
||||
<div class="mb-3 inline-flex items-center gap-2 rounded-full border border-wired-200 bg-wired-50 px-3 py-1 text-xs font-semibold uppercase tracking-[0.18em] text-wired-700">
|
||||
<span class="h-2 w-2 rounded-full bg-wired-500"></span>
|
||||
Documentazione tecnica Wired
|
||||
</div>
|
||||
<h1 class="text-3xl font-extrabold tracking-tight text-slate-900 sm:text-4xl">
|
||||
Riferimento Completo Wired
|
||||
</h1>
|
||||
<p class="mt-3 text-sm leading-7 text-slate-600 sm:text-base">
|
||||
Questa pagina renderizza <code>wired_full_reference.md</code> in una vista HTML consultabile,
|
||||
con struttura e interfaccia in italiano. Gli identificatori tecnici dei wired, delle classi e
|
||||
delle chiavi restano invariati per mantenere la documentazione fedele al runtime.
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid gap-3 sm:grid-cols-3 lg:w-[28rem]">
|
||||
<div class="rounded-2xl border border-slate-200 bg-slate-50 p-4">
|
||||
<div class="text-xs font-semibold uppercase tracking-wide text-slate-500">Sorgente</div>
|
||||
<div class="mt-1 text-sm font-medium text-slate-800">Markdown vivo</div>
|
||||
<div class="mt-1 text-xs text-slate-500">La pagina legge il file `.md` locale.</div>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-slate-50 p-4">
|
||||
<div class="text-xs font-semibold uppercase tracking-wide text-slate-500">Lingua</div>
|
||||
<div class="mt-1 text-sm font-medium text-slate-800">Interfaccia italiana</div>
|
||||
<div class="mt-1 text-xs text-slate-500">Struttura e metadati localizzati.</div>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-slate-50 p-4">
|
||||
<div class="text-xs font-semibold uppercase tracking-wide text-slate-500">Stile</div>
|
||||
<div class="mt-1 text-sm font-medium text-slate-800">Tailwind CDN</div>
|
||||
<div class="mt-1 text-xs text-slate-500">Layout leggibile, sticky nav e indice.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="grid gap-6 lg:grid-cols-[19rem,minmax(0,1fr)]">
|
||||
<aside class="lg:sticky lg:top-6 lg:self-start">
|
||||
<div class="rounded-3xl border border-white/70 bg-white/90 p-4 shadow-wired backdrop-blur">
|
||||
<div class="mb-4">
|
||||
<label for="toc-search" class="mb-2 block text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">
|
||||
Cerca sezione
|
||||
</label>
|
||||
<input
|
||||
id="toc-search"
|
||||
type="text"
|
||||
placeholder="Es. variabili, trigger, signal..."
|
||||
class="w-full rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 text-sm text-slate-700 outline-none transition focus:border-wired-300 focus:bg-white focus:ring-2 focus:ring-wired-100"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="mb-4 rounded-2xl border border-amber-200 bg-amber-50/80 p-3 text-xs leading-6 text-amber-900">
|
||||
<div class="font-semibold">Nota</div>
|
||||
<div>
|
||||
La pagina mantiene nomi wired, classi Java e chiavi tecniche così come sono nel progetto.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3 flex items-center justify-between">
|
||||
<h2 class="text-sm font-semibold text-slate-900">Indice</h2>
|
||||
<a
|
||||
href="./wired_full_reference.md"
|
||||
class="rounded-full border border-slate-200 px-3 py-1 text-xs font-medium text-slate-600 transition hover:border-wired-300 hover:text-wired-700"
|
||||
>
|
||||
Apri Markdown
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<nav id="toc" class="space-y-1 text-sm"></nav>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<main>
|
||||
<section class="mb-6 rounded-3xl border border-white/70 bg-white/90 p-5 shadow-wired backdrop-blur">
|
||||
<div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
|
||||
<div>
|
||||
<h2 class="text-lg font-bold text-slate-900">Panoramica</h2>
|
||||
<p class="mt-1 text-sm leading-7 text-slate-600">
|
||||
Trovi all’inizio le regole del motore wired, poi il catalogo completo di trigger, effect,
|
||||
selector, condition, extra e variabili.
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-2 text-xs font-medium">
|
||||
<span class="rounded-full bg-wired-50 px-3 py-2 text-wired-700">Engine + Tick</span>
|
||||
<span class="rounded-full bg-emerald-50 px-3 py-2 text-emerald-700">154 wired catalogati</span>
|
||||
<span class="rounded-full bg-fuchsia-50 px-3 py-2 text-fuchsia-700">HTML da Markdown</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<article class="rounded-3xl border border-white/70 bg-white/95 p-6 shadow-wired backdrop-blur sm:p-8">
|
||||
<div id="loading" class="rounded-2xl border border-slate-200 bg-slate-50 p-5 text-sm text-slate-600">
|
||||
Caricamento della reference in corso...
|
||||
</div>
|
||||
<div id="error" class="hidden rounded-2xl border border-rose-200 bg-rose-50 p-5 text-sm text-rose-700"></div>
|
||||
<div id="content" class="doc-content hidden"></div>
|
||||
</article>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const headingTranslations = new Map([
|
||||
['# Wired Full Reference', '# Riferimento Completo Wired'],
|
||||
['## 1. Scope', '## 1. Ambito'],
|
||||
['## 2. Wired Engine, Tick, and General Runtime Rules', '## 2. Motore Wired, Tick e Regole Generali del Runtime'],
|
||||
['## 3. Triggers', '## 3. Trigger'],
|
||||
['## 4. Effects', '## 4. Effetti'],
|
||||
['## 5. Selectors', '## 5. Selettori'],
|
||||
['## 6. Conditions', '## 6. Condizioni'],
|
||||
['## 7. Extras', '## 7. Extra'],
|
||||
['## 8. Variable Definitions', '## 8. Definizioni Variabili'],
|
||||
['## 9. Special Wired Items', '## 9. Elementi Wired Speciali'],
|
||||
['## 10. Practical Design Notes', '## 10. Note Pratiche di Progettazione'],
|
||||
['## 11. Quick Alias / Shared Runtime Notes', '## 11. Alias Rapidi e Note sul Runtime Condiviso'],
|
||||
['### General selector notes', '### Note generali sui selettori'],
|
||||
['### General condition notes', '### Note generali sulle condizioni']
|
||||
]);
|
||||
|
||||
const lineTranslations = [
|
||||
[/^- \*\*Class:\*\*/g, '- **Classe:**'],
|
||||
[/^- \*\*Behavior:\*\*/g, '- **Comportamento:**'],
|
||||
[/^- \*\*Main settings:\*\*/g, '- **Impostazioni principali:**'],
|
||||
[/^- \*\*Notes:\*\*/g, '- **Note:**'],
|
||||
[/^- \*\*Supported operations:\*\*/g, '- **Operazioni supportate:**'],
|
||||
[/^- \*\*Supported sort modes:\*\*/g, '- **Modalità di ordinamento supportate:**']
|
||||
];
|
||||
|
||||
const paragraphTranslations = new Map([
|
||||
['This document is a code-based reference for the current wired runtime in `Arcturus-Morningstar-Extended`.', 'Questo documento è un riferimento tecnico basato sul codice per il runtime wired attuale di `Arcturus-Morningstar-Extended`.'],
|
||||
['It covers:', 'Copre:'],
|
||||
['Primary runtime sources used for this reference:', 'Sorgenti principali del runtime usate per questa reference:'],
|
||||
['This file is meant to describe the runtime behavior and configuration surface, not the Nitro UI layout in detail. For `:wired` monitor and inspection tooling, also see `Arcturus-Morningstar-Extended/docs/wired_tools_reference.md`.', 'Questo file descrive il comportamento del runtime e la superficie di configurazione, non il layout Nitro nel dettaglio. Per gli strumenti `:wired` di monitor e inspection, vedi anche `Arcturus-Morningstar-Extended/docs/wired_tools_reference.md`.'],
|
||||
['The modern wired runtime is centered around these components:', 'Il runtime wired moderno ruota attorno a questi componenti:'],
|
||||
['At a high level, the engine processes a stack like this:', 'A livello alto, il motore processa uno stack in questo modo:'],
|
||||
['Important consequences of this model:', 'Conseguenze importanti di questo modello:'],
|
||||
['The centralized tick service is defined in `WiredTickService`.', 'Il servizio tick centralizzato è definito in `WiredTickService`.'],
|
||||
['Current core rules:', 'Regole principali attuali:'],
|
||||
['This means:', 'Questo significa:'],
|
||||
['The classic wired delay value is stored in half-second steps.', 'Il valore classico del delay wired è memorizzato in step da mezzo secondo.'],
|
||||
['Runtime rule:', 'Regola runtime:'],
|
||||
['Examples:', 'Esempi:'],
|
||||
['There are several separate notions of order:', 'Esistono più concetti distinti di ordine di esecuzione:'],
|
||||
['Practical takeaway:', 'Conclusione pratica:'],
|
||||
['Selectors build or refine the `WiredTargets` inside `WiredContext`.', 'I selettori costruiscono o raffinano i `WiredTargets` dentro `WiredContext`.'],
|
||||
['In practice:', 'In pratica:'],
|
||||
['Conditions are evaluated after selectors.', 'Le condizioni vengono valutate dopo i selettori.'],
|
||||
['General behavior:', 'Comportamento generale:'],
|
||||
['The runtime supports both:', 'Il runtime supporta sia:'],
|
||||
['The wired runtime has multiple safety layers:', 'Il runtime wired ha più livelli di protezione:'],
|
||||
['Main defaults from runtime/config:', 'Default principali da runtime/config:'],
|
||||
['The new engine tracks room diagnostics through `WiredRoomDiagnostics`.', 'Il nuovo motore traccia le diagnostiche stanza tramite `WiredRoomDiagnostics`.'],
|
||||
['This is where `:wired` monitor gets values such as:', 'È da qui che il monitor `:wired` ottiene valori come:'],
|
||||
['Heavy/overload decisions are based on rolling windows, not on a single event.', 'Le decisioni di heavy/overload si basano su finestre scorrevoli, non su un singolo evento.'],
|
||||
['The project still contains `WiredHandler`.', 'Il progetto contiene ancora `WiredHandler`.'],
|
||||
['Important practical notes:', 'Note pratiche importanti:'],
|
||||
['So when documenting stacks, it is best to think in terms of:', 'Quindi, quando si documentano gli stack, conviene ragionare in termini di:'],
|
||||
['Custom wired variables are defined by:', 'Le variabili wired custom sono definite da:'],
|
||||
['Shared rules:', 'Regole condivise:'],
|
||||
['Availability rules:', 'Regole di disponibilità:'],
|
||||
['Timestamp rules:', 'Regole sui timestamp:'],
|
||||
['Current context-status note:', 'Nota sullo stato del contesto:'],
|
||||
['These are part of the wired ecosystem, even if they are not regular trigger/effect/selector/condition/extra boxes.', 'Questi fanno parte dell’ecosistema wired anche se non sono box classici trigger/effect/selector/condition/extra.'],
|
||||
['Use:', 'Usa:'],
|
||||
['Remember:', 'Ricorda:'],
|
||||
['Check:', 'Controlla:']
|
||||
]);
|
||||
|
||||
function normalizeText(raw) {
|
||||
return raw
|
||||
.replace(/“/g, '“')
|
||||
.replace(/â€/g, '”')
|
||||
.replace(/’/g, '’')
|
||||
.replace(/–/g, '–')
|
||||
.replace(/—/g, '—')
|
||||
.replace(/…/g, '…');
|
||||
}
|
||||
|
||||
function localizeMarkdown(raw) {
|
||||
let output = normalizeText(raw);
|
||||
|
||||
headingTranslations.forEach((translated, original) => {
|
||||
output = output.replace(original, translated);
|
||||
});
|
||||
|
||||
paragraphTranslations.forEach((translated, original) => {
|
||||
output = output.replaceAll(original, translated);
|
||||
});
|
||||
|
||||
lineTranslations.forEach(([regex, replacement]) => {
|
||||
output = output.replace(regex, replacement);
|
||||
});
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
function slugify(text) {
|
||||
return text
|
||||
.toLowerCase()
|
||||
.normalize('NFD')
|
||||
.replace(/[\u0300-\u036f]/g, '')
|
||||
.replace(/[`"'’“”]/g, '')
|
||||
.replace(/[^a-z0-9]+/g, '-')
|
||||
.replace(/^-+|-+$/g, '');
|
||||
}
|
||||
|
||||
function buildToc() {
|
||||
const toc = document.getElementById('toc');
|
||||
const headings = [...document.querySelectorAll('#content h2, #content h3')];
|
||||
|
||||
toc.innerHTML = '';
|
||||
|
||||
headings.forEach((heading) => {
|
||||
const text = heading.textContent.trim();
|
||||
const id = slugify(text);
|
||||
heading.id = id;
|
||||
|
||||
const link = document.createElement('a');
|
||||
link.href = `#${id}`;
|
||||
link.textContent = text;
|
||||
link.className =
|
||||
`toc-link block rounded-2xl px-3 py-2 transition hover:bg-slate-100 hover:text-wired-700 ${
|
||||
heading.tagName === 'H3' ? 'ml-3 text-xs text-slate-500' : 'text-sm font-medium text-slate-700'
|
||||
}`;
|
||||
|
||||
toc.appendChild(link);
|
||||
});
|
||||
}
|
||||
|
||||
function wireSearch() {
|
||||
const search = document.getElementById('toc-search');
|
||||
const toc = document.getElementById('toc');
|
||||
|
||||
search.addEventListener('input', () => {
|
||||
const needle = search.value.trim().toLowerCase();
|
||||
const links = [...toc.querySelectorAll('a')];
|
||||
|
||||
links.forEach((link) => {
|
||||
const visible = !needle || link.textContent.toLowerCase().includes(needle);
|
||||
link.classList.toggle('hidden', !visible);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function wireActiveSection() {
|
||||
const links = [...document.querySelectorAll('#toc a')];
|
||||
const headingMap = links
|
||||
.map((link) => {
|
||||
const target = document.querySelector(link.getAttribute('href'));
|
||||
return target ? { link, target } : null;
|
||||
})
|
||||
.filter(Boolean);
|
||||
|
||||
const observer = new IntersectionObserver(
|
||||
(entries) => {
|
||||
entries.forEach((entry) => {
|
||||
const item = headingMap.find(({ target }) => target === entry.target);
|
||||
if (!item) return;
|
||||
item.link.classList.toggle('active', entry.isIntersecting);
|
||||
});
|
||||
},
|
||||
{ rootMargin: '-20% 0px -70% 0px', threshold: 0 }
|
||||
);
|
||||
|
||||
headingMap.forEach(({ target }) => observer.observe(target));
|
||||
}
|
||||
|
||||
async function loadReference() {
|
||||
const loading = document.getElementById('loading');
|
||||
const error = document.getElementById('error');
|
||||
const content = document.getElementById('content');
|
||||
|
||||
try {
|
||||
const response = await fetch('./wired_full_reference.md');
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP ${response.status}`);
|
||||
}
|
||||
|
||||
const raw = await response.text();
|
||||
const localized = localizeMarkdown(raw);
|
||||
const html = marked.parse(localized, { mangle: false, headerIds: false });
|
||||
|
||||
content.innerHTML = html;
|
||||
content.classList.remove('hidden');
|
||||
loading.classList.add('hidden');
|
||||
|
||||
buildToc();
|
||||
wireSearch();
|
||||
wireActiveSection();
|
||||
} catch (err) {
|
||||
loading.classList.add('hidden');
|
||||
error.classList.remove('hidden');
|
||||
error.textContent = `Impossibile caricare wired_full_reference.md (${err.message}).`;
|
||||
}
|
||||
}
|
||||
|
||||
loadReference();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user