Merge pull request #4439 from ferdibiflator/features-api-parameter

add the features api parameter which enables the list of features
This commit is contained in:
Bryan Housel
2017-10-22 10:40:44 -06:00
committed by GitHub
2 changed files with 53 additions and 2 deletions

5
API.md
View File

@@ -34,6 +34,10 @@ in the hash portion of the URL:
_Example:_ `hashtags=%23hotosm-task-592,%23MissingMaps`
* __`rtl=true`__ - Force iD into right-to-left mode (useful for testing).
* __`walkthrough=true`__ - Start the walkthrough automatically
* __`features`__ - Enables features in the list.<br/>
_Example:_ `features=water,service_roads,points,paths`<br/>
_Available features:_ `points` `traffic_roads` `service_roads` `paths` `buildings` `landuse`
`boundaries` `water` `rail` `power` `past_future` `others`
##### iD on openstreetmap.org (Rails Port)
@@ -50,6 +54,7 @@ are available as regular URL query parameters:
* __`comment`__ - same as standalone
* __`hashtags`__ - same as standalone
* __`walkthrough`__ - same as standalone
* __`features`__ - same as standalone
## CSS selectors

View File

@@ -3,11 +3,16 @@ import _groupBy from 'lodash-es/groupBy';
import _reduce from 'lodash-es/reduce';
import _some from 'lodash-es/some';
import _union from 'lodash-es/union';
import _get from 'lodash-es/get';
import { dispatch as d3_dispatch } from 'd3-dispatch';
import { osmEntity } from '../osm';
import { utilRebind } from '../util/rebind';
import {
utilQsString,
utilStringQs
} from '../util';
export function rendererFeatures(context) {
@@ -60,10 +65,19 @@ export function rendererFeatures(context) {
_features = {},
_stats = {},
_keys = [],
_hidden = [];
_hidden = [],
_initFeaturesStr = _get(utilStringQs(window.location.hash.substring(1)), 'features', '').trim();
function update() {
var q = utilStringQs(window.location.hash.substring(1));
q.features = context.features().enabledList();
if (!window.mocha) {
window.location.replace('#' + utilQsString(q, true));
}
_hidden = features.hidden();
dispatch.call('change');
dispatch.call('redraw');
@@ -71,10 +85,16 @@ export function rendererFeatures(context) {
function defineFeature(k, filter, max) {
var isEnabled = true;
if (_initFeaturesStr.length) {
isEnabled = _initFeaturesStr.split(',').some(function(key){ return key === k; });
}
_keys.push(k);
_features[k] = {
filter: filter,
enabled: true, // whether the user wants it enabled..
enabled: isEnabled, // whether the user wants it enabled..
count: 0,
currentMax: (max || Infinity),
defaultMax: (max || Infinity),
@@ -197,6 +217,10 @@ export function rendererFeatures(context) {
return _features[k] && _features[k].enabled;
};
features.enabledList = function () {
return _keys.filter(function(k) { return _features[k].enabled; });
};
features.disabled = function(k) {
if (!arguments.length) {
@@ -229,6 +253,28 @@ export function rendererFeatures(context) {
}
};
features.enableList = function (enabledKeys) {
var keysForToggle = {};
for (var i = 0; i < _keys.length; i++) {
keysForToggle[_keys[i]] = false;
}
for (i = 0; i < enabledKeys.length; i++) {
if (_features[enabledKeys[i]]) {
keysForToggle[enabledKeys[i]] = true;
}
}
for (i = 0; i < _keys.length; i++) {
if (keysForToggle[_keys[i]]) {
_features[_keys[i]].enable();
} else {
_features[_keys[i]].disable();
}
}
};
features.disable = function(k) {
if (_features[k] && _features[k].enabled) {