Add header and event detail pages, fix copyright, rename essay
- Detail pages for all 18 HTTP headers with descriptions, example usage, direction badges (request/response/both), and live demos for SX-Prompt, SX-Trigger, SX-Retarget - Detail pages for all 10 DOM events with descriptions, example usage, and live demos for beforeRequest, afterSettle, responseError, validationFailed - Header and event table rows now link to their detail pages - Fix copyright symbol on home page (was literal \u00a9, now actual ©) - Rename "Godel, Escher, Bach" essay to "Strange Loops" with updated summary - Remove duplicate script injection from bootstrapper page Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -115,6 +115,43 @@
|
||||
:handler-code attr-handler
|
||||
:wire-placeholder-id attr-wire-id)))
|
||||
|
||||
(defpage reference-header-detail
|
||||
:path "/reference/headers/<slug>"
|
||||
:auth :public
|
||||
:layout (:sx-section
|
||||
:section "Reference"
|
||||
:sub-label "Reference"
|
||||
:sub-href "/reference/"
|
||||
:sub-nav (~section-nav :items reference-nav-items :current "Headers")
|
||||
:selected "Headers")
|
||||
:data (header-detail-data slug)
|
||||
:content (if header-not-found
|
||||
(~reference-attr-not-found :slug slug)
|
||||
(~reference-header-detail-content
|
||||
:title header-title
|
||||
:direction header-direction
|
||||
:description header-description
|
||||
:example-code header-example
|
||||
:demo header-demo)))
|
||||
|
||||
(defpage reference-event-detail
|
||||
:path "/reference/events/<slug>"
|
||||
:auth :public
|
||||
:layout (:sx-section
|
||||
:section "Reference"
|
||||
:sub-label "Reference"
|
||||
:sub-href "/reference/"
|
||||
:sub-nav (~section-nav :items reference-nav-items :current "Events")
|
||||
:selected "Events")
|
||||
:data (event-detail-data slug)
|
||||
:content (if event-not-found
|
||||
(~reference-attr-not-found :slug slug)
|
||||
(~reference-event-detail-content
|
||||
:title event-title
|
||||
:description event-description
|
||||
:example-code event-example
|
||||
:demo event-demo)))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Protocols section
|
||||
;; ---------------------------------------------------------------------------
|
||||
|
||||
@@ -16,6 +16,8 @@ def _register_sx_helpers() -> None:
|
||||
"primitives-data": _primitives_data,
|
||||
"reference-data": _reference_data,
|
||||
"attr-detail-data": _attr_detail_data,
|
||||
"header-detail-data": _header_detail_data,
|
||||
"event-detail-data": _event_detail_data,
|
||||
"read-spec-file": _read_spec_file,
|
||||
"bootstrapper-data": _bootstrapper_data,
|
||||
})
|
||||
@@ -39,7 +41,7 @@ def _reference_data(slug: str) -> dict:
|
||||
from content.pages import (
|
||||
REQUEST_ATTRS, BEHAVIOR_ATTRS, SX_UNIQUE_ATTRS,
|
||||
REQUEST_HEADERS, RESPONSE_HEADERS,
|
||||
EVENTS, JS_API, ATTR_DETAILS,
|
||||
EVENTS, JS_API, ATTR_DETAILS, HEADER_DETAILS,
|
||||
)
|
||||
|
||||
if slug == "attributes":
|
||||
@@ -63,18 +65,22 @@ def _reference_data(slug: str) -> dict:
|
||||
elif slug == "headers":
|
||||
return {
|
||||
"req-headers": [
|
||||
{"name": n, "value": v, "desc": d}
|
||||
{"name": n, "value": v, "desc": d,
|
||||
"href": f"/reference/headers/{n}" if n in HEADER_DETAILS else None}
|
||||
for n, v, d in REQUEST_HEADERS
|
||||
],
|
||||
"resp-headers": [
|
||||
{"name": n, "value": v, "desc": d}
|
||||
{"name": n, "value": v, "desc": d,
|
||||
"href": f"/reference/headers/{n}" if n in HEADER_DETAILS else None}
|
||||
for n, v, d in RESPONSE_HEADERS
|
||||
],
|
||||
}
|
||||
elif slug == "events":
|
||||
from content.pages import EVENT_DETAILS
|
||||
return {
|
||||
"events-list": [
|
||||
{"name": n, "desc": d}
|
||||
{"name": n, "desc": d,
|
||||
"href": f"/reference/events/{n}" if n in EVENT_DETAILS else None}
|
||||
for n, d in EVENTS
|
||||
],
|
||||
}
|
||||
@@ -190,3 +196,42 @@ def _attr_detail_data(slug: str) -> dict:
|
||||
"attr-demo": SxExpr(f"(~{demo_name})") if demo_name else None,
|
||||
"attr-wire-id": wire_id,
|
||||
}
|
||||
|
||||
|
||||
def _header_detail_data(slug: str) -> dict:
|
||||
"""Return header detail data for a specific header slug."""
|
||||
from content.pages import HEADER_DETAILS
|
||||
from shared.sx.helpers import SxExpr
|
||||
|
||||
detail = HEADER_DETAILS.get(slug)
|
||||
if not detail:
|
||||
return {"header-not-found": True}
|
||||
|
||||
demo_name = detail.get("demo")
|
||||
return {
|
||||
"header-not-found": None,
|
||||
"header-title": slug,
|
||||
"header-direction": detail["direction"],
|
||||
"header-description": detail["description"],
|
||||
"header-example": detail.get("example"),
|
||||
"header-demo": SxExpr(f"(~{demo_name})") if demo_name else None,
|
||||
}
|
||||
|
||||
|
||||
def _event_detail_data(slug: str) -> dict:
|
||||
"""Return event detail data for a specific event slug."""
|
||||
from content.pages import EVENT_DETAILS
|
||||
from shared.sx.helpers import SxExpr
|
||||
|
||||
detail = EVENT_DETAILS.get(slug)
|
||||
if not detail:
|
||||
return {"event-not-found": True}
|
||||
|
||||
demo_name = detail.get("demo")
|
||||
return {
|
||||
"event-not-found": None,
|
||||
"event-title": slug,
|
||||
"event-description": detail["description"],
|
||||
"event-example": detail.get("example"),
|
||||
"event-demo": SxExpr(f"(~{demo_name})") if demo_name else None,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user