First version

This commit is contained in:
Christoph Hagen
2024-10-14 19:22:32 +02:00
parent 7c812de089
commit 0989f06d87
51 changed files with 2477 additions and 234 deletions

View File

@ -0,0 +1,69 @@
import Foundation
final class Tag: ObservableObject {
var id: String {
name.getText(for: .english).lowercased().replacingOccurrences(of: " ", with: "-")
}
@Published
var name: LocalizedText
init(en: String, de: String) {
self.name = .init(en: en, de: de)
}
var linkName: String {
id.lowercased().replacingOccurrences(of: " ", with: "-")
}
var url: String {
"/tags/\(linkName).html"
}
}
extension Tag {
func getUrl(for language: ContentLanguage) -> String {
"/\(language.rawValue)/tags/\(id).html"
}
func data(in language: ContentLanguage) -> FeedEntryData.Tag {
.init(
name: name.getText(for: language),
url: getUrl(for: language)
)
}
}
extension Tag: ExpressibleByStringLiteral {
convenience init(stringLiteral value: StringLiteralType) {
self.init(en: value.capitalized, de: value.capitalized)
}
}
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
}
}