feat: Reorganizes files.
This commit is contained in:
97
Sources/App/Controllers/View/Contexts/HtmxFormCTX.swift
Normal file
97
Sources/App/Controllers/View/Contexts/HtmxFormCTX.swift
Normal file
@@ -0,0 +1,97 @@
|
||||
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)
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user