Generate open graph meta tags
This commit is contained in:
42
CHDataManagement/Model/Settings/GeneralSettings.swift
Normal file
42
CHDataManagement/Model/Settings/GeneralSettings.swift
Normal file
@ -0,0 +1,42 @@
|
||||
import Foundation
|
||||
|
||||
final class GeneralSettings: ObservableObject {
|
||||
|
||||
@Published
|
||||
var url: String
|
||||
|
||||
@Published
|
||||
var linkPreviewImageWidth: Int
|
||||
|
||||
@Published
|
||||
var linkPreviewImageHeight: Int
|
||||
|
||||
init(url: String, linkPreviewImageWidth: Int, linkPreviewImageHeight: Int) {
|
||||
self.url = url
|
||||
self.linkPreviewImageWidth = linkPreviewImageWidth
|
||||
self.linkPreviewImageHeight = linkPreviewImageHeight
|
||||
}
|
||||
}
|
||||
|
||||
extension GeneralSettings {
|
||||
|
||||
convenience init(data: Data) {
|
||||
self.init(
|
||||
url: data.url,
|
||||
linkPreviewImageWidth: data.linkPreviewImageWidth,
|
||||
linkPreviewImageHeight: data.linkPreviewImageHeight)
|
||||
}
|
||||
|
||||
var data: Data {
|
||||
.init(
|
||||
url: url,
|
||||
linkPreviewImageWidth: linkPreviewImageWidth,
|
||||
linkPreviewImageHeight: linkPreviewImageHeight)
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let url: String
|
||||
let linkPreviewImageWidth: Int
|
||||
let linkPreviewImageHeight: Int
|
||||
}
|
||||
}
|
@ -2,13 +2,7 @@ import Foundation
|
||||
|
||||
final class LocalizedPostSettings: ObservableObject {
|
||||
|
||||
/// The page title for the post feed
|
||||
@Published
|
||||
var title: String
|
||||
|
||||
/// The page description for the post feed
|
||||
@Published
|
||||
var description: String
|
||||
var linkPreview: LinkPreview
|
||||
|
||||
/// The path to the feed in the final website, appended with the page number
|
||||
@Published
|
||||
@ -22,11 +16,10 @@ final class LocalizedPostSettings: ObservableObject {
|
||||
@Published
|
||||
var defaultPageLinkText: String
|
||||
|
||||
init(title: String, description: String, feedUrlPrefix: String, defaultPageLinkText: String) {
|
||||
self.title = title
|
||||
self.description = description
|
||||
init(feedUrlPrefix: String, defaultPageLinkText: String, linkPreview: LinkPreview) {
|
||||
self.feedUrlPrefix = feedUrlPrefix
|
||||
self.defaultPageLinkText = defaultPageLinkText
|
||||
self.linkPreview = linkPreview
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,26 +27,23 @@ final class LocalizedPostSettings: ObservableObject {
|
||||
|
||||
extension LocalizedPostSettings {
|
||||
|
||||
convenience init(data: Data) {
|
||||
convenience init(context: LoadingContext, data: Data) {
|
||||
self.init(
|
||||
title: data.feedTitle,
|
||||
description: data.feedDescription,
|
||||
feedUrlPrefix: data.feedUrlPrefix,
|
||||
defaultPageLinkText: data.defaultPageLinkText)
|
||||
defaultPageLinkText: data.defaultPageLinkText,
|
||||
linkPreview: .init(context: context, data: data.linkPreview))
|
||||
}
|
||||
|
||||
var data: Data {
|
||||
.init(
|
||||
feedTitle: title,
|
||||
feedDescription: description,
|
||||
feedUrlPrefix: feedUrlPrefix,
|
||||
defaultPageLinkText: defaultPageLinkText)
|
||||
defaultPageLinkText: defaultPageLinkText,
|
||||
linkPreview: linkPreview.data)
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let feedTitle: String
|
||||
let feedDescription: String
|
||||
let feedUrlPrefix: String
|
||||
let defaultPageLinkText: String
|
||||
let linkPreview: LinkPreview.Data
|
||||
}
|
||||
}
|
||||
|
@ -65,8 +65,8 @@ extension PostSettings {
|
||||
swiperCssFile: data.swiperCssFile.map(context.file),
|
||||
swiperJsFile: data.swiperJsFile.map(context.file),
|
||||
defaultCssFile: data.defaultCssFile.map(context.file),
|
||||
german: .init(data: data.german),
|
||||
english: .init(data: data.english))
|
||||
german: .init(context: context, data: data.german),
|
||||
english: .init(context: context, data: data.english))
|
||||
}
|
||||
|
||||
var data: PostSettings.Data {
|
||||
|
@ -2,6 +2,9 @@ import Foundation
|
||||
|
||||
final class Settings: ObservableObject {
|
||||
|
||||
@Published
|
||||
var general: GeneralSettings
|
||||
|
||||
@Published
|
||||
var paths: PathSettings
|
||||
|
||||
@ -18,11 +21,13 @@ final class Settings: ObservableObject {
|
||||
@Published
|
||||
var audioPlayer: AudioPlayerSettings
|
||||
|
||||
init(paths: PathSettings,
|
||||
init(general: GeneralSettings,
|
||||
paths: PathSettings,
|
||||
navigation: NavigationSettings,
|
||||
posts: PostSettings,
|
||||
pages: PageSettings,
|
||||
audioPlayer: AudioPlayerSettings) {
|
||||
self.general = general
|
||||
self.paths = paths
|
||||
self.navigation = navigation
|
||||
self.posts = posts
|
||||
@ -43,6 +48,7 @@ extension Settings {
|
||||
|
||||
convenience init(context: LoadingContext, data: Settings.Data) {
|
||||
self.init(
|
||||
general: .init(data: data.general),
|
||||
paths: .init(data: data.paths),
|
||||
navigation: .init(context: context, data: data.navigation),
|
||||
posts: .init(context: context, data: data.posts),
|
||||
@ -52,6 +58,7 @@ extension Settings {
|
||||
|
||||
func data(tagOverview: Tag?) -> Data {
|
||||
.init(
|
||||
general: general.data,
|
||||
paths: paths.data,
|
||||
navigation: navigation.data,
|
||||
posts: posts.data,
|
||||
@ -61,6 +68,7 @@ extension Settings {
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let general: GeneralSettings.Data
|
||||
let paths: PathSettings.Data
|
||||
let navigation: NavigationSettings.Data
|
||||
let posts: PostSettings.Data
|
||||
@ -73,6 +81,7 @@ extension Settings {
|
||||
extension Settings {
|
||||
|
||||
static let `default`: Settings = .init(
|
||||
general: .default,
|
||||
paths: .default,
|
||||
navigation: .default,
|
||||
posts: .default,
|
||||
@ -80,6 +89,14 @@ extension Settings {
|
||||
audioPlayer: .default)
|
||||
}
|
||||
|
||||
extension GeneralSettings {
|
||||
|
||||
static let `default`: GeneralSettings = .init(
|
||||
url: "https://example.com",
|
||||
linkPreviewImageWidth: 1200,
|
||||
linkPreviewImageHeight: 630)
|
||||
}
|
||||
|
||||
extension AudioPlayerSettings {
|
||||
|
||||
static let `default`: AudioPlayerSettings = .init(
|
||||
@ -100,15 +117,18 @@ extension PostSettings {
|
||||
swiperJsFile: nil,
|
||||
defaultCssFile: nil,
|
||||
german: .init(
|
||||
title: "Beiträge",
|
||||
description: "Alle Beiträge",
|
||||
feedUrlPrefix: "blog",
|
||||
defaultPageLinkText: "Anzeigen"),
|
||||
defaultPageLinkText: "Anzeigen",
|
||||
linkPreview: .init(
|
||||
title: "Beiträge",
|
||||
description: "Alle Beiträge")),
|
||||
english: .init(
|
||||
title: "Blog posts",
|
||||
description: "All blog posts",
|
||||
feedUrlPrefix: "blog",
|
||||
defaultPageLinkText: "View"))
|
||||
defaultPageLinkText: "View",
|
||||
linkPreview: .init(
|
||||
title: "Blog posts",
|
||||
description: "All blog posts"))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user