From 0bd48be2c285e299d1a1f88efe06204137d75e9e Mon Sep 17 00:00:00 2001 From: Christoph Hagen Date: Mon, 17 Feb 2025 13:39:37 +0100 Subject: [PATCH] Add web app manifest file --- CHDataManagement/Generator/HeaderElement.swift | 9 +++++++++ CHDataManagement/Model/Content+Generation.swift | 3 +++ CHDataManagement/Model/Settings/PageSettings.swift | 11 +++++++++++ .../Views/Settings/Pages/PageSettingsDetailView.swift | 5 +++++ 4 files changed, 28 insertions(+) diff --git a/CHDataManagement/Generator/HeaderElement.swift b/CHDataManagement/Generator/HeaderElement.swift index e3b133b..393cc39 100644 --- a/CHDataManagement/Generator/HeaderElement.swift +++ b/CHDataManagement/Generator/HeaderElement.swift @@ -50,11 +50,14 @@ enum HeaderElement { case robots + case manifest(FileResource) + var order: Int { switch self { case .charset: 1 case .robots: 2 case .viewport: 3 + case .manifest: 4 case .icon: 10 case .css(_, let order): order case .js: 20 @@ -79,6 +82,8 @@ enum HeaderElement { return file case .jsModule(let file): return file + case .manifest(let file): + return file default: return nil } @@ -129,6 +134,8 @@ extension HeaderElement { return "" case .robots: return "" + case .manifest(let file): + return "" } } } @@ -165,6 +172,8 @@ extension HeaderElement: CustomStringConvertible { return "viewport" case .robots: return "robots" + case .manifest: + return "manifest" } } } diff --git a/CHDataManagement/Model/Content+Generation.swift b/CHDataManagement/Model/Content+Generation.swift index b1d4a22..915408d 100644 --- a/CHDataManagement/Model/Content+Generation.swift +++ b/CHDataManagement/Model/Content+Generation.swift @@ -175,6 +175,9 @@ extension Content { if let css { result.insert(.css(file: css, order: HeaderElement.defaultCssFileOrder)) } + if let manifest = settings.pages.manifestFile { + result.insert(.manifest(manifest)) + } return result } diff --git a/CHDataManagement/Model/Settings/PageSettings.swift b/CHDataManagement/Model/Settings/PageSettings.swift index 0524e02..2791527 100644 --- a/CHDataManagement/Model/Settings/PageSettings.swift +++ b/CHDataManagement/Model/Settings/PageSettings.swift @@ -26,6 +26,9 @@ final class PageSettings: ObservableObject { @Published var imageCompareCssFile: FileResource? + @Published + var manifestFile: FileResource? + @Published var german: LocalizedPageSettings @@ -40,6 +43,7 @@ final class PageSettings: ObservableObject { modelViewerJsFile: FileResource? = nil, imageCompareJsFile: FileResource? = nil, imageCompareCssFile: FileResource? = nil, + manifestFile: FileResource? = nil, german: LocalizedPageSettings, english: LocalizedPageSettings) { self.contentWidth = contentWidth @@ -50,6 +54,7 @@ final class PageSettings: ObservableObject { self.modelViewerJsFile = modelViewerJsFile self.imageCompareJsFile = imageCompareJsFile self.imageCompareCssFile = imageCompareCssFile + self.manifestFile = manifestFile self.german = german self.english = english } @@ -70,6 +75,9 @@ final class PageSettings: ObservableObject { if imageCompareCssFile == file { imageCompareCssFile = nil } + if manifestFile == file { + manifestFile = nil + } } } @@ -87,6 +95,7 @@ extension PageSettings { modelViewerJsFile: data.modelViewerJsFile.map(context.file), imageCompareJsFile: data.imageCompareJsFile.map(context.file), imageCompareCssFile: data.imageCompareCssFile.map(context.file), + manifestFile: data.manifestFile.map(context.file), german: .init(data: data.german), english: .init(data: data.english)) } @@ -100,6 +109,7 @@ extension PageSettings { modelViewerJsFile: modelViewerJsFile?.id, imageCompareJsFile: imageCompareJsFile?.id, imageCompareCssFile: imageCompareCssFile?.id, + manifestFile: manifestFile?.id, german: german.data, english: english.data) } @@ -113,6 +123,7 @@ extension PageSettings { let modelViewerJsFile: String? let imageCompareJsFile: String? let imageCompareCssFile: String? + let manifestFile: String? let german: LocalizedPageSettings.Data let english: LocalizedPageSettings.Data } diff --git a/CHDataManagement/Views/Settings/Pages/PageSettingsDetailView.swift b/CHDataManagement/Views/Settings/Pages/PageSettingsDetailView.swift index 93f846e..66fe61e 100644 --- a/CHDataManagement/Views/Settings/Pages/PageSettingsDetailView.swift +++ b/CHDataManagement/Views/Settings/Pages/PageSettingsDetailView.swift @@ -57,6 +57,11 @@ struct PageSettingsDetailView: View { selectedFile: $pageSettings.imageCompareJsFile, allowedType: .code) + FilePropertyView( + title: "Web App Manifest File", + footer: "The manifest file with the properties of the website when used as a progressive web app", + selectedFile: $pageSettings.manifestFile) + LocalizedPageSettingsView(settings: pageSettings.localized(in: language)) .id(language) }