struct RouteViews: HtmlProducer { let localization: RouteLocalization /// The HTML id attribute used to enable fullscreen images let map: PageImage let displayedTypes: Set let mapId: String let mapTitle: String? let filePath: String let chartId: String let chartTitle: String? init(localization: RouteLocalization, chartTitle: String?, chartId: String, displayedTypes: Set, mapTitle: String?, mapId: String, filePath: String, imageId: String, thumbnail: ImageSet, largeImage: ImageSet, caption: String? ) { self.localization = localization self.displayedTypes = displayedTypes self.mapId = mapId self.filePath = filePath self.map = PageImage( imageId: imageId, thumbnail: thumbnail, largeImage: largeImage, caption: caption, id: mapId, className: "map-container", imageContent: "
") self.chartTitle = chartTitle self.chartId = chartId self.mapTitle = mapTitle } private func button(series: RouteStatisticType) -> String { let label = localization.statistics[series]! return "" } func populate(_ result: inout String) { if let mapTitle { result += "

\(mapTitle)

" } map.populate(&result) let series = displayedTypes.sorted() guard !series.isEmpty else { return } if let chartTitle { result += "

\(chartTitle)

" } result += "
" result += "
" for type in series { result += button(series: type) } result += "
" // Picker result += "
" result += "" result += "
\(localization.fallback)
" result += "
" result += "
" result += "
" result += "
\(localization.loadFail)
" result += "
" // Graph result += "
" result += "" result += "" result += "" result += "
" // Picker result += "
" // Chart } var script: String { """ """ } }