From fff9909a5a17bd48fb8a76a02423436e92fe20bc Mon Sep 17 00:00:00 2001 From: Carson Katri Date: Tue, 4 Aug 2020 14:25:07 -0400 Subject: [PATCH] Fix linter and layout issues --- .../Views/{ => Navigation}/NavigationLink.swift | 4 +++- .../Views/{ => Navigation}/NavigationView.swift | 13 +++++++------ Sources/TokamakDemo/TokamakDemo.swift | 8 ++------ Sources/TokamakStaticHTML/Shapes/_ShapeView.swift | 8 ++++++-- .../Views/{ => Navigation}/NavigationView.swift | 12 +++++++++++- Sources/TokamakStaticHTML/Views/Text/Text.swift | 7 +++++-- 6 files changed, 34 insertions(+), 18 deletions(-) rename Sources/TokamakCore/Views/{ => Navigation}/NavigationLink.swift (97%) rename Sources/TokamakCore/Views/{ => Navigation}/NavigationView.swift (90%) rename Sources/TokamakStaticHTML/Views/{ => Navigation}/NavigationView.swift (74%) diff --git a/Sources/TokamakCore/Views/NavigationLink.swift b/Sources/TokamakCore/Views/Navigation/NavigationLink.swift similarity index 97% rename from Sources/TokamakCore/Views/NavigationLink.swift rename to Sources/TokamakCore/Views/Navigation/NavigationLink.swift index baccf5e1..01db7c67 100644 --- a/Sources/TokamakCore/Views/NavigationLink.swift +++ b/Sources/TokamakCore/Views/Navigation/NavigationLink.swift @@ -93,6 +93,8 @@ public struct _NavigationLinkProxy where Label: View, Destin } public func activate() { - subject.navigationContext.destination = subject.destination + if !isSelected { + subject.navigationContext.destination = subject.destination + } } } diff --git a/Sources/TokamakCore/Views/NavigationView.swift b/Sources/TokamakCore/Views/Navigation/NavigationView.swift similarity index 90% rename from Sources/TokamakCore/Views/NavigationView.swift rename to Sources/TokamakCore/Views/Navigation/NavigationView.swift index c496c324..e29abb76 100644 --- a/Sources/TokamakCore/Views/NavigationView.swift +++ b/Sources/TokamakCore/Views/Navigation/NavigationView.swift @@ -39,13 +39,14 @@ public struct _NavigationViewProxy: View { public init(_ subject: NavigationView) { self.subject = subject } - public var content: Content { subject.content } + public var content: some View { + subject.content + .environmentObject(subject.context) + } + public var body: some View { - HStack { - content - subject.context.destination.view - } - .environmentObject(subject.context) + subject.context.destination.view + .environmentObject(subject.context) } } diff --git a/Sources/TokamakDemo/TokamakDemo.swift b/Sources/TokamakDemo/TokamakDemo.swift index 5dfae545..96ff88c1 100644 --- a/Sources/TokamakDemo/TokamakDemo.swift +++ b/Sources/TokamakDemo/TokamakDemo.swift @@ -35,7 +35,7 @@ struct NavItem: Identifiable { init(_ id: String, destination: V) where V: View { self.id = id - self.destination = title(destination.frame(minWidth: 300), title: id) + self.destination = title(destination, title: id) } init(unavailable id: String) { @@ -141,11 +141,7 @@ struct TokamakDemoView: View { let list = title( List(links) { link in if let dest = link.destination { - NavigationLink(link.id, destination: HStack { - Spacer() - dest - Spacer() - }) + NavigationLink(link.id, destination: dest) } else { #if os(WASI) Text(link.id) diff --git a/Sources/TokamakStaticHTML/Shapes/_ShapeView.swift b/Sources/TokamakStaticHTML/Shapes/_ShapeView.swift index bdfdcc6c..0ad8cd5f 100644 --- a/Sources/TokamakStaticHTML/Shapes/_ShapeView.swift +++ b/Sources/TokamakStaticHTML/Shapes/_ShapeView.swift @@ -37,9 +37,13 @@ extension _ShapeView: ViewDeferredToRenderer { if let shapeAttributes = shape as? ShapeAttributes { return AnyView(HTML("div", shapeAttributes.attributes(style)) { path }) } else if let color = style as? Color { - return AnyView(HTML("div", ["style": "fill: \(color.cssValue(environment));"]) { path }) + return AnyView(HTML("div", [ + "style": "fill: \(color.cssValue(environment));", + ]) { path }) } else if let foregroundColor = foregroundColor { - return AnyView(HTML("div", ["style": "fill: \(foregroundColor.cssValue(environment));"]) { path }) + return AnyView(HTML("div", [ + "style": "fill: \(foregroundColor.cssValue(environment));", + ]) { path }) } else { return path } diff --git a/Sources/TokamakStaticHTML/Views/NavigationView.swift b/Sources/TokamakStaticHTML/Views/Navigation/NavigationView.swift similarity index 74% rename from Sources/TokamakStaticHTML/Views/NavigationView.swift rename to Sources/TokamakStaticHTML/Views/Navigation/NavigationView.swift index aad78361..19439bcc 100644 --- a/Sources/TokamakStaticHTML/Views/NavigationView.swift +++ b/Sources/TokamakStaticHTML/Views/Navigation/NavigationView.swift @@ -22,7 +22,17 @@ extension NavigationView: ViewDeferredToRenderer { width: 100%; height: 100%; """, ]) { - _NavigationViewProxy(self) + _NavigationViewProxy(self).content + HTML("div", [ + "style": """ + display: flex; flex-direction: column; + align-items: center; justify-content: center; + flex-grow: 1; + height: 100%; + """, + ]) { + _NavigationViewProxy(self) + } }) } } diff --git a/Sources/TokamakStaticHTML/Views/Text/Text.swift b/Sources/TokamakStaticHTML/Views/Text/Text.swift index 11fa2c6d..60d71857 100644 --- a/Sources/TokamakStaticHTML/Views/Text/Text.swift +++ b/Sources/TokamakStaticHTML/Views/Text/Text.swift @@ -157,11 +157,15 @@ extension Text { underline = (active, color) } } + let hasStrikethrough = strikethrough?.0 ?? false let hasUnderline = underline?.0 ?? false let textDecoration = !hasStrikethrough && !hasUnderline ? "none" : "\(hasStrikethrough ? "line-through" : "") \(hasUnderline ? "underline" : "")" + let decorationColor = strikethrough?.1?.cssValue(environment) + ?? underline?.1?.cssValue(environment) + ?? "inherit" return [ "style": """ @@ -179,8 +183,7 @@ extension Text { letter-spacing: \(kerning); vertical-align: \(baseline == nil ? "baseline" : "\(baseline!)em"); text-decoration: \(textDecoration); - text-decoration-color: \(strikethrough?.1?.cssValue(environment) ?? underline?.1?.cssValue(environment) - ?? "inherit") + text-decoration-color: \(decorationColor) """, "class": isRedacted ? "_tokamak-text-redacted" : "", ]