75 lines
2.5 KiB
TypeScript
75 lines
2.5 KiB
TypeScript
import { readFileSync, writeFileSync } from "fs"
|
|
import { DesugaringStep } from "../Models/ThemeConfig/Conversion/Conversion"
|
|
import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson"
|
|
import { Utils } from "../Utils"
|
|
import Translations from "../UI/i18n/Translations"
|
|
|
|
class ConvertImagesToIcon extends DesugaringStep<LayerConfigJson> {
|
|
private _iconClass: string
|
|
|
|
constructor(iconClass: string) {
|
|
super(
|
|
"Searches for images in the 'then' path, removes the <img> block and extracts the image itself a 'icon'",
|
|
[],
|
|
"ConvertImagesToIcon"
|
|
)
|
|
this._iconClass = iconClass
|
|
}
|
|
|
|
convert(
|
|
json: LayerConfigJson,
|
|
context: string
|
|
): { result: LayerConfigJson; errors?: string[]; warnings?: string[]; information?: string[] } {
|
|
const information = []
|
|
const errors = []
|
|
json = Utils.Clone(json)
|
|
Utils.WalkPath(["tagRenderings", "mappings"], json, (mapping) => {
|
|
const then = Translations.T(mapping.then)
|
|
const images = Utils.Dedup(then.ExtractImages())
|
|
if (images.length == 0) {
|
|
return mapping
|
|
}
|
|
if (images.length > 1) {
|
|
errors.push(
|
|
"The mapping " + mapping.then + " has multiple images: " + images.join(", ")
|
|
)
|
|
}
|
|
information.push("Replaced image " + images[0])
|
|
const replaced = then.OnEveryLanguage((s) => {
|
|
return s
|
|
.replace(/(<div [^>]*>)?<img [^>]*> ?/, "")
|
|
.replace(/<\/div>$/, "")
|
|
.trim()
|
|
})
|
|
|
|
mapping.then = replaced.translations
|
|
mapping.icon = { path: images[0], class: this._iconClass }
|
|
return mapping
|
|
})
|
|
|
|
return {
|
|
information,
|
|
result: json,
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* One-of script to load one layer.json-file and rewrite all tagrenderings
|
|
*/
|
|
function main() {
|
|
let args = [...process.argv]
|
|
args.splice(0, 2)
|
|
const path = args[0]
|
|
const iconClass = args[1] ?? "small"
|
|
const targetFile = args[2] ?? path + ".autoconverted.json"
|
|
const parsed = JSON.parse(readFileSync(path, { encoding: "utf8" }))
|
|
const converted = new ConvertImagesToIcon(iconClass).convertStrict(
|
|
parsed,
|
|
"While running the fixImagesInTagRenderings-script"
|
|
)
|
|
writeFileSync(targetFile, JSON.stringify(converted, null, " "))
|
|
console.log("Written fixed version to " + targetFile)
|
|
}
|
|
|
|
main()
|