84 lines
1.8 KiB
Swift
84 lines
1.8 KiB
Swift
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
|
|
}
|
|
|
|
|
|
}
|