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.",
|
||||
"button": {
|
||||
"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_more": "See More"
|
||||
|
@ -423,4 +436,4 @@
|
|||
"text_placeholder": "Type or paste additional comments"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,7 +12,7 @@
|
|||
<key>CoreDataStack.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>15</integer>
|
||||
<integer>14</integer>
|
||||
</dict>
|
||||
<key>Mastodon - RTL.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
|
@ -32,7 +32,7 @@
|
|||
<key>NotificationService.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<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 {
|
||||
|
|
|
@ -42,6 +42,10 @@ extension CategoryPickerSection {
|
|||
}
|
||||
}
|
||||
.store(in: &cell.observations)
|
||||
|
||||
cell.isAccessibilityElement = true
|
||||
cell.accessibilityLabel = item.accessibilityDescription
|
||||
|
||||
return cell
|
||||
}
|
||||
}
|
||||
|
|
|
@ -638,8 +638,34 @@ internal enum L10n {
|
|||
/// See More
|
||||
internal static let seeMore = L10n.tr("Localizable", "Scene.ServerPicker.Button.SeeMore")
|
||||
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
|
||||
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 {
|
||||
|
|
|
@ -204,7 +204,20 @@ tap the link to confirm your account.";
|
|||
"Scene.Search.Searching.Segment.All" = "All";
|
||||
"Scene.Search.Searching.Segment.Hashtags" = "Hashtags";
|
||||
"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.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.SeeMore" = "See More";
|
||||
"Scene.ServerPicker.EmptyState.BadNetwork" = "Something went wrong while loading data. Check your internet connection.";
|
||||
|
|
|
@ -9,7 +9,7 @@ import os.log
|
|||
import UIKit
|
||||
import MastodonSDK
|
||||
|
||||
protocol PickServerCategoriesCellDelegate: class {
|
||||
protocol PickServerCategoriesCellDelegate: AnyObject {
|
||||
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