mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 03:06:37 +00:00
Fixes #2807 - Stop inserting string attributes to code blocks.
This commit is contained in:
committed by
Stefan Ceriu
parent
45ac47ce16
commit
77f92ad068
@@ -170,21 +170,7 @@ struct AttributedStringBuilder: AttributedStringBuilderProtocol {
|
||||
if let value = value as? UIColor,
|
||||
value == temporaryCodeBlockMarkingColor {
|
||||
attributedString.addAttribute(.backgroundColor, value: UIColor(.compound._bgCodeBlock) as Any, range: range)
|
||||
// Codebloks should not have explicit links
|
||||
attributedString.enumerateAttribute(.link, in: range, options: []) { value, range, _ in
|
||||
if let link = value as? URL {
|
||||
var text = attributedString.attributedSubstring(from: range).string
|
||||
if !text.contains("://") {
|
||||
// we sanitize links by always them use https://
|
||||
text.insert(contentsOf: "https://", at: text.startIndex)
|
||||
}
|
||||
if text == link.absoluteString {
|
||||
attributedString.removeAttribute(.link, range: range)
|
||||
}
|
||||
}
|
||||
}
|
||||
// Codeblocks should not have all users mentions
|
||||
attributedString.removeAttribute(.MatrixAllUsersMention, range: range)
|
||||
attributedString.removeAttribute(.link, range: range)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -264,6 +250,11 @@ struct AttributedStringBuilder: AttributedStringBuilderProtocol {
|
||||
return
|
||||
}
|
||||
|
||||
// Don't add any extra attributes within codeblocks
|
||||
if attributedString.attribute(.backgroundColor, at: match.range.location, effectiveRange: nil) as? UIColor == temporaryCodeBlockMarkingColor {
|
||||
return
|
||||
}
|
||||
|
||||
switch match.type {
|
||||
case .atRoom:
|
||||
attributedString.addAttribute(.MatrixAllUsersMention, value: true, range: match.range)
|
||||
|
||||
@@ -491,10 +491,10 @@ class AttributedStringBuilderTests: XCTestCase {
|
||||
XCTAssertNil(attributedStringFromHTML?.link)
|
||||
}
|
||||
|
||||
func testHyperlinksAreNotIgnoredInCode() {
|
||||
func testHyperlinksAreIgnoredInCode() {
|
||||
let htmlString = "<pre><code>test <a href=\"https://matrix.org\">matrix</a> test</code></pre>"
|
||||
let attributedStringFromHTML = attributedStringBuilder.fromHTML(htmlString)
|
||||
checkLinkIn(attributedString: attributedStringFromHTML, expectedLink: "https://matrix.org", expectedRuns: 3)
|
||||
XCTAssertNil(attributedStringFromHTML?.link)
|
||||
}
|
||||
|
||||
func testUserMentionIsIgnoredInCode() {
|
||||
@@ -504,6 +504,13 @@ class AttributedStringBuilderTests: XCTestCase {
|
||||
XCTAssertNil(attributedStringFromHTML?.attachment)
|
||||
}
|
||||
|
||||
func testPlainTextUserMentionIsIgnoredInCode() {
|
||||
let htmlString = "<pre><code>Hey @some.user.ceriu:matrix.org</code></pre>"
|
||||
let attributedStringFromHTML = attributedStringBuilder.fromHTML(htmlString)
|
||||
XCTAssert(attributedStringFromHTML?.runs.count == 1)
|
||||
XCTAssertNil(attributedStringFromHTML?.attachment)
|
||||
}
|
||||
|
||||
func testAllUsersIsIgnoredInCode() {
|
||||
let htmlString = "<pre><code>test @room test</code></pre>"
|
||||
let attributedStringFromHTML = attributedStringBuilder.fromHTML(htmlString)
|
||||
|
||||
Reference in New Issue
Block a user