98 lines
2.3 KiB
Swift
98 lines
2.3 KiB
Swift
import Vapor
|
|
|
|
/// Represents a generic form context that is used to generate form templates
|
|
/// that are handled by htmx.
|
|
struct HtmxFormCTX<Context: Content>: Content {
|
|
let formClass: String?
|
|
let formId: String
|
|
let htmxPostTargetUrl: String?
|
|
let htmxPutTargetUrl: String?
|
|
let htmxTarget: String
|
|
let htmxPushUrl: Bool
|
|
let htmxResetAfterRequest: Bool
|
|
let htmxSwapOob: String?
|
|
let htmxSwap: String?
|
|
let context: Context
|
|
|
|
init(
|
|
formClass: String? = nil,
|
|
formId: String,
|
|
htmxTargetUrl: TargetUrl,
|
|
htmxTarget: String,
|
|
htmxPushUrl: Bool,
|
|
htmxResetAfterRequest: Bool = true,
|
|
htmxSwapOob: HtmxSwap? = nil,
|
|
htmxSwap: HtmxSwap? = nil,
|
|
context: Context
|
|
) {
|
|
self.formClass = formClass
|
|
self.formId = formId
|
|
self.htmxPostTargetUrl = htmxTargetUrl.postUrl
|
|
self.htmxPutTargetUrl = htmxTargetUrl.putUrl
|
|
self.htmxTarget = htmxTarget
|
|
self.htmxPushUrl = htmxPushUrl
|
|
self.htmxResetAfterRequest = htmxResetAfterRequest
|
|
self.htmxSwapOob = htmxSwapOob?.rawValue
|
|
self.htmxSwap = htmxSwap?.rawValue
|
|
self.context = context
|
|
}
|
|
|
|
enum HtmxSwap: String {
|
|
case innerHTML
|
|
case outerHTML
|
|
case afterbegin
|
|
case beforebegin
|
|
case afterend
|
|
case beforeend
|
|
case delete
|
|
case none
|
|
}
|
|
|
|
enum TargetUrl {
|
|
case put(String)
|
|
case post(String)
|
|
|
|
var putUrl: String? {
|
|
guard case let .put(url) = self else { return nil }
|
|
return url
|
|
}
|
|
|
|
var postUrl: String? {
|
|
guard case let .post(url) = self else { return nil }
|
|
return url
|
|
}
|
|
}
|
|
}
|
|
|
|
struct EmptyContent: Content {}
|
|
|
|
struct ButtonLabelContext: Content {
|
|
let buttonLabel: String
|
|
}
|
|
|
|
extension HtmxFormCTX where Context == ButtonLabelContext {
|
|
init(
|
|
formClass: String? = nil,
|
|
formId: String,
|
|
htmxTargetUrl: TargetUrl,
|
|
htmxTarget: String,
|
|
htmxPushUrl: Bool,
|
|
htmxResetAfterRequest: Bool = true,
|
|
htmxSwapOob: HtmxSwap? = nil,
|
|
htmxSwap: HtmxSwap? = nil,
|
|
buttonLabel: String
|
|
) {
|
|
self.init(
|
|
formClass: formClass,
|
|
formId: formId,
|
|
htmxTargetUrl: htmxTargetUrl,
|
|
htmxTarget: htmxTarget,
|
|
htmxPushUrl: htmxPushUrl,
|
|
htmxResetAfterRequest: htmxResetAfterRequest,
|
|
htmxSwapOob: htmxSwapOob,
|
|
htmxSwap: htmxSwapOob,
|
|
context: .init(buttonLabel: buttonLabel)
|
|
)
|
|
}
|
|
}
|