mirror of
https://github.com/mastodon/mastodon-ios
synced 2025-04-11 22:58:02 +02:00
Merge branch 'develop' into issue607
This commit is contained in:
commit
ace4537b7d
@ -2692,9 +2692,9 @@
|
||||
DB427DCF25BAA00100D1B89D /* Frameworks */,
|
||||
DB89BA0825C10FD0008580ED /* Embed Frameworks */,
|
||||
DBF8AE1B263293E400C9C23C /* Embed Foundation Extensions */,
|
||||
DB3D100425BAA71500EAA174 /* ShellScript */,
|
||||
DB025B8E278D6448002F581E /* ShellScript */,
|
||||
DB697DD2278F48D5004EF2F7 /* ShellScript */,
|
||||
DB3D100425BAA71500EAA174 /* Run SwiftGen */,
|
||||
DB025B8E278D6448002F581E /* Run Sourcery: Core Data */,
|
||||
DB697DD2278F48D5004EF2F7 /* Run Sourcery */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
@ -3010,7 +3010,7 @@
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
DB025B8E278D6448002F581E /* ShellScript */ = {
|
||||
DB025B8E278D6448002F581E /* Run Sourcery: Core Data */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 12;
|
||||
@ -3020,6 +3020,7 @@
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Run Sourcery: Core Data";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
@ -3028,7 +3029,7 @@
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "if [[ -f \"${PODS_ROOT}/Sourcery/bin/sourcery\" ]]; then\n \"${PODS_ROOT}/Sourcery/bin/sourcery\" --config ./MastodonSDK/Sources/CoreDataStack\nelse\n echo \"warning: Sourcery is not installed. Run 'pod install --repo-update' to install it.\"\nfi\n";
|
||||
};
|
||||
DB3D100425BAA71500EAA174 /* ShellScript */ = {
|
||||
DB3D100425BAA71500EAA174 /* Run SwiftGen */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 12;
|
||||
@ -3038,6 +3039,7 @@
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Run SwiftGen";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
@ -3046,7 +3048,7 @@
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "if [[ -f \"${PODS_ROOT}/SwiftGen/bin/swiftgen\" ]]; then\n \"${PODS_ROOT}/SwiftGen/bin/swiftgen\" \nelse\n echo \"warning: SwiftGen is not installed. Run 'pod install --repo-update' to install it.\"\nfi\n";
|
||||
};
|
||||
DB697DD2278F48D5004EF2F7 /* ShellScript */ = {
|
||||
DB697DD2278F48D5004EF2F7 /* Run Sourcery */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 12;
|
||||
@ -3056,6 +3058,7 @@
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Run Sourcery";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
|
@ -58,7 +58,7 @@ final class SafariActivity: UIActivity {
|
||||
}
|
||||
|
||||
Task {
|
||||
await sceneCoordinator?.present(scene: .safari(url: url as URL), from: nil, transition: .safariPresent(animated: true, completion: nil))
|
||||
_ = await sceneCoordinator?.present(scene: .safari(url: url as URL), from: nil, transition: .safariPresent(animated: true, completion: nil))
|
||||
activityDidFinish(true)
|
||||
}
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ extension DataSourceFacade {
|
||||
let alertController = await UIAlertController(for: error, title: nil, preferredStyle: .alert)
|
||||
let okAction = await UIAlertAction(title: L10n.Common.Controls.Actions.ok, style: .default)
|
||||
await alertController.addAction(okAction)
|
||||
await dependency.coordinator.present(
|
||||
_ = await dependency.coordinator.present(
|
||||
scene: .alertController(alertController: alertController),
|
||||
from: nil,
|
||||
transition: .alertController(animated: true, completion: nil)
|
||||
|
@ -35,7 +35,7 @@ extension DataSourceFacade {
|
||||
hashtag: tag.name
|
||||
)
|
||||
|
||||
provider.coordinator.present(
|
||||
_ = provider.coordinator.present(
|
||||
scene: .hashtagTimeline(viewModel: hashtagTimelineViewModel),
|
||||
from: provider,
|
||||
transition: .show
|
||||
@ -61,7 +61,7 @@ extension DataSourceFacade {
|
||||
hashtag: name
|
||||
)
|
||||
|
||||
provider.coordinator.present(
|
||||
_ = provider.coordinator.present(
|
||||
scene: .hashtagTimeline(viewModel: hashtagTimelineViewModel),
|
||||
from: provider,
|
||||
transition: .show
|
||||
|
@ -24,7 +24,7 @@ extension DataSourceFacade {
|
||||
item: mediaPreviewItem,
|
||||
transitionItem: mediaPreviewTransitionItem
|
||||
)
|
||||
dependency.coordinator.present(
|
||||
_ = dependency.coordinator.present(
|
||||
scene: .mediaPreview(viewModel: mediaPreviewViewModel),
|
||||
from: dependency,
|
||||
transition: .custom(transitioningDelegate: dependency.mediaPreviewTransitionController)
|
||||
|
@ -56,13 +56,13 @@ extension DataSourceFacade {
|
||||
url.pathComponents[2] == "statuses" {
|
||||
let statusID = url.pathComponents[3]
|
||||
let threadViewModel = RemoteThreadViewModel(context: provider.context, authContext: provider.authContext, statusID: statusID)
|
||||
await provider.coordinator.present(scene: .thread(viewModel: threadViewModel), from: nil, transition: .show)
|
||||
_ = await provider.coordinator.present(scene: .thread(viewModel: threadViewModel), from: nil, transition: .show)
|
||||
} else {
|
||||
await provider.coordinator.present(scene: .safari(url: url), from: nil, transition: .safariPresent(animated: true, completion: nil))
|
||||
_ = await provider.coordinator.present(scene: .safari(url: url), from: nil, transition: .safariPresent(animated: true, completion: nil))
|
||||
}
|
||||
case .hashtag(_, let hashtag, _):
|
||||
let hashtagTimelineViewModel = HashtagTimelineViewModel(context: provider.context, authContext: provider.authContext, hashtag: hashtag)
|
||||
await provider.coordinator.present(scene: .hashtagTimeline(viewModel: hashtagTimelineViewModel), from: provider, transition: .show)
|
||||
_ = await provider.coordinator.present(scene: .hashtagTimeline(viewModel: hashtagTimelineViewModel), from: provider, transition: .show)
|
||||
case .mention(_, let mention, let userInfo):
|
||||
await coordinateToProfileScene(
|
||||
provider: provider,
|
||||
|
@ -47,7 +47,7 @@ extension DataSourceFacade {
|
||||
mastodonUser: user
|
||||
)
|
||||
|
||||
provider.coordinator.present(
|
||||
_ = provider.coordinator.present(
|
||||
scene: .profile(viewModel: profileViewModel),
|
||||
from: provider,
|
||||
transition: .show
|
||||
@ -75,7 +75,7 @@ extension DataSourceFacade {
|
||||
}
|
||||
|
||||
guard let mention = mentions?.first(where: { $0.username == mention }) else {
|
||||
await provider.coordinator.present(
|
||||
_ = await provider.coordinator.present(
|
||||
scene: .safari(url: url),
|
||||
from: provider,
|
||||
transition: .safariPresent(animated: true, completion: nil)
|
||||
@ -102,7 +102,7 @@ extension DataSourceFacade {
|
||||
}
|
||||
}()
|
||||
|
||||
await provider.coordinator.present(
|
||||
_ = await provider.coordinator.present(
|
||||
scene: .profile(viewModel: profileViewModel),
|
||||
from: provider,
|
||||
transition: .show
|
||||
|
@ -43,7 +43,7 @@ extension DataSourceFacade {
|
||||
dependency: provider,
|
||||
status: status
|
||||
)
|
||||
provider.coordinator.present(
|
||||
_ = provider.coordinator.present(
|
||||
scene: .activityViewController(
|
||||
activityViewController: activityViewController,
|
||||
sourceView: button,
|
||||
@ -358,7 +358,8 @@ extension DataSourceFacade {
|
||||
dependency: dependency,
|
||||
status: status
|
||||
)
|
||||
await dependency.coordinator.present(
|
||||
|
||||
_ = dependency.coordinator.present(
|
||||
scene: .activityViewController(
|
||||
activityViewController: activityViewController,
|
||||
sourceView: menuContext.button,
|
||||
|
@ -487,7 +487,7 @@ extension StatusTableViewCellDelegate where Self: DataSourceProvider & AuthConte
|
||||
authContext: authContext,
|
||||
kind: .rebloggedBy(status: status)
|
||||
)
|
||||
await coordinator.present(
|
||||
_ = await coordinator.present(
|
||||
scene: .rebloggedBy(viewModel: userListViewModel),
|
||||
from: self,
|
||||
transition: .show
|
||||
@ -511,7 +511,7 @@ extension StatusTableViewCellDelegate where Self: DataSourceProvider & AuthConte
|
||||
authContext: authContext,
|
||||
kind: .favoritedBy(status: status)
|
||||
)
|
||||
await coordinator.present(
|
||||
_ = await coordinator.present(
|
||||
scene: .favoritedBy(viewModel: userListViewModel),
|
||||
from: self,
|
||||
transition: .show
|
||||
|
@ -143,7 +143,7 @@ extension UITableViewDelegate where Self: DataSourceProvider & MediaPreviewableV
|
||||
title: L10n.Common.Alerts.SavePhotoFailure.title,
|
||||
message: L10n.Common.Alerts.SavePhotoFailure.message
|
||||
)
|
||||
self.coordinator.present(
|
||||
_ = self.coordinator.present(
|
||||
scene: .alertController(alertController: alertController),
|
||||
from: self,
|
||||
transition: .alertController(animated: true, completion: nil)
|
||||
|
@ -58,12 +58,7 @@ final class ComposeViewController: UIViewController, NeedsDependency {
|
||||
let shadowBackgroundContainer = ShadowBackgroundContainer()
|
||||
publishButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
shadowBackgroundContainer.addSubview(publishButton)
|
||||
NSLayoutConstraint.activate([
|
||||
publishButton.topAnchor.constraint(equalTo: shadowBackgroundContainer.topAnchor),
|
||||
publishButton.leadingAnchor.constraint(equalTo: shadowBackgroundContainer.leadingAnchor),
|
||||
publishButton.trailingAnchor.constraint(equalTo: shadowBackgroundContainer.trailingAnchor),
|
||||
publishButton.bottomAnchor.constraint(equalTo: shadowBackgroundContainer.bottomAnchor),
|
||||
])
|
||||
publishButton.pinToParent()
|
||||
let barButtonItem = UIBarButtonItem(customView: shadowBackgroundContainer)
|
||||
return barButtonItem
|
||||
}()
|
||||
@ -93,10 +88,7 @@ extension ComposeViewController {
|
||||
.sink { [weak self] _ in
|
||||
guard let self = self else { return }
|
||||
guard self.traitCollection.userInterfaceIdiom == .pad else { return }
|
||||
var items = [self.publishBarButtonItem]
|
||||
// if self.traitCollection.horizontalSizeClass == .regular {
|
||||
// items.append(self.characterCountBarButtonItem)
|
||||
// }
|
||||
let items = [self.publishBarButtonItem]
|
||||
self.navigationItem.rightBarButtonItems = items
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
@ -105,12 +97,7 @@ extension ComposeViewController {
|
||||
addChild(composeContentViewController)
|
||||
composeContentViewController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(composeContentViewController.view)
|
||||
NSLayoutConstraint.activate([
|
||||
composeContentViewController.view.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
composeContentViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
composeContentViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
composeContentViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
composeContentViewController.view.pinToParent()
|
||||
composeContentViewController.didMove(toParent: self)
|
||||
|
||||
// bind title
|
||||
@ -175,7 +162,7 @@ extension ComposeViewController {
|
||||
let alertController = UIAlertController(for: error, title: nil, preferredStyle: .alert)
|
||||
let okAction = UIAlertAction(title: L10n.Common.Controls.Actions.ok, style: .default, handler: nil)
|
||||
alertController.addAction(okAction)
|
||||
coordinator.present(scene: .alertController(alertController: alertController), from: nil, transition: .alertController(animated: true, completion: nil))
|
||||
_ = coordinator.present(scene: .alertController(alertController: alertController), from: nil, transition: .alertController(animated: true, completion: nil))
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -57,12 +57,7 @@ extension DiscoveryCommunityViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.refreshControl = refreshControl
|
||||
refreshControl.addTarget(self, action: #selector(DiscoveryCommunityViewController.refreshControlValueChanged(_:)), for: .valueChanged)
|
||||
|
@ -125,7 +125,7 @@ extension DiscoveryCommunityViewModel.State {
|
||||
|
||||
override func didEnter(from previousState: GKState?) {
|
||||
super.didEnter(from: previousState)
|
||||
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
||||
guard let viewModel else { return }
|
||||
|
||||
switch previousState {
|
||||
case is Reloading:
|
||||
|
@ -56,12 +56,7 @@ extension DiscoveryForYouViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -56,12 +56,7 @@ extension DiscoveryHashtagsViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.refreshControl = refreshControl
|
||||
refreshControl.addTarget(self, action: #selector(DiscoveryHashtagsViewController.refreshControlValueChanged(_:)), for: .valueChanged)
|
||||
@ -108,7 +103,7 @@ extension DiscoveryHashtagsViewController: UITableViewDelegate {
|
||||
logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): \(indexPath)")
|
||||
guard case let .hashtag(tag) = viewModel.diffableDataSource?.itemIdentifier(for: indexPath) else { return }
|
||||
let hashtagTimelineViewModel = HashtagTimelineViewModel(context: context, authContext: viewModel.authContext, hashtag: tag.name)
|
||||
coordinator.present(
|
||||
_ = coordinator.present(
|
||||
scene: .hashtagTimeline(viewModel: hashtagTimelineViewModel),
|
||||
from: self,
|
||||
transition: .show
|
||||
@ -218,7 +213,7 @@ extension DiscoveryHashtagsViewController: TableViewControllerNavigateable {
|
||||
|
||||
guard case let .hashtag(tag) = item else { return }
|
||||
let hashtagTimelineViewModel = HashtagTimelineViewModel(context: context, authContext: viewModel.authContext, hashtag: tag.name)
|
||||
coordinator.present(
|
||||
_ = coordinator.present(
|
||||
scene: .hashtagTimeline(viewModel: hashtagTimelineViewModel),
|
||||
from: self,
|
||||
transition: .show
|
||||
|
@ -56,12 +56,7 @@ extension DiscoveryNewsViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
@ -117,7 +112,7 @@ extension DiscoveryNewsViewController: UITableViewDelegate {
|
||||
logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): \(indexPath)")
|
||||
guard case let .link(link) = viewModel.diffableDataSource?.itemIdentifier(for: indexPath) else { return }
|
||||
guard let url = URL(string: link.url) else { return }
|
||||
coordinator.present(
|
||||
_ = coordinator.present(
|
||||
scene: .safari(url: url),
|
||||
from: self,
|
||||
transition: .safariPresent(animated: true, completion: nil)
|
||||
@ -214,7 +209,7 @@ extension DiscoveryNewsViewController: TableViewControllerNavigateable {
|
||||
|
||||
guard case let .link(link) = item else { return }
|
||||
guard let url = URL(string: link.url) else { return }
|
||||
coordinator.present(
|
||||
_ = coordinator.present(
|
||||
scene: .safari(url: url),
|
||||
from: self,
|
||||
transition: .safariPresent(animated: true, completion: nil)
|
||||
|
@ -125,8 +125,7 @@ extension DiscoveryNewsViewModel.State {
|
||||
|
||||
override func didEnter(from previousState: GKState?) {
|
||||
super.didEnter(from: previousState)
|
||||
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
||||
|
||||
guard let viewModel else { return }
|
||||
|
||||
switch previousState {
|
||||
case is Reloading:
|
||||
|
@ -58,12 +58,7 @@ extension DiscoveryPostsViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
discoveryIntroBannerView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(discoveryIntroBannerView)
|
||||
|
@ -126,7 +126,7 @@ extension DiscoveryPostsViewModel.State {
|
||||
|
||||
override func didEnter(from previousState: GKState?) {
|
||||
super.didEnter(from: previousState)
|
||||
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
||||
guard let viewModel else { return }
|
||||
|
||||
switch previousState {
|
||||
case is Reloading:
|
||||
|
@ -80,12 +80,7 @@ extension HashtagTimelineViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -70,7 +70,7 @@ extension HashtagTimelineViewModel.State {
|
||||
|
||||
override func didEnter(from previousState: GKState?) {
|
||||
super.didEnter(from: previousState)
|
||||
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
||||
guard let stateMachine = stateMachine else { return }
|
||||
|
||||
stateMachine.enter(Loading.self)
|
||||
}
|
||||
@ -127,7 +127,7 @@ extension HashtagTimelineViewModel.State {
|
||||
|
||||
override func didEnter(from previousState: GKState?) {
|
||||
super.didEnter(from: previousState)
|
||||
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
||||
guard let viewModel else { return }
|
||||
|
||||
switch previousState {
|
||||
case is Reloading:
|
||||
|
@ -300,7 +300,7 @@ extension HomeTimelineViewController {
|
||||
}
|
||||
|
||||
@objc private func showWelcomeAction(_ sender: UIAction) {
|
||||
coordinator.present(scene: .welcome, from: self, transition: .modal(animated: true, completion: nil))
|
||||
_ = coordinator.present(scene: .welcome, from: self, transition: .modal(animated: true, completion: nil))
|
||||
}
|
||||
|
||||
@objc private func showRegisterAction(_ sender: UIAction) {
|
||||
@ -332,12 +332,12 @@ extension HomeTimelineViewController {
|
||||
|
||||
@objc private func showConfirmEmail(_ sender: UIAction) {
|
||||
let mastodonConfirmEmailViewModel = MastodonConfirmEmailViewModel()
|
||||
coordinator.present(scene: .mastodonConfirmEmail(viewModel: mastodonConfirmEmailViewModel), from: nil, transition: .modal(animated: true, completion: nil))
|
||||
_ = coordinator.present(scene: .mastodonConfirmEmail(viewModel: mastodonConfirmEmailViewModel), from: nil, transition: .modal(animated: true, completion: nil))
|
||||
}
|
||||
|
||||
@objc private func showAccountList(_ sender: UIAction) {
|
||||
let accountListViewModel = AccountListViewModel(context: context, authContext: viewModel.authContext)
|
||||
coordinator.present(scene: .accountList(viewModel: accountListViewModel), from: self, transition: .modal(animated: true, completion: nil))
|
||||
_ = coordinator.present(scene: .accountList(viewModel: accountListViewModel), from: self, transition: .modal(animated: true, completion: nil))
|
||||
}
|
||||
|
||||
@objc private func showProfileAction(_ sender: UIAction) {
|
||||
@ -347,12 +347,12 @@ extension HomeTimelineViewController {
|
||||
guard let self = self else { return }
|
||||
guard let textField = alertController?.textFields?.first else { return }
|
||||
let profileViewModel = RemoteProfileViewModel(context: self.context, authContext: self.viewModel.authContext, userID: textField.text ?? "")
|
||||
self.coordinator.present(scene: .profile(viewModel: profileViewModel), from: self, transition: .show)
|
||||
_ = self.coordinator.present(scene: .profile(viewModel: profileViewModel), from: self, transition: .show)
|
||||
}
|
||||
alertController.addAction(showAction)
|
||||
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
|
||||
alertController.addAction(cancelAction)
|
||||
coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||
_ = coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||
}
|
||||
|
||||
@objc private func showThreadAction(_ sender: UIAction) {
|
||||
@ -362,12 +362,12 @@ extension HomeTimelineViewController {
|
||||
guard let self = self else { return }
|
||||
guard let textField = alertController?.textFields?.first else { return }
|
||||
let threadViewModel = RemoteThreadViewModel(context: self.context, authContext: self.viewModel.authContext, statusID: textField.text ?? "")
|
||||
self.coordinator.present(scene: .thread(viewModel: threadViewModel), from: self, transition: .show)
|
||||
_ = self.coordinator.present(scene: .thread(viewModel: threadViewModel), from: self, transition: .show)
|
||||
}
|
||||
alertController.addAction(showAction)
|
||||
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
|
||||
alertController.addAction(cancelAction)
|
||||
coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||
_ = coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||
}
|
||||
|
||||
private func showNotification(_ sender: UIAction, notificationType: Mastodon.Entity.Notification.NotificationType) {
|
||||
@ -436,7 +436,7 @@ extension HomeTimelineViewController {
|
||||
authContext: viewModel.authContext,
|
||||
setting: currentSetting
|
||||
)
|
||||
coordinator.present(
|
||||
_ = coordinator.present(
|
||||
scene: .settings(viewModel: settingsViewModel),
|
||||
from: self,
|
||||
transition: .modal(animated: true, completion: nil)
|
||||
|
@ -158,12 +158,7 @@ extension HomeTimelineViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
// // layout publish progress
|
||||
publishProgressView.translatesAutoresizingMaskIntoConstraints = false
|
||||
@ -388,14 +383,14 @@ extension HomeTimelineViewController {
|
||||
@objc private func manuallySearchButtonPressed(_ sender: UIButton) {
|
||||
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
|
||||
let searchDetailViewModel = SearchDetailViewModel(authContext: viewModel.authContext)
|
||||
coordinator.present(scene: .searchDetail(viewModel: searchDetailViewModel), from: self, transition: .modal(animated: true, completion: nil))
|
||||
_ = coordinator.present(scene: .searchDetail(viewModel: searchDetailViewModel), from: self, transition: .modal(animated: true, completion: nil))
|
||||
}
|
||||
|
||||
@objc private func settingBarButtonItemPressed(_ sender: UIBarButtonItem) {
|
||||
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
|
||||
guard let setting = context.settingService.currentSetting.value else { return }
|
||||
let settingsViewModel = SettingsViewModel(context: context, authContext: viewModel.authContext, setting: setting)
|
||||
coordinator.present(scene: .settings(viewModel: settingsViewModel), from: self, transition: .modal(animated: true, completion: nil))
|
||||
_ = coordinator.present(scene: .settings(viewModel: settingsViewModel), from: self, transition: .modal(animated: true, completion: nil))
|
||||
}
|
||||
|
||||
@objc private func refreshControlValueChanged(_ sender: RefreshControl) {
|
||||
|
@ -62,7 +62,7 @@ extension HomeTimelineViewModel.LoadLatestState {
|
||||
|
||||
override func didEnter(from previousState: GKState?) {
|
||||
super.didEnter(from: previousState)
|
||||
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
||||
guard let viewModel else { return }
|
||||
|
||||
let latestFeedRecords = viewModel.fetchedResultsController.records.prefix(APIService.onceRequestStatusMaxCount)
|
||||
let parentManagedObjectContext = viewModel.fetchedResultsController.fetchedResultsController.managedObjectContext
|
||||
|
@ -47,12 +47,7 @@ extension HomeTimelineNavigationBarTitleView {
|
||||
private func _init() {
|
||||
containerView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(containerView)
|
||||
NSLayoutConstraint.activate([
|
||||
containerView.topAnchor.constraint(equalTo: topAnchor),
|
||||
containerView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
containerView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
containerView.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
containerView.pinToParent()
|
||||
|
||||
containerView.addArrangedSubview(logoButton)
|
||||
button.translatesAutoresizingMaskIntoConstraints = false
|
||||
|
@ -65,12 +65,7 @@ extension MediaPreviewViewController {
|
||||
pagingViewController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
addChild(pagingViewController)
|
||||
visualEffectView.contentView.addSubview(pagingViewController.view)
|
||||
NSLayoutConstraint.activate([
|
||||
visualEffectView.topAnchor.constraint(equalTo: pagingViewController.view.topAnchor),
|
||||
visualEffectView.bottomAnchor.constraint(equalTo: pagingViewController.view.bottomAnchor),
|
||||
visualEffectView.leadingAnchor.constraint(equalTo: pagingViewController.view.leadingAnchor),
|
||||
visualEffectView.trailingAnchor.constraint(equalTo: pagingViewController.view.trailingAnchor),
|
||||
])
|
||||
visualEffectView.pinTo(to: pagingViewController.view)
|
||||
pagingViewController.didMove(toParent: self)
|
||||
|
||||
closeButtonBackground.translatesAutoresizingMaskIntoConstraints = false
|
||||
@ -276,7 +271,7 @@ extension MediaPreviewViewController: MediaPreviewImageViewControllerDelegate {
|
||||
title: L10n.Common.Alerts.SavePhotoFailure.title,
|
||||
message: L10n.Common.Alerts.SavePhotoFailure.message
|
||||
)
|
||||
self.coordinator.present(
|
||||
_ = self.coordinator.present(
|
||||
scene: .alertController(alertController: alertController),
|
||||
from: self,
|
||||
transition: .alertController(animated: true, completion: nil)
|
||||
|
@ -39,23 +39,13 @@ extension MediaPreviewVideoViewController {
|
||||
addChild(playerViewController)
|
||||
playerViewController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(playerViewController.view)
|
||||
NSLayoutConstraint.activate([
|
||||
playerViewController.view.centerXAnchor.constraint(equalTo: view.centerXAnchor),
|
||||
playerViewController.view.centerYAnchor.constraint(equalTo: view.centerYAnchor),
|
||||
playerViewController.view.widthAnchor.constraint(equalTo: view.widthAnchor),
|
||||
playerViewController.view.heightAnchor.constraint(equalTo: view.heightAnchor),
|
||||
])
|
||||
playerViewController.view.pinToParent()
|
||||
playerViewController.didMove(toParent: self)
|
||||
|
||||
if let contentOverlayView = playerViewController.contentOverlayView {
|
||||
previewImageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
contentOverlayView.addSubview(previewImageView)
|
||||
NSLayoutConstraint.activate([
|
||||
previewImageView.topAnchor.constraint(equalTo: contentOverlayView.topAnchor),
|
||||
previewImageView.leadingAnchor.constraint(equalTo: contentOverlayView.leadingAnchor),
|
||||
previewImageView.trailingAnchor.constraint(equalTo: contentOverlayView.trailingAnchor),
|
||||
previewImageView.bottomAnchor.constraint(equalTo: contentOverlayView.bottomAnchor),
|
||||
])
|
||||
previewImageView.pinToParent()
|
||||
}
|
||||
|
||||
playerViewController.delegate = self
|
||||
|
@ -55,12 +55,7 @@ extension NotificationTimelineViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -189,7 +189,7 @@ extension MastodonConfirmEmailViewController {
|
||||
alertController.addAction(openEmailAction)
|
||||
alertController.addAction(cancelAction)
|
||||
alertController.preferredAction = openEmailAction
|
||||
self.coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||
_ = self.coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||
}
|
||||
|
||||
@objc private func resendButtonPressed(_ sender: UIButton) {
|
||||
@ -197,18 +197,17 @@ extension MastodonConfirmEmailViewController {
|
||||
let resendAction = UIAlertAction(title: L10n.Scene.ConfirmEmail.DontReceiveEmail.resendEmail, style: .default) { _ in
|
||||
let url = Mastodon.API.resendEmailURL(domain: self.viewModel.authenticateInfo.domain)
|
||||
let viewModel = MastodonResendEmailViewModel(resendEmailURL: url, email: self.viewModel.email)
|
||||
self.coordinator.present(scene: .mastodonResendEmail(viewModel: viewModel), from: self, transition: .modal(animated: true, completion: nil))
|
||||
_ = self.coordinator.present(scene: .mastodonResendEmail(viewModel: viewModel), from: self, transition: .modal(animated: true, completion: nil))
|
||||
}
|
||||
let okAction = UIAlertAction(title: L10n.Common.Controls.Actions.ok, style: .default) { _ in
|
||||
}
|
||||
alertController.addAction(resendAction)
|
||||
alertController.addAction(okAction)
|
||||
self.coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||
_ = self.coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||
}
|
||||
|
||||
func showEmailAppAlert() {
|
||||
let clients = ThirdPartyMailClient.clients
|
||||
let application = UIApplication.shared
|
||||
let availableClients = clients.filter { client -> Bool in
|
||||
ThirdPartyMailer.isMailClientAvailable(client)
|
||||
}
|
||||
@ -220,14 +219,14 @@ extension MastodonConfirmEmailViewController {
|
||||
alertController.addAction(alertAction)
|
||||
_ = availableClients.compactMap { client -> UIAlertAction in
|
||||
let alertAction = UIAlertAction(title: client.name, style: .default) { _ in
|
||||
_ = ThirdPartyMailer.open(client, completionHandler: nil)
|
||||
ThirdPartyMailer.open(client, completionHandler: nil)
|
||||
}
|
||||
alertController.addAction(alertAction)
|
||||
return alertAction
|
||||
}
|
||||
let cancelAction = UIAlertAction(title: L10n.Common.Controls.Actions.cancel, style: .cancel, handler: nil)
|
||||
alertController.addAction(cancelAction)
|
||||
self.coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||
_ = self.coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -48,12 +48,7 @@ extension PickServerCategoryView {
|
||||
|
||||
container.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(container)
|
||||
NSLayoutConstraint.activate([
|
||||
container.topAnchor.constraint(equalTo: topAnchor),
|
||||
container.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
container.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
container.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
container.pinToParent()
|
||||
|
||||
container.addArrangedSubview(titleLabel)
|
||||
highlightedIndicatorView.translatesAutoresizingMaskIntoConstraints = false
|
||||
|
@ -49,7 +49,7 @@ extension MastodonRegisterViewController: PHPickerViewControllerDelegate {
|
||||
let alertController = UIAlertController(for: error, title: "", preferredStyle: .alert)
|
||||
let okAction = UIAlertAction(title: L10n.Common.Controls.Actions.ok, style: .default, handler: nil)
|
||||
alertController.addAction(okAction)
|
||||
self.coordinator.present(
|
||||
_ = self.coordinator.present(
|
||||
scene: .alertController(alertController: alertController),
|
||||
from: nil,
|
||||
transition: .alertController(animated: true, completion: nil)
|
||||
|
@ -85,12 +85,7 @@ extension MastodonRegisterViewController {
|
||||
addChild(hostingViewController)
|
||||
hostingViewController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(hostingViewController.view)
|
||||
NSLayoutConstraint.activate([
|
||||
hostingViewController.view.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
hostingViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
hostingViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
hostingViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
hostingViewController.view.pinToParent()
|
||||
|
||||
navigationActionView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(navigationActionView)
|
||||
|
@ -49,12 +49,7 @@ extension MastodonResendEmailViewController {
|
||||
|
||||
webView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(webView)
|
||||
NSLayoutConstraint.activate([
|
||||
webView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
webView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
webView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
webView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
webView.pinToParent()
|
||||
|
||||
let request = URLRequest(url: viewModel.resendEmailURL)
|
||||
webView.navigationDelegate = self.viewModel.navigationDelegate
|
||||
|
@ -69,12 +69,7 @@ extension MastodonServerRulesViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
navigationActionView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(navigationActionView)
|
||||
|
@ -84,21 +84,11 @@ extension NavigationActionView {
|
||||
|
||||
backButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
backButtonShadowContainer.addSubview(backButton)
|
||||
NSLayoutConstraint.activate([
|
||||
backButton.topAnchor.constraint(equalTo: backButtonShadowContainer.topAnchor),
|
||||
backButton.leadingAnchor.constraint(equalTo: backButtonShadowContainer.leadingAnchor),
|
||||
backButton.trailingAnchor.constraint(equalTo: backButtonShadowContainer.trailingAnchor),
|
||||
backButton.bottomAnchor.constraint(equalTo: backButtonShadowContainer.bottomAnchor),
|
||||
])
|
||||
backButton.pinToParent()
|
||||
|
||||
nextButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
nextButtonShadowContainer.addSubview(nextButton)
|
||||
NSLayoutConstraint.activate([
|
||||
nextButton.topAnchor.constraint(equalTo: nextButtonShadowContainer.topAnchor),
|
||||
nextButton.leadingAnchor.constraint(equalTo: nextButtonShadowContainer.leadingAnchor),
|
||||
nextButton.trailingAnchor.constraint(equalTo: nextButtonShadowContainer.trailingAnchor),
|
||||
nextButton.bottomAnchor.constraint(equalTo: nextButtonShadowContainer.bottomAnchor),
|
||||
])
|
||||
nextButton.pinToParent()
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -20,12 +20,7 @@ extension OnboardingNavigationController {
|
||||
|
||||
gradientBorderView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(gradientBorderView)
|
||||
NSLayoutConstraint.activate([
|
||||
gradientBorderView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
gradientBorderView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
gradientBorderView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
gradientBorderView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
gradientBorderView.pinToParent()
|
||||
|
||||
updateBorderViewDisplay()
|
||||
}
|
||||
|
@ -96,12 +96,7 @@ extension WelcomeIllustrationView {
|
||||
].forEach { imageView in
|
||||
imageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(imageView)
|
||||
NSLayoutConstraint.activate([
|
||||
imageView.topAnchor.constraint(equalTo: cloudBaseImageView.topAnchor),
|
||||
imageView.leadingAnchor.constraint(equalTo: cloudBaseImageView.leadingAnchor),
|
||||
imageView.trailingAnchor.constraint(equalTo: cloudBaseImageView.trailingAnchor),
|
||||
imageView.bottomAnchor.constraint(equalTo: cloudBaseImageView.bottomAnchor),
|
||||
])
|
||||
imageView.pinTo(to: cloudBaseImageView)
|
||||
}
|
||||
|
||||
aspectLayoutConstraint = cloudBaseImageView.widthAnchor.constraint(equalTo: cloudBaseImageView.heightAnchor, multiplier: layout.artworkImageSize.width / layout.artworkImageSize.height)
|
||||
|
@ -124,22 +124,12 @@ extension WelcomeViewController {
|
||||
signUpButtonShadowView.translatesAutoresizingMaskIntoConstraints = false
|
||||
buttonContainer.addSubview(signUpButtonShadowView)
|
||||
buttonContainer.sendSubviewToBack(signUpButtonShadowView)
|
||||
NSLayoutConstraint.activate([
|
||||
signUpButtonShadowView.topAnchor.constraint(equalTo: signUpButton.topAnchor),
|
||||
signUpButtonShadowView.leadingAnchor.constraint(equalTo: signUpButton.leadingAnchor),
|
||||
signUpButtonShadowView.trailingAnchor.constraint(equalTo: signUpButton.trailingAnchor),
|
||||
signUpButtonShadowView.bottomAnchor.constraint(equalTo: signUpButton.bottomAnchor),
|
||||
])
|
||||
signUpButtonShadowView.pinTo(to: signUpButton)
|
||||
|
||||
signInButtonShadowView.translatesAutoresizingMaskIntoConstraints = false
|
||||
buttonContainer.addSubview(signInButtonShadowView)
|
||||
buttonContainer.sendSubviewToBack(signInButtonShadowView)
|
||||
NSLayoutConstraint.activate([
|
||||
signInButtonShadowView.topAnchor.constraint(equalTo: signInButton.topAnchor),
|
||||
signInButtonShadowView.leadingAnchor.constraint(equalTo: signInButton.leadingAnchor),
|
||||
signInButtonShadowView.trailingAnchor.constraint(equalTo: signInButton.trailingAnchor),
|
||||
signInButtonShadowView.bottomAnchor.constraint(equalTo: signInButton.bottomAnchor),
|
||||
])
|
||||
signInButtonShadowView.pinTo(to: signInButton)
|
||||
|
||||
signUpButton.addTarget(self, action: #selector(signUpButtonDidClicked(_:)), for: .touchUpInside)
|
||||
signInButton.addTarget(self, action: #selector(signInButtonDidClicked(_:)), for: .touchUpInside)
|
||||
|
@ -60,12 +60,7 @@ extension ProfileAboutViewController {
|
||||
|
||||
collectionView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(collectionView)
|
||||
NSLayoutConstraint.activate([
|
||||
collectionView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
collectionView.pinToParent()
|
||||
|
||||
collectionView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -64,12 +64,7 @@ extension BookmarkViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -53,12 +53,7 @@ extension FamiliarFollowersViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -67,12 +67,7 @@ extension FavoriteViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -46,7 +46,7 @@ extension FavoriteViewModel {
|
||||
extension FavoriteViewModel.State {
|
||||
class Initial: FavoriteViewModel.State {
|
||||
override func isValidNextState(_ stateClass: AnyClass) -> Bool {
|
||||
guard let viewModel = viewModel else { return false }
|
||||
guard viewModel != nil else { return false }
|
||||
switch stateClass {
|
||||
case is Reloading.Type:
|
||||
return true
|
||||
@ -130,13 +130,12 @@ extension FavoriteViewModel.State {
|
||||
|
||||
override func didEnter(from previousState: GKState?) {
|
||||
super.didEnter(from: previousState)
|
||||
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
||||
guard let viewModel else { return }
|
||||
|
||||
if previousState is Reloading {
|
||||
maxID = nil
|
||||
}
|
||||
|
||||
|
||||
Task {
|
||||
do {
|
||||
let response = try await viewModel.context.apiService.favoritedStatuses(
|
||||
|
@ -58,12 +58,7 @@ extension FollowerListViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -58,12 +58,7 @@ extension FollowingListViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -275,21 +275,11 @@ extension ProfileHeaderView {
|
||||
|
||||
bannerImageViewOverlayVisualEffectView.translatesAutoresizingMaskIntoConstraints = false
|
||||
bannerImageView.addSubview(bannerImageViewOverlayVisualEffectView)
|
||||
NSLayoutConstraint.activate([
|
||||
bannerImageViewOverlayVisualEffectView.topAnchor.constraint(equalTo: bannerImageView.topAnchor),
|
||||
bannerImageViewOverlayVisualEffectView.leadingAnchor.constraint(equalTo: bannerImageView.leadingAnchor),
|
||||
bannerImageViewOverlayVisualEffectView.trailingAnchor.constraint(equalTo: bannerImageView.trailingAnchor),
|
||||
bannerImageViewOverlayVisualEffectView.bottomAnchor.constraint(equalTo: bannerImageView.bottomAnchor),
|
||||
])
|
||||
bannerImageViewOverlayVisualEffectView.pinToParent()
|
||||
|
||||
editBannerButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
bannerContainerView.addSubview(editBannerButton)
|
||||
NSLayoutConstraint.activate([
|
||||
editBannerButton.topAnchor.constraint(equalTo: bannerImageView.topAnchor),
|
||||
editBannerButton.leadingAnchor.constraint(equalTo: bannerImageView.leadingAnchor),
|
||||
editBannerButton.trailingAnchor.constraint(equalTo: bannerImageView.trailingAnchor),
|
||||
editBannerButton.bottomAnchor.constraint(equalTo: bannerImageView.bottomAnchor),
|
||||
])
|
||||
editBannerButton.pinTo(to: bannerImageView)
|
||||
bannerContainerView.isUserInteractionEnabled = true
|
||||
|
||||
// follows you
|
||||
@ -306,12 +296,7 @@ extension ProfileHeaderView {
|
||||
|
||||
followsYouVibrantEffectView.translatesAutoresizingMaskIntoConstraints = false
|
||||
followsYouBlurEffectView.contentView.addSubview(followsYouVibrantEffectView)
|
||||
NSLayoutConstraint.activate([
|
||||
followsYouVibrantEffectView.topAnchor.constraint(equalTo: followsYouBlurEffectView.topAnchor),
|
||||
followsYouVibrantEffectView.leadingAnchor.constraint(equalTo: followsYouBlurEffectView.leadingAnchor),
|
||||
followsYouVibrantEffectView.trailingAnchor.constraint(equalTo: followsYouBlurEffectView.trailingAnchor),
|
||||
followsYouVibrantEffectView.bottomAnchor.constraint(equalTo: followsYouBlurEffectView.bottomAnchor),
|
||||
])
|
||||
followsYouVibrantEffectView.pinTo(to: followsYouBlurEffectView)
|
||||
|
||||
followsYouLabel.translatesAutoresizingMaskIntoConstraints = false
|
||||
followsYouVibrantEffectView.contentView.addSubview(followsYouLabel)
|
||||
@ -347,30 +332,15 @@ extension ProfileHeaderView {
|
||||
|
||||
avatarImageViewOverlayVisualEffectView.translatesAutoresizingMaskIntoConstraints = false
|
||||
avatarImageViewBackgroundView.addSubview(avatarImageViewOverlayVisualEffectView)
|
||||
NSLayoutConstraint.activate([
|
||||
avatarImageViewOverlayVisualEffectView.topAnchor.constraint(equalTo: avatarImageViewBackgroundView.topAnchor),
|
||||
avatarImageViewOverlayVisualEffectView.leadingAnchor.constraint(equalTo: avatarImageViewBackgroundView.leadingAnchor),
|
||||
avatarImageViewOverlayVisualEffectView.trailingAnchor.constraint(equalTo: avatarImageViewBackgroundView.trailingAnchor),
|
||||
avatarImageViewOverlayVisualEffectView.bottomAnchor.constraint(equalTo: avatarImageViewBackgroundView.bottomAnchor),
|
||||
])
|
||||
avatarImageViewOverlayVisualEffectView.pinToParent()
|
||||
|
||||
editAvatarBackgroundView.translatesAutoresizingMaskIntoConstraints = false
|
||||
avatarButton.addSubview(editAvatarBackgroundView)
|
||||
NSLayoutConstraint.activate([
|
||||
editAvatarBackgroundView.topAnchor.constraint(equalTo: avatarButton.topAnchor),
|
||||
editAvatarBackgroundView.leadingAnchor.constraint(equalTo: avatarButton.leadingAnchor),
|
||||
editAvatarBackgroundView.trailingAnchor.constraint(equalTo: avatarButton.trailingAnchor),
|
||||
editAvatarBackgroundView.bottomAnchor.constraint(equalTo: avatarButton.bottomAnchor),
|
||||
])
|
||||
editAvatarBackgroundView.pinToParent()
|
||||
|
||||
editAvatarButtonOverlayIndicatorView.translatesAutoresizingMaskIntoConstraints = false
|
||||
editAvatarBackgroundView.addSubview(editAvatarButtonOverlayIndicatorView)
|
||||
NSLayoutConstraint.activate([
|
||||
editAvatarButtonOverlayIndicatorView.topAnchor.constraint(equalTo: editAvatarBackgroundView.topAnchor),
|
||||
editAvatarButtonOverlayIndicatorView.leadingAnchor.constraint(equalTo: editAvatarBackgroundView.leadingAnchor),
|
||||
editAvatarButtonOverlayIndicatorView.trailingAnchor.constraint(equalTo: editAvatarBackgroundView.trailingAnchor),
|
||||
editAvatarButtonOverlayIndicatorView.bottomAnchor.constraint(equalTo: editAvatarBackgroundView.bottomAnchor),
|
||||
])
|
||||
editAvatarButtonOverlayIndicatorView.pinToParent()
|
||||
editAvatarBackgroundView.isUserInteractionEnabled = true
|
||||
avatarButton.isUserInteractionEnabled = true
|
||||
|
||||
@ -456,11 +426,8 @@ extension ProfileHeaderView {
|
||||
|
||||
relationshipActionButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
relationshipActionButtonShadowContainer.addSubview(relationshipActionButton)
|
||||
relationshipActionButton.pinToParent()
|
||||
NSLayoutConstraint.activate([
|
||||
relationshipActionButton.topAnchor.constraint(equalTo: relationshipActionButtonShadowContainer.topAnchor),
|
||||
relationshipActionButton.leadingAnchor.constraint(equalTo: relationshipActionButtonShadowContainer.leadingAnchor),
|
||||
relationshipActionButton.trailingAnchor.constraint(equalTo: relationshipActionButtonShadowContainer.trailingAnchor),
|
||||
relationshipActionButton.bottomAnchor.constraint(equalTo: relationshipActionButtonShadowContainer.bottomAnchor),
|
||||
relationshipActionButton.widthAnchor.constraint(greaterThanOrEqualToConstant: ProfileHeaderView.friendshipActionButtonSize.width).priority(.required - 1),
|
||||
relationshipActionButton.heightAnchor.constraint(equalToConstant: ProfileHeaderView.friendshipActionButtonSize.height).priority(.defaultHigh),
|
||||
])
|
||||
|
@ -99,12 +99,7 @@ extension ProfilePagingViewController {
|
||||
if let buttonBarView = self.buttonBarView {
|
||||
buttonBarShadowView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.insertSubview(buttonBarShadowView, belowSubview: buttonBarView)
|
||||
NSLayoutConstraint.activate([
|
||||
buttonBarShadowView.topAnchor.constraint(equalTo: buttonBarView.topAnchor),
|
||||
buttonBarShadowView.leadingAnchor.constraint(equalTo: buttonBarView.leadingAnchor),
|
||||
buttonBarShadowView.trailingAnchor.constraint(equalTo: buttonBarView.trailingAnchor),
|
||||
buttonBarShadowView.bottomAnchor.constraint(equalTo: buttonBarView.bottomAnchor),
|
||||
])
|
||||
buttonBarShadowView.pinTo(to: buttonBarView)
|
||||
|
||||
viewModel.$needsSetupBottomShadow
|
||||
.receive(on: DispatchQueue.main)
|
||||
|
@ -259,12 +259,7 @@ extension ProfileViewController {
|
||||
tabBarPagerController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tabBarPagerController.view)
|
||||
tabBarPagerController.didMove(toParent: self)
|
||||
NSLayoutConstraint.activate([
|
||||
tabBarPagerController.view.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tabBarPagerController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tabBarPagerController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tabBarPagerController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tabBarPagerController.view.pinToParent()
|
||||
|
||||
tabBarPagerController.delegate = self
|
||||
tabBarPagerController.dataSource = self
|
||||
@ -503,7 +498,7 @@ extension ProfileViewController {
|
||||
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
|
||||
guard let setting = context.settingService.currentSetting.value else { return }
|
||||
let settingsViewModel = SettingsViewModel(context: context, authContext: viewModel.authContext, setting: setting)
|
||||
coordinator.present(scene: .settings(viewModel: settingsViewModel), from: self, transition: .modal(animated: true, completion: nil))
|
||||
_ = coordinator.present(scene: .settings(viewModel: settingsViewModel), from: self, transition: .modal(animated: true, completion: nil))
|
||||
}
|
||||
|
||||
@objc private func shareBarButtonItemPressed(_ sender: UIBarButtonItem) {
|
||||
|
@ -60,12 +60,7 @@ extension UserTimelineViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -61,12 +61,7 @@ extension FavoritedByViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -61,12 +61,7 @@ extension RebloggedByViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -134,7 +134,7 @@ extension UserListViewModel.State {
|
||||
maxID = nil
|
||||
}
|
||||
|
||||
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
||||
guard let viewModel = viewModel else { return }
|
||||
|
||||
let maxID = self.maxID
|
||||
|
||||
|
@ -61,12 +61,7 @@ extension ReportViewController {
|
||||
reportReasonViewController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(reportReasonViewController.view)
|
||||
reportReasonViewController.didMove(toParent: self)
|
||||
NSLayoutConstraint.activate([
|
||||
reportReasonViewController.view.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
reportReasonViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
reportReasonViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
reportReasonViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
reportReasonViewController.view.pinToParent()
|
||||
}
|
||||
|
||||
}
|
||||
@ -126,7 +121,7 @@ extension ReportViewController: ReportServerRulesViewControllerDelegate {
|
||||
return
|
||||
}
|
||||
|
||||
coordinator.present(
|
||||
_ = coordinator.present(
|
||||
scene: .reportStatus(viewModel: viewModel.reportStatusViewModel),
|
||||
from: self,
|
||||
transition: .show
|
||||
|
@ -57,12 +57,7 @@ extension ReportReasonViewController {
|
||||
addChild(hostingViewController)
|
||||
hostingViewController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(hostingViewController.view)
|
||||
NSLayoutConstraint.activate([
|
||||
hostingViewController.view.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
hostingViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
hostingViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
hostingViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
hostingViewController.view.pinToParent()
|
||||
|
||||
navigationActionView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(navigationActionView)
|
||||
|
@ -60,12 +60,7 @@ extension ReportResultViewController {
|
||||
addChild(hostingViewController)
|
||||
hostingViewController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(hostingViewController.view)
|
||||
NSLayoutConstraint.activate([
|
||||
hostingViewController.view.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
hostingViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
hostingViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
hostingViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
hostingViewController.view.pinToParent()
|
||||
|
||||
navigationActionView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(navigationActionView)
|
||||
|
@ -63,12 +63,7 @@ extension ReportServerRulesViewController {
|
||||
addChild(hostingViewController)
|
||||
hostingViewController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(hostingViewController.view)
|
||||
NSLayoutConstraint.activate([
|
||||
hostingViewController.view.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
hostingViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
hostingViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
hostingViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
hostingViewController.view.pinToParent()
|
||||
|
||||
navigationActionView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(navigationActionView)
|
||||
|
@ -80,12 +80,7 @@ extension ReportStatusViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -75,7 +75,7 @@ extension ReportStatusViewModel.State {
|
||||
|
||||
override func didEnter(from previousState: GKState?) {
|
||||
super.didEnter(from: previousState)
|
||||
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
||||
guard let viewModel else { return }
|
||||
|
||||
let maxID = viewModel.statusFetchedResultsController.statusIDs.last
|
||||
|
||||
|
@ -93,12 +93,7 @@ extension ReportSupplementaryViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -74,11 +74,8 @@ extension ReportCommentTableViewCell {
|
||||
|
||||
commentTextView.translatesAutoresizingMaskIntoConstraints = false
|
||||
commentTextViewShadowBackgroundContainer.addSubview(commentTextView)
|
||||
commentTextView.pinToParent()
|
||||
NSLayoutConstraint.activate([
|
||||
commentTextView.topAnchor.constraint(equalTo: commentTextViewShadowBackgroundContainer.topAnchor),
|
||||
commentTextView.leadingAnchor.constraint(equalTo: commentTextViewShadowBackgroundContainer.leadingAnchor),
|
||||
commentTextView.trailingAnchor.constraint(equalTo: commentTextViewShadowBackgroundContainer.trailingAnchor),
|
||||
commentTextView.bottomAnchor.constraint(equalTo: commentTextViewShadowBackgroundContainer.bottomAnchor),
|
||||
commentTextView.heightAnchor.constraint(greaterThanOrEqualToConstant: 100).priority(.defaultHigh),
|
||||
])
|
||||
}
|
||||
|
@ -103,12 +103,7 @@ extension ReportResultActionTableViewCell {
|
||||
|
||||
reportBannerLabel.translatesAutoresizingMaskIntoConstraints = false
|
||||
reportBannerShadowContainer.addSubview(reportBannerLabel)
|
||||
NSLayoutConstraint.activate([
|
||||
reportBannerLabel.topAnchor.constraint(equalTo: reportBannerShadowContainer.topAnchor),
|
||||
reportBannerLabel.leadingAnchor.constraint(equalTo: reportBannerShadowContainer.leadingAnchor),
|
||||
reportBannerLabel.trailingAnchor.constraint(equalTo: reportBannerShadowContainer.trailingAnchor),
|
||||
reportBannerLabel.bottomAnchor.constraint(equalTo: reportBannerShadowContainer.bottomAnchor),
|
||||
])
|
||||
reportBannerLabel.pinToParent()
|
||||
|
||||
}
|
||||
|
||||
|
@ -218,7 +218,7 @@ extension MainTabBarController {
|
||||
let alertController = UIAlertController(for: error, title: nil, preferredStyle: .alert)
|
||||
let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
|
||||
alertController.addAction(okAction)
|
||||
coordinator.present(
|
||||
_ = coordinator.present(
|
||||
scene: .alertController(alertController: alertController),
|
||||
from: nil,
|
||||
transition: .alertController(animated: true, completion: nil)
|
||||
@ -442,12 +442,7 @@ extension MainTabBarController {
|
||||
|
||||
composeButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
composeButttonShadowBackgroundContainer.addSubview(composeButton)
|
||||
NSLayoutConstraint.activate([
|
||||
composeButton.topAnchor.constraint(equalTo: composeButttonShadowBackgroundContainer.topAnchor),
|
||||
composeButton.leadingAnchor.constraint(equalTo: composeButttonShadowBackgroundContainer.leadingAnchor),
|
||||
composeButton.trailingAnchor.constraint(equalTo: composeButttonShadowBackgroundContainer.trailingAnchor),
|
||||
composeButton.bottomAnchor.constraint(equalTo: composeButttonShadowBackgroundContainer.bottomAnchor),
|
||||
])
|
||||
composeButton.pinToParent()
|
||||
composeButton.setContentHuggingPriority(.required - 1, for: .horizontal)
|
||||
composeButton.setContentHuggingPriority(.required - 1, for: .vertical)
|
||||
}
|
||||
|
@ -101,12 +101,7 @@ extension SidebarViewController {
|
||||
|
||||
collectionView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(collectionView)
|
||||
NSLayoutConstraint.activate([
|
||||
collectionView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
collectionView.pinToParent()
|
||||
|
||||
secondaryCollectionView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(secondaryCollectionView)
|
||||
|
@ -48,12 +48,7 @@ extension TrendCollectionViewCell {
|
||||
|
||||
trendView.translatesAutoresizingMaskIntoConstraints = false
|
||||
contentView.addSubview(trendView)
|
||||
NSLayoutConstraint.activate([
|
||||
trendView.topAnchor.constraint(equalTo: contentView.topAnchor),
|
||||
trendView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
|
||||
trendView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
|
||||
trendView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
|
||||
])
|
||||
trendView.pinToParent()
|
||||
}
|
||||
|
||||
override func updateConfiguration(using state: UICellConfigurationState) {
|
||||
|
@ -105,12 +105,7 @@ extension SearchViewController {
|
||||
addChild(discoveryViewController)
|
||||
discoveryViewController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(discoveryViewController.view)
|
||||
NSLayoutConstraint.activate([
|
||||
discoveryViewController.view.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
discoveryViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
discoveryViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
discoveryViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
discoveryViewController.view.pinToParent()
|
||||
|
||||
// discoveryViewController.view.isHidden = true
|
||||
|
||||
@ -151,12 +146,7 @@ extension SearchViewController {
|
||||
searchBar.delegate = self
|
||||
searchBar.translatesAutoresizingMaskIntoConstraints = false
|
||||
titleViewContainer.addSubview(searchBar)
|
||||
NSLayoutConstraint.activate([
|
||||
searchBar.topAnchor.constraint(equalTo: titleViewContainer.topAnchor),
|
||||
searchBar.leadingAnchor.constraint(equalTo: titleViewContainer.leadingAnchor),
|
||||
searchBar.trailingAnchor.constraint(equalTo: titleViewContainer.trailingAnchor),
|
||||
searchBar.bottomAnchor.constraint(equalTo: titleViewContainer.bottomAnchor),
|
||||
])
|
||||
searchBar.pinToParent()
|
||||
searchBar.setContentHuggingPriority(.required, for: .horizontal)
|
||||
searchBar.setContentHuggingPriority(.required, for: .vertical)
|
||||
navigationItem.titleView = titleViewContainer
|
||||
@ -174,7 +164,7 @@ extension SearchViewController {
|
||||
// FIXME:
|
||||
// use `.customPush(animated: false)` false to disable navigation bar animation for searchBar layout
|
||||
// but that should be a fade transition whe fixed size searchBar
|
||||
self.coordinator.present(scene: .searchDetail(viewModel: searchDetailViewModel), from: self, transition: .customPush(animated: false))
|
||||
_ = self.coordinator.present(scene: .searchDetail(viewModel: searchDetailViewModel), from: self, transition: .customPush(animated: false))
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
}
|
||||
|
@ -62,12 +62,7 @@ extension SearchRecommendCollectionHeader {
|
||||
containerStackView.isLayoutMarginsRelativeArrangement = true
|
||||
containerStackView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(containerStackView)
|
||||
NSLayoutConstraint.activate([
|
||||
containerStackView.topAnchor.constraint(equalTo: topAnchor),
|
||||
containerStackView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
containerStackView.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
containerStackView.trailingAnchor.constraint(equalTo: trailingAnchor)
|
||||
])
|
||||
containerStackView.pinToParent()
|
||||
|
||||
let horizontalStackView = UIStackView()
|
||||
horizontalStackView.spacing = 8
|
||||
|
@ -116,12 +116,7 @@ extension SearchDetailViewController {
|
||||
searchHistoryViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
} else {
|
||||
NSLayoutConstraint.activate([
|
||||
searchHistoryViewController.view.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
searchHistoryViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
searchHistoryViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
searchHistoryViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
searchHistoryViewController.view.pinToParent()
|
||||
}
|
||||
|
||||
transition = Transition(style: .fade, duration: 0.1)
|
||||
@ -289,12 +284,7 @@ extension SearchDetailViewController {
|
||||
|
||||
navigationBarVisualEffectBackgroundView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.insertSubview(navigationBarVisualEffectBackgroundView, belowSubview: navigationBarBackgroundView)
|
||||
NSLayoutConstraint.activate([
|
||||
navigationBarVisualEffectBackgroundView.topAnchor.constraint(equalTo: navigationBarBackgroundView.topAnchor),
|
||||
navigationBarVisualEffectBackgroundView.leadingAnchor.constraint(equalTo: navigationBarBackgroundView.leadingAnchor),
|
||||
navigationBarVisualEffectBackgroundView.trailingAnchor.constraint(equalTo: navigationBarBackgroundView.trailingAnchor),
|
||||
navigationBarVisualEffectBackgroundView.bottomAnchor.constraint(equalTo: navigationBarBackgroundView.bottomAnchor),
|
||||
])
|
||||
navigationBarVisualEffectBackgroundView.pinTo(to: navigationBarBackgroundView)
|
||||
} else {
|
||||
navigationItem.setHidesBackButton(true, animated: false)
|
||||
navigationItem.titleView = nil
|
||||
|
@ -47,12 +47,7 @@ extension SearchHistoryViewController {
|
||||
|
||||
collectionView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(collectionView)
|
||||
NSLayoutConstraint.activate([
|
||||
collectionView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
collectionView.pinToParent()
|
||||
|
||||
collectionView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -49,12 +49,7 @@ extension SearchResultViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
// tableView.prefetchDataSource = self
|
||||
|
@ -101,12 +101,7 @@ extension SettingsAppearanceTableViewCell {
|
||||
|
||||
stackView.translatesAutoresizingMaskIntoConstraints = false
|
||||
contentView.addSubview(stackView)
|
||||
NSLayoutConstraint.activate([
|
||||
stackView.topAnchor.constraint(equalTo: contentView.topAnchor),
|
||||
stackView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
|
||||
stackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
|
||||
stackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
|
||||
])
|
||||
stackView.pinToParent()
|
||||
|
||||
stackView.addArrangedSubview(systemAppearanceView)
|
||||
stackView.addArrangedSubview(darkAppearanceView)
|
||||
|
@ -225,12 +225,7 @@ extension SettingsViewController {
|
||||
|
||||
setupNavigation()
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
setupTableView()
|
||||
|
||||
updateSectionHeaderStackViewLayout()
|
||||
@ -401,7 +396,7 @@ extension SettingsViewController: UITableViewDelegate {
|
||||
)
|
||||
let okAction = UIAlertAction(title: L10n.Common.Controls.Actions.ok, style: .default, handler: nil)
|
||||
alertController.addAction(okAction)
|
||||
self.coordinator.present(scene: .alertController(alertController: alertController), from: nil, transition: .alertController(animated: true, completion: nil))
|
||||
_ = self.coordinator.present(scene: .alertController(alertController: alertController), from: nil, transition: .alertController(animated: true, completion: nil))
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
case .signOut:
|
||||
@ -549,7 +544,7 @@ extension SettingsViewController: MetaLabelDelegate {
|
||||
switch meta {
|
||||
case .url(_, _, let url, _):
|
||||
guard let url = URL(string: url) else { return }
|
||||
coordinator.present(scene: .safari(url: url), from: self, transition: .safariPresent(animated: true, completion: nil))
|
||||
_ = coordinator.present(scene: .safari(url: url), from: self, transition: .safariPresent(animated: true, completion: nil))
|
||||
default:
|
||||
assertionFailure()
|
||||
}
|
||||
|
@ -85,12 +85,7 @@ extension AppearanceView {
|
||||
private func setupUI() {
|
||||
imageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
imageViewShadowBackgroundContainer.addSubview(imageView)
|
||||
NSLayoutConstraint.activate([
|
||||
imageView.topAnchor.constraint(equalTo: imageViewShadowBackgroundContainer.topAnchor),
|
||||
imageView.leadingAnchor.constraint(equalTo: imageViewShadowBackgroundContainer.leadingAnchor),
|
||||
imageView.trailingAnchor.constraint(equalTo: imageViewShadowBackgroundContainer.trailingAnchor),
|
||||
imageView.bottomAnchor.constraint(equalTo: imageViewShadowBackgroundContainer.bottomAnchor),
|
||||
])
|
||||
imageView.pinToParent()
|
||||
imageViewShadowBackgroundContainer.cornerRadius = 4
|
||||
|
||||
stackView.addArrangedSubview(imageViewShadowBackgroundContainer)
|
||||
@ -100,11 +95,8 @@ extension AppearanceView {
|
||||
addSubview(stackView)
|
||||
translatesAutoresizingMaskIntoConstraints = false
|
||||
stackView.translatesAutoresizingMaskIntoConstraints = false
|
||||
stackView.pinToParent()
|
||||
NSLayoutConstraint.activate([
|
||||
stackView.topAnchor.constraint(equalTo: self.topAnchor),
|
||||
stackView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
|
||||
stackView.bottomAnchor.constraint(equalTo: self.bottomAnchor),
|
||||
stackView.trailingAnchor.constraint(equalTo: self.trailingAnchor),
|
||||
imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor, multiplier: 121.0 / 100.0), // height / width
|
||||
])
|
||||
}
|
||||
|
@ -31,12 +31,7 @@ extension ContextMenuImagePreviewViewController {
|
||||
|
||||
imageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(imageView)
|
||||
NSLayoutConstraint.activate([
|
||||
imageView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
imageView.pinToParent()
|
||||
|
||||
imageView.image = viewModel.thumbnail
|
||||
|
||||
|
@ -93,12 +93,7 @@ extension ContentWarningOverlayView {
|
||||
|
||||
vibrancyVisualEffectView.translatesAutoresizingMaskIntoConstraints = false
|
||||
blurVisualEffectView.contentView.addSubview(vibrancyVisualEffectView)
|
||||
NSLayoutConstraint.activate([
|
||||
vibrancyVisualEffectView.topAnchor.constraint(equalTo: blurVisualEffectView.topAnchor),
|
||||
vibrancyVisualEffectView.leadingAnchor.constraint(equalTo: blurVisualEffectView.leadingAnchor),
|
||||
vibrancyVisualEffectView.trailingAnchor.constraint(equalTo: blurVisualEffectView.trailingAnchor),
|
||||
vibrancyVisualEffectView.bottomAnchor.constraint(equalTo: blurVisualEffectView.bottomAnchor),
|
||||
])
|
||||
vibrancyVisualEffectView.pinTo(to: blurVisualEffectView)
|
||||
|
||||
vibrancyContentWarningLabel.translatesAutoresizingMaskIntoConstraints = false
|
||||
vibrancyVisualEffectView.contentView.addSubview(vibrancyContentWarningLabel)
|
||||
@ -110,12 +105,7 @@ extension ContentWarningOverlayView {
|
||||
|
||||
blurVisualEffectView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(blurVisualEffectView)
|
||||
NSLayoutConstraint.activate([
|
||||
blurVisualEffectView.topAnchor.constraint(equalTo: topAnchor),
|
||||
blurVisualEffectView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
blurVisualEffectView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
blurVisualEffectView.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
blurVisualEffectView.pinToParent()
|
||||
|
||||
// blur image style
|
||||
contentOverlayView.translatesAutoresizingMaskIntoConstraints = false
|
||||
@ -134,12 +124,7 @@ extension ContentWarningOverlayView {
|
||||
|
||||
blurContentWarningLabelContainer.translatesAutoresizingMaskIntoConstraints = false
|
||||
contentOverlayView.addSubview(blurContentWarningLabelContainer)
|
||||
NSLayoutConstraint.activate([
|
||||
blurContentWarningLabelContainer.topAnchor.constraint(equalTo: topAnchor),
|
||||
blurContentWarningLabelContainer.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
blurContentWarningLabelContainer.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
blurContentWarningLabelContainer.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
blurContentWarningLabelContainer.pinTo(to: self)
|
||||
|
||||
let topPaddingView = UIView()
|
||||
let bottomPaddingView = UIView()
|
||||
|
@ -47,12 +47,7 @@ extension DoubleTitleLabelNavigationBarTitleView {
|
||||
containerView.distribution = .fill
|
||||
containerView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(containerView)
|
||||
NSLayoutConstraint.activate([
|
||||
containerView.topAnchor.constraint(equalTo: topAnchor),
|
||||
containerView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
containerView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
containerView.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
containerView.pinToParent()
|
||||
|
||||
containerView.addArrangedSubview(titleLabel)
|
||||
containerView.addArrangedSubview(subtitleLabel)
|
||||
|
@ -49,12 +49,7 @@ extension WebViewController {
|
||||
|
||||
webView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(webView)
|
||||
NSLayoutConstraint.activate([
|
||||
webView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
webView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
webView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
webView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
webView.pinToParent()
|
||||
|
||||
let request = URLRequest(url: viewModel.url)
|
||||
webView.load(request)
|
||||
|
@ -53,11 +53,6 @@ extension SuggestionAccountCollectionViewCell {
|
||||
private func configure() {
|
||||
contentView.addSubview(imageView)
|
||||
imageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
NSLayoutConstraint.activate([
|
||||
imageView.topAnchor.constraint(equalTo: contentView.topAnchor),
|
||||
imageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
|
||||
imageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
|
||||
imageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
|
||||
])
|
||||
imageView.pinToParent()
|
||||
}
|
||||
}
|
||||
|
@ -161,7 +161,7 @@ extension SuggestionAccountViewController: UITableViewDelegate {
|
||||
case .account(let record):
|
||||
guard let account = record.object(in: context.managedObjectContext) else { return }
|
||||
let cachedProfileViewModel = CachedProfileViewModel(context: context, authContext: viewModel.authContext, mastodonUser: account)
|
||||
coordinator.present(
|
||||
_ = coordinator.present(
|
||||
scene: .profile(viewModel: cachedProfileViewModel),
|
||||
from: self,
|
||||
transition: .show
|
||||
|
@ -97,12 +97,7 @@ extension SuggestionAccountTableViewCell {
|
||||
containerStackView.isLayoutMarginsRelativeArrangement = true
|
||||
containerStackView.translatesAutoresizingMaskIntoConstraints = false
|
||||
contentView.addSubview(containerStackView)
|
||||
NSLayoutConstraint.activate([
|
||||
containerStackView.topAnchor.constraint(equalTo: contentView.topAnchor),
|
||||
containerStackView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
|
||||
containerStackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
|
||||
containerStackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
|
||||
])
|
||||
containerStackView.pinToParent()
|
||||
|
||||
avatarButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
containerStackView.addArrangedSubview(avatarButton)
|
||||
|
@ -87,12 +87,7 @@ extension ThreadViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(
|
||||
|
@ -263,7 +263,7 @@ extension MediaHostToMediaPreviewViewControllerAnimatedTransitioning {
|
||||
}()
|
||||
|
||||
// FIXME:
|
||||
let maskLayerToFinalPath = maskLayerToFinalRect.flatMap { UIBezierPath(rect: $0) }?.cgPath
|
||||
_ = maskLayerToFinalRect.flatMap { UIBezierPath(rect: $0) }?.cgPath
|
||||
|
||||
if let maskLayerToPath = maskLayerToPath {
|
||||
maskLayer.path = maskLayerToPath
|
||||
|
@ -46,3 +46,20 @@ extension UIView {
|
||||
return self
|
||||
}
|
||||
}
|
||||
|
||||
public extension UIView {
|
||||
|
||||
func pinToParent() {
|
||||
pinTo(to: self.superview)
|
||||
}
|
||||
|
||||
func pinTo(to view: UIView?) {
|
||||
guard let pinToView = view else { return }
|
||||
NSLayoutConstraint.activate([
|
||||
topAnchor.constraint(equalTo: pinToView.topAnchor),
|
||||
leadingAnchor.constraint(equalTo: pinToView.leadingAnchor),
|
||||
trailingAnchor.constraint(equalTo: pinToView.trailingAnchor),
|
||||
bottomAnchor.constraint(equalTo: pinToView.bottomAnchor),
|
||||
])
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ extension AttachmentViewModel {
|
||||
let exporter = NextLevelSessionExporter(withAsset: urlAsset)
|
||||
exporter.outputFileType = .mp4
|
||||
|
||||
var isLandscape: Bool = {
|
||||
let isLandscape: Bool = {
|
||||
guard let track = urlAsset.tracks(withMediaType: .video).first else {
|
||||
return true
|
||||
}
|
||||
|
@ -80,12 +80,7 @@ extension AutoCompleteViewController {
|
||||
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
containerBackgroundView.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: containerBackgroundView.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: containerBackgroundView.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: containerBackgroundView.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: containerBackgroundView.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDiffableDataSource(tableView: tableView)
|
||||
|
@ -65,12 +65,7 @@ extension AutoCompleteTopChevronView {
|
||||
|
||||
shadowView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(shadowView)
|
||||
NSLayoutConstraint.activate([
|
||||
shadowView.topAnchor.constraint(equalTo: topAnchor),
|
||||
shadowView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
shadowView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
shadowView.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
shadowView.pinToParent()
|
||||
|
||||
shadowLayer.fillColor = topViewBackgroundColor.cgColor
|
||||
shadowView.layer.addSublayer(shadowLayer)
|
||||
|
@ -108,12 +108,7 @@ extension ComposeContentViewController {
|
||||
// setup tableView
|
||||
tableView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(tableView)
|
||||
NSLayoutConstraint.activate([
|
||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
tableView.pinToParent()
|
||||
|
||||
tableView.delegate = self
|
||||
viewModel.setupDataSource(tableView: tableView)
|
||||
|
@ -44,12 +44,7 @@ extension CustomEmojiPickerInputView {
|
||||
|
||||
collectionView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(collectionView)
|
||||
NSLayoutConstraint.activate([
|
||||
collectionView.topAnchor.constraint(equalTo: topAnchor),
|
||||
collectionView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
collectionView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
collectionView.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
collectionView.pinToParent()
|
||||
|
||||
activityIndicatorView.hidesWhenStopped = true
|
||||
activityIndicatorView.startAnimating()
|
||||
|
@ -46,12 +46,7 @@ extension CustomEmojiPickerItemCollectionViewCell {
|
||||
private func _init() {
|
||||
emojiImageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
contentView.addSubview(emojiImageView)
|
||||
NSLayoutConstraint.activate([
|
||||
emojiImageView.topAnchor.constraint(equalTo: contentView.topAnchor),
|
||||
emojiImageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
|
||||
emojiImageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
|
||||
emojiImageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
|
||||
])
|
||||
emojiImageView.pinToParent()
|
||||
|
||||
isAccessibilityElement = true
|
||||
accessibilityTraits = .button
|
||||
|
@ -37,12 +37,7 @@ final public class FLAnimatedImageViewProxy: UIView {
|
||||
|
||||
imageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(imageView)
|
||||
NSLayoutConstraint.activate([
|
||||
imageView.topAnchor.constraint(equalTo: topAnchor),
|
||||
imageView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
imageView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
imageView.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
imageView.pinToParent()
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
|
@ -32,12 +32,7 @@ open class AvatarButton: UIControl {
|
||||
avatarImageView.frame = bounds
|
||||
avatarImageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(avatarImageView)
|
||||
NSLayoutConstraint.activate([
|
||||
avatarImageView.topAnchor.constraint(equalTo: topAnchor),
|
||||
avatarImageView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
avatarImageView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
avatarImageView.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
avatarImageView.pinToParent()
|
||||
|
||||
isAccessibilityElement = true
|
||||
accessibilityLabel = L10n.Common.Controls.Status.showUserProfile
|
||||
|
@ -136,12 +136,7 @@ extension MediaGridContainerView {
|
||||
private func layoutContentWarningOverlay() {
|
||||
contentWarningOverlay.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(contentWarningOverlay)
|
||||
NSLayoutConstraint.activate([
|
||||
contentWarningOverlay.topAnchor.constraint(equalTo: topAnchor),
|
||||
contentWarningOverlay.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
contentWarningOverlay.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
contentWarningOverlay.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
contentWarningOverlay.pinToParent()
|
||||
}
|
||||
}
|
||||
|
||||
@ -208,12 +203,7 @@ extension MediaGridContainerView {
|
||||
let containerVerticalStackView = createStackView(axis: .vertical)
|
||||
containerVerticalStackView.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(containerVerticalStackView)
|
||||
NSLayoutConstraint.activate([
|
||||
containerVerticalStackView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
containerVerticalStackView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
containerVerticalStackView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
containerVerticalStackView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
containerVerticalStackView.pinToParent()
|
||||
|
||||
let count = mediaViews.count
|
||||
switch count {
|
||||
|
@ -45,12 +45,7 @@ extension FamiliarFollowersDashboardView {
|
||||
|
||||
stackView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(stackView)
|
||||
NSLayoutConstraint.activate([
|
||||
stackView.topAnchor.constraint(equalTo: topAnchor),
|
||||
stackView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
stackView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
stackView.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
stackView.pinToParent()
|
||||
|
||||
avatarContainerView.translatesAutoresizingMaskIntoConstraints = false
|
||||
stackView.addArrangedSubview(avatarContainerView)
|
||||
|
@ -138,12 +138,7 @@ extension MediaView {
|
||||
private func layoutImage() {
|
||||
imageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
container.addSubview(imageView)
|
||||
NSLayoutConstraint.activate([
|
||||
imageView.topAnchor.constraint(equalTo: container.topAnchor),
|
||||
imageView.leadingAnchor.constraint(equalTo: container.leadingAnchor),
|
||||
imageView.trailingAnchor.constraint(equalTo: container.trailingAnchor),
|
||||
imageView.bottomAnchor.constraint(equalTo: container.bottomAnchor),
|
||||
])
|
||||
imageView.pinToParent()
|
||||
}
|
||||
|
||||
private func bindImage(configuration: Configuration, info: Configuration.ImageInfo) {
|
||||
@ -168,12 +163,7 @@ extension MediaView {
|
||||
// use view controller as View here
|
||||
playerViewController.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
container.addSubview(playerViewController.view)
|
||||
NSLayoutConstraint.activate([
|
||||
playerViewController.view.topAnchor.constraint(equalTo: container.topAnchor),
|
||||
playerViewController.view.leadingAnchor.constraint(equalTo: container.leadingAnchor),
|
||||
playerViewController.view.trailingAnchor.constraint(equalTo: container.trailingAnchor),
|
||||
playerViewController.view.bottomAnchor.constraint(equalTo: container.bottomAnchor),
|
||||
])
|
||||
playerViewController.view.pinToParent()
|
||||
|
||||
setupIndicatorViewHierarchy()
|
||||
playerIndicatorLabel.attributedText = NSAttributedString(string: "GIF")
|
||||
@ -213,12 +203,7 @@ extension MediaView {
|
||||
private func layoutBlurhash() {
|
||||
blurhashImageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
container.addSubview(blurhashImageView)
|
||||
NSLayoutConstraint.activate([
|
||||
blurhashImageView.topAnchor.constraint(equalTo: container.topAnchor),
|
||||
blurhashImageView.leadingAnchor.constraint(equalTo: container.leadingAnchor),
|
||||
blurhashImageView.trailingAnchor.constraint(equalTo: container.trailingAnchor),
|
||||
blurhashImageView.bottomAnchor.constraint(equalTo: container.bottomAnchor),
|
||||
])
|
||||
blurhashImageView.pinToParent()
|
||||
}
|
||||
|
||||
private func bindBlurhash(configuration: Configuration) {
|
||||
@ -304,12 +289,7 @@ extension MediaView {
|
||||
guard container.superview == nil else { return }
|
||||
container.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(container)
|
||||
NSLayoutConstraint.activate([
|
||||
container.topAnchor.constraint(equalTo: topAnchor),
|
||||
container.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
container.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
container.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
container.pinToParent()
|
||||
}
|
||||
|
||||
private func setupIndicatorViewHierarchy() {
|
||||
@ -329,12 +309,7 @@ extension MediaView {
|
||||
if vibrancyEffectView.superview == nil {
|
||||
vibrancyEffectView.translatesAutoresizingMaskIntoConstraints = false
|
||||
blurEffectView.contentView.addSubview(vibrancyEffectView)
|
||||
NSLayoutConstraint.activate([
|
||||
vibrancyEffectView.topAnchor.constraint(equalTo: blurEffectView.contentView.topAnchor),
|
||||
vibrancyEffectView.leadingAnchor.constraint(equalTo: blurEffectView.contentView.leadingAnchor),
|
||||
vibrancyEffectView.trailingAnchor.constraint(equalTo: blurEffectView.contentView.trailingAnchor),
|
||||
vibrancyEffectView.bottomAnchor.constraint(equalTo: blurEffectView.contentView.bottomAnchor),
|
||||
])
|
||||
vibrancyEffectView.pinToParent()
|
||||
}
|
||||
|
||||
if playerIndicatorLabel.superview == nil {
|
||||
|
@ -79,12 +79,7 @@ extension NewsView {
|
||||
container.spacing = 8
|
||||
container.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(container)
|
||||
NSLayoutConstraint.activate([
|
||||
container.topAnchor.constraint(equalTo: topAnchor),
|
||||
container.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
container.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
container.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
container.pinToParent()
|
||||
|
||||
// textContainer: V - [ providerContainer | headlineLabel | (spacer) | footnoteLabel ]
|
||||
let textContainer = UIStackView()
|
||||
|
@ -105,7 +105,6 @@ extension NotificationView.ViewModel {
|
||||
timestampUpdatePublisher.prepend(Date()).eraseToAnyPublisher()
|
||||
)
|
||||
.sink { [weak self] timestamp, _ in
|
||||
guard let self = self else { return }
|
||||
guard let timestamp = timestamp else {
|
||||
notificationView.dateLabel.configure(content: PlaintextMetaContent(string: ""))
|
||||
return
|
||||
|
@ -292,21 +292,11 @@ extension NotificationView {
|
||||
|
||||
acceptFollowRequestButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
acceptFollowRequestButtonShadowBackgroundContainer.addSubview(acceptFollowRequestButton)
|
||||
NSLayoutConstraint.activate([
|
||||
acceptFollowRequestButton.topAnchor.constraint(equalTo: acceptFollowRequestButtonShadowBackgroundContainer.topAnchor),
|
||||
acceptFollowRequestButton.leadingAnchor.constraint(equalTo: acceptFollowRequestButtonShadowBackgroundContainer.leadingAnchor),
|
||||
acceptFollowRequestButton.trailingAnchor.constraint(equalTo: acceptFollowRequestButtonShadowBackgroundContainer.trailingAnchor),
|
||||
acceptFollowRequestButton.bottomAnchor.constraint(equalTo: acceptFollowRequestButtonShadowBackgroundContainer.bottomAnchor),
|
||||
])
|
||||
acceptFollowRequestButton.pinToParent()
|
||||
|
||||
rejectFollowRequestButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
rejectFollowRequestButtonShadowBackgroundContainer.addSubview(rejectFollowRequestButton)
|
||||
NSLayoutConstraint.activate([
|
||||
rejectFollowRequestButton.topAnchor.constraint(equalTo: rejectFollowRequestButtonShadowBackgroundContainer.topAnchor),
|
||||
rejectFollowRequestButton.leadingAnchor.constraint(equalTo: rejectFollowRequestButtonShadowBackgroundContainer.leadingAnchor),
|
||||
rejectFollowRequestButton.trailingAnchor.constraint(equalTo: rejectFollowRequestButtonShadowBackgroundContainer.trailingAnchor),
|
||||
rejectFollowRequestButton.bottomAnchor.constraint(equalTo: rejectFollowRequestButtonShadowBackgroundContainer.bottomAnchor),
|
||||
])
|
||||
rejectFollowRequestButton.pinToParent()
|
||||
|
||||
followRequestContainerView.axis = .horizontal
|
||||
followRequestContainerView.distribution = .fillEqually
|
||||
|
@ -110,12 +110,7 @@ extension PollOptionView {
|
||||
|
||||
voteProgressStripView.translatesAutoresizingMaskIntoConstraints = false
|
||||
roundedBackgroundView.addSubview(voteProgressStripView)
|
||||
NSLayoutConstraint.activate([
|
||||
voteProgressStripView.topAnchor.constraint(equalTo: roundedBackgroundView.topAnchor),
|
||||
voteProgressStripView.leadingAnchor.constraint(equalTo: roundedBackgroundView.leadingAnchor),
|
||||
voteProgressStripView.trailingAnchor.constraint(equalTo: roundedBackgroundView.trailingAnchor),
|
||||
voteProgressStripView.bottomAnchor.constraint(equalTo: roundedBackgroundView.bottomAnchor),
|
||||
])
|
||||
voteProgressStripView.pinToParent()
|
||||
|
||||
checkmarkBackgroundView.translatesAutoresizingMaskIntoConstraints = false
|
||||
roundedBackgroundView.addSubview(checkmarkBackgroundView)
|
||||
@ -138,12 +133,7 @@ extension PollOptionView {
|
||||
|
||||
plusCircleImageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(plusCircleImageView)
|
||||
NSLayoutConstraint.activate([
|
||||
plusCircleImageView.topAnchor.constraint(equalTo: checkmarkBackgroundView.topAnchor),
|
||||
plusCircleImageView.leadingAnchor.constraint(equalTo: checkmarkBackgroundView.leadingAnchor),
|
||||
plusCircleImageView.trailingAnchor.constraint(equalTo: checkmarkBackgroundView.trailingAnchor),
|
||||
plusCircleImageView.bottomAnchor.constraint(equalTo: checkmarkBackgroundView.bottomAnchor),
|
||||
])
|
||||
plusCircleImageView.pinTo(to: checkmarkBackgroundView)
|
||||
|
||||
optionTextField.translatesAutoresizingMaskIntoConstraints = false
|
||||
roundedBackgroundView.addSubview(optionTextField)
|
||||
|
@ -137,12 +137,7 @@ extension ProfileCardView {
|
||||
container.spacing = 8
|
||||
container.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(container)
|
||||
NSLayoutConstraint.activate([
|
||||
container.topAnchor.constraint(equalTo: topAnchor),
|
||||
container.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
container.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
container.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
container.pinToParent()
|
||||
|
||||
// bannerContainer
|
||||
let bannerContainer = UIView()
|
||||
@ -237,11 +232,8 @@ extension ProfileCardView {
|
||||
|
||||
relationshipActionButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
relationshipActionButtonShadowContainer.addSubview(relationshipActionButton)
|
||||
relationshipActionButton.pinToParent()
|
||||
NSLayoutConstraint.activate([
|
||||
relationshipActionButton.topAnchor.constraint(equalTo: relationshipActionButtonShadowContainer.topAnchor),
|
||||
relationshipActionButton.leadingAnchor.constraint(equalTo: relationshipActionButtonShadowContainer.leadingAnchor),
|
||||
relationshipActionButton.trailingAnchor.constraint(equalTo: relationshipActionButtonShadowContainer.trailingAnchor),
|
||||
relationshipActionButton.bottomAnchor.constraint(equalTo: relationshipActionButtonShadowContainer.bottomAnchor),
|
||||
relationshipActionButtonShadowContainer.widthAnchor.constraint(greaterThanOrEqualToConstant: ProfileCardView.friendshipActionButtonSize.width).priority(.required - 1),
|
||||
relationshipActionButtonShadowContainer.heightAnchor.constraint(equalToConstant: ProfileCardView.friendshipActionButtonSize.height).priority(.required - 1),
|
||||
])
|
||||
|
@ -236,12 +236,7 @@ extension StatusView {
|
||||
// container
|
||||
containerStackView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(containerStackView)
|
||||
NSLayoutConstraint.activate([
|
||||
containerStackView.topAnchor.constraint(equalTo: topAnchor),
|
||||
containerStackView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
containerStackView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
containerStackView.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
containerStackView.pinToParent()
|
||||
|
||||
// header
|
||||
headerIconImageView.isUserInteractionEnabled = false
|
||||
@ -392,12 +387,7 @@ extension StatusView.Style {
|
||||
|
||||
statusView.spoilerOverlayView.translatesAutoresizingMaskIntoConstraints = false
|
||||
statusView.containerStackView.addSubview(statusView.spoilerOverlayView)
|
||||
NSLayoutConstraint.activate([
|
||||
statusView.contentContainer.topAnchor.constraint(equalTo: statusView.spoilerOverlayView.topAnchor),
|
||||
statusView.contentContainer.leadingAnchor.constraint(equalTo: statusView.spoilerOverlayView.leadingAnchor),
|
||||
statusView.contentContainer.trailingAnchor.constraint(equalTo: statusView.spoilerOverlayView.trailingAnchor),
|
||||
statusView.contentContainer.bottomAnchor.constraint(equalTo: statusView.spoilerOverlayView.bottomAnchor),
|
||||
])
|
||||
statusView.contentContainer.pinTo(to: statusView.spoilerOverlayView)
|
||||
|
||||
// media container: V - [ mediaGridContainerView ]
|
||||
statusView.mediaContainerView.translatesAutoresizingMaskIntoConstraints = false
|
||||
@ -409,12 +399,7 @@ extension StatusView.Style {
|
||||
|
||||
statusView.mediaGridContainerView.translatesAutoresizingMaskIntoConstraints = false
|
||||
statusView.mediaContainerView.addSubview(statusView.mediaGridContainerView)
|
||||
NSLayoutConstraint.activate([
|
||||
statusView.mediaGridContainerView.topAnchor.constraint(equalTo: statusView.mediaContainerView.topAnchor),
|
||||
statusView.mediaGridContainerView.leadingAnchor.constraint(equalTo: statusView.mediaContainerView.leadingAnchor),
|
||||
statusView.mediaGridContainerView.trailingAnchor.constraint(equalTo: statusView.mediaContainerView.trailingAnchor),
|
||||
statusView.mediaGridContainerView.bottomAnchor.constraint(equalTo: statusView.mediaContainerView.bottomAnchor),
|
||||
])
|
||||
statusView.mediaGridContainerView.pinToParent()
|
||||
|
||||
// pollContainerView: V - [ pollTableView | pollStatusStackView ]
|
||||
statusView.pollAdaptiveMarginContainerView.contentView = statusView.pollContainerView
|
||||
|
@ -66,12 +66,7 @@ extension UserView {
|
||||
// container
|
||||
containerStackView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(containerStackView)
|
||||
NSLayoutConstraint.activate([
|
||||
containerStackView.topAnchor.constraint(equalTo: topAnchor),
|
||||
containerStackView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
containerStackView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
containerStackView.bottomAnchor.constraint(equalTo: bottomAnchor)
|
||||
])
|
||||
containerStackView.pinToParent()
|
||||
|
||||
avatarButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
containerStackView.addArrangedSubview(avatarButton)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user