MastoSearch/MastoSearchMobile/StatusTableRowCollectionVie...

84 lines
3.2 KiB
Swift

//
// StatusTableRowCollectionViewCell.swift
// MastoSearchMobile
//
// Created by Shadowfacts on 7/3/22.
//
import UIKit
import MastoSearchCore
import SwiftSoup
class StatusTableRowCollectionViewCell: UICollectionViewCell {
// private static let formatter: DateFormatter = {
// let f = DateFormatter()
// f.locale = .current
// f.setLocalizedDateFormatFromTemplate("yyyy-MM-dd hh:mm a")
// return f
// }()
private static let dateStyle: Date.FormatStyle = {
Date.FormatStyle()
.year(.extended(minimumLength: 4))
.month(.twoDigits)
.day(.twoDigits)
.hour(.twoDigits(amPM: .abbreviated))
.minute(.twoDigits)
}()
private let dateLabel = UILabel()
private let contentWarningLabel = UILabel()
private let contentLabel = UILabel()
override init(frame: CGRect) {
super.init(frame: frame)
dateLabel.translatesAutoresizingMaskIntoConstraints = false
dateLabel.font = .monospacedDigitSystemFont(ofSize: 17, weight: .regular)
addSubview(dateLabel)
contentWarningLabel.translatesAutoresizingMaskIntoConstraints = false
addSubview(contentWarningLabel)
let spacer = UIView()
spacer.translatesAutoresizingMaskIntoConstraints = false
addSubview(spacer)
contentLabel.translatesAutoresizingMaskIntoConstraints = false
contentLabel.font = .preferredFont(forTextStyle: .callout)
contentLabel.numberOfLines = 2
addSubview(contentLabel)
NSLayoutConstraint.activate([
dateLabel.leadingAnchor.constraint(equalToSystemSpacingAfter: leadingAnchor, multiplier: 2),
dateLabel.centerYAnchor.constraint(equalTo: centerYAnchor),
contentWarningLabel.leadingAnchor.constraint(equalToSystemSpacingAfter: dateLabel.trailingAnchor, multiplier: 2),
contentWarningLabel.centerYAnchor.constraint(equalTo: centerYAnchor),
spacer.leadingAnchor.constraint(equalTo: contentWarningLabel.trailingAnchor),
centerXAnchor.constraint(equalToSystemSpacingAfter: spacer.trailingAnchor, multiplier: 1),
contentLabel.leadingAnchor.constraint(equalToSystemSpacingAfter: centerXAnchor, multiplier: 1),
contentLabel.trailingAnchor.constraint(equalTo: trailingAnchor),
contentLabel.centerYAnchor.constraint(equalTo: centerYAnchor),
contentLabel.topAnchor.constraint(greaterThanOrEqualTo: topAnchor, constant: 4),
bottomAnchor.constraint(greaterThanOrEqualTo: contentLabel.bottomAnchor, constant: 4),
heightAnchor.constraint(greaterThanOrEqualToConstant: 32),
])
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func updateUI(status: Status) {
dateLabel.text = status.published.formatted(StatusTableRowCollectionViewCell.dateStyle)
contentWarningLabel.text = status.summary ?? ""
let doc = try! SwiftSoup.parseBodyFragment(status.content)
contentLabel.text = try! doc.body()!.text()
}
}