Add more types to the charging stations theme, better merge if translations already exist
This commit is contained in:
parent
e18eb06f14
commit
204b431df0
6 changed files with 851 additions and 38 deletions
|
@ -258,7 +258,7 @@ export class InitUiElements {
|
|||
|
||||
new Combine([
|
||||
"Error: could not parse the custom layout:",
|
||||
e,
|
||||
new FixedUiElement(""+e).SetClass("alert"),
|
||||
new SubtleButton("./assets/svg/mapcomplete_logo.svg",
|
||||
"Go back to the theme overview",
|
||||
{url: window.location.protocol+"//"+ window.location.hostname+"/index.html", newTab: false})
|
||||
|
|
|
@ -2,7 +2,7 @@ import {Utils} from "../Utils";
|
|||
|
||||
export default class Constants {
|
||||
|
||||
public static vNumber = "0.9.12";
|
||||
public static vNumber = "0.9.13";
|
||||
|
||||
// The user journey states thresholds when a new feature gets unlocked
|
||||
public static userJourney = {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -93,8 +93,13 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"question": "Who is allowed to use this charging station?",
|
||||
"render": "Access is {access}",
|
||||
"#": "access",
|
||||
"question": {
|
||||
"en": "Who is allowed to use this charging station?"
|
||||
},
|
||||
"render": {
|
||||
"en": "Access is {access}"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "access",
|
||||
"addExtraTags": [
|
||||
|
@ -141,7 +146,7 @@
|
|||
"type": "pnat"
|
||||
}
|
||||
},
|
||||
$$$
|
||||
{"#": "$$$"},
|
||||
{
|
||||
"#": "Authentication",
|
||||
"question": {
|
||||
|
@ -311,6 +316,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"#": "payment-options",
|
||||
"builtin": "payment-options",
|
||||
"override": {
|
||||
"condition": {
|
||||
|
@ -395,8 +401,12 @@
|
|||
},
|
||||
{
|
||||
"#": "Operator",
|
||||
"question": "Who is the operator of this charging station?",
|
||||
"render": "This charging station is operated by {operator}",
|
||||
"question": {
|
||||
"en": "Who is the operator of this charging station?"
|
||||
},
|
||||
"render": {
|
||||
"en": "This charging station is operated by {operator}"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "operator"
|
||||
},
|
||||
|
@ -407,7 +417,9 @@
|
|||
"network:={operator}"
|
||||
]
|
||||
},
|
||||
"then": "Actually, {operator} is the network",
|
||||
"then": {
|
||||
"en": "Actually, {operator} is the network"
|
||||
},
|
||||
"addExtraTags": [
|
||||
"operator="
|
||||
],
|
||||
|
@ -460,7 +472,9 @@
|
|||
"question": {
|
||||
"en": "What is the reference number of this charging station?"
|
||||
},
|
||||
"render": "Reference number is <b>{ref}</b>",
|
||||
"render": {
|
||||
"en": "Reference number is <b>{ref}</b>"
|
||||
},
|
||||
"freeform": {
|
||||
"key": "ref"
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ import {readFileSync, writeFileSync} from "fs";
|
|||
import {Utils} from "../../../Utils";
|
||||
import {TagRenderingConfigJson} from "../../../Models/ThemeConfig/Json/TagRenderingConfigJson";
|
||||
import ScriptUtils from "../../../scripts/ScriptUtils";
|
||||
import {LayerConfigJson} from "../../../Models/ThemeConfig/Json/LayerConfigJson";
|
||||
|
||||
|
||||
function colonSplit(value: string): string[] {
|
||||
|
@ -13,6 +14,7 @@ function loadCsv(file): {
|
|||
image: string,
|
||||
description: Map<string, string>,
|
||||
countryWhiteList?: string[],
|
||||
countryBlackList?: string[],
|
||||
commonVoltages?: number[],
|
||||
commonCurrents?: number[],
|
||||
commonOutputs?: string[]
|
||||
|
@ -27,7 +29,7 @@ function loadCsv(file): {
|
|||
}
|
||||
|
||||
const v = {}
|
||||
const colonSeperated = ["commonVoltages", "commonOutputs", "commonCurrents", "countryWhiteList"]
|
||||
const colonSeperated = ["commonVoltages", "commonOutputs", "commonCurrents", "countryWhiteList","countryBlackList"]
|
||||
const descriptionTranslations = new Map<string, string>()
|
||||
for (let j = 0; j < header.length; j++) {
|
||||
const key = header[j];
|
||||
|
@ -51,7 +53,7 @@ function loadCsv(file): {
|
|||
function run(file, protojson) {
|
||||
|
||||
const overview_question_answers = []
|
||||
const questions: TagRenderingConfigJson[] = []
|
||||
const questions: (TagRenderingConfigJson & {"#": string})[] = []
|
||||
const filterOptions: { question: any, osmTags?: string } [] = [
|
||||
{
|
||||
question: {
|
||||
|
@ -62,7 +64,8 @@ function run(file, protojson) {
|
|||
]
|
||||
|
||||
const entries = loadCsv(file)
|
||||
for (const e of entries) {
|
||||
for (let i = 0; i < entries.length; i++){
|
||||
const e = entries[i];
|
||||
const txt = {
|
||||
en: `<img style='width:3rem; margin-left: 1rem; margin-right: 1rem' src='./assets/layers/charging_station/${e.image}'/> ${e.description.get("en")}`,
|
||||
nl: `<img style='width:3rem; margin-left: 1rem; margin-right: 1rem' src='./assets/layers/charging_station/${e.image}'/> ${e.description.get("nl")}`
|
||||
|
@ -73,9 +76,15 @@ function run(file, protojson) {
|
|||
then: txt,
|
||||
}
|
||||
|
||||
if (e.countryWhiteList !== undefined && e.countryWhiteList.length > 0) {
|
||||
if(e.countryWhiteList.length > 0 && e.countryBlackList.length > 0){
|
||||
throw "Error for type "+e.key+": don't defined both a whitelist and a blacklist"
|
||||
}
|
||||
if (e.countryWhiteList.length > 0) {
|
||||
const countries = e.countryWhiteList.map(country => "_country!=" + country) //HideInAnswer if it is in the wrong country
|
||||
json["hideInAnswer"] = {or: countries}
|
||||
}else if (e.countryBlackList .length > 0) {
|
||||
const countries = e.countryBlackList.map(country => "_country=" + country) //HideInAnswer if it is in the wrong country
|
||||
json["hideInAnswer"] = {or: countries}
|
||||
}
|
||||
|
||||
overview_question_answers.push(json)
|
||||
|
@ -94,6 +103,7 @@ function run(file, protojson) {
|
|||
const descrWithImage_nl = `<b>${e.description.get("nl")}</b> <img style='width:1rem;' src='./assets/layers/charging_station/${e.image}'/>`
|
||||
|
||||
questions.push({
|
||||
"#":"plugs-"+i,
|
||||
question: {
|
||||
en: `How much plugs of type ${descrWithImage_en} are available here?`,
|
||||
nl: `Hoeveel stekkers van type ${descrWithImage_nl} heeft dit oplaadpunt?`,
|
||||
|
@ -112,6 +122,7 @@ function run(file, protojson) {
|
|||
})
|
||||
|
||||
questions.push({
|
||||
"#":"voltage-"+i,
|
||||
question: {
|
||||
en: `What voltage do the plugs with ${descrWithImage_en} offer?`,
|
||||
nl: `Welke spanning levert de stekker van type ${descrWithImage_nl}`
|
||||
|
@ -140,6 +151,7 @@ function run(file, protojson) {
|
|||
|
||||
|
||||
questions.push({
|
||||
"#":"current-"+i,
|
||||
question: {
|
||||
en: `What current do the plugs with ${descrWithImage_en} offer?`,
|
||||
nl: `Welke stroom levert de stekker van type ${descrWithImage_nl}?`,
|
||||
|
@ -168,6 +180,7 @@ function run(file, protojson) {
|
|||
|
||||
|
||||
questions.push({
|
||||
"#":"power-output-"+i,
|
||||
question: {
|
||||
en: `What power output does a single plug of type ${descrWithImage_en} offer?`,
|
||||
nl: `Welk vermogen levert een enkele stekker van type ${descrWithImage_nl}?`,
|
||||
|
@ -204,6 +217,7 @@ function run(file, protojson) {
|
|||
}
|
||||
|
||||
const toggles = {
|
||||
"#":"Available_charging_stations (generated)",
|
||||
"question": {
|
||||
"en": "Which charging stations are available here?"
|
||||
},
|
||||
|
@ -213,9 +227,20 @@ function run(file, protojson) {
|
|||
questions.unshift(toggles)
|
||||
|
||||
const stringified = questions.map(q => JSON.stringify(q, null, " "))
|
||||
let proto = readFileSync(protojson, "utf8")
|
||||
proto = proto.replace("$$$", stringified.join(",\n") + ",")
|
||||
proto = JSON.parse(proto)
|
||||
let protoString = readFileSync(protojson, "utf8")
|
||||
|
||||
protoString = protoString.replace("{\"#\": \"$$$\"}", stringified.join(",\n"))
|
||||
const proto = <LayerConfigJson> JSON.parse(protoString)
|
||||
proto.tagRenderings.forEach(tr => {
|
||||
if(typeof tr === "string"){
|
||||
return;
|
||||
}
|
||||
if(tr["#"] === undefined || typeof tr["#"] !== "string"){
|
||||
console.error(tr)
|
||||
throw "Every tagrendering should have an id, acting as comment"
|
||||
}
|
||||
})
|
||||
|
||||
proto["filter"].push({
|
||||
options: filterOptions
|
||||
})
|
||||
|
@ -274,7 +299,8 @@ function run(file, protojson) {
|
|||
}
|
||||
proto["units"].push(...extraUnits)
|
||||
|
||||
writeFileSync("charging_station.json", JSON.stringify(proto, undefined, " "))
|
||||
mergeTranslations("charging_station.json",proto)
|
||||
writeFileSync("charging_station.json", JSON.stringify(proto, undefined, " "))
|
||||
}
|
||||
|
||||
|
||||
|
@ -302,22 +328,51 @@ async function queryTagInfo(file, type, clean: ((s: string) => string)) {
|
|||
}
|
||||
const countsArray = Array.from(counts.keys())
|
||||
countsArray.sort()
|
||||
// console.log(`${e.key}:${type} = ${countsArray.join(";")}`)
|
||||
console.log(`${countsArray.join(";")}`)
|
||||
console.log(`${e.key}:${type} = ${countsArray.join(";")}`)
|
||||
// console.log(`${countsArray.join(";")}`)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the translations into the 'newConfig' object
|
||||
* @param origPath
|
||||
* @param newConfig
|
||||
*/
|
||||
function mergeTranslations(origPath, newConfig: LayerConfigJson){
|
||||
const oldFile = <LayerConfigJson> JSON.parse(readFileSync(origPath, "utf-8"))
|
||||
const newFile =<LayerConfigJson> newConfig
|
||||
const renderingsOld = oldFile.tagRenderings
|
||||
delete oldFile.tagRenderings
|
||||
const newRenderings = newFile.tagRenderings
|
||||
Utils.Merge(oldFile, newFile)
|
||||
|
||||
for (const oldRendering of renderingsOld) {
|
||||
|
||||
const oldRenderingName = oldRendering["#"]
|
||||
if(oldRenderingName === undefined){
|
||||
continue
|
||||
}
|
||||
const applicable = newRenderings.filter(r => r["#"] === oldRenderingName)[0]
|
||||
if(applicable === undefined){
|
||||
continue;
|
||||
}
|
||||
Utils.Merge(oldRendering, applicable)
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
run("types.csv", "charging_station.protojson")
|
||||
// queryTagInfo("types.csv","voltage", true)
|
||||
// queryTagInfo("types.csv", "current", true)
|
||||
/* queryTagInfo("types.csv", "output", s => {
|
||||
/*/
|
||||
queryTagInfo("types.csv","voltage", s => s.trim())
|
||||
queryTagInfo("types.csv", "current", s => s.trim())
|
||||
queryTagInfo("types.csv", "output", s => {
|
||||
if(s.endsWith("kW")){
|
||||
s = s.substring(0, s.length - 2)
|
||||
}
|
||||
s = s.trim()
|
||||
return s + " kW"
|
||||
})*/
|
||||
})
|
||||
//*/
|
||||
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
key,image,description:en,countryWhitelist,commonVoltages,commonCurrents,commonOutputs,description:nl
|
||||
socket:schuko,CEE7_4F.svg,<b>Schuko wall plug</b> without ground pin (CEE7/4 type F),be;fr;ma;tn;pl;cs;sk;mo,230,16,3.6 kW,<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)
|
||||
socket:typee,TypeE.svg,<b>European wall plug</b> with ground pin (CEE7/4 type E),,230,16,3 kW;22 kW;,<b>Europese stekker</b> met aardingspin (CEE7/4 type E)
|
||||
socket:chademo,Chademo_type4.svg,<b>Chademo</b>,,500,120,50 kW,
|
||||
socket:type1_cable,Type1_J1772.svg,<b>Type 1 with cable</b> (J1772),,200;240,32,3.7 kW;7 kW,<b>Type 1 met kabel</b> (J1772)
|
||||
socket:type1,Type1_J1772.svg,<b>Type 1 <i>without</i> cable</b> (J1772),,200;240,32,3.7 kW;6.6 kW;7 kW;7.2 kW,<b>Type 1 <i>zonder</i> kabel</b> (J1772)
|
||||
socket:type1_combo,Type1-ccs.svg,<b>Type 1 CCS</b> (aka Type 1 Combo),,400;1000,50;125,50 kW;62.5 kW;150 kW;350 kW;,
|
||||
socket:tesla_supercharger,Tesla-hpwc-model-s.svg,<b>Tesla Supercharger</b>,,480,125;350,120 kW;150 kW;250 kW,
|
||||
socket:type2,Type2_socket.svg,<b>Type 2</b> (mennekes),,230;400,16;32,11 kW;22 kW,
|
||||
socket:type2_combo,Type2_CCS.svg,<b>Type 2 CCS</b> (mennekes),,500;920,125;350,50 kW,
|
||||
key,image,description:en,countryWhiteList,countryBlackList,commonVoltages,commonCurrents,commonOutputs,description:nl
|
||||
socket:schuko,CEE7_4F.svg,<b>Schuko wall plug</b> without ground pin (CEE7/4 type F),be;fr;ma;tn;pl;cs;sk;mo,,230,16,3.6 kW,<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)
|
||||
socket:typee,TypeE.svg,<b>European wall plug</b> with ground pin (CEE7/4 type E),,,230,16,3 kW;22 kW;,<b>Europese stekker</b> met aardingspin (CEE7/4 type E)
|
||||
socket:chademo,Chademo_type4.svg,<b>Chademo</b>,,,500,120,50 kW,
|
||||
socket:type1_cable,Type1_J1772.svg,<b>Type 1 with cable</b> (J1772),,,200;240,32,3.7 kW;7 kW,<b>Type 1 met kabel</b> (J1772)
|
||||
socket:type1,Type1_J1772.svg,<b>Type 1 <i>without</i> cable</b> (J1772),,,200;240,32,3.7 kW;6.6 kW;7 kW;7.2 kW,<b>Type 1 <i>zonder</i> kabel</b> (J1772)
|
||||
socket:type1_combo,Type1-ccs.svg,<b>Type 1 CCS</b> (aka Type 1 Combo),,,400;1000,50;125,50 kW;62.5 kW;150 kW;350 kW;,
|
||||
socket:tesla_supercharger,Tesla-hpwc-model-s.svg,<b>Tesla Supercharger</b>,,,480,125;350,120 kW;150 kW;250 kW,
|
||||
socket:type2,Type2_socket.svg,<b>Type 2</b> (mennekes),,,230;400,16;32,11 kW;22 kW,
|
||||
socket:type2_combo,Type2_CCS.svg,<b>Type 2 CCS</b> (mennekes),,,500;920,125;350,50 kW,
|
||||
socket:type2_cable,Type2_tethered.svg,<b>Type 2 with cable</b> (mennekes),,,230;400,16;32,11 kW;22 kW,<b>Type 2 met kabel</b> (J1772)
|
||||
socket:tesla_supercharger_ccs,Type2_CCS.svg,<b>Tesla Supercharger CCS</b> (a branded type2_css),,,500;920,125;350,50 kW,
|
||||
socket:tesla_destination,Tesla-hpwc-model-s.svg,<b>Tesla Supercharger (destination)</b>,us,,480,125;350,120 kW;150 kW;250 kW,
|
||||
socket:tesla_destination,Type2_tethered.svg,<b>Tesla supercharger (destination</b> (A Type 2 with cable branded as tesla),,us,230;400,16;32,11 kW;22 kW,
|
||||
|
|
|
Loading…
Reference in a new issue