mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-16 06:28:27 +02:00
Update composer library to 1.3.0 and apply changes
This commit is contained in:
@@ -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"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user