intercooler.js → htmx 移行ガイド

このガイドの目的は、

#始める前に

Intercooler の目的と htmx の目的の違いに留意することが重要です。

Intercooler は、ほとんどの機能にカスタム HTML 属性を提供しようとしました。これは、より長い属性リスト(その多くは便宜的なもの、またはクライアント側中心の性質のものと説明できる)に明らかです。

htmx は、コアを小さく保つというアプローチに従っており、利用可能な属性の数は少なく、ほとんどがコンテンツの読み込みと交換に焦点を当てています。

この機能は、主に 2 つの方法で拡張されています。

  1. 拡張機能。htmx 拡張機能フレームワークにより、特定の機能を実現するためのカスタム拡張機能/プラグインが可能です。その一例として、Intercooler に組み込まれている依存関係メカニズムがありますが、htmx コアには存在しません。拡張機能 を通じて利用可能です。また、Intercooler ではすぐに利用できなかった新しい動作を可能にする他の拡張機能もあります。例えば、preload 拡張機能

  2. バニラ JavaScript、alpine.js、またはhyperscript を使用した htmx イベントシステム。Hyperscript は、HyperTalk を参考に HTML に埋め込むように設計された、小さくオープンなスクリプト言語であり、htmx の連携プロジェクトです。

htmx には、Intercooler にない機能も含まれています。これは、このガイドの範囲外です。

最後に、これはまだ開発中であり、時間の経過とともに変更される可能性があることに注意してください。

#移行情報

このガイドの残りの部分は、表のセットとして構成されており、それぞれが Intercooler の一般的な機能領域を htmx の同等物にマップしようと試みています。

#属性

注記:特定の Intercooler 属性(主にクライアント側固有の属性、例:ic-action と関連属性)には、htmx の直接的な同等物はありません。代わりに、hyperscript(http://hyperscript.org を参照)と呼ばれる小さく表現力豊かな言語があり、HTML に埋め込むように設計されており、htmx とシームレスに連携します。これにより、特にクライアント側中心の Intercooler 属性の一部と同じ動作を、より柔軟でオープンな方法で実現できます。

hyperscript に関する htmx ドキュメント を参照して、実践的な例と、hyperscript の背後にある考え方についてさらに詳しく知ることができます。

Intercoolerhtmx
ic-actionなし。Hyperscript を使用してください。例:<button _="on click add .clicked">私に「clicked」クラスを追加</button>hyperscript に関する htmx ドキュメントhyperscript ドキュメント を参照して、さらに例を確認してください。
ic-action-targetなし。Hyperscript ターゲット式 を使用してください。例:<div _="on click set .button.style.color to 'red'">すべてのボタンを赤色に設定</div>
ic-add-classなし。Hyperscript を使用してください。例:<button _="on click add .clicked">私に「clicked」クラスを追加</button>hyperscript に関する htmx ドキュメントhyperscript ドキュメント を参照して、さらに例を確認してください。
ic-append-fromなし。例えばhx-gethx-swap(値はbeforeend)を使用して同等の機能を実現できます。
ic-attr-srcなし。直接的な同等機能は存在しません(検討中)
ic-confirmhx-confirm
ic-delete-fromhx-delete
ic-depshx-trigger="path-deps"path-deps="/foo/bar" を一緒に使用します。(path-deps 拡張機能が必要です)
ic-disable-when-doc-hiddenなし。直接的な同等機能は存在しません(検討中)
ic-disable-when-doc-inactiveなし。直接的な同等機能は存在しません(検討中)
ic-enhancehx-boost
ic-fix-idsなし。直接的な同等機能は存在しません(検討中)
ic-get-fromhx-get
ic-global-includeなし。hx-include を使用して同様の機能を実現できます。
ic-global-indicatorなし。hx-indicator を使用して同様の機能を実現できます。
ic-history-elthx-history-elt
ic-includehx-include
ic-indicatorhx-indicator
ic-limit-childrenなし。直接的な同等機能は存在しません(検討中)
ic-local-vars直接的な同等物はありません。hx-vars を使用して促進できます。
ic-on-beforeSendなし。イベント(例:htmx:beforeRequest)と組み合わせてHyperscript を使用してください。hyperscript に関する htmx ドキュメントhyperscript ドキュメント を参照して、さらに例を確認してください。
ic-on-beforeTriggerなし。イベント(例:htmx:beforeRequest)と組み合わせてHyperscript を使用してください。hyperscript に関する htmx ドキュメントhyperscript ドキュメント を参照して、さらに例を確認してください。
ic-on-completeなし。イベント(例:htmx:afterRequest)と組み合わせてHyperscript を使用してください。hyperscript に関する htmx ドキュメントhyperscript ドキュメント を参照して、さらに例を確認してください。
ic-on-errorなし。イベント(例:htmx:afterRequest)と組み合わせてHyperscript を使用してください。hyperscript に関する htmx ドキュメントhyperscript ドキュメント を参照して、さらに例を確認してください。
ic-on-successなし。イベント(例:htmx:afterRequest)と組み合わせてHyperscript を使用してください。hyperscript に関する htmx ドキュメントhyperscript ドキュメント を参照して、さらに例を確認してください。
ic-patch-tohx-patch
ic-pause-pollingなし。ロードポーリング のような手法を使用できます。
ic-pollなし。スケジュールされたロードをトリガーすることで同等の機能を実現できます。例:<div hx-get="/news" hx-trigger="every 2s"></div>ポーリングに関するドキュメントを参照してください。
ic-poll-repeatsなし。スケジュールされたロードをトリガーすることで同等の機能を実現できます。例:<div hx-get="/news" hx-trigger="every 2s"></div>ポーリングに関するドキュメントを参照してください。
ic-post-errors-toなし。イベントを介してエラーをトラップし、htmx.logger メカニズム を介してログに記録できます。
ic-post-tohx-post
ic-prepend-from値がbeforeend に設定されたhx-swap 属性 を使用して、同じ結果を得ることができます。
ic-prompthx-prompt
ic-push-urlhx-push-url
ic-push-paramshtmx では、GET の場合、パラメータは自動的にプッシュされます。
ic-put-tohx-put
ic-remove-afterなし。hyperscript に関する htmx ドキュメント を参照して、hyperscript を使用した実装方法の例を確認してください。
ic-remove-classなし。Hyperscript を使用してください。例:<button class="red" _="on click remove .red">私から「red」クラスを削除</button>hyperscript に関する htmx ドキュメントhyperscript ドキュメント を参照して、さらに例を確認してください。
ic-replace-target値がouterHTML に設定されたhx-swap 属性 を使用して、同じ結果を得ることができます。
ic-scroll-offsetなし。直接的な同等機能は存在しません。
ic-scroll-to-targethx-swap 属性のscroll 修飾子とshow 修飾子を参照してください。
ic-select-from-responsehx-select
ic-srcなし。トリガーと組み合わせてhx-get を使用するか、path-deps 拡張機能 を使用してください。
ic-sse-srchx-sse
ic-style-srcなし。直接的な同等機能は存在しません(検討中)
ic-swap-stylehx-swap
ic-switch-classなし。_hyperscript に関する htmx ドキュメント を参照して、_hyperscripthtmx:beforeOnLoad イベント を使用した実装方法の例を確認してください。
ic-targethx-target
ic-transform-responseなし。client-side-templates 拡張機能 により、mustachehandlebars、またはnunjucks のようなテンプレートエンジンを使用して JSON レスポンスを変換できます。
ic-transition-durationなし。htmx の交換メカニズムと CSS トランジション の性質を利用することで、同等の機能を実現できます。
ic-trigger-delayhx-trigger修飾子 を使用してください。
ic-trigger-fromfrom: 節を使用してhx-trigger を使用してください。
ic-trigger-onhx-trigger
ic-verbなし。デフォルトでは、htmx は実際の HTTP メソッドを送信します。ただし、method-override 拡張機能 を使用して、非GET 動詞をPOST に変更できます。

#リクエストパラメータ

Intercoolerhtmx
ic-requestなし。HX-Requestヘッダーを使用してください。
_methodなし。method-override エクステンションと、それが提供するX-HTTP-Method-Overrideヘッダーを使用してください。
ic-element-idなし
ic-element-nameなし
ic-target-idなし。HX-Targetヘッダーを使用してください。
ic-trigger-idなし。HX-Triggerヘッダーを使用してください。
ic-trigger-nameなし。HX-Trigger-Nameヘッダーを使用してください。
ic-current-urlなし。HX-Current-URLヘッダーを使用してください。
ic-prompt-valueなし。HX-Promptヘッダーを使用してください。

#リクエストヘッダー

Intercoolerhtmx
X-IC-RequestHX-Request
X-HTTP-Method-OverrideX-HTTP-Method-Override

#レスポンスヘッダー

Intercoolerhtmx
X-IC-TriggerHX-TriggerHX-Trigger-After-SettleHX-Trigger-After-Swap。詳細はドキュメントを参照してください。
X-IC-RefreshHX-Refresh
X-IC-RedirectHX-Redirect
X-IC-Scriptなし。直接的な同等機能は存在しません(検討中)
X-IC-CancelPollingなし。ポーリングをキャンセルするには、HTTPレスポンスコード286で応答してください。
X-IC-ResumePollingなし。直接的な同等機能は存在しません。
X-IC-SetPollIntervalなし。ロードポーリングを使用している場合、異なるロード間隔を含むコンテンツで応答します。
X-IC-Openなし。直接的な同等機能は存在しません(検討中)
X-IC-PushURLHX-Push
X-IC-Removeなし。直接的な同等機能は存在しません(検討中)
X-IC-Titleなし。直接的な同等機能は存在しません(検討中)
X-IC-Title-Encodedなし。直接的な同等機能は存在しません(検討中)
X-IC-Set-Local-Varsなし。直接的な同等機能は存在しません(検討中)

#イベント

注記:すべてのhtmxイベントは、キャメルケースとケバブケースの両方で発生します。

Intercoolerhtmx
log.icなし。htmx.loggerで同等の機能を実現できます。イベントとログドキュメントを参照してください。
beforeAjaxSend.ichtmx:configRequest
beforeHeaders.icなし。直接的な同等機能は存在しません(検討中)
afterHeaders.icなし。直接的な同等機能は存在しません(検討中)
beforeSend.ichtmx:beforeRequest
success.ichtmx:afterOnLoad
after.success.icほぼ同等なもの:htmx:beforeSwap
error.ichtmx:sendError または htmx:sseError または htmx:responseError または htmx:swapError または htmx:onLoadError (未定)
complete.ichtmx:afterRequest
onPoll.ic直接的な同等物はありません。ロードポーリングを使用する場合、[htmx:load イベント]を使用できる可能性があります。
handle.onpopstate.ichtmx:historyRestore (未定)
elementAdded.ichtmx:load
pushUrl.ic未定
beforeHistorySnapshot.ichtmx:beforeHistorySave

#JavaScript APIメソッド

Intercoolerhtmx
Intercooler.refresh(eltOrPath)PathDeps.refresh() (path-deps エクステンションが必要です)
Intercooler.triggerRequest(elt, handler)htmx.trigger()
Intercooler.processNodes(elt)htmx.process()
Intercooler.closestAttrValue(elt, attr)htmx.closest() は任意のセレクターで使用できます。
Intercooler.verbFor(elt)なし。直接的な同等機能は存在しません(検討中)
Intercooler.isDependent(elt1, elt2)なし。直接的な同等機能は存在しません(検討中)
Intercooler.getTarget(elt1)なし。直接的な同等機能は存在しません(検討中)
Intercooler.processHeaders(elt, xhr)なし。直接的な同等機能は存在しません(検討中)
Intercooler.ready(func(elt))htmx.onLoad()
LeadDyno.startPolling(elt)なし。直接的な同等機能は存在しません(検討中)
LeadDyno.stopPolling(elt)なし。直接的な同等機能は存在しません(検討中)

#メタタグ

Intercoolerhtmx
<meta name="intercoolerjs:use-data-prefix" content="true"/>なし。メタタグを指定せずにdata-プレフィックスを使用できます。htmxは、このようにhtmx属性を自動的に認識します。例:<a data-hx-post="/click">Click Me!</a>
<meta name="intercoolerjs:use-actual-http-method" content="true"/>なし。デフォルトでは、htmxは実際のHTTPメソッドを送信します。ただし、method-overrideエクステンションを使用して、すべてのGET以外のリクエストの動詞をPOSTに変更できます。