mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-18 14:45:12 +02:00
Replace presets property of context with singleton
Remove utilPreset
This commit is contained in:
@@ -5,6 +5,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { behaviorEdit } from './edit';
|
||||
import { behaviorHover } from './hover';
|
||||
import { behaviorTail } from './tail';
|
||||
@@ -111,7 +112,7 @@ export function behaviorDraw(context) {
|
||||
}
|
||||
|
||||
function allowsVertex(d) {
|
||||
return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
|
||||
return d.geometry(context.graph()) === 'vertex' || presetManager.allowsVertex(d, context.graph());
|
||||
}
|
||||
|
||||
// related code
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { t } from '../core/localizer';
|
||||
import { actionAddMidpoint } from '../actions/add_midpoint';
|
||||
import { actionMoveNode } from '../actions/move_node';
|
||||
@@ -105,7 +106,7 @@ export function behaviorDrawWay(context, wayID, index, mode, startGraph) {
|
||||
|
||||
|
||||
function allowsVertex(d) {
|
||||
return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
|
||||
return d.geometry(context.graph()) === 'vertex' || presetManager.allowsVertex(d, context.graph());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { osmEntity, osmNote, QAItem } from '../osm';
|
||||
import { utilKeybinding, utilRebind } from '../util';
|
||||
|
||||
@@ -107,7 +108,7 @@ export function behaviorHover(context) {
|
||||
}
|
||||
|
||||
function allowsVertex(d) {
|
||||
return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
|
||||
return d.geometry(context.graph()) === 'vertex' || presetManager.allowsVertex(d, context.graph());
|
||||
}
|
||||
|
||||
function modeAllowsHover(target) {
|
||||
|
||||
+3
-10
@@ -14,7 +14,7 @@ import { coreValidator } from './validator';
|
||||
import { coreUploader } from './uploader';
|
||||
import { geoRawMercator } from '../geo/raw_mercator';
|
||||
import { modeSelect } from '../modes/select';
|
||||
import { presetIndex } from '../presets';
|
||||
import { presetManager } from '../presets';
|
||||
import { rendererBackground, rendererFeatures, rendererMap, rendererPhotos } from '../renderer';
|
||||
import { services } from '../services';
|
||||
import { uiInit } from '../ui/init';
|
||||
@@ -300,11 +300,6 @@ export function coreContext() {
|
||||
context.photos = () => _photos;
|
||||
|
||||
|
||||
/* Presets */
|
||||
let _presets;
|
||||
context.presets = () => _presets;
|
||||
|
||||
|
||||
/* Map */
|
||||
let _map;
|
||||
context.map = () => _map;
|
||||
@@ -452,8 +447,6 @@ export function coreContext() {
|
||||
_map = rendererMap(context);
|
||||
_photos = rendererPhotos(context);
|
||||
|
||||
_presets = presetIndex();
|
||||
|
||||
_ui = uiInit(context);
|
||||
|
||||
_connection = services.osm;
|
||||
@@ -466,13 +459,13 @@ export function coreContext() {
|
||||
const hash = utilStringQs(window.location.hash);
|
||||
|
||||
if (hash.presets) {
|
||||
_presets.addablePresetIDs(new Set(hash.presets.split(',')));
|
||||
presetManager.addablePresetIDs(new Set(hash.presets.split(',')));
|
||||
}
|
||||
|
||||
// kick off some async work
|
||||
localizer.ensureLoaded();
|
||||
_background.ensureLoaded();
|
||||
_presets.ensureLoaded();
|
||||
presetManager.ensureLoaded();
|
||||
|
||||
Object.values(services).forEach(service => {
|
||||
if (service && typeof service.init === 'function') {
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { t } from '../core/localizer';
|
||||
|
||||
import { actionAddMidpoint } from '../actions/add_midpoint';
|
||||
@@ -92,7 +93,7 @@ export function modeDragNode(context) {
|
||||
function shouldSnapToNode(target) {
|
||||
if (!_activeEntity) return false;
|
||||
return _activeEntity.geometry(context.graph()) !== 'vertex' ||
|
||||
(target.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(target, context.graph()));
|
||||
(target.geometry(context.graph()) === 'vertex' || presetManager.allowsVertex(target, context.graph()));
|
||||
}
|
||||
|
||||
|
||||
@@ -237,7 +238,7 @@ export function modeDragNode(context) {
|
||||
context.ui().flash
|
||||
.duration(4000)
|
||||
.text(t('operations.connect.' + isInvalid,
|
||||
{ relation: context.presets().item('type/restriction').name() }
|
||||
{ relation: presetManager.item('type/restriction').name() }
|
||||
))();
|
||||
}
|
||||
} else if (isInvalid) {
|
||||
|
||||
@@ -3,7 +3,7 @@ import { behaviorOperation } from '../behavior/operation';
|
||||
import { modeSelect } from '../modes/select';
|
||||
import { t } from '../core/localizer';
|
||||
import { uiCmd } from '../ui/cmd';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
|
||||
export function operationDowngrade(selectedIDs, context) {
|
||||
var affectedFeatureCount = 0;
|
||||
@@ -31,7 +31,7 @@ export function operationDowngrade(selectedIDs, context) {
|
||||
function downgradeTypeForEntityID(entityID) {
|
||||
var graph = context.graph();
|
||||
var entity = graph.entity(entityID);
|
||||
var preset = context.presets().match(entity, graph);
|
||||
var preset = presetManager.match(entity, graph);
|
||||
|
||||
if (!preset || preset.isFallback()) return null;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import { actionMoveNode } from '../actions/move_node';
|
||||
import { behaviorOperation } from '../behavior/operation';
|
||||
import { modeMove } from '../modes/move';
|
||||
import { t } from '../core/localizer';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
|
||||
export function operationExtract(selectedIDs, context) {
|
||||
var entityID = selectedIDs.length && selectedIDs[0];
|
||||
@@ -52,7 +52,7 @@ export function operationExtract(selectedIDs, context) {
|
||||
if (!entity.hasInterestingTags()) return false;
|
||||
|
||||
if (geometry === 'area') {
|
||||
var preset = context.presets().match(entity, graph);
|
||||
var preset = presetManager.match(entity, graph);
|
||||
return preset.geometry.indexOf('point') !== -1;
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ export function operationExtract(selectedIDs, context) {
|
||||
var disableReason = operation.disabled();
|
||||
if (disableReason) {
|
||||
return t('operations.extract.' + disableReason + '.' + geometry + '.single',
|
||||
{ relation: context.presets().item('type/restriction').name() });
|
||||
{ relation: presetManager.item('type/restriction').name() });
|
||||
} else {
|
||||
return t('operations.extract.description.' + geometry + '.single');
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import { actionMergePolygon } from '../actions/merge_polygon';
|
||||
|
||||
import { behaviorOperation } from '../behavior/operation';
|
||||
import { modeSelect } from '../modes/select';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
|
||||
export function operationMerge(selectedIDs, context) {
|
||||
|
||||
@@ -67,7 +67,7 @@ export function operationMerge(selectedIDs, context) {
|
||||
if (j && m && p && n) {
|
||||
if (j === 'restriction' || n === 'restriction') {
|
||||
return t('operations.merge.restriction',
|
||||
{ relation: context.presets().item('type/restriction').name() });
|
||||
{ relation: presetManager.item('type/restriction').name() });
|
||||
|
||||
} else if (p === 'incomplete_relation') {
|
||||
return t('operations.merge.incomplete_relation');
|
||||
|
||||
+128
-27
@@ -14,13 +14,15 @@ export { presetCollection };
|
||||
export { presetField };
|
||||
export { presetPreset };
|
||||
|
||||
let _mainPresetIndex = presetIndex(); // singleton
|
||||
export { _mainPresetIndex as presetManager };
|
||||
|
||||
//
|
||||
// `presetIndex` wraps a `presetCollection`
|
||||
// with methods for loading new data and returning defaults
|
||||
//
|
||||
export function presetIndex() {
|
||||
const dispatch = d3_dispatch('recentsChange');
|
||||
const dispatch = d3_dispatch('favoritePreset', 'recentsChange');
|
||||
const MAXRECENTS = 30;
|
||||
|
||||
// seed the preset lists with geometry fallbacks
|
||||
@@ -45,6 +47,7 @@ export function presetIndex() {
|
||||
let _universal = [];
|
||||
let _addablePresetIDs = null; // Set of preset IDs that the user can add
|
||||
let _recents;
|
||||
let _favorites;
|
||||
|
||||
// Index of presets by (geometry, tag key).
|
||||
let _geometryIndex = { point: {}, vertex: {}, line: {}, area: {}, relation: {} };
|
||||
@@ -322,7 +325,7 @@ export function presetIndex() {
|
||||
};
|
||||
|
||||
// pass a Set of addable preset ids
|
||||
_this.addablePresetIDs = function(val) {
|
||||
_this.addablePresetIDs = (val) => {
|
||||
if (!arguments.length) return _addablePresetIDs;
|
||||
|
||||
_addablePresetIDs = val;
|
||||
@@ -343,39 +346,47 @@ export function presetIndex() {
|
||||
};
|
||||
|
||||
|
||||
function RibbonItem(preset, geometry, source) {
|
||||
function RibbonItem(preset, source) {
|
||||
let item = {};
|
||||
item.preset = preset;
|
||||
item.geometry = geometry;
|
||||
item.source = source;
|
||||
|
||||
item.isFavorite = () => item.source === 'favorite';
|
||||
item.isRecent = () => item.source === 'recent';
|
||||
item.matches = (preset, geometry) => item.preset.id === preset.id && item.geometry === geometry;
|
||||
item.minified = () => ({ pID: item.preset.id, geom: item.geometry });
|
||||
item.matches = (preset) => item.preset.id === preset.id;
|
||||
item.minified = () => ({ pID: item.preset.id });
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
function ribbonItemForMinified(d, source) {
|
||||
if (d && d.pID && d.geom) {
|
||||
if (d && d.pID) {
|
||||
const preset = _this.item(d.pID);
|
||||
if (!preset) return null;
|
||||
|
||||
let geom = d.geom;
|
||||
// treat point and vertex features as one geometry
|
||||
if (geom === 'vertex') geom = 'point';
|
||||
|
||||
// iD's presets could have changed since this was saved,
|
||||
// so make sure it's still valid.
|
||||
if (preset.matchGeometry(geom) || (geom === 'point' && preset.matchGeometry('vertex'))) {
|
||||
return RibbonItem(preset, geom, source);
|
||||
}
|
||||
return RibbonItem(preset, source);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
_this.getGenericRibbonItems = () => {
|
||||
return ['point', 'line', 'area'].map(id => RibbonItem(_this.item(id), 'generic'));
|
||||
};
|
||||
|
||||
|
||||
_this.getAddable = () => {
|
||||
if (!_addablePresetIDs) return [];
|
||||
|
||||
return _addablePresetIDs.map((id) => {
|
||||
const preset = _this.item(id);
|
||||
if (preset) {
|
||||
return RibbonItem(preset, 'addable');
|
||||
}
|
||||
}).filter(Boolean);
|
||||
};
|
||||
|
||||
|
||||
function setRecents(items) {
|
||||
_recents = items;
|
||||
const minifiedItems = items.map(d => d.minified());
|
||||
@@ -398,8 +409,21 @@ export function presetIndex() {
|
||||
};
|
||||
|
||||
|
||||
_this.removeRecent = (preset, geometry) => {
|
||||
const item = _this.recentMatching(preset, geometry);
|
||||
_this.addRecent = (preset, besidePreset, after) => {
|
||||
const recents = _this.getRecents();
|
||||
|
||||
const beforeItem = _this.recentMatching(besidePreset);
|
||||
let toIndex = recents.indexOf(beforeItem);
|
||||
if (after) toIndex += 1;
|
||||
|
||||
const newItem = RibbonItem(preset, 'recent');
|
||||
recents.splice(toIndex, 0, newItem);
|
||||
setRecents(recents);
|
||||
};
|
||||
|
||||
|
||||
_this.removeRecent = (preset) => {
|
||||
const item = _this.recentMatching(preset);
|
||||
if (item) {
|
||||
let items = _this.getRecents();
|
||||
items.splice(items.indexOf(item), 1);
|
||||
@@ -408,11 +432,10 @@ export function presetIndex() {
|
||||
};
|
||||
|
||||
|
||||
_this.recentMatching = (preset, geometry) => {
|
||||
geometry = _this.fallback(geometry).id;
|
||||
_this.recentMatching = (preset) => {
|
||||
const items = _this.getRecents();
|
||||
for (let i in items) {
|
||||
if (items[i].matches(preset, geometry)) {
|
||||
if (items[i].matches(preset)) {
|
||||
return items[i];
|
||||
}
|
||||
}
|
||||
@@ -440,17 +463,15 @@ export function presetIndex() {
|
||||
};
|
||||
|
||||
|
||||
_this.setMostRecent = (preset, geometry) => {
|
||||
_this.setMostRecent = (preset) => {
|
||||
if (preset.searchable === false) return;
|
||||
|
||||
geometry = _this.fallback(geometry).id;
|
||||
|
||||
let items = _this.getRecents();
|
||||
let item = _this.recentMatching(preset, geometry);
|
||||
let item = _this.recentMatching(preset);
|
||||
if (item) {
|
||||
items.splice(items.indexOf(item), 1);
|
||||
} else {
|
||||
item = RibbonItem(preset, geometry, 'recent');
|
||||
item = RibbonItem(preset, 'recent');
|
||||
}
|
||||
|
||||
// remove the last recent (first in, first out)
|
||||
@@ -463,6 +484,86 @@ export function presetIndex() {
|
||||
setRecents(items);
|
||||
};
|
||||
|
||||
function setFavorites(items) {
|
||||
_favorites = items;
|
||||
const minifiedItems = items.map(d => d.minified());
|
||||
prefs('preset_favorites', JSON.stringify(minifiedItems));
|
||||
|
||||
// call update
|
||||
dispatch.call('favoritePreset');
|
||||
}
|
||||
|
||||
_this.addFavorite = (preset, besidePreset, after) => {
|
||||
const favorites = _this.getFavorites();
|
||||
|
||||
const beforeItem = _this.favoriteMatching(besidePreset);
|
||||
let toIndex = favorites.indexOf(beforeItem);
|
||||
if (after) toIndex += 1;
|
||||
|
||||
const newItem = RibbonItem(preset, 'favorite');
|
||||
favorites.splice(toIndex, 0, newItem);
|
||||
setFavorites(favorites);
|
||||
};
|
||||
|
||||
_this.toggleFavorite = (preset) => {
|
||||
const favs = _this.getFavorites();
|
||||
const favorite = _this.favoriteMatching(preset);
|
||||
if (favorite) {
|
||||
favs.splice(favs.indexOf(favorite), 1);
|
||||
} else {
|
||||
// only allow 10 favorites
|
||||
if (favs.length === 10) {
|
||||
// remove the last favorite (last in, first out)
|
||||
favs.pop();
|
||||
}
|
||||
// append array
|
||||
favs.push(RibbonItem(preset, 'favorite'));
|
||||
}
|
||||
setFavorites(favs);
|
||||
};
|
||||
|
||||
|
||||
_this.removeFavorite = (preset) => {
|
||||
const item = _this.favoriteMatching(preset);
|
||||
if (item) {
|
||||
const items = _this.getFavorites();
|
||||
items.splice(items.indexOf(item), 1);
|
||||
setFavorites(items);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
_this.getFavorites = () => {
|
||||
if (!_favorites) {
|
||||
|
||||
// fetch from local storage
|
||||
let rawFavorites = JSON.parse(prefs('preset_favorites'));
|
||||
|
||||
if (!rawFavorites) {
|
||||
rawFavorites = [];
|
||||
prefs('preset_favorites', JSON.stringify(rawFavorites));
|
||||
}
|
||||
|
||||
_favorites = rawFavorites.reduce((output, d) => {
|
||||
const item = ribbonItemForMinified(d, 'favorite');
|
||||
if (item && item.preset.addable()) output.push(item);
|
||||
return output;
|
||||
}, []);
|
||||
}
|
||||
return _favorites;
|
||||
};
|
||||
|
||||
|
||||
_this.favoriteMatching = (preset) => {
|
||||
const favs = _this.getFavorites();
|
||||
for (let index in favs) {
|
||||
if (favs[index].matches(preset)) {
|
||||
return favs[index];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
|
||||
return utilRebind(_this, dispatch, 'on');
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import {
|
||||
geoExtent, geoPolygonIntersectsPolygon, geoPathLength,
|
||||
geoScaleToZoom, geoVecInterp, geoVecLength
|
||||
} from '../geo';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { osmEntity } from '../osm';
|
||||
import { utilDetect } from '../util/detect';
|
||||
import { utilDisplayName, utilDisplayNameForPath, utilEntitySelector } from '../util';
|
||||
@@ -200,7 +200,7 @@ export function svgLabels(projection, context) {
|
||||
.merge(icons)
|
||||
.attr('transform', get(labels, 'transform'))
|
||||
.attr('xlink:href', function(d) {
|
||||
var preset = context.presets().match(d, context.graph());
|
||||
var preset = presetManager.match(d, context.graph());
|
||||
var picon = preset && preset.icon;
|
||||
|
||||
if (!picon) {
|
||||
@@ -312,7 +312,7 @@ export function svgLabels(projection, context) {
|
||||
}
|
||||
|
||||
// Determine which entities are label-able
|
||||
var preset = geometry === 'area' && context.presets().match(entity, graph);
|
||||
var preset = geometry === 'area' && presetManager.match(entity, graph);
|
||||
var icon = preset && !blacklisted(preset) && preset.icon;
|
||||
|
||||
if (!icon && !utilDisplayName(entity))
|
||||
@@ -559,7 +559,7 @@ export function svgLabels(projection, context) {
|
||||
|
||||
if (isNaN(centroid[0]) || areaWidth < 20) return;
|
||||
|
||||
var preset = context.presets().match(entity, context.graph());
|
||||
var preset = presetManager.match(entity, context.graph());
|
||||
var picon = preset && preset.icon;
|
||||
var iconSize = 17;
|
||||
var padding = 2;
|
||||
|
||||
@@ -3,6 +3,7 @@ import { geoScaleToZoom } from '../geo';
|
||||
import { osmEntity } from '../osm';
|
||||
import { svgPointTransform } from './helpers';
|
||||
import { svgTagClasses } from './tag_classes';
|
||||
import { presetManager } from '../presets';
|
||||
|
||||
export function svgPoints(projection, context) {
|
||||
|
||||
@@ -141,7 +142,7 @@ export function svgPoints(projection, context) {
|
||||
groups.select('.stroke'); // propagate bound data
|
||||
groups.select('.icon') // propagate bound data
|
||||
.attr('xlink:href', function(entity) {
|
||||
var preset = context.presets().match(entity, graph);
|
||||
var preset = presetManager.match(entity, graph);
|
||||
var picon = preset && preset.icon;
|
||||
|
||||
if (!picon) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import deepEqual from 'fast-deep-equal';
|
||||
import { select as d3_select } from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { geoScaleToZoom } from '../geo';
|
||||
import { osmEntity } from '../osm';
|
||||
import { svgPassiveVertex, svgPointTransform } from './helpers';
|
||||
@@ -54,7 +55,7 @@ export function svgVertices(projection, context) {
|
||||
|
||||
icons[entity.id] =
|
||||
entity.hasInterestingTags() &&
|
||||
context.presets().match(entity, graph).icon;
|
||||
presetManager.match(entity, graph).icon;
|
||||
|
||||
return icons[entity.id];
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { dispatch as d3_dispatch } from 'd3-dispatch';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { t } from '../core/localizer';
|
||||
import { svgIcon } from '../svg/icon';
|
||||
import { uiCombobox} from './combobox';
|
||||
@@ -27,7 +28,7 @@ export function uiChangesetEditor(context) {
|
||||
|
||||
if (!_fieldsArr) {
|
||||
initial = true;
|
||||
var presets = context.presets();
|
||||
var presets = presetManager;
|
||||
|
||||
_fieldsArr = [
|
||||
uiField(context, presets.field('comment'), null, { show: true, revert: false }),
|
||||
|
||||
@@ -2,6 +2,7 @@ import { dispatch as d3_dispatch } from 'd3-dispatch';
|
||||
import { event as d3_event } from 'd3-selection';
|
||||
import deepEqual from 'fast-deep-equal';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { t, localizer } from '../core/localizer';
|
||||
import { actionChangeTags } from '../actions/change_tags';
|
||||
import { modeBrowse } from '../modes/browse';
|
||||
@@ -318,7 +319,7 @@ export function uiEntityEditor(context) {
|
||||
var entity = graph.hasEntity(_entityIDs[i]);
|
||||
if (!entity) return;
|
||||
|
||||
var match = context.presets().match(entity, graph);
|
||||
var match = presetManager.match(entity, graph);
|
||||
|
||||
if (!counts[match.id]) counts[match.id] = 0;
|
||||
counts[match.id] += 1;
|
||||
@@ -327,7 +328,7 @@ export function uiEntityEditor(context) {
|
||||
var matches = Object.keys(counts).sort(function(p1, p2) {
|
||||
return counts[p2] - counts[p1];
|
||||
}).map(function(pID) {
|
||||
return context.presets().item(pID);
|
||||
return presetManager.item(pID);
|
||||
});
|
||||
|
||||
// A "weak" preset doesn't set any tags. (e.g. "Address")
|
||||
|
||||
@@ -2,8 +2,9 @@ import {
|
||||
event as d3_event,
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import * as sexagesimal from '@mapbox/sexagesimal';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { t } from '../core/localizer';
|
||||
import { dmsCoordinatePair } from '../util/units';
|
||||
import { coreGraph } from '../core/graph';
|
||||
@@ -154,7 +155,7 @@ export function uiFeatureList(context) {
|
||||
var name = utilDisplayName(entity) || '';
|
||||
if (name.toLowerCase().indexOf(q) < 0) continue;
|
||||
|
||||
var matched = context.presets().match(entity, graph);
|
||||
var matched = presetManager.match(entity, graph);
|
||||
var type = (matched && matched.name()) || utilDisplayType(entity.id);
|
||||
var extent = entity.extent(graph);
|
||||
var distance = extent ? geoSphericalDistance(visibleCenter, extent.center()) : 0;
|
||||
@@ -191,7 +192,7 @@ export function uiFeatureList(context) {
|
||||
|
||||
var tempEntity = osmEntity(attrs);
|
||||
var tempGraph = coreGraph([tempEntity]);
|
||||
var matched = context.presets().match(tempEntity, tempGraph);
|
||||
var matched = presetManager.match(tempEntity, tempGraph);
|
||||
var type = (matched && matched.name()) || utilDisplayType(id);
|
||||
|
||||
result.push({
|
||||
|
||||
@@ -2,6 +2,7 @@ import { dispatch as d3_dispatch } from 'd3-dispatch';
|
||||
import { select as d3_select } from 'd3-selection';
|
||||
import * as countryCoder from '@ideditor/country-coder';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { fileFetcher } from '../../core/file_fetcher';
|
||||
import { geoExtent, geoChooseEdge, geoSphericalDistance } from '../../geo';
|
||||
import { uiCombobox } from '../combobox';
|
||||
@@ -12,7 +13,7 @@ import { t } from '../../core/localizer';
|
||||
export function uiFieldAddress(field, context) {
|
||||
var dispatch = d3_dispatch('init', 'change');
|
||||
var wrap = d3_select(null);
|
||||
var addrField = context.presets().field('address'); // needed for placeholder strings
|
||||
var addrField = presetManager.field('address'); // needed for placeholder strings
|
||||
|
||||
var _isInitialized = false;
|
||||
var _entityIDs = [];
|
||||
|
||||
@@ -2,6 +2,7 @@ import { dispatch as d3_dispatch } from 'd3-dispatch';
|
||||
import { select as d3_select, event as d3_event } from 'd3-selection';
|
||||
import * as countryCoder from '@ideditor/country-coder';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { fileFetcher } from '../../core/file_fetcher';
|
||||
import { t, localizer } from '../../core/localizer';
|
||||
import { geoExtent } from '../../geo';
|
||||
@@ -33,7 +34,7 @@ export function uiFieldText(field, context) {
|
||||
|
||||
function i(selection) {
|
||||
var entity = _entityIDs.length && context.hasEntity(_entityIDs[0]);
|
||||
var preset = entity && context.presets().match(entity, context.graph());
|
||||
var preset = entity && presetManager.match(entity, context.graph());
|
||||
var isLocked = preset && preset.suggestion && field.id === 'brand';
|
||||
field.locked(isLocked);
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import { dispatch as d3_dispatch } from 'd3-dispatch';
|
||||
import { select as d3_select, event as d3_event } from 'd3-selection';
|
||||
import * as countryCoder from '@ideditor/country-coder';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { fileFetcher } from '../../core/file_fetcher';
|
||||
import { t, localizer } from '../../core/localizer';
|
||||
import { geoExtent } from '../../geo';
|
||||
@@ -36,7 +37,7 @@ export function uiFieldLocalized(field, context) {
|
||||
.catch(function() { /* ignore */ });
|
||||
|
||||
|
||||
var allSuggestions = context.presets().collection.filter(function(p) {
|
||||
var allSuggestions = presetManager.collection.filter(function(p) {
|
||||
return p.suggestion === true;
|
||||
});
|
||||
|
||||
@@ -104,7 +105,7 @@ export function uiFieldLocalized(field, context) {
|
||||
// assume the name has already been confirmed if its source has been researched
|
||||
if (entity.tags['name:etymology:wikidata']) return true;
|
||||
|
||||
var preset = context.presets().match(entity, context.graph());
|
||||
var preset = presetManager.match(entity, context.graph());
|
||||
var isSuggestion = preset && preset.suggestion;
|
||||
var showsBrand = preset && preset.originalFields.filter(function(d) {
|
||||
return d.id === 'brand';
|
||||
@@ -149,7 +150,7 @@ export function uiFieldLocalized(field, context) {
|
||||
calcLocked();
|
||||
var isLocked = field.locked();
|
||||
var singularEntity = _entityIDs.length === 1 && context.hasEntity(_entityIDs[0]);
|
||||
var preset = singularEntity && context.presets().match(singularEntity, context.graph());
|
||||
var preset = singularEntity && presetManager.match(singularEntity, context.graph());
|
||||
|
||||
var wrap = selection.selectAll('.form-field-input-wrap')
|
||||
.data([0]);
|
||||
@@ -258,7 +259,7 @@ export function uiFieldLocalized(field, context) {
|
||||
var latest = _entityIDs.length === 1 && context.hasEntity(_entityIDs[0]);
|
||||
if (!latest) return; // deleting the entity blurred the field?
|
||||
|
||||
var preset = context.presets().match(latest, context.graph());
|
||||
var preset = presetManager.match(latest, context.graph());
|
||||
if (preset && preset.suggestion) return; // already accepted
|
||||
|
||||
// note: here we are testing against "decorated" names, i.e. 'Starbucks – Cafe'
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { dispatch as d3_dispatch } from 'd3-dispatch';
|
||||
import { select as d3_select } from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { t } from '../../core/localizer';
|
||||
import { uiField } from '../field';
|
||||
import { utilArrayUnion, utilRebind } from '../../util';
|
||||
@@ -76,8 +77,8 @@ export function uiFieldRadio(field, context) {
|
||||
|
||||
function structureExtras(selection, tags) {
|
||||
var selected = selectedKey() || tags.layer !== undefined;
|
||||
var type = context.presets().field(selected);
|
||||
var layer = context.presets().field('layer');
|
||||
var type = presetManager.field(selected);
|
||||
var layer = presetManager.field('layer');
|
||||
var showLayer = (selected === 'bridge' || selected === 'tunnel' || tags.layer !== undefined);
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { dispatch as d3_dispatch } from 'd3-dispatch';
|
||||
import { select as d3_select, event as d3_event } from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { prefs } from '../../core/preferences';
|
||||
import { t, localizer } from '../../core/localizer';
|
||||
import { actionRestrictTurn } from '../../actions/restrict_turn';
|
||||
@@ -609,7 +610,7 @@ export function uiFieldRestrictions(field, context) {
|
||||
function displayName(entityID, graph) {
|
||||
var entity = graph.entity(entityID);
|
||||
var name = utilDisplayName(entity) || '';
|
||||
var matched = context.presets().match(entity, graph);
|
||||
var matched = presetManager.match(entity, graph);
|
||||
var type = (matched && matched.name()) || utilDisplayType(entity.id);
|
||||
return name || type;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { modeSelect } from '../modes/select';
|
||||
import { t } from '../core/localizer';
|
||||
import { utilDisplayName, utilHighlightEntities, utilEntityRoot } from '../util';
|
||||
@@ -97,7 +98,7 @@ export function uiImproveOsmDetails(context) {
|
||||
let name = utilDisplayName(entity); // try to use common name
|
||||
|
||||
if (!name && !isObjectLink) {
|
||||
const preset = context.presets().match(entity, context.graph());
|
||||
const preset = presetManager.match(entity, context.graph());
|
||||
name = preset && !preset.isFallback() && preset.name(); // fallback to preset name
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import {
|
||||
|
||||
import { prefs } from '../core/preferences';
|
||||
import { t, localizer } from '../core/localizer';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { behaviorHash } from '../behavior';
|
||||
import { modeBrowse } from '../modes/browse';
|
||||
import { svgDefs, svgIcon } from '../svg';
|
||||
@@ -421,7 +421,7 @@ export function uiInit(context) {
|
||||
return _loadPromise = Promise.all([
|
||||
// must have strings and presets before loading the UI
|
||||
localizer.ensureLoaded(),
|
||||
context.presets().ensureLoaded()
|
||||
presetManager.ensureLoaded()
|
||||
])
|
||||
.then(() => {
|
||||
if (!context.container().empty()) render(context.container());
|
||||
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
interpolateNumber as d3_interpolateNumber
|
||||
} from 'd3-interpolate';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { t } from '../../core/localizer';
|
||||
import { modeBrowse } from '../../modes/browse';
|
||||
import { modeSelect } from '../../modes/select';
|
||||
@@ -19,8 +20,8 @@ import { icon, pad, transitionTime } from './helper';
|
||||
export function uiIntroArea(context, reveal) {
|
||||
var dispatch = d3_dispatch('done');
|
||||
var playground = [-85.63552, 41.94159];
|
||||
var playgroundPreset = context.presets().item('leisure/playground');
|
||||
var descriptionField = context.presets().field('description');
|
||||
var playgroundPreset = presetManager.item('leisure/playground');
|
||||
var descriptionField = presetManager.field('description');
|
||||
var timeouts = [];
|
||||
var _areaID;
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
event as d3_event
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { t, localizer } from '../../core/localizer';
|
||||
import { modeBrowse } from '../../modes/browse';
|
||||
import { modeSelect } from '../../modes/select';
|
||||
@@ -15,9 +16,9 @@ export function uiIntroBuilding(context, reveal) {
|
||||
var dispatch = d3_dispatch('done');
|
||||
var house = [-85.62815, 41.95638];
|
||||
var tank = [-85.62732, 41.95347];
|
||||
var buildingCatetory = context.presets().item('category-building');
|
||||
var housePreset = context.presets().item('building/house');
|
||||
var tankPreset = context.presets().item('man_made/storage_tank');
|
||||
var buildingCatetory = presetManager.item('category-building');
|
||||
var housePreset = presetManager.item('building/house');
|
||||
var tankPreset = presetManager.item('man_made/storage_tank');
|
||||
var timeouts = [];
|
||||
var _houseID = null;
|
||||
var _tankID = null;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { t, localizer } from '../../core/localizer';
|
||||
import { localize } from './helper';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { prefs } from '../../core/preferences';
|
||||
import { fileFetcher } from '../../core/file_fetcher';
|
||||
import { coreGraph } from '../../core/graph';
|
||||
@@ -124,7 +125,7 @@ export function uiIntro(context) {
|
||||
let chapters = chapterFlow.map((chapter, i) => {
|
||||
let s = chapterUi[chapter](context, curtain.reveal)
|
||||
.on('done', () => {
|
||||
context.presets().init(); // clear away "recent" presets
|
||||
presetManager.init(); // clear away "recent" presets
|
||||
|
||||
buttons
|
||||
.filter(d => d.title === s.title)
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { t, localizer } from '../../core/localizer';
|
||||
import { geoSphericalDistance } from '../../geo';
|
||||
import { modeBrowse } from '../../modes/browse';
|
||||
@@ -21,8 +22,8 @@ export function uiIntroLine(context, reveal) {
|
||||
var tulipRoadStart = [-85.6297754121684, 41.95805253325314];
|
||||
var tulipRoadMidpoint = [-85.62975395449628, 41.95787501510204];
|
||||
var tulipRoadIntersection = [-85.62974496187628, 41.95742515554585];
|
||||
var roadCategory = context.presets().item('category-road_minor');
|
||||
var residentialPreset = context.presets().item('highway/residential');
|
||||
var roadCategory = presetManager.item('category-road_minor');
|
||||
var residentialPreset = presetManager.item('highway/residential');
|
||||
var woodRoadID = 'w525';
|
||||
var woodRoadEndID = 'n2862';
|
||||
var woodRoadAddNode = [-85.62390110349587, 41.95397111462291];
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { t } from '../../core/localizer';
|
||||
import { modeBrowse } from '../../modes/browse';
|
||||
import { modeSelect } from '../../modes/select';
|
||||
@@ -20,8 +21,8 @@ export function uiIntroNavigation(context, reveal) {
|
||||
var springStreetId = 'w397';
|
||||
var springStreetEndId = 'n1834';
|
||||
var springStreet = [-85.63582, 41.94255];
|
||||
var onewayField = context.presets().field('oneway');
|
||||
var maxspeedField = context.presets().field('maxspeed');
|
||||
var onewayField = presetManager.field('oneway');
|
||||
var maxspeedField = presetManager.field('maxspeed');
|
||||
|
||||
|
||||
var chapter = {
|
||||
@@ -290,7 +291,7 @@ export function uiIntroNavigation(context, reveal) {
|
||||
|
||||
// preset match, in case the user happened to change it.
|
||||
var entity = context.entity(context.selectedIDs()[0]);
|
||||
var preset = context.presets().match(entity, context.graph());
|
||||
var preset = presetManager.match(entity, context.graph());
|
||||
|
||||
var onClick = function() { continueTo(fieldsTownHall); };
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { t, localizer } from '../../core/localizer';
|
||||
import { actionChangePreset } from '../../actions/change_preset';
|
||||
import { modeBrowse } from '../../modes/browse';
|
||||
@@ -17,7 +18,7 @@ export function uiIntroPoint(context, reveal) {
|
||||
var timeouts = [];
|
||||
var intersection = [-85.63279, 41.94394];
|
||||
var building = [-85.632422, 41.944045];
|
||||
var cafePreset = context.presets().item('amenity/cafe');
|
||||
var cafePreset = presetManager.item('amenity/cafe');
|
||||
var _pointID = null;
|
||||
|
||||
|
||||
@@ -284,7 +285,7 @@ export function uiIntroPoint(context, reveal) {
|
||||
if (!entity) return chapter.restart();
|
||||
|
||||
// make sure it's still a cafe, in case user somehow changed it..
|
||||
var oldPreset = context.presets().match(entity, context.graph());
|
||||
var oldPreset = presetManager.match(entity, context.graph());
|
||||
context.replace(actionChangePreset(_pointID, oldPreset, cafePreset));
|
||||
|
||||
context.enter(modeBrowse(context));
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { modeSelect } from '../modes/select';
|
||||
import { t } from '../core/localizer';
|
||||
import { utilDisplayName, utilHighlightEntities, utilEntityRoot } from '../util';
|
||||
@@ -102,7 +103,7 @@ export function uiKeepRightDetails(context) {
|
||||
let name = utilDisplayName(entity); // try to use common name
|
||||
|
||||
if (!name && !isObjectLink) {
|
||||
const preset = context.presets().match(entity, context.graph());
|
||||
const preset = presetManager.match(entity, context.graph());
|
||||
name = preset && !preset.isFallback() && preset.name(); // fallback to preset name
|
||||
}
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ export function uiNoteEditor(context) {
|
||||
|
||||
// // if new note, show categories to pick from
|
||||
// if (_note.isNew()) {
|
||||
// var presets = context.presets();
|
||||
// var presets = presetManager;
|
||||
|
||||
// // NOTE: this key isn't a age and therefore there is no documentation (yet)
|
||||
// _fieldsArr = [
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { modeSelect } from '../modes/select';
|
||||
import { t } from '../core/localizer';
|
||||
import { services } from '../services';
|
||||
@@ -180,7 +181,7 @@ export function uiOsmoseDetails(context) {
|
||||
let name = utilDisplayName(entity); // try to use common name
|
||||
|
||||
if (!name) {
|
||||
const preset = context.presets().match(entity, context.graph());
|
||||
const preset = presetManager.match(entity, context.graph());
|
||||
name = preset && !preset.isFallback() && preset.name(); // fallback to preset name
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
import { select as d3_select } from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { prefs } from '../core/preferences';
|
||||
import { svgIcon, svgTagClasses } from '../svg';
|
||||
import { utilFunctor } from '../util';
|
||||
|
||||
|
||||
export function uiPresetIcon(context) {
|
||||
export function uiPresetIcon() {
|
||||
let _preset;
|
||||
let _geometry;
|
||||
let _sizeClass = 'medium';
|
||||
@@ -341,7 +342,7 @@ export function uiPresetIcon(context) {
|
||||
let routeType = p.tags.type === 'waterway' ? 'waterway' : p.tags.route;
|
||||
const segmentPresetIDs = routeSegments[routeType];
|
||||
for (let i in segmentPresetIDs) {
|
||||
const segmentPreset = context.presets().item(segmentPresetIDs[i]);
|
||||
const segmentPreset = presetManager.item(segmentPresetIDs[i]);
|
||||
const segmentTagClasses = svgTagClasses().getClassesString(segmentPreset.tags, '');
|
||||
route.selectAll(`path.stroke.segment${i}`)
|
||||
.attr('class', `segment${i} line stroke ${segmentTagClasses}`);
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { t, localizer } from '../core/localizer';
|
||||
import { actionChangePreset } from '../actions/change_preset';
|
||||
import { operationDelete } from '../operations/delete';
|
||||
@@ -27,7 +28,7 @@ export function uiPresetList(context) {
|
||||
function presetList(selection) {
|
||||
if (!_entityIDs) return;
|
||||
|
||||
var presets = context.presets().matchAllGeometry(entityGeometries());
|
||||
var presets = presetManager.matchAllGeometry(entityGeometries());
|
||||
|
||||
selection.html('');
|
||||
|
||||
@@ -105,7 +106,7 @@ export function uiPresetList(context) {
|
||||
search: value
|
||||
});
|
||||
} else {
|
||||
results = context.presets().defaults(entityGeometries()[0], 36, !context.inIntro());
|
||||
results = presetManager.defaults(entityGeometries()[0], 36, !context.inIntro());
|
||||
messageText = t('inspector.choose');
|
||||
}
|
||||
list.call(drawList, results);
|
||||
@@ -140,7 +141,7 @@ export function uiPresetList(context) {
|
||||
var list = listWrap
|
||||
.append('div')
|
||||
.attr('class', 'preset-list')
|
||||
.call(drawList, context.presets().defaults(entityGeometries()[0], 36, !context.inIntro()));
|
||||
.call(drawList, presetManager.defaults(entityGeometries()[0], 36, !context.inIntro()));
|
||||
|
||||
context.features().on('change.preset-list', updateForFeatureHiddenState);
|
||||
}
|
||||
@@ -283,7 +284,7 @@ export function uiPresetList(context) {
|
||||
.append('button')
|
||||
.attr('class', 'preset-list-button')
|
||||
.classed('expanded', false)
|
||||
.call(uiPresetIcon(context)
|
||||
.call(uiPresetIcon()
|
||||
.geometry(geometries.length === 1 && geometries[0])
|
||||
.preset(preset))
|
||||
.on('click', click)
|
||||
@@ -373,7 +374,7 @@ export function uiPresetList(context) {
|
||||
|
||||
var button = wrap.append('button')
|
||||
.attr('class', 'preset-list-button')
|
||||
.call(uiPresetIcon(context)
|
||||
.call(uiPresetIcon()
|
||||
.geometry(geometries.length === 1 && geometries[0])
|
||||
.preset(preset))
|
||||
.on('click', item.choose)
|
||||
@@ -400,13 +401,13 @@ export function uiPresetList(context) {
|
||||
item.choose = function() {
|
||||
if (d3_select(this).classed('disabled')) return;
|
||||
if (!context.inIntro()) {
|
||||
context.presets().setMostRecent(preset, entityGeometries()[0]);
|
||||
presetManager.setMostRecent(preset, entityGeometries()[0]);
|
||||
}
|
||||
context.perform(
|
||||
function(graph) {
|
||||
for (var i in _entityIDs) {
|
||||
var entityID = _entityIDs[i];
|
||||
var oldPreset = context.presets().match(graph.entity(entityID), graph);
|
||||
var oldPreset = presetManager.match(graph.entity(entityID), graph);
|
||||
graph = actionChangePreset(entityID, oldPreset, preset)(graph);
|
||||
}
|
||||
return graph;
|
||||
@@ -475,7 +476,7 @@ export function uiPresetList(context) {
|
||||
_entityIDs = val;
|
||||
if (_entityIDs && _entityIDs.length) {
|
||||
var presets = _entityIDs.map(function(entityID) {
|
||||
return context.presets().match(context.entity(entityID), context.graph());
|
||||
return presetManager.match(context.entity(entityID), context.graph());
|
||||
});
|
||||
presetList.presets(presets);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { select as d3_select } from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { fileFetcher } from '../../core/file_fetcher';
|
||||
import { t } from '../../core/localizer';
|
||||
import { JXON } from '../../util/jxon';
|
||||
@@ -73,7 +74,7 @@ export function uiSectionChanges(context) {
|
||||
.append('strong')
|
||||
.attr('class', 'entity-type')
|
||||
.text(function(d) {
|
||||
var matched = context.presets().match(d.entity, d.graph);
|
||||
var matched = presetManager.match(d.entity, d.graph);
|
||||
return (matched && matched.name()) || utilDisplayType(d.entity.id);
|
||||
});
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
event as d3_event
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { utilArrayIdentical } from '../../util/array';
|
||||
import { t } from '../../core/localizer';
|
||||
import { uiTooltip } from '../tooltip';
|
||||
@@ -93,9 +94,9 @@ export function uiSectionFeatureType(context) {
|
||||
|
||||
var geometries = entityGeometries();
|
||||
selection.select('.preset-list-item button')
|
||||
.call(uiPresetIcon(context)
|
||||
.call(uiPresetIcon()
|
||||
.geometry(_presets.length === 1 ? (geometries.length === 1 && geometries[0]) : null)
|
||||
.preset(_presets.length === 1 ? _presets[0] : context.presets().item('point'))
|
||||
.preset(_presets.length === 1 ? _presets[0] : presetManager.item('point'))
|
||||
);
|
||||
|
||||
// NOTE: split on en-dash, not a hypen (to avoid conflict with hyphenated names)
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
event as d3_event
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { t, localizer } from '../../core/localizer';
|
||||
import { utilArrayIdentical } from '../../util/array';
|
||||
import { utilArrayUnion, utilRebind } from '../../util';
|
||||
@@ -36,7 +37,7 @@ export function uiSectionPresetFields(context) {
|
||||
return geoms[graph.entity(entityID).geometry(graph)] = true;
|
||||
}, {}));
|
||||
|
||||
var presetsManager = context.presets();
|
||||
var presetsManager = presetManager;
|
||||
|
||||
var allFields = [];
|
||||
var allMoreFields = [];
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { t } from '../../core/localizer';
|
||||
import { actionChangeMember } from '../../actions/change_member';
|
||||
import { actionDeleteMember } from '../../actions/delete_member';
|
||||
@@ -177,7 +178,7 @@ export function uiSectionRawMemberEditor(context) {
|
||||
.append('span')
|
||||
.attr('class', 'member-entity-type')
|
||||
.text(function(d) {
|
||||
var matched = context.presets().match(d.member, context.graph());
|
||||
var matched = presetManager.match(d.member, context.graph());
|
||||
return (matched && matched.name()) || utilDisplayType(d.member.id);
|
||||
});
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { t, localizer } from '../../core/localizer';
|
||||
|
||||
import { actionAddEntity } from '../../actions/add_entity';
|
||||
@@ -128,7 +129,7 @@ export function uiSectionRawMembershipEditor(context) {
|
||||
var graph = context.graph();
|
||||
|
||||
function baseDisplayLabel(entity) {
|
||||
var matched = context.presets().match(entity, graph);
|
||||
var matched = presetManager.match(entity, graph);
|
||||
var presetName = (matched && matched.name()) || t('inspector.relation');
|
||||
var entityName = utilDisplayName(entity) || '';
|
||||
|
||||
@@ -238,7 +239,7 @@ export function uiSectionRawMembershipEditor(context) {
|
||||
.append('span')
|
||||
.attr('class', 'member-entity-type')
|
||||
.text(function(d) {
|
||||
var matched = context.presets().match(d.relation, context.graph());
|
||||
var matched = presetManager.match(d.relation, context.graph());
|
||||
return (matched && matched.name()) || t('inspector.relation');
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { event as d3_event, select as d3_select } from 'd3-selection';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { modeSelect } from '../../modes/select';
|
||||
import { osmEntity } from '../../osm';
|
||||
import { svgIcon } from '../../svg/icon';
|
||||
@@ -118,7 +119,7 @@ export function uiSectionSelectionList(context) {
|
||||
});
|
||||
|
||||
items.selectAll('.entity-type')
|
||||
.text(function(entity) { return context.presets().match(entity, context.graph()).name(); });
|
||||
.text(function(entity) { return presetManager.match(entity, context.graph()).name(); });
|
||||
|
||||
items.selectAll('.entity-name')
|
||||
.text(function(d) {
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
modeBrowse
|
||||
} from '../../modes';
|
||||
|
||||
import { presetManager } from '../../presets';
|
||||
import { t } from '../../core/localizer';
|
||||
import { svgIcon } from '../../svg';
|
||||
import { uiTooltip } from '../tooltip';
|
||||
@@ -25,21 +26,21 @@ export function uiToolOldDrawModes(context) {
|
||||
title: t('modes.add_point.title'),
|
||||
button: 'point',
|
||||
description: t('modes.add_point.description'),
|
||||
preset: context.presets().item('point'),
|
||||
preset: presetManager.item('point'),
|
||||
key: '1'
|
||||
}),
|
||||
modeAddLine(context, {
|
||||
title: t('modes.add_line.title'),
|
||||
button: 'line',
|
||||
description: t('modes.add_line.description'),
|
||||
preset: context.presets().item('line'),
|
||||
preset: presetManager.item('line'),
|
||||
key: '2'
|
||||
}),
|
||||
modeAddArea(context, {
|
||||
title: t('modes.add_area.title'),
|
||||
button: 'area',
|
||||
description: t('modes.add_area.description'),
|
||||
preset: context.presets().item('area'),
|
||||
preset: presetManager.item('area'),
|
||||
key: '3'
|
||||
})
|
||||
];
|
||||
|
||||
@@ -36,7 +36,6 @@ export { utilNoAuto } from './util';
|
||||
export { utilObjectOmit } from './object';
|
||||
export { utilPrefixCSSProperty } from './util';
|
||||
export { utilPrefixDOMProperty } from './util';
|
||||
export { utilPreset } from './util';
|
||||
export { utilQsString } from './util';
|
||||
export { utilRebind } from './rebind';
|
||||
export { utilSafeClassName } from './util';
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { remove as removeDiacritics } from 'diacritics';
|
||||
import { fixRTLTextForSvg, rtlRegex } from './svg_paths_rtl_fix';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { t, localizer } from '../core/localizer';
|
||||
import { utilArrayUnion } from './array';
|
||||
import { utilDetect } from './detect';
|
||||
@@ -206,7 +207,7 @@ export function utilDisplayLabel(entity, context) {
|
||||
// use the display name if there is one
|
||||
return displayName;
|
||||
}
|
||||
var preset = utilPreset(entity, context);
|
||||
var preset = presetManager.match(entity, context.graph());
|
||||
if (preset && preset.name()) {
|
||||
// use the preset name if there is a match
|
||||
return preset.name();
|
||||
@@ -216,11 +217,6 @@ export function utilDisplayLabel(entity, context) {
|
||||
}
|
||||
|
||||
|
||||
export function utilPreset(entity, context) {
|
||||
return context.presets().match(entity, context.graph());
|
||||
}
|
||||
|
||||
|
||||
export function utilEntityRoot(entityType) {
|
||||
return {
|
||||
node: 'n',
|
||||
|
||||
@@ -5,13 +5,14 @@ import { actionExtract } from '../actions/extract';
|
||||
import { modeSelect } from '../modes/select';
|
||||
import { osmJoinWays } from '../osm/multipolygon';
|
||||
import { osmNodeGeometriesForTags } from '../osm/tags';
|
||||
import { presetManager } from '../presets';
|
||||
import { geoHasSelfIntersections, geoSphericalDistance } from '../geo';
|
||||
import { t } from '../core/localizer';
|
||||
import { utilDisplayLabel, utilTagText } from '../util';
|
||||
import { validationIssue, validationIssueFix } from '../core/validation';
|
||||
|
||||
|
||||
export function validationMismatchedGeometry(context) {
|
||||
export function validationMismatchedGeometry() {
|
||||
var type = 'mismatched_geometry';
|
||||
|
||||
function tagSuggestingLineIsArea(entity) {
|
||||
@@ -22,8 +23,8 @@ export function validationMismatchedGeometry(context) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var asLine = context.presets().matchTags(tagSuggestingArea, 'line');
|
||||
var asArea = context.presets().matchTags(tagSuggestingArea, 'area');
|
||||
var asLine = presetManager.matchTags(tagSuggestingArea, 'line');
|
||||
var asArea = presetManager.matchTags(tagSuggestingArea, 'area');
|
||||
if (asLine && asArea && (asLine === asArea)) {
|
||||
// these tags also allow lines and making this an area wouldn't matter
|
||||
return null;
|
||||
|
||||
@@ -2,6 +2,7 @@ import { t } from '../core/localizer';
|
||||
import { matcher } from 'name-suggestion-index';
|
||||
import * as countryCoder from '@ideditor/country-coder';
|
||||
|
||||
import { presetManager } from '../presets';
|
||||
import { fileFetcher } from '../core/file_fetcher';
|
||||
import { actionChangePreset } from '../actions/change_preset';
|
||||
import { actionChangeTags } from '../actions/change_tags';
|
||||
@@ -14,7 +15,7 @@ import { validationIssue, validationIssueFix } from '../core/validation';
|
||||
let _dataDeprecated;
|
||||
let _nsi;
|
||||
|
||||
export function validationOutdatedTags(context) {
|
||||
export function validationOutdatedTags() {
|
||||
const type = 'outdated_tags';
|
||||
const nsiKeys = ['amenity', 'shop', 'tourism', 'leisure', 'office'];
|
||||
|
||||
@@ -55,13 +56,13 @@ export function validationOutdatedTags(context) {
|
||||
|
||||
function oldTagIssues(entity, graph) {
|
||||
const oldTags = Object.assign({}, entity.tags); // shallow copy
|
||||
let preset = context.presets().match(entity, graph);
|
||||
let preset = presetManager.match(entity, graph);
|
||||
let subtype = 'deprecated_tags';
|
||||
if (!preset) return [];
|
||||
|
||||
// upgrade preset..
|
||||
if (preset.replacement) {
|
||||
const newPreset = context.presets().item(preset.replacement);
|
||||
const newPreset = presetManager.item(preset.replacement);
|
||||
graph = actionChangePreset(entity.id, preset, newPreset)(graph);
|
||||
entity = graph.entity(entity.id);
|
||||
preset = newPreset;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { fileFetcher } from '../core/file_fetcher';
|
||||
import { localizer } from '../core/localizer';
|
||||
import { t } from '../core/localizer';
|
||||
import { utilPreset } from '../util';
|
||||
import { presetManager } from '../presets';
|
||||
import { validationIssue, validationIssueFix } from '../core/validation';
|
||||
import { actionChangeTags } from '../actions/change_tags';
|
||||
|
||||
@@ -59,7 +59,7 @@ export function validationSuspiciousName() {
|
||||
message: function(context) {
|
||||
let entity = context.hasEntity(this.entityIds[0]);
|
||||
if (!entity) return '';
|
||||
let preset = utilPreset(entity, context);
|
||||
let preset = presetManager.match(entity, context.graph());
|
||||
let langName = langCode && localizer.languageName(langCode);
|
||||
return t('issues.generic_name.message' + (langName ? '_language' : ''),
|
||||
{ feature: preset.name(), name: genericName, language: langName }
|
||||
@@ -105,7 +105,7 @@ export function validationSuspiciousName() {
|
||||
message: function(context) {
|
||||
const entity = context.hasEntity(this.entityIds[0]);
|
||||
if (!entity) return '';
|
||||
const preset = utilPreset(entity, context);
|
||||
const preset = presetManager.match(entity, context.graph());
|
||||
const langName = langCode && localizer.languageName(langCode);
|
||||
return t('issues.incorrect_name.message' + (langName ? '_language' : ''),
|
||||
{ feature: preset.name(), name: incorrectName, language: langName }
|
||||
|
||||
+40
-34
@@ -16,27 +16,27 @@ describe('iD.presetIndex', function () {
|
||||
it('has a fallback point preset', function () {
|
||||
var node = iD.osmNode({ id: 'n' });
|
||||
var graph = iD.coreGraph([node]);
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
expect(presets.match(node, graph).id).to.eql('point');
|
||||
});
|
||||
it('has a fallback line preset', function () {
|
||||
var node = iD.osmNode({ id: 'n' });
|
||||
var way = iD.osmWay({ id: 'w', nodes: ['n'] });
|
||||
var graph = iD.coreGraph([node, way]);
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
expect(presets.match(way, graph).id).to.eql('line');
|
||||
});
|
||||
it('has a fallback area preset', function () {
|
||||
var node = iD.osmNode({ id: 'n' });
|
||||
var way = iD.osmWay({ id: 'w', nodes: ['n'], tags: { area: 'yes' }});
|
||||
var graph = iD.coreGraph([node, way]);
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
expect(presets.match(way, graph).id).to.eql('area');
|
||||
});
|
||||
it('has a fallback relation preset', function () {
|
||||
var relation = iD.osmRelation({ id: 'r' });
|
||||
var graph = iD.coreGraph([relation]);
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
expect(presets.match(relation, graph).id).to.eql('relation');
|
||||
});
|
||||
});
|
||||
@@ -50,7 +50,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('returns a collection containing presets matching a geometry and tags', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
presets.ensureLoaded().then(function() {
|
||||
var way = iD.osmWay({ tags: { highway: 'residential' } });
|
||||
var graph = iD.coreGraph([way]);
|
||||
@@ -61,7 +61,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('returns the appropriate fallback preset when no tags match', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
var point = iD.osmNode();
|
||||
var line = iD.osmWay({ tags: { foo: 'bar' } });
|
||||
var graph = iD.coreGraph([point, line]);
|
||||
@@ -75,7 +75,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('matches vertices on a line as points', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
var point = iD.osmNode({ tags: { leisure: 'park' } });
|
||||
var line = iD.osmWay({ nodes: [point.id], tags: { 'highway': 'residential' } });
|
||||
var graph = iD.coreGraph([point, line]);
|
||||
@@ -88,7 +88,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('matches vertices on an addr:interpolation line as points', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
var point = iD.osmNode({ tags: { leisure: 'park' } });
|
||||
var line = iD.osmWay({ nodes: [point.id], tags: { 'addr:interpolation': 'even' } });
|
||||
var graph = iD.coreGraph([point, line]);
|
||||
@@ -114,7 +114,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('includes keys for presets with area geometry', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
presets.ensureLoaded().then(function() {
|
||||
expect(presets.areaKeys()).to.include.keys('natural');
|
||||
done();
|
||||
@@ -123,7 +123,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('discards key-values for presets with a line geometry', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
presets.ensureLoaded().then(function() {
|
||||
expect(presets.areaKeys().natural).to.include.keys('tree_row');
|
||||
expect(presets.areaKeys().natural.tree_row).to.be.true;
|
||||
@@ -133,7 +133,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('discards key-values for presets with both area and line geometry', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
presets.ensureLoaded().then(function() {
|
||||
expect(presets.areaKeys().leisure).to.include.keys('track');
|
||||
done();
|
||||
@@ -142,7 +142,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('does not discard key-values for presets with neither area nor line geometry', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
presets.ensureLoaded().then(function() {
|
||||
expect(presets.areaKeys().natural).not.to.include.keys('peak');
|
||||
done();
|
||||
@@ -151,7 +151,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('does not discard generic \'*\' key-values', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
presets.ensureLoaded().then(function() {
|
||||
expect(presets.areaKeys().natural).not.to.include.keys('natural');
|
||||
done();
|
||||
@@ -160,7 +160,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('ignores keys like \'highway\' that are assumed to be lines', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
presets.ensureLoaded().then(function() {
|
||||
expect(presets.areaKeys()).not.to.include.keys('highway');
|
||||
done();
|
||||
@@ -169,7 +169,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('ignores suggestion presets', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
presets.ensureLoaded().then(function() {
|
||||
expect(presets.areaKeys()).not.to.include.keys('amenity');
|
||||
done();
|
||||
@@ -180,22 +180,28 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
describe('#addablePresetIDs', function () {
|
||||
it('addablePresetIDs is initially null', function () {
|
||||
var presets = iD.coreContext().init().presets();
|
||||
expect(presets.addablePresetIDs()).to.be.null;
|
||||
var presets = iD.presetIndex();
|
||||
presets.ensureLoaded().then(function() {
|
||||
expect(presets.addablePresetIDs()).to.be.null;
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('can set and get addablePresetIDs', function () {
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var ids = new Set(['point']); // can only add points
|
||||
presets.addablePresetIDs(ids);
|
||||
var presets = iD.presetIndex();
|
||||
presets.ensureLoaded().then(function() {
|
||||
var ids = new Set(['point']); // can only add points
|
||||
presets.addablePresetIDs(ids);
|
||||
|
||||
expect(presets.item('point').addable()).to.be.true;
|
||||
expect(presets.item('line').addable()).to.be.false;
|
||||
expect(presets.addablePresetIDs()).to.eql(ids);
|
||||
expect(presets.item('point').addable()).to.be.true;
|
||||
expect(presets.item('line').addable()).to.be.false;
|
||||
expect(presets.addablePresetIDs()).to.eql(ids);
|
||||
|
||||
presets.addablePresetIDs(null);
|
||||
expect(presets.item('point').addable()).to.be.true;
|
||||
expect(presets.item('line').addable()).to.be.true;
|
||||
presets.addablePresetIDs(null);
|
||||
expect(presets.item('point').addable()).to.be.true;
|
||||
expect(presets.item('line').addable()).to.be.true;
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -204,7 +210,7 @@ describe('iD.presetIndex', function () {
|
||||
it('builds presets from provided', function () {
|
||||
var surfShop = iD.osmNode({ tags: { amenity: 'shop', 'shop:type': 'surf' } });
|
||||
var graph = iD.coreGraph([surfShop]);
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
var presetData = {
|
||||
presets: {
|
||||
'amenity/shop/surf': {
|
||||
@@ -224,7 +230,7 @@ describe('iD.presetIndex', function () {
|
||||
var firstStreetJetty = iD.osmNode({ tags: { man_made: 'jetty' } });
|
||||
var entities = [surfShop, firstStreetJetty];
|
||||
var graph = iD.coreGraph(entities);
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
var presetData = {
|
||||
presets: {
|
||||
'amenity/shop/surf': {
|
||||
@@ -272,7 +278,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('prefers building to multipolygon', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
var relation = iD.osmRelation({ tags: { type: 'multipolygon', building: 'yes' } });
|
||||
var graph = iD.coreGraph([relation]);
|
||||
presets.ensureLoaded().then(function() {
|
||||
@@ -284,7 +290,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('prefers building to address', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
var way = iD.osmWay({ tags: { area: 'yes', building: 'yes', 'addr:housenumber': '1234' } });
|
||||
var graph = iD.coreGraph([way]);
|
||||
presets.ensureLoaded().then(function() {
|
||||
@@ -296,7 +302,7 @@ describe('iD.presetIndex', function () {
|
||||
|
||||
it('prefers pedestrian to area', function (done) {
|
||||
iD.fileFetcher.cache().preset_presets = testPresets;
|
||||
var presets = iD.coreContext().init().presets();
|
||||
var presets = iD.presetIndex();
|
||||
var way = iD.osmWay({ tags: { area: 'yes', highway: 'pedestrian' } });
|
||||
var graph = iD.coreGraph([way]);
|
||||
presets.ensureLoaded().then(function() {
|
||||
@@ -344,13 +350,13 @@ describe('iD.presetIndex', function () {
|
||||
var url = 'https://fakemaprules.io/fake.json';
|
||||
|
||||
// no exernal presets yet
|
||||
expect(iD.coreContext().init().presets().match(surfShop, graph).id).to.eql('point');
|
||||
expect(iD.presetIndex().match(surfShop, graph).id).to.eql('point');
|
||||
|
||||
// reset graph...
|
||||
graph = iD.coreGraph([surfShop]);
|
||||
|
||||
// add the validations query param...
|
||||
iD.coreContext().init().presets().fromExternal(url, function (externalPresets) {
|
||||
iD.presetIndex().fromExternal(url, function (externalPresets) {
|
||||
expect(externalPresets.match(surfShop, graph).id).to.eql('8bc64d6d');
|
||||
});
|
||||
|
||||
@@ -363,7 +369,7 @@ describe('iD.presetIndex', function () {
|
||||
it('makes only the external presets initially addable', function () {
|
||||
var url = 'https://fakemaprules.io/fake.json';
|
||||
|
||||
iD.coreContext().init().presets().fromExternal(url, function(externalPresets) {
|
||||
iD.presetIndex().fromExternal(url, function(externalPresets) {
|
||||
var external = externalPresets.collection.reduce(function(presets, preset) {
|
||||
if (!preset.hasOwnProperty('members') && preset.addable()) {
|
||||
presets.push(preset.id);
|
||||
|
||||
Reference in New Issue
Block a user