Add a warning if a logo for a theme is not square

This commit is contained in:
pietervdvn 2022-02-04 00:42:02 +01:00
parent 62b646da99
commit 5d884a97f9
3 changed files with 47 additions and 4 deletions

20
package-lock.json generated
View file

@ -23,6 +23,7 @@
"@types/papaparse": "^5.3.1", "@types/papaparse": "^5.3.1",
"@types/prompt-sync": "^4.1.0", "@types/prompt-sync": "^4.1.0",
"@types/wikidata-sdk": "^6.1.0", "@types/wikidata-sdk": "^6.1.0",
"@types/xml2js": "^0.4.9",
"country-language": "^0.1.7", "country-language": "^0.1.7",
"email-validator": "^2.0.4", "email-validator": "^2.0.4",
"escape-html": "^1.0.3", "escape-html": "^1.0.3",
@ -53,7 +54,8 @@
"togpx": "^0.5.4", "togpx": "^0.5.4",
"tslint": "^6.1.3", "tslint": "^6.1.3",
"wikibase-sdk": "^7.14.0", "wikibase-sdk": "^7.14.0",
"wikidata-sdk": "^7.14.0" "wikidata-sdk": "^7.14.0",
"xml2js": "^0.4.23"
}, },
"devDependencies": { "devDependencies": {
"@babel/polyfill": "^7.10.4", "@babel/polyfill": "^7.10.4",
@ -3313,6 +3315,14 @@
"wikidata-sdk": "*" "wikidata-sdk": "*"
} }
}, },
"node_modules/@types/xml2js": {
"version": "0.4.9",
"resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.9.tgz",
"integrity": "sha512-CHiCKIihl1pychwR2RNX5mAYmJDACgFVCMT5OArMaO3erzwXVcBqPcusr+Vl8yeeXukxZqtF8mZioqX+mpjjdw==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/abab": { "node_modules/abab": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
@ -19297,6 +19307,14 @@
"wikidata-sdk": "*" "wikidata-sdk": "*"
} }
}, },
"@types/xml2js": {
"version": "0.4.9",
"resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.9.tgz",
"integrity": "sha512-CHiCKIihl1pychwR2RNX5mAYmJDACgFVCMT5OArMaO3erzwXVcBqPcusr+Vl8yeeXukxZqtF8mZioqX+mpjjdw==",
"requires": {
"@types/node": "*"
}
},
"abab": { "abab": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",

View file

@ -64,6 +64,7 @@
"@types/papaparse": "^5.3.1", "@types/papaparse": "^5.3.1",
"@types/prompt-sync": "^4.1.0", "@types/prompt-sync": "^4.1.0",
"@types/wikidata-sdk": "^6.1.0", "@types/wikidata-sdk": "^6.1.0",
"@types/xml2js": "^0.4.9",
"country-language": "^0.1.7", "country-language": "^0.1.7",
"email-validator": "^2.0.4", "email-validator": "^2.0.4",
"escape-html": "^1.0.3", "escape-html": "^1.0.3",
@ -94,7 +95,8 @@
"togpx": "^0.5.4", "togpx": "^0.5.4",
"tslint": "^6.1.3", "tslint": "^6.1.3",
"wikibase-sdk": "^7.14.0", "wikibase-sdk": "^7.14.0",
"wikidata-sdk": "^7.14.0" "wikidata-sdk": "^7.14.0",
"xml2js": "^0.4.23"
}, },
"devDependencies": { "devDependencies": {
"@babel/polyfill": "^7.10.4", "@babel/polyfill": "^7.10.4",

View file

@ -6,6 +6,8 @@ import Constants from "../Models/Constants";
import * as all_known_layouts from "../assets/generated/known_layers_and_themes.json" import * as all_known_layouts from "../assets/generated/known_layers_and_themes.json"
import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson"; import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson";
import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; import LayoutConfig from "../Models/ThemeConfig/LayoutConfig";
import xml2js from 'xml2js';
import {exec} from "child_process";
const sharp = require('sharp'); const sharp = require('sharp');
const template = readFileSync("theme.html", "utf8"); const template = readFileSync("theme.html", "utf8");
@ -35,7 +37,7 @@ async function createIcon(iconPath: string, size: number) {
readFileSync(newname); readFileSync(newname);
return newname; // File already exists - nothing to do return newname; // File already exists - nothing to do
} catch (e) { } catch (e) {
// Errors are normal here if this file exists // Errors are normal here if this file does not exists
} }
try { try {
@ -60,7 +62,28 @@ async function createManifest(layout: LayoutConfig) {
let icon = layout.icon; let icon = layout.icon;
if (icon.endsWith(".svg") || icon.startsWith("<svg") || icon.startsWith("<?xml")) { if (icon.endsWith(".svg") || icon.startsWith("<svg") || icon.startsWith("<?xml")) {
// This is an svg. Lets create the needed pngs! // This is an svg. Lets create the needed pngs and do some checkes!
{
const svgResult = await xml2js.parseStringPromise(readFileSync(icon, "UTF8"))
const svg = svgResult.svg
const width: string = svg.$.width;
const height: string = svg.$.height;
if(width !== height){
console.warn("WARNING: the icon for theme "+layout.id+" is not square. Please square the icon at "+icon+"\n Width = "+width, "height =", height)
/* const process = exec("inkscape " + icon, ((error, stdout, stderr) => {
console.log("Inkscape: ", stdout)
if (error !== null) {
console.error(error)
}
if (stderr !== "") {
console.error(stderr)
}
}))//*/
}
}
let path = layout.icon; let path = layout.icon;
if (layout.icon.startsWith("<")) { if (layout.icon.startsWith("<")) {