generated from Labyricorn/labyricorn-project-template
Step 5 Complete
This commit is contained in:
+18
-9
@@ -2,19 +2,28 @@
|
||||
<html lang="en">
|
||||
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>XZBT-NGN Exhibit Engine</title><link rel="stylesheet" href="/public/style.css"></head>
|
||||
<body>
|
||||
<header><h1>XZBT-NGN Exhibit Engine</h1><p>Contract 5.2 · Single-exhibit engineering console</p></header>
|
||||
<header><h1>XZBT-NGN Exhibit Engine</h1><p>Contract 5.2 · One exhibit at a time</p></header>
|
||||
<main>
|
||||
<section><h2>Connection</h2>
|
||||
<form id="connection"><label for="exhibit-url">Exhibit URL (same origin)</label><div class="connection-row"><input id="exhibit-url" placeholder="/test-fixtures/reference-exhibits/…/index.html" required><button>Load exhibit</button><button id="reconnect" type="button" disabled>Reconnect</button><button id="disconnect" type="button">Disconnect</button></div></form>
|
||||
<p id="status" role="status">Disconnected</p><button id="refresh" disabled>Refresh state</button>
|
||||
<p>Only load trusted local exhibits. Required capabilities in available/loading states may accept requests through an exhibit fallback; the exhibit decides.</p>
|
||||
<form id="connection"><label for="exhibit-url">Exhibit URL (same origin)</label><div class="connection-row"><input id="exhibit-url" placeholder="/public/exhibits/example/index.html" required><button>Load exhibit</button><button id="reconnect" type="button" disabled>Reconnect</button><button id="disconnect" type="button" disabled>Disconnect</button></div></form>
|
||||
<p>Enter a trusted exhibit's local served path or a URL on this origin. Load exhibit also switches exhibits. Reconnect starts a new session, or reloads the last exhibit after disconnect.</p>
|
||||
<p id="status" role="status">Disconnected</p><p id="identity"></p><p id="loaded-url"></p>
|
||||
<p id="latest-error" role="alert" hidden></p>
|
||||
<div id="frame-container"></div>
|
||||
</section>
|
||||
<section><h2>Session and exhibit</h2><pre id="metadata">No negotiated session.</pre><h3>Capabilities</h3><pre id="capabilities">[]</pre></section>
|
||||
<section><h2>Discovered targets <span id="target-count"></span></h2><div id="catalog">Connect to discover the catalog.</div></section>
|
||||
<section><h2>Current persistent state</h2><p>Last reported exhibit values. This host view may be uncertain while resynchronizing.</p><pre id="state">{}</pre></section>
|
||||
<section><h2>Incoming events</h2><p>Latest 200 events, including source, sequence, revision, and correlation when supplied.</p><pre id="events" aria-label="Incoming events">[]</pre></section>
|
||||
<section><h2>Protocol and errors</h2><pre id="errors" role="log">[]</pre></section>
|
||||
<section><h2>Exhibit controls <span id="target-count"></span></h2>
|
||||
<details><summary>Capabilities</summary><ul id="capabilities"></ul><p>Unavailable requirements disable affected controls. Available/loading capabilities may use an exhibit fallback; the exhibit decides whether to accept a request.</p></details>
|
||||
<p>Reported values are authoritative. New values are drafts; select Set or Invoke to submit. Rediscovery resets drafts.</p>
|
||||
<div id="catalog">Connect an exhibit to discover its controls.</div>
|
||||
</section>
|
||||
<section><h2>State and metadata</h2><button id="refresh" disabled>Refresh state</button>
|
||||
<details><summary>Session and exhibit metadata</summary><pre id="metadata">No negotiated session.</pre></details>
|
||||
<details><summary>Current persistent state</summary><p>Last reported exhibit values. This host view may be uncertain while resynchronizing.</p><pre id="state">{}</pre></details>
|
||||
</section>
|
||||
<section><h2>Protocol diagnostics</h2>
|
||||
<details><summary>Incoming events</summary><p>Latest 200 session events, including source, sequence, revision, and correlation when supplied.</p><pre id="events" aria-label="Incoming events">[]</pre></details>
|
||||
<details><summary>Protocol and errors</summary><p>Latest 200 entries across connections in this page. Timestamps identify earlier failures.</p><button id="clear-errors">Clear log</button><pre id="errors" role="log">[]</pre></details>
|
||||
</section>
|
||||
</main>
|
||||
<script type="module" src="/src/ui.js"></script>
|
||||
</body></html>
|
||||
|
||||
@@ -13,3 +13,14 @@ pre { white-space: pre-wrap; overflow-wrap: anywhere; background: #111d28; paddi
|
||||
.controls { display: flex; align-items: end; flex-wrap: wrap; gap: 12px; } .controls label { min-width: 150px; }
|
||||
.notice { color: #ffcd7a; } details { margin: 8px 0; } summary { cursor: pointer; } output { display: block; margin: 8px 0; }
|
||||
button:focus-visible, input:focus-visible, select:focus-visible { outline: 2px solid #7cceff; outline-offset: 2px; }
|
||||
#status { font-weight: 650; padding: 8px 12px; border-left: 4px solid #ffcd7a; }
|
||||
#status[data-state=connected] { border-color: #80d6ad; }
|
||||
#status[data-state=error], #latest-error { color: #ffcd7a; }
|
||||
#loaded-url { overflow-wrap: anywhere; font-size: 13px; }
|
||||
#identity { font-weight: 600; }
|
||||
#capabilities { display: flex; flex-wrap: wrap; gap: 8px 24px; padding-left: 20px; }
|
||||
.target-group { margin-top: 24px; }
|
||||
.target-group > h3 { background: #233444; padding: 8px 12px; }
|
||||
.target { padding: 16px 12px; }
|
||||
.target code { overflow-wrap: anywhere; }
|
||||
@media (max-width: 600px) { header, main { padding: 12px; } section { padding: 12px; } .connection-row input { flex-basis: 100%; } }
|
||||
|
||||
Reference in New Issue
Block a user