// // 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() } }