From b7b5171a2f4ce8497b52719e597d75e3d139f8ee Mon Sep 17 00:00:00 2001 From: Nikita Mashukov Date: Sat, 14 Oct 2017 12:08:12 +0700 Subject: [PATCH 1/6] add features api parameter which enables the list of features --- modules/renderer/features.js | 48 ++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/modules/renderer/features.js b/modules/renderer/features.js index 281e27da4..a5260dd47 100644 --- a/modules/renderer/features.js +++ b/modules/renderer/features.js @@ -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,17 @@ export function rendererFeatures(context) { _features = {}, _stats = {}, _keys = [], - _hidden = []; + _hidden = [], + _initFeatures = _get(utilStringQs(window.location.hash.substring(1)), 'features', '').split(','); function update() { + var q = utilStringQs(window.location.hash.substring(1)); + + q.features = context.features().enabledList(); + + window.location.replace('#' + utilQsString(q, true)); + _hidden = features.hidden(); dispatch.call('change'); dispatch.call('redraw'); @@ -71,10 +83,16 @@ export function rendererFeatures(context) { function defineFeature(k, filter, max) { + var isEnabled = true; + + if (_initFeatures.length) { + isEnabled = _initFeatures.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 +215,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 +251,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) { From 7cd3882cf8acc3036c4febee9907dadc809419bc Mon Sep 17 00:00:00 2001 From: Nikita Mashukov Date: Sat, 14 Oct 2017 17:03:21 +0700 Subject: [PATCH 2/6] missed semicolon is added --- modules/renderer/features.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/renderer/features.js b/modules/renderer/features.js index a5260dd47..ca943e089 100644 --- a/modules/renderer/features.js +++ b/modules/renderer/features.js @@ -3,7 +3,7 @@ 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 _get from 'lodash-es/get'; import { dispatch as d3_dispatch } from 'd3-dispatch'; From 5a980ec24fcb962b7014cc837c08df37a2608ace Mon Sep 17 00:00:00 2001 From: Nikita Mashukov Date: Sat, 14 Oct 2017 17:06:51 +0700 Subject: [PATCH 3/6] tabs are replaced by spaces --- modules/renderer/features.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/renderer/features.js b/modules/renderer/features.js index ca943e089..451411e07 100644 --- a/modules/renderer/features.js +++ b/modules/renderer/features.js @@ -271,7 +271,7 @@ export function rendererFeatures(context) { _features[_keys[i]].disable(); } } - }; + }; features.disable = function(k) { From f92e248e5adb9d23fedcde3abf325abdf28d0e90 Mon Sep 17 00:00:00 2001 From: Nikita Mashukov Date: Sat, 14 Oct 2017 17:41:15 +0700 Subject: [PATCH 4/6] init features logic fix :bug: --- modules/renderer/features.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/renderer/features.js b/modules/renderer/features.js index 451411e07..a4d4d31f0 100644 --- a/modules/renderer/features.js +++ b/modules/renderer/features.js @@ -66,7 +66,7 @@ export function rendererFeatures(context) { _stats = {}, _keys = [], _hidden = [], - _initFeatures = _get(utilStringQs(window.location.hash.substring(1)), 'features', '').split(','); + _initFeaturesStr = _get(utilStringQs(window.location.hash.substring(1)), 'features', '').trim(); function update() { @@ -74,7 +74,9 @@ export function rendererFeatures(context) { q.features = context.features().enabledList(); - window.location.replace('#' + utilQsString(q, true)); + if (!window.mocha) { + window.location.replace('#' + utilQsString(q, true)); + } _hidden = features.hidden(); dispatch.call('change'); @@ -85,8 +87,8 @@ export function rendererFeatures(context) { function defineFeature(k, filter, max) { var isEnabled = true; - if (_initFeatures.length) { - isEnabled = _initFeatures.some(function(key){ return key === k; }); + if (_initFeaturesStr.length) { + isEnabled = _initFeaturesStr.split(',').some(function(key){ return key === k; }); } _keys.push(k); From bac4da5abeaf22d4855081c3fb0dccf0ec29e4fa Mon Sep 17 00:00:00 2001 From: Nikita Mashukov Date: Sat, 14 Oct 2017 17:46:29 +0700 Subject: [PATCH 5/6] using spaces instead tabs --- modules/renderer/features.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/renderer/features.js b/modules/renderer/features.js index a4d4d31f0..23f58b94c 100644 --- a/modules/renderer/features.js +++ b/modules/renderer/features.js @@ -219,7 +219,7 @@ export function rendererFeatures(context) { features.enabledList = function () { return _keys.filter(function(k) { return _features[k].enabled; }); - }; + }; features.disabled = function(k) { From 718383d05cffdb453fcc9ac6883dc9dae2173d56 Mon Sep 17 00:00:00 2001 From: Nikita Mashukov Date: Mon, 16 Oct 2017 00:10:32 +0700 Subject: [PATCH 6/6] `features` api parameter description is added :memo: --- API.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/API.md b/API.md index 3a506b020..9263c1831 100644 --- a/API.md +++ b/API.md @@ -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.
+ _Example:_ `features=water,service_roads,points,paths`
+ _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