diff --git a/.eslintrc b/.eslintrc
index e8bdcb6be..b559e6687 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -52,7 +52,7 @@
"globals": {
"d3": false,
- "iD": false,
+ # "iD": false,
"_": false,
"t": false,
"bootstrap": false,
diff --git a/Makefile b/Makefile
index 3d58b4244..53294aae3 100644
--- a/Makefile
+++ b/Makefile
@@ -48,13 +48,10 @@ MODULE_TARGETS = \
js/lib/id/presets.js \
js/lib/id/renderer.js \
js/lib/id/services.js \
- js/lib/id/ui/intro.js \
- js/lib/id/svg.js \
js/lib/id/ui/index.js \
js/lib/id/ui/core.js \
js/lib/id/ui/intro.js \
js/lib/id/ui/preset.js \
- js/lib/id/util.js \
js/lib/id/validations.js
js/lib/id/index.js: $(shell find modules/index.js -type f)
@@ -97,10 +94,6 @@ js/lib/id/ui/preset.js: $(shell find modules/ui/preset -type f)
@rm -f $@
node_modules/.bin/rollup -f umd -n iD.ui.preset modules/ui/preset/index.js --no-strict -o $@
-js/lib/id/util.js: $(shell find modules/util -type f)
- @rm -f $@
- node_modules/.bin/rollup -f umd -n iD.util modules/util/index.js --no-strict -o $@
-
js/lib/id/validations.js: $(shell find modules/validations -type f)
@rm -f $@
node_modules/.bin/rollup -f umd -n iD.validations modules/validations/index.js --no-strict -o $@
diff --git a/index.html b/index.html
index 83365f505..adfa1485e 100644
--- a/index.html
+++ b/index.html
@@ -41,8 +41,6 @@
-
-
diff --git a/js/lib/id/index.js b/js/lib/id/index.js
index bf3ff7455..c8b5b2d41 100644
--- a/js/lib/id/index.js
+++ b/js/lib/id/index.js
@@ -1571,8 +1571,17 @@
return difference;
}
+<<<<<<< HEAD
<<<<<<< HEAD
=======
+=======
+ function tagText(entity) {
+ return d3.entries(entity.tags).map(function(e) {
+ return e.key + '=' + e.value;
+ }).join(', ');
+ }
+
+>>>>>>> 42ce4cf... external modules for util
function entitySelector(ids) {
return ids.length ? '.' + ids.join(',.') : 'nothing';
}
@@ -1683,9 +1692,65 @@
}
}
+<<<<<<< HEAD
>>>>>>> ef619c2... external modules for behavior
+=======
+ function editDistance(a, b) {
+ if (a.length === 0) return b.length;
+ if (b.length === 0) return a.length;
+ var matrix = [];
+ for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; }
+ for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; }
+ for (i = 1; i <= b.length; i++) {
+ for (j = 1; j <= a.length; j++) {
+ if (b.charAt(i-1) === a.charAt(j-1)) {
+ matrix[i][j] = matrix[i-1][j-1];
+ } else {
+ matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution
+ Math.min(matrix[i][j-1] + 1, // insertion
+ matrix[i-1][j] + 1)); // deletion
+ }
+ }
+ }
+ return matrix[b.length][a.length];
+ }
+
+ // a d3.mouse-alike which
+ // 1. Only works on HTML elements, not SVG
+ // 2. Does not cause style recalculation
+ function fastMouse(container) {
+ var rect = container.getBoundingClientRect(),
+ rectLeft = rect.left,
+ rectTop = rect.top,
+ clientLeft = +container.clientLeft,
+ clientTop = +container.clientTop;
+ return function(e) {
+ return [
+ e.clientX - rectLeft - clientLeft,
+ e.clientY - rectTop - clientTop];
+ };
+ }
+
+>>>>>>> 42ce4cf... external modules for util
/* eslint-disable no-proto */
var getPrototypeOf = Object.getPrototypeOf || function(obj) { return obj.__proto__; };
+ /* eslint-enable no-proto */
+
+ function asyncMap(inputs, func, callback) {
+ var remaining = inputs.length,
+ results = [],
+ errors = [];
+
+ inputs.forEach(function(d, i) {
+ func(d, function done(err, data) {
+ errors[i] = err;
+ results[i] = data;
+ remaining--;
+ if (!remaining) callback(errors, results);
+ });
+ });
+ }
+
// wraps an index to an interval [0..length-1]
function Wrap(index, length) {
if (index < 0)
@@ -1730,6 +1795,58 @@
return mutex;
}
+ function SuggestNames(preset, suggestions) {
+ preset = preset.id.split('/', 2);
+ var k = preset[0],
+ v = preset[1];
+
+ return function(value, callback) {
+ var result = [];
+ if (value && value.length > 2) {
+ if (suggestions[k] && suggestions[k][v]) {
+ for (var sugg in suggestions[k][v]) {
+ var dist = editDistance(value, sugg.substring(0, value.length));
+ if (dist < 3) {
+ result.push({
+ title: sugg,
+ value: sugg,
+ dist: dist
+ });
+ }
+ }
+ }
+ result.sort(function(a, b) {
+ return a.dist - b.dist;
+ });
+ }
+ result = result.slice(0,3);
+ callback(result);
+ };
+ }
+
+
+
+ var util = Object.freeze({
+ tagText: tagText,
+ entitySelector: entitySelector,
+ entityOrMemberSelector: entityOrMemberSelector,
+ displayName: displayName,
+ displayType: displayType,
+ stringQs: stringQs,
+ qsString: qsString,
+ prefixDOMProperty: prefixDOMProperty,
+ prefixCSSProperty: prefixCSSProperty,
+ setTransform: setTransform,
+ getStyle: getStyle,
+ editDistance: editDistance,
+ fastMouse: fastMouse,
+ getPrototypeOf: getPrototypeOf,
+ asyncMap: asyncMap,
+ wrap: Wrap,
+ SessionMutex: SessionMutex,
+ SuggestNames: SuggestNames
+ });
+
function Graph(other, mutable) {
if (!(this instanceof Graph)) return new Graph(other, mutable);
@@ -12255,7 +12372,11 @@
>>>>>>> ef619c2... external modules for behavior
=======
exports.modes = modes;
+<<<<<<< HEAD
>>>>>>> 75901f6... external modules for modes
+=======
+ exports.util = util;
+>>>>>>> 42ce4cf... external modules for util
exports.Connection = Connection;
exports.Difference = Difference;
exports.Entity = Entity;
diff --git a/modules/index.js b/modules/index.js
index 4ab67166b..45a40edd2 100644
--- a/modules/index.js
+++ b/modules/index.js
@@ -2,6 +2,7 @@ import * as actions from './actions/index';
import * as geo from './geo/index';
import * as behavior from './behavior/index';
import * as modes from './modes/index';
+import * as util from './util/index';
export { Connection } from './core/connection';
export { Difference } from './core/difference';
@@ -18,5 +19,6 @@ export {
actions,
geo,
behavior,
- modes
+ modes,
+ util
};
diff --git a/modules/util/suggest_names.js b/modules/util/suggest_names.js
index a667c3a7f..8de075437 100644
--- a/modules/util/suggest_names.js
+++ b/modules/util/suggest_names.js
@@ -1,3 +1,5 @@
+import { editDistance } from './util';
+
export function SuggestNames(preset, suggestions) {
preset = preset.id.split('/', 2);
var k = preset[0],
@@ -8,7 +10,7 @@ export function SuggestNames(preset, suggestions) {
if (value && value.length > 2) {
if (suggestions[k] && suggestions[k][v]) {
for (var sugg in suggestions[k][v]) {
- var dist = iD.util.editDistance(value, sugg.substring(0, value.length));
+ var dist = editDistance(value, sugg.substring(0, value.length));
if (dist < 3) {
result.push({
title: sugg,
diff --git a/test/index.html b/test/index.html
index 59d9bd63c..76b623e94 100644
--- a/test/index.html
+++ b/test/index.html
@@ -46,8 +46,6 @@
-
-