Vapor plugin for type-safe HTML/CSS views using Swep.
The most popular choice for rendering HTML/CSS in a Vapor web app is to use the Leaf templating language, but it exposes your application to runtime errors and invalid HTML/CSS. Our plugin prevents these runtime issues at compile-time by embedding HTML/CSS directly into Swift’s powerful type system. It uses the Swep DSL for constructing HTML/CSS documents using plain Swift data structures.
To use the plugin all you have to do is return a Document
or Stylesheet
value from your router callback:
import Swep
import Vapor
import SwepVaporSupport
var env = try Environment.detect()
let app = Application(env)
defer { app.shutdown() }
app.get { _ in
document {
head {
style {
selector("*") {
margin(.px(5))
backgroundColor(.hex(0xd1d1d1))
}
}
link()
.rel(.stylesheet)
.href("style.min.css")
}
body {
h1("Hello, type-safe HTML/CSS on Vapor!")
.color(.green)
}
}
}
app.get("style.min.css") {
stylesheet {
selector("body") {
padding(.rem(0.5))
lineHeight(1.35)
fontFamily("SanFranciscoDisplay-Regular")
}
selector("h1") {
marginTop(.rem(2))
marginBottom(.px(0))
}
}
}
try app.run()
We've included a sample Vapor application in this repo to show off its usage. To run the app immediately, simply do:
swift run SwepVaporSupportExample
- Open your browser to
http://localhost:8080
The HTML/CSS for that page is constructed and rendered with Swep!!
If you want to use swift-web-page-vapor in a project that uses SPM, it's as simple as adding a dependencies
clause to your Package.swift
:
dependencies: [
.package(url: "https://github.com/alja7dali/swift-web-page-vapor.git", from: "0.0.1")
]
From there you can add SwepVaporSupport
as target dependencies.
let SwepVaporSupport: Target.Dependency = .product(name: "SwepVaporSupport", package: "swift-web-page-vapor")
...
targets: [
.target(name: "yourProject", dependencies: [SwepVaporSupport]),
]
All modules are released under the MIT license. See LICENSE for details.