Colors, pages, post links

This commit is contained in:
Christoph Hagen
2024-11-20 13:53:44 +01:00
parent 943d8d962b
commit 8ae2a237cc
19 changed files with 466 additions and 46 deletions

View File

@ -1,17 +1,50 @@
import SwiftUI
import HighlightedTextEditor
struct PageDetailView: View {
@ObservedObject var page: Page
@ObservedObject
var page: Page
@Binding
var language: ContentLanguage
@Environment(\.language)
private var language
@EnvironmentObject
private var content: Content
@State
private var pageContent: String = ""
var body: some View {
Text(page.metadata(for: language)?.title ?? "No headline")
VStack(alignment: .leading) {
TextField("", text: page.localized(in: language).editableTitle())
.font(.title)
HStack(alignment: .firstTextBaseline) {
Button(action: loadContent) {
Text("Load")
}
Button(action: saveContent) {
Text("Save")
}
Spacer()
}
HighlightedTextEditor(
text: $pageContent,
highlightRules: .markdown)
}
.padding()
}
private func loadContent() {
pageContent = content.storage.pageContent(for: page.id, language: language)
}
private func saveContent() {
content.storage.save(pageContent: pageContent, for: page.id, language: language)
}
}
#Preview {
PageDetailView(page: .empty, language: .constant(.english))
PageDetailView(page: .empty)
}

View File

@ -0,0 +1,38 @@
import SwiftUI
struct PageListView: View {
@Environment(\.language)
var language
@EnvironmentObject
var content: Content
@State
var selectedPage: Page?
var body: some View {
NavigationSplitView {
List(content.pages, selection: $selectedPage) { page in
Text(page.localized(in: language).title)
.tag(page)
}
} detail: {
// Detail view when an item is selected
if let selectedPage {
PageDetailView(page: selectedPage)
} else {
// Fallback if no item is selected
Text("Select a page to show the content.")
.font(.largeTitle)
.foregroundColor(.secondary)
}
}
}
}
#Preview {
PageListView()
.environmentObject(Content())
}