Rework content commands, add audio player

This commit is contained in:
Christoph Hagen
2024-12-14 16:31:40 +01:00
parent b3b8c9a610
commit be2aab2ea8
52 changed files with 1758 additions and 767 deletions

View File

@ -1,8 +1,6 @@
import Foundation
final class Page: ObservableObject {
unowned let content: Content
final class Page: Item {
/**
The unique id of the entry
@ -10,6 +8,15 @@ final class Page: ObservableObject {
@Published
var id: String
/**
The external link this page points to.
If this value is not `nil`, then the page has no content
and many other features are disabled.
*/
@Published
var externalLink: String?
@Published
var isDraft: Bool
@ -44,6 +51,7 @@ final class Page: ObservableObject {
init(content: Content,
id: String,
externalLink: String?,
isDraft: Bool,
createdDate: Date,
startDate: Date,
@ -51,8 +59,8 @@ final class Page: ObservableObject {
german: LocalizedPage,
english: LocalizedPage,
tags: [Tag]) {
self.content = content
self.id = id
self.externalLink = externalLink
self.isDraft = isDraft
self.createdDate = createdDate
self.startDate = startDate
@ -61,6 +69,8 @@ final class Page: ObservableObject {
self.german = german
self.english = english
self.tags = tags
super.init(content: content)
}
func localized(in language: ContentLanguage) -> LocalizedPage {
@ -78,6 +88,28 @@ final class Page: ObservableObject {
id = newId
return true
}
var isExternalUrl: Bool {
externalLink != nil
}
// MARK: Paths
func absoluteUrl(for language: ContentLanguage) -> String {
if let url = externalLink {
return url
}
// TODO: Record link to trace connections between pages
return makeCleanAbsolutePath(internalPath(for: language))
}
func filePathRelativeToOutputFolder(for language: ContentLanguage) -> String {
makeCleanRelativePath(internalPath(for: language))
}
private func internalPath(for language: ContentLanguage) -> String {
content.settings.pages.pageUrlPrefix + "/" + localized(in: language).urlString
}
}
extension Page: Identifiable {