Implement image comparison command

This commit is contained in:
Christoph Hagen
2025-01-05 20:16:16 +01:00
parent 29bba5e76e
commit ac7fbdd638
23 changed files with 200 additions and 40 deletions

View File

@ -8,7 +8,7 @@ struct AudioPlayerCommandProcessor: CommandProcessor {
let results: PageGenerationResults
init(content: Content, results: PageGenerationResults) {
init(content: Content, results: PageGenerationResults, language: ContentLanguage) {
self.content = content
self.results = results
}

View File

@ -5,7 +5,7 @@ struct BoxCommandProcessor: CommandProcessor {
let results: PageGenerationResults
init(content: Content, results: PageGenerationResults) {
init(content: Content, results: PageGenerationResults, language: ContentLanguage) {
self.results = results
}

View File

@ -7,7 +7,7 @@ struct ButtonCommandProcessor: CommandProcessor {
let results: PageGenerationResults
init(content: Content, results: PageGenerationResults) {
init(content: Content, results: PageGenerationResults, language: ContentLanguage) {
self.content = content
self.results = results
}

View File

@ -3,7 +3,7 @@ protocol CommandProcessor {
var commandType: ShorthandMarkdownKey { get }
init(content: Content, results: PageGenerationResults)
init(content: Content, results: PageGenerationResults, language: ContentLanguage)
func process(_ arguments: [String], markdown: Substring) -> String
}

View File

@ -5,7 +5,7 @@ struct IconCommandProcessor: CommandProcessor {
let results: PageGenerationResults
init(content: Content, results: PageGenerationResults) {
init(content: Content, results: PageGenerationResults, language: ContentLanguage) {
self.results = results
}

View File

@ -0,0 +1,53 @@
struct ImageCompareCommandProcessor: CommandProcessor {
let commandType: ShorthandMarkdownKey = .imageCompare
let content: Content
let results: PageGenerationResults
let language: ContentLanguage
init(content: Content, results: PageGenerationResults, language: ContentLanguage) {
self.content = content
self.results = results
self.language = language
}
func process(_ arguments: [String], markdown: Substring) -> String {
guard arguments.count == 2 else {
results.invalid(command: .imageCompare, markdown)
return ""
}
let leftImageId = arguments[0]
let rightImageId = arguments[1]
guard let leftImage = content.image(leftImageId) else {
results.missing(file: leftImageId, source: "Image compare")
return ""
}
guard let rightImage = content.image(rightImageId) else {
results.missing(file: rightImageId, source: "Image compare")
return ""
}
let size = content.settings.pages.contentWidth
let leftImageSet = leftImage.imageSet(
width: size, height: size,
language: language,
extraAttributes: ImageCompare.extraAttributes)
let rightImageSet = rightImage.imageSet(
width: size, height: size,
language: language,
extraAttributes: ImageCompare.extraAttributes)
results.require(imageSet: leftImageSet)
results.require(imageSet: rightImageSet)
results.require(icon: ImageCompare.requiredIcon)
results.require(headers: .imageCompareJs, .imageCompareCss)
return ImageCompare(left: leftImageSet, right: rightImageSet).content
}
}

View File

@ -7,7 +7,7 @@ struct LabelsCommandProcessor: CommandProcessor {
let results: PageGenerationResults
init(content: Content, results: PageGenerationResults) {
init(content: Content, results: PageGenerationResults, language: ContentLanguage) {
self.content = content
self.results = results
}

View File

@ -11,7 +11,7 @@ struct PageHtmlProcessor: CommandProcessor {
let content: Content
init(content: Content, results: PageGenerationResults) {
init(content: Content, results: PageGenerationResults, language: ContentLanguage) {
self.content = content
self.results = results
}

View File

@ -7,7 +7,7 @@ struct VideoCommandProcessor: CommandProcessor {
let results: PageGenerationResults
init(content: Content, results: PageGenerationResults) {
init(content: Content, results: PageGenerationResults, language: ContentLanguage) {
self.content = content
self.results = results
}