ChWebsiteApp/CHDataManagement/Model/LocalizedPage.swift
2025-01-04 08:44:26 +01:00

78 lines
1.8 KiB
Swift

import Foundation
import SwiftUI
/**
A localized page contains the page content of a single language,
including the title, url path and required resources
*/
final class LocalizedPage: ObservableObject {
unowned let content: Content
/**
The string to use when creating the url for the page.
Defaults to ``id`` if unset.
*/
@Published
var urlString: String
/**
The headline to use when showing the entry on it's own page
*/
@Published
var title: String
@Published
var lastModified: Date?
/**
The url used on the old version of the website.
Needed to redirect links to their new locations.
*/
let originalUrl: String?
@Published
var linkPreviewImage: FileResource?
@Published
var linkPreviewTitle: String?
@Published
var linkPreviewDescription: String?
@Published
var hideTitle: Bool
init(content: Content,
urlString: String,
title: String,
lastModified: Date? = nil,
originalUrl: String? = nil,
linkPreviewImage: FileResource? = nil,
linkPreviewTitle: String? = nil,
linkPreviewDescription: String? = nil,
hideTitle: Bool = false) {
self.content = content
self.urlString = urlString
self.title = title
self.lastModified = lastModified
self.originalUrl = originalUrl
self.linkPreviewImage = linkPreviewImage
self.linkPreviewTitle = linkPreviewTitle
self.linkPreviewDescription = linkPreviewDescription
self.hideTitle = hideTitle
}
func isValid(urlComponent: String) -> Bool {
content.isValidIdForTagOrPageOrPost(urlComponent) &&
!content.containsPage(withUrlComponent: urlComponent)
}
}
extension LocalizedPage: LinkPreviewItem {
}