76 lines
1.4 KiB
Swift
76 lines
1.4 KiB
Swift
import Foundation
|
|
|
|
final class Tag: ObservableObject {
|
|
|
|
var id: String {
|
|
english.urlComponent
|
|
}
|
|
|
|
@Published
|
|
var isVisible: Bool
|
|
|
|
@Published
|
|
var german: LocalizedTag
|
|
|
|
@Published
|
|
var english: LocalizedTag
|
|
|
|
init(isVisible: Bool = true, german: LocalizedTag, english: LocalizedTag) {
|
|
self.isVisible = isVisible
|
|
self.german = german
|
|
self.english = english
|
|
}
|
|
|
|
var linkName: String {
|
|
id.lowercased().replacingOccurrences(of: " ", with: "-")
|
|
}
|
|
|
|
var url: String {
|
|
"/tags/\(linkName).html"
|
|
}
|
|
|
|
func localized(in language: ContentLanguage) -> LocalizedTag {
|
|
switch language {
|
|
case .english: return english
|
|
case .german: return german
|
|
}
|
|
}
|
|
}
|
|
|
|
extension Tag {
|
|
|
|
func data(in language: ContentLanguage) -> FeedEntryData.Tag {
|
|
switch language {
|
|
case .english:
|
|
return english.data()
|
|
case .german:
|
|
return german.data()
|
|
}
|
|
}
|
|
}
|
|
|
|
extension Tag: Identifiable {
|
|
|
|
}
|
|
|
|
extension Tag: Equatable {
|
|
|
|
static func == (_ lhs: Tag, _ rhs: Tag) -> Bool {
|
|
lhs.id == rhs.id
|
|
}
|
|
}
|
|
|
|
extension Tag: Hashable {
|
|
|
|
func hash(into hasher: inout Hasher) {
|
|
hasher.combine(id)
|
|
}
|
|
}
|
|
|
|
extension Tag: Comparable {
|
|
|
|
static func < (lhs: Tag, rhs: Tag) -> Bool {
|
|
lhs.id < rhs.id
|
|
}
|
|
}
|