mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 01:02:58 +00:00
enhance and move geojson property sanitation to data layer module
This commit is contained in:
@@ -315,6 +315,21 @@ export function svgData(projection, context, dispatch) {
|
||||
}
|
||||
|
||||
|
||||
function stringifyGeojsonProperties(feature) {
|
||||
const properties = feature.properties;
|
||||
for (const key in properties) {
|
||||
const property = properties[key];
|
||||
if (typeof property === 'number' || typeof property === 'boolean' || Array.isArray(property)) {
|
||||
properties[key] = property.toString();
|
||||
} else if (property === null) {
|
||||
properties[key] = 'null';
|
||||
} else if (typeof property === 'object') {
|
||||
properties[key] = JSON.stringify(property);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
drawData.setFile = function(extension, data) {
|
||||
_template = null;
|
||||
_fileList = null;
|
||||
@@ -332,6 +347,11 @@ export function svgData(projection, context, dispatch) {
|
||||
case '.geojson':
|
||||
case '.json':
|
||||
gj = JSON.parse(data);
|
||||
if (gj.type === 'FeatureCollection') {
|
||||
gj.features.forEach(stringifyGeojsonProperties);
|
||||
} else if (gj.type === 'Feature') {
|
||||
stringifyGeojsonProperties(gj);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,20 +11,6 @@ import { t } from '../../core/localizer';
|
||||
import { utilArrayDifference, utilArrayIdentical } from '../../util/array';
|
||||
import { utilGetSetValue, utilNoAuto, utilRebind, utilTagDiff } from '../../util';
|
||||
|
||||
/**
|
||||
* This component is also used for custom map data,
|
||||
* and geojson can contain numbers as values.
|
||||
* We convert numbers to strings to avoid unexpected bugs.
|
||||
* @param {{ [key: string]: any }} tags
|
||||
*/
|
||||
function stringifyNumbers(tags) {
|
||||
for (const key in tags) {
|
||||
if (typeof tags[key] === 'number') {
|
||||
tags[key] = tags[key].toString();
|
||||
}
|
||||
}
|
||||
return tags;
|
||||
}
|
||||
|
||||
export function uiSectionRawTagEditor(id, context) {
|
||||
|
||||
@@ -609,7 +595,7 @@ export function uiSectionRawTagEditor(id, context) {
|
||||
|
||||
section.tags = function(val) {
|
||||
if (!arguments.length) return _tags;
|
||||
_tags = stringifyNumbers(val);
|
||||
_tags = val;
|
||||
return section;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user