feat: add a11y for server category picker
This commit is contained in:
parent
8409331dd8
commit
b63ae6800b
|
@ -138,7 +138,20 @@
|
||||||
"title": "Pick a Server,\nany server.",
|
"title": "Pick a Server,\nany server.",
|
||||||
"button": {
|
"button": {
|
||||||
"category": {
|
"category": {
|
||||||
"All": "All"
|
"all": "All",
|
||||||
|
"all_accessiblity_description": "Category: All",
|
||||||
|
"academia": "academia",
|
||||||
|
"activism": "activism",
|
||||||
|
"food": "food",
|
||||||
|
"furry": "furry",
|
||||||
|
"games": "games",
|
||||||
|
"general": "general",
|
||||||
|
"journalism": "journalism",
|
||||||
|
"lgbt": "lgbt",
|
||||||
|
"regional": "regional",
|
||||||
|
"art": "art",
|
||||||
|
"music": "music",
|
||||||
|
"tech": "tech"
|
||||||
},
|
},
|
||||||
"see_less": "See Less",
|
"see_less": "See Less",
|
||||||
"see_more": "See More"
|
"see_more": "See More"
|
||||||
|
@ -423,4 +436,4 @@
|
||||||
"text_placeholder": "Type or paste additional comments"
|
"text_placeholder": "Type or paste additional comments"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -12,7 +12,7 @@
|
||||||
<key>CoreDataStack.xcscheme_^#shared#^_</key>
|
<key>CoreDataStack.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>15</integer>
|
<integer>14</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Mastodon - RTL.xcscheme_^#shared#^_</key>
|
<key>Mastodon - RTL.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
<key>NotificationService.xcscheme_^#shared#^_</key>
|
<key>NotificationService.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>14</integer>
|
<integer>15</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SuppressBuildableAutocreation</key>
|
<key>SuppressBuildableAutocreation</key>
|
||||||
|
|
|
@ -50,6 +50,42 @@ extension CategoryPickerItem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var accessibilityDescription: String {
|
||||||
|
switch self {
|
||||||
|
case .all:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.allAccessiblityDescription
|
||||||
|
case .category(let category):
|
||||||
|
switch category.category {
|
||||||
|
case .academia:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.academia
|
||||||
|
case .activism:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.activism
|
||||||
|
case .food:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.food
|
||||||
|
case .furry:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.furry
|
||||||
|
case .games:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.games
|
||||||
|
case .general:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.general
|
||||||
|
case .journalism:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.journalism
|
||||||
|
case .lgbt:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.lgbt
|
||||||
|
case .regional:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.regional
|
||||||
|
case .art:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.art
|
||||||
|
case .music:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.music
|
||||||
|
case .tech:
|
||||||
|
return L10n.Scene.ServerPicker.Button.Category.tech
|
||||||
|
case ._other:
|
||||||
|
return "❓" // FIXME:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension CategoryPickerItem: Equatable {
|
extension CategoryPickerItem: Equatable {
|
||||||
|
|
|
@ -42,6 +42,10 @@ extension CategoryPickerSection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.store(in: &cell.observations)
|
.store(in: &cell.observations)
|
||||||
|
|
||||||
|
cell.isAccessibilityElement = true
|
||||||
|
cell.accessibilityLabel = item.accessibilityDescription
|
||||||
|
|
||||||
return cell
|
return cell
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -638,8 +638,34 @@ internal enum L10n {
|
||||||
/// See More
|
/// See More
|
||||||
internal static let seeMore = L10n.tr("Localizable", "Scene.ServerPicker.Button.SeeMore")
|
internal static let seeMore = L10n.tr("Localizable", "Scene.ServerPicker.Button.SeeMore")
|
||||||
internal enum Category {
|
internal enum Category {
|
||||||
|
/// academia
|
||||||
|
internal static let academia = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Academia")
|
||||||
|
/// activism
|
||||||
|
internal static let activism = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Activism")
|
||||||
/// All
|
/// All
|
||||||
internal static let all = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.All")
|
internal static let all = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.All")
|
||||||
|
/// Category: All
|
||||||
|
internal static let allAccessiblityDescription = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.AllAccessiblityDescription")
|
||||||
|
/// art
|
||||||
|
internal static let art = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Art")
|
||||||
|
/// food
|
||||||
|
internal static let food = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Food")
|
||||||
|
/// furry
|
||||||
|
internal static let furry = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Furry")
|
||||||
|
/// games
|
||||||
|
internal static let games = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Games")
|
||||||
|
/// general
|
||||||
|
internal static let general = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.General")
|
||||||
|
/// journalism
|
||||||
|
internal static let journalism = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Journalism")
|
||||||
|
/// lgbt
|
||||||
|
internal static let lgbt = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Lgbt")
|
||||||
|
/// music
|
||||||
|
internal static let music = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Music")
|
||||||
|
/// regional
|
||||||
|
internal static let regional = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Regional")
|
||||||
|
/// tech
|
||||||
|
internal static let tech = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Tech")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
internal enum EmptyState {
|
internal enum EmptyState {
|
||||||
|
|
|
@ -204,7 +204,20 @@ tap the link to confirm your account.";
|
||||||
"Scene.Search.Searching.Segment.All" = "All";
|
"Scene.Search.Searching.Segment.All" = "All";
|
||||||
"Scene.Search.Searching.Segment.Hashtags" = "Hashtags";
|
"Scene.Search.Searching.Segment.Hashtags" = "Hashtags";
|
||||||
"Scene.Search.Searching.Segment.People" = "People";
|
"Scene.Search.Searching.Segment.People" = "People";
|
||||||
|
"Scene.ServerPicker.Button.Category.Academia" = "academia";
|
||||||
|
"Scene.ServerPicker.Button.Category.Activism" = "activism";
|
||||||
"Scene.ServerPicker.Button.Category.All" = "All";
|
"Scene.ServerPicker.Button.Category.All" = "All";
|
||||||
|
"Scene.ServerPicker.Button.Category.AllAccessiblityDescription" = "Category: All";
|
||||||
|
"Scene.ServerPicker.Button.Category.Art" = "art";
|
||||||
|
"Scene.ServerPicker.Button.Category.Food" = "food";
|
||||||
|
"Scene.ServerPicker.Button.Category.Furry" = "furry";
|
||||||
|
"Scene.ServerPicker.Button.Category.Games" = "games";
|
||||||
|
"Scene.ServerPicker.Button.Category.General" = "general";
|
||||||
|
"Scene.ServerPicker.Button.Category.Journalism" = "journalism";
|
||||||
|
"Scene.ServerPicker.Button.Category.Lgbt" = "lgbt";
|
||||||
|
"Scene.ServerPicker.Button.Category.Music" = "music";
|
||||||
|
"Scene.ServerPicker.Button.Category.Regional" = "regional";
|
||||||
|
"Scene.ServerPicker.Button.Category.Tech" = "tech";
|
||||||
"Scene.ServerPicker.Button.SeeLess" = "See Less";
|
"Scene.ServerPicker.Button.SeeLess" = "See Less";
|
||||||
"Scene.ServerPicker.Button.SeeMore" = "See More";
|
"Scene.ServerPicker.Button.SeeMore" = "See More";
|
||||||
"Scene.ServerPicker.EmptyState.BadNetwork" = "Something went wrong while loading data. Check your internet connection.";
|
"Scene.ServerPicker.EmptyState.BadNetwork" = "Something went wrong while loading data. Check your internet connection.";
|
||||||
|
|
|
@ -9,7 +9,7 @@ import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
|
||||||
protocol PickServerCategoriesCellDelegate: class {
|
protocol PickServerCategoriesCellDelegate: AnyObject {
|
||||||
func pickServerCategoriesCell(_ cell: PickServerCategoriesCell, collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
|
func pickServerCategoriesCell(_ cell: PickServerCategoriesCell, collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,3 +110,17 @@ extension PickServerCategoriesCell: UICollectionViewDelegateFlowLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension PickServerCategoriesCell {
|
||||||
|
|
||||||
|
override func accessibilityElementCount() -> Int {
|
||||||
|
guard let diffableDataSource = diffableDataSource else { return 0 }
|
||||||
|
return diffableDataSource.snapshot().itemIdentifiers.count
|
||||||
|
}
|
||||||
|
|
||||||
|
override func accessibilityElement(at index: Int) -> Any? {
|
||||||
|
guard let item = collectionView.cellForItem(at: IndexPath(item: index, section: 0)) else { return nil }
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue