Custom page link texts, optional post title
This commit is contained in:
@ -13,18 +13,6 @@ extension Content {
|
||||
originalUrl: tag.originalURL)
|
||||
}
|
||||
|
||||
private func convert(_ post: LocalizedPostFile, images: [String : FileResource]) -> LocalizedPost {
|
||||
LocalizedPost(
|
||||
content: self,
|
||||
title: post.title,
|
||||
text: post.content,
|
||||
lastModified: post.lastModifiedDate,
|
||||
images: post.images.compactMap { images[$0] },
|
||||
linkPreviewImage: post.linkPreviewImage.map { images[$0] },
|
||||
linkPreviewTitle: post.linkPreviewTitle,
|
||||
linkPreviewDescription: post.linkPreviewDescription)
|
||||
}
|
||||
|
||||
private func convert(_ page: LocalizedPageFile, images: [String : FileResource]) -> LocalizedPage {
|
||||
LocalizedPage(
|
||||
content: self,
|
||||
@ -96,8 +84,8 @@ extension Content {
|
||||
let posts: [String : Post] = postsData.reduce(into: [:]) { dict, data in
|
||||
let (postId, post) = data
|
||||
let linkedPage = post.linkedPageId.map { pages[$0] }
|
||||
let german = convert(post.german, images: images)
|
||||
let english = convert(post.english, images: images)
|
||||
let german = LocalizedPost(content: self, file: post.german, images: images)
|
||||
let english = LocalizedPost(content: self, file: post.english, images: images)
|
||||
|
||||
dict[postId] = Post(
|
||||
content: self,
|
||||
|
@ -83,16 +83,3 @@ private extension Post {
|
||||
linkedPageId: linkedPage?.id)
|
||||
}
|
||||
}
|
||||
|
||||
private extension LocalizedPost {
|
||||
|
||||
var postFile: LocalizedPostFile {
|
||||
.init(images: images.map { $0.id },
|
||||
title: title.nonEmpty,
|
||||
content: text,
|
||||
lastModifiedDate: lastModified,
|
||||
linkPreviewImage: linkPreviewImage?.id,
|
||||
linkPreviewTitle: linkPreviewTitle,
|
||||
linkPreviewDescription: linkPreviewDescription)
|
||||
}
|
||||
}
|
||||
|
@ -12,8 +12,8 @@ extension LocalizedItem {
|
||||
|
||||
func localized(in language: ContentLanguage) -> Localized {
|
||||
switch language {
|
||||
case .german: return german
|
||||
case .english: return english
|
||||
case .german: german
|
||||
case .english: english
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ final class LocalizedPost: ObservableObject {
|
||||
unowned let content: Content
|
||||
|
||||
@Published
|
||||
var title: String
|
||||
var title: String?
|
||||
|
||||
@Published
|
||||
var text: String
|
||||
@ -17,6 +17,10 @@ final class LocalizedPost: ObservableObject {
|
||||
@Published
|
||||
var images: [FileResource]
|
||||
|
||||
/// The text to show for the link to the `linkedPage`
|
||||
@Published
|
||||
var pageLinkText: String?
|
||||
|
||||
@Published
|
||||
var linkPreviewImage: FileResource?
|
||||
|
||||
@ -31,18 +35,50 @@ final class LocalizedPost: ObservableObject {
|
||||
text: String,
|
||||
lastModified: Date? = nil,
|
||||
images: [FileResource] = [],
|
||||
pageLinkText: String? = nil,
|
||||
linkPreviewImage: FileResource? = nil,
|
||||
linkPreviewTitle: String? = nil,
|
||||
linkPreviewDescription: String? = nil) {
|
||||
self.content = content
|
||||
self.title = title ?? ""
|
||||
self.title = title
|
||||
self.text = text
|
||||
self.lastModified = lastModified
|
||||
self.images = images
|
||||
self.pageLinkText = pageLinkText
|
||||
self.linkPreviewImage = linkPreviewImage
|
||||
self.linkPreviewTitle = linkPreviewTitle
|
||||
self.linkPreviewDescription = linkPreviewDescription
|
||||
}
|
||||
|
||||
init(content: Content, file: LocalizedPostFile, images: [String : FileResource]) {
|
||||
self.content = content
|
||||
self.title = file.title
|
||||
self.text = file.content
|
||||
self.lastModified = file.lastModifiedDate
|
||||
self.images = file.images.compactMap { images[$0] }
|
||||
self.pageLinkText = file.pageLinkText
|
||||
self.linkPreviewImage = file.linkPreviewImage.map { images[$0] }
|
||||
self.linkPreviewTitle = file.linkPreviewTitle
|
||||
self.linkPreviewDescription = file.linkPreviewDescription
|
||||
}
|
||||
|
||||
var postFile: LocalizedPostFile {
|
||||
.init(images: images.map { $0.id },
|
||||
title: title,
|
||||
content: text,
|
||||
lastModifiedDate: lastModified,
|
||||
pageLinkText: pageLinkText,
|
||||
linkPreviewImage: linkPreviewImage?.id,
|
||||
linkPreviewTitle: linkPreviewTitle,
|
||||
linkPreviewDescription: linkPreviewDescription)
|
||||
}
|
||||
|
||||
func contains(_ string: String) -> Bool {
|
||||
if let title, title.contains(string) {
|
||||
return true
|
||||
}
|
||||
return text.contains(string)
|
||||
}
|
||||
}
|
||||
|
||||
extension LocalizedPost: LinkPreviewItem {
|
||||
|
@ -107,11 +107,17 @@ final class Post: Item {
|
||||
tags.append(tag)
|
||||
}
|
||||
|
||||
func localized(in language: ContentLanguage) -> LocalizedPost {
|
||||
switch language {
|
||||
case .english: return english
|
||||
case .german: return german
|
||||
}
|
||||
/**
|
||||
A title for the UI, not the generation.
|
||||
*/
|
||||
override func title(in language: ContentLanguage) -> String {
|
||||
localized(in: language).title ?? id
|
||||
}
|
||||
|
||||
func contains(_ string: String) -> Bool {
|
||||
id.contains(string) ||
|
||||
german.contains(string) ||
|
||||
english.contains(string)
|
||||
}
|
||||
|
||||
func isValid(id: String) -> Bool {
|
||||
@ -134,3 +140,7 @@ final class Post: Item {
|
||||
extension Post: DateItem {
|
||||
|
||||
}
|
||||
|
||||
extension Post: LocalizedItem {
|
||||
|
||||
}
|
||||
|
@ -11,10 +11,14 @@ final class LocalizedPostSettings: ObservableObject {
|
||||
@Published
|
||||
var feedUrlPrefix: String
|
||||
|
||||
init(title: String, description: String, feedUrlPrefix: String) {
|
||||
@Published
|
||||
var defaultPageLinkText: String
|
||||
|
||||
init(title: String, description: String, feedUrlPrefix: String, defaultPageLinkText: String) {
|
||||
self.title = title
|
||||
self.description = description
|
||||
self.feedUrlPrefix = feedUrlPrefix
|
||||
self.defaultPageLinkText = defaultPageLinkText
|
||||
}
|
||||
|
||||
// MARK: Storage
|
||||
@ -23,12 +27,14 @@ final class LocalizedPostSettings: ObservableObject {
|
||||
self.title = file.feedTitle
|
||||
self.description = file.feedDescription
|
||||
self.feedUrlPrefix = file.feedUrlPrefix
|
||||
self.defaultPageLinkText = file.defaultPageLinkText ?? "View"
|
||||
}
|
||||
|
||||
var file: LocalizedPostSettingsFile {
|
||||
.init(
|
||||
feedTitle: title,
|
||||
feedDescription: description,
|
||||
feedUrlPrefix: feedUrlPrefix)
|
||||
feedUrlPrefix: feedUrlPrefix,
|
||||
defaultPageLinkText: defaultPageLinkText)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user