Created
January 15, 2024 01:51
-
-
Save AngelMunoz/1a4a9cc7b49e821cfc7ff4b8b6a9822a to your computer and use it in GitHub Desktop.
A few non exhaustive Htmx bindings and helpers for ktor and kotlin.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package me.tunaxor.htmx | |
import io.ktor.server.application.* | |
import io.ktor.server.request.* | |
import io.ktor.server.response.* | |
import kotlinx.html.CommonAttributeGroupFacade | |
enum class HxSwap { | |
InnerHTML, | |
OuterHTML, | |
BeforeBegin, | |
AfterBegin, | |
BeforeEnd, | |
AfterEnd, | |
Delete, | |
None | |
} | |
val HxSwap.asString: String | |
get() { | |
return when (this) { | |
HxSwap.InnerHTML -> "innerHTML" | |
HxSwap.OuterHTML -> "outerHTML" | |
HxSwap.BeforeBegin -> "beforebegin" | |
HxSwap.AfterBegin -> "afterbegin" | |
HxSwap.BeforeEnd -> "beforeend" | |
HxSwap.AfterEnd -> "afterend" | |
HxSwap.Delete -> "delete" | |
HxSwap.None -> "none" | |
} | |
} | |
fun CommonAttributeGroupFacade.hxGet(url: String) { | |
attributes["hx-get"] = url | |
} | |
fun CommonAttributeGroupFacade.hxPost(url: String) { | |
attributes["hx-post"] = url | |
} | |
fun CommonAttributeGroupFacade.hxPut(url: String) { | |
attributes["hx-put"] = url | |
} | |
fun CommonAttributeGroupFacade.hxPatch(url: String) { | |
attributes["hx-patch"] = url | |
} | |
fun CommonAttributeGroupFacade.hxDelete(url: String) { | |
attributes["hx-delete"] = url | |
} | |
fun CommonAttributeGroupFacade.hxIndicator(indicator: String) { | |
attributes["hx-indicator"] = indicator | |
} | |
fun CommonAttributeGroupFacade.hxSwap(swap: HxSwap) { | |
attributes["hx-swap"] = swap.asString | |
} | |
fun CommonAttributeGroupFacade.hxTarget(selector: String) { | |
attributes["hx-target"] = selector | |
} | |
fun CommonAttributeGroupFacade.hxTrigger(trigger: String) { | |
attributes["hx-trigger"] = trigger | |
} | |
fun CommonAttributeGroupFacade.hxSync(sync: String) { | |
attributes["hx-sync"] = sync | |
} | |
fun CommonAttributeGroupFacade.hxSelect(selector: String) { | |
attributes["hx-select"] = selector | |
} | |
fun CommonAttributeGroupFacade.hxSwapOob(shouldSwap: Boolean) { | |
attributes["hx-swap-oob"] = "$shouldSwap" | |
} | |
fun CommonAttributeGroupFacade.hxPreserve(selector: String) { | |
attributes["hx-preserve"] = selector | |
} | |
fun CommonAttributeGroupFacade.hxEncoding(encoding: String) { | |
attributes["hx-encoding"] = encoding | |
} | |
fun CommonAttributeGroupFacade.hxVars(vars: String) { | |
attributes["hx-vars"] = vars | |
} | |
fun CommonAttributeGroupFacade.hxConfirm(confirm: String) { | |
attributes["hx-confirm"] = confirm | |
} | |
fun CommonAttributeGroupFacade.hxPrompt(prompt: String) { | |
attributes["hx-prompt"] = prompt | |
} | |
fun CommonAttributeGroupFacade.hxBoost(shouldBoost: Boolean) { | |
attributes["hx-boost"] = "$shouldBoost" | |
} | |
fun CommonAttributeGroupFacade.hxWs(url: String) { | |
attributes["hx-ws"] = url | |
} | |
fun CommonAttributeGroupFacade.hxSse(url: String) { | |
attributes["hx-sse"] = url | |
} | |
fun CommonAttributeGroupFacade.hxPushUrl(shouldPush: Boolean) { | |
attributes["hx-push-url"] = "$shouldPush" | |
} | |
fun CommonAttributeGroupFacade.hxHistoryElt(shouldHistory: Boolean) { | |
attributes["hx-history-elt"] = "$shouldHistory" | |
} | |
fun CommonAttributeGroupFacade.hxExt(extension: String) { | |
attributes["hx-ext"] = extension | |
} | |
fun CommonAttributeGroupFacade.hxOn(event: String, handler: String) { | |
attributes["hx-on:$event"] = handler | |
} | |
fun CommonAttributeGroupFacade.hxSelectOob(selector: String) { | |
attributes["hx-select-oob"] = selector | |
} | |
fun CommonAttributeGroupFacade.hxDisable(shouldDisable: Boolean) { | |
attributes["hx-disable"] = "$shouldDisable" | |
} | |
fun CommonAttributeGroupFacade.hxDisabledElt(selector: String) { | |
attributes["hx-disabled-elt"] = selector | |
} | |
fun CommonAttributeGroupFacade.hxDisinherit(disinherit: String) { | |
attributes["hx-disinherit"] = disinherit | |
} | |
fun CommonAttributeGroupFacade.hxHeaders(headers: String) { | |
attributes["hx-headers"] = headers | |
} | |
fun CommonAttributeGroupFacade.hxInclude(include: String) { | |
attributes["hx-include"] = include | |
} | |
fun CommonAttributeGroupFacade.hxParams(params: String) { | |
attributes["hx-params"] = params | |
} | |
fun CommonAttributeGroupFacade.hxValidate(validate: String) { | |
attributes["hx-validate"] = validate | |
} | |
fun ApplicationCall.hxBoosted(): Boolean { | |
return request.header("HX-Boosted") == "true" | |
} | |
fun ApplicationCall.hxCurrentUrl(): String? { | |
return request.header("HX-Current-Url") | |
} | |
fun ApplicationCall.hxHistoryRestoreRequest(): Boolean { | |
return request.header("HX-History-Restore-Request") == "true" | |
} | |
fun ApplicationCall.xhPrompt(): String? { | |
return request.header("HX-Prompt") | |
} | |
fun ApplicationCall.hxRequest(): Boolean { | |
return request.header("HX-Request") == "true" | |
} | |
fun ApplicationCall.hxTarget(): String? { | |
return request.header("HX-Target") | |
} | |
fun ApplicationCall.hxTriggerName(): String? { | |
return request.header("HX-Trigger-Name") | |
} | |
fun ApplicationCall.hxTrigger(): String? { | |
return request.header("HX-Trigger") | |
} | |
fun ApplicationCall.hxLocation(url: String) { | |
response.header("HX-Location", url) | |
} | |
fun ApplicationCall.xhPushUrl(url: String) { | |
response.header("HX-Push-Url", url) | |
} | |
fun ApplicationCall.hxRedirect(shouldRedrect: Boolean) { | |
response.header("HX-Redirect", "$shouldRedrect") | |
} | |
fun ApplicationCall.hxRefresh(shouldRefresh: Boolean) { | |
response.header("HX-Refresh", "$shouldRefresh") | |
} | |
fun ApplicationCall.hxReplaceUrl(url: String) { | |
response.header("HX-Replace-Url", url) | |
} | |
fun ApplicationCall.hxReswap(swap: HxSwap) { | |
response.header("HX-Reswap", swap.asString) | |
} | |
fun ApplicationCall.hxRetarget(selector: String) { | |
response.header("HX-Retarget", selector) | |
} | |
fun ApplicationCall.xhReselect(selector: String) { | |
response.header("HX-Reselect", selector) | |
} | |
fun ApplicationCall.hxTrigger(trigger: String) { | |
response.header("HX-Trigger", trigger) | |
} | |
fun ApplicationCall.hxTriggerAfterSettle(trigger: String) { | |
response.header("HX-Trigger-After-Settle", trigger) | |
} | |
fun ApplicationCall.hxTriggerAfterSwap(trigger: String) { | |
response.header("HX-Trigger-After-Swap", trigger) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment