Update composer library to 1.3.0 and apply changes

This commit is contained in:
aringenbach
2023-03-21 10:26:37 +01:00
parent 24df7ca032
commit 37a8aa5734
5 changed files with 66 additions and 46 deletions

View File

@@ -50,8 +50,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/matrix-org/matrix-wysiwyg-composer-swift",
"state" : {
"revision" : "b81654b30f8b22b2d13f17e5e4c843e1fdc1db32",
"version" : "1.2.2"
"revision" : "aa98d9b6e4c3d2c4927190c09c5a7e56d08dbfb0",
"version" : "1.3.0"
}
},
{

View File

@@ -14,6 +14,7 @@
// limitations under the License.
//
import HTMLParser
import UIKit
import WysiwygComposer
@@ -38,6 +39,9 @@ extension RoomViewController {
newAttributedString.appendString(" ")
} else if roomMember.userId == self.mainSession.myUser.userId {
newAttributedString.appendString("/me ")
newAttributedString.addAttribute(.font,
value: inputToolbarView.textDefaultFont,
range: .init(location: 0, length: newAttributedString.length))
} else {
if #available(iOS 15.0, *) {
newAttributedString.append(PillsFormatter.mentionPill(withRoomMember: roomMember,
@@ -155,24 +159,7 @@ extension RoomViewController {
@objc func togglePlainTextMode() {
RiotSettings.shared.enableWysiwygTextFormatting.toggle()
guard let wysiwygInputToolbar else { return }
// Switching from plain -> RTE, replace Pills by valid markdown links for parsing.
if !wysiwygInputToolbar.textFormattingEnabled, #available(iOS 15.0, *),
let attributedText = wysiwygInputToolbar.attributedTextMessage {
wysiwygInputToolbar.attributedTextMessage = NSAttributedString(string: PillsFormatter.stringByReplacingPills(in: attributedText, mode: .markdown))
}
wysiwygInputToolbar.textFormattingEnabled.toggle()
// Switching from RTE -> plain, replace markdown links with Pills.
if !wysiwygInputToolbar.textFormattingEnabled, #available(iOS 15.0, *),
let attributedText = wysiwygInputToolbar.attributedTextMessage {
wysiwygInputToolbar.attributedTextMessage = PillsFormatter.insertPills(in: attributedText,
roomState: self.roomDataSource.roomState,
font: self.inputToolbarView.textDefaultFont)
}
wysiwygInputToolbar?.textFormattingEnabled.toggle()
}
@objc func didChangeMaximisedState(_ isMaximised: Bool) {
@@ -270,21 +257,6 @@ extension RoomViewController {
composerLinkActionBridgePresenter = presenter
presenter.present(from: self, animated: true)
}
@objc func didRequestAttachmentStringForLink(_ link: String, andDisplayName: String) -> NSAttributedString? {
guard #available(iOS 15.0, *),
let userId = PillsFormatter.userIdFromPermalink(link),
let roomState = self.roomDataSource.roomState,
let member = PillsFormatter.roomMember(withUserId: userId,
roomState: roomState,
andLatestRoomState: nil) else {
return nil
}
return PillsFormatter.mentionPill(withRoomMember: member,
isHighlighted: false,
font: inputToolbarView.textDefaultFont)
}
@objc func showWaitingOtherParticipantHeader() {
let controller = VectorHostingController(rootView: RoomWaitingForMembers())
@@ -395,6 +367,43 @@ extension RoomViewController: ComposerLinkActionBridgePresenterDelegate {
}
}
// MARK: - PermalinkReplacer
extension RoomViewController: PermalinkReplacer {
public func replacementForLink(_ url: String, text: String) -> NSAttributedString? {
guard #available(iOS 15.0, *),
let userId = PillsFormatter.userIdFromPermalink(url),
let roomState = roomDataSource.roomState,
let member = PillsFormatter.roomMember(withUserId: userId,
roomState: roomState,
andLatestRoomState: nil) else {
return nil
}
return PillsFormatter.mentionPill(withRoomMember: member,
isHighlighted: false,
font: inputToolbarView.textDefaultFont)
}
public func postProcessMarkdown(in attributedString: NSAttributedString) -> NSAttributedString {
guard #available(iOS 15.0, *),
let roomState = roomDataSource.roomState else {
return attributedString
}
return PillsFormatter.insertPills(in: attributedString,
roomState: roomState,
font: inputToolbarView.textDefaultFont)
}
public func restoreMarkdown(in attributedString: NSAttributedString) -> String {
if #available(iOS 15.0, *) {
return PillsFormatter.stringByReplacingPills(in: attributedString, mode: .markdown)
} else {
return attributedString.string
}
}
}
// MARK: - VoiceBroadcast
extension RoomViewController {
@objc func stopUncompletedVoiceBroadcastIfNeeded() {

View File

@@ -60,7 +60,7 @@ typedef NS_ENUM(NSUInteger, RoomInputToolbarViewSendMode)
@param toolbarView the room input toolbar view
*/
- (void)roomInputToolbarViewDidChangeTextMessage:(RoomInputToolbarView*)toolbarView;
- (void)roomInputToolbarViewDidChangeTextMessage:(MXKRoomInputToolbarView*)toolbarView;
/**
Inform the delegate that the action menu was opened.
@@ -83,8 +83,6 @@ typedef NS_ENUM(NSUInteger, RoomInputToolbarViewSendMode)
- (void)didDetectTextPattern: (SuggestionPatternWrapper *)suggestionPattern;
- (nullable NSAttributedString *)didRequestAttachmentStringForLink: (NSString *)link andDisplayName: (NSString *)displayName;
@end
/**

View File

@@ -45,7 +45,7 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
private var hostingViewController: VectorHostingController!
private lazy var wysiwygViewModel = WysiwygComposerViewModel(
parserStyle: WysiwygInputToolbarView.parserStyle,
permalinkReplacer: self
permalinkReplacer: permalinkReplacer
)
/// Compute current HTML parser style for composer.
private static var parserStyle: HTMLParserStyle {
@@ -73,6 +73,12 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
}
// MARK: Public
override var delegate: MXKRoomInputToolbarViewDelegate! {
didSet {
wysiwygViewModel.permalinkReplacer = permalinkReplacer
}
}
override var placeholder: String! {
get {
@@ -138,6 +144,10 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
private weak var toolbarViewDelegate: RoomInputToolbarViewDelegate? {
return (delegate as? RoomInputToolbarViewDelegate) ?? nil
}
private var permalinkReplacer: PermalinkReplacer? {
return (delegate as? PermalinkReplacer)
}
override func awakeFromNib() {
super.awakeFromNib()
@@ -207,6 +217,15 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
if !value {
self.voiceMessageBottomConstraint?.constant = 2
}
},
wysiwygViewModel.$plainTextContent
.dropFirst()
.removeDuplicates()
.sink { [weak self] value in
guard let self else { return }
self.textMessage = value.string
self.toolbarViewDelegate?.roomInputToolbarViewDidChangeTextMessage(self)
}
]
@@ -443,12 +462,6 @@ class WysiwygInputToolbarView: MXKRoomInputToolbarView, NibLoadable, HtmlRoomInp
}
}
extension WysiwygInputToolbarView: PermalinkReplacer {
func replacementForLink(_ link: String, text: String) -> NSAttributedString? {
return toolbarViewDelegate?.didRequestAttachmentString(forLink: link, andDisplayName: text)
}
}
// MARK: - LegacySendModeAdapter
fileprivate extension ComposerSendMode {

View File

@@ -56,7 +56,7 @@ packages:
branch: 0.0.1
WysiwygComposer:
url: https://github.com/matrix-org/matrix-wysiwyg-composer-swift
version: 1.2.2
version: 1.3.0
DeviceKit:
url: https://github.com/devicekit/DeviceKit
majorVersion: 4.7.0