import Elementary import Foundation import Infrastructure import Localization /// The HTML page rendered for a not-found response, with its text localized to a given locale. struct NotFoundPage { // MARK: Properties /// The analytics tracker embedded as a deferred script in the document head, or `nil` to omit it. let analytics: Analytics? /// The version token appended to the page's asset URLs, or `nil` to leave them unversioned. let assetVersion: String? /// The locale the page content is localized to. let locale: Locale /// Resolves the page's text from the bundled String Catalog for the page's ``locale``. private let localize: Localize // MARK: Initializers /// Creates a not-found page localized to the given locale. /// - Parameters: /// - locale: the locale the page content is localized to. /// - assetVersion: the version token appended to the page's asset URLs, or `nil` (the default) to leave them unversioned. /// - analytics: the analytics tracker embedded in the document head, or `nil` (the default) to omit it. init( locale: Locale, assetVersion: String? = nil, analytics: Analytics? = nil ) { self.analytics = analytics self.assetVersion = assetVersion self.locale = locale self.localize = .init(bundle: .module) } } // MARK: - Page extension NotFoundPage: Page { // MARK: Properties var content: some HTML { h1 { localize("notFound.heading", locale: locale) } p { localize("notFound.message", locale: locale) } } var scripts: [any Asset] { [StaticFile.notFound, StaticFile.shared] } var stylesheets: [any Asset] { [StaticFile.shared, StaticFile.notFound] } var title: String { localize("notFound.title", locale: locale) } }