aboutsummaryrefslogtreecommitdiff
path: root/Sources/NorgUI/Helpers/NorgLinkURL.swift
diff options
context:
space:
mode:
authorRuben Beltran del Rio <jj@r.bdr.sh>2026-06-15 14:35:36 +0200
committerRuben Beltran del Rio <jj@r.bdr.sh>2026-06-16 14:47:30 +0200
commit657aa83a5ca24dc35572c040df64a0abb85e8612 (patch)
treefe0b6fd425d8cad9dc6a28ada4ad8600e42b367e /Sources/NorgUI/Helpers/NorgLinkURL.swift
Initial extraction from Norganize
Diffstat (limited to 'Sources/NorgUI/Helpers/NorgLinkURL.swift')
-rw-r--r--Sources/NorgUI/Helpers/NorgLinkURL.swift25
1 files changed, 25 insertions, 0 deletions
diff --git a/Sources/NorgUI/Helpers/NorgLinkURL.swift b/Sources/NorgUI/Helpers/NorgLinkURL.swift
new file mode 100644
index 0000000..9b73fe3
--- /dev/null
+++ b/Sources/NorgUI/Helpers/NorgLinkURL.swift
@@ -0,0 +1,25 @@
+import Foundation
+import NorgKit
+
+public enum NorgLinkURL {
+ public static let scheme = "norgui-link"
+
+ public static func encode(_ link: InlineLink) -> URL? {
+ var components = URLComponents()
+ components.scheme = scheme
+ components.host = link.kind == .anchor ? "anchor" : "link"
+ if let target = link.target {
+ components.queryItems = [URLQueryItem(name: "target", value: target)]
+ }
+ return components.url
+ }
+
+ public static func decode(_ url: URL) -> InlineLink? {
+ guard url.scheme == scheme else { return nil }
+ let kind: InlineLink.Kind = url.host == "anchor" ? .anchor : .link
+ let target =
+ URLComponents(url: url, resolvingAgainstBaseURL: false)?
+ .queryItems?.first { $0.name == "target" }?.value
+ return InlineLink(kind: kind, target: target)
+ }
+}