From 4df552030a0dc9eec67348e8c3112d692deeb1a7 Mon Sep 17 00:00:00 2001 From: Kyle Nazario Date: Thu, 4 Feb 2021 15:45:36 -0700 Subject: [PATCH] Clicks (#29) * Accepts callbacks for NSAttributedString.Key values * URL preset is now tappable * Typo * Documents new initializer * CI Saves snapshots differently * Focuses macOS path * URL preset test snapshot reflects color to indicate clickability * UIKit url snapshot reflects new color * e2e tests link taps * e2e tests link clicks in AppKit * Updates autocorrection snapshots * Does not crash if tests start in full screen * Less brittle test * Updates snapshot for Catalina --- .github/workflows/ci.yml | 4 +-- README.md | 13 ++++++-- .../HighlightingTextEditor.swift | 22 +++++++++---- .../HighlightedTextEditor/Presets/URL.swift | 17 ++++++++-- .../testURLPresetHighlighting.1.png | Bin 126582 -> 126577 bytes .../iOS_EssayistUITests.swift | 13 ++++++++ .../macOS_EssayistUITests/testURLPreset.1.png | Bin 31624 -> 32437 bytes .../macOS_EssayistUITests.swift | 31 ++++++++++++++---- 8 files changed, 81 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 49c1fdd..6b4f1bb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: name: macOS-failing-snapshots path: /var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/com.kylenazario.macOS-EssayistUITests.xctrunner/macOS_EssayistUITests if-no-files-found: ignore - - name: Save new macOS snapshots + - name: Save existing/new macOS snapshots if: failure() uses: actions/upload-artifact@v2 with: @@ -91,7 +91,7 @@ jobs: name: iOS-failing-snapshots path: /Users/runner/Library/Developer/CoreSimulator/Devices/**/test*.png if-no-files-found: ignore - - name: Save new iOS snapshots + - name: Save existing/new iOS snapshots if: failure() uses: actions/upload-artifact@v2 with: diff --git a/README.md b/README.md index 52461d8..b0d7e7a 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,11 @@ struct ContentView: View { private let rules: [HighlightRule] = [ HighlightRule(pattern: betweenUnderscores, formattingRules: [ TextFormattingRule(fontTraits: [.traitItalic, .traitBold]), - TextFormattingRule(key: .foregroundColor, value: UIColor.red) + TextFormattingRule(key: .foregroundColor, value: UIColor.red), + TextFormattingRule(key: .underlineStyle) { content, range in + if content.count > 10 { return NSUnderlineStyle.double.rawValue } + else { return NSUnderlineStyle.single.rawValue } + } ]) ] @@ -110,13 +114,18 @@ HighlightedTextEditor(text: $text, highlightRules: .markdown) ### TextFormattingRule -TextFormattingRule uses two different initializers that each set one style. +TextFormattingRule offers three different initializers that each set one style. To set multiple styles, use multiple TextFormattingRules. | Parameter | Type | Description | | --- | --- | --- | | `key` | [NSAttributedString.Key](2) | The style to set (e.x. `.foregroundColor`, `.underlineStyle`) | | `value` | Any | The actual style applied to the `key` (e.x. for `key = .foregroundColor`, `value` is `UIColor.red` or `NSColor.red`) | +| Parameter | Type | Description | +| --- | --- | --- | +| `key` | [NSAttributedString.Key](2) | The style to set (e.x. `.foregroundColor`, `.underlineStyle`) | +| `calculateValue` | (String, Range) -> Any | A callback that calculates the value for `key`. First parameter is the text content matched by the regex, second is the match's range in the overall string. | + `value` uses an older, untyped API so you'll have to check the [documentation](2) for what type can be passed in for a given `key`. | Parameter | Type | Description | diff --git a/Sources/HighlightedTextEditor/HighlightingTextEditor.swift b/Sources/HighlightedTextEditor/HighlightingTextEditor.swift index a3d3024..935af6e 100644 --- a/Sources/HighlightedTextEditor/HighlightingTextEditor.swift +++ b/Sources/HighlightedTextEditor/HighlightingTextEditor.swift @@ -31,25 +31,31 @@ let defaultEditorTextColor = UIColor.label public struct TextFormattingRule { + public typealias AttributedKeyCallback = (String, Range) -> Any + let key: NSAttributedString.Key? - let value: Any? + let calculateValue: AttributedKeyCallback? let fontTraits: SymbolicTraits // ------------------- convenience ------------------------ public init(key: NSAttributedString.Key, value: Any) { - self.init(key: key, value: value, fontTraits: []) + self.init(key: key, calculateValue: { _, _ in value }, fontTraits: []) + } + + public init(key: NSAttributedString.Key, calculateValue: @escaping AttributedKeyCallback) { + self.init(key: key, calculateValue: calculateValue, fontTraits: []) } public init(fontTraits: SymbolicTraits) { - self.init(key: nil, value: nil, fontTraits: fontTraits) + self.init(key: nil, fontTraits: fontTraits) } // ------------------ most powerful initializer ------------------ - init(key: NSAttributedString.Key? = nil, value: Any? = nil, fontTraits: SymbolicTraits = []) { + init(key: NSAttributedString.Key? = nil, calculateValue: AttributedKeyCallback? = nil, fontTraits: SymbolicTraits = []) { self.key = key - self.value = value + self.calculateValue = calculateValue self.fontTraits = fontTraits } } @@ -109,8 +115,10 @@ extension HighlightingTextEditor { } highlightedString.addAttribute(.font, value: font, range: match.range) - guard let key = formattingRule.key, let value = formattingRule.value else { return } - highlightedString.addAttribute(key, value: value, range: match.range) + let matchRange = Range(match.range, in: text)! + let matchContent = String(text[matchRange]) + guard let key = formattingRule.key, let calculateValue = formattingRule.calculateValue else { return } + highlightedString.addAttribute(key, value: calculateValue(matchContent, matchRange), range: match.range) } } } diff --git a/Sources/HighlightedTextEditor/Presets/URL.swift b/Sources/HighlightedTextEditor/Presets/URL.swift index 1e55f4d..b8c3b8e 100644 --- a/Sources/HighlightedTextEditor/Presets/URL.swift +++ b/Sources/HighlightedTextEditor/Presets/URL.swift @@ -9,7 +9,7 @@ import Foundation import SwiftUI fileprivate let urlRegexPattern = "((?:http|https)://)?(?:www\\.)?[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?" -fileprivate let urlRegex = try! NSRegularExpression(pattern: urlRegexPattern, options: []) +fileprivate let _urlRegex = try! NSRegularExpression(pattern: urlRegexPattern, options: []) // HighlightedTextEditor.markdown will only be accessible via [HighlightRule].markdown in a future 2.0.0 breaking release // It does not really make any sense to have it here @@ -19,6 +19,19 @@ public extension HighlightedTextEditor { public extension Sequence where Iterator.Element == HighlightRule { static var url: [HighlightRule] { - [HighlightRule(pattern: urlRegex, formattingRule: TextFormattingRule(key: .underlineStyle, value: NSUnderlineStyle.single.rawValue))] + [ + HighlightRule(pattern: _urlRegex, formattingRules: [ + TextFormattingRule(key: .underlineStyle, value: NSUnderlineStyle.single.rawValue), + TextFormattingRule(key: .link) { urlString, _ in + URL(string: urlString) as Any + } + ]) + ] + } +} + +public extension HighlightRule { + static var urlRegex: NSRegularExpression { + _urlRegex } } diff --git a/Tests/Essayist/iOS-EssayistUITests/__Snapshots__/iOS_EssayistUITests/testURLPresetHighlighting.1.png b/Tests/Essayist/iOS-EssayistUITests/__Snapshots__/iOS_EssayistUITests/testURLPresetHighlighting.1.png index b6d2edbb220ef380b93d90aa5a1fdec907b7292b..03017188f4ab51301e4620ab6bc2f1ae2e882325 100644 GIT binary patch delta 13990 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 delta 13946 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 diff --git a/Tests/Essayist/iOS-EssayistUITests/iOS_EssayistUITests.swift b/Tests/Essayist/iOS-EssayistUITests/iOS_EssayistUITests.swift index 73edbe4..75645dd 100644 --- a/Tests/Essayist/iOS-EssayistUITests/iOS_EssayistUITests.swift +++ b/Tests/Essayist/iOS-EssayistUITests/iOS_EssayistUITests.swift @@ -287,4 +287,17 @@ class iOS_EssayistUITests: XCTestCase { selectKeyboard(.englishUS) } + + func testURLPresetLinkTaps() { + let app = XCUIApplication() + app.launch() + + selectEditor(.url) + app.textViews["hlte"].links.firstMatch.tap() + + let safari = XCUIApplication(bundleIdentifier: "com.apple.mobilesafari") + let safariLaunched = safari.wait(for: .runningForeground, timeout: 5) + + XCTAssertTrue(safariLaunched) + } } diff --git a/Tests/Essayist/macOS-EssayistUITests/__Snapshots__/macOS_EssayistUITests/testURLPreset.1.png b/Tests/Essayist/macOS-EssayistUITests/__Snapshots__/macOS_EssayistUITests/testURLPreset.1.png index d3acc69fda95a252207086f134f4df779d3705ec..4cc954545c3eb626a0d1bdf8755458d7568794d6 100644 GIT binary patch literal 32437 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