77 lines
2.0 KiB
Swift
77 lines
2.0 KiB
Swift
import Foundation
|
|
|
|
final class PostSettings: ObservableObject {
|
|
|
|
/// The number of posts to show in a single page of the news feed
|
|
@Published
|
|
var postsPerPage: Int
|
|
|
|
/// The maximum width of the main content
|
|
@Published
|
|
var contentWidth: Int
|
|
|
|
@Published
|
|
var swiperCssFile: FileResource?
|
|
|
|
@Published
|
|
var swiperJsFile: FileResource?
|
|
|
|
@Published
|
|
var defaultCssFile: FileResource?
|
|
|
|
@Published
|
|
var german: LocalizedPostSettings
|
|
|
|
@Published
|
|
var english: LocalizedPostSettings
|
|
|
|
init(postsPerPage: Int,
|
|
contentWidth: Int,
|
|
swiperCssFile: FileResource?,
|
|
swiperJsFile: 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 {
|
|
.init(postsPerPage: postsPerPage,
|
|
contentWidth: contentWidth,
|
|
swiperCssFile: swiperCssFile?.id,
|
|
swiperJsFile: swiperJsFile?.id,
|
|
defaultCssFile: defaultCssFile?.id,
|
|
german: german.file,
|
|
english: english.file)
|
|
}
|
|
}
|
|
|
|
extension PostSettings {
|
|
|
|
static var `default`: PostSettings {
|
|
.init(file: .default, files: [:])
|
|
}
|
|
}
|
|
|
|
extension PostSettings: LocalizedItem {
|
|
|
|
}
|