Prevent inserting extra whitespace when autocompleting

This commit is contained in:
Shadowfacts 2020-10-12 22:03:50 -04:00
parent 58c6d508ec
commit 0687c040a0
Signed by: shadowfacts
GPG Key ID: 94A5AB95422746E5
3 changed files with 21 additions and 3 deletions

View File

@ -73,7 +73,7 @@ struct ComposeAutocompleteMentionsView: View {
HStack(spacing: 8) { HStack(spacing: 8) {
ForEach(accounts, id: \.id) { (account) in ForEach(accounts, id: \.id) { (account) in
Button { Button {
uiState.autocompleteHandler?.autocomplete(with: "@\(account.acct) ") uiState.autocompleteHandler?.autocomplete(with: "@\(account.acct)")
} label: { } label: {
HStack(spacing: 4) { HStack(spacing: 4) {
ComposeAvatarImageView(url: account.avatar) ComposeAvatarImageView(url: account.avatar)
@ -210,7 +210,7 @@ struct ComposeAutocompleteEmojisView: View {
HStack(spacing: 8) { HStack(spacing: 8) {
ForEach(emojis, id: \.shortcode) { (emoji) in ForEach(emojis, id: \.shortcode) { (emoji) in
Button { Button {
uiState.autocompleteHandler?.autocomplete(with: ":\(emoji.shortcode): ") uiState.autocompleteHandler?.autocomplete(with: ":\(emoji.shortcode):")
} label: { } label: {
HStack(spacing: 4) { HStack(spacing: 4) {
CustomEmojiImageView(emoji: emoji) CustomEmojiImageView(emoji: emoji)
@ -266,7 +266,7 @@ struct ComposeAutocompleteHashtagsView: View {
HStack(spacing: 8) { HStack(spacing: 8) {
ForEach(hashtags, id: \.name) { (hashtag) in ForEach(hashtags, id: \.name) { (hashtag) in
Button { Button {
uiState.autocompleteHandler?.autocomplete(with: "#\(hashtag.name) ") uiState.autocompleteHandler?.autocomplete(with: "#\(hashtag.name)")
} label: { } label: {
Text(verbatim: "#\(hashtag.name)") Text(verbatim: "#\(hashtag.name)")
.foregroundColor(Color(UIColor.label)) .foregroundColor(Color(UIColor.label))

View File

@ -75,6 +75,15 @@ struct ComposeContentWarningTextField: UIViewRepresentable {
let selectedRangeStartUTF16 = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start) let selectedRangeStartUTF16 = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
let characterBeforeCursorIndex = text.utf16.index(text.startIndex, offsetBy: selectedRangeStartUTF16) let characterBeforeCursorIndex = text.utf16.index(text.startIndex, offsetBy: selectedRangeStartUTF16)
let insertSpace: Bool
if text.distance(from: characterBeforeCursorIndex, to: text.endIndex) > 0 {
let charAfterCursor = text[text.index(after: characterBeforeCursorIndex)]
insertSpace = charAfterCursor != " " && charAfterCursor != "\n"
} else {
insertSpace = true
}
let string = insertSpace ? string + " " : string
textField.text!.replaceSubrange(lastWordStartIndex..<characterBeforeCursorIndex, with: string) textField.text!.replaceSubrange(lastWordStartIndex..<characterBeforeCursorIndex, with: string)
didChange(textField) didChange(textField)

View File

@ -243,6 +243,15 @@ struct MainComposeWrappedTextView: UIViewRepresentable {
let characterBeforeCursorIndex = text.utf16.index(text.startIndex, offsetBy: textView.selectedRange.upperBound) let characterBeforeCursorIndex = text.utf16.index(text.startIndex, offsetBy: textView.selectedRange.upperBound)
let insertSpace: Bool
if text.distance(from: characterBeforeCursorIndex, to: text.endIndex) > 0 {
let charAfterCursor = text[text.index(after: characterBeforeCursorIndex)]
insertSpace = charAfterCursor != " " && charAfterCursor != "\n"
} else {
insertSpace = true
}
let string = insertSpace ? string + " " : string
textView.text.replaceSubrange(lastWordStartIndex..<characterBeforeCursorIndex, with: string) textView.text.replaceSubrange(lastWordStartIndex..<characterBeforeCursorIndex, with: string)
self.textViewDidChange(textView) self.textViewDidChange(textView)