mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 16:10:20 +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,
|
if let value = value as? UIColor,
|
||||||
value == temporaryCodeBlockMarkingColor {
|
value == temporaryCodeBlockMarkingColor {
|
||||||
attributedString.addAttribute(.backgroundColor, value: UIColor(.compound._bgCodeBlock) as Any, range: range)
|
attributedString.addAttribute(.backgroundColor, value: UIColor(.compound._bgCodeBlock) as Any, range: range)
|
||||||
// Codebloks should not have explicit links
|
attributedString.removeAttribute(.link, range: range)
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -264,6 +250,11 @@ struct AttributedStringBuilder: AttributedStringBuilderProtocol {
|
|||||||
return
|
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 {
|
switch match.type {
|
||||||
case .atRoom:
|
case .atRoom:
|
||||||
attributedString.addAttribute(.MatrixAllUsersMention, value: true, range: match.range)
|
attributedString.addAttribute(.MatrixAllUsersMention, value: true, range: match.range)
|
||||||
|
|||||||
@@ -491,10 +491,10 @@ class AttributedStringBuilderTests: XCTestCase {
|
|||||||
XCTAssertNil(attributedStringFromHTML?.link)
|
XCTAssertNil(attributedStringFromHTML?.link)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testHyperlinksAreNotIgnoredInCode() {
|
func testHyperlinksAreIgnoredInCode() {
|
||||||
let htmlString = "<pre><code>test <a href=\"https://matrix.org\">matrix</a> test</code></pre>"
|
let htmlString = "<pre><code>test <a href=\"https://matrix.org\">matrix</a> test</code></pre>"
|
||||||
let attributedStringFromHTML = attributedStringBuilder.fromHTML(htmlString)
|
let attributedStringFromHTML = attributedStringBuilder.fromHTML(htmlString)
|
||||||
checkLinkIn(attributedString: attributedStringFromHTML, expectedLink: "https://matrix.org", expectedRuns: 3)
|
XCTAssertNil(attributedStringFromHTML?.link)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testUserMentionIsIgnoredInCode() {
|
func testUserMentionIsIgnoredInCode() {
|
||||||
@@ -504,6 +504,13 @@ class AttributedStringBuilderTests: XCTestCase {
|
|||||||
XCTAssertNil(attributedStringFromHTML?.attachment)
|
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() {
|
func testAllUsersIsIgnoredInCode() {
|
||||||
let htmlString = "<pre><code>test @room test</code></pre>"
|
let htmlString = "<pre><code>test @room test</code></pre>"
|
||||||
let attributedStringFromHTML = attributedStringBuilder.fromHTML(htmlString)
|
let attributedStringFromHTML = attributedStringBuilder.fromHTML(htmlString)
|
||||||
|
|||||||
Reference in New Issue
Block a user