import Foundation struct Page { let metadata: Metadata /// The input folder where the page data is stored let inputFolder: URL let path: String init?(folder: URL, path: String) throws { self.path = path guard let metadata = try Metadata(in: folder) else { return nil } self.inputFolder = folder self.metadata = metadata } } extension Page { static let metadataDateFormatter: DateFormatter = { let df = DateFormatter() df.dateFormat = "dd.MM.yy" return df }() } extension Page: SiteElement { var sortIndex: Int? { metadata.sortIndex } var sortDate: Date? { metadata.date } var elements: [SiteElement] { [] } func cornerText(for language: String) -> String? { localized(for: language).cornerText } var isExternalPage: Bool { metadata.languages.contains { $0.externalUrl != nil } } func fullPageUrl(for language: String) -> String { localized(for: language).externalUrl ?? "\(path)/\(language).html" } } extension Page: LocalizedMetadataContainer { /** Get the url of the content markdown file for a language. To check if the file also exists, use `existingContentUrl(for:)` */ func contentUrl(for language: String) -> URL { inputFolder.appendingPathComponent("\(language).md") } /** Get the url of existing markdown content for a language. */ func existingContentUrl(for language: String) -> URL? { let url = contentUrl(for: language) guard url.exists else { return nil } return url } func hasContent(for language: String) -> Bool { existingContentUrl(for: language) != nil } }