Add route block
This commit is contained in:
@ -15,6 +15,8 @@ enum ContentBlock: String, CaseIterable {
|
||||
|
||||
case screens
|
||||
|
||||
case route
|
||||
|
||||
var processor: BlockProcessor.Type {
|
||||
switch self {
|
||||
case .audio: return AudioBlock.self
|
||||
@ -24,6 +26,7 @@ enum ContentBlock: String, CaseIterable {
|
||||
case .buttons: return ButtonsBlock.self
|
||||
case .labels: return LabelsBlock.self
|
||||
case .screens: return PhoneScreensBlock.self
|
||||
case .route: return RouteBlock.self
|
||||
}
|
||||
}
|
||||
}
|
||||
|
82
CHDataManagement/Generator/Blocks/RouteBlock.swift
Normal file
82
CHDataManagement/Generator/Blocks/RouteBlock.swift
Normal file
@ -0,0 +1,82 @@
|
||||
|
||||
struct RouteBlock: KeyedBlockProcessor {
|
||||
|
||||
enum Key: String {
|
||||
case chartTitle
|
||||
case components
|
||||
case mapTitle
|
||||
case image
|
||||
case caption
|
||||
case file
|
||||
}
|
||||
|
||||
static let blockId: ContentBlock = .route
|
||||
|
||||
let content: Content
|
||||
|
||||
let results: PageGenerationResults
|
||||
|
||||
let language: ContentLanguage
|
||||
|
||||
init(content: Content, results: PageGenerationResults, language: ContentLanguage) {
|
||||
self.content = content
|
||||
self.results = results
|
||||
self.language = language
|
||||
}
|
||||
|
||||
private var thumbnailWidth: Int {
|
||||
content.settings.pages.contentWidth
|
||||
}
|
||||
|
||||
private var largeImageWidth: Int {
|
||||
content.settings.pages.largeImageWidth
|
||||
}
|
||||
|
||||
func process(_ arguments: [Key : String], markdown: Substring) -> String {
|
||||
let rawComponents = arguments[.components] ?? "all"
|
||||
guard let imageId = arguments[.image],
|
||||
let fileId = arguments[.file],
|
||||
let components = RouteViewComponents(rawValue: rawComponents) else {
|
||||
invalid(markdown)
|
||||
return ""
|
||||
}
|
||||
|
||||
guard let image = content.image(imageId) else {
|
||||
results.missing(file: imageId, source: "Route block")
|
||||
return ""
|
||||
}
|
||||
guard let file = content.file(fileId) else {
|
||||
results.missing(file: imageId, source: "Route block")
|
||||
return ""
|
||||
}
|
||||
results.used(file: image)
|
||||
results.require(file: file)
|
||||
|
||||
let thumbnail = image.imageSet(width: thumbnailWidth, height: thumbnailWidth, language: language)
|
||||
results.require(imageSet: thumbnail)
|
||||
|
||||
let largeImage = image.imageSet(width: largeImageWidth, height: largeImageWidth, language: language)
|
||||
results.require(imageSet: largeImage)
|
||||
|
||||
results.require(header: .routeJs)
|
||||
|
||||
let id = imageId.replacingOccurrences(of: ".", with: "-")
|
||||
|
||||
let views = RouteViews(
|
||||
localization: language == .english ? .english : .german,
|
||||
chartTitle: arguments[.chartTitle],
|
||||
chartId: "chart-" + id,
|
||||
components: components,
|
||||
mapTitle: arguments[.mapTitle],
|
||||
mapId: "map-" + id,
|
||||
filePath: file.absoluteUrl,
|
||||
imageId: "image-" + id,
|
||||
thumbnail: thumbnail,
|
||||
largeImage: largeImage,
|
||||
caption: arguments[.caption])
|
||||
|
||||
results.require(footer: views.script)
|
||||
|
||||
return views.content
|
||||
}
|
||||
}
|
@ -19,6 +19,9 @@ enum KnownHeaderElement {
|
||||
|
||||
case swiperJs
|
||||
|
||||
/// The Javascript to compute and animate route statistics
|
||||
case routeJs
|
||||
|
||||
case style(String)
|
||||
|
||||
func header(content: Content) -> HeaderElement? {
|
||||
@ -55,6 +58,10 @@ enum KnownHeaderElement {
|
||||
if let swiperJs = content.settings.posts.swiperJsFile {
|
||||
return .js(file: swiperJs, defer: true)
|
||||
}
|
||||
case .routeJs:
|
||||
if let routeJs = content.settings.pages.routeJsFile {
|
||||
return .js(file: routeJs, defer: false)
|
||||
}
|
||||
case .style(let code):
|
||||
return .style(code)
|
||||
}
|
||||
@ -96,6 +103,8 @@ extension KnownHeaderElement: CustomStringConvertible {
|
||||
return "swiper-css"
|
||||
case .swiperJs:
|
||||
return "swiper-js"
|
||||
case .routeJs:
|
||||
return "route-js"
|
||||
case .style(let style):
|
||||
return "style: " + style
|
||||
}
|
||||
|
Reference in New Issue
Block a user