Unified detail views, model

This commit is contained in:
Christoph Hagen
2024-12-16 09:54:21 +01:00
parent 1e67a99866
commit 31d1ecb8bd
57 changed files with 853 additions and 954 deletions

View File

@ -34,11 +34,11 @@ final class TagOverviewPage: Item {
}
private func internalPath(for language: ContentLanguage) -> String {
content.settings.paths.tagsOutputFolderPath + "/" + localized(in: language).urlString
content.settings.paths.tagsOutputFolderPath + "/" + localized(in: language).urlComponent
}
func contains(urlComponent: String) -> Bool {
english.urlString == urlComponent || german.urlString == urlComponent
english.urlComponent == urlComponent || german.urlComponent == urlComponent
}
var file: TagOverviewFile {
@ -53,16 +53,16 @@ extension TagOverviewPage: LocalizedItem {
final class LocalizedTagOverviewPage: ObservableObject {
unowned let content: Content
@Published
var title: String
/**
The string to use when creating the url for the page.
Defaults to ``id`` if unset.
*/
@Published
var urlString: String
var urlComponent: String
@Published
var linkPreviewImage: FileResource?
@ -73,27 +73,35 @@ final class LocalizedTagOverviewPage: ObservableObject {
@Published
var linkPreviewDescription: String?
init(title: String, urlString: String, linkPreviewImage: FileResource? = nil, linkPreviewTitle: String? = nil, linkPreviewDescription: String? = nil) {
init(content: Content, title: String, urlString: String, linkPreviewImage: FileResource? = nil, linkPreviewTitle: String? = nil, linkPreviewDescription: String? = nil) {
self.content = content
self.title = title
self.urlString = urlString
self.urlComponent = urlString
self.linkPreviewImage = linkPreviewImage
self.linkPreviewTitle = linkPreviewTitle
self.linkPreviewDescription = linkPreviewDescription
}
init(file: LocalizedTagOverviewFile, image: FileResource?) {
init(content: Content, file: LocalizedTagOverviewFile, image: FileResource?) {
self.content = content
self.title = file.title
self.urlString = file.url
self.urlComponent = file.url
self.linkPreviewImage = image
self.linkPreviewTitle = file.linkPreviewTitle
self.linkPreviewDescription = file.linkPreviewDescription
}
var file: LocalizedTagOverviewFile {
.init(url: urlString,
.init(url: urlComponent,
title: title,
linkPreviewImage: linkPreviewImage?.id,
linkPreviewTitle: linkPreviewTitle,
linkPreviewDescription: linkPreviewDescription)
}
func isValid(urlComponent: String) -> Bool {
!urlComponent.isEmpty &&
content.isValidIdForTagOrPageOrPost(urlComponent) &&
!content.containsTag(withUrlComponent: urlComponent)
}
}