Add OOB header swaps for sx docs navigation + enable OAuth + fragments
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 3m10s

- OOB nav updates: AJAX navigation now swaps both menu bar levels
  (main nav highlighting + sub-nav with current page) using the same
  oob_header_sx/oob_page_sx pattern as blog/market/events
- Enable OAuth for sx and test apps (removed from _NO_OAUTH, added sx
  to ALLOWED_CLIENTS, added app_urls for sx/test/orders)
- Fetch real cross-service fragments (cart-mini, auth-menu, nav-tree)
  instead of hardcoding empty values
- Add :selected param to ~menu-row-sx for white text current-page label
- Fix duplicate element IDs: use menu-row-sx child_id/child mechanism
  instead of manual header_child_sx wrappers
- Fix home page copy: "Server-rendered DOM over the wire (no HTML)"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-02 23:22:01 +00:00
parent 3d55145e5f
commit 13bcf755f6
8 changed files with 461 additions and 316 deletions

View File

@@ -20,8 +20,8 @@ def register(url_prefix: str = "/") -> Blueprint:
async def index():
if _is_sx_request():
from shared.sx.helpers import sx_response
from sxc.sx_components import home_content_sx
return sx_response(home_content_sx())
from sxc.sx_components import home_oob_sx
return sx_response(await home_oob_sx())
from shared.sx.page import get_template_context
from sxc.sx_components import render_home_page_sx
@@ -42,8 +42,8 @@ def register(url_prefix: str = "/") -> Blueprint:
async def docs_page(slug: str):
if _is_sx_request():
from shared.sx.helpers import sx_response
from sxc.sx_components import docs_content_partial_sx
return sx_response(docs_content_partial_sx(slug))
from sxc.sx_components import docs_oob_sx
return sx_response(await docs_oob_sx(slug))
from shared.sx.page import get_template_context
from sxc.sx_components import render_docs_page_sx
@@ -59,8 +59,8 @@ def register(url_prefix: str = "/") -> Blueprint:
async def reference_index():
if _is_sx_request():
from shared.sx.helpers import sx_response
from sxc.sx_components import reference_content_partial_sx
return sx_response(reference_content_partial_sx(""))
from sxc.sx_components import reference_oob_sx
return sx_response(await reference_oob_sx(""))
from shared.sx.page import get_template_context
from sxc.sx_components import render_reference_page_sx
@@ -72,8 +72,8 @@ def register(url_prefix: str = "/") -> Blueprint:
async def reference_page(slug: str):
if _is_sx_request():
from shared.sx.helpers import sx_response
from sxc.sx_components import reference_content_partial_sx
return sx_response(reference_content_partial_sx(slug))
from sxc.sx_components import reference_oob_sx
return sx_response(await reference_oob_sx(slug))
from shared.sx.page import get_template_context
from sxc.sx_components import render_reference_page_sx
@@ -94,8 +94,8 @@ def register(url_prefix: str = "/") -> Blueprint:
async def protocol_page(slug: str):
if _is_sx_request():
from shared.sx.helpers import sx_response
from sxc.sx_components import protocol_content_partial_sx
return sx_response(protocol_content_partial_sx(slug))
from sxc.sx_components import protocol_oob_sx
return sx_response(await protocol_oob_sx(slug))
from shared.sx.page import get_template_context
from sxc.sx_components import render_protocol_page_sx
@@ -116,8 +116,8 @@ def register(url_prefix: str = "/") -> Blueprint:
async def examples_page(slug: str):
if _is_sx_request():
from shared.sx.helpers import sx_response
from sxc.sx_components import examples_content_partial_sx
return sx_response(examples_content_partial_sx(slug))
from sxc.sx_components import examples_oob_sx
return sx_response(await examples_oob_sx(slug))
from shared.sx.page import get_template_context
from sxc.sx_components import render_examples_page_sx
@@ -205,8 +205,8 @@ def register(url_prefix: str = "/") -> Blueprint:
async def essay_page(slug: str):
if _is_sx_request():
from shared.sx.helpers import sx_response
from sxc.sx_components import essay_content_partial_sx
return sx_response(essay_content_partial_sx(slug))
from sxc.sx_components import essay_oob_sx
return sx_response(await essay_oob_sx(slug))
from shared.sx.page import get_template_context
from sxc.sx_components import render_essay_page_sx