chore: restore RTL layout for post content
This commit is contained in:
parent
7f597c2082
commit
0b1dc13894
|
@ -245,6 +245,8 @@ extension StatusView {
|
||||||
} else {
|
} else {
|
||||||
viewModel.spoilerContent = nil
|
viewModel.spoilerContent = nil
|
||||||
}
|
}
|
||||||
|
// language
|
||||||
|
viewModel.language = (status.reblog ?? status).language
|
||||||
// content
|
// content
|
||||||
do {
|
do {
|
||||||
let content = MastodonContent(content: status.content, emojis: status.emojis.asDictionary)
|
let content = MastodonContent(content: status.content, emojis: status.emojis.asDictionary)
|
||||||
|
|
|
@ -50,6 +50,7 @@ extension StatusView {
|
||||||
|
|
||||||
// Status
|
// Status
|
||||||
@Published public var content: MetaContent?
|
@Published public var content: MetaContent?
|
||||||
|
@Published public var language: String?
|
||||||
|
|
||||||
// Media
|
// Media
|
||||||
@Published public var mediaViewConfigurations: [MediaView.Configuration] = []
|
@Published public var mediaViewConfigurations: [MediaView.Configuration] = []
|
||||||
|
@ -273,12 +274,13 @@ extension StatusView.ViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func bindContent(statusView: StatusView) {
|
private func bindContent(statusView: StatusView) {
|
||||||
Publishers.CombineLatest3(
|
Publishers.CombineLatest4(
|
||||||
$spoilerContent,
|
$spoilerContent,
|
||||||
$content,
|
$content,
|
||||||
|
$language,
|
||||||
$isContentReveal.removeDuplicates()
|
$isContentReveal.removeDuplicates()
|
||||||
)
|
)
|
||||||
.sink { spoilerContent, content, isContentReveal in
|
.sink { spoilerContent, content, language, isContentReveal in
|
||||||
if let spoilerContent = spoilerContent {
|
if let spoilerContent = spoilerContent {
|
||||||
statusView.spoilerOverlayView.spoilerMetaLabel.configure(content: spoilerContent)
|
statusView.spoilerOverlayView.spoilerMetaLabel.configure(content: spoilerContent)
|
||||||
// statusView.spoilerBannerView.label.configure(content: spoilerContent)
|
// statusView.spoilerBannerView.label.configure(content: spoilerContent)
|
||||||
|
@ -289,6 +291,15 @@ extension StatusView.ViewModel {
|
||||||
// statusView.spoilerBannerView.label.reset()
|
// statusView.spoilerBannerView.label.reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let paragraphStyle = statusView.contentMetaText.paragraphStyle
|
||||||
|
if let language = language {
|
||||||
|
let direction = Locale.characterDirection(forLanguage: language)
|
||||||
|
paragraphStyle.alignment = direction == .rightToLeft ? .right : .left
|
||||||
|
} else {
|
||||||
|
paragraphStyle.alignment = .natural
|
||||||
|
}
|
||||||
|
statusView.contentMetaText.paragraphStyle = paragraphStyle
|
||||||
|
|
||||||
if let content = content {
|
if let content = content {
|
||||||
statusView.contentMetaText.configure(
|
statusView.contentMetaText.configure(
|
||||||
content: content,
|
content: content,
|
||||||
|
@ -310,95 +321,32 @@ extension StatusView.ViewModel {
|
||||||
self.logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): isContentReveal: \(isContentReveal)")
|
self.logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): isContentReveal: \(isContentReveal)")
|
||||||
}
|
}
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
$isSensitive
|
|
||||||
.sink { isSensitive in
|
|
||||||
guard isSensitive else { return }
|
|
||||||
statusView.setContentSensitiveeToggleButtonDisplay()
|
|
||||||
}
|
|
||||||
.store(in: &disposeBag)
|
|
||||||
// visibility
|
|
||||||
Publishers.CombineLatest(
|
|
||||||
$visibility,
|
|
||||||
$isMyself
|
|
||||||
)
|
|
||||||
.sink { visibility, isMyself in
|
|
||||||
switch visibility {
|
|
||||||
case .public:
|
|
||||||
break
|
|
||||||
case .unlisted:
|
|
||||||
statusView.statusVisibilityView.label.text = "Everyone can see this post but not display in the public timeline."
|
|
||||||
statusView.setVisibilityDisplay()
|
|
||||||
case .private:
|
|
||||||
statusView.statusVisibilityView.label.text = isMyself ? "Only my followers can see this post." : "Only their followers can see this post."
|
|
||||||
statusView.setVisibilityDisplay()
|
|
||||||
case .direct:
|
|
||||||
statusView.statusVisibilityView.label.text = "Only mentioned user can see this post."
|
|
||||||
statusView.setVisibilityDisplay()
|
|
||||||
case ._other:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.store(in: &disposeBag)
|
|
||||||
// $isSensitive
|
// $isSensitive
|
||||||
// .sink { isSensitive in
|
// .sink { isSensitive in
|
||||||
// if isSensitive {
|
// guard isSensitive else { return }
|
||||||
// statusView.setStatusSpoilerBannerViewDisplay()
|
// statusView.setContentSensitiveeToggleButtonDisplay()
|
||||||
// }
|
|
||||||
// }
|
// }
|
||||||
// .store(in: &disposeBag)
|
// .store(in: &disposeBag)
|
||||||
// $spoilerContent
|
// // visibility
|
||||||
// .sink { metaContent in
|
|
||||||
// guard let metaContent = metaContent else {
|
|
||||||
// statusView.spoilerContentTextView.reset()
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// statusView.spoilerContentTextView.configure(content: metaContent)
|
|
||||||
// statusView.setSpoilerDisplay()
|
|
||||||
// }
|
|
||||||
// .store(in: &disposeBag)
|
|
||||||
//
|
|
||||||
// Publishers.CombineLatest(
|
// Publishers.CombineLatest(
|
||||||
// $isContentReveal,
|
// $visibility,
|
||||||
// $spoilerContent
|
// $isMyself
|
||||||
// )
|
// )
|
||||||
// .receive(on: DispatchQueue.main)
|
// .sink { visibility, isMyself in
|
||||||
// .sink { [weak self] isContentReveal, spoilerContent in
|
// switch visibility {
|
||||||
// guard let self = self else { return }
|
// case .public:
|
||||||
// guard spoilerContent != nil else {
|
// break
|
||||||
// // ignore reveal state when no spoiler exists
|
// case .unlisted:
|
||||||
// statusView.contentTextView.isHidden = false
|
// statusView.statusVisibilityView.label.text = "Everyone can see this post but not display in the public timeline."
|
||||||
// return
|
// statusView.setVisibilityDisplay()
|
||||||
// }
|
// case .private:
|
||||||
//
|
// statusView.statusVisibilityView.label.text = isMyself ? "Only my followers can see this post." : "Only their followers can see this post."
|
||||||
// statusView.contentTextView.isHidden = !isContentReveal
|
// statusView.setVisibilityDisplay()
|
||||||
// self.contentRevealChangePublisher.send()
|
// case .direct:
|
||||||
// }
|
// statusView.statusVisibilityView.label.text = "Only mentioned user can see this post."
|
||||||
// .store(in: &disposeBag)
|
// statusView.setVisibilityDisplay()
|
||||||
// $source
|
// case ._other:
|
||||||
// .sink { source in
|
|
||||||
// statusView.metricsDashboardView.sourceLabel.text = source ?? ""
|
|
||||||
// }
|
|
||||||
// .store(in: &disposeBag)
|
|
||||||
// // dashboard
|
|
||||||
// Publishers.CombineLatest4(
|
|
||||||
// $replyCount,
|
|
||||||
// $reblogCount,
|
|
||||||
// $quoteCount,
|
|
||||||
// $favoriteCount
|
|
||||||
// )
|
|
||||||
// .sink { replyCount, reblogCount, quoteCount, favoriteCount in
|
|
||||||
// switch statusView.style {
|
|
||||||
// case .plain:
|
|
||||||
// statusView.setMetricsDisplay()
|
|
||||||
//
|
|
||||||
// statusView.metricsDashboardView.setupReply(count: replyCount)
|
|
||||||
// statusView.metricsDashboardView.setupRepost(count: reblogCount)
|
|
||||||
// statusView.metricsDashboardView.setupQuote(count: quoteCount)
|
|
||||||
// statusView.metricsDashboardView.setupLike(count: favoriteCount)
|
|
||||||
//
|
|
||||||
// let needsDashboardDisplay = replyCount > 0 || reblogCount > 0 || quoteCount > 0 || favoriteCount > 0
|
|
||||||
// statusView.metricsDashboardView.dashboardContainer.isHidden = !needsDashboardDisplay
|
|
||||||
// default:
|
|
||||||
// break
|
// break
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
Loading…
Reference in New Issue