Rework storage structs, link preview
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import Foundation
|
||||
|
||||
final class AudioPlayerSettings: ObservableObject {
|
||||
final class AudioPlayerSettings: ObservableObject, LocalizedItem {
|
||||
|
||||
@Published
|
||||
var playlistCoverImageSize: Int
|
||||
@@ -34,24 +34,6 @@ final class AudioPlayerSettings: ObservableObject {
|
||||
self.english = english
|
||||
}
|
||||
|
||||
init(file: AudioPlayerSettingsFile, files: [String : FileResource]) {
|
||||
self.playlistCoverImageSize = file.playlistCoverImageSize
|
||||
self.smallCoverImageSize = file.smallCoverImageSize
|
||||
self.audioPlayerJsFile = file.audioPlayerJsFile.map { files[$0] }
|
||||
self.audioPlayerCssFile = file.audioPlayerCssFile.map { files[$0] }
|
||||
self.german = .init(file: file.german)
|
||||
self.english = .init(file: file.english)
|
||||
}
|
||||
|
||||
var file: AudioPlayerSettingsFile {
|
||||
.init(playlistCoverImageSize: playlistCoverImageSize,
|
||||
smallCoverImageSize: smallCoverImageSize,
|
||||
audioPlayerJsFile: audioPlayerJsFile?.id,
|
||||
audioPlayerCssFile: audioPlayerCssFile?.id,
|
||||
german: german.file,
|
||||
english: english.file)
|
||||
}
|
||||
|
||||
func remove(_ file: FileResource) {
|
||||
if audioPlayerJsFile == file {
|
||||
audioPlayerJsFile = nil
|
||||
@@ -62,17 +44,37 @@ final class AudioPlayerSettings: ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Storage
|
||||
|
||||
extension AudioPlayerSettings {
|
||||
|
||||
static let `default`: AudioPlayerSettings = .init(
|
||||
playlistCoverImageSize: 280,
|
||||
smallCoverImageSize: 78,
|
||||
audioPlayerJsFile: nil,
|
||||
audioPlayerCssFile: nil,
|
||||
german: .init(playlistText: "Wiedergabeliste"),
|
||||
english: .init(playlistText: "Playlist"))
|
||||
}
|
||||
convenience init(context: LoadingContext, data: Data) {
|
||||
self.init(
|
||||
playlistCoverImageSize: data.playlistCoverImageSize,
|
||||
smallCoverImageSize: data.smallCoverImageSize,
|
||||
audioPlayerJsFile: data.audioPlayerJsFile.map(context.file),
|
||||
audioPlayerCssFile: data.audioPlayerCssFile.map(context.file),
|
||||
german: .init(data: data.german),
|
||||
english: .init(data: data.english))
|
||||
}
|
||||
|
||||
var data: Data {
|
||||
.init(playlistCoverImageSize: playlistCoverImageSize,
|
||||
smallCoverImageSize: smallCoverImageSize,
|
||||
audioPlayerJsFile: audioPlayerJsFile?.id,
|
||||
audioPlayerCssFile: audioPlayerCssFile?.id,
|
||||
german: german.data,
|
||||
english: english.data)
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let playlistCoverImageSize: Int
|
||||
let smallCoverImageSize: Int
|
||||
let audioPlayerJsFile: String?
|
||||
let audioPlayerCssFile: String?
|
||||
let german: LocalizedAudioPlayerSettings.Data
|
||||
let english: LocalizedAudioPlayerSettings.Data
|
||||
}
|
||||
|
||||
extension AudioPlayerSettings: LocalizedItem {
|
||||
|
||||
}
|
||||
|
@@ -8,12 +8,21 @@ final class LocalizedAudioPlayerSettings: ObservableObject {
|
||||
init(playlistText: String) {
|
||||
self.playlistText = playlistText
|
||||
}
|
||||
}
|
||||
|
||||
init(file: LocalizedAudioPlayerSettingsFile) {
|
||||
self.playlistText = file.playlistText
|
||||
// MARK: Storage
|
||||
|
||||
extension LocalizedAudioPlayerSettings {
|
||||
|
||||
convenience init(data: Data) {
|
||||
self.init(playlistText: data.playlistText)
|
||||
}
|
||||
|
||||
var file: LocalizedAudioPlayerSettingsFile {
|
||||
var data: Data {
|
||||
.init(playlistText: playlistText)
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let playlistText: String
|
||||
}
|
||||
}
|
||||
|
@@ -8,12 +8,21 @@ final class LocalizedNavigationSettings: ObservableObject {
|
||||
init(rootUrl: String) {
|
||||
self.rootUrl = rootUrl
|
||||
}
|
||||
}
|
||||
|
||||
init(file: LocalizedNavigationSettingsFile) {
|
||||
self.rootUrl = file.rootUrl
|
||||
// MARK: Storage
|
||||
|
||||
extension LocalizedNavigationSettings {
|
||||
|
||||
convenience init(data: Data) {
|
||||
self.init(rootUrl: data.rootUrl)
|
||||
}
|
||||
|
||||
var file: LocalizedNavigationSettingsFile {
|
||||
struct Data: Codable {
|
||||
let rootUrl: String
|
||||
}
|
||||
|
||||
var data: Data {
|
||||
.init(rootUrl: rootUrl)
|
||||
}
|
||||
}
|
||||
|
@@ -14,14 +14,25 @@ final class LocalizedPageSettings: ObservableObject {
|
||||
self.emptyPageTitle = emptyPageTitle
|
||||
self.emptyPageText = emptyPageText
|
||||
}
|
||||
}
|
||||
|
||||
init(file: LocalizedPageSettingsFile) {
|
||||
self.emptyPageTitle = file.emptyPageTitle
|
||||
self.emptyPageText = file.emptyPageText
|
||||
// MARK: Storage
|
||||
|
||||
extension LocalizedPageSettings {
|
||||
|
||||
convenience init(data: Data) {
|
||||
self.init(
|
||||
emptyPageTitle: data.emptyPageTitle,
|
||||
emptyPageText: data.emptyPageText)
|
||||
}
|
||||
|
||||
var file: LocalizedPageSettingsFile {
|
||||
var data: Data {
|
||||
.init(emptyPageTitle: emptyPageTitle,
|
||||
emptyPageText: emptyPageText)
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let emptyPageTitle: String
|
||||
let emptyPageText: String
|
||||
}
|
||||
}
|
||||
|
@@ -2,15 +2,23 @@ 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
|
||||
|
||||
/// The path to the feed in the final website, appended with the page number
|
||||
@Published
|
||||
var feedUrlPrefix: String
|
||||
|
||||
/**
|
||||
The text to display when linking to a page
|
||||
|
||||
Each post may define a custom text.
|
||||
*/
|
||||
@Published
|
||||
var defaultPageLinkText: String
|
||||
|
||||
@@ -20,21 +28,32 @@ final class LocalizedPostSettings: ObservableObject {
|
||||
self.feedUrlPrefix = feedUrlPrefix
|
||||
self.defaultPageLinkText = defaultPageLinkText
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Storage
|
||||
// MARK: Storage
|
||||
|
||||
init(file: LocalizedPostSettingsFile) {
|
||||
self.title = file.feedTitle
|
||||
self.description = file.feedDescription
|
||||
self.feedUrlPrefix = file.feedUrlPrefix
|
||||
self.defaultPageLinkText = file.defaultPageLinkText ?? "View"
|
||||
extension LocalizedPostSettings {
|
||||
|
||||
convenience init(data: Data) {
|
||||
self.init(
|
||||
title: data.feedTitle,
|
||||
description: data.feedDescription,
|
||||
feedUrlPrefix: data.feedUrlPrefix,
|
||||
defaultPageLinkText: data.defaultPageLinkText)
|
||||
}
|
||||
|
||||
var file: LocalizedPostSettingsFile {
|
||||
var data: Data {
|
||||
.init(
|
||||
feedTitle: title,
|
||||
feedDescription: description,
|
||||
feedUrlPrefix: feedUrlPrefix,
|
||||
defaultPageLinkText: defaultPageLinkText)
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let feedTitle: String
|
||||
let feedDescription: String
|
||||
let feedUrlPrefix: String
|
||||
let defaultPageLinkText: String
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import Foundation
|
||||
|
||||
final class NavigationSettings: ObservableObject {
|
||||
final class NavigationSettings: ObservableObject, LocalizedItem {
|
||||
|
||||
/// The items to show in the navigation bar
|
||||
@Published
|
||||
@@ -19,23 +19,31 @@ final class NavigationSettings: ObservableObject {
|
||||
self.german = german
|
||||
self.english = english
|
||||
}
|
||||
|
||||
init(file: NavigationSettingsFile, map: (String) -> Item?) {
|
||||
self.navigationItems = file.navigationItems.compactMap(map)
|
||||
self.german = LocalizedNavigationSettings(file: file.german)
|
||||
self.english = LocalizedNavigationSettings(file: file.english)
|
||||
}
|
||||
|
||||
var file: NavigationSettingsFile {
|
||||
.init(
|
||||
navigationItems: navigationItems.map { $0.itemType.id },
|
||||
german: german.file,
|
||||
english: english.file)
|
||||
}
|
||||
}
|
||||
|
||||
extension NavigationSettings: LocalizedItem {
|
||||
|
||||
// MARK: Storage
|
||||
|
||||
extension NavigationSettings {
|
||||
|
||||
convenience init(context: LoadingContext, data: NavigationSettings.Data) {
|
||||
self.init(
|
||||
navigationItems: data.navigationItems.compactMap(context.item),
|
||||
german: LocalizedNavigationSettings(data: data.german),
|
||||
english: LocalizedNavigationSettings(data: data.english))
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let navigationItems: [ItemId]
|
||||
let german: LocalizedNavigationSettings.Data
|
||||
let english: LocalizedNavigationSettings.Data
|
||||
}
|
||||
|
||||
var data: Data {
|
||||
.init(
|
||||
navigationItems: navigationItems.map { $0.itemId },
|
||||
german: german.data,
|
||||
english: english.data)
|
||||
}
|
||||
}
|
||||
|
||||
extension NavigationSettings {
|
||||
|
@@ -32,30 +32,26 @@ final class PageSettings: ObservableObject {
|
||||
@Published
|
||||
var english: LocalizedPageSettings
|
||||
|
||||
init(file: PageSettingsFile, files: [String : FileResource]) {
|
||||
self.contentWidth = file.contentWidth
|
||||
self.largeImageWidth = file.largeImageWidth
|
||||
self.pageLinkImageSize = file.pageLinkImageSize
|
||||
self.defaultCssFile = file.defaultCssFile.map { files[$0] }
|
||||
self.codeHighlightingJsFile = file.codeHighlightingJsFile.map { files[$0] }
|
||||
self.modelViewerJsFile = file.modelViewerJsFile.map { files[$0] }
|
||||
self.imageCompareCssFile = file.imageCompareCssFile.map { files[$0] }
|
||||
self.imageCompareJsFile = file.imageCompareJsFile.map { files[$0] }
|
||||
self.german = .init(file: file.german)
|
||||
self.english = .init(file: file.english)
|
||||
}
|
||||
|
||||
var file: PageSettingsFile {
|
||||
.init(contentWidth: contentWidth,
|
||||
largeImageWidth: largeImageWidth,
|
||||
pageLinkImageSize: pageLinkImageSize,
|
||||
defaultCssFile: defaultCssFile?.id,
|
||||
codeHighlightingJsFile: codeHighlightingJsFile?.id,
|
||||
modelViewerJsFile: modelViewerJsFile?.id,
|
||||
imageCompareJsFile: imageCompareJsFile?.id,
|
||||
imageCompareCssFile: imageCompareCssFile?.id,
|
||||
german: german.file,
|
||||
english: english.file)
|
||||
init(contentWidth: Int,
|
||||
largeImageWidth: Int,
|
||||
pageLinkImageSize: Int,
|
||||
defaultCssFile: FileResource? = nil,
|
||||
codeHighlightingJsFile: FileResource? = nil,
|
||||
modelViewerJsFile: FileResource? = nil,
|
||||
imageCompareJsFile: FileResource? = nil,
|
||||
imageCompareCssFile: FileResource? = nil,
|
||||
german: LocalizedPageSettings,
|
||||
english: LocalizedPageSettings) {
|
||||
self.contentWidth = contentWidth
|
||||
self.largeImageWidth = largeImageWidth
|
||||
self.pageLinkImageSize = pageLinkImageSize
|
||||
self.defaultCssFile = defaultCssFile
|
||||
self.codeHighlightingJsFile = codeHighlightingJsFile
|
||||
self.modelViewerJsFile = modelViewerJsFile
|
||||
self.imageCompareJsFile = imageCompareJsFile
|
||||
self.imageCompareCssFile = imageCompareCssFile
|
||||
self.german = german
|
||||
self.english = english
|
||||
}
|
||||
|
||||
func remove(_ file: FileResource) {
|
||||
@@ -77,6 +73,52 @@ final class PageSettings: ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Storage
|
||||
|
||||
extension PageSettings {
|
||||
|
||||
convenience init(context: LoadingContext, data: Data) {
|
||||
self.init(
|
||||
contentWidth: data.contentWidth,
|
||||
largeImageWidth: data.largeImageWidth,
|
||||
pageLinkImageSize: data.pageLinkImageSize,
|
||||
defaultCssFile: data.defaultCssFile.map(context.file),
|
||||
codeHighlightingJsFile: data.codeHighlightingJsFile.map(context.file),
|
||||
modelViewerJsFile: data.modelViewerJsFile.map(context.file),
|
||||
imageCompareJsFile: data.imageCompareJsFile.map(context.file),
|
||||
imageCompareCssFile: data.imageCompareCssFile.map(context.file),
|
||||
german: .init(data: data.german),
|
||||
english: .init(data: data.english))
|
||||
}
|
||||
|
||||
var data: Data {
|
||||
.init(contentWidth: contentWidth,
|
||||
largeImageWidth: largeImageWidth,
|
||||
pageLinkImageSize: pageLinkImageSize,
|
||||
defaultCssFile: defaultCssFile?.id,
|
||||
codeHighlightingJsFile: codeHighlightingJsFile?.id,
|
||||
modelViewerJsFile: modelViewerJsFile?.id,
|
||||
imageCompareJsFile: imageCompareJsFile?.id,
|
||||
imageCompareCssFile: imageCompareCssFile?.id,
|
||||
german: german.data,
|
||||
english: english.data)
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let contentWidth: Int
|
||||
let largeImageWidth: Int
|
||||
let pageLinkImageSize: Int
|
||||
let defaultCssFile: String?
|
||||
let codeHighlightingJsFile: String?
|
||||
let modelViewerJsFile: String?
|
||||
let imageCompareJsFile: String?
|
||||
let imageCompareCssFile: String?
|
||||
let german: LocalizedPageSettings.Data
|
||||
let english: LocalizedPageSettings.Data
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension PageSettings: LocalizedItem {
|
||||
|
||||
}
|
||||
|
@@ -23,23 +23,54 @@ final class PathSettings: ObservableObject {
|
||||
@Published
|
||||
var tagsOutputFolderPath: String
|
||||
|
||||
init(file: PathSettingsFile) {
|
||||
self.assetsOutputFolderPath = file.assetsOutputFolderPath
|
||||
self.pagesOutputFolderPath = file.pagesOutputFolderPath
|
||||
self.imagesOutputFolderPath = file.imagesOutputFolderPath
|
||||
self.filesOutputFolderPath = file.filesOutputFolderPath
|
||||
self.videosOutputFolderPath = file.videosOutputFolderPath
|
||||
self.tagsOutputFolderPath = file.tagsOutputFolderPath
|
||||
self.audioOutputFolderPath = file.audioOutputFolderPath
|
||||
}
|
||||
|
||||
var file: PathSettingsFile {
|
||||
.init(assetsOutputFolderPath: assetsOutputFolderPath,
|
||||
pagesOutputFolderPath: pagesOutputFolderPath,
|
||||
imagesOutputFolderPath: imagesOutputFolderPath,
|
||||
filesOutputFolderPath: filesOutputFolderPath,
|
||||
videosOutputFolderPath: videosOutputFolderPath,
|
||||
tagsOutputFolderPath: tagsOutputFolderPath,
|
||||
audioOutputFolderPath: audioOutputFolderPath)
|
||||
init(assetsOutputFolderPath: String,
|
||||
pagesOutputFolderPath: String,
|
||||
imagesOutputFolderPath: String,
|
||||
filesOutputFolderPath: String,
|
||||
videosOutputFolderPath: String,
|
||||
audioOutputFolderPath: String,
|
||||
tagsOutputFolderPath: String) {
|
||||
self.assetsOutputFolderPath = assetsOutputFolderPath
|
||||
self.pagesOutputFolderPath = pagesOutputFolderPath
|
||||
self.imagesOutputFolderPath = imagesOutputFolderPath
|
||||
self.filesOutputFolderPath = filesOutputFolderPath
|
||||
self.videosOutputFolderPath = videosOutputFolderPath
|
||||
self.audioOutputFolderPath = audioOutputFolderPath
|
||||
self.tagsOutputFolderPath = tagsOutputFolderPath
|
||||
}
|
||||
}
|
||||
|
||||
extension PathSettings {
|
||||
|
||||
convenience init(data: Data) {
|
||||
self.init(
|
||||
assetsOutputFolderPath: data.assetsOutputFolderPath,
|
||||
pagesOutputFolderPath: data.pagesOutputFolderPath,
|
||||
imagesOutputFolderPath: data.imagesOutputFolderPath,
|
||||
filesOutputFolderPath: data.filesOutputFolderPath,
|
||||
videosOutputFolderPath: data.videosOutputFolderPath,
|
||||
audioOutputFolderPath: data.audioOutputFolderPath,
|
||||
tagsOutputFolderPath: data.tagsOutputFolderPath)
|
||||
}
|
||||
|
||||
var data: Data {
|
||||
.init(
|
||||
assetsOutputFolderPath: assetsOutputFolderPath,
|
||||
pagesOutputFolderPath: pagesOutputFolderPath,
|
||||
imagesOutputFolderPath: imagesOutputFolderPath,
|
||||
filesOutputFolderPath: filesOutputFolderPath,
|
||||
videosOutputFolderPath: videosOutputFolderPath,
|
||||
audioOutputFolderPath: audioOutputFolderPath,
|
||||
tagsOutputFolderPath: tagsOutputFolderPath)
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let assetsOutputFolderPath: String
|
||||
let pagesOutputFolderPath: String
|
||||
let imagesOutputFolderPath: String
|
||||
let filesOutputFolderPath: String
|
||||
let videosOutputFolderPath: String
|
||||
let audioOutputFolderPath: String
|
||||
let tagsOutputFolderPath: String
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import Foundation
|
||||
|
||||
final class PostSettings: ObservableObject {
|
||||
final class PostSettings: ObservableObject, LocalizedItem {
|
||||
|
||||
/// The number of posts to show in a single page of the news feed
|
||||
@Published
|
||||
@@ -41,28 +41,6 @@ final class PostSettings: ObservableObject {
|
||||
self.english = english
|
||||
}
|
||||
|
||||
// MARK: Storage
|
||||
|
||||
init(file: PostSettingsFile, files: [String : FileResource]) {
|
||||
self.postsPerPage = file.postsPerPage
|
||||
self.contentWidth = file.contentWidth
|
||||
self.swiperCssFile = file.swiperCssFile.map { files[$0] }
|
||||
self.swiperJsFile = file.swiperJsFile.map { files[$0] }
|
||||
self.defaultCssFile = file.defaultCssFile.map { files[$0] }
|
||||
self.german = .init(file: file.german)
|
||||
self.english = .init(file: file.english)
|
||||
}
|
||||
|
||||
var file: PostSettingsFile {
|
||||
.init(postsPerPage: postsPerPage,
|
||||
contentWidth: contentWidth,
|
||||
swiperCssFile: swiperCssFile?.id,
|
||||
swiperJsFile: swiperJsFile?.id,
|
||||
defaultCssFile: defaultCssFile?.id,
|
||||
german: german.file,
|
||||
english: english.file)
|
||||
}
|
||||
|
||||
func remove(_ file: FileResource) {
|
||||
if swiperJsFile == file {
|
||||
swiperJsFile = nil
|
||||
@@ -76,13 +54,38 @@ final class PostSettings: ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Storage
|
||||
|
||||
extension PostSettings {
|
||||
|
||||
static var `default`: PostSettings {
|
||||
.init(file: .default, files: [:])
|
||||
convenience init(context: LoadingContext, data: Data) {
|
||||
self.init(
|
||||
postsPerPage: data.postsPerPage,
|
||||
contentWidth: data.contentWidth,
|
||||
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))
|
||||
}
|
||||
|
||||
var data: PostSettings.Data {
|
||||
.init(postsPerPage: postsPerPage,
|
||||
contentWidth: contentWidth,
|
||||
swiperCssFile: swiperCssFile?.id,
|
||||
swiperJsFile: swiperJsFile?.id,
|
||||
defaultCssFile: defaultCssFile?.id,
|
||||
german: german.data,
|
||||
english: english.data)
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let postsPerPage: Int
|
||||
let contentWidth: Int
|
||||
let swiperCssFile: String?
|
||||
let swiperJsFile: String?
|
||||
let defaultCssFile: String?
|
||||
let german: LocalizedPostSettings.Data
|
||||
let english: LocalizedPostSettings.Data
|
||||
}
|
||||
}
|
||||
|
||||
extension PostSettings: LocalizedItem {
|
||||
|
||||
}
|
||||
|
@@ -30,25 +30,6 @@ final class Settings: ObservableObject {
|
||||
self.audioPlayer = audioPlayer
|
||||
}
|
||||
|
||||
init(file: SettingsFile, files: [String : FileResource], map: (String) -> Item?) {
|
||||
self.navigation = NavigationSettings(file: file.navigation, map: map)
|
||||
|
||||
self.posts = PostSettings(file: file.posts, files: files)
|
||||
self.pages = PageSettings(file: file.pages, files: files)
|
||||
self.paths = PathSettings(file: file.paths)
|
||||
self.audioPlayer = .init(file: file.audioPlayer, files: files)
|
||||
}
|
||||
|
||||
func file(tagOverview: TagOverviewPage?) -> SettingsFile {
|
||||
.init(
|
||||
paths: paths.file,
|
||||
navigation: navigation.file,
|
||||
posts: posts.file,
|
||||
pages: pages.file,
|
||||
audioPlayer: audioPlayer.file,
|
||||
tagOverview: tagOverview?.file)
|
||||
}
|
||||
|
||||
func remove(_ file: FileResource) {
|
||||
pages.remove(file)
|
||||
posts.remove(file)
|
||||
@@ -56,6 +37,39 @@ final class Settings: ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Storage
|
||||
|
||||
extension Settings {
|
||||
|
||||
convenience init(context: LoadingContext, data: Settings.Data) {
|
||||
self.init(
|
||||
paths: .init(data: data.paths),
|
||||
navigation: .init(context: context, data: data.navigation),
|
||||
posts: .init(context: context, data: data.posts),
|
||||
pages: .init(context: context, data: data.pages),
|
||||
audioPlayer: .init(context: context, data: data.audioPlayer))
|
||||
}
|
||||
|
||||
func data(tagOverview: Tag?) -> Data {
|
||||
.init(
|
||||
paths: paths.data,
|
||||
navigation: navigation.data,
|
||||
posts: posts.data,
|
||||
pages: pages.data,
|
||||
audioPlayer: audioPlayer.data,
|
||||
tagOverview: tagOverview?.data)
|
||||
}
|
||||
|
||||
struct Data: Codable {
|
||||
let paths: PathSettings.Data
|
||||
let navigation: NavigationSettings.Data
|
||||
let posts: PostSettings.Data
|
||||
let pages: PageSettings.Data
|
||||
let audioPlayer: AudioPlayerSettings.Data
|
||||
let tagOverview: Tag.Data?
|
||||
}
|
||||
}
|
||||
|
||||
extension Settings {
|
||||
|
||||
static let `default`: Settings = .init(
|
||||
@@ -65,3 +79,70 @@ extension Settings {
|
||||
pages: .default,
|
||||
audioPlayer: .default)
|
||||
}
|
||||
|
||||
extension AudioPlayerSettings {
|
||||
|
||||
static let `default`: AudioPlayerSettings = .init(
|
||||
playlistCoverImageSize: 280,
|
||||
smallCoverImageSize: 78,
|
||||
audioPlayerJsFile: nil,
|
||||
audioPlayerCssFile: nil,
|
||||
german: .init(playlistText: "Wiedergabeliste"),
|
||||
english: .init(playlistText: "Playlist"))
|
||||
}
|
||||
|
||||
extension PostSettings {
|
||||
|
||||
static var `default`: PostSettings {
|
||||
.init(postsPerPage: 25,
|
||||
contentWidth: 600,
|
||||
swiperCssFile: nil,
|
||||
swiperJsFile: nil,
|
||||
defaultCssFile: nil,
|
||||
german: .init(
|
||||
title: "Beiträge",
|
||||
description: "Alle Beiträge",
|
||||
feedUrlPrefix: "blog",
|
||||
defaultPageLinkText: "Anzeigen"),
|
||||
english: .init(
|
||||
title: "Blog posts",
|
||||
description: "All blog posts",
|
||||
feedUrlPrefix: "blog",
|
||||
defaultPageLinkText: "View"))
|
||||
}
|
||||
}
|
||||
|
||||
extension PathSettings {
|
||||
|
||||
static var `default`: PathSettings {
|
||||
.init(
|
||||
assetsOutputFolderPath: "asset",
|
||||
pagesOutputFolderPath: "page",
|
||||
imagesOutputFolderPath: "image",
|
||||
filesOutputFolderPath: "file",
|
||||
videosOutputFolderPath: "video",
|
||||
audioOutputFolderPath: "audio",
|
||||
tagsOutputFolderPath: "tag")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension PageSettings {
|
||||
|
||||
static var `default`: PageSettings {
|
||||
.init(contentWidth: 600,
|
||||
largeImageWidth: 1200,
|
||||
pageLinkImageSize: 180,
|
||||
defaultCssFile: nil,
|
||||
codeHighlightingJsFile: nil,
|
||||
modelViewerJsFile: nil,
|
||||
imageCompareJsFile: nil,
|
||||
imageCompareCssFile: nil,
|
||||
german: .init(
|
||||
emptyPageTitle: "Leere Seite",
|
||||
emptyPageText: "Diese Seite ist leer"),
|
||||
english: .init(
|
||||
emptyPageTitle: "Empty page",
|
||||
emptyPageText: "This page is empty"))
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user