diff --git a/index.html b/index.html index 871503bf..b8bcb074 100644 --- a/index.html +++ b/index.html @@ -978,7 +978,7 @@ - + @@ -3606,12 +3606,17 @@

GeoJSON format is used in GIS tools such as QGIS. Check out wiki-page for guidance.

Generator uses pop-up window to download files. Please ensure your browser does not block popups.

-

It's also possible to export map to Foundry VTT, see the module.

-
Export To Json
+ +
Export To JSON
- - - + + + +
+

Export in JSON format can be used as an API replacement.

+ +
+

It's also possible to export map to Foundry VTT, see the module.

diff --git a/modules/export-json.js b/modules/export-json.js index 174a303a..b4c62916 100644 --- a/modules/export-json.js +++ b/modules/export-json.js @@ -1,362 +1,186 @@ +function exportToJson(type) { + if (customization) return tip("Map cannot be saved when edit mode is active, please exit the mode and retry", false, "error"); + closeDialogs("#alert"); -/** - * Downloads created data of getMapDataAPIJson() - * Download all data generated - * - * @see getMapDataAPIJson - */ -function downloadMapDataAPIJson() { - if (customization) return tip("Map cannot be saved when edit mode is active, please exit the mode and retry", false, "error"); - closeDialogs("#alert"); + const typeMap = { + Full: getFullDataJson, + Minimal: getMinimalDataJson, + Cells: getCellsDataJson + }; - const mapData = getMapDataAPIJson(); - const blob = new Blob([mapData], {type: "application/json"}); - const URL = window.URL.createObjectURL(blob); - const link = document.createElement("a"); - link.download = getFileName() + "All.json"; - link.href = URL; - link.click(); - tip(`${link.download} is saved. Open "Downloads" screen (CTRL + J) to check`, true, "success", 7000); - window.URL.revokeObjectURL(URL); + const mapData = typeMap[type](); + const blob = new Blob([mapData], {type: "application/json"}); + const URL = window.URL.createObjectURL(blob); + const link = document.createElement("a"); + link.download = getFileName(type) + ".json"; + link.href = URL; + link.click(); + tip(`${link.download} is saved. Open "Downloads" screen (CTRL + J) to check`, true, "success", 7000); + window.URL.revokeObjectURL(URL); } -/** - * Downloads created data of getMinimalMapJSONData() - * Downloads data without cells - * - * @see getMinimalMapJSONData - */ -function downloadMapDataMinimalAPIJson() { - if (customization) return tip("Map cannot be saved when edit mode is active, please exit the mode and retry", false, "error"); - closeDialogs("#alert"); +function getMapInfo() { + const info = { + version, + description: "Azgaar's Fantasy Map Generator output: azgaar.github.io/Fantasy-map-generator", + exportedAt: new Date().toISOString(), + mapName: mapName.value, + seed, + mapId + }; - const mapData = getMinimalMapJSONData(); - const blob = new Blob([mapData], {type: "application/json"}); - const URL = window.URL.createObjectURL(blob); - const link = document.createElement("a"); - link.download = getFileName() + "MinimalDataAPI.json"; - link.href = URL; - link.click(); - tip(`${link.download} is saved. Open "Downloads" screen (CTRL + J) to check`, true, "success", 7000); - window.URL.revokeObjectURL(URL); + return info; } +function getSettings() { + const settings = { + distanceUnit: distanceUnitInput.value, + distanceScale: distanceScaleInput.value, + areaUnit: areaUnit.value, + heightUnit: heightUnit.value, + heightExponent: heightExponentInput.value, + temperatureScale: temperatureScale.value, + barSize: barSizeInput.value, + barLabel: barLabel.value, + barBackOpacity: barBackOpacity.value, + barBackColor: barBackColor.value, + barPosX: barPosX.value, + barPosY: barPosY.value, + populationRate: populationRate, + urbanization: urbanization, + mapSize: mapSizeOutput.value, + latitudeO: latitudeOutput.value, + temperatureEquator: temperatureEquatorOutput.value, + temperaturePole: temperaturePoleOutput.value, + prec: precOutput.value, + options: options, + mapName: mapName.value, + hideLabels: hideLabels.checked, + stylePreset: stylePreset.value, + rescaleLabels: rescaleLabels.checked, + urbanDensity: urbanDensity + }; -/** - * Downloads created data of getCellJSONData() - * - * @see getCellJSONData - */ -function downloadCellsDataJSON() { - if (customization) return tip("Map cannot be saved when edit mode is active, please exit the mode and retry", false, "error"); - closeDialogs("#alert"); - const mapData = getCellJSONData(); - const blob = new Blob([mapData], {type: "application/json"}); - const URL = window.URL.createObjectURL(blob); - const link = document.createElement("a"); - link.download = getFileName() + "CellsData.json"; - link.href = URL; - link.click(); - tip(`${link.download} is saved. Open "Downloads" screen (CTRL + J) to check`, true, "success", 7000); - window.URL.revokeObjectURL(URL); + return settings; } +function getCellsData() { + const cellConverted = { + i: Array.from(pack.cells.i), + v: pack.cells.v, + c: pack.cells.c, + p: pack.cells.p, + g: Array.from(pack.cells.g), + h: Array.from(pack.cells.h), + area: Array.from(pack.cells.area), + f: Array.from(pack.cells.f), + t: Array.from(pack.cells.t), + haven: Array.from(pack.cells.haven), + harbor: Array.from(pack.cells.harbor), + fl: Array.from(pack.cells.fl), + r: Array.from(pack.cells.r), + conf: Array.from(pack.cells.conf), + biome: Array.from(pack.cells.biome), + s: Array.from(pack.cells.s), + pop: Array.from(pack.cells.pop), + culture: Array.from(pack.cells.culture), + burg: Array.from(pack.cells.burg), + road: Array.from(pack.cells.road), + crossroad: Array.from(pack.cells.crossroad), + state: Array.from(pack.cells.state), + religion: Array.from(pack.cells.religion), + province: Array.from(pack.cells.province) + }; + const cellObjArr = []; + { + cellConverted.i.forEach(value => { + const cellobj = { + i: value, + v: cellConverted.v[value], + c: cellConverted.c[value], + p: cellConverted.p[value], + g: cellConverted.g[value], + h: cellConverted.h[value], + area: cellConverted.area[value], + f: cellConverted.f[value], + t: cellConverted.t[value], + haven: cellConverted.haven[value], + harbor: cellConverted.harbor[value], + fl: cellConverted.fl[value], + r: cellConverted.r[value], + conf: cellConverted.conf[value], + biome: cellConverted.biome[value], + s: cellConverted.s[value], + pop: cellConverted.pop[value], + culture: cellConverted.culture[value], + burg: cellConverted.burg[value], + road: cellConverted.road[value], + crossroad: cellConverted.crossroad[value], + state: cellConverted.state[value], + religion: cellConverted.religion[value], + province: cellConverted.province[value] + }; + cellObjArr.push(cellobj); + }); + } + const cellsData = { + cells: cellObjArr, + features: pack.features, + cultures: pack.cultures, + burgs: pack.burgs, + states: pack.states, + provinces: pack.provinces, + religions: pack.religions, + rivers: pack.rivers, + markers: pack.markers + }; - - - - -/** - * Gets current loaded map data as a JSON string. - * The file contains data looks like: - * - info - * - settings (because population and other things are related to this) - * - coords - * - notes - * - pack - * - * @returns {string} JSONString of loaded and constructed data object - */ -function getMapDataAPIJson() { - - TIME && console.time("createMapDataJson"); - - const date = new Date(); - const dateString = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(); - const info = { - "version": version, - "description": "Api-Like Output File Gathered From: azgaar.github.io/Fantasy-map-generator", - "creation-date":dateString, - "seed" : seed, - "mapId":mapId, - "mapName" : mapName.value - } - - const settings = { - "distanceUnit" : distanceUnitInput.value, - "distanceScale": distanceScaleInput.value, - "areaUnit" : areaUnit.value, - "heightUnit" : heightUnit.value, - "heightExponent" : heightExponentInput.value, - "temperatureScale" : temperatureScale.value, - "barSize" : barSizeInput.value, - "barLabel" : barLabel.value, - "barBackOpacity" : barBackOpacity.value, - "barBackColor" : barBackColor.value, - "barPosX" : barPosX.value, - "barPosY" : barPosY.value, - "populationRate" : populationRate, - "urbanization" : urbanization, - "mapSize" : mapSizeOutput.value, - "latitudeO" : latitudeOutput.value, - "temperatureEquator" : temperatureEquatorOutput.value, - "temperaturePole" : temperaturePoleOutput.value, - "prec" : precOutput.value, - "options" : options, - "mapName" : mapName.value, - "hideLabels" : hideLabels.checked, - "stylePreset" : stylePreset.value, - "rescaleLabels" : rescaleLabels.checked, - "urbanDensity" : urbanDensity - }; - const coords = mapCoordinates; - const CellConverted = { - "i" : Array.from(pack.cells.i), - "v" : pack.cells.v, - "c" : pack.cells.c, - "p" : pack.cells.p, - "g" : Array.from(pack.cells.g), - "h" : Array.from(pack.cells.h), - "area" : Array.from(pack.cells.area), - "f" : Array.from(pack.cells.f), - "t" : Array.from(pack.cells.t), - "haven" : Array.from(pack.cells.haven), - "harbor" : Array.from(pack.cells.harbor), - "fl" : Array.from(pack.cells.fl), - "r" : Array.from(pack.cells.r), - "conf" : Array.from(pack.cells.conf), - "biome" : Array.from(pack.cells.biome), - "s" : Array.from(pack.cells.s), - "pop" : Array.from(pack.cells.pop), - "culture" : Array.from(pack.cells.culture), - "burg" : Array.from(pack.cells.burg), - "road" : Array.from(pack.cells.road), - "crossroad" : Array.from(pack.cells.crossroad), - "state" : Array.from(pack.cells.state), - "religion" : Array.from(pack.cells.religion), - "province" : Array.from(pack.cells.province) - }; - const cellObjArr = []; - { - CellConverted.i.forEach(value => { - const cellobj = { - "i" : value, - "v" : CellConverted.v[value], - "c" : CellConverted.c[value], - "p" : CellConverted.p[value], - "g" : CellConverted.g[value], - "h" : CellConverted.h[value], - "area" : CellConverted.area[value], - "f" : CellConverted.f[value], - "t" : CellConverted.t[value], - "haven" : CellConverted.haven[value], - "harbor" : CellConverted.harbor[value], - "fl" : CellConverted.fl[value], - "r" : CellConverted.r[value], - "conf" : CellConverted.conf[value], - "biome" : CellConverted.biome[value], - "s" : CellConverted.s[value], - "pop" : CellConverted.pop[value], - "culture" : CellConverted.culture[value], - "burg" : CellConverted.burg[value], - "road" : CellConverted.road[value], - "crossroad" : CellConverted.crossroad[value], - "state" : CellConverted.state[value], - "religion" : CellConverted.religion[value], - "province" : CellConverted.province[value] - } - cellObjArr.push(cellobj) - }) - }; - const packs = { - "cells": cellObjArr, - "features":pack.features, - "cultures":pack.cultures, - "burgs":pack.burgs, - "states":pack.states, - "provinces":pack.provinces, - "religions":pack.religions, - "rivers":pack.rivers, - "markers":pack.markers, - } - const biomes = biomesData; - - const ExportData = {info,settings,coords,packs,biomes,notes,nameBases} - - TIME && console.timeEnd("createMapDataJson"); - return JSON.stringify(ExportData); + return cellsData; } +function getFullDataJson() { + TIME && console.time("getFullDataJson"); -/** -* For exporting as JSON without pack.cells -* This can become handy if user don't want a huge data. -* For assigning data to cells user must download cells data with downloadCellsData(). -* -* @returns {string} JSONString data of the created object -*/ -function getMinimalMapJSONData(){ + const info = getMapInfo(); + const settings = getSettings(); + const cells = getCellsData(); + const exportData = {info, settings, coords: mapCoordinates, cells, biomes: biomesData, notes, nameBases}; - TIME && console.time("createMapDataMinimalJson"); - - const date = new Date(); - const dateString = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(); - const info = { - "version": version, - "description": "Api-Like Output File Gathered From: azgaar.github.io/Fantasy-map-generator", - "creation-date":dateString, - "seed" : seed, - "mapId":mapId, - "mapName" : mapName.value - } - - const settings = { - "distanceUnit" : distanceUnitInput.value, - "distanceScale": distanceScaleInput.value, - "areaUnit" : areaUnit.value, - "heightUnit" : heightUnit.value, - "heightExponent" : heightExponentInput.value, - "temperatureScale" : temperatureScale.value, - "barSize" : barSizeInput.value, - "barLabel" : barLabel.value, - "barBackOpacity" : barBackOpacity.value, - "barBackColor" : barBackColor.value, - "barPosX" : barPosX.value, - "barPosY" : barPosY.value, - "populationRate" : populationRate, - "urbanization" : urbanization, - "mapSize" : mapSizeOutput.value, - "latitudeO" : latitudeOutput.value, - "temperatureEquator" : temperatureEquatorOutput.value, - "temperaturePole" : temperaturePoleOutput.value, - "prec" : precOutput.value, - "options" : options, - "mapName" : mapName.value, - "hideLabels" : hideLabels.checked, - "stylePreset" : stylePreset.value, - "rescaleLabels" : rescaleLabels.checked, - "urbanDensity" : urbanDensity - }; - const coords = mapCoordinates; - const packs = { - "features":pack.features, - "cultures":pack.cultures, - "burgs":pack.burgs, - "states":pack.states, - "provinces":pack.provinces, - "religions":pack.religions, - "rivers":pack.rivers, - "markers":pack.markers, - } - const biomes = biomesData; - - const ExportData = {info,settings,coords,packs,biomes,notes,nameBases} - - TIME && console.timeEnd("createMapDataMinimalJson"); - return JSON.stringify(ExportData); -} -/** - * Gets data that created with info and pack.cell - * This function is created for primarly pack.cell data is too big. - * for speeding up the proccess the main data and cell data is seperated as two files. - * - * exported data look like: - * - info - * - cells - * - * @see pack - * @see getMinimalMapJSONData - * @returns {string} The JSONString of pack.cell - */ -function getCellJSONData() { - TIME && console.time("createMapDataMinimalJson"); - - const date = new Date(); - const dateString = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(); - const info = { - "version": version, - "description": "Api-Like Output File Gathered From: azgaar.github.io/Fantasy-map-generator", - "creation-date":dateString, - "seed" : seed, - "mapId":mapId, - "mapName" : mapName.value - } - const CellConverted = { - "i" : Array.from(pack.cells.i), - "v" : pack.cells.v, - "c" : pack.cells.c, - "p" : pack.cells.p, - "g" : Array.from(pack.cells.g), - "h" : Array.from(pack.cells.h), - "area" : Array.from(pack.cells.area), - "f" : Array.from(pack.cells.f), - "t" : Array.from(pack.cells.t), - "haven" : Array.from(pack.cells.haven), - "harbor" : Array.from(pack.cells.harbor), - "fl" : Array.from(pack.cells.fl), - "r" : Array.from(pack.cells.r), - "conf" : Array.from(pack.cells.conf), - "biome" : Array.from(pack.cells.biome), - "s" : Array.from(pack.cells.s), - "pop" : Array.from(pack.cells.pop), - "culture" : Array.from(pack.cells.culture), - "burg" : Array.from(pack.cells.burg), - "road" : Array.from(pack.cells.road), - "crossroad" : Array.from(pack.cells.crossroad), - "state" : Array.from(pack.cells.state), - "religion" : Array.from(pack.cells.religion), - "province" : Array.from(pack.cells.province) - }; - const cellObjArr = []; - { - CellConverted.i.forEach(value => { - const cellobj = { - "i" : value, - "v" : CellConverted.v[value], - "c" : CellConverted.c[value], - "p" : CellConverted.p[value], - "g" : CellConverted.g[value], - "h" : CellConverted.h[value], - "area" : CellConverted.area[value], - "f" : CellConverted.f[value], - "t" : CellConverted.t[value], - "haven" : CellConverted.haven[value], - "harbor" : CellConverted.harbor[value], - "fl" : CellConverted.fl[value], - "r" : CellConverted.r[value], - "conf" : CellConverted.conf[value], - "biome" : CellConverted.biome[value], - "s" : CellConverted.s[value], - "pop" : CellConverted.pop[value], - "culture" : CellConverted.culture[value], - "burg" : CellConverted.burg[value], - "road" : CellConverted.road[value], - "crossroad" : CellConverted.crossroad[value], - "state" : CellConverted.state[value], - "religion" : CellConverted.religion[value], - "province" : CellConverted.province[value] - } - cellObjArr.push(cellobj) - }) - }; - const cells = cellObjArr; - - const ExportData = {info, cells} - - TIME && console.timeEnd("createMapDataMinimalJson"); - return JSON.stringify(ExportData); + TIME && console.timeEnd("getFullDataJson"); + return JSON.stringify(exportData); } +// data excluding cells +function getMinimalDataJson() { + TIME && console.time("getMinimalDataJson"); + const info = getMapInfo(); + const settings = getSettings(); + const packData = { + features: pack.features, + cultures: pack.cultures, + burgs: pack.burgs, + states: pack.states, + provinces: pack.provinces, + religions: pack.religions, + rivers: pack.rivers, + markers: pack.markers + }; + const exportData = {info, settings, coords: mapCoordinates, pack: packData, biomes: biomesData, notes, nameBases}; + + TIME && console.timeEnd("getMinimalDataJson"); + return JSON.stringify(exportData); +} + +function getCellsDataJson() { + TIME && console.time("getCellsDataJson"); + + const info = getMapInfo(); + const cells = getCellsData(); + const exportData = {info, cells}; + + TIME && console.timeEnd("getCellsDataJson"); + return JSON.stringify(exportData); +}