forked from MapComplete/MapComplete
Add support for smaller theme encodings
This commit is contained in:
parent
82a097fd14
commit
b108f99aab
7 changed files with 128 additions and 3 deletions
38
Utils.ts
38
Utils.ts
|
@ -10,6 +10,8 @@ export class Utils {
|
|||
public static runningFromConsole = false;
|
||||
|
||||
public static readonly assets_path = "./assets/svg/";
|
||||
private static knownKeys = ["addExtraTags", "and", "calculatedTags", "changesetmessage", "clustering", "color", "condition", "customCss", "dashArray", "defaultBackgroundId", "description", "descriptionTail", "doNotDownload", "enableAddNewPoints", "enableBackgroundLayerSelection", "enableGeolocation", "enableLayers", "enableMoreQuests", "enableSearch", "enableShareScreen", "enableUserBadge", "freeform", "hideFromOverview", "hideInAnswer", "icon", "iconOverlays", "iconSize", "id", "if", "ifnot", "isShown", "key", "language", "layers", "lockLocation", "maintainer", "mappings", "maxzoom", "maxZoom", "minNeededElements", "minzoom", "multiAnswer", "name", "or", "osmTags", "passAllFeatures", "presets", "question", "render", "roaming", "roamingRenderings", "rotation", "shortDescription", "socialImage", "source", "startLat", "startLon", "startZoom", "tagRenderings", "tags", "then", "title", "titleIcons", "type", "version", "wayHandling", "widenFactor", "width"]
|
||||
private static extraKeys = ["nl", "en", "fr", "de", "pt", "es", "name", "phone", "email", "amenity", "leisure", "highway", "building", "yes", "no", "true", "false"]
|
||||
|
||||
static EncodeXmlValue(str) {
|
||||
return str.replace(/&/g, '&')
|
||||
|
@ -202,6 +204,42 @@ export class Utils {
|
|||
return {x: Utils.lon2tile(lon, z), y: Utils.lat2tile(lat, z), z: z}
|
||||
}
|
||||
|
||||
public static MinifyJSON(stringified: string): string {
|
||||
stringified = stringified.replace(/\|/g, "||");
|
||||
|
||||
const keys = Utils.knownKeys.concat(Utils.extraKeys);
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
const knownKey = keys[i];
|
||||
let code = i;
|
||||
if (i >= 124) {
|
||||
code += 1; // Character 127 is our 'escape' character |
|
||||
}
|
||||
let replacement = "|" + String.fromCharCode(code)
|
||||
stringified = stringified.replace(new RegExp(`\"${knownKey}\":`, "g"), replacement);
|
||||
}
|
||||
|
||||
return stringified;
|
||||
}
|
||||
|
||||
public static UnMinify(minified: string): string {
|
||||
|
||||
const parts = minified.split("|");
|
||||
let result = parts.shift();
|
||||
const keys = Utils.knownKeys.concat(Utils.extraKeys);
|
||||
|
||||
for (const part of parts) {
|
||||
if (part == "") {
|
||||
// Empty string => this was a || originally
|
||||
result += "|"
|
||||
continue
|
||||
}
|
||||
const i = part.charCodeAt(0);
|
||||
result += "\"" + keys[i] + "\":" + part.substring(1)
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static tile2long(x, z) {
|
||||
return (x / Math.pow(2, z) * 360 - 180);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue