@ablogcms/htmx
v3.2.35
Published
htmx integration (setup, instance resolution, extensions) for a-blog cms
Keywords
Readme
@ablogcms/htmx
a-blog cms の htmx 統合(セットアップ・インスタンス解決・拡張登録)。
設計
htmx はシングルトン前提のライブラリで、複数インスタンスが同居すると拡張レジストリ・config・履歴状態がインスタンス毎に分裂して誤動作する。本パッケージはページ内で有効な htmx インスタンスを常に 1 つに保つことを責務とする。
setupHtmx(element, config, hooks)—window.htmx(サーバーが script タグで読み込んだ static 戦略のインスタンス)があればそれを、なければバンドル同梱版を使う。セットアップ(config 適用・拡張登録・リスナー登録)はインスタンスに対して一度だけ実行され、htmx.process(element)は毎回実行される。registerAcmsExtensions(htmx, deps)— a-blog cms 標準の htmx 拡張一式(acms-geolocation等)を渡されたインスタンスに登録する。登録の入口をこの関数ひとつに集約しているため、拡張が増えても呼び出し側の修正は不要。依存(位置情報の取得手段など)はdepsで注入する(本体側は@ablogcms/lib/geolocationを渡す)。
副作用 import は提供しない(tree-shaking との相性が悪く、sideEffects 宣言漏れで黙って落とされる事故を防ぐため、登録はすべて明示的な関数呼び出しで行う)。
利用例
import { setupHtmx, registerAcmsExtensions } from '@ablogcms/htmx';
import geolocation from '@ablogcms/lib/geolocation';
setupHtmx(document.body, ACMS.Config.htmxConfig, {
onAfterSwap: (target) => ACMS.Dispatch(target),
registerExtensions: (htmx) => registerAcmsExtensions(htmx, { getGeolocation: geolocation }),
});