mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 09:12:52 +00:00
82 lines
2.6 KiB
JavaScript
82 lines
2.6 KiB
JavaScript
/** @typedef {{ old: Tags; replace?: Tags }[]} DataDeprecated */
|
|
|
|
/** @param {Tags} tags @param {DataDeprecated} dataDeprecated */
|
|
export function getDeprecatedTags(tags, dataDeprecated) {
|
|
// if there are no tags, none can be deprecated
|
|
if (Object.keys(tags).length === 0) return [];
|
|
|
|
/** @type {DataDeprecated} */
|
|
var deprecated = [];
|
|
dataDeprecated.forEach((d) => {
|
|
var oldKeys = Object.keys(d.old);
|
|
if (d.replace) {
|
|
var hasExistingValues = Object.keys(d.replace).some((replaceKey) => {
|
|
if (!tags[replaceKey] || d.old[replaceKey]) return false;
|
|
var replaceValue = d.replace[replaceKey];
|
|
if (replaceValue === '*') return false;
|
|
if (replaceValue === tags[replaceKey]) return false;
|
|
return true;
|
|
});
|
|
// don't flag deprecated tags if the upgrade path would overwrite existing data - #7843
|
|
if (hasExistingValues) return;
|
|
}
|
|
|
|
var matchesDeprecatedTags = oldKeys.every((oldKey) => {
|
|
if (!tags[oldKey]) return false;
|
|
if (d.old[oldKey] === '*') return true;
|
|
if (d.old[oldKey] === tags[oldKey]) return true;
|
|
|
|
var vals = tags[oldKey].split(';').filter(Boolean);
|
|
if (vals.length === 0) {
|
|
return false;
|
|
} else if (vals.length > 1) {
|
|
return vals.indexOf(d.old[oldKey]) !== -1;
|
|
} else {
|
|
if (tags[oldKey] === d.old[oldKey]) {
|
|
if (d.replace && d.old[oldKey] === d.replace[oldKey]) {
|
|
var replaceKeys = Object.keys(d.replace);
|
|
return !replaceKeys.every((replaceKey) => {
|
|
return tags[replaceKey] === d.replace[replaceKey];
|
|
});
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
});
|
|
|
|
if (matchesDeprecatedTags) {
|
|
deprecated.push(d);
|
|
}
|
|
});
|
|
|
|
return deprecated;
|
|
}
|
|
|
|
/** @type {{ [key: string]: string[] }} */
|
|
var _deprecatedTagValuesByKey;
|
|
|
|
/** @param {DataDeprecated} dataDeprecated */
|
|
export function deprecatedTagValuesByKey(dataDeprecated) {
|
|
if (!_deprecatedTagValuesByKey) {
|
|
_deprecatedTagValuesByKey = {};
|
|
dataDeprecated.forEach((d) => {
|
|
var oldKeys = Object.keys(d.old);
|
|
if (oldKeys.length === 1) {
|
|
var oldKey = oldKeys[0];
|
|
var oldValue = d.old[oldKey];
|
|
if (oldValue !== '*') {
|
|
if (!_deprecatedTagValuesByKey[oldKey]) {
|
|
_deprecatedTagValuesByKey[oldKey] = [oldValue];
|
|
} else {
|
|
_deprecatedTagValuesByKey[oldKey].push(oldValue);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
return _deprecatedTagValuesByKey;
|
|
};
|