69 lines
1.7 KiB
Swift
69 lines
1.7 KiB
Swift
import Foundation
|
|
|
|
final class LocalizedTag: ObservableObject {
|
|
|
|
unowned let content: Content
|
|
|
|
@Published
|
|
var urlComponent: String
|
|
|
|
/// A custom name, different from the tag id
|
|
@Published
|
|
var name: String
|
|
|
|
@Published
|
|
var linkPreviewTitle: String?
|
|
|
|
@Published
|
|
var linkPreviewDescription: String?
|
|
|
|
/// The image id of the thumbnail
|
|
@Published
|
|
var linkPreviewImage: FileResource?
|
|
|
|
/// The original url in the previous site layout
|
|
let originalUrl: String?
|
|
|
|
init(content: Content,
|
|
urlComponent: String,
|
|
name: String,
|
|
linkPreviewTitle: String? = nil,
|
|
linkPreviewDescription: String? = nil,
|
|
linkPreviewImage: FileResource? = nil,
|
|
originalUrl: String? = nil) {
|
|
self.content = content
|
|
self.urlComponent = urlComponent
|
|
self.name = name
|
|
self.linkPreviewTitle = linkPreviewTitle
|
|
self.linkPreviewDescription = linkPreviewDescription
|
|
self.linkPreviewImage = linkPreviewImage
|
|
self.originalUrl = originalUrl
|
|
}
|
|
|
|
func isValid(urlComponent: String) -> Bool {
|
|
content.isValidIdForTagOrPageOrPost(urlComponent) &&
|
|
!content.containsTag(withUrlComponent: urlComponent)
|
|
}
|
|
|
|
/// The title to display when considering multiple items of this tag
|
|
var title: String {
|
|
linkPreviewTitle ?? name
|
|
}
|
|
}
|
|
|
|
extension LocalizedTag: LinkPreviewItem {
|
|
|
|
}
|
|
|
|
extension LocalizedTag {
|
|
|
|
var tagFile: LocalizedTagFile {
|
|
.init(urlComponent: urlComponent,
|
|
name: name,
|
|
linkPreviewTitle: linkPreviewTitle,
|
|
linkPreviewDescription: linkPreviewDescription,
|
|
linkPreviewImage: linkPreviewImage?.id,
|
|
originalURL: originalUrl)
|
|
}
|
|
}
|