{% load static %} {% if scholar_asset_stage == "head" %} {% comment %} scitex-sdk's `stx-mount` contract: the server declares where this app is mounted so client code never has to guess. Always ends in "/", so JS joins endpoint names WITHOUT a leading slash and never normalises. Emitted here rather than by the SDK because `scitex_editor_page` -- which injects it automatically -- serves built SPA shells, and this is a Django-rendered template. {% endcomment %} {% comment %} NO |default FILTER. The root prefix is "" under scitex-sdk, and Django's `default` fires on FALSY -- so `|default:'/'` silently rewrote the correct "" back into the old "/", making every root request build "//api/..." : protocol-relative, off-origin. That is the exact failure the convention reversal exists to prevent, and it passed a test asserting the OLD value. This block used to be `{# ... #}`, which DJANGO ONLY STRIPS ON A SINGLE LINE -- a multi-line `{# #}` is emitted verbatim into the page. It was rendering as visible text at the top of the UI; the operator saw it in the browser before any test did. {% endcomment %} {% comment %} PWA (installable): scholar's own manifest + theme + iOS icon. The shared shell deliberately stays PWA-agnostic (every leaf has its own name/icons), so the app declares its own. No service worker: the standalone app is stateless and a cache layer would risk stale-data surprises — installable is the goal here, offline is a separate decision. {% endcomment %} {% comment %} SDK SSoT content-tabs primitive (operator UI standard, card scholar-ui-standard-tabs-colors-20261016): the shared sheet owns the tab layout + selected state (read from aria-selected). Requires scitex-sdk>=0.3.9 -- underline-only selected tab (navy/gold, SDK #60); older releases carry the vetoed boxed + brand-blue look. {% endcomment %} {% comment %} SDK SSoT panes (operator brief-04): the columns are the shared data-stx-panes / data-stx-pane element; this sheet + panes.js own the desktop row contract and the phone tab bar. layout="app" keeps scholar's own desktop geometry (see _layout.css). {% endcomment %} {% elif scholar_asset_stage == "scripts" %} {{ scholar_i18n|json_script:"SCHOLAR_I18N" }} {% comment %} Shared AppHeader mount + picker placement. Deferred modules run in document order, so the mount client registers before this placement script, and both run before DOMContentLoaded fires. {% endcomment %} {% comment %} SDK SSoT panes companion (operator brief-04): auto-mounts on [data-stx-panes] and owns the phone pane tab bar + switching. {% endcomment %} {% endif %}