@ betterportal/ 主题运行时间
共享后端和浏览器- shell 运行时间为 BetterPortal 节点外壳包.
软件包在此顺序下组装后端的一个JavaScript资产:
- 安装的 HTMX 核心
htmx.org软件包. - 外壳的打出演示文稿适配器.
- 更好的门户
bp-shell运行时间. - 捆绑的HTMX SSE扩展.
浏览器从不动态地发现或加载扩展. 所需资产由后端解决,而缺失资产则失败捆绑创建.
外壳适配器作为 TSX 编写 jsx-htmx是因为 js() 帮助者 :
/** @jsxImportSource jsx-htmx */
import { js } from "jsx-htmx";
import {
buildBetterPortalShellRuntimeAsset,
type BetterPortalShellAdapter
} from "@betterportal/theme-runtime";
const adapterSource = js(() => {
window.BetterPortalShellAdapter = {
setLoading(loading, outlet) {
outlet?.toggleAttribute("data-bp-loading", loading);
}
} satisfies BetterPortalShellAdapter;
});
const asset = await buildBetterPortalShellRuntimeAsset({
adapterSource
});
js() 返回安全 RawText。直接传递给运行时的构建者,或者直接将其放入一个 <script> 键。 不要打电话 .toString() 而不把它包起来 raw()。 。 。 .
共享运行时间拥有服务/应用 URL 重写,管理 BP 头头,头觉预装,HTMX 生命周期处理,下载,历史,认证失败,SSE, bp-route 和途径铬州。 它从未在浏览器中发现服务计划.
所管理的BP头只被发送到HTTPS上注册的应用服务源. 本地开发可在 localhost, (中文(简体) ), 127.0.0.1,或 [::1];其他HTTP服务URL必须迁移到HTTPS. Shells 发布启用的路由、槽、碎片、 认证和 shell 绑定的出处 。 仍然支持基于遗产来源的抬头所有权和范围.
预加载是推测性的:不包含已禁用控件和所配置的认证源,不遵循HTTP重定向,并等待响应指令/UI更改以被明确激活. 重写链接保留租户 URL href 并使用服务 URL 在 hx-get。初始内容加载器为一发;空加载器 URL为惰性。 在主内容 401 上, shell 拥有登录导航, 并将页眉刷新到 5 秒; 延迟刷新不能覆盖更新的导航 .
普通内部 <a href="/route"> 使用本地GET或POST的链接和表格会自动升级到HTMX,并通过自有服务进行路由. 默认 #bp-main 导航, 配置的 app UI 路由是权威的 href 和历史;运行时间从不推动未配置的服务路径. 一个赤裸的 <form> 设置到当前服务视图。 使用 bp-no-override (或 data-bp-no-override在元素或祖先上保持本地浏览器的行为; data-bp-no-route 用于壳体所属部件的剩余支持.
运行时管理的 HTMX 请求自动声明 Accept: text/html; mode=page|fragment; SSE 连接总是被标记 HX-Request-Type: partial,保留 SSE 介质类型,并获得与其他自助请求相同的范围 BP 认证/文本头. 明确非HTML Accept 头被保留了 .
也写着: <meta name="betterportal:session-id" content="<uuidv7>"> 添加 bp.session_id 在每一次运行时间管理的请求中,到 W3C 行李。 一个文档负载的ID会持续, 以 document.documentElement.dataset.bpSessionId,并且只是相关性。 shells 应使框架提供的请求会话生效; 当元标记缺失时, 运行时间会产生倒数 .
对于初始外壳渲染, 展开 betterPortalChromeAttributes(route.chrome) 在标记的元素上 data-bp-shell-root。在路由响应后,运行时间将显示 bp-chrome-* 内容类型参数,更新相应的参数 data-bp-chrome-* 属性,删除 stale 属性,并调用可选键 applyChrome(chrome, previousChrome, root) 适生钩. 主题通常应对照数据属性和保留使用 CSS applyChrome 用于无法在CSS中表达的演示文稿。 主题不得注册重复的HTMX铬收听器,也不得从铬值推断出认证状态.
外壳适配器仅用于演示. 它们可实施加载/误入UI、组件初始化和处置、覆盖清理、滚动和可选的铬演示。 一个 shell 包不添加 htmx.org这个运行时间拥有并捆绑它。 此运行时间也导入 jsx-htmx,但外壳导入 jsx-htmx 对TSX来说,必须直接宣布它为自己的依赖。 不要捆绑库存预装扩展: BetterPortal 预装执行是其中的一部分 bp-shell 因此它可以附加范围化的BP头并再用前置反应. 固定的 HTMX 扩展允许列表是 bp-shell, sse。 。 。 .
运行时间测试包括无头铬预装还原. 从工作空间根运行 npx playwright install chromium 曾经 npm test (Linux CI 语法 --with-deps) (中文(简体) ).
Plain service sockets只有在完整启用的页面挂起解析后才能升级为主板HTMX. 单是预装标记并不能表示路由成功. 在 UI 挂载中声明时,会识别来自更古老 shell 元数据的编码服务模板占位符 。 自定义主题必须重建/重新配置其捆绑的共享运行时间以接收修正;见 11.0.0 路线说明。 。 。 .
普通服务目的地在任何UI化名之前就解决自有服务问题。 属于另一服务的同名UI 挂载无法接管链接 。 壳牌自有导航明确标识. 配置的 UI 路径只有在没有自有服务目的地匹配时才是一个相容倒置.