Add empty page text, playlist text to settings

This commit is contained in:
Christoph Hagen
2025-01-07 11:26:59 +01:00
parent 9f120b251f
commit 9d95e7d210
23 changed files with 266 additions and 94 deletions

View File

@ -14,14 +14,24 @@ final class AudioPlayerSettings: ObservableObject {
@Published
var audioPlayerCssFile: FileResource?
@Published
var german: LocalizedAudioPlayerSettings
@Published
var english: LocalizedAudioPlayerSettings
init(playlistCoverImageSize: Int,
smallCoverImageSize: Int,
audioPlayerJsFile: FileResource?,
audioPlayerCssFile: FileResource?) {
audioPlayerCssFile: FileResource?,
german: LocalizedAudioPlayerSettings,
english: LocalizedAudioPlayerSettings) {
self.playlistCoverImageSize = playlistCoverImageSize
self.smallCoverImageSize = smallCoverImageSize
self.audioPlayerJsFile = audioPlayerJsFile
self.audioPlayerCssFile = audioPlayerCssFile
self.german = german
self.english = english
}
init(file: AudioPlayerSettingsFile, files: [String : FileResource]) {
@ -29,13 +39,17 @@ final class AudioPlayerSettings: ObservableObject {
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)
audioPlayerCssFile: audioPlayerCssFile?.id,
german: german.file,
english: english.file)
}
}
@ -45,5 +59,11 @@ extension AudioPlayerSettings {
playlistCoverImageSize: 280,
smallCoverImageSize: 78,
audioPlayerJsFile: nil,
audioPlayerCssFile: nil)
audioPlayerCssFile: nil,
german: .init(playlistText: "Wiedergabeliste"),
english: .init(playlistText: "Playlist"))
}
extension AudioPlayerSettings: LocalizedItem {
}

View File

@ -0,0 +1,19 @@
import Foundation
final class LocalizedAudioPlayerSettings: ObservableObject {
@Published
var playlistText: String
init(playlistText: String) {
self.playlistText = playlistText
}
init(file: LocalizedAudioPlayerSettingsFile) {
self.playlistText = file.playlistText
}
var file: LocalizedAudioPlayerSettingsFile {
.init(playlistText: playlistText)
}
}

View File

@ -0,0 +1,27 @@
import Foundation
final class LocalizedPageSettings: ObservableObject {
/// The title to show for the box on an empty page
@Published
var emptyPageTitle: String
/// The text to show in the box on an empty page
@Published
var emptyPageText: String
init(emptyPageTitle: String, emptyPageText: String) {
self.emptyPageTitle = emptyPageTitle
self.emptyPageText = emptyPageText
}
init(file: LocalizedPageSettingsFile) {
self.emptyPageTitle = file.emptyPageTitle
self.emptyPageText = file.emptyPageText
}
var file: LocalizedPageSettingsFile {
.init(emptyPageTitle: emptyPageTitle,
emptyPageText: emptyPageText)
}
}

View File

@ -26,6 +26,12 @@ final class PageSettings: ObservableObject {
@Published
var imageCompareCssFile: FileResource?
@Published
var german: LocalizedPageSettings
@Published
var english: LocalizedPageSettings
init(file: PageSettingsFile, files: [String : FileResource]) {
self.contentWidth = file.contentWidth
self.largeImageWidth = file.largeImageWidth
@ -35,6 +41,8 @@ final class PageSettings: ObservableObject {
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 {
@ -45,6 +53,12 @@ final class PageSettings: ObservableObject {
codeHighlightingJsFile: codeHighlightingJsFile?.id,
modelViewerJsFile: modelViewerJsFile?.id,
imageCompareJsFile: imageCompareJsFile?.id,
imageCompareCssFile: imageCompareCssFile?.id)
imageCompareCssFile: imageCompareCssFile?.id,
german: german.file,
english: english.file)
}
}
extension PageSettings: LocalizedItem {
}

View File

@ -19,26 +19,38 @@ final class PostSettings: ObservableObject {
@Published
var defaultCssFile: FileResource?
@Published
var german: LocalizedPostSettings
@Published
var english: LocalizedPostSettings
init(postsPerPage: Int,
contentWidth: Int,
swiperCssFile: FileResource?,
swiperJsFile: FileResource?,
defaultCssFile: FileResource?) {
defaultCssFile: FileResource?,
german: LocalizedPostSettings,
english: LocalizedPostSettings) {
self.postsPerPage = postsPerPage
self.contentWidth = contentWidth
self.swiperCssFile = swiperCssFile
self.swiperJsFile = swiperJsFile
self.defaultCssFile = defaultCssFile
self.german = german
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 {
@ -46,6 +58,19 @@ final class PostSettings: ObservableObject {
contentWidth: contentWidth,
swiperCssFile: swiperCssFile?.id,
swiperJsFile: swiperJsFile?.id,
defaultCssFile: defaultCssFile?.id)
defaultCssFile: defaultCssFile?.id,
german: german.file,
english: english.file)
}
}
extension PostSettings {
static var `default`: PostSettings {
.init(file: .default, files: [:])
}
}
extension PostSettings: LocalizedItem {
}

View File

@ -18,34 +18,16 @@ final class Settings: ObservableObject {
@Published
var audioPlayer: AudioPlayerSettings
@Published
var german: LocalizedPostSettings
@Published
var english: LocalizedPostSettings
init(paths: PathSettings,
navigation: NavigationSettings,
posts: PostSettings,
pages: PageSettings,
audioPlayer: AudioPlayerSettings,
german: LocalizedPostSettings,
english: LocalizedPostSettings) {
audioPlayer: AudioPlayerSettings) {
self.paths = paths
self.navigation = navigation
self.posts = posts
self.pages = pages
self.audioPlayer = audioPlayer
self.german = german
self.english = english
}
func localized(in language: ContentLanguage) -> LocalizedPostSettings {
switch language {
case .english: return english
case .german: return german
}
}
init(file: SettingsFile, files: [String : FileResource], map: (String) -> Item?) {
@ -55,9 +37,6 @@ final class Settings: ObservableObject {
self.pages = PageSettings(file: file.pages, files: files)
self.paths = PathSettings(file: file.paths)
self.audioPlayer = .init(file: file.audioPlayer, files: files)
self.german = .init(file: file.german)
self.english = .init(file: file.english)
}
func file(tagOverview: TagOverviewPage?) -> SettingsFile {
@ -67,9 +46,7 @@ final class Settings: ObservableObject {
posts: posts.file,
pages: pages.file,
audioPlayer: audioPlayer.file,
tagOverview: tagOverview?.file,
german: german.file,
english: english.file)
tagOverview: tagOverview?.file)
}
}
@ -80,7 +57,5 @@ extension Settings {
navigation: .default,
posts: .default,
pages: .default,
audioPlayer: .default,
german: .german,
english: .english)
audioPlayer: .default)
}